From 963a8d953a04cfc4afc751cb79e48f05519c60a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A1bio=20Sousa?= Date: Fri, 24 Oct 2025 13:43:13 +0100 Subject: [PATCH 1/9] Added server inventory UI Fix Improve tolltip box Added Item Icons and Consumption fix UI reword UI reword --- Nakama+Hiro/.cookie | Bin 0 -> 16 bytes Nakama+Hiro/.gitignore | 1 + Nakama+Hiro/.idea/.gitignore | 8 + Nakama+Hiro/.idea/Nakama.iml | 9 + Nakama+Hiro/.idea/encodings.xml | 4 + Nakama+Hiro/.idea/modules.xml | 8 + Nakama+Hiro/.idea/vcs.xml | 7 + Nakama+Hiro/Dockerfile | 18 + .../definitions/dev1/base-challenges.json | 203 + .../definitions/dev1/base-economy.json | 8 + .../definitions/dev1/base-inventory.json | 106 + Nakama+Hiro/definitions/dev1/base-system.json | 2 + Nakama+Hiro/docker-compose.yml | 51 + Nakama+Hiro/go.mod | 10 + Nakama+Hiro/go.sum | 10 + Nakama+Hiro/lib/.gitignore | 2 + Nakama+Hiro/main.go | 102 + .../github.com/heroiclabs/hiro/.editorconfig | 10 + .../github.com/heroiclabs/hiro/.gitignore | 3 + .../github.com/heroiclabs/hiro/.golangci.yml | 15 + .../github.com/heroiclabs/hiro/CHANGELOG.md | 571 + .../vendor/github.com/heroiclabs/hiro/LICENSE | 202 + .../github.com/heroiclabs/hiro/README.md | 72 + .../heroiclabs/hiro/achievements.go | 86 + .../github.com/heroiclabs/hiro/auctions.go | 132 + .../vendor/github.com/heroiclabs/hiro/base.go | 432 + .../github.com/heroiclabs/hiro/buf.gen.yaml | 8 + .../github.com/heroiclabs/hiro/buf.yaml | 16 + .../github.com/heroiclabs/hiro/challenge.go | 77 + .../github.com/heroiclabs/hiro/economy.go | 295 + .../github.com/heroiclabs/hiro/energy.go | 57 + .../heroiclabs/hiro/event_leaderboards.go | 109 + .../heroiclabs/hiro/hiro-openapi.yml | 6570 ++++ .../github.com/heroiclabs/hiro/hiro.pb.go | 29196 ++++++++++++++++ .../github.com/heroiclabs/hiro/hiro.proto | 3560 ++ .../github.com/heroiclabs/hiro/incentives.go | 62 + .../github.com/heroiclabs/hiro/inventory.go | 80 + .../heroiclabs/hiro/leaderboards.go | 46 + .../heroiclabs/hiro/personalizer.go | 29 + .../heroiclabs/hiro/personalizer_satori.go | 643 + .../heroiclabs/hiro/personalizer_storage.go | 407 + .../hiro/personalizer_storage_nakama.json | 128 + .../github.com/heroiclabs/hiro/progression.go | 63 + .../github.com/heroiclabs/hiro/publisher.go | 55 + .../heroiclabs/hiro/reward_mailbox.go | 50 + .../github.com/heroiclabs/hiro/stats.go | 43 + .../github.com/heroiclabs/hiro/streaks.go | 69 + .../github.com/heroiclabs/hiro/teams.go | 276 + .../github.com/heroiclabs/hiro/tools.go | 21 + .../github.com/heroiclabs/hiro/tutorials.go | 58 + .../github.com/heroiclabs/hiro/unlockables.go | 99 + .../heroiclabs/nakama-common/LICENSE | 202 + .../heroiclabs/nakama-common/api/api.pb.go | 12370 +++++++ .../heroiclabs/nakama-common/api/api.proto | 1458 + .../heroiclabs/nakama-common/api/build.go | 17 + .../heroiclabs/nakama-common/rtapi/build.go | 17 + .../nakama-common/rtapi/realtime.pb.go | 6118 ++++ .../nakama-common/rtapi/realtime.proto | 690 + .../nakama-common/runtime/config.go | 128 + .../nakama-common/runtime/runtime.go | 2005 ++ .../vendor/google.golang.org/protobuf/LICENSE | 27 + .../vendor/google.golang.org/protobuf/PATENTS | 22 + .../cmd/protoc-gen-go/internal_gengo/init.go | 167 + .../internal_gengo/init_opaque.go | 33 + .../cmd/protoc-gen-go/internal_gengo/main.go | 932 + .../protoc-gen-go/internal_gengo/opaque.go | 1218 + .../protoc-gen-go/internal_gengo/reflect.go | 361 + .../internal_gengo/well_known_types.go | 1094 + .../protobuf/cmd/protoc-gen-go/main.go | 60 + .../protobuf/compiler/protogen/protogen.go | 1567 + .../compiler/protogen/protogen_apilevel.go | 173 + .../compiler/protogen/protogen_opaque.go | 110 + .../protobuf/encoding/protojson/decode.go | 680 + .../protobuf/encoding/protojson/doc.go | 11 + .../protobuf/encoding/protojson/encode.go | 380 + .../encoding/protojson/well_known_types.go | 880 + .../protobuf/encoding/prototext/decode.go | 767 + .../protobuf/encoding/prototext/doc.go | 7 + .../protobuf/encoding/prototext/encode.go | 380 + .../protobuf/encoding/protowire/wire.go | 571 + .../protobuf/internal/descfmt/stringer.go | 414 + .../protobuf/internal/descopts/options.go | 29 + .../protobuf/internal/detrand/rand.go | 69 + .../internal/editiondefaults/defaults.go | 12 + .../editiondefaults/editions_defaults.binpb | Bin 0 -> 154 bytes .../internal/editionssupport/editions.go | 18 + .../internal/encoding/defval/default.go | 213 + .../protobuf/internal/encoding/json/decode.go | 340 + .../internal/encoding/json/decode_number.go | 254 + .../internal/encoding/json/decode_string.go | 91 + .../internal/encoding/json/decode_token.go | 192 + .../protobuf/internal/encoding/json/encode.go | 278 + .../encoding/messageset/messageset.go | 242 + .../protobuf/internal/encoding/tag/tag.go | 201 + .../protobuf/internal/encoding/text/decode.go | 686 + .../internal/encoding/text/decode_number.go | 211 + .../internal/encoding/text/decode_string.go | 161 + .../internal/encoding/text/decode_token.go | 373 + .../protobuf/internal/encoding/text/doc.go | 29 + .../protobuf/internal/encoding/text/encode.go | 272 + .../protobuf/internal/errors/errors.go | 104 + .../protobuf/internal/filedesc/build.go | 157 + .../protobuf/internal/filedesc/desc.go | 748 + .../protobuf/internal/filedesc/desc_init.go | 560 + .../protobuf/internal/filedesc/desc_lazy.go | 694 + .../protobuf/internal/filedesc/desc_list.go | 457 + .../internal/filedesc/desc_list_gen.go | 367 + .../protobuf/internal/filedesc/editions.go | 170 + .../protobuf/internal/filedesc/placeholder.go | 110 + .../protobuf/internal/filedesc/presence.go | 33 + .../protobuf/internal/filetype/build.go | 296 + .../protobuf/internal/flags/flags.go | 24 + .../internal/flags/proto_legacy_disable.go | 10 + .../internal/flags/proto_legacy_enable.go | 10 + .../protobuf/internal/genid/any_gen.go | 34 + .../protobuf/internal/genid/api_gen.go | 112 + .../protobuf/internal/genid/descriptor_gen.go | 1332 + .../protobuf/internal/genid/doc.go | 11 + .../protobuf/internal/genid/duration_gen.go | 34 + .../protobuf/internal/genid/empty_gen.go | 19 + .../protobuf/internal/genid/field_mask_gen.go | 31 + .../internal/genid/go_features_gen.go | 70 + .../protobuf/internal/genid/goname.go | 20 + .../protobuf/internal/genid/map_entry.go | 16 + .../protobuf/internal/genid/name.go | 12 + .../internal/genid/source_context_gen.go | 31 + .../protobuf/internal/genid/struct_gen.go | 121 + .../protobuf/internal/genid/timestamp_gen.go | 34 + .../protobuf/internal/genid/type_gen.go | 228 + .../protobuf/internal/genid/wrappers.go | 13 + .../protobuf/internal/genid/wrappers_gen.go | 175 + .../protobuf/internal/impl/api_export.go | 177 + .../internal/impl/api_export_opaque.go | 128 + .../protobuf/internal/impl/bitmap.go | 34 + .../protobuf/internal/impl/bitmap_race.go | 126 + .../protobuf/internal/impl/checkinit.go | 174 + .../protobuf/internal/impl/codec_extension.go | 228 + .../protobuf/internal/impl/codec_field.go | 788 + .../internal/impl/codec_field_opaque.go | 264 + .../protobuf/internal/impl/codec_gen.go | 5724 +++ .../protobuf/internal/impl/codec_map.go | 399 + .../protobuf/internal/impl/codec_message.go | 230 + .../internal/impl/codec_message_opaque.go | 154 + .../internal/impl/codec_messageset.go | 145 + .../protobuf/internal/impl/codec_tables.go | 557 + .../protobuf/internal/impl/codec_unsafe.go | 15 + .../protobuf/internal/impl/convert.go | 495 + .../protobuf/internal/impl/convert_list.go | 141 + .../protobuf/internal/impl/convert_map.go | 121 + .../protobuf/internal/impl/decode.go | 333 + .../protobuf/internal/impl/encode.go | 315 + .../protobuf/internal/impl/enum.go | 21 + .../protobuf/internal/impl/equal.go | 224 + .../protobuf/internal/impl/extension.go | 156 + .../protobuf/internal/impl/lazy.go | 433 + .../protobuf/internal/impl/legacy_enum.go | 219 + .../protobuf/internal/impl/legacy_export.go | 92 + .../internal/impl/legacy_extension.go | 177 + .../protobuf/internal/impl/legacy_file.go | 81 + .../protobuf/internal/impl/legacy_message.go | 569 + .../protobuf/internal/impl/merge.go | 203 + .../protobuf/internal/impl/merge_gen.go | 209 + .../protobuf/internal/impl/message.go | 283 + .../protobuf/internal/impl/message_opaque.go | 598 + .../internal/impl/message_opaque_gen.go | 132 + .../protobuf/internal/impl/message_reflect.go | 462 + .../internal/impl/message_reflect_field.go | 423 + .../impl/message_reflect_field_gen.go | 273 + .../internal/impl/message_reflect_gen.go | 271 + .../protobuf/internal/impl/pointer_unsafe.go | 220 + .../internal/impl/pointer_unsafe_opaque.go | 42 + .../protobuf/internal/impl/presence.go | 139 + .../protobuf/internal/impl/validate.go | 570 + .../protobuf/internal/msgfmt/format.go | 261 + .../protobuf/internal/order/order.go | 89 + .../protobuf/internal/order/range.go | 115 + .../protobuf/internal/pragma/pragma.go | 29 + .../internal/protolazy/bufferreader.go | 364 + .../protobuf/internal/protolazy/lazy.go | 359 + .../internal/protolazy/pointer_unsafe.go | 17 + .../protobuf/internal/set/ints.go | 58 + .../protobuf/internal/strs/strings.go | 196 + .../protobuf/internal/strs/strings_unsafe.go | 71 + .../protobuf/internal/version/version.go | 79 + .../protobuf/proto/checkinit.go | 71 + .../protobuf/proto/decode.go | 307 + .../protobuf/proto/decode_gen.go | 603 + .../google.golang.org/protobuf/proto/doc.go | 86 + .../protobuf/proto/encode.go | 355 + .../protobuf/proto/encode_gen.go | 97 + .../google.golang.org/protobuf/proto/equal.go | 66 + .../protobuf/proto/extension.go | 166 + .../google.golang.org/protobuf/proto/merge.go | 145 + .../protobuf/proto/messageset.go | 98 + .../google.golang.org/protobuf/proto/proto.go | 45 + .../protobuf/proto/proto_methods.go | 20 + .../protobuf/proto/proto_reflect.go | 20 + .../google.golang.org/protobuf/proto/reset.go | 43 + .../google.golang.org/protobuf/proto/size.go | 111 + .../protobuf/proto/size_gen.go | 55 + .../protobuf/proto/wrapperopaque.go | 80 + .../protobuf/proto/wrappers.go | 29 + .../protobuf/reflect/protodesc/desc.go | 286 + .../protobuf/reflect/protodesc/desc_init.go | 288 + .../reflect/protodesc/desc_resolve.go | 291 + .../reflect/protodesc/desc_validate.go | 359 + .../protobuf/reflect/protodesc/editions.go | 181 + .../protobuf/reflect/protodesc/proto.go | 271 + .../protobuf/reflect/protopath/path.go | 122 + .../protobuf/reflect/protopath/step.go | 241 + .../protobuf/reflect/protorange/range.go | 316 + .../protobuf/reflect/protoreflect/methods.go | 88 + .../protobuf/reflect/protoreflect/proto.go | 513 + .../protobuf/reflect/protoreflect/source.go | 129 + .../reflect/protoreflect/source_gen.go | 583 + .../protobuf/reflect/protoreflect/type.go | 666 + .../protobuf/reflect/protoreflect/value.go | 285 + .../reflect/protoreflect/value_equal.go | 168 + .../reflect/protoreflect/value_union.go | 438 + .../reflect/protoreflect/value_unsafe.go | 84 + .../reflect/protoregistry/registry.go | 882 + .../protobuf/runtime/protoiface/legacy.go | 15 + .../protobuf/runtime/protoiface/methods.go | 202 + .../protobuf/runtime/protoimpl/impl.go | 48 + .../protobuf/runtime/protoimpl/version.go | 60 + .../types/descriptorpb/descriptor.pb.go | 5238 +++ .../protobuf/types/dynamicpb/dynamic.go | 718 + .../protobuf/types/dynamicpb/types.go | 180 + .../types/gofeaturespb/go_features.pb.go | 311 + .../types/known/structpb/struct.pb.go | 767 + .../types/known/timestamppb/timestamp.pb.go | 355 + .../types/known/wrapperspb/wrappers.pb.go | 648 + .../protobuf/types/pluginpb/plugin.pb.go | 583 + Nakama+Hiro/vendor/modules.txt | 54 + UnityHiroInventory/.gitignore | 56 + .../Assets/UnityHiroInventory.meta | 8 + .../Assets/UnityHiroInventory/Editor.meta | 8 + .../Editor/AccountSwitcher.cs | 205 + .../Editor/AccountSwitcher.cs.meta | 13 + .../Editor/AccountSwitcher.uxml | 12 + .../Editor/AccountSwitcher.uxml.meta | 10 + .../Editor/TutorialInfo.meta | 8 + .../Editor/TutorialInfo/Icons.meta | 9 + .../Editor/TutorialInfo/Icons/HeroicLabs.png | Bin 0 -> 22488 bytes .../TutorialInfo/Icons/HeroicLabs.png.meta | 156 + .../Editor/TutorialInfo/Layout.wlt | 654 + .../Editor/TutorialInfo/Layout.wlt.meta | 8 + .../Editor/TutorialInfo/Scripts.meta | 9 + .../Editor/TutorialInfo/Scripts/Editor.meta | 9 + .../Scripts/Editor/ReadmeEditor.cs | 186 + .../Scripts/Editor/ReadmeEditor.cs.meta | 12 + .../Editor/TutorialInfo/Scripts/Readme.cs | 19 + .../TutorialInfo/Scripts/Readme.cs.meta | 12 + .../Assets/UnityHiroInventory/HeroicUI.meta | 8 + .../UnityHiroInventory/HeroicUI/Avatar.meta | 8 + .../Avatar/avatar_circle_colored_default.png | Bin 0 -> 1383 bytes .../avatar_circle_colored_default.png.meta | 156 + .../Avatar/avatar_circle_colored_violet.png | Bin 0 -> 1387 bytes .../avatar_circle_colored_violet.png.meta | 156 + .../Avatar/avatar_circle_icon_violet.png | Bin 0 -> 1290 bytes .../Avatar/avatar_circle_icon_violet.png.meta | 156 + .../Avatar/avatar_circle_icon_white.png | Bin 0 -> 1216 bytes .../Avatar/avatar_circle_icon_white.png.meta | 156 + .../Avatar/avatar_circle_merged_icon.png | Bin 0 -> 2397 bytes .../Avatar/avatar_circle_merged_icon.png.meta | 156 + .../HeroicUI/Avatar/avatar_circle_white.png | Bin 0 -> 1280 bytes .../Avatar/avatar_circle_white.png.meta | 156 + .../Avatar/avatar_square_icon_violet.png | Bin 0 -> 2497 bytes .../Avatar/avatar_square_icon_violet.png.meta | 156 + .../Avatar/avatar_square_icon_withe.png | Bin 0 -> 2503 bytes .../Avatar/avatar_square_icon_withe.png.meta | 156 + .../avatar_square_merged_bg_default.png | Bin 0 -> 1988 bytes .../avatar_square_merged_bg_default.png.meta | 156 + .../Avatar/avatar_square_merged_bg_violet.png | Bin 0 -> 2186 bytes .../avatar_square_merged_bg_violet.png.meta | 156 + .../Avatar/avatar_square_merged_icon.png | Bin 0 -> 4323 bytes .../Avatar/avatar_square_merged_icon.png.meta | 156 + .../Avatar/avatar_square_white_bg.png | Bin 0 -> 1557 bytes .../Avatar/avatar_square_white_bg.png.meta | 156 + .../Avatar/avatar_square_white_innerbg.png | Bin 0 -> 817 bytes .../avatar_square_white_innerbg.png.meta | 156 + .../HeroicUI/Background.meta | 8 + .../Background/bg_rounded_flat_blue.png | Bin 0 -> 597 bytes .../Background/bg_rounded_flat_blue.png.meta | 156 + .../Background/bg_rounded_flat_coral.png | Bin 0 -> 600 bytes .../Background/bg_rounded_flat_coral.png.meta | 156 + .../Background/bg_rounded_flat_gray.png | Bin 0 -> 587 bytes .../Background/bg_rounded_flat_gray.png.meta | 156 + .../Background/bg_rounded_flat_pink.png | Bin 0 -> 586 bytes .../Background/bg_rounded_flat_pink.png.meta | 156 + .../Background/bg_rounded_flat_sky.png | Bin 0 -> 586 bytes .../Background/bg_rounded_flat_sky.png.meta | 156 + .../Background/bg_rounded_gradient_blue.png | Bin 0 -> 908 bytes .../bg_rounded_gradient_blue.png.meta | 156 + .../Background/bg_rounded_gradient_coral.png | Bin 0 -> 946 bytes .../bg_rounded_gradient_coral.png.meta | 156 + .../Background/bg_rounded_gradient_gray.png | Bin 0 -> 899 bytes .../bg_rounded_gradient_gray.png.meta | 156 + .../Background/bg_rounded_gradient_pink.png | Bin 0 -> 907 bytes .../bg_rounded_gradient_pink.png.meta | 156 + .../Background/bg_rounded_gradient_sky.png | Bin 0 -> 935 bytes .../bg_rounded_gradient_sky.png.meta | 156 + .../Background/bg_rounded_white_bg.png | Bin 0 -> 576 bytes .../Background/bg_rounded_white_bg.png.meta | 156 + .../Background/bg_rounded_white_gradient.png | Bin 0 -> 807 bytes .../bg_rounded_white_gradient.png.meta | 156 + .../Background/bg_square_flat_blue.png | Bin 0 -> 149 bytes .../Background/bg_square_flat_blue.png.meta | 156 + .../Background/bg_square_flat_coral.png | Bin 0 -> 148 bytes .../Background/bg_square_flat_coral.png.meta | 156 + .../Background/bg_square_flat_gray.png | Bin 0 -> 151 bytes .../Background/bg_square_flat_gray.png.meta | 156 + .../Background/bg_square_flat_pink.png | Bin 0 -> 151 bytes .../Background/bg_square_flat_pink.png.meta | 156 + .../Background/bg_square_flat_sky.png | Bin 0 -> 151 bytes .../Background/bg_square_flat_sky.png.meta | 156 + .../Background/bg_square_gradient_blue.png | Bin 0 -> 387 bytes .../bg_square_gradient_blue.png.meta | 156 + .../Background/bg_square_gradient_coral.png | Bin 0 -> 424 bytes .../bg_square_gradient_coral.png.meta | 156 + .../Background/bg_square_gradient_gray.png | Bin 0 -> 385 bytes .../bg_square_gradient_gray.png.meta | 156 + .../Background/bg_square_gradient_pink.png | Bin 0 -> 396 bytes .../bg_square_gradient_pink.png.meta | 156 + .../Background/bg_square_gradient_sky.png | Bin 0 -> 435 bytes .../bg_square_gradient_sky.png.meta | 156 + .../Background/bg_square_white_bg.png | Bin 0 -> 147 bytes .../Background/bg_square_white_bg.png.meta | 156 + .../Background/bg_square_white_gradient.png | Bin 0 -> 417 bytes .../bg_square_white_gradient.png.meta | 156 + .../UnityHiroInventory/HeroicUI/Badge.meta | 8 + .../HeroicUI/Badge/badge_circle_red.png | Bin 0 -> 685 bytes .../HeroicUI/Badge/badge_circle_red.png.meta | 156 + .../HeroicUI/Badge/badge_circle_white.png | Bin 0 -> 596 bytes .../Badge/badge_circle_white.png.meta | 156 + .../HeroicUI/Badge/badge_dot_red.png | Bin 0 -> 344 bytes .../HeroicUI/Badge/badge_dot_red.png.meta | 156 + .../HeroicUI/Badge/badge_dot_white.png | Bin 0 -> 315 bytes .../HeroicUI/Badge/badge_dot_white.png.meta | 156 + .../UnityHiroInventory/HeroicUI/Button.meta | 8 + .../button_circle_h40_colored_bg_violet.png | Bin 0 -> 683 bytes ...tton_circle_h40_colored_bg_violet.png.meta | 156 + .../button_circle_h40_colored_border_gray.png | Bin 0 -> 1035 bytes ...on_circle_h40_colored_border_gray.png.meta | 156 + .../button_circle_h40_merged_icon_help_01.png | Bin 0 -> 1327 bytes ...on_circle_h40_merged_icon_help_01.png.meta | 156 + .../button_circle_h40_merged_icon_help_02.png | Bin 0 -> 1159 bytes ...on_circle_h40_merged_icon_help_02.png.meta | 156 + .../button_circle_h40_merged_icon_info_01.png | Bin 0 -> 1215 bytes ...on_circle_h40_merged_icon_info_01.png.meta | 156 + .../button_circle_h40_merged_icon_info_02.png | Bin 0 -> 972 bytes ...on_circle_h40_merged_icon_info_02.png.meta | 156 + .../Button/button_circle_h40_white_bg.png | Bin 0 -> 606 bytes .../button_circle_h40_white_bg.png.meta | 156 + .../Button/button_circle_h40_white_border.png | Bin 0 -> 843 bytes .../button_circle_h40_white_border.png.meta | 156 + .../Button/button_circle_h56_merged_bg.png | Bin 0 -> 1801 bytes .../button_circle_h56_merged_bg.png.meta | 156 + .../button_circle_h56_merged_icon_delete.png | Bin 0 -> 2155 bytes ...ton_circle_h56_merged_icon_delete.png.meta | 156 + .../button_circle_h56_merged_icon_edit.png | Bin 0 -> 2427 bytes ...utton_circle_h56_merged_icon_edit.png.meta | 156 + .../Button/button_circle_h56_white_bg.png | Bin 0 -> 928 bytes .../button_circle_h56_white_bg.png.meta | 156 + .../Button/button_circle_h56_white_border.png | Bin 0 -> 1242 bytes .../button_circle_h56_white_border.png.meta | 156 + .../Button/button_circle_h60_colored_dark.png | Bin 0 -> 997 bytes .../button_circle_h60_colored_dark.png.meta | 156 + .../Button/button_circle_h60_colored_mint.png | Bin 0 -> 998 bytes .../button_circle_h60_colored_mint.png.meta | 156 + .../Button/button_circle_h60_colored_red.png | Bin 0 -> 997 bytes .../button_circle_h60_colored_red.png.meta | 156 + .../button_circle_h60_colored_violet.png | Bin 0 -> 1002 bytes .../button_circle_h60_colored_violet.png.meta | 156 + .../button_circle_h60_merged_icon_cancle.png | Bin 0 -> 1545 bytes ...ton_circle_h60_merged_icon_cancle.png.meta | 156 + ...on_circle_h60_merged_icon_checked_dark.png | Bin 0 -> 1775 bytes ...rcle_h60_merged_icon_checked_dark.png.meta | 156 + ...on_circle_h60_merged_icon_checked_mint.png | Bin 0 -> 1683 bytes ...rcle_h60_merged_icon_checked_mint.png.meta | 156 + ..._circle_h60_merged_icon_checked_violet.png | Bin 0 -> 1664 bytes ...le_h60_merged_icon_checked_violet.png.meta | 156 + .../Button/button_circle_h60_white_bg.png | Bin 0 -> 942 bytes .../button_circle_h60_white_bg.png.meta | 156 + .../button_circle_h64_merged_icon_close.png | Bin 0 -> 2406 bytes ...tton_circle_h64_merged_icon_close.png.meta | 156 + .../Button/button_circle_h64_white.png | Bin 0 -> 1015 bytes .../Button/button_circle_h64_white.png.meta | 156 + .../Button/button_circle_h64_white_shadow.png | Bin 0 -> 1822 bytes .../button_circle_h64_white_shadow.png.meta | 156 + ...on_circle_h70_colored_transparent_gray.png | Bin 0 -> 878 bytes ...rcle_h70_colored_transparent_gray.png.meta | 156 + .../button_circle_h70_merged_icon_emoji.png | Bin 0 -> 2524 bytes ...tton_circle_h70_merged_icon_emoji.png.meta | 156 + .../button_circle_h70_merged_icon_menu.png | Bin 0 -> 2118 bytes ...utton_circle_h70_merged_icon_menu.png.meta | 156 + .../button_circle_h70_merged_icon_search.png | Bin 0 -> 3222 bytes ...ton_circle_h70_merged_icon_search.png.meta | 156 + .../button_circle_h70_merged_icon_setting.png | Bin 0 -> 2825 bytes ...on_circle_h70_merged_icon_setting.png.meta | 156 + .../Button/button_circle_h70_white.png | Bin 0 -> 1136 bytes .../Button/button_circle_h70_white.png.meta | 156 + .../Button/button_circle_h70_white_shadow.png | Bin 0 -> 2029 bytes .../button_circle_h70_white_shadow.png.meta | 156 + .../button_rounded_h70_merged_icon_back.png | Bin 0 -> 2900 bytes ...tton_rounded_h70_merged_icon_back.png.meta | 156 + .../Button/button_rounded_h70_white.png | Bin 0 -> 1146 bytes .../Button/button_rounded_h70_white.png.meta | 156 + .../button_rounded_h70_white_shadow.png | Bin 0 -> 2047 bytes .../button_rounded_h70_white_shadow.png.meta | 156 + .../button_rounded_h76_colored_gray.png | Bin 0 -> 1311 bytes .../button_rounded_h76_colored_gray.png.meta | 156 + ...utton_rounded_h76_colored_light_violet.png | Bin 0 -> 1323 bytes ..._rounded_h76_colored_light_violet.png.meta | 156 + .../button_rounded_h76_colored_violet.png | Bin 0 -> 1317 bytes ...button_rounded_h76_colored_violet.png.meta | 156 + .../Button/button_rounded_h76_white.png | Bin 0 -> 1287 bytes .../Button/button_rounded_h76_white.png.meta | 156 + .../button_rounded_h84_colored_dark_gray.png | Bin 0 -> 1483 bytes ...ton_rounded_h84_colored_dark_gray.png.meta | 156 + .../button_rounded_h84_colored_disabled.png | Bin 0 -> 1459 bytes ...tton_rounded_h84_colored_disabled.png.meta | 156 + .../button_rounded_h84_colored_gray.png | Bin 0 -> 1440 bytes .../button_rounded_h84_colored_gray.png.meta | 156 + .../button_rounded_h84_colored_mint.png | Bin 0 -> 1462 bytes .../button_rounded_h84_colored_mint.png.meta | 156 + .../button_rounded_h84_colored_pink.png | Bin 0 -> 1461 bytes .../button_rounded_h84_colored_pink.png.meta | 156 + .../button_rounded_h84_colored_violet.png | Bin 0 -> 1472 bytes ...button_rounded_h84_colored_violet.png.meta | 158 + .../Button/button_rounded_h84_white.png | Bin 0 -> 1360 bytes .../Button/button_rounded_h84_white.png.meta | 156 + .../button_rounded_h84_white_shadow.png | Bin 0 -> 2423 bytes .../button_rounded_h84_white_shadow.png.meta | 156 + .../button_rounded_h96_colored_blue.png | Bin 0 -> 1670 bytes .../button_rounded_h96_colored_blue.png.meta | 156 + .../button_rounded_h96_colored_dark_gray.png | Bin 0 -> 1705 bytes ...ton_rounded_h96_colored_dark_gray.png.meta | 156 + .../button_rounded_h96_colored_disabled.png | Bin 0 -> 1690 bytes ...tton_rounded_h96_colored_disabled.png.meta | 156 + .../button_rounded_h96_colored_gray.png | Bin 0 -> 1683 bytes .../button_rounded_h96_colored_gray.png.meta | 156 + .../button_rounded_h96_colored_mint.png | Bin 0 -> 1685 bytes .../button_rounded_h96_colored_mint.png.meta | 156 + .../button_rounded_h96_colored_pink.png | Bin 0 -> 1685 bytes .../button_rounded_h96_colored_pink.png.meta | 156 + .../Button/button_rounded_h96_colored_red.png | Bin 0 -> 1689 bytes .../button_rounded_h96_colored_red.png.meta | 156 + .../button_rounded_h96_colored_violet.png | Bin 0 -> 1703 bytes ...button_rounded_h96_colored_violet.png.meta | 156 + .../button_rounded_h96_merged_icon_claim.png | Bin 0 -> 2863 bytes ...ton_rounded_h96_merged_icon_claim.png.meta | 156 + .../button_rounded_h96_merged_icon_go.png | Bin 0 -> 2765 bytes ...button_rounded_h96_merged_icon_go.png.meta | 156 + .../Button/button_rounded_h96_white.png | Bin 0 -> 1646 bytes .../Button/button_rounded_h96_white.png.meta | 156 + .../button_rounded_h96_white_shadow.png | Bin 0 -> 2779 bytes .../button_rounded_h96_white_shadow.png.meta | 156 + ...ton_rounded_rectangle_r14_colored_blue.png | Bin 0 -> 565 bytes ...ounded_rectangle_r14_colored_blue.png.meta | 156 + ...ounded_rectangle_r14_colored_dark_gray.png | Bin 0 -> 584 bytes ...d_rectangle_r14_colored_dark_gray.png.meta | 156 + ...rounded_rectangle_r14_colored_disabled.png | Bin 0 -> 570 bytes ...ed_rectangle_r14_colored_disabled.png.meta | 156 + ...ton_rounded_rectangle_r14_colored_gray.png | Bin 0 -> 569 bytes ...ounded_rectangle_r14_colored_gray.png.meta | 156 + ...ton_rounded_rectangle_r14_colored_mint.png | Bin 0 -> 571 bytes ...ounded_rectangle_r14_colored_mint.png.meta | 156 + ...ton_rounded_rectangle_r14_colored_pink.png | Bin 0 -> 571 bytes ...ounded_rectangle_r14_colored_pink.png.meta | 156 + ...tton_rounded_rectangle_r14_colored_red.png | Bin 0 -> 571 bytes ...rounded_rectangle_r14_colored_red.png.meta | 156 + ...n_rounded_rectangle_r14_colored_violet.png | Bin 0 -> 571 bytes ...nded_rectangle_r14_colored_violet.png.meta | 156 + .../button_rounded_rectangle_r14_white.png | Bin 0 -> 575 bytes ...utton_rounded_rectangle_r14_white.png.meta | 156 + ...ton_rounded_rectangle_r14_white_shadow.png | Bin 0 -> 922 bytes ...ounded_rectangle_r14_white_shadow.png.meta | 156 + .../UnityHiroInventory/HeroicUI/Chat.meta | 8 + .../HeroicUI/Chat/chat_colored_bg_violet.png | Bin 0 -> 2051 bytes .../Chat/chat_colored_bg_violet.png.meta | 156 + .../Chat/chat_colored_tail_left_violet.png | Bin 0 -> 247 bytes .../chat_colored_tail_left_violet.png.meta | 156 + .../Chat/chat_colored_tail_right_violet.png | Bin 0 -> 280 bytes .../chat_colored_tail_right_violet.png.meta | 156 + .../HeroicUI/Chat/chat_merged_left_violet.png | Bin 0 -> 972 bytes .../Chat/chat_merged_left_violet.png.meta | 156 + .../HeroicUI/Chat/chat_merged_left_white.png | Bin 0 -> 948 bytes .../Chat/chat_merged_left_white.png.meta | 156 + .../Chat/chat_merged_right_violet.png | Bin 0 -> 919 bytes .../Chat/chat_merged_right_violet.png.meta | 156 + .../HeroicUI/Chat/chat_merged_right_white.png | Bin 0 -> 931 bytes .../Chat/chat_merged_right_white.png.meta | 156 + .../HeroicUI/Chat/chat_white_bg.png | Bin 0 -> 2025 bytes .../HeroicUI/Chat/chat_white_bg.png.meta | 156 + .../HeroicUI/Chat/chat_white_tail_left.png | Bin 0 -> 275 bytes .../Chat/chat_white_tail_left.png.meta | 156 + .../HeroicUI/Chat/chat_white_tail_right.png | Bin 0 -> 275 bytes .../Chat/chat_white_tail_right.png.meta | 156 + .../UnityHiroInventory/HeroicUI/Checkbox.meta | 8 + .../HeroicUI/Checkbox/checkbox_checked.png | Bin 0 -> 1199 bytes .../Checkbox/checkbox_checked.png.meta | 156 + .../HeroicUI/Checkbox/checkbox_disabled.png | Bin 0 -> 735 bytes .../Checkbox/checkbox_disabled.png.meta | 156 + .../Checkbox/checkbox_indeterminate.png | Bin 0 -> 524 bytes .../Checkbox/checkbox_indeterminate.png.meta | 156 + .../HeroicUI/Checkbox/checkbox_invalid.png | Bin 0 -> 730 bytes .../Checkbox/checkbox_invalid.png.meta | 156 + .../HeroicUI/Checkbox/checkbox_unchecked.png | Bin 0 -> 451 bytes .../Checkbox/checkbox_unchecked.png.meta | 156 + .../HeroicUI/Checkbox/checkbox_white_bg.png | Bin 0 -> 1709 bytes .../Checkbox/checkbox_white_bg.png.meta | 156 + .../Checkbox/checkbox_white_icon_check.png | Bin 0 -> 500 bytes .../checkbox_white_icon_check.png.meta | 156 + .../checkbox_white_icon_indeterminate.png | Bin 0 -> 124 bytes ...checkbox_white_icon_indeterminate.png.meta | 156 + .../HeroicUI/CustomComponents.meta | 8 + .../HeroicUI/CustomComponents/ErrorPopup.uxml | 10 + .../CustomComponents/ErrorPopup.uxml.meta | 10 + .../CustomComponents/ListControls.uxml | 7 + .../CustomComponents/ListControls.uxml.meta | 10 + .../HeroicUI/CustomComponents/ListHead.uxml | 13 + .../CustomComponents/ListHead.uxml.meta | 10 + .../CustomComponents/VerticalTabButton.uxml | 7 + .../VerticalTabButton.uxml.meta | 10 + .../CustomComponents/WalletDisplay.cs | 101 + .../CustomComponents/WalletDisplay.cs.meta | 2 + .../CustomComponents/WalletDisplay.uxml | 15 + .../CustomComponents/WalletDisplay.uxml.meta | 10 + .../UnityHiroInventory/HeroicUI/Dropdown.meta | 8 + .../dropdown_button_merged_bg_active.png | Bin 0 -> 1080 bytes .../dropdown_button_merged_bg_active.png.meta | 156 + .../dropdown_button_merged_bg_focus.png | Bin 0 -> 992 bytes .../dropdown_button_merged_bg_focus.png.meta | 156 + .../dropdown_button_merged_icon_active.png | Bin 0 -> 1464 bytes ...ropdown_button_merged_icon_active.png.meta | 156 + .../dropdown_button_merged_icon_focus.png | Bin 0 -> 1370 bytes ...dropdown_button_merged_icon_focus.png.meta | 156 + .../Dropdown/dropdown_button_tail_active.png | Bin 0 -> 333 bytes .../dropdown_button_tail_active.png.meta | 156 + .../Dropdown/dropdown_button_tail_default.png | Bin 0 -> 332 bytes .../dropdown_button_tail_default.png.meta | 156 + .../Dropdown/dropdown_button_white_bg.png | Bin 0 -> 1995 bytes .../dropdown_button_white_bg.png.meta | 156 + .../Dropdown/dropdown_button_white_border.png | Bin 0 -> 943 bytes .../dropdown_button_white_border.png.meta | 156 + .../Dropdown/dropdown_button_white_tail.png | Bin 0 -> 291 bytes .../dropdown_button_white_tail.png.meta | 156 + .../Dropdown/dropdown_menu_merged_bg.png | Bin 0 -> 1565 bytes .../Dropdown/dropdown_menu_merged_bg.png.meta | 156 + .../HeroicUI/Dropdown/dropdown_menu_white.png | Bin 0 -> 1034 bytes .../Dropdown/dropdown_menu_white.png.meta | 156 + .../Dropdown/dropdown_menu_white_border.png | Bin 0 -> 1084 bytes .../dropdown_menu_white_border.png.meta | 156 + .../Dropdown/dropdown_select_colored_gray.png | Bin 0 -> 608 bytes .../dropdown_select_colored_gray.png.meta | 156 + .../Dropdown/dropdown_select_icon_violet.png | Bin 0 -> 483 bytes .../dropdown_select_icon_violet.png.meta | 156 + .../Dropdown/dropdown_select_merged_icon.png | Bin 0 -> 1356 bytes .../dropdown_select_merged_icon.png.meta | 156 + .../Dropdown/dropdown_select_white.png | Bin 0 -> 658 bytes .../Dropdown/dropdown_select_white.png.meta | 156 + .../Dropdown/dropdown_select_white_check.png | Bin 0 -> 394 bytes .../dropdown_select_white_check.png.meta | 156 + .../UnityHiroInventory/HeroicUI/Fonts.meta | 8 + .../HeroicUI/Fonts/Plus_Jakarta_Sans.meta | 8 + .../HeroicUI/Fonts/Plus_Jakarta_Sans/OFL.txt | 93 + .../Fonts/Plus_Jakarta_Sans/OFL.txt.meta | 7 + ...usJakartaSans-Italic-VariableFont_wght.ttf | Bin 0 -> 178716 bytes ...artaSans-Italic-VariableFont_wght.ttf.meta | 21 + .../PlusJakartaSans-VariableFont_wght.asset | 2783 ++ ...usJakartaSans-VariableFont_wght.asset.meta | 8 + .../PlusJakartaSans-VariableFont_wght.ttf | Bin 0 -> 173768 bytes ...PlusJakartaSans-VariableFont_wght.ttf.meta | 21 + .../Fonts/Plus_Jakarta_Sans/README.txt | 77 + .../Fonts/Plus_Jakarta_Sans/README.txt.meta | 7 + .../Fonts/Plus_Jakarta_Sans/static.meta | 8 + .../static/PlusJakartaSans-Bold.ttf | Bin 0 -> 94780 bytes .../static/PlusJakartaSans-Bold.ttf.meta | 21 + .../static/PlusJakartaSans-BoldItalic.ttf | Bin 0 -> 97004 bytes .../PlusJakartaSans-BoldItalic.ttf.meta | 21 + .../static/PlusJakartaSans-ExtraBold.ttf | Bin 0 -> 94784 bytes .../static/PlusJakartaSans-ExtraBold.ttf.meta | 21 + .../PlusJakartaSans-ExtraBoldItalic.ttf | Bin 0 -> 97036 bytes .../PlusJakartaSans-ExtraBoldItalic.ttf.meta | 21 + .../static/PlusJakartaSans-ExtraLight.ttf | Bin 0 -> 94768 bytes .../PlusJakartaSans-ExtraLight.ttf.meta | 21 + .../PlusJakartaSans-ExtraLightItalic.ttf | Bin 0 -> 97160 bytes .../PlusJakartaSans-ExtraLightItalic.ttf.meta | 21 + .../static/PlusJakartaSans-Italic.ttf | Bin 0 -> 96924 bytes .../static/PlusJakartaSans-Italic.ttf.meta | 21 + .../static/PlusJakartaSans-Light.ttf | Bin 0 -> 94792 bytes .../static/PlusJakartaSans-Light.ttf.meta | 21 + .../static/PlusJakartaSans-LightItalic.ttf | Bin 0 -> 97152 bytes .../PlusJakartaSans-LightItalic.ttf.meta | 21 + .../static/PlusJakartaSans-Medium.ttf | Bin 0 -> 94812 bytes .../static/PlusJakartaSans-Medium.ttf.meta | 21 + .../static/PlusJakartaSans-MediumItalic.ttf | Bin 0 -> 97120 bytes .../PlusJakartaSans-MediumItalic.ttf.meta | 21 + .../static/PlusJakartaSans-Regular.ttf | Bin 0 -> 94760 bytes .../static/PlusJakartaSans-Regular.ttf.meta | 21 + .../static/PlusJakartaSans-SemiBold.ttf | Bin 0 -> 94844 bytes .../static/PlusJakartaSans-SemiBold.ttf.meta | 21 + .../static/PlusJakartaSans-SemiBoldItalic.ttf | Bin 0 -> 97084 bytes .../PlusJakartaSans-SemiBoldItalic.ttf.meta | 21 + .../UnityHiroInventory/HeroicUI/Frame.meta | 8 + ...er_horizontal_dotline_transparent_gray.png | Bin 0 -> 2832 bytes ...rizontal_dotline_transparent_gray.png.meta | 156 + .../divider_horizontal_dotline_white.png | Bin 0 -> 2836 bytes .../divider_horizontal_dotline_white.png.meta | 156 + .../Frame/divider_horizontal_line_violet.png | Bin 0 -> 101 bytes .../divider_horizontal_line_violet.png.meta | 156 + .../Frame/divider_horizontal_line_white.png | Bin 0 -> 1379 bytes .../divider_horizontal_line_white.png.meta | 156 + ...ider_vertical_dotline_transparent_gray.png | Bin 0 -> 2832 bytes ...vertical_dotline_transparent_gray.png.meta | 156 + .../Frame/divider_vertical_dotline_white.png | Bin 0 -> 2826 bytes .../divider_vertical_dotline_white.png.meta | 156 + .../HeroicUI/Frame/frame_complete_stamp_l.png | Bin 0 -> 6285 bytes .../Frame/frame_complete_stamp_l.png.meta | 156 + .../HeroicUI/Frame/frame_complete_stamp_s.png | Bin 0 -> 4878 bytes .../Frame/frame_complete_stamp_s.png.meta | 156 + .../Frame/frame_day_l_merged_complete.png | Bin 0 -> 754 bytes .../frame_day_l_merged_complete.png.meta | 156 + .../Frame/frame_day_l_merged_disabled.png | Bin 0 -> 765 bytes .../frame_day_l_merged_disabled.png.meta | 156 + .../Frame/frame_day_l_merged_today.png | Bin 0 -> 756 bytes .../Frame/frame_day_l_merged_today.png.meta | 156 + .../Frame/frame_day_s_merged_complete.png | Bin 0 -> 658 bytes .../frame_day_s_merged_complete.png.meta | 156 + .../Frame/frame_day_s_merged_disabled.png | Bin 0 -> 656 bytes .../frame_day_s_merged_disabled.png.meta | 156 + .../Frame/frame_day_s_merged_today.png | Bin 0 -> 660 bytes .../Frame/frame_day_s_merged_today.png.meta | 156 + .../HeroicUI/Frame/frame_day_white_bg.png | Bin 0 -> 639 bytes .../Frame/frame_day_white_bg.png.meta | 156 + .../HeroicUI/Frame/frame_day_white_top.png | Bin 0 -> 394 bytes .../Frame/frame_day_white_top.png.meta | 156 + .../HeroicUI/Frame/frame_item_icon_add.png | Bin 0 -> 247 bytes .../Frame/frame_item_icon_add.png.meta | 156 + .../HeroicUI/Frame/frame_item_icon_lock.png | Bin 0 -> 572 bytes .../Frame/frame_item_icon_lock.png.meta | 156 + ..._item_r16_equipments_h130_colored_blue.png | Bin 0 -> 1141 bytes ..._r16_equipments_h130_colored_blue.png.meta | 156 + ...item_r16_equipments_h130_colored_coral.png | Bin 0 -> 1133 bytes ...r16_equipments_h130_colored_coral.png.meta | 156 + ..._item_r16_equipments_h130_colored_gray.png | Bin 0 -> 1166 bytes ..._r16_equipments_h130_colored_gray.png.meta | 156 + ...item_r16_equipments_h130_colored_green.png | Bin 0 -> 1149 bytes ...r16_equipments_h130_colored_green.png.meta | 156 + ...tem_r16_equipments_h130_colored_violet.png | Bin 0 -> 1166 bytes ...16_equipments_h130_colored_violet.png.meta | 156 + ...tem_r16_equipments_h130_colored_yellow.png | Bin 0 -> 1062 bytes ...16_equipments_h130_colored_yellow.png.meta | 156 + ...me_item_r16_equipments_h130_merged_add.png | Bin 0 -> 1412 bytes ...em_r16_equipments_h130_merged_add.png.meta | 156 + ...e_item_r16_equipments_h130_merged_lock.png | Bin 0 -> 1520 bytes ...m_r16_equipments_h130_merged_lock.png.meta | 156 + ...em_r16_equipments_h136_merged_empty_bg.png | Bin 0 -> 1850 bytes ...6_equipments_h136_merged_empty_bg.png.meta | 156 + ..._equipments_h136_merged_empty_icon_bow.png | Bin 0 -> 4246 bytes ...pments_h136_merged_empty_icon_bow.png.meta | 156 + ...equipments_h136_merged_empty_icon_gear.png | Bin 0 -> 5058 bytes ...ments_h136_merged_empty_icon_gear.png.meta | 156 + ...uipments_h136_merged_empty_icon_helmet.png | Bin 0 -> 3551 bytes ...nts_h136_merged_empty_icon_helmet.png.meta | 156 + ...uipments_h136_merged_empty_icon_shield.png | Bin 0 -> 4978 bytes ...nts_h136_merged_empty_icon_shield.png.meta | 156 + ...uipments_h136_merged_empty_icon_soword.png | Bin 0 -> 3754 bytes ...nts_h136_merged_empty_icon_soword.png.meta | 156 + ...e_item_r16_equipments_h136_merged_lock.png | Bin 0 -> 1542 bytes ...m_r16_equipments_h136_merged_lock.png.meta | 156 + ...rame_item_r16_equipments_h136_white_bg.png | Bin 0 -> 953 bytes ...item_r16_equipments_h136_white_bg.png.meta | 156 + ...me_item_r16_equipments_h136_white_line.png | Bin 0 -> 1381 bytes ...em_r16_equipments_h136_white_line.png.meta | 650 + .../HeroicUI/Frame/frame_item_r16_focus.png | Bin 0 -> 1813 bytes .../Frame/frame_item_r16_focus.png.meta | 156 + .../frame_item_r16_h144_colored_blue.png | Bin 0 -> 1214 bytes .../frame_item_r16_h144_colored_blue.png.meta | 156 + .../frame_item_r16_h144_colored_coral.png | Bin 0 -> 1208 bytes ...frame_item_r16_h144_colored_coral.png.meta | 156 + .../frame_item_r16_h144_colored_gray.png | Bin 0 -> 1235 bytes .../frame_item_r16_h144_colored_gray.png.meta | 156 + .../frame_item_r16_h144_colored_green.png | Bin 0 -> 1217 bytes ...frame_item_r16_h144_colored_green.png.meta | 156 + .../frame_item_r16_h144_colored_violet.png | Bin 0 -> 1237 bytes ...rame_item_r16_h144_colored_violet.png.meta | 156 + .../frame_item_r16_h144_colored_yellow.png | Bin 0 -> 1139 bytes ...rame_item_r16_h144_colored_yellow.png.meta | 156 + .../Frame/frame_item_r16_white_bg.png | Bin 0 -> 903 bytes .../Frame/frame_item_r16_white_bg.png.meta | 156 + .../Frame/frame_item_r16_white_border.png | Bin 0 -> 1164 bytes .../frame_item_r16_white_border.png.meta | 156 + .../Frame/frame_item_r16_white_focus.png | Bin 0 -> 1249 bytes .../Frame/frame_item_r16_white_focus.png.meta | 156 + .../Frame/frame_pass_colored_focus.png | Bin 0 -> 1317 bytes .../Frame/frame_pass_colored_focus.png.meta | 156 + .../frame_pass_colored_focus_tail_down.png | Bin 0 -> 1600 bytes ...rame_pass_colored_focus_tail_down.png.meta | 156 + .../frame_pass_colored_focus_tail_up.png | Bin 0 -> 1590 bytes .../frame_pass_colored_focus_tail_up.png.meta | 156 + .../frame_pass_colored_transparent_violet.png | Bin 0 -> 916 bytes ...e_pass_colored_transparent_violet.png.meta | 156 + .../HeroicUI/Frame/frame_pass_icon_check.png | Bin 0 -> 1863 bytes .../Frame/frame_pass_icon_check.png.meta | 156 + .../HeroicUI/Frame/frame_pass_icon_lock.png | Bin 0 -> 572 bytes .../Frame/frame_pass_icon_lock.png.meta | 156 + .../Frame/frame_pass_merged_complete.png | Bin 0 -> 1335 bytes .../Frame/frame_pass_merged_complete.png.meta | 156 + .../Frame/frame_pass_merged_default.png | Bin 0 -> 1343 bytes .../Frame/frame_pass_merged_default.png.meta | 156 + .../Frame/frame_pass_merged_focus_down.png | Bin 0 -> 1758 bytes .../frame_pass_merged_focus_down.png.meta | 156 + .../frame_pass_merged_focus_down_white.png | Bin 0 -> 1732 bytes ...rame_pass_merged_focus_down_white.png.meta | 156 + .../Frame/frame_pass_merged_focus_up.png | Bin 0 -> 3047 bytes .../Frame/frame_pass_merged_focus_up.png.meta | 156 + .../frame_pass_merged_focus_up_white.png | Bin 0 -> 3022 bytes .../frame_pass_merged_focus_up_white.png.meta | 156 + .../Frame/frame_pass_r20_white_bg.png | Bin 0 -> 926 bytes .../Frame/frame_pass_r20_white_bg.png.meta | 156 + .../Frame/frame_pass_r20_white_focus.png | Bin 0 -> 1287 bytes .../Frame/frame_pass_r20_white_focus.png.meta | 156 + .../Frame/frame_pass_r20_white_tail_down.png | Bin 0 -> 277 bytes .../frame_pass_r20_white_tail_down.png.meta | 156 + .../Frame/frame_pass_r20_white_tail_up.png | Bin 0 -> 273 bytes .../frame_pass_r20_white_tail_up.png.meta | 156 + .../Frame/frame_rounded_h56_merged.png | Bin 0 -> 1672 bytes .../Frame/frame_rounded_h56_merged.png.meta | 156 + .../Frame/frame_rounded_h56_white_bg.png | Bin 0 -> 834 bytes .../Frame/frame_rounded_h56_white_bg.png.meta | 156 + .../Frame/frame_rounded_h56_white_border.png | Bin 0 -> 1284 bytes .../frame_rounded_h56_white_border.png.meta | 156 + .../frame_rounded_rectangle_r12_white_bg.png | Bin 0 -> 481 bytes ...me_rounded_rectangle_r12_white_bg.png.meta | 156 + ...ame_rounded_rectangle_r12_white_border.png | Bin 0 -> 738 bytes ...ounded_rectangle_r12_white_border.png.meta | 156 + ...me_rounded_rectangle_r16_merged_dimmed.png | Bin 0 -> 706 bytes ...unded_rectangle_r16_merged_dimmed.png.meta | 156 + ...ame_rounded_rectangle_r16_merged_focus.png | Bin 0 -> 2496 bytes ...ounded_rectangle_r16_merged_focus.png.meta | 156 + .../frame_rounded_rectangle_r16_white_bg.png | Bin 0 -> 1986 bytes ...me_rounded_rectangle_r16_white_bg.png.meta | 156 + ...ame_rounded_rectangle_r16_white_border.png | Bin 0 -> 2194 bytes ...ounded_rectangle_r16_white_border.png.meta | 156 + ...ame_rounded_rectangle_r16_white_shadow.png | Bin 0 -> 1305 bytes ...ounded_rectangle_r16_white_shadow.png.meta | 156 + .../frame_rounded_rectangle_r24_icon_lock.png | Bin 0 -> 1449 bytes ...e_rounded_rectangle_r24_icon_lock.png.meta | 156 + ..._rounded_rectangle_r24_icon_lock_white.png | Bin 0 -> 1467 bytes ...ded_rectangle_r24_icon_lock_white.png.meta | 156 + ...e_rounded_rectangle_r24_merged_default.png | Bin 0 -> 1305 bytes ...nded_rectangle_r24_merged_default.png.meta | 156 + ...ame_rounded_rectangle_r24_merged_focus.png | Bin 0 -> 1494 bytes ...ounded_rectangle_r24_merged_focus.png.meta | 156 + ...rame_rounded_rectangle_r24_merged_lock.png | Bin 0 -> 1430 bytes ...rounded_rectangle_r24_merged_lock.png.meta | 156 + .../frame_rounded_rectangle_r24_white_bg.png | Bin 0 -> 919 bytes ...me_rounded_rectangle_r24_white_bg.png.meta | 156 + ...ame_rounded_rectangle_r24_white_border.png | Bin 0 -> 1179 bytes ...ounded_rectangle_r24_white_border.png.meta | 156 + .../HeroicUI/Frame/frame_shop_merged_blue.png | Bin 0 -> 1646 bytes .../Frame/frame_shop_merged_blue.png.meta | 156 + .../Frame/frame_shop_merged_coral.png | Bin 0 -> 1639 bytes .../Frame/frame_shop_merged_coral.png.meta | 156 + .../HeroicUI/Frame/frame_shop_white_bg.png | Bin 0 -> 639 bytes .../Frame/frame_shop_white_bg.png.meta | 156 + .../Frame/frame_shop_white_bottom.png | Bin 0 -> 484 bytes .../Frame/frame_shop_white_bottom.png.meta | 156 + .../Frame/frame_shop_white_gradient.png | Bin 0 -> 1471 bytes .../Frame/frame_shop_white_gradient.png.meta | 156 + .../Frame/frame_skill_hexagon_merged_bg.png | Bin 0 -> 4296 bytes .../frame_skill_hexagon_merged_bg.png.meta | 156 + .../Frame/frame_skill_hexagon_white_bg.png | Bin 0 -> 2188 bytes .../frame_skill_hexagon_white_bg.png.meta | 156 + .../frame_skill_hexagon_white_border.png | Bin 0 -> 3304 bytes .../frame_skill_hexagon_white_border.png.meta | 156 + .../frame_skill_hexagon_white_innerbg.png | Bin 0 -> 2093 bytes ...frame_skill_hexagon_white_innerbg.png.meta | 156 + ...rame_square_colored_transparent_violet.png | Bin 0 -> 307 bytes ...square_colored_transparent_violet.png.meta | 156 + .../Frame/frame_square_icon_crown.png | Bin 0 -> 923 bytes .../Frame/frame_square_icon_crown.png.meta | 182 + .../Frame/frame_square_icon_heart.png | Bin 0 -> 1178 bytes .../Frame/frame_square_icon_heart.png.meta | 156 + .../HeroicUI/Frame/frame_square_icon_map.png | Bin 0 -> 1140 bytes .../Frame/frame_square_icon_map.png.meta | 156 + .../Frame/frame_square_icon_ranking.png | Bin 0 -> 598 bytes .../Frame/frame_square_icon_ranking.png.meta | 182 + .../Frame/frame_square_icon_shield.png | Bin 0 -> 1328 bytes .../Frame/frame_square_icon_shield.png.meta | 156 + .../Frame/frame_square_icon_skull.png | Bin 0 -> 1501 bytes .../Frame/frame_square_icon_skull.png.meta | 156 + .../Frame/frame_square_merged_icon_crown.png | Bin 0 -> 2179 bytes .../frame_square_merged_icon_crown.png.meta | 156 + .../Frame/frame_square_merged_icon_heart.png | Bin 0 -> 2802 bytes .../frame_square_merged_icon_heart.png.meta | 156 + .../Frame/frame_square_merged_icon_map.png | Bin 0 -> 2603 bytes .../frame_square_merged_icon_map.png.meta | 156 + .../frame_square_merged_icon_ranking.png | Bin 0 -> 1162 bytes .../frame_square_merged_icon_ranking.png.meta | 156 + .../Frame/frame_square_merged_icon_shield.png | Bin 0 -> 3226 bytes .../frame_square_merged_icon_shield.png.meta | 156 + .../Frame/frame_square_merged_icon_skull.png | Bin 0 -> 3414 bytes .../frame_square_merged_icon_skull.png.meta | 156 + .../HeroicUI/Frame/frame_square_white.png | Bin 0 -> 309 bytes .../Frame/frame_square_white.png.meta | 156 + .../UnityHiroInventory/HeroicUI/IconItem.meta | 8 + .../HeroicUI/IconItem/128.meta | 8 + .../HeroicUI/IconItem/128/icon_ad.png | Bin 0 -> 8571 bytes .../HeroicUI/IconItem/128/icon_ad.png.meta | 156 + .../HeroicUI/IconItem/128/icon_bomb.png | Bin 0 -> 8351 bytes .../HeroicUI/IconItem/128/icon_bomb.png.meta | 156 + .../HeroicUI/IconItem/128/icon_clover.png | Bin 0 -> 10417 bytes .../IconItem/128/icon_clover.png.meta | 156 + .../HeroicUI/IconItem/128/icon_defense.png | Bin 0 -> 7781 bytes .../IconItem/128/icon_defense.png.meta | 156 + .../HeroicUI/IconItem/128/icon_earth.png | Bin 0 -> 8625 bytes .../HeroicUI/IconItem/128/icon_earth.png.meta | 156 + .../IconItem/128/icon_energy_blue.png | Bin 0 -> 6634 bytes .../IconItem/128/icon_energy_blue.png.meta | 156 + .../IconItem/128/icon_energy_green.png | Bin 0 -> 6366 bytes .../IconItem/128/icon_energy_green.png.meta | 156 + .../HeroicUI/IconItem/128/icon_eye.png | Bin 0 -> 8310 bytes .../HeroicUI/IconItem/128/icon_eye.png.meta | 156 + .../HeroicUI/IconItem/128/icon_friends.png | Bin 0 -> 5857 bytes .../IconItem/128/icon_friends.png.meta | 156 + .../HeroicUI/IconItem/128/icon_gem.png | Bin 0 -> 7619 bytes .../HeroicUI/IconItem/128/icon_gem.png.meta | 156 + .../HeroicUI/IconItem/128/icon_gold.png | Bin 0 -> 8092 bytes .../HeroicUI/IconItem/128/icon_gold.png.meta | 156 + .../HeroicUI/IconItem/128/icon_key_bronze.png | Bin 0 -> 9433 bytes .../IconItem/128/icon_key_bronze.png.meta | 156 + .../HeroicUI/IconItem/128/icon_key_gold.png | Bin 0 -> 9049 bytes .../IconItem/128/icon_key_gold.png.meta | 156 + .../HeroicUI/IconItem/128/icon_key_silver.png | Bin 0 -> 9562 bytes .../IconItem/128/icon_key_silver.png.meta | 156 + .../HeroicUI/IconItem/128/icon_location.png | Bin 0 -> 6083 bytes .../IconItem/128/icon_location.png.meta | 156 + .../IconItem/128/icon_medal_bronze.png | Bin 0 -> 9967 bytes .../IconItem/128/icon_medal_bronze.png.meta | 156 + .../HeroicUI/IconItem/128/icon_medal_gold.png | Bin 0 -> 8466 bytes .../IconItem/128/icon_medal_gold.png.meta | 156 + .../IconItem/128/icon_medal_silver.png | Bin 0 -> 9541 bytes .../IconItem/128/icon_medal_silver.png.meta | 156 + .../HeroicUI/IconItem/128/icon_pass_free.png | Bin 0 -> 12691 bytes .../IconItem/128/icon_pass_free.png.meta | 156 + .../HeroicUI/IconItem/128/icon_pass_point.png | Bin 0 -> 8032 bytes .../IconItem/128/icon_pass_point.png.meta | 156 + .../IconItem/128/icon_pass_premium.png | Bin 0 -> 13549 bytes .../IconItem/128/icon_pass_premium.png.meta | 156 + .../HeroicUI/IconItem/128/icon_point.png | Bin 0 -> 7606 bytes .../HeroicUI/IconItem/128/icon_point.png.meta | 156 + .../IconItem/128/icon_potion_blue.png | Bin 0 -> 8975 bytes .../IconItem/128/icon_potion_blue.png.meta | 156 + .../HeroicUI/IconItem/128/icon_shield.png | Bin 0 -> 10234 bytes .../IconItem/128/icon_shield.png.meta | 156 + .../HeroicUI/IconItem/128/icon_skull.png | Bin 0 -> 7895 bytes .../HeroicUI/IconItem/128/icon_skull.png.meta | 156 + .../HeroicUI/IconItem/128/icon_star.png | Bin 0 -> 5608 bytes .../HeroicUI/IconItem/128/icon_star.png.meta | 156 + .../HeroicUI/IconItem/128/icon_sword.png | Bin 0 -> 6999 bytes .../HeroicUI/IconItem/128/icon_sword.png.meta | 156 + .../HeroicUI/IconItem/128/icon_trophy.png | Bin 0 -> 7203 bytes .../IconItem/128/icon_trophy.png.meta | 156 + .../HeroicUI/IconItem/256.meta | 8 + .../HeroicUI/IconItem/256/icon_ad.png | Bin 0 -> 15694 bytes .../HeroicUI/IconItem/256/icon_ad.png.meta | 156 + .../HeroicUI/IconItem/256/icon_bomb.png | Bin 0 -> 15468 bytes .../HeroicUI/IconItem/256/icon_bomb.png.meta | 156 + .../HeroicUI/IconItem/256/icon_clover.png | Bin 0 -> 20903 bytes .../IconItem/256/icon_clover.png.meta | 156 + .../HeroicUI/IconItem/256/icon_defense.png | Bin 0 -> 13122 bytes .../IconItem/256/icon_defense.png.meta | 156 + .../HeroicUI/IconItem/256/icon_earth.png | Bin 0 -> 14525 bytes .../HeroicUI/IconItem/256/icon_earth.png.meta | 156 + .../IconItem/256/icon_energy_blue.png | Bin 0 -> 10743 bytes .../IconItem/256/icon_energy_blue.png.meta | 156 + .../IconItem/256/icon_energy_green.png | Bin 0 -> 9946 bytes .../IconItem/256/icon_energy_green.png.meta | 156 + .../HeroicUI/IconItem/256/icon_eye.png | Bin 0 -> 15078 bytes .../HeroicUI/IconItem/256/icon_eye.png.meta | 156 + .../HeroicUI/IconItem/256/icon_friends.png | Bin 0 -> 8781 bytes .../IconItem/256/icon_friends.png.meta | 156 + .../HeroicUI/IconItem/256/icon_gem.png | Bin 0 -> 12584 bytes .../HeroicUI/IconItem/256/icon_gem.png.meta | 156 + .../HeroicUI/IconItem/256/icon_gold.png | Bin 0 -> 13984 bytes .../HeroicUI/IconItem/256/icon_gold.png.meta | 156 + .../HeroicUI/IconItem/256/icon_key_bronze.png | Bin 0 -> 16261 bytes .../IconItem/256/icon_key_bronze.png.meta | 156 + .../HeroicUI/IconItem/256/icon_key_gold.png | Bin 0 -> 15307 bytes .../IconItem/256/icon_key_gold.png.meta | 156 + .../HeroicUI/IconItem/256/icon_key_silver.png | Bin 0 -> 16209 bytes .../IconItem/256/icon_key_silver.png.meta | 156 + .../HeroicUI/IconItem/256/icon_location.png | Bin 0 -> 9725 bytes .../IconItem/256/icon_location.png.meta | 156 + .../IconItem/256/icon_medal_bronze.png | Bin 0 -> 16967 bytes .../IconItem/256/icon_medal_bronze.png.meta | 156 + .../HeroicUI/IconItem/256/icon_medal_gold.png | Bin 0 -> 14431 bytes .../IconItem/256/icon_medal_gold.png.meta | 156 + .../IconItem/256/icon_medal_silver.png | Bin 0 -> 16208 bytes .../IconItem/256/icon_medal_silver.png.meta | 156 + .../HeroicUI/IconItem/256/icon_pass_free.png | Bin 0 -> 23569 bytes .../IconItem/256/icon_pass_free.png.meta | 156 + .../HeroicUI/IconItem/256/icon_pass_point.png | Bin 0 -> 13323 bytes .../IconItem/256/icon_pass_point.png.meta | 156 + .../IconItem/256/icon_pass_premium.png | Bin 0 -> 25357 bytes .../IconItem/256/icon_pass_premium.png.meta | 156 + .../HeroicUI/IconItem/256/icon_point.png | Bin 0 -> 12651 bytes .../HeroicUI/IconItem/256/icon_point.png.meta | 156 + .../IconItem/256/icon_potion_blue.png | Bin 0 -> 15734 bytes .../IconItem/256/icon_potion_blue.png.meta | 156 + .../HeroicUI/IconItem/256/icon_shield.png | Bin 0 -> 18495 bytes .../IconItem/256/icon_shield.png.meta | 156 + .../HeroicUI/IconItem/256/icon_skull.png | Bin 0 -> 13347 bytes .../HeroicUI/IconItem/256/icon_skull.png.meta | 156 + .../HeroicUI/IconItem/256/icon_star.png | Bin 0 -> 8536 bytes .../HeroicUI/IconItem/256/icon_star.png.meta | 156 + .../HeroicUI/IconItem/256/icon_sword.png | Bin 0 -> 11688 bytes .../HeroicUI/IconItem/256/icon_sword.png.meta | 156 + .../HeroicUI/IconItem/256/icon_trophy.png | Bin 0 -> 12891 bytes .../IconItem/256/icon_trophy.png.meta | 156 + .../HeroicUI/IconItem/512.meta | 8 + .../HeroicUI/IconItem/512/icon_ad.png | Bin 0 -> 33343 bytes .../HeroicUI/IconItem/512/icon_ad.png.meta | 156 + .../HeroicUI/IconItem/512/icon_bomb.png | Bin 0 -> 31348 bytes .../HeroicUI/IconItem/512/icon_bomb.png.meta | 156 + .../HeroicUI/IconItem/512/icon_clover.png | Bin 0 -> 45336 bytes .../IconItem/512/icon_clover.png.meta | 156 + .../HeroicUI/IconItem/512/icon_defense.png | Bin 0 -> 24602 bytes .../IconItem/512/icon_defense.png.meta | 156 + .../HeroicUI/IconItem/512/icon_earth.png | Bin 0 -> 27354 bytes .../HeroicUI/IconItem/512/icon_earth.png.meta | 156 + .../IconItem/512/icon_energy_blue.png | Bin 0 -> 20068 bytes .../IconItem/512/icon_energy_blue.png.meta | 156 + .../IconItem/512/icon_energy_green.png | Bin 0 -> 19819 bytes .../IconItem/512/icon_energy_green.png.meta | 156 + .../HeroicUI/IconItem/512/icon_eye.png | Bin 0 -> 30419 bytes .../HeroicUI/IconItem/512/icon_eye.png.meta | 156 + .../HeroicUI/IconItem/512/icon_friends.png | Bin 0 -> 15777 bytes .../IconItem/512/icon_friends.png.meta | 156 + .../HeroicUI/IconItem/512/icon_gem.png | Bin 0 -> 23108 bytes .../HeroicUI/IconItem/512/icon_gem.png.meta | 156 + .../HeroicUI/IconItem/512/icon_gold.png | Bin 0 -> 26456 bytes .../HeroicUI/IconItem/512/icon_gold.png.meta | 156 + .../HeroicUI/IconItem/512/icon_key_bronze.png | Bin 0 -> 31399 bytes .../IconItem/512/icon_key_bronze.png.meta | 156 + .../HeroicUI/IconItem/512/icon_key_gold.png | Bin 0 -> 29152 bytes .../IconItem/512/icon_key_gold.png.meta | 156 + .../HeroicUI/IconItem/512/icon_key_silver.png | Bin 0 -> 31260 bytes .../IconItem/512/icon_key_silver.png.meta | 156 + .../HeroicUI/IconItem/512/icon_location.png | Bin 0 -> 17252 bytes .../IconItem/512/icon_location.png.meta | 156 + .../IconItem/512/icon_medal_bronze.png | Bin 0 -> 31904 bytes .../IconItem/512/icon_medal_bronze.png.meta | 156 + .../HeroicUI/IconItem/512/icon_medal_gold.png | Bin 0 -> 26716 bytes .../IconItem/512/icon_medal_gold.png.meta | 156 + .../IconItem/512/icon_medal_silver.png | Bin 0 -> 30515 bytes .../IconItem/512/icon_medal_silver.png.meta | 156 + .../HeroicUI/IconItem/512/icon_pass_free.png | Bin 0 -> 46597 bytes .../IconItem/512/icon_pass_free.png.meta | 156 + .../HeroicUI/IconItem/512/icon_pass_point.png | Bin 0 -> 24928 bytes .../IconItem/512/icon_pass_point.png.meta | 156 + .../IconItem/512/icon_pass_premium.png | Bin 0 -> 50553 bytes .../IconItem/512/icon_pass_premium.png.meta | 156 + .../HeroicUI/IconItem/512/icon_point.png | Bin 0 -> 23410 bytes .../HeroicUI/IconItem/512/icon_point.png.meta | 156 + .../IconItem/512/icon_potion_blue.png | Bin 0 -> 29895 bytes .../IconItem/512/icon_potion_blue.png.meta | 156 + .../HeroicUI/IconItem/512/icon_shield.png | Bin 0 -> 36362 bytes .../IconItem/512/icon_shield.png.meta | 156 + .../HeroicUI/IconItem/512/icon_skull.png | Bin 0 -> 24888 bytes .../HeroicUI/IconItem/512/icon_skull.png.meta | 156 + .../HeroicUI/IconItem/512/icon_star.png | Bin 0 -> 14996 bytes .../HeroicUI/IconItem/512/icon_star.png.meta | 156 + .../HeroicUI/IconItem/512/icon_sword.png | Bin 0 -> 20552 bytes .../HeroicUI/IconItem/512/icon_sword.png.meta | 156 + .../HeroicUI/IconItem/512/icon_trophy.png | Bin 0 -> 24905 bytes .../IconItem/512/icon_trophy.png.meta | 156 + .../UnityHiroInventory/HeroicUI/IconMisc.meta | 8 + .../HeroicUI/IconMisc/icon_copy.png | Bin 0 -> 350 bytes .../HeroicUI/IconMisc/icon_copy.png.meta | 156 + .../HeroicUI/IconMisc/icon_crown.png | Bin 0 -> 923 bytes .../HeroicUI/IconMisc/icon_crown.png.meta | 182 + .../HeroicUI/IconMisc/icon_fist.png | Bin 0 -> 751 bytes .../HeroicUI/IconMisc/icon_fist.png.meta | 260 + .../HeroicUI/IconMisc/icon_heart.png | Bin 0 -> 1178 bytes .../HeroicUI/IconMisc/icon_heart.png.meta | 156 + .../HeroicUI/IconMisc/icon_local.png | Bin 0 -> 1683 bytes .../HeroicUI/IconMisc/icon_local.png.meta | 156 + .../HeroicUI/IconMisc/icon_map.png | Bin 0 -> 1140 bytes .../HeroicUI/IconMisc/icon_map.png.meta | 156 + .../HeroicUI/IconMisc/icon_ranking.png | Bin 0 -> 598 bytes .../HeroicUI/IconMisc/icon_ranking.png.meta | 182 + .../HeroicUI/IconMisc/icon_shield.png | Bin 0 -> 1328 bytes .../HeroicUI/IconMisc/icon_shield.png.meta | 156 + .../HeroicUI/IconMisc/icon_skull.png | Bin 0 -> 1501 bytes .../HeroicUI/IconMisc/icon_skull.png.meta | 156 + .../HeroicUI/IconMisc/icon_timer.png | Bin 0 -> 984 bytes .../HeroicUI/IconMisc/icon_timer.png.meta | 156 + .../HeroicUI/IconPictogram.meta | 8 + .../HeroicUI/IconPictogram/128.meta | 8 + .../HeroicUI/IconPictogram/128/icon_add.png | Bin 0 -> 3357 bytes .../IconPictogram/128/icon_add.png.meta | 156 + .../HeroicUI/IconPictogram/128/icon_alarm.png | Bin 0 -> 4490 bytes .../IconPictogram/128/icon_alarm.png.meta | 156 + .../IconPictogram/128/icon_alarm_mute.png | Bin 0 -> 4839 bytes .../128/icon_alarm_mute.png.meta | 156 + .../HeroicUI/IconPictogram/128/icon_align.png | Bin 0 -> 3960 bytes .../IconPictogram/128/icon_align.png.meta | 182 + .../HeroicUI/IconPictogram/128/icon_anvil.png | Bin 0 -> 4023 bytes .../IconPictogram/128/icon_anvil.png.meta | 182 + .../HeroicUI/IconPictogram/128/icon_armor.png | Bin 0 -> 5716 bytes .../IconPictogram/128/icon_armor.png.meta | 260 + .../IconPictogram/128/icon_arrow_back.png | Bin 0 -> 4307 bytes .../128/icon_arrow_back.png.meta | 156 + .../IconPictogram/128/icon_arrow_bottom.png | Bin 0 -> 4405 bytes .../128/icon_arrow_bottom.png.meta | 156 + .../IconPictogram/128/icon_arrow_down.png | Bin 0 -> 4152 bytes .../128/icon_arrow_down.png.meta | 156 + .../IconPictogram/128/icon_arrow_forward.png | Bin 0 -> 4236 bytes .../128/icon_arrow_forward.png.meta | 156 + .../IconPictogram/128/icon_arrow_left.png | Bin 0 -> 4371 bytes .../128/icon_arrow_left.png.meta | 156 + .../IconPictogram/128/icon_arrow_right.png | Bin 0 -> 4328 bytes .../128/icon_arrow_right.png.meta | 156 + .../IconPictogram/128/icon_arrow_up-1.png | Bin 0 -> 4397 bytes .../128/icon_arrow_up-1.png.meta | 156 + .../IconPictogram/128/icon_arrow_up.png | Bin 0 -> 4202 bytes .../IconPictogram/128/icon_arrow_up.png.meta | 156 + .../IconPictogram/128/icon_attack.png | Bin 0 -> 4729 bytes .../IconPictogram/128/icon_attack.png.meta | 156 + .../IconPictogram/128/icon_battle.png | Bin 0 -> 5508 bytes .../IconPictogram/128/icon_battle.png.meta | 182 + .../HeroicUI/IconPictogram/128/icon_book.png | Bin 0 -> 3875 bytes .../IconPictogram/128/icon_book.png.meta | 182 + .../IconPictogram/128/icon_book_open.png | Bin 0 -> 4423 bytes .../IconPictogram/128/icon_book_open.png.meta | 156 + .../HeroicUI/IconPictogram/128/icon_bow.png | Bin 0 -> 5288 bytes .../IconPictogram/128/icon_bow.png.meta | 156 + .../IconPictogram/128/icon_calendar.png | Bin 0 -> 3568 bytes .../IconPictogram/128/icon_calendar.png.meta | 182 + .../IconPictogram/128/icon_cancle.png | Bin 0 -> 4344 bytes .../IconPictogram/128/icon_cancle.png.meta | 156 + .../IconPictogram/128/icon_cancle_round.png | Bin 0 -> 5065 bytes .../128/icon_cancle_round.png.meta | 156 + .../HeroicUI/IconPictogram/128/icon_chat.png | Bin 0 -> 5099 bytes .../IconPictogram/128/icon_chat.png.meta | 156 + .../HeroicUI/IconPictogram/128/icon_check.png | Bin 0 -> 4648 bytes .../IconPictogram/128/icon_check.png.meta | 156 + .../IconPictogram/128/icon_check_round.png | Bin 0 -> 5258 bytes .../128/icon_check_round.png.meta | 156 + .../HeroicUI/IconPictogram/128/icon_chest.png | Bin 0 -> 3936 bytes .../IconPictogram/128/icon_chest.png.meta | 234 + .../HeroicUI/IconPictogram/128/icon_crown.png | Bin 0 -> 4327 bytes .../IconPictogram/128/icon_crown.png.meta | 182 + .../IconPictogram/128/icon_damage.png | Bin 0 -> 5078 bytes .../IconPictogram/128/icon_damage.png.meta | 156 + .../IconPictogram/128/icon_defense.png | Bin 0 -> 4493 bytes .../IconPictogram/128/icon_defense.png.meta | 156 + .../IconPictogram/128/icon_delete.png | Bin 0 -> 3908 bytes .../IconPictogram/128/icon_delete.png.meta | 182 + .../HeroicUI/IconPictogram/128/icon_edit.png | Bin 0 -> 4161 bytes .../IconPictogram/128/icon_edit.png.meta | 182 + .../HeroicUI/IconPictogram/128/icon_emoji.png | Bin 0 -> 5207 bytes .../IconPictogram/128/icon_emoji.png.meta | 156 + .../IconPictogram/128/icon_exclamation.png | Bin 0 -> 3849 bytes .../128/icon_exclamation.png.meta | 182 + .../128/icon_exclamation_round.png | Bin 0 -> 4959 bytes .../128/icon_exclamation_round.png.meta | 156 + .../HeroicUI/IconPictogram/128/icon_fire.png | Bin 0 -> 5215 bytes .../IconPictogram/128/icon_fire.png.meta | 156 + .../IconPictogram/128/icon_friends.png | Bin 0 -> 5384 bytes .../IconPictogram/128/icon_friends.png.meta | 182 + .../HeroicUI/IconPictogram/128/icon_gift.png | Bin 0 -> 3828 bytes .../IconPictogram/128/icon_gift.png.meta | 260 + .../HeroicUI/IconPictogram/128/icon_globe.png | Bin 0 -> 6077 bytes .../IconPictogram/128/icon_globe.png.meta | 156 + .../IconPictogram/128/icon_growth.png | Bin 0 -> 5074 bytes .../IconPictogram/128/icon_growth.png.meta | 182 + .../IconPictogram/128/icon_headgear.png | Bin 0 -> 4678 bytes .../IconPictogram/128/icon_headgear.png.meta | 156 + .../HeroicUI/IconPictogram/128/icon_heart.png | Bin 0 -> 4613 bytes .../IconPictogram/128/icon_heart.png.meta | 156 + .../HeroicUI/IconPictogram/128/icon_home.png | Bin 0 -> 4126 bytes .../IconPictogram/128/icon_home.png.meta | 156 + .../HeroicUI/IconPictogram/128/icon_image.png | Bin 0 -> 4336 bytes .../IconPictogram/128/icon_image.png.meta | 156 + .../HeroicUI/IconPictogram/128/icon_info.png | Bin 0 -> 3848 bytes .../IconPictogram/128/icon_info.png.meta | 182 + .../IconPictogram/128/icon_info_round.png | Bin 0 -> 4924 bytes .../128/icon_info_round.png.meta | 156 + .../HeroicUI/IconPictogram/128/icon_lock.png | Bin 0 -> 4140 bytes .../IconPictogram/128/icon_lock.png.meta | 156 + .../HeroicUI/IconPictogram/128/icon_map.png | Bin 0 -> 4783 bytes .../IconPictogram/128/icon_map.png.meta | 156 + .../HeroicUI/IconPictogram/128/icon_menu.png | Bin 0 -> 3282 bytes .../IconPictogram/128/icon_menu.png.meta | 208 + .../IconPictogram/128/icon_message.png | Bin 0 -> 4452 bytes .../IconPictogram/128/icon_message.png.meta | 156 + .../HeroicUI/IconPictogram/128/icon_music.png | Bin 0 -> 4363 bytes .../IconPictogram/128/icon_music.png.meta | 156 + .../IconPictogram/128/icon_music_mute.png | Bin 0 -> 4924 bytes .../128/icon_music_mute.png.meta | 156 + .../HeroicUI/IconPictogram/128/icon_pause.png | Bin 0 -> 3256 bytes .../IconPictogram/128/icon_pause.png.meta | 182 + .../HeroicUI/IconPictogram/128/icon_pin.png | Bin 0 -> 4900 bytes .../IconPictogram/128/icon_pin.png.meta | 156 + .../HeroicUI/IconPictogram/128/icon_play.png | Bin 0 -> 3974 bytes .../IconPictogram/128/icon_play.png.meta | 156 + .../IconPictogram/128/icon_question.png | Bin 0 -> 4423 bytes .../IconPictogram/128/icon_question.png.meta | 182 + .../IconPictogram/128/icon_question_round.png | Bin 0 -> 5247 bytes .../128/icon_question_round.png.meta | 156 + .../IconPictogram/128/icon_ranking.png | Bin 0 -> 3687 bytes .../IconPictogram/128/icon_ranking.png.meta | 182 + .../IconPictogram/128/icon_remove.png | Bin 0 -> 3235 bytes .../IconPictogram/128/icon_remove.png.meta | 156 + .../IconPictogram/128/icon_search.png | Bin 0 -> 5032 bytes .../IconPictogram/128/icon_search.png.meta | 156 + .../IconPictogram/128/icon_setting.png | Bin 0 -> 5007 bytes .../IconPictogram/128/icon_setting.png.meta | 156 + .../HeroicUI/IconPictogram/128/icon_sheos.png | Bin 0 -> 4535 bytes .../IconPictogram/128/icon_sheos.png.meta | 182 + .../IconPictogram/128/icon_shield.png | Bin 0 -> 5873 bytes .../IconPictogram/128/icon_shield.png.meta | 156 + .../HeroicUI/IconPictogram/128/icon_skull.png | Bin 0 -> 5001 bytes .../IconPictogram/128/icon_skull.png.meta | 156 + .../HeroicUI/IconPictogram/128/icon_sound.png | Bin 0 -> 5051 bytes .../IconPictogram/128/icon_sound.png.meta | 156 + .../IconPictogram/128/icon_sound_mute.png | Bin 0 -> 5441 bytes .../128/icon_sound_mute.png.meta | 208 + .../HeroicUI/IconPictogram/128/icon_star.png | Bin 0 -> 4655 bytes .../IconPictogram/128/icon_star.png.meta | 156 + .../IconPictogram/128/icon_thumbs-up.png | Bin 0 -> 4106 bytes .../IconPictogram/128/icon_thumbs-up.png.meta | 182 + .../HeroicUI/IconPictogram/128/icon_timer.png | Bin 0 -> 5754 bytes .../IconPictogram/128/icon_timer.png.meta | 156 + .../IconPictogram/128/icon_trophy.png | Bin 0 -> 4935 bytes .../IconPictogram/128/icon_trophy.png.meta | 156 + .../IconPictogram/128/icon_unlock.png | Bin 0 -> 4166 bytes .../IconPictogram/128/icon_unlock.png.meta | 156 + .../HeroicUI/IconPictogram/128/icon_user.png | Bin 0 -> 4701 bytes .../IconPictogram/128/icon_user.png.meta | 156 + .../IconPictogram/128/icon_viration.png | Bin 0 -> 4670 bytes .../IconPictogram/128/icon_viration.png.meta | 260 + .../IconPictogram/128/icon_viration_mute.png | Bin 0 -> 5344 bytes .../128/icon_viration_mute.png.meta | 208 + .../HeroicUI/IconPictogram/Trimmed.meta | 8 + .../IconPictogram/Trimmed/icon_add.png | Bin 0 -> 489 bytes .../IconPictogram/Trimmed/icon_add.png.meta | 156 + .../IconPictogram/Trimmed/icon_alarm.png | Bin 0 -> 1529 bytes .../IconPictogram/Trimmed/icon_alarm.png.meta | 156 + .../IconPictogram/Trimmed/icon_alarm_mute.png | Bin 0 -> 1863 bytes .../Trimmed/icon_alarm_mute.png.meta | 156 + .../IconPictogram/Trimmed/icon_align.png | Bin 0 -> 1034 bytes .../IconPictogram/Trimmed/icon_align.png.meta | 182 + .../IconPictogram/Trimmed/icon_anvil.png | Bin 0 -> 1063 bytes .../IconPictogram/Trimmed/icon_anvil.png.meta | 182 + .../IconPictogram/Trimmed/icon_armor.png | Bin 0 -> 2722 bytes .../IconPictogram/Trimmed/icon_armor.png.meta | 260 + .../IconPictogram/Trimmed/icon_arrow_back.png | Bin 0 -> 1369 bytes .../Trimmed/icon_arrow_back.png.meta | 156 + .../Trimmed/icon_arrow_bottom.png | Bin 0 -> 1320 bytes .../Trimmed/icon_arrow_bottom.png.meta | 156 + .../IconPictogram/Trimmed/icon_arrow_down.png | Bin 0 -> 1273 bytes .../Trimmed/icon_arrow_down.png.meta | 156 + .../Trimmed/icon_arrow_forward.png | Bin 0 -> 1306 bytes .../Trimmed/icon_arrow_forward.png.meta | 156 + .../IconPictogram/Trimmed/icon_arrow_left.png | Bin 0 -> 1316 bytes .../Trimmed/icon_arrow_left.png.meta | 156 + .../Trimmed/icon_arrow_right.png | Bin 0 -> 1352 bytes .../Trimmed/icon_arrow_right.png.meta | 156 + .../IconPictogram/Trimmed/icon_arrow_up-1.png | Bin 0 -> 1282 bytes .../Trimmed/icon_arrow_up-1.png.meta | 156 + .../IconPictogram/Trimmed/icon_arrow_up.png | Bin 0 -> 1311 bytes .../Trimmed/icon_arrow_up.png.meta | 156 + .../IconPictogram/Trimmed/icon_attack.png | Bin 0 -> 1737 bytes .../Trimmed/icon_attack.png.meta | 156 + .../IconPictogram/Trimmed/icon_battle.png | Bin 0 -> 2374 bytes .../Trimmed/icon_battle.png.meta | 182 + .../IconPictogram/Trimmed/icon_book.png | Bin 0 -> 962 bytes .../IconPictogram/Trimmed/icon_book.png.meta | 182 + .../IconPictogram/Trimmed/icon_book_open.png | Bin 0 -> 1510 bytes .../Trimmed/icon_book_open.png.meta | 156 + .../IconPictogram/Trimmed/icon_bow.png | Bin 0 -> 2312 bytes .../IconPictogram/Trimmed/icon_bow.png.meta | 156 + .../IconPictogram/Trimmed/icon_calendar.png | Bin 0 -> 686 bytes .../Trimmed/icon_calendar.png.meta | 182 + .../IconPictogram/Trimmed/icon_cancle.png | Bin 0 -> 1216 bytes .../Trimmed/icon_cancle.png.meta | 156 + .../Trimmed/icon_cancle_round.png | Bin 0 -> 2106 bytes .../Trimmed/icon_cancle_round.png.meta | 156 + .../IconPictogram/Trimmed/icon_chat.png | Bin 0 -> 2141 bytes .../IconPictogram/Trimmed/icon_chat.png.meta | 156 + .../IconPictogram/Trimmed/icon_check.png | Bin 0 -> 1685 bytes .../IconPictogram/Trimmed/icon_check.png.meta | 156 + .../Trimmed/icon_check_round.png | Bin 0 -> 2241 bytes .../Trimmed/icon_check_round.png.meta | 156 + .../IconPictogram/Trimmed/icon_chest.png | Bin 0 -> 1012 bytes .../IconPictogram/Trimmed/icon_chest.png.meta | 234 + .../IconPictogram/Trimmed/icon_crown.png | Bin 0 -> 1349 bytes .../IconPictogram/Trimmed/icon_crown.png.meta | 182 + .../IconPictogram/Trimmed/icon_damage.png | Bin 0 -> 2189 bytes .../Trimmed/icon_damage.png.meta | 156 + .../IconPictogram/Trimmed/icon_defense.png | Bin 0 -> 1547 bytes .../Trimmed/icon_defense.png.meta | 156 + .../IconPictogram/Trimmed/icon_delete.png | Bin 0 -> 866 bytes .../Trimmed/icon_delete.png.meta | 182 + .../IconPictogram/Trimmed/icon_edit.png | Bin 0 -> 1262 bytes .../IconPictogram/Trimmed/icon_edit.png.meta | 182 + .../IconPictogram/Trimmed/icon_emoji.png | Bin 0 -> 2201 bytes .../IconPictogram/Trimmed/icon_emoji.png.meta | 156 + .../Trimmed/icon_exclamation.png | Bin 0 -> 708 bytes .../Trimmed/icon_exclamation.png.meta | 182 + .../Trimmed/icon_exclamation_round.png | Bin 0 -> 1963 bytes .../Trimmed/icon_exclamation_round.png.meta | 156 + .../IconPictogram/Trimmed/icon_fire.png | Bin 0 -> 2195 bytes .../IconPictogram/Trimmed/icon_fire.png.meta | 156 + .../IconPictogram/Trimmed/icon_friends.png | Bin 0 -> 2404 bytes .../Trimmed/icon_friends.png.meta | 182 + .../IconPictogram/Trimmed/icon_gift.png | Bin 0 -> 948 bytes .../IconPictogram/Trimmed/icon_gift.png.meta | 260 + .../IconPictogram/Trimmed/icon_globe.png | Bin 0 -> 3049 bytes .../IconPictogram/Trimmed/icon_globe.png.meta | 156 + .../IconPictogram/Trimmed/icon_growth.png | Bin 0 -> 1961 bytes .../Trimmed/icon_growth.png.meta | 182 + .../IconPictogram/Trimmed/icon_headgear.png | Bin 0 -> 1727 bytes .../Trimmed/icon_headgear.png.meta | 156 + .../IconPictogram/Trimmed/icon_heart.png | Bin 0 -> 1607 bytes .../IconPictogram/Trimmed/icon_heart.png.meta | 156 + .../IconPictogram/Trimmed/icon_home.png | Bin 0 -> 1247 bytes .../IconPictogram/Trimmed/icon_home.png.meta | 156 + .../IconPictogram/Trimmed/icon_image.png | Bin 0 -> 1394 bytes .../IconPictogram/Trimmed/icon_image.png.meta | 156 + .../IconPictogram/Trimmed/icon_info.png | Bin 0 -> 777 bytes .../IconPictogram/Trimmed/icon_info.png.meta | 182 + .../IconPictogram/Trimmed/icon_info_round.png | Bin 0 -> 1928 bytes .../Trimmed/icon_info_round.png.meta | 156 + .../IconPictogram/Trimmed/icon_lock.png | Bin 0 -> 1226 bytes .../IconPictogram/Trimmed/icon_lock.png.meta | 156 + .../IconPictogram/Trimmed/icon_map.png | Bin 0 -> 1731 bytes .../IconPictogram/Trimmed/icon_map.png.meta | 156 + .../IconPictogram/Trimmed/icon_menu.png | Bin 0 -> 391 bytes .../IconPictogram/Trimmed/icon_menu.png.meta | 208 + .../IconPictogram/Trimmed/icon_message.png | Bin 0 -> 1484 bytes .../Trimmed/icon_message.png.meta | 156 + .../IconPictogram/Trimmed/icon_music.png | Bin 0 -> 1433 bytes .../IconPictogram/Trimmed/icon_music.png.meta | 156 + .../IconPictogram/Trimmed/icon_music_mute.png | Bin 0 -> 2004 bytes .../Trimmed/icon_music_mute.png.meta | 156 + .../IconPictogram/Trimmed/icon_pause.png | Bin 0 -> 370 bytes .../IconPictogram/Trimmed/icon_pause.png.meta | 182 + .../IconPictogram/Trimmed/icon_pin.png | Bin 0 -> 1926 bytes .../IconPictogram/Trimmed/icon_pin.png.meta | 156 + .../IconPictogram/Trimmed/icon_play.png | Bin 0 -> 1002 bytes .../IconPictogram/Trimmed/icon_play.png.meta | 156 + .../IconPictogram/Trimmed/icon_question.png | Bin 0 -> 1382 bytes .../Trimmed/icon_question.png.meta | 182 + .../Trimmed/icon_question_round.png | Bin 0 -> 2255 bytes .../Trimmed/icon_question_round.png.meta | 156 + .../IconPictogram/Trimmed/icon_ranking.png | Bin 0 -> 777 bytes .../Trimmed/icon_ranking.png.meta | 182 + .../IconPictogram/Trimmed/icon_remove.png | Bin 0 -> 227 bytes .../Trimmed/icon_remove.png.meta | 156 + .../IconPictogram/Trimmed/icon_search.png | Bin 0 -> 2109 bytes .../Trimmed/icon_search.png.meta | 156 + .../IconPictogram/Trimmed/icon_setting.png | Bin 0 -> 2054 bytes .../Trimmed/icon_setting.png.meta | 156 + .../IconPictogram/Trimmed/icon_sheos.png | Bin 0 -> 1547 bytes .../IconPictogram/Trimmed/icon_sheos.png.meta | 182 + .../IconPictogram/Trimmed/icon_shield.png | Bin 0 -> 2732 bytes .../Trimmed/icon_shield.png.meta | 156 + .../IconPictogram/Trimmed/icon_skull.png | Bin 0 -> 1991 bytes .../IconPictogram/Trimmed/icon_skull.png.meta | 156 + .../IconPictogram/Trimmed/icon_sound.png | Bin 0 -> 2045 bytes .../IconPictogram/Trimmed/icon_sound.png.meta | 156 + .../IconPictogram/Trimmed/icon_sound_mute.png | Bin 0 -> 2558 bytes .../Trimmed/icon_sound_mute.png.meta | 208 + .../IconPictogram/Trimmed/icon_star.png | Bin 0 -> 1737 bytes .../IconPictogram/Trimmed/icon_star.png.meta | 156 + .../IconPictogram/Trimmed/icon_thumbs-up.png | Bin 0 -> 1176 bytes .../Trimmed/icon_thumbs-up.png.meta | 182 + .../IconPictogram/Trimmed/icon_timer.png | Bin 0 -> 2658 bytes .../IconPictogram/Trimmed/icon_timer.png.meta | 156 + .../IconPictogram/Trimmed/icon_trophy.png | Bin 0 -> 1957 bytes .../Trimmed/icon_trophy.png.meta | 156 + .../IconPictogram/Trimmed/icon_unlock.png | Bin 0 -> 1260 bytes .../Trimmed/icon_unlock.png.meta | 156 + .../IconPictogram/Trimmed/icon_user.png | Bin 0 -> 1698 bytes .../IconPictogram/Trimmed/icon_user.png.meta | 156 + .../IconPictogram/Trimmed/icon_viration.png | Bin 0 -> 1735 bytes .../Trimmed/icon_viration.png.meta | 260 + .../Trimmed/icon_viration_mute.png | Bin 0 -> 2434 bytes .../Trimmed/icon_viration_mute.png.meta | 208 + .../HeroicUI/IconPictogramSVG.meta | 8 + .../HeroicUI/IconPictogramSVG/add.svg | 12 + .../HeroicUI/IconPictogramSVG/add.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/alarm.svg | 12 + .../HeroicUI/IconPictogramSVG/alarm.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/alarm_mute.svg | 16 + .../IconPictogramSVG/alarm_mute.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/align.svg | 12 + .../HeroicUI/IconPictogramSVG/align.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/anvil.svg | 12 + .../HeroicUI/IconPictogramSVG/anvil.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/armor.svg | 12 + .../HeroicUI/IconPictogramSVG/armor.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/arrow_back.svg | 12 + .../IconPictogramSVG/arrow_back.svg.meta | 7 + .../IconPictogramSVG/arrow_bottom.svg | 12 + .../IconPictogramSVG/arrow_bottom.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/arrow_down.svg | 12 + .../IconPictogramSVG/arrow_down.svg.meta | 7 + .../IconPictogramSVG/arrow_forward.svg | 12 + .../IconPictogramSVG/arrow_forward.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/arrow_left.svg | 12 + .../IconPictogramSVG/arrow_left.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/arrow_right.svg | 12 + .../IconPictogramSVG/arrow_right.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/arrow_top.svg | 12 + .../IconPictogramSVG/arrow_top.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/arrow_up.svg | 12 + .../IconPictogramSVG/arrow_up.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/attack.svg | 12 + .../HeroicUI/IconPictogramSVG/attack.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/battle.svg | 12 + .../HeroicUI/IconPictogramSVG/battle.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/book.svg | 12 + .../HeroicUI/IconPictogramSVG/book.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/book_open.svg | 12 + .../IconPictogramSVG/book_open.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/bow.svg | 12 + .../HeroicUI/IconPictogramSVG/bow.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/calendar.svg | 12 + .../IconPictogramSVG/calendar.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/cancle.svg | 12 + .../HeroicUI/IconPictogramSVG/cancle.svg.meta | 7 + .../IconPictogramSVG/cancle_round.svg | 12 + .../IconPictogramSVG/cancle_round.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/chat.svg | 12 + .../HeroicUI/IconPictogramSVG/chat.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/check.svg | 12 + .../HeroicUI/IconPictogramSVG/check.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/check_round.svg | 12 + .../IconPictogramSVG/check_round.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/chest.svg | 13 + .../HeroicUI/IconPictogramSVG/chest.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/crown.svg | 12 + .../HeroicUI/IconPictogramSVG/crown.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/damage.svg | 12 + .../HeroicUI/IconPictogramSVG/damage.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/defense.svg | 12 + .../IconPictogramSVG/defense.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/delete.svg | 12 + .../HeroicUI/IconPictogramSVG/delete.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/edit.svg | 12 + .../HeroicUI/IconPictogramSVG/edit.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/emoji.svg | 12 + .../HeroicUI/IconPictogramSVG/emoji.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/exclamation.svg | 12 + .../IconPictogramSVG/exclamation.svg.meta | 7 + .../IconPictogramSVG/exclamation_round.svg | 12 + .../exclamation_round.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/fire.svg | 12 + .../HeroicUI/IconPictogramSVG/fire.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/friends.svg | 12 + .../IconPictogramSVG/friends.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/gift.svg | 12 + .../HeroicUI/IconPictogramSVG/gift.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/globe.svg | 12 + .../HeroicUI/IconPictogramSVG/globe.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/growth.svg | 12 + .../HeroicUI/IconPictogramSVG/growth.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/headgear.svg | 12 + .../IconPictogramSVG/headgear.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/heart.svg | 12 + .../HeroicUI/IconPictogramSVG/heart.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/home.svg | 5 + .../HeroicUI/IconPictogramSVG/home.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/image.svg | 12 + .../HeroicUI/IconPictogramSVG/image.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/info.svg | 12 + .../HeroicUI/IconPictogramSVG/info.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/info_round.svg | 12 + .../IconPictogramSVG/info_round.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/location.svg | 12 + .../IconPictogramSVG/location.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/lock.svg | 12 + .../HeroicUI/IconPictogramSVG/lock.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/map.svg | 12 + .../HeroicUI/IconPictogramSVG/map.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/menu.svg | 12 + .../HeroicUI/IconPictogramSVG/menu.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/message.svg | 12 + .../IconPictogramSVG/message.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/music.svg | 12 + .../HeroicUI/IconPictogramSVG/music.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/music_mute.svg | 12 + .../IconPictogramSVG/music_mute.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/pause.svg | 12 + .../HeroicUI/IconPictogramSVG/pause.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/play.svg | 12 + .../HeroicUI/IconPictogramSVG/play.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/question.svg | 12 + .../IconPictogramSVG/question.svg.meta | 7 + .../IconPictogramSVG/question_round.svg | 12 + .../IconPictogramSVG/question_round.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/ranking.svg | 12 + .../IconPictogramSVG/ranking.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/remove.svg | 5 + .../HeroicUI/IconPictogramSVG/remove.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/search.svg | 12 + .../HeroicUI/IconPictogramSVG/search.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/setting.svg | 12 + .../IconPictogramSVG/setting.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/sheos.svg | 12 + .../HeroicUI/IconPictogramSVG/sheos.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/shield.svg | 12 + .../HeroicUI/IconPictogramSVG/shield.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/skull.svg | 12 + .../HeroicUI/IconPictogramSVG/skull.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/sound.svg | 12 + .../HeroicUI/IconPictogramSVG/sound.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/sound_mute.svg | 12 + .../IconPictogramSVG/sound_mute.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/star.svg | 12 + .../HeroicUI/IconPictogramSVG/star.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/thumbs-up.svg | 12 + .../IconPictogramSVG/thumbs-up.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/timer.svg | 12 + .../HeroicUI/IconPictogramSVG/timer.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/trophy.svg | 12 + .../HeroicUI/IconPictogramSVG/trophy.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/unlock.svg | 12 + .../HeroicUI/IconPictogramSVG/unlock.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/user.svg | 12 + .../HeroicUI/IconPictogramSVG/user.svg.meta | 7 + .../HeroicUI/IconPictogramSVG/viration.svg | 13 + .../IconPictogramSVG/viration.svg.meta | 7 + .../IconPictogramSVG/viration_mute.svg | 18 + .../IconPictogramSVG/viration_mute.svg.meta | 7 + .../UnityHiroInventory/HeroicUI/Loading.meta | 8 + .../HeroicUI/Loading/loading_bg_dark.png | Bin 0 -> 667 bytes .../HeroicUI/Loading/loading_bg_dark.png.meta | 156 + .../HeroicUI/Loading/loading_bg_white.png | Bin 0 -> 664 bytes .../Loading/loading_bg_white.png.meta | 156 + .../Loading/loading_circular_color.png | Bin 0 -> 1865 bytes .../Loading/loading_circular_color.png.meta | 156 + .../Loading/loading_circular_violet.png | Bin 0 -> 2248 bytes .../Loading/loading_circular_violet.png.meta | 156 + .../Loading/loading_circular_white.png | Bin 0 -> 2229 bytes .../Loading/loading_circular_white.png.meta | 156 + .../UnityHiroInventory/HeroicUI/Popup.meta | 8 + .../Popup/button_circle_h69_icon_close.png | Bin 0 -> 405 bytes .../button_circle_h69_icon_close.png.meta | 156 + .../button_circle_h69_merged_icon_close.png | Bin 0 -> 2161 bytes ...tton_circle_h69_merged_icon_close.png.meta | 156 + .../Popup/button_circle_h69_white_bg.png | Bin 0 -> 1531 bytes .../Popup/button_circle_h69_white_bg.png.meta | 156 + .../Popup/divider_horizontal_dotline_gray.png | Bin 0 -> 2832 bytes .../divider_horizontal_dotline_gray.png.meta | 156 + .../divider_horizontal_dotline_white.png | Bin 0 -> 2832 bytes .../divider_horizontal_dotline_white.png.meta | 156 + .../HeroicUI/Popup/divider_line_white.png | Bin 0 -> 2832 bytes .../Popup/divider_line_white.png.meta | 156 + .../Popup/popup_merged_left_panel.png | Bin 0 -> 4648 bytes .../Popup/popup_merged_left_panel.png.meta | 156 + .../HeroicUI/Popup/popup_merged_topbar_01.png | Bin 0 -> 4451 bytes .../Popup/popup_merged_topbar_01.png.meta | 156 + .../HeroicUI/Popup/popup_merged_topbar_02.png | Bin 0 -> 4398 bytes .../Popup/popup_merged_topbar_02.png.meta | 156 + .../HeroicUI/Popup/popup_white_bg.png | Bin 0 -> 1752 bytes .../HeroicUI/Popup/popup_white_bg.png.meta | 156 + .../HeroicUI/Popup/popup_white_bg_shadow.png | Bin 0 -> 2858 bytes .../Popup/popup_white_bg_shadow.png.meta | 156 + .../HeroicUI/Popup/popup_white_panel_Left.png | Bin 0 -> 2535 bytes .../Popup/popup_white_panel_Left.png.meta | 156 + .../Popup/popup_white_panel_bottom.png | Bin 0 -> 2320 bytes .../Popup/popup_white_panel_bottom.png.meta | 156 + .../Popup/popup_white_panel_right.png | Bin 0 -> 2392 bytes .../Popup/popup_white_panel_right.png.meta | 156 + .../HeroicUI/Popup/popup_white_panel_top.png | Bin 0 -> 2299 bytes .../Popup/popup_white_panel_top.png.meta | 156 + .../UnityHiroInventory/HeroicUI/Progress.meta | 8 + .../Progress/progress_basic_l_bg_gray.png | Bin 0 -> 705 bytes .../progress_basic_l_bg_gray.png.meta | 156 + .../Progress/progress_basic_l_bg_white.png | Bin 0 -> 698 bytes .../progress_basic_l_bg_white.png.meta | 156 + .../Progress/progress_basic_l_fill_blue.png | Bin 0 -> 416 bytes .../progress_basic_l_fill_blue.png.meta | 156 + .../Progress/progress_basic_l_fill_mint.png | Bin 0 -> 396 bytes .../progress_basic_l_fill_mint.png.meta | 156 + .../Progress/progress_basic_l_fill_orange.png | Bin 0 -> 415 bytes .../progress_basic_l_fill_orange.png.meta | 156 + .../Progress/progress_basic_l_fill_pink.png | Bin 0 -> 396 bytes .../progress_basic_l_fill_pink.png.meta | 156 + .../Progress/progress_basic_l_fill_purple.png | Bin 0 -> 414 bytes .../progress_basic_l_fill_purple.png.meta | 156 + .../Progress/progress_basic_l_fill_white.png | Bin 0 -> 1673 bytes .../progress_basic_l_fill_white.png.meta | 156 + .../Progress/progress_basic_s_bg_gray.png | Bin 0 -> 483 bytes .../progress_basic_s_bg_gray.png.meta | 156 + .../Progress/progress_basic_s_bg_white.png | Bin 0 -> 467 bytes .../progress_basic_s_bg_white.png.meta | 156 + .../Progress/progress_basic_s_fill_blue.png | Bin 0 -> 318 bytes .../progress_basic_s_fill_blue.png.meta | 156 + .../Progress/progress_basic_s_fill_mint.png | Bin 0 -> 315 bytes .../progress_basic_s_fill_mint.png.meta | 156 + .../Progress/progress_basic_s_fill_orange.png | Bin 0 -> 318 bytes .../progress_basic_s_fill_orange.png.meta | 156 + .../Progress/progress_basic_s_fill_pink.png | Bin 0 -> 1596 bytes .../progress_basic_s_fill_pink.png.meta | 156 + .../Progress/progress_basic_s_fill_white.png | Bin 0 -> 1801 bytes .../progress_basic_s_fill_white.png.meta | 156 + .../Progress/progress_border_fill_pink.png | Bin 0 -> 359 bytes .../progress_border_fill_pink.png.meta | 156 + .../Progress/progress_border_fill_white.png | Bin 0 -> 360 bytes .../progress_border_fill_white.png.meta | 156 + .../Progress/progress_border_merged_bg.png | Bin 0 -> 1038 bytes .../progress_border_merged_bg.png.meta | 156 + .../Progress/progress_border_white_bg.png | Bin 0 -> 616 bytes .../progress_border_white_bg.png.meta | 156 + .../Progress/progress_border_white_border.png | Bin 0 -> 951 bytes .../progress_border_white_border.png.meta | 156 + .../progress_lv_badge_burst_violet.png | Bin 0 -> 1196 bytes .../progress_lv_badge_burst_violet.png.meta | 156 + .../progress_lv_badge_burst_white.png | Bin 0 -> 1169 bytes .../progress_lv_badge_burst_white.png.meta | 156 + .../progress_lv_badge_hexagon_violet.png | Bin 0 -> 915 bytes .../progress_lv_badge_hexagon_violet.png.meta | 156 + .../progress_lv_badge_hexagon_white.png | Bin 0 -> 771 bytes .../progress_lv_badge_hexagon_white.png.meta | 156 + .../HeroicUI/Progress/progress_pass_bg_01.png | Bin 0 -> 443 bytes .../Progress/progress_pass_bg_01.png.meta | 156 + .../Progress/progress_pass_bg_01_white.png | Bin 0 -> 400 bytes .../progress_pass_bg_01_white.png.meta | 156 + .../HeroicUI/Progress/progress_pass_bg_02.png | Bin 0 -> 335 bytes .../Progress/progress_pass_bg_02.png.meta | 156 + .../Progress/progress_pass_bg_02_white.png | Bin 0 -> 334 bytes .../progress_pass_bg_02_white.png.meta | 156 + .../HeroicUI/Progress/progress_pass_fill.png | Bin 0 -> 104 bytes .../Progress/progress_pass_fill.png.meta | 156 + .../Progress/progress_pass_fill_white.png | Bin 0 -> 104 bytes .../progress_pass_fill_white.png.meta | 156 + .../progress_pass_step_badge_gray.png | Bin 0 -> 1025 bytes .../progress_pass_step_badge_gray.png.meta | 156 + .../progress_pass_step_badge_violet.png | Bin 0 -> 1025 bytes .../progress_pass_step_badge_violet.png.meta | 156 + .../progress_pass_step_badge_white.png | Bin 0 -> 931 bytes .../progress_pass_step_badge_white.png.meta | 156 + .../Progress/progress_pass_textbox_violet.png | Bin 0 -> 1101 bytes .../progress_pass_textbox_violet.png.meta | 156 + .../Progress/progress_pass_textbox_white.png | Bin 0 -> 1039 bytes .../progress_pass_textbox_white.png.meta | 156 + .../Progress/progress_step_gradient.png | Bin 0 -> 1420 bytes .../Progress/progress_step_gradient.png.meta | 390 + .../HeroicUI/Progress/progress_step_gray.png | Bin 0 -> 815 bytes .../Progress/progress_step_gray.png.meta | 390 + .../Progress/progress_step_purple.png | Bin 0 -> 797 bytes .../Progress/progress_step_purple.png.meta | 390 + .../HeroicUI/Progress/progress_step_white.png | Bin 0 -> 825 bytes .../Progress/progress_step_white.png.meta | 390 + .../HeroicUI/RadioButton.meta | 8 + .../RadioButton/radio_button_01_disabled.png | Bin 0 -> 1215 bytes .../radio_button_01_disabled.png.meta | 156 + .../RadioButton/radio_button_01_off.png | Bin 0 -> 1285 bytes .../RadioButton/radio_button_01_off.png.meta | 156 + .../RadioButton/radio_button_01_on.png | Bin 0 -> 1335 bytes .../RadioButton/radio_button_01_on.png.meta | 156 + .../RadioButton/radio_button_01_white_bg.png | Bin 0 -> 846 bytes .../radio_button_01_white_bg.png.meta | 156 + .../radio_button_01_white_radio.png | Bin 0 -> 374 bytes .../radio_button_01_white_radio.png.meta | 156 + .../RadioButton/radio_button_02_disabled.png | Bin 0 -> 1367 bytes .../radio_button_02_disabled.png.meta | 156 + .../RadioButton/radio_button_02_off.png | Bin 0 -> 1363 bytes .../RadioButton/radio_button_02_off.png.meta | 156 + .../RadioButton/radio_button_02_on.png | Bin 0 -> 2077 bytes .../RadioButton/radio_button_02_on.png.meta | 156 + .../RadioButton/radio_button_02_white_bg.png | Bin 0 -> 846 bytes .../radio_button_02_white_bg.png.meta | 156 + .../radio_button_02_white_border.png | Bin 0 -> 1138 bytes .../radio_button_02_white_border.png.meta | 156 + .../radio_button_02_white_radio.png | Bin 0 -> 525 bytes .../radio_button_02_white_radio.png.meta | 156 + .../UnityHiroInventory/HeroicUI/ShopItem.meta | 8 + .../HeroicUI/ShopItem/gem_01.png | Bin 0 -> 27227 bytes .../HeroicUI/ShopItem/gem_01.png.meta | 156 + .../HeroicUI/ShopItem/gem_02.png | Bin 0 -> 31175 bytes .../HeroicUI/ShopItem/gem_02.png.meta | 156 + .../HeroicUI/ShopItem/gem_03.png | Bin 0 -> 49026 bytes .../HeroicUI/ShopItem/gem_03.png.meta | 156 + .../HeroicUI/ShopItem/gem_04.png | Bin 0 -> 73520 bytes .../HeroicUI/ShopItem/gem_04.png.meta | 156 + .../HeroicUI/ShopItem/gem_05.png | Bin 0 -> 88252 bytes .../HeroicUI/ShopItem/gem_05.png.meta | 156 + .../HeroicUI/ShopItem/gem_06.png | Bin 0 -> 134586 bytes .../HeroicUI/ShopItem/gem_06.png.meta | 156 + .../HeroicUI/ShopItem/gem_shadowless_01.png | Bin 0 -> 26659 bytes .../ShopItem/gem_shadowless_01.png.meta | 156 + .../HeroicUI/ShopItem/gem_shadowless_02.png | Bin 0 -> 28900 bytes .../ShopItem/gem_shadowless_02.png.meta | 156 + .../HeroicUI/ShopItem/gem_shadowless_03.png | Bin 0 -> 45671 bytes .../ShopItem/gem_shadowless_03.png.meta | 156 + .../HeroicUI/ShopItem/gem_shadowless_04.png | Bin 0 -> 68900 bytes .../ShopItem/gem_shadowless_04.png.meta | 156 + .../HeroicUI/ShopItem/gem_shadowless_05.png | Bin 0 -> 83347 bytes .../ShopItem/gem_shadowless_05.png.meta | 156 + .../HeroicUI/ShopItem/gem_shadowless_06.png | Bin 0 -> 130086 bytes .../ShopItem/gem_shadowless_06.png.meta | 182 + .../HeroicUI/ShopItem/gold_01.png | Bin 0 -> 33551 bytes .../HeroicUI/ShopItem/gold_01.png.meta | 156 + .../HeroicUI/ShopItem/gold_02.png | Bin 0 -> 59051 bytes .../HeroicUI/ShopItem/gold_02.png.meta | 156 + .../HeroicUI/ShopItem/gold_03.png | Bin 0 -> 89601 bytes .../HeroicUI/ShopItem/gold_03.png.meta | 156 + .../HeroicUI/ShopItem/gold_04.png | Bin 0 -> 119853 bytes .../HeroicUI/ShopItem/gold_04.png.meta | 156 + .../HeroicUI/ShopItem/gold_05.png | Bin 0 -> 144990 bytes .../HeroicUI/ShopItem/gold_05.png.meta | 156 + .../HeroicUI/ShopItem/gold_06.png | Bin 0 -> 203519 bytes .../HeroicUI/ShopItem/gold_06.png.meta | 156 + .../HeroicUI/ShopItem/gold_shadowless_01.png | Bin 0 -> 30992 bytes .../ShopItem/gold_shadowless_01.png.meta | 156 + .../HeroicUI/ShopItem/gold_shadowless_02.png | Bin 0 -> 56359 bytes .../ShopItem/gold_shadowless_02.png.meta | 156 + .../HeroicUI/ShopItem/gold_shadowless_03.png | Bin 0 -> 83956 bytes .../ShopItem/gold_shadowless_03.png.meta | 156 + .../HeroicUI/ShopItem/gold_shadowless_04.png | Bin 0 -> 114974 bytes .../ShopItem/gold_shadowless_04.png.meta | 156 + .../HeroicUI/ShopItem/gold_shadowless_05.png | Bin 0 -> 139516 bytes .../ShopItem/gold_shadowless_05.png.meta | 156 + .../HeroicUI/ShopItem/gold_shadowless_06.png | Bin 0 -> 199081 bytes .../ShopItem/gold_shadowless_06.png.meta | 156 + .../UnityHiroInventory/HeroicUI/Slider.meta | 8 + .../HeroicUI/Slider/slider_merged_bg.png | Bin 0 -> 330 bytes .../HeroicUI/Slider/slider_merged_bg.png.meta | 156 + .../Slider/slider_merged_fill_violet.png | Bin 0 -> 235 bytes .../Slider/slider_merged_fill_violet.png.meta | 156 + .../Slider/slider_merged_handle_off.png | Bin 0 -> 724 bytes .../Slider/slider_merged_handle_off.png.meta | 156 + .../Slider/slider_merged_handle_on.png | Bin 0 -> 726 bytes .../Slider/slider_merged_handle_on.png.meta | 156 + .../HeroicUI/Slider/slider_white_bg.png | Bin 0 -> 209 bytes .../HeroicUI/Slider/slider_white_bg.png.meta | 156 + .../Slider/slider_white_handle_bg.png | Bin 0 -> 522 bytes .../Slider/slider_white_handle_bg.png.meta | 156 + .../Slider/slider_white_handle_border.png | Bin 0 -> 469 bytes .../slider_white_handle_border.png.meta | 156 + .../UnityHiroInventory/HeroicUI/Stepper.meta | 8 + .../Stepper/stepper_button_mimus_gray.png | Bin 0 -> 1240 bytes .../stepper_button_mimus_gray.png.meta | 156 + .../Stepper/stepper_button_mimus_violet.png | Bin 0 -> 2002 bytes .../stepper_button_mimus_violet.png.meta | 156 + .../Stepper/stepper_button_next_gray.png | Bin 0 -> 1788 bytes .../Stepper/stepper_button_next_gray.png.meta | 156 + .../Stepper/stepper_button_next_violet.png | Bin 0 -> 2430 bytes .../stepper_button_next_violet.png.meta | 156 + .../Stepper/stepper_button_plus_gray.png | Bin 0 -> 1283 bytes .../Stepper/stepper_button_plus_gray.png.meta | 156 + .../Stepper/stepper_button_plus_violet.png | Bin 0 -> 2043 bytes .../stepper_button_plus_violet.png.meta | 156 + .../Stepper/stepper_button_prev_gray.png | Bin 0 -> 1787 bytes .../Stepper/stepper_button_prev_gray.png.meta | 156 + .../Stepper/stepper_button_prev_violet.png | Bin 0 -> 2415 bytes .../stepper_button_prev_violet.png.meta | 156 + .../HeroicUI/Stepper/stepper_merged_bg.png | Bin 0 -> 919 bytes .../Stepper/stepper_merged_bg.png.meta | 156 + .../HeroicUI/Stepper/stepper_white_bg.png | Bin 0 -> 582 bytes .../Stepper/stepper_white_bg.png.meta | 156 + .../HeroicUI/Stepper/stepper_white_border.png | Bin 0 -> 717 bytes .../Stepper/stepper_white_border.png.meta | 156 + .../UnityHiroInventory/HeroicUI/Switch.meta | 8 + .../Switch/switch_01_colored_disabled_bg.png | Bin 0 -> 1243 bytes .../switch_01_colored_disabled_bg.png.meta | 156 + .../switch_01_colored_disabled_handle.png | Bin 0 -> 441 bytes ...switch_01_colored_disabled_handle.png.meta | 156 + .../Switch/switch_01_colored_off_handle.png | Bin 0 -> 454 bytes .../switch_01_colored_off_handle.png.meta | 156 + .../Switch/switch_01_colored_on_handle.png | Bin 0 -> 453 bytes .../switch_01_colored_on_handle.png.meta | 156 + .../Switch/switch_01_colored_onoff_bg.png | Bin 0 -> 1283 bytes .../switch_01_colored_onoff_bg.png.meta | 156 + .../Switch/switch_01_merged_disabled.png | Bin 0 -> 1533 bytes .../Switch/switch_01_merged_disabled.png.meta | 156 + .../HeroicUI/Switch/switch_01_merged_off.png | Bin 0 -> 1633 bytes .../Switch/switch_01_merged_off.png.meta | 156 + .../HeroicUI/Switch/switch_01_merged_on.png | Bin 0 -> 1615 bytes .../Switch/switch_01_merged_on.png.meta | 156 + .../HeroicUI/Switch/switch_01_white_bg.png | Bin 0 -> 1144 bytes .../Switch/switch_01_white_bg.png.meta | 156 + .../Switch/switch_01_white_handle.png | Bin 0 -> 436 bytes .../Switch/switch_01_white_handle.png.meta | 156 + .../Switch/switch_02_colored_disabled_bg.png | Bin 0 -> 968 bytes .../switch_02_colored_disabled_bg.png.meta | 156 + .../switch_02_colored_disabled_handle.png | Bin 0 -> 702 bytes ...switch_02_colored_disabled_handle.png.meta | 156 + .../Switch/switch_02_colored_off_bg.png | Bin 0 -> 1004 bytes .../Switch/switch_02_colored_off_bg.png.meta | 156 + .../Switch/switch_02_colored_off_handle.png | Bin 0 -> 751 bytes .../switch_02_colored_off_handle.png.meta | 156 + .../Switch/switch_02_colored_on_bg.png | Bin 0 -> 1016 bytes .../Switch/switch_02_colored_on_bg.png.meta | 156 + .../Switch/switch_02_colored_on_handle.png | Bin 0 -> 751 bytes .../switch_02_colored_on_handle.png.meta | 156 + .../Switch/switch_02_merged_disabled.png | Bin 0 -> 1752 bytes .../Switch/switch_02_merged_disabled.png.meta | 156 + .../HeroicUI/Switch/switch_02_merged_off.png | Bin 0 -> 1738 bytes .../Switch/switch_02_merged_off.png.meta | 156 + .../HeroicUI/Switch/switch_02_merged_on.png | Bin 0 -> 1792 bytes .../Switch/switch_02_merged_on.png.meta | 156 + .../HeroicUI/Switch/switch_02_white_bg.png | Bin 0 -> 965 bytes .../Switch/switch_02_white_bg.png.meta | 156 + .../Switch/switch_02_white_handle.png | Bin 0 -> 751 bytes .../Switch/switch_02_white_handle.png.meta | 156 + .../UnityHiroInventory/HeroicUI/Tab.meta | 8 + .../HeroicUI/Tab/sample.meta | 8 + .../tab_01_merged_focus_down_l_violet.png | Bin 0 -> 1054 bytes ...tab_01_merged_focus_down_l_violet.png.meta | 156 + .../tab_01_merged_focus_down_l_white.png | Bin 0 -> 1043 bytes .../tab_01_merged_focus_down_l_white.png.meta | 156 + .../tab_01_merged_focus_down_s_violet.png | Bin 0 -> 940 bytes ...tab_01_merged_focus_down_s_violet.png.meta | 156 + .../tab_01_merged_focus_down_s_white.png | Bin 0 -> 942 bytes .../tab_01_merged_focus_down_s_white.png.meta | 156 + .../tab_01_merged_focus_right_violet.png | Bin 0 -> 985 bytes .../tab_01_merged_focus_right_violet.png.meta | 156 + .../tab_01_merged_focus_right_white.png | Bin 0 -> 982 bytes .../tab_01_merged_focus_right_white.png.meta | 156 + .../sample/tab_01_merged_focus_up_violet.png | Bin 0 -> 1076 bytes .../tab_01_merged_focus_up_violet.png.meta | 156 + .../sample/tab_01_merged_focus_up_white.png | Bin 0 -> 1065 bytes .../tab_01_merged_focus_up_white.png.meta | 156 + .../HeroicUI/Tab/tab_01_colored_divider.png | Bin 0 -> 106 bytes .../Tab/tab_01_colored_divider.png.meta | 156 + .../HeroicUI/Tab/tab_01_violet_focus_bg.png | Bin 0 -> 608 bytes .../Tab/tab_01_violet_focus_bg.png.meta | 156 + .../Tab/tab_01_violet_focus_tail_left.png | Bin 0 -> 303 bytes .../tab_01_violet_focus_tail_left.png.meta | 156 + .../Tab/tab_01_violet_focus_tail_right.png | Bin 0 -> 306 bytes .../tab_01_violet_focus_tail_right.png.meta | 156 + .../Tab/tab_01_violet_focus_tail_up.png | Bin 0 -> 289 bytes .../Tab/tab_01_violet_focus_tail_up.png.meta | 156 + .../Tab/tab_01_violet_focus_tail_up_down.png | Bin 0 -> 288 bytes .../tab_01_violet_focus_tail_up_down.png.meta | 156 + .../HeroicUI/Tab/tab_01_white_bg_default.png | Bin 0 -> 701 bytes .../Tab/tab_01_white_bg_default.png.meta | 156 + .../HeroicUI/Tab/tab_01_white_divider.png | Bin 0 -> 106 bytes .../Tab/tab_01_white_divider.png.meta | 156 + .../HeroicUI/Tab/tab_01_white_focus_bg.png | Bin 0 -> 597 bytes .../Tab/tab_01_white_focus_bg.png.meta | 156 + .../Tab/tab_01_white_focus_tail_left.png | Bin 0 -> 252 bytes .../Tab/tab_01_white_focus_tail_left.png.meta | 156 + .../Tab/tab_01_white_focus_tail_right.png | Bin 0 -> 244 bytes .../tab_01_white_focus_tail_right.png.meta | 156 + .../Tab/tab_01_white_focus_tail_up.png | Bin 0 -> 1531 bytes .../Tab/tab_01_white_focus_tail_up.png.meta | 156 + .../Tab/tab_01_white_focus_tail_up_down.png | Bin 0 -> 1556 bytes .../tab_01_white_focus_tail_up_down.png.meta | 156 + .../HeroicUI/Tab/tab_02_colored_default.png | Bin 0 -> 398 bytes .../Tab/tab_02_colored_default.png.meta | 156 + .../HeroicUI/Tab/tab_02_colored_focus.png | Bin 0 -> 470 bytes .../Tab/tab_02_colored_focus.png.meta | 156 + .../HeroicUI/Tab/tab_02_white.png | Bin 0 -> 454 bytes .../HeroicUI/Tab/tab_02_white.png.meta | 156 + .../HeroicUI/Tab/tab_03_colored_default.png | Bin 0 -> 691 bytes .../Tab/tab_03_colored_default.png.meta | 156 + .../HeroicUI/Tab/tab_03_colored_focus.png | Bin 0 -> 631 bytes .../Tab/tab_03_colored_focus.png.meta | 156 + .../HeroicUI/Tab/tab_03_white_default.png | Bin 0 -> 820 bytes .../Tab/tab_03_white_default.png.meta | 156 + .../HeroicUI/Tab/tab_03_whtie_focus.png | Bin 0 -> 636 bytes .../HeroicUI/Tab/tab_03_whtie_focus.png.meta | 156 + .../HeroicUI/TextInput.meta | 8 + .../TextInput/text_input_merged_disabled.png | Bin 0 -> 1070 bytes .../text_input_merged_disabled.png.meta | 156 + .../TextInput/text_input_merged_gray.png | Bin 0 -> 1076 bytes .../TextInput/text_input_merged_gray.png.meta | 156 + .../text_input_merged_light_violet.png | Bin 0 -> 1071 bytes .../text_input_merged_light_violet.png.meta | 156 + .../TextInput/text_input_merged_red.png | Bin 0 -> 1101 bytes .../TextInput/text_input_merged_red.png.meta | 156 + .../TextInput/text_input_merged_violet.png | Bin 0 -> 998 bytes .../text_input_merged_violet.png.meta | 156 + .../TextInput/text_input_white_bg.png | Bin 0 -> 717 bytes .../TextInput/text_input_white_bg.png.meta | 156 + .../TextInput/text_input_white_border.png | Bin 0 -> 940 bytes .../text_input_white_border.png.meta | 156 + .../UnityHiroInventory/HeroicUI/Title.meta | 8 + .../HeroicUI/Title/title_ribbon_dark.png | Bin 0 -> 3545 bytes .../HeroicUI/Title/title_ribbon_dark.png.meta | 156 + .../HeroicUI/Title/title_ribbon_mint.png | Bin 0 -> 3606 bytes .../HeroicUI/Title/title_ribbon_mint.png.meta | 156 + .../HeroicUI/Title/title_ribbon_red.png | Bin 0 -> 3536 bytes .../HeroicUI/Title/title_ribbon_red.png.meta | 156 + .../HeroicUI/Title/title_ribbon_violet.png | Bin 0 -> 3666 bytes .../Title/title_ribbon_violet.png.meta | 156 + .../HeroicUI/TutorialHand.meta | 8 + .../HeroicUI/TutorialHand/hand_left_1.png | Bin 0 -> 9263 bytes .../TutorialHand/hand_left_1.png.meta | 156 + .../HeroicUI/TutorialHand/hand_left_2.png | Bin 0 -> 9144 bytes .../TutorialHand/hand_left_2.png.meta | 156 + .../HeroicUI/TutorialHand/hand_left_3.png | Bin 0 -> 8117 bytes .../TutorialHand/hand_left_3.png.meta | 156 + .../HeroicUI/TutorialHand/hand_left_4.png | Bin 0 -> 8519 bytes .../TutorialHand/hand_left_4.png.meta | 156 + .../HeroicUI/TutorialHand/hand_right_1.png | Bin 0 -> 9003 bytes .../TutorialHand/hand_right_1.png.meta | 156 + .../HeroicUI/TutorialHand/hand_right_2.png | Bin 0 -> 8668 bytes .../TutorialHand/hand_right_2.png.meta | 156 + .../HeroicUI/TutorialHand/hand_right_3.png | Bin 0 -> 8485 bytes .../TutorialHand/hand_right_3.png.meta | 156 + .../HeroicUI/TutorialHand/hand_right_4.png | Bin 0 -> 8925 bytes .../TutorialHand/hand_right_4.png.meta | 156 + .../UnityHiroInventory/HeroicUI/UI_etc.meta | 8 + .../HeroicUI/UI_etc/badge_burst_blue.png | Bin 0 -> 2535 bytes .../HeroicUI/UI_etc/badge_burst_blue.png.meta | 156 + .../HeroicUI/UI_etc/badge_burst_pink.png | Bin 0 -> 3570 bytes .../HeroicUI/UI_etc/badge_burst_pink.png.meta | 156 + .../HeroicUI/UI_etc/clan_frame.png | Bin 0 -> 6114 bytes .../HeroicUI/UI_etc/clan_frame.png.meta | 156 + .../HeroicUI/UI_etc/clan_in_blue.png | Bin 0 -> 2389 bytes .../HeroicUI/UI_etc/clan_in_blue.png.meta | 156 + .../HeroicUI/UI_etc/clan_in_coral.png | Bin 0 -> 2223 bytes .../HeroicUI/UI_etc/clan_in_coral.png.meta | 156 + .../HeroicUI/UI_etc/clan_in_mint.png | Bin 0 -> 2244 bytes .../HeroicUI/UI_etc/clan_in_mint.png.meta | 156 + .../HeroicUI/UI_etc/clan_in_navy.png | Bin 0 -> 2593 bytes .../HeroicUI/UI_etc/clan_in_navy.png.meta | 156 + .../HeroicUI/UI_etc/clan_in_pink.png | Bin 0 -> 2311 bytes .../HeroicUI/UI_etc/clan_in_pink.png.meta | 156 + .../HeroicUI/UI_etc/clan_in_red.png | Bin 0 -> 2353 bytes .../HeroicUI/UI_etc/clan_in_red.png.meta | 156 + .../HeroicUI/UI_etc/clan_in_violet.png | Bin 0 -> 2358 bytes .../HeroicUI/UI_etc/clan_in_violet.png.meta | 156 + .../HeroicUI/UI_etc/label_01_free.png | Bin 0 -> 510 bytes .../HeroicUI/UI_etc/label_01_free.png.meta | 156 + .../HeroicUI/UI_etc/label_01_new.png | Bin 0 -> 667 bytes .../HeroicUI/UI_etc/label_01_new.png.meta | 156 + .../HeroicUI/UI_etc/label_01_white.png | Bin 0 -> 498 bytes .../HeroicUI/UI_etc/label_01_white.png.meta | 156 + .../HeroicUI/UI_etc/label_grade_blue.png | Bin 0 -> 513 bytes .../HeroicUI/UI_etc/label_grade_blue.png.meta | 156 + .../HeroicUI/UI_etc/label_grade_coral.png | Bin 0 -> 520 bytes .../UI_etc/label_grade_coral.png.meta | 156 + .../HeroicUI/UI_etc/label_grade_gray.png | Bin 0 -> 522 bytes .../HeroicUI/UI_etc/label_grade_gray.png.meta | 156 + .../HeroicUI/UI_etc/label_grade_mint.png | Bin 0 -> 508 bytes .../HeroicUI/UI_etc/label_grade_mint.png.meta | 156 + .../HeroicUI/UI_etc/label_grade_purple.png | Bin 0 -> 511 bytes .../UI_etc/label_grade_purple.png.meta | 156 + .../HeroicUI/UI_etc/label_grade_white.png | Bin 0 -> 1786 bytes .../UI_etc/label_grade_white.png.meta | 156 + .../HeroicUI/UI_etc/label_grade_yellow.png | Bin 0 -> 508 bytes .../UI_etc/label_grade_yellow.png.meta | 156 + .../HeroicUI/UI_etc/label_oval_gray.png | Bin 0 -> 526 bytes .../HeroicUI/UI_etc/label_oval_gray.png.meta | 156 + .../HeroicUI/UI_etc/label_oval_white.png | Bin 0 -> 501 bytes .../HeroicUI/UI_etc/label_oval_white.png.meta | 156 + .../UI_etc/label_tapered_right_gradient.png | Bin 0 -> 747 bytes .../label_tapered_right_gradient.png.meta | 156 + .../HeroicUI/UI_etc/page_controller_off.png | Bin 0 -> 333 bytes .../UI_etc/page_controller_off.png.meta | 156 + .../HeroicUI/UI_etc/page_controller_on.png | Bin 0 -> 355 bytes .../UI_etc/page_controller_on.png.meta | 156 + .../HeroicUI/UI_etc/page_controller_white.png | Bin 0 -> 315 bytes .../UI_etc/page_controller_white.png.meta | 156 + .../HeroicUI/UI_etc/resource_icon_gem.png | Bin 0 -> 2817 bytes .../UI_etc/resource_icon_gem.png.meta | 156 + .../HeroicUI/UI_etc/resource_icon_gold.png | Bin 0 -> 2796 bytes .../UI_etc/resource_icon_gold.png.meta | 156 + .../HeroicUI/UI_etc/resource_merged_bg.png | Bin 0 -> 1076 bytes .../UI_etc/resource_merged_bg.png.meta | 156 + .../HeroicUI/UI_etc/resource_white_bg.png | Bin 0 -> 867 bytes .../UI_etc/resource_white_bg.png.meta | 156 + .../HeroicUI/UI_etc/resource_white_btn.png | Bin 0 -> 239 bytes .../UI_etc/resource_white_btn.png.meta | 156 + .../HeroicUI/UI_etc/star_grade_off.png | Bin 0 -> 936 bytes .../HeroicUI/UI_etc/star_grade_off.png.meta | 156 + .../HeroicUI/UI_etc/star_grade_on.png | Bin 0 -> 1274 bytes .../HeroicUI/UI_etc/star_grade_on.png.meta | 156 + .../HeroicUI/UI_etc/star_grade_white.png | Bin 0 -> 890 bytes .../HeroicUI/UI_etc/star_grade_white.png.meta | 156 + .../HeroicUI/UI_etc/toast_r14_dark.png | Bin 0 -> 646 bytes .../HeroicUI/UI_etc/toast_r14_dark.png.meta | 156 + .../HeroicUI/UI_etc/toast_r14_white.png | Bin 0 -> 653 bytes .../HeroicUI/UI_etc/toast_r14_white.png.meta | 156 + .../HeroicUI/UI_etc/tooltip_r8_dark_bg.png | Bin 0 -> 346 bytes .../UI_etc/tooltip_r8_dark_bg.png.meta | 156 + .../UI_etc/tooltip_r8_dark_tail_down.png | Bin 0 -> 508 bytes .../UI_etc/tooltip_r8_dark_tail_down.png.meta | 156 + .../UI_etc/tooltip_r8_dark_tail_up.png | Bin 0 -> 510 bytes .../UI_etc/tooltip_r8_dark_tail_up.png.meta | 156 + .../HeroicUI/UI_etc/tooltip_r8_white_bg.png | Bin 0 -> 313 bytes .../UI_etc/tooltip_r8_white_bg.png.meta | 156 + .../UI_etc/tooltip_r8_white_tail_down.png | Bin 0 -> 523 bytes .../tooltip_r8_white_tail_down.png.meta | 156 + .../UI_etc/tooltip_r8_white_tail_up.png | Bin 0 -> 501 bytes .../UI_etc/tooltip_r8_white_tail_up.png.meta | 156 + .../UnityHiroInventory/HeroicUI/USS.meta | 8 + .../HeroicUI/USS/HeroicUSS.uss | 621 + .../HeroicUI/USS/HeroicUSS.uss.meta | 11 + .../HeroicUI/USS/HeroicUSSGlobal.uss | 56 + .../HeroicUI/USS/HeroicUSSGlobal.uss.meta | 11 + .../Assets/UnityHiroInventory/Hiro.meta | 8 + .../UnityHiroInventory/Hiro/Hiro.Unity.dll | Bin 0 -> 11264 bytes .../Hiro/Hiro.Unity.dll.meta | 33 + .../Assets/UnityHiroInventory/Hiro/Hiro.dll | Bin 0 -> 792576 bytes .../UnityHiroInventory/Hiro/Hiro.dll.meta | 33 + .../Assets/UnityHiroInventory/Input.meta | 8 + .../Input/InputSystem_Actions.inputactions | 1057 + .../InputSystem_Actions.inputactions.meta | 14 + .../Assets/UnityHiroInventory/Packages.meta | 8 + .../UnityHiroInventory/Packages/Nakama.meta | 8 + .../Packages/Nakama/CHANGELOG.md | 410 + .../Packages/Nakama/CHANGELOG.md.meta | 7 + .../Packages/Nakama/Documentation.meta | 8 + .../Documentation/Nakama 2 + Unity Engine.md | 243 + .../Nakama 2 + Unity Engine.md.meta | 7 + .../Documentation/Nakama 2 + Unity Engine.pdf | Bin 0 -> 434600 bytes .../Nakama 2 + Unity Engine.pdf.meta | 7 + .../Packages/Nakama/Documentation/README.pdf | Bin 0 -> 70720 bytes .../Nakama/Documentation/README.pdf.meta | 7 + .../Packages/Nakama/Editor.meta | 8 + .../Nakama/Editor/NakamaEditor.asmdef | 15 + .../Nakama/Editor/NakamaEditor.asmdef.meta | 7 + .../Packages/Nakama/Editor/SampleScene.unity | 279 + .../Nakama/Editor/SampleScene.unity.meta | 7 + .../Packages/Nakama/Editor/Snippets.meta | 8 + .../Nakama/Editor/Snippets/AccountAndUsers.cs | 47 + .../Editor/Snippets/AccountAndUsers.cs.meta | 3 + .../Editor/Snippets/DeviceAuthentication.cs | 52 + .../Snippets/DeviceAuthentication.cs.meta | 3 + .../MatchmakerWithRelayedMultiplayer.cs | 82 + .../MatchmakerWithRelayedMultiplayer.cs.meta | 3 + .../Nakama/Editor/Snippets/NakamaManager.cs | 116 + .../Editor/Snippets/NakamaManager.cs.meta | 3 + .../Editor/Snippets/NakamaManagerUsage.cs | 35 + .../Snippets/NakamaManagerUsage.cs.meta | 3 + .../Editor/Snippets/RealtimeChatRoom.cs | 93 + .../Editor/Snippets/RealtimeChatRoom.cs.meta | 3 + .../Snippets/RejoinChatAfterDisconnect.cs | 78 + .../RejoinChatAfterDisconnect.cs.meta | 3 + .../Nakama/Editor/Snippets/SatoriExample.cs | 49 + .../Editor/Snippets/SatoriExample.cs.meta | 11 + .../Nakama/Editor/Snippets/SocketConnect.cs | 42 + .../Editor/Snippets/SocketConnect.cs.meta | 11 + .../Nakama/Editor/Snippets/WebGLConnect.cs | 79 + .../Editor/Snippets/WebGLConnect.cs.meta | 11 + .../Packages/Nakama/Editor/WebGL.unity | 241 + .../Packages/Nakama/Editor/WebGL.unity.meta | 7 + .../Packages/Nakama/Editor/link.xml | 25 + .../Packages/Nakama/Editor/link.xml.meta | 7 + .../Packages/Nakama/LICENSE.md | 202 + .../Packages/Nakama/LICENSE.md.meta | 7 + .../Packages/Nakama/README.md | 265 + .../Packages/Nakama/README.md.meta | 7 + .../Packages/Nakama/Runtime.meta | 8 + .../Nakama/Runtime/ClientExtensions.cs | 47 + .../Nakama/Runtime/ClientExtensions.cs.meta | 11 + .../Nakama/Runtime/JsWebSocketAdapter.cs | 309 + .../Nakama/Runtime/JsWebSocketAdapter.cs.meta | 11 + .../Nakama/Runtime/NakamaRuntime.asmdef | 13 + .../Nakama/Runtime/NakamaRuntime.asmdef.meta | 7 + .../Packages/Nakama/Runtime/Plugins.meta | 8 + .../Nakama/Runtime/Plugins/Nakama.dll | Bin 0 -> 616960 bytes .../Nakama/Runtime/Plugins/Nakama.dll.meta | 33 + .../Nakama/Runtime/Plugins/Satori.dll | Bin 0 -> 104448 bytes .../Nakama/Runtime/Plugins/Satori.dll.meta | 33 + .../Plugins/UnityWebGLSocketBridge.jslib | 114 + .../Plugins/UnityWebGLSocketBridge.jslib.meta | 37 + .../Packages/Nakama/Runtime/Satori.meta | 8 + .../Nakama/Runtime/Satori/UnityLogger.cs | 36 + .../Nakama/Runtime/Satori/UnityLogger.cs.meta | 11 + .../Runtime/Satori/UnityWebRequestAdapter.cs | 184 + .../Satori/UnityWebRequestAdapter.cs.meta | 11 + .../Packages/Nakama/Runtime/UnityLogger.cs | 36 + .../Nakama/Runtime/UnityLogger.cs.meta | 11 + .../Packages/Nakama/Runtime/UnitySocket.cs | 148 + .../Nakama/Runtime/UnitySocket.cs.meta | 11 + .../Nakama/Runtime/UnityWebRequestAdapter.cs | 233 + .../Runtime/UnityWebRequestAdapter.cs.meta | 11 + .../Packages/Nakama/package.json | 23 + .../Packages/Nakama/package.json.meta | 7 + .../Assets/UnityHiroInventory/Readme.asset | 48 + .../UnityHiroInventory/Readme.asset.meta | 8 + .../Assets/UnityHiroInventory/Scenes.meta | 8 + .../UnityHiroInventory/Scenes/Main.unity | 462 + .../UnityHiroInventory/Scenes/Main.unity.meta | 7 + .../Assets/UnityHiroInventory/Scripts.meta | 8 + .../Scripts/CodexItemView.cs | 31 + .../Scripts/CodexItemView.cs.meta | 2 + .../Scripts/HiroInventoryController.cs | 596 + .../Scripts/HiroInventoryController.cs.meta | 3 + .../Scripts/HiroInventoryCoordinator.cs | 109 + .../Scripts/HiroInventoryCoordinator.cs.meta | 2 + .../Scripts/InventoryItemView.cs | 36 + .../Scripts/InventoryItemView.cs.meta | 2 + .../Assets/UnityHiroInventory/Settings.meta | 8 + .../Settings/DefaultVolumeProfile.asset | 795 + .../Settings/DefaultVolumeProfile.asset.meta | 8 + .../Settings/Lit2DSceneTemplate.scenetemplate | 71 + .../Lit2DSceneTemplate.scenetemplate.meta | 8 + .../Settings/PanelSettings.asset | 46 + .../Settings/PanelSettings.asset.meta | 8 + .../Settings/Renderer2D.asset | 69 + .../Settings/Renderer2D.asset.meta | 8 + .../Settings/UniversalRP.asset | 138 + .../Settings/UniversalRP.asset.meta | 8 + ...niversalRenderPipelineGlobalSettings.asset | 386 + ...salRenderPipelineGlobalSettings.asset.meta | 8 + .../UnityHiroInventory/TextMesh Pro.meta | 8 + .../TextMesh Pro/Fonts.meta | 8 + .../Fonts/LiberationSans - OFL.txt | 46 + .../Fonts/LiberationSans - OFL.txt.meta | 8 + .../TextMesh Pro/Fonts/LiberationSans.ttf | Bin 0 -> 350200 bytes .../Fonts/LiberationSans.ttf.meta | 19 + .../TextMesh Pro/Resources.meta | 8 + .../Resources/Fonts & Materials.meta | 9 + .../LiberationSans SDF - Drop Shadow.mat | 106 + .../LiberationSans SDF - Drop Shadow.mat.meta | 8 + .../LiberationSans SDF - Fallback.asset | 348 + .../LiberationSans SDF - Fallback.asset.meta | 8 + .../LiberationSans SDF - Outline.mat | 104 + .../LiberationSans SDF - Outline.mat.meta | 8 + .../LiberationSans SDF.asset | 7821 +++++ .../LiberationSans SDF.asset.meta | 8 + .../LineBreaking Following Characters.txt | 1 + ...LineBreaking Following Characters.txt.meta | 8 + .../LineBreaking Leading Characters.txt | 1 + .../LineBreaking Leading Characters.txt.meta | 8 + .../TextMesh Pro/Resources/Sprite Assets.meta | 9 + .../Resources/Sprite Assets/EmojiOne.asset | 659 + .../Sprite Assets/EmojiOne.asset.meta | 8 + .../TextMesh Pro/Resources/Style Sheets.meta | 9 + .../Style Sheets/Default Style Sheet.asset | 81 + .../Default Style Sheet.asset.meta | 8 + .../TextMesh Pro/Resources/TMP Settings.asset | 52 + .../Resources/TMP Settings.asset.meta | 8 + .../TextMesh Pro/Shaders.meta | 8 + .../TextMesh Pro/Shaders/SDFFunctions.hlsl | 178 + .../Shaders/SDFFunctions.hlsl.meta | 10 + .../Shaders/TMP_Bitmap-Custom-Atlas.shader | 145 + .../TMP_Bitmap-Custom-Atlas.shader.meta | 9 + .../Shaders/TMP_Bitmap-Mobile.shader | 155 + .../Shaders/TMP_Bitmap-Mobile.shader.meta | 9 + .../TextMesh Pro/Shaders/TMP_Bitmap.shader | 145 + .../Shaders/TMP_Bitmap.shader.meta | 9 + .../Shaders/TMP_SDF Overlay.shader | 326 + .../Shaders/TMP_SDF Overlay.shader.meta | 9 + .../TextMesh Pro/Shaders/TMP_SDF SSD.shader | 321 + .../Shaders/TMP_SDF SSD.shader.meta | 9 + .../Shaders/TMP_SDF-HDRP LIT.shadergraph | 12074 +++++++ .../Shaders/TMP_SDF-HDRP LIT.shadergraph.meta | 10 + .../Shaders/TMP_SDF-HDRP UNLIT.shadergraph | 11759 +++++++ .../TMP_SDF-HDRP UNLIT.shadergraph.meta | 10 + .../Shaders/TMP_SDF-Mobile Masking.shader | 258 + .../TMP_SDF-Mobile Masking.shader.meta | 9 + .../Shaders/TMP_SDF-Mobile Overlay.shader | 252 + .../TMP_SDF-Mobile Overlay.shader.meta | 9 + .../Shaders/TMP_SDF-Mobile SSD.shader | 106 + .../Shaders/TMP_SDF-Mobile SSD.shader.meta | 9 + .../Shaders/TMP_SDF-Mobile-2-Pass.shader | 389 + .../Shaders/TMP_SDF-Mobile-2-Pass.shader.meta | 9 + .../Shaders/TMP_SDF-Mobile.shader | 250 + .../Shaders/TMP_SDF-Mobile.shader.meta | 9 + .../Shaders/TMP_SDF-Surface-Mobile.shader | 139 + .../TMP_SDF-Surface-Mobile.shader.meta | 9 + .../Shaders/TMP_SDF-Surface.shader | 159 + .../Shaders/TMP_SDF-Surface.shader.meta | 9 + .../Shaders/TMP_SDF-URP Lit.shadergraph | 11932 +++++++ .../Shaders/TMP_SDF-URP Lit.shadergraph.meta | 10 + .../Shaders/TMP_SDF-URP Unlit.shadergraph | 11629 ++++++ .../TMP_SDF-URP Unlit.shadergraph.meta | 10 + .../TextMesh Pro/Shaders/TMP_SDF.shader | 326 + .../TextMesh Pro/Shaders/TMP_SDF.shader.meta | 9 + .../TextMesh Pro/Shaders/TMP_Sprite.shader | 131 + .../Shaders/TMP_Sprite.shader.meta | 9 + .../TextMesh Pro/Shaders/TMPro.cginc | 84 + .../TextMesh Pro/Shaders/TMPro.cginc.meta | 9 + .../TextMesh Pro/Shaders/TMPro_Mobile.cginc | 165 + .../Shaders/TMPro_Mobile.cginc.meta | 9 + .../Shaders/TMPro_Properties.cginc | 80 + .../Shaders/TMPro_Properties.cginc.meta | 9 + .../TextMesh Pro/Shaders/TMPro_Surface.cginc | 99 + .../Shaders/TMPro_Surface.cginc.meta | 9 + .../TextMesh Pro/Sprites.meta | 8 + .../Sprites/EmojiOne Attribution.txt | 3 + .../Sprites/EmojiOne Attribution.txt.meta | 7 + .../TextMesh Pro/Sprites/EmojiOne.json | 156 + .../TextMesh Pro/Sprites/EmojiOne.json.meta | 8 + .../TextMesh Pro/Sprites/EmojiOne.png | Bin 0 -> 112319 bytes .../TextMesh Pro/Sprites/EmojiOne.png.meta | 431 + .../Third-Party Notices.txt | 64 + .../Third-Party Notices.txt.meta | 7 + .../Assets/UnityHiroInventory/UI Toolkit.meta | 8 + .../UI Toolkit/UnityThemes.meta | 8 + .../UnityThemes/UnityDefaultRuntimeTheme.tss | 4 + .../UnityDefaultRuntimeTheme.tss.meta | 11 + .../Assets/UnityHiroInventory/UI.meta | 8 + .../UnityHiroInventory/UI/Inventory.uxml | 90 + .../UnityHiroInventory/UI/Inventory.uxml.meta | 10 + .../UI/InventoryItemTemplate.uxml | 7 + .../UI/InventoryItemTemplate.uxml.meta | 10 + UnityHiroInventory/Packages/manifest.json | 9 + .../Packages/packages-lock.json | 265 + .../ProjectSettings/AudioManager.asset | 19 + .../ProjectSettings/ClusterInputManager.asset | 6 + .../ProjectSettings/DynamicsManager.asset | 36 + .../ProjectSettings/EditorBuildSettings.asset | 13 + .../ProjectSettings/EditorSettings.asset | 49 + .../ProjectSettings/GraphicsSettings.asset | 67 + .../ProjectSettings/InputManager.asset | 487 + .../ProjectSettings/MemorySettings.asset | 35 + .../ProjectSettings/MultiplayerManager.asset | 7 + .../ProjectSettings/NavMeshAreas.asset | 91 + .../ProjectSettings/NetworkManager.asset | 8 + .../PackageManagerSettings.asset | 37 + .../ProjectSettings/Physics2DSettings.asset | 56 + .../ProjectSettings/PresetManager.asset | 7 + .../ProjectSettings/ProjectSettings.asset | 690 + .../ProjectSettings/ProjectVersion.txt | 2 + .../ProjectSettings/QualitySettings.asset | 239 + .../SceneTemplateSettings.json | 121 + .../ProjectSettings/ShaderGraphSettings.asset | 19 + .../ProjectSettings/TagManager.asset | 43 + .../ProjectSettings/TimeManager.asset | 9 + .../ProjectSettings/URPProjectSettings.asset | 15 + .../UnityConnectSettings.asset | 36 + .../ProjectSettings/VFXManager.asset | 12 + .../VersionControlSettings.asset | 7 + .../ProjectSettings/XRSettings.asset | 10 + .../UIElementsSchema/GlobalNamespace.xsd | 52 + .../UIElementsSchema/UIElements.xsd | 29 + .../Unity.Profiling.Editor.UI.xsd | 27 + .../Unity.Profiling.Editor.xsd | 129 + .../UIElementsSchema/Unity.UI.Builder.xsd | 1462 + .../UnityEditor.Accessibility.xsd | 116 + .../UnityEditor.Audio.UIElements.xsd | 101 + .../UnityEditor.Experimental.GraphView.xsd | 75 + ...r.Inspector.GraphicsSettingsInspectors.xsd | 50 + .../UnityEditor.Inspector.xsd | 30 + .../UIElementsSchema/UnityEditor.Overlays.xsd | 54 + ...UnityEditor.PackageManager.UI.Internal.xsd | 822 + .../UnityEditor.Rendering.xsd | 54 + .../UIElementsSchema/UnityEditor.Search.xsd | 31 + .../UnityEditor.ShaderGraph.Drawing.xsd | 95 + .../UnityEditor.ShortcutManagement.xsd | 52 + .../UnityEditor.Tilemaps.External.xsd | 38 + .../UIElementsSchema/UnityEditor.Tilemaps.xsd | 364 + ...itor.U2D.Animation.SpriteLibraryEditor.xsd | 177 + .../UnityEditor.U2D.Animation.Upgrading.xsd | 30 + .../UnityEditor.U2D.Animation.xsd | 395 + .../UnityEditor.U2D.Layout.xsd | 73 + ...ityEditor.U2D.Sprites.SpriteEditorTool.xsd | 27 + .../UnityEditor.UIElements.Debugger.xsd | 28 + ...UnityEditor.UIElements.ProjectSettings.xsd | 127 + .../UnityEditor.UIElements.xsd | 663 + .../UnityEngine.UIElements.xsd | 2138 ++ 2161 files changed, 322861 insertions(+) create mode 100644 Nakama+Hiro/.cookie create mode 100644 Nakama+Hiro/.gitignore create mode 100644 Nakama+Hiro/.idea/.gitignore create mode 100644 Nakama+Hiro/.idea/Nakama.iml create mode 100644 Nakama+Hiro/.idea/encodings.xml create mode 100644 Nakama+Hiro/.idea/modules.xml create mode 100644 Nakama+Hiro/.idea/vcs.xml create mode 100644 Nakama+Hiro/Dockerfile create mode 100644 Nakama+Hiro/definitions/dev1/base-challenges.json create mode 100644 Nakama+Hiro/definitions/dev1/base-economy.json create mode 100644 Nakama+Hiro/definitions/dev1/base-inventory.json create mode 100644 Nakama+Hiro/definitions/dev1/base-system.json create mode 100644 Nakama+Hiro/docker-compose.yml create mode 100644 Nakama+Hiro/go.mod create mode 100644 Nakama+Hiro/go.sum create mode 100644 Nakama+Hiro/lib/.gitignore create mode 100644 Nakama+Hiro/main.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/.editorconfig create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/.gitignore create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/.golangci.yml create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/CHANGELOG.md create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/LICENSE create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/README.md create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/achievements.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/auctions.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/base.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/buf.gen.yaml create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/buf.yaml create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/challenge.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/economy.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/energy.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/event_leaderboards.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/hiro-openapi.yml create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/hiro.pb.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/hiro.proto create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/incentives.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/inventory.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/leaderboards.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/personalizer.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/personalizer_satori.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/personalizer_storage.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/personalizer_storage_nakama.json create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/progression.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/publisher.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/reward_mailbox.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/stats.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/streaks.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/teams.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/tools.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/tutorials.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/hiro/unlockables.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/LICENSE create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/api/api.pb.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/api/api.proto create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/api/build.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/rtapi/build.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/rtapi/realtime.pb.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/rtapi/realtime.proto create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/runtime/config.go create mode 100644 Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/runtime/runtime.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/LICENSE create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/PATENTS create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/init.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/init_opaque.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/main.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/opaque.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/reflect.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/well_known_types.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/main.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/compiler/protogen/protogen.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/compiler/protogen/protogen_apilevel.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/compiler/protogen/protogen_opaque.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/protojson/decode.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/protojson/doc.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/protojson/encode.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/prototext/decode.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/prototext/doc.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/prototext/encode.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/protowire/wire.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/descfmt/stringer.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/descopts/options.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/detrand/rand.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/editiondefaults/defaults.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/editiondefaults/editions_defaults.binpb create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/editionssupport/editions.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/defval/default.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/json/decode.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/json/decode_number.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/json/decode_string.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/json/decode_token.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/json/encode.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/messageset/messageset.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/text/decode_string.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/text/decode_token.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/text/doc.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/errors/errors.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/build.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/desc.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/desc_list.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/desc_list_gen.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/editions.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/placeholder.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/presence.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filetype/build.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/flags/flags.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/any_gen.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/api_gen.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/doc.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/duration_gen.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/empty_gen.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/field_mask_gen.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/go_features_gen.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/goname.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/map_entry.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/name.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/source_context_gen.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/struct_gen.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/timestamp_gen.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/type_gen.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/wrappers.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/wrappers_gen.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/api_export.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/api_export_opaque.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/bitmap.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/bitmap_race.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/checkinit.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_field.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_field_opaque.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_gen.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_map.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_message.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_message_opaque.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_messageset.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_tables.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/convert.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/convert_list.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/convert_map.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/decode.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/encode.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/enum.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/equal.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/extension.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/lazy.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/legacy_export.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/legacy_file.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/merge.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/merge_gen.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message_opaque.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message_opaque_gen.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field_gen.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe_opaque.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/presence.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/validate.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/msgfmt/format.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/order/order.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/order/range.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/pragma/pragma.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/protolazy/bufferreader.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/protolazy/lazy.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/protolazy/pointer_unsafe.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/set/ints.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/strs/strings.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/internal/version/version.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/proto/checkinit.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/proto/decode.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/proto/decode_gen.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/proto/doc.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/proto/encode.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/proto/encode_gen.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/proto/equal.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/proto/extension.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/proto/merge.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/proto/messageset.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/proto/proto.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/proto/proto_methods.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/proto/proto_reflect.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/proto/reset.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/proto/size.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/proto/size_gen.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/proto/wrapperopaque.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/proto/wrappers.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protodesc/desc.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protodesc/desc_resolve.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protodesc/desc_validate.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protodesc/editions.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protodesc/proto.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protopath/path.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protopath/step.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protorange/range.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/source.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/type.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/value_equal.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/runtime/protoiface/legacy.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/runtime/protoimpl/version.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/types/dynamicpb/dynamic.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/types/dynamicpb/types.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/types/gofeaturespb/go_features.pb.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/types/known/structpb/struct.pb.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/types/known/wrapperspb/wrappers.pb.go create mode 100644 Nakama+Hiro/vendor/google.golang.org/protobuf/types/pluginpb/plugin.pb.go create mode 100644 Nakama+Hiro/vendor/modules.txt create mode 100644 UnityHiroInventory/.gitignore create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Editor.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Editor/AccountSwitcher.cs create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Editor/AccountSwitcher.cs.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Editor/AccountSwitcher.uxml create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Editor/AccountSwitcher.uxml.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Editor/TutorialInfo.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Editor/TutorialInfo/Icons.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Editor/TutorialInfo/Icons/HeroicLabs.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Editor/TutorialInfo/Icons/HeroicLabs.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Editor/TutorialInfo/Layout.wlt create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Editor/TutorialInfo/Layout.wlt.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Editor/TutorialInfo/Scripts.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Editor/TutorialInfo/Scripts/Editor.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Editor/TutorialInfo/Scripts/Editor/ReadmeEditor.cs create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Editor/TutorialInfo/Scripts/Editor/ReadmeEditor.cs.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Editor/TutorialInfo/Scripts/Readme.cs create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Editor/TutorialInfo/Scripts/Readme.cs.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar/avatar_circle_colored_default.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar/avatar_circle_colored_default.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar/avatar_circle_colored_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar/avatar_circle_colored_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar/avatar_circle_icon_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar/avatar_circle_icon_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar/avatar_circle_icon_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar/avatar_circle_icon_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar/avatar_circle_merged_icon.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar/avatar_circle_merged_icon.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar/avatar_circle_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar/avatar_circle_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar/avatar_square_icon_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar/avatar_square_icon_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar/avatar_square_icon_withe.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar/avatar_square_icon_withe.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar/avatar_square_merged_bg_default.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar/avatar_square_merged_bg_default.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar/avatar_square_merged_bg_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar/avatar_square_merged_bg_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar/avatar_square_merged_icon.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar/avatar_square_merged_icon.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar/avatar_square_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar/avatar_square_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar/avatar_square_white_innerbg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Avatar/avatar_square_white_innerbg.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_rounded_flat_blue.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_rounded_flat_blue.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_rounded_flat_coral.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_rounded_flat_coral.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_rounded_flat_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_rounded_flat_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_rounded_flat_pink.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_rounded_flat_pink.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_rounded_flat_sky.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_rounded_flat_sky.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_rounded_gradient_blue.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_rounded_gradient_blue.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_rounded_gradient_coral.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_rounded_gradient_coral.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_rounded_gradient_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_rounded_gradient_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_rounded_gradient_pink.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_rounded_gradient_pink.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_rounded_gradient_sky.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_rounded_gradient_sky.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_rounded_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_rounded_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_rounded_white_gradient.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_rounded_white_gradient.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_square_flat_blue.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_square_flat_blue.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_square_flat_coral.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_square_flat_coral.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_square_flat_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_square_flat_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_square_flat_pink.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_square_flat_pink.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_square_flat_sky.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_square_flat_sky.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_square_gradient_blue.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_square_gradient_blue.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_square_gradient_coral.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_square_gradient_coral.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_square_gradient_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_square_gradient_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_square_gradient_pink.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_square_gradient_pink.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_square_gradient_sky.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_square_gradient_sky.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_square_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_square_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_square_white_gradient.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Background/bg_square_white_gradient.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Badge.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Badge/badge_circle_red.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Badge/badge_circle_red.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Badge/badge_circle_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Badge/badge_circle_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Badge/badge_dot_red.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Badge/badge_dot_red.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Badge/badge_dot_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Badge/badge_dot_white.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h40_colored_bg_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h40_colored_bg_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h40_colored_border_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h40_colored_border_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h40_merged_icon_help_01.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h40_merged_icon_help_01.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h40_merged_icon_help_02.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h40_merged_icon_help_02.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h40_merged_icon_info_01.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h40_merged_icon_info_01.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h40_merged_icon_info_02.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h40_merged_icon_info_02.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h40_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h40_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h40_white_border.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h40_white_border.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h56_merged_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h56_merged_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h56_merged_icon_delete.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h56_merged_icon_delete.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h56_merged_icon_edit.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h56_merged_icon_edit.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h56_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h56_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h56_white_border.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h56_white_border.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h60_colored_dark.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h60_colored_dark.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h60_colored_mint.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h60_colored_mint.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h60_colored_red.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h60_colored_red.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h60_colored_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h60_colored_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h60_merged_icon_cancle.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h60_merged_icon_cancle.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h60_merged_icon_checked_dark.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h60_merged_icon_checked_dark.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h60_merged_icon_checked_mint.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h60_merged_icon_checked_mint.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h60_merged_icon_checked_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h60_merged_icon_checked_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h60_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h60_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h64_merged_icon_close.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h64_merged_icon_close.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h64_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h64_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h64_white_shadow.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h64_white_shadow.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h70_colored_transparent_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h70_colored_transparent_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h70_merged_icon_emoji.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h70_merged_icon_emoji.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h70_merged_icon_menu.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h70_merged_icon_menu.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h70_merged_icon_search.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h70_merged_icon_search.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h70_merged_icon_setting.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h70_merged_icon_setting.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h70_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h70_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h70_white_shadow.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_circle_h70_white_shadow.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h70_merged_icon_back.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h70_merged_icon_back.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h70_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h70_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h70_white_shadow.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h70_white_shadow.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h76_colored_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h76_colored_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h76_colored_light_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h76_colored_light_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h76_colored_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h76_colored_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h76_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h76_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h84_colored_dark_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h84_colored_dark_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h84_colored_disabled.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h84_colored_disabled.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h84_colored_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h84_colored_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h84_colored_mint.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h84_colored_mint.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h84_colored_pink.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h84_colored_pink.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h84_colored_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h84_colored_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h84_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h84_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h84_white_shadow.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h84_white_shadow.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h96_colored_blue.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h96_colored_blue.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h96_colored_dark_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h96_colored_dark_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h96_colored_disabled.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h96_colored_disabled.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h96_colored_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h96_colored_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h96_colored_mint.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h96_colored_mint.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h96_colored_pink.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h96_colored_pink.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h96_colored_red.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h96_colored_red.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h96_colored_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h96_colored_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h96_merged_icon_claim.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h96_merged_icon_claim.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h96_merged_icon_go.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h96_merged_icon_go.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h96_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h96_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h96_white_shadow.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_h96_white_shadow.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_rectangle_r14_colored_blue.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_rectangle_r14_colored_blue.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_rectangle_r14_colored_dark_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_rectangle_r14_colored_dark_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_rectangle_r14_colored_disabled.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_rectangle_r14_colored_disabled.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_rectangle_r14_colored_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_rectangle_r14_colored_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_rectangle_r14_colored_mint.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_rectangle_r14_colored_mint.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_rectangle_r14_colored_pink.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_rectangle_r14_colored_pink.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_rectangle_r14_colored_red.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_rectangle_r14_colored_red.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_rectangle_r14_colored_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_rectangle_r14_colored_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_rectangle_r14_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_rectangle_r14_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_rectangle_r14_white_shadow.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Button/button_rounded_rectangle_r14_white_shadow.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Chat.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Chat/chat_colored_bg_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Chat/chat_colored_bg_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Chat/chat_colored_tail_left_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Chat/chat_colored_tail_left_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Chat/chat_colored_tail_right_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Chat/chat_colored_tail_right_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Chat/chat_merged_left_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Chat/chat_merged_left_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Chat/chat_merged_left_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Chat/chat_merged_left_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Chat/chat_merged_right_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Chat/chat_merged_right_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Chat/chat_merged_right_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Chat/chat_merged_right_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Chat/chat_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Chat/chat_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Chat/chat_white_tail_left.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Chat/chat_white_tail_left.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Chat/chat_white_tail_right.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Chat/chat_white_tail_right.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Checkbox.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Checkbox/checkbox_checked.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Checkbox/checkbox_checked.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Checkbox/checkbox_disabled.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Checkbox/checkbox_disabled.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Checkbox/checkbox_indeterminate.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Checkbox/checkbox_indeterminate.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Checkbox/checkbox_invalid.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Checkbox/checkbox_invalid.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Checkbox/checkbox_unchecked.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Checkbox/checkbox_unchecked.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Checkbox/checkbox_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Checkbox/checkbox_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Checkbox/checkbox_white_icon_check.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Checkbox/checkbox_white_icon_check.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Checkbox/checkbox_white_icon_indeterminate.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Checkbox/checkbox_white_icon_indeterminate.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/CustomComponents.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/CustomComponents/ErrorPopup.uxml create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/CustomComponents/ErrorPopup.uxml.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/CustomComponents/ListControls.uxml create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/CustomComponents/ListControls.uxml.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/CustomComponents/ListHead.uxml create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/CustomComponents/ListHead.uxml.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/CustomComponents/VerticalTabButton.uxml create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/CustomComponents/VerticalTabButton.uxml.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/CustomComponents/WalletDisplay.cs create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/CustomComponents/WalletDisplay.cs.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/CustomComponents/WalletDisplay.uxml create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/CustomComponents/WalletDisplay.uxml.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_button_merged_bg_active.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_button_merged_bg_active.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_button_merged_bg_focus.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_button_merged_bg_focus.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_button_merged_icon_active.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_button_merged_icon_active.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_button_merged_icon_focus.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_button_merged_icon_focus.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_button_tail_active.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_button_tail_active.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_button_tail_default.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_button_tail_default.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_button_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_button_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_button_white_border.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_button_white_border.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_button_white_tail.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_button_white_tail.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_menu_merged_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_menu_merged_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_menu_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_menu_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_menu_white_border.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_menu_white_border.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_select_colored_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_select_colored_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_select_icon_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_select_icon_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_select_merged_icon.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_select_merged_icon.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_select_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_select_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_select_white_check.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Dropdown/dropdown_select_white_check.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/OFL.txt create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/OFL.txt.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/PlusJakartaSans-Italic-VariableFont_wght.ttf create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/PlusJakartaSans-Italic-VariableFont_wght.ttf.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/PlusJakartaSans-VariableFont_wght.asset create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/PlusJakartaSans-VariableFont_wght.asset.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/PlusJakartaSans-VariableFont_wght.ttf create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/PlusJakartaSans-VariableFont_wght.ttf.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/README.txt create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/README.txt.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-Bold.ttf create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-Bold.ttf.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-BoldItalic.ttf create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-BoldItalic.ttf.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-ExtraBold.ttf create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-ExtraBold.ttf.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-ExtraBoldItalic.ttf create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-ExtraBoldItalic.ttf.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-ExtraLight.ttf create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-ExtraLight.ttf.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-ExtraLightItalic.ttf create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-ExtraLightItalic.ttf.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-Italic.ttf create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-Italic.ttf.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-Light.ttf create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-Light.ttf.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-LightItalic.ttf create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-LightItalic.ttf.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-Medium.ttf create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-Medium.ttf.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-MediumItalic.ttf create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-MediumItalic.ttf.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-Regular.ttf create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-Regular.ttf.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-SemiBold.ttf create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-SemiBold.ttf.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-SemiBoldItalic.ttf create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Fonts/Plus_Jakarta_Sans/static/PlusJakartaSans-SemiBoldItalic.ttf.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/divider_horizontal_dotline_transparent_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/divider_horizontal_dotline_transparent_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/divider_horizontal_dotline_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/divider_horizontal_dotline_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/divider_horizontal_line_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/divider_horizontal_line_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/divider_horizontal_line_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/divider_horizontal_line_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/divider_vertical_dotline_transparent_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/divider_vertical_dotline_transparent_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/divider_vertical_dotline_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/divider_vertical_dotline_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_complete_stamp_l.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_complete_stamp_l.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_complete_stamp_s.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_complete_stamp_s.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_day_l_merged_complete.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_day_l_merged_complete.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_day_l_merged_disabled.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_day_l_merged_disabled.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_day_l_merged_today.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_day_l_merged_today.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_day_s_merged_complete.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_day_s_merged_complete.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_day_s_merged_disabled.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_day_s_merged_disabled.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_day_s_merged_today.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_day_s_merged_today.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_day_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_day_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_day_white_top.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_day_white_top.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_icon_add.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_icon_add.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_icon_lock.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_icon_lock.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h130_colored_blue.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h130_colored_blue.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h130_colored_coral.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h130_colored_coral.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h130_colored_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h130_colored_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h130_colored_green.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h130_colored_green.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h130_colored_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h130_colored_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h130_colored_yellow.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h130_colored_yellow.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h130_merged_add.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h130_merged_add.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h130_merged_lock.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h130_merged_lock.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h136_merged_empty_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h136_merged_empty_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h136_merged_empty_icon_bow.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h136_merged_empty_icon_bow.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h136_merged_empty_icon_gear.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h136_merged_empty_icon_gear.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h136_merged_empty_icon_helmet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h136_merged_empty_icon_helmet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h136_merged_empty_icon_shield.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h136_merged_empty_icon_shield.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h136_merged_empty_icon_soword.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h136_merged_empty_icon_soword.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h136_merged_lock.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h136_merged_lock.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h136_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h136_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h136_white_line.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_equipments_h136_white_line.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_focus.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_focus.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_h144_colored_blue.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_h144_colored_blue.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_h144_colored_coral.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_h144_colored_coral.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_h144_colored_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_h144_colored_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_h144_colored_green.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_h144_colored_green.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_h144_colored_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_h144_colored_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_h144_colored_yellow.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_h144_colored_yellow.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_white_border.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_white_border.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_white_focus.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_item_r16_white_focus.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_colored_focus.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_colored_focus.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_colored_focus_tail_down.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_colored_focus_tail_down.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_colored_focus_tail_up.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_colored_focus_tail_up.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_colored_transparent_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_colored_transparent_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_icon_check.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_icon_check.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_icon_lock.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_icon_lock.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_merged_complete.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_merged_complete.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_merged_default.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_merged_default.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_merged_focus_down.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_merged_focus_down.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_merged_focus_down_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_merged_focus_down_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_merged_focus_up.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_merged_focus_up.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_merged_focus_up_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_merged_focus_up_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_r20_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_r20_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_r20_white_focus.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_r20_white_focus.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_r20_white_tail_down.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_r20_white_tail_down.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_r20_white_tail_up.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_pass_r20_white_tail_up.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_h56_merged.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_h56_merged.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_h56_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_h56_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_h56_white_border.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_h56_white_border.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r12_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r12_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r12_white_border.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r12_white_border.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r16_merged_dimmed.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r16_merged_dimmed.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r16_merged_focus.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r16_merged_focus.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r16_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r16_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r16_white_border.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r16_white_border.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r16_white_shadow.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r16_white_shadow.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r24_icon_lock.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r24_icon_lock.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r24_icon_lock_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r24_icon_lock_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r24_merged_default.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r24_merged_default.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r24_merged_focus.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r24_merged_focus.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r24_merged_lock.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r24_merged_lock.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r24_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r24_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r24_white_border.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_rounded_rectangle_r24_white_border.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_shop_merged_blue.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_shop_merged_blue.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_shop_merged_coral.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_shop_merged_coral.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_shop_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_shop_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_shop_white_bottom.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_shop_white_bottom.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_shop_white_gradient.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_shop_white_gradient.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_skill_hexagon_merged_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_skill_hexagon_merged_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_skill_hexagon_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_skill_hexagon_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_skill_hexagon_white_border.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_skill_hexagon_white_border.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_skill_hexagon_white_innerbg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_skill_hexagon_white_innerbg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_colored_transparent_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_colored_transparent_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_icon_crown.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_icon_crown.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_icon_heart.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_icon_heart.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_icon_map.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_icon_map.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_icon_ranking.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_icon_ranking.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_icon_shield.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_icon_shield.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_icon_skull.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_icon_skull.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_merged_icon_crown.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_merged_icon_crown.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_merged_icon_heart.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_merged_icon_heart.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_merged_icon_map.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_merged_icon_map.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_merged_icon_ranking.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_merged_icon_ranking.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_merged_icon_shield.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_merged_icon_shield.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_merged_icon_skull.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_merged_icon_skull.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Frame/frame_square_white.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_ad.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_ad.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_bomb.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_bomb.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_clover.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_clover.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_defense.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_defense.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_earth.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_earth.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_energy_blue.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_energy_blue.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_energy_green.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_energy_green.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_eye.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_eye.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_friends.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_friends.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_gem.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_gem.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_gold.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_gold.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_key_bronze.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_key_bronze.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_key_gold.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_key_gold.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_key_silver.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_key_silver.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_location.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_location.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_medal_bronze.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_medal_bronze.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_medal_gold.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_medal_gold.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_medal_silver.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_medal_silver.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_pass_free.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_pass_free.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_pass_point.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_pass_point.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_pass_premium.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_pass_premium.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_point.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_point.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_potion_blue.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_potion_blue.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_shield.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_shield.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_skull.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_skull.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_star.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_star.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_sword.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_sword.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_trophy.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/128/icon_trophy.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_ad.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_ad.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_bomb.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_bomb.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_clover.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_clover.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_defense.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_defense.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_earth.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_earth.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_energy_blue.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_energy_blue.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_energy_green.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_energy_green.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_eye.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_eye.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_friends.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_friends.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_gem.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_gem.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_gold.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_gold.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_key_bronze.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_key_bronze.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_key_gold.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_key_gold.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_key_silver.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_key_silver.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_location.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_location.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_medal_bronze.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_medal_bronze.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_medal_gold.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_medal_gold.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_medal_silver.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_medal_silver.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_pass_free.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_pass_free.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_pass_point.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_pass_point.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_pass_premium.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_pass_premium.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_point.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_point.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_potion_blue.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_potion_blue.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_shield.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_shield.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_skull.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_skull.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_star.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_star.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_sword.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_sword.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_trophy.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/256/icon_trophy.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_ad.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_ad.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_bomb.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_bomb.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_clover.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_clover.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_defense.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_defense.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_earth.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_earth.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_energy_blue.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_energy_blue.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_energy_green.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_energy_green.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_eye.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_eye.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_friends.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_friends.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_gem.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_gem.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_gold.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_gold.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_key_bronze.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_key_bronze.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_key_gold.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_key_gold.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_key_silver.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_key_silver.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_location.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_location.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_medal_bronze.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_medal_bronze.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_medal_gold.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_medal_gold.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_medal_silver.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_medal_silver.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_pass_free.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_pass_free.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_pass_point.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_pass_point.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_pass_premium.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_pass_premium.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_point.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_point.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_potion_blue.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_potion_blue.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_shield.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_shield.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_skull.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_skull.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_star.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_star.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_sword.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_sword.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_trophy.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconItem/512/icon_trophy.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconMisc.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconMisc/icon_copy.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconMisc/icon_copy.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconMisc/icon_crown.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconMisc/icon_crown.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconMisc/icon_fist.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconMisc/icon_fist.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconMisc/icon_heart.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconMisc/icon_heart.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconMisc/icon_local.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconMisc/icon_local.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconMisc/icon_map.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconMisc/icon_map.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconMisc/icon_ranking.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconMisc/icon_ranking.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconMisc/icon_shield.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconMisc/icon_shield.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconMisc/icon_skull.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconMisc/icon_skull.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconMisc/icon_timer.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconMisc/icon_timer.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_add.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_add.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_alarm.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_alarm.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_alarm_mute.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_alarm_mute.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_align.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_align.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_anvil.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_anvil.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_armor.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_armor.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_arrow_back.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_arrow_back.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_arrow_bottom.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_arrow_bottom.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_arrow_down.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_arrow_down.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_arrow_forward.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_arrow_forward.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_arrow_left.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_arrow_left.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_arrow_right.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_arrow_right.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_arrow_up-1.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_arrow_up-1.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_arrow_up.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_arrow_up.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_attack.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_attack.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_battle.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_battle.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_book.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_book.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_book_open.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_book_open.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_bow.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_bow.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_calendar.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_calendar.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_cancle.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_cancle.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_cancle_round.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_cancle_round.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_chat.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_chat.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_check.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_check.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_check_round.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_check_round.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_chest.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_chest.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_crown.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_crown.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_damage.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_damage.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_defense.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_defense.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_delete.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_delete.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_edit.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_edit.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_emoji.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_emoji.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_exclamation.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_exclamation.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_exclamation_round.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_exclamation_round.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_fire.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_fire.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_friends.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_friends.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_gift.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_gift.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_globe.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_globe.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_growth.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_growth.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_headgear.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_headgear.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_heart.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_heart.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_home.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_home.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_image.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_image.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_info.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_info.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_info_round.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_info_round.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_lock.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_lock.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_map.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_map.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_menu.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_menu.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_message.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_message.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_music.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_music.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_music_mute.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_music_mute.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_pause.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_pause.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_pin.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_pin.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_play.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_play.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_question.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_question.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_question_round.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_question_round.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_ranking.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_ranking.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_remove.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_remove.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_search.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_search.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_setting.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_setting.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_sheos.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_sheos.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_shield.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_shield.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_skull.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_skull.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_sound.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_sound.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_sound_mute.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_sound_mute.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_star.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_star.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_thumbs-up.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_thumbs-up.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_timer.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_timer.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_trophy.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_trophy.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_unlock.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_unlock.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_user.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_user.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_viration.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_viration.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_viration_mute.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/128/icon_viration_mute.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_add.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_add.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_alarm.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_alarm.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_alarm_mute.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_alarm_mute.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_align.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_align.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_anvil.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_anvil.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_armor.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_armor.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_arrow_back.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_arrow_back.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_arrow_bottom.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_arrow_bottom.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_arrow_down.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_arrow_down.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_arrow_forward.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_arrow_forward.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_arrow_left.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_arrow_left.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_arrow_right.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_arrow_right.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_arrow_up-1.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_arrow_up-1.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_arrow_up.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_arrow_up.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_attack.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_attack.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_battle.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_battle.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_book.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_book.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_book_open.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_book_open.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_bow.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_bow.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_calendar.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_calendar.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_cancle.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_cancle.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_cancle_round.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_cancle_round.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_chat.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_chat.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_check.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_check.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_check_round.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_check_round.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_chest.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_chest.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_crown.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_crown.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_damage.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_damage.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_defense.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_defense.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_delete.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_delete.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_edit.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_edit.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_emoji.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_emoji.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_exclamation.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_exclamation.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_exclamation_round.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_exclamation_round.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_fire.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_fire.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_friends.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_friends.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_gift.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_gift.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_globe.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_globe.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_growth.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_growth.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_headgear.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_headgear.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_heart.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_heart.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_home.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_home.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_image.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_image.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_info.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_info.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_info_round.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_info_round.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_lock.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_lock.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_map.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_map.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_menu.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_menu.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_message.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_message.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_music.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_music.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_music_mute.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_music_mute.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_pause.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_pause.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_pin.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_pin.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_play.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_play.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_question.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_question.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_question_round.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_question_round.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_ranking.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_ranking.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_remove.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_remove.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_search.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_search.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_setting.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_setting.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_sheos.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_sheos.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_shield.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_shield.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_skull.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_skull.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_sound.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_sound.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_sound_mute.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_sound_mute.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_star.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_star.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_thumbs-up.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_thumbs-up.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_timer.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_timer.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_trophy.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_trophy.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_unlock.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_unlock.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_user.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_user.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_viration.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_viration.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_viration_mute.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogram/Trimmed/icon_viration_mute.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/add.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/add.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/alarm.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/alarm.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/alarm_mute.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/alarm_mute.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/align.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/align.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/anvil.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/anvil.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/armor.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/armor.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/arrow_back.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/arrow_back.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/arrow_bottom.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/arrow_bottom.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/arrow_down.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/arrow_down.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/arrow_forward.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/arrow_forward.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/arrow_left.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/arrow_left.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/arrow_right.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/arrow_right.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/arrow_top.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/arrow_top.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/arrow_up.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/arrow_up.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/attack.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/attack.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/battle.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/battle.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/book.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/book.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/book_open.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/book_open.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/bow.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/bow.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/calendar.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/calendar.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/cancle.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/cancle.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/cancle_round.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/cancle_round.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/chat.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/chat.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/check.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/check.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/check_round.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/check_round.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/chest.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/chest.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/crown.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/crown.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/damage.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/damage.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/defense.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/defense.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/delete.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/delete.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/edit.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/edit.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/emoji.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/emoji.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/exclamation.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/exclamation.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/exclamation_round.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/exclamation_round.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/fire.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/fire.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/friends.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/friends.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/gift.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/gift.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/globe.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/globe.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/growth.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/growth.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/headgear.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/headgear.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/heart.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/heart.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/home.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/home.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/image.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/image.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/info.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/info.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/info_round.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/info_round.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/location.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/location.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/lock.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/lock.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/map.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/map.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/menu.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/menu.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/message.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/message.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/music.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/music.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/music_mute.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/music_mute.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/pause.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/pause.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/play.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/play.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/question.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/question.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/question_round.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/question_round.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/ranking.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/ranking.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/remove.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/remove.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/search.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/search.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/setting.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/setting.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/sheos.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/sheos.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/shield.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/shield.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/skull.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/skull.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/sound.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/sound.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/sound_mute.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/sound_mute.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/star.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/star.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/thumbs-up.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/thumbs-up.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/timer.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/timer.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/trophy.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/trophy.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/unlock.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/unlock.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/user.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/user.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/viration.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/viration.svg.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/viration_mute.svg create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/IconPictogramSVG/viration_mute.svg.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Loading.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Loading/loading_bg_dark.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Loading/loading_bg_dark.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Loading/loading_bg_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Loading/loading_bg_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Loading/loading_circular_color.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Loading/loading_circular_color.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Loading/loading_circular_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Loading/loading_circular_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Loading/loading_circular_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Loading/loading_circular_white.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/button_circle_h69_icon_close.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/button_circle_h69_icon_close.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/button_circle_h69_merged_icon_close.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/button_circle_h69_merged_icon_close.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/button_circle_h69_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/button_circle_h69_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/divider_horizontal_dotline_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/divider_horizontal_dotline_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/divider_horizontal_dotline_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/divider_horizontal_dotline_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/divider_line_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/divider_line_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/popup_merged_left_panel.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/popup_merged_left_panel.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/popup_merged_topbar_01.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/popup_merged_topbar_01.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/popup_merged_topbar_02.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/popup_merged_topbar_02.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/popup_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/popup_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/popup_white_bg_shadow.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/popup_white_bg_shadow.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/popup_white_panel_Left.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/popup_white_panel_Left.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/popup_white_panel_bottom.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/popup_white_panel_bottom.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/popup_white_panel_right.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/popup_white_panel_right.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/popup_white_panel_top.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Popup/popup_white_panel_top.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_l_bg_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_l_bg_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_l_bg_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_l_bg_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_l_fill_blue.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_l_fill_blue.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_l_fill_mint.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_l_fill_mint.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_l_fill_orange.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_l_fill_orange.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_l_fill_pink.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_l_fill_pink.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_l_fill_purple.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_l_fill_purple.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_l_fill_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_l_fill_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_s_bg_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_s_bg_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_s_bg_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_s_bg_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_s_fill_blue.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_s_fill_blue.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_s_fill_mint.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_s_fill_mint.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_s_fill_orange.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_s_fill_orange.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_s_fill_pink.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_s_fill_pink.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_s_fill_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_basic_s_fill_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_border_fill_pink.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_border_fill_pink.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_border_fill_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_border_fill_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_border_merged_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_border_merged_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_border_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_border_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_border_white_border.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_border_white_border.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_lv_badge_burst_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_lv_badge_burst_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_lv_badge_burst_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_lv_badge_burst_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_lv_badge_hexagon_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_lv_badge_hexagon_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_lv_badge_hexagon_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_lv_badge_hexagon_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_pass_bg_01.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_pass_bg_01.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_pass_bg_01_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_pass_bg_01_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_pass_bg_02.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_pass_bg_02.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_pass_bg_02_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_pass_bg_02_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_pass_fill.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_pass_fill.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_pass_fill_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_pass_fill_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_pass_step_badge_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_pass_step_badge_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_pass_step_badge_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_pass_step_badge_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_pass_step_badge_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_pass_step_badge_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_pass_textbox_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_pass_textbox_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_pass_textbox_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_pass_textbox_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_step_gradient.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_step_gradient.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_step_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_step_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_step_purple.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_step_purple.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_step_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Progress/progress_step_white.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/RadioButton.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/RadioButton/radio_button_01_disabled.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/RadioButton/radio_button_01_disabled.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/RadioButton/radio_button_01_off.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/RadioButton/radio_button_01_off.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/RadioButton/radio_button_01_on.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/RadioButton/radio_button_01_on.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/RadioButton/radio_button_01_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/RadioButton/radio_button_01_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/RadioButton/radio_button_01_white_radio.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/RadioButton/radio_button_01_white_radio.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/RadioButton/radio_button_02_disabled.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/RadioButton/radio_button_02_disabled.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/RadioButton/radio_button_02_off.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/RadioButton/radio_button_02_off.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/RadioButton/radio_button_02_on.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/RadioButton/radio_button_02_on.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/RadioButton/radio_button_02_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/RadioButton/radio_button_02_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/RadioButton/radio_button_02_white_border.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/RadioButton/radio_button_02_white_border.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/RadioButton/radio_button_02_white_radio.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/RadioButton/radio_button_02_white_radio.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gem_01.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gem_01.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gem_02.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gem_02.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gem_03.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gem_03.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gem_04.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gem_04.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gem_05.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gem_05.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gem_06.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gem_06.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gem_shadowless_01.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gem_shadowless_01.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gem_shadowless_02.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gem_shadowless_02.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gem_shadowless_03.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gem_shadowless_03.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gem_shadowless_04.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gem_shadowless_04.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gem_shadowless_05.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gem_shadowless_05.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gem_shadowless_06.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gem_shadowless_06.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gold_01.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gold_01.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gold_02.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gold_02.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gold_03.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gold_03.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gold_04.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gold_04.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gold_05.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gold_05.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gold_06.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gold_06.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gold_shadowless_01.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gold_shadowless_01.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gold_shadowless_02.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gold_shadowless_02.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gold_shadowless_03.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gold_shadowless_03.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gold_shadowless_04.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gold_shadowless_04.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gold_shadowless_05.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gold_shadowless_05.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gold_shadowless_06.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/ShopItem/gold_shadowless_06.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Slider.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Slider/slider_merged_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Slider/slider_merged_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Slider/slider_merged_fill_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Slider/slider_merged_fill_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Slider/slider_merged_handle_off.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Slider/slider_merged_handle_off.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Slider/slider_merged_handle_on.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Slider/slider_merged_handle_on.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Slider/slider_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Slider/slider_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Slider/slider_white_handle_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Slider/slider_white_handle_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Slider/slider_white_handle_border.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Slider/slider_white_handle_border.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Stepper.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Stepper/stepper_button_mimus_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Stepper/stepper_button_mimus_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Stepper/stepper_button_mimus_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Stepper/stepper_button_mimus_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Stepper/stepper_button_next_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Stepper/stepper_button_next_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Stepper/stepper_button_next_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Stepper/stepper_button_next_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Stepper/stepper_button_plus_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Stepper/stepper_button_plus_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Stepper/stepper_button_plus_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Stepper/stepper_button_plus_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Stepper/stepper_button_prev_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Stepper/stepper_button_prev_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Stepper/stepper_button_prev_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Stepper/stepper_button_prev_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Stepper/stepper_merged_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Stepper/stepper_merged_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Stepper/stepper_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Stepper/stepper_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Stepper/stepper_white_border.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Stepper/stepper_white_border.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_01_colored_disabled_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_01_colored_disabled_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_01_colored_disabled_handle.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_01_colored_disabled_handle.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_01_colored_off_handle.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_01_colored_off_handle.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_01_colored_on_handle.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_01_colored_on_handle.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_01_colored_onoff_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_01_colored_onoff_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_01_merged_disabled.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_01_merged_disabled.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_01_merged_off.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_01_merged_off.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_01_merged_on.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_01_merged_on.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_01_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_01_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_01_white_handle.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_01_white_handle.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_02_colored_disabled_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_02_colored_disabled_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_02_colored_disabled_handle.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_02_colored_disabled_handle.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_02_colored_off_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_02_colored_off_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_02_colored_off_handle.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_02_colored_off_handle.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_02_colored_on_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_02_colored_on_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_02_colored_on_handle.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_02_colored_on_handle.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_02_merged_disabled.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_02_merged_disabled.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_02_merged_off.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_02_merged_off.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_02_merged_on.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_02_merged_on.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_02_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_02_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_02_white_handle.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Switch/switch_02_white_handle.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/sample.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/sample/tab_01_merged_focus_down_l_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/sample/tab_01_merged_focus_down_l_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/sample/tab_01_merged_focus_down_l_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/sample/tab_01_merged_focus_down_l_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/sample/tab_01_merged_focus_down_s_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/sample/tab_01_merged_focus_down_s_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/sample/tab_01_merged_focus_down_s_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/sample/tab_01_merged_focus_down_s_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/sample/tab_01_merged_focus_right_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/sample/tab_01_merged_focus_right_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/sample/tab_01_merged_focus_right_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/sample/tab_01_merged_focus_right_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/sample/tab_01_merged_focus_up_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/sample/tab_01_merged_focus_up_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/sample/tab_01_merged_focus_up_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/sample/tab_01_merged_focus_up_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_01_colored_divider.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_01_colored_divider.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_01_violet_focus_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_01_violet_focus_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_01_violet_focus_tail_left.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_01_violet_focus_tail_left.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_01_violet_focus_tail_right.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_01_violet_focus_tail_right.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_01_violet_focus_tail_up.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_01_violet_focus_tail_up.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_01_violet_focus_tail_up_down.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_01_violet_focus_tail_up_down.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_01_white_bg_default.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_01_white_bg_default.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_01_white_divider.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_01_white_divider.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_01_white_focus_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_01_white_focus_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_01_white_focus_tail_left.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_01_white_focus_tail_left.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_01_white_focus_tail_right.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_01_white_focus_tail_right.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_01_white_focus_tail_up.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_01_white_focus_tail_up.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_01_white_focus_tail_up_down.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_01_white_focus_tail_up_down.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_02_colored_default.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_02_colored_default.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_02_colored_focus.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_02_colored_focus.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_02_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_02_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_03_colored_default.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_03_colored_default.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_03_colored_focus.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_03_colored_focus.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_03_white_default.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_03_white_default.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_03_whtie_focus.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Tab/tab_03_whtie_focus.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TextInput.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TextInput/text_input_merged_disabled.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TextInput/text_input_merged_disabled.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TextInput/text_input_merged_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TextInput/text_input_merged_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TextInput/text_input_merged_light_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TextInput/text_input_merged_light_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TextInput/text_input_merged_red.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TextInput/text_input_merged_red.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TextInput/text_input_merged_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TextInput/text_input_merged_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TextInput/text_input_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TextInput/text_input_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TextInput/text_input_white_border.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TextInput/text_input_white_border.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Title.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Title/title_ribbon_dark.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Title/title_ribbon_dark.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Title/title_ribbon_mint.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Title/title_ribbon_mint.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Title/title_ribbon_red.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Title/title_ribbon_red.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Title/title_ribbon_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/Title/title_ribbon_violet.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TutorialHand.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TutorialHand/hand_left_1.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TutorialHand/hand_left_1.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TutorialHand/hand_left_2.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TutorialHand/hand_left_2.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TutorialHand/hand_left_3.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TutorialHand/hand_left_3.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TutorialHand/hand_left_4.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TutorialHand/hand_left_4.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TutorialHand/hand_right_1.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TutorialHand/hand_right_1.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TutorialHand/hand_right_2.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TutorialHand/hand_right_2.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TutorialHand/hand_right_3.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TutorialHand/hand_right_3.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TutorialHand/hand_right_4.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/TutorialHand/hand_right_4.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/badge_burst_blue.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/badge_burst_blue.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/badge_burst_pink.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/badge_burst_pink.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/clan_frame.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/clan_frame.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/clan_in_blue.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/clan_in_blue.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/clan_in_coral.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/clan_in_coral.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/clan_in_mint.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/clan_in_mint.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/clan_in_navy.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/clan_in_navy.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/clan_in_pink.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/clan_in_pink.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/clan_in_red.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/clan_in_red.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/clan_in_violet.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/clan_in_violet.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/label_01_free.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/label_01_free.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/label_01_new.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/label_01_new.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/label_01_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/label_01_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/label_grade_blue.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/label_grade_blue.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/label_grade_coral.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/label_grade_coral.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/label_grade_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/label_grade_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/label_grade_mint.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/label_grade_mint.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/label_grade_purple.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/label_grade_purple.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/label_grade_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/label_grade_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/label_grade_yellow.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/label_grade_yellow.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/label_oval_gray.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/label_oval_gray.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/label_oval_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/label_oval_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/label_tapered_right_gradient.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/label_tapered_right_gradient.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/page_controller_off.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/page_controller_off.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/page_controller_on.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/page_controller_on.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/page_controller_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/page_controller_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/resource_icon_gem.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/resource_icon_gem.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/resource_icon_gold.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/resource_icon_gold.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/resource_merged_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/resource_merged_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/resource_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/resource_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/resource_white_btn.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/resource_white_btn.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/star_grade_off.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/star_grade_off.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/star_grade_on.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/star_grade_on.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/star_grade_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/star_grade_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/toast_r14_dark.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/toast_r14_dark.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/toast_r14_white.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/toast_r14_white.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/tooltip_r8_dark_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/tooltip_r8_dark_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/tooltip_r8_dark_tail_down.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/tooltip_r8_dark_tail_down.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/tooltip_r8_dark_tail_up.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/tooltip_r8_dark_tail_up.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/tooltip_r8_white_bg.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/tooltip_r8_white_bg.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/tooltip_r8_white_tail_down.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/tooltip_r8_white_tail_down.png.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/tooltip_r8_white_tail_up.png create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/UI_etc/tooltip_r8_white_tail_up.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/USS.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/USS/HeroicUSS.uss create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/USS/HeroicUSS.uss.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/USS/HeroicUSSGlobal.uss create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/HeroicUI/USS/HeroicUSSGlobal.uss.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Hiro.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Hiro/Hiro.Unity.dll create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Hiro/Hiro.Unity.dll.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Hiro/Hiro.dll create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Hiro/Hiro.dll.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Input.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Input/InputSystem_Actions.inputactions create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Input/InputSystem_Actions.inputactions.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/CHANGELOG.md create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/CHANGELOG.md.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Documentation.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Documentation/Nakama 2 + Unity Engine.md create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Documentation/Nakama 2 + Unity Engine.md.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Documentation/Nakama 2 + Unity Engine.pdf create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Documentation/Nakama 2 + Unity Engine.pdf.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Documentation/README.pdf create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Documentation/README.pdf.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/NakamaEditor.asmdef create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/NakamaEditor.asmdef.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/SampleScene.unity create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/SampleScene.unity.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/Snippets.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/Snippets/AccountAndUsers.cs create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/Snippets/AccountAndUsers.cs.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/Snippets/DeviceAuthentication.cs create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/Snippets/DeviceAuthentication.cs.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/Snippets/MatchmakerWithRelayedMultiplayer.cs create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/Snippets/MatchmakerWithRelayedMultiplayer.cs.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/Snippets/NakamaManager.cs create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/Snippets/NakamaManager.cs.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/Snippets/NakamaManagerUsage.cs create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/Snippets/NakamaManagerUsage.cs.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/Snippets/RealtimeChatRoom.cs create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/Snippets/RealtimeChatRoom.cs.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/Snippets/RejoinChatAfterDisconnect.cs create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/Snippets/RejoinChatAfterDisconnect.cs.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/Snippets/SatoriExample.cs create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/Snippets/SatoriExample.cs.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/Snippets/SocketConnect.cs create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/Snippets/SocketConnect.cs.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/Snippets/WebGLConnect.cs create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/Snippets/WebGLConnect.cs.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/WebGL.unity create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/WebGL.unity.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/link.xml create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Editor/link.xml.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/LICENSE.md create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/LICENSE.md.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/README.md create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/README.md.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Runtime.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Runtime/ClientExtensions.cs create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Runtime/ClientExtensions.cs.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Runtime/JsWebSocketAdapter.cs create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Runtime/JsWebSocketAdapter.cs.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Runtime/NakamaRuntime.asmdef create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Runtime/NakamaRuntime.asmdef.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Runtime/Plugins.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Runtime/Plugins/Nakama.dll create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Runtime/Plugins/Nakama.dll.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Runtime/Plugins/Satori.dll create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Runtime/Plugins/Satori.dll.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Runtime/Plugins/UnityWebGLSocketBridge.jslib create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Runtime/Plugins/UnityWebGLSocketBridge.jslib.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Runtime/Satori.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Runtime/Satori/UnityLogger.cs create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Runtime/Satori/UnityLogger.cs.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Runtime/Satori/UnityWebRequestAdapter.cs create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Runtime/Satori/UnityWebRequestAdapter.cs.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Runtime/UnityLogger.cs create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Runtime/UnityLogger.cs.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Runtime/UnitySocket.cs create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Runtime/UnitySocket.cs.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Runtime/UnityWebRequestAdapter.cs create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/Runtime/UnityWebRequestAdapter.cs.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/package.json create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Packages/Nakama/package.json.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Readme.asset create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Readme.asset.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Scenes.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Scenes/Main.unity create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Scenes/Main.unity.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Scripts.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Scripts/CodexItemView.cs create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Scripts/CodexItemView.cs.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Scripts/HiroInventoryController.cs create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Scripts/HiroInventoryController.cs.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Scripts/HiroInventoryCoordinator.cs create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Scripts/HiroInventoryCoordinator.cs.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Scripts/InventoryItemView.cs create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Scripts/InventoryItemView.cs.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Settings.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Settings/DefaultVolumeProfile.asset create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Settings/DefaultVolumeProfile.asset.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Settings/Lit2DSceneTemplate.scenetemplate create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Settings/Lit2DSceneTemplate.scenetemplate.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Settings/PanelSettings.asset create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Settings/PanelSettings.asset.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Settings/Renderer2D.asset create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Settings/Renderer2D.asset.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Settings/UniversalRP.asset create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Settings/UniversalRP.asset.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Settings/UniversalRenderPipelineGlobalSettings.asset create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Settings/UniversalRenderPipelineGlobalSettings.asset.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Fonts.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Fonts/LiberationSans - OFL.txt create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Fonts/LiberationSans - OFL.txt.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Fonts/LiberationSans.ttf create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Fonts/LiberationSans.ttf.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Resources.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Resources/Fonts & Materials.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Drop Shadow.mat create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Drop Shadow.mat.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Fallback.asset.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF - Outline.mat.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Resources/Fonts & Materials/LiberationSans SDF.asset.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Resources/LineBreaking Following Characters.txt create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Resources/LineBreaking Following Characters.txt.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Resources/LineBreaking Leading Characters.txt create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Resources/LineBreaking Leading Characters.txt.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Resources/Sprite Assets.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Resources/Sprite Assets/EmojiOne.asset create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Resources/Sprite Assets/EmojiOne.asset.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Resources/Style Sheets.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Resources/Style Sheets/Default Style Sheet.asset.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Resources/TMP Settings.asset create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Resources/TMP Settings.asset.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/SDFFunctions.hlsl create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/SDFFunctions.hlsl.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_Bitmap.shader create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_Bitmap.shader.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF Overlay.shader create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF Overlay.shader.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF SSD.shader create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF SSD.shader.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF-HDRP LIT.shadergraph create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF-HDRP LIT.shadergraph.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF-HDRP UNLIT.shadergraph create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF-HDRP UNLIT.shadergraph.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF-Mobile-2-Pass.shader create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF-Mobile-2-Pass.shader.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF-Surface.shader create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF-Surface.shader.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF-URP Lit.shadergraph create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF-URP Lit.shadergraph.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF-URP Unlit.shadergraph create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF-URP Unlit.shadergraph.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF.shader create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_SDF.shader.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_Sprite.shader create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMP_Sprite.shader.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMPro.cginc create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMPro.cginc.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMPro_Mobile.cginc create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMPro_Mobile.cginc.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMPro_Properties.cginc create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMPro_Properties.cginc.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMPro_Surface.cginc create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Shaders/TMPro_Surface.cginc.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Sprites.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Sprites/EmojiOne Attribution.txt create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Sprites/EmojiOne Attribution.txt.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Sprites/EmojiOne.json create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Sprites/EmojiOne.json.meta create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Sprites/EmojiOne.png create mode 100755 UnityHiroInventory/Assets/UnityHiroInventory/TextMesh Pro/Sprites/EmojiOne.png.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Third-Party Notices.txt create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/Third-Party Notices.txt.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/UI Toolkit.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/UI Toolkit/UnityThemes.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/UI Toolkit/UnityThemes/UnityDefaultRuntimeTheme.tss create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/UI Toolkit/UnityThemes/UnityDefaultRuntimeTheme.tss.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/UI.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/UI/Inventory.uxml create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/UI/Inventory.uxml.meta create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/UI/InventoryItemTemplate.uxml create mode 100644 UnityHiroInventory/Assets/UnityHiroInventory/UI/InventoryItemTemplate.uxml.meta create mode 100644 UnityHiroInventory/Packages/manifest.json create mode 100644 UnityHiroInventory/Packages/packages-lock.json create mode 100644 UnityHiroInventory/ProjectSettings/AudioManager.asset create mode 100644 UnityHiroInventory/ProjectSettings/ClusterInputManager.asset create mode 100644 UnityHiroInventory/ProjectSettings/DynamicsManager.asset create mode 100644 UnityHiroInventory/ProjectSettings/EditorBuildSettings.asset create mode 100644 UnityHiroInventory/ProjectSettings/EditorSettings.asset create mode 100644 UnityHiroInventory/ProjectSettings/GraphicsSettings.asset create mode 100644 UnityHiroInventory/ProjectSettings/InputManager.asset create mode 100644 UnityHiroInventory/ProjectSettings/MemorySettings.asset create mode 100644 UnityHiroInventory/ProjectSettings/MultiplayerManager.asset create mode 100644 UnityHiroInventory/ProjectSettings/NavMeshAreas.asset create mode 100644 UnityHiroInventory/ProjectSettings/NetworkManager.asset create mode 100644 UnityHiroInventory/ProjectSettings/PackageManagerSettings.asset create mode 100644 UnityHiroInventory/ProjectSettings/Physics2DSettings.asset create mode 100644 UnityHiroInventory/ProjectSettings/PresetManager.asset create mode 100644 UnityHiroInventory/ProjectSettings/ProjectSettings.asset create mode 100644 UnityHiroInventory/ProjectSettings/ProjectVersion.txt create mode 100644 UnityHiroInventory/ProjectSettings/QualitySettings.asset create mode 100644 UnityHiroInventory/ProjectSettings/SceneTemplateSettings.json create mode 100644 UnityHiroInventory/ProjectSettings/ShaderGraphSettings.asset create mode 100644 UnityHiroInventory/ProjectSettings/TagManager.asset create mode 100644 UnityHiroInventory/ProjectSettings/TimeManager.asset create mode 100644 UnityHiroInventory/ProjectSettings/URPProjectSettings.asset create mode 100644 UnityHiroInventory/ProjectSettings/UnityConnectSettings.asset create mode 100644 UnityHiroInventory/ProjectSettings/VFXManager.asset create mode 100644 UnityHiroInventory/ProjectSettings/VersionControlSettings.asset create mode 100644 UnityHiroInventory/ProjectSettings/XRSettings.asset create mode 100644 UnityHiroInventory/UIElementsSchema/GlobalNamespace.xsd create mode 100644 UnityHiroInventory/UIElementsSchema/UIElements.xsd create mode 100644 UnityHiroInventory/UIElementsSchema/Unity.Profiling.Editor.UI.xsd create mode 100644 UnityHiroInventory/UIElementsSchema/Unity.Profiling.Editor.xsd create mode 100644 UnityHiroInventory/UIElementsSchema/Unity.UI.Builder.xsd create mode 100644 UnityHiroInventory/UIElementsSchema/UnityEditor.Accessibility.xsd create mode 100644 UnityHiroInventory/UIElementsSchema/UnityEditor.Audio.UIElements.xsd create mode 100644 UnityHiroInventory/UIElementsSchema/UnityEditor.Experimental.GraphView.xsd create mode 100644 UnityHiroInventory/UIElementsSchema/UnityEditor.Inspector.GraphicsSettingsInspectors.xsd create mode 100644 UnityHiroInventory/UIElementsSchema/UnityEditor.Inspector.xsd create mode 100644 UnityHiroInventory/UIElementsSchema/UnityEditor.Overlays.xsd create mode 100644 UnityHiroInventory/UIElementsSchema/UnityEditor.PackageManager.UI.Internal.xsd create mode 100644 UnityHiroInventory/UIElementsSchema/UnityEditor.Rendering.xsd create mode 100644 UnityHiroInventory/UIElementsSchema/UnityEditor.Search.xsd create mode 100644 UnityHiroInventory/UIElementsSchema/UnityEditor.ShaderGraph.Drawing.xsd create mode 100644 UnityHiroInventory/UIElementsSchema/UnityEditor.ShortcutManagement.xsd create mode 100644 UnityHiroInventory/UIElementsSchema/UnityEditor.Tilemaps.External.xsd create mode 100644 UnityHiroInventory/UIElementsSchema/UnityEditor.Tilemaps.xsd create mode 100644 UnityHiroInventory/UIElementsSchema/UnityEditor.U2D.Animation.SpriteLibraryEditor.xsd create mode 100644 UnityHiroInventory/UIElementsSchema/UnityEditor.U2D.Animation.Upgrading.xsd create mode 100644 UnityHiroInventory/UIElementsSchema/UnityEditor.U2D.Animation.xsd create mode 100644 UnityHiroInventory/UIElementsSchema/UnityEditor.U2D.Layout.xsd create mode 100644 UnityHiroInventory/UIElementsSchema/UnityEditor.U2D.Sprites.SpriteEditorTool.xsd create mode 100644 UnityHiroInventory/UIElementsSchema/UnityEditor.UIElements.Debugger.xsd create mode 100644 UnityHiroInventory/UIElementsSchema/UnityEditor.UIElements.ProjectSettings.xsd create mode 100644 UnityHiroInventory/UIElementsSchema/UnityEditor.UIElements.xsd create mode 100644 UnityHiroInventory/UIElementsSchema/UnityEngine.UIElements.xsd diff --git a/Nakama+Hiro/.cookie b/Nakama+Hiro/.cookie new file mode 100644 index 0000000000000000000000000000000000000000..16d48c75c771e73202efc3b6052f9041d2c25f14 GIT binary patch literal 16 YcmeB;7b|L9==o?pL&stDY2WSx06x+PP5=M^ literal 0 HcmV?d00001 diff --git a/Nakama+Hiro/.gitignore b/Nakama+Hiro/.gitignore new file mode 100644 index 0000000..5ed4b8a --- /dev/null +++ b/Nakama+Hiro/.gitignore @@ -0,0 +1 @@ +local.yml \ No newline at end of file diff --git a/Nakama+Hiro/.idea/.gitignore b/Nakama+Hiro/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/Nakama+Hiro/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/Nakama+Hiro/.idea/Nakama.iml b/Nakama+Hiro/.idea/Nakama.iml new file mode 100644 index 0000000..5e764c4 --- /dev/null +++ b/Nakama+Hiro/.idea/Nakama.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/Nakama+Hiro/.idea/encodings.xml b/Nakama+Hiro/.idea/encodings.xml new file mode 100644 index 0000000..df87cf9 --- /dev/null +++ b/Nakama+Hiro/.idea/encodings.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Nakama+Hiro/.idea/modules.xml b/Nakama+Hiro/.idea/modules.xml new file mode 100644 index 0000000..4c3032b --- /dev/null +++ b/Nakama+Hiro/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Nakama+Hiro/.idea/vcs.xml b/Nakama+Hiro/.idea/vcs.xml new file mode 100644 index 0000000..288b36b --- /dev/null +++ b/Nakama+Hiro/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Nakama+Hiro/Dockerfile b/Nakama+Hiro/Dockerfile new file mode 100644 index 0000000..57b02a7 --- /dev/null +++ b/Nakama+Hiro/Dockerfile @@ -0,0 +1,18 @@ +ARG NAKAMA_VERSION=3.32.0 + +FROM docker.io/heroiclabs/nakama-pluginbuilder:${NAKAMA_VERSION} AS builder + +ENV GO111MODULE=on +ENV CGO_ENABLED=1 + +WORKDIR /backend +COPY . . + +RUN go build --trimpath --buildmode=plugin -o ./backend.so + +FROM docker.io/heroiclabs/nakama:${NAKAMA_VERSION} + +COPY --from=builder /backend/backend.so /nakama/data/modules +COPY --from=builder /backend/local.yml /nakama/data/ +COPY --from=builder /backend/definitions/dev1/*.json /nakama/data/modules/definitions/dev1/ +COPY --from=builder /backend/lib/*.bin /nakama/data/modules/lib/ \ No newline at end of file diff --git a/Nakama+Hiro/definitions/dev1/base-challenges.json b/Nakama+Hiro/definitions/dev1/base-challenges.json new file mode 100644 index 0000000..353c51b --- /dev/null +++ b/Nakama+Hiro/definitions/dev1/base-challenges.json @@ -0,0 +1,203 @@ +{ + "challenges": { + "speed_runner": { + "reward_tiers": [ + { + "rank_min": 1, + "rank_max": 3, + "reward": { + "guaranteed": { + "currencies": { + "coins": { + "min": 300 + }, + "gems": { + "min": 15 + } + } + } + } + }, + { + "rank_min": 4, + "rank_max": 10, + "reward": { + "guaranteed": { + "currencies": { + "coins": { + "min": 150 + }, + "gems": { + "min": 8 + } + } + } + } + } + ], + "additional_properties": { + "display_name": "Speed Runner", + "description": "Score the most points by collecting crystals!", + "category": "arcade", + "difficulty": "expert", + "dungeon_id": "crystal_caverns" + }, + "max_num_score": 3, + "start_delay_max_sec": 60, + "ascending": false, + "operator": "best", + "duration": { + "min_sec": 1800, + "max_sec": 3600 + }, + "players": { + "min": 2, + "max": 100 + } + }, + "team_conquest": { + "reward_tiers": [ + { + "rank_min": 1, + "rank_max": 1, + "reward": { + "guaranteed": { + "currencies": { + "coins": { + "min": 500 + }, + "gems": { + "min": 25 + } + } + } + } + }, + { + "rank_min": 2, + "rank_max": 5, + "reward": { + "reward": { + "guaranteed": { + "currencies": { + "coins": { + "min": 250 + }, + "gems": { + "min": 12 + } + } + } + } + } + }, + { + "rank_min": 6, + "rank_max": 20, + "reward": { + "guaranteed": { + "currencies": { + "coins": { + "min": 100 + }, + "gems": { + "min": 5 + } + } + } + } + } + ], + "additional_properties": { + "display_name": "Team Conquest", + "description": "Capture and hold the most strategic points with your team!", + "category": "team_pvp", + "difficulty": "hard", + "map_id": "fortress_battleground" + }, + "max_num_score": 10, + "start_delay_max_sec": 120, + "ascending": false, + "operator": "best", + "duration": { + "min_sec": 3600, + "max_sec": 7200 + }, + "players": { + "min": 4, + "max": 50 + } + }, + "survival_gauntlet": { + "reward_tiers": [ + { + "rank_min": 1, + "rank_max": 5, + "reward": { + "guaranteed": { + "currencies": { + "coins": { + "min": 400 + }, + "gems": { + "min": 20 + } + } + } + } + }, + { + "rank_min": 6, + "rank_max": 15, + "reward": { + "guaranteed": { + "currencies": { + "coins": { + "min": 200 + }, + "gems": { + "min": 10 + } + } + } + } + }, + { + "rank_min": 16, + "rank_max": 50, + "reward": { + "guaranteed": { + "currencies": { + "coins": { + "min": 75 + }, + "gems": { + "min": 3 + } + } + } + } + } + ], + "additional_properties": { + "display_name": "Survival Gauntlet", + "description": "Survive endless waves of enemies for as long as possible!", + "category": "survival", + "difficulty": "medium", + "arena_id": "shadow_arena" + }, + "max_num_score": 3, + "start_delay_max_sec": 30, + "ascending": false, + "operator": "best", + "duration": { + "min_sec": 900, + "max_sec": 1800 + }, + "players": { + "min": 2, + "max": 200 + } + } + } +} diff --git a/Nakama+Hiro/definitions/dev1/base-economy.json b/Nakama+Hiro/definitions/dev1/base-economy.json new file mode 100644 index 0000000..41a8172 --- /dev/null +++ b/Nakama+Hiro/definitions/dev1/base-economy.json @@ -0,0 +1,8 @@ +{ + "initialize_user": { + "currencies": { + "coins": 999, + "gems": 50 + } + } +} \ No newline at end of file diff --git a/Nakama+Hiro/definitions/dev1/base-inventory.json b/Nakama+Hiro/definitions/dev1/base-inventory.json new file mode 100644 index 0000000..1b20296 --- /dev/null +++ b/Nakama+Hiro/definitions/dev1/base-inventory.json @@ -0,0 +1,106 @@ +{ + "items": { + "iron_sword": { + "name": "Iron Sword", + "description": "A sharp sword made of iron.", + "category": "weapons", + "item_sets": ["common_weapons"], + "max_count": 99, + "stackable": false, + "consumable": false, + "string_properties": { + "equipment_slot": "right_hand", + "rarity": "legendary" + }, + "numeric_properties": { + "rank": 1 + }, + "disabled": false + }, + "gold_stack": { + "name": "Gold Stack", + "description": "A stack of golden coins. So shiny!", + "category": "currency", + "max_count": 99, + "stackable": true, + "consumable": true, + "string_properties": { + "rarity": "uncommon" + }, + "keep_zero": true, + "consume_reward": { + "guaranteed": { + "currencies": { + "coins": { + "min": 100 + } + } + } + } + }, + "bomb": { + "name": "Bomb", + "description": "Goes BOOM!", + "category": "weapons", + "max_count": 99, + "stackable": true, + "consumable": true, + "string_properties": { + "rarity": "epic" + }, + "keep_zero": true, + "consume_reward": { + "guaranteed": { + "currencies": { + "coins": { + "min": 100 + } + } + } + } + }, + "small_crafting_bag": { + "name": "Small Crafting Bag", + "description": "A small bag of miscellaneous crafting materials.", + "category": "loot_bags", + "max_count": 99, + "stackable": false, + "consumable": true, + "string_properties": { + "rarity": "common" + }, + "consume_reward": { + "max_rolls": 2, + "weighted": [ + { + "items": { + "leather_scraps": { + "min": 1, + "max": 5 + } + }, + "weight": 50 + }, + { + "items": { + "bronze_nails": { + "min": 5, + "max": 100, + "multiple": 5 + } + }, + "weight": 50 + } + ] + } + } + }, + "limits": { + "categories": { + "armor": 10 + }, + "item_sets": { + "shield": 5 + } + } +} diff --git a/Nakama+Hiro/definitions/dev1/base-system.json b/Nakama+Hiro/definitions/dev1/base-system.json new file mode 100644 index 0000000..7a73a41 --- /dev/null +++ b/Nakama+Hiro/definitions/dev1/base-system.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/Nakama+Hiro/docker-compose.yml b/Nakama+Hiro/docker-compose.yml new file mode 100644 index 0000000..9dcf0b4 --- /dev/null +++ b/Nakama+Hiro/docker-compose.yml @@ -0,0 +1,51 @@ +services: + postgres: + container_name: game_backend_postgres + environment: + - POSTGRES_DB=nakama + - POSTGRES_PASSWORD=localdb + expose: + - "8080" + - "5432" + healthcheck: + test: [ "CMD", "pg_isready", "-U", "postgres", "-d", "nakama" ] + interval: 3s + timeout: 3s + retries: 5 + image: postgres:12.2-alpine + ports: + - "5432:5432" + - "8080:8080" + volumes: + - data:/var/lib/postgresql/data + nakama: + build: . + container_name: game_backend_nakama + depends_on: + postgres: + condition: service_healthy + entrypoint: + - "/bin/sh" + - "-ecx" + - > + /nakama/nakama migrate up --database.address postgres:localdb@postgres:5432/nakama && + exec /nakama/nakama --config /nakama/data/local.yml --database.address postgres:localdb@postgres:5432/nakama + expose: + - "7349" + - "7350" + - "7351" + healthcheck: + test: ["CMD", "/nakama/nakama", "healthcheck"] + interval: 10s + timeout: 5s + retries: 5 + links: + - "postgres:db" + ports: + - "7349:7349" + - "7350:7350" + - "7351:7351" + restart: unless-stopped + +volumes: + data: \ No newline at end of file diff --git a/Nakama+Hiro/go.mod b/Nakama+Hiro/go.mod new file mode 100644 index 0000000..93c5a0a --- /dev/null +++ b/Nakama+Hiro/go.mod @@ -0,0 +1,10 @@ +module heroiclabs/sample-templates + +go 1.25.0 + +require ( + github.com/heroiclabs/hiro v1.28.0 + github.com/heroiclabs/nakama-common v1.42.0 +) + +require google.golang.org/protobuf v1.36.8 // indirect diff --git a/Nakama+Hiro/go.sum b/Nakama+Hiro/go.sum new file mode 100644 index 0000000..83a09b6 --- /dev/null +++ b/Nakama+Hiro/go.sum @@ -0,0 +1,10 @@ +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/heroiclabs/hiro v1.28.0 h1:XJaxyjlcsCLquaJ/ebGW5LCJp9Dn63xb88i3Pw+zcXQ= +github.com/heroiclabs/hiro v1.28.0/go.mod h1:giDDMxUbOYzeblbmwj4U8jXOvuYhQTj0OQlUzC+PLuA= +github.com/heroiclabs/nakama-common v1.42.0 h1:Y+WbJ35YuYfTRBxNcnSYk8EjuG5ZIF2aPaOmkBGPzpI= +github.com/heroiclabs/nakama-common v1.42.0/go.mod h1:E4yiMQmn8KHQ77WqBLVUfazdiPnwFYWqUrfGOrqOXk8= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc= +google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= diff --git a/Nakama+Hiro/lib/.gitignore b/Nakama+Hiro/lib/.gitignore new file mode 100644 index 0000000..c96a04f --- /dev/null +++ b/Nakama+Hiro/lib/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/Nakama+Hiro/main.go b/Nakama+Hiro/main.go new file mode 100644 index 0000000..4fd8b50 --- /dev/null +++ b/Nakama+Hiro/main.go @@ -0,0 +1,102 @@ +package main + +import ( + "context" + "database/sql" + "errors" + "fmt" + "path/filepath" + "time" + + osruntime "runtime" + + "github.com/heroiclabs/hiro" + "github.com/heroiclabs/nakama-common/runtime" +) + +func InitModule(ctx context.Context, logger runtime.Logger, db *sql.DB, nk runtime.NakamaModule, initializer runtime.Initializer) error { + if err := nk.LeaderboardCreate(ctx, "weekly_leaderboard", false, "desc", "best", + "0 0 * * 1", map[string]interface{}{}, true); err != nil { + // Handle error. + } + + if err := nk.LeaderboardCreate(ctx, "global_leaderboard", false, "desc", "best", + "", map[string]interface{}{}, true); err != nil { + // Handle error. + } + + err := createTournament(ctx, logger, nk, "daily-dash", "0 12 * * *", "Daily Dash", "Dash past your opponents for high scores and big rewards!", 86400, 0, 1, false) + if err != nil { + // Handle error. + } + + err = createTournament(ctx, logger, nk, "limited-dash", "0 * * * *", "Limited Dash", "Limited spaces available, join now!", 3600, 10000, 3, true) + if err != nil { + // Handle error. + } + + initStart := time.Now() + + props, ok := ctx.Value(runtime.RUNTIME_CTX_ENV).(map[string]string) + if !ok { + return errors.New("invalid context runtime env") + } + + env, ok := props["ENV"] + if !ok || env == "" { + return errors.New("'ENV' key missing or invalid in env") + } + logger.Info("Using env named %q", env) + + hiroLicense, ok := props["HIRO_LICENSE"] + if !ok || hiroLicense == "" { + return errors.New("'HIRO_LICENSE' key missing or invalid in env") + } + + binName := "hiro.bin" + switch osruntime.GOOS { + case "darwin": + switch osruntime.GOARCH { + case "arm64": + binName = "hiro-darwin-arm64.bin" + } + case "linux": + switch osruntime.GOARCH { + case "arm64": + binName = "hiro-linux-arm64.bin" + } + } + binPath := filepath.Join("lib", binName) + logger.Info("binPath set as %q", binPath) + + systems, err := hiro.Init(ctx, logger, nk, initializer, binPath, hiroLicense, + hiro.WithBaseSystem(fmt.Sprintf("definitions/%s/base-system.json", env), true), + hiro.WithChallengesSystem(fmt.Sprintf("definitions/%s/base-challenges.json", env), true), + hiro.WithEconomySystem(fmt.Sprintf("definitions/%s/base-economy.json", env), true), + hiro.WithInventorySystem(fmt.Sprintf("definitions/%s/base-inventory.json", env), true)) + if err != nil { + return err + } + _ = systems + + logger.Info("Module loaded in %dms", time.Since(initStart).Milliseconds()) + + return nil +} + +func createTournament(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, id, resetSchedule, title, description string, duration, maxSize, maxNumScore int, joinRequired bool) error { + authoritative := false // true by default + sortOrder := "desc" // one of: "desc", "asc" + operator := "best" // one of: "best", "set", "incr" + metadata := map[string]interface{}{} + category := 1 + startTime := int(time.Now().UTC().Unix()) // start now + endTime := 0 // never end, repeat the tournament forever + enableRanks := true // ranks are enabled + err := nk.TournamentCreate(ctx, id, authoritative, sortOrder, operator, resetSchedule, metadata, title, description, category, startTime, endTime, duration, maxSize, maxNumScore, joinRequired, enableRanks) + if err != nil { + logger.Debug("unable to create tournament: %q", err.Error()) + return runtime.NewError("failed to create tournament", 3) + } + return nil +} diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/.editorconfig b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/.editorconfig new file mode 100644 index 0000000..6c5b2a6 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/.editorconfig @@ -0,0 +1,10 @@ +# See format at editorconfig.org +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/.gitignore b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/.gitignore new file mode 100644 index 0000000..e6f1176 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/.gitignore @@ -0,0 +1,3 @@ +vendor/ +.idea/ +.DS_Store diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/.golangci.yml b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/.golangci.yml new file mode 100644 index 0000000..ddc25ff --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/.golangci.yml @@ -0,0 +1,15 @@ +run: + # Enables skipping of directories: + # - vendor$, third_party$, testdata$, examples$, Godeps$, builtin$ + skip-dirs-use-default: true + skip-dirs: + - internal/gopher-lua + - internal/cronexpr + +linters: + enable: + - gofmt + +linters-settings: + gofmt: + simplify: false diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/CHANGELOG.md b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/CHANGELOG.md new file mode 100644 index 0000000..8a8201e --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/CHANGELOG.md @@ -0,0 +1,571 @@ +# Change Log +All notable changes to this project are documented below. + +The format is based on [keep a changelog](http://keepachangelog.com) and this project uses [semantic versioning](http://semver.org). + +:warning: This server code is versioned separately to the download of the [Hiro game framework](https://heroiclabs.com/hiro/). :warning: + +## [1.28.0] - 2025-10-07 +### Added +- Add function to fetch user with Team profile. + +### Changed +- If Team or user within an active Event Leaderboard has been deleted, skip using an empty score record. +- (Unity) Update to '3.20.0' Nakama/Satori .NET client release. + +### Fixed +- Do not allow re-claiming rewards if Team gift count is exactly equal to reward min count. +- When an Inventory Item is consumed for Rewards, ensure rolled currencies are accumulated. + +## [1.27.1] - 2025-09-30 +### Changed +- Update to Nakama 3.32.0 version on the nakama-common 1.42.0 release. + +## [1.27.0] - 2025-09-30 +### Added +- New function to get a Team by ID. +- Delete an Item by instance ID in Inventory. +- New benchmark suite with [Artillery](https://www.artillery.io/) for load tests. +- (Unity) (TypeScript) (Dart) (CPP) (Unreal) (Godot) (Python) Add client functions for all new features. + +### Changed +- An Event Leaderboard score update can submit metadata which is passed through to the underlying Leaderboard. +- A Challenge score update can decide if metadata should be updated on score change. +- (Unity) Update to '3.19.0' Nakama/Satori .NET client release. +- Add user ID and other inputs into Economy logger for debugging. + +### Fixed +- "RewardGrant" in server function should correctly grant Rewards which have no Inventory Items. +- (Unity) Allow negative Economy grants to work in Offline Mode. +- If set, use config source in Inventory consume function. +- (Unity) Apply Energy refill increments in Offline Mode. +- (Unity) Track score changes in Event Leaderboards while in Offline Mode. +- Pass AvatarUrl into Team update function. +- If set, apply collection resolver in Challenges invite function. +- Use the input UNIX time when a Team Gift is claimed. +- In custom matching function use correct tier override in Event Leaderboards. +- Fix regression when rolled Reward contents are granted with "RewardGrant" and "GrantItems". +- Progressions marked as permanently unlocked should remain unlocked even if an item precondition becomes unmet. +- Expired Mailbox Messages should be pruned at client read time. +- Fix Achievement replay when auto-reset is enabled and claim when max count is zero. + +## [1.26.0] - 2025-08-13 +### Added +- A Progression can be defined to allow its counts to be updated irrespective of any other preconditions. +- If enabled, a Challenge score's metadata is updated only when the score itself changes. +- A Progression can be defined to unlock permanently rather than have its state be computed. +- Each player now has a Reward Mailbox which can be used to receive Rewards to be collected. +- Huge redesign of the Teams gameplay system. This provides a very powerful set of features for Guilds, Clans, and other teamplay game design. +- A Team can now earn currencies into a Team Wallet. +- A Team can spend currencies in the Team Virtual Store for Rewards. +- A Team can collect Inventory which could be consumed for the benefits of all team members. +- A Team can make progress on Team Achievements with optional reset schedules. +- A Team can compete on Team Event Leaderboards with individual contributions part of the team's score. +- A Team can generate Team Gifts for players with different Rewards based on their activity. +- A Team can track Team Stats about any statistics that are interesting to players. +- A Team has a Team Reward Mailbox where Rewards can be sent to be collected. +- Players can be restricted to be joined to only one Team at any time. +- Players can have their activity and Team activity measured to track the frequency of play. +- A Reward in all gameplay systems can be directed to grant it into Reward Mailbox. +- When rolled into an Event Leaderboard cohort, the player's leaderboard record metadata can be set. +- When rolled into a Team Event Leaderboard cohort, the Team player's leaderboard record metadata can be set. +- A Streak can be defined with repeating claimable Rewards. +- (Unity) (TypeScript) (Dart) (CPP) (Unreal) (Godot) (Python) Add functions for all new features. + +### Changed +- The Reward definition is greatly extended to support Team Rewards and grants to individual players. +- Update to Nakama 3.30.0 version on the nakama-common 1.40.0 release. +- The Challenge gameplay system can now emit analytics events about activity. +- Team icon field is replaced by the avatar URL field. +- Teams no longer use "min_entry" metadata parameter on Create. +- Event Leaderboard cohorts cannot be rolled when the previous cohort Reward is unclaimed. +- Streak Reward(s) should define no "max_count" to allow them to be claimed beyond their initial eligible step. + +### Fixed +- "StoragePersonalizer" type now recognizes Challenge definitions in the Nakama Storage engine. +- Update JSON schema for Stats to include the latest fields. +- TotalReward when claimed on an Achievement has its timestamp updated. +- Set the Start Step correctly when a non-default value is used in a Tutorial definition. +- Fix how new/updated Items are updated in local state on Grant operations. +- Treat Item(s) as newly granted when granted as an Item's Reward. +- The "AllowFakeReceipts" option in Economy definition should be copied into Personalizers. + +## [1.25.0] - 2025-07-17 +### Added +- A Challenge can be created with custom metadata. +- (Unreal) The Hiro Online Subsystem (OSSv1) for Identity, Achievements, and Leaderboards is no longer in preview. +- (Python) New Python Hiro GDK also with Nakama Leaderboards support. +- A "PurchaseIntent" can now provide optional ISO currency code and amount. +- (Unity) Automatically set ISO currency code and amount in "PurchaseIntent" with "UnityPurchasingSystem" type. + +### Changed +- Update to Nakama 3.28.0 version on the nakama-common 1.38.0 release. +- The category field is now optional in Hiro data definitions which use it. +- (Unity) Update to '3.17.0' Nakama/Satori .NET client release. +- AppLovin Max S2S callbacks for rewarded video Placements are updated for the latest changes of the API. + +### Fixed +- Set "TotalClaimTimeSec" on Achievement update if claim count reached and "AutoClaimTotal" is enabled. + +## [1.24.0] - 2025-06-03 +### Added +- Add JSON schema and example data definition for Challenges. +- (Unity) Add "conditionalUpdateMetadata" to update method in "EventLeaderboardSystem" type. +- Add new Energy Modifiers for refill, count, and max. +- (Unity) Streaks progress can be calculated Offline and synchronized to server. + +### Changed +- (Unity) POCOs are now public to ease integration into custom RPCs and other SDKs. +- (CPP) (Dart) (Godot) (Unreal) Update client impls with changes. + +### Fixed +- Register Challenges with "SatoriPersonalizer" type. +- Invert parameter behaviour with Event Leaderboard score update metadata exclusion. +- Fix edge case where a rolled reward can grant too many reward items. +- (Unity) Enforce Inventory Item max count when in Offline Mode. + +## [1.23.0] - 2025-05-19 +### Added +- New gameplay system called Challenges for players to compete with each other on private leaderboards. +- (Unreal) New [Blueprints](https://dev.epicgames.com/documentation/en-us/unreal-engine/blueprints-visual-scripting-in-unreal-engine) support for all Hiro features. +- New Dart client for all Hiro features. + +### Changed +- When a score with metadata is changed on an Event Leaderboard, its metadata can be excluded. +- Use default values if Economy Reward ranges are unset in definition. +- (Unreal) Optimize parse response with string iterators. +- Update TypeScript client with all the latest Hiro features. +- (Unity) Modernize analytics systems and default taxonomy. +- (Unity) Achievement progress can be calculated Offline and synchronized to server. + +### Fixed +- (Unreal) Resolve all warnings in code generated types with 5.4 or newer. +- (Unity) When a player leaves a Team, update state to unset membership and other fields. +- (Unity) When an Inventory Item is consumed while Offline correctly calculate delta changes. +- Return updated Energy Modifiers as part of Economy Ack responses. +- (CPP) Use "std::variant" to parse "google.protobuf.Struct" types. +- (Unity) Correctly update view state of player Stats when back Online. +- (Unity) Correctly update view state of player Inventory when back Online. +- Do not store Inventory Item properties in storage which originate in Item definition. +- (Unity) Return filtered Inventory codex if category field is set. +- Reduce contention in Event Leaderboard entry participation to minimize retries. + +## [1.22.0] - 2025-02-14 +### Added +- Add "claim_count" field to Streaks gameplay system. +- A Donation now tracks and allows claiming from individual contributors. +- Inventory has a new lifecycle hook to allow Item IDs to be validated externally. +- Add List function to Event Leaderboards. + +### Changed +- Update to Nakama 3.26.0 version on the nakama-common 1.36.0 release. +- Username generator will not replace a username set as part of first account creation. +- Update JSON schema for Streaks gameplay system. +- Leaderboards can now use score operator directly from the Nakama SDK type. +- The root ID is now stored in metadata with generated Event Leaderboard IDs. +- (Unity) Use ReadOnlyCollection with Donations gameplay system. +- (Unity) Purchase Intents will always be sent if multiple Store Items share the same SKU code. +- Event Leaderboard rolls include retry backoff logic to minimize contention. +- (Unity) Notification package is updated to use 2.4.0 release. +- Expired donations are garbage collected only after claimed. + +### Fixed +- Use Preserve annotation to retain System and other type constructors with IL2CPP builds. +- Return Tier name with Event Leaderboard tiers in responses. +- Fix custom Tier selector in first Event Leaderboard roll logic. +- Rewards in Streaks which are achieved in intermediate steps can also be claimed. +- (Unity) [Fake Store](https://docs.unity3d.com/Packages/com.unity.purchasing@4.12/manual/WhatIsFakeStore.html) is now recognised by the Economy Store system. +- Idle activity in Event Leaderboard active phases does not demote incorrectly. +- Fix queue start calculation with Unlockables when an early unlock is spent. +- Weighted rewards in weight value is copied correctly in a deep clone. +- (Unity) Inventory gameplay system decodes JSON to type correctly with updates. +- Progressions reset CRON expression is calculated with the correct offset. + +## [1.21.0] - 2024-11-22 +### Added +- New Auctions lifecycle function hook for "OnCancel". +- All Event Leaderboards can be listed (optionally) with scores. +- Lifecycle hooks for Tutorials system which can be used to implement server-side rewards. + +### Changed +- Update to Nakama 3.25.0 version on the nakama-common 1.35.0 release. +- Incentive codes can be set never to expire with a 0 (zero) end time. +- Stats with zero values are returned rather than assumed to be zeroed out on the client. +- All definitions for gameplay systems are stripped of byte-order marker (BOM) for better Windows compatibility. +- Event Leaderboards now use a content hash ID to allow easier changes to their configuration with LiveOps. +- More efficient memory usage with cached Feature Flags in Satori Personalizer. + +### Fixed +- Inventory items marked with keep zero are kept when granted with zero in initialize user. +- (Unity) Use Energies dictionary keys only with applying offline updates. +- Always set username, display name, and avatar URL with non-debug players in Event Leaderboard scores. +- (Unity) Store Items which have the same SKU product ID are found through "WithStoreSpecificID". +- Don't throw error when all reward tiers in an Event Leaderboard are empty. +- Unlockable purchases to reduce time left should apply against final remainder cost. +- Use If-None-Match OCC in Event Leaderboard roll when using a custom selection function. +- Energy rewards should have "AvailableRewards" field returned when spend succeeds. +- Inventory items which are rolled but not granted should increment grant count except if overflow is allowed. +- Apply cohort selection storage bucket lock when using custom cohort selection function. + +## [1.20.0] - 2024-10-26 +### Added +- New Auctions lifecycle function hooks for "OnClaimBid", "OnClaimCreated", and "OnClaimCreatedFailed". +- New "Publisher" interface which can be registered to provide analytics to a separate service. +- Economy store items can be marked as "unavailable" which makes them visible to the player but not purchaseable. + +### Changed +- Return more detailed error messages with malformed inputs in "StoragePersonalizer" upload RPC. +- Cohort selection can force a new cohort and specific tier on fallback in Event Leaderboards. +- "SatoriPersonalizer" type now also implements the "Publisher" type. +- (Unity) Update "ExampleCoordinator" type to use refresh signal in Satori client. +- Use any registered personalizers to apply definition changes in Leaderboards gameplay system. +- Dynamically create Leaderboards if a personalizer has added ones not previously seen at server startup. +- (Unity) Use "UnityPurchasingSystem" observer to fetch additional products on previously unseen store item SKUs. +- Update to Achievement progress now act the same way as other gameplay systems by returning the latest state in the Ack returned. + +### Fixed +- Improve how malformed input is handled in the "StoragePersonalizer" type with upload RPC. +- (Unreal) Fix generated code on some non-map custom types in Hiro protocol. +- Update Auctions definition JSON example to use correct format. +- Trim older rewards which have already been claimed in a Streak. +- Fix registration of Tutorials reset RPC function. + +## [1.19.0] - 2024-10-06 +### Added +- New Streaks gameplay system to allow players to accumulate rewards with win streaks. +- A tutorial can now be reset so its steps can be played again. +- (Unity) Subscribe to chat history and other updates in a Team with a "Nakama.ISocket". + +### Changed +- A custom cohort created with Event Leaderboards can be forced to build a new cohort rather than fallback on the builtin matchmaker behaviour. +- Inventory grant items now returns items which were not granted but generated as part of the reward roll for the player. +- Teams can now be searched over by their language tag field. +- Migrate to Buf tool for Protobuf Go code generation. + +### Fixed +- Fix errors in JSON schema for Auctions feature. +- Economy virtual store soft currency purchases did not generate "purchaseCompleted" events. +- (Unity) Use a hash implementation with chat messages which can be compared for ordering. +- (Unity) Update internal state when a join request which is accepted in Teams system. + +## [1.18.0] - 2024-09-16 +### Added +- New Auctions gameplay system to allow players to offer and bid on Inventory items. + +### Changed +- The contents of the Energies sync sub-message had some fields renamed for clarity. +- Inventory and Economy can now optionally grant over the max count defined against an Item. +- Additional checks are used to perform Economy initialize user in case raw SQL has been used on account creation. +- Godot support is now packaged within Hiro releases. + +### Fixed +- Active modifiers are correctly returned in Economy refresh and ACKs. +- (Unity) Team chat messages now use an appropriate `IComparer` for sorted order. + +## [1.17.0] - 2024-08-05 +### Added +- New "UnlockAdvance" function to advance the unlock of an active Unlockable. +- Add OpenAPI v3 spec which can be used by API clients like [Bruno](https://www.usebruno.com/), Insomnia, etc. +- (Unity) Google Play Games and Apple Sign-in are included as new integrations. +- Inventory items can be filtered by category. +- Inventory items can be restricted when granted with category and item set limits. +- (Unity) Energy can now be granted to the player directly as well as part of a reward. + +### Changed +- Expose the cohort ID which the user has been assigned to within the active phase of the Event Leaderboard. +- Economy can now be configured to accept fake receipts and process grants for development. +- Allow Achievements to have a max count of 0 (zero) and be claimable only after preconditions are completed. + +### Fixed +- Progression counts on top level entities were not set in some API responses. +- Handle "null" description and avatar URL with Teams search gracefully. +- Purchased unlocks should also contribute towards the next queued unlockable start. +- Use substitute transaction ID for Discord test purchases. + +## [1.16.0] - 2024-07-07 +### Added +- Virtual store now supports [Discord In-App Purchases](https://github.com/discord/embedded-app-sdk/blob/main/docs/in-app-purchases.md). +- Event Leaderboard debug functions can now use "targetCount", "subscoreMin", and "subscoreMax" as optional parameters. + +### Changed +- Inventory system will keep zero count items in the player's storage if "keep_zero" is enabled. +- Use named return arguments in Go interfaces for improved readability. +- Any active reward modifiers are returned in "EconomyUpdateAck" responses. +- Unlockables which have completed but are not yet claimed do not count towards the active (in-use) slots. +- Fake users in Event Leaderboards are given zero scores rather than have no score set. +- (Unity) Update "ExampleCoordinator" for improved offline mode example. +- Stats system now observes "resolveCollection" for gameplay system's state. + +### Fixed +- (Unity) Confirm pending purchase even if non-consumable products exist on an Apple ID but are not known to the Virtual Store. +- (Unity) Fix queued unlocks which are not updated in the gameplay system's state. +- Fix "RewardGrant" error when energy system is not in use. +- (Unity) Remove various usages of "System.Linq" from codebase. +- Fix error on publish of Satori events about store items with no rewards. +- Fix energy "Spend" did not return aggregate rewards in response. + +## [1.15.0] - 2024-06-22 +### Added +- Unlockables can now be queued to unlock when stored within slots. +- New "max_queued_unlocks" param to restrict how many Unlockables can be queued to unlock. +- Add "metadata" field to Event Leaderboard score updates. + +### Changed +- The "OnReward" hooks now include the ID of the gameplay system entity which is the source of the reward. +- "PlacementStart" can take additional metadata as the context of what started the rewarded video placement. +- (Unity) (TypeScript) (CPP) (Unreal) Add functions for new queued Unlockables. +- Do not return an error when Inventory grant operations result in no change. +- (Unity) Switch over all enumerable data types to use "IReadOnlyCollection" to expose the "Count" field. +- A small Unlockable gameplay system design changed so an Unlockable can be started even if another Unlockable which was active is completed but not claimed yet. + +### Fixed +- Any active Reward Modifiers are returned in various gameplay system ACK responses. +- The Unlockables state now retains "null" in the list to indicate their position in the available slots. + +## [1.14.0] - 2024-06-09 +### Changed +- Update to Nakama 3.22.0 version on the nakama-common 1.32.0 release. +- Update dependency which include Protobuf 1.34.1 release. +- Leaderboard record metadata can be passed into score writes with Event Leaderboards. +- (Unity) Fix request object sent with "DebugRandomScores" function in Event Leaderboards. +- (Unity) Handle edge case where incorrectly defined Rewards within a hard currency purchase could leave the purchase in pending state. +- (Unity) Rename "DebugRandomScores" to "DebugRandomScoresAsync" to follow C# naming conventions. + +### Fixed +- Prevent a panic when consuming an Inventory Item but the Energy system has not been initialized. +- Fix non-stackable Inventory Item grants which could go beyond the max count defined. +- Use "reward" key name in Achievements JSON schema definition. + +## [1.13.0] - 2024-06-02 +### Added +- A Nakama Console import file to make it easy to set up storage objects for the "StoragePersonalizer" type. +- Add debug functions to help with QA on Event Leaderboards. +- Add "UnregisterDebugRpc" to clear the implementation of all debug functions across gameplay systems. + +### Changed +- (Unity) When the "NakamaSystem" is refreshed, reauthenticate if needed. This is useful when a logout has been performed or auto refresh in the "Nakama.Client" has been disabled. +- (Unity) The Nakama and Satori client dependencies are updated to their 3.12.0 releases. +- Refactor the "SatoriPersonalizer" for more modularity. +- An Event Leaderboard now contains "CurrentTimeSec" (UNIX time) same as an Achievement type. + +### Fixed +- In some reward types ensure we create multiple Inventory items when "non-stackable" is enabled. +- Don't return stale wallet values in sync RPC responses. + +## [1.12.0] - 2024-05-26 +### Added +- Support custom matchmaker properties with Event Leaderboards. +- Inventory items and Economy store items can be disabled. +- (Unity) Add "GetWallet" by enum as an extension to the "IApiAccount" type. +- (Unity) Add "GetPublicStats" by enum as an extension to the "IApiUser" type. +- (Unity) Add "GetPrivateStats" by enum as an extension to the "IApiUser" type. + +### Changed +- (Unity) "GetRecordsAsync" in "LeaderboardsSystem" can now return more than 100 records. +- (Unity) "GetItemCodexAsync" in "InventorySystem" can now take category as an optional input. + +### Fixed +- Fix JSON schema "tier_change" validation rule in Event Leaderboards. + +## [1.11.0] - 2024-05-19 +### Added +- Add "UnregisterRpc" to clear the implementation of one or more of the RPCs registered by gameplay systems in Hiro. +- Add helper function to convert "AvailableRewardsContents" type to an "EconomyConfigRewardContents" type. +- The "SatoriPersonalizer" can now cache data definitions within the lifecycle of a request if enabled. + +### Changed +- The "ForceNetworkProbe" can now be switched between true/false at runtime. +- The collection name used to store data per player can be (optionally) set. +- Explicitly include "unordered_map" in CPP generated output for Windows platform. +- Run Economy initialize user before any custom after authentication hook. + +### Fixed +- (Unity) Fix how currencies are decoded when values are larger than "int32.MaxSize". +- Fix incorrect WARN message at startup with some Economy reward data definition validations. +- Add "type" field to JSON schemas for Incentives, Progressions, and Stats. +- Add "max_count" field to JSON schema in Economy. + +## [1.10.0] - 2024-04-12 +### Added +- (Unity) Add function to write score to regional leaderboards. + +### Changed +- Use "omitempty" in marshaler settings with data definition structs. +- Improve error response codes in inventory and economy operations. +- "max_repeat_rolls" is now returned in the "AvailableRewards" type. +- Update to nakama-common v1.31.0 to be compatible with newer Nakama releases. +- Inventory "GrantItems" now returns the modified inventory and also the specific item instances which were granted. +- Use unsigned integers with the reward range type. +- Inventory items granted as part of a reward can now have their instance properties rolled at the same time. +- (Unity) Expose client and session types in the SatoriSystem type. +- (Unity) Update to latest Nakama and Satori SDK dependencies. + +### Fixed +- Fixed unrecognized Inventory system type in storage personalizer. +- Restore behaviour where inventory items inherit their properties from the definition and those property keys are not stored in storage. +- (Unity) Fixed batch update function with player stats. +- Satori integration to publish analytics events correctly reads configuration parameters. +- (Unity) Detect UnityPurchasing 'fake' store and warn prices will have mock values. + +## [1.9.0] - 2024-02-04 +### Added +- New option "max_repeat_rolls" to set how many duplicate rows of rolled rewards can occur. +- The "StoragePersonalizer" can now update data definitions with a S2S RPC function. +- Progressions can now be programmatically reset. + +### Changed +- The "SatoriPersonalizer" can optionally send analytics events for each gameplay system. + +### Fixed +- (Unity) Fix visibility modifier with "StatUpdate" class. +- Set energy modifiers into server response with Energies spend function. +- Fix item properties not set when items are granted as part of user initialization. +- Fix unlockable slots populated in the wrong order when overflow slots are enabled. + +## [1.8.1] - 2024-01-20 +### Added +- New "UnmarshalWallet" function to get a Hiro wallet from a Nakama "\*api.Account" type. + +### Changed +- Use clearer error messages in Personalizer middleware. +- Apply Satori identity authorization before Economy initialize user is processed. + +### Fixed +- Use stable order when inter-dependent achievement progress updates are counted. +- Don't throw an error on reward grants if Energies system is uninitialized. + +## [1.8.0] - 2023-12-27 +### Added +- Add switches for core and authenticate events to be sent by the "SatoriPersonalizer". +- Add "instance_id" field to response in Inventory Item type. +- Allow the "Personalizer" type to be added as a chain of transforms to each gameplay's data definition. +- Achievement updates can now be sent as a batch to change different counts on multiple achievements at the same time. +- Progressions can now define a reset schedule similar to Achievements. +- New "StoragePersonalizer" type which can use Nakama's storage engine to manage gameplay data definitions. +- Progression "Reset" can be used to manually reset progress on a progression node (i.e. to reset a quest). +- (Unity) VContainer DI example is now packaged with the Unity package. +- (Unity) Add "IsClaimed" computed field to Achievement type. +- (Unity) Wrap "Satori.IClient" methods in "SatoriSystem" type for simpler code. +- Stats can update multiple different stats in a single request. +- (Unity) Progression IDs can optionally be sent to receive deltas for a portion of the progression graph. + +### Changed +- Update nakama-common to v1.30.1 release. +- (Unreal) Update "HiroClient" with newest features. +- (TypeScript) Update "HiroClient" with newest features. +- Return instanced item rewards in response type when consumed. +- The "refill" and "refill_sec" fields are always populated in an Energy type (even if at max value). +- The builtin "SatoriPersonalizer" now (optionally) uses Satori Live Events to configure Event Leaderboards. +- Economy "Grant" now takes an optional wallet metadata input to record a reason in the Nakama ledger. +- A user who has not submitted any score to an Event Leaderboard is not eligible for rewards or promotions. +- Use Nakama's builtin Facebook Instant purchase validation function in the Economy system. +- If Satori is configured and enabled always authenticate server-side (rather than just new players). + +### Fixed +- Some outdated or missing definitions and schemas have been updated. +- Don't throw an error when the sender claim has no reward defined. +- (Unity) Add the Preserve attribute to some types at the class level to avoid code stripping issues in Unity IL2CPP. +- (Unity) Notify observers should not be called twice in the Progression system. +- Energies granted in rewards should be returned immediately rather than the previous stale value. +- (Unity) Don't throw an error if Achievement category is unset or empty. +- (Unity) Use platform specific preprocessor statements with Unity Mobile Notifications system. +- Fix variable shadow error with how data definition of sub-achievements are populated in responses. +- Economy weighted table rewards should escape early if a valid reward row has already been granted. + +## [1.7.0] - 2023-10-24 +### Added +- New error type "ErrItemsNotConsumable" for Inventory items which are not consumable. + +### Changed +- Energies "Grant" now returns a player's updated energies. +- "Get" will return an empty state for an Event Leaderboard when a player has never had a previous cohort. +- Add "locked" field to the storage engine index used with Event Leaderboard cohort generation. +- (Unity) Improve "InventorySystem" to use observer pattern. + +### Fixed +- (Unity) Use "PurchaseFailureDescription.reason" with Unity IAP package for error messages. +- Sender claim uses the newer internal operation in Incentives system. +- Do not shadow parent Reward when it is created to be granted in Achievements system. +- (Unity) Use an async pattern in "IStoreListener.ProcessPurchase" with Unity IAP package. + +## [1.6.0] - 2023-10-15 +### Added +- Add fields for "is_active", "can_claim", and "can_roll" for simpler client code with Event Leaderboards. +- (Unity) Add "IncentivesSystem". +- New "max_overflow" field to the data definition for Energies. + +### Changed +- (Unity) Allow both "IEconomyListStoreItem" and "IEconomyLocalizedStoreItem" to be used in purchase flows. + +### Fixed +- Use Inventory after the Progression purchase has been applied to calculate the latest Progression deltas. +- Energy counts granted as an Economy Reward are kept as overflow. +- Fix panic in progression precondition comparison. +- Batch economy changes which resolve to items removed are now marked correctly. +- (Unity) Serialize the input for Inventory update items request correctly to JSON. +- Fix to progression deltas computations. + +## [1.5.0] - 2023-10-04 +### Added +- Add server interface for the Incentives gameplay system. +- Cohort selection in Event Leaderboards can now be overridden with a custom function. + +### Changed +- "Get" in the Progression gameplay system now returns a delta of Progression Nodes who's state has changed if a previous graph is passed to it. + +## [1.4.0] - 2023-09-14 +### Added +- New function to "Roll" a new cohort with an Event Leaderboard in an active phase. +- Each Progression Node can now contain multiple counts for local progress to be expressed. + +### Fixed +- Update Event Leaderboard cohort search for Nakama 3.17.1 release. + +## [1.3.0] - 2023-09-07 +### Added +- New gameplay system called Progression to express Saga Maps, RPG Quests, and other game mechanics. +- Event Leaderboards can now express promotion and demotion zones with percentages. + +### Changed +- An Event Leaderboard which is active but no cohort has been assigned now returns a precondition failed on claim. + +## [1.2.0] - 2023-08-29 +### Added +- Add server interface for Stats gameplay system. + +### Changed +- Pin dependencies to compatible versions of Nakama common at v1.28.1. +- Return all Reward Tiers when an Event Leaderboard is fetched for the current user. + +### Fixed +- Fix weighted reward error when definition is empty (instead of nil). + +## [1.1.0] - 2023-08-23 +### Added +- Add server interface for Event Leaderboards gameplay system. + +## [1.0.4] - 2023-08-22 +### Changed +- Add ChannelMessageAck message to proto definition. + +### Fixed +- Expose server functions for reward and roll in Hiro. + +## [1.0.3] - 2023-08-10 +### Added +- Add enum value options to proto definition as code generation hints for Unreal Engine. + +### Changed +- Update to Nakama 3.17.0 release. + +## [1.0.2] - 2023-07-11 +### Changed +- Find the binary lookup path relative to Nakama modules dir. + +## [1.0.1] - 2023-07-11 +### Changed +- Pin dependencies to compatible versions of Nakama common at v1.27.0. + +## [1.0.0] - 2023-07-10 +### Added +- Initial public commit. diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/LICENSE b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/README.md b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/README.md new file mode 100644 index 0000000..9abe5aa --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/README.md @@ -0,0 +1,72 @@ +Hiro +=== + +> The server interface for the Hiro game framework. + +[Hiro](https://heroiclabs.com/hiro/) is a client and server framework built on top of [Nakama server](https://heroiclabs.com/nakama/) to rapidly build high performance, flexible, and composable gameplay systems like Achievements, Energies, Event Leaderboards, and much more. + +The code is divided into a Go package of interfaces and a client package for one of these supported languages and game engines: + +- A C# DLL which is packaged with utilities (such as UnityPurchasing, Unity Mobile Notifications, etc) for Unity Engine, +- An Unreal plugin, as well as CPP support for other engines, +- TypeScript-based JavaScript package for web games, +- And a Godot asset written in GDScript. + +This repository maintains the public interfaces which make it easy to use the library from inside a Nakama game server project to extend and build additional gameplay systems. You can explore the features with an [API client](https://www.usebruno.com/) when you import the "hiro-openapi.yml" collection. + +To learn more about Hiro and integrate it into your game project, have a look at these resources: + +- [heroiclabs.com/hiro](https://heroiclabs.com/hiro/) +- [heroiclabs.com/docs/hiro](https://heroiclabs.com/docs/hiro/) + +Reach out to [Heroic Labs](mailto:sales@heroiclabs.com) for more information about how to license Hiro as a developer or as part of a game studio. + +### Setup + +1. Set up the Go toolchain. +2. Set up your [Nakama project with Go](https://heroiclabs.com/docs/nakama/server-framework/go-runtime/#initialize-the-project). +3. Add Hiro to your project as a dependency: + + ```shell + go get "github.com/heroiclabs/hiro@latest" + ``` + +4. Sign up to the [Heroic Cloud](https://cloud.heroiclabs.com) and contact us to obtain licenses to Hiro. +5. Download and unzip the package. Add "hiro.bin" to your codebase. +6. Follow the [usage](#usage) instructions for how to get started. + +### Usage + +The game framework initializes and returns the configured gameplay systems with `Init`: + +```go +package main + +import ( + "context" + "database/sql" + "github.com/heroiclabs/hiro" + "github.com/heroiclabs/nakama-common/runtime" +) + +func InitModule(ctx context.Context, logger runtime.Logger, db *sql.DB, nk runtime.NakamaModule, initializer runtime.Initializer) error { + systems, err := hiro.Init(ctx, logger, nk, initializer, "hiro.bin", "LicenseKey", + hiro.WithEconomySystem("economy.json", true), + hiro.WithEnergySystem("energy.json", true), + hiro.WithInventorySystem("inventory.json", true)) + if err != nil { + return err + } + + // systems.GetEnergySystem().Get(...) + // ... + + return nil +} +``` + +For examples on how to write data definitions for the gameplay systems have a look at the [documentation](https://heroiclabs.com/docs/hiro/). + +### License + +This codebase is licensed under the [Apache-2 License](https://github.com/heroiclabs/hiro/blob/master/LICENSE). diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/achievements.go b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/achievements.go new file mode 100644 index 0000000..57e7d54 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/achievements.go @@ -0,0 +1,86 @@ +// Copyright 2023 Heroic Labs & Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hiro + +import ( + "context" + + "github.com/heroiclabs/nakama-common/runtime" +) + +// AchievementsConfig is the data definition for the TutorialsSystem type. +type AchievementsConfig struct { + Achievements map[string]*AchievementsConfigAchievement `json:"achievements,omitempty"` +} + +type AchievementsConfigAchievement struct { + AutoClaim bool `json:"auto_claim,omitempty"` + AutoClaimTotal bool `json:"auto_claim_total,omitempty"` + AutoReset bool `json:"auto_reset,omitempty"` + Category string `json:"category,omitempty"` + Count int64 `json:"count,omitempty"` + Description string `json:"description,omitempty"` + StartTimeSec int64 `json:"start_time_sec,omitempty"` + EndTimeSec int64 `json:"end_time_sec,omitempty"` + ResetCronexpr string `json:"reset_cronexpr,omitempty"` + DurationSec int64 `json:"duration_sec,omitempty"` + MaxCount int64 `json:"max_count,omitempty"` + Name string `json:"name,omitempty"` + PreconditionIDs []string `json:"precondition_ids,omitempty"` + Reward *EconomyConfigReward `json:"reward,omitempty"` + TotalReward *EconomyConfigReward `json:"total_reward,omitempty"` + SubAchievements map[string]*AchievementsConfigSubAchievement `json:"sub_achievements,omitempty"` + AdditionalProperties map[string]string `json:"additional_properties,omitempty"` +} + +type AchievementsConfigSubAchievement struct { + AutoClaim bool `json:"auto_claim,omitempty"` + AutoReset bool `json:"auto_reset,omitempty"` + Category string `json:"category,omitempty"` + Count int64 `json:"count,omitempty"` + Description string `json:"description,omitempty"` + ResetCronexpr string `json:"reset_cronexpr,omitempty"` + DurationSec int64 `json:"duration_sec,omitempty"` + MaxCount int64 `json:"max_count,omitempty"` + Name string `json:"name,omitempty"` + PreconditionIDs []string `json:"precondition_ids,omitempty"` + Reward *EconomyConfigReward `json:"reward,omitempty"` + AdditionalProperties map[string]string `json:"additional_properties,omitempty"` +} + +// An AchievementsSystem is a gameplay system which represents one-off, repeat, preconditioned, and sub-achievements. +type AchievementsSystem interface { + System + + // ClaimAchievements when one or more achievements whose progress has completed by their IDs. + ClaimAchievements(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, achievementIDs []string, claimTotal bool) (achievements map[string]*Achievement, repeatAchievements map[string]*Achievement, err error) + + // GetAchievements returns all achievements available to the user and progress on them. + GetAchievements(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string) (achievements map[string]*Achievement, repeatAchievements map[string]*Achievement, err error) + + // UpdateAchievements updates progress on one or more achievements by the same amount. + UpdateAchievements(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, achievementUpdates map[string]int64) (achievements map[string]*Achievement, repeatAchievements map[string]*Achievement, err error) + + // SetOnAchievementReward sets a custom reward function which will run after an achievement's reward is rolled. + SetOnAchievementReward(fn OnReward[*AchievementsConfigAchievement]) + + // SetOnSubAchievementReward sets a custom reward function which will run after a sub-achievement's reward is + // rolled. + SetOnSubAchievementReward(fn OnReward[*AchievementsConfigSubAchievement]) + + // SetOnAchievementTotalReward sets a custom reward function which will run after an achievement's total reward is + // rolled. + SetOnAchievementTotalReward(fn OnReward[*AchievementsConfigAchievement]) +} diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/auctions.go b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/auctions.go new file mode 100644 index 0000000..d41a232 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/auctions.go @@ -0,0 +1,132 @@ +// Copyright 2024 Heroic Labs & Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hiro + +import ( + "context" + + "github.com/heroiclabs/nakama-common/runtime" + "google.golang.org/protobuf/encoding/protojson" +) + +var ( + ErrAuctionTemplateNotFound = runtime.NewError("auction template not found", 3) // INVALID_ARGUMENT + ErrAuctionConditionNotFound = runtime.NewError("auction condition not found", 3) // INVALID_ARGUMENT + ErrAuctionItemsInvalid = runtime.NewError("auction items invalid", 3) // INVALID_ARGUMENT + ErrAuctionNotFound = runtime.NewError("auction not found", 3) // INVALID_ARGUMENT + ErrAuctionVersionMismatch = runtime.NewError("auction version mismatch", 3) // INVALID_ARGUMENT + ErrAuctionOwnBid = runtime.NewError("cannot bid on own auction", 3) // INVALID_ARGUMENT + ErrAuctionAlreadyBid = runtime.NewError("already high bidder on auction", 3) // INVALID_ARGUMENT + ErrAuctionNotStarted = runtime.NewError("auction not started", 3) // INVALID_ARGUMENT + ErrAuctionEnded = runtime.NewError("auction ended", 3) // INVALID_ARGUMENT + ErrAuctionBidInsufficient = runtime.NewError("auction bid insufficient", 3) // INVALID_ARGUMENT + ErrAuctionBidInvalid = runtime.NewError("auction bid invalid", 3) // INVALID_ARGUMENT + ErrAuctionCannotClaim = runtime.NewError("auction cannot be claimed", 3) // INVALID_ARGUMENT + ErrAuctionCannotCancel = runtime.NewError("auction cannot be cancelled", 3) // INVALID_ARGUMENT +) + +// AuctionsConfig is the data definition for the AuctionsSystem type. +type AuctionsConfig struct { + Auctions map[string]*AuctionsConfigAuction `json:"auctions,omitempty"` +} + +type AuctionsConfigAuction struct { + Items []string `json:"items,omitempty"` + ItemSets []string `json:"item_sets,omitempty"` + Conditions map[string]*AuctionsConfigAuctionCondition `json:"conditions,omitempty"` + BidHistoryCount int `json:"bid_history_count,omitempty"` +} + +type AuctionsConfigAuctionCondition struct { + DurationSec int64 `json:"duration_sec,omitempty"` + ListingCost *AuctionsConfigAuctionConditionCost `json:"listing_cost,omitempty"` + BidStart *AuctionsConfigAuctionConditionBid `json:"bid_start,omitempty"` + BidIncrement *AuctionsConfigAuctionConditionBidIncrement `json:"bid_increment,omitempty"` + ExtensionThresholdSec int64 `json:"extension_threshold_sec,omitempty"` + ExtensionSec int64 `json:"extension_sec,omitempty"` + ExtensionMaxSec int64 `json:"extension_max_sec,omitempty"` + Fee *AuctionsConfigAuctionConditionFee `json:"fee,omitempty"` +} + +type AuctionsConfigAuctionConditionCost struct { + Currencies map[string]int64 `json:"currencies,omitempty"` + Energies map[string]int64 `json:"energies,omitempty"` + Items map[string]int64 `json:"items,omitempty"` +} + +type AuctionsConfigAuctionConditionBid struct { + Currencies map[string]int64 `json:"currencies,omitempty"` +} + +type AuctionsConfigAuctionConditionBidIncrement struct { + Percentage float64 `json:"percentage,omitempty"` + Fixed *AuctionsConfigAuctionConditionBid `json:"fixed,omitempty"` +} + +type AuctionsConfigAuctionConditionFee struct { + Percentage float64 `json:"percentage,omitempty"` + Fixed *AuctionsConfigAuctionConditionBid `json:"fixed,omitempty"` +} + +type OnAuctionReward[T any] func(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, sourceID string, source *Auction, reward T) (T, error) + +// The AuctionsSystem provides a gameplay system for Auctions and their listing, bidding, and timers. +// +// Players list items for auctioning, bid on other auctions, and collect their rewards when appropriate. +type AuctionsSystem interface { + System + + // GetTemplates lists all available auction configurations that can be used to create auction listings. + GetTemplates(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string) (*AuctionTemplates, error) + + // List auctions based on provided criteria. + List(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, query string, sort []string, limit int, cursor string) (*AuctionList, error) + + // Bid on an active auction. + Bid(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, sessionID, auctionID, version string, bid *AuctionBidAmount, marshaler *protojson.MarshalOptions) (*Auction, error) + + // ClaimBid claims a completed auction as the successful bidder. + ClaimBid(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, auctionID string) (*AuctionClaimBid, error) + + // ClaimCreated claims a completed auction as the auction creator. + ClaimCreated(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, auctionID string) (*AuctionClaimCreated, error) + + // Cancel an active auction before it reaches its scheduled end time. + Cancel(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, auctionID string) (*AuctionCancel, error) + + // Create a new auction based on supplied parameters and available configuration. + Create(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, templateID, conditionID string, instanceIDs []string, startTimeSec int64, items []*InventoryItem, overrideConfig *AuctionsConfigAuction) (*Auction, error) + + // ListBids returns auctions the user has successfully bid on. + ListBids(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, limit int, cursor string) (*AuctionList, error) + + // ListCreated returns auctions the user has created. + ListCreated(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, limit int, cursor string) (*AuctionList, error) + + // Follow ensures users receive real-time updates for auctions they have an interest in. + Follow(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, sessionID string, auctionIDs []string) (*AuctionList, error) + + // SetOnClaimBid sets a custom reward function which will run after an auction's reward is claimed by the winning bidder. + SetOnClaimBid(fn OnAuctionReward[*AuctionReward]) + + // SetOnClaimCreated sets a custom reward function which will run after an auction's winning bid is claimed by the auction creator. + SetOnClaimCreated(fn OnAuctionReward[*AuctionBidAmount]) + + // SetOnClaimCreatedFailed sets a custom reward function which will run after a failed auction is claimed by the auction creator. + SetOnClaimCreatedFailed(fn OnAuctionReward[*AuctionReward]) + + // SetOnCancel sets a custom reward function which will run after an auction is cancelled by the auction creator. + SetOnCancel(fn OnAuctionReward[*AuctionReward]) +} diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/base.go b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/base.go new file mode 100644 index 0000000..145d3c2 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/base.go @@ -0,0 +1,432 @@ +// Copyright 2023 Heroic Labs & Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hiro + +import ( + "context" + "database/sql" + "errors" + "plugin" + + "github.com/heroiclabs/nakama-common/api" + "github.com/heroiclabs/nakama-common/runtime" + "google.golang.org/protobuf/encoding/protojson" +) + +var ( + ErrInternal = runtime.NewError("internal error occurred", 13) // INTERNAL + ErrBadInput = runtime.NewError("bad input", 3) // INVALID_ARGUMENT + ErrFileNotFound = runtime.NewError("file not found", 3) + ErrNoSessionUser = runtime.NewError("no user ID in session", 3) // INVALID_ARGUMENT + ErrNoSessionID = runtime.NewError("no session ID in session", 3) // INVALID_ARGUMENT + ErrNoSessionUsername = runtime.NewError("no username in session", 3) // INVALID_ARGUMENT + ErrPayloadDecode = runtime.NewError("cannot decode json", 13) // INTERNAL + ErrPayloadEmpty = runtime.NewError("payload should not be empty", 3) // INVALID_ARGUMENT + ErrPayloadEncode = runtime.NewError("cannot encode json", 13) // INTERNAL + ErrPayloadInvalid = runtime.NewError("payload is invalid", 3) // INVALID_ARGUMENT + ErrSessionUser = runtime.NewError("user ID in session", 3) // INVALID_ARGUMENT + ErrSystemNotAvailable = runtime.NewError("system not available", 13) // INTERNAL + ErrSystemNotFound = runtime.NewError("system not found", 13) // INTERNAL +) + +// The BaseSystem provides various small features which aren't large enough to be in their own gameplay systems. +type BaseSystem interface { + System + + // RateApp uses the SMTP configuration to receive feedback from players via email. + RateApp(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, username string, score uint32, message string) (err error) + + // SetDevicePrefs sets push notification tokens on a user's account so push messages can be received. + SetDevicePrefs(ctx context.Context, logger runtime.Logger, db *sql.DB, userID, deviceID, pushTokenAndroid, pushTokenIos string, preferences map[string]bool) (err error) + + // Sync processes an operation to update the server with offline state changes. + Sync(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, req *SyncRequest) (resp *SyncResponse, err error) +} + +// BaseSystemConfig is the data definition for the BaseSystem type. +type BaseSystemConfig struct { + RateAppSmtpAddr string `json:"rate_app_smtp_addr,omitempty"` // "smtp.gmail.com" + RateAppSmtpUsername string `json:"rate_app_smtp_username,omitempty"` // "email@domain" + RateAppSmtpPassword string `json:"rate_app_smtp_password,omitempty"` // "password" + RateAppSmtpEmailFrom string `json:"rate_app_smtp_email_from,omitempty"` // "gamename-server@mmygamecompany.com" + RateAppSmtpEmailFromName string `json:"rate_app_smtp_email_from_name,omitempty"` // My Game Company + RateAppSmtpEmailSubject string `json:"rate_app_smtp_email_subject,omitempty"` // "RateApp Feedback" + RateAppSmtpEmailTo string `json:"rate_app_smtp_email_to,omitempty"` // "gamename-rateapp@mygamecompany.com" + RateAppSmtpPort int `json:"rate_app_smtp_port,omitempty"` // 587 + + RateAppTemplate string `json:"rate_app_template"` // HTML email template +} + +type AfterAuthenticateFn func(ctx context.Context, logger runtime.Logger, db *sql.DB, nk runtime.NakamaModule, session *api.Session) error + +type CollectionResolverFn func(ctx context.Context, systemType SystemType, collection string) (string, error) + +// ActivityCalculator specifies a function used to resolve an activity score for some set of users. +// Users not in the returned map are assumed to have an activity score of 0. Higher activity values +// should generally be used to indicate more active users. Individual user activity scores may be +// used to compute a team activity score for any teams the user is part of. +type ActivityCalculator func(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userIDs []string) map[string]int64 + +// Hiro provides a type which combines all gameplay systems. +type Hiro interface { + // SetPersonalizer is deprecated in favor of AddPersonalizer function to compose a chain of configuration personalization. + SetPersonalizer(Personalizer) + AddPersonalizer(personalizer Personalizer) + + AddPublisher(publisher Publisher) + + SetAfterAuthenticate(fn AfterAuthenticateFn) + + // SetCollectionResolver sets a function that may change the storage collection target for Hiro systems. Not typically used. + SetCollectionResolver(fn CollectionResolverFn) + + // SetActivityCalculator sets a function expected to return an activity score for + // each of the requested users. Missing users are assumed to have a score of 0. + SetActivityCalculator(fn ActivityCalculator) + + GetAchievementsSystem() AchievementsSystem + GetBaseSystem() BaseSystem + GetEconomySystem() EconomySystem + GetEnergySystem() EnergySystem + GetInventorySystem() InventorySystem + GetLeaderboardsSystem() LeaderboardsSystem + GetStatsSystem() StatsSystem + GetTeamsSystem() TeamsSystem + GetTutorialsSystem() TutorialsSystem + GetUnlockablesSystem() UnlockablesSystem + GetEventLeaderboardsSystem() EventLeaderboardsSystem + GetProgressionSystem() ProgressionSystem + GetIncentivesSystem() IncentivesSystem + GetAuctionsSystem() AuctionsSystem + GetStreaksSystem() StreaksSystem + GetChallengesSystem() ChallengesSystem + GetRewardMailboxSystem() RewardMailboxSystem +} + +// The SystemType identifies each of the gameplay systems. +type SystemType uint + +const ( + SystemTypeUnknown SystemType = iota + SystemTypeBase + SystemTypeEnergy + SystemTypeUnlockables + SystemTypeTutorials + SystemTypeLeaderboards + SystemTypeStats + SystemTypeTeams + SystemTypeInventory + SystemTypeAchievements + SystemTypeEconomy + SystemTypeEventLeaderboards + SystemTypeProgression + SystemTypeIncentives + SystemTypeAuctions + SystemTypeStreaks + SystemTypeChallenges + SystemTypeRewardMailbox +) + +// Init initializes a Hiro type with the configurations provided. +func Init(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, initializer runtime.Initializer, binPath string, licenseKey string, configs ...SystemConfig) (Hiro, error) { + // Open the plugin. + binFile, err := nk.ReadFile(binPath) + if err != nil { + return nil, err + } + //goland:noinspection GoUnhandledErrorResult + defer binFile.Close() + + p, err := plugin.Open(binFile.Name()) + if err != nil { + return nil, err + } + + // Look up the required initialisation function. + f, err := p.Lookup("Init") + if err != nil { + return nil, err + } + + // Ensure the function has the correct types. + fn, ok := f.(func(context.Context, runtime.Logger, runtime.NakamaModule, runtime.Initializer, *protojson.MarshalOptions, *protojson.UnmarshalOptions, string, ...SystemConfig) (Hiro, error)) + if !ok { + return nil, errors.New("error reading hiro-gdk.Init function in Go module") + } + + marshaler := &protojson.MarshalOptions{ + UseEnumNumbers: true, + UseProtoNames: true, + EmitUnpopulated: false, + } + unmarshaler := &protojson.UnmarshalOptions{DiscardUnknown: false} + + return fn(ctx, logger, nk, initializer, marshaler, unmarshaler, licenseKey, configs...) +} + +// The SystemConfig describes the configuration that each gameplay system must use to configure itself. +type SystemConfig interface { + // GetType returns the runtime type of the gameplay system. + GetType() SystemType + + // GetConfigFile returns the configuration file used for the data definitions in the gameplay system. + GetConfigFile() string + + // GetRegister returns true if the gameplay system's RPCs should be registered with the game server. + GetRegister() bool + + // GetExtra returns the extra parameter used to configure the gameplay system. + GetExtra() any +} + +var _ SystemConfig = &systemConfig{} + +type systemConfig struct { + systemType SystemType + configFile string + register bool + + extra any +} + +func (sc *systemConfig) GetType() SystemType { + return sc.systemType +} +func (sc *systemConfig) GetConfigFile() string { + return sc.configFile +} +func (sc *systemConfig) GetRegister() bool { + return sc.register +} +func (sc *systemConfig) GetExtra() any { + return sc.extra +} + +// OnReward is a function that can be used by each gameplay system to provide an override reward. +type OnReward[T any] func(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, sourceID string, source T, rewardConfig *EconomyConfigReward, reward *Reward) (*Reward, error) + +// OnTeamReward is a function that can be used by the teams system to provide an override reward. +type OnTeamReward[T any] func(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, teamID, sourceID string, source T, rewardConfig *EconomyConfigReward, reward *Reward) (*Reward, error) + +// A System is a base type for a gameplay system. +type System interface { + // GetType provides the runtime type of the gameplay system. + GetType() SystemType + + // GetConfig returns the configuration type of the gameplay system. + GetConfig() any +} + +// UsernameOverrideFn can be used to provide a different username generation strategy from the default in Nakama server. +// Requested username indicates what the username would otherwise be set to, if the incoming request specified a value. +// The function is always expected to return a value, and returning "" defers to Nakama's built-in behaviour. +type UsernameOverrideFn func(requestedUsername string) string + +// WithAchievementsSystem configures an AchievementsSystem type and optionally registers its RPCs with the game server. +func WithAchievementsSystem(configFile string, register bool) SystemConfig { + return &systemConfig{ + systemType: SystemTypeAchievements, + configFile: configFile, + register: register, + } +} + +// WithBaseSystem configures a BaseSystem type and optionally registers its RPCs with the game server. +func WithBaseSystem(configFile string, register bool, usernameOverride ...UsernameOverrideFn) SystemConfig { + return &systemConfig{ + systemType: SystemTypeBase, + configFile: configFile, + register: register, + + extra: usernameOverride, + } +} + +// WithEconomySystem configures an EconomySystem type and optionally registers its RPCs with the game server. +func WithEconomySystem(configFile string, register bool, ironSrcPrivKey ...string) SystemConfig { + return &systemConfig{ + systemType: SystemTypeEconomy, + configFile: configFile, + register: register, + + extra: ironSrcPrivKey, + } +} + +// WithEnergySystem configures an EnergySystem type and optionally registers its RPCs with the game server. +func WithEnergySystem(configFile string, register bool) SystemConfig { + return &systemConfig{ + systemType: SystemTypeEnergy, + configFile: configFile, + register: register, + } +} + +// WithInventorySystem configures an InventorySystem type and optionally registers its RPCs with the game server. +func WithInventorySystem(configFile string, register bool) SystemConfig { + return &systemConfig{ + systemType: SystemTypeInventory, + configFile: configFile, + register: register, + } +} + +// WithLeaderboardsSystem configures a LeaderboardsSystem type. +func WithLeaderboardsSystem(configFile string, register bool, validateWriteScore ...ValidateWriteScoreFn) SystemConfig { + return &systemConfig{ + systemType: SystemTypeLeaderboards, + configFile: configFile, + register: register, + + extra: validateWriteScore, + } +} + +// WithStatsSystem configures a StatsSystem type and optionally registers its RPCs with the game server. +func WithStatsSystem(configFile string, register bool) SystemConfig { + return &systemConfig{ + systemType: SystemTypeStats, + configFile: configFile, + register: register, + } +} + +// WithTeamsSystem configures a TeamsSystem type and optionally registers its RPCs with the game server. +func WithTeamsSystem(configFile string, register bool) SystemConfig { + return &systemConfig{ + systemType: SystemTypeTeams, + configFile: configFile, + register: register, + } +} + +// WithTutorialsSystem configures a TutorialsSystem type and optionally registers its RPCs with the game server. +func WithTutorialsSystem(configFile string, register bool) SystemConfig { + return &systemConfig{ + systemType: SystemTypeTutorials, + configFile: configFile, + register: register, + } +} + +// WithUnlockablesSystem configures an UnlockablesSystem type and optionally registers its RPCs with the game server. +func WithUnlockablesSystem(configFile string, register bool) SystemConfig { + return &systemConfig{ + systemType: SystemTypeUnlockables, + configFile: configFile, + register: register, + } +} + +// WithEventLeaderboardsSystem configures an EventLeaderboardsSystem type and optionally registers its RPCs with the game server. +func WithEventLeaderboardsSystem(configFile string, register bool) SystemConfig { + return &systemConfig{ + systemType: SystemTypeEventLeaderboards, + configFile: configFile, + register: register, + } +} + +// WithProgressionSystem configures a ProgressionSystem type and optionally registers its RPCs with the game server. +func WithProgressionSystem(configFile string, register bool) SystemConfig { + return &systemConfig{ + systemType: SystemTypeProgression, + configFile: configFile, + register: register, + } +} + +// WithIncentivesSystem configures a IncentivesSystem type and optionally registers its RPCs with the game server. +func WithIncentivesSystem(configFile string, register bool) SystemConfig { + return &systemConfig{ + systemType: SystemTypeIncentives, + configFile: configFile, + register: register, + } +} + +// WithAuctionsSystem configures a AuctionsSystem type and optionally registers its RPCs with the game server. +func WithAuctionsSystem(configFile string, register bool) SystemConfig { + return &systemConfig{ + systemType: SystemTypeAuctions, + configFile: configFile, + register: register, + } +} + +// WithStreaksSystem configures a StreaksSystem type and optionally registers its RPCs with the game server. +func WithStreaksSystem(configFile string, register bool) SystemConfig { + return &systemConfig{ + systemType: SystemTypeStreaks, + configFile: configFile, + register: register, + } +} + +// WithChallengesSystem configures a ChallengesSystem type and optionally registers its RPCs with the game server. +func WithChallengesSystem(configFile string, register bool) SystemConfig { + return &systemConfig{ + systemType: SystemTypeChallenges, + configFile: configFile, + register: register, + } +} + +// WithRewardMailboxSystem configures a RewardMailboxSystem type and optionally registers its RPCs with the game server. +func WithRewardMailboxSystem(configFile string, register bool) SystemConfig { + return &systemConfig{ + systemType: SystemTypeRewardMailbox, + configFile: configFile, + register: register, + } +} + +// UnregisterRpc clears the implementation of one or more RPCs registered in Nakama by Hiro gameplay systems with a +// no-op version (http response 404). This is useful to remove individual RPCs which you do not want to be callable by +// game clients: +// +// hiro.UnregisterRpc(initializer, hiro.RpcId_RPC_ID_ECONOMY_GRANT, hiro.RpcId_RPC_ID_INVENTORY_GRANT) +// +// The behaviour of `initializer.RegisterRpc` in Nakama is last registration wins. It's recommended to use UnregisterRpc +// only after `hiro.Init` has been executed. +func UnregisterRpc(initializer runtime.Initializer, ids ...RpcId) error { + noopFn := func(context.Context, runtime.Logger, *sql.DB, runtime.NakamaModule, string) (string, error) { + return "", runtime.NewError("not found", 12) // GRPC - UNIMPLEMENTED + } + for _, id := range ids { + if err := initializer.RegisterRpc(id.String(), noopFn); err != nil { + return err + } + } + return nil +} + +// UnregisterDebugRpc clears the implementation of ALL debug RPCs registered in Nakama by Hiro gameplay systems with +// a no-op version (http response 404). This is useful to remove debug RPCs if you do not want them to be callable +// by game clients: +// +// hiro.UnregisterDebugRpc(initializer) +// +// The behaviour of `initializer.RegisterRpc` in Nakama is last registration wins. It's recommended to use +// UnregisterDebugRpc only after `hiro.Init` has been executed. +func UnregisterDebugRpc(initializer runtime.Initializer) error { + ids := []RpcId{ + RpcId_RPC_ID_EVENT_LEADERBOARD_DEBUG_FILL, + RpcId_RPC_ID_EVENT_LEADERBOARD_DEBUG_RANDOM_SCORES, + RpcId_RPC_ID_TEAMS_EVENT_LEADERBOARD_DEBUG_FILL, + RpcId_RPC_ID_TEAMS_EVENT_LEADERBOARD_DEBUG_RANDOM_SCORES, + } + return UnregisterRpc(initializer, ids...) +} diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/buf.gen.yaml b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/buf.gen.yaml new file mode 100644 index 0000000..24d6c96 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/buf.gen.yaml @@ -0,0 +1,8 @@ +version: v2 +managed: + enabled: true +plugins: +- remote: buf.build/protocolbuffers/go:v1.34.2 + out: . + opt: + - paths=source_relative diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/buf.yaml b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/buf.yaml new file mode 100644 index 0000000..505b848 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/buf.yaml @@ -0,0 +1,16 @@ +version: v2 +breaking: + use: + - FILE +lint: + use: + - STANDARD + except: + - PACKAGE_DIRECTORY_MATCH + - PACKAGE_VERSION_SUFFIX +modules: +- path: . + name: buf.build/heroiclabs/hiro + excludes: + - vendor + - node_modules diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/challenge.go b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/challenge.go new file mode 100644 index 0000000..ad203f2 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/challenge.go @@ -0,0 +1,77 @@ +package hiro + +import ( + "context" + + "github.com/heroiclabs/nakama-common/runtime" +) + +const NotificationCodeChallengeInvite = -1000 + +type ChallengesConfig struct { + Challenges map[string]*ChallengesConfigChallenge `json:"challenges,omitempty"` +} + +type ChallengesConfigChallenge struct { + RewardTiers []*ChallengesConfigChallengeRewardTier `json:"reward_tiers,omitempty"` + AdditionalProperties map[string]string `json:"additional_properties,omitempty"` + MaxNumScore int64 `json:"max_num_score,omitempty"` + StartDelayMaxSec int64 `json:"start_delay_max_sec,omitempty"` + Ascending bool `json:"ascending,omitempty"` + Operator string `json:"operator,omitempty"` + Duration *ChallengesConfigDuration `json:"duration,omitempty"` + Players *ChallengesConfigPlayers `json:"players,omitempty"` +} + +type ChallengesConfigChallengeRewardTier struct { + RankMax int64 `json:"rank_max,omitempty"` + RankMin int64 `json:"rank_min,omitempty"` + Reward *EconomyConfigReward `json:"reward,omitempty"` +} + +type ChallengesConfigDuration struct { + MinSec int64 `json:"min_sec,omitempty"` + MaxSec int64 `json:"max_sec,omitempty"` +} + +type ChallengesConfigPlayers struct { + Min int64 `json:"min,omitempty"` + Max int64 `json:"max,omitempty"` +} + +type ChallengesSystem interface { + System + + // GetTemplates lists all available challenge configurations that can be used to create new challenges. + GetTemplates(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string) (*ChallengeTemplates, error) + + // Get returns a challenge the user has been invited to or which is participating in. + Get(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, challengeId, userId string, withScores bool) (*Challenge, error) + + // List Lists all the user's pending or joined challenges. + List(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userId string, categories []string, withScores bool) ([]*Challenge, error) + + // Create a new challenge for a list of users. + Create(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userId, templateId, name, description, category string, open bool, startDelaySec, durationSec int64, invitees []string, maxPlayers int64, metadata map[string]string) (*Challenge, error) + + // Invite allows the creator of a challenge to invite more players to it. + Invite(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userId, challengeId string, invitees []string) (challenge *Challenge, err error) + + // Join Joins a challenge the user's been invited to. + Join(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userId, challengeId string) (*Challenge, error) + + // Leave rejects a challenge invitation or abandons a joined challenge. + Leave(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userId, challengeId string) (*Challenge, error) + + // SubmitScore submits a new score to the challenge. + SubmitScore(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userId, challengeId string, score, subscore int64, metadata map[string]any, conditionalMetadataUpdate bool) (challenge *Challenge, err error) + + // Search allows to find open challenges that are not full. + Search(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, name, category string, limit int) ([]*Challenge, error) + + // Claim claims a reward of a challenge, if any. + Claim(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userId, challengeId string) (*Challenge, error) + + // SetOnReward sets a custom reward function which will run after a challenge reward has been claimed. + SetOnReward(fn OnReward[*Challenge]) +} diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/economy.go b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/economy.go new file mode 100644 index 0000000..d0b43d5 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/economy.go @@ -0,0 +1,295 @@ +// Copyright 2023 Heroic Labs & Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hiro + +import ( + "context" + "database/sql" + + "github.com/heroiclabs/nakama-common/api" + "github.com/heroiclabs/nakama-common/runtime" +) + +var ( + ErrEconomyNoItem = runtime.NewError("item not found", 3) // INVALID_ARGUMENT + ErrEconomyItemUnavailable = runtime.NewError("item unavailable", 3) // INVALID_ARGUMENT + ErrEconomyNoSku = runtime.NewError("sku not found", 3) // INVALID_ARGUMENT + ErrEconomySkuInvalid = runtime.NewError("invalid sku", 3) // INVALID_ARGUMENT + ErrEconomyNotEnoughCurrency = runtime.NewError("not enough currency for purchase", 3) // INVALID_ARGUMENT + ErrEconomyNotEnoughItem = runtime.NewError("not enough item", 3) // INVALID_ARGUMENT + ErrEconomyReceiptInvalid = runtime.NewError("invalid receipt", 3) // INVALID_ARGUMENT + ErrEconomyReceiptDuplicate = runtime.NewError("duplicate receipt", 3) // INVALID_ARGUMENT + ErrEconomyReceiptMismatch = runtime.NewError("mismatched product receipt", 3) // INVALID_ARGUMENT + ErrEconomyNoPlacement = runtime.NewError("placement not found", 3) // INVALID_ARGUMENT + ErrEconomyNoDonation = runtime.NewError("donation not found", 3) // INVALID_ARGUMENT + ErrEconomyMaxDonation = runtime.NewError("donation maximum contribution reached", 3) // INVALID_ARGUMENT + ErrEconomyClaimedDonation = runtime.NewError("donation already claimed", 3) // INVALID_ARGUMENT + + ErrInventoryNotInitialized = runtime.NewError("inventory not initialized for batch", 13) // INTERNAL + ErrItemsNotConsumable = runtime.NewError("items not consumable", 3) // INVALID_ARGUMENT + ErrItemsInsufficient = runtime.NewError("insufficient items", 9) // FAILED_PRECONDITION + ErrCurrencyInsufficient = runtime.NewError("insufficient currency", 9) // FAILED_PRECONDITION +) + +// EconomyConfig is the data definition for the EconomySystem type. +type EconomyConfig struct { + InitializeUser *EconomyConfigInitializeUser `json:"initialize_user,omitempty"` + Donations map[string]*EconomyConfigDonation `json:"donations,omitempty"` + StoreItems map[string]*EconomyConfigStoreItem `json:"store_items,omitempty"` + Placements map[string]*EconomyConfigPlacement `json:"placements,omitempty"` + AllowFakeReceipts bool `json:"allow_fake_receipts,omitempty"` +} + +type EconomyConfigDonation struct { + Cost *EconomyConfigDonationCost `json:"cost,omitempty"` + Count int64 `json:"count,omitempty"` + Description string `json:"description,omitempty"` + DurationSec int64 `json:"duration_sec,omitempty"` + MaxCount int64 `json:"max_count,omitempty"` + Name string `json:"name,omitempty"` + RecipientReward *EconomyConfigReward `json:"recipient_reward,omitempty"` + ContributorReward *EconomyConfigReward `json:"contributor_reward,omitempty"` + UserContributionMaxCount int64 `json:"user_contribution_max_count,omitempty"` + AdditionalProperties map[string]string `json:"additional_properties,omitempty"` +} + +type EconomyConfigDonationCost struct { + Currencies map[string]int64 `json:"currencies,omitempty"` + Items map[string]int64 `json:"items,omitempty"` +} + +type EconomyConfigInitializeUser struct { + Currencies map[string]int64 `json:"currencies,omitempty"` + Items map[string]int64 `json:"items,omitempty"` +} + +type EconomyConfigPlacement struct { + Reward *EconomyConfigReward `json:"reward,omitempty"` + AdditionalProperties map[string]string `json:"additional_properties,omitempty"` +} + +type EconomyConfigReward struct { + Guaranteed *EconomyConfigRewardContents `json:"guaranteed,omitempty"` + Weighted []*EconomyConfigRewardContents `json:"weighted,omitempty"` + MaxRolls int64 `json:"max_rolls,omitempty"` + MaxRepeatRolls int64 `json:"max_repeat_rolls,omitempty"` + TotalWeight int64 `json:"total_weight,omitempty"` + ToMailboxExpirySec int64 `json:"to_mailbox_expiry_sec,omitempty"` + TeamReward *EconomyConfigTeamReward `json:"team_reward,omitempty"` +} + +type EconomyConfigRewardContents struct { + Items map[string]*EconomyConfigRewardItem `json:"items,omitempty"` + ItemSets []*EconomyConfigRewardItemSet `json:"item_sets,omitempty"` + Currencies map[string]*EconomyConfigRewardCurrency `json:"currencies,omitempty"` + Energies map[string]*EconomyConfigRewardEnergy `json:"energies,omitempty"` + EnergyModifiers []*EconomyConfigRewardEnergyModifier `json:"energy_modifiers,omitempty"` + RewardModifiers []*EconomyConfigRewardRewardModifier `json:"reward_modifiers,omitempty"` + Weight int64 `json:"weight,omitempty"` +} + +type EconomyConfigTeamReward struct { + Guaranteed *EconomyConfigTeamRewardContents `json:"guaranteed,omitempty"` + Weighted []*EconomyConfigTeamRewardContents `json:"weighted,omitempty"` + MaxRolls int64 `json:"max_rolls,omitempty"` + MaxRepeatRolls int64 `json:"max_repeat_rolls,omitempty"` + TotalWeight int64 `json:"total_weight,omitempty"` + ToMailboxExpirySec int64 `json:"to_mailbox_expiry_sec,omitempty"` + MemberReward *EconomyConfigTeamMemberReward `json:"member_reward,omitempty"` +} + +type EconomyConfigTeamRewardContents struct { + Items map[string]*EconomyConfigRewardItem `json:"items,omitempty"` + ItemSets []*EconomyConfigRewardItemSet `json:"item_sets,omitempty"` + Currencies map[string]*EconomyConfigRewardCurrency `json:"currencies,omitempty"` + RewardModifiers []*EconomyConfigRewardRewardModifier `json:"reward_modifiers,omitempty"` + Weight int64 `json:"weight,omitempty"` +} + +type EconomyConfigTeamMemberReward struct { + Guaranteed *EconomyConfigRewardContents `json:"guaranteed,omitempty"` + Weighted []*EconomyConfigRewardContents `json:"weighted,omitempty"` + MaxRolls int64 `json:"max_rolls,omitempty"` + MaxRepeatRolls int64 `json:"max_repeat_rolls,omitempty"` + TotalWeight int64 `json:"total_weight,omitempty"` + ToMailboxExpirySec int64 `json:"to_mailbox_expiry_sec,omitempty"` +} + +type EconomyConfigRewardCurrency struct { + EconomyConfigRewardRangeInt64 +} + +type EconomyConfigRewardEnergy struct { + EconomyConfigRewardRangeInt32 +} + +type EconomyConfigRewardEnergyModifier struct { + Id string `json:"id,omitempty"` + Operator string `json:"operator,omitempty"` + Value *EconomyConfigRewardRangeInt64 `json:"value,omitempty"` + DurationSec *EconomyConfigRewardRangeUInt64 `json:"duration_sec,omitempty"` +} + +type EconomyConfigRewardItem struct { + EconomyConfigRewardRangeInt64 + StringProperties map[string]*EconomyConfigRewardStringProperty `json:"string_properties,omitempty"` + NumericProperties map[string]*EconomyConfigRewardRangeFloat64 `json:"numeric_properties,omitempty"` +} + +type EconomyConfigRewardItemSet struct { + EconomyConfigRewardRangeInt64 + + MaxRepeats int64 `json:"max_repeats,omitempty"` + Set []string `json:"set,omitempty"` +} + +type EconomyConfigRewardRangeInt32 struct { + Min int32 `json:"min,omitempty"` + Max int32 `json:"max,omitempty"` + Multiple int32 `json:"multiple,omitempty"` +} + +type EconomyConfigRewardRangeInt64 struct { + Min int64 `json:"min,omitempty"` + Max int64 `json:"max,omitempty"` + Multiple int64 `json:"multiple,omitempty"` +} + +type EconomyConfigRewardRangeUInt64 struct { + Min uint64 `json:"min,omitempty"` + Max uint64 `json:"max,omitempty"` + Multiple uint64 `json:"multiple,omitempty"` +} + +type EconomyConfigRewardRangeFloat64 struct { + Min float64 `json:"min,omitempty"` + Max float64 `json:"max,omitempty"` + Multiple float64 `json:"multiple,omitempty"` +} + +type EconomyConfigRewardRewardModifier struct { + Id string `json:"id,omitempty"` + Type string `json:"type,omitempty"` + Operator string `json:"operator,omitempty"` + Value *EconomyConfigRewardRangeInt64 `json:"value,omitempty"` + DurationSec *EconomyConfigRewardRangeUInt64 `json:"duration_sec,omitempty"` +} + +type EconomyConfigRewardStringProperty struct { + TotalWeight int64 `json:"total_weight,omitempty"` + Options map[string]*EconomyConfigRewardStringPropertyOption `json:"options,omitempty"` +} + +type EconomyConfigRewardStringPropertyOption struct { + Weight int64 `json:"weight,omitempty"` +} + +type EconomyConfigStoreItem struct { + Category string `json:"category,omitempty"` + Cost *EconomyConfigStoreItemCost `json:"cost,omitempty"` + Description string `json:"description,omitempty"` + Name string `json:"name,omitempty"` + Reward *EconomyConfigReward `json:"reward,omitempty"` + AdditionalProperties map[string]string `json:"additional_properties,omitempty"` + Disabled bool `json:"disabled,omitempty"` + Unavailable bool `json:"unavailable,omitempty"` +} + +type EconomyConfigStoreItemCost struct { + Currencies map[string]int64 `json:"currencies,omitempty"` + Sku string `json:"sku,omitempty"` +} + +// EconomyPlacementInfo contains information about a placement instance. +type EconomyPlacementInfo struct { + // Placement configuration. + Placement *EconomyConfigPlacement `json:"placement,omitempty"` + // Metadata, if any was set when the placement was started. + Metadata map[string]string `json:"metadata,omitempty"` +} + +// The EconomySystem is the foundation of a game's economy. +// +// It provides functionality for 4 different reward types: basic, gacha, weighted table, and custom. These rolled +// rewards are available to generate in all other gameplay systems and can be generated manually as well. +type EconomySystem interface { + System + + // RewardCreate prepares a new reward configuration to be filled in and used later. + RewardCreate() (rewardConfig *EconomyConfigReward) + + // RewardConvert transforms a wire representation of a reward into an equivalent configuration representation. + RewardConvert(contents *AvailableRewards) (rewardConfig *EconomyConfigReward) + + // RewardRoll takes a reward configuration and rolls an actual reward from it, applying all appropriate rules. + RewardRoll(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, rewardConfig *EconomyConfigReward) (reward *Reward, err error) + + // RewardGrant updates a user's economy, inventory, and/or energy models with the contents of a rolled reward. + RewardGrant(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, reward *Reward, metadata map[string]interface{}, ignoreLimits bool) (newItems map[string]*InventoryItem, updatedItems map[string]*InventoryItem, notGrantedItemIDs map[string]int64, err error) + + // DonationClaim will claim donation rewards for a user and the given donation IDs. + DonationClaim(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, donationClaims map[string]*EconomyDonationClaimRequestDetails) (donationsList *EconomyDonationsList, err error) + + // DonationGet will get all donations for the given list of user IDs. + DonationGet(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userIDs []string) (donationsList *EconomyDonationsByUserList, err error) + + // DonationGive will contribute to a particular donation for a user ID. + DonationGive(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, donationID, fromUserID string) (updatedWallet map[string]int64, updatedInventory *Inventory, rewardModifiers []*ActiveRewardModifier, contributorReward *Reward, timestamp int64, err error) + + // DonationRequest will create a donation request for a given donation ID and user ID. + DonationRequest(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, donationID string) (donation *EconomyDonation, success bool, err error) + + // List will get the defined store items and placements within the economy system. + List(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string) (storeItems map[string]*EconomyConfigStoreItem, placements map[string]*EconomyConfigPlacement, rewardModifiers []*ActiveRewardModifier, timestamp int64, err error) + + // Grant will add currencies, and reward modifiers to a user's economy by ID. + Grant(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, currencies map[string]int64, items map[string]int64, modifiers []*RewardModifier, walletMetadata map[string]interface{}) (updatedWallet map[string]int64, rewardModifiers []*ActiveRewardModifier, timestamp int64, err error) + + // UnmarshalWallet unmarshals and returns the account's wallet as a map[string]int64. + UnmarshalWallet(account *api.Account) (wallet map[string]int64, err error) + + // PurchaseIntent will create a purchase intent for a particular store item for a user ID. + PurchaseIntent(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, itemID string, store EconomyStoreType, sku string, amount float64, currency string) (err error) + + // PurchaseItem will validate a purchase and give the user ID the appropriate rewards. + PurchaseItem(ctx context.Context, logger runtime.Logger, db *sql.DB, nk runtime.NakamaModule, userID, itemID string, store EconomyStoreType, receipt string) (updatedWallet map[string]int64, updatedInventory *Inventory, reward *Reward, isSandboxPurchase bool, err error) + + // PurchaseRestore will process a restore attempt for the given user, based on a set of restore receipts. + PurchaseRestore(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, store EconomyStoreType, receipts []string) (err error) + + // PlacementStatus will get the status of a specified placement. + PlacementStatus(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, rewardID, placementID string, retryCount int) (resp *EconomyPlacementStatus, err error) + + // PlacementStart will indicate that a user ID has begun viewing an ad placement. + PlacementStart(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, placementID string, metadata map[string]string) (resp *EconomyPlacementStatus, err error) + + // PlacementSuccess will indicate that the user ID has successfully viewed an ad placement and provide the appropriate reward. + PlacementSuccess(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, rewardID, placementID string) (reward *Reward, placementMetadata map[string]string, err error) + + // PlacementFail will indicate that the user ID has failed to successfully view the ad placement. + PlacementFail(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, rewardID, placementID string) (placementMetadata map[string]string, err error) + + // SetOnDonationClaimReward sets a custom reward function which will run after a donation's reward is rolled. + SetOnDonationClaimReward(fn OnReward[*EconomyConfigDonation]) + + // SetOnDonationContributorReward sets a custom reward function which will run after a donation's sender reward is rolled. + SetOnDonationContributorReward(fn OnReward[*EconomyConfigDonation]) + + // SetOnPlacementReward sets a custom reward function which will run after a placement's reward is rolled. + SetOnPlacementReward(fn OnReward[*EconomyPlacementInfo]) + + // SetOnStoreItemReward sets a custom reward function which will run after store item's reward is rolled. + SetOnStoreItemReward(fn OnReward[*EconomyConfigStoreItem]) +} diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/energy.go b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/energy.go new file mode 100644 index 0000000..463f79e --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/energy.go @@ -0,0 +1,57 @@ +// Copyright 2023 Heroic Labs & Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hiro + +import ( + "context" + + "github.com/heroiclabs/nakama-common/runtime" +) + +// EnergyConfig is the data definition for the EnergySystem type. +type EnergyConfig struct { + Energies map[string]*EnergyConfigEnergy `json:"energies,omitempty"` +} + +type EnergyConfigEnergy struct { + StartCount int32 `json:"start_count,omitempty"` + MaxCount int32 `json:"max_count,omitempty"` + MaxOverfill int32 `json:"max_overfill,omitempty"` + RefillCount int32 `json:"refill_count,omitempty"` + RefillTimeSec int64 `json:"refill_time_sec,omitempty"` + Implicit bool `json:"implicit,omitempty"` + Reward *EconomyConfigReward `json:"reward,omitempty"` + AdditionalProperties map[string]string `json:"additional_properties,omitempty"` +} + +// The EnergySystem provides a gameplay system for Energy timers. +// +// An energy is a gameplay mechanic used to reward or limit progress which a player can make through the gameplay +// content. +type EnergySystem interface { + System + + // Get returns all energies defined and the values a user currently owns by ID. + Get(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string) (energies map[string]*Energy, err error) + + // Spend will deduct the amounts from each energy for a user by ID. + Spend(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, amounts map[string]int32) (energies map[string]*Energy, reward *Reward, err error) + + // Grant will add the amounts to each energy (while applying any energy modifiers) for a user by ID. + Grant(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, amounts map[string]int32, modifiers []*RewardEnergyModifier) (energies map[string]*Energy, err error) + + // SetOnSpendReward sets a custom reward function which will run after an energy reward's value has been rolled. + SetOnSpendReward(fn OnReward[*EnergyConfigEnergy]) +} diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/event_leaderboards.go b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/event_leaderboards.go new file mode 100644 index 0000000..61c053b --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/event_leaderboards.go @@ -0,0 +1,109 @@ +// Copyright 2023 Heroic Labs & Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hiro + +import ( + "context" + "database/sql" + + "github.com/heroiclabs/nakama-common/runtime" +) + +// EventLeaderboardsConfig is the data definition for the EventLeaderboardsSystem type. +type EventLeaderboardsConfig struct { + EventLeaderboards map[string]*EventLeaderboardsConfigLeaderboard `json:"event_leaderboards,omitempty"` +} + +type EventLeaderboardsConfigLeaderboard struct { + Name string `json:"name,omitempty"` + Description string `json:"description,omitempty"` + Category string `json:"category,omitempty"` + Ascending bool `json:"ascending,omitempty"` + Operator string `json:"operator,omitempty"` + ResetSchedule string `json:"reset_schedule,omitempty"` + CohortSize int `json:"cohort_size,omitempty"` + TierOverrides map[string]*EventLeaderboardsConfigLeaderboardTierOverride `json:"tier_overrides,omitempty"` + AdditionalProperties map[string]string `json:"additional_properties,omitempty"` + MaxNumScore int `json:"max_num_score,omitempty"` + RewardTiers map[string][]*EventLeaderboardsConfigLeaderboardRewardTier `json:"reward_tiers,omitempty"` + ChangeZones map[string]*EventLeaderboardsConfigChangeZone `json:"change_zones,omitempty"` + Tiers int `json:"tiers,omitempty"` + MaxIdleTierDrop int `json:"max_idle_tier_drop,omitempty"` + StartTimeSec int64 `json:"start_time_sec,omitempty"` + EndTimeSec int64 `json:"end_time_sec,omitempty"` + Duration int64 `json:"duration,omitempty"` + + BackingId string `json:"-"` + CalculatedBackingId string `json:"-"` +} + +type EventLeaderboardsConfigLeaderboardTierOverride struct { + CohortSize int `json:"cohort_size,omitempty"` +} + +type EventLeaderboardsConfigLeaderboardRewardTier struct { + Name string `json:"name,omitempty"` + RankMax int `json:"rank_max,omitempty"` + RankMin int `json:"rank_min,omitempty"` + Reward *EconomyConfigReward `json:"reward,omitempty"` + TierChange int `json:"tier_change,omitempty"` +} + +type EventLeaderboardsConfigChangeZone struct { + Promotion float64 `json:"promotion,omitempty"` + Demotion float64 `json:"demotion,omitempty"` + DemoteIdle bool `json:"demote_idle,omitempty"` +} + +// An EventLeaderboardsSystem is a gameplay system which represents cohort-segmented, tier-based event leaderboards. +type EventLeaderboardsSystem interface { + System + + // ListEventLeaderboard returns available event leaderboards for the user. + ListEventLeaderboard(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, withScores bool, categories []string) (eventLeaderboards []*EventLeaderboard, err error) + + // GetEventLeaderboard returns a specified event leaderboard's cohort for the user. + GetEventLeaderboard(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, eventLeaderboardID string) (eventLeaderboard *EventLeaderboard, err error) + + // RollEventLeaderboard places the user into a new cohort for the specified event leaderboard if possible. + RollEventLeaderboard(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, eventLeaderboardID string, tier *int, matchmakerProperties map[string]interface{}, metadata map[string]interface{}) (eventLeaderboard *EventLeaderboard, err error) + + // UpdateEventLeaderboard updates the user's score in the specified event leaderboard, and returns the user's updated cohort information. + UpdateEventLeaderboard(ctx context.Context, logger runtime.Logger, db *sql.DB, nk runtime.NakamaModule, userID, username, eventLeaderboardID string, score, subscore int64, metadata map[string]interface{}, conditionalMetadataUpdate bool) (eventLeaderboard *EventLeaderboard, err error) + + // ClaimEventLeaderboard claims the user's reward for the given event leaderboard. + ClaimEventLeaderboard(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, eventLeaderboardID string) (eventLeaderboard *EventLeaderboard, err error) + + // SetOnEventLeaderboardsReward sets a custom reward function which will run after an event leaderboard's reward is rolled. + SetOnEventLeaderboardsReward(fn OnReward[*EventLeaderboardsConfigLeaderboard]) + + // SetOnEventLeaderboardCohortSelection sets a custom function that can replace the cohort or opponent selection feature of event leaderboards. + SetOnEventLeaderboardCohortSelection(fn OnEventLeaderboardCohortSelection) + + // DebugFill fills the user's current cohort with dummy users for all remaining available slots. + DebugFill(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, eventLeaderboardID string, targetCount int) (eventLeaderboard *EventLeaderboard, err error) + + // DebugRandomScores assigns random scores to the participants of the user's current cohort, except to the user themselves. + DebugRandomScores(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, eventLeaderboardID string, scoreMin, scoreMax, subscoreMin, subscoreMax int64, operator *int) (eventLeaderboard *EventLeaderboard, err error) +} + +type EventLeaderboardCohortConfig struct { + // Force a new cohort even if cohort selection did not find an appropriate one. + ForceNewCohort bool `json:"force_new_cohort,omitempty"` + // Optionally use a specified tier instead of the expected one for the user. + Tier *int `json:"tier,omitempty"` +} + +type OnEventLeaderboardCohortSelection func(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, storageIndex string, eventID string, config *EventLeaderboardsConfigLeaderboard, userID string, tier int, matchmakerProperties map[string]interface{}) (cohortID string, cohortUserIDs []string, newCohort *EventLeaderboardCohortConfig, err error) diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/hiro-openapi.yml b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/hiro-openapi.yml new file mode 100644 index 0000000..9299c74 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/hiro-openapi.yml @@ -0,0 +1,6570 @@ +openapi: 3.0.0 +info: + title: "Hiro RPC API" + description: "An OpenAPI collection for the Hiro RPC API" + version: 1.0.0 +servers: + - url: http://{hostAddr}:{port}/v2 + description: "Local development with Nakama server." + variables: + scheme: + enum: + - "https" + - "http" + default: "http" + hostAddr: + default: "127.0.0.1" + port: + enum: + - "443" + - "7350" + default: "7350" +paths: + /rpc/RPC_ID_INVENTORY_LIST?unwrap: + post: + summary: INVENTORY_LIST + description: "List all inventory items defined in the codex." + operationId: INVENTORY_LIST + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/InventoryListRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/InventoryList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_INVENTORY_LIST_INVENTORY?unwrap: + post: + summary: INVENTORY_LIST_INVENTORY + description: "List all inventory items owned by the player." + operationId: INVENTORY_LIST_INVENTORY + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/InventoryListRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/InventoryList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_INVENTORY_CONSUME?unwrap: + post: + summary: INVENTORY_CONSUME + description: "Consume one or more inventory items owned by the player." + operationId: INVENTORY_CONSUME + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/InventoryConsumeRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/InventoryConsumeRewards' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_INVENTORY_GRANT?unwrap: + post: + summary: INVENTORY_GRANT + description: "Grant one or more inventory items to the player." + operationId: INVENTORY_GRANT + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/InventoryGrantRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/InventoryUpdateAck' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_INVENTORY_UPDATE?unwrap: + post: + summary: INVENTORY_UPDATE + description: "Update the properties on one or more inventory items owned by the player." + operationId: INVENTORY_UPDATE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/InventoryUpdateItemsRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/InventoryUpdateAck' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_INVENTORY_DELETE?unwrap: + post: + summary: INVENTORY_DELETE + description: "Delete Items by instance id." + operationId: INVENTORY_DELETE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/InventoryDeleteItemsRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/InventoryUpdateAck' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_ECONOMY_DONATION_CLAIM?unwrap: + post: + summary: ECONOMY_DONATION_CLAIM + description: "Claim one or more rewards which are partially or full donated by other players." + operationId: ECONOMY_DONATION_CLAIM + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/EconomyDonationClaimRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/EconomyDonationClaimRewards' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_ECONOMY_DONATION_GIVE?unwrap: + post: + summary: ECONOMY_DONATION_GIVE + description: "Donate some resource (currencies, items, etc.) to a user by donation ID." + operationId: ECONOMY_DONATION_GIVE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/EconomyDonationGiveRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/EconomyUpdateAck' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_ECONOMY_DONATION_GET?unwrap: + post: + summary: ECONOMY_DONATION_GET + description: "Get progress on one or more donations for a set of players by their IDs." + operationId: ECONOMY_DONATION_GET + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/EconomyDonationGetRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/EconomyDonationsByUserList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_ECONOMY_DONATION_REQUEST?unwrap: + post: + summary: ECONOMY_DONATION_REQUEST + description: "Request a donation which other players can contribute into." + operationId: ECONOMY_DONATION_REQUEST + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/EconomyDonationRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/EconomyDonationAck' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_ECONOMY_STORE_GET?unwrap: + post: + summary: ECONOMY_STORE_GET + description: "Get all store items defined in the Virtual Store." + operationId: ECONOMY_STORE_GET + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/EconomyListRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/EconomyList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_ECONOMY_GRANT?unwrap: + post: + summary: ECONOMY_GRANT + description: "Grant one or more currencies or reward modifiers to te player." + operationId: ECONOMY_GRANT + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/EconomyGrantRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/EconomyUpdateAck' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_ECONOMY_PURCHASE_INTENT?unwrap: + post: + summary: ECONOMY_PURCHASE_INTENT + description: "Send a marker of intent to purchase by the player." + operationId: ECONOMY_PURCHASE_INTENT + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/EconomyPurchaseIntentRequest' + responses: + '200': + description: A successful response + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_ECONOMY_PURCHASE_ITEM?unwrap: + post: + summary: ECONOMY_PURCHASE_ITEM + description: "Purchase a store item by the player." + operationId: ECONOMY_PURCHASE_ITEM + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/EconomyPurchaseRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/EconomyPurchaseAck' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_ECONOMY_PURCHASE_RESTORE?unwrap: + post: + summary: ECONOMY_PURCHASE_RESTORE + description: "Restore a set of purchases." + operationId: ECONOMY_PURCHASE_RESTORE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/EconomyPurchaseRestoreRequest' + responses: + '200': + description: A successful response + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_ECONOMY_PLACEMENT_STATUS?unwrap: + post: + summary: ECONOMY_PLACEMENT_STATUS + description: "Get the current status on an Ad placement which may have been rewarded." + operationId: ECONOMY_PLACEMENT_STATUS + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/EconomyPlacementStatusRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/EconomyPlacementStatus' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_ECONOMY_PLACEMENT_START?unwrap: + post: + summary: ECONOMY_PLACEMENT_START + description: "Start a new Ad placement by placement ID." + operationId: ECONOMY_PLACEMENT_START + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/EconomyPlacementStartRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/EconomyPlacementStatus' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_ACHIEVEMENTS_CLAIM?unwrap: + post: + summary: ACHIEVEMENTS_CLAIM + description: "Claim one or more achievements which have completed their progress." + operationId: ACHIEVEMENTS_CLAIM + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/AchievementsClaimRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/AchievementsUpdateAck' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_ACHIEVEMENTS_GET?unwrap: + post: + summary: ACHIEVEMENTS_GET + description: "Get all achievements with progress accumulated by the player." + operationId: ACHIEVEMENTS_GET + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/AchievementList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_ACHIEVEMENTS_UPDATE?unwrap: + post: + summary: ACHIEVEMENTS_UPDATE + description: "Update one or more achievements with the same progress amount." + operationId: ACHIEVEMENTS_UPDATE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/AchievementsUpdateRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/AchievementsUpdateAck' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_ENERGY_GET?unwrap: + post: + summary: ENERGY_GET + description: "Get the energies and their current timers for the player." + operationId: ENERGY_GET + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/EnergyList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_ENERGY_SPEND?unwrap: + post: + summary: ENERGY_SPEND + description: "Spend one or more energies for the player." + operationId: ENERGY_SPEND + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/EnergySpendRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/EnergySpendReward' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_ENERGY_GRANT?unwrap: + post: + summary: ENERGY_GRANT + description: "Grant one or more energies to the player." + operationId: ENERGY_GRANT + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/EnergyGrantRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/EnergyList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TUTORIALS_GET?unwrap: + post: + summary: TUTORIALS_GET + description: "Get the tutorials and current progress step for the player." + operationId: TUTORIALS_GET + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/TutorialList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TUTORIALS_ACCEPT?unwrap: + post: + summary: TUTORIALS_ACCEPT + description: "Accept an offer to step through a tutorial." + operationId: TUTORIALS_ACCEPT + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TutorialAcceptRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Tutorial' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TUTORIALS_DECLINE?unwrap: + post: + summary: TUTORIALS_DECLINE + description: "Decline an offer to start a tutorial." + operationId: TUTORIALS_DECLINE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TutorialDeclineRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Tutorial' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TUTORIALS_ABANDON?unwrap: + post: + summary: TUTORIALS_ABANDON + description: "Abandon progress on a tutorial." + operationId: TUTORIALS_ABANDON + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TutorialAbandonRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Tutorial' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TUTORIALS_UPDATE?unwrap: + post: + summary: TUTORIALS_UPDATE + description: "Update the current progress step in the tutorial by ID." + operationId: TUTORIALS_UPDATE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TutorialUpdateRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/TutorialList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TUTORIALS_RESET?unwrap: + post: + summary: TUTORIALS_RESET + description: "Reset the state of all given tutorial IDs." + operationId: TUTORIALS_RESET + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TutorialResetRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/TutorialList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_CREATE?unwrap: + post: + summary: TEAMS_CREATE + description: "Create a team which other players can join." + operationId: TEAMS_CREATE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamCreateRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Team' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_UPDATE?unwrap: + post: + summary: TEAMS_UPDATE + description: "Update a team's properties." + operationId: TEAMS_UPDATE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamUpdateRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Team' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_LIST?unwrap: + post: + summary: TEAMS_LIST + description: "List one or more teams which the player can join." + operationId: TEAMS_LIST + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamListRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/TeamList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_SEARCH?unwrap: + post: + summary: TEAMS_SEARCH + description: "Search for teams by name or an optional short code." + operationId: TEAMS_SEARCH + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamSearchRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/TeamList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_GET?unwrap: + post: + summary: TEAMS_GET + description: "Retrieves a team by its TeamID." + operationId: TEAMS_GET + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamGetRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Team' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_USER_TEAMS_LIST?unwrap: + post: + summary: TEAMS_USER_TEAMS_LIST + description: "Retrieve a list of teams associated with a given set of users." + operationId: TEAMS_USER_TEAMS_LIST + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/UserTeamsListRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/UserTeamsList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_WRITE_CHAT_MESSAGE?unwrap: + post: + summary: TEAMS_WRITE_CHAT_MESSAGE + description: "Write a chat message to the Team's chat channel." + operationId: TEAMS_WRITE_CHAT_MESSAGE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamWriteChatMessageRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/ChannelMessageAck' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_STORE_GET?unwrap: + post: + summary: TEAMS_STORE_GET + description: "Get all store items defined in the team Virtual Store." + operationId: TEAMS_STORE_GET + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamStoreListRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/TeamStore' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_STORE_PURCHASE?unwrap: + post: + summary: TEAMS_STORE_PURCHASE + description: "Purchase a team store item." + operationId: TEAMS_STORE_PURCHASE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamStorePurchaseRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/TeamStorePurchaseAck' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_WALLET_GET?unwrap: + post: + summary: TEAMS_WALLET_GET + description: "Get a team's wallet." + operationId: TEAMS_WALLET_GET + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamWalletGetRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/TeamWallet' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_WALLET_GRANT?unwrap: + post: + summary: TEAMS_WALLET_GRANT + description: "Grant currencies to a team's wallet." + operationId: TEAMS_WALLET_GRANT + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamWalletGrantRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/TeamWallet' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_STATS_GET?unwrap: + post: + summary: TEAMS_STATS_GET + description: "Get a team's stats." + operationId: TEAMS_STATS_GET + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamStatListRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/StatList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_STATS_UPDATE?unwrap: + post: + summary: TEAMS_STATS_UPDATE + description: "Update a team's stats." + operationId: TEAMS_STATS_UPDATE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamStatUpdateRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/StatList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_INVENTORY_LIST?unwrap: + post: + summary: TEAMS_INVENTORY_LIST + description: "List all inventory items defined in the team codex." + operationId: TEAMS_INVENTORY_LIST + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamInventoryListRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/InventoryList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_INVENTORY_LIST_INVENTORY?unwrap: + post: + summary: TEAMS_INVENTORY_LIST_INVENTORY + description: "List all inventory items owned by a team." + operationId: TEAMS_INVENTORY_LIST_INVENTORY + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamInventoryListRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/InventoryList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_INVENTORY_CONSUME?unwrap: + post: + summary: TEAMS_INVENTORY_CONSUME + description: "Consume one or more inventory items owned by a team." + operationId: TEAMS_INVENTORY_CONSUME + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamInventoryConsumeRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/InventoryConsumeRewards' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_INVENTORY_GRANT?unwrap: + post: + summary: TEAMS_INVENTORY_GRANT + description: "Grant one or more inventory items to a team." + operationId: TEAMS_INVENTORY_GRANT + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamInventoryGrantRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/InventoryUpdateAck' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_INVENTORY_UPDATE?unwrap: + post: + summary: TEAMS_INVENTORY_UPDATE + description: "Update the properties on one or more team inventory items accessible to the player." + operationId: TEAMS_INVENTORY_UPDATE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamInventoryUpdateItemsRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/InventoryUpdateAck' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_ACHIEVEMENTS_CLAIM?unwrap: + post: + summary: TEAMS_ACHIEVEMENTS_CLAIM + description: "Claim one or more team achievements which have completed their progress." + operationId: TEAMS_ACHIEVEMENTS_CLAIM + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamAchievementsClaimRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/AchievementsUpdateAck' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_ACHIEVEMENTS_GET?unwrap: + post: + summary: TEAMS_ACHIEVEMENTS_GET + description: "Get all team achievements with progress accumulated by the team." + operationId: TEAMS_ACHIEVEMENTS_GET + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamAchievementsGetRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/AchievementList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_ACHIEVEMENTS_UPDATE?unwrap: + post: + summary: TEAMS_ACHIEVEMENTS_UPDATE + description: "Update one or more team achievements with the same progress amount." + operationId: TEAMS_ACHIEVEMENTS_UPDATE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamAchievementsUpdateRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/AchievementsUpdateAck' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_EVENT_LEADERBOARD_LIST?unwrap: + post: + summary: TEAMS_EVENT_LEADERBOARD_LIST + description: "List available event leaderboards." + operationId: TEAMS_EVENT_LEADERBOARD_LIST + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamEventLeaderboardList' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/TeamEventLeaderboards' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_EVENT_LEADERBOARD_GET?unwrap: + post: + summary: TEAMS_EVENT_LEADERBOARD_GET + description: "Get a specified event leaderboard defined for the game." + operationId: TEAMS_EVENT_LEADERBOARD_GET + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamEventLeaderboardGet' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/TeamEventLeaderboard' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_EVENT_LEADERBOARD_UPDATE?unwrap: + post: + summary: TEAMS_EVENT_LEADERBOARD_UPDATE + description: "Update an event leaderboard record for a user." + operationId: TEAMS_EVENT_LEADERBOARD_UPDATE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamEventLeaderboardUpdate' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/TeamEventLeaderboard' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_EVENT_LEADERBOARD_CLAIM?unwrap: + post: + summary: TEAMS_EVENT_LEADERBOARD_CLAIM + description: "Claim an event leaderboard reward for a user." + operationId: TEAMS_EVENT_LEADERBOARD_CLAIM + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamEventLeaderboardClaim' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/TeamEventLeaderboard' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_EVENT_LEADERBOARD_ROLL?unwrap: + post: + summary: TEAMS_EVENT_LEADERBOARD_ROLL + description: "Roll a new cohort for the specified event leaderboard." + operationId: TEAMS_EVENT_LEADERBOARD_ROLL + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamEventLeaderboardRoll' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/TeamEventLeaderboard' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_EVENT_LEADERBOARD_DEBUG_FILL?unwrap: + post: + summary: TEAMS_EVENT_LEADERBOARD_DEBUG_FILL + description: "DEBUG. Fill an event leaderboard with random user IDs." + operationId: TEAMS_EVENT_LEADERBOARD_DEBUG_FILL + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamEventLeaderboardDebugFillRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/TeamEventLeaderboard' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_EVENT_LEADERBOARD_DEBUG_RANDOM_SCORES?unwrap: + post: + summary: TEAMS_EVENT_LEADERBOARD_DEBUG_RANDOM_SCORES + description: "DEBUG. Assign random scores within a given range to users within the caller's cohort, except for the caller themselves." + operationId: TEAMS_EVENT_LEADERBOARD_DEBUG_RANDOM_SCORES + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamEventLeaderboardDebugRandomScoresRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/TeamEventLeaderboard' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_REWARD_MAILBOX_LIST?unwrap: + post: + summary: TEAMS_REWARD_MAILBOX_LIST + description: "List rewards available in a team reward mailbox." + operationId: TEAMS_REWARD_MAILBOX_LIST + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamRewardMailboxListRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/RewardMailboxList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_REWARD_MAILBOX_CLAIM?unwrap: + post: + summary: TEAMS_REWARD_MAILBOX_CLAIM + description: "Claim a reward from the team reward mailbox, and optionally delete it." + operationId: TEAMS_REWARD_MAILBOX_CLAIM + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamRewardMailboxClaimRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/RewardMailboxEntry' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_REWARD_MAILBOX_DELETE?unwrap: + post: + summary: TEAMS_REWARD_MAILBOX_DELETE + description: "Delete a reward from the team reward mailbox, even if it is not yet claimed." + operationId: TEAMS_REWARD_MAILBOX_DELETE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamRewardMailboxDeleteRequest' + responses: + '200': + description: A successful response + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_GIFT_LIST?unwrap: + post: + summary: TEAMS_GIFT_LIST + description: "List available team gifts." + operationId: TEAMS_GIFT_LIST + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamGiftListRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/TeamGiftList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_GIFT_CONTRIBUTE?unwrap: + post: + summary: TEAMS_GIFT_CONTRIBUTE + description: "Contribute to an active team gift." + operationId: TEAMS_GIFT_CONTRIBUTE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamGiftContributeRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/TeamGiftContributeAck' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_TEAMS_GIFT_CLAIM?unwrap: + post: + summary: TEAMS_GIFT_CLAIM + description: "Claim the user's reward from an eligible team gift." + operationId: TEAMS_GIFT_CLAIM + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/TeamGiftClaimRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/TeamGiftClaimAck' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_UNLOCKABLES_CREATE?unwrap: + post: + summary: UNLOCKABLES_CREATE + description: "Create a random unlockable to assign to a slot (or overflow) unless there are no slots." + operationId: UNLOCKABLES_CREATE + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/UnlockablesList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_UNLOCKABLES_GET?unwrap: + post: + summary: UNLOCKABLES_GET + description: "Get the unlockables which are currently in progress for the player." + operationId: UNLOCKABLES_GET + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/UnlockablesList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_UNLOCKABLES_UNLOCK_START?unwrap: + post: + summary: UNLOCKABLES_UNLOCK_START + description: "Start the unlock timer for an unlockable in the specified slot." + operationId: UNLOCKABLES_UNLOCK_START + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/UnlockablesRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/UnlockablesList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_UNLOCKABLES_PURCHASE_UNLOCK?unwrap: + post: + summary: UNLOCKABLES_PURCHASE_UNLOCK + description: "Purchase an unlockable with soft currency based on the remainder cost calculated by the offset left to wait." + operationId: UNLOCKABLES_PURCHASE_UNLOCK + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/UnlockablesRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/UnlockablesList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_UNLOCKABLES_PURCHASE_SLOT?unwrap: + post: + summary: UNLOCKABLES_PURCHASE_SLOT + description: "Purchase a new slot to be used to store unlockables." + operationId: UNLOCKABLES_PURCHASE_SLOT + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/UnlockablesList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_UNLOCKABLES_CLAIM?unwrap: + post: + summary: UNLOCKABLES_CLAIM + description: "Claim an unlockable whose start timer has completed or completion was fast tracked with a purchase." + operationId: UNLOCKABLES_CLAIM + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/UnlockablesRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/UnlockablesReward' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_UNLOCKABLES_QUEUE_ADD?unwrap: + post: + summary: UNLOCKABLES_QUEUE_ADD + description: "Add some set of unlockables to the unlock queue." + operationId: UNLOCKABLES_QUEUE_ADD + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/UnlockablesQueueAddRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/UnlockablesList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_UNLOCKABLES_QUEUE_REMOVE?unwrap: + post: + summary: UNLOCKABLES_QUEUE_REMOVE + description: "Remove some set of unlockables from the unlock queue." + operationId: UNLOCKABLES_QUEUE_REMOVE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/UnlockablesQueueRemoveRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/UnlockablesList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_UNLOCKABLES_QUEUE_SET?unwrap: + post: + summary: UNLOCKABLES_QUEUE_SET + description: "Replace the unlock queue with the given set of unlockables." + operationId: UNLOCKABLES_QUEUE_SET + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/UnlockablesQueueSetRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/UnlockablesList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_BASE_RATE_APP?unwrap: + post: + summary: BASE_RATE_APP + description: "Send feedback to the game's developers over email." + operationId: BASE_RATE_APP + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/RateAppRequest' + responses: + '200': + description: A successful response + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_BASE_SET_DEVICE_PREFS?unwrap: + post: + summary: BASE_SET_DEVICE_PREFS + description: "Update or create the mobile push device tokens and preferences for the player." + operationId: BASE_SET_DEVICE_PREFS + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/DevicePrefsRequest' + responses: + '200': + description: A successful response + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_BASE_SYNC?unwrap: + post: + summary: BASE_SYNC + description: "Sync offline state." + operationId: BASE_SYNC + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/SyncRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/SyncResponse' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_LEADERBOARDS_CONFIG_GET?unwrap: + post: + summary: LEADERBOARDS_CONFIG_GET + description: "Get the leaderboards defined for the game." + operationId: LEADERBOARDS_CONFIG_GET + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/LeaderboardConfigList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_EVENT_LEADERBOARD_LIST?unwrap: + post: + summary: EVENT_LEADERBOARD_LIST + description: "List available event leaderboards." + operationId: EVENT_LEADERBOARD_LIST + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/EventLeaderboardList' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/EventLeaderboards' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_EVENT_LEADERBOARD_GET?unwrap: + post: + summary: EVENT_LEADERBOARD_GET + description: "Get a specified event leaderboard defined for the game." + operationId: EVENT_LEADERBOARD_GET + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/EventLeaderboardGet' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/EventLeaderboard' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_EVENT_LEADERBOARD_UPDATE?unwrap: + post: + summary: EVENT_LEADERBOARD_UPDATE + description: "Update an event leaderboard record for a user." + operationId: EVENT_LEADERBOARD_UPDATE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/EventLeaderboardUpdate' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/EventLeaderboard' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_EVENT_LEADERBOARD_CLAIM?unwrap: + post: + summary: EVENT_LEADERBOARD_CLAIM + description: "Claim an event leaderboard reward for a user." + operationId: EVENT_LEADERBOARD_CLAIM + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/EventLeaderboardClaim' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/EventLeaderboard' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_EVENT_LEADERBOARD_ROLL?unwrap: + post: + summary: EVENT_LEADERBOARD_ROLL + description: "Roll a new cohort for the specified event leaderboard." + operationId: EVENT_LEADERBOARD_ROLL + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/EventLeaderboardRoll' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/EventLeaderboard' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_EVENT_LEADERBOARD_DEBUG_FILL?unwrap: + post: + summary: EVENT_LEADERBOARD_DEBUG_FILL + description: "DEBUG. Fill an event leaderboard with random user IDs." + operationId: EVENT_LEADERBOARD_DEBUG_FILL + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/EventLeaderboard' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_EVENT_LEADERBOARD_DEBUG_RANDOM_SCORES?unwrap: + post: + summary: EVENT_LEADERBOARD_DEBUG_RANDOM_SCORES + description: "DEBUG. Assign random scores within a given range to users within the caller's cohort, except for the caller themselves." + operationId: EVENT_LEADERBOARD_DEBUG_RANDOM_SCORES + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/EventLeaderboardDebugRandomScoresRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/EventLeaderboard' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_STATS_GET?unwrap: + post: + summary: STATS_GET + description: "Get all stats." + operationId: STATS_GET + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/StatList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_STATS_UPDATE?unwrap: + post: + summary: STATS_UPDATE + description: "Update stats." + operationId: STATS_UPDATE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/StatUpdateRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/StatList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_PROGRESSIONS_GET?unwrap: + post: + summary: PROGRESSIONS_GET + description: "Get progressions." + operationId: PROGRESSIONS_GET + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/ProgressionGetRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/ProgressionList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_PROGRESSIONS_PURCHASE?unwrap: + post: + summary: PROGRESSIONS_PURCHASE + description: "Purchase a progression for permanent unlock, if supported." + operationId: PROGRESSIONS_PURCHASE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/ProgressionPurchaseRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/ProgressionList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_PROGRESSIONS_UPDATE?unwrap: + post: + summary: PROGRESSIONS_UPDATE + description: "Update a progression to change its count, if supported." + operationId: PROGRESSIONS_UPDATE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/ProgressionUpdateRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/ProgressionList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_INCENTIVES_SENDER_LIST?unwrap: + post: + summary: INCENTIVES_SENDER_LIST + description: "List incentives set up by the user." + operationId: INCENTIVES_SENDER_LIST + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/IncentiveList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_INCENTIVES_SENDER_CREATE?unwrap: + post: + summary: INCENTIVES_SENDER_CREATE + description: "Create a new incentive set up by the user." + operationId: INCENTIVES_SENDER_CREATE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/IncentiveSenderCreateRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/IncentiveList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_INCENTIVES_SENDER_DELETE?unwrap: + post: + summary: INCENTIVES_SENDER_DELETE + description: "Delete an existing incentive set up by the user." + operationId: INCENTIVES_SENDER_DELETE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/IncentiveSenderDeleteRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/IncentiveList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_INCENTIVES_SENDER_CLAIM?unwrap: + post: + summary: INCENTIVES_SENDER_CLAIM + description: "Claim rewards for an existing incentive after it has been used by some recipient(s)." + operationId: INCENTIVES_SENDER_CLAIM + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/IncentiveSenderClaimRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/IncentiveList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_INCENTIVES_RECIPIENT_GET?unwrap: + post: + summary: INCENTIVES_RECIPIENT_GET + description: "Get information about an existing incentive from a recipient's perspective." + operationId: INCENTIVES_RECIPIENT_GET + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/IncentiveRecipientGetRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/IncentiveInfo' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_INCENTIVES_RECIPIENT_CLAIM?unwrap: + post: + summary: INCENTIVES_RECIPIENT_CLAIM + description: "Claim an existing incentive and receive associated rewards." + operationId: INCENTIVES_RECIPIENT_CLAIM + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/IncentiveRecipientClaimRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/IncentiveInfo' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_PROGRESSIONS_RESET?unwrap: + post: + summary: PROGRESSIONS_RESET + description: "Reset progression progress." + operationId: PROGRESSIONS_RESET + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/ProgressionResetRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/ProgressionList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_AUCTIONS_GET_TEMPLATES?unwrap: + post: + summary: AUCTIONS_GET_TEMPLATES + description: "Fetch all available auction templates." + operationId: AUCTIONS_GET_TEMPLATES + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/AuctionTemplates' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_AUCTIONS_LIST?unwrap: + post: + summary: AUCTIONS_LIST + description: "List available auctions." + operationId: AUCTIONS_LIST + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/AuctionListRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/AuctionList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_AUCTIONS_BID?unwrap: + post: + summary: AUCTIONS_BID + description: "Bid on an active auction." + operationId: AUCTIONS_BID + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/AuctionBidRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Auction' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_AUCTIONS_CLAIM_BID?unwrap: + post: + summary: AUCTIONS_CLAIM_BID + description: "Claim a completed auction where the user was the winning bidder." + operationId: AUCTIONS_CLAIM_BID + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/AuctionClaimBidRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/AuctionClaimBid' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_AUCTIONS_CLAIM_CREATED?unwrap: + post: + summary: AUCTIONS_CLAIM_CREATED + description: "Claim a completed auction where the user was the seller." + operationId: AUCTIONS_CLAIM_CREATED + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/AuctionClaimCreatedRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/AuctionClaimCreated' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_AUCTIONS_CANCEL?unwrap: + post: + summary: AUCTIONS_CANCEL + description: "Cancel an in-progress auction." + operationId: AUCTIONS_CANCEL + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/AuctionCancelRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/AuctionCancel' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_AUCTIONS_CREATE?unwrap: + post: + summary: AUCTIONS_CREATE + description: "Create a new auction." + operationId: AUCTIONS_CREATE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/AuctionCreateRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Auction' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_AUCTIONS_LIST_BIDS?unwrap: + post: + summary: AUCTIONS_LIST_BIDS + description: "List auctions the user has bid on." + operationId: AUCTIONS_LIST_BIDS + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/AuctionListBidsRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/AuctionList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_AUCTIONS_LIST_CREATED?unwrap: + post: + summary: AUCTIONS_LIST_CREATED + description: "List auctions the user has created." + operationId: AUCTIONS_LIST_CREATED + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/AuctionListCreatedRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/AuctionList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_STREAKS_LIST?unwrap: + post: + summary: STREAKS_LIST + description: "List all available streaks, including their current state and progress if any." + operationId: STREAKS_LIST + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/StreaksList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_STREAKS_UPDATE?unwrap: + post: + summary: STREAKS_UPDATE + description: "Update one or more streaks with the given progress amounts." + operationId: STREAKS_UPDATE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/StreaksUpdateRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/StreaksList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_STREAKS_CLAIM?unwrap: + post: + summary: STREAKS_CLAIM + description: "Claim the rewards from one or more streaks." + operationId: STREAKS_CLAIM + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/StreaksClaimRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/StreaksList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_STREAKS_RESET?unwrap: + post: + summary: STREAKS_RESET + description: "Reset all progress for one or more streaks." + operationId: STREAKS_RESET + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/StreaksResetRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/StreaksList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_CHALLENGES_GET_TEMPLATES?unwrap: + post: + summary: CHALLENGES_GET_TEMPLATES + description: "List all available templates for challenges." + operationId: CHALLENGES_GET_TEMPLATES + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeTemplates' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_CHALLENGE_GET?unwrap: + post: + summary: CHALLENGE_GET + description: "Get a challenge by id." + operationId: CHALLENGE_GET + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeGetRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Challenge' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_CHALLENGE_LIST?unwrap: + post: + summary: CHALLENGE_LIST + description: "List all the user's challenges." + operationId: CHALLENGE_LIST + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeListRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengesList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_CHALLENGE_CREATE?unwrap: + post: + summary: CHALLENGE_CREATE + description: "Create a new challenge based on a template." + operationId: CHALLENGE_CREATE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeCreateRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Challenge' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_CHALLENGE_JOIN?unwrap: + post: + summary: CHALLENGE_JOIN + description: "Join a challenge." + operationId: CHALLENGE_JOIN + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeJoinRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Challenge' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_CHALLENGE_LEAVE?unwrap: + post: + summary: CHALLENGE_LEAVE + description: "Leave a challenge." + operationId: CHALLENGE_LEAVE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeLeaveRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Challenge' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_CHALLENGE_SUBMIT_SCORE?unwrap: + post: + summary: CHALLENGE_SUBMIT_SCORE + description: "Submit a score to a challenge." + operationId: CHALLENGE_SUBMIT_SCORE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeSubmitScoreRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Challenge' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_CHALLENGE_CLAIM?unwrap: + post: + summary: CHALLENGE_CLAIM + description: "Claim a reward of a challenge." + operationId: CHALLENGE_CLAIM + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeClaimRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Challenge' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_CHALLENGE_SEARCH?unwrap: + post: + summary: CHALLENGE_SEARCH + description: "Search for an open challenge to join." + operationId: CHALLENGE_SEARCH + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeSearchRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengesList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_CHALLENGE_INVITE?unwrap: + post: + summary: CHALLENGE_INVITE + description: "Invite more users to an ongoing challenge." + operationId: CHALLENGE_INVITE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeInviteRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/Challenge' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_REWARD_MAILBOX_LIST?unwrap: + post: + summary: REWARD_MAILBOX_LIST + description: "List rewards available in a reward mailbox." + operationId: REWARD_MAILBOX_LIST + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/RewardMailboxListRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/RewardMailboxList' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_REWARD_MAILBOX_CLAIM?unwrap: + post: + summary: REWARD_MAILBOX_CLAIM + description: "Claim a reward from the reward mailbox, and optionally delete it." + operationId: REWARD_MAILBOX_CLAIM + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/RewardMailboxClaimRequest' + responses: + '200': + description: A successful response + content: + application/json: + schema: + $ref: '#/components/schemas/RewardMailboxEntry' + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_REWARD_MAILBOX_DELETE?unwrap: + post: + summary: REWARD_MAILBOX_DELETE + description: "Delete a reward from the reward mailbox, even if it is not yet claimed." + operationId: REWARD_MAILBOX_DELETE + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/RewardMailboxDeleteRequest' + responses: + '200': + description: A successful response + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_ECONOMY_PLACEMENT_SUCCESS?unwrap: + post: + summary: ECONOMY_PLACEMENT_SUCCESS + description: "Webhook RPC to handle Rewarded Video Ad placement success callbacks." + operationId: ECONOMY_PLACEMENT_SUCCESS + responses: + '200': + description: A successful response + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_ECONOMY_PLACEMENT_FAIL?unwrap: + post: + summary: ECONOMY_PLACEMENT_FAIL + description: "Webhook RPC to handle Rewarded Video Ad placement failure callbacks." + operationId: ECONOMY_PLACEMENT_FAIL + responses: + '200': + description: A successful response + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' + /rpc/RPC_ID_STORAGE_PERSONALIZER_UPLOAD?unwrap: + post: + summary: STORAGE_PERSONALIZER_UPLOAD + description: "RPC to upload Hiro system configurations for the storage personalizer." + operationId: STORAGE_PERSONALIZER_UPLOAD + responses: + '200': + description: A successful response + 'default': + description: An error response + content: + application/json: + schema: + $ref: '#/components/schemas/Error' +components: + securitySchemes: + bearerAuthNakama: + type: http + scheme: bearer + bearerFormat: JWT + schemas: + Error: + type: object + properties: + error: + type: string + message: + type: string + code: + type: integer + format: int32 + ProgressionCost: + type: object + properties: + items: + type: object + additionalProperties: + type: integer + format: int64 + currencies: + type: object + additionalProperties: + type: integer + format: int64 + ProgressionPreconditions: + type: object + properties: + cost: + $ref: '#/components/schemas/ProgressionCost' + progressions: + type: array + items: + type: string + achievements: + type: array + items: + type: string + counts: + type: object + additionalProperties: + type: integer + format: int64 + itemsMin: + type: object + additionalProperties: + type: integer + format: int64 + itemsMax: + type: object + additionalProperties: + type: integer + format: int64 + statsMin: + type: object + additionalProperties: + type: integer + format: int64 + statsMax: + type: object + additionalProperties: + type: integer + format: int64 + energyMin: + type: object + additionalProperties: + type: integer + format: int64 + energyMax: + type: object + additionalProperties: + type: integer + format: int64 + currencyMin: + type: object + additionalProperties: + type: integer + format: int64 + currencyMax: + type: object + additionalProperties: + type: integer + format: int64 + ProgressionPreconditionsBlock: + type: object + properties: + direct: + $ref: '#/components/schemas/ProgressionPreconditions' + operator: + $ref: '#/components/schemas/ProgressionPreconditionsOperator' + nested: + $ref: '#/components/schemas/ProgressionPreconditionsBlock' + Progression: + type: object + properties: + id: + type: string + name: + type: string + description: + type: string + category: + type: string + unlocked: + type: boolean + preconditions: + $ref: '#/components/schemas/ProgressionPreconditionsBlock' + unmet_preconditions: + $ref: '#/components/schemas/ProgressionPreconditionsBlock' + unconditional_updates: + type: boolean + permanent_unlock: + type: boolean + counts: + type: object + additionalProperties: + type: integer + format: int64 + additionalProperties: + type: object + additionalProperties: + type: string + ProgressionDelta: + type: object + properties: + id: + type: string + state: + $ref: '#/components/schemas/ProgressionDeltaState' + preconditions: + $ref: '#/components/schemas/ProgressionPreconditionsBlock' + counts: + type: object + additionalProperties: + type: integer + format: int64 + ProgressionList: + type: object + properties: + ProgressionGetRequest: + type: object + properties: + ProgressionPurchaseRequest: + type: object + properties: + id: + type: string + ProgressionUpdateRequest: + type: object + properties: + id: + type: string + counts: + type: object + additionalProperties: + type: integer + format: int64 + ProgressionResetRequest: + type: object + properties: + ids: + type: array + items: + type: string + StatUpdate: + type: object + properties: + name: + type: string + value: + type: integer + format: int64 + operator: + $ref: '#/components/schemas/StatUpdateOperator' + StatUpdateRequest: + type: object + properties: + public: + type: array + items: + $ref: '#/components/schemas/StatUpdate' + private: + type: array + items: + $ref: '#/components/schemas/StatUpdate' + Stat: + type: object + properties: + name: + type: string + public: + type: boolean + update_time_sec: + type: integer + format: int64 + value: + type: integer + format: int64 + count: + type: integer + format: int64 + total: + type: integer + format: int64 + min: + type: integer + format: int64 + max: + type: integer + format: int64 + first: + type: integer + format: int64 + last: + type: integer + format: int64 + additional_properties: + type: object + additionalProperties: true + StatList: + type: object + properties: + ChannelMessageAck: + type: object + properties: + channel_id: + type: string + message_id: + type: string + code: + type: integer + format: int32 + username: + type: string + create_time: + type: integer + format: int64 + update_time: + type: integer + format: int64 + persistent: + type: boolean + room_name: + type: string + group_id: + type: string + user_id_one: + type: string + user_id_two: + type: string + DevicePrefsRequest: + type: object + properties: + device_id: + type: string + push_token_android: + type: string + push_token_ios: + type: string + RewardInventoryItem: + type: object + properties: + id: + type: string + count: + type: integer + format: int64 + instance_id: + type: string + stringProperties: + type: object + additionalProperties: + type: string + RewardEnergyModifier: + type: object + properties: + id: + type: string + operator: + type: string + value: + type: integer + format: int64 + duration_sec: + type: integer + format: int64 + weight: + type: integer + format: int64 + RewardModifier: + type: object + properties: + id: + type: string + type: + type: string + operator: + type: string + value: + type: integer + format: int64 + duration_sec: + type: integer + format: int64 + ActiveRewardModifier: + type: object + properties: + id: + type: string + type: + type: string + operator: + type: string + value: + type: integer + format: int64 + start_time_sec: + type: integer + format: int64 + end_time_sec: + type: integer + format: int64 + TeamMemberReward: + type: object + properties: + energy_modifiers: + type: array + items: + $ref: '#/components/schemas/RewardEnergyModifier' + reward_modifiers: + type: array + items: + $ref: '#/components/schemas/RewardModifier' + grant_time_sec: + type: integer + format: int64 + items: + type: object + additionalProperties: + type: integer + format: int64 + currencies: + type: object + additionalProperties: + type: integer + format: int64 + TeamReward: + type: object + properties: + reward_modifiers: + type: array + items: + $ref: '#/components/schemas/RewardModifier' + member_reward_modifiers: + type: array + items: + $ref: '#/components/schemas/RewardModifier' + grant_time_sec: + type: integer + format: int64 + to_mailbox_expiry_sec: + type: integer + format: int64 + member_reward: + $ref: '#/components/schemas/TeamMemberReward' + items: + type: object + additionalProperties: + type: integer + format: int64 + currencies: + type: object + additionalProperties: + type: integer + format: int64 + Reward: + type: object + properties: + energy_modifiers: + type: array + items: + $ref: '#/components/schemas/RewardEnergyModifier' + reward_modifiers: + type: array + items: + $ref: '#/components/schemas/RewardModifier' + grant_time_sec: + type: integer + format: int64 + to_mailbox_expiry_sec: + type: integer + format: int64 + team_reward: + $ref: '#/components/schemas/TeamReward' + items: + type: object + additionalProperties: + type: integer + format: int64 + currencies: + type: object + additionalProperties: + type: integer + format: int64 + RewardList: + type: object + properties: + rewards: + type: array + items: + $ref: '#/components/schemas/Reward' + RewardRangeInt32: + type: object + properties: + min: + type: integer + format: int32 + max: + type: integer + format: int32 + multiple: + type: integer + format: int32 + RewardRangeInt64: + type: object + properties: + min: + type: integer + format: int64 + max: + type: integer + format: int64 + multiple: + type: integer + format: int64 + RewardRangeUiNt64: + type: object + properties: + min: + type: integer + format: int64 + max: + type: integer + format: int64 + multiple: + type: integer + format: int64 + RewardRangeDouble: + type: object + properties: + min: + type: number + format: double + max: + type: number + format: double + multiple: + type: number + format: double + AvailableRewardsStringPropertyOption: + type: object + properties: + weight: + type: integer + format: int64 + AvailableRewardsStringProperty: + type: object + properties: + total_weight: + type: integer + format: int64 + AvailableRewardsItem: + type: object + properties: + count: + $ref: '#/components/schemas/RewardRangeInt64' + AvailableRewardsItemSet: + type: object + properties: + count: + $ref: '#/components/schemas/RewardRangeInt64' + max_repeats: + type: integer + format: int64 + set: + type: array + items: + type: string + AvailableRewardsCurrency: + type: object + properties: + count: + $ref: '#/components/schemas/RewardRangeInt64' + AvailableRewardsEnergy: + type: object + properties: + count: + $ref: '#/components/schemas/RewardRangeInt32' + AvailableRewardsEnergyModifier: + type: object + properties: + id: + type: string + operator: + type: string + value: + $ref: '#/components/schemas/RewardRangeInt64' + duration_sec: + $ref: '#/components/schemas/RewardRangeUiNt64' + AvailableRewardsRewardModifier: + type: object + properties: + id: + type: string + type: + type: string + operator: + type: string + value: + $ref: '#/components/schemas/RewardRangeInt64' + duration_sec: + $ref: '#/components/schemas/RewardRangeUiNt64' + AvailableRewardsContents: + type: object + properties: + item_sets: + type: array + items: + $ref: '#/components/schemas/AvailableRewardsItemSet' + energy_modifiers: + type: array + items: + $ref: '#/components/schemas/AvailableRewardsEnergyModifier' + reward_modifiers: + type: array + items: + $ref: '#/components/schemas/AvailableRewardsRewardModifier' + weight: + type: integer + format: int64 + AvailableTeamRewardsContents: + type: object + properties: + item_sets: + type: array + items: + $ref: '#/components/schemas/AvailableRewardsItemSet' + reward_modifiers: + type: array + items: + $ref: '#/components/schemas/AvailableRewardsRewardModifier' + weight: + type: integer + format: int64 + AvailableTeamMemberRewards: + type: object + properties: + guaranteed: + $ref: '#/components/schemas/AvailableRewardsContents' + weighted: + type: array + items: + $ref: '#/components/schemas/AvailableRewardsContents' + max_rolls: + type: integer + format: int64 + total_weight: + type: integer + format: int64 + max_repeat_rolls: + type: integer + format: int64 + AvailableTeamRewards: + type: object + properties: + guaranteed: + $ref: '#/components/schemas/AvailableTeamRewardsContents' + weighted: + type: array + items: + $ref: '#/components/schemas/AvailableTeamRewardsContents' + max_rolls: + type: integer + format: int64 + total_weight: + type: integer + format: int64 + max_repeat_rolls: + type: integer + format: int64 + to_mailbox_expiry_sec: + type: integer + format: int64 + member_reward: + $ref: '#/components/schemas/AvailableTeamMemberRewards' + AvailableRewards: + type: object + properties: + guaranteed: + $ref: '#/components/schemas/AvailableRewardsContents' + weighted: + type: array + items: + $ref: '#/components/schemas/AvailableRewardsContents' + max_rolls: + type: integer + format: int64 + total_weight: + type: integer + format: int64 + max_repeat_rolls: + type: integer + format: int64 + to_mailbox_expiry_sec: + type: integer + format: int64 + team_reward: + $ref: '#/components/schemas/AvailableTeamRewards' + IncentiveClaim: + type: object + properties: + reward: + $ref: '#/components/schemas/Reward' + claim_time_sec: + type: integer + format: int64 + Incentive: + type: object + properties: + id: + type: string + name: + type: string + description: + type: string + code: + type: string + type: + $ref: '#/components/schemas/IncentiveType' + create_time_sec: + type: integer + format: int64 + update_time_sec: + type: integer + format: int64 + expiry_time_sec: + type: integer + format: int64 + recipient_rewards: + $ref: '#/components/schemas/AvailableRewards' + sender_rewards: + $ref: '#/components/schemas/AvailableRewards' + unclaimed_recipients: + type: array + items: + type: string + rewards: + type: array + items: + $ref: '#/components/schemas/Reward' + max_claims: + type: integer + format: int64 + additional_properties: + type: object + additionalProperties: true + IncentiveList: + type: object + properties: + incentives: + type: array + items: + $ref: '#/components/schemas/Incentive' + IncentiveInfo: + type: object + properties: + id: + type: string + name: + type: string + description: + type: string + code: + type: string + type: + $ref: '#/components/schemas/IncentiveType' + sender: + type: string + available_rewards: + $ref: '#/components/schemas/AvailableRewards' + can_claim: + type: boolean + reward: + $ref: '#/components/schemas/Reward' + create_time_sec: + type: integer + format: int64 + update_time_sec: + type: integer + format: int64 + expiry_time_sec: + type: integer + format: int64 + claim_time_sec: + type: integer + format: int64 + IncentiveSenderCreateRequest: + type: object + properties: + id: + type: string + IncentiveSenderDeleteRequest: + type: object + properties: + code: + type: string + IncentiveSenderClaimRequest: + type: object + properties: + code: + type: string + recipient_ids: + type: array + items: + type: string + IncentiveRecipientGetRequest: + type: object + properties: + code: + type: string + IncentiveRecipientClaimRequest: + type: object + properties: + code: + type: string + ChallengeCreateRequest: + type: object + properties: + template_id: + type: string + name: + type: string + description: + type: string + invitees: + type: array + items: + type: string + open: + type: boolean + max_scores: + type: integer + format: int64 + start_delay_sec: + type: integer + format: int64 + duration_sec: + type: integer + format: int64 + max_participants: + type: integer + format: int64 + category: + type: string + metadata: + type: object + additionalProperties: + type: string + ChallengeJoinRequest: + type: object + properties: + challenge_id: + type: string + ChallengeLeaveRequest: + type: object + properties: + challenge_id: + type: string + ChallengeClaimRequest: + type: object + properties: + challenge_id: + type: string + ChallengeSearchRequest: + type: object + properties: + name: + type: string + category: + type: string + limit: + type: integer + format: int64 + ChallengeInviteRequest: + type: object + properties: + challenge_id: + type: string + invitees: + type: array + items: + type: string + ChallengeSubmitScoreRequest: + type: object + properties: + challenge_id: + type: string + score: + type: integer + format: int64 + subscore: + type: integer + format: int64 + metadata: + type: string + conditional_metadata_update: + type: boolean + ChallengeRewardTier: + type: object + properties: + rank_max: + type: integer + format: int64 + rank_min: + type: integer + format: int64 + available_rewards: + $ref: '#/components/schemas/AvailableRewards' + ChallengeScore: + type: object + properties: + id: + type: string + username: + type: string + display_name: + type: string + avatar_url: + type: string + create_time_sec: + type: integer + format: int64 + update_time_sec: + type: integer + format: int64 + rank: + type: integer + format: int64 + score: + type: integer + format: int64 + subscore: + type: integer + format: int64 + num_scores: + type: integer + format: int64 + metadata: + type: string + state: + $ref: '#/components/schemas/ChallengeState' + Challenge: + type: object + properties: + id: + type: string + name: + type: string + description: + type: string + ascending: + type: boolean + operator: + type: string + start_time_sec: + type: integer + format: int64 + claim_time_sec: + type: integer + format: int64 + end_time_sec: + type: integer + format: int64 + reward_tiers: + type: array + items: + $ref: '#/components/schemas/ChallengeRewardTier' + available_rewards: + $ref: '#/components/schemas/AvailableRewards' + size: + type: integer + format: int64 + max_size: + type: integer + format: int64 + max_num_score: + type: integer + format: int64 + scores: + type: array + items: + $ref: '#/components/schemas/ChallengeScore' + is_active: + type: boolean + current_time_sec: + type: integer + format: int64 + can_claim: + type: boolean + state: + $ref: '#/components/schemas/ChallengeState' + reward: + $ref: '#/components/schemas/Reward' + category: + type: string + open: + type: boolean + owner_id: + type: string + additionalProperties: + type: object + additionalProperties: + type: string + metadata: + type: object + additionalProperties: + type: string + ChallengeListRequest: + type: object + properties: + categories: + type: array + items: + type: string + with_scores: + type: boolean + ChallengeGetRequest: + type: object + properties: + challenge_id: + type: string + with_scores: + type: boolean + ChallengesList: + type: object + properties: + challenges: + type: array + items: + $ref: '#/components/schemas/Challenge' + ChallengeMaxMinPlayers: + type: object + properties: + min: + type: integer + format: int64 + max: + type: integer + format: int64 + ChallengeMinMaxDuration: + type: object + properties: + min_sec: + type: integer + format: int64 + max_sec: + type: integer + format: int64 + ChallengeTemplate: + type: object + properties: + reward_tiers: + type: array + items: + $ref: '#/components/schemas/ChallengeRewardTier' + players: + $ref: '#/components/schemas/ChallengeMaxMinPlayers' + duration: + $ref: '#/components/schemas/ChallengeMinMaxDuration' + start_delay_max: + type: integer + format: int64 + max_num_score: + type: integer + format: int64 + ascending: + type: boolean + operator: + type: string + additionalProperties: + type: object + additionalProperties: + type: string + ChallengeTemplates: + type: object + properties: + EventLeaderboardList: + type: object + properties: + with_scores: + type: boolean + categories: + type: array + items: + type: string + EventLeaderboardGet: + type: object + properties: + id: + type: string + EventLeaderboardUpdate: + type: object + properties: + id: + type: string + score: + type: integer + format: int64 + subscore: + type: integer + format: int64 + metadata: + type: string + conditional_metadata_update: + type: boolean + EventLeaderboardClaim: + type: object + properties: + id: + type: string + EventLeaderboardRoll: + type: object + properties: + id: + type: string + metadata: + type: string + EventLeaderboardScore: + type: object + properties: + id: + type: string + username: + type: string + display_name: + type: string + avatar_url: + type: string + create_time_sec: + type: integer + format: int64 + update_time_sec: + type: integer + format: int64 + rank: + type: integer + format: int64 + score: + type: integer + format: int64 + subscore: + type: integer + format: int64 + num_scores: + type: integer + format: int64 + metadata: + type: string + EventLeaderboardRewardTier: + type: object + properties: + name: + type: string + rank_max: + type: integer + format: int32 + rank_min: + type: integer + format: int32 + available_rewards: + $ref: '#/components/schemas/AvailableRewards' + tier_change: + type: integer + format: int32 + EventLeaderboardRewardTiers: + type: object + properties: + reward_tiers: + type: array + items: + $ref: '#/components/schemas/EventLeaderboardRewardTier' + EventLeaderboardChangeZone: + type: object + properties: + promotion: + type: number + format: double + demotion: + type: number + format: double + demote_idle: + type: boolean + EventLeaderboard: + type: object + properties: + id: + type: string + name: + type: string + description: + type: string + category: + type: string + ascending: + type: boolean + operator: + type: string + tier: + type: integer + format: int32 + start_time_sec: + type: integer + format: int64 + end_time_sec: + type: integer + format: int64 + expiry_time_sec: + type: integer + format: int64 + available_rewards: + $ref: '#/components/schemas/AvailableRewards' + claim_time_sec: + type: integer + format: int64 + reward: + $ref: '#/components/schemas/Reward' + count: + type: integer + format: int64 + max_count: + type: integer + format: int64 + max_num_score: + type: integer + format: int64 + scores: + type: array + items: + $ref: '#/components/schemas/EventLeaderboardScore' + is_active: + type: boolean + can_claim: + type: boolean + can_roll: + type: boolean + matchmaker_properties: + type: object + additionalProperties: true + current_time_sec: + type: integer + format: int64 + cohort_id: + type: string + backing_id: + type: string + additionalProperties: + type: object + additionalProperties: + type: string + EventLeaderboards: + type: object + properties: + event_leaderboards: + type: array + items: + $ref: '#/components/schemas/EventLeaderboard' + EventLeaderboardDebugFillRequest: + type: object + properties: + id: + type: string + target_count: + type: integer + format: int32 + EventLeaderboardDebugRandomScoresRequest: + type: object + properties: + id: + type: string + min: + type: integer + format: int64 + max: + type: integer + format: int64 + operator: + type: integer + format: int32 + subscore_min: + type: integer + format: int64 + subscore_max: + type: integer + format: int64 + EconomyDonationContributor: + type: object + properties: + user_id: + type: string + count: + type: integer + format: int64 + claim_count: + type: integer + format: int64 + EconomyDonation: + type: object + properties: + user_id: + type: string + claim_count: + type: integer + format: int64 + count: + type: integer + format: int64 + current_time_sec: + type: integer + format: int64 + description: + type: string + expire_time_sec: + type: integer + format: int64 + id: + type: string + max_count: + type: integer + format: int64 + name: + type: string + recipient_available_rewards: + $ref: '#/components/schemas/AvailableRewards' + user_contribution_max_count: + type: integer + format: int64 + contributors: + type: array + items: + $ref: '#/components/schemas/EconomyDonationContributor' + contributor_available_rewards: + $ref: '#/components/schemas/AvailableRewards' + recipient_rewards: + type: array + items: + $ref: '#/components/schemas/Reward' + additionalProperties: + type: object + additionalProperties: + type: string + EconomyDonationAck: + type: object + properties: + created: + type: boolean + donation: + $ref: '#/components/schemas/EconomyDonation' + EconomyDonationsList: + type: object + properties: + donations: + type: array + items: + $ref: '#/components/schemas/EconomyDonation' + EconomyDonationClaimRequestDetails: + type: object + properties: + donors: + type: object + additionalProperties: + type: integer + format: int64 + EconomyDonationClaimRequest: + type: object + properties: + donation_ids: + type: array + items: + type: string + EconomyDonationClaimRewards: + type: object + properties: + donations: + $ref: '#/components/schemas/EconomyDonationsList' + EconomyDonationGiveRequest: + type: object + properties: + user_id: + type: string + donation_id: + type: string + EconomyDonationGetRequest: + type: object + properties: + ids: + type: array + items: + type: string + EconomyDonationRequest: + type: object + properties: + donation_id: + type: string + EconomyDonationsByUserList: + type: object + properties: + EconomyListStoreItemCost: + type: object + properties: + sku: + type: string + currencies: + type: object + additionalProperties: + type: integer + format: int64 + EconomyListStoreItem: + type: object + properties: + category: + type: string + cost: + $ref: '#/components/schemas/EconomyListStoreItemCost' + description: + type: string + id: + type: string + name: + type: string + available_rewards: + $ref: '#/components/schemas/AvailableRewards' + unavailable: + type: boolean + additionalProperties: + type: object + additionalProperties: + type: string + EconomyListPlacement: + type: object + properties: + id: + type: string + reward: + $ref: '#/components/schemas/Reward' + available_rewards: + $ref: '#/components/schemas/AvailableRewards' + additionalProperties: + type: object + additionalProperties: + type: string + EconomyList: + type: object + properties: + store_items: + type: array + items: + $ref: '#/components/schemas/EconomyListStoreItem' + placements: + type: array + items: + $ref: '#/components/schemas/EconomyListPlacement' + active_reward_modifiers: + type: array + items: + $ref: '#/components/schemas/ActiveRewardModifier' + current_time_sec: + type: integer + format: int64 + InventoryItem: + type: object + properties: + id: + type: string + name: + type: string + description: + type: string + category: + type: string + item_sets: + type: array + items: + type: string + count: + type: integer + format: int64 + max_count: + type: integer + format: int64 + stackable: + type: boolean + consumable: + type: boolean + consume_available_rewards: + $ref: '#/components/schemas/AvailableRewards' + owned_time_sec: + type: integer + format: int64 + update_time_sec: + type: integer + format: int64 + instance_id: + type: string + stringProperties: + type: object + additionalProperties: + type: string + InventoryListRequest: + type: object + properties: + item_category: + type: string + InventoryGrantRequest: + type: object + properties: + items: + type: object + additionalProperties: + type: integer + format: int64 + InventoryUpdateItemProperties: + type: object + properties: + stringProperties: + type: object + additionalProperties: + type: string + InventoryUpdateItemsRequest: + type: object + properties: + Inventory: + type: object + properties: + InventoryConsumeRequest: + type: object + properties: + overconsume: + type: boolean + items: + type: object + additionalProperties: + type: integer + format: int64 + instances: + type: object + additionalProperties: + type: integer + format: int64 + InventoryConsumeRewards: + type: object + properties: + inventory: + $ref: '#/components/schemas/Inventory' + InventoryDeleteItemsRequest: + type: object + properties: + instance_ids: + type: array + items: + type: string + InventoryUpdateAck: + type: object + properties: + inventory: + $ref: '#/components/schemas/Inventory' + InventoryList: + type: object + properties: + AuctionBidAmount: + type: object + properties: + currencies: + type: object + additionalProperties: + type: integer + format: int64 + AuctionFee: + type: object + properties: + percentage: + type: number + format: double + fixed: + $ref: '#/components/schemas/AuctionBidAmount' + AuctionTemplateConditionListingCost: + type: object + properties: + currencies: + type: object + additionalProperties: + type: integer + format: int64 + items: + type: object + additionalProperties: + type: integer + format: int64 + energies: + type: object + additionalProperties: + type: integer + format: int64 + AuctionTemplateConditionBidIncrement: + type: object + properties: + percentage: + type: number + format: double + fixed: + $ref: '#/components/schemas/AuctionBidAmount' + AuctionTemplateCondition: + type: object + properties: + duration_sec: + type: integer + format: int64 + listing_cost: + $ref: '#/components/schemas/AuctionTemplateConditionListingCost' + bid_start: + $ref: '#/components/schemas/AuctionBidAmount' + bid_increment: + $ref: '#/components/schemas/AuctionTemplateConditionBidIncrement' + extension_threshold_sec: + type: integer + format: int64 + extension_sec: + type: integer + format: int64 + extension_max_sec: + type: integer + format: int64 + fee: + $ref: '#/components/schemas/AuctionFee' + AuctionTemplate: + type: object + properties: + items: + type: array + items: + type: string + item_sets: + type: array + items: + type: string + bid_history_count: + type: integer + format: int32 + AuctionTemplates: + type: object + properties: + AuctionReward: + type: object + properties: + items: + type: array + items: + $ref: '#/components/schemas/InventoryItem' + AuctionBid: + type: object + properties: + user_id: + type: string + bid: + $ref: '#/components/schemas/AuctionBidAmount' + create_time_sec: + type: integer + format: int64 + Auction: + type: object + properties: + id: + type: string + user_id: + type: string + reward: + $ref: '#/components/schemas/AuctionReward' + fee: + $ref: '#/components/schemas/AuctionFee' + version: + type: string + bid: + $ref: '#/components/schemas/AuctionBid' + bid_next: + $ref: '#/components/schemas/AuctionBidAmount' + duration_sec: + type: integer + format: int64 + original_duration_sec: + type: integer + format: int64 + extension_added_sec: + type: integer + format: int64 + extension_threshold_sec: + type: integer + format: int64 + extension_sec: + type: integer + format: int64 + extension_max_sec: + type: integer + format: int64 + extension_remaining_sec: + type: integer + format: int64 + create_time_sec: + type: integer + format: int64 + update_time_sec: + type: integer + format: int64 + start_time_sec: + type: integer + format: int64 + end_time_sec: + type: integer + format: int64 + original_end_time_sec: + type: integer + format: int64 + cancel_time_sec: + type: integer + format: int64 + current_time_sec: + type: integer + format: int64 + owner_claim_sec: + type: integer + format: int64 + winner_claim_sec: + type: integer + format: int64 + has_started: + type: boolean + has_ended: + type: boolean + can_bid: + type: boolean + can_claim: + type: boolean + can_cancel: + type: boolean + bid_first: + $ref: '#/components/schemas/AuctionBid' + bid_history: + type: array + items: + $ref: '#/components/schemas/AuctionBid' + AuctionNotificationBid: + type: object + properties: + id: + type: string + version: + type: string + bid: + $ref: '#/components/schemas/AuctionBid' + bid_next: + $ref: '#/components/schemas/AuctionBidAmount' + extension_added_sec: + type: integer + format: int64 + extension_remaining_sec: + type: integer + format: int64 + update_time_sec: + type: integer + format: int64 + end_time_sec: + type: integer + format: int64 + current_time_sec: + type: integer + format: int64 + StreamEnvelope: + type: object + properties: + AuctionClaimBid: + type: object + properties: + auction: + $ref: '#/components/schemas/Auction' + reward: + $ref: '#/components/schemas/AuctionReward' + AuctionClaimCreated: + type: object + properties: + auction: + $ref: '#/components/schemas/Auction' + reward: + $ref: '#/components/schemas/AuctionBidAmount' + fee: + $ref: '#/components/schemas/AuctionBidAmount' + returned_items: + type: array + items: + $ref: '#/components/schemas/InventoryItem' + AuctionCancel: + type: object + properties: + auction: + $ref: '#/components/schemas/Auction' + reward: + $ref: '#/components/schemas/AuctionReward' + AuctionList: + type: object + properties: + auctions: + type: array + items: + $ref: '#/components/schemas/Auction' + cursor: + type: string + AuctionListRequest: + type: object + properties: + query: + type: string + sort: + type: array + items: + type: string + limit: + type: integer + format: int64 + cursor: + type: string + AuctionBidRequest: + type: object + properties: + id: + type: string + version: + type: string + bid: + $ref: '#/components/schemas/AuctionBidAmount' + AuctionClaimBidRequest: + type: object + properties: + id: + type: string + AuctionClaimCreatedRequest: + type: object + properties: + id: + type: string + AuctionCancelRequest: + type: object + properties: + id: + type: string + AuctionCreateRequest: + type: object + properties: + template_id: + type: string + condition_id: + type: string + instance_ids: + type: array + items: + type: string + start_time_sec: + type: integer + format: int64 + AuctionListBidsRequest: + type: object + properties: + limit: + type: integer + format: int64 + cursor: + type: string + AuctionListCreatedRequest: + type: object + properties: + limit: + type: integer + format: int64 + cursor: + type: string + AuctionsFollowRequest: + type: object + properties: + ids: + type: array + items: + type: string + EconomyListRequest: + type: object + properties: + store_type: + $ref: '#/components/schemas/EconomyStoreType' + EconomyGrantRequest: + type: object + properties: + reward_modifiers: + type: array + items: + $ref: '#/components/schemas/RewardModifier' + currencies: + type: object + additionalProperties: + type: integer + format: int64 + items: + type: object + additionalProperties: + type: integer + format: int64 + EconomyPurchaseIntentRequest: + type: object + properties: + item_id: + type: string + store_type: + $ref: '#/components/schemas/EconomyStoreType' + sku: + type: string + amount: + type: number + format: double + currency: + type: string + EconomyPurchaseRequest: + type: object + properties: + item_id: + type: string + store_type: + $ref: '#/components/schemas/EconomyStoreType' + receipt: + type: string + EconomyPurchaseRestoreRequest: + type: object + properties: + store_type: + $ref: '#/components/schemas/EconomyStoreType' + receipts: + type: array + items: + type: string + EconomyPlacementStatusRequest: + type: object + properties: + reward_id: + type: string + placement_id: + type: string + count: + type: integer + format: int32 + EconomyPlacementStartRequest: + type: object + properties: + placement_id: + type: string + metadata: + type: object + additionalProperties: + type: string + EconomyPlacementStatus: + type: object + properties: + reward_id: + type: string + placement_id: + type: string + create_time_sec: + type: integer + format: int64 + complete_time_sec: + type: integer + format: int64 + success: + type: boolean + reward: + $ref: '#/components/schemas/Reward' + metadata: + type: object + additionalProperties: + type: string + EconomyUpdateAck: + type: object + properties: + inventory: + $ref: '#/components/schemas/Inventory' + reward: + $ref: '#/components/schemas/Reward' + active_reward_modifiers: + type: array + items: + $ref: '#/components/schemas/ActiveRewardModifier' + current_time_sec: + type: integer + format: int64 + wallet: + type: object + additionalProperties: + type: integer + format: int64 + EconomyPurchaseAck: + type: object + properties: + inventory: + $ref: '#/components/schemas/Inventory' + reward: + $ref: '#/components/schemas/Reward' + is_sandbox_purchase: + type: boolean + wallet: + type: object + additionalProperties: + type: integer + format: int64 + EnergyModifier: + type: object + properties: + operator: + type: string + value: + type: integer + format: int32 + start_time_sec: + type: integer + format: int64 + end_time_sec: + type: integer + format: int64 + Energy: + type: object + properties: + id: + type: string + current: + type: integer + format: int32 + max: + type: integer + format: int32 + refill: + type: integer + format: int32 + refill_sec: + type: integer + format: int64 + next_refill_time_sec: + type: integer + format: int64 + max_refill_time_sec: + type: integer + format: int64 + start_refill_time_sec: + type: integer + format: int64 + modifiers: + type: array + items: + $ref: '#/components/schemas/EnergyModifier' + available_rewards: + $ref: '#/components/schemas/AvailableRewards' + current_time_sec: + type: integer + format: int64 + additionalProperties: + type: object + additionalProperties: + type: string + EnergyList: + type: object + properties: + EnergySpendRequest: + type: object + properties: + EnergySpendReward: + type: object + properties: + energies: + $ref: '#/components/schemas/EnergyList' + reward: + $ref: '#/components/schemas/Reward' + EnergyGrantRequest: + type: object + properties: + LeaderboardConfig: + type: object + properties: + id: + type: string + sort_order: + type: string + operator: + type: string + reset_schedule: + type: string + authoritative: + type: boolean + regions: + type: array + items: + type: string + LeaderboardConfigList: + type: object + properties: + leaderboard_configs: + type: array + items: + $ref: '#/components/schemas/LeaderboardConfig' + Tutorial: + type: object + properties: + id: + type: string + current: + type: integer + format: int32 + max: + type: integer + format: int32 + state: + $ref: '#/components/schemas/TutorialState' + update_time_sec: + type: integer + format: int64 + complete_time_sec: + type: integer + format: int64 + additionalProperties: + type: object + additionalProperties: + type: string + TutorialList: + type: object + properties: + TutorialAcceptRequest: + type: object + properties: + id: + type: string + TutorialDeclineRequest: + type: object + properties: + id: + type: string + TutorialAbandonRequest: + type: object + properties: + id: + type: string + TutorialUpdateRequest: + type: object + properties: + id: + type: string + step: + type: integer + format: int32 + TutorialResetRequest: + type: object + properties: + ids: + type: array + items: + type: string + RateAppRequest: + type: object + properties: + score: + type: integer + format: int32 + message: + type: string + TeamMember: + type: object + properties: + id: + type: string + activity: + type: integer + format: int64 + Team: + type: object + properties: + id: + type: string + creator_id: + type: string + name: + type: string + description: + type: string + lang_tag: + type: string + metadata: + type: string + avatar_url: + type: string + open: + type: boolean + edge_count: + type: integer + format: int32 + max_count: + type: integer + format: int32 + create_time_sec: + type: integer + format: int64 + update_time_sec: + type: integer + format: int64 + activity: + type: integer + format: int64 + members: + type: array + items: + $ref: '#/components/schemas/TeamMember' + TeamCreateRequest: + type: object + properties: + name: + type: string + desc: + type: string + open: + type: boolean + avatar_url: + type: string + lang_tag: + type: string + setup_metadata: + type: string + TeamUpdateRequest: + type: object + properties: + id: + type: string + name: + type: string + desc: + type: string + open: + type: boolean + avatar_url: + type: string + lang_tag: + type: string + metadata: + type: object + additionalProperties: true + TeamListRequest: + type: object + properties: + cursor: + type: string + location: + type: string + limit: + type: integer + format: int32 + TeamList: + type: object + properties: + teams: + type: array + items: + $ref: '#/components/schemas/Team' + cursor: + type: string + TeamSearchRequest: + type: object + properties: + input: + type: string + limit: + type: integer + format: int32 + lang_tag: + type: string + min_activity: + type: integer + format: int64 + TeamGetRequest: + type: object + properties: + team_id: + type: string + UserTeamsListRequest: + type: object + properties: + user_ids: + type: array + items: + type: string + User: + type: object + properties: + id: + type: string + username: + type: string + display_name: + type: string + avatar_url: + type: string + lang_tag: + type: string + location: + type: string + timezone: + type: string + metadata: + type: string + facebook_id: + type: string + google_id: + type: string + gamecenter_id: + type: string + steam_id: + type: string + online: + type: boolean + edge_count: + type: integer + format: int32 + create_time_sec: + type: integer + format: int64 + update_time: + type: integer + format: int64 + facebook_instant_game_id: + type: string + apple_id: + type: string + UserTeams: + type: object + properties: + user: + $ref: '#/components/schemas/User' + teams: + type: array + items: + $ref: '#/components/schemas/Team' + UserTeamsList: + type: object + properties: + TeamWriteChatMessageRequest: + type: object + properties: + id: + type: string + content: + type: string + UnlockableCost: + type: object + properties: + items: + type: object + additionalProperties: + type: integer + format: int64 + currencies: + type: object + additionalProperties: + type: integer + format: int64 + Unlockable: + type: object + properties: + id: + type: string + instance_id: + type: string + category: + type: string + start_cost: + $ref: '#/components/schemas/UnlockableCost' + cost: + $ref: '#/components/schemas/UnlockableCost' + description: + type: string + name: + type: string + reward: + $ref: '#/components/schemas/Reward' + available_rewards: + $ref: '#/components/schemas/AvailableRewards' + wait_time_sec: + type: integer + format: int32 + create_time_sec: + type: integer + format: int64 + unlock_start_time_sec: + type: integer + format: int64 + unlock_complete_time_sec: + type: integer + format: int64 + can_claim: + type: boolean + advance_time_sec: + type: integer + format: int64 + additionalProperties: + type: object + additionalProperties: + type: string + UnlockableSlotCost: + type: object + properties: + items: + type: object + additionalProperties: + type: integer + format: int64 + currencies: + type: object + additionalProperties: + type: integer + format: int64 + UnlockablesList: + type: object + properties: + unlockables: + type: array + items: + $ref: '#/components/schemas/Unlockable' + overflow: + $ref: '#/components/schemas/Unlockable' + slots: + type: integer + format: int32 + active_slots: + type: integer + format: int32 + max_active_slots: + type: integer + format: int32 + slot_cost: + $ref: '#/components/schemas/UnlockableSlotCost' + instance_id: + type: string + queued_unlocks: + type: array + items: + type: string + max_queued_unlocks: + type: integer + format: int32 + UnlockablesReward: + type: object + properties: + unlockables: + $ref: '#/components/schemas/UnlockablesList' + reward: + $ref: '#/components/schemas/Reward' + available_rewards: + $ref: '#/components/schemas/AvailableRewards' + UnlockablesRequest: + type: object + properties: + instance_id: + type: string + UnlockablesQueueAddRequest: + type: object + properties: + instance_ids: + type: array + items: + type: string + UnlockablesQueueRemoveRequest: + type: object + properties: + instance_ids: + type: array + items: + type: string + UnlockablesQueueSetRequest: + type: object + properties: + instance_ids: + type: array + items: + type: string + SubAchievement: + type: object + properties: + category: + type: string + claim_time_sec: + type: integer + format: int64 + count: + type: integer + format: int64 + current_time_sec: + type: integer + format: int64 + description: + type: string + expire_time_sec: + type: integer + format: int64 + id: + type: string + max_count: + type: integer + format: int64 + name: + type: string + precondition_ids: + type: array + items: + type: string + reset_time_sec: + type: integer + format: int64 + reward: + $ref: '#/components/schemas/Reward' + available_rewards: + $ref: '#/components/schemas/AvailableRewards' + auto_claim: + type: boolean + auto_reset: + type: boolean + additionalProperties: + type: object + additionalProperties: + type: string + Achievement: + type: object + properties: + category: + type: string + claim_time_sec: + type: integer + format: int64 + total_claim_time_sec: + type: integer + format: int64 + count: + type: integer + format: int64 + current_time_sec: + type: integer + format: int64 + description: + type: string + expire_time_sec: + type: integer + format: int64 + id: + type: string + max_count: + type: integer + format: int64 + name: + type: string + precondition_ids: + type: array + items: + type: string + reset_time_sec: + type: integer + format: int64 + available_rewards: + $ref: '#/components/schemas/AvailableRewards' + reward: + $ref: '#/components/schemas/Reward' + available_total_reward: + $ref: '#/components/schemas/AvailableRewards' + total_reward: + $ref: '#/components/schemas/Reward' + auto_claim: + type: boolean + auto_claim_total: + type: boolean + auto_reset: + type: boolean + start_time_sec: + type: integer + format: int64 + end_time_sec: + type: integer + format: int64 + additionalProperties: + type: object + additionalProperties: + type: string + AchievementList: + type: object + properties: + AchievementsClaimRequest: + type: object + properties: + ids: + type: array + items: + type: string + claim_total_reward: + type: boolean + AchievementsGetRequest: + type: object + properties: + AchievementsUpdateAck: + type: object + properties: + AchievementsUpdateRequest: + type: object + properties: + ids: + type: array + items: + type: string + amount: + type: integer + format: int64 + achievements: + type: object + additionalProperties: + type: integer + format: int64 + StreakAvailableReward: + type: object + properties: + count_min: + type: integer + format: int64 + count_max: + type: integer + format: int64 + reward: + $ref: '#/components/schemas/AvailableRewards' + repeatable: + type: boolean + StreakReward: + type: object + properties: + count_min: + type: integer + format: int64 + count_max: + type: integer + format: int64 + reward: + $ref: '#/components/schemas/Reward' + claim_time_sec: + type: integer + format: int64 + repeatable: + type: boolean + Streak: + type: object + properties: + id: + type: string + name: + type: string + description: + type: string + count: + type: integer + format: int64 + max_count: + type: integer + format: int64 + count_current_reset: + type: integer + format: int64 + max_count_current_reset: + type: integer + format: int64 + idle_count_decay_reset: + type: integer + format: int64 + max_idle_count_decay: + type: integer + format: int64 + prev_reset_time_sec: + type: integer + format: int64 + reset_time_sec: + type: integer + format: int64 + create_time_sec: + type: integer + format: int64 + update_time_sec: + type: integer + format: int64 + claim_time_sec: + type: integer + format: int64 + start_time_sec: + type: integer + format: int64 + end_time_sec: + type: integer + format: int64 + rewards: + type: array + items: + $ref: '#/components/schemas/StreakAvailableReward' + available_rewards: + type: array + items: + $ref: '#/components/schemas/StreakAvailableReward' + claimed_rewards: + type: array + items: + $ref: '#/components/schemas/StreakReward' + can_claim: + type: boolean + can_update: + type: boolean + can_reset: + type: boolean + claim_count: + type: integer + format: int64 + StreaksList: + type: object + properties: + StreaksUpdateRequest: + type: object + properties: + updates: + type: object + additionalProperties: + type: integer + format: int64 + StreaksClaimRequest: + type: object + properties: + ids: + type: array + items: + type: string + StreaksResetRequest: + type: object + properties: + ids: + type: array + items: + type: string + RewardMailboxEntry: + type: object + properties: + id: + type: string + reward: + $ref: '#/components/schemas/Reward' + create_time_sec: + type: integer + format: int64 + update_time_sec: + type: integer + format: int64 + expiry_time_sec: + type: integer + format: int64 + claim_time_sec: + type: integer + format: int64 + can_claim: + type: boolean + RewardMailboxList: + type: object + properties: + entries: + type: array + items: + $ref: '#/components/schemas/RewardMailboxEntry' + cursor: + type: string + RewardMailboxListRequest: + type: object + properties: + limit: + type: integer + format: int64 + cursor: + type: string + RewardMailboxClaimRequest: + type: object + properties: + id: + type: string + delete: + type: boolean + RewardMailboxDeleteRequest: + type: object + properties: + ids: + type: array + items: + type: string + TeamStoreListRequest: + type: object + properties: + id: + type: string + TeamStoreItemCost: + type: object + properties: + currencies: + type: object + additionalProperties: + type: integer + format: int64 + TeamStoreItem: + type: object + properties: + category: + type: string + cost: + $ref: '#/components/schemas/TeamStoreItemCost' + description: + type: string + id: + type: string + name: + type: string + available_rewards: + $ref: '#/components/schemas/AvailableRewards' + unavailable: + type: boolean + additionalProperties: + type: object + additionalProperties: + type: string + TeamStore: + type: object + properties: + store_items: + type: array + items: + $ref: '#/components/schemas/TeamStoreItem' + active_reward_modifiers: + type: array + items: + $ref: '#/components/schemas/ActiveRewardModifier' + current_time_sec: + type: integer + format: int64 + TeamStorePurchaseRequest: + type: object + properties: + id: + type: string + item_id: + type: string + TeamStorePurchaseAck: + type: object + properties: + inventory: + $ref: '#/components/schemas/Inventory' + reward: + $ref: '#/components/schemas/Reward' + wallet: + type: object + additionalProperties: + type: integer + format: int64 + TeamWalletGetRequest: + type: object + properties: + id: + type: string + TeamWalletGrantRequest: + type: object + properties: + id: + type: string + currencies: + type: object + additionalProperties: + type: integer + format: int64 + TeamWallet: + type: object + properties: + id: + type: string + update_time_sec: + type: integer + format: int64 + currencies: + type: object + additionalProperties: + type: integer + format: int64 + TeamStatListRequest: + type: object + properties: + id: + type: string + TeamStatUpdateRequest: + type: object + properties: + id: + type: string + public: + type: array + items: + $ref: '#/components/schemas/StatUpdate' + private: + type: array + items: + $ref: '#/components/schemas/StatUpdate' + TeamInventoryListRequest: + type: object + properties: + id: + type: string + item_category: + type: string + TeamInventoryConsumeRequest: + type: object + properties: + id: + type: string + overconsume: + type: boolean + items: + type: object + additionalProperties: + type: integer + format: int64 + instances: + type: object + additionalProperties: + type: integer + format: int64 + TeamInventoryGrantRequest: + type: object + properties: + id: + type: string + items: + type: object + additionalProperties: + type: integer + format: int64 + TeamInventoryUpdateItemsRequest: + type: object + properties: + id: + type: string + TeamAchievementsClaimRequest: + type: object + properties: + id: + type: string + achievement_ids: + type: array + items: + type: string + claim_total_reward: + type: boolean + TeamAchievementsGetRequest: + type: object + properties: + id: + type: string + TeamAchievementsUpdateRequest: + type: object + properties: + id: + type: string + achievement_ids: + type: array + items: + type: string + amount: + type: integer + format: int64 + achievements: + type: object + additionalProperties: + type: integer + format: int64 + TeamEventLeaderboardList: + type: object + properties: + id: + type: string + with_scores: + type: boolean + categories: + type: array + items: + type: string + TeamEventLeaderboardGet: + type: object + properties: + id: + type: string + event_leaderboard_id: + type: string + TeamEventLeaderboardUpdate: + type: object + properties: + id: + type: string + event_leaderboard_id: + type: string + score: + type: integer + format: int64 + subscore: + type: integer + format: int64 + metadata: + type: string + conditional_metadata_update: + type: boolean + TeamEventLeaderboardClaim: + type: object + properties: + id: + type: string + event_leaderboard_id: + type: string + TeamEventLeaderboardRoll: + type: object + properties: + id: + type: string + event_leaderboard_id: + type: string + metadata: + type: string + TeamEventLeaderboardScore: + type: object + properties: + id: + type: string + name: + type: string + avatar_url: + type: string + create_time_sec: + type: integer + format: int64 + update_time_sec: + type: integer + format: int64 + rank: + type: integer + format: int64 + score: + type: integer + format: int64 + subscore: + type: integer + format: int64 + num_scores: + type: integer + format: int64 + metadata: + type: string + TeamEventLeaderboardContribution: + type: object + properties: + id: + type: string + username: + type: string + display_name: + type: string + avatar_url: + type: string + create_time_sec: + type: integer + format: int64 + update_time_sec: + type: integer + format: int64 + score: + type: integer + format: int64 + subscore: + type: integer + format: int64 + num_scores: + type: integer + format: int64 + metadata: + type: string + TeamEventLeaderboard: + type: object + properties: + id: + type: string + name: + type: string + description: + type: string + category: + type: string + ascending: + type: boolean + operator: + type: string + tier: + type: integer + format: int32 + start_time_sec: + type: integer + format: int64 + end_time_sec: + type: integer + format: int64 + expiry_time_sec: + type: integer + format: int64 + available_rewards: + $ref: '#/components/schemas/AvailableRewards' + claim_time_sec: + type: integer + format: int64 + reward: + $ref: '#/components/schemas/Reward' + count: + type: integer + format: int64 + max_count: + type: integer + format: int64 + max_num_score: + type: integer + format: int64 + scores: + type: array + items: + $ref: '#/components/schemas/TeamEventLeaderboardScore' + is_active: + type: boolean + can_claim: + type: boolean + can_roll: + type: boolean + matchmaker_properties: + type: object + additionalProperties: true + current_time_sec: + type: integer + format: int64 + cohort_id: + type: string + backing_id: + type: string + contributions: + type: array + items: + $ref: '#/components/schemas/TeamEventLeaderboardContribution' + additionalProperties: + type: object + additionalProperties: + type: string + TeamEventLeaderboards: + type: object + properties: + event_leaderboards: + type: array + items: + $ref: '#/components/schemas/TeamEventLeaderboard' + TeamEventLeaderboardDebugFillRequest: + type: object + properties: + id: + type: string + event_leaderboard_id: + type: string + target_count: + type: integer + format: int32 + TeamEventLeaderboardDebugRandomScoresRequest: + type: object + properties: + id: + type: string + event_leaderboard_id: + type: string + min: + type: integer + format: int64 + max: + type: integer + format: int64 + operator: + type: integer + format: int32 + subscore_min: + type: integer + format: int64 + subscore_max: + type: integer + format: int64 + TeamRewardMailboxListRequest: + type: object + properties: + id: + type: string + limit: + type: integer + format: int64 + cursor: + type: string + TeamRewardMailboxClaimRequest: + type: object + properties: + id: + type: string + entry_id: + type: string + delete: + type: boolean + TeamRewardMailboxDeleteRequest: + type: object + properties: + id: + type: string + entry_ids: + type: array + items: + type: string + TeamGiftReward: + type: object + properties: + min_count: + type: integer + format: int64 + contributor_reward: + $ref: '#/components/schemas/AvailableRewards' + noncontributor_reward: + $ref: '#/components/schemas/AvailableRewards' + TeamGiftContributor: + type: object + properties: + user_id: + type: string + username: + type: string + avatar_url: + type: string + display_name: + type: string + create_time_sec: + type: integer + format: int64 + update_time_sec: + type: integer + format: int64 + count: + type: integer + format: int64 + TeamGift: + type: object + properties: + id: + type: string + name: + type: string + description: + type: string + category: + type: string + start_time_sec: + type: integer + format: int64 + contribution_end_time_sec: + type: integer + format: int64 + end_time_sec: + type: integer + format: int64 + count: + type: integer + format: int64 + max_count: + type: integer + format: int64 + max_contributor_count: + type: integer + format: int64 + contribution_cost: + $ref: '#/components/schemas/AvailableRewards' + contribution_reward: + $ref: '#/components/schemas/AvailableRewards' + rewards: + type: array + items: + $ref: '#/components/schemas/TeamGiftReward' + additional_properties: + type: object + additionalProperties: true + contributors: + type: array + items: + $ref: '#/components/schemas/TeamGiftContributor' + can_contribute: + type: boolean + contributor_remaining_count: + type: integer + format: int64 + can_claim: + type: boolean + available_rewards: + type: array + items: + $ref: '#/components/schemas/TeamGiftReward' + TeamGiftList: + type: object + properties: + gifts: + type: array + items: + $ref: '#/components/schemas/TeamGift' + TeamGiftListRequest: + type: object + properties: + id: + type: string + TeamGiftContributeRequest: + type: object + properties: + id: + type: string + gift_id: + type: string + count: + type: integer + format: int64 + TeamGiftContributeAck: + type: object + properties: + gift: + $ref: '#/components/schemas/TeamGift' + count: + type: integer + format: int64 + reward: + $ref: '#/components/schemas/Reward' + TeamGiftClaimRequest: + type: object + properties: + id: + type: string + gift_id: + type: string + end_time_sec: + type: integer + format: int64 + TeamGiftClaimAck: + type: object + properties: + gift: + $ref: '#/components/schemas/TeamGift' + rewards: + type: array + items: + $ref: '#/components/schemas/Reward' + SyncInventoryItem: + type: object + properties: + item_id: + type: string + delta: + type: integer + format: int64 + stringProperties: + type: object + additionalProperties: + type: string + SyncInventory: + type: object + properties: + SyncEconomy: + type: object + properties: + modifiers: + type: array + items: + $ref: '#/components/schemas/ActiveRewardModifier' + currencies: + type: object + additionalProperties: + type: integer + format: int64 + SyncAchievementsUpdate: + type: object + properties: + count: + type: integer + format: int64 + create_time_sec: + type: integer + format: int64 + update_time_sec: + type: integer + format: int64 + claim_time_sec: + type: integer + format: int64 + total_claim_time_sec: + type: integer + format: int64 + SyncAchievements: + type: object + properties: + SyncEnergyState: + type: object + properties: + count: + type: integer + format: int64 + refill_start_time_sec: + type: integer + format: int64 + SyncEnergy: + type: object + properties: + modifiers: + type: array + items: + $ref: '#/components/schemas/EnergyModifier' + SyncEventLeaderboardUpdate: + type: object + properties: + score: + type: integer + format: int64 + subscore: + type: integer + format: int64 + update_time_sec: + type: integer + format: int64 + metadata: + type: string + SyncEventLeaderboards: + type: object + properties: + SyncProgressionUpdate: + type: object + properties: + create_time_sec: + type: integer + format: int64 + update_time_sec: + type: integer + format: int64 + cost: + $ref: '#/components/schemas/ProgressionCost' + counts: + type: object + additionalProperties: + type: integer + format: int64 + SyncProgressions: + type: object + properties: + SyncTutorials: + type: object + properties: + accepts: + type: array + items: + type: string + declines: + type: array + items: + type: string + abandons: + type: array + items: + type: string + updates: + type: object + additionalProperties: + type: integer + format: int64 + SyncUnlockableUpdate: + type: object + properties: + unlockable_id: + type: string + create_time_sec: + type: integer + format: int64 + start_time_sec: + type: integer + format: int64 + unlock_time_sec: + type: integer + format: int64 + SyncUnlockables: + type: object + properties: + removes: + type: array + items: + type: string + SyncStreakUpdate: + type: object + properties: + count: + type: integer + format: int64 + count_current_reset: + type: integer + format: int64 + claim_count: + type: integer + format: int64 + create_time_sec: + type: integer + format: int64 + update_time_sec: + type: integer + format: int64 + claim_time_sec: + type: integer + format: int64 + claimed_rewards: + type: array + items: + $ref: '#/components/schemas/StreakReward' + SyncStreaks: + type: object + properties: + resets: + type: array + items: + type: string + SyncRequest: + type: object + properties: + inventory: + $ref: '#/components/schemas/SyncInventory' + economy: + $ref: '#/components/schemas/SyncEconomy' + achievements: + $ref: '#/components/schemas/SyncAchievements' + energy: + $ref: '#/components/schemas/SyncEnergy' + event_leaderboards: + $ref: '#/components/schemas/SyncEventLeaderboards' + progressions: + $ref: '#/components/schemas/SyncProgressions' + stats: + $ref: '#/components/schemas/StatUpdateRequest' + tutorials: + $ref: '#/components/schemas/SyncTutorials' + unlockables: + $ref: '#/components/schemas/SyncUnlockables' + streaks: + $ref: '#/components/schemas/SyncStreaks' + SyncResponse: + type: object + properties: + inventory: + $ref: '#/components/schemas/Inventory' + achievements: + $ref: '#/components/schemas/AchievementList' + energy: + $ref: '#/components/schemas/EnergyList' + event_leaderboards: + type: array + items: + $ref: '#/components/schemas/EventLeaderboard' + progressions: + $ref: '#/components/schemas/ProgressionList' + stats: + $ref: '#/components/schemas/StatList' + tutorials: + $ref: '#/components/schemas/TutorialList' + unlockables: + $ref: '#/components/schemas/UnlockablesList' + active_reward_modifiers: + type: array + items: + $ref: '#/components/schemas/ActiveRewardModifier' + current_time_sec: + type: integer + format: int64 + streaks: + $ref: '#/components/schemas/StreaksList' + wallet: + type: object + additionalProperties: + type: integer + format: int64 + RpcId: + type: string + enum: + - RPC_ID_UNSPECIFIED + - RPC_ID_INVENTORY_LIST + - RPC_ID_INVENTORY_LIST_INVENTORY + - RPC_ID_INVENTORY_CONSUME + - RPC_ID_INVENTORY_GRANT + - RPC_ID_INVENTORY_UPDATE + - RPC_ID_INVENTORY_DELETE + - RPC_ID_ECONOMY_DONATION_CLAIM + - RPC_ID_ECONOMY_DONATION_GIVE + - RPC_ID_ECONOMY_DONATION_GET + - RPC_ID_ECONOMY_DONATION_REQUEST + - RPC_ID_ECONOMY_STORE_GET + - RPC_ID_ECONOMY_GRANT + - RPC_ID_ECONOMY_PURCHASE_INTENT + - RPC_ID_ECONOMY_PURCHASE_ITEM + - RPC_ID_ECONOMY_PURCHASE_RESTORE + - RPC_ID_ECONOMY_PLACEMENT_STATUS + - RPC_ID_ECONOMY_PLACEMENT_START + - RPC_ID_ACHIEVEMENTS_CLAIM + - RPC_ID_ACHIEVEMENTS_GET + - RPC_ID_ACHIEVEMENTS_UPDATE + - RPC_ID_ENERGY_GET + - RPC_ID_ENERGY_SPEND + - RPC_ID_ENERGY_GRANT + - RPC_ID_TUTORIALS_GET + - RPC_ID_TUTORIALS_ACCEPT + - RPC_ID_TUTORIALS_DECLINE + - RPC_ID_TUTORIALS_ABANDON + - RPC_ID_TUTORIALS_UPDATE + - RPC_ID_TUTORIALS_RESET + - RPC_ID_TEAMS_CREATE + - RPC_ID_TEAMS_UPDATE + - RPC_ID_TEAMS_LIST + - RPC_ID_TEAMS_SEARCH + - RPC_ID_TEAMS_GET + - RPC_ID_TEAMS_USER_TEAMS_LIST + - RPC_ID_TEAMS_WRITE_CHAT_MESSAGE + - RPC_ID_TEAMS_STORE_GET + - RPC_ID_TEAMS_STORE_PURCHASE + - RPC_ID_TEAMS_WALLET_GET + - RPC_ID_TEAMS_WALLET_GRANT + - RPC_ID_TEAMS_STATS_GET + - RPC_ID_TEAMS_STATS_UPDATE + - RPC_ID_TEAMS_INVENTORY_LIST + - RPC_ID_TEAMS_INVENTORY_LIST_INVENTORY + - RPC_ID_TEAMS_INVENTORY_CONSUME + - RPC_ID_TEAMS_INVENTORY_GRANT + - RPC_ID_TEAMS_INVENTORY_UPDATE + - RPC_ID_TEAMS_ACHIEVEMENTS_CLAIM + - RPC_ID_TEAMS_ACHIEVEMENTS_GET + - RPC_ID_TEAMS_ACHIEVEMENTS_UPDATE + - RPC_ID_TEAMS_EVENT_LEADERBOARD_LIST + - RPC_ID_TEAMS_EVENT_LEADERBOARD_GET + - RPC_ID_TEAMS_EVENT_LEADERBOARD_UPDATE + - RPC_ID_TEAMS_EVENT_LEADERBOARD_CLAIM + - RPC_ID_TEAMS_EVENT_LEADERBOARD_ROLL + - RPC_ID_TEAMS_EVENT_LEADERBOARD_DEBUG_FILL + - RPC_ID_TEAMS_EVENT_LEADERBOARD_DEBUG_RANDOM_SCORES + - RPC_ID_TEAMS_REWARD_MAILBOX_LIST + - RPC_ID_TEAMS_REWARD_MAILBOX_CLAIM + - RPC_ID_TEAMS_REWARD_MAILBOX_DELETE + - RPC_ID_TEAMS_GIFT_LIST + - RPC_ID_TEAMS_GIFT_CONTRIBUTE + - RPC_ID_TEAMS_GIFT_CLAIM + - RPC_ID_UNLOCKABLES_CREATE + - RPC_ID_UNLOCKABLES_GET + - RPC_ID_UNLOCKABLES_UNLOCK_START + - RPC_ID_UNLOCKABLES_PURCHASE_UNLOCK + - RPC_ID_UNLOCKABLES_PURCHASE_SLOT + - RPC_ID_UNLOCKABLES_CLAIM + - RPC_ID_UNLOCKABLES_QUEUE_ADD + - RPC_ID_UNLOCKABLES_QUEUE_REMOVE + - RPC_ID_UNLOCKABLES_QUEUE_SET + - RPC_ID_BASE_RATE_APP + - RPC_ID_BASE_SET_DEVICE_PREFS + - RPC_ID_BASE_SYNC + - RPC_ID_LEADERBOARDS_CONFIG_GET + - RPC_ID_EVENT_LEADERBOARD_LIST + - RPC_ID_EVENT_LEADERBOARD_GET + - RPC_ID_EVENT_LEADERBOARD_UPDATE + - RPC_ID_EVENT_LEADERBOARD_CLAIM + - RPC_ID_EVENT_LEADERBOARD_ROLL + - RPC_ID_EVENT_LEADERBOARD_DEBUG_FILL + - RPC_ID_EVENT_LEADERBOARD_DEBUG_RANDOM_SCORES + - RPC_ID_STATS_GET + - RPC_ID_STATS_UPDATE + - RPC_ID_PROGRESSIONS_GET + - RPC_ID_PROGRESSIONS_PURCHASE + - RPC_ID_PROGRESSIONS_UPDATE + - RPC_ID_INCENTIVES_SENDER_LIST + - RPC_ID_INCENTIVES_SENDER_CREATE + - RPC_ID_INCENTIVES_SENDER_DELETE + - RPC_ID_INCENTIVES_SENDER_CLAIM + - RPC_ID_INCENTIVES_RECIPIENT_GET + - RPC_ID_INCENTIVES_RECIPIENT_CLAIM + - RPC_ID_PROGRESSIONS_RESET + - RPC_ID_AUCTIONS_GET_TEMPLATES + - RPC_ID_AUCTIONS_LIST + - RPC_ID_AUCTIONS_BID + - RPC_ID_AUCTIONS_CLAIM_BID + - RPC_ID_AUCTIONS_CLAIM_CREATED + - RPC_ID_AUCTIONS_CANCEL + - RPC_ID_AUCTIONS_CREATE + - RPC_ID_AUCTIONS_LIST_BIDS + - RPC_ID_AUCTIONS_LIST_CREATED + - RPC_ID_STREAKS_LIST + - RPC_ID_STREAKS_UPDATE + - RPC_ID_STREAKS_CLAIM + - RPC_ID_STREAKS_RESET + - RPC_ID_CHALLENGES_GET_TEMPLATES + - RPC_ID_CHALLENGE_GET + - RPC_ID_CHALLENGE_LIST + - RPC_ID_CHALLENGE_CREATE + - RPC_ID_CHALLENGE_JOIN + - RPC_ID_CHALLENGE_LEAVE + - RPC_ID_CHALLENGE_SUBMIT_SCORE + - RPC_ID_CHALLENGE_CLAIM + - RPC_ID_CHALLENGE_SEARCH + - RPC_ID_CHALLENGE_INVITE + - RPC_ID_REWARD_MAILBOX_LIST + - RPC_ID_REWARD_MAILBOX_CLAIM + - RPC_ID_REWARD_MAILBOX_DELETE + - RPC_ID_ECONOMY_PLACEMENT_SUCCESS + - RPC_ID_ECONOMY_PLACEMENT_FAIL + - RPC_ID_STORAGE_PERSONALIZER_UPLOAD + RpcSocketId: + type: string + enum: + - RPC_SOCKET_ID_UNSPECIFIED + - RPC_SOCKET_ID_AUCTIONS_FOLLOW + - RPC_SOCKET_ID_AUCTIONS_BID + ProgressionPreconditionsOperator: + type: string + enum: + - PROGRESSION_PRECONDITIONS_OPERATOR_UNSPECIFIED + - PROGRESSION_PRECONDITIONS_OPERATOR_AND + - PROGRESSION_PRECONDITIONS_OPERATOR_OR + - PROGRESSION_PRECONDITIONS_OPERATOR_XOR + - PROGRESSION_PRECONDITIONS_OPERATOR_NOT + ProgressionDeltaState: + type: string + enum: + - PROGRESSION_DELTA_STATE_UNSPECIFIED + - PROGRESSION_DELTA_STATE_UNCHANGED + - PROGRESSION_DELTA_STATE_UNLOCKED + - PROGRESSION_DELTA_STATE_LOCKED + StatUpdateOperator: + type: string + enum: + - STAT_UPDATE_OPERATOR_UNSPECIFIED + - STAT_UPDATE_OPERATOR_SET + - STAT_UPDATE_OPERATOR_DELTA + - STAT_UPDATE_OPERATOR_MIN + - STAT_UPDATE_OPERATOR_MAX + EconomyStoreType: + type: string + enum: + - ECONOMY_STORE_TYPE_UNSPECIFIED + - ECONOMY_STORE_TYPE_APPLE_APPSTORE + - ECONOMY_STORE_TYPE_GOOGLE_PLAY + - ECONOMY_STORE_TYPE_FBINSTANT + - ECONOMY_STORE_TYPE_DISCORD + IncentiveType: + type: string + enum: + - INCENTIVE_TYPE_UNSPECIFIED + - INCENTIVE_TYPE_INVITE + ChallengeState: + type: string + enum: + - CHALLENGE_STATE_NONE + - CHALLENGE_STATE_INVITED + - CHALLENGE_STATE_JOINED + - CHALLENGE_STATE_CLAIMED + - CHALLENGE_STATE_DECLINED + - CHALLENGE_STATE_LEFT + TutorialState: + type: string + enum: + - TUTORIAL_STATE_NONE + - TUTORIAL_STATE_ACCEPTED + - TUTORIAL_STATE_DECLINED + - TUTORIAL_STATE_IN_PROGRESS + - TUTORIAL_STATE_COMPLETED + - TUTORIAL_STATE_ABANDONED +security: + - bearerAuthNakama: [] diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/hiro.pb.go b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/hiro.pb.go new file mode 100644 index 0000000..c4ba6d1 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/hiro.pb.go @@ -0,0 +1,29196 @@ +// Copyright 2023 Heroic Labs & Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.34.2 +// protoc (unknown) +// source: hiro.proto + +// The request and response objects for Hiro. + +package hiro + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + descriptorpb "google.golang.org/protobuf/types/descriptorpb" + structpb "google.golang.org/protobuf/types/known/structpb" + wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type RpcId int32 + +const ( + RpcId_RPC_ID_UNSPECIFIED RpcId = 0 + // List all inventory items defined in the codex. + RpcId_RPC_ID_INVENTORY_LIST RpcId = 1 + // List all inventory items owned by the player. + RpcId_RPC_ID_INVENTORY_LIST_INVENTORY RpcId = 2 + // Consume one or more inventory items owned by the player. + RpcId_RPC_ID_INVENTORY_CONSUME RpcId = 3 + // Grant one or more inventory items to the player. + RpcId_RPC_ID_INVENTORY_GRANT RpcId = 4 + // Update the properties on one or more inventory items owned by the player. + RpcId_RPC_ID_INVENTORY_UPDATE RpcId = 5 + // Delete Items by instance id. + RpcId_RPC_ID_INVENTORY_DELETE RpcId = 123 + // Claim one or more rewards which are partially or full donated by other players. + RpcId_RPC_ID_ECONOMY_DONATION_CLAIM RpcId = 6 + // Donate some resource (currencies, items, etc.) to a user by donation ID. + RpcId_RPC_ID_ECONOMY_DONATION_GIVE RpcId = 7 + // Get progress on one or more donations for a set of players by their IDs. + RpcId_RPC_ID_ECONOMY_DONATION_GET RpcId = 8 + // Request a donation which other players can contribute into. + RpcId_RPC_ID_ECONOMY_DONATION_REQUEST RpcId = 9 + // Get all store items defined in the Virtual Store. + RpcId_RPC_ID_ECONOMY_STORE_GET RpcId = 10 + // Grant one or more currencies or reward modifiers to te player. + RpcId_RPC_ID_ECONOMY_GRANT RpcId = 11 + // Send a marker of intent to purchase by the player. + RpcId_RPC_ID_ECONOMY_PURCHASE_INTENT RpcId = 12 + // Purchase a store item by the player. + RpcId_RPC_ID_ECONOMY_PURCHASE_ITEM RpcId = 13 + // Restore a set of purchases. + RpcId_RPC_ID_ECONOMY_PURCHASE_RESTORE RpcId = 59 + // Get the current status on an Ad placement which may have been rewarded. + RpcId_RPC_ID_ECONOMY_PLACEMENT_STATUS RpcId = 14 + // Start a new Ad placement by placement ID. + RpcId_RPC_ID_ECONOMY_PLACEMENT_START RpcId = 15 + // Claim one or more achievements which have completed their progress. + RpcId_RPC_ID_ACHIEVEMENTS_CLAIM RpcId = 16 + // Get all achievements with progress accumulated by the player. + RpcId_RPC_ID_ACHIEVEMENTS_GET RpcId = 17 + // Update one or more achievements with the same progress amount. + RpcId_RPC_ID_ACHIEVEMENTS_UPDATE RpcId = 18 + // Get the energies and their current timers for the player. + RpcId_RPC_ID_ENERGY_GET RpcId = 19 + // Spend one or more energies for the player. + RpcId_RPC_ID_ENERGY_SPEND RpcId = 20 + // Grant one or more energies to the player. + RpcId_RPC_ID_ENERGY_GRANT RpcId = 65 + // Get the tutorials and current progress step for the player. + RpcId_RPC_ID_TUTORIALS_GET RpcId = 21 + // Accept an offer to step through a tutorial. + RpcId_RPC_ID_TUTORIALS_ACCEPT RpcId = 22 + // Decline an offer to start a tutorial. + RpcId_RPC_ID_TUTORIALS_DECLINE RpcId = 23 + // Abandon progress on a tutorial. + RpcId_RPC_ID_TUTORIALS_ABANDON RpcId = 24 + // Update the current progress step in the tutorial by ID. + RpcId_RPC_ID_TUTORIALS_UPDATE RpcId = 25 + // Reset the state of all given tutorial IDs. + RpcId_RPC_ID_TUTORIALS_RESET RpcId = 79 + // Create a team which other players can join. + RpcId_RPC_ID_TEAMS_CREATE RpcId = 26 + // Update a team's properties. + RpcId_RPC_ID_TEAMS_UPDATE RpcId = 121 + // List one or more teams which the player can join. + RpcId_RPC_ID_TEAMS_LIST RpcId = 27 + // Search for teams by name or an optional short code. + RpcId_RPC_ID_TEAMS_SEARCH RpcId = 28 + // Retrieves a team by its TeamID. + RpcId_RPC_ID_TEAMS_GET RpcId = 122 + // Retrieve a list of teams associated with a given set of users. + RpcId_RPC_ID_TEAMS_USER_TEAMS_LIST RpcId = 124 + // Write a chat message to the Team's chat channel. + RpcId_RPC_ID_TEAMS_WRITE_CHAT_MESSAGE RpcId = 29 + // Get all store items defined in the team Virtual Store. + RpcId_RPC_ID_TEAMS_STORE_GET RpcId = 94 + // Purchase a team store item. + RpcId_RPC_ID_TEAMS_STORE_PURCHASE RpcId = 95 + // Get a team's wallet. + RpcId_RPC_ID_TEAMS_WALLET_GET RpcId = 96 + // Grant currencies to a team's wallet. + RpcId_RPC_ID_TEAMS_WALLET_GRANT RpcId = 97 + // Get a team's stats. + RpcId_RPC_ID_TEAMS_STATS_GET RpcId = 98 + // Update a team's stats. + RpcId_RPC_ID_TEAMS_STATS_UPDATE RpcId = 99 + // List all inventory items defined in the team codex. + RpcId_RPC_ID_TEAMS_INVENTORY_LIST RpcId = 100 + // List all inventory items owned by a team. + RpcId_RPC_ID_TEAMS_INVENTORY_LIST_INVENTORY RpcId = 101 + // Consume one or more inventory items owned by a team. + RpcId_RPC_ID_TEAMS_INVENTORY_CONSUME RpcId = 102 + // Grant one or more inventory items to a team. + RpcId_RPC_ID_TEAMS_INVENTORY_GRANT RpcId = 103 + // Update the properties on one or more team inventory items accessible to the player. + RpcId_RPC_ID_TEAMS_INVENTORY_UPDATE RpcId = 104 + // Claim one or more team achievements which have completed their progress. + RpcId_RPC_ID_TEAMS_ACHIEVEMENTS_CLAIM RpcId = 105 + // Get all team achievements with progress accumulated by the team. + RpcId_RPC_ID_TEAMS_ACHIEVEMENTS_GET RpcId = 106 + // Update one or more team achievements with the same progress amount. + RpcId_RPC_ID_TEAMS_ACHIEVEMENTS_UPDATE RpcId = 107 + // List available event leaderboards. + RpcId_RPC_ID_TEAMS_EVENT_LEADERBOARD_LIST RpcId = 108 + // Get a specified event leaderboard defined for the game. + RpcId_RPC_ID_TEAMS_EVENT_LEADERBOARD_GET RpcId = 109 + // Update an event leaderboard record for a user. + RpcId_RPC_ID_TEAMS_EVENT_LEADERBOARD_UPDATE RpcId = 110 + // Claim an event leaderboard reward for a user. + RpcId_RPC_ID_TEAMS_EVENT_LEADERBOARD_CLAIM RpcId = 111 + // Roll a new cohort for the specified event leaderboard. + RpcId_RPC_ID_TEAMS_EVENT_LEADERBOARD_ROLL RpcId = 112 + // DEBUG. Fill an event leaderboard with random user IDs. + RpcId_RPC_ID_TEAMS_EVENT_LEADERBOARD_DEBUG_FILL RpcId = 113 + // DEBUG. Assign random scores within a given range to users within the caller's cohort, except for the caller themselves. + RpcId_RPC_ID_TEAMS_EVENT_LEADERBOARD_DEBUG_RANDOM_SCORES RpcId = 114 + // List rewards available in a team reward mailbox. + RpcId_RPC_ID_TEAMS_REWARD_MAILBOX_LIST RpcId = 115 + // Claim a reward from the team reward mailbox, and optionally delete it. + RpcId_RPC_ID_TEAMS_REWARD_MAILBOX_CLAIM RpcId = 116 + // Delete a reward from the team reward mailbox, even if it is not yet claimed. + RpcId_RPC_ID_TEAMS_REWARD_MAILBOX_DELETE RpcId = 117 + // List available team gifts. + RpcId_RPC_ID_TEAMS_GIFT_LIST RpcId = 118 + // Contribute to an active team gift. + RpcId_RPC_ID_TEAMS_GIFT_CONTRIBUTE RpcId = 119 + // Claim the user's reward from an eligible team gift. + RpcId_RPC_ID_TEAMS_GIFT_CLAIM RpcId = 120 + // Create a random unlockable to assign to a slot (or overflow) unless there are no slots. + RpcId_RPC_ID_UNLOCKABLES_CREATE RpcId = 30 + // Get the unlockables which are currently in progress for the player. + RpcId_RPC_ID_UNLOCKABLES_GET RpcId = 31 + // Start the unlock timer for an unlockable in the specified slot. + RpcId_RPC_ID_UNLOCKABLES_UNLOCK_START RpcId = 32 + // Purchase an unlockable with soft currency based on the remainder cost calculated by the offset left to wait. + RpcId_RPC_ID_UNLOCKABLES_PURCHASE_UNLOCK RpcId = 33 + // Purchase a new slot to be used to store unlockables. + RpcId_RPC_ID_UNLOCKABLES_PURCHASE_SLOT RpcId = 34 + // Claim an unlockable whose start timer has completed or completion was fast tracked with a purchase. + RpcId_RPC_ID_UNLOCKABLES_CLAIM RpcId = 35 + // Add some set of unlockables to the unlock queue. + RpcId_RPC_ID_UNLOCKABLES_QUEUE_ADD RpcId = 62 + // Remove some set of unlockables from the unlock queue. + RpcId_RPC_ID_UNLOCKABLES_QUEUE_REMOVE RpcId = 63 + // Replace the unlock queue with the given set of unlockables. + RpcId_RPC_ID_UNLOCKABLES_QUEUE_SET RpcId = 64 + // Send feedback to the game's developers over email. + RpcId_RPC_ID_BASE_RATE_APP RpcId = 36 + // Update or create the mobile push device tokens and preferences for the player. + RpcId_RPC_ID_BASE_SET_DEVICE_PREFS RpcId = 37 + // Sync offline state. + RpcId_RPC_ID_BASE_SYNC RpcId = 58 + // Get the leaderboards defined for the game. + RpcId_RPC_ID_LEADERBOARDS_CONFIG_GET RpcId = 38 + // List available event leaderboards. + RpcId_RPC_ID_EVENT_LEADERBOARD_LIST RpcId = 80 + // Get a specified event leaderboard defined for the game. + RpcId_RPC_ID_EVENT_LEADERBOARD_GET RpcId = 42 + // Update an event leaderboard record for a user. + RpcId_RPC_ID_EVENT_LEADERBOARD_UPDATE RpcId = 43 + // Claim an event leaderboard reward for a user. + RpcId_RPC_ID_EVENT_LEADERBOARD_CLAIM RpcId = 44 + // Roll a new cohort for the specified event leaderboard. + RpcId_RPC_ID_EVENT_LEADERBOARD_ROLL RpcId = 45 + // DEBUG. Fill an event leaderboard with random user IDs. + RpcId_RPC_ID_EVENT_LEADERBOARD_DEBUG_FILL RpcId = 60 + // DEBUG. Assign random scores within a given range to users within the caller's cohort, except for the caller themselves. + RpcId_RPC_ID_EVENT_LEADERBOARD_DEBUG_RANDOM_SCORES RpcId = 61 + // Get all stats. + RpcId_RPC_ID_STATS_GET RpcId = 46 + // Update stats. + RpcId_RPC_ID_STATS_UPDATE RpcId = 47 + // Get progressions. + RpcId_RPC_ID_PROGRESSIONS_GET RpcId = 48 + // Purchase a progression for permanent unlock, if supported. + RpcId_RPC_ID_PROGRESSIONS_PURCHASE RpcId = 49 + // Update a progression to change its count, if supported. + RpcId_RPC_ID_PROGRESSIONS_UPDATE RpcId = 50 + // List incentives set up by the user. + RpcId_RPC_ID_INCENTIVES_SENDER_LIST RpcId = 51 + // Create a new incentive set up by the user. + RpcId_RPC_ID_INCENTIVES_SENDER_CREATE RpcId = 52 + // Delete an existing incentive set up by the user. + RpcId_RPC_ID_INCENTIVES_SENDER_DELETE RpcId = 53 + // Claim rewards for an existing incentive after it has been used by some recipient(s). + RpcId_RPC_ID_INCENTIVES_SENDER_CLAIM RpcId = 54 + // Get information about an existing incentive from a recipient's perspective. + RpcId_RPC_ID_INCENTIVES_RECIPIENT_GET RpcId = 55 + // Claim an existing incentive and receive associated rewards. + RpcId_RPC_ID_INCENTIVES_RECIPIENT_CLAIM RpcId = 56 + // Reset progression progress. + RpcId_RPC_ID_PROGRESSIONS_RESET RpcId = 57 + // Fetch all available auction templates. + RpcId_RPC_ID_AUCTIONS_GET_TEMPLATES RpcId = 66 + // List available auctions. + RpcId_RPC_ID_AUCTIONS_LIST RpcId = 67 + // Bid on an active auction. + RpcId_RPC_ID_AUCTIONS_BID RpcId = 68 + // Claim a completed auction where the user was the winning bidder. + RpcId_RPC_ID_AUCTIONS_CLAIM_BID RpcId = 69 + // Claim a completed auction where the user was the seller. + RpcId_RPC_ID_AUCTIONS_CLAIM_CREATED RpcId = 70 + // Cancel an in-progress auction. + RpcId_RPC_ID_AUCTIONS_CANCEL RpcId = 71 + // Create a new auction. + RpcId_RPC_ID_AUCTIONS_CREATE RpcId = 72 + // List auctions the user has bid on. + RpcId_RPC_ID_AUCTIONS_LIST_BIDS RpcId = 73 + // List auctions the user has created. + RpcId_RPC_ID_AUCTIONS_LIST_CREATED RpcId = 74 + // List all available streaks, including their current state and progress if any. + RpcId_RPC_ID_STREAKS_LIST RpcId = 75 + // Update one or more streaks with the given progress amounts. + RpcId_RPC_ID_STREAKS_UPDATE RpcId = 76 + // Claim the rewards from one or more streaks. + RpcId_RPC_ID_STREAKS_CLAIM RpcId = 77 + // Reset all progress for one or more streaks. + RpcId_RPC_ID_STREAKS_RESET RpcId = 78 + // List all available templates for challenges. + RpcId_RPC_ID_CHALLENGES_GET_TEMPLATES RpcId = 81 + // Get a challenge by id. + RpcId_RPC_ID_CHALLENGE_GET RpcId = 82 + // List all the user's challenges. + RpcId_RPC_ID_CHALLENGE_LIST RpcId = 83 + // Create a new challenge based on a template. + RpcId_RPC_ID_CHALLENGE_CREATE RpcId = 84 + // Join a challenge. + RpcId_RPC_ID_CHALLENGE_JOIN RpcId = 85 + // Leave a challenge. + RpcId_RPC_ID_CHALLENGE_LEAVE RpcId = 86 + // Submit a score to a challenge. + RpcId_RPC_ID_CHALLENGE_SUBMIT_SCORE RpcId = 87 + // Claim a reward of a challenge. + RpcId_RPC_ID_CHALLENGE_CLAIM RpcId = 88 + // Search for an open challenge to join. + RpcId_RPC_ID_CHALLENGE_SEARCH RpcId = 89 + // Invite more users to an ongoing challenge. + RpcId_RPC_ID_CHALLENGE_INVITE RpcId = 90 + // List rewards available in a reward mailbox. + RpcId_RPC_ID_REWARD_MAILBOX_LIST RpcId = 91 + // Claim a reward from the reward mailbox, and optionally delete it. + RpcId_RPC_ID_REWARD_MAILBOX_CLAIM RpcId = 92 + // Delete a reward from the reward mailbox, even if it is not yet claimed. + RpcId_RPC_ID_REWARD_MAILBOX_DELETE RpcId = 93 + // Webhook RPC to handle Rewarded Video Ad placement success callbacks. + RpcId_RPC_ID_ECONOMY_PLACEMENT_SUCCESS RpcId = 1001 + // Webhook RPC to handle Rewarded Video Ad placement failure callbacks. + RpcId_RPC_ID_ECONOMY_PLACEMENT_FAIL RpcId = 1002 + // RPC to upload Hiro system configurations for the storage personalizer. + RpcId_RPC_ID_STORAGE_PERSONALIZER_UPLOAD RpcId = 1003 +) + +// Enum value maps for RpcId. +var ( + RpcId_name = map[int32]string{ + 0: "RPC_ID_UNSPECIFIED", + 1: "RPC_ID_INVENTORY_LIST", + 2: "RPC_ID_INVENTORY_LIST_INVENTORY", + 3: "RPC_ID_INVENTORY_CONSUME", + 4: "RPC_ID_INVENTORY_GRANT", + 5: "RPC_ID_INVENTORY_UPDATE", + 123: "RPC_ID_INVENTORY_DELETE", + 6: "RPC_ID_ECONOMY_DONATION_CLAIM", + 7: "RPC_ID_ECONOMY_DONATION_GIVE", + 8: "RPC_ID_ECONOMY_DONATION_GET", + 9: "RPC_ID_ECONOMY_DONATION_REQUEST", + 10: "RPC_ID_ECONOMY_STORE_GET", + 11: "RPC_ID_ECONOMY_GRANT", + 12: "RPC_ID_ECONOMY_PURCHASE_INTENT", + 13: "RPC_ID_ECONOMY_PURCHASE_ITEM", + 59: "RPC_ID_ECONOMY_PURCHASE_RESTORE", + 14: "RPC_ID_ECONOMY_PLACEMENT_STATUS", + 15: "RPC_ID_ECONOMY_PLACEMENT_START", + 16: "RPC_ID_ACHIEVEMENTS_CLAIM", + 17: "RPC_ID_ACHIEVEMENTS_GET", + 18: "RPC_ID_ACHIEVEMENTS_UPDATE", + 19: "RPC_ID_ENERGY_GET", + 20: "RPC_ID_ENERGY_SPEND", + 65: "RPC_ID_ENERGY_GRANT", + 21: "RPC_ID_TUTORIALS_GET", + 22: "RPC_ID_TUTORIALS_ACCEPT", + 23: "RPC_ID_TUTORIALS_DECLINE", + 24: "RPC_ID_TUTORIALS_ABANDON", + 25: "RPC_ID_TUTORIALS_UPDATE", + 79: "RPC_ID_TUTORIALS_RESET", + 26: "RPC_ID_TEAMS_CREATE", + 121: "RPC_ID_TEAMS_UPDATE", + 27: "RPC_ID_TEAMS_LIST", + 28: "RPC_ID_TEAMS_SEARCH", + 122: "RPC_ID_TEAMS_GET", + 124: "RPC_ID_TEAMS_USER_TEAMS_LIST", + 29: "RPC_ID_TEAMS_WRITE_CHAT_MESSAGE", + 94: "RPC_ID_TEAMS_STORE_GET", + 95: "RPC_ID_TEAMS_STORE_PURCHASE", + 96: "RPC_ID_TEAMS_WALLET_GET", + 97: "RPC_ID_TEAMS_WALLET_GRANT", + 98: "RPC_ID_TEAMS_STATS_GET", + 99: "RPC_ID_TEAMS_STATS_UPDATE", + 100: "RPC_ID_TEAMS_INVENTORY_LIST", + 101: "RPC_ID_TEAMS_INVENTORY_LIST_INVENTORY", + 102: "RPC_ID_TEAMS_INVENTORY_CONSUME", + 103: "RPC_ID_TEAMS_INVENTORY_GRANT", + 104: "RPC_ID_TEAMS_INVENTORY_UPDATE", + 105: "RPC_ID_TEAMS_ACHIEVEMENTS_CLAIM", + 106: "RPC_ID_TEAMS_ACHIEVEMENTS_GET", + 107: "RPC_ID_TEAMS_ACHIEVEMENTS_UPDATE", + 108: "RPC_ID_TEAMS_EVENT_LEADERBOARD_LIST", + 109: "RPC_ID_TEAMS_EVENT_LEADERBOARD_GET", + 110: "RPC_ID_TEAMS_EVENT_LEADERBOARD_UPDATE", + 111: "RPC_ID_TEAMS_EVENT_LEADERBOARD_CLAIM", + 112: "RPC_ID_TEAMS_EVENT_LEADERBOARD_ROLL", + 113: "RPC_ID_TEAMS_EVENT_LEADERBOARD_DEBUG_FILL", + 114: "RPC_ID_TEAMS_EVENT_LEADERBOARD_DEBUG_RANDOM_SCORES", + 115: "RPC_ID_TEAMS_REWARD_MAILBOX_LIST", + 116: "RPC_ID_TEAMS_REWARD_MAILBOX_CLAIM", + 117: "RPC_ID_TEAMS_REWARD_MAILBOX_DELETE", + 118: "RPC_ID_TEAMS_GIFT_LIST", + 119: "RPC_ID_TEAMS_GIFT_CONTRIBUTE", + 120: "RPC_ID_TEAMS_GIFT_CLAIM", + 30: "RPC_ID_UNLOCKABLES_CREATE", + 31: "RPC_ID_UNLOCKABLES_GET", + 32: "RPC_ID_UNLOCKABLES_UNLOCK_START", + 33: "RPC_ID_UNLOCKABLES_PURCHASE_UNLOCK", + 34: "RPC_ID_UNLOCKABLES_PURCHASE_SLOT", + 35: "RPC_ID_UNLOCKABLES_CLAIM", + 62: "RPC_ID_UNLOCKABLES_QUEUE_ADD", + 63: "RPC_ID_UNLOCKABLES_QUEUE_REMOVE", + 64: "RPC_ID_UNLOCKABLES_QUEUE_SET", + 36: "RPC_ID_BASE_RATE_APP", + 37: "RPC_ID_BASE_SET_DEVICE_PREFS", + 58: "RPC_ID_BASE_SYNC", + 38: "RPC_ID_LEADERBOARDS_CONFIG_GET", + 80: "RPC_ID_EVENT_LEADERBOARD_LIST", + 42: "RPC_ID_EVENT_LEADERBOARD_GET", + 43: "RPC_ID_EVENT_LEADERBOARD_UPDATE", + 44: "RPC_ID_EVENT_LEADERBOARD_CLAIM", + 45: "RPC_ID_EVENT_LEADERBOARD_ROLL", + 60: "RPC_ID_EVENT_LEADERBOARD_DEBUG_FILL", + 61: "RPC_ID_EVENT_LEADERBOARD_DEBUG_RANDOM_SCORES", + 46: "RPC_ID_STATS_GET", + 47: "RPC_ID_STATS_UPDATE", + 48: "RPC_ID_PROGRESSIONS_GET", + 49: "RPC_ID_PROGRESSIONS_PURCHASE", + 50: "RPC_ID_PROGRESSIONS_UPDATE", + 51: "RPC_ID_INCENTIVES_SENDER_LIST", + 52: "RPC_ID_INCENTIVES_SENDER_CREATE", + 53: "RPC_ID_INCENTIVES_SENDER_DELETE", + 54: "RPC_ID_INCENTIVES_SENDER_CLAIM", + 55: "RPC_ID_INCENTIVES_RECIPIENT_GET", + 56: "RPC_ID_INCENTIVES_RECIPIENT_CLAIM", + 57: "RPC_ID_PROGRESSIONS_RESET", + 66: "RPC_ID_AUCTIONS_GET_TEMPLATES", + 67: "RPC_ID_AUCTIONS_LIST", + 68: "RPC_ID_AUCTIONS_BID", + 69: "RPC_ID_AUCTIONS_CLAIM_BID", + 70: "RPC_ID_AUCTIONS_CLAIM_CREATED", + 71: "RPC_ID_AUCTIONS_CANCEL", + 72: "RPC_ID_AUCTIONS_CREATE", + 73: "RPC_ID_AUCTIONS_LIST_BIDS", + 74: "RPC_ID_AUCTIONS_LIST_CREATED", + 75: "RPC_ID_STREAKS_LIST", + 76: "RPC_ID_STREAKS_UPDATE", + 77: "RPC_ID_STREAKS_CLAIM", + 78: "RPC_ID_STREAKS_RESET", + 81: "RPC_ID_CHALLENGES_GET_TEMPLATES", + 82: "RPC_ID_CHALLENGE_GET", + 83: "RPC_ID_CHALLENGE_LIST", + 84: "RPC_ID_CHALLENGE_CREATE", + 85: "RPC_ID_CHALLENGE_JOIN", + 86: "RPC_ID_CHALLENGE_LEAVE", + 87: "RPC_ID_CHALLENGE_SUBMIT_SCORE", + 88: "RPC_ID_CHALLENGE_CLAIM", + 89: "RPC_ID_CHALLENGE_SEARCH", + 90: "RPC_ID_CHALLENGE_INVITE", + 91: "RPC_ID_REWARD_MAILBOX_LIST", + 92: "RPC_ID_REWARD_MAILBOX_CLAIM", + 93: "RPC_ID_REWARD_MAILBOX_DELETE", + 1001: "RPC_ID_ECONOMY_PLACEMENT_SUCCESS", + 1002: "RPC_ID_ECONOMY_PLACEMENT_FAIL", + 1003: "RPC_ID_STORAGE_PERSONALIZER_UPLOAD", + } + RpcId_value = map[string]int32{ + "RPC_ID_UNSPECIFIED": 0, + "RPC_ID_INVENTORY_LIST": 1, + "RPC_ID_INVENTORY_LIST_INVENTORY": 2, + "RPC_ID_INVENTORY_CONSUME": 3, + "RPC_ID_INVENTORY_GRANT": 4, + "RPC_ID_INVENTORY_UPDATE": 5, + "RPC_ID_INVENTORY_DELETE": 123, + "RPC_ID_ECONOMY_DONATION_CLAIM": 6, + "RPC_ID_ECONOMY_DONATION_GIVE": 7, + "RPC_ID_ECONOMY_DONATION_GET": 8, + "RPC_ID_ECONOMY_DONATION_REQUEST": 9, + "RPC_ID_ECONOMY_STORE_GET": 10, + "RPC_ID_ECONOMY_GRANT": 11, + "RPC_ID_ECONOMY_PURCHASE_INTENT": 12, + "RPC_ID_ECONOMY_PURCHASE_ITEM": 13, + "RPC_ID_ECONOMY_PURCHASE_RESTORE": 59, + "RPC_ID_ECONOMY_PLACEMENT_STATUS": 14, + "RPC_ID_ECONOMY_PLACEMENT_START": 15, + "RPC_ID_ACHIEVEMENTS_CLAIM": 16, + "RPC_ID_ACHIEVEMENTS_GET": 17, + "RPC_ID_ACHIEVEMENTS_UPDATE": 18, + "RPC_ID_ENERGY_GET": 19, + "RPC_ID_ENERGY_SPEND": 20, + "RPC_ID_ENERGY_GRANT": 65, + "RPC_ID_TUTORIALS_GET": 21, + "RPC_ID_TUTORIALS_ACCEPT": 22, + "RPC_ID_TUTORIALS_DECLINE": 23, + "RPC_ID_TUTORIALS_ABANDON": 24, + "RPC_ID_TUTORIALS_UPDATE": 25, + "RPC_ID_TUTORIALS_RESET": 79, + "RPC_ID_TEAMS_CREATE": 26, + "RPC_ID_TEAMS_UPDATE": 121, + "RPC_ID_TEAMS_LIST": 27, + "RPC_ID_TEAMS_SEARCH": 28, + "RPC_ID_TEAMS_GET": 122, + "RPC_ID_TEAMS_USER_TEAMS_LIST": 124, + "RPC_ID_TEAMS_WRITE_CHAT_MESSAGE": 29, + "RPC_ID_TEAMS_STORE_GET": 94, + "RPC_ID_TEAMS_STORE_PURCHASE": 95, + "RPC_ID_TEAMS_WALLET_GET": 96, + "RPC_ID_TEAMS_WALLET_GRANT": 97, + "RPC_ID_TEAMS_STATS_GET": 98, + "RPC_ID_TEAMS_STATS_UPDATE": 99, + "RPC_ID_TEAMS_INVENTORY_LIST": 100, + "RPC_ID_TEAMS_INVENTORY_LIST_INVENTORY": 101, + "RPC_ID_TEAMS_INVENTORY_CONSUME": 102, + "RPC_ID_TEAMS_INVENTORY_GRANT": 103, + "RPC_ID_TEAMS_INVENTORY_UPDATE": 104, + "RPC_ID_TEAMS_ACHIEVEMENTS_CLAIM": 105, + "RPC_ID_TEAMS_ACHIEVEMENTS_GET": 106, + "RPC_ID_TEAMS_ACHIEVEMENTS_UPDATE": 107, + "RPC_ID_TEAMS_EVENT_LEADERBOARD_LIST": 108, + "RPC_ID_TEAMS_EVENT_LEADERBOARD_GET": 109, + "RPC_ID_TEAMS_EVENT_LEADERBOARD_UPDATE": 110, + "RPC_ID_TEAMS_EVENT_LEADERBOARD_CLAIM": 111, + "RPC_ID_TEAMS_EVENT_LEADERBOARD_ROLL": 112, + "RPC_ID_TEAMS_EVENT_LEADERBOARD_DEBUG_FILL": 113, + "RPC_ID_TEAMS_EVENT_LEADERBOARD_DEBUG_RANDOM_SCORES": 114, + "RPC_ID_TEAMS_REWARD_MAILBOX_LIST": 115, + "RPC_ID_TEAMS_REWARD_MAILBOX_CLAIM": 116, + "RPC_ID_TEAMS_REWARD_MAILBOX_DELETE": 117, + "RPC_ID_TEAMS_GIFT_LIST": 118, + "RPC_ID_TEAMS_GIFT_CONTRIBUTE": 119, + "RPC_ID_TEAMS_GIFT_CLAIM": 120, + "RPC_ID_UNLOCKABLES_CREATE": 30, + "RPC_ID_UNLOCKABLES_GET": 31, + "RPC_ID_UNLOCKABLES_UNLOCK_START": 32, + "RPC_ID_UNLOCKABLES_PURCHASE_UNLOCK": 33, + "RPC_ID_UNLOCKABLES_PURCHASE_SLOT": 34, + "RPC_ID_UNLOCKABLES_CLAIM": 35, + "RPC_ID_UNLOCKABLES_QUEUE_ADD": 62, + "RPC_ID_UNLOCKABLES_QUEUE_REMOVE": 63, + "RPC_ID_UNLOCKABLES_QUEUE_SET": 64, + "RPC_ID_BASE_RATE_APP": 36, + "RPC_ID_BASE_SET_DEVICE_PREFS": 37, + "RPC_ID_BASE_SYNC": 58, + "RPC_ID_LEADERBOARDS_CONFIG_GET": 38, + "RPC_ID_EVENT_LEADERBOARD_LIST": 80, + "RPC_ID_EVENT_LEADERBOARD_GET": 42, + "RPC_ID_EVENT_LEADERBOARD_UPDATE": 43, + "RPC_ID_EVENT_LEADERBOARD_CLAIM": 44, + "RPC_ID_EVENT_LEADERBOARD_ROLL": 45, + "RPC_ID_EVENT_LEADERBOARD_DEBUG_FILL": 60, + "RPC_ID_EVENT_LEADERBOARD_DEBUG_RANDOM_SCORES": 61, + "RPC_ID_STATS_GET": 46, + "RPC_ID_STATS_UPDATE": 47, + "RPC_ID_PROGRESSIONS_GET": 48, + "RPC_ID_PROGRESSIONS_PURCHASE": 49, + "RPC_ID_PROGRESSIONS_UPDATE": 50, + "RPC_ID_INCENTIVES_SENDER_LIST": 51, + "RPC_ID_INCENTIVES_SENDER_CREATE": 52, + "RPC_ID_INCENTIVES_SENDER_DELETE": 53, + "RPC_ID_INCENTIVES_SENDER_CLAIM": 54, + "RPC_ID_INCENTIVES_RECIPIENT_GET": 55, + "RPC_ID_INCENTIVES_RECIPIENT_CLAIM": 56, + "RPC_ID_PROGRESSIONS_RESET": 57, + "RPC_ID_AUCTIONS_GET_TEMPLATES": 66, + "RPC_ID_AUCTIONS_LIST": 67, + "RPC_ID_AUCTIONS_BID": 68, + "RPC_ID_AUCTIONS_CLAIM_BID": 69, + "RPC_ID_AUCTIONS_CLAIM_CREATED": 70, + "RPC_ID_AUCTIONS_CANCEL": 71, + "RPC_ID_AUCTIONS_CREATE": 72, + "RPC_ID_AUCTIONS_LIST_BIDS": 73, + "RPC_ID_AUCTIONS_LIST_CREATED": 74, + "RPC_ID_STREAKS_LIST": 75, + "RPC_ID_STREAKS_UPDATE": 76, + "RPC_ID_STREAKS_CLAIM": 77, + "RPC_ID_STREAKS_RESET": 78, + "RPC_ID_CHALLENGES_GET_TEMPLATES": 81, + "RPC_ID_CHALLENGE_GET": 82, + "RPC_ID_CHALLENGE_LIST": 83, + "RPC_ID_CHALLENGE_CREATE": 84, + "RPC_ID_CHALLENGE_JOIN": 85, + "RPC_ID_CHALLENGE_LEAVE": 86, + "RPC_ID_CHALLENGE_SUBMIT_SCORE": 87, + "RPC_ID_CHALLENGE_CLAIM": 88, + "RPC_ID_CHALLENGE_SEARCH": 89, + "RPC_ID_CHALLENGE_INVITE": 90, + "RPC_ID_REWARD_MAILBOX_LIST": 91, + "RPC_ID_REWARD_MAILBOX_CLAIM": 92, + "RPC_ID_REWARD_MAILBOX_DELETE": 93, + "RPC_ID_ECONOMY_PLACEMENT_SUCCESS": 1001, + "RPC_ID_ECONOMY_PLACEMENT_FAIL": 1002, + "RPC_ID_STORAGE_PERSONALIZER_UPLOAD": 1003, + } +) + +func (x RpcId) Enum() *RpcId { + p := new(RpcId) + *p = x + return p +} + +func (x RpcId) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (RpcId) Descriptor() protoreflect.EnumDescriptor { + return file_hiro_proto_enumTypes[0].Descriptor() +} + +func (RpcId) Type() protoreflect.EnumType { + return &file_hiro_proto_enumTypes[0] +} + +func (x RpcId) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use RpcId.Descriptor instead. +func (RpcId) EnumDescriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{0} +} + +type RpcSocketId int32 + +const ( + RpcSocketId_RPC_SOCKET_ID_UNSPECIFIED RpcSocketId = 0 + // Follow auctions a user has an interest in, bid or own. Must be called via a connected socket. + RpcSocketId_RPC_SOCKET_ID_AUCTIONS_FOLLOW RpcSocketId = 1 + // Bid on an auction and follow it for further updates. + RpcSocketId_RPC_SOCKET_ID_AUCTIONS_BID RpcSocketId = 2 +) + +// Enum value maps for RpcSocketId. +var ( + RpcSocketId_name = map[int32]string{ + 0: "RPC_SOCKET_ID_UNSPECIFIED", + 1: "RPC_SOCKET_ID_AUCTIONS_FOLLOW", + 2: "RPC_SOCKET_ID_AUCTIONS_BID", + } + RpcSocketId_value = map[string]int32{ + "RPC_SOCKET_ID_UNSPECIFIED": 0, + "RPC_SOCKET_ID_AUCTIONS_FOLLOW": 1, + "RPC_SOCKET_ID_AUCTIONS_BID": 2, + } +) + +func (x RpcSocketId) Enum() *RpcSocketId { + p := new(RpcSocketId) + *p = x + return p +} + +func (x RpcSocketId) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (RpcSocketId) Descriptor() protoreflect.EnumDescriptor { + return file_hiro_proto_enumTypes[1].Descriptor() +} + +func (RpcSocketId) Type() protoreflect.EnumType { + return &file_hiro_proto_enumTypes[1] +} + +func (x RpcSocketId) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use RpcSocketId.Descriptor instead. +func (RpcSocketId) EnumDescriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{1} +} + +type ProgressionPreconditionsOperator int32 + +const ( + // Unspecified. Defaults to AND. + ProgressionPreconditionsOperator_PROGRESSION_PRECONDITIONS_OPERATOR_UNSPECIFIED ProgressionPreconditionsOperator = 0 + // Both the direct preconditions and the nested block must be true. + ProgressionPreconditionsOperator_PROGRESSION_PRECONDITIONS_OPERATOR_AND ProgressionPreconditionsOperator = 1 + // Either the direct preconditions or the nested block must be true. + ProgressionPreconditionsOperator_PROGRESSION_PRECONDITIONS_OPERATOR_OR ProgressionPreconditionsOperator = 2 + // Either the direct preconditions or the nested block must be true, but not both. + ProgressionPreconditionsOperator_PROGRESSION_PRECONDITIONS_OPERATOR_XOR ProgressionPreconditionsOperator = 3 + // The direct preconditions must be true, but the nested block must not be. + ProgressionPreconditionsOperator_PROGRESSION_PRECONDITIONS_OPERATOR_NOT ProgressionPreconditionsOperator = 4 +) + +// Enum value maps for ProgressionPreconditionsOperator. +var ( + ProgressionPreconditionsOperator_name = map[int32]string{ + 0: "PROGRESSION_PRECONDITIONS_OPERATOR_UNSPECIFIED", + 1: "PROGRESSION_PRECONDITIONS_OPERATOR_AND", + 2: "PROGRESSION_PRECONDITIONS_OPERATOR_OR", + 3: "PROGRESSION_PRECONDITIONS_OPERATOR_XOR", + 4: "PROGRESSION_PRECONDITIONS_OPERATOR_NOT", + } + ProgressionPreconditionsOperator_value = map[string]int32{ + "PROGRESSION_PRECONDITIONS_OPERATOR_UNSPECIFIED": 0, + "PROGRESSION_PRECONDITIONS_OPERATOR_AND": 1, + "PROGRESSION_PRECONDITIONS_OPERATOR_OR": 2, + "PROGRESSION_PRECONDITIONS_OPERATOR_XOR": 3, + "PROGRESSION_PRECONDITIONS_OPERATOR_NOT": 4, + } +) + +func (x ProgressionPreconditionsOperator) Enum() *ProgressionPreconditionsOperator { + p := new(ProgressionPreconditionsOperator) + *p = x + return p +} + +func (x ProgressionPreconditionsOperator) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ProgressionPreconditionsOperator) Descriptor() protoreflect.EnumDescriptor { + return file_hiro_proto_enumTypes[2].Descriptor() +} + +func (ProgressionPreconditionsOperator) Type() protoreflect.EnumType { + return &file_hiro_proto_enumTypes[2] +} + +func (x ProgressionPreconditionsOperator) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ProgressionPreconditionsOperator.Descriptor instead. +func (ProgressionPreconditionsOperator) EnumDescriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{2} +} + +type ProgressionDeltaState int32 + +const ( + // Unspecified. Defaults to UNCHANGED. + ProgressionDeltaState_PROGRESSION_DELTA_STATE_UNSPECIFIED ProgressionDeltaState = 0 + // Progression unlock state has not changed. + ProgressionDeltaState_PROGRESSION_DELTA_STATE_UNCHANGED ProgressionDeltaState = 1 + // Progression was locked, it is now unlocked. + ProgressionDeltaState_PROGRESSION_DELTA_STATE_UNLOCKED ProgressionDeltaState = 2 + // Progression was unlocked, it is now locked. + ProgressionDeltaState_PROGRESSION_DELTA_STATE_LOCKED ProgressionDeltaState = 3 +) + +// Enum value maps for ProgressionDeltaState. +var ( + ProgressionDeltaState_name = map[int32]string{ + 0: "PROGRESSION_DELTA_STATE_UNSPECIFIED", + 1: "PROGRESSION_DELTA_STATE_UNCHANGED", + 2: "PROGRESSION_DELTA_STATE_UNLOCKED", + 3: "PROGRESSION_DELTA_STATE_LOCKED", + } + ProgressionDeltaState_value = map[string]int32{ + "PROGRESSION_DELTA_STATE_UNSPECIFIED": 0, + "PROGRESSION_DELTA_STATE_UNCHANGED": 1, + "PROGRESSION_DELTA_STATE_UNLOCKED": 2, + "PROGRESSION_DELTA_STATE_LOCKED": 3, + } +) + +func (x ProgressionDeltaState) Enum() *ProgressionDeltaState { + p := new(ProgressionDeltaState) + *p = x + return p +} + +func (x ProgressionDeltaState) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ProgressionDeltaState) Descriptor() protoreflect.EnumDescriptor { + return file_hiro_proto_enumTypes[3].Descriptor() +} + +func (ProgressionDeltaState) Type() protoreflect.EnumType { + return &file_hiro_proto_enumTypes[3] +} + +func (x ProgressionDeltaState) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ProgressionDeltaState.Descriptor instead. +func (ProgressionDeltaState) EnumDescriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{3} +} + +// Indicate how a stats update should be handled. +type StatUpdateOperator int32 + +const ( + // Unspecified. Defaults to Set. + StatUpdateOperator_STAT_UPDATE_OPERATOR_UNSPECIFIED StatUpdateOperator = 0 + // Set the given value, overwriting any previous one. + StatUpdateOperator_STAT_UPDATE_OPERATOR_SET StatUpdateOperator = 1 + // Increment or decrement the existing value by the given amount. Equivalent to Set if no previous value existed. + StatUpdateOperator_STAT_UPDATE_OPERATOR_DELTA StatUpdateOperator = 2 + // Use the new value if it's lower than the existing one. Equivalent to Set if no previous value existed. + StatUpdateOperator_STAT_UPDATE_OPERATOR_MIN StatUpdateOperator = 3 + // Use the new value if it's higher than the existing one. Equivalent to Set if no previous value existed. + StatUpdateOperator_STAT_UPDATE_OPERATOR_MAX StatUpdateOperator = 4 +) + +// Enum value maps for StatUpdateOperator. +var ( + StatUpdateOperator_name = map[int32]string{ + 0: "STAT_UPDATE_OPERATOR_UNSPECIFIED", + 1: "STAT_UPDATE_OPERATOR_SET", + 2: "STAT_UPDATE_OPERATOR_DELTA", + 3: "STAT_UPDATE_OPERATOR_MIN", + 4: "STAT_UPDATE_OPERATOR_MAX", + } + StatUpdateOperator_value = map[string]int32{ + "STAT_UPDATE_OPERATOR_UNSPECIFIED": 0, + "STAT_UPDATE_OPERATOR_SET": 1, + "STAT_UPDATE_OPERATOR_DELTA": 2, + "STAT_UPDATE_OPERATOR_MIN": 3, + "STAT_UPDATE_OPERATOR_MAX": 4, + } +) + +func (x StatUpdateOperator) Enum() *StatUpdateOperator { + p := new(StatUpdateOperator) + *p = x + return p +} + +func (x StatUpdateOperator) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (StatUpdateOperator) Descriptor() protoreflect.EnumDescriptor { + return file_hiro_proto_enumTypes[4].Descriptor() +} + +func (StatUpdateOperator) Type() protoreflect.EnumType { + return &file_hiro_proto_enumTypes[4] +} + +func (x StatUpdateOperator) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use StatUpdateOperator.Descriptor instead. +func (StatUpdateOperator) EnumDescriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{4} +} + +// The store types supported by the Economy system. +type EconomyStoreType int32 + +const ( + // Unspecified. Defaults to Apple. + EconomyStoreType_ECONOMY_STORE_TYPE_UNSPECIFIED EconomyStoreType = 0 + // Apple App Store. + EconomyStoreType_ECONOMY_STORE_TYPE_APPLE_APPSTORE EconomyStoreType = 1 + // Google Play. + EconomyStoreType_ECONOMY_STORE_TYPE_GOOGLE_PLAY EconomyStoreType = 2 + // Facebook Instant games. + EconomyStoreType_ECONOMY_STORE_TYPE_FBINSTANT EconomyStoreType = 3 + // Discord Store. + EconomyStoreType_ECONOMY_STORE_TYPE_DISCORD EconomyStoreType = 4 +) + +// Enum value maps for EconomyStoreType. +var ( + EconomyStoreType_name = map[int32]string{ + 0: "ECONOMY_STORE_TYPE_UNSPECIFIED", + 1: "ECONOMY_STORE_TYPE_APPLE_APPSTORE", + 2: "ECONOMY_STORE_TYPE_GOOGLE_PLAY", + 3: "ECONOMY_STORE_TYPE_FBINSTANT", + 4: "ECONOMY_STORE_TYPE_DISCORD", + } + EconomyStoreType_value = map[string]int32{ + "ECONOMY_STORE_TYPE_UNSPECIFIED": 0, + "ECONOMY_STORE_TYPE_APPLE_APPSTORE": 1, + "ECONOMY_STORE_TYPE_GOOGLE_PLAY": 2, + "ECONOMY_STORE_TYPE_FBINSTANT": 3, + "ECONOMY_STORE_TYPE_DISCORD": 4, + } +) + +func (x EconomyStoreType) Enum() *EconomyStoreType { + p := new(EconomyStoreType) + *p = x + return p +} + +func (x EconomyStoreType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (EconomyStoreType) Descriptor() protoreflect.EnumDescriptor { + return file_hiro_proto_enumTypes[5].Descriptor() +} + +func (EconomyStoreType) Type() protoreflect.EnumType { + return &file_hiro_proto_enumTypes[5] +} + +func (x EconomyStoreType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use EconomyStoreType.Descriptor instead. +func (EconomyStoreType) EnumDescriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{5} +} + +// Types of incentives. +type IncentiveType int32 + +const ( + // Unspecified. Defaults to INVITE. + IncentiveType_INCENTIVE_TYPE_UNSPECIFIED IncentiveType = 0 + // An invite with an associated incentive reward. + IncentiveType_INCENTIVE_TYPE_INVITE IncentiveType = 1 +) + +// Enum value maps for IncentiveType. +var ( + IncentiveType_name = map[int32]string{ + 0: "INCENTIVE_TYPE_UNSPECIFIED", + 1: "INCENTIVE_TYPE_INVITE", + } + IncentiveType_value = map[string]int32{ + "INCENTIVE_TYPE_UNSPECIFIED": 0, + "INCENTIVE_TYPE_INVITE": 1, + } +) + +func (x IncentiveType) Enum() *IncentiveType { + p := new(IncentiveType) + *p = x + return p +} + +func (x IncentiveType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (IncentiveType) Descriptor() protoreflect.EnumDescriptor { + return file_hiro_proto_enumTypes[6].Descriptor() +} + +func (IncentiveType) Type() protoreflect.EnumType { + return &file_hiro_proto_enumTypes[6] +} + +func (x IncentiveType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use IncentiveType.Descriptor instead. +func (IncentiveType) EnumDescriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{6} +} + +// The state of a user's participation in a challenge. +type ChallengeState int32 + +const ( + // There is no applicable state + ChallengeState_CHALLENGE_STATE_NONE ChallengeState = 0 + // The user has a pending invitation to the challenge. + ChallengeState_CHALLENGE_STATE_INVITED ChallengeState = 1 + // The challenge was accepted. + ChallengeState_CHALLENGE_STATE_JOINED ChallengeState = 2 + // The challenge was claimed. + ChallengeState_CHALLENGE_STATE_CLAIMED ChallengeState = 3 + // The challenge was declined. + ChallengeState_CHALLENGE_STATE_DECLINED ChallengeState = 4 + // The challenge was joined but later left. + ChallengeState_CHALLENGE_STATE_LEFT ChallengeState = 5 +) + +// Enum value maps for ChallengeState. +var ( + ChallengeState_name = map[int32]string{ + 0: "CHALLENGE_STATE_NONE", + 1: "CHALLENGE_STATE_INVITED", + 2: "CHALLENGE_STATE_JOINED", + 3: "CHALLENGE_STATE_CLAIMED", + 4: "CHALLENGE_STATE_DECLINED", + 5: "CHALLENGE_STATE_LEFT", + } + ChallengeState_value = map[string]int32{ + "CHALLENGE_STATE_NONE": 0, + "CHALLENGE_STATE_INVITED": 1, + "CHALLENGE_STATE_JOINED": 2, + "CHALLENGE_STATE_CLAIMED": 3, + "CHALLENGE_STATE_DECLINED": 4, + "CHALLENGE_STATE_LEFT": 5, + } +) + +func (x ChallengeState) Enum() *ChallengeState { + p := new(ChallengeState) + *p = x + return p +} + +func (x ChallengeState) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ChallengeState) Descriptor() protoreflect.EnumDescriptor { + return file_hiro_proto_enumTypes[7].Descriptor() +} + +func (ChallengeState) Type() protoreflect.EnumType { + return &file_hiro_proto_enumTypes[7] +} + +func (x ChallengeState) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ChallengeState.Descriptor instead. +func (ChallengeState) EnumDescriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{7} +} + +// The states of a Tutorial. +type TutorialState int32 + +const ( + // The Tutorial has not been accepted/declined by the user yet. + TutorialState_TUTORIAL_STATE_NONE TutorialState = 0 + // The Tutorial was accepted. + TutorialState_TUTORIAL_STATE_ACCEPTED TutorialState = 1 + // The Tutorial was declined. + TutorialState_TUTORIAL_STATE_DECLINED TutorialState = 2 + // The Tutorial is in progress. + TutorialState_TUTORIAL_STATE_IN_PROGRESS TutorialState = 3 + // The Tutorial has been completed. + TutorialState_TUTORIAL_STATE_COMPLETED TutorialState = 4 + // The Tutorial has been abandoned. + TutorialState_TUTORIAL_STATE_ABANDONED TutorialState = 5 +) + +// Enum value maps for TutorialState. +var ( + TutorialState_name = map[int32]string{ + 0: "TUTORIAL_STATE_NONE", + 1: "TUTORIAL_STATE_ACCEPTED", + 2: "TUTORIAL_STATE_DECLINED", + 3: "TUTORIAL_STATE_IN_PROGRESS", + 4: "TUTORIAL_STATE_COMPLETED", + 5: "TUTORIAL_STATE_ABANDONED", + } + TutorialState_value = map[string]int32{ + "TUTORIAL_STATE_NONE": 0, + "TUTORIAL_STATE_ACCEPTED": 1, + "TUTORIAL_STATE_DECLINED": 2, + "TUTORIAL_STATE_IN_PROGRESS": 3, + "TUTORIAL_STATE_COMPLETED": 4, + "TUTORIAL_STATE_ABANDONED": 5, + } +) + +func (x TutorialState) Enum() *TutorialState { + p := new(TutorialState) + *p = x + return p +} + +func (x TutorialState) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (TutorialState) Descriptor() protoreflect.EnumDescriptor { + return file_hiro_proto_enumTypes[8].Descriptor() +} + +func (TutorialState) Type() protoreflect.EnumType { + return &file_hiro_proto_enumTypes[8] +} + +func (x TutorialState) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use TutorialState.Descriptor instead. +func (TutorialState) EnumDescriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{8} +} + +// The cost(s) associated with permanently unlocking a progression. +type ProgressionCost struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The items which will be deducted. + Items map[string]int64 `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // The currencies which will be deducted. + Currencies map[string]int64 `protobuf:"bytes,2,rep,name=currencies,proto3" json:"currencies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *ProgressionCost) Reset() { + *x = ProgressionCost{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProgressionCost) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProgressionCost) ProtoMessage() {} + +func (x *ProgressionCost) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ProgressionCost.ProtoReflect.Descriptor instead. +func (*ProgressionCost) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{0} +} + +func (x *ProgressionCost) GetItems() map[string]int64 { + if x != nil { + return x.Items + } + return nil +} + +func (x *ProgressionCost) GetCurrencies() map[string]int64 { + if x != nil { + return x.Currencies + } + return nil +} + +// Preconditions associated with a progression. +type ProgressionPreconditions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Counts required. + Counts map[string]int64 `protobuf:"bytes,1,rep,name=counts,proto3" json:"counts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Purchase cost paid. + Cost *ProgressionCost `protobuf:"bytes,2,opt,name=cost,proto3" json:"cost,omitempty"` + // Other progressions. + Progressions []string `protobuf:"bytes,3,rep,name=progressions,proto3" json:"progressions,omitempty"` + // Achievements. + Achievements []string `protobuf:"bytes,4,rep,name=achievements,proto3" json:"achievements,omitempty"` + // Items with associated minimum counts. + ItemsMin map[string]int64 `protobuf:"bytes,5,rep,name=items_min,json=itemsMin,proto3" json:"items_min,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Items with associated maximum counts. + ItemsMax map[string]int64 `protobuf:"bytes,6,rep,name=items_max,json=itemsMax,proto3" json:"items_max,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Stats with associated minimum values. + StatsMin map[string]int64 `protobuf:"bytes,7,rep,name=stats_min,json=statsMin,proto3" json:"stats_min,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Stats with associated maximum values. + StatsMax map[string]int64 `protobuf:"bytes,8,rep,name=stats_max,json=statsMax,proto3" json:"stats_max,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Energies with associated minimum counts. + EnergyMin map[string]int64 `protobuf:"bytes,9,rep,name=energy_min,json=energyMin,proto3" json:"energy_min,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Energies with associated maximum counts. + EnergyMax map[string]int64 `protobuf:"bytes,10,rep,name=energy_max,json=energyMax,proto3" json:"energy_max,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Currencies with associated minimum counts. + CurrencyMin map[string]int64 `protobuf:"bytes,11,rep,name=currency_min,json=currencyMin,proto3" json:"currency_min,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Currencies with associated maximum counts. + CurrencyMax map[string]int64 `protobuf:"bytes,12,rep,name=currency_max,json=currencyMax,proto3" json:"currency_max,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *ProgressionPreconditions) Reset() { + *x = ProgressionPreconditions{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProgressionPreconditions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProgressionPreconditions) ProtoMessage() {} + +func (x *ProgressionPreconditions) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ProgressionPreconditions.ProtoReflect.Descriptor instead. +func (*ProgressionPreconditions) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{1} +} + +func (x *ProgressionPreconditions) GetCounts() map[string]int64 { + if x != nil { + return x.Counts + } + return nil +} + +func (x *ProgressionPreconditions) GetCost() *ProgressionCost { + if x != nil { + return x.Cost + } + return nil +} + +func (x *ProgressionPreconditions) GetProgressions() []string { + if x != nil { + return x.Progressions + } + return nil +} + +func (x *ProgressionPreconditions) GetAchievements() []string { + if x != nil { + return x.Achievements + } + return nil +} + +func (x *ProgressionPreconditions) GetItemsMin() map[string]int64 { + if x != nil { + return x.ItemsMin + } + return nil +} + +func (x *ProgressionPreconditions) GetItemsMax() map[string]int64 { + if x != nil { + return x.ItemsMax + } + return nil +} + +func (x *ProgressionPreconditions) GetStatsMin() map[string]int64 { + if x != nil { + return x.StatsMin + } + return nil +} + +func (x *ProgressionPreconditions) GetStatsMax() map[string]int64 { + if x != nil { + return x.StatsMax + } + return nil +} + +func (x *ProgressionPreconditions) GetEnergyMin() map[string]int64 { + if x != nil { + return x.EnergyMin + } + return nil +} + +func (x *ProgressionPreconditions) GetEnergyMax() map[string]int64 { + if x != nil { + return x.EnergyMax + } + return nil +} + +func (x *ProgressionPreconditions) GetCurrencyMin() map[string]int64 { + if x != nil { + return x.CurrencyMin + } + return nil +} + +func (x *ProgressionPreconditions) GetCurrencyMax() map[string]int64 { + if x != nil { + return x.CurrencyMax + } + return nil +} + +// A complex set of progression preconditions. +type ProgressionPreconditionsBlock struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Direct preconditions. + Direct *ProgressionPreconditions `protobuf:"bytes,1,opt,name=direct,proto3" json:"direct,omitempty"` + // Operator for any nested block. + Operator ProgressionPreconditionsOperator `protobuf:"varint,2,opt,name=operator,proto3,enum=hiro.ProgressionPreconditionsOperator" json:"operator,omitempty"` + // Nested block of preconditions, if any. + Nested *ProgressionPreconditionsBlock `protobuf:"bytes,3,opt,name=nested,proto3" json:"nested,omitempty"` +} + +func (x *ProgressionPreconditionsBlock) Reset() { + *x = ProgressionPreconditionsBlock{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProgressionPreconditionsBlock) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProgressionPreconditionsBlock) ProtoMessage() {} + +func (x *ProgressionPreconditionsBlock) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ProgressionPreconditionsBlock.ProtoReflect.Descriptor instead. +func (*ProgressionPreconditionsBlock) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{2} +} + +func (x *ProgressionPreconditionsBlock) GetDirect() *ProgressionPreconditions { + if x != nil { + return x.Direct + } + return nil +} + +func (x *ProgressionPreconditionsBlock) GetOperator() ProgressionPreconditionsOperator { + if x != nil { + return x.Operator + } + return ProgressionPreconditionsOperator_PROGRESSION_PRECONDITIONS_OPERATOR_UNSPECIFIED +} + +func (x *ProgressionPreconditionsBlock) GetNested() *ProgressionPreconditionsBlock { + if x != nil { + return x.Nested + } + return nil +} + +// A progression element which can be unlocked to access further progressions. +type Progression struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the progression. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The name of the progression. May be an i18n code. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // A description of the progression. May be an i18n code. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // The category to group the progression together with others. + Category string `protobuf:"bytes,4,opt,name=category,proto3" json:"category,omitempty"` + // Current count, if any. + Counts map[string]int64 `protobuf:"bytes,5,rep,name=counts,proto3" json:"counts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Additional metadata properties. + AdditionalProperties map[string]string `protobuf:"bytes,6,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Flag indicating unlock status. + Unlocked bool `protobuf:"varint,7,opt,name=unlocked,proto3" json:"unlocked,omitempty"` + // All preconditions. + Preconditions *ProgressionPreconditionsBlock `protobuf:"bytes,8,opt,name=preconditions,proto3" json:"preconditions,omitempty"` + // Unmet preconditions. + UnmetPreconditions *ProgressionPreconditionsBlock `protobuf:"bytes,9,opt,name=unmet_preconditions,json=unmetPreconditions,proto3" json:"unmet_preconditions,omitempty"` + // Flag indicating if unconditional updates are allowed. + UnconditionalUpdates bool `protobuf:"varint,10,opt,name=unconditional_updates,json=unconditionalUpdates,proto3" json:"unconditional_updates,omitempty"` + // Flag indicating if the progression remains unlocked permanently once unlocked the first time. + PermanentUnlock bool `protobuf:"varint,11,opt,name=permanent_unlock,json=permanentUnlock,proto3" json:"permanent_unlock,omitempty"` +} + +func (x *Progression) Reset() { + *x = Progression{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Progression) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Progression) ProtoMessage() {} + +func (x *Progression) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Progression.ProtoReflect.Descriptor instead. +func (*Progression) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{3} +} + +func (x *Progression) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Progression) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Progression) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Progression) GetCategory() string { + if x != nil { + return x.Category + } + return "" +} + +func (x *Progression) GetCounts() map[string]int64 { + if x != nil { + return x.Counts + } + return nil +} + +func (x *Progression) GetAdditionalProperties() map[string]string { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +func (x *Progression) GetUnlocked() bool { + if x != nil { + return x.Unlocked + } + return false +} + +func (x *Progression) GetPreconditions() *ProgressionPreconditionsBlock { + if x != nil { + return x.Preconditions + } + return nil +} + +func (x *Progression) GetUnmetPreconditions() *ProgressionPreconditionsBlock { + if x != nil { + return x.UnmetPreconditions + } + return nil +} + +func (x *Progression) GetUnconditionalUpdates() bool { + if x != nil { + return x.UnconditionalUpdates + } + return false +} + +func (x *Progression) GetPermanentUnlock() bool { + if x != nil { + return x.PermanentUnlock + } + return false +} + +// A change in a given progression, compared to a previously known state. +type ProgressionDelta struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the progression. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Potential state change. + State ProgressionDeltaState `protobuf:"varint,2,opt,name=state,proto3,enum=hiro.ProgressionDeltaState" json:"state,omitempty"` + // Changes to counts, if any. + Counts map[string]int64 `protobuf:"bytes,3,rep,name=counts,proto3" json:"counts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Changes to preconditions, if any. + Preconditions *ProgressionPreconditionsBlock `protobuf:"bytes,4,opt,name=preconditions,proto3" json:"preconditions,omitempty"` +} + +func (x *ProgressionDelta) Reset() { + *x = ProgressionDelta{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProgressionDelta) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProgressionDelta) ProtoMessage() {} + +func (x *ProgressionDelta) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ProgressionDelta.ProtoReflect.Descriptor instead. +func (*ProgressionDelta) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{4} +} + +func (x *ProgressionDelta) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ProgressionDelta) GetState() ProgressionDeltaState { + if x != nil { + return x.State + } + return ProgressionDeltaState_PROGRESSION_DELTA_STATE_UNSPECIFIED +} + +func (x *ProgressionDelta) GetCounts() map[string]int64 { + if x != nil { + return x.Counts + } + return nil +} + +func (x *ProgressionDelta) GetPreconditions() *ProgressionPreconditionsBlock { + if x != nil { + return x.Preconditions + } + return nil +} + +// All or a filtered list of progressions for a user. +type ProgressionList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Progressions keyed by progression ID. + Progressions map[string]*Progression `protobuf:"bytes,1,rep,name=progressions,proto3" json:"progressions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Progression deltas keyed by progression ID. + Deltas map[string]*ProgressionDelta `protobuf:"bytes,2,rep,name=deltas,proto3" json:"deltas,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *ProgressionList) Reset() { + *x = ProgressionList{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProgressionList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProgressionList) ProtoMessage() {} + +func (x *ProgressionList) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ProgressionList.ProtoReflect.Descriptor instead. +func (*ProgressionList) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{5} +} + +func (x *ProgressionList) GetProgressions() map[string]*Progression { + if x != nil { + return x.Progressions + } + return nil +} + +func (x *ProgressionList) GetDeltas() map[string]*ProgressionDelta { + if x != nil { + return x.Deltas + } + return nil +} + +// Request progressions for a user, optionally including previously seen state for delta calculations. +type ProgressionGetRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Optional last known progressions state, keyed by progression ID. + Progressions map[string]*Progression `protobuf:"bytes,1,rep,name=progressions,proto3" json:"progressions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *ProgressionGetRequest) Reset() { + *x = ProgressionGetRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProgressionGetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProgressionGetRequest) ProtoMessage() {} + +func (x *ProgressionGetRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ProgressionGetRequest.ProtoReflect.Descriptor instead. +func (*ProgressionGetRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{6} +} + +func (x *ProgressionGetRequest) GetProgressions() map[string]*Progression { + if x != nil { + return x.Progressions + } + return nil +} + +// Request to permanently unlock a progression, if supported by that specific progression. +type ProgressionPurchaseRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ID of the progression to permanently unlock. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *ProgressionPurchaseRequest) Reset() { + *x = ProgressionPurchaseRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProgressionPurchaseRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProgressionPurchaseRequest) ProtoMessage() {} + +func (x *ProgressionPurchaseRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ProgressionPurchaseRequest.ProtoReflect.Descriptor instead. +func (*ProgressionPurchaseRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{7} +} + +func (x *ProgressionPurchaseRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +// Request to update a progression, if supported by that specific progression. +type ProgressionUpdateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ID of the progression to update. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // One or more counts to add to the progression. + Counts map[string]int64 `protobuf:"bytes,2,rep,name=counts,proto3" json:"counts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *ProgressionUpdateRequest) Reset() { + *x = ProgressionUpdateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProgressionUpdateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProgressionUpdateRequest) ProtoMessage() {} + +func (x *ProgressionUpdateRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ProgressionUpdateRequest.ProtoReflect.Descriptor instead. +func (*ProgressionUpdateRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{8} +} + +func (x *ProgressionUpdateRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ProgressionUpdateRequest) GetCounts() map[string]int64 { + if x != nil { + return x.Counts + } + return nil +} + +// Request to reset progression progress. +type ProgressionResetRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The progression IDs to reset. + Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` +} + +func (x *ProgressionResetRequest) Reset() { + *x = ProgressionResetRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProgressionResetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProgressionResetRequest) ProtoMessage() {} + +func (x *ProgressionResetRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ProgressionResetRequest.ProtoReflect.Descriptor instead. +func (*ProgressionResetRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{9} +} + +func (x *ProgressionResetRequest) GetIds() []string { + if x != nil { + return x.Ids + } + return nil +} + +// Describes a single stat update. +type StatUpdate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Name. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Value. + Value int64 `protobuf:"varint,2,opt,name=value,proto3" json:"value,omitempty"` + // Operator. + Operator StatUpdateOperator `protobuf:"varint,3,opt,name=operator,proto3,enum=hiro.StatUpdateOperator" json:"operator,omitempty"` +} + +func (x *StatUpdate) Reset() { + *x = StatUpdate{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StatUpdate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatUpdate) ProtoMessage() {} + +func (x *StatUpdate) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatUpdate.ProtoReflect.Descriptor instead. +func (*StatUpdate) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{10} +} + +func (x *StatUpdate) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *StatUpdate) GetValue() int64 { + if x != nil { + return x.Value + } + return 0 +} + +func (x *StatUpdate) GetOperator() StatUpdateOperator { + if x != nil { + return x.Operator + } + return StatUpdateOperator_STAT_UPDATE_OPERATOR_UNSPECIFIED +} + +// Request an optionally batched stats update. +type StatUpdateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Public stat updates. + Public []*StatUpdate `protobuf:"bytes,1,rep,name=public,proto3" json:"public,omitempty"` + // Private stat updates. + Private []*StatUpdate `protobuf:"bytes,2,rep,name=private,proto3" json:"private,omitempty"` +} + +func (x *StatUpdateRequest) Reset() { + *x = StatUpdateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StatUpdateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatUpdateRequest) ProtoMessage() {} + +func (x *StatUpdateRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatUpdateRequest.ProtoReflect.Descriptor instead. +func (*StatUpdateRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{11} +} + +func (x *StatUpdateRequest) GetPublic() []*StatUpdate { + if x != nil { + return x.Public + } + return nil +} + +func (x *StatUpdateRequest) GetPrivate() []*StatUpdate { + if x != nil { + return x.Private + } + return nil +} + +// A single stat with associated information. +type Stat struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Name. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Indicator if this belongs to public or private stats. + Public bool `protobuf:"varint,2,opt,name=public,proto3" json:"public,omitempty"` + // Update time in UTC seconds. + UpdateTimeSec int64 `protobuf:"varint,3,opt,name=update_time_sec,json=updateTimeSec,proto3" json:"update_time_sec,omitempty"` + // Current value. + Value int64 `protobuf:"varint,4,opt,name=value,proto3" json:"value,omitempty"` + // Number of values submitted. + Count int64 `protobuf:"varint,5,opt,name=count,proto3" json:"count,omitempty"` + // Total of all submitted values. + Total int64 `protobuf:"varint,6,opt,name=total,proto3" json:"total,omitempty"` + // Smallest value submitted. + Min int64 `protobuf:"varint,7,opt,name=min,proto3" json:"min,omitempty"` + // Largest value submitted. + Max int64 `protobuf:"varint,8,opt,name=max,proto3" json:"max,omitempty"` + // First value submitted. + First int64 `protobuf:"varint,9,opt,name=first,proto3" json:"first,omitempty"` + // Latest value submitted. + Last int64 `protobuf:"varint,10,opt,name=last,proto3" json:"last,omitempty"` + // Additional properties. + AdditionalProperties *structpb.Struct `protobuf:"bytes,11,opt,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` +} + +func (x *Stat) Reset() { + *x = Stat{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Stat) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Stat) ProtoMessage() {} + +func (x *Stat) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Stat.ProtoReflect.Descriptor instead. +func (*Stat) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{12} +} + +func (x *Stat) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Stat) GetPublic() bool { + if x != nil { + return x.Public + } + return false +} + +func (x *Stat) GetUpdateTimeSec() int64 { + if x != nil { + return x.UpdateTimeSec + } + return 0 +} + +func (x *Stat) GetValue() int64 { + if x != nil { + return x.Value + } + return 0 +} + +func (x *Stat) GetCount() int64 { + if x != nil { + return x.Count + } + return 0 +} + +func (x *Stat) GetTotal() int64 { + if x != nil { + return x.Total + } + return 0 +} + +func (x *Stat) GetMin() int64 { + if x != nil { + return x.Min + } + return 0 +} + +func (x *Stat) GetMax() int64 { + if x != nil { + return x.Max + } + return 0 +} + +func (x *Stat) GetFirst() int64 { + if x != nil { + return x.First + } + return 0 +} + +func (x *Stat) GetLast() int64 { + if x != nil { + return x.Last + } + return 0 +} + +func (x *Stat) GetAdditionalProperties() *structpb.Struct { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +// A list of stats all belonging to one user. +type StatList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Public stat names and their associated data. + Public map[string]*Stat `protobuf:"bytes,1,rep,name=public,proto3" json:"public,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Private stat names and their associated data. + Private map[string]*Stat `protobuf:"bytes,2,rep,name=private,proto3" json:"private,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *StatList) Reset() { + *x = StatList{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StatList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatList) ProtoMessage() {} + +func (x *StatList) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatList.ProtoReflect.Descriptor instead. +func (*StatList) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{13} +} + +func (x *StatList) GetPublic() map[string]*Stat { + if x != nil { + return x.Public + } + return nil +} + +func (x *StatList) GetPrivate() map[string]*Stat { + if x != nil { + return x.Private + } + return nil +} + +// A receipt reply from a channel message send operation. +type ChannelMessageAck struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The channel the message was sent to. + ChannelId string `protobuf:"bytes,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` + // The unique ID assigned to the message. + MessageId string `protobuf:"bytes,2,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` + // The code representing a message type or category. + Code int32 `protobuf:"varint,3,opt,name=code,proto3" json:"code,omitempty"` + // Username of the message sender. + Username string `protobuf:"bytes,4,opt,name=username,proto3" json:"username,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the message was created. + CreateTime int64 `protobuf:"varint,5,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the message was last updated. + UpdateTime int64 `protobuf:"varint,6,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` + // True if the message was persisted to the channel's history, false otherwise. + Persistent bool `protobuf:"varint,7,opt,name=persistent,proto3" json:"persistent,omitempty"` + // The name of the chat room, or an empty string if this message was not sent through a chat room. + RoomName string `protobuf:"bytes,8,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` + // The ID of the group, or an empty string if this message was not sent through a group channel. + GroupId string `protobuf:"bytes,9,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + // The ID of the first DM user, or an empty string if this message was not sent through a DM chat. + UserIdOne string `protobuf:"bytes,10,opt,name=user_id_one,json=userIdOne,proto3" json:"user_id_one,omitempty"` + // The ID of the second DM user, or an empty string if this message was not sent through a DM chat. + UserIdTwo string `protobuf:"bytes,11,opt,name=user_id_two,json=userIdTwo,proto3" json:"user_id_two,omitempty"` +} + +func (x *ChannelMessageAck) Reset() { + *x = ChannelMessageAck{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChannelMessageAck) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChannelMessageAck) ProtoMessage() {} + +func (x *ChannelMessageAck) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChannelMessageAck.ProtoReflect.Descriptor instead. +func (*ChannelMessageAck) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{14} +} + +func (x *ChannelMessageAck) GetChannelId() string { + if x != nil { + return x.ChannelId + } + return "" +} + +func (x *ChannelMessageAck) GetMessageId() string { + if x != nil { + return x.MessageId + } + return "" +} + +func (x *ChannelMessageAck) GetCode() int32 { + if x != nil { + return x.Code + } + return 0 +} + +func (x *ChannelMessageAck) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *ChannelMessageAck) GetCreateTime() int64 { + if x != nil { + return x.CreateTime + } + return 0 +} + +func (x *ChannelMessageAck) GetUpdateTime() int64 { + if x != nil { + return x.UpdateTime + } + return 0 +} + +func (x *ChannelMessageAck) GetPersistent() bool { + if x != nil { + return x.Persistent + } + return false +} + +func (x *ChannelMessageAck) GetRoomName() string { + if x != nil { + return x.RoomName + } + return "" +} + +func (x *ChannelMessageAck) GetGroupId() string { + if x != nil { + return x.GroupId + } + return "" +} + +func (x *ChannelMessageAck) GetUserIdOne() string { + if x != nil { + return x.UserIdOne + } + return "" +} + +func (x *ChannelMessageAck) GetUserIdTwo() string { + if x != nil { + return x.UserIdTwo + } + return "" +} + +// Update or create the mobile push device tokens and preferences. +type DevicePrefsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The device ID to set. + DeviceId string `protobuf:"bytes,1,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` + // The push token from the Android device. This or 'push_token_ios' must be set. + PushTokenAndroid string `protobuf:"bytes,2,opt,name=push_token_android,json=pushTokenAndroid,proto3" json:"push_token_android,omitempty"` + // The push token from the iOS device. This or 'push_token_android' must be set. + PushTokenIos string `protobuf:"bytes,3,opt,name=push_token_ios,json=pushTokenIos,proto3" json:"push_token_ios,omitempty"` + // Additional device preferences for push events. Must be owned by the user. + Preferences map[string]bool `protobuf:"bytes,4,rep,name=preferences,proto3" json:"preferences,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *DevicePrefsRequest) Reset() { + *x = DevicePrefsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DevicePrefsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DevicePrefsRequest) ProtoMessage() {} + +func (x *DevicePrefsRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DevicePrefsRequest.ProtoReflect.Descriptor instead. +func (*DevicePrefsRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{15} +} + +func (x *DevicePrefsRequest) GetDeviceId() string { + if x != nil { + return x.DeviceId + } + return "" +} + +func (x *DevicePrefsRequest) GetPushTokenAndroid() string { + if x != nil { + return x.PushTokenAndroid + } + return "" +} + +func (x *DevicePrefsRequest) GetPushTokenIos() string { + if x != nil { + return x.PushTokenIos + } + return "" +} + +func (x *DevicePrefsRequest) GetPreferences() map[string]bool { + if x != nil { + return x.Preferences + } + return nil +} + +// Inventory item granted. +type RewardInventoryItem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the item. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The count granted of the item. + Count int64 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"` + // The properties with string values. + StringProperties map[string]string `protobuf:"bytes,3,rep,name=string_properties,json=stringProperties,proto3" json:"string_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // The properties with numeric values. + NumericProperties map[string]float64 `protobuf:"bytes,4,rep,name=numeric_properties,json=numericProperties,proto3" json:"numeric_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"` + // The instance ID of the item. + InstanceId string `protobuf:"bytes,5,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` +} + +func (x *RewardInventoryItem) Reset() { + *x = RewardInventoryItem{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RewardInventoryItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RewardInventoryItem) ProtoMessage() {} + +func (x *RewardInventoryItem) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RewardInventoryItem.ProtoReflect.Descriptor instead. +func (*RewardInventoryItem) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{16} +} + +func (x *RewardInventoryItem) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *RewardInventoryItem) GetCount() int64 { + if x != nil { + return x.Count + } + return 0 +} + +func (x *RewardInventoryItem) GetStringProperties() map[string]string { + if x != nil { + return x.StringProperties + } + return nil +} + +func (x *RewardInventoryItem) GetNumericProperties() map[string]float64 { + if x != nil { + return x.NumericProperties + } + return nil +} + +func (x *RewardInventoryItem) GetInstanceId() string { + if x != nil { + return x.InstanceId + } + return "" +} + +// Energy modifier granted. +type RewardEnergyModifier struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of they modifier granted. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The energy modifier operator. + Operator string `protobuf:"bytes,2,opt,name=operator,proto3" json:"operator,omitempty"` + // The value to apply. Its behavior depends on the operator. + Value int64 `protobuf:"varint,3,opt,name=value,proto3" json:"value,omitempty"` + // The duration of the energy modifier in seconds. + DurationSec uint64 `protobuf:"varint,4,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"` + // The weight of the energy modifier, if weighted. Otherwise, -1. + Weight int64 `protobuf:"varint,5,opt,name=weight,proto3" json:"weight,omitempty"` +} + +func (x *RewardEnergyModifier) Reset() { + *x = RewardEnergyModifier{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RewardEnergyModifier) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RewardEnergyModifier) ProtoMessage() {} + +func (x *RewardEnergyModifier) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RewardEnergyModifier.ProtoReflect.Descriptor instead. +func (*RewardEnergyModifier) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{17} +} + +func (x *RewardEnergyModifier) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *RewardEnergyModifier) GetOperator() string { + if x != nil { + return x.Operator + } + return "" +} + +func (x *RewardEnergyModifier) GetValue() int64 { + if x != nil { + return x.Value + } + return 0 +} + +func (x *RewardEnergyModifier) GetDurationSec() uint64 { + if x != nil { + return x.DurationSec + } + return 0 +} + +func (x *RewardEnergyModifier) GetWeight() int64 { + if x != nil { + return x.Weight + } + return 0 +} + +// A reward modifier temporally adjusts the way all rewards are handled in the economy. +type RewardModifier struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the reward content to modify. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The type of reward content to modify. + Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` + // The operator to apply. + Operator string `protobuf:"bytes,3,opt,name=operator,proto3" json:"operator,omitempty"` + // The value to apply. Its behavior depends on the operator. + Value int64 `protobuf:"varint,4,opt,name=value,proto3" json:"value,omitempty"` + // The duration of the item modifier in seconds. + DurationSec uint64 `protobuf:"varint,5,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"` +} + +func (x *RewardModifier) Reset() { + *x = RewardModifier{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RewardModifier) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RewardModifier) ProtoMessage() {} + +func (x *RewardModifier) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RewardModifier.ProtoReflect.Descriptor instead. +func (*RewardModifier) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{18} +} + +func (x *RewardModifier) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *RewardModifier) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *RewardModifier) GetOperator() string { + if x != nil { + return x.Operator + } + return "" +} + +func (x *RewardModifier) GetValue() int64 { + if x != nil { + return x.Value + } + return 0 +} + +func (x *RewardModifier) GetDurationSec() uint64 { + if x != nil { + return x.DurationSec + } + return 0 +} + +// A reward modifier that is currently active. +type ActiveRewardModifier struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the reward content to modify. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The type of reward content to modify. + Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` + // The operator to apply. + Operator string `protobuf:"bytes,3,opt,name=operator,proto3" json:"operator,omitempty"` + // The value to apply. Its behavior depends on the operator. + Value int64 `protobuf:"varint,4,opt,name=value,proto3" json:"value,omitempty"` + // The start time when this reward modifier was activated. + StartTimeSec int64 `protobuf:"varint,5,opt,name=start_time_sec,json=startTimeSec,proto3" json:"start_time_sec,omitempty"` + // The time when this reward modifier will expire. + EndTimeSec int64 `protobuf:"varint,6,opt,name=end_time_sec,json=endTimeSec,proto3" json:"end_time_sec,omitempty"` +} + +func (x *ActiveRewardModifier) Reset() { + *x = ActiveRewardModifier{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ActiveRewardModifier) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActiveRewardModifier) ProtoMessage() {} + +func (x *ActiveRewardModifier) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActiveRewardModifier.ProtoReflect.Descriptor instead. +func (*ActiveRewardModifier) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{19} +} + +func (x *ActiveRewardModifier) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ActiveRewardModifier) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *ActiveRewardModifier) GetOperator() string { + if x != nil { + return x.Operator + } + return "" +} + +func (x *ActiveRewardModifier) GetValue() int64 { + if x != nil { + return x.Value + } + return 0 +} + +func (x *ActiveRewardModifier) GetStartTimeSec() int64 { + if x != nil { + return x.StartTimeSec + } + return 0 +} + +func (x *ActiveRewardModifier) GetEndTimeSec() int64 { + if x != nil { + return x.EndTimeSec + } + return 0 +} + +// Rewards granted to each member of the team. +type TeamMemberReward struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The items granted. Keyed by item ID. + Items map[string]int64 `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // The currencies granted. + Currencies map[string]int64 `protobuf:"bytes,2,rep,name=currencies,proto3" json:"currencies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // The energy granted. + Energies map[string]int32 `protobuf:"bytes,3,rep,name=energies,proto3" json:"energies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // The energy modifier granted. + EnergyModifiers []*RewardEnergyModifier `protobuf:"bytes,4,rep,name=energy_modifiers,json=energyModifiers,proto3" json:"energy_modifiers,omitempty"` + // The reward modifiers granted. + RewardModifiers []*RewardModifier `protobuf:"bytes,5,rep,name=reward_modifiers,json=rewardModifiers,proto3" json:"reward_modifiers,omitempty"` + // When the reward was granted, in UNIX time. + GrantTimeSec int64 `protobuf:"varint,6,opt,name=grant_time_sec,json=grantTimeSec,proto3" json:"grant_time_sec,omitempty"` + // The item instances granted. Keyed by item instance ID. + ItemInstances map[string]*RewardInventoryItem `protobuf:"bytes,7,rep,name=item_instances,json=itemInstances,proto3" json:"item_instances,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *TeamMemberReward) Reset() { + *x = TeamMemberReward{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamMemberReward) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamMemberReward) ProtoMessage() {} + +func (x *TeamMemberReward) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamMemberReward.ProtoReflect.Descriptor instead. +func (*TeamMemberReward) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{20} +} + +func (x *TeamMemberReward) GetItems() map[string]int64 { + if x != nil { + return x.Items + } + return nil +} + +func (x *TeamMemberReward) GetCurrencies() map[string]int64 { + if x != nil { + return x.Currencies + } + return nil +} + +func (x *TeamMemberReward) GetEnergies() map[string]int32 { + if x != nil { + return x.Energies + } + return nil +} + +func (x *TeamMemberReward) GetEnergyModifiers() []*RewardEnergyModifier { + if x != nil { + return x.EnergyModifiers + } + return nil +} + +func (x *TeamMemberReward) GetRewardModifiers() []*RewardModifier { + if x != nil { + return x.RewardModifiers + } + return nil +} + +func (x *TeamMemberReward) GetGrantTimeSec() int64 { + if x != nil { + return x.GrantTimeSec + } + return 0 +} + +func (x *TeamMemberReward) GetItemInstances() map[string]*RewardInventoryItem { + if x != nil { + return x.ItemInstances + } + return nil +} + +// Rewards granted to the team. +type TeamReward struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The items granted. Keyed by item ID. + Items map[string]int64 `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // The currencies granted. + Currencies map[string]int64 `protobuf:"bytes,2,rep,name=currencies,proto3" json:"currencies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // The reward modifiers granted. + RewardModifiers []*RewardModifier `protobuf:"bytes,3,rep,name=reward_modifiers,json=rewardModifiers,proto3" json:"reward_modifiers,omitempty"` + // The reward modifiers granted that will apply to team members. + MemberRewardModifiers []*RewardModifier `protobuf:"bytes,4,rep,name=member_reward_modifiers,json=memberRewardModifiers,proto3" json:"member_reward_modifiers,omitempty"` + // When the reward was granted, in UNIX time. + GrantTimeSec int64 `protobuf:"varint,5,opt,name=grant_time_sec,json=grantTimeSec,proto3" json:"grant_time_sec,omitempty"` + // The item instances granted. Keyed by item instance ID. + ItemInstances map[string]*RewardInventoryItem `protobuf:"bytes,6,rep,name=item_instances,json=itemInstances,proto3" json:"item_instances,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Indicates if this reward was sent to the team reward mailbox, and what its expiry will be. + ToMailboxExpirySec int64 `protobuf:"varint,7,opt,name=to_mailbox_expiry_sec,json=toMailboxExpirySec,proto3" json:"to_mailbox_expiry_sec,omitempty"` + // Reward granted to each team member. + MemberReward *TeamMemberReward `protobuf:"bytes,8,opt,name=member_reward,json=memberReward,proto3" json:"member_reward,omitempty"` +} + +func (x *TeamReward) Reset() { + *x = TeamReward{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamReward) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamReward) ProtoMessage() {} + +func (x *TeamReward) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamReward.ProtoReflect.Descriptor instead. +func (*TeamReward) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{21} +} + +func (x *TeamReward) GetItems() map[string]int64 { + if x != nil { + return x.Items + } + return nil +} + +func (x *TeamReward) GetCurrencies() map[string]int64 { + if x != nil { + return x.Currencies + } + return nil +} + +func (x *TeamReward) GetRewardModifiers() []*RewardModifier { + if x != nil { + return x.RewardModifiers + } + return nil +} + +func (x *TeamReward) GetMemberRewardModifiers() []*RewardModifier { + if x != nil { + return x.MemberRewardModifiers + } + return nil +} + +func (x *TeamReward) GetGrantTimeSec() int64 { + if x != nil { + return x.GrantTimeSec + } + return 0 +} + +func (x *TeamReward) GetItemInstances() map[string]*RewardInventoryItem { + if x != nil { + return x.ItemInstances + } + return nil +} + +func (x *TeamReward) GetToMailboxExpirySec() int64 { + if x != nil { + return x.ToMailboxExpirySec + } + return 0 +} + +func (x *TeamReward) GetMemberReward() *TeamMemberReward { + if x != nil { + return x.MemberReward + } + return nil +} + +// Rewards granted to the player. +type Reward struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The items granted. Keyed by item ID. + Items map[string]int64 `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // The currencies granted. + Currencies map[string]int64 `protobuf:"bytes,2,rep,name=currencies,proto3" json:"currencies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // The energy granted. + Energies map[string]int32 `protobuf:"bytes,3,rep,name=energies,proto3" json:"energies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // The energy modifier granted. + EnergyModifiers []*RewardEnergyModifier `protobuf:"bytes,4,rep,name=energy_modifiers,json=energyModifiers,proto3" json:"energy_modifiers,omitempty"` + // The reward modifiers granted. + RewardModifiers []*RewardModifier `protobuf:"bytes,5,rep,name=reward_modifiers,json=rewardModifiers,proto3" json:"reward_modifiers,omitempty"` + // When the reward was granted, in UNIX time. + GrantTimeSec int64 `protobuf:"varint,6,opt,name=grant_time_sec,json=grantTimeSec,proto3" json:"grant_time_sec,omitempty"` + // The item instances granted. Keyed by item instance ID. + ItemInstances map[string]*RewardInventoryItem `protobuf:"bytes,7,rep,name=item_instances,json=itemInstances,proto3" json:"item_instances,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Indicates if this reward was sent to the reward mailbox, and what its expiry will be. + ToMailboxExpirySec int64 `protobuf:"varint,8,opt,name=to_mailbox_expiry_sec,json=toMailboxExpirySec,proto3" json:"to_mailbox_expiry_sec,omitempty"` + // Team reward, if any. + TeamReward *TeamReward `protobuf:"bytes,9,opt,name=team_reward,json=teamReward,proto3" json:"team_reward,omitempty"` +} + +func (x *Reward) Reset() { + *x = Reward{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Reward) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Reward) ProtoMessage() {} + +func (x *Reward) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Reward.ProtoReflect.Descriptor instead. +func (*Reward) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{22} +} + +func (x *Reward) GetItems() map[string]int64 { + if x != nil { + return x.Items + } + return nil +} + +func (x *Reward) GetCurrencies() map[string]int64 { + if x != nil { + return x.Currencies + } + return nil +} + +func (x *Reward) GetEnergies() map[string]int32 { + if x != nil { + return x.Energies + } + return nil +} + +func (x *Reward) GetEnergyModifiers() []*RewardEnergyModifier { + if x != nil { + return x.EnergyModifiers + } + return nil +} + +func (x *Reward) GetRewardModifiers() []*RewardModifier { + if x != nil { + return x.RewardModifiers + } + return nil +} + +func (x *Reward) GetGrantTimeSec() int64 { + if x != nil { + return x.GrantTimeSec + } + return 0 +} + +func (x *Reward) GetItemInstances() map[string]*RewardInventoryItem { + if x != nil { + return x.ItemInstances + } + return nil +} + +func (x *Reward) GetToMailboxExpirySec() int64 { + if x != nil { + return x.ToMailboxExpirySec + } + return 0 +} + +func (x *Reward) GetTeamReward() *TeamReward { + if x != nil { + return x.TeamReward + } + return nil +} + +// A list of rewards granted to the player. +type RewardList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The rewards granted. + Rewards []*Reward `protobuf:"bytes,1,rep,name=rewards,proto3" json:"rewards,omitempty"` +} + +func (x *RewardList) Reset() { + *x = RewardList{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RewardList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RewardList) ProtoMessage() {} + +func (x *RewardList) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RewardList.ProtoReflect.Descriptor instead. +func (*RewardList) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{23} +} + +func (x *RewardList) GetRewards() []*Reward { + if x != nil { + return x.Rewards + } + return nil +} + +// A range of possible values. +type RewardRangeInt32 struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The minimum bound of the range. + Min int32 `protobuf:"varint,1,opt,name=min,proto3" json:"min,omitempty"` + // The maximum bound of the range. + Max int32 `protobuf:"varint,2,opt,name=max,proto3" json:"max,omitempty"` + // A number that the result must be a multiple of. + Multiple int32 `protobuf:"varint,3,opt,name=multiple,proto3" json:"multiple,omitempty"` +} + +func (x *RewardRangeInt32) Reset() { + *x = RewardRangeInt32{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RewardRangeInt32) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RewardRangeInt32) ProtoMessage() {} + +func (x *RewardRangeInt32) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RewardRangeInt32.ProtoReflect.Descriptor instead. +func (*RewardRangeInt32) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{24} +} + +func (x *RewardRangeInt32) GetMin() int32 { + if x != nil { + return x.Min + } + return 0 +} + +func (x *RewardRangeInt32) GetMax() int32 { + if x != nil { + return x.Max + } + return 0 +} + +func (x *RewardRangeInt32) GetMultiple() int32 { + if x != nil { + return x.Multiple + } + return 0 +} + +// A range of possible values. +type RewardRangeInt64 struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The minimum bound of the range. + Min int64 `protobuf:"varint,1,opt,name=min,proto3" json:"min,omitempty"` + // The maximum bound of the range. + Max int64 `protobuf:"varint,2,opt,name=max,proto3" json:"max,omitempty"` + // A number that the result must be a multiple of. + Multiple int64 `protobuf:"varint,3,opt,name=multiple,proto3" json:"multiple,omitempty"` +} + +func (x *RewardRangeInt64) Reset() { + *x = RewardRangeInt64{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RewardRangeInt64) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RewardRangeInt64) ProtoMessage() {} + +func (x *RewardRangeInt64) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RewardRangeInt64.ProtoReflect.Descriptor instead. +func (*RewardRangeInt64) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{25} +} + +func (x *RewardRangeInt64) GetMin() int64 { + if x != nil { + return x.Min + } + return 0 +} + +func (x *RewardRangeInt64) GetMax() int64 { + if x != nil { + return x.Max + } + return 0 +} + +func (x *RewardRangeInt64) GetMultiple() int64 { + if x != nil { + return x.Multiple + } + return 0 +} + +// A range of possible values. +type RewardRangeUInt64 struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The minimum bound of the range. + Min uint64 `protobuf:"varint,1,opt,name=min,proto3" json:"min,omitempty"` + // The maximum bound of the range. + Max uint64 `protobuf:"varint,2,opt,name=max,proto3" json:"max,omitempty"` + // A number that the result must be a multiple of. + Multiple uint64 `protobuf:"varint,3,opt,name=multiple,proto3" json:"multiple,omitempty"` +} + +func (x *RewardRangeUInt64) Reset() { + *x = RewardRangeUInt64{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RewardRangeUInt64) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RewardRangeUInt64) ProtoMessage() {} + +func (x *RewardRangeUInt64) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RewardRangeUInt64.ProtoReflect.Descriptor instead. +func (*RewardRangeUInt64) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{26} +} + +func (x *RewardRangeUInt64) GetMin() uint64 { + if x != nil { + return x.Min + } + return 0 +} + +func (x *RewardRangeUInt64) GetMax() uint64 { + if x != nil { + return x.Max + } + return 0 +} + +func (x *RewardRangeUInt64) GetMultiple() uint64 { + if x != nil { + return x.Multiple + } + return 0 +} + +// A range of possible values. +type RewardRangeDouble struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The minimum bound of the range. + Min float64 `protobuf:"fixed64,1,opt,name=min,proto3" json:"min,omitempty"` + // The maximum bound of the range. + Max float64 `protobuf:"fixed64,2,opt,name=max,proto3" json:"max,omitempty"` + // A number that the result must be a multiple of. + Multiple float64 `protobuf:"fixed64,3,opt,name=multiple,proto3" json:"multiple,omitempty"` +} + +func (x *RewardRangeDouble) Reset() { + *x = RewardRangeDouble{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RewardRangeDouble) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RewardRangeDouble) ProtoMessage() {} + +func (x *RewardRangeDouble) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RewardRangeDouble.ProtoReflect.Descriptor instead. +func (*RewardRangeDouble) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{27} +} + +func (x *RewardRangeDouble) GetMin() float64 { + if x != nil { + return x.Min + } + return 0 +} + +func (x *RewardRangeDouble) GetMax() float64 { + if x != nil { + return x.Max + } + return 0 +} + +func (x *RewardRangeDouble) GetMultiple() float64 { + if x != nil { + return x.Multiple + } + return 0 +} + +// A possible string property option. +type AvailableRewardsStringPropertyOption struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The option weight. + Weight int64 `protobuf:"varint,1,opt,name=weight,proto3" json:"weight,omitempty"` +} + +func (x *AvailableRewardsStringPropertyOption) Reset() { + *x = AvailableRewardsStringPropertyOption{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AvailableRewardsStringPropertyOption) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AvailableRewardsStringPropertyOption) ProtoMessage() {} + +func (x *AvailableRewardsStringPropertyOption) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[28] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AvailableRewardsStringPropertyOption.ProtoReflect.Descriptor instead. +func (*AvailableRewardsStringPropertyOption) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{28} +} + +func (x *AvailableRewardsStringPropertyOption) GetWeight() int64 { + if x != nil { + return x.Weight + } + return 0 +} + +// A possible string property. +type AvailableRewardsStringProperty struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The available string property options. + Options map[string]*AvailableRewardsStringPropertyOption `protobuf:"bytes,1,rep,name=options,proto3" json:"options,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // The total weight from which the options are selected. + TotalWeight int64 `protobuf:"varint,2,opt,name=total_weight,json=totalWeight,proto3" json:"total_weight,omitempty"` +} + +func (x *AvailableRewardsStringProperty) Reset() { + *x = AvailableRewardsStringProperty{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AvailableRewardsStringProperty) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AvailableRewardsStringProperty) ProtoMessage() {} + +func (x *AvailableRewardsStringProperty) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[29] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AvailableRewardsStringProperty.ProtoReflect.Descriptor instead. +func (*AvailableRewardsStringProperty) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{29} +} + +func (x *AvailableRewardsStringProperty) GetOptions() map[string]*AvailableRewardsStringPropertyOption { + if x != nil { + return x.Options + } + return nil +} + +func (x *AvailableRewardsStringProperty) GetTotalWeight() int64 { + if x != nil { + return x.TotalWeight + } + return 0 +} + +// A possible item reward. +type AvailableRewardsItem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The possible count of the reward. + Count *RewardRangeInt64 `protobuf:"bytes,1,opt,name=count,proto3" json:"count,omitempty"` + // The possible numeric properties of the reward. + NumericProperties map[string]*RewardRangeDouble `protobuf:"bytes,2,rep,name=numeric_properties,json=numericProperties,proto3" json:"numeric_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // The possible string properties of the reward. + StringProperties map[string]*AvailableRewardsStringProperty `protobuf:"bytes,3,rep,name=string_properties,json=stringProperties,proto3" json:"string_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *AvailableRewardsItem) Reset() { + *x = AvailableRewardsItem{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AvailableRewardsItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AvailableRewardsItem) ProtoMessage() {} + +func (x *AvailableRewardsItem) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[30] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AvailableRewardsItem.ProtoReflect.Descriptor instead. +func (*AvailableRewardsItem) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{30} +} + +func (x *AvailableRewardsItem) GetCount() *RewardRangeInt64 { + if x != nil { + return x.Count + } + return nil +} + +func (x *AvailableRewardsItem) GetNumericProperties() map[string]*RewardRangeDouble { + if x != nil { + return x.NumericProperties + } + return nil +} + +func (x *AvailableRewardsItem) GetStringProperties() map[string]*AvailableRewardsStringProperty { + if x != nil { + return x.StringProperties + } + return nil +} + +// A possible item reward. +type AvailableRewardsItemSet struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The number of items to draw from the set. + Count *RewardRangeInt64 `protobuf:"bytes,1,opt,name=count,proto3" json:"count,omitempty"` + // The number of repeat items that may be drawn from the set. Also includes the user's inventory. + MaxRepeats int64 `protobuf:"varint,2,opt,name=max_repeats,json=maxRepeats,proto3" json:"max_repeats,omitempty"` + // Drawn items must exist in the intersection of these sets. + Set []string `protobuf:"bytes,3,rep,name=set,proto3" json:"set,omitempty"` +} + +func (x *AvailableRewardsItemSet) Reset() { + *x = AvailableRewardsItemSet{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AvailableRewardsItemSet) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AvailableRewardsItemSet) ProtoMessage() {} + +func (x *AvailableRewardsItemSet) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[31] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AvailableRewardsItemSet.ProtoReflect.Descriptor instead. +func (*AvailableRewardsItemSet) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{31} +} + +func (x *AvailableRewardsItemSet) GetCount() *RewardRangeInt64 { + if x != nil { + return x.Count + } + return nil +} + +func (x *AvailableRewardsItemSet) GetMaxRepeats() int64 { + if x != nil { + return x.MaxRepeats + } + return 0 +} + +func (x *AvailableRewardsItemSet) GetSet() []string { + if x != nil { + return x.Set + } + return nil +} + +// A possible currency reward. +type AvailableRewardsCurrency struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The possible count of the currency. + Count *RewardRangeInt64 `protobuf:"bytes,1,opt,name=count,proto3" json:"count,omitempty"` +} + +func (x *AvailableRewardsCurrency) Reset() { + *x = AvailableRewardsCurrency{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AvailableRewardsCurrency) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AvailableRewardsCurrency) ProtoMessage() {} + +func (x *AvailableRewardsCurrency) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[32] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AvailableRewardsCurrency.ProtoReflect.Descriptor instead. +func (*AvailableRewardsCurrency) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{32} +} + +func (x *AvailableRewardsCurrency) GetCount() *RewardRangeInt64 { + if x != nil { + return x.Count + } + return nil +} + +// A possible energy reward. +type AvailableRewardsEnergy struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The possible count of the energy. + Count *RewardRangeInt32 `protobuf:"bytes,1,opt,name=count,proto3" json:"count,omitempty"` +} + +func (x *AvailableRewardsEnergy) Reset() { + *x = AvailableRewardsEnergy{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AvailableRewardsEnergy) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AvailableRewardsEnergy) ProtoMessage() {} + +func (x *AvailableRewardsEnergy) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[33] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AvailableRewardsEnergy.ProtoReflect.Descriptor instead. +func (*AvailableRewardsEnergy) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{33} +} + +func (x *AvailableRewardsEnergy) GetCount() *RewardRangeInt32 { + if x != nil { + return x.Count + } + return nil +} + +// A possible energy reward. +type AvailableRewardsEnergyModifier struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the energy to modify. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The operator of the energy modifier. + Operator string `protobuf:"bytes,2,opt,name=operator,proto3" json:"operator,omitempty"` + // The value of the energy modifier. + Value *RewardRangeInt64 `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` + // The possible duration of the modifier. + DurationSec *RewardRangeUInt64 `protobuf:"bytes,4,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"` +} + +func (x *AvailableRewardsEnergyModifier) Reset() { + *x = AvailableRewardsEnergyModifier{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AvailableRewardsEnergyModifier) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AvailableRewardsEnergyModifier) ProtoMessage() {} + +func (x *AvailableRewardsEnergyModifier) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[34] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AvailableRewardsEnergyModifier.ProtoReflect.Descriptor instead. +func (*AvailableRewardsEnergyModifier) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{34} +} + +func (x *AvailableRewardsEnergyModifier) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *AvailableRewardsEnergyModifier) GetOperator() string { + if x != nil { + return x.Operator + } + return "" +} + +func (x *AvailableRewardsEnergyModifier) GetValue() *RewardRangeInt64 { + if x != nil { + return x.Value + } + return nil +} + +func (x *AvailableRewardsEnergyModifier) GetDurationSec() *RewardRangeUInt64 { + if x != nil { + return x.DurationSec + } + return nil +} + +// A possible modifier reward. +type AvailableRewardsRewardModifier struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the reward item, currency, energy, or energy modifier to modify. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The type of reward content to modify. + Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` + // The operator of the modifier. + Operator string `protobuf:"bytes,3,opt,name=operator,proto3" json:"operator,omitempty"` + // The value of the modifier. + Value *RewardRangeInt64 `protobuf:"bytes,4,opt,name=value,proto3" json:"value,omitempty"` + // The possible duration of the modifier. + DurationSec *RewardRangeUInt64 `protobuf:"bytes,5,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"` +} + +func (x *AvailableRewardsRewardModifier) Reset() { + *x = AvailableRewardsRewardModifier{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AvailableRewardsRewardModifier) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AvailableRewardsRewardModifier) ProtoMessage() {} + +func (x *AvailableRewardsRewardModifier) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[35] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AvailableRewardsRewardModifier.ProtoReflect.Descriptor instead. +func (*AvailableRewardsRewardModifier) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{35} +} + +func (x *AvailableRewardsRewardModifier) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *AvailableRewardsRewardModifier) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *AvailableRewardsRewardModifier) GetOperator() string { + if x != nil { + return x.Operator + } + return "" +} + +func (x *AvailableRewardsRewardModifier) GetValue() *RewardRangeInt64 { + if x != nil { + return x.Value + } + return nil +} + +func (x *AvailableRewardsRewardModifier) GetDurationSec() *RewardRangeUInt64 { + if x != nil { + return x.DurationSec + } + return nil +} + +// The reward contents for available rewards. +type AvailableRewardsContents struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // All possible items from this particular reward. + Items map[string]*AvailableRewardsItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // All possible item sets from this particular reward. + ItemSets []*AvailableRewardsItemSet `protobuf:"bytes,2,rep,name=item_sets,json=itemSets,proto3" json:"item_sets,omitempty"` + // All possible currencies from this particular reward. + Currencies map[string]*AvailableRewardsCurrency `protobuf:"bytes,3,rep,name=currencies,proto3" json:"currencies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // All possible energies from this particular reward. + Energies map[string]*AvailableRewardsEnergy `protobuf:"bytes,4,rep,name=energies,proto3" json:"energies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // All possible energy reward modifiers from this particular reward. + EnergyModifiers []*AvailableRewardsEnergyModifier `protobuf:"bytes,5,rep,name=energy_modifiers,json=energyModifiers,proto3" json:"energy_modifiers,omitempty"` + // All reward modifiers from this particular reward. + RewardModifiers []*AvailableRewardsRewardModifier `protobuf:"bytes,6,rep,name=reward_modifiers,json=rewardModifiers,proto3" json:"reward_modifiers,omitempty"` + // The weight of the reward contents. + Weight int64 `protobuf:"varint,7,opt,name=weight,proto3" json:"weight,omitempty"` +} + +func (x *AvailableRewardsContents) Reset() { + *x = AvailableRewardsContents{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AvailableRewardsContents) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AvailableRewardsContents) ProtoMessage() {} + +func (x *AvailableRewardsContents) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[36] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AvailableRewardsContents.ProtoReflect.Descriptor instead. +func (*AvailableRewardsContents) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{36} +} + +func (x *AvailableRewardsContents) GetItems() map[string]*AvailableRewardsItem { + if x != nil { + return x.Items + } + return nil +} + +func (x *AvailableRewardsContents) GetItemSets() []*AvailableRewardsItemSet { + if x != nil { + return x.ItemSets + } + return nil +} + +func (x *AvailableRewardsContents) GetCurrencies() map[string]*AvailableRewardsCurrency { + if x != nil { + return x.Currencies + } + return nil +} + +func (x *AvailableRewardsContents) GetEnergies() map[string]*AvailableRewardsEnergy { + if x != nil { + return x.Energies + } + return nil +} + +func (x *AvailableRewardsContents) GetEnergyModifiers() []*AvailableRewardsEnergyModifier { + if x != nil { + return x.EnergyModifiers + } + return nil +} + +func (x *AvailableRewardsContents) GetRewardModifiers() []*AvailableRewardsRewardModifier { + if x != nil { + return x.RewardModifiers + } + return nil +} + +func (x *AvailableRewardsContents) GetWeight() int64 { + if x != nil { + return x.Weight + } + return 0 +} + +// The reward contents for available team rewards. +type AvailableTeamRewardsContents struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // All possible items from this particular reward. + Items map[string]*AvailableRewardsItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // All possible item sets from this particular reward. + ItemSets []*AvailableRewardsItemSet `protobuf:"bytes,2,rep,name=item_sets,json=itemSets,proto3" json:"item_sets,omitempty"` + // All possible currencies from this particular reward. + Currencies map[string]*AvailableRewardsCurrency `protobuf:"bytes,3,rep,name=currencies,proto3" json:"currencies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // All reward modifiers from this particular reward. + RewardModifiers []*AvailableRewardsRewardModifier `protobuf:"bytes,4,rep,name=reward_modifiers,json=rewardModifiers,proto3" json:"reward_modifiers,omitempty"` + // The weight of the reward contents. + Weight int64 `protobuf:"varint,5,opt,name=weight,proto3" json:"weight,omitempty"` +} + +func (x *AvailableTeamRewardsContents) Reset() { + *x = AvailableTeamRewardsContents{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AvailableTeamRewardsContents) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AvailableTeamRewardsContents) ProtoMessage() {} + +func (x *AvailableTeamRewardsContents) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[37] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AvailableTeamRewardsContents.ProtoReflect.Descriptor instead. +func (*AvailableTeamRewardsContents) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{37} +} + +func (x *AvailableTeamRewardsContents) GetItems() map[string]*AvailableRewardsItem { + if x != nil { + return x.Items + } + return nil +} + +func (x *AvailableTeamRewardsContents) GetItemSets() []*AvailableRewardsItemSet { + if x != nil { + return x.ItemSets + } + return nil +} + +func (x *AvailableTeamRewardsContents) GetCurrencies() map[string]*AvailableRewardsCurrency { + if x != nil { + return x.Currencies + } + return nil +} + +func (x *AvailableTeamRewardsContents) GetRewardModifiers() []*AvailableRewardsRewardModifier { + if x != nil { + return x.RewardModifiers + } + return nil +} + +func (x *AvailableTeamRewardsContents) GetWeight() int64 { + if x != nil { + return x.Weight + } + return 0 +} + +// Available rewards for each member of a team. +type AvailableTeamMemberRewards struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The guaranteed contents to grant. + Guaranteed *AvailableRewardsContents `protobuf:"bytes,1,opt,name=guaranteed,proto3" json:"guaranteed,omitempty"` + // The weighted contents to grant. + Weighted []*AvailableRewardsContents `protobuf:"bytes,2,rep,name=weighted,proto3" json:"weighted,omitempty"` + // The number of weighted reward contents to select from among the possibilities. + MaxRolls int64 `protobuf:"varint,3,opt,name=max_rolls,json=maxRolls,proto3" json:"max_rolls,omitempty"` + // The total weight that all weighted reward contents are calculated against. Auto calculated if set to 0 but can be + // set to a higher value to introduce a chance of a "none" reward. + TotalWeight int64 `protobuf:"varint,4,opt,name=total_weight,json=totalWeight,proto3" json:"total_weight,omitempty"` + // The maximum number of repeats of any given weighted reward. + MaxRepeatRolls int64 `protobuf:"varint,5,opt,name=max_repeat_rolls,json=maxRepeatRolls,proto3" json:"max_repeat_rolls,omitempty"` +} + +func (x *AvailableTeamMemberRewards) Reset() { + *x = AvailableTeamMemberRewards{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AvailableTeamMemberRewards) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AvailableTeamMemberRewards) ProtoMessage() {} + +func (x *AvailableTeamMemberRewards) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[38] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AvailableTeamMemberRewards.ProtoReflect.Descriptor instead. +func (*AvailableTeamMemberRewards) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{38} +} + +func (x *AvailableTeamMemberRewards) GetGuaranteed() *AvailableRewardsContents { + if x != nil { + return x.Guaranteed + } + return nil +} + +func (x *AvailableTeamMemberRewards) GetWeighted() []*AvailableRewardsContents { + if x != nil { + return x.Weighted + } + return nil +} + +func (x *AvailableTeamMemberRewards) GetMaxRolls() int64 { + if x != nil { + return x.MaxRolls + } + return 0 +} + +func (x *AvailableTeamMemberRewards) GetTotalWeight() int64 { + if x != nil { + return x.TotalWeight + } + return 0 +} + +func (x *AvailableTeamMemberRewards) GetMaxRepeatRolls() int64 { + if x != nil { + return x.MaxRepeatRolls + } + return 0 +} + +// Available rewards for the claimant's team. +type AvailableTeamRewards struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The guaranteed contents to grant. + Guaranteed *AvailableTeamRewardsContents `protobuf:"bytes,1,opt,name=guaranteed,proto3" json:"guaranteed,omitempty"` + // The weighted contents to grant. + Weighted []*AvailableTeamRewardsContents `protobuf:"bytes,2,rep,name=weighted,proto3" json:"weighted,omitempty"` + // The number of weighted reward contents to select from among the possibilities. + MaxRolls int64 `protobuf:"varint,3,opt,name=max_rolls,json=maxRolls,proto3" json:"max_rolls,omitempty"` + // The total weight that all weighted reward contents are calculated against. Auto calculated if set to 0 but can be + // set to a higher value to introduce a chance of a "none" reward. + TotalWeight int64 `protobuf:"varint,4,opt,name=total_weight,json=totalWeight,proto3" json:"total_weight,omitempty"` + // The maximum number of repeats of any given weighted reward. + MaxRepeatRolls int64 `protobuf:"varint,5,opt,name=max_repeat_rolls,json=maxRepeatRolls,proto3" json:"max_repeat_rolls,omitempty"` + // If rewards will be sent to the claimant's reward mailbox rather than applied directly, and what its expiry will be. + ToMailboxExpirySec int64 `protobuf:"varint,6,opt,name=to_mailbox_expiry_sec,json=toMailboxExpirySec,proto3" json:"to_mailbox_expiry_sec,omitempty"` + // Reward to be granted to all individual team members. + MemberReward *AvailableTeamMemberRewards `protobuf:"bytes,7,opt,name=member_reward,json=memberReward,proto3" json:"member_reward,omitempty"` +} + +func (x *AvailableTeamRewards) Reset() { + *x = AvailableTeamRewards{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AvailableTeamRewards) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AvailableTeamRewards) ProtoMessage() {} + +func (x *AvailableTeamRewards) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[39] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AvailableTeamRewards.ProtoReflect.Descriptor instead. +func (*AvailableTeamRewards) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{39} +} + +func (x *AvailableTeamRewards) GetGuaranteed() *AvailableTeamRewardsContents { + if x != nil { + return x.Guaranteed + } + return nil +} + +func (x *AvailableTeamRewards) GetWeighted() []*AvailableTeamRewardsContents { + if x != nil { + return x.Weighted + } + return nil +} + +func (x *AvailableTeamRewards) GetMaxRolls() int64 { + if x != nil { + return x.MaxRolls + } + return 0 +} + +func (x *AvailableTeamRewards) GetTotalWeight() int64 { + if x != nil { + return x.TotalWeight + } + return 0 +} + +func (x *AvailableTeamRewards) GetMaxRepeatRolls() int64 { + if x != nil { + return x.MaxRepeatRolls + } + return 0 +} + +func (x *AvailableTeamRewards) GetToMailboxExpirySec() int64 { + if x != nil { + return x.ToMailboxExpirySec + } + return 0 +} + +func (x *AvailableTeamRewards) GetMemberReward() *AvailableTeamMemberRewards { + if x != nil { + return x.MemberReward + } + return nil +} + +// The available rewards and their probabilistic weights. +type AvailableRewards struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The guaranteed contents to grant. + Guaranteed *AvailableRewardsContents `protobuf:"bytes,1,opt,name=guaranteed,proto3" json:"guaranteed,omitempty"` + // The weighted contents to grant. + Weighted []*AvailableRewardsContents `protobuf:"bytes,2,rep,name=weighted,proto3" json:"weighted,omitempty"` + // The number of weighted reward contents to select from among the possibilities. + MaxRolls int64 `protobuf:"varint,3,opt,name=max_rolls,json=maxRolls,proto3" json:"max_rolls,omitempty"` + // The total weight that all weighted reward contents are calculated against. Auto calculated if set to 0 but can be + // set to a higher value to introduce a chance of a "none" reward. + TotalWeight int64 `protobuf:"varint,4,opt,name=total_weight,json=totalWeight,proto3" json:"total_weight,omitempty"` + // The maximum number of repeats of any given weighted reward. + MaxRepeatRolls int64 `protobuf:"varint,5,opt,name=max_repeat_rolls,json=maxRepeatRolls,proto3" json:"max_repeat_rolls,omitempty"` + // If rewards will be sent to the claimant's reward mailbox rather than applied directly, and what its expiry will be. + ToMailboxExpirySec int64 `protobuf:"varint,6,opt,name=to_mailbox_expiry_sec,json=toMailboxExpirySec,proto3" json:"to_mailbox_expiry_sec,omitempty"` + // Rewards for the claimant's team, if any. + TeamReward *AvailableTeamRewards `protobuf:"bytes,7,opt,name=team_reward,json=teamReward,proto3" json:"team_reward,omitempty"` +} + +func (x *AvailableRewards) Reset() { + *x = AvailableRewards{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AvailableRewards) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AvailableRewards) ProtoMessage() {} + +func (x *AvailableRewards) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[40] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AvailableRewards.ProtoReflect.Descriptor instead. +func (*AvailableRewards) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{40} +} + +func (x *AvailableRewards) GetGuaranteed() *AvailableRewardsContents { + if x != nil { + return x.Guaranteed + } + return nil +} + +func (x *AvailableRewards) GetWeighted() []*AvailableRewardsContents { + if x != nil { + return x.Weighted + } + return nil +} + +func (x *AvailableRewards) GetMaxRolls() int64 { + if x != nil { + return x.MaxRolls + } + return 0 +} + +func (x *AvailableRewards) GetTotalWeight() int64 { + if x != nil { + return x.TotalWeight + } + return 0 +} + +func (x *AvailableRewards) GetMaxRepeatRolls() int64 { + if x != nil { + return x.MaxRepeatRolls + } + return 0 +} + +func (x *AvailableRewards) GetToMailboxExpirySec() int64 { + if x != nil { + return x.ToMailboxExpirySec + } + return 0 +} + +func (x *AvailableRewards) GetTeamReward() *AvailableTeamRewards { + if x != nil { + return x.TeamReward + } + return nil +} + +// The result of claiming an incentive. +type IncentiveClaim struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Reward granted. + Reward *Reward `protobuf:"bytes,1,opt,name=reward,proto3" json:"reward,omitempty"` + // Claim time in UTC seconds. + ClaimTimeSec int64 `protobuf:"varint,2,opt,name=claim_time_sec,json=claimTimeSec,proto3" json:"claim_time_sec,omitempty"` +} + +func (x *IncentiveClaim) Reset() { + *x = IncentiveClaim{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IncentiveClaim) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IncentiveClaim) ProtoMessage() {} + +func (x *IncentiveClaim) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[41] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IncentiveClaim.ProtoReflect.Descriptor instead. +func (*IncentiveClaim) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{41} +} + +func (x *IncentiveClaim) GetReward() *Reward { + if x != nil { + return x.Reward + } + return nil +} + +func (x *IncentiveClaim) GetClaimTimeSec() int64 { + if x != nil { + return x.ClaimTimeSec + } + return 0 +} + +// An incentive set up by a user. +type Incentive struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the incentive. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Name. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // Description. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // Shareable incentive code. + Code string `protobuf:"bytes,4,opt,name=code,proto3" json:"code,omitempty"` + // The type of the incentive. + Type IncentiveType `protobuf:"varint,5,opt,name=type,proto3,enum=hiro.IncentiveType" json:"type,omitempty"` + // Create time in UTC seconds. + CreateTimeSec int64 `protobuf:"varint,6,opt,name=create_time_sec,json=createTimeSec,proto3" json:"create_time_sec,omitempty"` + // Update time in UTC seconds. + UpdateTimeSec int64 `protobuf:"varint,7,opt,name=update_time_sec,json=updateTimeSec,proto3" json:"update_time_sec,omitempty"` + // Expiry time in UTC seconds. + ExpiryTimeSec int64 `protobuf:"varint,8,opt,name=expiry_time_sec,json=expiryTimeSec,proto3" json:"expiry_time_sec,omitempty"` + // Available reward. + RecipientRewards *AvailableRewards `protobuf:"bytes,9,opt,name=recipient_rewards,json=recipientRewards,proto3" json:"recipient_rewards,omitempty"` + // Sender reward. + SenderRewards *AvailableRewards `protobuf:"bytes,10,opt,name=sender_rewards,json=senderRewards,proto3" json:"sender_rewards,omitempty"` + // Recipient user IDs for which the owner of the incentive has not yet claimed their sender reward. + UnclaimedRecipients []string `protobuf:"bytes,11,rep,name=unclaimed_recipients,json=unclaimedRecipients,proto3" json:"unclaimed_recipients,omitempty"` + // Sender rewards so far collected for this incentive. + Rewards []*Reward `protobuf:"bytes,12,rep,name=rewards,proto3" json:"rewards,omitempty"` + // Max claims. + MaxClaims int64 `protobuf:"varint,13,opt,name=max_claims,json=maxClaims,proto3" json:"max_claims,omitempty"` + // Current user IDs that have claimed, and their outcomes. + Claims map[string]*IncentiveClaim `protobuf:"bytes,14,rep,name=claims,proto3" json:"claims,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Additional properties. + AdditionalProperties *structpb.Struct `protobuf:"bytes,15,opt,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` +} + +func (x *Incentive) Reset() { + *x = Incentive{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Incentive) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Incentive) ProtoMessage() {} + +func (x *Incentive) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[42] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Incentive.ProtoReflect.Descriptor instead. +func (*Incentive) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{42} +} + +func (x *Incentive) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Incentive) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Incentive) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Incentive) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *Incentive) GetType() IncentiveType { + if x != nil { + return x.Type + } + return IncentiveType_INCENTIVE_TYPE_UNSPECIFIED +} + +func (x *Incentive) GetCreateTimeSec() int64 { + if x != nil { + return x.CreateTimeSec + } + return 0 +} + +func (x *Incentive) GetUpdateTimeSec() int64 { + if x != nil { + return x.UpdateTimeSec + } + return 0 +} + +func (x *Incentive) GetExpiryTimeSec() int64 { + if x != nil { + return x.ExpiryTimeSec + } + return 0 +} + +func (x *Incentive) GetRecipientRewards() *AvailableRewards { + if x != nil { + return x.RecipientRewards + } + return nil +} + +func (x *Incentive) GetSenderRewards() *AvailableRewards { + if x != nil { + return x.SenderRewards + } + return nil +} + +func (x *Incentive) GetUnclaimedRecipients() []string { + if x != nil { + return x.UnclaimedRecipients + } + return nil +} + +func (x *Incentive) GetRewards() []*Reward { + if x != nil { + return x.Rewards + } + return nil +} + +func (x *Incentive) GetMaxClaims() int64 { + if x != nil { + return x.MaxClaims + } + return 0 +} + +func (x *Incentive) GetClaims() map[string]*IncentiveClaim { + if x != nil { + return x.Claims + } + return nil +} + +func (x *Incentive) GetAdditionalProperties() *structpb.Struct { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +// A list of incentives set up by a user. +type IncentiveList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Incentives set up by a single user. + Incentives []*Incentive `protobuf:"bytes,1,rep,name=incentives,proto3" json:"incentives,omitempty"` +} + +func (x *IncentiveList) Reset() { + *x = IncentiveList{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IncentiveList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IncentiveList) ProtoMessage() {} + +func (x *IncentiveList) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[43] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IncentiveList.ProtoReflect.Descriptor instead. +func (*IncentiveList) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{43} +} + +func (x *IncentiveList) GetIncentives() []*Incentive { + if x != nil { + return x.Incentives + } + return nil +} + +// An incentive claimant's view of a single incentive. +type IncentiveInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the incentive. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Name. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // Description. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // Unique shareable incentive code. + Code string `protobuf:"bytes,4,opt,name=code,proto3" json:"code,omitempty"` + // The type of the incentive. + Type IncentiveType `protobuf:"varint,5,opt,name=type,proto3,enum=hiro.IncentiveType" json:"type,omitempty"` + // Incentive sender user ID. + Sender string `protobuf:"bytes,6,opt,name=sender,proto3" json:"sender,omitempty"` + // Available rewards that the caller can claim. + AvailableRewards *AvailableRewards `protobuf:"bytes,7,opt,name=available_rewards,json=availableRewards,proto3" json:"available_rewards,omitempty"` + // Indicator if the caller can claim rewards. + CanClaim bool `protobuf:"varint,8,opt,name=can_claim,json=canClaim,proto3" json:"can_claim,omitempty"` + // Reward that was granted. + Reward *Reward `protobuf:"bytes,9,opt,name=reward,proto3" json:"reward,omitempty"` + // Create time in UTC seconds. + CreateTimeSec int64 `protobuf:"varint,10,opt,name=create_time_sec,json=createTimeSec,proto3" json:"create_time_sec,omitempty"` + // Update time in UTC seconds. + UpdateTimeSec int64 `protobuf:"varint,11,opt,name=update_time_sec,json=updateTimeSec,proto3" json:"update_time_sec,omitempty"` + // Expiry time in UTC seconds. + ExpiryTimeSec int64 `protobuf:"varint,12,opt,name=expiry_time_sec,json=expiryTimeSec,proto3" json:"expiry_time_sec,omitempty"` + // Claim time in UTC seconds. + ClaimTimeSec int64 `protobuf:"varint,13,opt,name=claim_time_sec,json=claimTimeSec,proto3" json:"claim_time_sec,omitempty"` +} + +func (x *IncentiveInfo) Reset() { + *x = IncentiveInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IncentiveInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IncentiveInfo) ProtoMessage() {} + +func (x *IncentiveInfo) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[44] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IncentiveInfo.ProtoReflect.Descriptor instead. +func (*IncentiveInfo) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{44} +} + +func (x *IncentiveInfo) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *IncentiveInfo) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *IncentiveInfo) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *IncentiveInfo) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *IncentiveInfo) GetType() IncentiveType { + if x != nil { + return x.Type + } + return IncentiveType_INCENTIVE_TYPE_UNSPECIFIED +} + +func (x *IncentiveInfo) GetSender() string { + if x != nil { + return x.Sender + } + return "" +} + +func (x *IncentiveInfo) GetAvailableRewards() *AvailableRewards { + if x != nil { + return x.AvailableRewards + } + return nil +} + +func (x *IncentiveInfo) GetCanClaim() bool { + if x != nil { + return x.CanClaim + } + return false +} + +func (x *IncentiveInfo) GetReward() *Reward { + if x != nil { + return x.Reward + } + return nil +} + +func (x *IncentiveInfo) GetCreateTimeSec() int64 { + if x != nil { + return x.CreateTimeSec + } + return 0 +} + +func (x *IncentiveInfo) GetUpdateTimeSec() int64 { + if x != nil { + return x.UpdateTimeSec + } + return 0 +} + +func (x *IncentiveInfo) GetExpiryTimeSec() int64 { + if x != nil { + return x.ExpiryTimeSec + } + return 0 +} + +func (x *IncentiveInfo) GetClaimTimeSec() int64 { + if x != nil { + return x.ClaimTimeSec + } + return 0 +} + +// Request by a user to set up a new incentive. +type IncentiveSenderCreateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The incentive configuration ID. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *IncentiveSenderCreateRequest) Reset() { + *x = IncentiveSenderCreateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IncentiveSenderCreateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IncentiveSenderCreateRequest) ProtoMessage() {} + +func (x *IncentiveSenderCreateRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[45] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IncentiveSenderCreateRequest.ProtoReflect.Descriptor instead. +func (*IncentiveSenderCreateRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{45} +} + +func (x *IncentiveSenderCreateRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +// Request by a user to delete an incentive they had set up. +type IncentiveSenderDeleteRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The unique incentive code. + Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` +} + +func (x *IncentiveSenderDeleteRequest) Reset() { + *x = IncentiveSenderDeleteRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IncentiveSenderDeleteRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IncentiveSenderDeleteRequest) ProtoMessage() {} + +func (x *IncentiveSenderDeleteRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[46] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IncentiveSenderDeleteRequest.ProtoReflect.Descriptor instead. +func (*IncentiveSenderDeleteRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{46} +} + +func (x *IncentiveSenderDeleteRequest) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +// Request by a user to claim rewards from an incentive they had set up. +type IncentiveSenderClaimRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The unique incentive code. + Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` + // The recipient ID(s) to claim for, or empty for all. + RecipientIds []string `protobuf:"bytes,2,rep,name=recipient_ids,json=recipientIds,proto3" json:"recipient_ids,omitempty"` +} + +func (x *IncentiveSenderClaimRequest) Reset() { + *x = IncentiveSenderClaimRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IncentiveSenderClaimRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IncentiveSenderClaimRequest) ProtoMessage() {} + +func (x *IncentiveSenderClaimRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[47] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IncentiveSenderClaimRequest.ProtoReflect.Descriptor instead. +func (*IncentiveSenderClaimRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{47} +} + +func (x *IncentiveSenderClaimRequest) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *IncentiveSenderClaimRequest) GetRecipientIds() []string { + if x != nil { + return x.RecipientIds + } + return nil +} + +// Request by a potential incentive claimant to view incentive information. +type IncentiveRecipientGetRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The unique incentive code. + Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` +} + +func (x *IncentiveRecipientGetRequest) Reset() { + *x = IncentiveRecipientGetRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IncentiveRecipientGetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IncentiveRecipientGetRequest) ProtoMessage() {} + +func (x *IncentiveRecipientGetRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[48] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IncentiveRecipientGetRequest.ProtoReflect.Descriptor instead. +func (*IncentiveRecipientGetRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{48} +} + +func (x *IncentiveRecipientGetRequest) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +// Request by a potential incentive claimant to claim an incentive. +type IncentiveRecipientClaimRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The unique incentive code. + Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` +} + +func (x *IncentiveRecipientClaimRequest) Reset() { + *x = IncentiveRecipientClaimRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[49] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IncentiveRecipientClaimRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IncentiveRecipientClaimRequest) ProtoMessage() {} + +func (x *IncentiveRecipientClaimRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[49] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use IncentiveRecipientClaimRequest.ProtoReflect.Descriptor instead. +func (*IncentiveRecipientClaimRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{49} +} + +func (x *IncentiveRecipientClaimRequest) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +// Request to create a new challenge based on a template. +type ChallengeCreateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Challenge template ID. + TemplateId string `protobuf:"bytes,1,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + // The name of the challenge. May be an i18n code. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // A description of the challenge. May be an i18n code. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // UserIDs of the users to challenge. + Invitees []string `protobuf:"bytes,4,rep,name=invitees,proto3" json:"invitees,omitempty"` + // Whether the challenged users have to accept the challenge or not. + Open bool `protobuf:"varint,5,opt,name=open,proto3" json:"open,omitempty"` + // Maximum number of scores a user can submit to the leaderboard. + MaxScores int64 `protobuf:"varint,6,opt,name=max_scores,json=maxScores,proto3" json:"max_scores,omitempty"` + // Start time of the challenge. Set to 0 to start immediately. + StartDelaySec int64 `protobuf:"varint,7,opt,name=start_delay_sec,json=startDelaySec,proto3" json:"start_delay_sec,omitempty"` + // Duration of the challenge. Set to 0 to have an unlimited challenge. + DurationSec int64 `protobuf:"varint,8,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"` + // Maximum number of participants in the challenge. + MaxParticipants int64 `protobuf:"varint,9,opt,name=max_participants,json=maxParticipants,proto3" json:"max_participants,omitempty"` + // Category of the challenge. + Category string `protobuf:"bytes,10,opt,name=category,proto3" json:"category,omitempty"` + // Additional metadata properties. + Metadata map[string]string `protobuf:"bytes,11,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *ChallengeCreateRequest) Reset() { + *x = ChallengeCreateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[50] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChallengeCreateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChallengeCreateRequest) ProtoMessage() {} + +func (x *ChallengeCreateRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[50] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChallengeCreateRequest.ProtoReflect.Descriptor instead. +func (*ChallengeCreateRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{50} +} + +func (x *ChallengeCreateRequest) GetTemplateId() string { + if x != nil { + return x.TemplateId + } + return "" +} + +func (x *ChallengeCreateRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ChallengeCreateRequest) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *ChallengeCreateRequest) GetInvitees() []string { + if x != nil { + return x.Invitees + } + return nil +} + +func (x *ChallengeCreateRequest) GetOpen() bool { + if x != nil { + return x.Open + } + return false +} + +func (x *ChallengeCreateRequest) GetMaxScores() int64 { + if x != nil { + return x.MaxScores + } + return 0 +} + +func (x *ChallengeCreateRequest) GetStartDelaySec() int64 { + if x != nil { + return x.StartDelaySec + } + return 0 +} + +func (x *ChallengeCreateRequest) GetDurationSec() int64 { + if x != nil { + return x.DurationSec + } + return 0 +} + +func (x *ChallengeCreateRequest) GetMaxParticipants() int64 { + if x != nil { + return x.MaxParticipants + } + return 0 +} + +func (x *ChallengeCreateRequest) GetCategory() string { + if x != nil { + return x.Category + } + return "" +} + +func (x *ChallengeCreateRequest) GetMetadata() map[string]string { + if x != nil { + return x.Metadata + } + return nil +} + +// Request to join an ongoing challenge. +type ChallengeJoinRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Challenge id. + ChallengeId string `protobuf:"bytes,1,opt,name=challenge_id,json=challengeId,proto3" json:"challenge_id,omitempty"` +} + +func (x *ChallengeJoinRequest) Reset() { + *x = ChallengeJoinRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[51] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChallengeJoinRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChallengeJoinRequest) ProtoMessage() {} + +func (x *ChallengeJoinRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[51] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChallengeJoinRequest.ProtoReflect.Descriptor instead. +func (*ChallengeJoinRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{51} +} + +func (x *ChallengeJoinRequest) GetChallengeId() string { + if x != nil { + return x.ChallengeId + } + return "" +} + +// Request to leave a challenge. +type ChallengeLeaveRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Challenge id. + ChallengeId string `protobuf:"bytes,1,opt,name=challenge_id,json=challengeId,proto3" json:"challenge_id,omitempty"` +} + +func (x *ChallengeLeaveRequest) Reset() { + *x = ChallengeLeaveRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[52] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChallengeLeaveRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChallengeLeaveRequest) ProtoMessage() {} + +func (x *ChallengeLeaveRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[52] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChallengeLeaveRequest.ProtoReflect.Descriptor instead. +func (*ChallengeLeaveRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{52} +} + +func (x *ChallengeLeaveRequest) GetChallengeId() string { + if x != nil { + return x.ChallengeId + } + return "" +} + +// Request to claim a reward from a challenge, if available. It also culls the challenge once all rewards are claimed. +type ChallengeClaimRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Challenge id. + ChallengeId string `protobuf:"bytes,1,opt,name=challenge_id,json=challengeId,proto3" json:"challenge_id,omitempty"` +} + +func (x *ChallengeClaimRequest) Reset() { + *x = ChallengeClaimRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[53] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChallengeClaimRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChallengeClaimRequest) ProtoMessage() {} + +func (x *ChallengeClaimRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[53] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChallengeClaimRequest.ProtoReflect.Descriptor instead. +func (*ChallengeClaimRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{53} +} + +func (x *ChallengeClaimRequest) GetChallengeId() string { + if x != nil { + return x.ChallengeId + } + return "" +} + +// Request to search for open challenges to join. +type ChallengeSearchRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Optional name of challenge to filter by. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Optional category of challenge to filter by. + Category string `protobuf:"bytes,2,opt,name=category,proto3" json:"category,omitempty"` + // Maximum number of results to return. + Limit int64 `protobuf:"varint,3,opt,name=limit,proto3" json:"limit,omitempty"` +} + +func (x *ChallengeSearchRequest) Reset() { + *x = ChallengeSearchRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChallengeSearchRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChallengeSearchRequest) ProtoMessage() {} + +func (x *ChallengeSearchRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[54] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChallengeSearchRequest.ProtoReflect.Descriptor instead. +func (*ChallengeSearchRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{54} +} + +func (x *ChallengeSearchRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ChallengeSearchRequest) GetCategory() string { + if x != nil { + return x.Category + } + return "" +} + +func (x *ChallengeSearchRequest) GetLimit() int64 { + if x != nil { + return x.Limit + } + return 0 +} + +// Request for the challenge creator to invite additional users to an ongoing challenge. +type ChallengeInviteRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Challenge id. + ChallengeId string `protobuf:"bytes,1,opt,name=challenge_id,json=challengeId,proto3" json:"challenge_id,omitempty"` + // Invitees. + Invitees []string `protobuf:"bytes,2,rep,name=invitees,proto3" json:"invitees,omitempty"` +} + +func (x *ChallengeInviteRequest) Reset() { + *x = ChallengeInviteRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChallengeInviteRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChallengeInviteRequest) ProtoMessage() {} + +func (x *ChallengeInviteRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[55] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChallengeInviteRequest.ProtoReflect.Descriptor instead. +func (*ChallengeInviteRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{55} +} + +func (x *ChallengeInviteRequest) GetChallengeId() string { + if x != nil { + return x.ChallengeId + } + return "" +} + +func (x *ChallengeInviteRequest) GetInvitees() []string { + if x != nil { + return x.Invitees + } + return nil +} + +// Request to submit a score to an active challenge. +type ChallengeSubmitScoreRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Challenge ID. + ChallengeId string `protobuf:"bytes,1,opt,name=challenge_id,json=challengeId,proto3" json:"challenge_id,omitempty"` + // Score. + Score int64 `protobuf:"varint,2,opt,name=score,proto3" json:"score,omitempty"` + // Subscore. + Subscore int64 `protobuf:"varint,3,opt,name=subscore,proto3" json:"subscore,omitempty"` + // Metadata. + Metadata string `protobuf:"bytes,4,opt,name=metadata,proto3" json:"metadata,omitempty"` + // Update metadata only if score or subscore change. + ConditionalMetadataUpdate bool `protobuf:"varint,5,opt,name=conditional_metadata_update,json=conditionalMetadataUpdate,proto3" json:"conditional_metadata_update,omitempty"` +} + +func (x *ChallengeSubmitScoreRequest) Reset() { + *x = ChallengeSubmitScoreRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[56] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChallengeSubmitScoreRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChallengeSubmitScoreRequest) ProtoMessage() {} + +func (x *ChallengeSubmitScoreRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[56] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChallengeSubmitScoreRequest.ProtoReflect.Descriptor instead. +func (*ChallengeSubmitScoreRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{56} +} + +func (x *ChallengeSubmitScoreRequest) GetChallengeId() string { + if x != nil { + return x.ChallengeId + } + return "" +} + +func (x *ChallengeSubmitScoreRequest) GetScore() int64 { + if x != nil { + return x.Score + } + return 0 +} + +func (x *ChallengeSubmitScoreRequest) GetSubscore() int64 { + if x != nil { + return x.Subscore + } + return 0 +} + +func (x *ChallengeSubmitScoreRequest) GetMetadata() string { + if x != nil { + return x.Metadata + } + return "" +} + +func (x *ChallengeSubmitScoreRequest) GetConditionalMetadataUpdate() bool { + if x != nil { + return x.ConditionalMetadataUpdate + } + return false +} + +// The reward tiers for the challenge. +type ChallengeRewardTier struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The maximum rank (inclusive). + RankMax int64 `protobuf:"varint,1,opt,name=rank_max,json=rankMax,proto3" json:"rank_max,omitempty"` + // The minimum rank (inclusive). + RankMin int64 `protobuf:"varint,2,opt,name=rank_min,json=rankMin,proto3" json:"rank_min,omitempty"` + // The available rewards for this range. + AvailableRewards *AvailableRewards `protobuf:"bytes,3,opt,name=available_rewards,json=availableRewards,proto3" json:"available_rewards,omitempty"` +} + +func (x *ChallengeRewardTier) Reset() { + *x = ChallengeRewardTier{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChallengeRewardTier) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChallengeRewardTier) ProtoMessage() {} + +func (x *ChallengeRewardTier) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[57] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChallengeRewardTier.ProtoReflect.Descriptor instead. +func (*ChallengeRewardTier) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{57} +} + +func (x *ChallengeRewardTier) GetRankMax() int64 { + if x != nil { + return x.RankMax + } + return 0 +} + +func (x *ChallengeRewardTier) GetRankMin() int64 { + if x != nil { + return x.RankMin + } + return 0 +} + +func (x *ChallengeRewardTier) GetAvailableRewards() *AvailableRewards { + if x != nil { + return x.AvailableRewards + } + return nil +} + +// A single participant entry to an event leaderboard. +type ChallengeScore struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // User ID. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Username. + Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` + // Display name. + DisplayName string `protobuf:"bytes,3,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` + // Avatar URL. + AvatarUrl string `protobuf:"bytes,4,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` + // Time when the user joined the challenge leaderboard. + CreateTimeSec int64 `protobuf:"varint,5,opt,name=create_time_sec,json=createTimeSec,proto3" json:"create_time_sec,omitempty"` + // Time when the user last submitted a score. + UpdateTimeSec int64 `protobuf:"varint,6,opt,name=update_time_sec,json=updateTimeSec,proto3" json:"update_time_sec,omitempty"` + // Rank within the event leaderboard. + Rank int64 `protobuf:"varint,7,opt,name=rank,proto3" json:"rank,omitempty"` + // Score. + Score int64 `protobuf:"varint,8,opt,name=score,proto3" json:"score,omitempty"` + // Subscore. + Subscore int64 `protobuf:"varint,9,opt,name=subscore,proto3" json:"subscore,omitempty"` + // Number of score submissions. + NumScores int64 `protobuf:"varint,10,opt,name=num_scores,json=numScores,proto3" json:"num_scores,omitempty"` + // Metadata. + Metadata string `protobuf:"bytes,11,opt,name=metadata,proto3" json:"metadata,omitempty"` + // The state of the user participation in the challenge. + State ChallengeState `protobuf:"varint,12,opt,name=state,proto3,enum=hiro.ChallengeState" json:"state,omitempty"` +} + +func (x *ChallengeScore) Reset() { + *x = ChallengeScore{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[58] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChallengeScore) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChallengeScore) ProtoMessage() {} + +func (x *ChallengeScore) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[58] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChallengeScore.ProtoReflect.Descriptor instead. +func (*ChallengeScore) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{58} +} + +func (x *ChallengeScore) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *ChallengeScore) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *ChallengeScore) GetDisplayName() string { + if x != nil { + return x.DisplayName + } + return "" +} + +func (x *ChallengeScore) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +func (x *ChallengeScore) GetCreateTimeSec() int64 { + if x != nil { + return x.CreateTimeSec + } + return 0 +} + +func (x *ChallengeScore) GetUpdateTimeSec() int64 { + if x != nil { + return x.UpdateTimeSec + } + return 0 +} + +func (x *ChallengeScore) GetRank() int64 { + if x != nil { + return x.Rank + } + return 0 +} + +func (x *ChallengeScore) GetScore() int64 { + if x != nil { + return x.Score + } + return 0 +} + +func (x *ChallengeScore) GetSubscore() int64 { + if x != nil { + return x.Subscore + } + return 0 +} + +func (x *ChallengeScore) GetNumScores() int64 { + if x != nil { + return x.NumScores + } + return 0 +} + +func (x *ChallengeScore) GetMetadata() string { + if x != nil { + return x.Metadata + } + return "" +} + +func (x *ChallengeScore) GetState() ChallengeState { + if x != nil { + return x.State + } + return ChallengeState_CHALLENGE_STATE_NONE +} + +// A challenge leaderboard, which is a collection of participants and their scores. +type Challenge struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Challenge ID. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The name of the challenge. May be an i18n code. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // A description of the challenge. May be an i18n code. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // Score ordering. + Ascending bool `protobuf:"varint,4,opt,name=ascending,proto3" json:"ascending,omitempty"` + // Score submission operator. + Operator string `protobuf:"bytes,5,opt,name=operator,proto3" json:"operator,omitempty"` + // Time when the event starts. + StartTimeSec int64 `protobuf:"varint,6,opt,name=start_time_sec,json=startTimeSec,proto3" json:"start_time_sec,omitempty"` + // Claim time, if any. + ClaimTimeSec int64 `protobuf:"varint,7,opt,name=claim_time_sec,json=claimTimeSec,proto3" json:"claim_time_sec,omitempty"` + // Time when the event ends. + EndTimeSec int64 `protobuf:"varint,8,opt,name=end_time_sec,json=endTimeSec,proto3" json:"end_time_sec,omitempty"` + // The possible reward tiers for this instance of the challenge. + RewardTiers []*ChallengeRewardTier `protobuf:"bytes,9,rep,name=reward_tiers,json=rewardTiers,proto3" json:"reward_tiers,omitempty"` + // The available reward and its probabilities. + AvailableRewards *AvailableRewards `protobuf:"bytes,10,opt,name=available_rewards,json=availableRewards,proto3" json:"available_rewards,omitempty"` // Available to Claim + // Additional metadata properties. + AdditionalProperties map[string]string `protobuf:"bytes,11,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Current participant count. + Size int64 `protobuf:"varint,12,opt,name=size,proto3" json:"size,omitempty"` + // Maximum participant count. + MaxSize int64 `protobuf:"varint,13,opt,name=max_size,json=maxSize,proto3" json:"max_size,omitempty"` + // Maximum number of score submissions per participant. + MaxNumScore int64 `protobuf:"varint,14,opt,name=max_num_score,json=maxNumScore,proto3" json:"max_num_score,omitempty"` + // Participants and their scores. + Scores []*ChallengeScore `protobuf:"bytes,15,rep,name=scores,proto3" json:"scores,omitempty"` + // Indicates if the event is still active, and scores can be submitted. + IsActive bool `protobuf:"varint,16,opt,name=is_active,json=isActive,proto3" json:"is_active,omitempty"` + // The UNIX timestamp for the current server time. + CurrentTimeSec int64 `protobuf:"varint,17,opt,name=current_time_sec,json=currentTimeSec,proto3" json:"current_time_sec,omitempty"` + // Whether the user can claim a reward. + CanClaim bool `protobuf:"varint,19,opt,name=can_claim,json=canClaim,proto3" json:"can_claim,omitempty"` + // The state of the user participation in the challenge. + State ChallengeState `protobuf:"varint,20,opt,name=state,proto3,enum=hiro.ChallengeState" json:"state,omitempty"` + // A claimed reward, if any. + Reward *Reward `protobuf:"bytes,21,opt,name=reward,proto3" json:"reward,omitempty"` + // The category to group the event leaderboard together with others. + Category string `protobuf:"bytes,22,opt,name=category,proto3" json:"category,omitempty"` + // Whether the challenge is open to participants beyond the initial invitees or not. + Open bool `protobuf:"varint,23,opt,name=open,proto3" json:"open,omitempty"` + // The user ID of the challenge owner. + OwnerId string `protobuf:"bytes,24,opt,name=owner_id,json=ownerId,proto3" json:"owner_id,omitempty"` + // Additional metadata properties. + Metadata map[string]string `protobuf:"bytes,25,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *Challenge) Reset() { + *x = Challenge{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[59] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Challenge) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Challenge) ProtoMessage() {} + +func (x *Challenge) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[59] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Challenge.ProtoReflect.Descriptor instead. +func (*Challenge) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{59} +} + +func (x *Challenge) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Challenge) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Challenge) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Challenge) GetAscending() bool { + if x != nil { + return x.Ascending + } + return false +} + +func (x *Challenge) GetOperator() string { + if x != nil { + return x.Operator + } + return "" +} + +func (x *Challenge) GetStartTimeSec() int64 { + if x != nil { + return x.StartTimeSec + } + return 0 +} + +func (x *Challenge) GetClaimTimeSec() int64 { + if x != nil { + return x.ClaimTimeSec + } + return 0 +} + +func (x *Challenge) GetEndTimeSec() int64 { + if x != nil { + return x.EndTimeSec + } + return 0 +} + +func (x *Challenge) GetRewardTiers() []*ChallengeRewardTier { + if x != nil { + return x.RewardTiers + } + return nil +} + +func (x *Challenge) GetAvailableRewards() *AvailableRewards { + if x != nil { + return x.AvailableRewards + } + return nil +} + +func (x *Challenge) GetAdditionalProperties() map[string]string { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +func (x *Challenge) GetSize() int64 { + if x != nil { + return x.Size + } + return 0 +} + +func (x *Challenge) GetMaxSize() int64 { + if x != nil { + return x.MaxSize + } + return 0 +} + +func (x *Challenge) GetMaxNumScore() int64 { + if x != nil { + return x.MaxNumScore + } + return 0 +} + +func (x *Challenge) GetScores() []*ChallengeScore { + if x != nil { + return x.Scores + } + return nil +} + +func (x *Challenge) GetIsActive() bool { + if x != nil { + return x.IsActive + } + return false +} + +func (x *Challenge) GetCurrentTimeSec() int64 { + if x != nil { + return x.CurrentTimeSec + } + return 0 +} + +func (x *Challenge) GetCanClaim() bool { + if x != nil { + return x.CanClaim + } + return false +} + +func (x *Challenge) GetState() ChallengeState { + if x != nil { + return x.State + } + return ChallengeState_CHALLENGE_STATE_NONE +} + +func (x *Challenge) GetReward() *Reward { + if x != nil { + return x.Reward + } + return nil +} + +func (x *Challenge) GetCategory() string { + if x != nil { + return x.Category + } + return "" +} + +func (x *Challenge) GetOpen() bool { + if x != nil { + return x.Open + } + return false +} + +func (x *Challenge) GetOwnerId() string { + if x != nil { + return x.OwnerId + } + return "" +} + +func (x *Challenge) GetMetadata() map[string]string { + if x != nil { + return x.Metadata + } + return nil +} + +// Retrieve available challenge leaderboards. +type ChallengeListRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Optional filter of Event Leaderboard categories to list. If empty does not filter on category. + Categories []string `protobuf:"bytes,1,rep,name=categories,proto3" json:"categories,omitempty"` + // Whether or not the response should include scores, defaults to false. + WithScores bool `protobuf:"varint,2,opt,name=with_scores,json=withScores,proto3" json:"with_scores,omitempty"` +} + +func (x *ChallengeListRequest) Reset() { + *x = ChallengeListRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[60] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChallengeListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChallengeListRequest) ProtoMessage() {} + +func (x *ChallengeListRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[60] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChallengeListRequest.ProtoReflect.Descriptor instead. +func (*ChallengeListRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{60} +} + +func (x *ChallengeListRequest) GetCategories() []string { + if x != nil { + return x.Categories + } + return nil +} + +func (x *ChallengeListRequest) GetWithScores() bool { + if x != nil { + return x.WithScores + } + return false +} + +type ChallengeGetRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Challenge leaderboard ID to get, and join if necessary/possible. + ChallengeId string `protobuf:"bytes,1,opt,name=challenge_id,json=challengeId,proto3" json:"challenge_id,omitempty"` + // Whether or not the response should include scores, defaults to false. + WithScores bool `protobuf:"varint,2,opt,name=with_scores,json=withScores,proto3" json:"with_scores,omitempty"` +} + +func (x *ChallengeGetRequest) Reset() { + *x = ChallengeGetRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[61] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChallengeGetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChallengeGetRequest) ProtoMessage() {} + +func (x *ChallengeGetRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[61] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChallengeGetRequest.ProtoReflect.Descriptor instead. +func (*ChallengeGetRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{61} +} + +func (x *ChallengeGetRequest) GetChallengeId() string { + if x != nil { + return x.ChallengeId + } + return "" +} + +func (x *ChallengeGetRequest) GetWithScores() bool { + if x != nil { + return x.WithScores + } + return false +} + +// Several challenges the user has access to, resulting from a listing operation. +type ChallengesList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Zero or more challenges. + Challenges []*Challenge `protobuf:"bytes,1,rep,name=challenges,proto3" json:"challenges,omitempty"` +} + +func (x *ChallengesList) Reset() { + *x = ChallengesList{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[62] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChallengesList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChallengesList) ProtoMessage() {} + +func (x *ChallengesList) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[62] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChallengesList.ProtoReflect.Descriptor instead. +func (*ChallengesList) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{62} +} + +func (x *ChallengesList) GetChallenges() []*Challenge { + if x != nil { + return x.Challenges + } + return nil +} + +// The minimum and maximum number of players that can participate in the challenge. +type ChallengeMaxMinPlayers struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The minimum number of players that can participate in the challenge. + Min int64 `protobuf:"varint,1,opt,name=min,proto3" json:"min,omitempty"` + // The maximum number of players that can participate in the challenge. + Max int64 `protobuf:"varint,2,opt,name=max,proto3" json:"max,omitempty"` +} + +func (x *ChallengeMaxMinPlayers) Reset() { + *x = ChallengeMaxMinPlayers{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[63] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChallengeMaxMinPlayers) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChallengeMaxMinPlayers) ProtoMessage() {} + +func (x *ChallengeMaxMinPlayers) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[63] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChallengeMaxMinPlayers.ProtoReflect.Descriptor instead. +func (*ChallengeMaxMinPlayers) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{63} +} + +func (x *ChallengeMaxMinPlayers) GetMin() int64 { + if x != nil { + return x.Min + } + return 0 +} + +func (x *ChallengeMaxMinPlayers) GetMax() int64 { + if x != nil { + return x.Max + } + return 0 +} + +// The minimum and maximum duration that can be set for the challenge. +type ChallengeMinMaxDuration struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The minimum duration of challenge. + MinSec int64 `protobuf:"varint,1,opt,name=min_sec,json=minSec,proto3" json:"min_sec,omitempty"` + // The maximum duration of challenge. + MaxSec int64 `protobuf:"varint,2,opt,name=max_sec,json=maxSec,proto3" json:"max_sec,omitempty"` +} + +func (x *ChallengeMinMaxDuration) Reset() { + *x = ChallengeMinMaxDuration{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[64] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChallengeMinMaxDuration) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChallengeMinMaxDuration) ProtoMessage() {} + +func (x *ChallengeMinMaxDuration) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[64] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChallengeMinMaxDuration.ProtoReflect.Descriptor instead. +func (*ChallengeMinMaxDuration) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{64} +} + +func (x *ChallengeMinMaxDuration) GetMinSec() int64 { + if x != nil { + return x.MinSec + } + return 0 +} + +func (x *ChallengeMinMaxDuration) GetMaxSec() int64 { + if x != nil { + return x.MaxSec + } + return 0 +} + +// An individually usable challenge template. +type ChallengeTemplate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The possible reward tiers for this instance of the challenge. + RewardTiers []*ChallengeRewardTier `protobuf:"bytes,1,rep,name=reward_tiers,json=rewardTiers,proto3" json:"reward_tiers,omitempty"` + // The min and max players of the challenge. + Players *ChallengeMaxMinPlayers `protobuf:"bytes,2,opt,name=players,proto3" json:"players,omitempty"` + // The min and max duration that can be set for the challenge. + Duration *ChallengeMinMaxDuration `protobuf:"bytes,3,opt,name=duration,proto3" json:"duration,omitempty"` + // The maximum amount of delay before the challenge begins for participants. + StartDelayMax int64 `protobuf:"varint,4,opt,name=start_delay_max,json=startDelayMax,proto3" json:"start_delay_max,omitempty"` + // The maximum number of scores that can be submitted to the challenge. + MaxNumScore int64 `protobuf:"varint,5,opt,name=max_num_score,json=maxNumScore,proto3" json:"max_num_score,omitempty"` + // The ordering of the challenge scores. + Ascending bool `protobuf:"varint,6,opt,name=ascending,proto3" json:"ascending,omitempty"` + // The operator of the challenge score submission. + Operator string `protobuf:"bytes,7,opt,name=operator,proto3" json:"operator,omitempty"` + // Additional metadata properties. + AdditionalProperties map[string]string `protobuf:"bytes,8,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *ChallengeTemplate) Reset() { + *x = ChallengeTemplate{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[65] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChallengeTemplate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChallengeTemplate) ProtoMessage() {} + +func (x *ChallengeTemplate) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[65] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChallengeTemplate.ProtoReflect.Descriptor instead. +func (*ChallengeTemplate) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{65} +} + +func (x *ChallengeTemplate) GetRewardTiers() []*ChallengeRewardTier { + if x != nil { + return x.RewardTiers + } + return nil +} + +func (x *ChallengeTemplate) GetPlayers() *ChallengeMaxMinPlayers { + if x != nil { + return x.Players + } + return nil +} + +func (x *ChallengeTemplate) GetDuration() *ChallengeMinMaxDuration { + if x != nil { + return x.Duration + } + return nil +} + +func (x *ChallengeTemplate) GetStartDelayMax() int64 { + if x != nil { + return x.StartDelayMax + } + return 0 +} + +func (x *ChallengeTemplate) GetMaxNumScore() int64 { + if x != nil { + return x.MaxNumScore + } + return 0 +} + +func (x *ChallengeTemplate) GetAscending() bool { + if x != nil { + return x.Ascending + } + return false +} + +func (x *ChallengeTemplate) GetOperator() string { + if x != nil { + return x.Operator + } + return "" +} + +func (x *ChallengeTemplate) GetAdditionalProperties() map[string]string { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +// Get all available challenge templates. +type ChallengeTemplates struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // All available challenges templates, keyed by a unique identifier. + Templates map[string]*ChallengeTemplate `protobuf:"bytes,1,rep,name=templates,proto3" json:"templates,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *ChallengeTemplates) Reset() { + *x = ChallengeTemplates{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[66] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChallengeTemplates) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChallengeTemplates) ProtoMessage() {} + +func (x *ChallengeTemplates) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[66] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChallengeTemplates.ProtoReflect.Descriptor instead. +func (*ChallengeTemplates) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{66} +} + +func (x *ChallengeTemplates) GetTemplates() map[string]*ChallengeTemplate { + if x != nil { + return x.Templates + } + return nil +} + +// Retrieve available event leaderboards. +type EventLeaderboardList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Whether or not the response should include scores, defaults to false. + WithScores bool `protobuf:"varint,1,opt,name=with_scores,json=withScores,proto3" json:"with_scores,omitempty"` + // Optional filter of Event Leaderboard categories to list. If empty does not filter on category. + Categories []string `protobuf:"bytes,2,rep,name=categories,proto3" json:"categories,omitempty"` +} + +func (x *EventLeaderboardList) Reset() { + *x = EventLeaderboardList{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[67] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventLeaderboardList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventLeaderboardList) ProtoMessage() {} + +func (x *EventLeaderboardList) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[67] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EventLeaderboardList.ProtoReflect.Descriptor instead. +func (*EventLeaderboardList) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{67} +} + +func (x *EventLeaderboardList) GetWithScores() bool { + if x != nil { + return x.WithScores + } + return false +} + +func (x *EventLeaderboardList) GetCategories() []string { + if x != nil { + return x.Categories + } + return nil +} + +// Find and retrieve an event leaderboard by ID, automatically joining the event if necessary. +type EventLeaderboardGet struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Event leaderboard ID to get, and join if necessary/possible. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *EventLeaderboardGet) Reset() { + *x = EventLeaderboardGet{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[68] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventLeaderboardGet) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventLeaderboardGet) ProtoMessage() {} + +func (x *EventLeaderboardGet) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[68] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EventLeaderboardGet.ProtoReflect.Descriptor instead. +func (*EventLeaderboardGet) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{68} +} + +func (x *EventLeaderboardGet) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +// Submit a score to an event leaderboard. +type EventLeaderboardUpdate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Event leaderboard ID. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Score. + Score int64 `protobuf:"varint,2,opt,name=score,proto3" json:"score,omitempty"` + // Subscore. + Subscore int64 `protobuf:"varint,3,opt,name=subscore,proto3" json:"subscore,omitempty"` + // Metadata. + Metadata string `protobuf:"bytes,4,opt,name=metadata,proto3" json:"metadata,omitempty"` + // Update metadata only if score or subscore change. + ConditionalMetadataUpdate bool `protobuf:"varint,5,opt,name=conditional_metadata_update,json=conditionalMetadataUpdate,proto3" json:"conditional_metadata_update,omitempty"` +} + +func (x *EventLeaderboardUpdate) Reset() { + *x = EventLeaderboardUpdate{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[69] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventLeaderboardUpdate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventLeaderboardUpdate) ProtoMessage() {} + +func (x *EventLeaderboardUpdate) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[69] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EventLeaderboardUpdate.ProtoReflect.Descriptor instead. +func (*EventLeaderboardUpdate) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{69} +} + +func (x *EventLeaderboardUpdate) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *EventLeaderboardUpdate) GetScore() int64 { + if x != nil { + return x.Score + } + return 0 +} + +func (x *EventLeaderboardUpdate) GetSubscore() int64 { + if x != nil { + return x.Subscore + } + return 0 +} + +func (x *EventLeaderboardUpdate) GetMetadata() string { + if x != nil { + return x.Metadata + } + return "" +} + +func (x *EventLeaderboardUpdate) GetConditionalMetadataUpdate() bool { + if x != nil { + return x.ConditionalMetadataUpdate + } + return false +} + +// Claim the available reward for an event leaderboard by ID. +type EventLeaderboardClaim struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Event leaderboard ID to claim. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *EventLeaderboardClaim) Reset() { + *x = EventLeaderboardClaim{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[70] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventLeaderboardClaim) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventLeaderboardClaim) ProtoMessage() {} + +func (x *EventLeaderboardClaim) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[70] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EventLeaderboardClaim.ProtoReflect.Descriptor instead. +func (*EventLeaderboardClaim) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{70} +} + +func (x *EventLeaderboardClaim) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +// Roll a new cohort for the specified event leaderboard. +type EventLeaderboardRoll struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Event leaderboard ID to roll. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Metadata for the initial score write. + Metadata string `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *EventLeaderboardRoll) Reset() { + *x = EventLeaderboardRoll{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[71] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventLeaderboardRoll) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventLeaderboardRoll) ProtoMessage() {} + +func (x *EventLeaderboardRoll) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[71] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EventLeaderboardRoll.ProtoReflect.Descriptor instead. +func (*EventLeaderboardRoll) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{71} +} + +func (x *EventLeaderboardRoll) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *EventLeaderboardRoll) GetMetadata() string { + if x != nil { + return x.Metadata + } + return "" +} + +// A single participant entry to an event leaderboard. +type EventLeaderboardScore struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // User ID. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Username. + Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` + // Display name. + DisplayName string `protobuf:"bytes,3,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` + // Avatar URL. + AvatarUrl string `protobuf:"bytes,4,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` + // Time when the user joined the event leaderboard. + CreateTimeSec int64 `protobuf:"varint,5,opt,name=create_time_sec,json=createTimeSec,proto3" json:"create_time_sec,omitempty"` + // Time when the user last submitted a score. + UpdateTimeSec int64 `protobuf:"varint,6,opt,name=update_time_sec,json=updateTimeSec,proto3" json:"update_time_sec,omitempty"` + // Rank within the event leaderboard. + Rank int64 `protobuf:"varint,7,opt,name=rank,proto3" json:"rank,omitempty"` + // Score. + Score int64 `protobuf:"varint,8,opt,name=score,proto3" json:"score,omitempty"` + // Subscore. + Subscore int64 `protobuf:"varint,9,opt,name=subscore,proto3" json:"subscore,omitempty"` + // Number of score submissions. + NumScores int64 `protobuf:"varint,10,opt,name=num_scores,json=numScores,proto3" json:"num_scores,omitempty"` + // Metadata. + Metadata string `protobuf:"bytes,11,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *EventLeaderboardScore) Reset() { + *x = EventLeaderboardScore{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[72] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventLeaderboardScore) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventLeaderboardScore) ProtoMessage() {} + +func (x *EventLeaderboardScore) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[72] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EventLeaderboardScore.ProtoReflect.Descriptor instead. +func (*EventLeaderboardScore) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{72} +} + +func (x *EventLeaderboardScore) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *EventLeaderboardScore) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *EventLeaderboardScore) GetDisplayName() string { + if x != nil { + return x.DisplayName + } + return "" +} + +func (x *EventLeaderboardScore) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +func (x *EventLeaderboardScore) GetCreateTimeSec() int64 { + if x != nil { + return x.CreateTimeSec + } + return 0 +} + +func (x *EventLeaderboardScore) GetUpdateTimeSec() int64 { + if x != nil { + return x.UpdateTimeSec + } + return 0 +} + +func (x *EventLeaderboardScore) GetRank() int64 { + if x != nil { + return x.Rank + } + return 0 +} + +func (x *EventLeaderboardScore) GetScore() int64 { + if x != nil { + return x.Score + } + return 0 +} + +func (x *EventLeaderboardScore) GetSubscore() int64 { + if x != nil { + return x.Subscore + } + return 0 +} + +func (x *EventLeaderboardScore) GetNumScores() int64 { + if x != nil { + return x.NumScores + } + return 0 +} + +func (x *EventLeaderboardScore) GetMetadata() string { + if x != nil { + return x.Metadata + } + return "" +} + +// A reward range within a specific tier based on ranks. +type EventLeaderboardRewardTier struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Name for this tier. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // The maximum rank (inclusive). + RankMax int32 `protobuf:"varint,2,opt,name=rank_max,json=rankMax,proto3" json:"rank_max,omitempty"` + // The minimum rank (inclusive). + RankMin int32 `protobuf:"varint,3,opt,name=rank_min,json=rankMin,proto3" json:"rank_min,omitempty"` + // The available rewards for this range. + AvailableRewards *AvailableRewards `protobuf:"bytes,4,opt,name=available_rewards,json=availableRewards,proto3" json:"available_rewards,omitempty"` + // Change in tier for this rank range. + TierChange int32 `protobuf:"varint,5,opt,name=tier_change,json=tierChange,proto3" json:"tier_change,omitempty"` +} + +func (x *EventLeaderboardRewardTier) Reset() { + *x = EventLeaderboardRewardTier{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[73] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventLeaderboardRewardTier) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventLeaderboardRewardTier) ProtoMessage() {} + +func (x *EventLeaderboardRewardTier) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[73] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EventLeaderboardRewardTier.ProtoReflect.Descriptor instead. +func (*EventLeaderboardRewardTier) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{73} +} + +func (x *EventLeaderboardRewardTier) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *EventLeaderboardRewardTier) GetRankMax() int32 { + if x != nil { + return x.RankMax + } + return 0 +} + +func (x *EventLeaderboardRewardTier) GetRankMin() int32 { + if x != nil { + return x.RankMin + } + return 0 +} + +func (x *EventLeaderboardRewardTier) GetAvailableRewards() *AvailableRewards { + if x != nil { + return x.AvailableRewards + } + return nil +} + +func (x *EventLeaderboardRewardTier) GetTierChange() int32 { + if x != nil { + return x.TierChange + } + return 0 +} + +// An event leaderboard's tier-specific set of rewards. +type EventLeaderboardRewardTiers struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Possible reward tiers. + RewardTiers []*EventLeaderboardRewardTier `protobuf:"bytes,1,rep,name=reward_tiers,json=rewardTiers,proto3" json:"reward_tiers,omitempty"` +} + +func (x *EventLeaderboardRewardTiers) Reset() { + *x = EventLeaderboardRewardTiers{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[74] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventLeaderboardRewardTiers) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventLeaderboardRewardTiers) ProtoMessage() {} + +func (x *EventLeaderboardRewardTiers) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[74] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EventLeaderboardRewardTiers.ProtoReflect.Descriptor instead. +func (*EventLeaderboardRewardTiers) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{74} +} + +func (x *EventLeaderboardRewardTiers) GetRewardTiers() []*EventLeaderboardRewardTier { + if x != nil { + return x.RewardTiers + } + return nil +} + +// An event leaderboard's tier-specific promotion/demotion zones. +type EventLeaderboardChangeZone struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Percentage of cohort to promote, expressed in the range of 0.0 to 1.0. + Promotion float64 `protobuf:"fixed64,1,opt,name=promotion,proto3" json:"promotion,omitempty"` + // Percentage of cohort to demote, expressed in the range of 0.0 to 1.0. + Demotion float64 `protobuf:"fixed64,2,opt,name=demotion,proto3" json:"demotion,omitempty"` + // Whether or not to always demote players that failed to submit a score at all. + DemoteIdle bool `protobuf:"varint,3,opt,name=demote_idle,json=demoteIdle,proto3" json:"demote_idle,omitempty"` +} + +func (x *EventLeaderboardChangeZone) Reset() { + *x = EventLeaderboardChangeZone{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[75] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventLeaderboardChangeZone) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventLeaderboardChangeZone) ProtoMessage() {} + +func (x *EventLeaderboardChangeZone) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[75] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EventLeaderboardChangeZone.ProtoReflect.Descriptor instead. +func (*EventLeaderboardChangeZone) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{75} +} + +func (x *EventLeaderboardChangeZone) GetPromotion() float64 { + if x != nil { + return x.Promotion + } + return 0 +} + +func (x *EventLeaderboardChangeZone) GetDemotion() float64 { + if x != nil { + return x.Demotion + } + return 0 +} + +func (x *EventLeaderboardChangeZone) GetDemoteIdle() bool { + if x != nil { + return x.DemoteIdle + } + return false +} + +// Details about a specific event leaderboard. +type EventLeaderboard struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Event leaderboard ID. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The name of the event leaderboard. May be an i18n code. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // A description of the event leaderboard. May be an i18n code. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // The category to group the event leaderboard together with others. + Category string `protobuf:"bytes,4,opt,name=category,proto3" json:"category,omitempty"` + // Score ordering. + Ascending bool `protobuf:"varint,5,opt,name=ascending,proto3" json:"ascending,omitempty"` + // Score submission operator. + Operator string `protobuf:"bytes,6,opt,name=operator,proto3" json:"operator,omitempty"` + // The tier of this instance of the event leaderboard. + Tier int32 `protobuf:"varint,7,opt,name=tier,proto3" json:"tier,omitempty"` + // Time when the event starts. + StartTimeSec int64 `protobuf:"varint,8,opt,name=start_time_sec,json=startTimeSec,proto3" json:"start_time_sec,omitempty"` + // Time when the event ends. + EndTimeSec int64 `protobuf:"varint,9,opt,name=end_time_sec,json=endTimeSec,proto3" json:"end_time_sec,omitempty"` + // Time when the event expires. + ExpiryTimeSec int64 `protobuf:"varint,10,opt,name=expiry_time_sec,json=expiryTimeSec,proto3" json:"expiry_time_sec,omitempty"` + // The available reward and its probabilities. + AvailableRewards *AvailableRewards `protobuf:"bytes,11,opt,name=available_rewards,json=availableRewards,proto3" json:"available_rewards,omitempty"` + // The possible reward tiers for this instance of the event leaderboard, based on its current tier. + RewardTiers map[int32]*EventLeaderboardRewardTiers `protobuf:"bytes,12,rep,name=reward_tiers,json=rewardTiers,proto3" json:"reward_tiers,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Per-tier promotion/demotion change zones, if configured. + ChangeZones map[int32]*EventLeaderboardChangeZone `protobuf:"bytes,13,rep,name=change_zones,json=changeZones,proto3" json:"change_zones,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Claim time, if any. + ClaimTimeSec int64 `protobuf:"varint,14,opt,name=claim_time_sec,json=claimTimeSec,proto3" json:"claim_time_sec,omitempty"` + // The outcome (rolled) reward for the event leaderboard. + Reward *Reward `protobuf:"bytes,15,opt,name=reward,proto3" json:"reward,omitempty"` + // Additional metadata properties. + AdditionalProperties map[string]string `protobuf:"bytes,16,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Current participant count. + Count int64 `protobuf:"varint,17,opt,name=count,proto3" json:"count,omitempty"` + // Maximum participant count. + MaxCount int64 `protobuf:"varint,18,opt,name=max_count,json=maxCount,proto3" json:"max_count,omitempty"` + // Maximum number of score submissions per participant. + MaxNumScore int64 `protobuf:"varint,19,opt,name=max_num_score,json=maxNumScore,proto3" json:"max_num_score,omitempty"` + // Participants and their scores. + Scores []*EventLeaderboardScore `protobuf:"bytes,20,rep,name=scores,proto3" json:"scores,omitempty"` + // Indicates if the event is still active, and scores can be submitted. + IsActive bool `protobuf:"varint,21,opt,name=is_active,json=isActive,proto3" json:"is_active,omitempty"` + // Indicates if the event is over and its reward can be claimed. + CanClaim bool `protobuf:"varint,22,opt,name=can_claim,json=canClaim,proto3" json:"can_claim,omitempty"` + // Indicates if the event can be rolled to get a new set of opponents. + CanRoll bool `protobuf:"varint,23,opt,name=can_roll,json=canRoll,proto3" json:"can_roll,omitempty"` + // Extra matchmaker properties for this cohort. + MatchmakerProperties *structpb.Struct `protobuf:"bytes,24,opt,name=matchmaker_properties,json=matchmakerProperties,proto3" json:"matchmaker_properties,omitempty"` + // The UNIX timestamp for the current server time. + CurrentTimeSec int64 `protobuf:"varint,25,opt,name=current_time_sec,json=currentTimeSec,proto3" json:"current_time_sec,omitempty"` + // Cohort ID the user belongs to for this active phase. + CohortId string `protobuf:"bytes,26,opt,name=cohort_id,json=cohortId,proto3" json:"cohort_id,omitempty"` + // Backing ID for underlying score tracking. + BackingId string `protobuf:"bytes,27,opt,name=backing_id,json=backingId,proto3" json:"backing_id,omitempty"` +} + +func (x *EventLeaderboard) Reset() { + *x = EventLeaderboard{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[76] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventLeaderboard) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventLeaderboard) ProtoMessage() {} + +func (x *EventLeaderboard) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[76] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EventLeaderboard.ProtoReflect.Descriptor instead. +func (*EventLeaderboard) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{76} +} + +func (x *EventLeaderboard) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *EventLeaderboard) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *EventLeaderboard) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *EventLeaderboard) GetCategory() string { + if x != nil { + return x.Category + } + return "" +} + +func (x *EventLeaderboard) GetAscending() bool { + if x != nil { + return x.Ascending + } + return false +} + +func (x *EventLeaderboard) GetOperator() string { + if x != nil { + return x.Operator + } + return "" +} + +func (x *EventLeaderboard) GetTier() int32 { + if x != nil { + return x.Tier + } + return 0 +} + +func (x *EventLeaderboard) GetStartTimeSec() int64 { + if x != nil { + return x.StartTimeSec + } + return 0 +} + +func (x *EventLeaderboard) GetEndTimeSec() int64 { + if x != nil { + return x.EndTimeSec + } + return 0 +} + +func (x *EventLeaderboard) GetExpiryTimeSec() int64 { + if x != nil { + return x.ExpiryTimeSec + } + return 0 +} + +func (x *EventLeaderboard) GetAvailableRewards() *AvailableRewards { + if x != nil { + return x.AvailableRewards + } + return nil +} + +func (x *EventLeaderboard) GetRewardTiers() map[int32]*EventLeaderboardRewardTiers { + if x != nil { + return x.RewardTiers + } + return nil +} + +func (x *EventLeaderboard) GetChangeZones() map[int32]*EventLeaderboardChangeZone { + if x != nil { + return x.ChangeZones + } + return nil +} + +func (x *EventLeaderboard) GetClaimTimeSec() int64 { + if x != nil { + return x.ClaimTimeSec + } + return 0 +} + +func (x *EventLeaderboard) GetReward() *Reward { + if x != nil { + return x.Reward + } + return nil +} + +func (x *EventLeaderboard) GetAdditionalProperties() map[string]string { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +func (x *EventLeaderboard) GetCount() int64 { + if x != nil { + return x.Count + } + return 0 +} + +func (x *EventLeaderboard) GetMaxCount() int64 { + if x != nil { + return x.MaxCount + } + return 0 +} + +func (x *EventLeaderboard) GetMaxNumScore() int64 { + if x != nil { + return x.MaxNumScore + } + return 0 +} + +func (x *EventLeaderboard) GetScores() []*EventLeaderboardScore { + if x != nil { + return x.Scores + } + return nil +} + +func (x *EventLeaderboard) GetIsActive() bool { + if x != nil { + return x.IsActive + } + return false +} + +func (x *EventLeaderboard) GetCanClaim() bool { + if x != nil { + return x.CanClaim + } + return false +} + +func (x *EventLeaderboard) GetCanRoll() bool { + if x != nil { + return x.CanRoll + } + return false +} + +func (x *EventLeaderboard) GetMatchmakerProperties() *structpb.Struct { + if x != nil { + return x.MatchmakerProperties + } + return nil +} + +func (x *EventLeaderboard) GetCurrentTimeSec() int64 { + if x != nil { + return x.CurrentTimeSec + } + return 0 +} + +func (x *EventLeaderboard) GetCohortId() string { + if x != nil { + return x.CohortId + } + return "" +} + +func (x *EventLeaderboard) GetBackingId() string { + if x != nil { + return x.BackingId + } + return "" +} + +// Several event leaderboards the user has access to, resulting from a listing operation. +type EventLeaderboards struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Zero or more event leaderboards. + EventLeaderboards []*EventLeaderboard `protobuf:"bytes,1,rep,name=event_leaderboards,json=eventLeaderboards,proto3" json:"event_leaderboards,omitempty"` +} + +func (x *EventLeaderboards) Reset() { + *x = EventLeaderboards{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[77] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventLeaderboards) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventLeaderboards) ProtoMessage() {} + +func (x *EventLeaderboards) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[77] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EventLeaderboards.ProtoReflect.Descriptor instead. +func (*EventLeaderboards) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{77} +} + +func (x *EventLeaderboards) GetEventLeaderboards() []*EventLeaderboard { + if x != nil { + return x.EventLeaderboards + } + return nil +} + +type EventLeaderboardDebugFillRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Event leaderboard ID to fill. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Optional target cohort size to fill to, otherwise fill to max cohort size. + TargetCount int32 `protobuf:"varint,2,opt,name=target_count,json=targetCount,proto3" json:"target_count,omitempty"` +} + +func (x *EventLeaderboardDebugFillRequest) Reset() { + *x = EventLeaderboardDebugFillRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[78] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventLeaderboardDebugFillRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventLeaderboardDebugFillRequest) ProtoMessage() {} + +func (x *EventLeaderboardDebugFillRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[78] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EventLeaderboardDebugFillRequest.ProtoReflect.Descriptor instead. +func (*EventLeaderboardDebugFillRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{78} +} + +func (x *EventLeaderboardDebugFillRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *EventLeaderboardDebugFillRequest) GetTargetCount() int32 { + if x != nil { + return x.TargetCount + } + return 0 +} + +// DEBUG. Payload describing scores to set for a cohort's participants. +type EventLeaderboardDebugRandomScoresRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Event leaderboard ID to update. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Minimum score, inclusive. + Min int64 `protobuf:"varint,2,opt,name=min,proto3" json:"min,omitempty"` + // Maximum score, inclusive. + Max int64 `protobuf:"varint,3,opt,name=max,proto3" json:"max,omitempty"` + // Optional operator to use when updating scores. + Operator *wrapperspb.Int32Value `protobuf:"bytes,4,opt,name=operator,proto3" json:"operator,omitempty"` + // Minimum subscore, inclusive. + SubscoreMin int64 `protobuf:"varint,5,opt,name=subscore_min,json=subscoreMin,proto3" json:"subscore_min,omitempty"` + // Maximum subscore, inclusive. + SubscoreMax int64 `protobuf:"varint,6,opt,name=subscore_max,json=subscoreMax,proto3" json:"subscore_max,omitempty"` +} + +func (x *EventLeaderboardDebugRandomScoresRequest) Reset() { + *x = EventLeaderboardDebugRandomScoresRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[79] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventLeaderboardDebugRandomScoresRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventLeaderboardDebugRandomScoresRequest) ProtoMessage() {} + +func (x *EventLeaderboardDebugRandomScoresRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[79] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EventLeaderboardDebugRandomScoresRequest.ProtoReflect.Descriptor instead. +func (*EventLeaderboardDebugRandomScoresRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{79} +} + +func (x *EventLeaderboardDebugRandomScoresRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *EventLeaderboardDebugRandomScoresRequest) GetMin() int64 { + if x != nil { + return x.Min + } + return 0 +} + +func (x *EventLeaderboardDebugRandomScoresRequest) GetMax() int64 { + if x != nil { + return x.Max + } + return 0 +} + +func (x *EventLeaderboardDebugRandomScoresRequest) GetOperator() *wrapperspb.Int32Value { + if x != nil { + return x.Operator + } + return nil +} + +func (x *EventLeaderboardDebugRandomScoresRequest) GetSubscoreMin() int64 { + if x != nil { + return x.SubscoreMin + } + return 0 +} + +func (x *EventLeaderboardDebugRandomScoresRequest) GetSubscoreMax() int64 { + if x != nil { + return x.SubscoreMax + } + return 0 +} + +// A contributor to this donation. +type EconomyDonationContributor struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The user ID that contributed. + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + // The amount they've donated. + Count int64 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"` + // The amount that has been claimed by the recipient already. + ClaimCount int64 `protobuf:"varint,3,opt,name=claim_count,json=claimCount,proto3" json:"claim_count,omitempty"` +} + +func (x *EconomyDonationContributor) Reset() { + *x = EconomyDonationContributor{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[80] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EconomyDonationContributor) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EconomyDonationContributor) ProtoMessage() {} + +func (x *EconomyDonationContributor) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[80] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EconomyDonationContributor.ProtoReflect.Descriptor instead. +func (*EconomyDonationContributor) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{80} +} + +func (x *EconomyDonationContributor) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *EconomyDonationContributor) GetCount() int64 { + if x != nil { + return x.Count + } + return 0 +} + +func (x *EconomyDonationContributor) GetClaimCount() int64 { + if x != nil { + return x.ClaimCount + } + return 0 +} + +// A donation for a user. +type EconomyDonation struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The user that owns this donation. + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + // The count of how much of the donation has already been claimed. + ClaimCount int64 `protobuf:"varint,2,opt,name=claim_count,json=claimCount,proto3" json:"claim_count,omitempty"` + // The count of how much has been contributed by users. + Count int64 `protobuf:"varint,3,opt,name=count,proto3" json:"count,omitempty"` + // The UNIX timestamp for the current time. + CurrentTimeSec int64 `protobuf:"varint,4,opt,name=current_time_sec,json=currentTimeSec,proto3" json:"current_time_sec,omitempty"` + // The description for the donation, if any. May be an i18n code. + Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` + // The UNIX timestamp when the donation expires. + ExpireTimeSec int64 `protobuf:"varint,6,opt,name=expire_time_sec,json=expireTimeSec,proto3" json:"expire_time_sec,omitempty"` + // The ID of the donation. + Id string `protobuf:"bytes,7,opt,name=id,proto3" json:"id,omitempty"` + // The maximum "units" which can be collected. + MaxCount int64 `protobuf:"varint,8,opt,name=max_count,json=maxCount,proto3" json:"max_count,omitempty"` + // The name for the donation, if any. May be an i18n code. + Name string `protobuf:"bytes,9,opt,name=name,proto3" json:"name,omitempty"` + // The configuration for rewards granted to the recipient of the donation. + RecipientAvailableRewards *AvailableRewards `protobuf:"bytes,10,opt,name=recipient_available_rewards,json=recipientAvailableRewards,proto3" json:"recipient_available_rewards,omitempty"` + // The maximum number of donations per contributor. + UserContributionMaxCount int64 `protobuf:"varint,11,opt,name=user_contribution_max_count,json=userContributionMaxCount,proto3" json:"user_contribution_max_count,omitempty"` + // The contributors to this donation, if any. + Contributors []*EconomyDonationContributor `protobuf:"bytes,12,rep,name=contributors,proto3" json:"contributors,omitempty"` + // The configuration for rewards granted to the contributor of the donation. + ContributorAvailableRewards *AvailableRewards `protobuf:"bytes,13,opt,name=contributor_available_rewards,json=contributorAvailableRewards,proto3" json:"contributor_available_rewards,omitempty"` + // All rewards claimed by the recipient of this donation. + RecipientRewards []*Reward `protobuf:"bytes,14,rep,name=recipient_rewards,json=recipientRewards,proto3" json:"recipient_rewards,omitempty"` + // Additional metadata properties. + AdditionalProperties map[string]string `protobuf:"bytes,15,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *EconomyDonation) Reset() { + *x = EconomyDonation{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[81] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EconomyDonation) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EconomyDonation) ProtoMessage() {} + +func (x *EconomyDonation) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[81] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EconomyDonation.ProtoReflect.Descriptor instead. +func (*EconomyDonation) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{81} +} + +func (x *EconomyDonation) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *EconomyDonation) GetClaimCount() int64 { + if x != nil { + return x.ClaimCount + } + return 0 +} + +func (x *EconomyDonation) GetCount() int64 { + if x != nil { + return x.Count + } + return 0 +} + +func (x *EconomyDonation) GetCurrentTimeSec() int64 { + if x != nil { + return x.CurrentTimeSec + } + return 0 +} + +func (x *EconomyDonation) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *EconomyDonation) GetExpireTimeSec() int64 { + if x != nil { + return x.ExpireTimeSec + } + return 0 +} + +func (x *EconomyDonation) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *EconomyDonation) GetMaxCount() int64 { + if x != nil { + return x.MaxCount + } + return 0 +} + +func (x *EconomyDonation) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *EconomyDonation) GetRecipientAvailableRewards() *AvailableRewards { + if x != nil { + return x.RecipientAvailableRewards + } + return nil +} + +func (x *EconomyDonation) GetUserContributionMaxCount() int64 { + if x != nil { + return x.UserContributionMaxCount + } + return 0 +} + +func (x *EconomyDonation) GetContributors() []*EconomyDonationContributor { + if x != nil { + return x.Contributors + } + return nil +} + +func (x *EconomyDonation) GetContributorAvailableRewards() *AvailableRewards { + if x != nil { + return x.ContributorAvailableRewards + } + return nil +} + +func (x *EconomyDonation) GetRecipientRewards() []*Reward { + if x != nil { + return x.RecipientRewards + } + return nil +} + +func (x *EconomyDonation) GetAdditionalProperties() map[string]string { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +// An acknowledgement of the idempotent creation of a donation for a user. +type EconomyDonationAck struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // True if the donation is newly created. + Created bool `protobuf:"varint,1,opt,name=created,proto3" json:"created,omitempty"` + // The donation requested which may already be active or newly created. + Donation *EconomyDonation `protobuf:"bytes,2,opt,name=donation,proto3" json:"donation,omitempty"` +} + +func (x *EconomyDonationAck) Reset() { + *x = EconomyDonationAck{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[82] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EconomyDonationAck) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EconomyDonationAck) ProtoMessage() {} + +func (x *EconomyDonationAck) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[82] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EconomyDonationAck.ProtoReflect.Descriptor instead. +func (*EconomyDonationAck) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{82} +} + +func (x *EconomyDonationAck) GetCreated() bool { + if x != nil { + return x.Created + } + return false +} + +func (x *EconomyDonationAck) GetDonation() *EconomyDonation { + if x != nil { + return x.Donation + } + return nil +} + +// A list of active donations returned for some set of users. +type EconomyDonationsList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The active donations for a set of users. + Donations []*EconomyDonation `protobuf:"bytes,1,rep,name=donations,proto3" json:"donations,omitempty"` +} + +func (x *EconomyDonationsList) Reset() { + *x = EconomyDonationsList{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[83] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EconomyDonationsList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EconomyDonationsList) ProtoMessage() {} + +func (x *EconomyDonationsList) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[83] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EconomyDonationsList.ProtoReflect.Descriptor instead. +func (*EconomyDonationsList) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{83} +} + +func (x *EconomyDonationsList) GetDonations() []*EconomyDonation { + if x != nil { + return x.Donations + } + return nil +} + +// Information about a specific donation claim. +type EconomyDonationClaimRequestDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // List of donor IDs to claim and amount to claim from each, or empty to claim all available. + Donors map[string]int64 `protobuf:"bytes,1,rep,name=donors,proto3" json:"donors,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *EconomyDonationClaimRequestDetails) Reset() { + *x = EconomyDonationClaimRequestDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[84] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EconomyDonationClaimRequestDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EconomyDonationClaimRequestDetails) ProtoMessage() {} + +func (x *EconomyDonationClaimRequestDetails) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[84] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EconomyDonationClaimRequestDetails.ProtoReflect.Descriptor instead. +func (*EconomyDonationClaimRequestDetails) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{84} +} + +func (x *EconomyDonationClaimRequestDetails) GetDonors() map[string]int64 { + if x != nil { + return x.Donors + } + return nil +} + +// Request to claim one or more donations. +type EconomyDonationClaimRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The donation IDs to claim. + DonationIds []string `protobuf:"bytes,1,rep,name=donation_ids,json=donationIds,proto3" json:"donation_ids,omitempty"` + // A mapped set of donations to donors to claim. + Donations map[string]*EconomyDonationClaimRequestDetails `protobuf:"bytes,2,rep,name=donations,proto3" json:"donations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *EconomyDonationClaimRequest) Reset() { + *x = EconomyDonationClaimRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[85] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EconomyDonationClaimRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EconomyDonationClaimRequest) ProtoMessage() {} + +func (x *EconomyDonationClaimRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[85] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EconomyDonationClaimRequest.ProtoReflect.Descriptor instead. +func (*EconomyDonationClaimRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{85} +} + +func (x *EconomyDonationClaimRequest) GetDonationIds() []string { + if x != nil { + return x.DonationIds + } + return nil +} + +func (x *EconomyDonationClaimRequest) GetDonations() map[string]*EconomyDonationClaimRequestDetails { + if x != nil { + return x.Donations + } + return nil +} + +// Response to claiming one or more donations. +type EconomyDonationClaimRewards struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // All active donations for the user. + Donations *EconomyDonationsList `protobuf:"bytes,1,opt,name=donations,proto3" json:"donations,omitempty"` + // The rewards from this particular claim. + ClaimedRewards map[string]*RewardList `protobuf:"bytes,2,rep,name=claimed_rewards,json=claimedRewards,proto3" json:"claimed_rewards,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *EconomyDonationClaimRewards) Reset() { + *x = EconomyDonationClaimRewards{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[86] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EconomyDonationClaimRewards) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EconomyDonationClaimRewards) ProtoMessage() {} + +func (x *EconomyDonationClaimRewards) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[86] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EconomyDonationClaimRewards.ProtoReflect.Descriptor instead. +func (*EconomyDonationClaimRewards) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{86} +} + +func (x *EconomyDonationClaimRewards) GetDonations() *EconomyDonationsList { + if x != nil { + return x.Donations + } + return nil +} + +func (x *EconomyDonationClaimRewards) GetClaimedRewards() map[string]*RewardList { + if x != nil { + return x.ClaimedRewards + } + return nil +} + +// Request to give a donation to a user. +type EconomyDonationGiveRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The user ID who receives the donation. + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + // The donation ID to give into. + DonationId string `protobuf:"bytes,2,opt,name=donation_id,json=donationId,proto3" json:"donation_id,omitempty"` +} + +func (x *EconomyDonationGiveRequest) Reset() { + *x = EconomyDonationGiveRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[87] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EconomyDonationGiveRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EconomyDonationGiveRequest) ProtoMessage() {} + +func (x *EconomyDonationGiveRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[87] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EconomyDonationGiveRequest.ProtoReflect.Descriptor instead. +func (*EconomyDonationGiveRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{87} +} + +func (x *EconomyDonationGiveRequest) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *EconomyDonationGiveRequest) GetDonationId() string { + if x != nil { + return x.DonationId + } + return "" +} + +// Request to get donations for one or more users. +type EconomyDonationGetRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The user IDs to get donations for. + Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` +} + +func (x *EconomyDonationGetRequest) Reset() { + *x = EconomyDonationGetRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[88] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EconomyDonationGetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EconomyDonationGetRequest) ProtoMessage() {} + +func (x *EconomyDonationGetRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[88] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EconomyDonationGetRequest.ProtoReflect.Descriptor instead. +func (*EconomyDonationGetRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{88} +} + +func (x *EconomyDonationGetRequest) GetIds() []string { + if x != nil { + return x.Ids + } + return nil +} + +// Request a new donation. +type EconomyDonationRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The donation ID to request, defined on the server. + DonationId string `protobuf:"bytes,1,opt,name=donation_id,json=donationId,proto3" json:"donation_id,omitempty"` +} + +func (x *EconomyDonationRequest) Reset() { + *x = EconomyDonationRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[89] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EconomyDonationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EconomyDonationRequest) ProtoMessage() {} + +func (x *EconomyDonationRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[89] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EconomyDonationRequest.ProtoReflect.Descriptor instead. +func (*EconomyDonationRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{89} +} + +func (x *EconomyDonationRequest) GetDonationId() string { + if x != nil { + return x.DonationId + } + return "" +} + +// A map of active donations keyed by user ID. +type EconomyDonationsByUserList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The active donations grouped by user ID. + UserDonations map[string]*EconomyDonationsList `protobuf:"bytes,1,rep,name=user_donations,json=userDonations,proto3" json:"user_donations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *EconomyDonationsByUserList) Reset() { + *x = EconomyDonationsByUserList{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[90] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EconomyDonationsByUserList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EconomyDonationsByUserList) ProtoMessage() {} + +func (x *EconomyDonationsByUserList) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[90] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EconomyDonationsByUserList.ProtoReflect.Descriptor instead. +func (*EconomyDonationsByUserList) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{90} +} + +func (x *EconomyDonationsByUserList) GetUserDonations() map[string]*EconomyDonationsList { + if x != nil { + return x.UserDonations + } + return nil +} + +// The cost(s) associated with a store item. +type EconomyListStoreItemCost struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The virtual currencies, if any. + Currencies map[string]int64 `protobuf:"bytes,1,rep,name=currencies,proto3" json:"currencies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // The required purchase SKU, if any. + Sku string `protobuf:"bytes,2,opt,name=sku,proto3" json:"sku,omitempty"` +} + +func (x *EconomyListStoreItemCost) Reset() { + *x = EconomyListStoreItemCost{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[91] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EconomyListStoreItemCost) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EconomyListStoreItemCost) ProtoMessage() {} + +func (x *EconomyListStoreItemCost) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[91] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EconomyListStoreItemCost.ProtoReflect.Descriptor instead. +func (*EconomyListStoreItemCost) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{91} +} + +func (x *EconomyListStoreItemCost) GetCurrencies() map[string]int64 { + if x != nil { + return x.Currencies + } + return nil +} + +func (x *EconomyListStoreItemCost) GetSku() string { + if x != nil { + return x.Sku + } + return "" +} + +// Represents an individual available store items. +type EconomyListStoreItem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The category to group the item together with others. + Category string `protobuf:"bytes,1,opt,name=category,proto3" json:"category,omitempty"` + // The cost of the item. + Cost *EconomyListStoreItemCost `protobuf:"bytes,2,opt,name=cost,proto3" json:"cost,omitempty"` + // A description of the item. May be an i18n code. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // The ID of the item. + Id string `protobuf:"bytes,4,opt,name=id,proto3" json:"id,omitempty"` + // The name of the item. May be an i18n code. + Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` + // The available rewards in this store item. + AvailableRewards *AvailableRewards `protobuf:"bytes,6,opt,name=available_rewards,json=availableRewards,proto3" json:"available_rewards,omitempty"` + // Additional metadata properties. + AdditionalProperties map[string]string `protobuf:"bytes,7,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // The item is visible, but if true it's unavailable to purchase by the player. + Unavailable bool `protobuf:"varint,8,opt,name=unavailable,proto3" json:"unavailable,omitempty"` +} + +func (x *EconomyListStoreItem) Reset() { + *x = EconomyListStoreItem{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[92] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EconomyListStoreItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EconomyListStoreItem) ProtoMessage() {} + +func (x *EconomyListStoreItem) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[92] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EconomyListStoreItem.ProtoReflect.Descriptor instead. +func (*EconomyListStoreItem) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{92} +} + +func (x *EconomyListStoreItem) GetCategory() string { + if x != nil { + return x.Category + } + return "" +} + +func (x *EconomyListStoreItem) GetCost() *EconomyListStoreItemCost { + if x != nil { + return x.Cost + } + return nil +} + +func (x *EconomyListStoreItem) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *EconomyListStoreItem) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *EconomyListStoreItem) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *EconomyListStoreItem) GetAvailableRewards() *AvailableRewards { + if x != nil { + return x.AvailableRewards + } + return nil +} + +func (x *EconomyListStoreItem) GetAdditionalProperties() map[string]string { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +func (x *EconomyListStoreItem) GetUnavailable() bool { + if x != nil { + return x.Unavailable + } + return false +} + +// Represents an available ad placement. +type EconomyListPlacement struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the placement. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The reward obtained from this placement. + Reward *Reward `protobuf:"bytes,2,opt,name=reward,proto3" json:"reward,omitempty"` + // The available rewards obtained from this placement. + AvailableRewards *AvailableRewards `protobuf:"bytes,3,opt,name=available_rewards,json=availableRewards,proto3" json:"available_rewards,omitempty"` + // Additional metadata properties. + AdditionalProperties map[string]string `protobuf:"bytes,4,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *EconomyListPlacement) Reset() { + *x = EconomyListPlacement{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[93] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EconomyListPlacement) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EconomyListPlacement) ProtoMessage() {} + +func (x *EconomyListPlacement) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[93] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EconomyListPlacement.ProtoReflect.Descriptor instead. +func (*EconomyListPlacement) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{93} +} + +func (x *EconomyListPlacement) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *EconomyListPlacement) GetReward() *Reward { + if x != nil { + return x.Reward + } + return nil +} + +func (x *EconomyListPlacement) GetAvailableRewards() *AvailableRewards { + if x != nil { + return x.AvailableRewards + } + return nil +} + +func (x *EconomyListPlacement) GetAdditionalProperties() map[string]string { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +// The response data with the available store items. +type EconomyList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The list of store items. + StoreItems []*EconomyListStoreItem `protobuf:"bytes,1,rep,name=store_items,json=storeItems,proto3" json:"store_items,omitempty"` + // The list of placements. + Placements []*EconomyListPlacement `protobuf:"bytes,2,rep,name=placements,proto3" json:"placements,omitempty"` + // The set of active donations for the current user. + Donations map[string]*EconomyDonation `protobuf:"bytes,3,rep,name=donations,proto3" json:"donations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // The list of active reward modifiers. + ActiveRewardModifiers []*ActiveRewardModifier `protobuf:"bytes,4,rep,name=active_reward_modifiers,json=activeRewardModifiers,proto3" json:"active_reward_modifiers,omitempty"` + // Current server time. + CurrentTimeSec int64 `protobuf:"varint,5,opt,name=current_time_sec,json=currentTimeSec,proto3" json:"current_time_sec,omitempty"` +} + +func (x *EconomyList) Reset() { + *x = EconomyList{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[94] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EconomyList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EconomyList) ProtoMessage() {} + +func (x *EconomyList) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[94] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EconomyList.ProtoReflect.Descriptor instead. +func (*EconomyList) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{94} +} + +func (x *EconomyList) GetStoreItems() []*EconomyListStoreItem { + if x != nil { + return x.StoreItems + } + return nil +} + +func (x *EconomyList) GetPlacements() []*EconomyListPlacement { + if x != nil { + return x.Placements + } + return nil +} + +func (x *EconomyList) GetDonations() map[string]*EconomyDonation { + if x != nil { + return x.Donations + } + return nil +} + +func (x *EconomyList) GetActiveRewardModifiers() []*ActiveRewardModifier { + if x != nil { + return x.ActiveRewardModifiers + } + return nil +} + +func (x *EconomyList) GetCurrentTimeSec() int64 { + if x != nil { + return x.CurrentTimeSec + } + return 0 +} + +// A item owned by the current user. +type InventoryItem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the item. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The name of the item. May be an i18n code. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // A description of the item. May be an i18n code. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // The category to group the item together with others. + Category string `protobuf:"bytes,4,opt,name=category,proto3" json:"category,omitempty"` + // The sets the item is grouped into. + ItemSets []string `protobuf:"bytes,5,rep,name=item_sets,json=itemSets,proto3" json:"item_sets,omitempty"` + // The current count of the item. + Count int64 `protobuf:"varint,6,opt,name=count,proto3" json:"count,omitempty"` + // The maximum count which can be owned for this item. + MaxCount int64 `protobuf:"varint,7,opt,name=max_count,json=maxCount,proto3" json:"max_count,omitempty"` + // Whether or not the item is stackable. + Stackable bool `protobuf:"varint,8,opt,name=stackable,proto3" json:"stackable,omitempty"` + // Whether or not the item is consumable. + Consumable bool `protobuf:"varint,9,opt,name=consumable,proto3" json:"consumable,omitempty"` + // The configuration for the reward to grant for consumption. + ConsumeAvailableRewards *AvailableRewards `protobuf:"bytes,10,opt,name=consume_available_rewards,json=consumeAvailableRewards,proto3" json:"consume_available_rewards,omitempty"` + // The properties with string values. + StringProperties map[string]string `protobuf:"bytes,11,rep,name=string_properties,json=stringProperties,proto3" json:"string_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // The properties with numeric values. + NumericProperties map[string]float64 `protobuf:"bytes,12,rep,name=numeric_properties,json=numericProperties,proto3" json:"numeric_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"` + // A UNIX timestamp when the user acquired this item. + OwnedTimeSec int64 `protobuf:"varint,13,opt,name=owned_time_sec,json=ownedTimeSec,proto3" json:"owned_time_sec,omitempty"` + // A UNIX timestamp when the item was updated. + UpdateTimeSec int64 `protobuf:"varint,14,opt,name=update_time_sec,json=updateTimeSec,proto3" json:"update_time_sec,omitempty"` + // The instance ID of the item, if any. + InstanceId string `protobuf:"bytes,15,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` +} + +func (x *InventoryItem) Reset() { + *x = InventoryItem{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[95] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InventoryItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InventoryItem) ProtoMessage() {} + +func (x *InventoryItem) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[95] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InventoryItem.ProtoReflect.Descriptor instead. +func (*InventoryItem) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{95} +} + +func (x *InventoryItem) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *InventoryItem) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *InventoryItem) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *InventoryItem) GetCategory() string { + if x != nil { + return x.Category + } + return "" +} + +func (x *InventoryItem) GetItemSets() []string { + if x != nil { + return x.ItemSets + } + return nil +} + +func (x *InventoryItem) GetCount() int64 { + if x != nil { + return x.Count + } + return 0 +} + +func (x *InventoryItem) GetMaxCount() int64 { + if x != nil { + return x.MaxCount + } + return 0 +} + +func (x *InventoryItem) GetStackable() bool { + if x != nil { + return x.Stackable + } + return false +} + +func (x *InventoryItem) GetConsumable() bool { + if x != nil { + return x.Consumable + } + return false +} + +func (x *InventoryItem) GetConsumeAvailableRewards() *AvailableRewards { + if x != nil { + return x.ConsumeAvailableRewards + } + return nil +} + +func (x *InventoryItem) GetStringProperties() map[string]string { + if x != nil { + return x.StringProperties + } + return nil +} + +func (x *InventoryItem) GetNumericProperties() map[string]float64 { + if x != nil { + return x.NumericProperties + } + return nil +} + +func (x *InventoryItem) GetOwnedTimeSec() int64 { + if x != nil { + return x.OwnedTimeSec + } + return 0 +} + +func (x *InventoryItem) GetUpdateTimeSec() int64 { + if x != nil { + return x.UpdateTimeSec + } + return 0 +} + +func (x *InventoryItem) GetInstanceId() string { + if x != nil { + return x.InstanceId + } + return "" +} + +// Request all inventory items in the economy. +type InventoryListRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The category for the items to filter for, or empty for all. + ItemCategory string `protobuf:"bytes,1,opt,name=item_category,json=itemCategory,proto3" json:"item_category,omitempty"` +} + +func (x *InventoryListRequest) Reset() { + *x = InventoryListRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[96] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InventoryListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InventoryListRequest) ProtoMessage() {} + +func (x *InventoryListRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[96] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InventoryListRequest.ProtoReflect.Descriptor instead. +func (*InventoryListRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{96} +} + +func (x *InventoryListRequest) GetItemCategory() string { + if x != nil { + return x.ItemCategory + } + return "" +} + +// Represents a request to grant items to the user. +type InventoryGrantRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The items to grant. + Items map[string]int64 `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *InventoryGrantRequest) Reset() { + *x = InventoryGrantRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[97] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InventoryGrantRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InventoryGrantRequest) ProtoMessage() {} + +func (x *InventoryGrantRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[97] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InventoryGrantRequest.ProtoReflect.Descriptor instead. +func (*InventoryGrantRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{97} +} + +func (x *InventoryGrantRequest) GetItems() map[string]int64 { + if x != nil { + return x.Items + } + return nil +} + +// The typed properties to update in an instanced inventory item. +type InventoryUpdateItemProperties struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The properties with string values. + StringProperties map[string]string `protobuf:"bytes,1,rep,name=string_properties,json=stringProperties,proto3" json:"string_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // The properties with numeric values. + NumericProperties map[string]float64 `protobuf:"bytes,2,rep,name=numeric_properties,json=numericProperties,proto3" json:"numeric_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"` +} + +func (x *InventoryUpdateItemProperties) Reset() { + *x = InventoryUpdateItemProperties{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[98] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InventoryUpdateItemProperties) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InventoryUpdateItemProperties) ProtoMessage() {} + +func (x *InventoryUpdateItemProperties) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[98] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InventoryUpdateItemProperties.ProtoReflect.Descriptor instead. +func (*InventoryUpdateItemProperties) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{98} +} + +func (x *InventoryUpdateItemProperties) GetStringProperties() map[string]string { + if x != nil { + return x.StringProperties + } + return nil +} + +func (x *InventoryUpdateItemProperties) GetNumericProperties() map[string]float64 { + if x != nil { + return x.NumericProperties + } + return nil +} + +// Represents a request to update properties of instanced items. +type InventoryUpdateItemsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The item updates to action, keyed by item instance ID. + ItemUpdates map[string]*InventoryUpdateItemProperties `protobuf:"bytes,1,rep,name=item_updates,json=itemUpdates,proto3" json:"item_updates,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *InventoryUpdateItemsRequest) Reset() { + *x = InventoryUpdateItemsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[99] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InventoryUpdateItemsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InventoryUpdateItemsRequest) ProtoMessage() {} + +func (x *InventoryUpdateItemsRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[99] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InventoryUpdateItemsRequest.ProtoReflect.Descriptor instead. +func (*InventoryUpdateItemsRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{99} +} + +func (x *InventoryUpdateItemsRequest) GetItemUpdates() map[string]*InventoryUpdateItemProperties { + if x != nil { + return x.ItemUpdates + } + return nil +} + +// The inventory in the economy or owned by user. +type Inventory struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The items in the player's inventory. + Items map[string]*InventoryItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *Inventory) Reset() { + *x = Inventory{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[100] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Inventory) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Inventory) ProtoMessage() {} + +func (x *Inventory) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[100] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Inventory.ProtoReflect.Descriptor instead. +func (*Inventory) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{100} +} + +func (x *Inventory) GetItems() map[string]*InventoryItem { + if x != nil { + return x.Items + } + return nil +} + +// Request to consume some amount of items. +type InventoryConsumeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Item ID amounts to consume, if any. + Items map[string]int64 `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Whether or not to allow overconsumption. + Overconsume bool `protobuf:"varint,2,opt,name=overconsume,proto3" json:"overconsume,omitempty"` + // Instance ID amounts to consume, if any. + Instances map[string]int64 `protobuf:"bytes,3,rep,name=instances,proto3" json:"instances,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *InventoryConsumeRequest) Reset() { + *x = InventoryConsumeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[101] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InventoryConsumeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InventoryConsumeRequest) ProtoMessage() {} + +func (x *InventoryConsumeRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[101] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InventoryConsumeRequest.ProtoReflect.Descriptor instead. +func (*InventoryConsumeRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{101} +} + +func (x *InventoryConsumeRequest) GetItems() map[string]int64 { + if x != nil { + return x.Items + } + return nil +} + +func (x *InventoryConsumeRequest) GetOverconsume() bool { + if x != nil { + return x.Overconsume + } + return false +} + +func (x *InventoryConsumeRequest) GetInstances() map[string]int64 { + if x != nil { + return x.Instances + } + return nil +} + +// Updated inventory and rewards granted from consumption. +type InventoryConsumeRewards struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Updated inventory data, if changed. + Inventory *Inventory `protobuf:"bytes,1,opt,name=inventory,proto3" json:"inventory,omitempty"` + // Consume rewards by item ID, if any. + Rewards map[string]*RewardList `protobuf:"bytes,2,rep,name=rewards,proto3" json:"rewards,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Consume rewards by instance ID, if any. + InstanceRewards map[string]*RewardList `protobuf:"bytes,3,rep,name=instance_rewards,json=instanceRewards,proto3" json:"instance_rewards,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *InventoryConsumeRewards) Reset() { + *x = InventoryConsumeRewards{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[102] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InventoryConsumeRewards) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InventoryConsumeRewards) ProtoMessage() {} + +func (x *InventoryConsumeRewards) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[102] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InventoryConsumeRewards.ProtoReflect.Descriptor instead. +func (*InventoryConsumeRewards) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{102} +} + +func (x *InventoryConsumeRewards) GetInventory() *Inventory { + if x != nil { + return x.Inventory + } + return nil +} + +func (x *InventoryConsumeRewards) GetRewards() map[string]*RewardList { + if x != nil { + return x.Rewards + } + return nil +} + +func (x *InventoryConsumeRewards) GetInstanceRewards() map[string]*RewardList { + if x != nil { + return x.InstanceRewards + } + return nil +} + +// Delete items from inventory +type InventoryDeleteItemsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // list of instance ids + InstanceIds []string `protobuf:"bytes,1,rep,name=instance_ids,json=instanceIds,proto3" json:"instance_ids,omitempty"` +} + +func (x *InventoryDeleteItemsRequest) Reset() { + *x = InventoryDeleteItemsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[103] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InventoryDeleteItemsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InventoryDeleteItemsRequest) ProtoMessage() {} + +func (x *InventoryDeleteItemsRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[103] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InventoryDeleteItemsRequest.ProtoReflect.Descriptor instead. +func (*InventoryDeleteItemsRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{103} +} + +func (x *InventoryDeleteItemsRequest) GetInstanceIds() []string { + if x != nil { + return x.InstanceIds + } + return nil +} + +// Response from granting or purchasing items. This contains updated inventory data, if changed. +type InventoryUpdateAck struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Updated inventory data, if changed. + Inventory *Inventory `protobuf:"bytes,1,opt,name=inventory,proto3" json:"inventory,omitempty"` +} + +func (x *InventoryUpdateAck) Reset() { + *x = InventoryUpdateAck{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[104] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InventoryUpdateAck) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InventoryUpdateAck) ProtoMessage() {} + +func (x *InventoryUpdateAck) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[104] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InventoryUpdateAck.ProtoReflect.Descriptor instead. +func (*InventoryUpdateAck) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{104} +} + +func (x *InventoryUpdateAck) GetInventory() *Inventory { + if x != nil { + return x.Inventory + } + return nil +} + +// Response for retrieving Inventory system data definitions. +type InventoryList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The inventory items from definitions and the user. + Items map[string]*InventoryItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *InventoryList) Reset() { + *x = InventoryList{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[105] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InventoryList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InventoryList) ProtoMessage() {} + +func (x *InventoryList) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[105] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InventoryList.ProtoReflect.Descriptor instead. +func (*InventoryList) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{105} +} + +func (x *InventoryList) GetItems() map[string]*InventoryItem { + if x != nil { + return x.Items + } + return nil +} + +// Bid amount associated with an auction. +type AuctionBidAmount struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Currencies required or placed as part of the bid. + Currencies map[string]int64 `protobuf:"bytes,1,rep,name=currencies,proto3" json:"currencies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *AuctionBidAmount) Reset() { + *x = AuctionBidAmount{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[106] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuctionBidAmount) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuctionBidAmount) ProtoMessage() {} + +func (x *AuctionBidAmount) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[106] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuctionBidAmount.ProtoReflect.Descriptor instead. +func (*AuctionBidAmount) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{106} +} + +func (x *AuctionBidAmount) GetCurrencies() map[string]int64 { + if x != nil { + return x.Currencies + } + return nil +} + +// Fee structure associated with an auction, which will be deducted on completion. +type AuctionFee struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Percentage-based fee value. + Percentage float64 `protobuf:"fixed64,1,opt,name=percentage,proto3" json:"percentage,omitempty"` + // Fixed fee amount. + Fixed *AuctionBidAmount `protobuf:"bytes,2,opt,name=fixed,proto3" json:"fixed,omitempty"` +} + +func (x *AuctionFee) Reset() { + *x = AuctionFee{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[107] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuctionFee) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuctionFee) ProtoMessage() {} + +func (x *AuctionFee) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[107] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuctionFee.ProtoReflect.Descriptor instead. +func (*AuctionFee) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{107} +} + +func (x *AuctionFee) GetPercentage() float64 { + if x != nil { + return x.Percentage + } + return 0 +} + +func (x *AuctionFee) GetFixed() *AuctionBidAmount { + if x != nil { + return x.Fixed + } + return nil +} + +// Cost to be paid for listing an auction under this config condition. +type AuctionTemplateConditionListingCost struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Currencies cost, if any. + Currencies map[string]int64 `protobuf:"bytes,1,rep,name=currencies,proto3" json:"currencies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Inventory items cost, if any. + Items map[string]int64 `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Energies cost, if any. + Energies map[string]int64 `protobuf:"bytes,3,rep,name=energies,proto3" json:"energies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *AuctionTemplateConditionListingCost) Reset() { + *x = AuctionTemplateConditionListingCost{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[108] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuctionTemplateConditionListingCost) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuctionTemplateConditionListingCost) ProtoMessage() {} + +func (x *AuctionTemplateConditionListingCost) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[108] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuctionTemplateConditionListingCost.ProtoReflect.Descriptor instead. +func (*AuctionTemplateConditionListingCost) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{108} +} + +func (x *AuctionTemplateConditionListingCost) GetCurrencies() map[string]int64 { + if x != nil { + return x.Currencies + } + return nil +} + +func (x *AuctionTemplateConditionListingCost) GetItems() map[string]int64 { + if x != nil { + return x.Items + } + return nil +} + +func (x *AuctionTemplateConditionListingCost) GetEnergies() map[string]int64 { + if x != nil { + return x.Energies + } + return nil +} + +// Minimum increment required between bids. +type AuctionTemplateConditionBidIncrement struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Percentage-based increment value. + Percentage float64 `protobuf:"fixed64,1,opt,name=percentage,proto3" json:"percentage,omitempty"` + // Fixed increment amount. + Fixed *AuctionBidAmount `protobuf:"bytes,2,opt,name=fixed,proto3" json:"fixed,omitempty"` +} + +func (x *AuctionTemplateConditionBidIncrement) Reset() { + *x = AuctionTemplateConditionBidIncrement{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[109] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuctionTemplateConditionBidIncrement) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuctionTemplateConditionBidIncrement) ProtoMessage() {} + +func (x *AuctionTemplateConditionBidIncrement) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[109] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuctionTemplateConditionBidIncrement.ProtoReflect.Descriptor instead. +func (*AuctionTemplateConditionBidIncrement) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{109} +} + +func (x *AuctionTemplateConditionBidIncrement) GetPercentage() float64 { + if x != nil { + return x.Percentage + } + return 0 +} + +func (x *AuctionTemplateConditionBidIncrement) GetFixed() *AuctionBidAmount { + if x != nil { + return x.Fixed + } + return nil +} + +// A condition set as part of an auction template. +type AuctionTemplateCondition struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Number of seconds the auction will be available for. + DurationSec int64 `protobuf:"varint,1,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"` + // Cost to be paid on creating the auction listing, if any. + ListingCost *AuctionTemplateConditionListingCost `protobuf:"bytes,2,opt,name=listing_cost,json=listingCost,proto3" json:"listing_cost,omitempty"` + // Minimum starting bid. + BidStart *AuctionBidAmount `protobuf:"bytes,3,opt,name=bid_start,json=bidStart,proto3" json:"bid_start,omitempty"` + // Minimum increment between bids. + BidIncrement *AuctionTemplateConditionBidIncrement `protobuf:"bytes,4,opt,name=bid_increment,json=bidIncrement,proto3" json:"bid_increment,omitempty"` + // How close to auction end should it be extended if a new bid arrives. + ExtensionThresholdSec int64 `protobuf:"varint,5,opt,name=extension_threshold_sec,json=extensionThresholdSec,proto3" json:"extension_threshold_sec,omitempty"` + // How many seconds at a time will be added when extending. + ExtensionSec int64 `protobuf:"varint,6,opt,name=extension_sec,json=extensionSec,proto3" json:"extension_sec,omitempty"` + // How many seconds total may be added as extension. + ExtensionMaxSec int64 `protobuf:"varint,7,opt,name=extension_max_sec,json=extensionMaxSec,proto3" json:"extension_max_sec,omitempty"` + // Auction fee the creator will pay out of the winning bid amount, if any. + Fee *AuctionFee `protobuf:"bytes,8,opt,name=fee,proto3" json:"fee,omitempty"` +} + +func (x *AuctionTemplateCondition) Reset() { + *x = AuctionTemplateCondition{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[110] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuctionTemplateCondition) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuctionTemplateCondition) ProtoMessage() {} + +func (x *AuctionTemplateCondition) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[110] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuctionTemplateCondition.ProtoReflect.Descriptor instead. +func (*AuctionTemplateCondition) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{110} +} + +func (x *AuctionTemplateCondition) GetDurationSec() int64 { + if x != nil { + return x.DurationSec + } + return 0 +} + +func (x *AuctionTemplateCondition) GetListingCost() *AuctionTemplateConditionListingCost { + if x != nil { + return x.ListingCost + } + return nil +} + +func (x *AuctionTemplateCondition) GetBidStart() *AuctionBidAmount { + if x != nil { + return x.BidStart + } + return nil +} + +func (x *AuctionTemplateCondition) GetBidIncrement() *AuctionTemplateConditionBidIncrement { + if x != nil { + return x.BidIncrement + } + return nil +} + +func (x *AuctionTemplateCondition) GetExtensionThresholdSec() int64 { + if x != nil { + return x.ExtensionThresholdSec + } + return 0 +} + +func (x *AuctionTemplateCondition) GetExtensionSec() int64 { + if x != nil { + return x.ExtensionSec + } + return 0 +} + +func (x *AuctionTemplateCondition) GetExtensionMaxSec() int64 { + if x != nil { + return x.ExtensionMaxSec + } + return 0 +} + +func (x *AuctionTemplateCondition) GetFee() *AuctionFee { + if x != nil { + return x.Fee + } + return nil +} + +// An individually usable auction template. +type AuctionTemplate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Item identifiers that can be listed using this auction template. + Items []string `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` + // Item sets that can be listed using this auction template. + ItemSets []string `protobuf:"bytes,2,rep,name=item_sets,json=itemSets,proto3" json:"item_sets,omitempty"` + // Condition configurations available. + Conditions map[string]*AuctionTemplateCondition `protobuf:"bytes,3,rep,name=conditions,proto3" json:"conditions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Number of historic bids that will be kept. + BidHistoryCount int32 `protobuf:"varint,4,opt,name=bid_history_count,json=bidHistoryCount,proto3" json:"bid_history_count,omitempty"` +} + +func (x *AuctionTemplate) Reset() { + *x = AuctionTemplate{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[111] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuctionTemplate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuctionTemplate) ProtoMessage() {} + +func (x *AuctionTemplate) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[111] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuctionTemplate.ProtoReflect.Descriptor instead. +func (*AuctionTemplate) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{111} +} + +func (x *AuctionTemplate) GetItems() []string { + if x != nil { + return x.Items + } + return nil +} + +func (x *AuctionTemplate) GetItemSets() []string { + if x != nil { + return x.ItemSets + } + return nil +} + +func (x *AuctionTemplate) GetConditions() map[string]*AuctionTemplateCondition { + if x != nil { + return x.Conditions + } + return nil +} + +func (x *AuctionTemplate) GetBidHistoryCount() int32 { + if x != nil { + return x.BidHistoryCount + } + return 0 +} + +// Set of all available auction templates. +type AuctionTemplates struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // All available auction templates, keyed by an unique identifier. + Templates map[string]*AuctionTemplate `protobuf:"bytes,1,rep,name=templates,proto3" json:"templates,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *AuctionTemplates) Reset() { + *x = AuctionTemplates{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[112] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuctionTemplates) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuctionTemplates) ProtoMessage() {} + +func (x *AuctionTemplates) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[112] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuctionTemplates.ProtoReflect.Descriptor instead. +func (*AuctionTemplates) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{112} +} + +func (x *AuctionTemplates) GetTemplates() map[string]*AuctionTemplate { + if x != nil { + return x.Templates + } + return nil +} + +// The content(s) of an auction. +type AuctionReward struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Items being sold as part of a given auction listing. + Items []*InventoryItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` +} + +func (x *AuctionReward) Reset() { + *x = AuctionReward{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[113] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuctionReward) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuctionReward) ProtoMessage() {} + +func (x *AuctionReward) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[113] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuctionReward.ProtoReflect.Descriptor instead. +func (*AuctionReward) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{113} +} + +func (x *AuctionReward) GetItems() []*InventoryItem { + if x != nil { + return x.Items + } + return nil +} + +// Represents a bid on an auction. +type AuctionBid struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The user ID of the bidder. + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + // Amount(s) placed as a bid. + Bid *AuctionBidAmount `protobuf:"bytes,2,opt,name=bid,proto3" json:"bid,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the bid was placed. + CreateTimeSec int64 `protobuf:"varint,3,opt,name=create_time_sec,json=createTimeSec,proto3" json:"create_time_sec,omitempty"` +} + +func (x *AuctionBid) Reset() { + *x = AuctionBid{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[114] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuctionBid) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuctionBid) ProtoMessage() {} + +func (x *AuctionBid) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[114] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuctionBid.ProtoReflect.Descriptor instead. +func (*AuctionBid) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{114} +} + +func (x *AuctionBid) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *AuctionBid) GetBid() *AuctionBidAmount { + if x != nil { + return x.Bid + } + return nil +} + +func (x *AuctionBid) GetCreateTimeSec() int64 { + if x != nil { + return x.CreateTimeSec + } + return 0 +} + +// An individual auction listing. +type Auction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Unique identifier for this auction. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Identifier of the user that created this auction. + UserId string `protobuf:"bytes,2,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + // Item(s) being auctioned. + Reward *AuctionReward `protobuf:"bytes,3,opt,name=reward,proto3" json:"reward,omitempty"` + // Fees associated, to be deducted when the creator claims the winning bid. + Fee *AuctionFee `protobuf:"bytes,4,opt,name=fee,proto3" json:"fee,omitempty"` + // Version hash of this auction data, used to ensure operations act on latest known state. + Version string `protobuf:"bytes,5,opt,name=version,proto3" json:"version,omitempty"` + // Current highest bid, if any. + Bid *AuctionBid `protobuf:"bytes,6,opt,name=bid,proto3" json:"bid,omitempty"` + // Minimum next bid amount. + BidNext *AuctionBidAmount `protobuf:"bytes,7,opt,name=bid_next,json=bidNext,proto3" json:"bid_next,omitempty"` + // Auction duration in seconds, including any extensions. + DurationSec int64 `protobuf:"varint,8,opt,name=duration_sec,json=durationSec,proto3" json:"duration_sec,omitempty"` + // Original auction duration in seconds, not counting any extension time. + OriginalDurationSec int64 `protobuf:"varint,9,opt,name=original_duration_sec,json=originalDurationSec,proto3" json:"original_duration_sec,omitempty"` + // Additional time added so far to the original duration. + ExtensionAddedSec int64 `protobuf:"varint,10,opt,name=extension_added_sec,json=extensionAddedSec,proto3" json:"extension_added_sec,omitempty"` + // Threshold before end of auction where a bid would extend the time. + ExtensionThresholdSec int64 `protobuf:"varint,11,opt,name=extension_threshold_sec,json=extensionThresholdSec,proto3" json:"extension_threshold_sec,omitempty"` + // Extra time that would be added if a bid is placed within the threshold before the auction ends. + ExtensionSec int64 `protobuf:"varint,12,opt,name=extension_sec,json=extensionSec,proto3" json:"extension_sec,omitempty"` + // Maximum total number of seconds the auction can be extended by. + ExtensionMaxSec int64 `protobuf:"varint,13,opt,name=extension_max_sec,json=extensionMaxSec,proto3" json:"extension_max_sec,omitempty"` + // Extra time still available. + ExtensionRemainingSec int64 `protobuf:"varint,14,opt,name=extension_remaining_sec,json=extensionRemainingSec,proto3" json:"extension_remaining_sec,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the auction was created. + CreateTimeSec int64 `protobuf:"varint,15,opt,name=create_time_sec,json=createTimeSec,proto3" json:"create_time_sec,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the current bid was updated, for example by placing a new bid. + UpdateTimeSec int64 `protobuf:"varint,16,opt,name=update_time_sec,json=updateTimeSec,proto3" json:"update_time_sec,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the auction starts. + StartTimeSec int64 `protobuf:"varint,17,opt,name=start_time_sec,json=startTimeSec,proto3" json:"start_time_sec,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the auction ends. + EndTimeSec int64 `protobuf:"varint,18,opt,name=end_time_sec,json=endTimeSec,proto3" json:"end_time_sec,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the auction was originally intended to end, not counting extensions. + OriginalEndTimeSec int64 `protobuf:"varint,19,opt,name=original_end_time_sec,json=originalEndTimeSec,proto3" json:"original_end_time_sec,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the auction was cancelled, if any. + CancelTimeSec int64 `protobuf:"varint,20,opt,name=cancel_time_sec,json=cancelTimeSec,proto3" json:"cancel_time_sec,omitempty"` + // The current UNIX time (for gRPC clients) or ISO string (for REST clients) on the server. + CurrentTimeSec int64 `protobuf:"varint,21,opt,name=current_time_sec,json=currentTimeSec,proto3" json:"current_time_sec,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the owner claimed the successful bid amount. + OwnerClaimSec int64 `protobuf:"varint,22,opt,name=owner_claim_sec,json=ownerClaimSec,proto3" json:"owner_claim_sec,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the winning bidder claimed the auction reward. + WinnerClaimSec int64 `protobuf:"varint,23,opt,name=winner_claim_sec,json=winnerClaimSec,proto3" json:"winner_claim_sec,omitempty"` + // Indicates if the auction has started from the server perspective. + HasStarted bool `protobuf:"varint,24,opt,name=has_started,json=hasStarted,proto3" json:"has_started,omitempty"` + // Indicates if the auction has ended from the server perspective. + HasEnded bool `protobuf:"varint,25,opt,name=has_ended,json=hasEnded,proto3" json:"has_ended,omitempty"` + // Indicates if the caller can bid on this auction. + CanBid bool `protobuf:"varint,26,opt,name=can_bid,json=canBid,proto3" json:"can_bid,omitempty"` + // Indicates if the caller can claim a reward from this auction, either the reward or winning bid. + CanClaim bool `protobuf:"varint,27,opt,name=can_claim,json=canClaim,proto3" json:"can_claim,omitempty"` + // Indicates if the auction can be cancelled by its creator. + CanCancel bool `protobuf:"varint,28,opt,name=can_cancel,json=canCancel,proto3" json:"can_cancel,omitempty"` + // First bid placed on this auction. + BidFirst *AuctionBid `protobuf:"bytes,29,opt,name=bid_first,json=bidFirst,proto3" json:"bid_first,omitempty"` + // Most recent set of bids placed on this auction, ordered from newest to oldest retained. + BidHistory []*AuctionBid `protobuf:"bytes,30,rep,name=bid_history,json=bidHistory,proto3" json:"bid_history,omitempty"` +} + +func (x *Auction) Reset() { + *x = Auction{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[115] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Auction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Auction) ProtoMessage() {} + +func (x *Auction) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[115] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Auction.ProtoReflect.Descriptor instead. +func (*Auction) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{115} +} + +func (x *Auction) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Auction) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *Auction) GetReward() *AuctionReward { + if x != nil { + return x.Reward + } + return nil +} + +func (x *Auction) GetFee() *AuctionFee { + if x != nil { + return x.Fee + } + return nil +} + +func (x *Auction) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *Auction) GetBid() *AuctionBid { + if x != nil { + return x.Bid + } + return nil +} + +func (x *Auction) GetBidNext() *AuctionBidAmount { + if x != nil { + return x.BidNext + } + return nil +} + +func (x *Auction) GetDurationSec() int64 { + if x != nil { + return x.DurationSec + } + return 0 +} + +func (x *Auction) GetOriginalDurationSec() int64 { + if x != nil { + return x.OriginalDurationSec + } + return 0 +} + +func (x *Auction) GetExtensionAddedSec() int64 { + if x != nil { + return x.ExtensionAddedSec + } + return 0 +} + +func (x *Auction) GetExtensionThresholdSec() int64 { + if x != nil { + return x.ExtensionThresholdSec + } + return 0 +} + +func (x *Auction) GetExtensionSec() int64 { + if x != nil { + return x.ExtensionSec + } + return 0 +} + +func (x *Auction) GetExtensionMaxSec() int64 { + if x != nil { + return x.ExtensionMaxSec + } + return 0 +} + +func (x *Auction) GetExtensionRemainingSec() int64 { + if x != nil { + return x.ExtensionRemainingSec + } + return 0 +} + +func (x *Auction) GetCreateTimeSec() int64 { + if x != nil { + return x.CreateTimeSec + } + return 0 +} + +func (x *Auction) GetUpdateTimeSec() int64 { + if x != nil { + return x.UpdateTimeSec + } + return 0 +} + +func (x *Auction) GetStartTimeSec() int64 { + if x != nil { + return x.StartTimeSec + } + return 0 +} + +func (x *Auction) GetEndTimeSec() int64 { + if x != nil { + return x.EndTimeSec + } + return 0 +} + +func (x *Auction) GetOriginalEndTimeSec() int64 { + if x != nil { + return x.OriginalEndTimeSec + } + return 0 +} + +func (x *Auction) GetCancelTimeSec() int64 { + if x != nil { + return x.CancelTimeSec + } + return 0 +} + +func (x *Auction) GetCurrentTimeSec() int64 { + if x != nil { + return x.CurrentTimeSec + } + return 0 +} + +func (x *Auction) GetOwnerClaimSec() int64 { + if x != nil { + return x.OwnerClaimSec + } + return 0 +} + +func (x *Auction) GetWinnerClaimSec() int64 { + if x != nil { + return x.WinnerClaimSec + } + return 0 +} + +func (x *Auction) GetHasStarted() bool { + if x != nil { + return x.HasStarted + } + return false +} + +func (x *Auction) GetHasEnded() bool { + if x != nil { + return x.HasEnded + } + return false +} + +func (x *Auction) GetCanBid() bool { + if x != nil { + return x.CanBid + } + return false +} + +func (x *Auction) GetCanClaim() bool { + if x != nil { + return x.CanClaim + } + return false +} + +func (x *Auction) GetCanCancel() bool { + if x != nil { + return x.CanCancel + } + return false +} + +func (x *Auction) GetBidFirst() *AuctionBid { + if x != nil { + return x.BidFirst + } + return nil +} + +func (x *Auction) GetBidHistory() []*AuctionBid { + if x != nil { + return x.BidHistory + } + return nil +} + +// Notification payload containing a bid update for a followed auction. +type AuctionNotificationBid struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Unique auction identifier. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // New version hash for this auction. + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + // Current highest bid, if any. + Bid *AuctionBid `protobuf:"bytes,3,opt,name=bid,proto3" json:"bid,omitempty"` + // Minimum next bid amount. + BidNext *AuctionBidAmount `protobuf:"bytes,4,opt,name=bid_next,json=bidNext,proto3" json:"bid_next,omitempty"` + // Additional time added so far to the original duration. + ExtensionAddedSec int64 `protobuf:"varint,5,opt,name=extension_added_sec,json=extensionAddedSec,proto3" json:"extension_added_sec,omitempty"` + // Extra time still available. + ExtensionRemainingSec int64 `protobuf:"varint,6,opt,name=extension_remaining_sec,json=extensionRemainingSec,proto3" json:"extension_remaining_sec,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the current bid was updated, for example by placing a new bid. + UpdateTimeSec int64 `protobuf:"varint,7,opt,name=update_time_sec,json=updateTimeSec,proto3" json:"update_time_sec,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the auction ends. + EndTimeSec int64 `protobuf:"varint,8,opt,name=end_time_sec,json=endTimeSec,proto3" json:"end_time_sec,omitempty"` + // The current UNIX time (for gRPC clients) or ISO string (for REST clients) on the server. + CurrentTimeSec int64 `protobuf:"varint,9,opt,name=current_time_sec,json=currentTimeSec,proto3" json:"current_time_sec,omitempty"` +} + +func (x *AuctionNotificationBid) Reset() { + *x = AuctionNotificationBid{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[116] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuctionNotificationBid) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuctionNotificationBid) ProtoMessage() {} + +func (x *AuctionNotificationBid) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[116] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuctionNotificationBid.ProtoReflect.Descriptor instead. +func (*AuctionNotificationBid) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{116} +} + +func (x *AuctionNotificationBid) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *AuctionNotificationBid) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *AuctionNotificationBid) GetBid() *AuctionBid { + if x != nil { + return x.Bid + } + return nil +} + +func (x *AuctionNotificationBid) GetBidNext() *AuctionBidAmount { + if x != nil { + return x.BidNext + } + return nil +} + +func (x *AuctionNotificationBid) GetExtensionAddedSec() int64 { + if x != nil { + return x.ExtensionAddedSec + } + return 0 +} + +func (x *AuctionNotificationBid) GetExtensionRemainingSec() int64 { + if x != nil { + return x.ExtensionRemainingSec + } + return 0 +} + +func (x *AuctionNotificationBid) GetUpdateTimeSec() int64 { + if x != nil { + return x.UpdateTimeSec + } + return 0 +} + +func (x *AuctionNotificationBid) GetEndTimeSec() int64 { + if x != nil { + return x.EndTimeSec + } + return 0 +} + +func (x *AuctionNotificationBid) GetCurrentTimeSec() int64 { + if x != nil { + return x.CurrentTimeSec + } + return 0 +} + +// Server to client stream envelope. +type StreamEnvelope struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Message: + // + // *StreamEnvelope_AuctionBid + Message isStreamEnvelope_Message `protobuf_oneof:"message"` +} + +func (x *StreamEnvelope) Reset() { + *x = StreamEnvelope{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[117] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreamEnvelope) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreamEnvelope) ProtoMessage() {} + +func (x *StreamEnvelope) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[117] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreamEnvelope.ProtoReflect.Descriptor instead. +func (*StreamEnvelope) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{117} +} + +func (m *StreamEnvelope) GetMessage() isStreamEnvelope_Message { + if m != nil { + return m.Message + } + return nil +} + +func (x *StreamEnvelope) GetAuctionBid() *AuctionNotificationBid { + if x, ok := x.GetMessage().(*StreamEnvelope_AuctionBid); ok { + return x.AuctionBid + } + return nil +} + +type isStreamEnvelope_Message interface { + isStreamEnvelope_Message() +} + +type StreamEnvelope_AuctionBid struct { + AuctionBid *AuctionNotificationBid `protobuf:"bytes,1,opt,name=auction_bid,json=auctionBid,proto3,oneof"` +} + +func (*StreamEnvelope_AuctionBid) isStreamEnvelope_Message() {} + +// Result of claiming an auction as the winning bidder. +type AuctionClaimBid struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Auction that was just claimed. + Auction *Auction `protobuf:"bytes,1,opt,name=auction,proto3" json:"auction,omitempty"` + // Reward(s) that were successfully claimed by the winning bidder. + Reward *AuctionReward `protobuf:"bytes,2,opt,name=reward,proto3" json:"reward,omitempty"` +} + +func (x *AuctionClaimBid) Reset() { + *x = AuctionClaimBid{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[118] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuctionClaimBid) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuctionClaimBid) ProtoMessage() {} + +func (x *AuctionClaimBid) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[118] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuctionClaimBid.ProtoReflect.Descriptor instead. +func (*AuctionClaimBid) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{118} +} + +func (x *AuctionClaimBid) GetAuction() *Auction { + if x != nil { + return x.Auction + } + return nil +} + +func (x *AuctionClaimBid) GetReward() *AuctionReward { + if x != nil { + return x.Reward + } + return nil +} + +// Result of claiming an auction as the creator. +type AuctionClaimCreated struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Auction that was just claimed. + Auction *Auction `protobuf:"bytes,1,opt,name=auction,proto3" json:"auction,omitempty"` + // Reward(s) that were successfully claimed by the creator. + Reward *AuctionBidAmount `protobuf:"bytes,2,opt,name=reward,proto3" json:"reward,omitempty"` + // Fee(s) that were paid by the creator. + Fee *AuctionBidAmount `protobuf:"bytes,3,opt,name=fee,proto3" json:"fee,omitempty"` + // Items returned in the event of a failed auction. + ReturnedItems []*InventoryItem `protobuf:"bytes,4,rep,name=returned_items,json=returnedItems,proto3" json:"returned_items,omitempty"` +} + +func (x *AuctionClaimCreated) Reset() { + *x = AuctionClaimCreated{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[119] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuctionClaimCreated) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuctionClaimCreated) ProtoMessage() {} + +func (x *AuctionClaimCreated) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[119] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuctionClaimCreated.ProtoReflect.Descriptor instead. +func (*AuctionClaimCreated) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{119} +} + +func (x *AuctionClaimCreated) GetAuction() *Auction { + if x != nil { + return x.Auction + } + return nil +} + +func (x *AuctionClaimCreated) GetReward() *AuctionBidAmount { + if x != nil { + return x.Reward + } + return nil +} + +func (x *AuctionClaimCreated) GetFee() *AuctionBidAmount { + if x != nil { + return x.Fee + } + return nil +} + +func (x *AuctionClaimCreated) GetReturnedItems() []*InventoryItem { + if x != nil { + return x.ReturnedItems + } + return nil +} + +// Result of cancelling an auction. +type AuctionCancel struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Auction that was just cancelled. + Auction *Auction `protobuf:"bytes,1,opt,name=auction,proto3" json:"auction,omitempty"` + // Reward(s) that were successfully refunded to the original auction creator. + Reward *AuctionReward `protobuf:"bytes,2,opt,name=reward,proto3" json:"reward,omitempty"` +} + +func (x *AuctionCancel) Reset() { + *x = AuctionCancel{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[120] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuctionCancel) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuctionCancel) ProtoMessage() {} + +func (x *AuctionCancel) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[120] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuctionCancel.ProtoReflect.Descriptor instead. +func (*AuctionCancel) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{120} +} + +func (x *AuctionCancel) GetAuction() *Auction { + if x != nil { + return x.Auction + } + return nil +} + +func (x *AuctionCancel) GetReward() *AuctionReward { + if x != nil { + return x.Reward + } + return nil +} + +// A list of auctions filtered by some initial request criteria. +type AuctionList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Auctions matching the requested filters. + Auctions []*Auction `protobuf:"bytes,1,rep,name=auctions,proto3" json:"auctions,omitempty"` + // Pagination cursor to fetch more results, or empty if there are no more. + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *AuctionList) Reset() { + *x = AuctionList{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[121] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuctionList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuctionList) ProtoMessage() {} + +func (x *AuctionList) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[121] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuctionList.ProtoReflect.Descriptor instead. +func (*AuctionList) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{121} +} + +func (x *AuctionList) GetAuctions() []*Auction { + if x != nil { + return x.Auctions + } + return nil +} + +func (x *AuctionList) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +// Request to list available auctions, optionally filtered based on given criteria. +type AuctionListRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Formatted filter query. + Query string `protobuf:"bytes,1,opt,name=query,proto3" json:"query,omitempty"` + // Custom sort criteria. + Sort []string `protobuf:"bytes,2,rep,name=sort,proto3" json:"sort,omitempty"` + // Maximum number of auctions to return in a single response. + Limit int64 `protobuf:"varint,3,opt,name=limit,proto3" json:"limit,omitempty"` + // Cursor to use for retrieving the next page of results. + Cursor string `protobuf:"bytes,4,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *AuctionListRequest) Reset() { + *x = AuctionListRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[122] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuctionListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuctionListRequest) ProtoMessage() {} + +func (x *AuctionListRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[122] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuctionListRequest.ProtoReflect.Descriptor instead. +func (*AuctionListRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{122} +} + +func (x *AuctionListRequest) GetQuery() string { + if x != nil { + return x.Query + } + return "" +} + +func (x *AuctionListRequest) GetSort() []string { + if x != nil { + return x.Sort + } + return nil +} + +func (x *AuctionListRequest) GetLimit() int64 { + if x != nil { + return x.Limit + } + return 0 +} + +func (x *AuctionListRequest) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +// Request to place a bid on an active auction. +type AuctionBidRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Unique auction identifier to bid on. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The last seen version hash of the auction. + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + // Bid amounts to place, must at least match the minimum next bid. + Bid *AuctionBidAmount `protobuf:"bytes,3,opt,name=bid,proto3" json:"bid,omitempty"` +} + +func (x *AuctionBidRequest) Reset() { + *x = AuctionBidRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[123] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuctionBidRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuctionBidRequest) ProtoMessage() {} + +func (x *AuctionBidRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[123] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuctionBidRequest.ProtoReflect.Descriptor instead. +func (*AuctionBidRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{123} +} + +func (x *AuctionBidRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *AuctionBidRequest) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *AuctionBidRequest) GetBid() *AuctionBidAmount { + if x != nil { + return x.Bid + } + return nil +} + +// Request to claim a successful auction by either the winning bidder. +type AuctionClaimBidRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Unique auction identifier to claim. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *AuctionClaimBidRequest) Reset() { + *x = AuctionClaimBidRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[124] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuctionClaimBidRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuctionClaimBidRequest) ProtoMessage() {} + +func (x *AuctionClaimBidRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[124] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuctionClaimBidRequest.ProtoReflect.Descriptor instead. +func (*AuctionClaimBidRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{124} +} + +func (x *AuctionClaimBidRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +// Request to claim a successful auction by either the creator. +type AuctionClaimCreatedRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Unique auction identifier to claim. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *AuctionClaimCreatedRequest) Reset() { + *x = AuctionClaimCreatedRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[125] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuctionClaimCreatedRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuctionClaimCreatedRequest) ProtoMessage() {} + +func (x *AuctionClaimCreatedRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[125] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuctionClaimCreatedRequest.ProtoReflect.Descriptor instead. +func (*AuctionClaimCreatedRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{125} +} + +func (x *AuctionClaimCreatedRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +// Request to cancel an active auction. +type AuctionCancelRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Unique auction identifier to cancel. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *AuctionCancelRequest) Reset() { + *x = AuctionCancelRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[126] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuctionCancelRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuctionCancelRequest) ProtoMessage() {} + +func (x *AuctionCancelRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[126] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuctionCancelRequest.ProtoReflect.Descriptor instead. +func (*AuctionCancelRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{126} +} + +func (x *AuctionCancelRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +// Request to create a new auction. +type AuctionCreateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Auction template to use. + TemplateId string `protobuf:"bytes,1,opt,name=template_id,json=templateId,proto3" json:"template_id,omitempty"` + // Auction condition set to use. + ConditionId string `protobuf:"bytes,2,opt,name=condition_id,json=conditionId,proto3" json:"condition_id,omitempty"` + // Item instance(s) to list in the auction. + InstanceIds []string `protobuf:"bytes,3,rep,name=instance_ids,json=instanceIds,proto3" json:"instance_ids,omitempty"` + // Time when the auction should start, omit to start immediately. + StartTimeSec int64 `protobuf:"varint,4,opt,name=start_time_sec,json=startTimeSec,proto3" json:"start_time_sec,omitempty"` +} + +func (x *AuctionCreateRequest) Reset() { + *x = AuctionCreateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[127] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuctionCreateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuctionCreateRequest) ProtoMessage() {} + +func (x *AuctionCreateRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[127] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuctionCreateRequest.ProtoReflect.Descriptor instead. +func (*AuctionCreateRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{127} +} + +func (x *AuctionCreateRequest) GetTemplateId() string { + if x != nil { + return x.TemplateId + } + return "" +} + +func (x *AuctionCreateRequest) GetConditionId() string { + if x != nil { + return x.ConditionId + } + return "" +} + +func (x *AuctionCreateRequest) GetInstanceIds() []string { + if x != nil { + return x.InstanceIds + } + return nil +} + +func (x *AuctionCreateRequest) GetStartTimeSec() int64 { + if x != nil { + return x.StartTimeSec + } + return 0 +} + +// Request to retrieve a list of auctions the user has bid on. +type AuctionListBidsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Maximum number of auctions to return in a single response. + Limit int64 `protobuf:"varint,1,opt,name=limit,proto3" json:"limit,omitempty"` + // Cursor to use for retrieving the next page of results. + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *AuctionListBidsRequest) Reset() { + *x = AuctionListBidsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[128] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuctionListBidsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuctionListBidsRequest) ProtoMessage() {} + +func (x *AuctionListBidsRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[128] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuctionListBidsRequest.ProtoReflect.Descriptor instead. +func (*AuctionListBidsRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{128} +} + +func (x *AuctionListBidsRequest) GetLimit() int64 { + if x != nil { + return x.Limit + } + return 0 +} + +func (x *AuctionListBidsRequest) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +// Request to retrieve a list of auctions the user has created. +type AuctionListCreatedRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Maximum number of auctions to return in a single response. + Limit int64 `protobuf:"varint,1,opt,name=limit,proto3" json:"limit,omitempty"` + // Cursor to use for retrieving the next page of results. + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *AuctionListCreatedRequest) Reset() { + *x = AuctionListCreatedRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[129] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuctionListCreatedRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuctionListCreatedRequest) ProtoMessage() {} + +func (x *AuctionListCreatedRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[129] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuctionListCreatedRequest.ProtoReflect.Descriptor instead. +func (*AuctionListCreatedRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{129} +} + +func (x *AuctionListCreatedRequest) GetLimit() int64 { + if x != nil { + return x.Limit + } + return 0 +} + +func (x *AuctionListCreatedRequest) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +// Request to follow auctions the user has an interest in. +type AuctionsFollowRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Auction IDs to follow. + Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` +} + +func (x *AuctionsFollowRequest) Reset() { + *x = AuctionsFollowRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[130] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuctionsFollowRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuctionsFollowRequest) ProtoMessage() {} + +func (x *AuctionsFollowRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[130] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuctionsFollowRequest.ProtoReflect.Descriptor instead. +func (*AuctionsFollowRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{130} +} + +func (x *AuctionsFollowRequest) GetIds() []string { + if x != nil { + return x.Ids + } + return nil +} + +// Represents a request to retrieve available store items. +type EconomyListRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The game client's store type. + StoreType EconomyStoreType `protobuf:"varint,1,opt,name=store_type,json=storeType,proto3,enum=hiro.EconomyStoreType" json:"store_type,omitempty"` +} + +func (x *EconomyListRequest) Reset() { + *x = EconomyListRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[131] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EconomyListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EconomyListRequest) ProtoMessage() {} + +func (x *EconomyListRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[131] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EconomyListRequest.ProtoReflect.Descriptor instead. +func (*EconomyListRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{131} +} + +func (x *EconomyListRequest) GetStoreType() EconomyStoreType { + if x != nil { + return x.StoreType + } + return EconomyStoreType_ECONOMY_STORE_TYPE_UNSPECIFIED +} + +// Represents a request to grant rewards to the user. +type EconomyGrantRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The currencies to grant. + Currencies map[string]int64 `protobuf:"bytes,1,rep,name=currencies,proto3" json:"currencies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // The reward modifiers to grant. + RewardModifiers []*RewardModifier `protobuf:"bytes,2,rep,name=reward_modifiers,json=rewardModifiers,proto3" json:"reward_modifiers,omitempty"` + // Any items to grant. + Items map[string]int64 `protobuf:"bytes,3,rep,name=items,proto3" json:"items,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *EconomyGrantRequest) Reset() { + *x = EconomyGrantRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[132] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EconomyGrantRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EconomyGrantRequest) ProtoMessage() {} + +func (x *EconomyGrantRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[132] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EconomyGrantRequest.ProtoReflect.Descriptor instead. +func (*EconomyGrantRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{132} +} + +func (x *EconomyGrantRequest) GetCurrencies() map[string]int64 { + if x != nil { + return x.Currencies + } + return nil +} + +func (x *EconomyGrantRequest) GetRewardModifiers() []*RewardModifier { + if x != nil { + return x.RewardModifiers + } + return nil +} + +func (x *EconomyGrantRequest) GetItems() map[string]int64 { + if x != nil { + return x.Items + } + return nil +} + +// Request to create a store item purchase intent. +type EconomyPurchaseIntentRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // An item's ID. + ItemId string `protobuf:"bytes,1,opt,name=item_id,json=itemId,proto3" json:"item_id,omitempty"` + // The store type. + StoreType EconomyStoreType `protobuf:"varint,2,opt,name=store_type,json=storeType,proto3,enum=hiro.EconomyStoreType" json:"store_type,omitempty"` + // The SKU code, if any. + Sku string `protobuf:"bytes,3,opt,name=sku,proto3" json:"sku,omitempty"` + // Purchase real currency amount, if known. + Amount float64 `protobuf:"fixed64,4,opt,name=amount,proto3" json:"amount,omitempty"` + // Purchase real currency code, if known. + Currency string `protobuf:"bytes,5,opt,name=currency,proto3" json:"currency,omitempty"` +} + +func (x *EconomyPurchaseIntentRequest) Reset() { + *x = EconomyPurchaseIntentRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[133] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EconomyPurchaseIntentRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EconomyPurchaseIntentRequest) ProtoMessage() {} + +func (x *EconomyPurchaseIntentRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[133] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EconomyPurchaseIntentRequest.ProtoReflect.Descriptor instead. +func (*EconomyPurchaseIntentRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{133} +} + +func (x *EconomyPurchaseIntentRequest) GetItemId() string { + if x != nil { + return x.ItemId + } + return "" +} + +func (x *EconomyPurchaseIntentRequest) GetStoreType() EconomyStoreType { + if x != nil { + return x.StoreType + } + return EconomyStoreType_ECONOMY_STORE_TYPE_UNSPECIFIED +} + +func (x *EconomyPurchaseIntentRequest) GetSku() string { + if x != nil { + return x.Sku + } + return "" +} + +func (x *EconomyPurchaseIntentRequest) GetAmount() float64 { + if x != nil { + return x.Amount + } + return 0 +} + +func (x *EconomyPurchaseIntentRequest) GetCurrency() string { + if x != nil { + return x.Currency + } + return "" +} + +// Request to purchase a particular store item. +type EconomyPurchaseRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // An item's ID. + ItemId string `protobuf:"bytes,1,opt,name=item_id,json=itemId,proto3" json:"item_id,omitempty"` + // The store type. + StoreType EconomyStoreType `protobuf:"varint,2,opt,name=store_type,json=storeType,proto3,enum=hiro.EconomyStoreType" json:"store_type,omitempty"` + // The IAP receipt purchased. + Receipt string `protobuf:"bytes,3,opt,name=receipt,proto3" json:"receipt,omitempty"` +} + +func (x *EconomyPurchaseRequest) Reset() { + *x = EconomyPurchaseRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[134] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EconomyPurchaseRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EconomyPurchaseRequest) ProtoMessage() {} + +func (x *EconomyPurchaseRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[134] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EconomyPurchaseRequest.ProtoReflect.Descriptor instead. +func (*EconomyPurchaseRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{134} +} + +func (x *EconomyPurchaseRequest) GetItemId() string { + if x != nil { + return x.ItemId + } + return "" +} + +func (x *EconomyPurchaseRequest) GetStoreType() EconomyStoreType { + if x != nil { + return x.StoreType + } + return EconomyStoreType_ECONOMY_STORE_TYPE_UNSPECIFIED +} + +func (x *EconomyPurchaseRequest) GetReceipt() string { + if x != nil { + return x.Receipt + } + return "" +} + +// Request to restore a set of purchases. +type EconomyPurchaseRestoreRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The store type. + StoreType EconomyStoreType `protobuf:"varint,1,opt,name=store_type,json=storeType,proto3,enum=hiro.EconomyStoreType" json:"store_type,omitempty"` + // The IAP receipts to restore. + Receipts []string `protobuf:"bytes,2,rep,name=receipts,proto3" json:"receipts,omitempty"` +} + +func (x *EconomyPurchaseRestoreRequest) Reset() { + *x = EconomyPurchaseRestoreRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[135] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EconomyPurchaseRestoreRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EconomyPurchaseRestoreRequest) ProtoMessage() {} + +func (x *EconomyPurchaseRestoreRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[135] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EconomyPurchaseRestoreRequest.ProtoReflect.Descriptor instead. +func (*EconomyPurchaseRestoreRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{135} +} + +func (x *EconomyPurchaseRestoreRequest) GetStoreType() EconomyStoreType { + if x != nil { + return x.StoreType + } + return EconomyStoreType_ECONOMY_STORE_TYPE_UNSPECIFIED +} + +func (x *EconomyPurchaseRestoreRequest) GetReceipts() []string { + if x != nil { + return x.Receipts + } + return nil +} + +// Request to retrieve status af a specific placement instance by reward ID. +type EconomyPlacementStatusRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The reward ID to check. + RewardId string `protobuf:"bytes,1,opt,name=reward_id,json=rewardId,proto3" json:"reward_id,omitempty"` + // The placement ID to check, will be used if reward ID is not supplied. + PlacementId string `protobuf:"bytes,2,opt,name=placement_id,json=placementId,proto3" json:"placement_id,omitempty"` + // The check attempt counter, optional. + Count int32 `protobuf:"varint,3,opt,name=count,proto3" json:"count,omitempty"` +} + +func (x *EconomyPlacementStatusRequest) Reset() { + *x = EconomyPlacementStatusRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[136] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EconomyPlacementStatusRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EconomyPlacementStatusRequest) ProtoMessage() {} + +func (x *EconomyPlacementStatusRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[136] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EconomyPlacementStatusRequest.ProtoReflect.Descriptor instead. +func (*EconomyPlacementStatusRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{136} +} + +func (x *EconomyPlacementStatusRequest) GetRewardId() string { + if x != nil { + return x.RewardId + } + return "" +} + +func (x *EconomyPlacementStatusRequest) GetPlacementId() string { + if x != nil { + return x.PlacementId + } + return "" +} + +func (x *EconomyPlacementStatusRequest) GetCount() int32 { + if x != nil { + return x.Count + } + return 0 +} + +// Request to start a placement reward. +type EconomyPlacementStartRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The identifier to start a reward for. + PlacementId string `protobuf:"bytes,1,opt,name=placement_id,json=placementId,proto3" json:"placement_id,omitempty"` + // Optional metadata to associate with the placement. + Metadata map[string]string `protobuf:"bytes,2,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *EconomyPlacementStartRequest) Reset() { + *x = EconomyPlacementStartRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[137] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EconomyPlacementStartRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EconomyPlacementStartRequest) ProtoMessage() {} + +func (x *EconomyPlacementStartRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[137] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EconomyPlacementStartRequest.ProtoReflect.Descriptor instead. +func (*EconomyPlacementStartRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{137} +} + +func (x *EconomyPlacementStartRequest) GetPlacementId() string { + if x != nil { + return x.PlacementId + } + return "" +} + +func (x *EconomyPlacementStartRequest) GetMetadata() map[string]string { + if x != nil { + return x.Metadata + } + return nil +} + +// The current status of a placement reward. +type EconomyPlacementStatus struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The reward ID. + RewardId string `protobuf:"bytes,1,opt,name=reward_id,json=rewardId,proto3" json:"reward_id,omitempty"` + // The placement ID. + PlacementId string `protobuf:"bytes,2,opt,name=placement_id,json=placementId,proto3" json:"placement_id,omitempty"` + // The UNIX timestamp when the placement was created. + CreateTimeSec int64 `protobuf:"varint,3,opt,name=create_time_sec,json=createTimeSec,proto3" json:"create_time_sec,omitempty"` + // The UNIX timestamp when the placement was completed. + CompleteTimeSec int64 `protobuf:"varint,4,opt,name=complete_time_sec,json=completeTimeSec,proto3" json:"complete_time_sec,omitempty"` + // If completed, was it successful. + Success bool `protobuf:"varint,5,opt,name=success,proto3" json:"success,omitempty"` + // The reward for completing the placement, if it was autocompleted as part of the status request. + Reward *Reward `protobuf:"bytes,6,opt,name=reward,proto3" json:"reward,omitempty"` + // Metadata associated with the placement, if any. + Metadata map[string]string `protobuf:"bytes,7,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *EconomyPlacementStatus) Reset() { + *x = EconomyPlacementStatus{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[138] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EconomyPlacementStatus) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EconomyPlacementStatus) ProtoMessage() {} + +func (x *EconomyPlacementStatus) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[138] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EconomyPlacementStatus.ProtoReflect.Descriptor instead. +func (*EconomyPlacementStatus) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{138} +} + +func (x *EconomyPlacementStatus) GetRewardId() string { + if x != nil { + return x.RewardId + } + return "" +} + +func (x *EconomyPlacementStatus) GetPlacementId() string { + if x != nil { + return x.PlacementId + } + return "" +} + +func (x *EconomyPlacementStatus) GetCreateTimeSec() int64 { + if x != nil { + return x.CreateTimeSec + } + return 0 +} + +func (x *EconomyPlacementStatus) GetCompleteTimeSec() int64 { + if x != nil { + return x.CompleteTimeSec + } + return 0 +} + +func (x *EconomyPlacementStatus) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *EconomyPlacementStatus) GetReward() *Reward { + if x != nil { + return x.Reward + } + return nil +} + +func (x *EconomyPlacementStatus) GetMetadata() map[string]string { + if x != nil { + return x.Metadata + } + return nil +} + +// Response from granting currencies, reward modifiers, and/or items. +// Contains updated wallet and inventory data, if changed. +// Contains reward granted, if any. +// Contains active reward modifiers, if changed. +type EconomyUpdateAck struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Updated wallet data, if changed. + Wallet map[string]int64 `protobuf:"bytes,1,rep,name=wallet,proto3" json:"wallet,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Update inventory data, if changed. + Inventory *Inventory `protobuf:"bytes,2,opt,name=inventory,proto3" json:"inventory,omitempty"` + // Reward, if any. + Reward *Reward `protobuf:"bytes,3,opt,name=reward,proto3" json:"reward,omitempty"` + // Updated active reward modifiers, if changed. + ActiveRewardModifiers []*ActiveRewardModifier `protobuf:"bytes,4,rep,name=active_reward_modifiers,json=activeRewardModifiers,proto3" json:"active_reward_modifiers,omitempty"` + // Current server time. + CurrentTimeSec int64 `protobuf:"varint,5,opt,name=current_time_sec,json=currentTimeSec,proto3" json:"current_time_sec,omitempty"` +} + +func (x *EconomyUpdateAck) Reset() { + *x = EconomyUpdateAck{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[139] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EconomyUpdateAck) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EconomyUpdateAck) ProtoMessage() {} + +func (x *EconomyUpdateAck) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[139] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EconomyUpdateAck.ProtoReflect.Descriptor instead. +func (*EconomyUpdateAck) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{139} +} + +func (x *EconomyUpdateAck) GetWallet() map[string]int64 { + if x != nil { + return x.Wallet + } + return nil +} + +func (x *EconomyUpdateAck) GetInventory() *Inventory { + if x != nil { + return x.Inventory + } + return nil +} + +func (x *EconomyUpdateAck) GetReward() *Reward { + if x != nil { + return x.Reward + } + return nil +} + +func (x *EconomyUpdateAck) GetActiveRewardModifiers() []*ActiveRewardModifier { + if x != nil { + return x.ActiveRewardModifiers + } + return nil +} + +func (x *EconomyUpdateAck) GetCurrentTimeSec() int64 { + if x != nil { + return x.CurrentTimeSec + } + return 0 +} + +// Response from purchasing currencies and/or items. +// Contains updated wallet and inventory data, if changed. +// Contains reward granted, if any. +// Contains indication of whether or not the purchase was a sandbox purchase. +type EconomyPurchaseAck struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Updated wallet data, if changed. + Wallet map[string]int64 `protobuf:"bytes,1,rep,name=wallet,proto3" json:"wallet,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Update inventory data, if changed. + Inventory *Inventory `protobuf:"bytes,2,opt,name=inventory,proto3" json:"inventory,omitempty"` + // Reward, if any. + Reward *Reward `protobuf:"bytes,3,opt,name=reward,proto3" json:"reward,omitempty"` + // Was the purchase a sandbox purchase? + IsSandboxPurchase bool `protobuf:"varint,4,opt,name=is_sandbox_purchase,json=isSandboxPurchase,proto3" json:"is_sandbox_purchase,omitempty"` +} + +func (x *EconomyPurchaseAck) Reset() { + *x = EconomyPurchaseAck{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[140] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EconomyPurchaseAck) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EconomyPurchaseAck) ProtoMessage() {} + +func (x *EconomyPurchaseAck) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[140] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EconomyPurchaseAck.ProtoReflect.Descriptor instead. +func (*EconomyPurchaseAck) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{140} +} + +func (x *EconomyPurchaseAck) GetWallet() map[string]int64 { + if x != nil { + return x.Wallet + } + return nil +} + +func (x *EconomyPurchaseAck) GetInventory() *Inventory { + if x != nil { + return x.Inventory + } + return nil +} + +func (x *EconomyPurchaseAck) GetReward() *Reward { + if x != nil { + return x.Reward + } + return nil +} + +func (x *EconomyPurchaseAck) GetIsSandboxPurchase() bool { + if x != nil { + return x.IsSandboxPurchase + } + return false +} + +// A modifier that may change energy behaviour. +type EnergyModifier struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The modifier operator. + Operator string `protobuf:"bytes,1,opt,name=operator,proto3" json:"operator,omitempty"` + // The modifier value, if applicable. + Value int32 `protobuf:"varint,2,opt,name=value,proto3" json:"value,omitempty"` + // The UNIX timestamp when the modifier became active. + StartTimeSec int64 `protobuf:"varint,3,opt,name=start_time_sec,json=startTimeSec,proto3" json:"start_time_sec,omitempty"` + // The UNIX timestamp when the modifier ends. + EndTimeSec int64 `protobuf:"varint,4,opt,name=end_time_sec,json=endTimeSec,proto3" json:"end_time_sec,omitempty"` +} + +func (x *EnergyModifier) Reset() { + *x = EnergyModifier{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[141] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EnergyModifier) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EnergyModifier) ProtoMessage() {} + +func (x *EnergyModifier) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[141] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EnergyModifier.ProtoReflect.Descriptor instead. +func (*EnergyModifier) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{141} +} + +func (x *EnergyModifier) GetOperator() string { + if x != nil { + return x.Operator + } + return "" +} + +func (x *EnergyModifier) GetValue() int32 { + if x != nil { + return x.Value + } + return 0 +} + +func (x *EnergyModifier) GetStartTimeSec() int64 { + if x != nil { + return x.StartTimeSec + } + return 0 +} + +func (x *EnergyModifier) GetEndTimeSec() int64 { + if x != nil { + return x.EndTimeSec + } + return 0 +} + +// Information about a single energy type. +type Energy struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The unique energy identifier. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The current amount. + Current int32 `protobuf:"varint,2,opt,name=current,proto3" json:"current,omitempty"` + // The maximum amount. + Max int32 `protobuf:"varint,3,opt,name=max,proto3" json:"max,omitempty"` + // Amount of energy granted per refill. + Refill int32 `protobuf:"varint,4,opt,name=refill,proto3" json:"refill,omitempty"` + // Number of seconds between refills. + RefillSec int64 `protobuf:"varint,5,opt,name=refill_sec,json=refillSec,proto3" json:"refill_sec,omitempty"` + // The UNIX timestamp when the count will increase, if it is not at max already. + NextRefillTimeSec int64 `protobuf:"varint,6,opt,name=next_refill_time_sec,json=nextRefillTimeSec,proto3" json:"next_refill_time_sec,omitempty"` + // The UNIX timestamp when the count will reach max, if it is not at max already. + MaxRefillTimeSec int64 `protobuf:"varint,7,opt,name=max_refill_time_sec,json=maxRefillTimeSec,proto3" json:"max_refill_time_sec,omitempty"` + // The UNIX timestamp when the count started filling, if it is not at max already. + StartRefillTimeSec int64 `protobuf:"varint,8,opt,name=start_refill_time_sec,json=startRefillTimeSec,proto3" json:"start_refill_time_sec,omitempty"` + // The modifiers, if any. + Modifiers []*EnergyModifier `protobuf:"bytes,9,rep,name=modifiers,proto3" json:"modifiers,omitempty"` + // The available rewards, if any. + AvailableRewards *AvailableRewards `protobuf:"bytes,10,opt,name=available_rewards,json=availableRewards,proto3" json:"available_rewards,omitempty"` + // Additional metadata properties. + AdditionalProperties map[string]string `protobuf:"bytes,11,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // The current UNIX timestamp in seconds. + CurrentTimeSec int64 `protobuf:"varint,12,opt,name=current_time_sec,json=currentTimeSec,proto3" json:"current_time_sec,omitempty"` +} + +func (x *Energy) Reset() { + *x = Energy{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[142] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Energy) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Energy) ProtoMessage() {} + +func (x *Energy) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[142] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Energy.ProtoReflect.Descriptor instead. +func (*Energy) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{142} +} + +func (x *Energy) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Energy) GetCurrent() int32 { + if x != nil { + return x.Current + } + return 0 +} + +func (x *Energy) GetMax() int32 { + if x != nil { + return x.Max + } + return 0 +} + +func (x *Energy) GetRefill() int32 { + if x != nil { + return x.Refill + } + return 0 +} + +func (x *Energy) GetRefillSec() int64 { + if x != nil { + return x.RefillSec + } + return 0 +} + +func (x *Energy) GetNextRefillTimeSec() int64 { + if x != nil { + return x.NextRefillTimeSec + } + return 0 +} + +func (x *Energy) GetMaxRefillTimeSec() int64 { + if x != nil { + return x.MaxRefillTimeSec + } + return 0 +} + +func (x *Energy) GetStartRefillTimeSec() int64 { + if x != nil { + return x.StartRefillTimeSec + } + return 0 +} + +func (x *Energy) GetModifiers() []*EnergyModifier { + if x != nil { + return x.Modifiers + } + return nil +} + +func (x *Energy) GetAvailableRewards() *AvailableRewards { + if x != nil { + return x.AvailableRewards + } + return nil +} + +func (x *Energy) GetAdditionalProperties() map[string]string { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +func (x *Energy) GetCurrentTimeSec() int64 { + if x != nil { + return x.CurrentTimeSec + } + return 0 +} + +// One or more energy values for a user. +type EnergyList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Energy types keyed on the energy identifier. + Energies map[string]*Energy `protobuf:"bytes,1,rep,name=energies,proto3" json:"energies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *EnergyList) Reset() { + *x = EnergyList{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[143] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EnergyList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EnergyList) ProtoMessage() {} + +func (x *EnergyList) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[143] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EnergyList.ProtoReflect.Descriptor instead. +func (*EnergyList) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{143} +} + +func (x *EnergyList) GetEnergies() map[string]*Energy { + if x != nil { + return x.Energies + } + return nil +} + +// Request to spend one or more energy amounts. +type EnergySpendRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Energy amounts to spend. + Amounts map[string]int32 `protobuf:"bytes,1,rep,name=amounts,proto3" json:"amounts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *EnergySpendRequest) Reset() { + *x = EnergySpendRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[144] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EnergySpendRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EnergySpendRequest) ProtoMessage() {} + +func (x *EnergySpendRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[144] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EnergySpendRequest.ProtoReflect.Descriptor instead. +func (*EnergySpendRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{144} +} + +func (x *EnergySpendRequest) GetAmounts() map[string]int32 { + if x != nil { + return x.Amounts + } + return nil +} + +// Request to spend one or more energy amounts. +type EnergySpendReward struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The updated list of energy. + Energies *EnergyList `protobuf:"bytes,1,opt,name=energies,proto3" json:"energies,omitempty"` + // The cumulative reward of spending the energies. + Reward *Reward `protobuf:"bytes,2,opt,name=reward,proto3" json:"reward,omitempty"` +} + +func (x *EnergySpendReward) Reset() { + *x = EnergySpendReward{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[145] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EnergySpendReward) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EnergySpendReward) ProtoMessage() {} + +func (x *EnergySpendReward) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[145] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EnergySpendReward.ProtoReflect.Descriptor instead. +func (*EnergySpendReward) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{145} +} + +func (x *EnergySpendReward) GetEnergies() *EnergyList { + if x != nil { + return x.Energies + } + return nil +} + +func (x *EnergySpendReward) GetReward() *Reward { + if x != nil { + return x.Reward + } + return nil +} + +// Request to grant one or more energy amounts. +type EnergyGrantRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Energy amounts to grant. + Amounts map[string]int32 `protobuf:"bytes,1,rep,name=amounts,proto3" json:"amounts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *EnergyGrantRequest) Reset() { + *x = EnergyGrantRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[146] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EnergyGrantRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EnergyGrantRequest) ProtoMessage() {} + +func (x *EnergyGrantRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[146] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EnergyGrantRequest.ProtoReflect.Descriptor instead. +func (*EnergyGrantRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{146} +} + +func (x *EnergyGrantRequest) GetAmounts() map[string]int32 { + if x != nil { + return x.Amounts + } + return nil +} + +// A leaderboard configuration. +type LeaderboardConfig struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The leaderboard id. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The leaderboard sort order. + SortOrder string `protobuf:"bytes,2,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + // The leaderboard operator. + Operator string `protobuf:"bytes,3,opt,name=operator,proto3" json:"operator,omitempty"` + // The leaderboard reset schedule. + ResetSchedule string `protobuf:"bytes,4,opt,name=reset_schedule,json=resetSchedule,proto3" json:"reset_schedule,omitempty"` + // Whether the leaderboard is authoritative or not. + Authoritative bool `protobuf:"varint,5,opt,name=authoritative,proto3" json:"authoritative,omitempty"` + // List of regional leaderboards of the leaderboard, if any. + Regions []string `protobuf:"bytes,6,rep,name=regions,proto3" json:"regions,omitempty"` +} + +func (x *LeaderboardConfig) Reset() { + *x = LeaderboardConfig{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[147] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LeaderboardConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LeaderboardConfig) ProtoMessage() {} + +func (x *LeaderboardConfig) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[147] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LeaderboardConfig.ProtoReflect.Descriptor instead. +func (*LeaderboardConfig) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{147} +} + +func (x *LeaderboardConfig) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *LeaderboardConfig) GetSortOrder() string { + if x != nil { + return x.SortOrder + } + return "" +} + +func (x *LeaderboardConfig) GetOperator() string { + if x != nil { + return x.Operator + } + return "" +} + +func (x *LeaderboardConfig) GetResetSchedule() string { + if x != nil { + return x.ResetSchedule + } + return "" +} + +func (x *LeaderboardConfig) GetAuthoritative() bool { + if x != nil { + return x.Authoritative + } + return false +} + +func (x *LeaderboardConfig) GetRegions() []string { + if x != nil { + return x.Regions + } + return nil +} + +// A list of leaderboard configurations. +type LeaderboardConfigList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The list of leaderboard configurations. + LeaderboardConfigs []*LeaderboardConfig `protobuf:"bytes,1,rep,name=leaderboard_configs,json=leaderboardConfigs,proto3" json:"leaderboard_configs,omitempty"` +} + +func (x *LeaderboardConfigList) Reset() { + *x = LeaderboardConfigList{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[148] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LeaderboardConfigList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LeaderboardConfigList) ProtoMessage() {} + +func (x *LeaderboardConfigList) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[148] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LeaderboardConfigList.ProtoReflect.Descriptor instead. +func (*LeaderboardConfigList) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{148} +} + +func (x *LeaderboardConfigList) GetLeaderboardConfigs() []*LeaderboardConfig { + if x != nil { + return x.LeaderboardConfigs + } + return nil +} + +// An individual set of tutorial steps. +type Tutorial struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The unique tutorial identifier. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The current step in the tutorial. + Current int32 `protobuf:"varint,2,opt,name=current,proto3" json:"current,omitempty"` + // The maximum step in the tutorial based on configuration. + Max int32 `protobuf:"varint,3,opt,name=max,proto3" json:"max,omitempty"` + // The accepted state of the tutorial. + State TutorialState `protobuf:"varint,4,opt,name=state,proto3,enum=hiro.TutorialState" json:"state,omitempty"` + // The UNIX timestamp when the tutorial was last updated. + UpdateTimeSec int64 `protobuf:"varint,5,opt,name=update_time_sec,json=updateTimeSec,proto3" json:"update_time_sec,omitempty"` + // The UNIX timestamp when the tutorial was completed, if it is completed. + CompleteTimeSec int64 `protobuf:"varint,6,opt,name=complete_time_sec,json=completeTimeSec,proto3" json:"complete_time_sec,omitempty"` + // Additional metadata properties. + AdditionalProperties map[string]string `protobuf:"bytes,7,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *Tutorial) Reset() { + *x = Tutorial{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[149] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Tutorial) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Tutorial) ProtoMessage() {} + +func (x *Tutorial) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[149] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Tutorial.ProtoReflect.Descriptor instead. +func (*Tutorial) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{149} +} + +func (x *Tutorial) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Tutorial) GetCurrent() int32 { + if x != nil { + return x.Current + } + return 0 +} + +func (x *Tutorial) GetMax() int32 { + if x != nil { + return x.Max + } + return 0 +} + +func (x *Tutorial) GetState() TutorialState { + if x != nil { + return x.State + } + return TutorialState_TUTORIAL_STATE_NONE +} + +func (x *Tutorial) GetUpdateTimeSec() int64 { + if x != nil { + return x.UpdateTimeSec + } + return 0 +} + +func (x *Tutorial) GetCompleteTimeSec() int64 { + if x != nil { + return x.CompleteTimeSec + } + return 0 +} + +func (x *Tutorial) GetAdditionalProperties() map[string]string { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +// The full tutorial statuses for a given user. +type TutorialList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // All available tutorials. + Tutorials map[string]*Tutorial `protobuf:"bytes,1,rep,name=tutorials,proto3" json:"tutorials,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *TutorialList) Reset() { + *x = TutorialList{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[150] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TutorialList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TutorialList) ProtoMessage() {} + +func (x *TutorialList) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[150] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TutorialList.ProtoReflect.Descriptor instead. +func (*TutorialList) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{150} +} + +func (x *TutorialList) GetTutorials() map[string]*Tutorial { + if x != nil { + return x.Tutorials + } + return nil +} + +// A request to accept a tutorial. +type TutorialAcceptRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The tutorial to accept. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *TutorialAcceptRequest) Reset() { + *x = TutorialAcceptRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[151] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TutorialAcceptRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TutorialAcceptRequest) ProtoMessage() {} + +func (x *TutorialAcceptRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[151] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TutorialAcceptRequest.ProtoReflect.Descriptor instead. +func (*TutorialAcceptRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{151} +} + +func (x *TutorialAcceptRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +// A request to decline a tutorial. +type TutorialDeclineRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The tutorial to decline. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *TutorialDeclineRequest) Reset() { + *x = TutorialDeclineRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[152] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TutorialDeclineRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TutorialDeclineRequest) ProtoMessage() {} + +func (x *TutorialDeclineRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[152] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TutorialDeclineRequest.ProtoReflect.Descriptor instead. +func (*TutorialDeclineRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{152} +} + +func (x *TutorialDeclineRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +// A request to abandon a tutorial. +type TutorialAbandonRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The tutorial to abandon. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *TutorialAbandonRequest) Reset() { + *x = TutorialAbandonRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[153] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TutorialAbandonRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TutorialAbandonRequest) ProtoMessage() {} + +func (x *TutorialAbandonRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[153] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TutorialAbandonRequest.ProtoReflect.Descriptor instead. +func (*TutorialAbandonRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{153} +} + +func (x *TutorialAbandonRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +// A request to update a tutorial. +type TutorialUpdateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The tutorial to update. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The latest step that should be marked completed. All previous steps will also be marked as completed. + Step int32 `protobuf:"varint,2,opt,name=step,proto3" json:"step,omitempty"` +} + +func (x *TutorialUpdateRequest) Reset() { + *x = TutorialUpdateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[154] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TutorialUpdateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TutorialUpdateRequest) ProtoMessage() {} + +func (x *TutorialUpdateRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[154] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TutorialUpdateRequest.ProtoReflect.Descriptor instead. +func (*TutorialUpdateRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{154} +} + +func (x *TutorialUpdateRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TutorialUpdateRequest) GetStep() int32 { + if x != nil { + return x.Step + } + return 0 +} + +// A request to reset the state of one or more tutorials. +type TutorialResetRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The tutorials to reset. + Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` +} + +func (x *TutorialResetRequest) Reset() { + *x = TutorialResetRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[155] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TutorialResetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TutorialResetRequest) ProtoMessage() {} + +func (x *TutorialResetRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[155] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TutorialResetRequest.ProtoReflect.Descriptor instead. +func (*TutorialResetRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{155} +} + +func (x *TutorialResetRequest) GetIds() []string { + if x != nil { + return x.Ids + } + return nil +} + +// The input message when the user rates the app. +type RateAppRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The score given by the user. Above zero values indicate a positive review. + Score uint32 `protobuf:"varint,1,opt,name=score,proto3" json:"score,omitempty"` + // The message about the reason for their score. May be blank. + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` +} + +func (x *RateAppRequest) Reset() { + *x = RateAppRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[156] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RateAppRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RateAppRequest) ProtoMessage() {} + +func (x *RateAppRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[156] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RateAppRequest.ProtoReflect.Descriptor instead. +func (*RateAppRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{156} +} + +func (x *RateAppRequest) GetScore() uint32 { + if x != nil { + return x.Score + } + return 0 +} + +func (x *RateAppRequest) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +// Member of a particular team. +type TeamMember struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // User identifier. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Activity score. + Activity int64 `protobuf:"varint,2,opt,name=activity,proto3" json:"activity,omitempty"` +} + +func (x *TeamMember) Reset() { + *x = TeamMember{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[157] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamMember) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamMember) ProtoMessage() {} + +func (x *TeamMember) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[157] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamMember.ProtoReflect.Descriptor instead. +func (*TeamMember) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{157} +} + +func (x *TeamMember) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamMember) GetActivity() int64 { + if x != nil { + return x.Activity + } + return 0 +} + +// A Team represents a group of users who play together. +type Team struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of a team. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The ID of the user who created the team. + CreatorId string `protobuf:"bytes,2,opt,name=creator_id,json=creatorId,proto3" json:"creator_id,omitempty"` + // The unique name of the team. + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + // A description for the team. + Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` + // The language expected to be a tag which follows the BCP-47 spec. + LangTag string `protobuf:"bytes,5,opt,name=lang_tag,json=langTag,proto3" json:"lang_tag,omitempty"` + // Additional information stored as a JSON object. + Metadata string `protobuf:"bytes,6,opt,name=metadata,proto3" json:"metadata,omitempty"` + // A URL for an avatar image. + AvatarUrl string `protobuf:"bytes,7,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` + // Anyone can join open groups, otherwise only admins can accept members. + Open bool `protobuf:"varint,8,opt,name=open,proto3" json:"open,omitempty"` + // The current count of all members in the group. + EdgeCount int32 `protobuf:"varint,9,opt,name=edge_count,json=edgeCount,proto3" json:"edge_count,omitempty"` + // The maximum number of members allowed. + MaxCount int32 `protobuf:"varint,10,opt,name=max_count,json=maxCount,proto3" json:"max_count,omitempty"` + // The UNIX timestamp when the group was created. + CreateTimeSec int64 `protobuf:"varint,11,opt,name=create_time_sec,json=createTimeSec,proto3" json:"create_time_sec,omitempty"` + // The UNIX timestamp when the group was last updated. + UpdateTimeSec int64 `protobuf:"varint,12,opt,name=update_time_sec,json=updateTimeSec,proto3" json:"update_time_sec,omitempty"` + // Activity score. + Activity int64 `protobuf:"varint,13,opt,name=activity,proto3" json:"activity,omitempty"` + // Team member activity. + Members []*TeamMember `protobuf:"bytes,14,rep,name=members,proto3" json:"members,omitempty"` +} + +func (x *Team) Reset() { + *x = Team{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[158] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Team) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Team) ProtoMessage() {} + +func (x *Team) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[158] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Team.ProtoReflect.Descriptor instead. +func (*Team) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{158} +} + +func (x *Team) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Team) GetCreatorId() string { + if x != nil { + return x.CreatorId + } + return "" +} + +func (x *Team) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Team) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Team) GetLangTag() string { + if x != nil { + return x.LangTag + } + return "" +} + +func (x *Team) GetMetadata() string { + if x != nil { + return x.Metadata + } + return "" +} + +func (x *Team) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +func (x *Team) GetOpen() bool { + if x != nil { + return x.Open + } + return false +} + +func (x *Team) GetEdgeCount() int32 { + if x != nil { + return x.EdgeCount + } + return 0 +} + +func (x *Team) GetMaxCount() int32 { + if x != nil { + return x.MaxCount + } + return 0 +} + +func (x *Team) GetCreateTimeSec() int64 { + if x != nil { + return x.CreateTimeSec + } + return 0 +} + +func (x *Team) GetUpdateTimeSec() int64 { + if x != nil { + return x.UpdateTimeSec + } + return 0 +} + +func (x *Team) GetActivity() int64 { + if x != nil { + return x.Activity + } + return 0 +} + +func (x *Team) GetMembers() []*TeamMember { + if x != nil { + return x.Members + } + return nil +} + +// A request to create a team. +type TeamCreateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The name of the team to be created. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // The description of the team to be created. + Desc string `protobuf:"bytes,2,opt,name=desc,proto3" json:"desc,omitempty"` + // True if the team is open to join by any user. + Open bool `protobuf:"varint,3,opt,name=open,proto3" json:"open,omitempty"` + // The avatar URL or artwork reference ID for the team, if any. + AvatarUrl string `protobuf:"bytes,4,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` + // The language expected to be a tag which follows the BCP-47 spec. + LangTag string `protobuf:"bytes,5,opt,name=lang_tag,json=langTag,proto3" json:"lang_tag,omitempty"` + // The starting metadata passed in as part of creating the team. + SetupMetadata string `protobuf:"bytes,6,opt,name=setup_metadata,json=setupMetadata,proto3" json:"setup_metadata,omitempty"` +} + +func (x *TeamCreateRequest) Reset() { + *x = TeamCreateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[159] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamCreateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamCreateRequest) ProtoMessage() {} + +func (x *TeamCreateRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[159] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamCreateRequest.ProtoReflect.Descriptor instead. +func (*TeamCreateRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{159} +} + +func (x *TeamCreateRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *TeamCreateRequest) GetDesc() string { + if x != nil { + return x.Desc + } + return "" +} + +func (x *TeamCreateRequest) GetOpen() bool { + if x != nil { + return x.Open + } + return false +} + +func (x *TeamCreateRequest) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +func (x *TeamCreateRequest) GetLangTag() string { + if x != nil { + return x.LangTag + } + return "" +} + +func (x *TeamCreateRequest) GetSetupMetadata() string { + if x != nil { + return x.SetupMetadata + } + return "" +} + +// Request to update a team. +type TeamUpdateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // A new name for the team, or empty to leave unchanged. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // A new description for the team, or empty to leave unchanged. + Desc string `protobuf:"bytes,3,opt,name=desc,proto3" json:"desc,omitempty"` + // True if the team is open to join by any user. + Open bool `protobuf:"varint,4,opt,name=open,proto3" json:"open,omitempty"` + // The avatar URL or artwork reference ID for the team, or empty to leave unchanged. + AvatarUrl string `protobuf:"bytes,5,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` + // The language expected to be a tag which follows the BCP-47 spec, or empty to leave unchanged. + LangTag string `protobuf:"bytes,6,opt,name=lang_tag,json=langTag,proto3" json:"lang_tag,omitempty"` + // Metadata to assign to the team, or empty to leave unchanged. + Metadata *structpb.Struct `protobuf:"bytes,7,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *TeamUpdateRequest) Reset() { + *x = TeamUpdateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[160] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamUpdateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamUpdateRequest) ProtoMessage() {} + +func (x *TeamUpdateRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[160] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamUpdateRequest.ProtoReflect.Descriptor instead. +func (*TeamUpdateRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{160} +} + +func (x *TeamUpdateRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamUpdateRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *TeamUpdateRequest) GetDesc() string { + if x != nil { + return x.Desc + } + return "" +} + +func (x *TeamUpdateRequest) GetOpen() bool { + if x != nil { + return x.Open + } + return false +} + +func (x *TeamUpdateRequest) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +func (x *TeamUpdateRequest) GetLangTag() string { + if x != nil { + return x.LangTag + } + return "" +} + +func (x *TeamUpdateRequest) GetMetadata() *structpb.Struct { + if x != nil { + return x.Metadata + } + return nil +} + +// A request to list teams which a user can join. +type TeamListRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // An optional cursor used to get the next page. + Cursor string `protobuf:"bytes,1,opt,name=cursor,proto3" json:"cursor,omitempty"` + // The optional location filter. + Location string `protobuf:"bytes,2,opt,name=location,proto3" json:"location,omitempty"` + // An optional limit on how many results are returned. Defaults to 10. + Limit int32 `protobuf:"varint,3,opt,name=limit,proto3" json:"limit,omitempty"` +} + +func (x *TeamListRequest) Reset() { + *x = TeamListRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[161] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamListRequest) ProtoMessage() {} + +func (x *TeamListRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[161] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamListRequest.ProtoReflect.Descriptor instead. +func (*TeamListRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{161} +} + +func (x *TeamListRequest) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +func (x *TeamListRequest) GetLocation() string { + if x != nil { + return x.Location + } + return "" +} + +func (x *TeamListRequest) GetLimit() int32 { + if x != nil { + return x.Limit + } + return 0 +} + +// A list of teams. +type TeamList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The current page of teams returned in the list. + Teams []*Team `protobuf:"bytes,1,rep,name=teams,proto3" json:"teams,omitempty"` + // A cursor used to get the next page. + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *TeamList) Reset() { + *x = TeamList{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[162] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamList) ProtoMessage() {} + +func (x *TeamList) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[162] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamList.ProtoReflect.Descriptor instead. +func (*TeamList) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{162} +} + +func (x *TeamList) GetTeams() []*Team { + if x != nil { + return x.Teams + } + return nil +} + +func (x *TeamList) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +// A request to search for teams which the user wants to join. +type TeamSearchRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The search term(s) passed in by the user. + Input string `protobuf:"bytes,1,opt,name=input,proto3" json:"input,omitempty"` + // An optional limit on how many results are returned. Defaults to 10. + Limit int32 `protobuf:"varint,2,opt,name=limit,proto3" json:"limit,omitempty"` + // Additionally search by language, if specified. + LangTag string `protobuf:"bytes,3,opt,name=lang_tag,json=langTag,proto3" json:"lang_tag,omitempty"` + // Minimum team activity score, if specified. + MinActivity int64 `protobuf:"varint,4,opt,name=min_activity,json=minActivity,proto3" json:"min_activity,omitempty"` +} + +func (x *TeamSearchRequest) Reset() { + *x = TeamSearchRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[163] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamSearchRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamSearchRequest) ProtoMessage() {} + +func (x *TeamSearchRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[163] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamSearchRequest.ProtoReflect.Descriptor instead. +func (*TeamSearchRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{163} +} + +func (x *TeamSearchRequest) GetInput() string { + if x != nil { + return x.Input + } + return "" +} + +func (x *TeamSearchRequest) GetLimit() int32 { + if x != nil { + return x.Limit + } + return 0 +} + +func (x *TeamSearchRequest) GetLangTag() string { + if x != nil { + return x.LangTag + } + return "" +} + +func (x *TeamSearchRequest) GetMinActivity() int64 { + if x != nil { + return x.MinActivity + } + return 0 +} + +// A request to get a team by its TeamID. +type TeamGetRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the team. + TeamId string `protobuf:"bytes,1,opt,name=team_id,json=teamId,proto3" json:"team_id,omitempty"` +} + +func (x *TeamGetRequest) Reset() { + *x = TeamGetRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[164] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamGetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamGetRequest) ProtoMessage() {} + +func (x *TeamGetRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[164] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamGetRequest.ProtoReflect.Descriptor instead. +func (*TeamGetRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{164} +} + +func (x *TeamGetRequest) GetTeamId() string { + if x != nil { + return x.TeamId + } + return "" +} + +// Request to fetch teams for a given set of users. +type UserTeamsListRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Users to fetch teams for. + UserIds []string `protobuf:"bytes,1,rep,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` +} + +func (x *UserTeamsListRequest) Reset() { + *x = UserTeamsListRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[165] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UserTeamsListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserTeamsListRequest) ProtoMessage() {} + +func (x *UserTeamsListRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[165] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UserTeamsListRequest.ProtoReflect.Descriptor instead. +func (*UserTeamsListRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{165} +} + +func (x *UserTeamsListRequest) GetUserIds() []string { + if x != nil { + return x.UserIds + } + return nil +} + +// A user in the server. +type User struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The id of the user's account. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The username of the user's account. + Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` + // The display name of the user. + DisplayName string `protobuf:"bytes,3,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` + // A URL for an avatar image. + AvatarUrl string `protobuf:"bytes,4,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` + // The language expected to be a tag which follows the BCP-47 spec. + LangTag string `protobuf:"bytes,5,opt,name=lang_tag,json=langTag,proto3" json:"lang_tag,omitempty"` + // The location set by the user. + Location string `protobuf:"bytes,6,opt,name=location,proto3" json:"location,omitempty"` + // The timezone set by the user. + Timezone string `protobuf:"bytes,7,opt,name=timezone,proto3" json:"timezone,omitempty"` + // Additional information stored as a JSON object. + Metadata string `protobuf:"bytes,8,opt,name=metadata,proto3" json:"metadata,omitempty"` + // The Facebook id in the user's account. + FacebookId string `protobuf:"bytes,9,opt,name=facebook_id,json=facebookId,proto3" json:"facebook_id,omitempty"` + // The Google id in the user's account. + GoogleId string `protobuf:"bytes,10,opt,name=google_id,json=googleId,proto3" json:"google_id,omitempty"` + // The Apple Game Center in of the user's account. + GamecenterId string `protobuf:"bytes,11,opt,name=gamecenter_id,json=gamecenterId,proto3" json:"gamecenter_id,omitempty"` + // The Steam id in the user's account. + SteamId string `protobuf:"bytes,12,opt,name=steam_id,json=steamId,proto3" json:"steam_id,omitempty"` + // Indicates whether the user is currently online. + Online bool `protobuf:"varint,13,opt,name=online,proto3" json:"online,omitempty"` + // Number of related edges to this user. + EdgeCount int32 `protobuf:"varint,14,opt,name=edge_count,json=edgeCount,proto3" json:"edge_count,omitempty"` + // The UNIX time in seconds when the user was created. + CreateTimeSec int64 `protobuf:"varint,15,opt,name=create_time_sec,json=createTimeSec,proto3" json:"create_time_sec,omitempty"` + // The UNIX time in seconds when the user was last updated. + UpdateTime int64 `protobuf:"varint,16,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` + // The Facebook Instant Game ID in the user's account. + FacebookInstantGameId string `protobuf:"bytes,17,opt,name=facebook_instant_game_id,json=facebookInstantGameId,proto3" json:"facebook_instant_game_id,omitempty"` + // The Apple Sign In ID in the user's account. + AppleId string `protobuf:"bytes,18,opt,name=apple_id,json=appleId,proto3" json:"apple_id,omitempty"` +} + +func (x *User) Reset() { + *x = User{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[166] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *User) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*User) ProtoMessage() {} + +func (x *User) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[166] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use User.ProtoReflect.Descriptor instead. +func (*User) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{166} +} + +func (x *User) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *User) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *User) GetDisplayName() string { + if x != nil { + return x.DisplayName + } + return "" +} + +func (x *User) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +func (x *User) GetLangTag() string { + if x != nil { + return x.LangTag + } + return "" +} + +func (x *User) GetLocation() string { + if x != nil { + return x.Location + } + return "" +} + +func (x *User) GetTimezone() string { + if x != nil { + return x.Timezone + } + return "" +} + +func (x *User) GetMetadata() string { + if x != nil { + return x.Metadata + } + return "" +} + +func (x *User) GetFacebookId() string { + if x != nil { + return x.FacebookId + } + return "" +} + +func (x *User) GetGoogleId() string { + if x != nil { + return x.GoogleId + } + return "" +} + +func (x *User) GetGamecenterId() string { + if x != nil { + return x.GamecenterId + } + return "" +} + +func (x *User) GetSteamId() string { + if x != nil { + return x.SteamId + } + return "" +} + +func (x *User) GetOnline() bool { + if x != nil { + return x.Online + } + return false +} + +func (x *User) GetEdgeCount() int32 { + if x != nil { + return x.EdgeCount + } + return 0 +} + +func (x *User) GetCreateTimeSec() int64 { + if x != nil { + return x.CreateTimeSec + } + return 0 +} + +func (x *User) GetUpdateTime() int64 { + if x != nil { + return x.UpdateTime + } + return 0 +} + +func (x *User) GetFacebookInstantGameId() string { + if x != nil { + return x.FacebookInstantGameId + } + return "" +} + +func (x *User) GetAppleId() string { + if x != nil { + return x.AppleId + } + return "" +} + +// A user and their associated teams. +type UserTeams struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The user these teams are associated with. + User *User `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` + // All teams this user is part of. + Teams []*Team `protobuf:"bytes,2,rep,name=teams,proto3" json:"teams,omitempty"` +} + +func (x *UserTeams) Reset() { + *x = UserTeams{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[167] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UserTeams) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserTeams) ProtoMessage() {} + +func (x *UserTeams) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[167] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UserTeams.ProtoReflect.Descriptor instead. +func (*UserTeams) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{167} +} + +func (x *UserTeams) GetUser() *User { + if x != nil { + return x.User + } + return nil +} + +func (x *UserTeams) GetTeams() []*Team { + if x != nil { + return x.Teams + } + return nil +} + +// A list of users and their associated teams. +type UserTeamsList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Results from a user teams lookup. + UserTeams map[string]*UserTeams `protobuf:"bytes,1,rep,name=user_teams,json=userTeams,proto3" json:"user_teams,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *UserTeamsList) Reset() { + *x = UserTeamsList{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[168] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UserTeamsList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserTeamsList) ProtoMessage() {} + +func (x *UserTeamsList) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[168] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UserTeamsList.ProtoReflect.Descriptor instead. +func (*UserTeamsList) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{168} +} + +func (x *UserTeamsList) GetUserTeams() map[string]*UserTeams { + if x != nil { + return x.UserTeams + } + return nil +} + +// A request to write a chat message to the channel for a team the user is part of. +type TeamWriteChatMessageRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the team. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The content of the chat message. Usually an escaped JSON object. + Content string `protobuf:"bytes,2,opt,name=content,proto3" json:"content,omitempty"` +} + +func (x *TeamWriteChatMessageRequest) Reset() { + *x = TeamWriteChatMessageRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[169] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamWriteChatMessageRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamWriteChatMessageRequest) ProtoMessage() {} + +func (x *TeamWriteChatMessageRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[169] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamWriteChatMessageRequest.ProtoReflect.Descriptor instead. +func (*TeamWriteChatMessageRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{169} +} + +func (x *TeamWriteChatMessageRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamWriteChatMessageRequest) GetContent() string { + if x != nil { + return x.Content + } + return "" +} + +// The unlockable cost, may relate to starting an unlock, or fully completing it. +type UnlockableCost struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The items which will be deducted. + Items map[string]int64 `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // The currencies which will be deducted. + Currencies map[string]int64 `protobuf:"bytes,2,rep,name=currencies,proto3" json:"currencies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *UnlockableCost) Reset() { + *x = UnlockableCost{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[170] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UnlockableCost) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnlockableCost) ProtoMessage() {} + +func (x *UnlockableCost) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[170] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UnlockableCost.ProtoReflect.Descriptor instead. +func (*UnlockableCost) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{170} +} + +func (x *UnlockableCost) GetItems() map[string]int64 { + if x != nil { + return x.Items + } + return nil +} + +func (x *UnlockableCost) GetCurrencies() map[string]int64 { + if x != nil { + return x.Currencies + } + return nil +} + +// A single unlockable object. +type Unlockable struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The unlockable definition ID, eg. "bronze-chest". + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The instance ID. + InstanceId string `protobuf:"bytes,2,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` + // The category the unlockable is part of. + Category string `protobuf:"bytes,3,opt,name=category,proto3" json:"category,omitempty"` + // The cost to begin unlocking this particular unlockable. + StartCost *UnlockableCost `protobuf:"bytes,4,opt,name=start_cost,json=startCost,proto3" json:"start_cost,omitempty"` + // The cost to fully unlock this unlockable, accounting for any time already spent. + Cost *UnlockableCost `protobuf:"bytes,5,opt,name=cost,proto3" json:"cost,omitempty"` + // The description, if any. May be an i18n code. + Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` + // The name. May be an i18n code. + Name string `protobuf:"bytes,7,opt,name=name,proto3" json:"name,omitempty"` + // The reward already granted when the unlockable has been claimed. + Reward *Reward `protobuf:"bytes,8,opt,name=reward,proto3" json:"reward,omitempty"` + // The available rewards for when the unlockable is claimed. + AvailableRewards *AvailableRewards `protobuf:"bytes,9,opt,name=available_rewards,json=availableRewards,proto3" json:"available_rewards,omitempty"` + // Total time this unlockable will take to unlock once activated. + WaitTimeSec int32 `protobuf:"varint,10,opt,name=wait_time_sec,json=waitTimeSec,proto3" json:"wait_time_sec,omitempty"` + // The UNIX timestamp when this unlockable was granted to the user. + CreateTimeSec int64 `protobuf:"varint,11,opt,name=create_time_sec,json=createTimeSec,proto3" json:"create_time_sec,omitempty"` + // The UNIX timestamp when this unlockable began unlocking, or 0 if it is not active. + UnlockStartTimeSec int64 `protobuf:"varint,12,opt,name=unlock_start_time_sec,json=unlockStartTimeSec,proto3" json:"unlock_start_time_sec,omitempty"` + // The UNIX timestamp when this unlockable will complete unlocking and become claimable, or 0 if it is not active. + UnlockCompleteTimeSec int64 `protobuf:"varint,13,opt,name=unlock_complete_time_sec,json=unlockCompleteTimeSec,proto3" json:"unlock_complete_time_sec,omitempty"` + // If the unlock process has completed (either by time elapsed or purchase) and the unlockable reward can be claimed. + CanClaim bool `protobuf:"varint,14,opt,name=can_claim,json=canClaim,proto3" json:"can_claim,omitempty"` + // Additional metadata properties. + AdditionalProperties map[string]string `protobuf:"bytes,15,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Additional time that has been added to speed up the unlockable's progress, if any. + AdvanceTimeSec int64 `protobuf:"varint,16,opt,name=advance_time_sec,json=advanceTimeSec,proto3" json:"advance_time_sec,omitempty"` +} + +func (x *Unlockable) Reset() { + *x = Unlockable{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[171] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Unlockable) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Unlockable) ProtoMessage() {} + +func (x *Unlockable) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[171] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Unlockable.ProtoReflect.Descriptor instead. +func (*Unlockable) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{171} +} + +func (x *Unlockable) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Unlockable) GetInstanceId() string { + if x != nil { + return x.InstanceId + } + return "" +} + +func (x *Unlockable) GetCategory() string { + if x != nil { + return x.Category + } + return "" +} + +func (x *Unlockable) GetStartCost() *UnlockableCost { + if x != nil { + return x.StartCost + } + return nil +} + +func (x *Unlockable) GetCost() *UnlockableCost { + if x != nil { + return x.Cost + } + return nil +} + +func (x *Unlockable) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Unlockable) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Unlockable) GetReward() *Reward { + if x != nil { + return x.Reward + } + return nil +} + +func (x *Unlockable) GetAvailableRewards() *AvailableRewards { + if x != nil { + return x.AvailableRewards + } + return nil +} + +func (x *Unlockable) GetWaitTimeSec() int32 { + if x != nil { + return x.WaitTimeSec + } + return 0 +} + +func (x *Unlockable) GetCreateTimeSec() int64 { + if x != nil { + return x.CreateTimeSec + } + return 0 +} + +func (x *Unlockable) GetUnlockStartTimeSec() int64 { + if x != nil { + return x.UnlockStartTimeSec + } + return 0 +} + +func (x *Unlockable) GetUnlockCompleteTimeSec() int64 { + if x != nil { + return x.UnlockCompleteTimeSec + } + return 0 +} + +func (x *Unlockable) GetCanClaim() bool { + if x != nil { + return x.CanClaim + } + return false +} + +func (x *Unlockable) GetAdditionalProperties() map[string]string { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +func (x *Unlockable) GetAdvanceTimeSec() int64 { + if x != nil { + return x.AdvanceTimeSec + } + return 0 +} + +// The cost to purchase an additional unlockable active slot. +type UnlockableSlotCost struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The items which will be deducted. + Items map[string]int64 `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // The currencies which will be deducted. + Currencies map[string]int64 `protobuf:"bytes,2,rep,name=currencies,proto3" json:"currencies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *UnlockableSlotCost) Reset() { + *x = UnlockableSlotCost{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[172] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UnlockableSlotCost) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnlockableSlotCost) ProtoMessage() {} + +func (x *UnlockableSlotCost) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[172] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UnlockableSlotCost.ProtoReflect.Descriptor instead. +func (*UnlockableSlotCost) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{172} +} + +func (x *UnlockableSlotCost) GetItems() map[string]int64 { + if x != nil { + return x.Items + } + return nil +} + +func (x *UnlockableSlotCost) GetCurrencies() map[string]int64 { + if x != nil { + return x.Currencies + } + return nil +} + +// A list of unlockables currently owned by a user. +type UnlockablesList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The list of unlockables owned by a user. + Unlockables []*Unlockable `protobuf:"bytes,1,rep,name=unlockables,proto3" json:"unlockables,omitempty"` + // The unlockable overflow slot. + Overflow *Unlockable `protobuf:"bytes,2,opt,name=overflow,proto3" json:"overflow,omitempty"` + // The total number of non-overflow slots. + Slots int32 `protobuf:"varint,3,opt,name=slots,proto3" json:"slots,omitempty"` + // The current number of active slots. + ActiveSlots int32 `protobuf:"varint,4,opt,name=active_slots,json=activeSlots,proto3" json:"active_slots,omitempty"` + // The max number of active slots the user can ever obtain. + MaxActiveSlots int32 `protobuf:"varint,5,opt,name=max_active_slots,json=maxActiveSlots,proto3" json:"max_active_slots,omitempty"` + // The cost to purchase the next active slot, if another is available for purchase. + SlotCost *UnlockableSlotCost `protobuf:"bytes,6,opt,name=slot_cost,json=slotCost,proto3" json:"slot_cost,omitempty"` + // The newly granted unlockable, if any. + InstanceId string `protobuf:"bytes,7,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` + // Unlockable instance IDs queued to start unlocking as soon as possible. + QueuedUnlocks []string `protobuf:"bytes,8,rep,name=queued_unlocks,json=queuedUnlocks,proto3" json:"queued_unlocks,omitempty"` + // Maximum unlock queue size. + MaxQueuedUnlocks int32 `protobuf:"varint,9,opt,name=max_queued_unlocks,json=maxQueuedUnlocks,proto3" json:"max_queued_unlocks,omitempty"` +} + +func (x *UnlockablesList) Reset() { + *x = UnlockablesList{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[173] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UnlockablesList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnlockablesList) ProtoMessage() {} + +func (x *UnlockablesList) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[173] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UnlockablesList.ProtoReflect.Descriptor instead. +func (*UnlockablesList) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{173} +} + +func (x *UnlockablesList) GetUnlockables() []*Unlockable { + if x != nil { + return x.Unlockables + } + return nil +} + +func (x *UnlockablesList) GetOverflow() *Unlockable { + if x != nil { + return x.Overflow + } + return nil +} + +func (x *UnlockablesList) GetSlots() int32 { + if x != nil { + return x.Slots + } + return 0 +} + +func (x *UnlockablesList) GetActiveSlots() int32 { + if x != nil { + return x.ActiveSlots + } + return 0 +} + +func (x *UnlockablesList) GetMaxActiveSlots() int32 { + if x != nil { + return x.MaxActiveSlots + } + return 0 +} + +func (x *UnlockablesList) GetSlotCost() *UnlockableSlotCost { + if x != nil { + return x.SlotCost + } + return nil +} + +func (x *UnlockablesList) GetInstanceId() string { + if x != nil { + return x.InstanceId + } + return "" +} + +func (x *UnlockablesList) GetQueuedUnlocks() []string { + if x != nil { + return x.QueuedUnlocks + } + return nil +} + +func (x *UnlockablesList) GetMaxQueuedUnlocks() int32 { + if x != nil { + return x.MaxQueuedUnlocks + } + return 0 +} + +// A reward that was granted upon unlock, and a new state of all unlockables. +type UnlockablesReward struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The updated state of remaining unlockables. + Unlockables *UnlockablesList `protobuf:"bytes,1,opt,name=unlockables,proto3" json:"unlockables,omitempty"` + // The reward granted from the unlockable. + Reward *Reward `protobuf:"bytes,2,opt,name=reward,proto3" json:"reward,omitempty"` + // The available rewards active for the unlockable. + AvailableRewards *AvailableRewards `protobuf:"bytes,3,opt,name=available_rewards,json=availableRewards,proto3" json:"available_rewards,omitempty"` +} + +func (x *UnlockablesReward) Reset() { + *x = UnlockablesReward{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[174] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UnlockablesReward) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnlockablesReward) ProtoMessage() {} + +func (x *UnlockablesReward) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[174] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UnlockablesReward.ProtoReflect.Descriptor instead. +func (*UnlockablesReward) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{174} +} + +func (x *UnlockablesReward) GetUnlockables() *UnlockablesList { + if x != nil { + return x.Unlockables + } + return nil +} + +func (x *UnlockablesReward) GetReward() *Reward { + if x != nil { + return x.Reward + } + return nil +} + +func (x *UnlockablesReward) GetAvailableRewards() *AvailableRewards { + if x != nil { + return x.AvailableRewards + } + return nil +} + +// Request body for interacting with a specific unlockable. +type UnlockablesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The unlockable instance ID. + InstanceId string `protobuf:"bytes,1,opt,name=instance_id,json=instanceId,proto3" json:"instance_id,omitempty"` +} + +func (x *UnlockablesRequest) Reset() { + *x = UnlockablesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[175] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UnlockablesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnlockablesRequest) ProtoMessage() {} + +func (x *UnlockablesRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[175] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UnlockablesRequest.ProtoReflect.Descriptor instead. +func (*UnlockablesRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{175} +} + +func (x *UnlockablesRequest) GetInstanceId() string { + if x != nil { + return x.InstanceId + } + return "" +} + +// Request to add a set of unlockables to the unlock queue. +type UnlockablesQueueAddRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Unlockable instance IDs to add. + InstanceIds []string `protobuf:"bytes,1,rep,name=instance_ids,json=instanceIds,proto3" json:"instance_ids,omitempty"` +} + +func (x *UnlockablesQueueAddRequest) Reset() { + *x = UnlockablesQueueAddRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[176] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UnlockablesQueueAddRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnlockablesQueueAddRequest) ProtoMessage() {} + +func (x *UnlockablesQueueAddRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[176] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UnlockablesQueueAddRequest.ProtoReflect.Descriptor instead. +func (*UnlockablesQueueAddRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{176} +} + +func (x *UnlockablesQueueAddRequest) GetInstanceIds() []string { + if x != nil { + return x.InstanceIds + } + return nil +} + +// Request to remove a set of unlockables from the unlock queue. +type UnlockablesQueueRemoveRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Unlockable instance IDs to remove. + InstanceIds []string `protobuf:"bytes,1,rep,name=instance_ids,json=instanceIds,proto3" json:"instance_ids,omitempty"` +} + +func (x *UnlockablesQueueRemoveRequest) Reset() { + *x = UnlockablesQueueRemoveRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[177] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UnlockablesQueueRemoveRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnlockablesQueueRemoveRequest) ProtoMessage() {} + +func (x *UnlockablesQueueRemoveRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[177] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UnlockablesQueueRemoveRequest.ProtoReflect.Descriptor instead. +func (*UnlockablesQueueRemoveRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{177} +} + +func (x *UnlockablesQueueRemoveRequest) GetInstanceIds() []string { + if x != nil { + return x.InstanceIds + } + return nil +} + +// Request to replace the unlock queue with the given set of unlockables. +type UnlockablesQueueSetRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Unlockable instance IDs to set. + InstanceIds []string `protobuf:"bytes,1,rep,name=instance_ids,json=instanceIds,proto3" json:"instance_ids,omitempty"` +} + +func (x *UnlockablesQueueSetRequest) Reset() { + *x = UnlockablesQueueSetRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[178] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UnlockablesQueueSetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnlockablesQueueSetRequest) ProtoMessage() {} + +func (x *UnlockablesQueueSetRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[178] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UnlockablesQueueSetRequest.ProtoReflect.Descriptor instead. +func (*UnlockablesQueueSetRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{178} +} + +func (x *UnlockablesQueueSetRequest) GetInstanceIds() []string { + if x != nil { + return x.InstanceIds + } + return nil +} + +// A sub-achievement is an achievement which belongs as part of a parent achievement. +type SubAchievement struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The category to group the sub-achievement together with others. + Category string `protobuf:"bytes,1,opt,name=category,proto3" json:"category,omitempty"` + // The UNIX timestamp for when the sub-achievement reward was claimed, or zero if unclaimed. + ClaimTimeSec int64 `protobuf:"varint,2,opt,name=claim_time_sec,json=claimTimeSec,proto3" json:"claim_time_sec,omitempty"` + // The count of the sub-achievement. + Count int64 `protobuf:"varint,3,opt,name=count,proto3" json:"count,omitempty"` + // The UNIX timestamp for the current server time. + CurrentTimeSec int64 `protobuf:"varint,4,opt,name=current_time_sec,json=currentTimeSec,proto3" json:"current_time_sec,omitempty"` + // A description of the sub-achievement. May be an i18n code. + Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` + // The UNIX timestamp when this sub-achievement will expire. This may be before its next reset. A zero means it does not expire. + ExpireTimeSec int64 `protobuf:"varint,6,opt,name=expire_time_sec,json=expireTimeSec,proto3" json:"expire_time_sec,omitempty"` + // The ID of the sub-achievement. + Id string `protobuf:"bytes,7,opt,name=id,proto3" json:"id,omitempty"` + // The maximum count of the sub-achievement. + MaxCount int64 `protobuf:"varint,8,opt,name=max_count,json=maxCount,proto3" json:"max_count,omitempty"` + // The name of the sub-achievement. May be an i18n code. + Name string `protobuf:"bytes,9,opt,name=name,proto3" json:"name,omitempty"` + // The IDs which are a precondition on the progress to be made on this sub-achievement. + PreconditionIds []string `protobuf:"bytes,10,rep,name=precondition_ids,json=preconditionIds,proto3" json:"precondition_ids,omitempty"` + // The UNIX timestamp when this sub-achievement will reset. + ResetTimeSec int64 `protobuf:"varint,11,opt,name=reset_time_sec,json=resetTimeSec,proto3" json:"reset_time_sec,omitempty"` + // The outcome (rolled) reward for the achievement, if any. + Reward *Reward `protobuf:"bytes,12,opt,name=reward,proto3" json:"reward,omitempty"` + // The available reward and its probabilities. + AvailableRewards *AvailableRewards `protobuf:"bytes,13,opt,name=available_rewards,json=availableRewards,proto3" json:"available_rewards,omitempty"` + // Additional metadata properties. + AdditionalProperties map[string]string `protobuf:"bytes,14,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Whether the sub-achievement reward will be given automatically upon completion. + AutoClaim bool `protobuf:"varint,15,opt,name=auto_claim,json=autoClaim,proto3" json:"auto_claim,omitempty"` + // Whether the sub-achievement will reset after completion. + AutoReset bool `protobuf:"varint,16,opt,name=auto_reset,json=autoReset,proto3" json:"auto_reset,omitempty"` +} + +func (x *SubAchievement) Reset() { + *x = SubAchievement{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[179] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubAchievement) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubAchievement) ProtoMessage() {} + +func (x *SubAchievement) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[179] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubAchievement.ProtoReflect.Descriptor instead. +func (*SubAchievement) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{179} +} + +func (x *SubAchievement) GetCategory() string { + if x != nil { + return x.Category + } + return "" +} + +func (x *SubAchievement) GetClaimTimeSec() int64 { + if x != nil { + return x.ClaimTimeSec + } + return 0 +} + +func (x *SubAchievement) GetCount() int64 { + if x != nil { + return x.Count + } + return 0 +} + +func (x *SubAchievement) GetCurrentTimeSec() int64 { + if x != nil { + return x.CurrentTimeSec + } + return 0 +} + +func (x *SubAchievement) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *SubAchievement) GetExpireTimeSec() int64 { + if x != nil { + return x.ExpireTimeSec + } + return 0 +} + +func (x *SubAchievement) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *SubAchievement) GetMaxCount() int64 { + if x != nil { + return x.MaxCount + } + return 0 +} + +func (x *SubAchievement) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *SubAchievement) GetPreconditionIds() []string { + if x != nil { + return x.PreconditionIds + } + return nil +} + +func (x *SubAchievement) GetResetTimeSec() int64 { + if x != nil { + return x.ResetTimeSec + } + return 0 +} + +func (x *SubAchievement) GetReward() *Reward { + if x != nil { + return x.Reward + } + return nil +} + +func (x *SubAchievement) GetAvailableRewards() *AvailableRewards { + if x != nil { + return x.AvailableRewards + } + return nil +} + +func (x *SubAchievement) GetAdditionalProperties() map[string]string { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +func (x *SubAchievement) GetAutoClaim() bool { + if x != nil { + return x.AutoClaim + } + return false +} + +func (x *SubAchievement) GetAutoReset() bool { + if x != nil { + return x.AutoReset + } + return false +} + +// An achievement which is a numeric task which can be unlocked and has an optional reward. +type Achievement struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The category to group the achievement together with others. + Category string `protobuf:"bytes,1,opt,name=category,proto3" json:"category,omitempty"` + // The UNIX timestamp for when the achievement reward was claimed, or zero if unclaimed. + ClaimTimeSec int64 `protobuf:"varint,2,opt,name=claim_time_sec,json=claimTimeSec,proto3" json:"claim_time_sec,omitempty"` + // The UNIX timestamp for when the achievement total reward was claimed, or zero if unclaimed. + TotalClaimTimeSec int64 `protobuf:"varint,3,opt,name=total_claim_time_sec,json=totalClaimTimeSec,proto3" json:"total_claim_time_sec,omitempty"` + // The count of the achievement. + Count int64 `protobuf:"varint,4,opt,name=count,proto3" json:"count,omitempty"` + // The UNIX timestamp for the current server time. + CurrentTimeSec int64 `protobuf:"varint,5,opt,name=current_time_sec,json=currentTimeSec,proto3" json:"current_time_sec,omitempty"` + // A description of the achievement. May be an i18n code. + Description string `protobuf:"bytes,6,opt,name=description,proto3" json:"description,omitempty"` + // The UNIX timestamp when this achievement will expire. This may be before its next reset. A zero means it does not expire. + ExpireTimeSec int64 `protobuf:"varint,7,opt,name=expire_time_sec,json=expireTimeSec,proto3" json:"expire_time_sec,omitempty"` + // The ID of the achievement. + Id string `protobuf:"bytes,8,opt,name=id,proto3" json:"id,omitempty"` + // The maximum count of the achievement. + MaxCount int64 `protobuf:"varint,9,opt,name=max_count,json=maxCount,proto3" json:"max_count,omitempty"` + // The name of the achievement. May be an i18n code. + Name string `protobuf:"bytes,10,opt,name=name,proto3" json:"name,omitempty"` + // The IDs which are a precondition on the progress to be made on this achievement. + PreconditionIds []string `protobuf:"bytes,11,rep,name=precondition_ids,json=preconditionIds,proto3" json:"precondition_ids,omitempty"` + // The UNIX timestamp when this achievement will reset. + ResetTimeSec int64 `protobuf:"varint,12,opt,name=reset_time_sec,json=resetTimeSec,proto3" json:"reset_time_sec,omitempty"` + // The available reward and its probabilities. + AvailableRewards *AvailableRewards `protobuf:"bytes,13,opt,name=available_rewards,json=availableRewards,proto3" json:"available_rewards,omitempty"` + // The outcome (rolled) reward for the achievement. + Reward *Reward `protobuf:"bytes,14,opt,name=reward,proto3" json:"reward,omitempty"` + // The available reward and its probabilities for the total completion of the achievement, if any. + AvailableTotalReward *AvailableRewards `protobuf:"bytes,15,opt,name=available_total_reward,json=availableTotalReward,proto3" json:"available_total_reward,omitempty"` + // The outcome (rolled) reward for the total completion of the achievement, if any. + TotalReward *Reward `protobuf:"bytes,16,opt,name=total_reward,json=totalReward,proto3" json:"total_reward,omitempty"` + // The sub-achievements for this achievement, if any. + SubAchievements map[string]*SubAchievement `protobuf:"bytes,17,rep,name=sub_achievements,json=subAchievements,proto3" json:"sub_achievements,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Additional metadata properties. + AdditionalProperties map[string]string `protobuf:"bytes,18,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Whether the achievement reward will be given automatically upon completion. + AutoClaim bool `protobuf:"varint,19,opt,name=auto_claim,json=autoClaim,proto3" json:"auto_claim,omitempty"` + // Whether the achievement total reward will be given automatically upon completing this and all sub-achievements. + AutoClaimTotal bool `protobuf:"varint,20,opt,name=auto_claim_total,json=autoClaimTotal,proto3" json:"auto_claim_total,omitempty"` + // Whether the achievement will reset after completion. + AutoReset bool `protobuf:"varint,21,opt,name=auto_reset,json=autoReset,proto3" json:"auto_reset,omitempty"` + // The UNIX timestamp when this achievement will allow updates. This may be before its next reset. A zero means it is immediately available. + StartTimeSec int64 `protobuf:"varint,22,opt,name=start_time_sec,json=startTimeSec,proto3" json:"start_time_sec,omitempty"` + // The UNIX timestamp when this achievement will allow updates. This may be before its next reset. A zero means it does not end. + EndTimeSec int64 `protobuf:"varint,23,opt,name=end_time_sec,json=endTimeSec,proto3" json:"end_time_sec,omitempty"` +} + +func (x *Achievement) Reset() { + *x = Achievement{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[180] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Achievement) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Achievement) ProtoMessage() {} + +func (x *Achievement) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[180] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Achievement.ProtoReflect.Descriptor instead. +func (*Achievement) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{180} +} + +func (x *Achievement) GetCategory() string { + if x != nil { + return x.Category + } + return "" +} + +func (x *Achievement) GetClaimTimeSec() int64 { + if x != nil { + return x.ClaimTimeSec + } + return 0 +} + +func (x *Achievement) GetTotalClaimTimeSec() int64 { + if x != nil { + return x.TotalClaimTimeSec + } + return 0 +} + +func (x *Achievement) GetCount() int64 { + if x != nil { + return x.Count + } + return 0 +} + +func (x *Achievement) GetCurrentTimeSec() int64 { + if x != nil { + return x.CurrentTimeSec + } + return 0 +} + +func (x *Achievement) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Achievement) GetExpireTimeSec() int64 { + if x != nil { + return x.ExpireTimeSec + } + return 0 +} + +func (x *Achievement) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Achievement) GetMaxCount() int64 { + if x != nil { + return x.MaxCount + } + return 0 +} + +func (x *Achievement) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Achievement) GetPreconditionIds() []string { + if x != nil { + return x.PreconditionIds + } + return nil +} + +func (x *Achievement) GetResetTimeSec() int64 { + if x != nil { + return x.ResetTimeSec + } + return 0 +} + +func (x *Achievement) GetAvailableRewards() *AvailableRewards { + if x != nil { + return x.AvailableRewards + } + return nil +} + +func (x *Achievement) GetReward() *Reward { + if x != nil { + return x.Reward + } + return nil +} + +func (x *Achievement) GetAvailableTotalReward() *AvailableRewards { + if x != nil { + return x.AvailableTotalReward + } + return nil +} + +func (x *Achievement) GetTotalReward() *Reward { + if x != nil { + return x.TotalReward + } + return nil +} + +func (x *Achievement) GetSubAchievements() map[string]*SubAchievement { + if x != nil { + return x.SubAchievements + } + return nil +} + +func (x *Achievement) GetAdditionalProperties() map[string]string { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +func (x *Achievement) GetAutoClaim() bool { + if x != nil { + return x.AutoClaim + } + return false +} + +func (x *Achievement) GetAutoClaimTotal() bool { + if x != nil { + return x.AutoClaimTotal + } + return false +} + +func (x *Achievement) GetAutoReset() bool { + if x != nil { + return x.AutoReset + } + return false +} + +func (x *Achievement) GetStartTimeSec() int64 { + if x != nil { + return x.StartTimeSec + } + return 0 +} + +func (x *Achievement) GetEndTimeSec() int64 { + if x != nil { + return x.EndTimeSec + } + return 0 +} + +// The achievements returned by the server. +type AchievementList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The one off achievements which can be progressed or are unlocked by the user alongside all on the server. + Achievements map[string]*Achievement `protobuf:"bytes,1,rep,name=achievements,proto3" json:"achievements,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // The repeat achievements which can be progressed or are unlocked by the user alongside all on the server. + RepeatAchievements map[string]*Achievement `protobuf:"bytes,2,rep,name=repeat_achievements,json=repeatAchievements,proto3" json:"repeat_achievements,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *AchievementList) Reset() { + *x = AchievementList{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[181] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AchievementList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AchievementList) ProtoMessage() {} + +func (x *AchievementList) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[181] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AchievementList.ProtoReflect.Descriptor instead. +func (*AchievementList) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{181} +} + +func (x *AchievementList) GetAchievements() map[string]*Achievement { + if x != nil { + return x.Achievements + } + return nil +} + +func (x *AchievementList) GetRepeatAchievements() map[string]*Achievement { + if x != nil { + return x.RepeatAchievements + } + return nil +} + +// Claim rewards with one or more achievement on the server. +type AchievementsClaimRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The set of achievement IDs to claim. + Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` + // Whether or not to claim the total reward as well, if available. + ClaimTotalReward bool `protobuf:"varint,2,opt,name=claim_total_reward,json=claimTotalReward,proto3" json:"claim_total_reward,omitempty"` +} + +func (x *AchievementsClaimRequest) Reset() { + *x = AchievementsClaimRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[182] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AchievementsClaimRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AchievementsClaimRequest) ProtoMessage() {} + +func (x *AchievementsClaimRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[182] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AchievementsClaimRequest.ProtoReflect.Descriptor instead. +func (*AchievementsClaimRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{182} +} + +func (x *AchievementsClaimRequest) GetIds() []string { + if x != nil { + return x.Ids + } + return nil +} + +func (x *AchievementsClaimRequest) GetClaimTotalReward() bool { + if x != nil { + return x.ClaimTotalReward + } + return false +} + +// Get all achievements for the user alongside all on the server. +type AchievementsGetRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *AchievementsGetRequest) Reset() { + *x = AchievementsGetRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[183] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AchievementsGetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AchievementsGetRequest) ProtoMessage() {} + +func (x *AchievementsGetRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[183] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AchievementsGetRequest.ProtoReflect.Descriptor instead. +func (*AchievementsGetRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{183} +} + +// A response when an achievements update is acknowledged by the server. +type AchievementsUpdateAck struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The one off achievements which can be progressed or are unlocked by the user. + Achievements map[string]*Achievement `protobuf:"bytes,1,rep,name=achievements,proto3" json:"achievements,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // The repeat achievements which can be progressed or are unlocked by the user. + RepeatAchievements map[string]*Achievement `protobuf:"bytes,2,rep,name=repeat_achievements,json=repeatAchievements,proto3" json:"repeat_achievements,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *AchievementsUpdateAck) Reset() { + *x = AchievementsUpdateAck{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[184] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AchievementsUpdateAck) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AchievementsUpdateAck) ProtoMessage() {} + +func (x *AchievementsUpdateAck) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[184] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AchievementsUpdateAck.ProtoReflect.Descriptor instead. +func (*AchievementsUpdateAck) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{184} +} + +func (x *AchievementsUpdateAck) GetAchievements() map[string]*Achievement { + if x != nil { + return x.Achievements + } + return nil +} + +func (x *AchievementsUpdateAck) GetRepeatAchievements() map[string]*Achievement { + if x != nil { + return x.RepeatAchievements + } + return nil +} + +// Update progress on one or more achievements on the server. +type AchievementsUpdateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The set of achievement IDs to progress. + Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` + // The amount of progress to increment on the achievements. + Amount int64 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"` + // Achievements with different amounts. + Achievements map[string]int64 `protobuf:"bytes,3,rep,name=achievements,proto3" json:"achievements,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *AchievementsUpdateRequest) Reset() { + *x = AchievementsUpdateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[185] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AchievementsUpdateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AchievementsUpdateRequest) ProtoMessage() {} + +func (x *AchievementsUpdateRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[185] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AchievementsUpdateRequest.ProtoReflect.Descriptor instead. +func (*AchievementsUpdateRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{185} +} + +func (x *AchievementsUpdateRequest) GetIds() []string { + if x != nil { + return x.Ids + } + return nil +} + +func (x *AchievementsUpdateRequest) GetAmount() int64 { + if x != nil { + return x.Amount + } + return 0 +} + +func (x *AchievementsUpdateRequest) GetAchievements() map[string]int64 { + if x != nil { + return x.Achievements + } + return nil +} + +// Represents an available reward based on the progress of a streak. +type StreakAvailableReward struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Minimum streak progress count required for this reward, inclusive. + CountMin int64 `protobuf:"varint,1,opt,name=count_min,json=countMin,proto3" json:"count_min,omitempty"` + // Maximum streak progress count required for this reward, inclusive. + CountMax int64 `protobuf:"varint,2,opt,name=count_max,json=countMax,proto3" json:"count_max,omitempty"` + // Available reward contents. + Reward *AvailableRewards `protobuf:"bytes,3,opt,name=reward,proto3" json:"reward,omitempty"` + // Whether this reward can be claimed at each count between count_min and count_max, both inclusive. + Repeatable bool `protobuf:"varint,4,opt,name=repeatable,proto3" json:"repeatable,omitempty"` +} + +func (x *StreakAvailableReward) Reset() { + *x = StreakAvailableReward{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[186] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreakAvailableReward) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreakAvailableReward) ProtoMessage() {} + +func (x *StreakAvailableReward) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[186] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreakAvailableReward.ProtoReflect.Descriptor instead. +func (*StreakAvailableReward) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{186} +} + +func (x *StreakAvailableReward) GetCountMin() int64 { + if x != nil { + return x.CountMin + } + return 0 +} + +func (x *StreakAvailableReward) GetCountMax() int64 { + if x != nil { + return x.CountMax + } + return 0 +} + +func (x *StreakAvailableReward) GetReward() *AvailableRewards { + if x != nil { + return x.Reward + } + return nil +} + +func (x *StreakAvailableReward) GetRepeatable() bool { + if x != nil { + return x.Repeatable + } + return false +} + +// A single claimed streak reward. +type StreakReward struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Minimum streak progress count required for this reward, inclusive. + CountMin int64 `protobuf:"varint,1,opt,name=count_min,json=countMin,proto3" json:"count_min,omitempty"` + // Maximum streak progress count required for this reward, inclusive. + CountMax int64 `protobuf:"varint,2,opt,name=count_max,json=countMax,proto3" json:"count_max,omitempty"` + // Reward that was actually granted. + Reward *Reward `protobuf:"bytes,3,opt,name=reward,proto3" json:"reward,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when this reward was claimed. + ClaimTimeSec int64 `protobuf:"varint,4,opt,name=claim_time_sec,json=claimTimeSec,proto3" json:"claim_time_sec,omitempty"` + // Whether this reward can be claimed at each count between count_min and count_max, both inclusive. + Repeatable bool `protobuf:"varint,5,opt,name=repeatable,proto3" json:"repeatable,omitempty"` +} + +func (x *StreakReward) Reset() { + *x = StreakReward{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[187] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreakReward) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreakReward) ProtoMessage() {} + +func (x *StreakReward) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[187] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreakReward.ProtoReflect.Descriptor instead. +func (*StreakReward) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{187} +} + +func (x *StreakReward) GetCountMin() int64 { + if x != nil { + return x.CountMin + } + return 0 +} + +func (x *StreakReward) GetCountMax() int64 { + if x != nil { + return x.CountMax + } + return 0 +} + +func (x *StreakReward) GetReward() *Reward { + if x != nil { + return x.Reward + } + return nil +} + +func (x *StreakReward) GetClaimTimeSec() int64 { + if x != nil { + return x.ClaimTimeSec + } + return 0 +} + +func (x *StreakReward) GetRepeatable() bool { + if x != nil { + return x.Repeatable + } + return false +} + +// An individual streak, along with its status and progress if any. +type Streak struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Unique identifier. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Display name for this streak. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // A user-facing description for this streak. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // Current overall progress count. + Count int64 `protobuf:"varint,4,opt,name=count,proto3" json:"count,omitempty"` + // Maximum allowed overall progress count. + MaxCount int64 `protobuf:"varint,5,opt,name=max_count,json=maxCount,proto3" json:"max_count,omitempty"` + // Progress count submitted during this reset. + CountCurrentReset int64 `protobuf:"varint,6,opt,name=count_current_reset,json=countCurrentReset,proto3" json:"count_current_reset,omitempty"` + // Maximum progress count allowed during any single reset. + MaxCountCurrentReset int64 `protobuf:"varint,7,opt,name=max_count_current_reset,json=maxCountCurrentReset,proto3" json:"max_count_current_reset,omitempty"` + // How much overall count is lost per idle reset. + IdleCountDecayReset int64 `protobuf:"varint,8,opt,name=idle_count_decay_reset,json=idleCountDecayReset,proto3" json:"idle_count_decay_reset,omitempty"` + // How much overall count can be lost total in any contiguous idle period. + MaxIdleCountDecay int64 `protobuf:"varint,9,opt,name=max_idle_count_decay,json=maxIdleCountDecay,proto3" json:"max_idle_count_decay,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the streak's last reset period was. + PrevResetTimeSec int64 `protobuf:"varint,10,opt,name=prev_reset_time_sec,json=prevResetTimeSec,proto3" json:"prev_reset_time_sec,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the streak's next reset period is. + ResetTimeSec int64 `protobuf:"varint,11,opt,name=reset_time_sec,json=resetTimeSec,proto3" json:"reset_time_sec,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the streak was first registered for this user. + CreateTimeSec int64 `protobuf:"varint,12,opt,name=create_time_sec,json=createTimeSec,proto3" json:"create_time_sec,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the streak was last updated. + UpdateTimeSec int64 `protobuf:"varint,13,opt,name=update_time_sec,json=updateTimeSec,proto3" json:"update_time_sec,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the streak was last claimed. + ClaimTimeSec int64 `protobuf:"varint,14,opt,name=claim_time_sec,json=claimTimeSec,proto3" json:"claim_time_sec,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the streak becomes available for use. + StartTimeSec int64 `protobuf:"varint,15,opt,name=start_time_sec,json=startTimeSec,proto3" json:"start_time_sec,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the streak is no longer available for use. + EndTimeSec int64 `protobuf:"varint,16,opt,name=end_time_sec,json=endTimeSec,proto3" json:"end_time_sec,omitempty"` + // All rewards configured for this streak. + Rewards []*StreakAvailableReward `protobuf:"bytes,17,rep,name=rewards,proto3" json:"rewards,omitempty"` + // Rewards currently available to claim for this streak. + AvailableRewards []*StreakAvailableReward `protobuf:"bytes,18,rep,name=available_rewards,json=availableRewards,proto3" json:"available_rewards,omitempty"` + // Claimed rewards. + ClaimedRewards []*StreakReward `protobuf:"bytes,19,rep,name=claimed_rewards,json=claimedRewards,proto3" json:"claimed_rewards,omitempty"` + // Flag indicating if this streak can currently be claimed to obtain some rewards. + CanClaim bool `protobuf:"varint,20,opt,name=can_claim,json=canClaim,proto3" json:"can_claim,omitempty"` + // Flag indicating if submitting a count update is allowed. + CanUpdate bool `protobuf:"varint,21,opt,name=can_update,json=canUpdate,proto3" json:"can_update,omitempty"` + // Flag indicating if resetting the streak is allowed. + CanReset bool `protobuf:"varint,22,opt,name=can_reset,json=canReset,proto3" json:"can_reset,omitempty"` + // Last count that was claimed. + ClaimCount int64 `protobuf:"varint,23,opt,name=claim_count,json=claimCount,proto3" json:"claim_count,omitempty"` +} + +func (x *Streak) Reset() { + *x = Streak{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[188] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Streak) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Streak) ProtoMessage() {} + +func (x *Streak) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[188] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Streak.ProtoReflect.Descriptor instead. +func (*Streak) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{188} +} + +func (x *Streak) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Streak) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Streak) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Streak) GetCount() int64 { + if x != nil { + return x.Count + } + return 0 +} + +func (x *Streak) GetMaxCount() int64 { + if x != nil { + return x.MaxCount + } + return 0 +} + +func (x *Streak) GetCountCurrentReset() int64 { + if x != nil { + return x.CountCurrentReset + } + return 0 +} + +func (x *Streak) GetMaxCountCurrentReset() int64 { + if x != nil { + return x.MaxCountCurrentReset + } + return 0 +} + +func (x *Streak) GetIdleCountDecayReset() int64 { + if x != nil { + return x.IdleCountDecayReset + } + return 0 +} + +func (x *Streak) GetMaxIdleCountDecay() int64 { + if x != nil { + return x.MaxIdleCountDecay + } + return 0 +} + +func (x *Streak) GetPrevResetTimeSec() int64 { + if x != nil { + return x.PrevResetTimeSec + } + return 0 +} + +func (x *Streak) GetResetTimeSec() int64 { + if x != nil { + return x.ResetTimeSec + } + return 0 +} + +func (x *Streak) GetCreateTimeSec() int64 { + if x != nil { + return x.CreateTimeSec + } + return 0 +} + +func (x *Streak) GetUpdateTimeSec() int64 { + if x != nil { + return x.UpdateTimeSec + } + return 0 +} + +func (x *Streak) GetClaimTimeSec() int64 { + if x != nil { + return x.ClaimTimeSec + } + return 0 +} + +func (x *Streak) GetStartTimeSec() int64 { + if x != nil { + return x.StartTimeSec + } + return 0 +} + +func (x *Streak) GetEndTimeSec() int64 { + if x != nil { + return x.EndTimeSec + } + return 0 +} + +func (x *Streak) GetRewards() []*StreakAvailableReward { + if x != nil { + return x.Rewards + } + return nil +} + +func (x *Streak) GetAvailableRewards() []*StreakAvailableReward { + if x != nil { + return x.AvailableRewards + } + return nil +} + +func (x *Streak) GetClaimedRewards() []*StreakReward { + if x != nil { + return x.ClaimedRewards + } + return nil +} + +func (x *Streak) GetCanClaim() bool { + if x != nil { + return x.CanClaim + } + return false +} + +func (x *Streak) GetCanUpdate() bool { + if x != nil { + return x.CanUpdate + } + return false +} + +func (x *Streak) GetCanReset() bool { + if x != nil { + return x.CanReset + } + return false +} + +func (x *Streak) GetClaimCount() int64 { + if x != nil { + return x.ClaimCount + } + return 0 +} + +// A list of all streaks for a given user. +type StreaksList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // All available streaks for the caller. + Streaks map[string]*Streak `protobuf:"bytes,1,rep,name=streaks,proto3" json:"streaks,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *StreaksList) Reset() { + *x = StreaksList{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[189] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreaksList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreaksList) ProtoMessage() {} + +func (x *StreaksList) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[189] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreaksList.ProtoReflect.Descriptor instead. +func (*StreaksList) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{189} +} + +func (x *StreaksList) GetStreaks() map[string]*Streak { + if x != nil { + return x.Streaks + } + return nil +} + +// Request to update one or more streaks with new progress. +type StreaksUpdateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Update one or more streaks by identifier. + Updates map[string]int64 `protobuf:"bytes,1,rep,name=updates,proto3" json:"updates,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *StreaksUpdateRequest) Reset() { + *x = StreaksUpdateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[190] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreaksUpdateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreaksUpdateRequest) ProtoMessage() {} + +func (x *StreaksUpdateRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[190] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreaksUpdateRequest.ProtoReflect.Descriptor instead. +func (*StreaksUpdateRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{190} +} + +func (x *StreaksUpdateRequest) GetUpdates() map[string]int64 { + if x != nil { + return x.Updates + } + return nil +} + +// Request to claim rewards for one or more streaks. +type StreaksClaimRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // List of streak identifiers to claim. + Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` +} + +func (x *StreaksClaimRequest) Reset() { + *x = StreaksClaimRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[191] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreaksClaimRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreaksClaimRequest) ProtoMessage() {} + +func (x *StreaksClaimRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[191] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreaksClaimRequest.ProtoReflect.Descriptor instead. +func (*StreaksClaimRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{191} +} + +func (x *StreaksClaimRequest) GetIds() []string { + if x != nil { + return x.Ids + } + return nil +} + +// Request to fully reset the progress of one or more streaks. +type StreaksResetRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // List of streak identifiers to reset. + Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` +} + +func (x *StreaksResetRequest) Reset() { + *x = StreaksResetRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[192] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreaksResetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreaksResetRequest) ProtoMessage() {} + +func (x *StreaksResetRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[192] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreaksResetRequest.ProtoReflect.Descriptor instead. +func (*StreaksResetRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{192} +} + +func (x *StreaksResetRequest) GetIds() []string { + if x != nil { + return x.Ids + } + return nil +} + +// A reward mailbox entry and associated reward information. +type RewardMailboxEntry struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Unique identifier for this entry. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Reward associated with this entry. + Reward *Reward `protobuf:"bytes,2,opt,name=reward,proto3" json:"reward,omitempty"` + // Create time in UTC seconds. + CreateTimeSec int64 `protobuf:"varint,3,opt,name=create_time_sec,json=createTimeSec,proto3" json:"create_time_sec,omitempty"` + // Update time in UTC seconds. + UpdateTimeSec int64 `protobuf:"varint,4,opt,name=update_time_sec,json=updateTimeSec,proto3" json:"update_time_sec,omitempty"` + // Expiry time in UTC seconds. + ExpiryTimeSec int64 `protobuf:"varint,5,opt,name=expiry_time_sec,json=expiryTimeSec,proto3" json:"expiry_time_sec,omitempty"` + // Claim time in UTC seconds. + ClaimTimeSec int64 `protobuf:"varint,6,opt,name=claim_time_sec,json=claimTimeSec,proto3" json:"claim_time_sec,omitempty"` + // Indicator if the entry reward can be claimed. + CanClaim bool `protobuf:"varint,7,opt,name=can_claim,json=canClaim,proto3" json:"can_claim,omitempty"` +} + +func (x *RewardMailboxEntry) Reset() { + *x = RewardMailboxEntry{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[193] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RewardMailboxEntry) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RewardMailboxEntry) ProtoMessage() {} + +func (x *RewardMailboxEntry) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[193] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RewardMailboxEntry.ProtoReflect.Descriptor instead. +func (*RewardMailboxEntry) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{193} +} + +func (x *RewardMailboxEntry) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *RewardMailboxEntry) GetReward() *Reward { + if x != nil { + return x.Reward + } + return nil +} + +func (x *RewardMailboxEntry) GetCreateTimeSec() int64 { + if x != nil { + return x.CreateTimeSec + } + return 0 +} + +func (x *RewardMailboxEntry) GetUpdateTimeSec() int64 { + if x != nil { + return x.UpdateTimeSec + } + return 0 +} + +func (x *RewardMailboxEntry) GetExpiryTimeSec() int64 { + if x != nil { + return x.ExpiryTimeSec + } + return 0 +} + +func (x *RewardMailboxEntry) GetClaimTimeSec() int64 { + if x != nil { + return x.ClaimTimeSec + } + return 0 +} + +func (x *RewardMailboxEntry) GetCanClaim() bool { + if x != nil { + return x.CanClaim + } + return false +} + +// A list of reward mailbox entries, with pagination information if applicable. +type RewardMailboxList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A list of reward mailbox entries for this reward mailbox. + Entries []*RewardMailboxEntry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"` + // Pagination cursor to fetch more results, or empty if there are no more. + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *RewardMailboxList) Reset() { + *x = RewardMailboxList{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[194] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RewardMailboxList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RewardMailboxList) ProtoMessage() {} + +func (x *RewardMailboxList) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[194] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RewardMailboxList.ProtoReflect.Descriptor instead. +func (*RewardMailboxList) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{194} +} + +func (x *RewardMailboxList) GetEntries() []*RewardMailboxEntry { + if x != nil { + return x.Entries + } + return nil +} + +func (x *RewardMailboxList) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +// Request to list reward mailbox entries. +type RewardMailboxListRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Maximum number of reward mailbox entries to return. + Limit int64 `protobuf:"varint,1,opt,name=limit,proto3" json:"limit,omitempty"` + // Cursor to paginate from, if any. + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *RewardMailboxListRequest) Reset() { + *x = RewardMailboxListRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[195] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RewardMailboxListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RewardMailboxListRequest) ProtoMessage() {} + +func (x *RewardMailboxListRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[195] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RewardMailboxListRequest.ProtoReflect.Descriptor instead. +func (*RewardMailboxListRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{195} +} + +func (x *RewardMailboxListRequest) GetLimit() int64 { + if x != nil { + return x.Limit + } + return 0 +} + +func (x *RewardMailboxListRequest) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +// Request to claim a reward mailbox entry, and optionally remove it at the same time. +type RewardMailboxClaimRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Identifier for the reward mailbox entry to claim. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // If the entry should be deleted as part of the claim. + Delete bool `protobuf:"varint,2,opt,name=delete,proto3" json:"delete,omitempty"` +} + +func (x *RewardMailboxClaimRequest) Reset() { + *x = RewardMailboxClaimRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[196] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RewardMailboxClaimRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RewardMailboxClaimRequest) ProtoMessage() {} + +func (x *RewardMailboxClaimRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[196] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RewardMailboxClaimRequest.ProtoReflect.Descriptor instead. +func (*RewardMailboxClaimRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{196} +} + +func (x *RewardMailboxClaimRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *RewardMailboxClaimRequest) GetDelete() bool { + if x != nil { + return x.Delete + } + return false +} + +// Request to delete a reward mailbox entry, even if it is not yet claimed. +type RewardMailboxDeleteRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Identifiers for the reward mailbox entries to delete. + Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` +} + +func (x *RewardMailboxDeleteRequest) Reset() { + *x = RewardMailboxDeleteRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[197] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RewardMailboxDeleteRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RewardMailboxDeleteRequest) ProtoMessage() {} + +func (x *RewardMailboxDeleteRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[197] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RewardMailboxDeleteRequest.ProtoReflect.Descriptor instead. +func (*RewardMailboxDeleteRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{197} +} + +func (x *RewardMailboxDeleteRequest) GetIds() []string { + if x != nil { + return x.Ids + } + return nil +} + +// Represents a request to retrieve available team store items. +type TeamStoreListRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier for which to list available team store items. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *TeamStoreListRequest) Reset() { + *x = TeamStoreListRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[198] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamStoreListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamStoreListRequest) ProtoMessage() {} + +func (x *TeamStoreListRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[198] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamStoreListRequest.ProtoReflect.Descriptor instead. +func (*TeamStoreListRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{198} +} + +func (x *TeamStoreListRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +// The cost(s) associated with a team store item. +type TeamStoreItemCost struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The virtual currencies, if any. + Currencies map[string]int64 `protobuf:"bytes,1,rep,name=currencies,proto3" json:"currencies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *TeamStoreItemCost) Reset() { + *x = TeamStoreItemCost{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[199] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamStoreItemCost) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamStoreItemCost) ProtoMessage() {} + +func (x *TeamStoreItemCost) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[199] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamStoreItemCost.ProtoReflect.Descriptor instead. +func (*TeamStoreItemCost) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{199} +} + +func (x *TeamStoreItemCost) GetCurrencies() map[string]int64 { + if x != nil { + return x.Currencies + } + return nil +} + +// Represents an individual available team store item. +type TeamStoreItem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The category to group the item together with others. + Category string `protobuf:"bytes,1,opt,name=category,proto3" json:"category,omitempty"` + // The cost of the item. + Cost *TeamStoreItemCost `protobuf:"bytes,2,opt,name=cost,proto3" json:"cost,omitempty"` + // A description of the item. May be an i18n code. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // The ID of the item. + Id string `protobuf:"bytes,4,opt,name=id,proto3" json:"id,omitempty"` + // The name of the item. May be an i18n code. + Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` + // The available rewards in this store item. + AvailableRewards *AvailableRewards `protobuf:"bytes,6,opt,name=available_rewards,json=availableRewards,proto3" json:"available_rewards,omitempty"` + // Additional metadata properties. + AdditionalProperties map[string]string `protobuf:"bytes,7,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // The item is visible, but if true it's unavailable to purchase by the player. + Unavailable bool `protobuf:"varint,8,opt,name=unavailable,proto3" json:"unavailable,omitempty"` +} + +func (x *TeamStoreItem) Reset() { + *x = TeamStoreItem{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[200] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamStoreItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamStoreItem) ProtoMessage() {} + +func (x *TeamStoreItem) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[200] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamStoreItem.ProtoReflect.Descriptor instead. +func (*TeamStoreItem) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{200} +} + +func (x *TeamStoreItem) GetCategory() string { + if x != nil { + return x.Category + } + return "" +} + +func (x *TeamStoreItem) GetCost() *TeamStoreItemCost { + if x != nil { + return x.Cost + } + return nil +} + +func (x *TeamStoreItem) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *TeamStoreItem) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamStoreItem) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *TeamStoreItem) GetAvailableRewards() *AvailableRewards { + if x != nil { + return x.AvailableRewards + } + return nil +} + +func (x *TeamStoreItem) GetAdditionalProperties() map[string]string { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +func (x *TeamStoreItem) GetUnavailable() bool { + if x != nil { + return x.Unavailable + } + return false +} + +// A list of team store items available for purchase. +type TeamStore struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The list of store items. + StoreItems []*TeamStoreItem `protobuf:"bytes,1,rep,name=store_items,json=storeItems,proto3" json:"store_items,omitempty"` + // The list of active reward modifiers. + ActiveRewardModifiers []*ActiveRewardModifier `protobuf:"bytes,4,rep,name=active_reward_modifiers,json=activeRewardModifiers,proto3" json:"active_reward_modifiers,omitempty"` + // Current server time. + CurrentTimeSec int64 `protobuf:"varint,5,opt,name=current_time_sec,json=currentTimeSec,proto3" json:"current_time_sec,omitempty"` +} + +func (x *TeamStore) Reset() { + *x = TeamStore{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[201] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamStore) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamStore) ProtoMessage() {} + +func (x *TeamStore) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[201] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamStore.ProtoReflect.Descriptor instead. +func (*TeamStore) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{201} +} + +func (x *TeamStore) GetStoreItems() []*TeamStoreItem { + if x != nil { + return x.StoreItems + } + return nil +} + +func (x *TeamStore) GetActiveRewardModifiers() []*ActiveRewardModifier { + if x != nil { + return x.ActiveRewardModifiers + } + return nil +} + +func (x *TeamStore) GetCurrentTimeSec() int64 { + if x != nil { + return x.CurrentTimeSec + } + return 0 +} + +// Request to purchase a particular team store item. +type TeamStorePurchaseRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier for which to purchase a team store item. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // A store item's ID. + ItemId string `protobuf:"bytes,2,opt,name=item_id,json=itemId,proto3" json:"item_id,omitempty"` +} + +func (x *TeamStorePurchaseRequest) Reset() { + *x = TeamStorePurchaseRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[202] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamStorePurchaseRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamStorePurchaseRequest) ProtoMessage() {} + +func (x *TeamStorePurchaseRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[202] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamStorePurchaseRequest.ProtoReflect.Descriptor instead. +func (*TeamStorePurchaseRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{202} +} + +func (x *TeamStorePurchaseRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamStorePurchaseRequest) GetItemId() string { + if x != nil { + return x.ItemId + } + return "" +} + +// Response from purchasing currencies and/or items. +// Contains updated wallet and inventory data, if changed. +// Contains reward granted, if any. +type TeamStorePurchaseAck struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Updated wallet data, if changed. + Wallet map[string]int64 `protobuf:"bytes,1,rep,name=wallet,proto3" json:"wallet,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Update inventory data, if changed. + Inventory *Inventory `protobuf:"bytes,2,opt,name=inventory,proto3" json:"inventory,omitempty"` + // Reward, if any. + Reward *Reward `protobuf:"bytes,3,opt,name=reward,proto3" json:"reward,omitempty"` +} + +func (x *TeamStorePurchaseAck) Reset() { + *x = TeamStorePurchaseAck{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[203] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamStorePurchaseAck) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamStorePurchaseAck) ProtoMessage() {} + +func (x *TeamStorePurchaseAck) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[203] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamStorePurchaseAck.ProtoReflect.Descriptor instead. +func (*TeamStorePurchaseAck) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{203} +} + +func (x *TeamStorePurchaseAck) GetWallet() map[string]int64 { + if x != nil { + return x.Wallet + } + return nil +} + +func (x *TeamStorePurchaseAck) GetInventory() *Inventory { + if x != nil { + return x.Inventory + } + return nil +} + +func (x *TeamStorePurchaseAck) GetReward() *Reward { + if x != nil { + return x.Reward + } + return nil +} + +// Request to fetch a team's wallet. +type TeamWalletGetRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The team identifier to fetch a wallet for. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *TeamWalletGetRequest) Reset() { + *x = TeamWalletGetRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[204] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamWalletGetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamWalletGetRequest) ProtoMessage() {} + +func (x *TeamWalletGetRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[204] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamWalletGetRequest.ProtoReflect.Descriptor instead. +func (*TeamWalletGetRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{204} +} + +func (x *TeamWalletGetRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +// Request to update a team's wallet. +type TeamWalletGrantRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The team identifier to update the wallet for. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Currencies to grant. + Currencies map[string]int64 `protobuf:"bytes,2,rep,name=currencies,proto3" json:"currencies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *TeamWalletGrantRequest) Reset() { + *x = TeamWalletGrantRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[205] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamWalletGrantRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamWalletGrantRequest) ProtoMessage() {} + +func (x *TeamWalletGrantRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[205] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamWalletGrantRequest.ProtoReflect.Descriptor instead. +func (*TeamWalletGrantRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{205} +} + +func (x *TeamWalletGrantRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamWalletGrantRequest) GetCurrencies() map[string]int64 { + if x != nil { + return x.Currencies + } + return nil +} + +// Represents the contents of a team's wallet. +type TeamWallet struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier this wallet belongs to. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Currencies currently in the team's wallet. + Currencies map[string]int64 `protobuf:"bytes,2,rep,name=currencies,proto3" json:"currencies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Last time in UTC seconds when the wallet was updated. + UpdateTimeSec int64 `protobuf:"varint,3,opt,name=update_time_sec,json=updateTimeSec,proto3" json:"update_time_sec,omitempty"` +} + +func (x *TeamWallet) Reset() { + *x = TeamWallet{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[206] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamWallet) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamWallet) ProtoMessage() {} + +func (x *TeamWallet) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[206] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamWallet.ProtoReflect.Descriptor instead. +func (*TeamWallet) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{206} +} + +func (x *TeamWallet) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamWallet) GetCurrencies() map[string]int64 { + if x != nil { + return x.Currencies + } + return nil +} + +func (x *TeamWallet) GetUpdateTimeSec() int64 { + if x != nil { + return x.UpdateTimeSec + } + return 0 +} + +// Request to retrieve stats for specified team. +type TeamStatListRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier to fetch stats for. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *TeamStatListRequest) Reset() { + *x = TeamStatListRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[207] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamStatListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamStatListRequest) ProtoMessage() {} + +func (x *TeamStatListRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[207] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamStatListRequest.ProtoReflect.Descriptor instead. +func (*TeamStatListRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{207} +} + +func (x *TeamStatListRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +// Request an optionally batched stats update for a specified team. +type TeamStatUpdateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier for which to update stats. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Public stat updates. + Public []*StatUpdate `protobuf:"bytes,2,rep,name=public,proto3" json:"public,omitempty"` + // Private stat updates. + Private []*StatUpdate `protobuf:"bytes,3,rep,name=private,proto3" json:"private,omitempty"` +} + +func (x *TeamStatUpdateRequest) Reset() { + *x = TeamStatUpdateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[208] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamStatUpdateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamStatUpdateRequest) ProtoMessage() {} + +func (x *TeamStatUpdateRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[208] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamStatUpdateRequest.ProtoReflect.Descriptor instead. +func (*TeamStatUpdateRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{208} +} + +func (x *TeamStatUpdateRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamStatUpdateRequest) GetPublic() []*StatUpdate { + if x != nil { + return x.Public + } + return nil +} + +func (x *TeamStatUpdateRequest) GetPrivate() []*StatUpdate { + if x != nil { + return x.Private + } + return nil +} + +// Request inventory items in the team inventory. +type TeamInventoryListRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier for which to list inventory items. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The category for the items to filter for, or empty for all. + ItemCategory string `protobuf:"bytes,2,opt,name=item_category,json=itemCategory,proto3" json:"item_category,omitempty"` +} + +func (x *TeamInventoryListRequest) Reset() { + *x = TeamInventoryListRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[209] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamInventoryListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamInventoryListRequest) ProtoMessage() {} + +func (x *TeamInventoryListRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[209] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamInventoryListRequest.ProtoReflect.Descriptor instead. +func (*TeamInventoryListRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{209} +} + +func (x *TeamInventoryListRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamInventoryListRequest) GetItemCategory() string { + if x != nil { + return x.ItemCategory + } + return "" +} + +// Request to consume some amount of items from a team inventory. +type TeamInventoryConsumeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier for which to consume inventory items. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Item ID amounts to consume, if any. + Items map[string]int64 `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Whether or not to allow overconsumption. + Overconsume bool `protobuf:"varint,3,opt,name=overconsume,proto3" json:"overconsume,omitempty"` + // Instance ID amounts to consume, if any. + Instances map[string]int64 `protobuf:"bytes,4,rep,name=instances,proto3" json:"instances,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *TeamInventoryConsumeRequest) Reset() { + *x = TeamInventoryConsumeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[210] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamInventoryConsumeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamInventoryConsumeRequest) ProtoMessage() {} + +func (x *TeamInventoryConsumeRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[210] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamInventoryConsumeRequest.ProtoReflect.Descriptor instead. +func (*TeamInventoryConsumeRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{210} +} + +func (x *TeamInventoryConsumeRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamInventoryConsumeRequest) GetItems() map[string]int64 { + if x != nil { + return x.Items + } + return nil +} + +func (x *TeamInventoryConsumeRequest) GetOverconsume() bool { + if x != nil { + return x.Overconsume + } + return false +} + +func (x *TeamInventoryConsumeRequest) GetInstances() map[string]int64 { + if x != nil { + return x.Instances + } + return nil +} + +// Represents a request to grant items to a team. +type TeamInventoryGrantRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier for which to grant inventory items. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The items to grant. + Items map[string]int64 `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *TeamInventoryGrantRequest) Reset() { + *x = TeamInventoryGrantRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[211] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamInventoryGrantRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamInventoryGrantRequest) ProtoMessage() {} + +func (x *TeamInventoryGrantRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[211] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamInventoryGrantRequest.ProtoReflect.Descriptor instead. +func (*TeamInventoryGrantRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{211} +} + +func (x *TeamInventoryGrantRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamInventoryGrantRequest) GetItems() map[string]int64 { + if x != nil { + return x.Items + } + return nil +} + +// Represents a request to update properties of instanced items belonging to a team. +type TeamInventoryUpdateItemsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier for which to update inventory items. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The item updates to action, keyed by item instance ID. + ItemUpdates map[string]*InventoryUpdateItemProperties `protobuf:"bytes,2,rep,name=item_updates,json=itemUpdates,proto3" json:"item_updates,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *TeamInventoryUpdateItemsRequest) Reset() { + *x = TeamInventoryUpdateItemsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[212] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamInventoryUpdateItemsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamInventoryUpdateItemsRequest) ProtoMessage() {} + +func (x *TeamInventoryUpdateItemsRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[212] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamInventoryUpdateItemsRequest.ProtoReflect.Descriptor instead. +func (*TeamInventoryUpdateItemsRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{212} +} + +func (x *TeamInventoryUpdateItemsRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamInventoryUpdateItemsRequest) GetItemUpdates() map[string]*InventoryUpdateItemProperties { + if x != nil { + return x.ItemUpdates + } + return nil +} + +// Claim rewards with one or more team achievement on the server. +type TeamAchievementsClaimRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier for which to claim the specified achievements. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The set of team achievement IDs to claim. + AchievementIds []string `protobuf:"bytes,2,rep,name=achievement_ids,json=achievementIds,proto3" json:"achievement_ids,omitempty"` + // Whether or not to claim the total reward as well, if available. + ClaimTotalReward bool `protobuf:"varint,3,opt,name=claim_total_reward,json=claimTotalReward,proto3" json:"claim_total_reward,omitempty"` +} + +func (x *TeamAchievementsClaimRequest) Reset() { + *x = TeamAchievementsClaimRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[213] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamAchievementsClaimRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamAchievementsClaimRequest) ProtoMessage() {} + +func (x *TeamAchievementsClaimRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[213] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamAchievementsClaimRequest.ProtoReflect.Descriptor instead. +func (*TeamAchievementsClaimRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{213} +} + +func (x *TeamAchievementsClaimRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamAchievementsClaimRequest) GetAchievementIds() []string { + if x != nil { + return x.AchievementIds + } + return nil +} + +func (x *TeamAchievementsClaimRequest) GetClaimTotalReward() bool { + if x != nil { + return x.ClaimTotalReward + } + return false +} + +// Get achievements for a particular team. +type TeamAchievementsGetRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier for which to get achievement data. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *TeamAchievementsGetRequest) Reset() { + *x = TeamAchievementsGetRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[214] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamAchievementsGetRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamAchievementsGetRequest) ProtoMessage() {} + +func (x *TeamAchievementsGetRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[214] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamAchievementsGetRequest.ProtoReflect.Descriptor instead. +func (*TeamAchievementsGetRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{214} +} + +func (x *TeamAchievementsGetRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +// Update progress on one or more team achievements on the server. +type TeamAchievementsUpdateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier for which to update achievements. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The set of achievement IDs to progress. + AchievementIds []string `protobuf:"bytes,2,rep,name=achievement_ids,json=achievementIds,proto3" json:"achievement_ids,omitempty"` + // The amount of progress to increment on the achievements. + Amount int64 `protobuf:"varint,3,opt,name=amount,proto3" json:"amount,omitempty"` + // Achievements with different amounts. + Achievements map[string]int64 `protobuf:"bytes,4,rep,name=achievements,proto3" json:"achievements,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *TeamAchievementsUpdateRequest) Reset() { + *x = TeamAchievementsUpdateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[215] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamAchievementsUpdateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamAchievementsUpdateRequest) ProtoMessage() {} + +func (x *TeamAchievementsUpdateRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[215] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamAchievementsUpdateRequest.ProtoReflect.Descriptor instead. +func (*TeamAchievementsUpdateRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{215} +} + +func (x *TeamAchievementsUpdateRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamAchievementsUpdateRequest) GetAchievementIds() []string { + if x != nil { + return x.AchievementIds + } + return nil +} + +func (x *TeamAchievementsUpdateRequest) GetAmount() int64 { + if x != nil { + return x.Amount + } + return 0 +} + +func (x *TeamAchievementsUpdateRequest) GetAchievements() map[string]int64 { + if x != nil { + return x.Achievements + } + return nil +} + +// Retrieve available team event leaderboards. +type TeamEventLeaderboardList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier for which to list team event leaderboards. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Whether or not the response should include scores, defaults to false. + WithScores bool `protobuf:"varint,2,opt,name=with_scores,json=withScores,proto3" json:"with_scores,omitempty"` + // Optional filter of Event Leaderboard categories to list. If empty does not filter on category. + Categories []string `protobuf:"bytes,3,rep,name=categories,proto3" json:"categories,omitempty"` +} + +func (x *TeamEventLeaderboardList) Reset() { + *x = TeamEventLeaderboardList{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[216] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamEventLeaderboardList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamEventLeaderboardList) ProtoMessage() {} + +func (x *TeamEventLeaderboardList) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[216] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamEventLeaderboardList.ProtoReflect.Descriptor instead. +func (*TeamEventLeaderboardList) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{216} +} + +func (x *TeamEventLeaderboardList) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamEventLeaderboardList) GetWithScores() bool { + if x != nil { + return x.WithScores + } + return false +} + +func (x *TeamEventLeaderboardList) GetCategories() []string { + if x != nil { + return x.Categories + } + return nil +} + +// Find and retrieve a team event leaderboard by ID, automatically joining the event if necessary. +type TeamEventLeaderboardGet struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier for which to get the team event leaderboard. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Event leaderboard ID to get, and join if necessary/possible. + EventLeaderboardId string `protobuf:"bytes,2,opt,name=event_leaderboard_id,json=eventLeaderboardId,proto3" json:"event_leaderboard_id,omitempty"` +} + +func (x *TeamEventLeaderboardGet) Reset() { + *x = TeamEventLeaderboardGet{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[217] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamEventLeaderboardGet) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamEventLeaderboardGet) ProtoMessage() {} + +func (x *TeamEventLeaderboardGet) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[217] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamEventLeaderboardGet.ProtoReflect.Descriptor instead. +func (*TeamEventLeaderboardGet) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{217} +} + +func (x *TeamEventLeaderboardGet) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamEventLeaderboardGet) GetEventLeaderboardId() string { + if x != nil { + return x.EventLeaderboardId + } + return "" +} + +// Submit a score to a team event leaderboard. +type TeamEventLeaderboardUpdate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier for which to submit the update. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Event leaderboard ID. + EventLeaderboardId string `protobuf:"bytes,2,opt,name=event_leaderboard_id,json=eventLeaderboardId,proto3" json:"event_leaderboard_id,omitempty"` + // Score. + Score int64 `protobuf:"varint,3,opt,name=score,proto3" json:"score,omitempty"` + // Subscore. + Subscore int64 `protobuf:"varint,4,opt,name=subscore,proto3" json:"subscore,omitempty"` + // Metadata. + Metadata string `protobuf:"bytes,5,opt,name=metadata,proto3" json:"metadata,omitempty"` + // Update metadata only if score or subscore change. + ConditionalMetadataUpdate bool `protobuf:"varint,6,opt,name=conditional_metadata_update,json=conditionalMetadataUpdate,proto3" json:"conditional_metadata_update,omitempty"` +} + +func (x *TeamEventLeaderboardUpdate) Reset() { + *x = TeamEventLeaderboardUpdate{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[218] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamEventLeaderboardUpdate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamEventLeaderboardUpdate) ProtoMessage() {} + +func (x *TeamEventLeaderboardUpdate) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[218] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamEventLeaderboardUpdate.ProtoReflect.Descriptor instead. +func (*TeamEventLeaderboardUpdate) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{218} +} + +func (x *TeamEventLeaderboardUpdate) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamEventLeaderboardUpdate) GetEventLeaderboardId() string { + if x != nil { + return x.EventLeaderboardId + } + return "" +} + +func (x *TeamEventLeaderboardUpdate) GetScore() int64 { + if x != nil { + return x.Score + } + return 0 +} + +func (x *TeamEventLeaderboardUpdate) GetSubscore() int64 { + if x != nil { + return x.Subscore + } + return 0 +} + +func (x *TeamEventLeaderboardUpdate) GetMetadata() string { + if x != nil { + return x.Metadata + } + return "" +} + +func (x *TeamEventLeaderboardUpdate) GetConditionalMetadataUpdate() bool { + if x != nil { + return x.ConditionalMetadataUpdate + } + return false +} + +// Claim the available reward for a team event leaderboard by ID. +type TeamEventLeaderboardClaim struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier for which to attempt the claim. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Event leaderboard ID to claim. + EventLeaderboardId string `protobuf:"bytes,2,opt,name=event_leaderboard_id,json=eventLeaderboardId,proto3" json:"event_leaderboard_id,omitempty"` +} + +func (x *TeamEventLeaderboardClaim) Reset() { + *x = TeamEventLeaderboardClaim{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[219] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamEventLeaderboardClaim) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamEventLeaderboardClaim) ProtoMessage() {} + +func (x *TeamEventLeaderboardClaim) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[219] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamEventLeaderboardClaim.ProtoReflect.Descriptor instead. +func (*TeamEventLeaderboardClaim) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{219} +} + +func (x *TeamEventLeaderboardClaim) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamEventLeaderboardClaim) GetEventLeaderboardId() string { + if x != nil { + return x.EventLeaderboardId + } + return "" +} + +// Roll a new cohort for the specified team event leaderboard. +type TeamEventLeaderboardRoll struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier for which to roll a cohort. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Event leaderboard ID to roll. + EventLeaderboardId string `protobuf:"bytes,2,opt,name=event_leaderboard_id,json=eventLeaderboardId,proto3" json:"event_leaderboard_id,omitempty"` + // Metadata for the initial score write. + Metadata string `protobuf:"bytes,3,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *TeamEventLeaderboardRoll) Reset() { + *x = TeamEventLeaderboardRoll{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[220] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamEventLeaderboardRoll) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamEventLeaderboardRoll) ProtoMessage() {} + +func (x *TeamEventLeaderboardRoll) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[220] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamEventLeaderboardRoll.ProtoReflect.Descriptor instead. +func (*TeamEventLeaderboardRoll) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{220} +} + +func (x *TeamEventLeaderboardRoll) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamEventLeaderboardRoll) GetEventLeaderboardId() string { + if x != nil { + return x.EventLeaderboardId + } + return "" +} + +func (x *TeamEventLeaderboardRoll) GetMetadata() string { + if x != nil { + return x.Metadata + } + return "" +} + +// A single participant entry to a team event leaderboard. +type TeamEventLeaderboardScore struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier which owns this score. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Name. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // Avatar URL. + AvatarUrl string `protobuf:"bytes,3,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` + // Time when the user joined the event leaderboard. + CreateTimeSec int64 `protobuf:"varint,4,opt,name=create_time_sec,json=createTimeSec,proto3" json:"create_time_sec,omitempty"` + // Time when the user last submitted a score. + UpdateTimeSec int64 `protobuf:"varint,5,opt,name=update_time_sec,json=updateTimeSec,proto3" json:"update_time_sec,omitempty"` + // Rank within the event leaderboard. + Rank int64 `protobuf:"varint,6,opt,name=rank,proto3" json:"rank,omitempty"` + // Score. + Score int64 `protobuf:"varint,7,opt,name=score,proto3" json:"score,omitempty"` + // Subscore. + Subscore int64 `protobuf:"varint,8,opt,name=subscore,proto3" json:"subscore,omitempty"` + // Number of score submissions. + NumScores int64 `protobuf:"varint,9,opt,name=num_scores,json=numScores,proto3" json:"num_scores,omitempty"` + // Metadata. + Metadata string `protobuf:"bytes,10,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *TeamEventLeaderboardScore) Reset() { + *x = TeamEventLeaderboardScore{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[221] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamEventLeaderboardScore) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamEventLeaderboardScore) ProtoMessage() {} + +func (x *TeamEventLeaderboardScore) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[221] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamEventLeaderboardScore.ProtoReflect.Descriptor instead. +func (*TeamEventLeaderboardScore) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{221} +} + +func (x *TeamEventLeaderboardScore) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamEventLeaderboardScore) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *TeamEventLeaderboardScore) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +func (x *TeamEventLeaderboardScore) GetCreateTimeSec() int64 { + if x != nil { + return x.CreateTimeSec + } + return 0 +} + +func (x *TeamEventLeaderboardScore) GetUpdateTimeSec() int64 { + if x != nil { + return x.UpdateTimeSec + } + return 0 +} + +func (x *TeamEventLeaderboardScore) GetRank() int64 { + if x != nil { + return x.Rank + } + return 0 +} + +func (x *TeamEventLeaderboardScore) GetScore() int64 { + if x != nil { + return x.Score + } + return 0 +} + +func (x *TeamEventLeaderboardScore) GetSubscore() int64 { + if x != nil { + return x.Subscore + } + return 0 +} + +func (x *TeamEventLeaderboardScore) GetNumScores() int64 { + if x != nil { + return x.NumScores + } + return 0 +} + +func (x *TeamEventLeaderboardScore) GetMetadata() string { + if x != nil { + return x.Metadata + } + return "" +} + +// Individual user contribution towards the score of a team in a team event leaderboard. +type TeamEventLeaderboardContribution struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // User ID that owns this contribution. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Username. + Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` + // Display name. + DisplayName string `protobuf:"bytes,3,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` + // Avatar URL. + AvatarUrl string `protobuf:"bytes,4,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` + // Time when the user first submitted a score for this cohort. + CreateTimeSec int64 `protobuf:"varint,5,opt,name=create_time_sec,json=createTimeSec,proto3" json:"create_time_sec,omitempty"` + // Time when the user last submitted a score fir this cohort. + UpdateTimeSec int64 `protobuf:"varint,6,opt,name=update_time_sec,json=updateTimeSec,proto3" json:"update_time_sec,omitempty"` + // Aggregate score submitted by this user. + Score int64 `protobuf:"varint,7,opt,name=score,proto3" json:"score,omitempty"` + // Aggregate subscore submitted by this user. + Subscore int64 `protobuf:"varint,8,opt,name=subscore,proto3" json:"subscore,omitempty"` + // Number of score submissions from this user. + NumScores int64 `protobuf:"varint,9,opt,name=num_scores,json=numScores,proto3" json:"num_scores,omitempty"` + // Metadata for this user's most recent score update. + Metadata string `protobuf:"bytes,10,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *TeamEventLeaderboardContribution) Reset() { + *x = TeamEventLeaderboardContribution{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[222] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamEventLeaderboardContribution) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamEventLeaderboardContribution) ProtoMessage() {} + +func (x *TeamEventLeaderboardContribution) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[222] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamEventLeaderboardContribution.ProtoReflect.Descriptor instead. +func (*TeamEventLeaderboardContribution) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{222} +} + +func (x *TeamEventLeaderboardContribution) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamEventLeaderboardContribution) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *TeamEventLeaderboardContribution) GetDisplayName() string { + if x != nil { + return x.DisplayName + } + return "" +} + +func (x *TeamEventLeaderboardContribution) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +func (x *TeamEventLeaderboardContribution) GetCreateTimeSec() int64 { + if x != nil { + return x.CreateTimeSec + } + return 0 +} + +func (x *TeamEventLeaderboardContribution) GetUpdateTimeSec() int64 { + if x != nil { + return x.UpdateTimeSec + } + return 0 +} + +func (x *TeamEventLeaderboardContribution) GetScore() int64 { + if x != nil { + return x.Score + } + return 0 +} + +func (x *TeamEventLeaderboardContribution) GetSubscore() int64 { + if x != nil { + return x.Subscore + } + return 0 +} + +func (x *TeamEventLeaderboardContribution) GetNumScores() int64 { + if x != nil { + return x.NumScores + } + return 0 +} + +func (x *TeamEventLeaderboardContribution) GetMetadata() string { + if x != nil { + return x.Metadata + } + return "" +} + +// Details about a specific team event leaderboard. +type TeamEventLeaderboard struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Event leaderboard ID. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The name of the event leaderboard. May be an i18n code. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // A description of the event leaderboard. May be an i18n code. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // The category to group the event leaderboard together with others. + Category string `protobuf:"bytes,4,opt,name=category,proto3" json:"category,omitempty"` + // Score ordering. + Ascending bool `protobuf:"varint,5,opt,name=ascending,proto3" json:"ascending,omitempty"` + // Score submission operator. + Operator string `protobuf:"bytes,6,opt,name=operator,proto3" json:"operator,omitempty"` + // The tier of this instance of the event leaderboard. + Tier int32 `protobuf:"varint,7,opt,name=tier,proto3" json:"tier,omitempty"` + // Time when the event starts. + StartTimeSec int64 `protobuf:"varint,8,opt,name=start_time_sec,json=startTimeSec,proto3" json:"start_time_sec,omitempty"` + // Time when the event ends. + EndTimeSec int64 `protobuf:"varint,9,opt,name=end_time_sec,json=endTimeSec,proto3" json:"end_time_sec,omitempty"` + // Time when the event expires. + ExpiryTimeSec int64 `protobuf:"varint,10,opt,name=expiry_time_sec,json=expiryTimeSec,proto3" json:"expiry_time_sec,omitempty"` + // The available reward and its probabilities. + AvailableRewards *AvailableRewards `protobuf:"bytes,11,opt,name=available_rewards,json=availableRewards,proto3" json:"available_rewards,omitempty"` + // The possible reward tiers for this instance of the event leaderboard, based on its current tier. + RewardTiers map[int32]*EventLeaderboardRewardTiers `protobuf:"bytes,12,rep,name=reward_tiers,json=rewardTiers,proto3" json:"reward_tiers,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Per-tier promotion/demotion change zones, if configured. + ChangeZones map[int32]*EventLeaderboardChangeZone `protobuf:"bytes,13,rep,name=change_zones,json=changeZones,proto3" json:"change_zones,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Claim time, if any. + ClaimTimeSec int64 `protobuf:"varint,14,opt,name=claim_time_sec,json=claimTimeSec,proto3" json:"claim_time_sec,omitempty"` + // The outcome (rolled) reward for the event leaderboard. + Reward *Reward `protobuf:"bytes,15,opt,name=reward,proto3" json:"reward,omitempty"` + // Additional metadata properties. + AdditionalProperties map[string]string `protobuf:"bytes,16,rep,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Current participant count. + Count int64 `protobuf:"varint,17,opt,name=count,proto3" json:"count,omitempty"` + // Maximum participant count. + MaxCount int64 `protobuf:"varint,18,opt,name=max_count,json=maxCount,proto3" json:"max_count,omitempty"` + // Maximum number of score submissions per participant. + MaxNumScore int64 `protobuf:"varint,19,opt,name=max_num_score,json=maxNumScore,proto3" json:"max_num_score,omitempty"` + // Participants and their scores. + Scores []*TeamEventLeaderboardScore `protobuf:"bytes,20,rep,name=scores,proto3" json:"scores,omitempty"` + // Indicates if the event is still active, and scores can be submitted. + IsActive bool `protobuf:"varint,21,opt,name=is_active,json=isActive,proto3" json:"is_active,omitempty"` + // Indicates if the event is over and its reward can be claimed. + CanClaim bool `protobuf:"varint,22,opt,name=can_claim,json=canClaim,proto3" json:"can_claim,omitempty"` + // Indicates if the event can be rolled to get a new set of opponents. + CanRoll bool `protobuf:"varint,23,opt,name=can_roll,json=canRoll,proto3" json:"can_roll,omitempty"` + // Extra matchmaker properties for this cohort. + MatchmakerProperties *structpb.Struct `protobuf:"bytes,24,opt,name=matchmaker_properties,json=matchmakerProperties,proto3" json:"matchmaker_properties,omitempty"` + // The UNIX timestamp for the current server time. + CurrentTimeSec int64 `protobuf:"varint,25,opt,name=current_time_sec,json=currentTimeSec,proto3" json:"current_time_sec,omitempty"` + // Cohort ID the user belongs to for this active phase. + CohortId string `protobuf:"bytes,26,opt,name=cohort_id,json=cohortId,proto3" json:"cohort_id,omitempty"` + // Backing ID for underlying score tracking. + BackingId string `protobuf:"bytes,27,opt,name=backing_id,json=backingId,proto3" json:"backing_id,omitempty"` + // Contributions from team members towards the score. + Contributions []*TeamEventLeaderboardContribution `protobuf:"bytes,28,rep,name=contributions,proto3" json:"contributions,omitempty"` +} + +func (x *TeamEventLeaderboard) Reset() { + *x = TeamEventLeaderboard{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[223] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamEventLeaderboard) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamEventLeaderboard) ProtoMessage() {} + +func (x *TeamEventLeaderboard) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[223] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamEventLeaderboard.ProtoReflect.Descriptor instead. +func (*TeamEventLeaderboard) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{223} +} + +func (x *TeamEventLeaderboard) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamEventLeaderboard) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *TeamEventLeaderboard) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *TeamEventLeaderboard) GetCategory() string { + if x != nil { + return x.Category + } + return "" +} + +func (x *TeamEventLeaderboard) GetAscending() bool { + if x != nil { + return x.Ascending + } + return false +} + +func (x *TeamEventLeaderboard) GetOperator() string { + if x != nil { + return x.Operator + } + return "" +} + +func (x *TeamEventLeaderboard) GetTier() int32 { + if x != nil { + return x.Tier + } + return 0 +} + +func (x *TeamEventLeaderboard) GetStartTimeSec() int64 { + if x != nil { + return x.StartTimeSec + } + return 0 +} + +func (x *TeamEventLeaderboard) GetEndTimeSec() int64 { + if x != nil { + return x.EndTimeSec + } + return 0 +} + +func (x *TeamEventLeaderboard) GetExpiryTimeSec() int64 { + if x != nil { + return x.ExpiryTimeSec + } + return 0 +} + +func (x *TeamEventLeaderboard) GetAvailableRewards() *AvailableRewards { + if x != nil { + return x.AvailableRewards + } + return nil +} + +func (x *TeamEventLeaderboard) GetRewardTiers() map[int32]*EventLeaderboardRewardTiers { + if x != nil { + return x.RewardTiers + } + return nil +} + +func (x *TeamEventLeaderboard) GetChangeZones() map[int32]*EventLeaderboardChangeZone { + if x != nil { + return x.ChangeZones + } + return nil +} + +func (x *TeamEventLeaderboard) GetClaimTimeSec() int64 { + if x != nil { + return x.ClaimTimeSec + } + return 0 +} + +func (x *TeamEventLeaderboard) GetReward() *Reward { + if x != nil { + return x.Reward + } + return nil +} + +func (x *TeamEventLeaderboard) GetAdditionalProperties() map[string]string { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +func (x *TeamEventLeaderboard) GetCount() int64 { + if x != nil { + return x.Count + } + return 0 +} + +func (x *TeamEventLeaderboard) GetMaxCount() int64 { + if x != nil { + return x.MaxCount + } + return 0 +} + +func (x *TeamEventLeaderboard) GetMaxNumScore() int64 { + if x != nil { + return x.MaxNumScore + } + return 0 +} + +func (x *TeamEventLeaderboard) GetScores() []*TeamEventLeaderboardScore { + if x != nil { + return x.Scores + } + return nil +} + +func (x *TeamEventLeaderboard) GetIsActive() bool { + if x != nil { + return x.IsActive + } + return false +} + +func (x *TeamEventLeaderboard) GetCanClaim() bool { + if x != nil { + return x.CanClaim + } + return false +} + +func (x *TeamEventLeaderboard) GetCanRoll() bool { + if x != nil { + return x.CanRoll + } + return false +} + +func (x *TeamEventLeaderboard) GetMatchmakerProperties() *structpb.Struct { + if x != nil { + return x.MatchmakerProperties + } + return nil +} + +func (x *TeamEventLeaderboard) GetCurrentTimeSec() int64 { + if x != nil { + return x.CurrentTimeSec + } + return 0 +} + +func (x *TeamEventLeaderboard) GetCohortId() string { + if x != nil { + return x.CohortId + } + return "" +} + +func (x *TeamEventLeaderboard) GetBackingId() string { + if x != nil { + return x.BackingId + } + return "" +} + +func (x *TeamEventLeaderboard) GetContributions() []*TeamEventLeaderboardContribution { + if x != nil { + return x.Contributions + } + return nil +} + +// Several team event leaderboards the team has access to, resulting from a listing operation. +type TeamEventLeaderboards struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Zero or more event leaderboards. + EventLeaderboards []*TeamEventLeaderboard `protobuf:"bytes,1,rep,name=event_leaderboards,json=eventLeaderboards,proto3" json:"event_leaderboards,omitempty"` +} + +func (x *TeamEventLeaderboards) Reset() { + *x = TeamEventLeaderboards{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[224] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamEventLeaderboards) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamEventLeaderboards) ProtoMessage() {} + +func (x *TeamEventLeaderboards) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[224] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamEventLeaderboards.ProtoReflect.Descriptor instead. +func (*TeamEventLeaderboards) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{224} +} + +func (x *TeamEventLeaderboards) GetEventLeaderboards() []*TeamEventLeaderboard { + if x != nil { + return x.EventLeaderboards + } + return nil +} + +type TeamEventLeaderboardDebugFillRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier for which to fill the cohort. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Event leaderboard ID to fill. + EventLeaderboardId string `protobuf:"bytes,2,opt,name=event_leaderboard_id,json=eventLeaderboardId,proto3" json:"event_leaderboard_id,omitempty"` + // Optional target cohort size to fill to, otherwise fill to max cohort size. + TargetCount int32 `protobuf:"varint,3,opt,name=target_count,json=targetCount,proto3" json:"target_count,omitempty"` +} + +func (x *TeamEventLeaderboardDebugFillRequest) Reset() { + *x = TeamEventLeaderboardDebugFillRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[225] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamEventLeaderboardDebugFillRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamEventLeaderboardDebugFillRequest) ProtoMessage() {} + +func (x *TeamEventLeaderboardDebugFillRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[225] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamEventLeaderboardDebugFillRequest.ProtoReflect.Descriptor instead. +func (*TeamEventLeaderboardDebugFillRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{225} +} + +func (x *TeamEventLeaderboardDebugFillRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamEventLeaderboardDebugFillRequest) GetEventLeaderboardId() string { + if x != nil { + return x.EventLeaderboardId + } + return "" +} + +func (x *TeamEventLeaderboardDebugFillRequest) GetTargetCount() int32 { + if x != nil { + return x.TargetCount + } + return 0 +} + +// DEBUG. Payload describing scores to set for a cohort's participants. +type TeamEventLeaderboardDebugRandomScoresRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier for which to use random cohort scores. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Event leaderboard ID to update. + EventLeaderboardId string `protobuf:"bytes,2,opt,name=event_leaderboard_id,json=eventLeaderboardId,proto3" json:"event_leaderboard_id,omitempty"` + // Minimum score, inclusive. + Min int64 `protobuf:"varint,3,opt,name=min,proto3" json:"min,omitempty"` + // Maximum score, inclusive. + Max int64 `protobuf:"varint,4,opt,name=max,proto3" json:"max,omitempty"` + // Optional operator to use when updating scores. + Operator *wrapperspb.Int32Value `protobuf:"bytes,5,opt,name=operator,proto3" json:"operator,omitempty"` + // Minimum subscore, inclusive. + SubscoreMin int64 `protobuf:"varint,6,opt,name=subscore_min,json=subscoreMin,proto3" json:"subscore_min,omitempty"` + // Maximum subscore, inclusive. + SubscoreMax int64 `protobuf:"varint,7,opt,name=subscore_max,json=subscoreMax,proto3" json:"subscore_max,omitempty"` +} + +func (x *TeamEventLeaderboardDebugRandomScoresRequest) Reset() { + *x = TeamEventLeaderboardDebugRandomScoresRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[226] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamEventLeaderboardDebugRandomScoresRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamEventLeaderboardDebugRandomScoresRequest) ProtoMessage() {} + +func (x *TeamEventLeaderboardDebugRandomScoresRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[226] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamEventLeaderboardDebugRandomScoresRequest.ProtoReflect.Descriptor instead. +func (*TeamEventLeaderboardDebugRandomScoresRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{226} +} + +func (x *TeamEventLeaderboardDebugRandomScoresRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamEventLeaderboardDebugRandomScoresRequest) GetEventLeaderboardId() string { + if x != nil { + return x.EventLeaderboardId + } + return "" +} + +func (x *TeamEventLeaderboardDebugRandomScoresRequest) GetMin() int64 { + if x != nil { + return x.Min + } + return 0 +} + +func (x *TeamEventLeaderboardDebugRandomScoresRequest) GetMax() int64 { + if x != nil { + return x.Max + } + return 0 +} + +func (x *TeamEventLeaderboardDebugRandomScoresRequest) GetOperator() *wrapperspb.Int32Value { + if x != nil { + return x.Operator + } + return nil +} + +func (x *TeamEventLeaderboardDebugRandomScoresRequest) GetSubscoreMin() int64 { + if x != nil { + return x.SubscoreMin + } + return 0 +} + +func (x *TeamEventLeaderboardDebugRandomScoresRequest) GetSubscoreMax() int64 { + if x != nil { + return x.SubscoreMax + } + return 0 +} + +// Request to list team reward mailbox entries. +type TeamRewardMailboxListRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier for which to list reward mailbox entries. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Maximum number of reward mailbox entries to return. + Limit int64 `protobuf:"varint,2,opt,name=limit,proto3" json:"limit,omitempty"` + // Cursor to paginate from, if any. + Cursor string `protobuf:"bytes,3,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *TeamRewardMailboxListRequest) Reset() { + *x = TeamRewardMailboxListRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[227] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamRewardMailboxListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamRewardMailboxListRequest) ProtoMessage() {} + +func (x *TeamRewardMailboxListRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[227] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamRewardMailboxListRequest.ProtoReflect.Descriptor instead. +func (*TeamRewardMailboxListRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{227} +} + +func (x *TeamRewardMailboxListRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamRewardMailboxListRequest) GetLimit() int64 { + if x != nil { + return x.Limit + } + return 0 +} + +func (x *TeamRewardMailboxListRequest) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +// Request to claim a team reward mailbox entry, and optionally remove it at the same time. +type TeamRewardMailboxClaimRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier for which to claim a mailbox entry. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Identifier for the reward mailbox entry to claim. + EntryId string `protobuf:"bytes,2,opt,name=entry_id,json=entryId,proto3" json:"entry_id,omitempty"` + // If the entry should be deleted as part of the claim. + Delete bool `protobuf:"varint,3,opt,name=delete,proto3" json:"delete,omitempty"` +} + +func (x *TeamRewardMailboxClaimRequest) Reset() { + *x = TeamRewardMailboxClaimRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[228] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamRewardMailboxClaimRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamRewardMailboxClaimRequest) ProtoMessage() {} + +func (x *TeamRewardMailboxClaimRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[228] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamRewardMailboxClaimRequest.ProtoReflect.Descriptor instead. +func (*TeamRewardMailboxClaimRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{228} +} + +func (x *TeamRewardMailboxClaimRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamRewardMailboxClaimRequest) GetEntryId() string { + if x != nil { + return x.EntryId + } + return "" +} + +func (x *TeamRewardMailboxClaimRequest) GetDelete() bool { + if x != nil { + return x.Delete + } + return false +} + +// Request to delete a team reward mailbox entry, even if it is not yet claimed. +type TeamRewardMailboxDeleteRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier for which to delete a mailbox entry. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Identifier for the reward mailbox entry to delete. + EntryIds []string `protobuf:"bytes,2,rep,name=entry_ids,json=entryIds,proto3" json:"entry_ids,omitempty"` +} + +func (x *TeamRewardMailboxDeleteRequest) Reset() { + *x = TeamRewardMailboxDeleteRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[229] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamRewardMailboxDeleteRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamRewardMailboxDeleteRequest) ProtoMessage() {} + +func (x *TeamRewardMailboxDeleteRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[229] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamRewardMailboxDeleteRequest.ProtoReflect.Descriptor instead. +func (*TeamRewardMailboxDeleteRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{229} +} + +func (x *TeamRewardMailboxDeleteRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamRewardMailboxDeleteRequest) GetEntryIds() []string { + if x != nil { + return x.EntryIds + } + return nil +} + +// Reward associated with a contribution threshold in a team gift. +type TeamGiftReward struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Minimum count required to unlock this reward. + MinCount int64 `protobuf:"varint,1,opt,name=min_count,json=minCount,proto3" json:"min_count,omitempty"` + // Reward for contributors to this gift. + ContributorReward *AvailableRewards `protobuf:"bytes,2,opt,name=contributor_reward,json=contributorReward,proto3" json:"contributor_reward,omitempty"` + // Reward to non-contributing team members. + NoncontributorReward *AvailableRewards `protobuf:"bytes,3,opt,name=noncontributor_reward,json=noncontributorReward,proto3" json:"noncontributor_reward,omitempty"` +} + +func (x *TeamGiftReward) Reset() { + *x = TeamGiftReward{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[230] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamGiftReward) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamGiftReward) ProtoMessage() {} + +func (x *TeamGiftReward) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[230] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamGiftReward.ProtoReflect.Descriptor instead. +func (*TeamGiftReward) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{230} +} + +func (x *TeamGiftReward) GetMinCount() int64 { + if x != nil { + return x.MinCount + } + return 0 +} + +func (x *TeamGiftReward) GetContributorReward() *AvailableRewards { + if x != nil { + return x.ContributorReward + } + return nil +} + +func (x *TeamGiftReward) GetNoncontributorReward() *AvailableRewards { + if x != nil { + return x.NoncontributorReward + } + return nil +} + +// An individual contributor to a team gift. +type TeamGiftContributor struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // User identifier. + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + // Username. + Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` + // Avatar URL. + AvatarUrl string `protobuf:"bytes,3,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` + // Display name. + DisplayName string `protobuf:"bytes,4,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the user first contributed. + CreateTimeSec int64 `protobuf:"varint,5,opt,name=create_time_sec,json=createTimeSec,proto3" json:"create_time_sec,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the user most recently updated their contribution + UpdateTimeSec int64 `protobuf:"varint,6,opt,name=update_time_sec,json=updateTimeSec,proto3" json:"update_time_sec,omitempty"` + // Count contributed by this user. + Count int64 `protobuf:"varint,7,opt,name=count,proto3" json:"count,omitempty"` +} + +func (x *TeamGiftContributor) Reset() { + *x = TeamGiftContributor{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[231] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamGiftContributor) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamGiftContributor) ProtoMessage() {} + +func (x *TeamGiftContributor) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[231] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamGiftContributor.ProtoReflect.Descriptor instead. +func (*TeamGiftContributor) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{231} +} + +func (x *TeamGiftContributor) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *TeamGiftContributor) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *TeamGiftContributor) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +func (x *TeamGiftContributor) GetDisplayName() string { + if x != nil { + return x.DisplayName + } + return "" +} + +func (x *TeamGiftContributor) GetCreateTimeSec() int64 { + if x != nil { + return x.CreateTimeSec + } + return 0 +} + +func (x *TeamGiftContributor) GetUpdateTimeSec() int64 { + if x != nil { + return x.UpdateTimeSec + } + return 0 +} + +func (x *TeamGiftContributor) GetCount() int64 { + if x != nil { + return x.Count + } + return 0 +} + +// Team gift available to contribute to or claim rewards from. +type TeamGift struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Gift identifier. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Name. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // Description. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // Category. + Category string `protobuf:"bytes,4,opt,name=category,proto3" json:"category,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the gift became available. + StartTimeSec int64 `protobuf:"varint,5,opt,name=start_time_sec,json=startTimeSec,proto3" json:"start_time_sec,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the gift completed, and no further contributions are allowed. + ContributionEndTimeSec int64 `protobuf:"varint,6,opt,name=contribution_end_time_sec,json=contributionEndTimeSec,proto3" json:"contribution_end_time_sec,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the gift completed, and no further contributions are allowed. + EndTimeSec int64 `protobuf:"varint,7,opt,name=end_time_sec,json=endTimeSec,proto3" json:"end_time_sec,omitempty"` + // Current count. + Count int64 `protobuf:"varint,8,opt,name=count,proto3" json:"count,omitempty"` + // Total count that can be contributed as part of this reward. + MaxCount int64 `protobuf:"varint,9,opt,name=max_count,json=maxCount,proto3" json:"max_count,omitempty"` + // Maximum count that may be submitted from any individual contributor. + MaxContributorCount int64 `protobuf:"varint,10,opt,name=max_contributor_count,json=maxContributorCount,proto3" json:"max_contributor_count,omitempty"` + // Cost per unit of contribution. + ContributionCost *AvailableRewards `protobuf:"bytes,11,opt,name=contribution_cost,json=contributionCost,proto3" json:"contribution_cost,omitempty"` + // Reward per unit of contribution. + ContributionReward *AvailableRewards `protobuf:"bytes,12,opt,name=contribution_reward,json=contributionReward,proto3" json:"contribution_reward,omitempty"` + // Rewards available as part of the gift once contribution thresholds are met. + Rewards []*TeamGiftReward `protobuf:"bytes,13,rep,name=rewards,proto3" json:"rewards,omitempty"` + // Additional properties. + AdditionalProperties *structpb.Struct `protobuf:"bytes,14,opt,name=additional_properties,json=additionalProperties,proto3" json:"additional_properties,omitempty"` + // Contribution information for team members. + Contributors []*TeamGiftContributor `protobuf:"bytes,15,rep,name=contributors,proto3" json:"contributors,omitempty"` + // Flag indicating if the caller can contribute to this gift. + CanContribute bool `protobuf:"varint,16,opt,name=can_contribute,json=canContribute,proto3" json:"can_contribute,omitempty"` + // The count still available for the caller to contribute. + ContributorRemainingCount int64 `protobuf:"varint,17,opt,name=contributor_remaining_count,json=contributorRemainingCount,proto3" json:"contributor_remaining_count,omitempty"` + // Flag indicating if the caller can claim any rewards from this gift. + CanClaim bool `protobuf:"varint,18,opt,name=can_claim,json=canClaim,proto3" json:"can_claim,omitempty"` + // Rewards available for the caller to claim. + AvailableRewards []*TeamGiftReward `protobuf:"bytes,19,rep,name=available_rewards,json=availableRewards,proto3" json:"available_rewards,omitempty"` +} + +func (x *TeamGift) Reset() { + *x = TeamGift{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[232] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamGift) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamGift) ProtoMessage() {} + +func (x *TeamGift) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[232] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamGift.ProtoReflect.Descriptor instead. +func (*TeamGift) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{232} +} + +func (x *TeamGift) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamGift) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *TeamGift) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *TeamGift) GetCategory() string { + if x != nil { + return x.Category + } + return "" +} + +func (x *TeamGift) GetStartTimeSec() int64 { + if x != nil { + return x.StartTimeSec + } + return 0 +} + +func (x *TeamGift) GetContributionEndTimeSec() int64 { + if x != nil { + return x.ContributionEndTimeSec + } + return 0 +} + +func (x *TeamGift) GetEndTimeSec() int64 { + if x != nil { + return x.EndTimeSec + } + return 0 +} + +func (x *TeamGift) GetCount() int64 { + if x != nil { + return x.Count + } + return 0 +} + +func (x *TeamGift) GetMaxCount() int64 { + if x != nil { + return x.MaxCount + } + return 0 +} + +func (x *TeamGift) GetMaxContributorCount() int64 { + if x != nil { + return x.MaxContributorCount + } + return 0 +} + +func (x *TeamGift) GetContributionCost() *AvailableRewards { + if x != nil { + return x.ContributionCost + } + return nil +} + +func (x *TeamGift) GetContributionReward() *AvailableRewards { + if x != nil { + return x.ContributionReward + } + return nil +} + +func (x *TeamGift) GetRewards() []*TeamGiftReward { + if x != nil { + return x.Rewards + } + return nil +} + +func (x *TeamGift) GetAdditionalProperties() *structpb.Struct { + if x != nil { + return x.AdditionalProperties + } + return nil +} + +func (x *TeamGift) GetContributors() []*TeamGiftContributor { + if x != nil { + return x.Contributors + } + return nil +} + +func (x *TeamGift) GetCanContribute() bool { + if x != nil { + return x.CanContribute + } + return false +} + +func (x *TeamGift) GetContributorRemainingCount() int64 { + if x != nil { + return x.ContributorRemainingCount + } + return 0 +} + +func (x *TeamGift) GetCanClaim() bool { + if x != nil { + return x.CanClaim + } + return false +} + +func (x *TeamGift) GetAvailableRewards() []*TeamGiftReward { + if x != nil { + return x.AvailableRewards + } + return nil +} + +// A list of gifts available for a team. +type TeamGiftList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Gifts available for a team. + Gifts []*TeamGift `protobuf:"bytes,1,rep,name=gifts,proto3" json:"gifts,omitempty"` +} + +func (x *TeamGiftList) Reset() { + *x = TeamGiftList{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[233] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamGiftList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamGiftList) ProtoMessage() {} + +func (x *TeamGiftList) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[233] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamGiftList.ProtoReflect.Descriptor instead. +func (*TeamGiftList) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{233} +} + +func (x *TeamGiftList) GetGifts() []*TeamGift { + if x != nil { + return x.Gifts + } + return nil +} + +// Request to view available gifts for a team. +type TeamGiftListRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier for which to list gifts. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *TeamGiftListRequest) Reset() { + *x = TeamGiftListRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[234] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamGiftListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamGiftListRequest) ProtoMessage() {} + +func (x *TeamGiftListRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[234] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamGiftListRequest.ProtoReflect.Descriptor instead. +func (*TeamGiftListRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{234} +} + +func (x *TeamGiftListRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +// Request to contribute to a specific team gift. +type TeamGiftContributeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier for which to submit a gift contribution. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Gift identifier. + GiftId string `protobuf:"bytes,2,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + // Count to contribute. + Count int64 `protobuf:"varint,3,opt,name=count,proto3" json:"count,omitempty"` +} + +func (x *TeamGiftContributeRequest) Reset() { + *x = TeamGiftContributeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[235] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamGiftContributeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamGiftContributeRequest) ProtoMessage() {} + +func (x *TeamGiftContributeRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[235] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamGiftContributeRequest.ProtoReflect.Descriptor instead. +func (*TeamGiftContributeRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{235} +} + +func (x *TeamGiftContributeRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamGiftContributeRequest) GetGiftId() string { + if x != nil { + return x.GiftId + } + return "" +} + +func (x *TeamGiftContributeRequest) GetCount() int64 { + if x != nil { + return x.Count + } + return 0 +} + +// Result of contributing to a team gift. +type TeamGiftContributeAck struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Updated gift data. + Gift *TeamGift `protobuf:"bytes,1,opt,name=gift,proto3" json:"gift,omitempty"` + // The count that was actually contributed. + Count int64 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"` + // Reward that was actually granted for contributing. + Reward *Reward `protobuf:"bytes,3,opt,name=reward,proto3" json:"reward,omitempty"` +} + +func (x *TeamGiftContributeAck) Reset() { + *x = TeamGiftContributeAck{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[236] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamGiftContributeAck) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamGiftContributeAck) ProtoMessage() {} + +func (x *TeamGiftContributeAck) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[236] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamGiftContributeAck.ProtoReflect.Descriptor instead. +func (*TeamGiftContributeAck) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{236} +} + +func (x *TeamGiftContributeAck) GetGift() *TeamGift { + if x != nil { + return x.Gift + } + return nil +} + +func (x *TeamGiftContributeAck) GetCount() int64 { + if x != nil { + return x.Count + } + return 0 +} + +func (x *TeamGiftContributeAck) GetReward() *Reward { + if x != nil { + return x.Reward + } + return nil +} + +// Request to claim all rewards currently available from a team gift. +type TeamGiftClaimRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Team identifier from which to claim a gift. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Gift identifier. + GiftId string `protobuf:"bytes,2,opt,name=gift_id,json=giftId,proto3" json:"gift_id,omitempty"` + // End time for a past iteration of this gift to claim for, or 0 for current. + EndTimeSec int64 `protobuf:"varint,3,opt,name=end_time_sec,json=endTimeSec,proto3" json:"end_time_sec,omitempty"` +} + +func (x *TeamGiftClaimRequest) Reset() { + *x = TeamGiftClaimRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[237] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamGiftClaimRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamGiftClaimRequest) ProtoMessage() {} + +func (x *TeamGiftClaimRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[237] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamGiftClaimRequest.ProtoReflect.Descriptor instead. +func (*TeamGiftClaimRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{237} +} + +func (x *TeamGiftClaimRequest) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *TeamGiftClaimRequest) GetGiftId() string { + if x != nil { + return x.GiftId + } + return "" +} + +func (x *TeamGiftClaimRequest) GetEndTimeSec() int64 { + if x != nil { + return x.EndTimeSec + } + return 0 +} + +// Result of claiming rewards from a team gift. +type TeamGiftClaimAck struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Updated gift data. + Gift *TeamGift `protobuf:"bytes,1,opt,name=gift,proto3" json:"gift,omitempty"` + // Rewards that were claimed. + Rewards []*Reward `protobuf:"bytes,2,rep,name=rewards,proto3" json:"rewards,omitempty"` +} + +func (x *TeamGiftClaimAck) Reset() { + *x = TeamGiftClaimAck{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[238] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TeamGiftClaimAck) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamGiftClaimAck) ProtoMessage() {} + +func (x *TeamGiftClaimAck) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[238] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamGiftClaimAck.ProtoReflect.Descriptor instead. +func (*TeamGiftClaimAck) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{238} +} + +func (x *TeamGiftClaimAck) GetGift() *TeamGift { + if x != nil { + return x.Gift + } + return nil +} + +func (x *TeamGiftClaimAck) GetRewards() []*Reward { + if x != nil { + return x.Rewards + } + return nil +} + +// Sync operation for a single inventory item. +type SyncInventoryItem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Item identifier from config mapping. + ItemId string `protobuf:"bytes,1,opt,name=item_id,json=itemId,proto3" json:"item_id,omitempty"` + // Number of items to add or remove. + Delta int64 `protobuf:"varint,2,opt,name=delta,proto3" json:"delta,omitempty"` + // Item properties with string values. + StringProperties map[string]string `protobuf:"bytes,3,rep,name=string_properties,json=stringProperties,proto3" json:"string_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Item properties with numeric values. + NumericProperties map[string]float64 `protobuf:"bytes,4,rep,name=numeric_properties,json=numericProperties,proto3" json:"numeric_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"` +} + +func (x *SyncInventoryItem) Reset() { + *x = SyncInventoryItem{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[239] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncInventoryItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncInventoryItem) ProtoMessage() {} + +func (x *SyncInventoryItem) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[239] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncInventoryItem.ProtoReflect.Descriptor instead. +func (*SyncInventoryItem) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{239} +} + +func (x *SyncInventoryItem) GetItemId() string { + if x != nil { + return x.ItemId + } + return "" +} + +func (x *SyncInventoryItem) GetDelta() int64 { + if x != nil { + return x.Delta + } + return 0 +} + +func (x *SyncInventoryItem) GetStringProperties() map[string]string { + if x != nil { + return x.StringProperties + } + return nil +} + +func (x *SyncInventoryItem) GetNumericProperties() map[string]float64 { + if x != nil { + return x.NumericProperties + } + return nil +} + +// Input for an offline state sync operation for the inventory system. +type SyncInventory struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Map of instance IDs to update operation data. + Items map[string]*SyncInventoryItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *SyncInventory) Reset() { + *x = SyncInventory{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[240] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncInventory) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncInventory) ProtoMessage() {} + +func (x *SyncInventory) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[240] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncInventory.ProtoReflect.Descriptor instead. +func (*SyncInventory) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{240} +} + +func (x *SyncInventory) GetItems() map[string]*SyncInventoryItem { + if x != nil { + return x.Items + } + return nil +} + +// Input for an offline state sync operation for the economy system. +type SyncEconomy struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Currencies deltas. + Currencies map[string]int64 `protobuf:"bytes,1,rep,name=currencies,proto3" json:"currencies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Economy modifiers to add. + Modifiers []*ActiveRewardModifier `protobuf:"bytes,2,rep,name=modifiers,proto3" json:"modifiers,omitempty"` +} + +func (x *SyncEconomy) Reset() { + *x = SyncEconomy{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[241] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncEconomy) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncEconomy) ProtoMessage() {} + +func (x *SyncEconomy) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[241] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncEconomy.ProtoReflect.Descriptor instead. +func (*SyncEconomy) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{241} +} + +func (x *SyncEconomy) GetCurrencies() map[string]int64 { + if x != nil { + return x.Currencies + } + return nil +} + +func (x *SyncEconomy) GetModifiers() []*ActiveRewardModifier { + if x != nil { + return x.Modifiers + } + return nil +} + +// Sync operation for a single achievement. +type SyncAchievementsUpdate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Count to add. + Count int64 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` + // Time when the achievement first recorded progress. + CreateTimeSec int64 `protobuf:"varint,2,opt,name=create_time_sec,json=createTimeSec,proto3" json:"create_time_sec,omitempty"` + // Time when the achievement update was generated on the client. + UpdateTimeSec int64 `protobuf:"varint,3,opt,name=update_time_sec,json=updateTimeSec,proto3" json:"update_time_sec,omitempty"` + // Claim time, if claimed offline. + ClaimTimeSec int64 `protobuf:"varint,4,opt,name=claim_time_sec,json=claimTimeSec,proto3" json:"claim_time_sec,omitempty"` + // Total claim time, if claimed offline. + TotalClaimTimeSec int64 `protobuf:"varint,5,opt,name=total_claim_time_sec,json=totalClaimTimeSec,proto3" json:"total_claim_time_sec,omitempty"` +} + +func (x *SyncAchievementsUpdate) Reset() { + *x = SyncAchievementsUpdate{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[242] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncAchievementsUpdate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncAchievementsUpdate) ProtoMessage() {} + +func (x *SyncAchievementsUpdate) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[242] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncAchievementsUpdate.ProtoReflect.Descriptor instead. +func (*SyncAchievementsUpdate) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{242} +} + +func (x *SyncAchievementsUpdate) GetCount() int64 { + if x != nil { + return x.Count + } + return 0 +} + +func (x *SyncAchievementsUpdate) GetCreateTimeSec() int64 { + if x != nil { + return x.CreateTimeSec + } + return 0 +} + +func (x *SyncAchievementsUpdate) GetUpdateTimeSec() int64 { + if x != nil { + return x.UpdateTimeSec + } + return 0 +} + +func (x *SyncAchievementsUpdate) GetClaimTimeSec() int64 { + if x != nil { + return x.ClaimTimeSec + } + return 0 +} + +func (x *SyncAchievementsUpdate) GetTotalClaimTimeSec() int64 { + if x != nil { + return x.TotalClaimTimeSec + } + return 0 +} + +// Input for an offline state sync operation for the achievements system. +type SyncAchievements struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Achievement updates and associated metadata. + Achievements map[string]*SyncAchievementsUpdate `protobuf:"bytes,1,rep,name=achievements,proto3" json:"achievements,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *SyncAchievements) Reset() { + *x = SyncAchievements{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[243] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncAchievements) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncAchievements) ProtoMessage() {} + +func (x *SyncAchievements) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[243] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncAchievements.ProtoReflect.Descriptor instead. +func (*SyncAchievements) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{243} +} + +func (x *SyncAchievements) GetAchievements() map[string]*SyncAchievementsUpdate { + if x != nil { + return x.Achievements + } + return nil +} + +// Full state (not delta) for an energy. +type SyncEnergyState struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Current count. + Count int64 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` + // Time when the energy started refilling. + RefillStartTimeSec int64 `protobuf:"varint,2,opt,name=refill_start_time_sec,json=refillStartTimeSec,proto3" json:"refill_start_time_sec,omitempty"` +} + +func (x *SyncEnergyState) Reset() { + *x = SyncEnergyState{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[244] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncEnergyState) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncEnergyState) ProtoMessage() {} + +func (x *SyncEnergyState) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[244] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncEnergyState.ProtoReflect.Descriptor instead. +func (*SyncEnergyState) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{244} +} + +func (x *SyncEnergyState) GetCount() int64 { + if x != nil { + return x.Count + } + return 0 +} + +func (x *SyncEnergyState) GetRefillStartTimeSec() int64 { + if x != nil { + return x.RefillStartTimeSec + } + return 0 +} + +// Input for an offline state sync operation for the energy system. +type SyncEnergy struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Energies and associated full sync data. + Energies map[string]*SyncEnergyState `protobuf:"bytes,1,rep,name=energies,proto3" json:"energies,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Energy modifiers to add. + Modifiers []*EnergyModifier `protobuf:"bytes,2,rep,name=modifiers,proto3" json:"modifiers,omitempty"` +} + +func (x *SyncEnergy) Reset() { + *x = SyncEnergy{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[245] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncEnergy) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncEnergy) ProtoMessage() {} + +func (x *SyncEnergy) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[245] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncEnergy.ProtoReflect.Descriptor instead. +func (*SyncEnergy) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{245} +} + +func (x *SyncEnergy) GetEnergies() map[string]*SyncEnergyState { + if x != nil { + return x.Energies + } + return nil +} + +func (x *SyncEnergy) GetModifiers() []*EnergyModifier { + if x != nil { + return x.Modifiers + } + return nil +} + +// Single event leaderboard update. +type SyncEventLeaderboardUpdate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Score. + Score int64 `protobuf:"varint,1,opt,name=score,proto3" json:"score,omitempty"` + // Subscore. + Subscore int64 `protobuf:"varint,2,opt,name=subscore,proto3" json:"subscore,omitempty"` + // Time when the score was generated on the client. + UpdateTimeSec int64 `protobuf:"varint,3,opt,name=update_time_sec,json=updateTimeSec,proto3" json:"update_time_sec,omitempty"` + // Metadata. + Metadata string `protobuf:"bytes,4,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *SyncEventLeaderboardUpdate) Reset() { + *x = SyncEventLeaderboardUpdate{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[246] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncEventLeaderboardUpdate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncEventLeaderboardUpdate) ProtoMessage() {} + +func (x *SyncEventLeaderboardUpdate) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[246] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncEventLeaderboardUpdate.ProtoReflect.Descriptor instead. +func (*SyncEventLeaderboardUpdate) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{246} +} + +func (x *SyncEventLeaderboardUpdate) GetScore() int64 { + if x != nil { + return x.Score + } + return 0 +} + +func (x *SyncEventLeaderboardUpdate) GetSubscore() int64 { + if x != nil { + return x.Subscore + } + return 0 +} + +func (x *SyncEventLeaderboardUpdate) GetUpdateTimeSec() int64 { + if x != nil { + return x.UpdateTimeSec + } + return 0 +} + +func (x *SyncEventLeaderboardUpdate) GetMetadata() string { + if x != nil { + return x.Metadata + } + return "" +} + +// Input for an offline state sync of event leaderboard updates. +type SyncEventLeaderboards struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Updates for various event leaderboards, keyed by event leaderboard identifier. + EventLeaderboards map[string]*SyncEventLeaderboardUpdate `protobuf:"bytes,1,rep,name=event_leaderboards,json=eventLeaderboards,proto3" json:"event_leaderboards,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *SyncEventLeaderboards) Reset() { + *x = SyncEventLeaderboards{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[247] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncEventLeaderboards) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncEventLeaderboards) ProtoMessage() {} + +func (x *SyncEventLeaderboards) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[247] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncEventLeaderboards.ProtoReflect.Descriptor instead. +func (*SyncEventLeaderboards) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{247} +} + +func (x *SyncEventLeaderboards) GetEventLeaderboards() map[string]*SyncEventLeaderboardUpdate { + if x != nil { + return x.EventLeaderboards + } + return nil +} + +// Single progression update. +type SyncProgressionUpdate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The counts to set. + Counts map[string]int64 `protobuf:"bytes,1,rep,name=counts,proto3" json:"counts,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Time when the progression was first updated on the client, if new. + CreateTimeSec int64 `protobuf:"varint,2,opt,name=create_time_sec,json=createTimeSec,proto3" json:"create_time_sec,omitempty"` + // Time when the progression update was generated on the client. + UpdateTimeSec int64 `protobuf:"varint,3,opt,name=update_time_sec,json=updateTimeSec,proto3" json:"update_time_sec,omitempty"` + // Cost paid to unlock the progression. + Cost *ProgressionCost `protobuf:"bytes,4,opt,name=cost,proto3" json:"cost,omitempty"` +} + +func (x *SyncProgressionUpdate) Reset() { + *x = SyncProgressionUpdate{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[248] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncProgressionUpdate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncProgressionUpdate) ProtoMessage() {} + +func (x *SyncProgressionUpdate) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[248] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncProgressionUpdate.ProtoReflect.Descriptor instead. +func (*SyncProgressionUpdate) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{248} +} + +func (x *SyncProgressionUpdate) GetCounts() map[string]int64 { + if x != nil { + return x.Counts + } + return nil +} + +func (x *SyncProgressionUpdate) GetCreateTimeSec() int64 { + if x != nil { + return x.CreateTimeSec + } + return 0 +} + +func (x *SyncProgressionUpdate) GetUpdateTimeSec() int64 { + if x != nil { + return x.UpdateTimeSec + } + return 0 +} + +func (x *SyncProgressionUpdate) GetCost() *ProgressionCost { + if x != nil { + return x.Cost + } + return nil +} + +// Input for an offline state sync of progressions updates. +type SyncProgressions struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Updates for various progressions, keyed by progression identifier. + Progressions map[string]*SyncProgressionUpdate `protobuf:"bytes,1,rep,name=progressions,proto3" json:"progressions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *SyncProgressions) Reset() { + *x = SyncProgressions{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[249] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncProgressions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncProgressions) ProtoMessage() {} + +func (x *SyncProgressions) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[249] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncProgressions.ProtoReflect.Descriptor instead. +func (*SyncProgressions) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{249} +} + +func (x *SyncProgressions) GetProgressions() map[string]*SyncProgressionUpdate { + if x != nil { + return x.Progressions + } + return nil +} + +// Input for an offline state sync of tutorials updates. +type SyncTutorials struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Accept list. + Accepts []string `protobuf:"bytes,1,rep,name=accepts,proto3" json:"accepts,omitempty"` + // Decline list. + Declines []string `protobuf:"bytes,2,rep,name=declines,proto3" json:"declines,omitempty"` + // Abandon list. + Abandons []string `protobuf:"bytes,3,rep,name=abandons,proto3" json:"abandons,omitempty"` + // Updates to tutorial steps. Implicitly counts as accepting these tutorials, if not accepted already. + Updates map[string]int64 `protobuf:"bytes,4,rep,name=updates,proto3" json:"updates,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` +} + +func (x *SyncTutorials) Reset() { + *x = SyncTutorials{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[250] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncTutorials) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncTutorials) ProtoMessage() {} + +func (x *SyncTutorials) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[250] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncTutorials.ProtoReflect.Descriptor instead. +func (*SyncTutorials) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{250} +} + +func (x *SyncTutorials) GetAccepts() []string { + if x != nil { + return x.Accepts + } + return nil +} + +func (x *SyncTutorials) GetDeclines() []string { + if x != nil { + return x.Declines + } + return nil +} + +func (x *SyncTutorials) GetAbandons() []string { + if x != nil { + return x.Abandons + } + return nil +} + +func (x *SyncTutorials) GetUpdates() map[string]int64 { + if x != nil { + return x.Updates + } + return nil +} + +// Single unlockable update, either grant or unlock start. +type SyncUnlockableUpdate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Unlockable identifier from config. + UnlockableId string `protobuf:"bytes,1,opt,name=unlockable_id,json=unlockableId,proto3" json:"unlockable_id,omitempty"` + // Time this unlockabled was granted. + CreateTimeSec int64 `protobuf:"varint,2,opt,name=create_time_sec,json=createTimeSec,proto3" json:"create_time_sec,omitempty"` + // Unlock start time, if any. + StartTimeSec int64 `protobuf:"varint,3,opt,name=start_time_sec,json=startTimeSec,proto3" json:"start_time_sec,omitempty"` + // Unlock completion time, if any. + UnlockTimeSec int64 `protobuf:"varint,4,opt,name=unlock_time_sec,json=unlockTimeSec,proto3" json:"unlock_time_sec,omitempty"` +} + +func (x *SyncUnlockableUpdate) Reset() { + *x = SyncUnlockableUpdate{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[251] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncUnlockableUpdate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncUnlockableUpdate) ProtoMessage() {} + +func (x *SyncUnlockableUpdate) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[251] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncUnlockableUpdate.ProtoReflect.Descriptor instead. +func (*SyncUnlockableUpdate) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{251} +} + +func (x *SyncUnlockableUpdate) GetUnlockableId() string { + if x != nil { + return x.UnlockableId + } + return "" +} + +func (x *SyncUnlockableUpdate) GetCreateTimeSec() int64 { + if x != nil { + return x.CreateTimeSec + } + return 0 +} + +func (x *SyncUnlockableUpdate) GetStartTimeSec() int64 { + if x != nil { + return x.StartTimeSec + } + return 0 +} + +func (x *SyncUnlockableUpdate) GetUnlockTimeSec() int64 { + if x != nil { + return x.UnlockTimeSec + } + return 0 +} + +// Input for an offline state sync of unlockables updates. +type SyncUnlockables struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Unlockable instance IDs to remove. + Removes []string `protobuf:"bytes,1,rep,name=removes,proto3" json:"removes,omitempty"` + // Unlockable updates keyed by instance identifier, such as new grants or unlock starts. + Updates map[string]*SyncUnlockableUpdate `protobuf:"bytes,2,rep,name=updates,proto3" json:"updates,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *SyncUnlockables) Reset() { + *x = SyncUnlockables{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[252] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncUnlockables) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncUnlockables) ProtoMessage() {} + +func (x *SyncUnlockables) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[252] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncUnlockables.ProtoReflect.Descriptor instead. +func (*SyncUnlockables) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{252} +} + +func (x *SyncUnlockables) GetRemoves() []string { + if x != nil { + return x.Removes + } + return nil +} + +func (x *SyncUnlockables) GetUpdates() map[string]*SyncUnlockableUpdate { + if x != nil { + return x.Updates + } + return nil +} + +// Single streak state update. +type SyncStreakUpdate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Current progress count for this streak. + Count int64 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` + // Progress count for the current reset. + CountCurrentReset int64 `protobuf:"varint,2,opt,name=count_current_reset,json=countCurrentReset,proto3" json:"count_current_reset,omitempty"` + // Last count that was claimed. + ClaimCount int64 `protobuf:"varint,3,opt,name=claim_count,json=claimCount,proto3" json:"claim_count,omitempty"` + // When updates for this streak were first recorded. + CreateTimeSec int64 `protobuf:"varint,4,opt,name=create_time_sec,json=createTimeSec,proto3" json:"create_time_sec,omitempty"` + // When an update for this streak was most recently recorded. + UpdateTimeSec int64 `protobuf:"varint,5,opt,name=update_time_sec,json=updateTimeSec,proto3" json:"update_time_sec,omitempty"` + // When the last claim for this streak was. + ClaimTimeSec int64 `protobuf:"varint,6,opt,name=claim_time_sec,json=claimTimeSec,proto3" json:"claim_time_sec,omitempty"` + // Record of rewards that have been claimed. + ClaimedRewards []*StreakReward `protobuf:"bytes,7,rep,name=claimed_rewards,json=claimedRewards,proto3" json:"claimed_rewards,omitempty"` +} + +func (x *SyncStreakUpdate) Reset() { + *x = SyncStreakUpdate{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[253] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncStreakUpdate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncStreakUpdate) ProtoMessage() {} + +func (x *SyncStreakUpdate) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[253] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncStreakUpdate.ProtoReflect.Descriptor instead. +func (*SyncStreakUpdate) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{253} +} + +func (x *SyncStreakUpdate) GetCount() int64 { + if x != nil { + return x.Count + } + return 0 +} + +func (x *SyncStreakUpdate) GetCountCurrentReset() int64 { + if x != nil { + return x.CountCurrentReset + } + return 0 +} + +func (x *SyncStreakUpdate) GetClaimCount() int64 { + if x != nil { + return x.ClaimCount + } + return 0 +} + +func (x *SyncStreakUpdate) GetCreateTimeSec() int64 { + if x != nil { + return x.CreateTimeSec + } + return 0 +} + +func (x *SyncStreakUpdate) GetUpdateTimeSec() int64 { + if x != nil { + return x.UpdateTimeSec + } + return 0 +} + +func (x *SyncStreakUpdate) GetClaimTimeSec() int64 { + if x != nil { + return x.ClaimTimeSec + } + return 0 +} + +func (x *SyncStreakUpdate) GetClaimedRewards() []*StreakReward { + if x != nil { + return x.ClaimedRewards + } + return nil +} + +// Input for an offline state sync of streaks updates. +type SyncStreaks struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Streak identifiers to reset. + Resets []string `protobuf:"bytes,1,rep,name=resets,proto3" json:"resets,omitempty"` + // Streak state updates keyed by streak identifier. + Updates map[string]*SyncStreakUpdate `protobuf:"bytes,2,rep,name=updates,proto3" json:"updates,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *SyncStreaks) Reset() { + *x = SyncStreaks{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[254] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncStreaks) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncStreaks) ProtoMessage() {} + +func (x *SyncStreaks) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[254] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncStreaks.ProtoReflect.Descriptor instead. +func (*SyncStreaks) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{254} +} + +func (x *SyncStreaks) GetResets() []string { + if x != nil { + return x.Resets + } + return nil +} + +func (x *SyncStreaks) GetUpdates() map[string]*SyncStreakUpdate { + if x != nil { + return x.Updates + } + return nil +} + +// Input for an offline state sync operation. +type SyncRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Inventory. + Inventory *SyncInventory `protobuf:"bytes,1,opt,name=inventory,proto3" json:"inventory,omitempty"` + // Economy. + Economy *SyncEconomy `protobuf:"bytes,2,opt,name=economy,proto3" json:"economy,omitempty"` + // Achievements. + Achievements *SyncAchievements `protobuf:"bytes,3,opt,name=achievements,proto3" json:"achievements,omitempty"` + // Energy. + Energy *SyncEnergy `protobuf:"bytes,4,opt,name=energy,proto3" json:"energy,omitempty"` + // Event leaderboards. + EventLeaderboards *SyncEventLeaderboards `protobuf:"bytes,5,opt,name=event_leaderboards,json=eventLeaderboards,proto3" json:"event_leaderboards,omitempty"` + // Progressions. + Progressions *SyncProgressions `protobuf:"bytes,6,opt,name=progressions,proto3" json:"progressions,omitempty"` + // Stats. Message reused from standard synchronous stats updates. + Stats *StatUpdateRequest `protobuf:"bytes,7,opt,name=stats,proto3" json:"stats,omitempty"` + // Tutorials. + Tutorials *SyncTutorials `protobuf:"bytes,8,opt,name=tutorials,proto3" json:"tutorials,omitempty"` + // Unlockables. + Unlockables *SyncUnlockables `protobuf:"bytes,9,opt,name=unlockables,proto3" json:"unlockables,omitempty"` + // Streaks. + Streaks *SyncStreaks `protobuf:"bytes,10,opt,name=streaks,proto3" json:"streaks,omitempty"` +} + +func (x *SyncRequest) Reset() { + *x = SyncRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[255] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncRequest) ProtoMessage() {} + +func (x *SyncRequest) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[255] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncRequest.ProtoReflect.Descriptor instead. +func (*SyncRequest) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{255} +} + +func (x *SyncRequest) GetInventory() *SyncInventory { + if x != nil { + return x.Inventory + } + return nil +} + +func (x *SyncRequest) GetEconomy() *SyncEconomy { + if x != nil { + return x.Economy + } + return nil +} + +func (x *SyncRequest) GetAchievements() *SyncAchievements { + if x != nil { + return x.Achievements + } + return nil +} + +func (x *SyncRequest) GetEnergy() *SyncEnergy { + if x != nil { + return x.Energy + } + return nil +} + +func (x *SyncRequest) GetEventLeaderboards() *SyncEventLeaderboards { + if x != nil { + return x.EventLeaderboards + } + return nil +} + +func (x *SyncRequest) GetProgressions() *SyncProgressions { + if x != nil { + return x.Progressions + } + return nil +} + +func (x *SyncRequest) GetStats() *StatUpdateRequest { + if x != nil { + return x.Stats + } + return nil +} + +func (x *SyncRequest) GetTutorials() *SyncTutorials { + if x != nil { + return x.Tutorials + } + return nil +} + +func (x *SyncRequest) GetUnlockables() *SyncUnlockables { + if x != nil { + return x.Unlockables + } + return nil +} + +func (x *SyncRequest) GetStreaks() *SyncStreaks { + if x != nil { + return x.Streaks + } + return nil +} + +// Resulting updates after an offline state sync operation. +// Fields are only populated if the corresponding updated was requested via the sync. +type SyncResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Updated wallet data, if any. + Wallet map[string]int64 `protobuf:"bytes,1,rep,name=wallet,proto3" json:"wallet,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + // Inventory. + Inventory *Inventory `protobuf:"bytes,2,opt,name=inventory,proto3" json:"inventory,omitempty"` + // Achievements. + Achievements *AchievementList `protobuf:"bytes,3,opt,name=achievements,proto3" json:"achievements,omitempty"` + // Energies. + Energy *EnergyList `protobuf:"bytes,4,opt,name=energy,proto3" json:"energy,omitempty"` + // Event leaderboards. + EventLeaderboards []*EventLeaderboard `protobuf:"bytes,5,rep,name=event_leaderboards,json=eventLeaderboards,proto3" json:"event_leaderboards,omitempty"` + // Progressions. + Progressions *ProgressionList `protobuf:"bytes,6,opt,name=progressions,proto3" json:"progressions,omitempty"` + // Stats. + Stats *StatList `protobuf:"bytes,7,opt,name=stats,proto3" json:"stats,omitempty"` + // Tutorials. + Tutorials *TutorialList `protobuf:"bytes,8,opt,name=tutorials,proto3" json:"tutorials,omitempty"` + // Unlockables. + Unlockables *UnlockablesList `protobuf:"bytes,9,opt,name=unlockables,proto3" json:"unlockables,omitempty"` + // The list of active reward modifiers. + ActiveRewardModifiers []*ActiveRewardModifier `protobuf:"bytes,10,rep,name=active_reward_modifiers,json=activeRewardModifiers,proto3" json:"active_reward_modifiers,omitempty"` + // Current server time. + CurrentTimeSec int64 `protobuf:"varint,11,opt,name=current_time_sec,json=currentTimeSec,proto3" json:"current_time_sec,omitempty"` + // Streaks. + Streaks *StreaksList `protobuf:"bytes,12,opt,name=streaks,proto3" json:"streaks,omitempty"` +} + +func (x *SyncResponse) Reset() { + *x = SyncResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_hiro_proto_msgTypes[256] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SyncResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncResponse) ProtoMessage() {} + +func (x *SyncResponse) ProtoReflect() protoreflect.Message { + mi := &file_hiro_proto_msgTypes[256] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncResponse.ProtoReflect.Descriptor instead. +func (*SyncResponse) Descriptor() ([]byte, []int) { + return file_hiro_proto_rawDescGZIP(), []int{256} +} + +func (x *SyncResponse) GetWallet() map[string]int64 { + if x != nil { + return x.Wallet + } + return nil +} + +func (x *SyncResponse) GetInventory() *Inventory { + if x != nil { + return x.Inventory + } + return nil +} + +func (x *SyncResponse) GetAchievements() *AchievementList { + if x != nil { + return x.Achievements + } + return nil +} + +func (x *SyncResponse) GetEnergy() *EnergyList { + if x != nil { + return x.Energy + } + return nil +} + +func (x *SyncResponse) GetEventLeaderboards() []*EventLeaderboard { + if x != nil { + return x.EventLeaderboards + } + return nil +} + +func (x *SyncResponse) GetProgressions() *ProgressionList { + if x != nil { + return x.Progressions + } + return nil +} + +func (x *SyncResponse) GetStats() *StatList { + if x != nil { + return x.Stats + } + return nil +} + +func (x *SyncResponse) GetTutorials() *TutorialList { + if x != nil { + return x.Tutorials + } + return nil +} + +func (x *SyncResponse) GetUnlockables() *UnlockablesList { + if x != nil { + return x.Unlockables + } + return nil +} + +func (x *SyncResponse) GetActiveRewardModifiers() []*ActiveRewardModifier { + if x != nil { + return x.ActiveRewardModifiers + } + return nil +} + +func (x *SyncResponse) GetCurrentTimeSec() int64 { + if x != nil { + return x.CurrentTimeSec + } + return 0 +} + +func (x *SyncResponse) GetStreaks() *StreaksList { + if x != nil { + return x.Streaks + } + return nil +} + +var file_hiro_proto_extTypes = []protoimpl.ExtensionInfo{ + { + ExtendedType: (*descriptorpb.EnumValueOptions)(nil), + ExtensionType: (*string)(nil), + Field: 1000, + Name: "hiro.input", + Tag: "bytes,1000,opt,name=input", + Filename: "hiro.proto", + }, + { + ExtendedType: (*descriptorpb.EnumValueOptions)(nil), + ExtensionType: (*string)(nil), + Field: 1001, + Name: "hiro.output", + Tag: "bytes,1001,opt,name=output", + Filename: "hiro.proto", + }, +} + +// Extension fields to descriptorpb.EnumValueOptions. +var ( + // The input proto message to the Nakama RPC. + // + // optional string input = 1000; + E_Input = &file_hiro_proto_extTypes[0] + // The output proto message of the Nakama RPC. + // + // optional string output = 1001; + E_Output = &file_hiro_proto_extTypes[1] +) + +var File_hiro_proto protoreflect.FileDescriptor + +var file_hiro_proto_rawDesc = []byte{ + 0x0a, 0x0a, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04, 0x68, 0x69, + 0x72, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0x89, 0x02, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x73, 0x74, 0x2e, 0x49, 0x74, 0x65, + 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x45, + 0x0a, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x73, 0x74, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x69, 0x65, 0x73, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x3d, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xec, + 0x0a, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x42, 0x0a, 0x06, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, + 0x29, 0x0a, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x43, 0x6f, 0x73, 0x74, 0x52, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, + 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x22, + 0x0a, 0x0c, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x12, 0x49, 0x0a, 0x09, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x5f, 0x6d, 0x69, 0x6e, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x4d, 0x69, 0x6e, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x08, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x4d, 0x69, 0x6e, 0x12, 0x49, 0x0a, + 0x09, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x4d, 0x61, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x4d, 0x61, 0x78, 0x12, 0x49, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x74, + 0x73, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x73, 0x4d, 0x69, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x73, + 0x4d, 0x69, 0x6e, 0x12, 0x49, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x6d, 0x61, 0x78, + 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, + 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x4d, 0x61, 0x78, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x74, 0x61, 0x74, 0x73, 0x4d, 0x61, 0x78, 0x12, 0x4c, + 0x0a, 0x0a, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x09, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, 0x69, 0x6e, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x09, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, 0x69, 0x6e, 0x12, 0x4c, 0x0a, 0x0a, + 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2d, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, 0x61, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x09, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, 0x61, 0x78, 0x12, 0x52, 0x0a, 0x0c, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2f, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x69, 0x6e, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x69, 0x6e, 0x12, 0x52, + 0x0a, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x0c, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, + 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x61, 0x78, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x4d, + 0x61, 0x78, 0x1a, 0x39, 0x0a, 0x0b, 0x43, 0x6f, 0x75, 0x6e, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, + 0x0d, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x4d, 0x69, 0x6e, 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, 0x03, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, 0x49, 0x74, + 0x65, 0x6d, 0x73, 0x4d, 0x61, 0x78, 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, 0x03, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x73, + 0x4d, 0x69, 0x6e, 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, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x73, 0x4d, 0x61, 0x78, + 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, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, 0x69, 0x6e, 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, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x3c, 0x0a, 0x0e, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, 0x61, 0x78, 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, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3e, 0x0a, + 0x10, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x69, 0x6e, 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, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3e, 0x0a, + 0x10, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x4d, 0x61, 0x78, 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, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd8, 0x01, + 0x0a, 0x1d, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, + 0x36, 0x0a, 0x06, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1e, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x06, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x12, 0x42, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, + 0x72, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x3b, 0x0a, 0x06, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x52, 0x06, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x22, 0xa9, 0x05, 0x0a, 0x0b, 0x50, 0x72, 0x6f, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, + 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x35, 0x0a, 0x06, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x12, 0x60, 0x0a, 0x15, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, + 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2b, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x61, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x69, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x12, + 0x49, 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, + 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x0d, 0x70, 0x72, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x54, 0x0a, 0x13, 0x75, 0x6e, + 0x6d, 0x65, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, + 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x12, 0x75, 0x6e, + 0x6d, 0x65, 0x74, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x33, 0x0a, 0x15, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x14, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, + 0x6e, 0x74, 0x5f, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0f, 0x70, 0x65, 0x72, 0x6d, 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, + 0x1a, 0x39, 0x0a, 0x0b, 0x43, 0x6f, 0x75, 0x6e, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x47, 0x0a, 0x19, 0x41, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x69, 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, 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, 0x97, 0x02, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x31, 0x0a, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x74, 0x61, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3a, 0x0a, 0x06, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x44, + 0x65, 0x6c, 0x74, 0x61, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x49, 0x0a, 0x0d, 0x70, 0x72, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x23, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x0d, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x43, 0x6f, 0x75, 0x6e, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc0, + 0x02, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x2e, + 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x39, 0x0a, 0x06, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x06, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x73, 0x1a, 0x52, 0x0a, 0x11, 0x50, 0x72, + 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 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, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x11, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x51, + 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x74, 0x61, 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, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0xbe, 0x01, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x0c, 0x70, + 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2d, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, + 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x52, + 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 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, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, + 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0x2c, 0x0a, 0x1a, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x22, 0xa9, 0x01, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x42, 0x0a, + 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, + 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x43, 0x6f, 0x75, 0x6e, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2b, 0x0a, 0x17, + 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x65, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x6c, 0x0a, 0x0a, 0x53, 0x74, 0x61, + 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 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, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x34, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x69, 0x0a, 0x11, 0x53, 0x74, 0x61, 0x74, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x06, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x06, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x12, 0x2a, 0x0a, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, + 0x74, 0x61, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x22, 0xb8, 0x02, 0x0a, 0x04, 0x53, 0x74, 0x61, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, + 0x6d, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x03, 0x6d, 0x61, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x72, 0x73, 0x74, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x66, 0x69, 0x72, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, + 0x61, 0x73, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x6c, 0x61, 0x73, 0x74, 0x12, + 0x4c, 0x0a, 0x15, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x14, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x22, 0x84, 0x02, + 0x0a, 0x08, 0x53, 0x74, 0x61, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x06, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x12, 0x35, + 0x0a, 0x07, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1b, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x2e, + 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x1a, 0x45, 0x0a, 0x0b, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x46, 0x0a, 0x0c, + 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x20, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, + 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0xdb, 0x02, 0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x63, 0x6b, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, + 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, + 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, + 0x6f, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, + 0x6f, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x6f, 0x6e, + 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x4f, + 0x6e, 0x65, 0x12, 0x1e, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x74, 0x77, + 0x6f, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x54, + 0x77, 0x6f, 0x22, 0x92, 0x02, 0x0a, 0x12, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x65, + 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x75, 0x73, 0x68, 0x5f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x10, 0x70, 0x75, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x6e, 0x64, + 0x72, 0x6f, 0x69, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x75, 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x5f, 0x69, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x75, + 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6f, 0x73, 0x12, 0x4b, 0x0a, 0x0b, 0x70, 0x72, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x29, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x65, + 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x72, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x70, 0x72, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x1a, 0x3e, 0x0a, 0x10, 0x50, 0x72, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 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, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa6, 0x03, 0x0a, 0x13, 0x52, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x74, 0x65, 0x6d, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x5c, 0x0a, 0x11, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, + 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2f, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x49, 0x6e, + 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x10, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x69, 0x65, 0x73, 0x12, 0x5f, 0x0a, 0x12, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x70, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x30, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x76, + 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, + 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x11, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x69, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x49, 0x64, 0x1a, 0x43, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 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, 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, 0x1a, 0x44, 0x0a, 0x16, 0x4e, 0x75, + 0x6d, 0x65, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0x93, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x65, 0x72, 0x67, + 0x79, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0b, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x12, 0x16, + 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, + 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x89, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x21, 0x0a, 0x0c, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x65, 0x63, 0x22, 0xb4, 0x01, 0x0a, 0x14, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, + 0x73, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x20, 0x0a, 0x0c, 0x65, 0x6e, 0x64, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x65, + 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x22, 0xe8, 0x05, 0x0a, 0x10, 0x54, 0x65, + 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x37, + 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x46, 0x0a, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, + 0x40, 0x0a, 0x08, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x69, + 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x69, 0x65, + 0x73, 0x12, 0x45, 0x0a, 0x10, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, + 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0f, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, + 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x3f, 0x0a, 0x10, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x67, 0x72, 0x61, + 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0c, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, + 0x50, 0x0a, 0x0e, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, + 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, + 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x0d, 0x69, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x73, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x43, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, 0x45, 0x6e, + 0x65, 0x72, 0x67, 0x69, 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, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5b, 0x0a, 0x12, 0x49, 0x74, 0x65, 0x6d, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 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, + 0x2f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x76, 0x65, + 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc8, 0x05, 0x0a, 0x0a, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x12, 0x31, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x40, 0x0a, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x43, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x10, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x4c, 0x0a, 0x17, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x52, 0x15, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x6f, + 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x67, 0x72, 0x61, 0x6e, 0x74, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0c, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x4a, 0x0a, + 0x0e, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, + 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x69, 0x74, 0x65, 0x6d, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x15, 0x74, 0x6f, 0x5f, + 0x6d, 0x61, 0x69, 0x6c, 0x62, 0x6f, 0x78, 0x5f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, 0x73, + 0x65, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x74, 0x6f, 0x4d, 0x61, 0x69, 0x6c, + 0x62, 0x6f, 0x78, 0x45, 0x78, 0x70, 0x69, 0x72, 0x79, 0x53, 0x65, 0x63, 0x12, 0x3b, 0x0a, 0x0d, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x0c, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, + 0x6d, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x1a, 0x5b, 0x0a, 0x12, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 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, 0x2f, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, + 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0x9c, 0x06, 0x0a, 0x06, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x69, 0x74, + 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x3c, 0x0a, 0x0a, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x43, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x36, 0x0a, 0x08, 0x65, 0x6e, 0x65, 0x72, 0x67, + 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, 0x12, + 0x45, 0x0a, 0x10, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, 0x6f, 0x64, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0f, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, 0x6f, 0x64, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x3f, 0x0a, 0x10, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x6f, + 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x6f, + 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x67, 0x72, 0x61, 0x6e, 0x74, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0c, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x46, 0x0a, + 0x0e, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, + 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x69, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x15, 0x74, 0x6f, 0x5f, 0x6d, 0x61, 0x69, 0x6c, + 0x62, 0x6f, 0x78, 0x5f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x74, 0x6f, 0x4d, 0x61, 0x69, 0x6c, 0x62, 0x6f, 0x78, 0x45, + 0x78, 0x70, 0x69, 0x72, 0x79, 0x53, 0x65, 0x63, 0x12, 0x31, 0x0a, 0x0b, 0x74, 0x65, 0x61, 0x6d, + 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, + 0x0a, 0x74, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x1a, 0x38, 0x0a, 0x0a, 0x49, + 0x74, 0x65, 0x6d, 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, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x69, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x69, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x5b, 0x0a, 0x12, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 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, 0x2f, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x49, + 0x74, 0x65, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x34, + 0x0a, 0x0a, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x07, + 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, + 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x72, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x73, 0x22, 0x52, 0x0a, 0x10, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, + 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, + 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x12, 0x1a, 0x0a, 0x08, + 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x22, 0x52, 0x0a, 0x10, 0x52, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x10, 0x0a, 0x03, + 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x10, + 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6d, 0x61, 0x78, + 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x08, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x22, 0x53, 0x0a, 0x11, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x55, 0x49, 0x6e, 0x74, 0x36, + 0x34, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, + 0x6d, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x03, 0x6d, 0x61, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, + 0x65, 0x22, 0x53, 0x0a, 0x11, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, + 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x75, + 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x6d, 0x75, + 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x22, 0x3e, 0x0a, 0x24, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, + 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, + 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xf8, 0x01, 0x0a, 0x1e, 0x41, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x4b, 0x0a, 0x07, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, + 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, + 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x1a, 0x66, 0x0a, 0x0c, 0x4f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 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, 0x40, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0xcf, 0x03, 0x0a, 0x14, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x2c, 0x0a, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x74, 0x36, + 0x34, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x60, 0x0a, 0x12, 0x6e, 0x75, 0x6d, 0x65, + 0x72, 0x69, 0x63, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x49, 0x74, 0x65, 0x6d, + 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, + 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x11, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x49, 0x74, 0x65, + 0x6d, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x5d, 0x0a, 0x16, 0x4e, 0x75, 0x6d, + 0x65, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 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, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x69, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 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, 0x3a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x7a, 0x0a, 0x17, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x65, 0x74, 0x12, 0x2c, + 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, + 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, + 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x73, 0x12, 0x10, 0x0a, + 0x03, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x73, 0x65, 0x74, 0x22, + 0x48, 0x0a, 0x18, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x73, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x74, + 0x36, 0x34, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x46, 0x0a, 0x16, 0x41, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x65, + 0x72, 0x67, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x22, 0xb6, 0x01, 0x0a, 0x1e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, 0x6f, 0x64, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x6e, + 0x67, 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3a, + 0x0a, 0x0c, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x0b, 0x64, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x22, 0xca, 0x01, 0x0a, 0x1e, 0x41, + 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2c, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, + 0x6e, 0x74, 0x36, 0x34, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3a, 0x0a, 0x0c, 0x64, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, + 0x61, 0x6e, 0x67, 0x65, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x52, 0x0b, 0x64, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x22, 0xfb, 0x05, 0x0a, 0x18, 0x41, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3f, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x73, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x3a, 0x0a, 0x09, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x73, 0x65, + 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, + 0x49, 0x74, 0x65, 0x6d, 0x53, 0x65, 0x74, 0x52, 0x08, 0x69, 0x74, 0x65, 0x6d, 0x53, 0x65, 0x74, + 0x73, 0x12, 0x4e, 0x0a, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, + 0x73, 0x12, 0x48, 0x0a, 0x08, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x73, 0x2e, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x08, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, 0x12, 0x4f, 0x0a, 0x10, 0x65, + 0x6e, 0x65, 0x72, 0x67, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x65, + 0x72, 0x67, 0x79, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0f, 0x65, 0x6e, 0x65, + 0x72, 0x67, 0x79, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x4f, 0x0a, 0x10, + 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, + 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0f, 0x72, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, + 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x77, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x1a, 0x54, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 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, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x49, 0x74, 0x65, 0x6d, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5d, 0x0a, 0x0f, 0x43, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 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, 0x34, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1e, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x59, 0x0a, 0x0d, 0x45, 0x6e, + 0x65, 0x72, 0x67, 0x69, 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, 0x32, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x91, 0x04, 0x0a, 0x1c, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x43, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x3a, 0x0a, 0x09, 0x69, + 0x74, 0x65, 0x6d, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, + 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x65, 0x74, 0x52, 0x08, 0x69, + 0x74, 0x65, 0x6d, 0x53, 0x65, 0x74, 0x73, 0x12, 0x52, 0x0a, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x65, 0x61, 0x6d, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x2e, + 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x4f, 0x0a, 0x10, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x0f, 0x72, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x77, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x1a, 0x54, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 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, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x49, 0x74, 0x65, 0x6d, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5d, 0x0a, 0x0f, 0x43, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 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, + 0x34, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x82, 0x02, 0x0a, 0x1a, 0x41, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x67, 0x75, 0x61, 0x72, + 0x61, 0x6e, 0x74, 0x65, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0a, 0x67, 0x75, + 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x65, 0x64, 0x12, 0x3a, 0x0a, 0x08, 0x77, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x08, 0x77, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x6f, 0x6c, 0x6c, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x52, 0x6f, 0x6c, 0x6c, + 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x57, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x70, 0x65, + 0x61, 0x74, 0x5f, 0x72, 0x6f, 0x6c, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, + 0x6d, 0x61, 0x78, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x73, 0x22, 0xfe, + 0x02, 0x0a, 0x14, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x65, 0x61, 0x6d, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x42, 0x0a, 0x0a, 0x67, 0x75, 0x61, 0x72, 0x61, + 0x6e, 0x74, 0x65, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x65, 0x61, 0x6d, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x0a, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x65, 0x64, 0x12, 0x3e, 0x0a, 0x08, 0x77, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x65, + 0x61, 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x08, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, + 0x61, 0x78, 0x5f, 0x72, 0x6f, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, + 0x6d, 0x61, 0x78, 0x52, 0x6f, 0x6c, 0x6c, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6d, + 0x61, 0x78, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x5f, 0x72, 0x6f, 0x6c, 0x6c, 0x73, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x52, 0x6f, 0x6c, 0x6c, 0x73, 0x12, 0x31, 0x0a, 0x15, 0x74, 0x6f, 0x5f, 0x6d, 0x61, 0x69, 0x6c, + 0x62, 0x6f, 0x78, 0x5f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x74, 0x6f, 0x4d, 0x61, 0x69, 0x6c, 0x62, 0x6f, 0x78, 0x45, + 0x78, 0x70, 0x69, 0x72, 0x79, 0x53, 0x65, 0x63, 0x12, 0x45, 0x0a, 0x0d, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x54, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x73, 0x52, 0x0c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x22, + 0xe8, 0x02, 0x0a, 0x10, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, + 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0a, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, + 0x74, 0x65, 0x65, 0x64, 0x12, 0x3a, 0x0a, 0x08, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x08, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, + 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x6f, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x52, 0x6f, 0x6c, 0x6c, 0x73, 0x12, 0x21, 0x0a, + 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x5f, 0x72, + 0x6f, 0x6c, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6d, 0x61, 0x78, 0x52, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x52, 0x6f, 0x6c, 0x6c, 0x73, 0x12, 0x31, 0x0a, 0x15, 0x74, 0x6f, + 0x5f, 0x6d, 0x61, 0x69, 0x6c, 0x62, 0x6f, 0x78, 0x5f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, + 0x73, 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x74, 0x6f, 0x4d, 0x61, 0x69, + 0x6c, 0x62, 0x6f, 0x78, 0x45, 0x78, 0x70, 0x69, 0x72, 0x79, 0x53, 0x65, 0x63, 0x12, 0x3b, 0x0a, + 0x0b, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x0a, + 0x74, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x22, 0x5c, 0x0a, 0x0e, 0x49, 0x6e, + 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x24, 0x0a, 0x06, + 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x06, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x5f, 0x73, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6c, 0x61, 0x69, + 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x22, 0xd8, 0x05, 0x0a, 0x09, 0x49, 0x6e, 0x63, + 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x12, 0x27, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, + 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, + 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x5f, 0x73, 0x65, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x78, 0x70, + 0x69, 0x72, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, + 0x63, 0x12, 0x43, 0x0a, 0x11, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x73, 0x52, 0x10, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x3d, 0x0a, 0x0e, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, + 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x0d, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x31, 0x0a, 0x14, 0x75, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x65, 0x64, 0x5f, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x0b, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x13, 0x75, 0x6e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x52, 0x65, + 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x26, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, + 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, + 0x33, 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1b, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, + 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x63, 0x6c, + 0x61, 0x69, 0x6d, 0x73, 0x12, 0x4c, 0x0a, 0x15, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0f, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x14, 0x61, 0x64, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x1a, 0x4f, 0x0a, 0x0b, 0x43, 0x6c, 0x61, 0x69, 0x6d, 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, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, + 0x69, 0x76, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x40, 0x0a, 0x0d, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x0a, 0x69, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x52, 0x0a, 0x69, 0x6e, 0x63, 0x65, 0x6e, + 0x74, 0x69, 0x76, 0x65, 0x73, 0x22, 0xd0, 0x03, 0x0a, 0x0d, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, + 0x69, 0x76, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, + 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x12, 0x27, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x13, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, + 0x6e, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, + 0x65, 0x72, 0x12, 0x43, 0x0a, 0x11, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, + 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x10, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x61, 0x6e, 0x5f, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x61, 0x6e, 0x43, + 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x24, 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x52, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, + 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x78, + 0x70, 0x69, 0x72, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0c, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, + 0x65, 0x63, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6c, 0x61, 0x69, + 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x22, 0x2e, 0x0a, 0x1c, 0x49, 0x6e, 0x63, 0x65, + 0x6e, 0x74, 0x69, 0x76, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x32, 0x0a, 0x1c, 0x49, 0x6e, 0x63, 0x65, + 0x6e, 0x74, 0x69, 0x76, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x56, 0x0a, 0x1b, + 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, + 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, + 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x73, 0x22, 0x32, 0x0a, 0x1c, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, + 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x34, 0x0a, 0x1e, 0x49, 0x6e, 0x63, 0x65, + 0x6e, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6c, + 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0xd5, + 0x03, 0x0a, 0x16, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, + 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, + 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6f, 0x70, 0x65, 0x6e, + 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, + 0x26, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x73, + 0x65, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, + 0x65, 0x6c, 0x61, 0x79, 0x53, 0x65, 0x63, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x64, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x12, 0x29, 0x0a, 0x10, 0x6d, 0x61, + 0x78, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6d, 0x61, 0x78, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, + 0x70, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, + 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, + 0x79, 0x12, 0x46, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0b, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x6c, 0x6c, + 0x65, 0x6e, 0x67, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 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, 0x39, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, + 0x6e, 0x67, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, + 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x49, + 0x64, 0x22, 0x3a, 0x0a, 0x15, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x4c, 0x65, + 0x61, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x68, + 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x49, 0x64, 0x22, 0x3a, 0x0a, + 0x15, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, + 0x6e, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x68, + 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x49, 0x64, 0x22, 0x5e, 0x0a, 0x16, 0x43, 0x68, 0x61, + 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 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, 0x61, 0x74, 0x65, 0x67, + 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, + 0x6f, 0x72, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x57, 0x0a, 0x16, 0x43, 0x68, 0x61, + 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x6c, 0x6c, + 0x65, 0x6e, 0x67, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, + 0x65, 0x73, 0x22, 0xce, 0x01, 0x0a, 0x1b, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, + 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, + 0x6e, 0x67, 0x65, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, + 0x75, 0x62, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, + 0x75, 0x62, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x12, 0x3e, 0x0a, 0x1b, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x22, 0x90, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, + 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x72, + 0x61, 0x6e, 0x6b, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x72, + 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x78, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x61, 0x6e, 0x6b, 0x5f, 0x6d, + 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x72, 0x61, 0x6e, 0x6b, 0x4d, 0x69, + 0x6e, 0x12, 0x43, 0x0a, 0x11, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x73, 0x52, 0x10, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x22, 0xfb, 0x02, 0x0a, 0x0e, 0x43, 0x68, 0x61, 0x6c, 0x6c, + 0x65, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, + 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, + 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, + 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, + 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, + 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, + 0x26, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, + 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x61, 0x6e, 0x6b, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x72, 0x61, 0x6e, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x73, + 0x63, 0x6f, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x75, 0x62, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1d, 0x0a, + 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x43, + 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x22, 0x9f, 0x08, 0x0a, 0x09, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, + 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x73, 0x63, 0x65, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x73, 0x63, + 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x6f, 0x72, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x5f, 0x73, 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x6c, 0x61, 0x69, + 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0c, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x20, + 0x0a, 0x0c, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, + 0x12, 0x3c, 0x0a, 0x0c, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x73, + 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x43, 0x68, + 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, + 0x72, 0x52, 0x0b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, 0x72, 0x73, 0x12, 0x43, + 0x0a, 0x11, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x73, 0x52, 0x10, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x73, 0x12, 0x5e, 0x0a, 0x15, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, + 0x6e, 0x67, 0x65, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x61, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x69, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x73, + 0x69, 0x7a, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x53, 0x69, + 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x5f, 0x6e, 0x75, 0x6d, 0x5f, 0x73, 0x63, + 0x6f, 0x72, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x4e, 0x75, + 0x6d, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, + 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x43, 0x68, + 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x06, 0x73, 0x63, + 0x6f, 0x72, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x1b, 0x0a, 0x09, 0x63, + 0x61, 0x6e, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, + 0x63, 0x61, 0x6e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x2a, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x43, + 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x15, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x52, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, + 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, + 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x17, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x19, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x43, + 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x1a, 0x47, 0x0a, 0x19, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 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, + 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, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 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, 0x57, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, + 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, + 0x0a, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x12, 0x1f, + 0x0a, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x22, + 0x59, 0x0a, 0x13, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, + 0x6e, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x68, + 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x69, 0x74, + 0x68, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, + 0x77, 0x69, 0x74, 0x68, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x22, 0x41, 0x0a, 0x0e, 0x43, 0x68, + 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x0a, + 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0f, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, + 0x65, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x73, 0x22, 0x3c, 0x0a, + 0x16, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x4d, 0x61, 0x78, 0x4d, 0x69, 0x6e, + 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x78, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x22, 0x4b, 0x0a, 0x17, 0x43, + 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x4d, 0x69, 0x6e, 0x4d, 0x61, 0x78, 0x44, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x65, + 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x63, 0x12, + 0x17, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x06, 0x6d, 0x61, 0x78, 0x53, 0x65, 0x63, 0x22, 0xfb, 0x03, 0x0a, 0x11, 0x43, 0x68, 0x61, + 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x3c, + 0x0a, 0x0c, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x6c, + 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, 0x72, 0x52, + 0x0b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, 0x72, 0x73, 0x12, 0x36, 0x0a, 0x07, + 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x4d, 0x61, + 0x78, 0x4d, 0x69, 0x6e, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x52, 0x07, 0x70, 0x6c, 0x61, + 0x79, 0x65, 0x72, 0x73, 0x12, 0x39, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x43, 0x68, + 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x4d, 0x69, 0x6e, 0x4d, 0x61, 0x78, 0x44, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x26, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x6d, + 0x61, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, + 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x61, 0x78, 0x12, 0x22, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x5f, 0x6e, + 0x75, 0x6d, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, + 0x6d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, + 0x73, 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, + 0x61, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x66, 0x0a, 0x15, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x08, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x6c, + 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x41, 0x64, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x47, 0x0a, + 0x19, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, + 0x72, 0x74, 0x69, 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, 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, 0xb2, 0x01, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x6c, 0x6c, + 0x65, 0x6e, 0x67, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x45, 0x0a, + 0x09, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x27, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, + 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x73, 0x1a, 0x55, 0x0a, 0x0e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 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, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x43, + 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x57, 0x0a, 0x14, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x63, 0x6f, 0x72, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, + 0x72, 0x69, 0x65, 0x73, 0x22, 0x25, 0x0a, 0x13, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x47, 0x65, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xb6, 0x01, 0x0a, 0x16, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x73, 0x75, 0x62, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, + 0x73, 0x75, 0x62, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x3e, 0x0a, 0x1b, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x63, 0x6f, 0x6e, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x22, 0x27, 0x0a, 0x15, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x42, 0x0a, + 0x14, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x52, 0x6f, 0x6c, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x22, 0xd6, 0x02, 0x0a, 0x15, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, + 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, + 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, + 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, + 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, + 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, + 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x5f, 0x73, 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x61, 0x6e, + 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x72, 0x61, 0x6e, 0x6b, 0x12, 0x14, 0x0a, + 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x63, + 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x75, 0x62, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, + 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x1a, + 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xcc, 0x01, 0x0a, 0x1a, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, + 0x08, 0x72, 0x61, 0x6e, 0x6b, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x07, 0x72, 0x61, 0x6e, 0x6b, 0x4d, 0x61, 0x78, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x61, 0x6e, 0x6b, + 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x72, 0x61, 0x6e, 0x6b, + 0x4d, 0x69, 0x6e, 0x12, 0x43, 0x0a, 0x11, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x10, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x69, 0x65, 0x72, + 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, + 0x69, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x22, 0x62, 0x0a, 0x1b, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, 0x72, 0x73, 0x12, 0x43, 0x0a, 0x0c, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, + 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, 0x72, + 0x52, 0x0b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, 0x72, 0x73, 0x22, 0x77, 0x0a, + 0x1a, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, + 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, + 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x65, 0x6d, + 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x64, 0x65, 0x6d, + 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, + 0x69, 0x64, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x65, 0x6d, 0x6f, + 0x74, 0x65, 0x49, 0x64, 0x6c, 0x65, 0x22, 0xe5, 0x0a, 0x0a, 0x10, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x1c, 0x0a, + 0x09, 0x61, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x09, 0x61, 0x73, 0x63, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x65, 0x72, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x69, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0e, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, + 0x63, 0x12, 0x20, 0x0a, 0x0c, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, + 0x63, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, + 0x53, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x65, 0x78, + 0x70, 0x69, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x43, 0x0a, 0x11, 0x61, + 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x10, + 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, + 0x12, 0x4a, 0x0a, 0x0c, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x73, + 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x2e, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x0b, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, 0x72, 0x73, 0x12, 0x4a, 0x0a, 0x0c, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x7a, 0x6f, 0x6e, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x6c, 0x61, 0x69, + 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0c, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x24, + 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, + 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x06, 0x72, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x12, 0x65, 0x0a, 0x15, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x10, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x2e, 0x41, 0x64, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x12, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, + 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x5f, 0x6e, 0x75, 0x6d, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, + 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x14, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, + 0x06, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x61, 0x6e, 0x5f, 0x63, 0x6c, 0x61, 0x69, + 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x61, 0x6e, 0x43, 0x6c, 0x61, 0x69, + 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x61, 0x6e, 0x5f, 0x72, 0x6f, 0x6c, 0x6c, 0x18, 0x17, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x61, 0x6e, 0x52, 0x6f, 0x6c, 0x6c, 0x12, 0x4c, 0x0a, 0x15, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, + 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x52, 0x14, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, + 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x19, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, + 0x65, 0x53, 0x65, 0x63, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x68, 0x6f, 0x72, 0x74, 0x5f, 0x69, + 0x64, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, 0x68, 0x6f, 0x72, 0x74, 0x49, + 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x18, + 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x49, 0x64, + 0x1a, 0x61, 0x0a, 0x10, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, 0x72, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x37, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, 0x72, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x60, 0x0a, 0x10, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5a, 0x6f, 0x6e, + 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, + 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x47, 0x0a, 0x19, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 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, 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, 0x5a, + 0x0a, 0x11, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, + 0x72, 0x64, 0x73, 0x12, 0x45, 0x0a, 0x12, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x11, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x22, 0x55, 0x0a, 0x20, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x44, 0x65, + 0x62, 0x75, 0x67, 0x46, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x21, + 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x22, 0xdd, 0x01, 0x0a, 0x28, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x44, 0x65, 0x62, 0x75, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, + 0x6d, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, + 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6d, 0x69, 0x6e, + 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6d, + 0x61, 0x78, 0x12, 0x37, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x73, + 0x75, 0x62, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0b, 0x73, 0x75, 0x62, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x4d, 0x69, 0x6e, 0x12, 0x21, + 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x75, 0x62, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x4d, 0x61, + 0x78, 0x22, 0x6c, 0x0a, 0x1a, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x44, 0x6f, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x12, + 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1f, + 0x0a, 0x0b, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, + 0xb9, 0x06, 0x0a, 0x0f, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x44, 0x6f, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, + 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0a, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, + 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x20, 0x0a, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x26, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, + 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x56, 0x0a, 0x1b, 0x72, 0x65, 0x63, 0x69, + 0x70, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, + 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x19, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, + 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, + 0x12, 0x3d, 0x0a, 0x1b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x18, 0x75, 0x73, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x44, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x73, 0x18, + 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x63, 0x6f, + 0x6e, 0x6f, 0x6d, 0x79, 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x5a, 0x0a, 0x1d, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x73, 0x52, 0x1b, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, + 0x72, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x73, 0x12, 0x39, 0x0a, 0x11, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x10, 0x72, 0x65, 0x63, 0x69, + 0x70, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x64, 0x0a, 0x15, + 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, + 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, + 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x61, 0x64, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x1a, 0x47, 0x0a, 0x19, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 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, 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, 0x61, 0x0a, 0x12, 0x45, + 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, + 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x31, 0x0a, 0x08, 0x64, + 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x44, 0x6f, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4b, + 0x0a, 0x14, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x09, 0x64, 0x6f, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x09, 0x64, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xad, 0x01, 0x0a, 0x22, + 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x12, 0x4c, 0x0a, 0x06, 0x64, 0x6f, 0x6e, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, + 0x79, 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2e, 0x44, 0x6f, 0x6e, + 0x6f, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x64, 0x6f, 0x6e, 0x6f, 0x72, 0x73, + 0x1a, 0x39, 0x0a, 0x0b, 0x44, 0x6f, 0x6e, 0x6f, 0x72, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf8, 0x01, 0x0a, 0x1b, + 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x64, + 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0b, 0x64, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x4e, + 0x0a, 0x09, 0x64, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x30, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, + 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x09, 0x64, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x66, + 0x0a, 0x0e, 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 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, 0x3e, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x28, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, + 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8c, 0x02, 0x0a, 0x1b, 0x45, 0x63, 0x6f, 0x6e, 0x6f, + 0x6d, 0x79, 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x38, 0x0a, 0x09, 0x64, 0x6f, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x09, 0x64, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x5e, 0x0a, 0x0f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x2e, 0x43, 0x6c, 0x61, + 0x69, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x0e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, + 0x1a, 0x53, 0x0a, 0x13, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, + 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, 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x56, 0x0a, 0x1a, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, + 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, + 0x64, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x64, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x2d, 0x0a, + 0x19, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x39, 0x0a, 0x16, + 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x6f, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x6f, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0xd6, 0x01, 0x0a, 0x1a, 0x45, 0x63, 0x6f, 0x6e, + 0x6f, 0x6d, 0x79, 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x55, 0x73, + 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x5a, 0x0a, 0x0e, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x64, + 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, + 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x44, 0x6f, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, + 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x1a, 0x5c, 0x0a, 0x12, 0x55, 0x73, 0x65, 0x72, 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 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, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0xbb, 0x01, 0x0a, 0x18, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x4c, 0x69, 0x73, 0x74, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x4e, 0x0a, + 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2e, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, + 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x73, + 0x74, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x10, 0x0a, + 0x03, 0x73, 0x6b, 0x75, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x6b, 0x75, 0x1a, + 0x3d, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc7, + 0x03, 0x0a, 0x14, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, + 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, + 0x6f, 0x72, 0x79, 0x12, 0x32, 0x0a, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, + 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x73, + 0x74, 0x52, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, + 0x11, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, + 0x52, 0x10, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x73, 0x12, 0x69, 0x0a, 0x15, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x34, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, + 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x41, 0x64, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x20, 0x0a, + 0x0b, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0b, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x1a, + 0x47, 0x0a, 0x19, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, + 0x70, 0x65, 0x72, 0x74, 0x69, 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, 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, 0xc5, 0x02, 0x0a, 0x14, 0x45, 0x63, 0x6f, + 0x6e, 0x6f, 0x6d, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x24, 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, + 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x43, 0x0a, 0x11, 0x61, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x10, 0x61, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x69, 0x0a, 0x15, + 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, + 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6c, + 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x14, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, + 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x47, 0x0a, 0x19, 0x41, 0x64, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 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, 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, 0x99, 0x03, 0x0a, 0x0b, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x3b, 0x0a, 0x0b, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x63, 0x6f, + 0x6e, 0x6f, 0x6d, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x74, 0x65, + 0x6d, 0x52, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x3a, 0x0a, + 0x0a, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, + 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x70, + 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3e, 0x0a, 0x09, 0x64, 0x6f, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x2e, + 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, + 0x64, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x52, 0x0a, 0x17, 0x61, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x6f, + 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x15, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x28, 0x0a, + 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, + 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x1a, 0x53, 0x0a, 0x0e, 0x44, 0x6f, 0x6e, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 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, 0x2b, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x80, 0x06, 0x0a, + 0x0d, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, + 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x18, 0x05, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x08, 0x69, 0x74, 0x65, 0x6d, 0x53, 0x65, 0x74, 0x73, 0x12, 0x14, 0x0a, + 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1e, + 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x52, + 0x0a, 0x19, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x5f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x17, 0x63, 0x6f, 0x6e, 0x73, 0x75, + 0x6d, 0x65, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x73, 0x12, 0x56, 0x0a, 0x11, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x72, 0x6f, + 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, + 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x74, + 0x65, 0x6d, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x59, 0x0a, 0x12, 0x6e, 0x75, + 0x6d, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, + 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x49, 0x6e, + 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x4e, 0x75, 0x6d, 0x65, + 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x11, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, + 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x6f, 0x77, 0x6e, 0x65, 0x64, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6f, + 0x77, 0x6e, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x53, 0x65, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x49, 0x64, 0x1a, 0x43, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 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, + 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, 0x1a, 0x44, 0x0a, 0x16, 0x4e, 0x75, 0x6d, + 0x65, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0x3b, 0x0a, 0x14, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x74, 0x65, 0x6d, 0x5f, + 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x69, 0x74, 0x65, 0x6d, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x22, 0x8f, 0x01, 0x0a, + 0x15, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x49, 0x6e, 0x76, + 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xfd, + 0x02, 0x0a, 0x1d, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, + 0x12, 0x66, 0x0a, 0x11, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, + 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, + 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x69, 0x0a, 0x12, 0x6e, 0x75, 0x6d, 0x65, + 0x72, 0x69, 0x63, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x49, 0x6e, 0x76, 0x65, + 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x50, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, + 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x11, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x69, 0x65, 0x73, 0x1a, 0x43, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, + 0x70, 0x65, 0x72, 0x74, 0x69, 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, 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, 0x1a, 0x44, 0x0a, 0x16, 0x4e, 0x75, 0x6d, 0x65, + 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd9, + 0x01, 0x0a, 0x1b, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x55, + 0x0a, 0x0c, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x49, 0x6e, 0x76, 0x65, + 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x69, 0x74, 0x65, 0x6d, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x73, 0x1a, 0x63, 0x0a, 0x10, 0x49, 0x74, 0x65, 0x6d, 0x55, 0x70, 0x64, + 0x61, 0x74, 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, 0x39, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x49, 0x74, 0x65, 0x6d, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8c, 0x01, 0x0a, 0x09, 0x49, + 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x49, + 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x4d, 0x0a, 0x0a, 0x49, 0x74, + 0x65, 0x6d, 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, 0x29, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xbf, 0x02, 0x0a, 0x17, 0x49, 0x6e, + 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x49, 0x6e, 0x76, 0x65, + 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x76, 0x65, 0x72, 0x63, 0x6f, 0x6e, + 0x73, 0x75, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6f, 0x76, 0x65, 0x72, + 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x12, 0x4a, 0x0a, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x73, 0x75, + 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x73, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, + 0x0e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x91, 0x03, 0x0a, 0x17, + 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x2d, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x65, 0x6e, + 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x09, 0x69, 0x6e, 0x76, + 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x44, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x49, + 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x5d, 0x0a, 0x10, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x49, 0x6e, + 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x73, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x1a, 0x4c, 0x0a, 0x0c, 0x52, + 0x65, 0x77, 0x61, 0x72, 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, 0x26, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x54, 0x0a, 0x14, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 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, 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0x40, 0x0a, 0x1b, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, + 0x0a, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, + 0x73, 0x22, 0x43, 0x0a, 0x12, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x6b, 0x12, 0x2d, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x65, 0x6e, + 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x09, 0x69, 0x6e, 0x76, + 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x22, 0x94, 0x01, 0x0a, 0x0d, 0x49, 0x6e, 0x76, 0x65, 0x6e, + 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x49, + 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x49, 0x74, 0x65, + 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x4d, + 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 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, 0x29, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x74, + 0x65, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x99, 0x01, + 0x0a, 0x10, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x64, 0x41, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x75, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x43, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x43, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 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, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x5a, 0x0a, 0x0a, 0x41, 0x75, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x65, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x2c, 0x0a, 0x05, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x75, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x05, + 0x66, 0x69, 0x78, 0x65, 0x64, 0x22, 0xd7, 0x03, 0x0a, 0x23, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x59, 0x0a, + 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x39, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x73, 0x74, 0x2e, 0x43, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x4a, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, + 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, + 0x73, 0x74, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x12, 0x53, 0x0a, 0x08, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x75, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x73, + 0x74, 0x2e, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x08, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x43, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x69, 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, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, + 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x1a, 0x3b, 0x0a, 0x0d, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x69, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0x74, 0x0a, 0x24, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x64, 0x49, 0x6e, + 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x2c, 0x0a, 0x05, 0x66, 0x69, 0x78, 0x65, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x75, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x05, + 0x66, 0x69, 0x78, 0x65, 0x64, 0x22, 0xbe, 0x03, 0x0a, 0x18, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, + 0x65, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x12, 0x4c, 0x0a, 0x0c, 0x6c, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, + 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x69, + 0x6e, 0x67, 0x43, 0x6f, 0x73, 0x74, 0x52, 0x0b, 0x6c, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x43, + 0x6f, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x09, 0x62, 0x69, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x75, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x08, + 0x62, 0x69, 0x64, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x4f, 0x0a, 0x0d, 0x62, 0x69, 0x64, 0x5f, + 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, + 0x69, 0x64, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0c, 0x62, 0x69, 0x64, + 0x49, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x17, 0x65, 0x78, 0x74, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, + 0x5f, 0x73, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x65, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x53, 0x65, + 0x63, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, + 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x12, 0x2a, 0x0a, 0x11, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x78, 0x53, + 0x65, 0x63, 0x12, 0x22, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x65, + 0x65, 0x52, 0x03, 0x66, 0x65, 0x65, 0x22, 0x96, 0x02, 0x0a, 0x0f, 0x41, 0x75, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x74, + 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, + 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x08, 0x69, 0x74, 0x65, 0x6d, 0x53, 0x65, 0x74, 0x73, 0x12, 0x45, 0x0a, + 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x25, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x62, 0x69, 0x64, 0x5f, 0x68, 0x69, 0x73, 0x74, + 0x6f, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0f, 0x62, 0x69, 0x64, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x1a, 0x5d, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 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, 0x34, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x75, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0xac, 0x01, 0x0a, 0x10, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x73, 0x12, 0x43, 0x0a, 0x09, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, + 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2e, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x1a, 0x53, 0x0a, 0x0e, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 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, 0x2b, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3a, + 0x0a, 0x0d, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, + 0x29, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, + 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x49, + 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x77, 0x0a, 0x0a, 0x41, 0x75, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x28, 0x0a, 0x03, 0x62, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x64, + 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x03, 0x62, 0x69, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x53, 0x65, 0x63, 0x22, 0xa0, 0x09, 0x0a, 0x07, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2b, 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x06, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x22, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x46, 0x65, 0x65, 0x52, 0x03, 0x66, 0x65, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x03, 0x62, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, + 0x69, 0x64, 0x52, 0x03, 0x62, 0x69, 0x64, 0x12, 0x31, 0x0a, 0x08, 0x62, 0x69, 0x64, 0x5f, 0x6e, + 0x65, 0x78, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, + 0x74, 0x52, 0x07, 0x62, 0x69, 0x64, 0x4e, 0x65, 0x78, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0b, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x12, 0x32, 0x0a, + 0x15, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x6f, 0x72, + 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, + 0x63, 0x12, 0x2e, 0x0a, 0x13, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x61, + 0x64, 0x64, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, + 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x65, 0x64, 0x53, 0x65, + 0x63, 0x12, 0x36, 0x0a, 0x17, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x74, + 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x15, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x68, 0x72, + 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x53, 0x65, 0x63, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x78, 0x74, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0c, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x12, 0x2a, + 0x0a, 0x11, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x78, 0x5f, + 0x73, 0x65, 0x63, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x61, 0x78, 0x53, 0x65, 0x63, 0x12, 0x36, 0x0a, 0x17, 0x65, 0x78, + 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, + 0x67, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x65, 0x78, 0x74, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x53, + 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x10, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, + 0x65, 0x63, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x5f, 0x73, 0x65, 0x63, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x20, 0x0a, 0x0c, 0x65, 0x6e, 0x64, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, + 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x31, 0x0a, 0x15, 0x6f, 0x72, + 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, + 0x73, 0x65, 0x63, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x6f, 0x72, 0x69, 0x67, 0x69, + 0x6e, 0x61, 0x6c, 0x45, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x26, 0x0a, + 0x0f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, + 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x54, 0x69, + 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, + 0x26, 0x0a, 0x0f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x73, + 0x65, 0x63, 0x18, 0x16, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x43, + 0x6c, 0x61, 0x69, 0x6d, 0x53, 0x65, 0x63, 0x12, 0x28, 0x0a, 0x10, 0x77, 0x69, 0x6e, 0x6e, 0x65, + 0x72, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x17, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0e, 0x77, 0x69, 0x6e, 0x6e, 0x65, 0x72, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x53, 0x65, + 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x68, 0x61, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, + 0x18, 0x18, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x68, 0x61, 0x73, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x61, 0x73, 0x5f, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x18, + 0x19, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x68, 0x61, 0x73, 0x45, 0x6e, 0x64, 0x65, 0x64, 0x12, + 0x17, 0x0a, 0x07, 0x63, 0x61, 0x6e, 0x5f, 0x62, 0x69, 0x64, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x06, 0x63, 0x61, 0x6e, 0x42, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x61, 0x6e, 0x5f, + 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x61, 0x6e, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x61, 0x6e, 0x5f, 0x63, 0x61, 0x6e, + 0x63, 0x65, 0x6c, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x61, 0x6e, 0x43, 0x61, + 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x2d, 0x0a, 0x09, 0x62, 0x69, 0x64, 0x5f, 0x66, 0x69, 0x72, 0x73, + 0x74, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, + 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x64, 0x52, 0x08, 0x62, 0x69, 0x64, 0x46, 0x69, + 0x72, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x0b, 0x62, 0x69, 0x64, 0x5f, 0x68, 0x69, 0x73, 0x74, 0x6f, + 0x72, 0x79, 0x18, 0x1e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x64, 0x52, 0x0a, 0x62, 0x69, 0x64, 0x48, + 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x22, 0xf5, 0x02, 0x0a, 0x16, 0x41, 0x75, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x69, + 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x03, 0x62, + 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x64, 0x52, 0x03, 0x62, 0x69, 0x64, 0x12, + 0x31, 0x0a, 0x08, 0x62, 0x69, 0x64, 0x5f, 0x6e, 0x65, 0x78, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x42, 0x69, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x07, 0x62, 0x69, 0x64, 0x4e, 0x65, + 0x78, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x61, 0x64, 0x64, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x11, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x41, 0x64, 0x64, 0x65, 0x64, 0x53, + 0x65, 0x63, 0x12, 0x36, 0x0a, 0x17, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x15, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, + 0x65, 0x63, 0x12, 0x20, 0x0a, 0x0c, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, + 0x65, 0x63, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, + 0x65, 0x53, 0x65, 0x63, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x22, 0x5c, + 0x0a, 0x0e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, + 0x12, 0x3f, 0x0a, 0x0b, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x75, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x42, 0x69, 0x64, 0x48, 0x00, 0x52, 0x0a, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x69, + 0x64, 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x67, 0x0a, 0x0f, + 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x42, 0x69, 0x64, 0x12, + 0x27, 0x0a, 0x07, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0d, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x07, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x06, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x22, 0xd4, 0x01, 0x0a, 0x13, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x27, 0x0a, + 0x07, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, + 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, + 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x75, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x06, + 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x28, 0x0a, 0x03, 0x66, 0x65, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x42, 0x69, 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x03, 0x66, 0x65, 0x65, + 0x12, 0x3a, 0x0a, 0x0e, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x5f, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x0d, 0x72, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x65, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x65, 0x0a, 0x0d, + 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x27, 0x0a, + 0x07, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, + 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, + 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x75, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x06, 0x72, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x22, 0x50, 0x0a, 0x0b, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x29, 0x0a, 0x08, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x75, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x61, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x16, 0x0a, + 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, + 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0x6c, 0x0a, 0x12, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x4c, 0x69, 0x73, 0x74, 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, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x63, + 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, + 0x73, 0x6f, 0x72, 0x22, 0x67, 0x0a, 0x11, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x69, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x03, 0x62, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x69, + 0x64, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x03, 0x62, 0x69, 0x64, 0x22, 0x28, 0x0a, 0x16, + 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x42, 0x69, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x2c, 0x0a, 0x1a, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x22, 0x26, 0x0a, 0x14, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0xa3, 0x01, 0x0a, + 0x14, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x73, 0x12, 0x24, 0x0a, 0x0e, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, + 0x65, 0x63, 0x22, 0x46, 0x0a, 0x16, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, + 0x74, 0x42, 0x69, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0x49, 0x0a, 0x19, 0x41, 0x75, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, + 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, + 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0x29, 0x0a, 0x15, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, + 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, + 0x22, 0x4b, 0x0a, 0x12, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0xd6, 0x02, + 0x0a, 0x13, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x49, 0x0a, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x12, 0x3f, 0x0a, 0x10, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x52, 0x0f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x73, 0x12, 0x3a, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x47, + 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x74, 0x65, 0x6d, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x3d, 0x0a, + 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x38, 0x0a, 0x0a, + 0x49, 0x74, 0x65, 0x6d, 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, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xb4, 0x01, 0x0a, 0x1c, 0x45, 0x63, 0x6f, 0x6e, 0x6f, + 0x6d, 0x79, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x74, 0x65, 0x6d, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x74, 0x65, 0x6d, 0x49, 0x64, + 0x12, 0x35, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x63, 0x6f, 0x6e, + 0x6f, 0x6d, 0x79, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x6b, 0x75, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x6b, 0x75, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x22, 0x82, 0x01, + 0x0a, 0x16, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x74, 0x65, 0x6d, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x74, 0x65, 0x6d, 0x49, + 0x64, 0x12, 0x35, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x63, 0x6f, + 0x6e, 0x6f, 0x6d, 0x79, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x65, + 0x69, 0x70, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x63, 0x65, 0x69, + 0x70, 0x74, 0x22, 0x72, 0x0a, 0x1d, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x50, 0x75, 0x72, + 0x63, 0x68, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, + 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x09, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, + 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, + 0x63, 0x65, 0x69, 0x70, 0x74, 0x73, 0x22, 0x75, 0x0a, 0x1d, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, + 0x79, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x6c, 0x61, 0x63, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xcc, 0x01, + 0x0a, 0x1c, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, + 0x0a, 0x0c, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x12, 0x4c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x63, 0x6f, 0x6e, 0x6f, + 0x6d, 0x79, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, + 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 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, 0xf1, 0x02, 0x0a, + 0x16, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x6c, 0x61, 0x63, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, + 0x2a, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x5f, 0x73, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x70, + 0x6c, 0x65, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x18, 0x0a, 0x07, 0x73, + 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x24, 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x52, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x46, 0x0a, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, + 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x50, 0x6c, 0x61, 0x63, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 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, 0xdc, 0x02, 0x0a, 0x10, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x41, 0x63, 0x6b, 0x12, 0x3a, 0x0a, 0x06, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x63, 0x6f, + 0x6e, 0x6f, 0x6d, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x6b, 0x2e, 0x57, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x77, 0x61, 0x6c, 0x6c, 0x65, + 0x74, 0x12, 0x2d, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x49, 0x6e, 0x76, 0x65, + 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x09, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, + 0x12, 0x24, 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x06, + 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x52, 0x0a, 0x17, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x52, 0x15, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, + 0x65, 0x53, 0x65, 0x63, 0x1a, 0x39, 0x0a, 0x0b, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 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, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0x92, 0x02, 0x0a, 0x12, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x50, 0x75, 0x72, 0x63, 0x68, + 0x61, 0x73, 0x65, 0x41, 0x63, 0x6b, 0x12, 0x3c, 0x0a, 0x06, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x63, + 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x41, 0x63, 0x6b, + 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x77, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x2d, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, + 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x49, + 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x09, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, + 0x6f, 0x72, 0x79, 0x12, 0x24, 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x52, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x69, 0x73, 0x5f, + 0x73, 0x61, 0x6e, 0x64, 0x62, 0x6f, 0x78, 0x5f, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x69, 0x73, 0x53, 0x61, 0x6e, 0x64, 0x62, 0x6f, + 0x78, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x57, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 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, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8a, 0x01, 0x0a, 0x0e, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, + 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, + 0x20, 0x0a, 0x0c, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, + 0x63, 0x22, 0xd7, 0x04, 0x0a, 0x06, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x66, 0x69, + 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x72, 0x65, 0x66, 0x69, 0x6c, 0x6c, + 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x66, 0x69, 0x6c, 0x6c, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x72, 0x65, 0x66, 0x69, 0x6c, 0x6c, 0x53, 0x65, 0x63, 0x12, + 0x2f, 0x0a, 0x14, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x72, 0x65, 0x66, 0x69, 0x6c, 0x6c, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x6e, + 0x65, 0x78, 0x74, 0x52, 0x65, 0x66, 0x69, 0x6c, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, + 0x12, 0x2d, 0x0a, 0x13, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x66, 0x69, 0x6c, 0x6c, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6d, + 0x61, 0x78, 0x52, 0x65, 0x66, 0x69, 0x6c, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, + 0x31, 0x0a, 0x15, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x72, 0x65, 0x66, 0x69, 0x6c, 0x6c, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x66, 0x69, 0x6c, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x53, + 0x65, 0x63, 0x12, 0x32, 0x0a, 0x09, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, + 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x6e, 0x65, + 0x72, 0x67, 0x79, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6d, 0x6f, 0x64, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x12, 0x43, 0x0a, 0x11, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x10, 0x61, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x5b, 0x0a, 0x15, 0x61, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x69, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x14, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, + 0x65, 0x63, 0x1a, 0x47, 0x0a, 0x19, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 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, 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, 0x0a, + 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x08, 0x65, 0x6e, + 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x45, + 0x6e, 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x65, 0x6e, + 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, 0x1a, 0x49, 0x0a, 0x0d, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x69, + 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, 0x22, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x91, 0x01, 0x0a, 0x12, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x53, 0x70, 0x65, 0x6e, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x07, 0x61, 0x6d, 0x6f, 0x75, + 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x07, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x41, 0x6d, 0x6f, + 0x75, 0x6e, 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, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x67, 0x0a, 0x11, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x53, + 0x70, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x2c, 0x0a, 0x08, 0x65, 0x6e, + 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x08, + 0x65, 0x6e, 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x22, 0x91, + 0x01, 0x0a, 0x12, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x07, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x6e, + 0x65, 0x72, 0x67, 0x79, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x61, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0xc5, 0x01, 0x0a, 0x11, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, + 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, + 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x6f, + 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x73, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x73, + 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x07, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x61, 0x0a, 0x15, 0x4c, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x13, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, + 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, + 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x12, 0x6c, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x22, 0xed, 0x02, + 0x0a, 0x08, 0x54, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x12, 0x29, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x75, 0x74, + 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x5f, 0x73, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x5d, 0x0a, 0x15, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x07, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x75, 0x74, 0x6f, + 0x72, 0x69, 0x61, 0x6c, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, + 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x69, 0x65, 0x73, 0x1a, 0x47, 0x0a, 0x19, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 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, 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, 0x9d, 0x01, + 0x0a, 0x0c, 0x54, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3f, + 0x0a, 0x09, 0x74, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x61, + 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x54, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x74, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x1a, + 0x4c, 0x0a, 0x0e, 0x54, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x61, 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, 0x24, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x75, 0x74, 0x6f, 0x72, 0x69, + 0x61, 0x6c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x27, 0x0a, + 0x15, 0x54, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x28, 0x0a, 0x16, 0x54, 0x75, 0x74, 0x6f, 0x72, 0x69, + 0x61, 0x6c, 0x44, 0x65, 0x63, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x22, 0x28, 0x0a, 0x16, 0x54, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x41, 0x62, 0x61, 0x6e, + 0x64, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x3b, 0x0a, 0x15, 0x54, 0x75, + 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x74, 0x65, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x73, 0x74, 0x65, 0x70, 0x22, 0x28, 0x0a, 0x14, 0x54, 0x75, 0x74, 0x6f, 0x72, + 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, + 0x73, 0x22, 0x40, 0x0a, 0x0e, 0x52, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x38, 0x0a, 0x0a, 0x54, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x22, 0xa9, 0x03, + 0x0a, 0x04, 0x54, 0x65, 0x61, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x6f, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x6c, + 0x61, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, + 0x61, 0x6e, 0x67, 0x54, 0x61, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, + 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x65, 0x64, 0x67, 0x65, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, + 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x2a, 0x0a, + 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0xb0, 0x01, 0x0a, 0x11, 0x54, 0x65, + 0x61, 0x6d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x61, + 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x61, + 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x61, + 0x6e, 0x67, 0x54, 0x61, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x74, 0x75, 0x70, 0x5f, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, + 0x65, 0x74, 0x75, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xce, 0x01, 0x0a, + 0x11, 0x54, 0x65, 0x61, 0x6d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6f, 0x70, + 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x12, 0x1d, + 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x19, 0x0a, + 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x6c, 0x61, 0x6e, 0x67, 0x54, 0x61, 0x67, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x5b, 0x0a, + 0x0f, 0x54, 0x65, 0x61, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x44, 0x0a, 0x08, 0x54, 0x65, + 0x61, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x05, 0x74, 0x65, 0x61, 0x6d, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, + 0x6d, 0x52, 0x05, 0x74, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, + 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, + 0x22, 0x7d, 0x0a, 0x11, 0x54, 0x65, 0x61, 0x6d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x61, 0x6e, 0x67, 0x54, 0x61, 0x67, 0x12, 0x21, 0x0a, 0x0c, + 0x6d, 0x69, 0x6e, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x22, + 0x29, 0x0a, 0x0e, 0x54, 0x65, 0x61, 0x6d, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x22, 0x31, 0x0a, 0x14, 0x55, 0x73, + 0x65, 0x72, 0x54, 0x65, 0x61, 0x6d, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0xb5, 0x04, + 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, + 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, + 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, + 0x72, 0x55, 0x72, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x67, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x61, 0x6e, 0x67, 0x54, 0x61, 0x67, 0x12, + 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x74, + 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, + 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, + 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x61, 0x63, 0x65, 0x62, 0x6f, + 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x49, + 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x67, 0x61, 0x6d, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x67, 0x61, 0x6d, 0x65, 0x63, 0x65, + 0x6e, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x65, 0x61, 0x6d, 0x5f, + 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x74, 0x65, 0x61, 0x6d, 0x49, + 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x64, 0x67, + 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x65, + 0x64, 0x67, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0f, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, + 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x37, 0x0a, 0x18, 0x66, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x74, 0x5f, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x11, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x15, 0x66, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x49, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x70, + 0x70, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x70, + 0x70, 0x6c, 0x65, 0x49, 0x64, 0x22, 0x4d, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x72, 0x54, 0x65, 0x61, + 0x6d, 0x73, 0x12, 0x1e, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, + 0x65, 0x72, 0x12, 0x20, 0x0a, 0x05, 0x74, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x0a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x05, 0x74, + 0x65, 0x61, 0x6d, 0x73, 0x22, 0xa1, 0x01, 0x0a, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x54, 0x65, 0x61, + 0x6d, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, + 0x65, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x54, 0x65, 0x61, 0x6d, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x2e, + 0x55, 0x73, 0x65, 0x72, 0x54, 0x65, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, + 0x75, 0x73, 0x65, 0x72, 0x54, 0x65, 0x61, 0x6d, 0x73, 0x1a, 0x4d, 0x0a, 0x0e, 0x55, 0x73, 0x65, + 0x72, 0x54, 0x65, 0x61, 0x6d, 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, 0x25, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x54, 0x65, 0x61, 0x6d, 0x73, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x47, 0x0a, 0x1b, 0x54, 0x65, 0x61, 0x6d, + 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x22, 0x86, 0x02, 0x0a, 0x0e, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, + 0x43, 0x6f, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, 0x63, + 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x73, 0x74, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x44, 0x0a, 0x0a, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, + 0x65, 0x43, 0x6f, 0x73, 0x74, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, + 0x73, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x43, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x82, 0x06, 0x0a, 0x0a, 0x55, + 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, + 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, + 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x33, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, + 0x63, 0x6f, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x73, 0x74, + 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x63, + 0x6f, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x6f, 0x73, 0x74, 0x52, + 0x04, 0x63, 0x6f, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x06, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x12, 0x43, 0x0a, 0x11, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x73, 0x52, 0x10, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x77, + 0x61, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, + 0x65, 0x63, 0x12, 0x31, 0x0a, 0x15, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x12, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, + 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x37, 0x0a, 0x18, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, + 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, + 0x63, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x43, + 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x1b, + 0x0a, 0x09, 0x63, 0x61, 0x6e, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x0e, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x08, 0x63, 0x61, 0x6e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x5f, 0x0a, 0x15, 0x61, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x69, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x41, 0x64, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x10, + 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, + 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x61, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x1a, 0x47, 0x0a, 0x19, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 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, 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, + 0x92, 0x02, 0x0a, 0x12, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x6c, + 0x6f, 0x74, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x55, 0x6e, 0x6c, + 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x6c, 0x6f, 0x74, 0x43, 0x6f, 0x73, 0x74, 0x2e, + 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, + 0x73, 0x12, 0x48, 0x0a, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x55, 0x6e, 0x6c, + 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x6c, 0x6f, 0x74, 0x43, 0x6f, 0x73, 0x74, 0x2e, + 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x1a, 0x38, 0x0a, 0x0a, 0x49, + 0x74, 0x65, 0x6d, 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, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x69, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x83, 0x03, 0x0a, 0x0f, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x0b, 0x75, 0x6e, 0x6c, 0x6f, + 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x52, + 0x0b, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x08, + 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, + 0x52, 0x08, 0x6f, 0x76, 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x6c, + 0x6f, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x6c, 0x6f, 0x74, 0x73, + 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x73, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x6c, + 0x6f, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x5f, 0x73, 0x6c, 0x6f, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x6d, + 0x61, 0x78, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x6c, 0x6f, 0x74, 0x73, 0x12, 0x35, 0x0a, + 0x09, 0x73, 0x6c, 0x6f, 0x74, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, + 0x6c, 0x65, 0x53, 0x6c, 0x6f, 0x74, 0x43, 0x6f, 0x73, 0x74, 0x52, 0x08, 0x73, 0x6c, 0x6f, 0x74, + 0x43, 0x6f, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x5f, + 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x71, + 0x75, 0x65, 0x75, 0x65, 0x64, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x2c, 0x0a, 0x12, + 0x6d, 0x61, 0x78, 0x5f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x5f, 0x75, 0x6e, 0x6c, 0x6f, 0x63, + 0x6b, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x6d, 0x61, 0x78, 0x51, 0x75, 0x65, + 0x75, 0x65, 0x64, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x22, 0xb7, 0x01, 0x0a, 0x11, 0x55, + 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x12, 0x37, 0x0a, 0x0b, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x55, 0x6e, 0x6c, + 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x0b, 0x75, 0x6e, + 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x06, 0x72, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, + 0x43, 0x0a, 0x11, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x73, 0x52, 0x10, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x73, 0x22, 0x35, 0x0a, 0x12, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x22, 0x3f, 0x0a, 0x1a, 0x55, + 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x51, 0x75, 0x65, 0x75, 0x65, 0x41, + 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x73, 0x22, 0x42, 0x0a, 0x1d, + 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x51, 0x75, 0x65, 0x75, 0x65, + 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, + 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, 0x73, + 0x22, 0x3f, 0x0a, 0x1a, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x51, + 0x75, 0x65, 0x75, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, + 0x0a, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x49, 0x64, + 0x73, 0x22, 0xc5, 0x05, 0x0a, 0x0e, 0x53, 0x75, 0x62, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, + 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, + 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x54, + 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, + 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x69, + 0x72, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x72, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x24, 0x0a, 0x0e, + 0x72, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, + 0x65, 0x63, 0x12, 0x24, 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x52, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x43, 0x0a, 0x11, 0x61, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x10, 0x61, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x63, 0x0a, + 0x15, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, + 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x75, 0x62, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, + 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x61, 0x64, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x43, 0x6c, 0x61, 0x69, + 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x74, 0x18, + 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x52, 0x65, 0x73, 0x65, 0x74, + 0x1a, 0x47, 0x0a, 0x19, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 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, + 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, 0x8e, 0x09, 0x0a, 0x0b, 0x41, 0x63, + 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, + 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, + 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x2f, 0x0a, 0x14, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, + 0x73, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x14, 0x0a, 0x05, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x20, 0x0a, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, + 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, + 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x72, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0f, 0x70, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x65, + 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x43, 0x0a, 0x11, 0x61, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x10, 0x61, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x24, 0x0a, + 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, + 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x06, 0x72, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x12, 0x4c, 0x0a, 0x16, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x0f, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x14, 0x61, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x12, 0x2f, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x12, 0x51, 0x0a, 0x10, 0x73, 0x75, 0x62, 0x5f, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, + 0x53, 0x75, 0x62, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x73, 0x75, 0x62, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x60, 0x0a, 0x15, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x12, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x63, 0x68, 0x69, + 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x14, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, + 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x5f, + 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x75, 0x74, + 0x6f, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x28, 0x0a, 0x10, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0e, 0x61, 0x75, 0x74, 0x6f, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x54, 0x6f, 0x74, 0x61, 0x6c, + 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x74, 0x18, 0x15, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x75, 0x74, 0x6f, 0x52, 0x65, 0x73, 0x65, 0x74, 0x12, + 0x24, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, + 0x63, 0x18, 0x16, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, + 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x20, 0x0a, 0x0c, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x17, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x65, 0x6e, 0x64, + 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x1a, 0x58, 0x0a, 0x14, 0x53, 0x75, 0x62, 0x41, 0x63, + 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 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, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x75, 0x62, 0x41, 0x63, 0x68, 0x69, 0x65, + 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x47, 0x0a, 0x19, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 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, 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, 0xec, 0x02, 0x0a, 0x0f, 0x41, + 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x4b, + 0x0a, 0x0c, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x63, 0x68, 0x69, + 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x68, 0x69, + 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x61, + 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x5e, 0x0a, 0x13, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x5f, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x2e, + 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x41, + 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x52, 0x0a, 0x11, 0x41, + 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 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, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x11, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x58, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, + 0x6d, 0x65, 0x6e, 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, 0x27, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x5a, 0x0a, 0x18, 0x41, 0x63, 0x68, + 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x10, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0xfe, 0x02, 0x0a, 0x15, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x6b, 0x12, 0x51, 0x0a, 0x0c, 0x61, 0x63, 0x68, + 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2d, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x6b, 0x2e, 0x41, 0x63, 0x68, + 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, + 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x64, 0x0a, 0x13, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x5f, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x41, 0x63, 0x6b, 0x2e, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x41, 0x63, 0x68, + 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, + 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x1a, 0x52, 0x0a, 0x11, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, + 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, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x58, 0x0a, 0x17, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 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, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0xdd, 0x01, 0x0a, 0x19, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, + 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, + 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x55, 0x0a, 0x0c, 0x61, 0x63, 0x68, 0x69, + 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, + 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0c, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x1a, + 0x3f, 0x0a, 0x11, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0xa1, 0x01, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6b, 0x41, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x69, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x4d, 0x61, 0x78, 0x12, 0x2e, 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x06, 0x72, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x22, 0xb4, 0x01, 0x0a, 0x0c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6b, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6d, + 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, + 0x69, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x61, 0x78, 0x12, + 0x24, 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x06, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x1e, 0x0a, 0x0a, 0x72, + 0x65, 0x70, 0x65, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0a, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x22, 0x99, 0x07, 0x0a, 0x06, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6b, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x2e, 0x0a, 0x13, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x5f, 0x72, 0x65, 0x73, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x65, 0x74, 0x12, + 0x35, 0x0a, 0x17, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x14, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x73, 0x65, 0x74, 0x12, 0x33, 0x0a, 0x16, 0x69, 0x64, 0x6c, 0x65, 0x5f, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x61, 0x79, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x74, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x69, 0x64, 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x44, 0x65, 0x63, 0x61, 0x79, 0x52, 0x65, 0x73, 0x65, 0x74, 0x12, 0x2f, 0x0a, 0x14, 0x6d, + 0x61, 0x78, 0x5f, 0x69, 0x64, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x64, 0x65, + 0x63, 0x61, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x6d, 0x61, 0x78, 0x49, 0x64, + 0x6c, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x65, 0x63, 0x61, 0x79, 0x12, 0x2d, 0x0a, 0x13, + 0x70, 0x72, 0x65, 0x76, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, + 0x73, 0x65, 0x63, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x70, 0x72, 0x65, 0x76, 0x52, + 0x65, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x24, 0x0a, 0x0e, 0x72, + 0x65, 0x73, 0x65, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, + 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, + 0x63, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, + 0x73, 0x65, 0x63, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x20, 0x0a, + 0x0c, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x10, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0a, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, + 0x35, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6b, 0x41, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x48, 0x0a, 0x11, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6b, 0x41, + 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x10, + 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, + 0x12, 0x3b, 0x0a, 0x0f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6b, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x0e, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x1b, 0x0a, + 0x09, 0x63, 0x61, 0x6e, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x08, 0x63, 0x61, 0x6e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x61, + 0x6e, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, + 0x63, 0x61, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x61, 0x6e, + 0x5f, 0x72, 0x65, 0x73, 0x65, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x61, + 0x6e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x17, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x6c, 0x61, + 0x69, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x91, 0x01, 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6b, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x07, 0x73, 0x74, 0x72, 0x65, 0x61, + 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6b, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6b, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6b, + 0x73, 0x1a, 0x48, 0x0a, 0x0c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6b, 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, 0x22, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6b, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x95, 0x01, 0x0a, 0x14, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6b, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6b, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x1a, 0x3a, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, + 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x27, 0x0a, 0x13, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6b, 0x73, 0x43, 0x6c, + 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x27, 0x0a, 0x13, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x85, 0x02, 0x0a, 0x12, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x4d, 0x61, 0x69, 0x6c, 0x62, 0x6f, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x24, 0x0a, 0x06, + 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x06, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, + 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x65, 0x78, 0x70, + 0x69, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x6c, + 0x61, 0x69, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, + 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x61, 0x6e, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x61, 0x6e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x22, 0x5f, 0x0a, + 0x11, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x61, 0x69, 0x6c, 0x62, 0x6f, 0x78, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x32, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x4d, 0x61, 0x69, 0x6c, 0x62, 0x6f, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, + 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0x48, + 0x0a, 0x18, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x61, 0x69, 0x6c, 0x62, 0x6f, 0x78, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0x43, 0x0a, 0x19, 0x52, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x4d, 0x61, 0x69, 0x6c, 0x62, 0x6f, 0x78, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x22, 0x2e, 0x0a, + 0x1a, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x61, 0x69, 0x6c, 0x62, 0x6f, 0x78, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x69, + 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x26, 0x0a, + 0x14, 0x54, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x9b, 0x01, 0x0a, 0x11, 0x54, 0x65, 0x61, 0x6d, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x0a, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x27, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x73, 0x74, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, + 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0xb2, 0x03, 0x0a, 0x0d, 0x54, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, + 0x79, 0x12, 0x2b, 0x0a, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x73, 0x74, 0x52, 0x04, 0x63, 0x6f, 0x73, 0x74, 0x12, 0x20, + 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x11, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x10, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x62, 0x0a, 0x15, 0x61, 0x64, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x54, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x41, 0x64, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x20, 0x0a, + 0x0b, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0b, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x1a, + 0x47, 0x0a, 0x19, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, + 0x70, 0x65, 0x72, 0x74, 0x69, 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, 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, 0xbf, 0x01, 0x0a, 0x09, 0x54, 0x65, 0x61, + 0x6d, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x74, 0x65, 0x6d, + 0x52, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x52, 0x0a, 0x17, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x6d, 0x6f, + 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x15, 0x61, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, + 0x12, 0x28, 0x0a, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x5f, 0x73, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x22, 0x43, 0x0a, 0x18, 0x54, 0x65, + 0x61, 0x6d, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x22, + 0xe6, 0x01, 0x0a, 0x14, 0x54, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x75, 0x72, + 0x63, 0x68, 0x61, 0x73, 0x65, 0x41, 0x63, 0x6b, 0x12, 0x3e, 0x0a, 0x06, 0x77, 0x61, 0x6c, 0x6c, + 0x65, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x54, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, + 0x65, 0x41, 0x63, 0x6b, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x06, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x2d, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x65, + 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x09, 0x69, 0x6e, + 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x24, 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x1a, 0x39, 0x0a, + 0x0b, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 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, 0x03, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x26, 0x0a, 0x14, 0x54, 0x65, 0x61, 0x6d, + 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x22, 0xb5, 0x01, 0x0a, 0x16, 0x54, 0x65, 0x61, 0x6d, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x47, + 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x4c, 0x0a, 0x0a, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x57, 0x61, 0x6c, 0x6c, 0x65, + 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x43, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x43, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x69, 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, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc5, 0x01, 0x0a, 0x0a, 0x54, 0x65, 0x61, + 0x6d, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x40, 0x0a, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2e, 0x43, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, + 0x63, 0x1a, 0x3d, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0x25, 0x0a, 0x13, 0x54, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x7d, 0x0a, 0x15, 0x54, 0x65, 0x61, 0x6d, 0x53, + 0x74, 0x61, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x28, 0x0a, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x52, 0x06, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x12, 0x2a, 0x0a, 0x07, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x07, 0x70, + 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x22, 0x4f, 0x0a, 0x18, 0x54, 0x65, 0x61, 0x6d, 0x49, 0x6e, + 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x63, 0x61, 0x74, 0x65, 0x67, + 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x74, 0x65, 0x6d, 0x43, + 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x22, 0xdb, 0x02, 0x0a, 0x1b, 0x54, 0x65, 0x61, 0x6d, + 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x42, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x65, + 0x61, 0x6d, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x73, 0x75, + 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6f, + 0x76, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0b, 0x6f, 0x76, 0x65, 0x72, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x12, 0x4e, 0x0a, + 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x30, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x49, 0x6e, 0x76, 0x65, + 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x09, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x1a, 0x38, 0x0a, + 0x0a, 0x49, 0x74, 0x65, 0x6d, 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, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 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, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa7, 0x01, 0x0a, 0x19, 0x54, 0x65, 0x61, 0x6d, 0x49, 0x6e, + 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x40, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x49, 0x6e, + 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, + 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x38, 0x0a, 0x0a, 0x49, 0x74, 0x65, 0x6d, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0xf1, 0x01, 0x0a, 0x1f, 0x54, 0x65, 0x61, 0x6d, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, + 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x59, 0x0a, 0x0c, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0b, 0x69, 0x74, 0x65, 0x6d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x1a, 0x63, + 0x0a, 0x10, 0x49, 0x74, 0x65, 0x6d, 0x55, 0x70, 0x64, 0x61, 0x74, 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, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x49, 0x6e, 0x76, 0x65, 0x6e, + 0x74, 0x6f, 0x72, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x50, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x85, 0x01, 0x0a, 0x1c, 0x54, 0x65, 0x61, 0x6d, 0x41, 0x63, 0x68, 0x69, + 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x61, + 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x12, 0x2c, 0x0a, + 0x12, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x22, 0x2c, 0x0a, 0x1a, 0x54, + 0x65, 0x61, 0x6d, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x8c, 0x02, 0x0a, 0x1d, 0x54, 0x65, + 0x61, 0x6d, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x61, + 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x59, 0x0a, 0x0c, + 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x41, 0x63, + 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x61, 0x63, 0x68, 0x69, 0x65, + 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x3f, 0x0a, 0x11, 0x41, 0x63, 0x68, 0x69, 0x65, + 0x76, 0x65, 0x6d, 0x65, 0x6e, 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, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6b, 0x0a, 0x18, 0x54, 0x65, 0x61, 0x6d, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x63, 0x6f, + 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, + 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, + 0x6f, 0x72, 0x69, 0x65, 0x73, 0x22, 0x5b, 0x0a, 0x17, 0x54, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x47, 0x65, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x30, 0x0a, 0x14, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, + 0x49, 0x64, 0x22, 0xec, 0x01, 0x0a, 0x1a, 0x54, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x30, 0x0a, 0x14, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x12, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x75, 0x62, + 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x75, 0x62, + 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x12, 0x3e, 0x0a, 0x1b, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, + 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x22, 0x5d, 0x0a, 0x19, 0x54, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x30, + 0x0a, 0x14, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, + 0x61, 0x72, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x64, + 0x22, 0x78, 0x0a, 0x18, 0x54, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x6c, 0x6c, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x30, 0x0a, 0x14, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xaf, 0x02, 0x0a, 0x19, 0x54, + 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, + 0x61, 0x72, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, + 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x26, 0x0a, 0x0f, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x53, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x72, + 0x61, 0x6e, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x72, 0x61, 0x6e, 0x6b, 0x12, + 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, + 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x73, 0x63, 0x6f, 0x72, + 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x75, 0x62, 0x73, 0x63, 0x6f, 0x72, + 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, + 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xcd, 0x02, 0x0a, + 0x20, 0x54, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, + 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, + 0x26, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, + 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, + 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, + 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x73, 0x63, 0x6f, 0x72, + 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x75, 0x62, 0x73, 0x63, 0x6f, 0x72, + 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, + 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xc7, 0x0b, 0x0a, + 0x14, 0x54, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x63, + 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, + 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x73, 0x63, 0x65, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x73, 0x63, 0x65, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, + 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, + 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x74, 0x69, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x20, 0x0a, 0x0c, 0x65, + 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0a, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x26, 0x0a, + 0x0f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x54, 0x69, + 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x43, 0x0a, 0x11, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x10, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x4e, 0x0a, 0x0c, 0x72, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x69, 0x65, 0x72, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2b, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x2e, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, 0x72, 0x73, 0x12, 0x4e, 0x0a, 0x0c, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x7a, 0x6f, 0x6e, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2b, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x2e, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x6c, + 0x61, 0x69, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, + 0x12, 0x24, 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x06, + 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x69, 0x0a, 0x15, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, + 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, + 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, + 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x61, 0x64, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, + 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x5f, 0x6e, 0x75, 0x6d, 0x5f, + 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6d, 0x61, 0x78, + 0x4e, 0x75, 0x6d, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x72, + 0x65, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x54, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, + 0x6f, 0x61, 0x72, 0x64, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x72, 0x65, + 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x15, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x1b, + 0x0a, 0x09, 0x63, 0x61, 0x6e, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x08, 0x63, 0x61, 0x6e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x19, 0x0a, 0x08, 0x63, + 0x61, 0x6e, 0x5f, 0x72, 0x6f, 0x6c, 0x6c, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, + 0x61, 0x6e, 0x52, 0x6f, 0x6c, 0x6c, 0x12, 0x4c, 0x0a, 0x15, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6d, + 0x61, 0x6b, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, + 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x14, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x69, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x19, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x1b, + 0x0a, 0x09, 0x63, 0x6f, 0x68, 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x1a, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x63, 0x6f, 0x68, 0x6f, 0x72, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x62, + 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x62, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x49, 0x64, 0x12, 0x4c, 0x0a, 0x0d, 0x63, 0x6f, + 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x1c, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x26, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x61, 0x0a, 0x10, 0x52, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x54, 0x69, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x37, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x69, 0x65, 0x72, 0x73, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x60, 0x0a, 0x10, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x20, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5a, 0x6f, + 0x6e, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x47, 0x0a, + 0x19, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, + 0x72, 0x74, 0x69, 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, 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, 0x62, 0x0a, 0x15, 0x54, 0x65, 0x61, 0x6d, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x12, + 0x49, 0x0a, 0x12, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, + 0x6f, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x11, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x24, 0x54, + 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, + 0x61, 0x72, 0x64, 0x44, 0x65, 0x62, 0x75, 0x67, 0x46, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x12, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, + 0x61, 0x72, 0x64, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x93, 0x02, 0x0a, 0x2c, 0x54, 0x65, 0x61, + 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x44, 0x65, 0x62, 0x75, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x53, 0x63, 0x6f, 0x72, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6d, + 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x10, 0x0a, + 0x03, 0x6d, 0x61, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x12, + 0x37, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, + 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x73, + 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, + 0x73, 0x75, 0x62, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x4d, 0x69, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x73, + 0x75, 0x62, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0b, 0x73, 0x75, 0x62, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x4d, 0x61, 0x78, 0x22, 0x5c, + 0x0a, 0x1c, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x61, 0x69, 0x6c, + 0x62, 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, + 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0x62, 0x0a, 0x1d, + 0x54, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x61, 0x69, 0x6c, 0x62, 0x6f, + 0x78, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x19, 0x0a, + 0x08, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x22, 0x4d, 0x0a, 0x1e, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x61, + 0x69, 0x6c, 0x62, 0x6f, 0x78, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x49, 0x64, 0x73, 0x22, + 0xc1, 0x01, 0x0a, 0x0e, 0x54, 0x65, 0x61, 0x6d, 0x47, 0x69, 0x66, 0x74, 0x52, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x45, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x73, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x4b, 0x0a, 0x15, 0x6e, 0x6f, 0x6e, 0x63, 0x6f, 0x6e, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x14, 0x6e, + 0x6f, 0x6e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x22, 0xf2, 0x01, 0x0a, 0x13, 0x54, 0x65, 0x61, 0x6d, 0x47, 0x69, 0x66, 0x74, + 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x75, + 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, + 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, + 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, + 0x65, 0x63, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xe8, 0x06, 0x0a, 0x08, 0x54, 0x65, 0x61, + 0x6d, 0x47, 0x69, 0x66, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x63, + 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, + 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x39, 0x0a, + 0x19, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, + 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x16, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, + 0x64, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x20, 0x0a, 0x0c, 0x65, 0x6e, 0x64, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, + 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, + 0x15, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, + 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x6d, 0x61, + 0x78, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x43, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x73, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x0c, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x52, 0x12, 0x63, 0x6f, 0x6e, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, + 0x2e, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x47, 0x69, 0x66, 0x74, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, + 0x4c, 0x0a, 0x15, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x14, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x3d, 0x0a, + 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x0f, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x47, + 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x52, 0x0c, + 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x25, 0x0a, 0x0e, + 0x63, 0x61, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x10, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x63, 0x61, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x12, 0x3e, 0x0a, 0x1b, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x6f, 0x72, 0x5f, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x03, 0x52, 0x19, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x61, 0x6e, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x61, 0x6e, 0x43, 0x6c, 0x61, 0x69, 0x6d, + 0x12, 0x41, 0x0a, 0x11, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x47, 0x69, 0x66, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x52, 0x10, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x73, 0x22, 0x34, 0x0a, 0x0c, 0x54, 0x65, 0x61, 0x6d, 0x47, 0x69, 0x66, 0x74, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x05, 0x67, 0x69, 0x66, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x47, 0x69, + 0x66, 0x74, 0x52, 0x05, 0x67, 0x69, 0x66, 0x74, 0x73, 0x22, 0x25, 0x0a, 0x13, 0x54, 0x65, 0x61, + 0x6d, 0x47, 0x69, 0x66, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x22, 0x5a, 0x0a, 0x19, 0x54, 0x65, 0x61, 0x6d, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, + 0x07, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x77, 0x0a, 0x15, + 0x54, 0x65, 0x61, 0x6d, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x41, 0x63, 0x6b, 0x12, 0x22, 0x0a, 0x04, 0x67, 0x69, 0x66, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x47, + 0x69, 0x66, 0x74, 0x52, 0x04, 0x67, 0x69, 0x66, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x24, 0x0a, 0x06, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, 0x06, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x22, 0x61, 0x0a, 0x14, 0x54, 0x65, 0x61, 0x6d, 0x47, 0x69, 0x66, + 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, + 0x07, 0x67, 0x69, 0x66, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x67, 0x69, 0x66, 0x74, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x65, 0x6e, + 0x64, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x22, 0x5e, 0x0a, 0x10, 0x54, 0x65, 0x61, 0x6d, + 0x47, 0x69, 0x66, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x41, 0x63, 0x6b, 0x12, 0x22, 0x0a, 0x04, + 0x67, 0x69, 0x66, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x47, 0x69, 0x66, 0x74, 0x52, 0x04, 0x67, 0x69, 0x66, 0x74, + 0x12, 0x26, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x0c, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x52, + 0x07, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x22, 0x88, 0x03, 0x0a, 0x11, 0x53, 0x79, 0x6e, + 0x63, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x17, + 0x0a, 0x07, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x69, 0x74, 0x65, 0x6d, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x65, 0x6c, 0x74, 0x61, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x5a, 0x0a, + 0x11, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x53, 0x79, 0x6e, 0x63, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x74, 0x65, + 0x6d, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x12, 0x6e, 0x75, 0x6d, + 0x65, 0x72, 0x69, 0x63, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x79, 0x6e, + 0x63, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x4e, + 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x50, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x43, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 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, 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, 0x1a, 0x44, 0x0a, + 0x16, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x98, 0x01, 0x0a, 0x0d, 0x53, 0x79, 0x6e, 0x63, 0x49, 0x6e, 0x76, 0x65, + 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x34, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, + 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x1a, 0x51, 0x0a, 0x0a, 0x49, + 0x74, 0x65, 0x6d, 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, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x49, + 0x74, 0x65, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc9, + 0x01, 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x12, 0x41, + 0x0a, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x45, 0x63, + 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, + 0x73, 0x12, 0x38, 0x0a, 0x09, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x52, 0x09, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x43, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd5, 0x01, 0x0a, 0x16, 0x53, + 0x79, 0x6e, 0x63, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x53, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x24, 0x0a, 0x0e, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, + 0x63, 0x12, 0x2f, 0x0a, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x53, + 0x65, 0x63, 0x22, 0xbf, 0x01, 0x0a, 0x10, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x63, 0x68, 0x69, 0x65, + 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x4c, 0x0a, 0x0c, 0x61, 0x63, 0x68, 0x69, 0x65, + 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, + 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x5d, 0x0a, 0x11, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, + 0x6d, 0x65, 0x6e, 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, 0x32, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x5a, 0x0a, 0x0f, 0x53, 0x79, 0x6e, 0x63, 0x45, 0x6e, 0x65, 0x72, + 0x67, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x31, 0x0a, + 0x15, 0x72, 0x65, 0x66, 0x69, 0x6c, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x72, 0x65, + 0x66, 0x69, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, + 0x22, 0xd0, 0x01, 0x0a, 0x0a, 0x53, 0x79, 0x6e, 0x63, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x12, + 0x3a, 0x0a, 0x08, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x45, 0x6e, 0x65, + 0x72, 0x67, 0x79, 0x2e, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x08, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x69, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x09, 0x6d, + 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4d, 0x6f, 0x64, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x1a, + 0x52, 0x0a, 0x0d, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x69, 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, 0x2b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x45, 0x6e, 0x65, + 0x72, 0x67, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x92, 0x01, 0x0a, 0x1a, 0x53, 0x79, 0x6e, 0x63, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x73, + 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x75, 0x62, 0x73, + 0x63, 0x6f, 0x72, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x1a, 0x0a, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xe2, 0x01, 0x0a, 0x15, 0x53, 0x79, 0x6e, + 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x73, 0x12, 0x61, 0x0a, 0x12, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, + 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x2e, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x11, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, + 0x6f, 0x61, 0x72, 0x64, 0x73, 0x1a, 0x66, 0x0a, 0x16, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 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, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x20, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8e, 0x02, + 0x0a, 0x15, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, + 0x79, 0x6e, 0x63, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x06, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, + 0x12, 0x26, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, + 0x73, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x29, 0x0a, 0x04, 0x63, 0x6f, 0x73, 0x74, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x50, 0x72, + 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x73, 0x74, 0x52, 0x04, 0x63, + 0x6f, 0x73, 0x74, 0x1a, 0x39, 0x0a, 0x0b, 0x43, 0x6f, 0x75, 0x6e, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xbe, + 0x01, 0x0a, 0x10, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x4c, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x68, 0x69, 0x72, 0x6f, + 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x1a, 0x5c, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 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, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, + 0x79, 0x6e, 0x63, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0xd9, 0x01, 0x0a, 0x0d, 0x53, 0x79, 0x6e, 0x63, 0x54, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, + 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x07, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x64, + 0x65, 0x63, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x64, + 0x65, 0x63, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x62, 0x61, 0x6e, 0x64, + 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x61, 0x62, 0x61, 0x6e, 0x64, + 0x6f, 0x6e, 0x73, 0x12, 0x3a, 0x0a, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, + 0x54, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x1a, + 0x3a, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xb1, 0x01, 0x0a, 0x14, + 0x53, 0x79, 0x6e, 0x63, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x75, 0x6e, 0x6c, + 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, + 0x63, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, + 0x73, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x75, 0x6e, 0x6c, 0x6f, 0x63, + 0x6b, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0d, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x22, + 0xc1, 0x01, 0x0a, 0x0f, 0x53, 0x79, 0x6e, 0x63, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x73, 0x12, 0x3c, 0x0a, + 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, + 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x07, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x1a, 0x56, 0x0a, 0x0c, 0x55, + 0x70, 0x64, 0x61, 0x74, 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, 0x30, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, + 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0xac, 0x02, 0x0a, 0x10, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, + 0x0a, 0x13, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, + 0x72, 0x65, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x65, 0x74, 0x12, 0x1f, + 0x0a, 0x0b, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0a, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x26, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, + 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x26, 0x0a, 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, + 0x24, 0x0a, 0x0e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x65, + 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x54, 0x69, + 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x3b, 0x0a, 0x0f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, + 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6b, 0x52, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x52, 0x0e, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x73, 0x22, 0xb3, 0x01, 0x0a, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6b, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x73, 0x65, 0x74, 0x73, 0x12, 0x38, 0x0a, 0x07, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6b, 0x73, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x73, 0x1a, 0x52, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 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, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x79, 0x6e, + 0x63, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa3, 0x04, 0x0a, 0x0b, 0x53, 0x79, 0x6e, + 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x65, + 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x68, 0x69, + 0x72, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, + 0x52, 0x09, 0x69, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x2b, 0x0a, 0x07, 0x65, + 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x52, + 0x07, 0x65, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x12, 0x3a, 0x0a, 0x0c, 0x61, 0x63, 0x68, 0x69, + 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x06, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, + 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x52, 0x06, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x12, 0x4a, + 0x0a, 0x12, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, + 0x61, 0x72, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x52, 0x11, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x12, 0x3a, 0x0a, 0x0c, 0x70, 0x72, + 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x50, 0x72, 0x6f, 0x67, + 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x05, + 0x73, 0x74, 0x61, 0x74, 0x73, 0x12, 0x31, 0x0a, 0x09, 0x74, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x61, + 0x6c, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x53, 0x79, 0x6e, 0x63, 0x54, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x09, 0x74, + 0x75, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x0b, 0x75, 0x6e, 0x6c, 0x6f, + 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x52, 0x0b, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x12, 0x2b, 0x0a, 0x07, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6b, 0x73, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6b, 0x73, 0x52, 0x07, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6b, 0x73, 0x22, 0xd3, + 0x05, 0x0a, 0x0c, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x36, 0x0a, 0x06, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1e, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x06, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x2d, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x65, 0x6e, + 0x74, 0x6f, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x09, 0x69, 0x6e, 0x76, + 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x39, 0x0a, 0x0c, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x0c, 0x61, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x12, 0x28, 0x0a, 0x06, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x10, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x06, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x12, 0x45, 0x0a, 0x12, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, + 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, + 0x11, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x73, 0x12, 0x39, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, + 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x0c, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, 0x0a, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x68, + 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x09, 0x74, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x73, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x54, 0x75, + 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x09, 0x74, 0x75, 0x74, 0x6f, + 0x72, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x0b, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x68, 0x69, 0x72, + 0x6f, 0x2e, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x0b, 0x75, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x52, + 0x0a, 0x17, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, + 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x15, 0x61, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, + 0x72, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x63, 0x12, 0x2b, 0x0a, 0x07, + 0x73, 0x74, 0x72, 0x65, 0x61, 0x6b, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, + 0x68, 0x69, 0x72, 0x6f, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6b, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x07, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6b, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x57, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 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, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x2a, 0xec, 0x47, 0x0a, 0x05, 0x52, 0x70, 0x63, 0x49, 0x64, 0x12, 0x16, + 0x0a, 0x12, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x42, 0x0a, 0x15, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, + 0x5f, 0x49, 0x4e, 0x56, 0x45, 0x4e, 0x54, 0x4f, 0x52, 0x59, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, + 0x01, 0x1a, 0x27, 0xc2, 0x3e, 0x14, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x0d, 0x49, 0x6e, 0x76, + 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x1f, 0x52, 0x50, + 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x49, 0x4e, 0x56, 0x45, 0x4e, 0x54, 0x4f, 0x52, 0x59, 0x5f, 0x4c, + 0x49, 0x53, 0x54, 0x5f, 0x49, 0x4e, 0x56, 0x45, 0x4e, 0x54, 0x4f, 0x52, 0x59, 0x10, 0x02, 0x1a, + 0x27, 0xc2, 0x3e, 0x14, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x0d, 0x49, 0x6e, 0x76, 0x65, 0x6e, + 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x18, 0x52, 0x50, 0x43, 0x5f, + 0x49, 0x44, 0x5f, 0x49, 0x4e, 0x56, 0x45, 0x4e, 0x54, 0x4f, 0x52, 0x59, 0x5f, 0x43, 0x4f, 0x4e, + 0x53, 0x55, 0x4d, 0x45, 0x10, 0x03, 0x1a, 0x34, 0xc2, 0x3e, 0x17, 0x49, 0x6e, 0x76, 0x65, 0x6e, + 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0xca, 0x3e, 0x17, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, + 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x49, 0x0a, 0x16, + 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x49, 0x4e, 0x56, 0x45, 0x4e, 0x54, 0x4f, 0x52, 0x59, + 0x5f, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x10, 0x04, 0x1a, 0x2d, 0xc2, 0x3e, 0x15, 0x49, 0x6e, 0x76, + 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0xca, 0x3e, 0x12, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x6b, 0x12, 0x50, 0x0a, 0x17, 0x52, 0x50, 0x43, 0x5f, 0x49, + 0x44, 0x5f, 0x49, 0x4e, 0x56, 0x45, 0x4e, 0x54, 0x4f, 0x52, 0x59, 0x5f, 0x55, 0x50, 0x44, 0x41, + 0x54, 0x45, 0x10, 0x05, 0x1a, 0x33, 0xc2, 0x3e, 0x1b, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, + 0x72, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x12, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x6b, 0x12, 0x50, 0x0a, 0x17, 0x52, 0x50, 0x43, + 0x5f, 0x49, 0x44, 0x5f, 0x49, 0x4e, 0x56, 0x45, 0x4e, 0x54, 0x4f, 0x52, 0x59, 0x5f, 0x44, 0x45, + 0x4c, 0x45, 0x54, 0x45, 0x10, 0x7b, 0x1a, 0x33, 0xc2, 0x3e, 0x1b, 0x49, 0x6e, 0x76, 0x65, 0x6e, + 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x12, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, + 0x72, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x6b, 0x12, 0x5f, 0x0a, 0x1d, 0x52, + 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x43, 0x4f, 0x4e, 0x4f, 0x4d, 0x59, 0x5f, 0x44, 0x4f, + 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x10, 0x06, 0x1a, 0x3c, + 0xc2, 0x3e, 0x1b, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, + 0x1b, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x52, 0x0a, 0x1c, + 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x43, 0x4f, 0x4e, 0x4f, 0x4d, 0x59, 0x5f, 0x44, + 0x4f, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x47, 0x49, 0x56, 0x45, 0x10, 0x07, 0x1a, 0x30, + 0xc2, 0x3e, 0x1a, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x47, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x10, + 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x6b, + 0x12, 0x5a, 0x0a, 0x1b, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x43, 0x4f, 0x4e, 0x4f, + 0x4d, 0x59, 0x5f, 0x44, 0x4f, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x47, 0x45, 0x54, 0x10, + 0x08, 0x1a, 0x39, 0xc2, 0x3e, 0x19, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x44, 0x6f, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, + 0x3e, 0x1a, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x1f, + 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x43, 0x4f, 0x4e, 0x4f, 0x4d, 0x59, 0x5f, 0x44, + 0x4f, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, + 0x09, 0x1a, 0x2e, 0xc2, 0x3e, 0x16, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x44, 0x6f, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x12, 0x45, + 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x44, 0x6f, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, + 0x6b, 0x12, 0x41, 0x0a, 0x18, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x43, 0x4f, 0x4e, + 0x4f, 0x4d, 0x59, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x47, 0x45, 0x54, 0x10, 0x0a, 0x1a, + 0x23, 0xc2, 0x3e, 0x12, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x0b, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x43, 0x0a, 0x14, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x45, + 0x43, 0x4f, 0x4e, 0x4f, 0x4d, 0x59, 0x5f, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x10, 0x0b, 0x1a, 0x29, + 0xc2, 0x3e, 0x13, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x10, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x6b, 0x12, 0x46, 0x0a, 0x1e, 0x52, 0x50, 0x43, + 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x43, 0x4f, 0x4e, 0x4f, 0x4d, 0x59, 0x5f, 0x50, 0x55, 0x52, 0x43, + 0x48, 0x41, 0x53, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x10, 0x0c, 0x1a, 0x22, 0xc2, + 0x3e, 0x1c, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, + 0x65, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, + 0x00, 0x12, 0x50, 0x0a, 0x1c, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x43, 0x4f, 0x4e, + 0x4f, 0x4d, 0x59, 0x5f, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x49, 0x54, 0x45, + 0x4d, 0x10, 0x0d, 0x1a, 0x2e, 0xc2, 0x3e, 0x16, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x50, + 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, + 0x12, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, + 0x41, 0x63, 0x6b, 0x12, 0x48, 0x0a, 0x1f, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x43, + 0x4f, 0x4e, 0x4f, 0x4d, 0x59, 0x5f, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x52, + 0x45, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x10, 0x3b, 0x1a, 0x23, 0xc2, 0x3e, 0x1d, 0x45, 0x63, 0x6f, + 0x6e, 0x6f, 0x6d, 0x79, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x00, 0x12, 0x5e, 0x0a, + 0x1f, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x43, 0x4f, 0x4e, 0x4f, 0x4d, 0x59, 0x5f, + 0x50, 0x4c, 0x41, 0x43, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, + 0x10, 0x0e, 0x1a, 0x39, 0xc2, 0x3e, 0x1d, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x50, 0x6c, + 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x16, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x50, 0x6c, + 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x5c, 0x0a, + 0x1e, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x43, 0x4f, 0x4e, 0x4f, 0x4d, 0x59, 0x5f, + 0x50, 0x4c, 0x41, 0x43, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, + 0x0f, 0x1a, 0x38, 0xc2, 0x3e, 0x1c, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x50, 0x6c, 0x61, + 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0xca, 0x3e, 0x16, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x50, 0x6c, 0x61, 0x63, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x52, 0x0a, 0x19, 0x52, + 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x43, 0x48, 0x49, 0x45, 0x56, 0x45, 0x4d, 0x45, 0x4e, + 0x54, 0x53, 0x5f, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x10, 0x10, 0x1a, 0x33, 0xc2, 0x3e, 0x18, 0x41, + 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6c, 0x61, 0x69, 0x6d, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x15, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x6b, 0x12, + 0x32, 0x0a, 0x17, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x43, 0x48, 0x49, 0x45, 0x56, + 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x10, 0x11, 0x1a, 0x15, 0xc2, 0x3e, + 0x00, 0xca, 0x3e, 0x0f, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x54, 0x0a, 0x1a, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x43, + 0x48, 0x49, 0x45, 0x56, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, + 0x45, 0x10, 0x12, 0x1a, 0x34, 0xc2, 0x3e, 0x19, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0xca, 0x3e, 0x15, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x6b, 0x12, 0x27, 0x0a, 0x11, 0x52, 0x50, 0x43, + 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x4e, 0x45, 0x52, 0x47, 0x59, 0x5f, 0x47, 0x45, 0x54, 0x10, 0x13, + 0x1a, 0x10, 0xc2, 0x3e, 0x00, 0xca, 0x3e, 0x0a, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x42, 0x0a, 0x13, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x4e, 0x45, + 0x52, 0x47, 0x59, 0x5f, 0x53, 0x50, 0x45, 0x4e, 0x44, 0x10, 0x14, 0x1a, 0x29, 0xc2, 0x3e, 0x12, + 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x53, 0x70, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0xca, 0x3e, 0x11, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x53, 0x70, 0x65, 0x6e, 0x64, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x3b, 0x0a, 0x13, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, + 0x5f, 0x45, 0x4e, 0x45, 0x52, 0x47, 0x59, 0x5f, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x10, 0x41, 0x1a, + 0x22, 0xc2, 0x3e, 0x12, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x0a, 0x45, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x14, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x55, + 0x54, 0x4f, 0x52, 0x49, 0x41, 0x4c, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x10, 0x15, 0x1a, 0x12, 0xc2, + 0x3e, 0x00, 0xca, 0x3e, 0x0c, 0x54, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x40, 0x0a, 0x17, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x55, 0x54, 0x4f, + 0x52, 0x49, 0x41, 0x4c, 0x53, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x50, 0x54, 0x10, 0x16, 0x1a, 0x23, + 0xc2, 0x3e, 0x15, 0x54, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x70, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x08, 0x54, 0x75, 0x74, 0x6f, 0x72, + 0x69, 0x61, 0x6c, 0x12, 0x42, 0x0a, 0x18, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x55, + 0x54, 0x4f, 0x52, 0x49, 0x41, 0x4c, 0x53, 0x5f, 0x44, 0x45, 0x43, 0x4c, 0x49, 0x4e, 0x45, 0x10, + 0x17, 0x1a, 0x24, 0xc2, 0x3e, 0x16, 0x54, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x44, 0x65, + 0x63, 0x6c, 0x69, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x08, 0x54, + 0x75, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x12, 0x42, 0x0a, 0x18, 0x52, 0x50, 0x43, 0x5f, 0x49, + 0x44, 0x5f, 0x54, 0x55, 0x54, 0x4f, 0x52, 0x49, 0x41, 0x4c, 0x53, 0x5f, 0x41, 0x42, 0x41, 0x4e, + 0x44, 0x4f, 0x4e, 0x10, 0x18, 0x1a, 0x24, 0xc2, 0x3e, 0x16, 0x54, 0x75, 0x74, 0x6f, 0x72, 0x69, + 0x61, 0x6c, 0x41, 0x62, 0x61, 0x6e, 0x64, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0xca, 0x3e, 0x08, 0x54, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x12, 0x44, 0x0a, 0x17, 0x52, + 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x55, 0x54, 0x4f, 0x52, 0x49, 0x41, 0x4c, 0x53, 0x5f, + 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x19, 0x1a, 0x27, 0xc2, 0x3e, 0x15, 0x54, 0x75, 0x74, + 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0xca, 0x3e, 0x0c, 0x54, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x42, 0x0a, 0x16, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x55, 0x54, 0x4f, + 0x52, 0x49, 0x41, 0x4c, 0x53, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x54, 0x10, 0x4f, 0x1a, 0x26, 0xc2, + 0x3e, 0x14, 0x54, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x0c, 0x54, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x61, + 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x13, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, + 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x1a, 0x1a, 0x1b, + 0xc2, 0x3e, 0x11, 0x54, 0x65, 0x61, 0x6d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x04, 0x54, 0x65, 0x61, 0x6d, 0x12, 0x34, 0x0a, 0x13, 0x52, + 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, + 0x54, 0x45, 0x10, 0x79, 0x1a, 0x1b, 0xc2, 0x3e, 0x11, 0x54, 0x65, 0x61, 0x6d, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x04, 0x54, 0x65, 0x61, + 0x6d, 0x12, 0x34, 0x0a, 0x11, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x45, 0x41, 0x4d, + 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x1b, 0x1a, 0x1d, 0xc2, 0x3e, 0x0f, 0x54, 0x65, 0x61, + 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x08, 0x54, + 0x65, 0x61, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x13, 0x52, 0x50, 0x43, 0x5f, 0x49, + 0x44, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x10, 0x1c, + 0x1a, 0x1f, 0xc2, 0x3e, 0x11, 0x54, 0x65, 0x61, 0x6d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x08, 0x54, 0x65, 0x61, 0x6d, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x2e, 0x0a, 0x10, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x45, 0x41, 0x4d, + 0x53, 0x5f, 0x47, 0x45, 0x54, 0x10, 0x7a, 0x1a, 0x18, 0xc2, 0x3e, 0x0e, 0x54, 0x65, 0x61, 0x6d, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x04, 0x54, 0x65, 0x61, + 0x6d, 0x12, 0x49, 0x0a, 0x1c, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x45, 0x41, 0x4d, + 0x53, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x4c, 0x49, 0x53, + 0x54, 0x10, 0x7c, 0x1a, 0x27, 0xc2, 0x3e, 0x14, 0x55, 0x73, 0x65, 0x72, 0x54, 0x65, 0x61, 0x6d, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x0d, 0x55, + 0x73, 0x65, 0x72, 0x54, 0x65, 0x61, 0x6d, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x57, 0x0a, 0x1f, + 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x57, 0x52, 0x49, + 0x54, 0x45, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, + 0x1d, 0x1a, 0x32, 0xc2, 0x3e, 0x1b, 0x54, 0x65, 0x61, 0x6d, 0x57, 0x72, 0x69, 0x74, 0x65, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0xca, 0x3e, 0x11, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x41, 0x63, 0x6b, 0x12, 0x3f, 0x0a, 0x16, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, + 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x47, 0x45, 0x54, 0x10, + 0x5e, 0x1a, 0x23, 0xc2, 0x3e, 0x14, 0x54, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x09, 0x54, 0x65, 0x61, + 0x6d, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x53, 0x0a, 0x1b, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, + 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x50, 0x55, 0x52, + 0x43, 0x48, 0x41, 0x53, 0x45, 0x10, 0x5f, 0x1a, 0x32, 0xc2, 0x3e, 0x18, 0x54, 0x65, 0x61, 0x6d, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x14, 0x54, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x41, 0x63, 0x6b, 0x12, 0x41, 0x0a, 0x17, 0x52, + 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x57, 0x41, 0x4c, 0x4c, + 0x45, 0x54, 0x5f, 0x47, 0x45, 0x54, 0x10, 0x60, 0x1a, 0x24, 0xc2, 0x3e, 0x14, 0x54, 0x65, 0x61, + 0x6d, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0xca, 0x3e, 0x0a, 0x54, 0x65, 0x61, 0x6d, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x45, + 0x0a, 0x19, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x57, + 0x41, 0x4c, 0x4c, 0x45, 0x54, 0x5f, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x10, 0x61, 0x1a, 0x26, 0xc2, + 0x3e, 0x16, 0x54, 0x65, 0x61, 0x6d, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x47, 0x72, 0x61, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x0a, 0x54, 0x65, 0x61, 0x6d, 0x57, + 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x3d, 0x0a, 0x16, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, + 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x10, + 0x62, 0x1a, 0x21, 0xc2, 0x3e, 0x13, 0x54, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x08, 0x53, 0x74, 0x61, 0x74, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x19, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, + 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, + 0x45, 0x10, 0x63, 0x1a, 0x23, 0xc2, 0x3e, 0x15, 0x54, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x08, + 0x53, 0x74, 0x61, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x1b, 0x52, 0x50, 0x43, 0x5f, + 0x49, 0x44, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x49, 0x4e, 0x56, 0x45, 0x4e, 0x54, 0x4f, + 0x52, 0x59, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x64, 0x1a, 0x2b, 0xc2, 0x3e, 0x18, 0x54, 0x65, + 0x61, 0x6d, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x0d, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, + 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x56, 0x0a, 0x25, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, + 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x49, 0x4e, 0x56, 0x45, 0x4e, 0x54, 0x4f, 0x52, 0x59, + 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x49, 0x4e, 0x56, 0x45, 0x4e, 0x54, 0x4f, 0x52, 0x59, 0x10, + 0x65, 0x1a, 0x2b, 0xc2, 0x3e, 0x18, 0x54, 0x65, 0x61, 0x6d, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, + 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, + 0x0d, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x5c, + 0x0a, 0x1e, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x49, + 0x4e, 0x56, 0x45, 0x4e, 0x54, 0x4f, 0x52, 0x59, 0x5f, 0x43, 0x4f, 0x4e, 0x53, 0x55, 0x4d, 0x45, + 0x10, 0x66, 0x1a, 0x38, 0xc2, 0x3e, 0x1b, 0x54, 0x65, 0x61, 0x6d, 0x49, 0x6e, 0x76, 0x65, 0x6e, + 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0xca, 0x3e, 0x17, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, + 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x12, 0x53, 0x0a, 0x1c, + 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x49, 0x4e, 0x56, + 0x45, 0x4e, 0x54, 0x4f, 0x52, 0x59, 0x5f, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x10, 0x67, 0x1a, 0x31, + 0xc2, 0x3e, 0x19, 0x54, 0x65, 0x61, 0x6d, 0x49, 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, + 0x47, 0x72, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x12, 0x49, + 0x6e, 0x76, 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, + 0x6b, 0x12, 0x5a, 0x0a, 0x1d, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x45, 0x41, 0x4d, + 0x53, 0x5f, 0x49, 0x4e, 0x56, 0x45, 0x4e, 0x54, 0x4f, 0x52, 0x59, 0x5f, 0x55, 0x50, 0x44, 0x41, + 0x54, 0x45, 0x10, 0x68, 0x1a, 0x37, 0xc2, 0x3e, 0x1f, 0x54, 0x65, 0x61, 0x6d, 0x49, 0x6e, 0x76, + 0x65, 0x6e, 0x74, 0x6f, 0x72, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x74, 0x65, 0x6d, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x12, 0x49, 0x6e, 0x76, 0x65, 0x6e, + 0x74, 0x6f, 0x72, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x6b, 0x12, 0x5c, 0x0a, + 0x1f, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x41, 0x43, + 0x48, 0x49, 0x45, 0x56, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x43, 0x4c, 0x41, 0x49, 0x4d, + 0x10, 0x69, 0x1a, 0x37, 0xc2, 0x3e, 0x1c, 0x54, 0x65, 0x61, 0x6d, 0x41, 0x63, 0x68, 0x69, 0x65, + 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0xca, 0x3e, 0x15, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x6b, 0x12, 0x52, 0x0a, 0x1d, 0x52, + 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x41, 0x43, 0x48, 0x49, + 0x45, 0x56, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x10, 0x6a, 0x1a, 0x2f, + 0xc2, 0x3e, 0x1a, 0x54, 0x65, 0x61, 0x6d, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x0f, + 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x5e, 0x0a, 0x20, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, + 0x41, 0x43, 0x48, 0x49, 0x45, 0x56, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x55, 0x50, 0x44, + 0x41, 0x54, 0x45, 0x10, 0x6b, 0x1a, 0x38, 0xc2, 0x3e, 0x1d, 0x54, 0x65, 0x61, 0x6d, 0x41, 0x63, + 0x68, 0x69, 0x65, 0x76, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x15, 0x41, 0x63, 0x68, 0x69, 0x65, 0x76, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x63, 0x6b, 0x12, + 0x5c, 0x0a, 0x23, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, + 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x4c, 0x45, 0x41, 0x44, 0x45, 0x52, 0x42, 0x4f, 0x41, 0x52, + 0x44, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x6c, 0x1a, 0x33, 0xc2, 0x3e, 0x18, 0x54, 0x65, 0x61, + 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x4c, 0x69, 0x73, 0x74, 0xca, 0x3e, 0x15, 0x54, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x12, 0x59, 0x0a, + 0x22, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x45, 0x56, + 0x45, 0x4e, 0x54, 0x5f, 0x4c, 0x45, 0x41, 0x44, 0x45, 0x52, 0x42, 0x4f, 0x41, 0x52, 0x44, 0x5f, + 0x47, 0x45, 0x54, 0x10, 0x6d, 0x1a, 0x31, 0xc2, 0x3e, 0x17, 0x54, 0x65, 0x61, 0x6d, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x47, 0x65, + 0x74, 0xca, 0x3e, 0x14, 0x54, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x5f, 0x0a, 0x25, 0x52, 0x50, 0x43, 0x5f, + 0x49, 0x44, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x4c, + 0x45, 0x41, 0x44, 0x45, 0x52, 0x42, 0x4f, 0x41, 0x52, 0x44, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, + 0x45, 0x10, 0x6e, 0x1a, 0x34, 0xc2, 0x3e, 0x1a, 0x54, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0xca, 0x3e, 0x14, 0x54, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x5d, 0x0a, 0x24, 0x52, 0x50, 0x43, + 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, + 0x4c, 0x45, 0x41, 0x44, 0x45, 0x52, 0x42, 0x4f, 0x41, 0x52, 0x44, 0x5f, 0x43, 0x4c, 0x41, 0x49, + 0x4d, 0x10, 0x6f, 0x1a, 0x33, 0xc2, 0x3e, 0x19, 0x54, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, + 0x6d, 0xca, 0x3e, 0x14, 0x54, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x5b, 0x0a, 0x23, 0x52, 0x50, 0x43, 0x5f, + 0x49, 0x44, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x4c, + 0x45, 0x41, 0x44, 0x45, 0x52, 0x42, 0x4f, 0x41, 0x52, 0x44, 0x5f, 0x52, 0x4f, 0x4c, 0x4c, 0x10, + 0x70, 0x1a, 0x32, 0xc2, 0x3e, 0x18, 0x54, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x6c, 0x6c, 0xca, 0x3e, + 0x14, 0x54, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x6d, 0x0a, 0x29, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, + 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x4c, 0x45, 0x41, 0x44, + 0x45, 0x52, 0x42, 0x4f, 0x41, 0x52, 0x44, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x5f, 0x46, 0x49, + 0x4c, 0x4c, 0x10, 0x71, 0x1a, 0x3e, 0xc2, 0x3e, 0x24, 0x54, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x44, 0x65, 0x62, + 0x75, 0x67, 0x46, 0x69, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x14, + 0x54, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, + 0x6f, 0x61, 0x72, 0x64, 0x12, 0x7e, 0x0a, 0x32, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, + 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x4c, 0x45, 0x41, 0x44, 0x45, + 0x52, 0x42, 0x4f, 0x41, 0x52, 0x44, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x5f, 0x52, 0x41, 0x4e, + 0x44, 0x4f, 0x4d, 0x5f, 0x53, 0x43, 0x4f, 0x52, 0x45, 0x53, 0x10, 0x72, 0x1a, 0x46, 0xc2, 0x3e, + 0x2c, 0x54, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x62, 0x6f, 0x61, 0x72, 0x64, 0x44, 0x65, 0x62, 0x75, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x14, + 0x54, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, + 0x6f, 0x61, 0x72, 0x64, 0x12, 0x59, 0x0a, 0x20, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, + 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x52, 0x45, 0x57, 0x41, 0x52, 0x44, 0x5f, 0x4d, 0x41, 0x49, 0x4c, + 0x42, 0x4f, 0x58, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x73, 0x1a, 0x33, 0xc2, 0x3e, 0x1c, 0x54, + 0x65, 0x61, 0x6d, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x61, 0x69, 0x6c, 0x62, 0x6f, 0x78, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x11, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x4d, 0x61, 0x69, 0x6c, 0x62, 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x5c, 0x0a, 0x21, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, + 0x52, 0x45, 0x57, 0x41, 0x52, 0x44, 0x5f, 0x4d, 0x41, 0x49, 0x4c, 0x42, 0x4f, 0x58, 0x5f, 0x43, + 0x4c, 0x41, 0x49, 0x4d, 0x10, 0x74, 0x1a, 0x35, 0xc2, 0x3e, 0x1d, 0x54, 0x65, 0x61, 0x6d, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x61, 0x69, 0x6c, 0x62, 0x6f, 0x78, 0x43, 0x6c, 0x61, 0x69, + 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x12, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x4d, 0x61, 0x69, 0x6c, 0x62, 0x6f, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x4c, 0x0a, + 0x22, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x52, 0x45, + 0x57, 0x41, 0x52, 0x44, 0x5f, 0x4d, 0x41, 0x49, 0x4c, 0x42, 0x4f, 0x58, 0x5f, 0x44, 0x45, 0x4c, + 0x45, 0x54, 0x45, 0x10, 0x75, 0x1a, 0x24, 0xc2, 0x3e, 0x1e, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x4d, 0x61, 0x69, 0x6c, 0x62, 0x6f, 0x78, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x00, 0x12, 0x41, 0x0a, 0x16, 0x52, + 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x47, 0x49, 0x46, 0x54, + 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x76, 0x1a, 0x25, 0xc2, 0x3e, 0x13, 0x54, 0x65, 0x61, 0x6d, + 0x47, 0x69, 0x66, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, + 0x3e, 0x0c, 0x54, 0x65, 0x61, 0x6d, 0x47, 0x69, 0x66, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x56, + 0x0a, 0x1c, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x47, + 0x49, 0x46, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x10, 0x77, + 0x1a, 0x34, 0xc2, 0x3e, 0x19, 0x54, 0x65, 0x61, 0x6d, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, + 0x15, 0x54, 0x65, 0x61, 0x6d, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x41, 0x63, 0x6b, 0x12, 0x47, 0x0a, 0x17, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, + 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, 0x5f, 0x47, 0x49, 0x46, 0x54, 0x5f, 0x43, 0x4c, 0x41, 0x49, + 0x4d, 0x10, 0x78, 0x1a, 0x2a, 0xc2, 0x3e, 0x14, 0x54, 0x65, 0x61, 0x6d, 0x47, 0x69, 0x66, 0x74, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x10, 0x54, + 0x65, 0x61, 0x6d, 0x47, 0x69, 0x66, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x41, 0x63, 0x6b, 0x12, + 0x34, 0x0a, 0x19, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x55, 0x4e, 0x4c, 0x4f, 0x43, 0x4b, + 0x41, 0x42, 0x4c, 0x45, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x1e, 0x1a, 0x15, + 0xc2, 0x3e, 0x00, 0xca, 0x3e, 0x0f, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x16, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, + 0x55, 0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x41, 0x42, 0x4c, 0x45, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x10, + 0x1f, 0x1a, 0x15, 0xc2, 0x3e, 0x00, 0xca, 0x3e, 0x0f, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x1f, 0x52, 0x50, 0x43, 0x5f, + 0x49, 0x44, 0x5f, 0x55, 0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x41, 0x42, 0x4c, 0x45, 0x53, 0x5f, 0x55, + 0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0x20, 0x1a, 0x27, 0xc2, + 0x3e, 0x12, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x0f, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x4f, 0x0a, 0x22, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, + 0x5f, 0x55, 0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x41, 0x42, 0x4c, 0x45, 0x53, 0x5f, 0x50, 0x55, 0x52, + 0x43, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x55, 0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x21, 0x1a, 0x27, + 0xc2, 0x3e, 0x12, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x0f, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3b, 0x0a, 0x20, 0x52, 0x50, 0x43, 0x5f, 0x49, + 0x44, 0x5f, 0x55, 0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x41, 0x42, 0x4c, 0x45, 0x53, 0x5f, 0x50, 0x55, + 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x4c, 0x4f, 0x54, 0x10, 0x22, 0x1a, 0x15, 0xc2, + 0x3e, 0x00, 0xca, 0x3e, 0x0f, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x18, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x55, + 0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x41, 0x42, 0x4c, 0x45, 0x53, 0x5f, 0x43, 0x4c, 0x41, 0x49, 0x4d, + 0x10, 0x23, 0x1a, 0x29, 0xc2, 0x3e, 0x12, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x11, 0x55, 0x6e, 0x6c, 0x6f, + 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x12, 0x51, 0x0a, + 0x1c, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x55, 0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x41, 0x42, + 0x4c, 0x45, 0x53, 0x5f, 0x51, 0x55, 0x45, 0x55, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x10, 0x3e, 0x1a, + 0x2f, 0xc2, 0x3e, 0x1a, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x51, + 0x75, 0x65, 0x75, 0x65, 0x41, 0x64, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, + 0x0f, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x57, 0x0a, 0x1f, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x55, 0x4e, 0x4c, 0x4f, 0x43, + 0x4b, 0x41, 0x42, 0x4c, 0x45, 0x53, 0x5f, 0x51, 0x55, 0x45, 0x55, 0x45, 0x5f, 0x52, 0x45, 0x4d, + 0x4f, 0x56, 0x45, 0x10, 0x3f, 0x1a, 0x32, 0xc2, 0x3e, 0x1d, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, + 0x61, 0x62, 0x6c, 0x65, 0x73, 0x51, 0x75, 0x65, 0x75, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x0f, 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, + 0x61, 0x62, 0x6c, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x1c, 0x52, 0x50, 0x43, + 0x5f, 0x49, 0x44, 0x5f, 0x55, 0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x41, 0x42, 0x4c, 0x45, 0x53, 0x5f, + 0x51, 0x55, 0x45, 0x55, 0x45, 0x5f, 0x53, 0x45, 0x54, 0x10, 0x40, 0x1a, 0x2f, 0xc2, 0x3e, 0x1a, + 0x55, 0x6e, 0x6c, 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x51, 0x75, 0x65, 0x75, 0x65, + 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x0f, 0x55, 0x6e, 0x6c, + 0x6f, 0x63, 0x6b, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x14, + 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x41, 0x54, 0x45, + 0x5f, 0x41, 0x50, 0x50, 0x10, 0x24, 0x1a, 0x14, 0xc2, 0x3e, 0x0e, 0x52, 0x61, 0x74, 0x65, 0x41, + 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x00, 0x12, 0x3a, 0x0a, 0x1c, + 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x45, 0x54, 0x5f, + 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x50, 0x52, 0x45, 0x46, 0x53, 0x10, 0x25, 0x1a, 0x18, + 0xc2, 0x3e, 0x12, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x65, 0x66, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x00, 0x12, 0x33, 0x0a, 0x10, 0x52, 0x50, 0x43, 0x5f, + 0x49, 0x44, 0x5f, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x10, 0x3a, 0x1a, 0x1d, + 0xc2, 0x3e, 0x0b, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, + 0x0c, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, + 0x1e, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x4c, 0x45, 0x41, 0x44, 0x45, 0x52, 0x42, 0x4f, + 0x41, 0x52, 0x44, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x47, 0x45, 0x54, 0x10, + 0x26, 0x1a, 0x1b, 0xc2, 0x3e, 0x00, 0xca, 0x3e, 0x15, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, + 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x4e, + 0x0a, 0x1d, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x4c, + 0x45, 0x41, 0x44, 0x45, 0x52, 0x42, 0x4f, 0x41, 0x52, 0x44, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, + 0x50, 0x1a, 0x2b, 0xc2, 0x3e, 0x14, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0xca, 0x3e, 0x11, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x12, 0x4b, + 0x0a, 0x1c, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x4c, + 0x45, 0x41, 0x44, 0x45, 0x52, 0x42, 0x4f, 0x41, 0x52, 0x44, 0x5f, 0x47, 0x45, 0x54, 0x10, 0x2a, + 0x1a, 0x29, 0xc2, 0x3e, 0x13, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x62, 0x6f, 0x61, 0x72, 0x64, 0x47, 0x65, 0x74, 0xca, 0x3e, 0x10, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x51, 0x0a, 0x1f, 0x52, + 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x4c, 0x45, 0x41, 0x44, + 0x45, 0x52, 0x42, 0x4f, 0x41, 0x52, 0x44, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x2b, + 0x1a, 0x2c, 0xc2, 0x3e, 0x16, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x62, 0x6f, 0x61, 0x72, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0xca, 0x3e, 0x10, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x4f, + 0x0a, 0x1e, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x4c, + 0x45, 0x41, 0x44, 0x45, 0x52, 0x42, 0x4f, 0x41, 0x52, 0x44, 0x5f, 0x43, 0x4c, 0x41, 0x49, 0x4d, + 0x10, 0x2c, 0x1a, 0x2b, 0xc2, 0x3e, 0x15, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0xca, 0x3e, 0x10, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, + 0x4d, 0x0a, 0x1d, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, + 0x4c, 0x45, 0x41, 0x44, 0x45, 0x52, 0x42, 0x4f, 0x41, 0x52, 0x44, 0x5f, 0x52, 0x4f, 0x4c, 0x4c, + 0x10, 0x2d, 0x1a, 0x2a, 0xc2, 0x3e, 0x14, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x6f, 0x6c, 0x6c, 0xca, 0x3e, 0x10, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x3f, + 0x0a, 0x23, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x4c, + 0x45, 0x41, 0x44, 0x45, 0x52, 0x42, 0x4f, 0x41, 0x52, 0x44, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, + 0x5f, 0x46, 0x49, 0x4c, 0x4c, 0x10, 0x3c, 0x1a, 0x16, 0xc2, 0x3e, 0x00, 0xca, 0x3e, 0x10, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, + 0x70, 0x0a, 0x2c, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, + 0x4c, 0x45, 0x41, 0x44, 0x45, 0x52, 0x42, 0x4f, 0x41, 0x52, 0x44, 0x5f, 0x44, 0x45, 0x42, 0x55, + 0x47, 0x5f, 0x52, 0x41, 0x4e, 0x44, 0x4f, 0x4d, 0x5f, 0x53, 0x43, 0x4f, 0x52, 0x45, 0x53, 0x10, + 0x3d, 0x1a, 0x3e, 0xc2, 0x3e, 0x28, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x44, 0x65, 0x62, 0x75, 0x67, 0x52, 0x61, 0x6e, 0x64, 0x6f, + 0x6d, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, + 0x10, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x12, 0x24, 0x0a, 0x10, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x53, 0x5f, 0x47, 0x45, 0x54, 0x10, 0x2e, 0x1a, 0x0e, 0xc2, 0x3e, 0x00, 0xca, 0x3e, 0x08, 0x53, + 0x74, 0x61, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x13, 0x52, 0x50, 0x43, 0x5f, 0x49, + 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x2f, + 0x1a, 0x1f, 0xc2, 0x3e, 0x11, 0x53, 0x74, 0x61, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x08, 0x53, 0x74, 0x61, 0x74, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x47, 0x0a, 0x17, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x47, + 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x10, 0x30, 0x1a, 0x2a, + 0xc2, 0x3e, 0x15, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x0f, 0x50, 0x72, 0x6f, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x1c, 0x52, 0x50, + 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, + 0x53, 0x5f, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x10, 0x31, 0x1a, 0x2f, 0xc2, 0x3e, + 0x1a, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x75, 0x72, 0x63, + 0x68, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x0f, 0x50, 0x72, + 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x4d, 0x0a, + 0x1a, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, + 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x32, 0x1a, 0x2d, 0xc2, + 0x3e, 0x18, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x0f, 0x50, 0x72, 0x6f, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x1d, + 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x49, 0x4e, 0x43, 0x45, 0x4e, 0x54, 0x49, 0x56, 0x45, + 0x53, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x45, 0x52, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x33, 0x1a, + 0x13, 0xc2, 0x3e, 0x00, 0xca, 0x3e, 0x0d, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x54, 0x0a, 0x1f, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x49, + 0x4e, 0x43, 0x45, 0x4e, 0x54, 0x49, 0x56, 0x45, 0x53, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x45, 0x52, + 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x34, 0x1a, 0x2f, 0xc2, 0x3e, 0x1c, 0x49, 0x6e, + 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x0d, 0x49, 0x6e, 0x63, + 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x54, 0x0a, 0x1f, 0x52, 0x50, + 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x49, 0x4e, 0x43, 0x45, 0x4e, 0x54, 0x49, 0x56, 0x45, 0x53, 0x5f, + 0x53, 0x45, 0x4e, 0x44, 0x45, 0x52, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x35, 0x1a, + 0x2f, 0xc2, 0x3e, 0x1c, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x53, 0x65, 0x6e, + 0x64, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0xca, 0x3e, 0x0d, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x52, 0x0a, 0x1e, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x49, 0x4e, 0x43, 0x45, 0x4e, + 0x54, 0x49, 0x56, 0x45, 0x53, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x45, 0x52, 0x5f, 0x43, 0x4c, 0x41, + 0x49, 0x4d, 0x10, 0x36, 0x1a, 0x2e, 0xc2, 0x3e, 0x1b, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, + 0x76, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x0d, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x54, 0x0a, 0x1f, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x49, + 0x4e, 0x43, 0x45, 0x4e, 0x54, 0x49, 0x56, 0x45, 0x53, 0x5f, 0x52, 0x45, 0x43, 0x49, 0x50, 0x49, + 0x45, 0x4e, 0x54, 0x5f, 0x47, 0x45, 0x54, 0x10, 0x37, 0x1a, 0x2f, 0xc2, 0x3e, 0x1c, 0x49, 0x6e, + 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x0d, 0x49, 0x6e, 0x63, + 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x58, 0x0a, 0x21, 0x52, 0x50, + 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x49, 0x4e, 0x43, 0x45, 0x4e, 0x54, 0x49, 0x56, 0x45, 0x53, 0x5f, + 0x52, 0x45, 0x43, 0x49, 0x50, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x10, + 0x38, 0x1a, 0x31, 0xc2, 0x3e, 0x1e, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, 0x52, + 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x0d, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x76, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x4b, 0x0a, 0x19, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x50, + 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x52, 0x45, 0x53, 0x45, + 0x54, 0x10, 0x39, 0x1a, 0x2c, 0xc2, 0x3e, 0x17, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, + 0x3e, 0x0f, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x39, 0x0a, 0x1d, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x55, 0x43, 0x54, + 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x45, 0x4d, 0x50, 0x4c, 0x41, 0x54, + 0x45, 0x53, 0x10, 0x42, 0x1a, 0x16, 0xc2, 0x3e, 0x00, 0xca, 0x3e, 0x10, 0x41, 0x75, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x3d, 0x0a, 0x14, + 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x55, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, + 0x4c, 0x49, 0x53, 0x54, 0x10, 0x43, 0x1a, 0x23, 0xc2, 0x3e, 0x12, 0x41, 0x75, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x0b, + 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x13, 0x52, + 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x55, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x42, + 0x49, 0x44, 0x10, 0x44, 0x1a, 0x1e, 0xc2, 0x3e, 0x11, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x42, 0x69, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x07, 0x41, 0x75, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x19, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x41, + 0x55, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x42, 0x49, + 0x44, 0x10, 0x45, 0x1a, 0x2b, 0xc2, 0x3e, 0x16, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x6c, 0x61, 0x69, 0x6d, 0x42, 0x69, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, + 0x0f, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x42, 0x69, 0x64, + 0x12, 0x56, 0x0a, 0x1d, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x55, 0x43, 0x54, 0x49, + 0x4f, 0x4e, 0x53, 0x5f, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, + 0x44, 0x10, 0x46, 0x1a, 0x33, 0xc2, 0x3e, 0x1a, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, + 0x6c, 0x61, 0x69, 0x6d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0xca, 0x3e, 0x13, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x61, 0x69, + 0x6d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x43, 0x0a, 0x16, 0x52, 0x50, 0x43, 0x5f, + 0x49, 0x44, 0x5f, 0x41, 0x55, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x43, 0x41, 0x4e, 0x43, + 0x45, 0x4c, 0x10, 0x47, 0x1a, 0x27, 0xc2, 0x3e, 0x14, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x0d, + 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x12, 0x3d, 0x0a, + 0x16, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x55, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, + 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x48, 0x1a, 0x21, 0xc2, 0x3e, 0x14, 0x41, 0x75, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0xca, 0x3e, 0x07, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x46, 0x0a, 0x19, + 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x55, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, + 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x42, 0x49, 0x44, 0x53, 0x10, 0x49, 0x1a, 0x27, 0xc2, 0x3e, 0x16, + 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x69, 0x64, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x0b, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x1c, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x41, + 0x55, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x43, 0x52, 0x45, + 0x41, 0x54, 0x45, 0x44, 0x10, 0x4a, 0x1a, 0x2a, 0xc2, 0x3e, 0x19, 0x41, 0x75, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x0b, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x13, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x54, 0x52, + 0x45, 0x41, 0x4b, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x4b, 0x1a, 0x11, 0xc2, 0x3e, 0x00, + 0xca, 0x3e, 0x0b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6b, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x40, + 0x0a, 0x15, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4b, 0x53, + 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x4c, 0x1a, 0x25, 0xc2, 0x3e, 0x14, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6b, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0xca, 0x3e, 0x0b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6b, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x3e, 0x0a, 0x14, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x54, 0x52, 0x45, 0x41, + 0x4b, 0x53, 0x5f, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x10, 0x4d, 0x1a, 0x24, 0xc2, 0x3e, 0x13, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6b, 0x73, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0xca, 0x3e, 0x0b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6b, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x3e, 0x0a, 0x14, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x54, 0x52, 0x45, 0x41, + 0x4b, 0x53, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x54, 0x10, 0x4e, 0x1a, 0x24, 0xc2, 0x3e, 0x13, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0xca, 0x3e, 0x0b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6b, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x3d, 0x0a, 0x1f, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x43, 0x48, 0x41, 0x4c, 0x4c, + 0x45, 0x4e, 0x47, 0x45, 0x53, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x45, 0x4d, 0x50, 0x4c, 0x41, + 0x54, 0x45, 0x53, 0x10, 0x51, 0x1a, 0x18, 0xc2, 0x3e, 0x00, 0xca, 0x3e, 0x12, 0x43, 0x68, 0x61, + 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, + 0x3c, 0x0a, 0x14, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x43, 0x48, 0x41, 0x4c, 0x4c, 0x45, + 0x4e, 0x47, 0x45, 0x5f, 0x47, 0x45, 0x54, 0x10, 0x52, 0x1a, 0x22, 0xc2, 0x3e, 0x13, 0x43, 0x68, + 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0xca, 0x3e, 0x09, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x12, 0x43, 0x0a, + 0x15, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x43, 0x48, 0x41, 0x4c, 0x4c, 0x45, 0x4e, 0x47, + 0x45, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x53, 0x1a, 0x28, 0xc2, 0x3e, 0x14, 0x43, 0x68, 0x61, + 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0xca, 0x3e, 0x0e, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x42, 0x0a, 0x17, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x43, 0x48, 0x41, + 0x4c, 0x4c, 0x45, 0x4e, 0x47, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x10, 0x54, 0x1a, + 0x25, 0xc2, 0x3e, 0x16, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x09, 0x43, 0x68, 0x61, + 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x12, 0x3e, 0x0a, 0x15, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, + 0x5f, 0x43, 0x48, 0x41, 0x4c, 0x4c, 0x45, 0x4e, 0x47, 0x45, 0x5f, 0x4a, 0x4f, 0x49, 0x4e, 0x10, + 0x55, 0x1a, 0x23, 0xc2, 0x3e, 0x14, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x4a, + 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x09, 0x43, 0x68, 0x61, + 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x12, 0x40, 0x0a, 0x16, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, + 0x5f, 0x43, 0x48, 0x41, 0x4c, 0x4c, 0x45, 0x4e, 0x47, 0x45, 0x5f, 0x4c, 0x45, 0x41, 0x56, 0x45, + 0x10, 0x56, 0x1a, 0x24, 0xc2, 0x3e, 0x15, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, + 0x4c, 0x65, 0x61, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x09, 0x43, + 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x12, 0x4d, 0x0a, 0x1d, 0x52, 0x50, 0x43, 0x5f, + 0x49, 0x44, 0x5f, 0x43, 0x48, 0x41, 0x4c, 0x4c, 0x45, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x55, 0x42, + 0x4d, 0x49, 0x54, 0x5f, 0x53, 0x43, 0x4f, 0x52, 0x45, 0x10, 0x57, 0x1a, 0x2a, 0xc2, 0x3e, 0x1b, + 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x09, 0x43, 0x68, + 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x12, 0x40, 0x0a, 0x16, 0x52, 0x50, 0x43, 0x5f, 0x49, + 0x44, 0x5f, 0x43, 0x48, 0x41, 0x4c, 0x4c, 0x45, 0x4e, 0x47, 0x45, 0x5f, 0x43, 0x4c, 0x41, 0x49, + 0x4d, 0x10, 0x58, 0x1a, 0x24, 0xc2, 0x3e, 0x15, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, + 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x09, + 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x12, 0x47, 0x0a, 0x17, 0x52, 0x50, 0x43, + 0x5f, 0x49, 0x44, 0x5f, 0x43, 0x48, 0x41, 0x4c, 0x4c, 0x45, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x45, + 0x41, 0x52, 0x43, 0x48, 0x10, 0x59, 0x1a, 0x2a, 0xc2, 0x3e, 0x16, 0x43, 0x68, 0x61, 0x6c, 0x6c, + 0x65, 0x6e, 0x67, 0x65, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0xca, 0x3e, 0x0e, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x42, 0x0a, 0x17, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x43, 0x48, 0x41, + 0x4c, 0x4c, 0x45, 0x4e, 0x47, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x10, 0x5a, 0x1a, + 0x25, 0xc2, 0x3e, 0x16, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x49, 0x6e, 0x76, + 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x09, 0x43, 0x68, 0x61, + 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x12, 0x4f, 0x0a, 0x1a, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, + 0x5f, 0x52, 0x45, 0x57, 0x41, 0x52, 0x44, 0x5f, 0x4d, 0x41, 0x49, 0x4c, 0x42, 0x4f, 0x58, 0x5f, + 0x4c, 0x49, 0x53, 0x54, 0x10, 0x5b, 0x1a, 0x2f, 0xc2, 0x3e, 0x18, 0x52, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x4d, 0x61, 0x69, 0x6c, 0x62, 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0xca, 0x3e, 0x11, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x61, 0x69, 0x6c, + 0x62, 0x6f, 0x78, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x52, 0x0a, 0x1b, 0x52, 0x50, 0x43, 0x5f, 0x49, + 0x44, 0x5f, 0x52, 0x45, 0x57, 0x41, 0x52, 0x44, 0x5f, 0x4d, 0x41, 0x49, 0x4c, 0x42, 0x4f, 0x58, + 0x5f, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x10, 0x5c, 0x1a, 0x31, 0xc2, 0x3e, 0x19, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x4d, 0x61, 0x69, 0x6c, 0x62, 0x6f, 0x78, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x12, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, + 0x61, 0x69, 0x6c, 0x62, 0x6f, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x42, 0x0a, 0x1c, 0x52, + 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x52, 0x45, 0x57, 0x41, 0x52, 0x44, 0x5f, 0x4d, 0x41, 0x49, + 0x4c, 0x42, 0x4f, 0x58, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x5d, 0x1a, 0x20, 0xc2, + 0x3e, 0x1a, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4d, 0x61, 0x69, 0x6c, 0x62, 0x6f, 0x78, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, 0x00, 0x12, + 0x25, 0x0a, 0x20, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x45, 0x43, 0x4f, 0x4e, 0x4f, 0x4d, + 0x59, 0x5f, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x55, 0x43, 0x43, + 0x45, 0x53, 0x53, 0x10, 0xe9, 0x07, 0x12, 0x22, 0x0a, 0x1d, 0x52, 0x50, 0x43, 0x5f, 0x49, 0x44, + 0x5f, 0x45, 0x43, 0x4f, 0x4e, 0x4f, 0x4d, 0x59, 0x5f, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x4d, 0x45, + 0x4e, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x10, 0xea, 0x07, 0x12, 0x27, 0x0a, 0x22, 0x52, 0x50, + 0x43, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x50, 0x45, 0x52, + 0x53, 0x4f, 0x4e, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x52, 0x5f, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, + 0x10, 0xeb, 0x07, 0x2a, 0xb6, 0x01, 0x0a, 0x0b, 0x52, 0x70, 0x63, 0x53, 0x6f, 0x63, 0x6b, 0x65, + 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x50, 0x43, 0x5f, 0x53, 0x4f, 0x43, 0x4b, 0x45, + 0x54, 0x5f, 0x49, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x48, 0x0a, 0x1d, 0x52, 0x50, 0x43, 0x5f, 0x53, 0x4f, 0x43, 0x4b, 0x45, 0x54, + 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x55, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x46, 0x4f, 0x4c, + 0x4c, 0x4f, 0x57, 0x10, 0x01, 0x1a, 0x25, 0xc2, 0x3e, 0x14, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0xca, 0x3e, + 0x0b, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x1a, + 0x52, 0x50, 0x43, 0x5f, 0x53, 0x4f, 0x43, 0x4b, 0x45, 0x54, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x55, + 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x42, 0x49, 0x44, 0x10, 0x02, 0x1a, 0x1e, 0xc2, 0x3e, + 0x11, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x69, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0xca, 0x3e, 0x07, 0x41, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x85, 0x02, 0x0a, + 0x20, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, + 0x72, 0x12, 0x32, 0x0a, 0x2e, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, + 0x5f, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4f, + 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x2a, 0x0a, 0x26, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, + 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, + 0x4e, 0x53, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x41, 0x4e, 0x44, 0x10, + 0x01, 0x12, 0x29, 0x0a, 0x25, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, + 0x5f, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4f, + 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x4f, 0x52, 0x10, 0x02, 0x12, 0x2a, 0x0a, 0x26, + 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x52, 0x45, 0x43, + 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, + 0x4f, 0x52, 0x5f, 0x58, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x2a, 0x0a, 0x26, 0x50, 0x52, 0x4f, 0x47, + 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x52, 0x45, 0x43, 0x4f, 0x4e, 0x44, 0x49, + 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x4e, + 0x4f, 0x54, 0x10, 0x04, 0x2a, 0xb1, 0x01, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x27, + 0x0a, 0x23, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, + 0x4c, 0x54, 0x41, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x25, 0x0a, 0x21, 0x50, 0x52, 0x4f, 0x47, 0x52, + 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4c, 0x54, 0x41, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x01, 0x12, 0x24, + 0x0a, 0x20, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, + 0x4c, 0x54, 0x41, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x4c, 0x4f, 0x43, 0x4b, + 0x45, 0x44, 0x10, 0x02, 0x12, 0x22, 0x0a, 0x1e, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, + 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4c, 0x54, 0x41, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, + 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x10, 0x03, 0x2a, 0xb4, 0x01, 0x0a, 0x12, 0x53, 0x74, 0x61, + 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, + 0x24, 0x0a, 0x20, 0x53, 0x54, 0x41, 0x54, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4f, + 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x41, 0x54, 0x5f, 0x55, 0x50, + 0x44, 0x41, 0x54, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x53, 0x45, + 0x54, 0x10, 0x01, 0x12, 0x1e, 0x0a, 0x1a, 0x53, 0x54, 0x41, 0x54, 0x5f, 0x55, 0x50, 0x44, 0x41, + 0x54, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x44, 0x45, 0x4c, 0x54, + 0x41, 0x10, 0x02, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x41, 0x54, 0x5f, 0x55, 0x50, 0x44, 0x41, + 0x54, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x4d, 0x49, 0x4e, 0x10, + 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x41, 0x54, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, + 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x4d, 0x41, 0x58, 0x10, 0x04, 0x2a, + 0xc3, 0x01, 0x0a, 0x10, 0x45, 0x63, 0x6f, 0x6e, 0x6f, 0x6d, 0x79, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x1e, 0x45, 0x43, 0x4f, 0x4e, 0x4f, 0x4d, 0x59, 0x5f, + 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x25, 0x0a, 0x21, 0x45, 0x43, 0x4f, 0x4e, + 0x4f, 0x4d, 0x59, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, + 0x50, 0x50, 0x4c, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x10, 0x01, 0x12, + 0x22, 0x0a, 0x1e, 0x45, 0x43, 0x4f, 0x4e, 0x4f, 0x4d, 0x59, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x45, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x47, 0x4f, 0x4f, 0x47, 0x4c, 0x45, 0x5f, 0x50, 0x4c, 0x41, + 0x59, 0x10, 0x02, 0x12, 0x20, 0x0a, 0x1c, 0x45, 0x43, 0x4f, 0x4e, 0x4f, 0x4d, 0x59, 0x5f, 0x53, + 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x42, 0x49, 0x4e, 0x53, 0x54, + 0x41, 0x4e, 0x54, 0x10, 0x03, 0x12, 0x1e, 0x0a, 0x1a, 0x45, 0x43, 0x4f, 0x4e, 0x4f, 0x4d, 0x59, + 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x49, 0x53, 0x43, + 0x4f, 0x52, 0x44, 0x10, 0x04, 0x2a, 0x4a, 0x0a, 0x0d, 0x49, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x69, + 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x49, 0x4e, 0x43, 0x45, 0x4e, 0x54, + 0x49, 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x49, 0x4e, 0x43, 0x45, 0x4e, 0x54, + 0x49, 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x10, + 0x01, 0x2a, 0xb8, 0x01, 0x0a, 0x0e, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x48, 0x41, 0x4c, 0x4c, 0x45, 0x4e, 0x47, + 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x1b, + 0x0a, 0x17, 0x43, 0x48, 0x41, 0x4c, 0x4c, 0x45, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x45, 0x5f, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x43, + 0x48, 0x41, 0x4c, 0x4c, 0x45, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4a, + 0x4f, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x43, 0x48, 0x41, 0x4c, 0x4c, + 0x45, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4c, 0x41, 0x49, 0x4d, + 0x45, 0x44, 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x43, 0x48, 0x41, 0x4c, 0x4c, 0x45, 0x4e, 0x47, + 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x43, 0x4c, 0x49, 0x4e, 0x45, 0x44, + 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x48, 0x41, 0x4c, 0x4c, 0x45, 0x4e, 0x47, 0x45, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x45, 0x46, 0x54, 0x10, 0x05, 0x2a, 0xbe, 0x01, 0x0a, + 0x0d, 0x54, 0x75, 0x74, 0x6f, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x17, + 0x0a, 0x13, 0x54, 0x55, 0x54, 0x4f, 0x52, 0x49, 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, + 0x5f, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x54, 0x55, 0x54, 0x4f, 0x52, + 0x49, 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x50, 0x54, + 0x45, 0x44, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, 0x54, 0x55, 0x54, 0x4f, 0x52, 0x49, 0x41, 0x4c, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x43, 0x4c, 0x49, 0x4e, 0x45, 0x44, 0x10, + 0x02, 0x12, 0x1e, 0x0a, 0x1a, 0x54, 0x55, 0x54, 0x4f, 0x52, 0x49, 0x41, 0x4c, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, + 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x54, 0x55, 0x54, 0x4f, 0x52, 0x49, 0x41, 0x4c, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, + 0x1c, 0x0a, 0x18, 0x54, 0x55, 0x54, 0x4f, 0x52, 0x49, 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x45, 0x5f, 0x41, 0x42, 0x41, 0x4e, 0x44, 0x4f, 0x4e, 0x45, 0x44, 0x10, 0x05, 0x3a, 0x3b, 0x0a, + 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x88, 0x01, 0x01, 0x3a, 0x3d, 0x0a, 0x06, 0x6f, 0x75, + 0x74, 0x70, 0x75, 0x74, 0x12, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x88, 0x01, 0x01, 0x42, 0x61, 0x0a, 0x08, 0x63, 0x6f, 0x6d, + 0x2e, 0x68, 0x69, 0x72, 0x6f, 0x42, 0x09, 0x48, 0x69, 0x72, 0x6f, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x1a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, + 0x65, 0x72, 0x6f, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x68, 0x69, 0x72, 0x6f, 0xa2, 0x02, + 0x03, 0x48, 0x58, 0x58, 0xaa, 0x02, 0x04, 0x48, 0x69, 0x72, 0x6f, 0xca, 0x02, 0x04, 0x48, 0x69, + 0x72, 0x6f, 0xe2, 0x02, 0x10, 0x48, 0x69, 0x72, 0x6f, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x04, 0x48, 0x69, 0x72, 0x6f, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_hiro_proto_rawDescOnce sync.Once + file_hiro_proto_rawDescData = file_hiro_proto_rawDesc +) + +func file_hiro_proto_rawDescGZIP() []byte { + file_hiro_proto_rawDescOnce.Do(func() { + file_hiro_proto_rawDescData = protoimpl.X.CompressGZIP(file_hiro_proto_rawDescData) + }) + return file_hiro_proto_rawDescData +} + +var file_hiro_proto_enumTypes = make([]protoimpl.EnumInfo, 9) +var file_hiro_proto_msgTypes = make([]protoimpl.MessageInfo, 389) +var file_hiro_proto_goTypes = []any{ + (RpcId)(0), // 0: hiro.RpcId + (RpcSocketId)(0), // 1: hiro.RpcSocketId + (ProgressionPreconditionsOperator)(0), // 2: hiro.ProgressionPreconditionsOperator + (ProgressionDeltaState)(0), // 3: hiro.ProgressionDeltaState + (StatUpdateOperator)(0), // 4: hiro.StatUpdateOperator + (EconomyStoreType)(0), // 5: hiro.EconomyStoreType + (IncentiveType)(0), // 6: hiro.IncentiveType + (ChallengeState)(0), // 7: hiro.ChallengeState + (TutorialState)(0), // 8: hiro.TutorialState + (*ProgressionCost)(nil), // 9: hiro.ProgressionCost + (*ProgressionPreconditions)(nil), // 10: hiro.ProgressionPreconditions + (*ProgressionPreconditionsBlock)(nil), // 11: hiro.ProgressionPreconditionsBlock + (*Progression)(nil), // 12: hiro.Progression + (*ProgressionDelta)(nil), // 13: hiro.ProgressionDelta + (*ProgressionList)(nil), // 14: hiro.ProgressionList + (*ProgressionGetRequest)(nil), // 15: hiro.ProgressionGetRequest + (*ProgressionPurchaseRequest)(nil), // 16: hiro.ProgressionPurchaseRequest + (*ProgressionUpdateRequest)(nil), // 17: hiro.ProgressionUpdateRequest + (*ProgressionResetRequest)(nil), // 18: hiro.ProgressionResetRequest + (*StatUpdate)(nil), // 19: hiro.StatUpdate + (*StatUpdateRequest)(nil), // 20: hiro.StatUpdateRequest + (*Stat)(nil), // 21: hiro.Stat + (*StatList)(nil), // 22: hiro.StatList + (*ChannelMessageAck)(nil), // 23: hiro.ChannelMessageAck + (*DevicePrefsRequest)(nil), // 24: hiro.DevicePrefsRequest + (*RewardInventoryItem)(nil), // 25: hiro.RewardInventoryItem + (*RewardEnergyModifier)(nil), // 26: hiro.RewardEnergyModifier + (*RewardModifier)(nil), // 27: hiro.RewardModifier + (*ActiveRewardModifier)(nil), // 28: hiro.ActiveRewardModifier + (*TeamMemberReward)(nil), // 29: hiro.TeamMemberReward + (*TeamReward)(nil), // 30: hiro.TeamReward + (*Reward)(nil), // 31: hiro.Reward + (*RewardList)(nil), // 32: hiro.RewardList + (*RewardRangeInt32)(nil), // 33: hiro.RewardRangeInt32 + (*RewardRangeInt64)(nil), // 34: hiro.RewardRangeInt64 + (*RewardRangeUInt64)(nil), // 35: hiro.RewardRangeUInt64 + (*RewardRangeDouble)(nil), // 36: hiro.RewardRangeDouble + (*AvailableRewardsStringPropertyOption)(nil), // 37: hiro.AvailableRewardsStringPropertyOption + (*AvailableRewardsStringProperty)(nil), // 38: hiro.AvailableRewardsStringProperty + (*AvailableRewardsItem)(nil), // 39: hiro.AvailableRewardsItem + (*AvailableRewardsItemSet)(nil), // 40: hiro.AvailableRewardsItemSet + (*AvailableRewardsCurrency)(nil), // 41: hiro.AvailableRewardsCurrency + (*AvailableRewardsEnergy)(nil), // 42: hiro.AvailableRewardsEnergy + (*AvailableRewardsEnergyModifier)(nil), // 43: hiro.AvailableRewardsEnergyModifier + (*AvailableRewardsRewardModifier)(nil), // 44: hiro.AvailableRewardsRewardModifier + (*AvailableRewardsContents)(nil), // 45: hiro.AvailableRewardsContents + (*AvailableTeamRewardsContents)(nil), // 46: hiro.AvailableTeamRewardsContents + (*AvailableTeamMemberRewards)(nil), // 47: hiro.AvailableTeamMemberRewards + (*AvailableTeamRewards)(nil), // 48: hiro.AvailableTeamRewards + (*AvailableRewards)(nil), // 49: hiro.AvailableRewards + (*IncentiveClaim)(nil), // 50: hiro.IncentiveClaim + (*Incentive)(nil), // 51: hiro.Incentive + (*IncentiveList)(nil), // 52: hiro.IncentiveList + (*IncentiveInfo)(nil), // 53: hiro.IncentiveInfo + (*IncentiveSenderCreateRequest)(nil), // 54: hiro.IncentiveSenderCreateRequest + (*IncentiveSenderDeleteRequest)(nil), // 55: hiro.IncentiveSenderDeleteRequest + (*IncentiveSenderClaimRequest)(nil), // 56: hiro.IncentiveSenderClaimRequest + (*IncentiveRecipientGetRequest)(nil), // 57: hiro.IncentiveRecipientGetRequest + (*IncentiveRecipientClaimRequest)(nil), // 58: hiro.IncentiveRecipientClaimRequest + (*ChallengeCreateRequest)(nil), // 59: hiro.ChallengeCreateRequest + (*ChallengeJoinRequest)(nil), // 60: hiro.ChallengeJoinRequest + (*ChallengeLeaveRequest)(nil), // 61: hiro.ChallengeLeaveRequest + (*ChallengeClaimRequest)(nil), // 62: hiro.ChallengeClaimRequest + (*ChallengeSearchRequest)(nil), // 63: hiro.ChallengeSearchRequest + (*ChallengeInviteRequest)(nil), // 64: hiro.ChallengeInviteRequest + (*ChallengeSubmitScoreRequest)(nil), // 65: hiro.ChallengeSubmitScoreRequest + (*ChallengeRewardTier)(nil), // 66: hiro.ChallengeRewardTier + (*ChallengeScore)(nil), // 67: hiro.ChallengeScore + (*Challenge)(nil), // 68: hiro.Challenge + (*ChallengeListRequest)(nil), // 69: hiro.ChallengeListRequest + (*ChallengeGetRequest)(nil), // 70: hiro.ChallengeGetRequest + (*ChallengesList)(nil), // 71: hiro.ChallengesList + (*ChallengeMaxMinPlayers)(nil), // 72: hiro.ChallengeMaxMinPlayers + (*ChallengeMinMaxDuration)(nil), // 73: hiro.ChallengeMinMaxDuration + (*ChallengeTemplate)(nil), // 74: hiro.ChallengeTemplate + (*ChallengeTemplates)(nil), // 75: hiro.ChallengeTemplates + (*EventLeaderboardList)(nil), // 76: hiro.EventLeaderboardList + (*EventLeaderboardGet)(nil), // 77: hiro.EventLeaderboardGet + (*EventLeaderboardUpdate)(nil), // 78: hiro.EventLeaderboardUpdate + (*EventLeaderboardClaim)(nil), // 79: hiro.EventLeaderboardClaim + (*EventLeaderboardRoll)(nil), // 80: hiro.EventLeaderboardRoll + (*EventLeaderboardScore)(nil), // 81: hiro.EventLeaderboardScore + (*EventLeaderboardRewardTier)(nil), // 82: hiro.EventLeaderboardRewardTier + (*EventLeaderboardRewardTiers)(nil), // 83: hiro.EventLeaderboardRewardTiers + (*EventLeaderboardChangeZone)(nil), // 84: hiro.EventLeaderboardChangeZone + (*EventLeaderboard)(nil), // 85: hiro.EventLeaderboard + (*EventLeaderboards)(nil), // 86: hiro.EventLeaderboards + (*EventLeaderboardDebugFillRequest)(nil), // 87: hiro.EventLeaderboardDebugFillRequest + (*EventLeaderboardDebugRandomScoresRequest)(nil), // 88: hiro.EventLeaderboardDebugRandomScoresRequest + (*EconomyDonationContributor)(nil), // 89: hiro.EconomyDonationContributor + (*EconomyDonation)(nil), // 90: hiro.EconomyDonation + (*EconomyDonationAck)(nil), // 91: hiro.EconomyDonationAck + (*EconomyDonationsList)(nil), // 92: hiro.EconomyDonationsList + (*EconomyDonationClaimRequestDetails)(nil), // 93: hiro.EconomyDonationClaimRequestDetails + (*EconomyDonationClaimRequest)(nil), // 94: hiro.EconomyDonationClaimRequest + (*EconomyDonationClaimRewards)(nil), // 95: hiro.EconomyDonationClaimRewards + (*EconomyDonationGiveRequest)(nil), // 96: hiro.EconomyDonationGiveRequest + (*EconomyDonationGetRequest)(nil), // 97: hiro.EconomyDonationGetRequest + (*EconomyDonationRequest)(nil), // 98: hiro.EconomyDonationRequest + (*EconomyDonationsByUserList)(nil), // 99: hiro.EconomyDonationsByUserList + (*EconomyListStoreItemCost)(nil), // 100: hiro.EconomyListStoreItemCost + (*EconomyListStoreItem)(nil), // 101: hiro.EconomyListStoreItem + (*EconomyListPlacement)(nil), // 102: hiro.EconomyListPlacement + (*EconomyList)(nil), // 103: hiro.EconomyList + (*InventoryItem)(nil), // 104: hiro.InventoryItem + (*InventoryListRequest)(nil), // 105: hiro.InventoryListRequest + (*InventoryGrantRequest)(nil), // 106: hiro.InventoryGrantRequest + (*InventoryUpdateItemProperties)(nil), // 107: hiro.InventoryUpdateItemProperties + (*InventoryUpdateItemsRequest)(nil), // 108: hiro.InventoryUpdateItemsRequest + (*Inventory)(nil), // 109: hiro.Inventory + (*InventoryConsumeRequest)(nil), // 110: hiro.InventoryConsumeRequest + (*InventoryConsumeRewards)(nil), // 111: hiro.InventoryConsumeRewards + (*InventoryDeleteItemsRequest)(nil), // 112: hiro.InventoryDeleteItemsRequest + (*InventoryUpdateAck)(nil), // 113: hiro.InventoryUpdateAck + (*InventoryList)(nil), // 114: hiro.InventoryList + (*AuctionBidAmount)(nil), // 115: hiro.AuctionBidAmount + (*AuctionFee)(nil), // 116: hiro.AuctionFee + (*AuctionTemplateConditionListingCost)(nil), // 117: hiro.AuctionTemplateConditionListingCost + (*AuctionTemplateConditionBidIncrement)(nil), // 118: hiro.AuctionTemplateConditionBidIncrement + (*AuctionTemplateCondition)(nil), // 119: hiro.AuctionTemplateCondition + (*AuctionTemplate)(nil), // 120: hiro.AuctionTemplate + (*AuctionTemplates)(nil), // 121: hiro.AuctionTemplates + (*AuctionReward)(nil), // 122: hiro.AuctionReward + (*AuctionBid)(nil), // 123: hiro.AuctionBid + (*Auction)(nil), // 124: hiro.Auction + (*AuctionNotificationBid)(nil), // 125: hiro.AuctionNotificationBid + (*StreamEnvelope)(nil), // 126: hiro.StreamEnvelope + (*AuctionClaimBid)(nil), // 127: hiro.AuctionClaimBid + (*AuctionClaimCreated)(nil), // 128: hiro.AuctionClaimCreated + (*AuctionCancel)(nil), // 129: hiro.AuctionCancel + (*AuctionList)(nil), // 130: hiro.AuctionList + (*AuctionListRequest)(nil), // 131: hiro.AuctionListRequest + (*AuctionBidRequest)(nil), // 132: hiro.AuctionBidRequest + (*AuctionClaimBidRequest)(nil), // 133: hiro.AuctionClaimBidRequest + (*AuctionClaimCreatedRequest)(nil), // 134: hiro.AuctionClaimCreatedRequest + (*AuctionCancelRequest)(nil), // 135: hiro.AuctionCancelRequest + (*AuctionCreateRequest)(nil), // 136: hiro.AuctionCreateRequest + (*AuctionListBidsRequest)(nil), // 137: hiro.AuctionListBidsRequest + (*AuctionListCreatedRequest)(nil), // 138: hiro.AuctionListCreatedRequest + (*AuctionsFollowRequest)(nil), // 139: hiro.AuctionsFollowRequest + (*EconomyListRequest)(nil), // 140: hiro.EconomyListRequest + (*EconomyGrantRequest)(nil), // 141: hiro.EconomyGrantRequest + (*EconomyPurchaseIntentRequest)(nil), // 142: hiro.EconomyPurchaseIntentRequest + (*EconomyPurchaseRequest)(nil), // 143: hiro.EconomyPurchaseRequest + (*EconomyPurchaseRestoreRequest)(nil), // 144: hiro.EconomyPurchaseRestoreRequest + (*EconomyPlacementStatusRequest)(nil), // 145: hiro.EconomyPlacementStatusRequest + (*EconomyPlacementStartRequest)(nil), // 146: hiro.EconomyPlacementStartRequest + (*EconomyPlacementStatus)(nil), // 147: hiro.EconomyPlacementStatus + (*EconomyUpdateAck)(nil), // 148: hiro.EconomyUpdateAck + (*EconomyPurchaseAck)(nil), // 149: hiro.EconomyPurchaseAck + (*EnergyModifier)(nil), // 150: hiro.EnergyModifier + (*Energy)(nil), // 151: hiro.Energy + (*EnergyList)(nil), // 152: hiro.EnergyList + (*EnergySpendRequest)(nil), // 153: hiro.EnergySpendRequest + (*EnergySpendReward)(nil), // 154: hiro.EnergySpendReward + (*EnergyGrantRequest)(nil), // 155: hiro.EnergyGrantRequest + (*LeaderboardConfig)(nil), // 156: hiro.LeaderboardConfig + (*LeaderboardConfigList)(nil), // 157: hiro.LeaderboardConfigList + (*Tutorial)(nil), // 158: hiro.Tutorial + (*TutorialList)(nil), // 159: hiro.TutorialList + (*TutorialAcceptRequest)(nil), // 160: hiro.TutorialAcceptRequest + (*TutorialDeclineRequest)(nil), // 161: hiro.TutorialDeclineRequest + (*TutorialAbandonRequest)(nil), // 162: hiro.TutorialAbandonRequest + (*TutorialUpdateRequest)(nil), // 163: hiro.TutorialUpdateRequest + (*TutorialResetRequest)(nil), // 164: hiro.TutorialResetRequest + (*RateAppRequest)(nil), // 165: hiro.RateAppRequest + (*TeamMember)(nil), // 166: hiro.TeamMember + (*Team)(nil), // 167: hiro.Team + (*TeamCreateRequest)(nil), // 168: hiro.TeamCreateRequest + (*TeamUpdateRequest)(nil), // 169: hiro.TeamUpdateRequest + (*TeamListRequest)(nil), // 170: hiro.TeamListRequest + (*TeamList)(nil), // 171: hiro.TeamList + (*TeamSearchRequest)(nil), // 172: hiro.TeamSearchRequest + (*TeamGetRequest)(nil), // 173: hiro.TeamGetRequest + (*UserTeamsListRequest)(nil), // 174: hiro.UserTeamsListRequest + (*User)(nil), // 175: hiro.User + (*UserTeams)(nil), // 176: hiro.UserTeams + (*UserTeamsList)(nil), // 177: hiro.UserTeamsList + (*TeamWriteChatMessageRequest)(nil), // 178: hiro.TeamWriteChatMessageRequest + (*UnlockableCost)(nil), // 179: hiro.UnlockableCost + (*Unlockable)(nil), // 180: hiro.Unlockable + (*UnlockableSlotCost)(nil), // 181: hiro.UnlockableSlotCost + (*UnlockablesList)(nil), // 182: hiro.UnlockablesList + (*UnlockablesReward)(nil), // 183: hiro.UnlockablesReward + (*UnlockablesRequest)(nil), // 184: hiro.UnlockablesRequest + (*UnlockablesQueueAddRequest)(nil), // 185: hiro.UnlockablesQueueAddRequest + (*UnlockablesQueueRemoveRequest)(nil), // 186: hiro.UnlockablesQueueRemoveRequest + (*UnlockablesQueueSetRequest)(nil), // 187: hiro.UnlockablesQueueSetRequest + (*SubAchievement)(nil), // 188: hiro.SubAchievement + (*Achievement)(nil), // 189: hiro.Achievement + (*AchievementList)(nil), // 190: hiro.AchievementList + (*AchievementsClaimRequest)(nil), // 191: hiro.AchievementsClaimRequest + (*AchievementsGetRequest)(nil), // 192: hiro.AchievementsGetRequest + (*AchievementsUpdateAck)(nil), // 193: hiro.AchievementsUpdateAck + (*AchievementsUpdateRequest)(nil), // 194: hiro.AchievementsUpdateRequest + (*StreakAvailableReward)(nil), // 195: hiro.StreakAvailableReward + (*StreakReward)(nil), // 196: hiro.StreakReward + (*Streak)(nil), // 197: hiro.Streak + (*StreaksList)(nil), // 198: hiro.StreaksList + (*StreaksUpdateRequest)(nil), // 199: hiro.StreaksUpdateRequest + (*StreaksClaimRequest)(nil), // 200: hiro.StreaksClaimRequest + (*StreaksResetRequest)(nil), // 201: hiro.StreaksResetRequest + (*RewardMailboxEntry)(nil), // 202: hiro.RewardMailboxEntry + (*RewardMailboxList)(nil), // 203: hiro.RewardMailboxList + (*RewardMailboxListRequest)(nil), // 204: hiro.RewardMailboxListRequest + (*RewardMailboxClaimRequest)(nil), // 205: hiro.RewardMailboxClaimRequest + (*RewardMailboxDeleteRequest)(nil), // 206: hiro.RewardMailboxDeleteRequest + (*TeamStoreListRequest)(nil), // 207: hiro.TeamStoreListRequest + (*TeamStoreItemCost)(nil), // 208: hiro.TeamStoreItemCost + (*TeamStoreItem)(nil), // 209: hiro.TeamStoreItem + (*TeamStore)(nil), // 210: hiro.TeamStore + (*TeamStorePurchaseRequest)(nil), // 211: hiro.TeamStorePurchaseRequest + (*TeamStorePurchaseAck)(nil), // 212: hiro.TeamStorePurchaseAck + (*TeamWalletGetRequest)(nil), // 213: hiro.TeamWalletGetRequest + (*TeamWalletGrantRequest)(nil), // 214: hiro.TeamWalletGrantRequest + (*TeamWallet)(nil), // 215: hiro.TeamWallet + (*TeamStatListRequest)(nil), // 216: hiro.TeamStatListRequest + (*TeamStatUpdateRequest)(nil), // 217: hiro.TeamStatUpdateRequest + (*TeamInventoryListRequest)(nil), // 218: hiro.TeamInventoryListRequest + (*TeamInventoryConsumeRequest)(nil), // 219: hiro.TeamInventoryConsumeRequest + (*TeamInventoryGrantRequest)(nil), // 220: hiro.TeamInventoryGrantRequest + (*TeamInventoryUpdateItemsRequest)(nil), // 221: hiro.TeamInventoryUpdateItemsRequest + (*TeamAchievementsClaimRequest)(nil), // 222: hiro.TeamAchievementsClaimRequest + (*TeamAchievementsGetRequest)(nil), // 223: hiro.TeamAchievementsGetRequest + (*TeamAchievementsUpdateRequest)(nil), // 224: hiro.TeamAchievementsUpdateRequest + (*TeamEventLeaderboardList)(nil), // 225: hiro.TeamEventLeaderboardList + (*TeamEventLeaderboardGet)(nil), // 226: hiro.TeamEventLeaderboardGet + (*TeamEventLeaderboardUpdate)(nil), // 227: hiro.TeamEventLeaderboardUpdate + (*TeamEventLeaderboardClaim)(nil), // 228: hiro.TeamEventLeaderboardClaim + (*TeamEventLeaderboardRoll)(nil), // 229: hiro.TeamEventLeaderboardRoll + (*TeamEventLeaderboardScore)(nil), // 230: hiro.TeamEventLeaderboardScore + (*TeamEventLeaderboardContribution)(nil), // 231: hiro.TeamEventLeaderboardContribution + (*TeamEventLeaderboard)(nil), // 232: hiro.TeamEventLeaderboard + (*TeamEventLeaderboards)(nil), // 233: hiro.TeamEventLeaderboards + (*TeamEventLeaderboardDebugFillRequest)(nil), // 234: hiro.TeamEventLeaderboardDebugFillRequest + (*TeamEventLeaderboardDebugRandomScoresRequest)(nil), // 235: hiro.TeamEventLeaderboardDebugRandomScoresRequest + (*TeamRewardMailboxListRequest)(nil), // 236: hiro.TeamRewardMailboxListRequest + (*TeamRewardMailboxClaimRequest)(nil), // 237: hiro.TeamRewardMailboxClaimRequest + (*TeamRewardMailboxDeleteRequest)(nil), // 238: hiro.TeamRewardMailboxDeleteRequest + (*TeamGiftReward)(nil), // 239: hiro.TeamGiftReward + (*TeamGiftContributor)(nil), // 240: hiro.TeamGiftContributor + (*TeamGift)(nil), // 241: hiro.TeamGift + (*TeamGiftList)(nil), // 242: hiro.TeamGiftList + (*TeamGiftListRequest)(nil), // 243: hiro.TeamGiftListRequest + (*TeamGiftContributeRequest)(nil), // 244: hiro.TeamGiftContributeRequest + (*TeamGiftContributeAck)(nil), // 245: hiro.TeamGiftContributeAck + (*TeamGiftClaimRequest)(nil), // 246: hiro.TeamGiftClaimRequest + (*TeamGiftClaimAck)(nil), // 247: hiro.TeamGiftClaimAck + (*SyncInventoryItem)(nil), // 248: hiro.SyncInventoryItem + (*SyncInventory)(nil), // 249: hiro.SyncInventory + (*SyncEconomy)(nil), // 250: hiro.SyncEconomy + (*SyncAchievementsUpdate)(nil), // 251: hiro.SyncAchievementsUpdate + (*SyncAchievements)(nil), // 252: hiro.SyncAchievements + (*SyncEnergyState)(nil), // 253: hiro.SyncEnergyState + (*SyncEnergy)(nil), // 254: hiro.SyncEnergy + (*SyncEventLeaderboardUpdate)(nil), // 255: hiro.SyncEventLeaderboardUpdate + (*SyncEventLeaderboards)(nil), // 256: hiro.SyncEventLeaderboards + (*SyncProgressionUpdate)(nil), // 257: hiro.SyncProgressionUpdate + (*SyncProgressions)(nil), // 258: hiro.SyncProgressions + (*SyncTutorials)(nil), // 259: hiro.SyncTutorials + (*SyncUnlockableUpdate)(nil), // 260: hiro.SyncUnlockableUpdate + (*SyncUnlockables)(nil), // 261: hiro.SyncUnlockables + (*SyncStreakUpdate)(nil), // 262: hiro.SyncStreakUpdate + (*SyncStreaks)(nil), // 263: hiro.SyncStreaks + (*SyncRequest)(nil), // 264: hiro.SyncRequest + (*SyncResponse)(nil), // 265: hiro.SyncResponse + nil, // 266: hiro.ProgressionCost.ItemsEntry + nil, // 267: hiro.ProgressionCost.CurrenciesEntry + nil, // 268: hiro.ProgressionPreconditions.CountsEntry + nil, // 269: hiro.ProgressionPreconditions.ItemsMinEntry + nil, // 270: hiro.ProgressionPreconditions.ItemsMaxEntry + nil, // 271: hiro.ProgressionPreconditions.StatsMinEntry + nil, // 272: hiro.ProgressionPreconditions.StatsMaxEntry + nil, // 273: hiro.ProgressionPreconditions.EnergyMinEntry + nil, // 274: hiro.ProgressionPreconditions.EnergyMaxEntry + nil, // 275: hiro.ProgressionPreconditions.CurrencyMinEntry + nil, // 276: hiro.ProgressionPreconditions.CurrencyMaxEntry + nil, // 277: hiro.Progression.CountsEntry + nil, // 278: hiro.Progression.AdditionalPropertiesEntry + nil, // 279: hiro.ProgressionDelta.CountsEntry + nil, // 280: hiro.ProgressionList.ProgressionsEntry + nil, // 281: hiro.ProgressionList.DeltasEntry + nil, // 282: hiro.ProgressionGetRequest.ProgressionsEntry + nil, // 283: hiro.ProgressionUpdateRequest.CountsEntry + nil, // 284: hiro.StatList.PublicEntry + nil, // 285: hiro.StatList.PrivateEntry + nil, // 286: hiro.DevicePrefsRequest.PreferencesEntry + nil, // 287: hiro.RewardInventoryItem.StringPropertiesEntry + nil, // 288: hiro.RewardInventoryItem.NumericPropertiesEntry + nil, // 289: hiro.TeamMemberReward.ItemsEntry + nil, // 290: hiro.TeamMemberReward.CurrenciesEntry + nil, // 291: hiro.TeamMemberReward.EnergiesEntry + nil, // 292: hiro.TeamMemberReward.ItemInstancesEntry + nil, // 293: hiro.TeamReward.ItemsEntry + nil, // 294: hiro.TeamReward.CurrenciesEntry + nil, // 295: hiro.TeamReward.ItemInstancesEntry + nil, // 296: hiro.Reward.ItemsEntry + nil, // 297: hiro.Reward.CurrenciesEntry + nil, // 298: hiro.Reward.EnergiesEntry + nil, // 299: hiro.Reward.ItemInstancesEntry + nil, // 300: hiro.AvailableRewardsStringProperty.OptionsEntry + nil, // 301: hiro.AvailableRewardsItem.NumericPropertiesEntry + nil, // 302: hiro.AvailableRewardsItem.StringPropertiesEntry + nil, // 303: hiro.AvailableRewardsContents.ItemsEntry + nil, // 304: hiro.AvailableRewardsContents.CurrenciesEntry + nil, // 305: hiro.AvailableRewardsContents.EnergiesEntry + nil, // 306: hiro.AvailableTeamRewardsContents.ItemsEntry + nil, // 307: hiro.AvailableTeamRewardsContents.CurrenciesEntry + nil, // 308: hiro.Incentive.ClaimsEntry + nil, // 309: hiro.ChallengeCreateRequest.MetadataEntry + nil, // 310: hiro.Challenge.AdditionalPropertiesEntry + nil, // 311: hiro.Challenge.MetadataEntry + nil, // 312: hiro.ChallengeTemplate.AdditionalPropertiesEntry + nil, // 313: hiro.ChallengeTemplates.TemplatesEntry + nil, // 314: hiro.EventLeaderboard.RewardTiersEntry + nil, // 315: hiro.EventLeaderboard.ChangeZonesEntry + nil, // 316: hiro.EventLeaderboard.AdditionalPropertiesEntry + nil, // 317: hiro.EconomyDonation.AdditionalPropertiesEntry + nil, // 318: hiro.EconomyDonationClaimRequestDetails.DonorsEntry + nil, // 319: hiro.EconomyDonationClaimRequest.DonationsEntry + nil, // 320: hiro.EconomyDonationClaimRewards.ClaimedRewardsEntry + nil, // 321: hiro.EconomyDonationsByUserList.UserDonationsEntry + nil, // 322: hiro.EconomyListStoreItemCost.CurrenciesEntry + nil, // 323: hiro.EconomyListStoreItem.AdditionalPropertiesEntry + nil, // 324: hiro.EconomyListPlacement.AdditionalPropertiesEntry + nil, // 325: hiro.EconomyList.DonationsEntry + nil, // 326: hiro.InventoryItem.StringPropertiesEntry + nil, // 327: hiro.InventoryItem.NumericPropertiesEntry + nil, // 328: hiro.InventoryGrantRequest.ItemsEntry + nil, // 329: hiro.InventoryUpdateItemProperties.StringPropertiesEntry + nil, // 330: hiro.InventoryUpdateItemProperties.NumericPropertiesEntry + nil, // 331: hiro.InventoryUpdateItemsRequest.ItemUpdatesEntry + nil, // 332: hiro.Inventory.ItemsEntry + nil, // 333: hiro.InventoryConsumeRequest.ItemsEntry + nil, // 334: hiro.InventoryConsumeRequest.InstancesEntry + nil, // 335: hiro.InventoryConsumeRewards.RewardsEntry + nil, // 336: hiro.InventoryConsumeRewards.InstanceRewardsEntry + nil, // 337: hiro.InventoryList.ItemsEntry + nil, // 338: hiro.AuctionBidAmount.CurrenciesEntry + nil, // 339: hiro.AuctionTemplateConditionListingCost.CurrenciesEntry + nil, // 340: hiro.AuctionTemplateConditionListingCost.ItemsEntry + nil, // 341: hiro.AuctionTemplateConditionListingCost.EnergiesEntry + nil, // 342: hiro.AuctionTemplate.ConditionsEntry + nil, // 343: hiro.AuctionTemplates.TemplatesEntry + nil, // 344: hiro.EconomyGrantRequest.CurrenciesEntry + nil, // 345: hiro.EconomyGrantRequest.ItemsEntry + nil, // 346: hiro.EconomyPlacementStartRequest.MetadataEntry + nil, // 347: hiro.EconomyPlacementStatus.MetadataEntry + nil, // 348: hiro.EconomyUpdateAck.WalletEntry + nil, // 349: hiro.EconomyPurchaseAck.WalletEntry + nil, // 350: hiro.Energy.AdditionalPropertiesEntry + nil, // 351: hiro.EnergyList.EnergiesEntry + nil, // 352: hiro.EnergySpendRequest.AmountsEntry + nil, // 353: hiro.EnergyGrantRequest.AmountsEntry + nil, // 354: hiro.Tutorial.AdditionalPropertiesEntry + nil, // 355: hiro.TutorialList.TutorialsEntry + nil, // 356: hiro.UserTeamsList.UserTeamsEntry + nil, // 357: hiro.UnlockableCost.ItemsEntry + nil, // 358: hiro.UnlockableCost.CurrenciesEntry + nil, // 359: hiro.Unlockable.AdditionalPropertiesEntry + nil, // 360: hiro.UnlockableSlotCost.ItemsEntry + nil, // 361: hiro.UnlockableSlotCost.CurrenciesEntry + nil, // 362: hiro.SubAchievement.AdditionalPropertiesEntry + nil, // 363: hiro.Achievement.SubAchievementsEntry + nil, // 364: hiro.Achievement.AdditionalPropertiesEntry + nil, // 365: hiro.AchievementList.AchievementsEntry + nil, // 366: hiro.AchievementList.RepeatAchievementsEntry + nil, // 367: hiro.AchievementsUpdateAck.AchievementsEntry + nil, // 368: hiro.AchievementsUpdateAck.RepeatAchievementsEntry + nil, // 369: hiro.AchievementsUpdateRequest.AchievementsEntry + nil, // 370: hiro.StreaksList.StreaksEntry + nil, // 371: hiro.StreaksUpdateRequest.UpdatesEntry + nil, // 372: hiro.TeamStoreItemCost.CurrenciesEntry + nil, // 373: hiro.TeamStoreItem.AdditionalPropertiesEntry + nil, // 374: hiro.TeamStorePurchaseAck.WalletEntry + nil, // 375: hiro.TeamWalletGrantRequest.CurrenciesEntry + nil, // 376: hiro.TeamWallet.CurrenciesEntry + nil, // 377: hiro.TeamInventoryConsumeRequest.ItemsEntry + nil, // 378: hiro.TeamInventoryConsumeRequest.InstancesEntry + nil, // 379: hiro.TeamInventoryGrantRequest.ItemsEntry + nil, // 380: hiro.TeamInventoryUpdateItemsRequest.ItemUpdatesEntry + nil, // 381: hiro.TeamAchievementsUpdateRequest.AchievementsEntry + nil, // 382: hiro.TeamEventLeaderboard.RewardTiersEntry + nil, // 383: hiro.TeamEventLeaderboard.ChangeZonesEntry + nil, // 384: hiro.TeamEventLeaderboard.AdditionalPropertiesEntry + nil, // 385: hiro.SyncInventoryItem.StringPropertiesEntry + nil, // 386: hiro.SyncInventoryItem.NumericPropertiesEntry + nil, // 387: hiro.SyncInventory.ItemsEntry + nil, // 388: hiro.SyncEconomy.CurrenciesEntry + nil, // 389: hiro.SyncAchievements.AchievementsEntry + nil, // 390: hiro.SyncEnergy.EnergiesEntry + nil, // 391: hiro.SyncEventLeaderboards.EventLeaderboardsEntry + nil, // 392: hiro.SyncProgressionUpdate.CountsEntry + nil, // 393: hiro.SyncProgressions.ProgressionsEntry + nil, // 394: hiro.SyncTutorials.UpdatesEntry + nil, // 395: hiro.SyncUnlockables.UpdatesEntry + nil, // 396: hiro.SyncStreaks.UpdatesEntry + nil, // 397: hiro.SyncResponse.WalletEntry + (*structpb.Struct)(nil), // 398: google.protobuf.Struct + (*wrapperspb.Int32Value)(nil), // 399: google.protobuf.Int32Value + (*descriptorpb.EnumValueOptions)(nil), // 400: google.protobuf.EnumValueOptions +} +var file_hiro_proto_depIdxs = []int32{ + 266, // 0: hiro.ProgressionCost.items:type_name -> hiro.ProgressionCost.ItemsEntry + 267, // 1: hiro.ProgressionCost.currencies:type_name -> hiro.ProgressionCost.CurrenciesEntry + 268, // 2: hiro.ProgressionPreconditions.counts:type_name -> hiro.ProgressionPreconditions.CountsEntry + 9, // 3: hiro.ProgressionPreconditions.cost:type_name -> hiro.ProgressionCost + 269, // 4: hiro.ProgressionPreconditions.items_min:type_name -> hiro.ProgressionPreconditions.ItemsMinEntry + 270, // 5: hiro.ProgressionPreconditions.items_max:type_name -> hiro.ProgressionPreconditions.ItemsMaxEntry + 271, // 6: hiro.ProgressionPreconditions.stats_min:type_name -> hiro.ProgressionPreconditions.StatsMinEntry + 272, // 7: hiro.ProgressionPreconditions.stats_max:type_name -> hiro.ProgressionPreconditions.StatsMaxEntry + 273, // 8: hiro.ProgressionPreconditions.energy_min:type_name -> hiro.ProgressionPreconditions.EnergyMinEntry + 274, // 9: hiro.ProgressionPreconditions.energy_max:type_name -> hiro.ProgressionPreconditions.EnergyMaxEntry + 275, // 10: hiro.ProgressionPreconditions.currency_min:type_name -> hiro.ProgressionPreconditions.CurrencyMinEntry + 276, // 11: hiro.ProgressionPreconditions.currency_max:type_name -> hiro.ProgressionPreconditions.CurrencyMaxEntry + 10, // 12: hiro.ProgressionPreconditionsBlock.direct:type_name -> hiro.ProgressionPreconditions + 2, // 13: hiro.ProgressionPreconditionsBlock.operator:type_name -> hiro.ProgressionPreconditionsOperator + 11, // 14: hiro.ProgressionPreconditionsBlock.nested:type_name -> hiro.ProgressionPreconditionsBlock + 277, // 15: hiro.Progression.counts:type_name -> hiro.Progression.CountsEntry + 278, // 16: hiro.Progression.additional_properties:type_name -> hiro.Progression.AdditionalPropertiesEntry + 11, // 17: hiro.Progression.preconditions:type_name -> hiro.ProgressionPreconditionsBlock + 11, // 18: hiro.Progression.unmet_preconditions:type_name -> hiro.ProgressionPreconditionsBlock + 3, // 19: hiro.ProgressionDelta.state:type_name -> hiro.ProgressionDeltaState + 279, // 20: hiro.ProgressionDelta.counts:type_name -> hiro.ProgressionDelta.CountsEntry + 11, // 21: hiro.ProgressionDelta.preconditions:type_name -> hiro.ProgressionPreconditionsBlock + 280, // 22: hiro.ProgressionList.progressions:type_name -> hiro.ProgressionList.ProgressionsEntry + 281, // 23: hiro.ProgressionList.deltas:type_name -> hiro.ProgressionList.DeltasEntry + 282, // 24: hiro.ProgressionGetRequest.progressions:type_name -> hiro.ProgressionGetRequest.ProgressionsEntry + 283, // 25: hiro.ProgressionUpdateRequest.counts:type_name -> hiro.ProgressionUpdateRequest.CountsEntry + 4, // 26: hiro.StatUpdate.operator:type_name -> hiro.StatUpdateOperator + 19, // 27: hiro.StatUpdateRequest.public:type_name -> hiro.StatUpdate + 19, // 28: hiro.StatUpdateRequest.private:type_name -> hiro.StatUpdate + 398, // 29: hiro.Stat.additional_properties:type_name -> google.protobuf.Struct + 284, // 30: hiro.StatList.public:type_name -> hiro.StatList.PublicEntry + 285, // 31: hiro.StatList.private:type_name -> hiro.StatList.PrivateEntry + 286, // 32: hiro.DevicePrefsRequest.preferences:type_name -> hiro.DevicePrefsRequest.PreferencesEntry + 287, // 33: hiro.RewardInventoryItem.string_properties:type_name -> hiro.RewardInventoryItem.StringPropertiesEntry + 288, // 34: hiro.RewardInventoryItem.numeric_properties:type_name -> hiro.RewardInventoryItem.NumericPropertiesEntry + 289, // 35: hiro.TeamMemberReward.items:type_name -> hiro.TeamMemberReward.ItemsEntry + 290, // 36: hiro.TeamMemberReward.currencies:type_name -> hiro.TeamMemberReward.CurrenciesEntry + 291, // 37: hiro.TeamMemberReward.energies:type_name -> hiro.TeamMemberReward.EnergiesEntry + 26, // 38: hiro.TeamMemberReward.energy_modifiers:type_name -> hiro.RewardEnergyModifier + 27, // 39: hiro.TeamMemberReward.reward_modifiers:type_name -> hiro.RewardModifier + 292, // 40: hiro.TeamMemberReward.item_instances:type_name -> hiro.TeamMemberReward.ItemInstancesEntry + 293, // 41: hiro.TeamReward.items:type_name -> hiro.TeamReward.ItemsEntry + 294, // 42: hiro.TeamReward.currencies:type_name -> hiro.TeamReward.CurrenciesEntry + 27, // 43: hiro.TeamReward.reward_modifiers:type_name -> hiro.RewardModifier + 27, // 44: hiro.TeamReward.member_reward_modifiers:type_name -> hiro.RewardModifier + 295, // 45: hiro.TeamReward.item_instances:type_name -> hiro.TeamReward.ItemInstancesEntry + 29, // 46: hiro.TeamReward.member_reward:type_name -> hiro.TeamMemberReward + 296, // 47: hiro.Reward.items:type_name -> hiro.Reward.ItemsEntry + 297, // 48: hiro.Reward.currencies:type_name -> hiro.Reward.CurrenciesEntry + 298, // 49: hiro.Reward.energies:type_name -> hiro.Reward.EnergiesEntry + 26, // 50: hiro.Reward.energy_modifiers:type_name -> hiro.RewardEnergyModifier + 27, // 51: hiro.Reward.reward_modifiers:type_name -> hiro.RewardModifier + 299, // 52: hiro.Reward.item_instances:type_name -> hiro.Reward.ItemInstancesEntry + 30, // 53: hiro.Reward.team_reward:type_name -> hiro.TeamReward + 31, // 54: hiro.RewardList.rewards:type_name -> hiro.Reward + 300, // 55: hiro.AvailableRewardsStringProperty.options:type_name -> hiro.AvailableRewardsStringProperty.OptionsEntry + 34, // 56: hiro.AvailableRewardsItem.count:type_name -> hiro.RewardRangeInt64 + 301, // 57: hiro.AvailableRewardsItem.numeric_properties:type_name -> hiro.AvailableRewardsItem.NumericPropertiesEntry + 302, // 58: hiro.AvailableRewardsItem.string_properties:type_name -> hiro.AvailableRewardsItem.StringPropertiesEntry + 34, // 59: hiro.AvailableRewardsItemSet.count:type_name -> hiro.RewardRangeInt64 + 34, // 60: hiro.AvailableRewardsCurrency.count:type_name -> hiro.RewardRangeInt64 + 33, // 61: hiro.AvailableRewardsEnergy.count:type_name -> hiro.RewardRangeInt32 + 34, // 62: hiro.AvailableRewardsEnergyModifier.value:type_name -> hiro.RewardRangeInt64 + 35, // 63: hiro.AvailableRewardsEnergyModifier.duration_sec:type_name -> hiro.RewardRangeUInt64 + 34, // 64: hiro.AvailableRewardsRewardModifier.value:type_name -> hiro.RewardRangeInt64 + 35, // 65: hiro.AvailableRewardsRewardModifier.duration_sec:type_name -> hiro.RewardRangeUInt64 + 303, // 66: hiro.AvailableRewardsContents.items:type_name -> hiro.AvailableRewardsContents.ItemsEntry + 40, // 67: hiro.AvailableRewardsContents.item_sets:type_name -> hiro.AvailableRewardsItemSet + 304, // 68: hiro.AvailableRewardsContents.currencies:type_name -> hiro.AvailableRewardsContents.CurrenciesEntry + 305, // 69: hiro.AvailableRewardsContents.energies:type_name -> hiro.AvailableRewardsContents.EnergiesEntry + 43, // 70: hiro.AvailableRewardsContents.energy_modifiers:type_name -> hiro.AvailableRewardsEnergyModifier + 44, // 71: hiro.AvailableRewardsContents.reward_modifiers:type_name -> hiro.AvailableRewardsRewardModifier + 306, // 72: hiro.AvailableTeamRewardsContents.items:type_name -> hiro.AvailableTeamRewardsContents.ItemsEntry + 40, // 73: hiro.AvailableTeamRewardsContents.item_sets:type_name -> hiro.AvailableRewardsItemSet + 307, // 74: hiro.AvailableTeamRewardsContents.currencies:type_name -> hiro.AvailableTeamRewardsContents.CurrenciesEntry + 44, // 75: hiro.AvailableTeamRewardsContents.reward_modifiers:type_name -> hiro.AvailableRewardsRewardModifier + 45, // 76: hiro.AvailableTeamMemberRewards.guaranteed:type_name -> hiro.AvailableRewardsContents + 45, // 77: hiro.AvailableTeamMemberRewards.weighted:type_name -> hiro.AvailableRewardsContents + 46, // 78: hiro.AvailableTeamRewards.guaranteed:type_name -> hiro.AvailableTeamRewardsContents + 46, // 79: hiro.AvailableTeamRewards.weighted:type_name -> hiro.AvailableTeamRewardsContents + 47, // 80: hiro.AvailableTeamRewards.member_reward:type_name -> hiro.AvailableTeamMemberRewards + 45, // 81: hiro.AvailableRewards.guaranteed:type_name -> hiro.AvailableRewardsContents + 45, // 82: hiro.AvailableRewards.weighted:type_name -> hiro.AvailableRewardsContents + 48, // 83: hiro.AvailableRewards.team_reward:type_name -> hiro.AvailableTeamRewards + 31, // 84: hiro.IncentiveClaim.reward:type_name -> hiro.Reward + 6, // 85: hiro.Incentive.type:type_name -> hiro.IncentiveType + 49, // 86: hiro.Incentive.recipient_rewards:type_name -> hiro.AvailableRewards + 49, // 87: hiro.Incentive.sender_rewards:type_name -> hiro.AvailableRewards + 31, // 88: hiro.Incentive.rewards:type_name -> hiro.Reward + 308, // 89: hiro.Incentive.claims:type_name -> hiro.Incentive.ClaimsEntry + 398, // 90: hiro.Incentive.additional_properties:type_name -> google.protobuf.Struct + 51, // 91: hiro.IncentiveList.incentives:type_name -> hiro.Incentive + 6, // 92: hiro.IncentiveInfo.type:type_name -> hiro.IncentiveType + 49, // 93: hiro.IncentiveInfo.available_rewards:type_name -> hiro.AvailableRewards + 31, // 94: hiro.IncentiveInfo.reward:type_name -> hiro.Reward + 309, // 95: hiro.ChallengeCreateRequest.metadata:type_name -> hiro.ChallengeCreateRequest.MetadataEntry + 49, // 96: hiro.ChallengeRewardTier.available_rewards:type_name -> hiro.AvailableRewards + 7, // 97: hiro.ChallengeScore.state:type_name -> hiro.ChallengeState + 66, // 98: hiro.Challenge.reward_tiers:type_name -> hiro.ChallengeRewardTier + 49, // 99: hiro.Challenge.available_rewards:type_name -> hiro.AvailableRewards + 310, // 100: hiro.Challenge.additional_properties:type_name -> hiro.Challenge.AdditionalPropertiesEntry + 67, // 101: hiro.Challenge.scores:type_name -> hiro.ChallengeScore + 7, // 102: hiro.Challenge.state:type_name -> hiro.ChallengeState + 31, // 103: hiro.Challenge.reward:type_name -> hiro.Reward + 311, // 104: hiro.Challenge.metadata:type_name -> hiro.Challenge.MetadataEntry + 68, // 105: hiro.ChallengesList.challenges:type_name -> hiro.Challenge + 66, // 106: hiro.ChallengeTemplate.reward_tiers:type_name -> hiro.ChallengeRewardTier + 72, // 107: hiro.ChallengeTemplate.players:type_name -> hiro.ChallengeMaxMinPlayers + 73, // 108: hiro.ChallengeTemplate.duration:type_name -> hiro.ChallengeMinMaxDuration + 312, // 109: hiro.ChallengeTemplate.additional_properties:type_name -> hiro.ChallengeTemplate.AdditionalPropertiesEntry + 313, // 110: hiro.ChallengeTemplates.templates:type_name -> hiro.ChallengeTemplates.TemplatesEntry + 49, // 111: hiro.EventLeaderboardRewardTier.available_rewards:type_name -> hiro.AvailableRewards + 82, // 112: hiro.EventLeaderboardRewardTiers.reward_tiers:type_name -> hiro.EventLeaderboardRewardTier + 49, // 113: hiro.EventLeaderboard.available_rewards:type_name -> hiro.AvailableRewards + 314, // 114: hiro.EventLeaderboard.reward_tiers:type_name -> hiro.EventLeaderboard.RewardTiersEntry + 315, // 115: hiro.EventLeaderboard.change_zones:type_name -> hiro.EventLeaderboard.ChangeZonesEntry + 31, // 116: hiro.EventLeaderboard.reward:type_name -> hiro.Reward + 316, // 117: hiro.EventLeaderboard.additional_properties:type_name -> hiro.EventLeaderboard.AdditionalPropertiesEntry + 81, // 118: hiro.EventLeaderboard.scores:type_name -> hiro.EventLeaderboardScore + 398, // 119: hiro.EventLeaderboard.matchmaker_properties:type_name -> google.protobuf.Struct + 85, // 120: hiro.EventLeaderboards.event_leaderboards:type_name -> hiro.EventLeaderboard + 399, // 121: hiro.EventLeaderboardDebugRandomScoresRequest.operator:type_name -> google.protobuf.Int32Value + 49, // 122: hiro.EconomyDonation.recipient_available_rewards:type_name -> hiro.AvailableRewards + 89, // 123: hiro.EconomyDonation.contributors:type_name -> hiro.EconomyDonationContributor + 49, // 124: hiro.EconomyDonation.contributor_available_rewards:type_name -> hiro.AvailableRewards + 31, // 125: hiro.EconomyDonation.recipient_rewards:type_name -> hiro.Reward + 317, // 126: hiro.EconomyDonation.additional_properties:type_name -> hiro.EconomyDonation.AdditionalPropertiesEntry + 90, // 127: hiro.EconomyDonationAck.donation:type_name -> hiro.EconomyDonation + 90, // 128: hiro.EconomyDonationsList.donations:type_name -> hiro.EconomyDonation + 318, // 129: hiro.EconomyDonationClaimRequestDetails.donors:type_name -> hiro.EconomyDonationClaimRequestDetails.DonorsEntry + 319, // 130: hiro.EconomyDonationClaimRequest.donations:type_name -> hiro.EconomyDonationClaimRequest.DonationsEntry + 92, // 131: hiro.EconomyDonationClaimRewards.donations:type_name -> hiro.EconomyDonationsList + 320, // 132: hiro.EconomyDonationClaimRewards.claimed_rewards:type_name -> hiro.EconomyDonationClaimRewards.ClaimedRewardsEntry + 321, // 133: hiro.EconomyDonationsByUserList.user_donations:type_name -> hiro.EconomyDonationsByUserList.UserDonationsEntry + 322, // 134: hiro.EconomyListStoreItemCost.currencies:type_name -> hiro.EconomyListStoreItemCost.CurrenciesEntry + 100, // 135: hiro.EconomyListStoreItem.cost:type_name -> hiro.EconomyListStoreItemCost + 49, // 136: hiro.EconomyListStoreItem.available_rewards:type_name -> hiro.AvailableRewards + 323, // 137: hiro.EconomyListStoreItem.additional_properties:type_name -> hiro.EconomyListStoreItem.AdditionalPropertiesEntry + 31, // 138: hiro.EconomyListPlacement.reward:type_name -> hiro.Reward + 49, // 139: hiro.EconomyListPlacement.available_rewards:type_name -> hiro.AvailableRewards + 324, // 140: hiro.EconomyListPlacement.additional_properties:type_name -> hiro.EconomyListPlacement.AdditionalPropertiesEntry + 101, // 141: hiro.EconomyList.store_items:type_name -> hiro.EconomyListStoreItem + 102, // 142: hiro.EconomyList.placements:type_name -> hiro.EconomyListPlacement + 325, // 143: hiro.EconomyList.donations:type_name -> hiro.EconomyList.DonationsEntry + 28, // 144: hiro.EconomyList.active_reward_modifiers:type_name -> hiro.ActiveRewardModifier + 49, // 145: hiro.InventoryItem.consume_available_rewards:type_name -> hiro.AvailableRewards + 326, // 146: hiro.InventoryItem.string_properties:type_name -> hiro.InventoryItem.StringPropertiesEntry + 327, // 147: hiro.InventoryItem.numeric_properties:type_name -> hiro.InventoryItem.NumericPropertiesEntry + 328, // 148: hiro.InventoryGrantRequest.items:type_name -> hiro.InventoryGrantRequest.ItemsEntry + 329, // 149: hiro.InventoryUpdateItemProperties.string_properties:type_name -> hiro.InventoryUpdateItemProperties.StringPropertiesEntry + 330, // 150: hiro.InventoryUpdateItemProperties.numeric_properties:type_name -> hiro.InventoryUpdateItemProperties.NumericPropertiesEntry + 331, // 151: hiro.InventoryUpdateItemsRequest.item_updates:type_name -> hiro.InventoryUpdateItemsRequest.ItemUpdatesEntry + 332, // 152: hiro.Inventory.items:type_name -> hiro.Inventory.ItemsEntry + 333, // 153: hiro.InventoryConsumeRequest.items:type_name -> hiro.InventoryConsumeRequest.ItemsEntry + 334, // 154: hiro.InventoryConsumeRequest.instances:type_name -> hiro.InventoryConsumeRequest.InstancesEntry + 109, // 155: hiro.InventoryConsumeRewards.inventory:type_name -> hiro.Inventory + 335, // 156: hiro.InventoryConsumeRewards.rewards:type_name -> hiro.InventoryConsumeRewards.RewardsEntry + 336, // 157: hiro.InventoryConsumeRewards.instance_rewards:type_name -> hiro.InventoryConsumeRewards.InstanceRewardsEntry + 109, // 158: hiro.InventoryUpdateAck.inventory:type_name -> hiro.Inventory + 337, // 159: hiro.InventoryList.items:type_name -> hiro.InventoryList.ItemsEntry + 338, // 160: hiro.AuctionBidAmount.currencies:type_name -> hiro.AuctionBidAmount.CurrenciesEntry + 115, // 161: hiro.AuctionFee.fixed:type_name -> hiro.AuctionBidAmount + 339, // 162: hiro.AuctionTemplateConditionListingCost.currencies:type_name -> hiro.AuctionTemplateConditionListingCost.CurrenciesEntry + 340, // 163: hiro.AuctionTemplateConditionListingCost.items:type_name -> hiro.AuctionTemplateConditionListingCost.ItemsEntry + 341, // 164: hiro.AuctionTemplateConditionListingCost.energies:type_name -> hiro.AuctionTemplateConditionListingCost.EnergiesEntry + 115, // 165: hiro.AuctionTemplateConditionBidIncrement.fixed:type_name -> hiro.AuctionBidAmount + 117, // 166: hiro.AuctionTemplateCondition.listing_cost:type_name -> hiro.AuctionTemplateConditionListingCost + 115, // 167: hiro.AuctionTemplateCondition.bid_start:type_name -> hiro.AuctionBidAmount + 118, // 168: hiro.AuctionTemplateCondition.bid_increment:type_name -> hiro.AuctionTemplateConditionBidIncrement + 116, // 169: hiro.AuctionTemplateCondition.fee:type_name -> hiro.AuctionFee + 342, // 170: hiro.AuctionTemplate.conditions:type_name -> hiro.AuctionTemplate.ConditionsEntry + 343, // 171: hiro.AuctionTemplates.templates:type_name -> hiro.AuctionTemplates.TemplatesEntry + 104, // 172: hiro.AuctionReward.items:type_name -> hiro.InventoryItem + 115, // 173: hiro.AuctionBid.bid:type_name -> hiro.AuctionBidAmount + 122, // 174: hiro.Auction.reward:type_name -> hiro.AuctionReward + 116, // 175: hiro.Auction.fee:type_name -> hiro.AuctionFee + 123, // 176: hiro.Auction.bid:type_name -> hiro.AuctionBid + 115, // 177: hiro.Auction.bid_next:type_name -> hiro.AuctionBidAmount + 123, // 178: hiro.Auction.bid_first:type_name -> hiro.AuctionBid + 123, // 179: hiro.Auction.bid_history:type_name -> hiro.AuctionBid + 123, // 180: hiro.AuctionNotificationBid.bid:type_name -> hiro.AuctionBid + 115, // 181: hiro.AuctionNotificationBid.bid_next:type_name -> hiro.AuctionBidAmount + 125, // 182: hiro.StreamEnvelope.auction_bid:type_name -> hiro.AuctionNotificationBid + 124, // 183: hiro.AuctionClaimBid.auction:type_name -> hiro.Auction + 122, // 184: hiro.AuctionClaimBid.reward:type_name -> hiro.AuctionReward + 124, // 185: hiro.AuctionClaimCreated.auction:type_name -> hiro.Auction + 115, // 186: hiro.AuctionClaimCreated.reward:type_name -> hiro.AuctionBidAmount + 115, // 187: hiro.AuctionClaimCreated.fee:type_name -> hiro.AuctionBidAmount + 104, // 188: hiro.AuctionClaimCreated.returned_items:type_name -> hiro.InventoryItem + 124, // 189: hiro.AuctionCancel.auction:type_name -> hiro.Auction + 122, // 190: hiro.AuctionCancel.reward:type_name -> hiro.AuctionReward + 124, // 191: hiro.AuctionList.auctions:type_name -> hiro.Auction + 115, // 192: hiro.AuctionBidRequest.bid:type_name -> hiro.AuctionBidAmount + 5, // 193: hiro.EconomyListRequest.store_type:type_name -> hiro.EconomyStoreType + 344, // 194: hiro.EconomyGrantRequest.currencies:type_name -> hiro.EconomyGrantRequest.CurrenciesEntry + 27, // 195: hiro.EconomyGrantRequest.reward_modifiers:type_name -> hiro.RewardModifier + 345, // 196: hiro.EconomyGrantRequest.items:type_name -> hiro.EconomyGrantRequest.ItemsEntry + 5, // 197: hiro.EconomyPurchaseIntentRequest.store_type:type_name -> hiro.EconomyStoreType + 5, // 198: hiro.EconomyPurchaseRequest.store_type:type_name -> hiro.EconomyStoreType + 5, // 199: hiro.EconomyPurchaseRestoreRequest.store_type:type_name -> hiro.EconomyStoreType + 346, // 200: hiro.EconomyPlacementStartRequest.metadata:type_name -> hiro.EconomyPlacementStartRequest.MetadataEntry + 31, // 201: hiro.EconomyPlacementStatus.reward:type_name -> hiro.Reward + 347, // 202: hiro.EconomyPlacementStatus.metadata:type_name -> hiro.EconomyPlacementStatus.MetadataEntry + 348, // 203: hiro.EconomyUpdateAck.wallet:type_name -> hiro.EconomyUpdateAck.WalletEntry + 109, // 204: hiro.EconomyUpdateAck.inventory:type_name -> hiro.Inventory + 31, // 205: hiro.EconomyUpdateAck.reward:type_name -> hiro.Reward + 28, // 206: hiro.EconomyUpdateAck.active_reward_modifiers:type_name -> hiro.ActiveRewardModifier + 349, // 207: hiro.EconomyPurchaseAck.wallet:type_name -> hiro.EconomyPurchaseAck.WalletEntry + 109, // 208: hiro.EconomyPurchaseAck.inventory:type_name -> hiro.Inventory + 31, // 209: hiro.EconomyPurchaseAck.reward:type_name -> hiro.Reward + 150, // 210: hiro.Energy.modifiers:type_name -> hiro.EnergyModifier + 49, // 211: hiro.Energy.available_rewards:type_name -> hiro.AvailableRewards + 350, // 212: hiro.Energy.additional_properties:type_name -> hiro.Energy.AdditionalPropertiesEntry + 351, // 213: hiro.EnergyList.energies:type_name -> hiro.EnergyList.EnergiesEntry + 352, // 214: hiro.EnergySpendRequest.amounts:type_name -> hiro.EnergySpendRequest.AmountsEntry + 152, // 215: hiro.EnergySpendReward.energies:type_name -> hiro.EnergyList + 31, // 216: hiro.EnergySpendReward.reward:type_name -> hiro.Reward + 353, // 217: hiro.EnergyGrantRequest.amounts:type_name -> hiro.EnergyGrantRequest.AmountsEntry + 156, // 218: hiro.LeaderboardConfigList.leaderboard_configs:type_name -> hiro.LeaderboardConfig + 8, // 219: hiro.Tutorial.state:type_name -> hiro.TutorialState + 354, // 220: hiro.Tutorial.additional_properties:type_name -> hiro.Tutorial.AdditionalPropertiesEntry + 355, // 221: hiro.TutorialList.tutorials:type_name -> hiro.TutorialList.TutorialsEntry + 166, // 222: hiro.Team.members:type_name -> hiro.TeamMember + 398, // 223: hiro.TeamUpdateRequest.metadata:type_name -> google.protobuf.Struct + 167, // 224: hiro.TeamList.teams:type_name -> hiro.Team + 175, // 225: hiro.UserTeams.user:type_name -> hiro.User + 167, // 226: hiro.UserTeams.teams:type_name -> hiro.Team + 356, // 227: hiro.UserTeamsList.user_teams:type_name -> hiro.UserTeamsList.UserTeamsEntry + 357, // 228: hiro.UnlockableCost.items:type_name -> hiro.UnlockableCost.ItemsEntry + 358, // 229: hiro.UnlockableCost.currencies:type_name -> hiro.UnlockableCost.CurrenciesEntry + 179, // 230: hiro.Unlockable.start_cost:type_name -> hiro.UnlockableCost + 179, // 231: hiro.Unlockable.cost:type_name -> hiro.UnlockableCost + 31, // 232: hiro.Unlockable.reward:type_name -> hiro.Reward + 49, // 233: hiro.Unlockable.available_rewards:type_name -> hiro.AvailableRewards + 359, // 234: hiro.Unlockable.additional_properties:type_name -> hiro.Unlockable.AdditionalPropertiesEntry + 360, // 235: hiro.UnlockableSlotCost.items:type_name -> hiro.UnlockableSlotCost.ItemsEntry + 361, // 236: hiro.UnlockableSlotCost.currencies:type_name -> hiro.UnlockableSlotCost.CurrenciesEntry + 180, // 237: hiro.UnlockablesList.unlockables:type_name -> hiro.Unlockable + 180, // 238: hiro.UnlockablesList.overflow:type_name -> hiro.Unlockable + 181, // 239: hiro.UnlockablesList.slot_cost:type_name -> hiro.UnlockableSlotCost + 182, // 240: hiro.UnlockablesReward.unlockables:type_name -> hiro.UnlockablesList + 31, // 241: hiro.UnlockablesReward.reward:type_name -> hiro.Reward + 49, // 242: hiro.UnlockablesReward.available_rewards:type_name -> hiro.AvailableRewards + 31, // 243: hiro.SubAchievement.reward:type_name -> hiro.Reward + 49, // 244: hiro.SubAchievement.available_rewards:type_name -> hiro.AvailableRewards + 362, // 245: hiro.SubAchievement.additional_properties:type_name -> hiro.SubAchievement.AdditionalPropertiesEntry + 49, // 246: hiro.Achievement.available_rewards:type_name -> hiro.AvailableRewards + 31, // 247: hiro.Achievement.reward:type_name -> hiro.Reward + 49, // 248: hiro.Achievement.available_total_reward:type_name -> hiro.AvailableRewards + 31, // 249: hiro.Achievement.total_reward:type_name -> hiro.Reward + 363, // 250: hiro.Achievement.sub_achievements:type_name -> hiro.Achievement.SubAchievementsEntry + 364, // 251: hiro.Achievement.additional_properties:type_name -> hiro.Achievement.AdditionalPropertiesEntry + 365, // 252: hiro.AchievementList.achievements:type_name -> hiro.AchievementList.AchievementsEntry + 366, // 253: hiro.AchievementList.repeat_achievements:type_name -> hiro.AchievementList.RepeatAchievementsEntry + 367, // 254: hiro.AchievementsUpdateAck.achievements:type_name -> hiro.AchievementsUpdateAck.AchievementsEntry + 368, // 255: hiro.AchievementsUpdateAck.repeat_achievements:type_name -> hiro.AchievementsUpdateAck.RepeatAchievementsEntry + 369, // 256: hiro.AchievementsUpdateRequest.achievements:type_name -> hiro.AchievementsUpdateRequest.AchievementsEntry + 49, // 257: hiro.StreakAvailableReward.reward:type_name -> hiro.AvailableRewards + 31, // 258: hiro.StreakReward.reward:type_name -> hiro.Reward + 195, // 259: hiro.Streak.rewards:type_name -> hiro.StreakAvailableReward + 195, // 260: hiro.Streak.available_rewards:type_name -> hiro.StreakAvailableReward + 196, // 261: hiro.Streak.claimed_rewards:type_name -> hiro.StreakReward + 370, // 262: hiro.StreaksList.streaks:type_name -> hiro.StreaksList.StreaksEntry + 371, // 263: hiro.StreaksUpdateRequest.updates:type_name -> hiro.StreaksUpdateRequest.UpdatesEntry + 31, // 264: hiro.RewardMailboxEntry.reward:type_name -> hiro.Reward + 202, // 265: hiro.RewardMailboxList.entries:type_name -> hiro.RewardMailboxEntry + 372, // 266: hiro.TeamStoreItemCost.currencies:type_name -> hiro.TeamStoreItemCost.CurrenciesEntry + 208, // 267: hiro.TeamStoreItem.cost:type_name -> hiro.TeamStoreItemCost + 49, // 268: hiro.TeamStoreItem.available_rewards:type_name -> hiro.AvailableRewards + 373, // 269: hiro.TeamStoreItem.additional_properties:type_name -> hiro.TeamStoreItem.AdditionalPropertiesEntry + 209, // 270: hiro.TeamStore.store_items:type_name -> hiro.TeamStoreItem + 28, // 271: hiro.TeamStore.active_reward_modifiers:type_name -> hiro.ActiveRewardModifier + 374, // 272: hiro.TeamStorePurchaseAck.wallet:type_name -> hiro.TeamStorePurchaseAck.WalletEntry + 109, // 273: hiro.TeamStorePurchaseAck.inventory:type_name -> hiro.Inventory + 31, // 274: hiro.TeamStorePurchaseAck.reward:type_name -> hiro.Reward + 375, // 275: hiro.TeamWalletGrantRequest.currencies:type_name -> hiro.TeamWalletGrantRequest.CurrenciesEntry + 376, // 276: hiro.TeamWallet.currencies:type_name -> hiro.TeamWallet.CurrenciesEntry + 19, // 277: hiro.TeamStatUpdateRequest.public:type_name -> hiro.StatUpdate + 19, // 278: hiro.TeamStatUpdateRequest.private:type_name -> hiro.StatUpdate + 377, // 279: hiro.TeamInventoryConsumeRequest.items:type_name -> hiro.TeamInventoryConsumeRequest.ItemsEntry + 378, // 280: hiro.TeamInventoryConsumeRequest.instances:type_name -> hiro.TeamInventoryConsumeRequest.InstancesEntry + 379, // 281: hiro.TeamInventoryGrantRequest.items:type_name -> hiro.TeamInventoryGrantRequest.ItemsEntry + 380, // 282: hiro.TeamInventoryUpdateItemsRequest.item_updates:type_name -> hiro.TeamInventoryUpdateItemsRequest.ItemUpdatesEntry + 381, // 283: hiro.TeamAchievementsUpdateRequest.achievements:type_name -> hiro.TeamAchievementsUpdateRequest.AchievementsEntry + 49, // 284: hiro.TeamEventLeaderboard.available_rewards:type_name -> hiro.AvailableRewards + 382, // 285: hiro.TeamEventLeaderboard.reward_tiers:type_name -> hiro.TeamEventLeaderboard.RewardTiersEntry + 383, // 286: hiro.TeamEventLeaderboard.change_zones:type_name -> hiro.TeamEventLeaderboard.ChangeZonesEntry + 31, // 287: hiro.TeamEventLeaderboard.reward:type_name -> hiro.Reward + 384, // 288: hiro.TeamEventLeaderboard.additional_properties:type_name -> hiro.TeamEventLeaderboard.AdditionalPropertiesEntry + 230, // 289: hiro.TeamEventLeaderboard.scores:type_name -> hiro.TeamEventLeaderboardScore + 398, // 290: hiro.TeamEventLeaderboard.matchmaker_properties:type_name -> google.protobuf.Struct + 231, // 291: hiro.TeamEventLeaderboard.contributions:type_name -> hiro.TeamEventLeaderboardContribution + 232, // 292: hiro.TeamEventLeaderboards.event_leaderboards:type_name -> hiro.TeamEventLeaderboard + 399, // 293: hiro.TeamEventLeaderboardDebugRandomScoresRequest.operator:type_name -> google.protobuf.Int32Value + 49, // 294: hiro.TeamGiftReward.contributor_reward:type_name -> hiro.AvailableRewards + 49, // 295: hiro.TeamGiftReward.noncontributor_reward:type_name -> hiro.AvailableRewards + 49, // 296: hiro.TeamGift.contribution_cost:type_name -> hiro.AvailableRewards + 49, // 297: hiro.TeamGift.contribution_reward:type_name -> hiro.AvailableRewards + 239, // 298: hiro.TeamGift.rewards:type_name -> hiro.TeamGiftReward + 398, // 299: hiro.TeamGift.additional_properties:type_name -> google.protobuf.Struct + 240, // 300: hiro.TeamGift.contributors:type_name -> hiro.TeamGiftContributor + 239, // 301: hiro.TeamGift.available_rewards:type_name -> hiro.TeamGiftReward + 241, // 302: hiro.TeamGiftList.gifts:type_name -> hiro.TeamGift + 241, // 303: hiro.TeamGiftContributeAck.gift:type_name -> hiro.TeamGift + 31, // 304: hiro.TeamGiftContributeAck.reward:type_name -> hiro.Reward + 241, // 305: hiro.TeamGiftClaimAck.gift:type_name -> hiro.TeamGift + 31, // 306: hiro.TeamGiftClaimAck.rewards:type_name -> hiro.Reward + 385, // 307: hiro.SyncInventoryItem.string_properties:type_name -> hiro.SyncInventoryItem.StringPropertiesEntry + 386, // 308: hiro.SyncInventoryItem.numeric_properties:type_name -> hiro.SyncInventoryItem.NumericPropertiesEntry + 387, // 309: hiro.SyncInventory.items:type_name -> hiro.SyncInventory.ItemsEntry + 388, // 310: hiro.SyncEconomy.currencies:type_name -> hiro.SyncEconomy.CurrenciesEntry + 28, // 311: hiro.SyncEconomy.modifiers:type_name -> hiro.ActiveRewardModifier + 389, // 312: hiro.SyncAchievements.achievements:type_name -> hiro.SyncAchievements.AchievementsEntry + 390, // 313: hiro.SyncEnergy.energies:type_name -> hiro.SyncEnergy.EnergiesEntry + 150, // 314: hiro.SyncEnergy.modifiers:type_name -> hiro.EnergyModifier + 391, // 315: hiro.SyncEventLeaderboards.event_leaderboards:type_name -> hiro.SyncEventLeaderboards.EventLeaderboardsEntry + 392, // 316: hiro.SyncProgressionUpdate.counts:type_name -> hiro.SyncProgressionUpdate.CountsEntry + 9, // 317: hiro.SyncProgressionUpdate.cost:type_name -> hiro.ProgressionCost + 393, // 318: hiro.SyncProgressions.progressions:type_name -> hiro.SyncProgressions.ProgressionsEntry + 394, // 319: hiro.SyncTutorials.updates:type_name -> hiro.SyncTutorials.UpdatesEntry + 395, // 320: hiro.SyncUnlockables.updates:type_name -> hiro.SyncUnlockables.UpdatesEntry + 196, // 321: hiro.SyncStreakUpdate.claimed_rewards:type_name -> hiro.StreakReward + 396, // 322: hiro.SyncStreaks.updates:type_name -> hiro.SyncStreaks.UpdatesEntry + 249, // 323: hiro.SyncRequest.inventory:type_name -> hiro.SyncInventory + 250, // 324: hiro.SyncRequest.economy:type_name -> hiro.SyncEconomy + 252, // 325: hiro.SyncRequest.achievements:type_name -> hiro.SyncAchievements + 254, // 326: hiro.SyncRequest.energy:type_name -> hiro.SyncEnergy + 256, // 327: hiro.SyncRequest.event_leaderboards:type_name -> hiro.SyncEventLeaderboards + 258, // 328: hiro.SyncRequest.progressions:type_name -> hiro.SyncProgressions + 20, // 329: hiro.SyncRequest.stats:type_name -> hiro.StatUpdateRequest + 259, // 330: hiro.SyncRequest.tutorials:type_name -> hiro.SyncTutorials + 261, // 331: hiro.SyncRequest.unlockables:type_name -> hiro.SyncUnlockables + 263, // 332: hiro.SyncRequest.streaks:type_name -> hiro.SyncStreaks + 397, // 333: hiro.SyncResponse.wallet:type_name -> hiro.SyncResponse.WalletEntry + 109, // 334: hiro.SyncResponse.inventory:type_name -> hiro.Inventory + 190, // 335: hiro.SyncResponse.achievements:type_name -> hiro.AchievementList + 152, // 336: hiro.SyncResponse.energy:type_name -> hiro.EnergyList + 85, // 337: hiro.SyncResponse.event_leaderboards:type_name -> hiro.EventLeaderboard + 14, // 338: hiro.SyncResponse.progressions:type_name -> hiro.ProgressionList + 22, // 339: hiro.SyncResponse.stats:type_name -> hiro.StatList + 159, // 340: hiro.SyncResponse.tutorials:type_name -> hiro.TutorialList + 182, // 341: hiro.SyncResponse.unlockables:type_name -> hiro.UnlockablesList + 28, // 342: hiro.SyncResponse.active_reward_modifiers:type_name -> hiro.ActiveRewardModifier + 198, // 343: hiro.SyncResponse.streaks:type_name -> hiro.StreaksList + 12, // 344: hiro.ProgressionList.ProgressionsEntry.value:type_name -> hiro.Progression + 13, // 345: hiro.ProgressionList.DeltasEntry.value:type_name -> hiro.ProgressionDelta + 12, // 346: hiro.ProgressionGetRequest.ProgressionsEntry.value:type_name -> hiro.Progression + 21, // 347: hiro.StatList.PublicEntry.value:type_name -> hiro.Stat + 21, // 348: hiro.StatList.PrivateEntry.value:type_name -> hiro.Stat + 25, // 349: hiro.TeamMemberReward.ItemInstancesEntry.value:type_name -> hiro.RewardInventoryItem + 25, // 350: hiro.TeamReward.ItemInstancesEntry.value:type_name -> hiro.RewardInventoryItem + 25, // 351: hiro.Reward.ItemInstancesEntry.value:type_name -> hiro.RewardInventoryItem + 37, // 352: hiro.AvailableRewardsStringProperty.OptionsEntry.value:type_name -> hiro.AvailableRewardsStringPropertyOption + 36, // 353: hiro.AvailableRewardsItem.NumericPropertiesEntry.value:type_name -> hiro.RewardRangeDouble + 38, // 354: hiro.AvailableRewardsItem.StringPropertiesEntry.value:type_name -> hiro.AvailableRewardsStringProperty + 39, // 355: hiro.AvailableRewardsContents.ItemsEntry.value:type_name -> hiro.AvailableRewardsItem + 41, // 356: hiro.AvailableRewardsContents.CurrenciesEntry.value:type_name -> hiro.AvailableRewardsCurrency + 42, // 357: hiro.AvailableRewardsContents.EnergiesEntry.value:type_name -> hiro.AvailableRewardsEnergy + 39, // 358: hiro.AvailableTeamRewardsContents.ItemsEntry.value:type_name -> hiro.AvailableRewardsItem + 41, // 359: hiro.AvailableTeamRewardsContents.CurrenciesEntry.value:type_name -> hiro.AvailableRewardsCurrency + 50, // 360: hiro.Incentive.ClaimsEntry.value:type_name -> hiro.IncentiveClaim + 74, // 361: hiro.ChallengeTemplates.TemplatesEntry.value:type_name -> hiro.ChallengeTemplate + 83, // 362: hiro.EventLeaderboard.RewardTiersEntry.value:type_name -> hiro.EventLeaderboardRewardTiers + 84, // 363: hiro.EventLeaderboard.ChangeZonesEntry.value:type_name -> hiro.EventLeaderboardChangeZone + 93, // 364: hiro.EconomyDonationClaimRequest.DonationsEntry.value:type_name -> hiro.EconomyDonationClaimRequestDetails + 32, // 365: hiro.EconomyDonationClaimRewards.ClaimedRewardsEntry.value:type_name -> hiro.RewardList + 92, // 366: hiro.EconomyDonationsByUserList.UserDonationsEntry.value:type_name -> hiro.EconomyDonationsList + 90, // 367: hiro.EconomyList.DonationsEntry.value:type_name -> hiro.EconomyDonation + 107, // 368: hiro.InventoryUpdateItemsRequest.ItemUpdatesEntry.value:type_name -> hiro.InventoryUpdateItemProperties + 104, // 369: hiro.Inventory.ItemsEntry.value:type_name -> hiro.InventoryItem + 32, // 370: hiro.InventoryConsumeRewards.RewardsEntry.value:type_name -> hiro.RewardList + 32, // 371: hiro.InventoryConsumeRewards.InstanceRewardsEntry.value:type_name -> hiro.RewardList + 104, // 372: hiro.InventoryList.ItemsEntry.value:type_name -> hiro.InventoryItem + 119, // 373: hiro.AuctionTemplate.ConditionsEntry.value:type_name -> hiro.AuctionTemplateCondition + 120, // 374: hiro.AuctionTemplates.TemplatesEntry.value:type_name -> hiro.AuctionTemplate + 151, // 375: hiro.EnergyList.EnergiesEntry.value:type_name -> hiro.Energy + 158, // 376: hiro.TutorialList.TutorialsEntry.value:type_name -> hiro.Tutorial + 176, // 377: hiro.UserTeamsList.UserTeamsEntry.value:type_name -> hiro.UserTeams + 188, // 378: hiro.Achievement.SubAchievementsEntry.value:type_name -> hiro.SubAchievement + 189, // 379: hiro.AchievementList.AchievementsEntry.value:type_name -> hiro.Achievement + 189, // 380: hiro.AchievementList.RepeatAchievementsEntry.value:type_name -> hiro.Achievement + 189, // 381: hiro.AchievementsUpdateAck.AchievementsEntry.value:type_name -> hiro.Achievement + 189, // 382: hiro.AchievementsUpdateAck.RepeatAchievementsEntry.value:type_name -> hiro.Achievement + 197, // 383: hiro.StreaksList.StreaksEntry.value:type_name -> hiro.Streak + 107, // 384: hiro.TeamInventoryUpdateItemsRequest.ItemUpdatesEntry.value:type_name -> hiro.InventoryUpdateItemProperties + 83, // 385: hiro.TeamEventLeaderboard.RewardTiersEntry.value:type_name -> hiro.EventLeaderboardRewardTiers + 84, // 386: hiro.TeamEventLeaderboard.ChangeZonesEntry.value:type_name -> hiro.EventLeaderboardChangeZone + 248, // 387: hiro.SyncInventory.ItemsEntry.value:type_name -> hiro.SyncInventoryItem + 251, // 388: hiro.SyncAchievements.AchievementsEntry.value:type_name -> hiro.SyncAchievementsUpdate + 253, // 389: hiro.SyncEnergy.EnergiesEntry.value:type_name -> hiro.SyncEnergyState + 255, // 390: hiro.SyncEventLeaderboards.EventLeaderboardsEntry.value:type_name -> hiro.SyncEventLeaderboardUpdate + 257, // 391: hiro.SyncProgressions.ProgressionsEntry.value:type_name -> hiro.SyncProgressionUpdate + 260, // 392: hiro.SyncUnlockables.UpdatesEntry.value:type_name -> hiro.SyncUnlockableUpdate + 262, // 393: hiro.SyncStreaks.UpdatesEntry.value:type_name -> hiro.SyncStreakUpdate + 400, // 394: hiro.input:extendee -> google.protobuf.EnumValueOptions + 400, // 395: hiro.output:extendee -> google.protobuf.EnumValueOptions + 396, // [396:396] is the sub-list for method output_type + 396, // [396:396] is the sub-list for method input_type + 396, // [396:396] is the sub-list for extension type_name + 394, // [394:396] is the sub-list for extension extendee + 0, // [0:394] is the sub-list for field type_name +} + +func init() { file_hiro_proto_init() } +func file_hiro_proto_init() { + if File_hiro_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_hiro_proto_msgTypes[0].Exporter = func(v any, i int) any { + switch v := v.(*ProgressionCost); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[1].Exporter = func(v any, i int) any { + switch v := v.(*ProgressionPreconditions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[2].Exporter = func(v any, i int) any { + switch v := v.(*ProgressionPreconditionsBlock); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[3].Exporter = func(v any, i int) any { + switch v := v.(*Progression); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[4].Exporter = func(v any, i int) any { + switch v := v.(*ProgressionDelta); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[5].Exporter = func(v any, i int) any { + switch v := v.(*ProgressionList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[6].Exporter = func(v any, i int) any { + switch v := v.(*ProgressionGetRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[7].Exporter = func(v any, i int) any { + switch v := v.(*ProgressionPurchaseRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[8].Exporter = func(v any, i int) any { + switch v := v.(*ProgressionUpdateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[9].Exporter = func(v any, i int) any { + switch v := v.(*ProgressionResetRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[10].Exporter = func(v any, i int) any { + switch v := v.(*StatUpdate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[11].Exporter = func(v any, i int) any { + switch v := v.(*StatUpdateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[12].Exporter = func(v any, i int) any { + switch v := v.(*Stat); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[13].Exporter = func(v any, i int) any { + switch v := v.(*StatList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[14].Exporter = func(v any, i int) any { + switch v := v.(*ChannelMessageAck); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[15].Exporter = func(v any, i int) any { + switch v := v.(*DevicePrefsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[16].Exporter = func(v any, i int) any { + switch v := v.(*RewardInventoryItem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[17].Exporter = func(v any, i int) any { + switch v := v.(*RewardEnergyModifier); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[18].Exporter = func(v any, i int) any { + switch v := v.(*RewardModifier); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[19].Exporter = func(v any, i int) any { + switch v := v.(*ActiveRewardModifier); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[20].Exporter = func(v any, i int) any { + switch v := v.(*TeamMemberReward); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[21].Exporter = func(v any, i int) any { + switch v := v.(*TeamReward); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[22].Exporter = func(v any, i int) any { + switch v := v.(*Reward); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[23].Exporter = func(v any, i int) any { + switch v := v.(*RewardList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[24].Exporter = func(v any, i int) any { + switch v := v.(*RewardRangeInt32); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[25].Exporter = func(v any, i int) any { + switch v := v.(*RewardRangeInt64); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[26].Exporter = func(v any, i int) any { + switch v := v.(*RewardRangeUInt64); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[27].Exporter = func(v any, i int) any { + switch v := v.(*RewardRangeDouble); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[28].Exporter = func(v any, i int) any { + switch v := v.(*AvailableRewardsStringPropertyOption); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[29].Exporter = func(v any, i int) any { + switch v := v.(*AvailableRewardsStringProperty); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[30].Exporter = func(v any, i int) any { + switch v := v.(*AvailableRewardsItem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[31].Exporter = func(v any, i int) any { + switch v := v.(*AvailableRewardsItemSet); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[32].Exporter = func(v any, i int) any { + switch v := v.(*AvailableRewardsCurrency); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[33].Exporter = func(v any, i int) any { + switch v := v.(*AvailableRewardsEnergy); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[34].Exporter = func(v any, i int) any { + switch v := v.(*AvailableRewardsEnergyModifier); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[35].Exporter = func(v any, i int) any { + switch v := v.(*AvailableRewardsRewardModifier); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[36].Exporter = func(v any, i int) any { + switch v := v.(*AvailableRewardsContents); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[37].Exporter = func(v any, i int) any { + switch v := v.(*AvailableTeamRewardsContents); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[38].Exporter = func(v any, i int) any { + switch v := v.(*AvailableTeamMemberRewards); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[39].Exporter = func(v any, i int) any { + switch v := v.(*AvailableTeamRewards); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[40].Exporter = func(v any, i int) any { + switch v := v.(*AvailableRewards); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[41].Exporter = func(v any, i int) any { + switch v := v.(*IncentiveClaim); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[42].Exporter = func(v any, i int) any { + switch v := v.(*Incentive); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[43].Exporter = func(v any, i int) any { + switch v := v.(*IncentiveList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[44].Exporter = func(v any, i int) any { + switch v := v.(*IncentiveInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[45].Exporter = func(v any, i int) any { + switch v := v.(*IncentiveSenderCreateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[46].Exporter = func(v any, i int) any { + switch v := v.(*IncentiveSenderDeleteRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[47].Exporter = func(v any, i int) any { + switch v := v.(*IncentiveSenderClaimRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[48].Exporter = func(v any, i int) any { + switch v := v.(*IncentiveRecipientGetRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[49].Exporter = func(v any, i int) any { + switch v := v.(*IncentiveRecipientClaimRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[50].Exporter = func(v any, i int) any { + switch v := v.(*ChallengeCreateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[51].Exporter = func(v any, i int) any { + switch v := v.(*ChallengeJoinRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[52].Exporter = func(v any, i int) any { + switch v := v.(*ChallengeLeaveRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[53].Exporter = func(v any, i int) any { + switch v := v.(*ChallengeClaimRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[54].Exporter = func(v any, i int) any { + switch v := v.(*ChallengeSearchRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[55].Exporter = func(v any, i int) any { + switch v := v.(*ChallengeInviteRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[56].Exporter = func(v any, i int) any { + switch v := v.(*ChallengeSubmitScoreRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[57].Exporter = func(v any, i int) any { + switch v := v.(*ChallengeRewardTier); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[58].Exporter = func(v any, i int) any { + switch v := v.(*ChallengeScore); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[59].Exporter = func(v any, i int) any { + switch v := v.(*Challenge); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[60].Exporter = func(v any, i int) any { + switch v := v.(*ChallengeListRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[61].Exporter = func(v any, i int) any { + switch v := v.(*ChallengeGetRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[62].Exporter = func(v any, i int) any { + switch v := v.(*ChallengesList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[63].Exporter = func(v any, i int) any { + switch v := v.(*ChallengeMaxMinPlayers); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[64].Exporter = func(v any, i int) any { + switch v := v.(*ChallengeMinMaxDuration); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[65].Exporter = func(v any, i int) any { + switch v := v.(*ChallengeTemplate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[66].Exporter = func(v any, i int) any { + switch v := v.(*ChallengeTemplates); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[67].Exporter = func(v any, i int) any { + switch v := v.(*EventLeaderboardList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[68].Exporter = func(v any, i int) any { + switch v := v.(*EventLeaderboardGet); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[69].Exporter = func(v any, i int) any { + switch v := v.(*EventLeaderboardUpdate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[70].Exporter = func(v any, i int) any { + switch v := v.(*EventLeaderboardClaim); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[71].Exporter = func(v any, i int) any { + switch v := v.(*EventLeaderboardRoll); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[72].Exporter = func(v any, i int) any { + switch v := v.(*EventLeaderboardScore); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[73].Exporter = func(v any, i int) any { + switch v := v.(*EventLeaderboardRewardTier); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[74].Exporter = func(v any, i int) any { + switch v := v.(*EventLeaderboardRewardTiers); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[75].Exporter = func(v any, i int) any { + switch v := v.(*EventLeaderboardChangeZone); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[76].Exporter = func(v any, i int) any { + switch v := v.(*EventLeaderboard); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[77].Exporter = func(v any, i int) any { + switch v := v.(*EventLeaderboards); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[78].Exporter = func(v any, i int) any { + switch v := v.(*EventLeaderboardDebugFillRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[79].Exporter = func(v any, i int) any { + switch v := v.(*EventLeaderboardDebugRandomScoresRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[80].Exporter = func(v any, i int) any { + switch v := v.(*EconomyDonationContributor); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[81].Exporter = func(v any, i int) any { + switch v := v.(*EconomyDonation); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[82].Exporter = func(v any, i int) any { + switch v := v.(*EconomyDonationAck); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[83].Exporter = func(v any, i int) any { + switch v := v.(*EconomyDonationsList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[84].Exporter = func(v any, i int) any { + switch v := v.(*EconomyDonationClaimRequestDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[85].Exporter = func(v any, i int) any { + switch v := v.(*EconomyDonationClaimRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[86].Exporter = func(v any, i int) any { + switch v := v.(*EconomyDonationClaimRewards); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[87].Exporter = func(v any, i int) any { + switch v := v.(*EconomyDonationGiveRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[88].Exporter = func(v any, i int) any { + switch v := v.(*EconomyDonationGetRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[89].Exporter = func(v any, i int) any { + switch v := v.(*EconomyDonationRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[90].Exporter = func(v any, i int) any { + switch v := v.(*EconomyDonationsByUserList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[91].Exporter = func(v any, i int) any { + switch v := v.(*EconomyListStoreItemCost); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[92].Exporter = func(v any, i int) any { + switch v := v.(*EconomyListStoreItem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[93].Exporter = func(v any, i int) any { + switch v := v.(*EconomyListPlacement); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[94].Exporter = func(v any, i int) any { + switch v := v.(*EconomyList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[95].Exporter = func(v any, i int) any { + switch v := v.(*InventoryItem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[96].Exporter = func(v any, i int) any { + switch v := v.(*InventoryListRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[97].Exporter = func(v any, i int) any { + switch v := v.(*InventoryGrantRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[98].Exporter = func(v any, i int) any { + switch v := v.(*InventoryUpdateItemProperties); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[99].Exporter = func(v any, i int) any { + switch v := v.(*InventoryUpdateItemsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[100].Exporter = func(v any, i int) any { + switch v := v.(*Inventory); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[101].Exporter = func(v any, i int) any { + switch v := v.(*InventoryConsumeRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[102].Exporter = func(v any, i int) any { + switch v := v.(*InventoryConsumeRewards); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[103].Exporter = func(v any, i int) any { + switch v := v.(*InventoryDeleteItemsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[104].Exporter = func(v any, i int) any { + switch v := v.(*InventoryUpdateAck); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[105].Exporter = func(v any, i int) any { + switch v := v.(*InventoryList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[106].Exporter = func(v any, i int) any { + switch v := v.(*AuctionBidAmount); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[107].Exporter = func(v any, i int) any { + switch v := v.(*AuctionFee); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[108].Exporter = func(v any, i int) any { + switch v := v.(*AuctionTemplateConditionListingCost); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[109].Exporter = func(v any, i int) any { + switch v := v.(*AuctionTemplateConditionBidIncrement); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[110].Exporter = func(v any, i int) any { + switch v := v.(*AuctionTemplateCondition); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[111].Exporter = func(v any, i int) any { + switch v := v.(*AuctionTemplate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[112].Exporter = func(v any, i int) any { + switch v := v.(*AuctionTemplates); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[113].Exporter = func(v any, i int) any { + switch v := v.(*AuctionReward); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[114].Exporter = func(v any, i int) any { + switch v := v.(*AuctionBid); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[115].Exporter = func(v any, i int) any { + switch v := v.(*Auction); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[116].Exporter = func(v any, i int) any { + switch v := v.(*AuctionNotificationBid); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[117].Exporter = func(v any, i int) any { + switch v := v.(*StreamEnvelope); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[118].Exporter = func(v any, i int) any { + switch v := v.(*AuctionClaimBid); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[119].Exporter = func(v any, i int) any { + switch v := v.(*AuctionClaimCreated); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[120].Exporter = func(v any, i int) any { + switch v := v.(*AuctionCancel); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[121].Exporter = func(v any, i int) any { + switch v := v.(*AuctionList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[122].Exporter = func(v any, i int) any { + switch v := v.(*AuctionListRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[123].Exporter = func(v any, i int) any { + switch v := v.(*AuctionBidRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[124].Exporter = func(v any, i int) any { + switch v := v.(*AuctionClaimBidRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[125].Exporter = func(v any, i int) any { + switch v := v.(*AuctionClaimCreatedRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[126].Exporter = func(v any, i int) any { + switch v := v.(*AuctionCancelRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[127].Exporter = func(v any, i int) any { + switch v := v.(*AuctionCreateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[128].Exporter = func(v any, i int) any { + switch v := v.(*AuctionListBidsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[129].Exporter = func(v any, i int) any { + switch v := v.(*AuctionListCreatedRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[130].Exporter = func(v any, i int) any { + switch v := v.(*AuctionsFollowRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[131].Exporter = func(v any, i int) any { + switch v := v.(*EconomyListRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[132].Exporter = func(v any, i int) any { + switch v := v.(*EconomyGrantRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[133].Exporter = func(v any, i int) any { + switch v := v.(*EconomyPurchaseIntentRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[134].Exporter = func(v any, i int) any { + switch v := v.(*EconomyPurchaseRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[135].Exporter = func(v any, i int) any { + switch v := v.(*EconomyPurchaseRestoreRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[136].Exporter = func(v any, i int) any { + switch v := v.(*EconomyPlacementStatusRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[137].Exporter = func(v any, i int) any { + switch v := v.(*EconomyPlacementStartRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[138].Exporter = func(v any, i int) any { + switch v := v.(*EconomyPlacementStatus); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[139].Exporter = func(v any, i int) any { + switch v := v.(*EconomyUpdateAck); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[140].Exporter = func(v any, i int) any { + switch v := v.(*EconomyPurchaseAck); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[141].Exporter = func(v any, i int) any { + switch v := v.(*EnergyModifier); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[142].Exporter = func(v any, i int) any { + switch v := v.(*Energy); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[143].Exporter = func(v any, i int) any { + switch v := v.(*EnergyList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[144].Exporter = func(v any, i int) any { + switch v := v.(*EnergySpendRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[145].Exporter = func(v any, i int) any { + switch v := v.(*EnergySpendReward); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[146].Exporter = func(v any, i int) any { + switch v := v.(*EnergyGrantRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[147].Exporter = func(v any, i int) any { + switch v := v.(*LeaderboardConfig); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[148].Exporter = func(v any, i int) any { + switch v := v.(*LeaderboardConfigList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[149].Exporter = func(v any, i int) any { + switch v := v.(*Tutorial); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[150].Exporter = func(v any, i int) any { + switch v := v.(*TutorialList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[151].Exporter = func(v any, i int) any { + switch v := v.(*TutorialAcceptRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[152].Exporter = func(v any, i int) any { + switch v := v.(*TutorialDeclineRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[153].Exporter = func(v any, i int) any { + switch v := v.(*TutorialAbandonRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[154].Exporter = func(v any, i int) any { + switch v := v.(*TutorialUpdateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[155].Exporter = func(v any, i int) any { + switch v := v.(*TutorialResetRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[156].Exporter = func(v any, i int) any { + switch v := v.(*RateAppRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[157].Exporter = func(v any, i int) any { + switch v := v.(*TeamMember); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[158].Exporter = func(v any, i int) any { + switch v := v.(*Team); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[159].Exporter = func(v any, i int) any { + switch v := v.(*TeamCreateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[160].Exporter = func(v any, i int) any { + switch v := v.(*TeamUpdateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[161].Exporter = func(v any, i int) any { + switch v := v.(*TeamListRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[162].Exporter = func(v any, i int) any { + switch v := v.(*TeamList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[163].Exporter = func(v any, i int) any { + switch v := v.(*TeamSearchRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[164].Exporter = func(v any, i int) any { + switch v := v.(*TeamGetRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[165].Exporter = func(v any, i int) any { + switch v := v.(*UserTeamsListRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[166].Exporter = func(v any, i int) any { + switch v := v.(*User); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[167].Exporter = func(v any, i int) any { + switch v := v.(*UserTeams); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[168].Exporter = func(v any, i int) any { + switch v := v.(*UserTeamsList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[169].Exporter = func(v any, i int) any { + switch v := v.(*TeamWriteChatMessageRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[170].Exporter = func(v any, i int) any { + switch v := v.(*UnlockableCost); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[171].Exporter = func(v any, i int) any { + switch v := v.(*Unlockable); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[172].Exporter = func(v any, i int) any { + switch v := v.(*UnlockableSlotCost); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[173].Exporter = func(v any, i int) any { + switch v := v.(*UnlockablesList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[174].Exporter = func(v any, i int) any { + switch v := v.(*UnlockablesReward); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[175].Exporter = func(v any, i int) any { + switch v := v.(*UnlockablesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[176].Exporter = func(v any, i int) any { + switch v := v.(*UnlockablesQueueAddRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[177].Exporter = func(v any, i int) any { + switch v := v.(*UnlockablesQueueRemoveRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[178].Exporter = func(v any, i int) any { + switch v := v.(*UnlockablesQueueSetRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[179].Exporter = func(v any, i int) any { + switch v := v.(*SubAchievement); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[180].Exporter = func(v any, i int) any { + switch v := v.(*Achievement); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[181].Exporter = func(v any, i int) any { + switch v := v.(*AchievementList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[182].Exporter = func(v any, i int) any { + switch v := v.(*AchievementsClaimRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[183].Exporter = func(v any, i int) any { + switch v := v.(*AchievementsGetRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[184].Exporter = func(v any, i int) any { + switch v := v.(*AchievementsUpdateAck); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[185].Exporter = func(v any, i int) any { + switch v := v.(*AchievementsUpdateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[186].Exporter = func(v any, i int) any { + switch v := v.(*StreakAvailableReward); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[187].Exporter = func(v any, i int) any { + switch v := v.(*StreakReward); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[188].Exporter = func(v any, i int) any { + switch v := v.(*Streak); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[189].Exporter = func(v any, i int) any { + switch v := v.(*StreaksList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[190].Exporter = func(v any, i int) any { + switch v := v.(*StreaksUpdateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[191].Exporter = func(v any, i int) any { + switch v := v.(*StreaksClaimRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[192].Exporter = func(v any, i int) any { + switch v := v.(*StreaksResetRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[193].Exporter = func(v any, i int) any { + switch v := v.(*RewardMailboxEntry); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[194].Exporter = func(v any, i int) any { + switch v := v.(*RewardMailboxList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[195].Exporter = func(v any, i int) any { + switch v := v.(*RewardMailboxListRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[196].Exporter = func(v any, i int) any { + switch v := v.(*RewardMailboxClaimRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[197].Exporter = func(v any, i int) any { + switch v := v.(*RewardMailboxDeleteRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[198].Exporter = func(v any, i int) any { + switch v := v.(*TeamStoreListRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[199].Exporter = func(v any, i int) any { + switch v := v.(*TeamStoreItemCost); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[200].Exporter = func(v any, i int) any { + switch v := v.(*TeamStoreItem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[201].Exporter = func(v any, i int) any { + switch v := v.(*TeamStore); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[202].Exporter = func(v any, i int) any { + switch v := v.(*TeamStorePurchaseRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[203].Exporter = func(v any, i int) any { + switch v := v.(*TeamStorePurchaseAck); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[204].Exporter = func(v any, i int) any { + switch v := v.(*TeamWalletGetRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[205].Exporter = func(v any, i int) any { + switch v := v.(*TeamWalletGrantRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[206].Exporter = func(v any, i int) any { + switch v := v.(*TeamWallet); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[207].Exporter = func(v any, i int) any { + switch v := v.(*TeamStatListRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[208].Exporter = func(v any, i int) any { + switch v := v.(*TeamStatUpdateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[209].Exporter = func(v any, i int) any { + switch v := v.(*TeamInventoryListRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[210].Exporter = func(v any, i int) any { + switch v := v.(*TeamInventoryConsumeRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[211].Exporter = func(v any, i int) any { + switch v := v.(*TeamInventoryGrantRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[212].Exporter = func(v any, i int) any { + switch v := v.(*TeamInventoryUpdateItemsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[213].Exporter = func(v any, i int) any { + switch v := v.(*TeamAchievementsClaimRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[214].Exporter = func(v any, i int) any { + switch v := v.(*TeamAchievementsGetRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[215].Exporter = func(v any, i int) any { + switch v := v.(*TeamAchievementsUpdateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[216].Exporter = func(v any, i int) any { + switch v := v.(*TeamEventLeaderboardList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[217].Exporter = func(v any, i int) any { + switch v := v.(*TeamEventLeaderboardGet); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[218].Exporter = func(v any, i int) any { + switch v := v.(*TeamEventLeaderboardUpdate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[219].Exporter = func(v any, i int) any { + switch v := v.(*TeamEventLeaderboardClaim); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[220].Exporter = func(v any, i int) any { + switch v := v.(*TeamEventLeaderboardRoll); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[221].Exporter = func(v any, i int) any { + switch v := v.(*TeamEventLeaderboardScore); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[222].Exporter = func(v any, i int) any { + switch v := v.(*TeamEventLeaderboardContribution); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[223].Exporter = func(v any, i int) any { + switch v := v.(*TeamEventLeaderboard); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[224].Exporter = func(v any, i int) any { + switch v := v.(*TeamEventLeaderboards); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[225].Exporter = func(v any, i int) any { + switch v := v.(*TeamEventLeaderboardDebugFillRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[226].Exporter = func(v any, i int) any { + switch v := v.(*TeamEventLeaderboardDebugRandomScoresRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[227].Exporter = func(v any, i int) any { + switch v := v.(*TeamRewardMailboxListRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[228].Exporter = func(v any, i int) any { + switch v := v.(*TeamRewardMailboxClaimRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[229].Exporter = func(v any, i int) any { + switch v := v.(*TeamRewardMailboxDeleteRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[230].Exporter = func(v any, i int) any { + switch v := v.(*TeamGiftReward); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[231].Exporter = func(v any, i int) any { + switch v := v.(*TeamGiftContributor); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[232].Exporter = func(v any, i int) any { + switch v := v.(*TeamGift); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[233].Exporter = func(v any, i int) any { + switch v := v.(*TeamGiftList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[234].Exporter = func(v any, i int) any { + switch v := v.(*TeamGiftListRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[235].Exporter = func(v any, i int) any { + switch v := v.(*TeamGiftContributeRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[236].Exporter = func(v any, i int) any { + switch v := v.(*TeamGiftContributeAck); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[237].Exporter = func(v any, i int) any { + switch v := v.(*TeamGiftClaimRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[238].Exporter = func(v any, i int) any { + switch v := v.(*TeamGiftClaimAck); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[239].Exporter = func(v any, i int) any { + switch v := v.(*SyncInventoryItem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[240].Exporter = func(v any, i int) any { + switch v := v.(*SyncInventory); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[241].Exporter = func(v any, i int) any { + switch v := v.(*SyncEconomy); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[242].Exporter = func(v any, i int) any { + switch v := v.(*SyncAchievementsUpdate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[243].Exporter = func(v any, i int) any { + switch v := v.(*SyncAchievements); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[244].Exporter = func(v any, i int) any { + switch v := v.(*SyncEnergyState); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[245].Exporter = func(v any, i int) any { + switch v := v.(*SyncEnergy); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[246].Exporter = func(v any, i int) any { + switch v := v.(*SyncEventLeaderboardUpdate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[247].Exporter = func(v any, i int) any { + switch v := v.(*SyncEventLeaderboards); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[248].Exporter = func(v any, i int) any { + switch v := v.(*SyncProgressionUpdate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[249].Exporter = func(v any, i int) any { + switch v := v.(*SyncProgressions); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[250].Exporter = func(v any, i int) any { + switch v := v.(*SyncTutorials); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[251].Exporter = func(v any, i int) any { + switch v := v.(*SyncUnlockableUpdate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[252].Exporter = func(v any, i int) any { + switch v := v.(*SyncUnlockables); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[253].Exporter = func(v any, i int) any { + switch v := v.(*SyncStreakUpdate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[254].Exporter = func(v any, i int) any { + switch v := v.(*SyncStreaks); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[255].Exporter = func(v any, i int) any { + switch v := v.(*SyncRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_hiro_proto_msgTypes[256].Exporter = func(v any, i int) any { + switch v := v.(*SyncResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_hiro_proto_msgTypes[117].OneofWrappers = []any{ + (*StreamEnvelope_AuctionBid)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_hiro_proto_rawDesc, + NumEnums: 9, + NumMessages: 389, + NumExtensions: 2, + NumServices: 0, + }, + GoTypes: file_hiro_proto_goTypes, + DependencyIndexes: file_hiro_proto_depIdxs, + EnumInfos: file_hiro_proto_enumTypes, + MessageInfos: file_hiro_proto_msgTypes, + ExtensionInfos: file_hiro_proto_extTypes, + }.Build() + File_hiro_proto = out.File + file_hiro_proto_rawDesc = nil + file_hiro_proto_goTypes = nil + file_hiro_proto_depIdxs = nil +} diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/hiro.proto b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/hiro.proto new file mode 100644 index 0000000..87e886d --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/hiro.proto @@ -0,0 +1,3560 @@ +// Copyright 2023 Heroic Labs & Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +// The request and response objects for Hiro. +package hiro; + +import "google/protobuf/descriptor.proto"; +import "google/protobuf/struct.proto"; +import "google/protobuf/wrappers.proto"; + +option go_package = "github.com/heroiclabs/hiro"; + +extend google.protobuf.EnumValueOptions { + // The input proto message to the Nakama RPC. + optional string input = 1000; + // The output proto message of the Nakama RPC. + optional string output = 1001; +} + +enum RpcId { + RPC_ID_UNSPECIFIED = 0; + + // List all inventory items defined in the codex. + RPC_ID_INVENTORY_LIST = 1 [(input) = "InventoryListRequest", (output) = "InventoryList"]; + // List all inventory items owned by the player. + RPC_ID_INVENTORY_LIST_INVENTORY = 2 [(input) = "InventoryListRequest", (output) = "InventoryList"]; + // Consume one or more inventory items owned by the player. + RPC_ID_INVENTORY_CONSUME = 3 [(input) = "InventoryConsumeRequest", (output) = "InventoryConsumeRewards"]; + // Grant one or more inventory items to the player. + RPC_ID_INVENTORY_GRANT = 4 [(input) = "InventoryGrantRequest", (output) = "InventoryUpdateAck"]; + // Update the properties on one or more inventory items owned by the player. + RPC_ID_INVENTORY_UPDATE = 5 [(input) = "InventoryUpdateItemsRequest", (output) = "InventoryUpdateAck"]; + // Delete Items by instance id. + RPC_ID_INVENTORY_DELETE = 123 [(input) = "InventoryDeleteItemsRequest", (output) = "InventoryUpdateAck"]; + + // Claim one or more rewards which are partially or full donated by other players. + RPC_ID_ECONOMY_DONATION_CLAIM = 6 [(input) = "EconomyDonationClaimRequest", (output) = "EconomyDonationClaimRewards"]; + // Donate some resource (currencies, items, etc.) to a user by donation ID. + RPC_ID_ECONOMY_DONATION_GIVE = 7 [(input) = "EconomyDonationGiveRequest", (output) = "EconomyUpdateAck"]; + // Get progress on one or more donations for a set of players by their IDs. + RPC_ID_ECONOMY_DONATION_GET = 8 [(input) = "EconomyDonationGetRequest", (output) = "EconomyDonationsByUserList"]; + // Request a donation which other players can contribute into. + RPC_ID_ECONOMY_DONATION_REQUEST = 9 [(input) = "EconomyDonationRequest", (output) = "EconomyDonationAck"]; + // Get all store items defined in the Virtual Store. + RPC_ID_ECONOMY_STORE_GET = 10 [(input) = "EconomyListRequest", (output) = "EconomyList"]; + // Grant one or more currencies or reward modifiers to te player. + RPC_ID_ECONOMY_GRANT = 11 [(input) = "EconomyGrantRequest", (output) = "EconomyUpdateAck"]; + // Send a marker of intent to purchase by the player. + RPC_ID_ECONOMY_PURCHASE_INTENT = 12 [(input) = "EconomyPurchaseIntentRequest", (output) = ""]; + // Purchase a store item by the player. + RPC_ID_ECONOMY_PURCHASE_ITEM = 13 [(input) = "EconomyPurchaseRequest", (output) = "EconomyPurchaseAck"]; + // Restore a set of purchases. + RPC_ID_ECONOMY_PURCHASE_RESTORE = 59 [(input) = "EconomyPurchaseRestoreRequest", (output) = ""]; + // Get the current status on an Ad placement which may have been rewarded. + RPC_ID_ECONOMY_PLACEMENT_STATUS = 14 [(input) = "EconomyPlacementStatusRequest", (output) = "EconomyPlacementStatus"]; + // Start a new Ad placement by placement ID. + RPC_ID_ECONOMY_PLACEMENT_START = 15 [(input) = "EconomyPlacementStartRequest", (output) = "EconomyPlacementStatus"]; + + // Claim one or more achievements which have completed their progress. + RPC_ID_ACHIEVEMENTS_CLAIM = 16 [(input) = "AchievementsClaimRequest", (output) = "AchievementsUpdateAck"]; + // Get all achievements with progress accumulated by the player. + RPC_ID_ACHIEVEMENTS_GET = 17 [(input) = "", (output) = "AchievementList"]; + // Update one or more achievements with the same progress amount. + RPC_ID_ACHIEVEMENTS_UPDATE = 18 [(input) = "AchievementsUpdateRequest", (output) = "AchievementsUpdateAck"]; + + // Get the energies and their current timers for the player. + RPC_ID_ENERGY_GET = 19 [(input) = "", (output) = "EnergyList"]; + // Spend one or more energies for the player. + RPC_ID_ENERGY_SPEND = 20 [(input) = "EnergySpendRequest", (output) = "EnergySpendReward"]; + // Grant one or more energies to the player. + RPC_ID_ENERGY_GRANT = 65 [(input) = "EnergyGrantRequest", (output) = "EnergyList"]; + + // Get the tutorials and current progress step for the player. + RPC_ID_TUTORIALS_GET = 21 [(input) = "", (output) = "TutorialList"]; + // Accept an offer to step through a tutorial. + RPC_ID_TUTORIALS_ACCEPT = 22 [(input) = "TutorialAcceptRequest", (output) = "Tutorial"]; + // Decline an offer to start a tutorial. + RPC_ID_TUTORIALS_DECLINE = 23 [(input) = "TutorialDeclineRequest", (output) = "Tutorial"]; + // Abandon progress on a tutorial. + RPC_ID_TUTORIALS_ABANDON = 24 [(input) = "TutorialAbandonRequest", (output) = "Tutorial"]; + // Update the current progress step in the tutorial by ID. + RPC_ID_TUTORIALS_UPDATE = 25 [(input) = "TutorialUpdateRequest", (output) = "TutorialList"]; + // Reset the state of all given tutorial IDs. + RPC_ID_TUTORIALS_RESET = 79 [(input) = "TutorialResetRequest", (output) = "TutorialList"]; + + // Create a team which other players can join. + RPC_ID_TEAMS_CREATE = 26 [(input) = "TeamCreateRequest", (output) = "Team"]; + // Update a team's properties. + RPC_ID_TEAMS_UPDATE = 121 [(input) = "TeamUpdateRequest", (output) = "Team"]; + // List one or more teams which the player can join. + RPC_ID_TEAMS_LIST = 27 [(input) = "TeamListRequest", (output) = "TeamList"]; + // Search for teams by name or an optional short code. + RPC_ID_TEAMS_SEARCH = 28 [(input) = "TeamSearchRequest", (output) = "TeamList"]; + // Retrieves a team by its TeamID. + RPC_ID_TEAMS_GET = 122 [(input) = "TeamGetRequest", (output) = "Team"]; + // Retrieve a list of teams associated with a given set of users. + RPC_ID_TEAMS_USER_TEAMS_LIST = 124 [(input) = "UserTeamsListRequest", (output) = "UserTeamsList"]; + // Write a chat message to the Team's chat channel. + RPC_ID_TEAMS_WRITE_CHAT_MESSAGE = 29 [(input) = "TeamWriteChatMessageRequest", (output) = "ChannelMessageAck"]; + + // Get all store items defined in the team Virtual Store. + RPC_ID_TEAMS_STORE_GET = 94 [(input) = "TeamStoreListRequest", (output) = "TeamStore"]; + // Purchase a team store item. + RPC_ID_TEAMS_STORE_PURCHASE = 95 [(input) = "TeamStorePurchaseRequest", (output) = "TeamStorePurchaseAck"]; + + // Get a team's wallet. + RPC_ID_TEAMS_WALLET_GET = 96 [(input) = "TeamWalletGetRequest", (output) = "TeamWallet"]; + // Grant currencies to a team's wallet. + RPC_ID_TEAMS_WALLET_GRANT = 97 [(input) = "TeamWalletGrantRequest", (output) = "TeamWallet"]; + + // Get a team's stats. + RPC_ID_TEAMS_STATS_GET = 98 [(input) = "TeamStatListRequest", (output) = "StatList"]; + // Update a team's stats. + RPC_ID_TEAMS_STATS_UPDATE = 99 [(input) = "TeamStatUpdateRequest", (output) = "StatList"]; + + // List all inventory items defined in the team codex. + RPC_ID_TEAMS_INVENTORY_LIST = 100 [(input) = "TeamInventoryListRequest", (output) = "InventoryList"]; + // List all inventory items owned by a team. + RPC_ID_TEAMS_INVENTORY_LIST_INVENTORY = 101 [(input) = "TeamInventoryListRequest", (output) = "InventoryList"]; + // Consume one or more inventory items owned by a team. + RPC_ID_TEAMS_INVENTORY_CONSUME = 102 [(input) = "TeamInventoryConsumeRequest", (output) = "InventoryConsumeRewards"]; + // Grant one or more inventory items to a team. + RPC_ID_TEAMS_INVENTORY_GRANT = 103 [(input) = "TeamInventoryGrantRequest", (output) = "InventoryUpdateAck"]; + // Update the properties on one or more team inventory items accessible to the player. + RPC_ID_TEAMS_INVENTORY_UPDATE = 104 [(input) = "TeamInventoryUpdateItemsRequest", (output) = "InventoryUpdateAck"]; + + // Claim one or more team achievements which have completed their progress. + RPC_ID_TEAMS_ACHIEVEMENTS_CLAIM = 105 [(input) = "TeamAchievementsClaimRequest", (output) = "AchievementsUpdateAck"]; + // Get all team achievements with progress accumulated by the team. + RPC_ID_TEAMS_ACHIEVEMENTS_GET = 106 [(input) = "TeamAchievementsGetRequest", (output) = "AchievementList"]; + // Update one or more team achievements with the same progress amount. + RPC_ID_TEAMS_ACHIEVEMENTS_UPDATE = 107 [(input) = "TeamAchievementsUpdateRequest", (output) = "AchievementsUpdateAck"]; + + // List available event leaderboards. + RPC_ID_TEAMS_EVENT_LEADERBOARD_LIST = 108 [(input) = "TeamEventLeaderboardList", (output) = "TeamEventLeaderboards"]; + // Get a specified event leaderboard defined for the game. + RPC_ID_TEAMS_EVENT_LEADERBOARD_GET = 109 [(input) = "TeamEventLeaderboardGet", (output) = "TeamEventLeaderboard"]; + // Update an event leaderboard record for a user. + RPC_ID_TEAMS_EVENT_LEADERBOARD_UPDATE = 110 [(input) = "TeamEventLeaderboardUpdate", (output) = "TeamEventLeaderboard"]; + // Claim an event leaderboard reward for a user. + RPC_ID_TEAMS_EVENT_LEADERBOARD_CLAIM = 111 [(input) = "TeamEventLeaderboardClaim", (output) = "TeamEventLeaderboard"]; + // Roll a new cohort for the specified event leaderboard. + RPC_ID_TEAMS_EVENT_LEADERBOARD_ROLL = 112 [(input) = "TeamEventLeaderboardRoll", (output) = "TeamEventLeaderboard"]; + // DEBUG. Fill an event leaderboard with random user IDs. + RPC_ID_TEAMS_EVENT_LEADERBOARD_DEBUG_FILL = 113 [(input) = "TeamEventLeaderboardDebugFillRequest", (output) = "TeamEventLeaderboard"]; + // DEBUG. Assign random scores within a given range to users within the caller's cohort, except for the caller themselves. + RPC_ID_TEAMS_EVENT_LEADERBOARD_DEBUG_RANDOM_SCORES = 114 [(input) = "TeamEventLeaderboardDebugRandomScoresRequest", (output) = "TeamEventLeaderboard"]; + + // List rewards available in a team reward mailbox. + RPC_ID_TEAMS_REWARD_MAILBOX_LIST = 115 [(input) = "TeamRewardMailboxListRequest", (output) = "RewardMailboxList"]; + // Claim a reward from the team reward mailbox, and optionally delete it. + RPC_ID_TEAMS_REWARD_MAILBOX_CLAIM = 116 [(input) = "TeamRewardMailboxClaimRequest", (output) = "RewardMailboxEntry"]; + // Delete a reward from the team reward mailbox, even if it is not yet claimed. + RPC_ID_TEAMS_REWARD_MAILBOX_DELETE = 117 [(input) = "TeamRewardMailboxDeleteRequest", (output) = ""]; + + // List available team gifts. + RPC_ID_TEAMS_GIFT_LIST = 118 [(input) = "TeamGiftListRequest", (output) = "TeamGiftList"]; + // Contribute to an active team gift. + RPC_ID_TEAMS_GIFT_CONTRIBUTE = 119 [(input) = "TeamGiftContributeRequest", (output) = "TeamGiftContributeAck"]; + // Claim the user's reward from an eligible team gift. + RPC_ID_TEAMS_GIFT_CLAIM = 120 [(input) = "TeamGiftClaimRequest", (output) = "TeamGiftClaimAck"]; + + // Create a random unlockable to assign to a slot (or overflow) unless there are no slots. + RPC_ID_UNLOCKABLES_CREATE = 30 [(input) = "", (output) = "UnlockablesList"]; + // Get the unlockables which are currently in progress for the player. + RPC_ID_UNLOCKABLES_GET = 31 [(input) = "", (output) = "UnlockablesList"]; + // Start the unlock timer for an unlockable in the specified slot. + RPC_ID_UNLOCKABLES_UNLOCK_START = 32 [(input) = "UnlockablesRequest", (output) = "UnlockablesList"]; + // Purchase an unlockable with soft currency based on the remainder cost calculated by the offset left to wait. + RPC_ID_UNLOCKABLES_PURCHASE_UNLOCK = 33 [(input) = "UnlockablesRequest", (output) = "UnlockablesList"]; + // Purchase a new slot to be used to store unlockables. + RPC_ID_UNLOCKABLES_PURCHASE_SLOT = 34 [(input) = "", (output) = "UnlockablesList"]; + // Claim an unlockable whose start timer has completed or completion was fast tracked with a purchase. + RPC_ID_UNLOCKABLES_CLAIM = 35 [(input) = "UnlockablesRequest", (output) = "UnlockablesReward"]; + // Add some set of unlockables to the unlock queue. + RPC_ID_UNLOCKABLES_QUEUE_ADD = 62 [(input) = "UnlockablesQueueAddRequest", (output) = "UnlockablesList"]; + // Remove some set of unlockables from the unlock queue. + RPC_ID_UNLOCKABLES_QUEUE_REMOVE = 63 [(input) = "UnlockablesQueueRemoveRequest", (output) = "UnlockablesList"]; + // Replace the unlock queue with the given set of unlockables. + RPC_ID_UNLOCKABLES_QUEUE_SET = 64 [(input) = "UnlockablesQueueSetRequest", (output) = "UnlockablesList"]; + + // Send feedback to the game's developers over email. + RPC_ID_BASE_RATE_APP = 36 [(input) = "RateAppRequest", (output) = ""]; + // Update or create the mobile push device tokens and preferences for the player. + RPC_ID_BASE_SET_DEVICE_PREFS = 37 [(input) = "DevicePrefsRequest", (output) = ""]; + // Sync offline state. + RPC_ID_BASE_SYNC = 58 [(input) = "SyncRequest", (output) = "SyncResponse"]; + + // Get the leaderboards defined for the game. + RPC_ID_LEADERBOARDS_CONFIG_GET = 38 [(input) = "", (output) = "LeaderboardConfigList"]; + + // List available event leaderboards. + RPC_ID_EVENT_LEADERBOARD_LIST = 80 [(input) = "EventLeaderboardList", (output) = "EventLeaderboards"]; + // Get a specified event leaderboard defined for the game. + RPC_ID_EVENT_LEADERBOARD_GET = 42 [(input) = "EventLeaderboardGet", (output) = "EventLeaderboard"]; + // Update an event leaderboard record for a user. + RPC_ID_EVENT_LEADERBOARD_UPDATE = 43 [(input) = "EventLeaderboardUpdate", (output) = "EventLeaderboard"]; + // Claim an event leaderboard reward for a user. + RPC_ID_EVENT_LEADERBOARD_CLAIM = 44 [(input) = "EventLeaderboardClaim", (output) = "EventLeaderboard"]; + // Roll a new cohort for the specified event leaderboard. + RPC_ID_EVENT_LEADERBOARD_ROLL = 45 [(input) = "EventLeaderboardRoll", (output) = "EventLeaderboard"]; + // DEBUG. Fill an event leaderboard with random user IDs. + RPC_ID_EVENT_LEADERBOARD_DEBUG_FILL = 60 [(input) = "", (output) = "EventLeaderboard"]; + // DEBUG. Assign random scores within a given range to users within the caller's cohort, except for the caller themselves. + RPC_ID_EVENT_LEADERBOARD_DEBUG_RANDOM_SCORES = 61 [(input) = "EventLeaderboardDebugRandomScoresRequest", (output) = "EventLeaderboard"]; + + // Get all stats. + RPC_ID_STATS_GET = 46 [(input) = "", (output) = "StatList"]; + // Update stats. + RPC_ID_STATS_UPDATE = 47 [(input) = "StatUpdateRequest", (output) = "StatList"]; + + // Get progressions. + RPC_ID_PROGRESSIONS_GET = 48 [(input) = "ProgressionGetRequest", (output) = "ProgressionList"]; + // Purchase a progression for permanent unlock, if supported. + RPC_ID_PROGRESSIONS_PURCHASE = 49 [(input) = "ProgressionPurchaseRequest", (output) = "ProgressionList"]; + // Update a progression to change its count, if supported. + RPC_ID_PROGRESSIONS_UPDATE = 50 [(input) = "ProgressionUpdateRequest", (output) = "ProgressionList"]; + + // List incentives set up by the user. + RPC_ID_INCENTIVES_SENDER_LIST = 51 [(input) = "", (output) = "IncentiveList"]; + // Create a new incentive set up by the user. + RPC_ID_INCENTIVES_SENDER_CREATE = 52 [(input) = "IncentiveSenderCreateRequest", (output) = "IncentiveList"]; + // Delete an existing incentive set up by the user. + RPC_ID_INCENTIVES_SENDER_DELETE = 53 [(input) = "IncentiveSenderDeleteRequest", (output) = "IncentiveList"]; + // Claim rewards for an existing incentive after it has been used by some recipient(s). + RPC_ID_INCENTIVES_SENDER_CLAIM = 54 [(input) = "IncentiveSenderClaimRequest", (output) = "IncentiveList"]; + // Get information about an existing incentive from a recipient's perspective. + RPC_ID_INCENTIVES_RECIPIENT_GET = 55 [(input) = "IncentiveRecipientGetRequest", (output) = "IncentiveInfo"]; + // Claim an existing incentive and receive associated rewards. + RPC_ID_INCENTIVES_RECIPIENT_CLAIM = 56 [(input) = "IncentiveRecipientClaimRequest", (output) = "IncentiveInfo"]; + + // Reset progression progress. + RPC_ID_PROGRESSIONS_RESET = 57 [(input) = "ProgressionResetRequest", (output) = "ProgressionList"]; + + // Fetch all available auction templates. + RPC_ID_AUCTIONS_GET_TEMPLATES = 66 [(input) = "", (output) = "AuctionTemplates"]; + // List available auctions. + RPC_ID_AUCTIONS_LIST = 67 [(input) = "AuctionListRequest", (output) = "AuctionList"]; + // Bid on an active auction. + RPC_ID_AUCTIONS_BID = 68 [(input) = "AuctionBidRequest", (output) = "Auction"]; + // Claim a completed auction where the user was the winning bidder. + RPC_ID_AUCTIONS_CLAIM_BID = 69 [(input) = "AuctionClaimBidRequest", (output) = "AuctionClaimBid"]; + // Claim a completed auction where the user was the seller. + RPC_ID_AUCTIONS_CLAIM_CREATED = 70 [(input) = "AuctionClaimCreatedRequest", (output) = "AuctionClaimCreated"]; + // Cancel an in-progress auction. + RPC_ID_AUCTIONS_CANCEL = 71 [(input) = "AuctionCancelRequest", (output) = "AuctionCancel"]; + // Create a new auction. + RPC_ID_AUCTIONS_CREATE = 72 [(input) = "AuctionCreateRequest", (output) = "Auction"]; + // List auctions the user has bid on. + RPC_ID_AUCTIONS_LIST_BIDS = 73 [(input) = "AuctionListBidsRequest", (output) = "AuctionList"]; + // List auctions the user has created. + RPC_ID_AUCTIONS_LIST_CREATED = 74 [(input) = "AuctionListCreatedRequest", (output) = "AuctionList"]; + + // List all available streaks, including their current state and progress if any. + RPC_ID_STREAKS_LIST = 75 [(input) = "", (output) = "StreaksList"]; + // Update one or more streaks with the given progress amounts. + RPC_ID_STREAKS_UPDATE = 76 [(input) = "StreaksUpdateRequest", (output) = "StreaksList"]; + // Claim the rewards from one or more streaks. + RPC_ID_STREAKS_CLAIM = 77 [(input) = "StreaksClaimRequest", (output) = "StreaksList"]; + // Reset all progress for one or more streaks. + RPC_ID_STREAKS_RESET = 78 [(input) = "StreaksResetRequest", (output) = "StreaksList"]; + + // List all available templates for challenges. + RPC_ID_CHALLENGES_GET_TEMPLATES = 81 [(input) = "", (output) = "ChallengeTemplates"]; + // Get a challenge by id. + RPC_ID_CHALLENGE_GET = 82 [(input) = "ChallengeGetRequest", (output) = "Challenge"]; + // List all the user's challenges. + RPC_ID_CHALLENGE_LIST = 83 [(input) = "ChallengeListRequest", (output) = "ChallengesList"]; + // Create a new challenge based on a template. + RPC_ID_CHALLENGE_CREATE = 84 [(input) = "ChallengeCreateRequest", (output) = "Challenge"]; + // Join a challenge. + RPC_ID_CHALLENGE_JOIN = 85 [(input) = "ChallengeJoinRequest", (output) = "Challenge"]; + // Leave a challenge. + RPC_ID_CHALLENGE_LEAVE = 86 [(input) = "ChallengeLeaveRequest", (output) = "Challenge"]; + // Submit a score to a challenge. + RPC_ID_CHALLENGE_SUBMIT_SCORE = 87 [(input) = "ChallengeSubmitScoreRequest", (output) = "Challenge"]; + // Claim a reward of a challenge. + RPC_ID_CHALLENGE_CLAIM = 88 [(input) = "ChallengeClaimRequest", (output) = "Challenge"]; + // Search for an open challenge to join. + RPC_ID_CHALLENGE_SEARCH = 89 [(input) = "ChallengeSearchRequest", (output) = "ChallengesList"]; + // Invite more users to an ongoing challenge. + RPC_ID_CHALLENGE_INVITE = 90 [(input) = "ChallengeInviteRequest", (output) = "Challenge"]; + + // List rewards available in a reward mailbox. + RPC_ID_REWARD_MAILBOX_LIST = 91 [(input) = "RewardMailboxListRequest", (output) = "RewardMailboxList"]; + // Claim a reward from the reward mailbox, and optionally delete it. + RPC_ID_REWARD_MAILBOX_CLAIM = 92 [(input) = "RewardMailboxClaimRequest", (output) = "RewardMailboxEntry"]; + // Delete a reward from the reward mailbox, even if it is not yet claimed. + RPC_ID_REWARD_MAILBOX_DELETE = 93 [(input) = "RewardMailboxDeleteRequest", (output) = ""]; + + //--- Server to server RPCs ---// + + // Webhook RPC to handle Rewarded Video Ad placement success callbacks. + RPC_ID_ECONOMY_PLACEMENT_SUCCESS = 1001; + // Webhook RPC to handle Rewarded Video Ad placement failure callbacks. + RPC_ID_ECONOMY_PLACEMENT_FAIL = 1002; + // RPC to upload Hiro system configurations for the storage personalizer. + RPC_ID_STORAGE_PERSONALIZER_UPLOAD = 1003; +} + +enum RpcSocketId { + RPC_SOCKET_ID_UNSPECIFIED = 0; + + // Follow auctions a user has an interest in, bid or own. Must be called via a connected socket. + RPC_SOCKET_ID_AUCTIONS_FOLLOW = 1 [(input) = "AuctionFollowRequest", (output) = "AuctionList"]; + // Bid on an auction and follow it for further updates. + RPC_SOCKET_ID_AUCTIONS_BID = 2 [(input) = "AuctionBidRequest", (output) = "Auction"]; +} + +// The cost(s) associated with permanently unlocking a progression. +message ProgressionCost { + // The items which will be deducted. + map items = 1; + // The currencies which will be deducted. + map currencies = 2; +} + +// Preconditions associated with a progression. +message ProgressionPreconditions { + // Counts required. + map counts = 1; + // Purchase cost paid. + ProgressionCost cost = 2; + // Other progressions. + repeated string progressions = 3; + // Achievements. + repeated string achievements = 4; + // Items with associated minimum counts. + map items_min = 5; + // Items with associated maximum counts. + map items_max = 6; + // Stats with associated minimum values. + map stats_min = 7; + // Stats with associated maximum values. + map stats_max = 8; + // Energies with associated minimum counts. + map energy_min = 9; + // Energies with associated maximum counts. + map energy_max = 10; + // Currencies with associated minimum counts. + map currency_min = 11; + // Currencies with associated maximum counts. + map currency_max = 12; +} + +enum ProgressionPreconditionsOperator { + // Unspecified. Defaults to AND. + PROGRESSION_PRECONDITIONS_OPERATOR_UNSPECIFIED = 0; + // Both the direct preconditions and the nested block must be true. + PROGRESSION_PRECONDITIONS_OPERATOR_AND = 1; + // Either the direct preconditions or the nested block must be true. + PROGRESSION_PRECONDITIONS_OPERATOR_OR = 2; + // Either the direct preconditions or the nested block must be true, but not both. + PROGRESSION_PRECONDITIONS_OPERATOR_XOR = 3; + // The direct preconditions must be true, but the nested block must not be. + PROGRESSION_PRECONDITIONS_OPERATOR_NOT = 4; +} + +// A complex set of progression preconditions. +message ProgressionPreconditionsBlock { + // Direct preconditions. + ProgressionPreconditions direct = 1; + // Operator for any nested block. + ProgressionPreconditionsOperator operator = 2; + // Nested block of preconditions, if any. + ProgressionPreconditionsBlock nested = 3; +} + +// A progression element which can be unlocked to access further progressions. +message Progression { + // The ID of the progression. + string id = 1; + // The name of the progression. May be an i18n code. + string name = 2; + // A description of the progression. May be an i18n code. + string description = 3; + // The category to group the progression together with others. + string category = 4; + // Current count, if any. + map counts = 5; + // Additional metadata properties. + map additional_properties = 6; + // Flag indicating unlock status. + bool unlocked = 7; + // All preconditions. + ProgressionPreconditionsBlock preconditions = 8; + // Unmet preconditions. + ProgressionPreconditionsBlock unmet_preconditions = 9; + // Flag indicating if unconditional updates are allowed. + bool unconditional_updates = 10; + // Flag indicating if the progression remains unlocked permanently once unlocked the first time. + bool permanent_unlock = 11; +} + +enum ProgressionDeltaState { + // Unspecified. Defaults to UNCHANGED. + PROGRESSION_DELTA_STATE_UNSPECIFIED = 0; + // Progression unlock state has not changed. + PROGRESSION_DELTA_STATE_UNCHANGED = 1; + // Progression was locked, it is now unlocked. + PROGRESSION_DELTA_STATE_UNLOCKED = 2; + // Progression was unlocked, it is now locked. + PROGRESSION_DELTA_STATE_LOCKED = 3; +} + +// A change in a given progression, compared to a previously known state. +message ProgressionDelta { + // The ID of the progression. + string id = 1; + // Potential state change. + ProgressionDeltaState state = 2; + // Changes to counts, if any. + map counts = 3; + // Changes to preconditions, if any. + ProgressionPreconditionsBlock preconditions = 4; +} + +// All or a filtered list of progressions for a user. +message ProgressionList { + // Progressions keyed by progression ID. + map progressions = 1; + // Progression deltas keyed by progression ID. + map deltas = 2; +} + +// Request progressions for a user, optionally including previously seen state for delta calculations. +message ProgressionGetRequest { + // Optional last known progressions state, keyed by progression ID. + map progressions = 1; +} + +// Request to permanently unlock a progression, if supported by that specific progression. +message ProgressionPurchaseRequest { + // ID of the progression to permanently unlock. + string id = 1; +} + +// Request to update a progression, if supported by that specific progression. +message ProgressionUpdateRequest { + // ID of the progression to update. + string id = 1; + // One or more counts to add to the progression. + map counts = 2; +} + +// Request to reset progression progress. +message ProgressionResetRequest { + // The progression IDs to reset. + repeated string ids = 1; +} + +// Indicate how a stats update should be handled. +enum StatUpdateOperator { + // Unspecified. Defaults to Set. + STAT_UPDATE_OPERATOR_UNSPECIFIED = 0; + // Set the given value, overwriting any previous one. + STAT_UPDATE_OPERATOR_SET = 1; + // Increment or decrement the existing value by the given amount. Equivalent to Set if no previous value existed. + STAT_UPDATE_OPERATOR_DELTA = 2; + // Use the new value if it's lower than the existing one. Equivalent to Set if no previous value existed. + STAT_UPDATE_OPERATOR_MIN = 3; + // Use the new value if it's higher than the existing one. Equivalent to Set if no previous value existed. + STAT_UPDATE_OPERATOR_MAX = 4; +} + +// Describes a single stat update. +message StatUpdate { + // Name. + string name = 1; + // Value. + int64 value = 2; + // Operator. + StatUpdateOperator operator = 3; +} + +// Request an optionally batched stats update. +message StatUpdateRequest { + // Public stat updates. + repeated StatUpdate public = 1; + // Private stat updates. + repeated StatUpdate private = 2; +} + +// A single stat with associated information. +message Stat { + // Name. + string name = 1; + // Indicator if this belongs to public or private stats. + bool public = 2; + // Update time in UTC seconds. + int64 update_time_sec = 3; + // Current value. + int64 value = 4; + // Number of values submitted. + int64 count = 5; + // Total of all submitted values. + int64 total = 6; + // Smallest value submitted. + int64 min = 7; + // Largest value submitted. + int64 max = 8; + // First value submitted. + int64 first = 9; + // Latest value submitted. + int64 last = 10; + // Additional properties. + google.protobuf.Struct additional_properties = 11; +} + +// A list of stats all belonging to one user. +message StatList { + // Public stat names and their associated data. + map public = 1; + // Private stat names and their associated data. + map private = 2; +} + +// A receipt reply from a channel message send operation. +message ChannelMessageAck { + // The channel the message was sent to. + string channel_id = 1; + // The unique ID assigned to the message. + string message_id = 2; + // The code representing a message type or category. + int32 code = 3; + // Username of the message sender. + string username = 4; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the message was created. + int64 create_time = 5; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the message was last updated. + int64 update_time = 6; + // True if the message was persisted to the channel's history, false otherwise. + bool persistent = 7; + // The name of the chat room, or an empty string if this message was not sent through a chat room. + string room_name = 8; + // The ID of the group, or an empty string if this message was not sent through a group channel. + string group_id = 9; + // The ID of the first DM user, or an empty string if this message was not sent through a DM chat. + string user_id_one = 10; + // The ID of the second DM user, or an empty string if this message was not sent through a DM chat. + string user_id_two = 11; +} + +// Update or create the mobile push device tokens and preferences. +message DevicePrefsRequest { + // The device ID to set. + string device_id = 1; + // The push token from the Android device. This or 'push_token_ios' must be set. + string push_token_android = 2; + // The push token from the iOS device. This or 'push_token_android' must be set. + string push_token_ios = 3; + // Additional device preferences for push events. Must be owned by the user. + map preferences = 4; +} + +// The store types supported by the Economy system. +enum EconomyStoreType { + // Unspecified. Defaults to Apple. + ECONOMY_STORE_TYPE_UNSPECIFIED = 0; + // Apple App Store. + ECONOMY_STORE_TYPE_APPLE_APPSTORE = 1; + // Google Play. + ECONOMY_STORE_TYPE_GOOGLE_PLAY = 2; + // Facebook Instant games. + ECONOMY_STORE_TYPE_FBINSTANT = 3; + // Discord Store. + ECONOMY_STORE_TYPE_DISCORD = 4; +} + +// Inventory item granted. +message RewardInventoryItem { + // The ID of the item. + string id = 1; + // The count granted of the item. + int64 count = 2; + // The properties with string values. + map string_properties = 3; + // The properties with numeric values. + map numeric_properties = 4; + // The instance ID of the item. + string instance_id = 5; +} + +// Energy modifier granted. +message RewardEnergyModifier { + // The ID of they modifier granted. + string id = 1; + // The energy modifier operator. + string operator = 2; + // The value to apply. Its behavior depends on the operator. + int64 value = 3; + // The duration of the energy modifier in seconds. + uint64 duration_sec = 4; + // The weight of the energy modifier, if weighted. Otherwise, -1. + int64 weight = 5; +} + +// A reward modifier temporally adjusts the way all rewards are handled in the economy. +message RewardModifier { + // The ID of the reward content to modify. + string id = 1; + // The type of reward content to modify. + string type = 2; + // The operator to apply. + string operator = 3; + // The value to apply. Its behavior depends on the operator. + int64 value = 4; + // The duration of the item modifier in seconds. + uint64 duration_sec = 5; +} + +// A reward modifier that is currently active. +message ActiveRewardModifier { + // The ID of the reward content to modify. + string id = 1; + // The type of reward content to modify. + string type = 2; + // The operator to apply. + string operator = 3; + // The value to apply. Its behavior depends on the operator. + int64 value = 4; + // The start time when this reward modifier was activated. + int64 start_time_sec = 5; + // The time when this reward modifier will expire. + int64 end_time_sec = 6; +} + +// Rewards granted to each member of the team. +message TeamMemberReward { + // The items granted. Keyed by item ID. + map items = 1; + // The currencies granted. + map currencies = 2; + // The energy granted. + map energies = 3; + // The energy modifier granted. + repeated RewardEnergyModifier energy_modifiers = 4; + // The reward modifiers granted. + repeated RewardModifier reward_modifiers = 5; + // When the reward was granted, in UNIX time. + int64 grant_time_sec = 6; + // The item instances granted. Keyed by item instance ID. + map item_instances = 7; +} + +// Rewards granted to the team. +message TeamReward { + // The items granted. Keyed by item ID. + map items = 1; + // The currencies granted. + map currencies = 2; + // The reward modifiers granted. + repeated RewardModifier reward_modifiers = 3; + // The reward modifiers granted that will apply to team members. + repeated RewardModifier member_reward_modifiers = 4; + // When the reward was granted, in UNIX time. + int64 grant_time_sec = 5; + // The item instances granted. Keyed by item instance ID. + map item_instances = 6; + // Indicates if this reward was sent to the team reward mailbox, and what its expiry will be. + int64 to_mailbox_expiry_sec = 7; + // Reward granted to each team member. + TeamMemberReward member_reward = 8; +} + +// Rewards granted to the player. +message Reward { + // The items granted. Keyed by item ID. + map items = 1; + // The currencies granted. + map currencies = 2; + // The energy granted. + map energies = 3; + // The energy modifier granted. + repeated RewardEnergyModifier energy_modifiers = 4; + // The reward modifiers granted. + repeated RewardModifier reward_modifiers = 5; + // When the reward was granted, in UNIX time. + int64 grant_time_sec = 6; + // The item instances granted. Keyed by item instance ID. + map item_instances = 7; + // Indicates if this reward was sent to the reward mailbox, and what its expiry will be. + int64 to_mailbox_expiry_sec = 8; + // Team reward, if any. + TeamReward team_reward = 9; +} + +// A list of rewards granted to the player. +message RewardList { + // The rewards granted. + repeated Reward rewards = 1; +} + +// A range of possible values. +message RewardRangeInt32 { + // The minimum bound of the range. + int32 min = 1; + // The maximum bound of the range. + int32 max = 2; + // A number that the result must be a multiple of. + int32 multiple = 3; +} + +// A range of possible values. +message RewardRangeInt64 { + // The minimum bound of the range. + int64 min = 1; + // The maximum bound of the range. + int64 max = 2; + // A number that the result must be a multiple of. + int64 multiple = 3; +} + +// A range of possible values. +message RewardRangeUInt64 { + // The minimum bound of the range. + uint64 min = 1; + // The maximum bound of the range. + uint64 max = 2; + // A number that the result must be a multiple of. + uint64 multiple = 3; +} + +// A range of possible values. +message RewardRangeDouble { + // The minimum bound of the range. + double min = 1; + // The maximum bound of the range. + double max = 2; + // A number that the result must be a multiple of. + double multiple = 3; +} + +// A possible string property option. +message AvailableRewardsStringPropertyOption { + // The option weight. + int64 weight = 1; +} + +// A possible string property. +message AvailableRewardsStringProperty { + // The available string property options. + map options = 1; + // The total weight from which the options are selected. + int64 total_weight = 2; +} + +// A possible item reward. +message AvailableRewardsItem { + // The possible count of the reward. + RewardRangeInt64 count = 1; + // The possible numeric properties of the reward. + map numeric_properties = 2; + // The possible string properties of the reward. + map string_properties = 3; +} + +// A possible item reward. +message AvailableRewardsItemSet { + // The number of items to draw from the set. + RewardRangeInt64 count = 1; + // The number of repeat items that may be drawn from the set. Also includes the user's inventory. + int64 max_repeats = 2; + // Drawn items must exist in the intersection of these sets. + repeated string set = 3; +} + +// A possible currency reward. +message AvailableRewardsCurrency { + // The possible count of the currency. + RewardRangeInt64 count = 1; +} + +// A possible energy reward. +message AvailableRewardsEnergy { + // The possible count of the energy. + RewardRangeInt32 count = 1; +} + +// A possible energy reward. +message AvailableRewardsEnergyModifier { + // The ID of the energy to modify. + string id = 1; + // The operator of the energy modifier. + string operator = 2; + // The value of the energy modifier. + RewardRangeInt64 value = 3; + // The possible duration of the modifier. + RewardRangeUInt64 duration_sec = 4; +} + +// A possible modifier reward. +message AvailableRewardsRewardModifier { + // The ID of the reward item, currency, energy, or energy modifier to modify. + string id = 1; + // The type of reward content to modify. + string type = 2; + // The operator of the modifier. + string operator = 3; + // The value of the modifier. + RewardRangeInt64 value = 4; + // The possible duration of the modifier. + RewardRangeUInt64 duration_sec = 5; +} + +// The reward contents for available rewards. +message AvailableRewardsContents { + // All possible items from this particular reward. + map items = 1; + // All possible item sets from this particular reward. + repeated AvailableRewardsItemSet item_sets = 2; + // All possible currencies from this particular reward. + map currencies = 3; + // All possible energies from this particular reward. + map energies = 4; + // All possible energy reward modifiers from this particular reward. + repeated AvailableRewardsEnergyModifier energy_modifiers = 5; + // All reward modifiers from this particular reward. + repeated AvailableRewardsRewardModifier reward_modifiers = 6; + // The weight of the reward contents. + int64 weight = 7; +} + +// The reward contents for available team rewards. +message AvailableTeamRewardsContents { + // All possible items from this particular reward. + map items = 1; + // All possible item sets from this particular reward. + repeated AvailableRewardsItemSet item_sets = 2; + // All possible currencies from this particular reward. + map currencies = 3; + // All reward modifiers from this particular reward. + repeated AvailableRewardsRewardModifier reward_modifiers = 4; + // The weight of the reward contents. + int64 weight = 5; +} + +// Available rewards for each member of a team. +message AvailableTeamMemberRewards { + // The guaranteed contents to grant. + AvailableRewardsContents guaranteed = 1; + // The weighted contents to grant. + repeated AvailableRewardsContents weighted = 2; + // The number of weighted reward contents to select from among the possibilities. + int64 max_rolls = 3; + /* The total weight that all weighted reward contents are calculated against. Auto calculated if set to 0 but can be + set to a higher value to introduce a chance of a "none" reward. */ + int64 total_weight = 4; + // The maximum number of repeats of any given weighted reward. + int64 max_repeat_rolls = 5; +} + +// Available rewards for the claimant's team. +message AvailableTeamRewards { + // The guaranteed contents to grant. + AvailableTeamRewardsContents guaranteed = 1; + // The weighted contents to grant. + repeated AvailableTeamRewardsContents weighted = 2; + // The number of weighted reward contents to select from among the possibilities. + int64 max_rolls = 3; + /* The total weight that all weighted reward contents are calculated against. Auto calculated if set to 0 but can be + set to a higher value to introduce a chance of a "none" reward. */ + int64 total_weight = 4; + // The maximum number of repeats of any given weighted reward. + int64 max_repeat_rolls = 5; + // If rewards will be sent to the claimant's reward mailbox rather than applied directly, and what its expiry will be. + int64 to_mailbox_expiry_sec = 6; + // Reward to be granted to all individual team members. + AvailableTeamMemberRewards member_reward = 7; +} + +// The available rewards and their probabilistic weights. +message AvailableRewards { + // The guaranteed contents to grant. + AvailableRewardsContents guaranteed = 1; + // The weighted contents to grant. + repeated AvailableRewardsContents weighted = 2; + // The number of weighted reward contents to select from among the possibilities. + int64 max_rolls = 3; + /* The total weight that all weighted reward contents are calculated against. Auto calculated if set to 0 but can be + set to a higher value to introduce a chance of a "none" reward. */ + int64 total_weight = 4; + // The maximum number of repeats of any given weighted reward. + int64 max_repeat_rolls = 5; + // If rewards will be sent to the claimant's reward mailbox rather than applied directly, and what its expiry will be. + int64 to_mailbox_expiry_sec = 6; + // Rewards for the claimant's team, if any. + AvailableTeamRewards team_reward = 7; +} + +// Types of incentives. +enum IncentiveType { + // Unspecified. Defaults to INVITE. + INCENTIVE_TYPE_UNSPECIFIED = 0; + // An invite with an associated incentive reward. + INCENTIVE_TYPE_INVITE = 1; +} + +// The result of claiming an incentive. +message IncentiveClaim { + // Reward granted. + Reward reward = 1; + // Claim time in UTC seconds. + int64 claim_time_sec = 2; +} + +// An incentive set up by a user. +message Incentive { + // The ID of the incentive. + string id = 1; + // Name. + string name = 2; + // Description. + string description = 3; + // Shareable incentive code. + string code = 4; + // The type of the incentive. + IncentiveType type = 5; + // Create time in UTC seconds. + int64 create_time_sec = 6; + // Update time in UTC seconds. + int64 update_time_sec = 7; + // Expiry time in UTC seconds. + int64 expiry_time_sec = 8; + // Available reward. + AvailableRewards recipient_rewards = 9; + // Sender reward. + AvailableRewards sender_rewards = 10; + // Recipient user IDs for which the owner of the incentive has not yet claimed their sender reward. + repeated string unclaimed_recipients = 11; + // Sender rewards so far collected for this incentive. + repeated Reward rewards = 12; + // Max claims. + int64 max_claims = 13; + // Current user IDs that have claimed, and their outcomes. + map claims = 14; + // Additional properties. + google.protobuf.Struct additional_properties = 15; +} + +// A list of incentives set up by a user. +message IncentiveList { + // Incentives set up by a single user. + repeated Incentive incentives = 1; +} + +// An incentive claimant's view of a single incentive. +message IncentiveInfo { + // The ID of the incentive. + string id = 1; + // Name. + string name = 2; + // Description. + string description = 3; + // Unique shareable incentive code. + string code = 4; + // The type of the incentive. + IncentiveType type = 5; + // Incentive sender user ID. + string sender = 6; + // Available rewards that the caller can claim. + AvailableRewards available_rewards = 7; + // Indicator if the caller can claim rewards. + bool can_claim = 8; + // Reward that was granted. + Reward reward = 9; + // Create time in UTC seconds. + int64 create_time_sec = 10; + // Update time in UTC seconds. + int64 update_time_sec = 11; + // Expiry time in UTC seconds. + int64 expiry_time_sec = 12; + // Claim time in UTC seconds. + int64 claim_time_sec = 13; +} + +// Request by a user to set up a new incentive. +message IncentiveSenderCreateRequest { + // The incentive configuration ID. + string id = 1; +} + +// Request by a user to delete an incentive they had set up. +message IncentiveSenderDeleteRequest { + // The unique incentive code. + string code = 1; +} + +// Request by a user to claim rewards from an incentive they had set up. +message IncentiveSenderClaimRequest { + // The unique incentive code. + string code = 1; + // The recipient ID(s) to claim for, or empty for all. + repeated string recipient_ids = 2; +} + +// Request by a potential incentive claimant to view incentive information. +message IncentiveRecipientGetRequest { + // The unique incentive code. + string code = 1; +} + +// Request by a potential incentive claimant to claim an incentive. +message IncentiveRecipientClaimRequest { + // The unique incentive code. + string code = 1; +} + +// Request to create a new challenge based on a template. +message ChallengeCreateRequest { + // Challenge template ID. + string template_id = 1; + // The name of the challenge. May be an i18n code. + string name = 2; + // A description of the challenge. May be an i18n code. + string description = 3; + // UserIDs of the users to challenge. + repeated string invitees = 4; + // Whether the challenged users have to accept the challenge or not. + bool open = 5; + // Maximum number of scores a user can submit to the leaderboard. + int64 max_scores = 6; + // Start time of the challenge. Set to 0 to start immediately. + int64 start_delay_sec = 7; + // Duration of the challenge. Set to 0 to have an unlimited challenge. + int64 duration_sec = 8; + // Maximum number of participants in the challenge. + int64 max_participants = 9; + // Category of the challenge. + string category = 10; + // Additional metadata properties. + map metadata = 11; +} + +// Request to join an ongoing challenge. +message ChallengeJoinRequest { + // Challenge id. + string challenge_id = 1; +} + +// Request to leave a challenge. +message ChallengeLeaveRequest { + // Challenge id. + string challenge_id = 1; +} + +// Request to claim a reward from a challenge, if available. It also culls the challenge once all rewards are claimed. +message ChallengeClaimRequest { + // Challenge id. + string challenge_id = 1; +} + +// Request to search for open challenges to join. +message ChallengeSearchRequest { + // Optional name of challenge to filter by. + string name = 1; + // Optional category of challenge to filter by. + string category = 2; + // Maximum number of results to return. + int64 limit = 3; +} + +// Request for the challenge creator to invite additional users to an ongoing challenge. +message ChallengeInviteRequest { + // Challenge id. + string challenge_id = 1; + // Invitees. + repeated string invitees = 2; +} + +// Request to submit a score to an active challenge. +message ChallengeSubmitScoreRequest { + // Challenge ID. + string challenge_id = 1; + // Score. + int64 score = 2; + // Subscore. + int64 subscore = 3; + // Metadata. + string metadata = 4; + // Update metadata only if score or subscore change. + bool conditional_metadata_update = 5; +} + +// The reward tiers for the challenge. +message ChallengeRewardTier { + // The maximum rank (inclusive). + int64 rank_max = 1; + // The minimum rank (inclusive). + int64 rank_min = 2; + // The available rewards for this range. + AvailableRewards available_rewards = 3; +} + +// The state of a user's participation in a challenge. +enum ChallengeState { + // There is no applicable state + CHALLENGE_STATE_NONE = 0; + // The user has a pending invitation to the challenge. + CHALLENGE_STATE_INVITED = 1; + // The challenge was accepted. + CHALLENGE_STATE_JOINED = 2; + // The challenge was claimed. + CHALLENGE_STATE_CLAIMED = 3; + // The challenge was declined. + CHALLENGE_STATE_DECLINED = 4; + // The challenge was joined but later left. + CHALLENGE_STATE_LEFT = 5; +} + +// A single participant entry to an event leaderboard. +message ChallengeScore { + // User ID. + string id = 1; + // Username. + string username = 2; + // Display name. + string display_name = 3; + // Avatar URL. + string avatar_url = 4; + // Time when the user joined the challenge leaderboard. + int64 create_time_sec = 5; + // Time when the user last submitted a score. + int64 update_time_sec = 6; + // Rank within the event leaderboard. + int64 rank = 7; + // Score. + int64 score = 8; + // Subscore. + int64 subscore = 9; + // Number of score submissions. + int64 num_scores = 10; + // Metadata. + string metadata = 11; + // The state of the user participation in the challenge. + ChallengeState state = 12; +} + +// A challenge leaderboard, which is a collection of participants and their scores. +message Challenge { + // Challenge ID. + string id = 1; + // The name of the challenge. May be an i18n code. + string name = 2; + // A description of the challenge. May be an i18n code. + string description = 3; + // Score ordering. + bool ascending = 4; + // Score submission operator. + string operator = 5; + // Time when the event starts. + int64 start_time_sec = 6; + // Claim time, if any. + int64 claim_time_sec = 7; + // Time when the event ends. + int64 end_time_sec = 8; + // The possible reward tiers for this instance of the challenge. + repeated ChallengeRewardTier reward_tiers = 9; + // The available reward and its probabilities. + AvailableRewards available_rewards = 10; // Available to Claim + // Additional metadata properties. + map additional_properties = 11; + // Current participant count. + int64 size = 12; + // Maximum participant count. + int64 max_size = 13; + // Maximum number of score submissions per participant. + int64 max_num_score = 14; + // Participants and their scores. + repeated ChallengeScore scores = 15; + // Indicates if the event is still active, and scores can be submitted. + bool is_active = 16; + // The UNIX timestamp for the current server time. + int64 current_time_sec = 17; + // Whether the user can claim a reward. + bool can_claim = 19; + // The state of the user participation in the challenge. + ChallengeState state = 20; + // A claimed reward, if any. + Reward reward = 21; + // The category to group the event leaderboard together with others. + string category = 22; + // Whether the challenge is open to participants beyond the initial invitees or not. + bool open = 23; + // The user ID of the challenge owner. + string owner_id = 24; + // Additional metadata properties. + map metadata = 25; +} + +// Retrieve available challenge leaderboards. +message ChallengeListRequest { + // Optional filter of Event Leaderboard categories to list. If empty does not filter on category. + repeated string categories = 1; + // Whether or not the response should include scores, defaults to false. + bool with_scores = 2; +} + +message ChallengeGetRequest { + // Challenge leaderboard ID to get, and join if necessary/possible. + string challenge_id = 1; + // Whether or not the response should include scores, defaults to false. + bool with_scores = 2; +} + +// Several challenges the user has access to, resulting from a listing operation. +message ChallengesList { + // Zero or more challenges. + repeated Challenge challenges = 1; +} + +// The minimum and maximum number of players that can participate in the challenge. +message ChallengeMaxMinPlayers { + // The minimum number of players that can participate in the challenge. + int64 min = 1; + // The maximum number of players that can participate in the challenge. + int64 max = 2; +} + +// The minimum and maximum duration that can be set for the challenge. +message ChallengeMinMaxDuration { + // The minimum duration of challenge. + int64 min_sec = 1; + // The maximum duration of challenge. + int64 max_sec = 2; +} + +// An individually usable challenge template. +message ChallengeTemplate { + // The possible reward tiers for this instance of the challenge. + repeated ChallengeRewardTier reward_tiers = 1; + // The min and max players of the challenge. + ChallengeMaxMinPlayers players = 2; + // The min and max duration that can be set for the challenge. + ChallengeMinMaxDuration duration = 3; + // The maximum amount of delay before the challenge begins for participants. + int64 start_delay_max = 4; + // The maximum number of scores that can be submitted to the challenge. + int64 max_num_score = 5; + // The ordering of the challenge scores. + bool ascending = 6; + // The operator of the challenge score submission. + string operator = 7; + // Additional metadata properties. + map additional_properties = 8; +} + +// Get all available challenge templates. +message ChallengeTemplates { + // All available challenges templates, keyed by a unique identifier. + map templates = 1; +} + +// Retrieve available event leaderboards. +message EventLeaderboardList { + // Whether or not the response should include scores, defaults to false. + bool with_scores = 1; + // Optional filter of Event Leaderboard categories to list. If empty does not filter on category. + repeated string categories = 2; +} + +// Find and retrieve an event leaderboard by ID, automatically joining the event if necessary. +message EventLeaderboardGet { + // Event leaderboard ID to get, and join if necessary/possible. + string id = 1; +} + +// Submit a score to an event leaderboard. +message EventLeaderboardUpdate { + // Event leaderboard ID. + string id = 1; + // Score. + int64 score = 2; + // Subscore. + int64 subscore = 3; + // Metadata. + string metadata = 4; + // Update metadata only if score or subscore change. + bool conditional_metadata_update = 5; +} + +// Claim the available reward for an event leaderboard by ID. +message EventLeaderboardClaim { + // Event leaderboard ID to claim. + string id = 1; +} + +// Roll a new cohort for the specified event leaderboard. +message EventLeaderboardRoll { + // Event leaderboard ID to roll. + string id = 1; + // Metadata for the initial score write. + string metadata = 2; +} + +// A single participant entry to an event leaderboard. +message EventLeaderboardScore { + // User ID. + string id = 1; + // Username. + string username = 2; + // Display name. + string display_name = 3; + // Avatar URL. + string avatar_url = 4; + // Time when the user joined the event leaderboard. + int64 create_time_sec = 5; + // Time when the user last submitted a score. + int64 update_time_sec = 6; + // Rank within the event leaderboard. + int64 rank = 7; + // Score. + int64 score = 8; + // Subscore. + int64 subscore = 9; + // Number of score submissions. + int64 num_scores = 10; + // Metadata. + string metadata = 11; +} + +// A reward range within a specific tier based on ranks. +message EventLeaderboardRewardTier { + // Name for this tier. + string name = 1; + // The maximum rank (inclusive). + int32 rank_max = 2; + // The minimum rank (inclusive). + int32 rank_min = 3; + // The available rewards for this range. + AvailableRewards available_rewards = 4; + // Change in tier for this rank range. + int32 tier_change = 5; +} + +// An event leaderboard's tier-specific set of rewards. +message EventLeaderboardRewardTiers { + // Possible reward tiers. + repeated EventLeaderboardRewardTier reward_tiers = 1; +} + +// An event leaderboard's tier-specific promotion/demotion zones. +message EventLeaderboardChangeZone { + // Percentage of cohort to promote, expressed in the range of 0.0 to 1.0. + double promotion = 1; + // Percentage of cohort to demote, expressed in the range of 0.0 to 1.0. + double demotion = 2; + // Whether or not to always demote players that failed to submit a score at all. + bool demote_idle = 3; +} + +// Details about a specific event leaderboard. +message EventLeaderboard { + // Event leaderboard ID. + string id = 1; + // The name of the event leaderboard. May be an i18n code. + string name = 2; + // A description of the event leaderboard. May be an i18n code. + string description = 3; + // The category to group the event leaderboard together with others. + string category = 4; + // Score ordering. + bool ascending = 5; + // Score submission operator. + string operator = 6; + // The tier of this instance of the event leaderboard. + int32 tier = 7; + // Time when the event starts. + int64 start_time_sec = 8; + // Time when the event ends. + int64 end_time_sec = 9; + // Time when the event expires. + int64 expiry_time_sec = 10; + // The available reward and its probabilities. + AvailableRewards available_rewards = 11; + // The possible reward tiers for this instance of the event leaderboard, based on its current tier. + map reward_tiers = 12; + // Per-tier promotion/demotion change zones, if configured. + map change_zones = 13; + // Claim time, if any. + int64 claim_time_sec = 14; + // The outcome (rolled) reward for the event leaderboard. + Reward reward = 15; + // Additional metadata properties. + map additional_properties = 16; + // Current participant count. + int64 count = 17; + // Maximum participant count. + int64 max_count = 18; + // Maximum number of score submissions per participant. + int64 max_num_score = 19; + // Participants and their scores. + repeated EventLeaderboardScore scores = 20; + // Indicates if the event is still active, and scores can be submitted. + bool is_active = 21; + // Indicates if the event is over and its reward can be claimed. + bool can_claim = 22; + // Indicates if the event can be rolled to get a new set of opponents. + bool can_roll = 23; + // Extra matchmaker properties for this cohort. + google.protobuf.Struct matchmaker_properties = 24; + // The UNIX timestamp for the current server time. + int64 current_time_sec = 25; + // Cohort ID the user belongs to for this active phase. + string cohort_id = 26; + // Backing ID for underlying score tracking. + string backing_id = 27; +} + +// Several event leaderboards the user has access to, resulting from a listing operation. +message EventLeaderboards { + // Zero or more event leaderboards. + repeated EventLeaderboard event_leaderboards = 1; +} + +message EventLeaderboardDebugFillRequest { + // Event leaderboard ID to fill. + string id = 1; + // Optional target cohort size to fill to, otherwise fill to max cohort size. + int32 target_count = 2; +} + +// DEBUG. Payload describing scores to set for a cohort's participants. +message EventLeaderboardDebugRandomScoresRequest { + // Event leaderboard ID to update. + string id = 1; + // Minimum score, inclusive. + int64 min = 2; + // Maximum score, inclusive. + int64 max = 3; + // Optional operator to use when updating scores. + google.protobuf.Int32Value operator = 4; + // Minimum subscore, inclusive. + int64 subscore_min = 5; + // Maximum subscore, inclusive. + int64 subscore_max = 6; +} + +// A contributor to this donation. +message EconomyDonationContributor { + // The user ID that contributed. + string user_id = 1; + // The amount they've donated. + int64 count = 2; + // The amount that has been claimed by the recipient already. + int64 claim_count = 3; +} + +// A donation for a user. +message EconomyDonation { + // The user that owns this donation. + string user_id = 1; + // The count of how much of the donation has already been claimed. + int64 claim_count = 2; + // The count of how much has been contributed by users. + int64 count = 3; + // The UNIX timestamp for the current time. + int64 current_time_sec = 4; + // The description for the donation, if any. May be an i18n code. + string description = 5; + // The UNIX timestamp when the donation expires. + int64 expire_time_sec = 6; + // The ID of the donation. + string id = 7; + // The maximum "units" which can be collected. + int64 max_count = 8; + // The name for the donation, if any. May be an i18n code. + string name = 9; + // The configuration for rewards granted to the recipient of the donation. + AvailableRewards recipient_available_rewards = 10; + // The maximum number of donations per contributor. + int64 user_contribution_max_count = 11; + // The contributors to this donation, if any. + repeated EconomyDonationContributor contributors = 12; + // The configuration for rewards granted to the contributor of the donation. + AvailableRewards contributor_available_rewards = 13; + // All rewards claimed by the recipient of this donation. + repeated Reward recipient_rewards = 14; + // Additional metadata properties. + map additional_properties = 15; +} + +// An acknowledgement of the idempotent creation of a donation for a user. +message EconomyDonationAck { + // True if the donation is newly created. + bool created = 1; + // The donation requested which may already be active or newly created. + EconomyDonation donation = 2; +} + +// A list of active donations returned for some set of users. +message EconomyDonationsList { + // The active donations for a set of users. + repeated EconomyDonation donations = 1; +} + +// Information about a specific donation claim. +message EconomyDonationClaimRequestDetails { + // List of donor IDs to claim and amount to claim from each, or empty to claim all available. + map donors = 1; +} + +// Request to claim one or more donations. +message EconomyDonationClaimRequest { + // The donation IDs to claim. + repeated string donation_ids = 1; + // A mapped set of donations to donors to claim. + map donations = 2; +} + +// Response to claiming one or more donations. +message EconomyDonationClaimRewards { + // All active donations for the user. + EconomyDonationsList donations = 1; + // The rewards from this particular claim. + map claimed_rewards = 2; +} + +// Request to give a donation to a user. +message EconomyDonationGiveRequest { + // The user ID who receives the donation. + string user_id = 1; + // The donation ID to give into. + string donation_id = 2; +} + +// Request to get donations for one or more users. +message EconomyDonationGetRequest { + // The user IDs to get donations for. + repeated string ids = 1; +} + +// Request a new donation. +message EconomyDonationRequest { + // The donation ID to request, defined on the server. + string donation_id = 1; +} + +// A map of active donations keyed by user ID. +message EconomyDonationsByUserList { + // The active donations grouped by user ID. + map user_donations = 1; +} + +// The cost(s) associated with a store item. +message EconomyListStoreItemCost { + // The virtual currencies, if any. + map currencies = 1; + // The required purchase SKU, if any. + string sku = 2; +} + +// Represents an individual available store items. +message EconomyListStoreItem { + // The category to group the item together with others. + string category = 1; + // The cost of the item. + EconomyListStoreItemCost cost = 2; + // A description of the item. May be an i18n code. + string description = 3; + // The ID of the item. + string id = 4; + // The name of the item. May be an i18n code. + string name = 5; + // The available rewards in this store item. + AvailableRewards available_rewards = 6; + // Additional metadata properties. + map additional_properties = 7; + // The item is visible, but if true it's unavailable to purchase by the player. + bool unavailable = 8; +} + +// Represents an available ad placement. +message EconomyListPlacement { + // The ID of the placement. + string id = 1; + // The reward obtained from this placement. + Reward reward = 2; + // The available rewards obtained from this placement. + AvailableRewards available_rewards = 3; + // Additional metadata properties. + map additional_properties = 4; +} + +// The response data with the available store items. +message EconomyList { + // The list of store items. + repeated EconomyListStoreItem store_items = 1; + // The list of placements. + repeated EconomyListPlacement placements = 2; + // The set of active donations for the current user. + map donations = 3; + // The list of active reward modifiers. + repeated ActiveRewardModifier active_reward_modifiers = 4; + // Current server time. + int64 current_time_sec = 5; +} + +// A item owned by the current user. +message InventoryItem { + // The ID of the item. + string id = 1; + // The name of the item. May be an i18n code. + string name = 2; + // A description of the item. May be an i18n code. + string description = 3; + // The category to group the item together with others. + string category = 4; + // The sets the item is grouped into. + repeated string item_sets = 5; + // The current count of the item. + int64 count = 6; + // The maximum count which can be owned for this item. + int64 max_count = 7; + // Whether or not the item is stackable. + bool stackable = 8; + // Whether or not the item is consumable. + bool consumable = 9; + // The configuration for the reward to grant for consumption. + AvailableRewards consume_available_rewards = 10; + // The properties with string values. + map string_properties = 11; + // The properties with numeric values. + map numeric_properties = 12; + // A UNIX timestamp when the user acquired this item. + int64 owned_time_sec = 13; + // A UNIX timestamp when the item was updated. + int64 update_time_sec = 14; + // The instance ID of the item, if any. + string instance_id = 15; +} + +// Request all inventory items in the economy. +message InventoryListRequest { + // The category for the items to filter for, or empty for all. + string item_category = 1; +} + +// Represents a request to grant items to the user. +message InventoryGrantRequest { + // The items to grant. + map items = 1; +} + +// The typed properties to update in an instanced inventory item. +message InventoryUpdateItemProperties { + // The properties with string values. + map string_properties = 1; + // The properties with numeric values. + map numeric_properties = 2; +} + +// Represents a request to update properties of instanced items. +message InventoryUpdateItemsRequest { + // The item updates to action, keyed by item instance ID. + map item_updates = 1; +} + +// The inventory in the economy or owned by user. +message Inventory { + // The items in the player's inventory. + map items = 1; +} + +// Request to consume some amount of items. +message InventoryConsumeRequest { + // Item ID amounts to consume, if any. + map items = 1; + // Whether or not to allow overconsumption. + bool overconsume = 2; + // Instance ID amounts to consume, if any. + map instances = 3; +} + +// Updated inventory and rewards granted from consumption. +message InventoryConsumeRewards { + // Updated inventory data, if changed. + Inventory inventory = 1; + // Consume rewards by item ID, if any. + map rewards = 2; + // Consume rewards by instance ID, if any. + map instance_rewards = 3; +} + +// Delete items from inventory +message InventoryDeleteItemsRequest { + // list of instance ids + repeated string instance_ids = 1; +} + +// Response from granting or purchasing items. This contains updated inventory data, if changed. +message InventoryUpdateAck { + // Updated inventory data, if changed. + Inventory inventory = 1; +} + +// Response for retrieving Inventory system data definitions. +message InventoryList { + // The inventory items from definitions and the user. + map items = 1; +} + +// Bid amount associated with an auction. +message AuctionBidAmount { + // Currencies required or placed as part of the bid. + map currencies = 1; +} + +// Fee structure associated with an auction, which will be deducted on completion. +message AuctionFee { + // Percentage-based fee value. + double percentage = 1; + // Fixed fee amount. + AuctionBidAmount fixed = 2; +} + +// Cost to be paid for listing an auction under this config condition. +message AuctionTemplateConditionListingCost { + // Currencies cost, if any. + map currencies = 1; + // Inventory items cost, if any. + map items = 2; + // Energies cost, if any. + map energies = 3; +} + +// Minimum increment required between bids. +message AuctionTemplateConditionBidIncrement { + // Percentage-based increment value. + double percentage = 1; + // Fixed increment amount. + AuctionBidAmount fixed = 2; +} + +// A condition set as part of an auction template. +message AuctionTemplateCondition { + // Number of seconds the auction will be available for. + int64 duration_sec = 1; + // Cost to be paid on creating the auction listing, if any. + AuctionTemplateConditionListingCost listing_cost = 2; + // Minimum starting bid. + AuctionBidAmount bid_start = 3; + // Minimum increment between bids. + AuctionTemplateConditionBidIncrement bid_increment = 4; + // How close to auction end should it be extended if a new bid arrives. + int64 extension_threshold_sec = 5; + // How many seconds at a time will be added when extending. + int64 extension_sec = 6; + // How many seconds total may be added as extension. + int64 extension_max_sec = 7; + // Auction fee the creator will pay out of the winning bid amount, if any. + AuctionFee fee = 8; +} + +// An individually usable auction template. +message AuctionTemplate { + // Item identifiers that can be listed using this auction template. + repeated string items = 1; + // Item sets that can be listed using this auction template. + repeated string item_sets = 2; + // Condition configurations available. + map conditions = 3; + // Number of historic bids that will be kept. + int32 bid_history_count = 4; +} + +// Set of all available auction templates. +message AuctionTemplates { + // All available auction templates, keyed by an unique identifier. + map templates = 1; +} + +// The content(s) of an auction. +message AuctionReward { + // Items being sold as part of a given auction listing. + repeated InventoryItem items = 1; +} + +// Represents a bid on an auction. +message AuctionBid { + // The user ID of the bidder. + string user_id = 1; + // Amount(s) placed as a bid. + AuctionBidAmount bid = 2; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the bid was placed. + int64 create_time_sec = 3; +} + +// An individual auction listing. +message Auction { + // Unique identifier for this auction. + string id = 1; + // Identifier of the user that created this auction. + string user_id = 2; + // Item(s) being auctioned. + AuctionReward reward = 3; + // Fees associated, to be deducted when the creator claims the winning bid. + AuctionFee fee = 4; + // Version hash of this auction data, used to ensure operations act on latest known state. + string version = 5; + // Current highest bid, if any. + AuctionBid bid = 6; + // Minimum next bid amount. + AuctionBidAmount bid_next = 7; + // Auction duration in seconds, including any extensions. + int64 duration_sec = 8; + // Original auction duration in seconds, not counting any extension time. + int64 original_duration_sec = 9; + // Additional time added so far to the original duration. + int64 extension_added_sec = 10; + // Threshold before end of auction where a bid would extend the time. + int64 extension_threshold_sec = 11; + // Extra time that would be added if a bid is placed within the threshold before the auction ends. + int64 extension_sec = 12; + // Maximum total number of seconds the auction can be extended by. + int64 extension_max_sec = 13; + // Extra time still available. + int64 extension_remaining_sec = 14; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the auction was created. + int64 create_time_sec = 15; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the current bid was updated, for example by placing a new bid. + int64 update_time_sec = 16; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the auction starts. + int64 start_time_sec = 17; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the auction ends. + int64 end_time_sec = 18; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the auction was originally intended to end, not counting extensions. + int64 original_end_time_sec = 19; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the auction was cancelled, if any. + int64 cancel_time_sec = 20; + // The current UNIX time (for gRPC clients) or ISO string (for REST clients) on the server. + int64 current_time_sec = 21; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the owner claimed the successful bid amount. + int64 owner_claim_sec = 22; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the winning bidder claimed the auction reward. + int64 winner_claim_sec = 23; + // Indicates if the auction has started from the server perspective. + bool has_started = 24; + // Indicates if the auction has ended from the server perspective. + bool has_ended = 25; + // Indicates if the caller can bid on this auction. + bool can_bid = 26; + // Indicates if the caller can claim a reward from this auction, either the reward or winning bid. + bool can_claim = 27; + // Indicates if the auction can be cancelled by its creator. + bool can_cancel = 28; + // First bid placed on this auction. + AuctionBid bid_first = 29; + // Most recent set of bids placed on this auction, ordered from newest to oldest retained. + repeated AuctionBid bid_history = 30; +} + +// Notification payload containing a bid update for a followed auction. +message AuctionNotificationBid { + // Unique auction identifier. + string id = 1; + // New version hash for this auction. + string version = 2; + // Current highest bid, if any. + AuctionBid bid = 3; + // Minimum next bid amount. + AuctionBidAmount bid_next = 4; + // Additional time added so far to the original duration. + int64 extension_added_sec = 5; + // Extra time still available. + int64 extension_remaining_sec = 6; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the current bid was updated, for example by placing a new bid. + int64 update_time_sec = 7; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the auction ends. + int64 end_time_sec = 8; + // The current UNIX time (for gRPC clients) or ISO string (for REST clients) on the server. + int64 current_time_sec = 9; +} + +// Server to client stream envelope. +message StreamEnvelope { + oneof message { + AuctionNotificationBid auction_bid = 1; + } +} + +// Result of claiming an auction as the winning bidder. +message AuctionClaimBid { + // Auction that was just claimed. + Auction auction = 1; + // Reward(s) that were successfully claimed by the winning bidder. + AuctionReward reward = 2; +} + +// Result of claiming an auction as the creator. +message AuctionClaimCreated { + // Auction that was just claimed. + Auction auction = 1; + // Reward(s) that were successfully claimed by the creator. + AuctionBidAmount reward = 2; + // Fee(s) that were paid by the creator. + AuctionBidAmount fee = 3; + // Items returned in the event of a failed auction. + repeated InventoryItem returned_items = 4; +} + +// Result of cancelling an auction. +message AuctionCancel { + // Auction that was just cancelled. + Auction auction = 1; + // Reward(s) that were successfully refunded to the original auction creator. + AuctionReward reward = 2; +} + +// A list of auctions filtered by some initial request criteria. +message AuctionList { + // Auctions matching the requested filters. + repeated Auction auctions = 1; + // Pagination cursor to fetch more results, or empty if there are no more. + string cursor = 2; +} + +// Request to list available auctions, optionally filtered based on given criteria. +message AuctionListRequest { + // Formatted filter query. + string query = 1; + // Custom sort criteria. + repeated string sort = 2; + // Maximum number of auctions to return in a single response. + int64 limit = 3; + // Cursor to use for retrieving the next page of results. + string cursor = 4; +} + +// Request to place a bid on an active auction. +message AuctionBidRequest { + // Unique auction identifier to bid on. + string id = 1; + // The last seen version hash of the auction. + string version = 2; + // Bid amounts to place, must at least match the minimum next bid. + AuctionBidAmount bid = 3; +} + +// Request to claim a successful auction by either the winning bidder. +message AuctionClaimBidRequest { + // Unique auction identifier to claim. + string id = 1; +} + +// Request to claim a successful auction by either the creator. +message AuctionClaimCreatedRequest { + // Unique auction identifier to claim. + string id = 1; +} + +// Request to cancel an active auction. +message AuctionCancelRequest { + // Unique auction identifier to cancel. + string id = 1; +} + +// Request to create a new auction. +message AuctionCreateRequest { + // Auction template to use. + string template_id = 1; + // Auction condition set to use. + string condition_id = 2; + // Item instance(s) to list in the auction. + repeated string instance_ids = 3; + // Time when the auction should start, omit to start immediately. + int64 start_time_sec = 4; +} + +// Request to retrieve a list of auctions the user has bid on. +message AuctionListBidsRequest { + // Maximum number of auctions to return in a single response. + int64 limit = 1; + // Cursor to use for retrieving the next page of results. + string cursor = 2; +} + +// Request to retrieve a list of auctions the user has created. +message AuctionListCreatedRequest { + // Maximum number of auctions to return in a single response. + int64 limit = 1; + // Cursor to use for retrieving the next page of results. + string cursor = 2; +} + +// Request to follow auctions the user has an interest in. +message AuctionsFollowRequest { + // Auction IDs to follow. + repeated string ids = 1; +} + +// Represents a request to retrieve available store items. +message EconomyListRequest { + // The game client's store type. + EconomyStoreType store_type = 1; +} + +// Represents a request to grant rewards to the user. +message EconomyGrantRequest { + // The currencies to grant. + map currencies = 1; + // The reward modifiers to grant. + repeated RewardModifier reward_modifiers = 2; + // Any items to grant. + map items = 3; +} + +// Request to create a store item purchase intent. +message EconomyPurchaseIntentRequest { + // An item's ID. + string item_id = 1; + // The store type. + EconomyStoreType store_type = 2; + // The SKU code, if any. + string sku = 3; + // Purchase real currency amount, if known. + double amount = 4; + // Purchase real currency code, if known. + string currency = 5; +} + +// Request to purchase a particular store item. +message EconomyPurchaseRequest { + // An item's ID. + string item_id = 1; + // The store type. + EconomyStoreType store_type = 2; + // The IAP receipt purchased. + string receipt = 3; +} + +// Request to restore a set of purchases. +message EconomyPurchaseRestoreRequest { + // The store type. + EconomyStoreType store_type = 1; + // The IAP receipts to restore. + repeated string receipts = 2; +} + +// Request to retrieve status af a specific placement instance by reward ID. +message EconomyPlacementStatusRequest { + // The reward ID to check. + string reward_id = 1; + // The placement ID to check, will be used if reward ID is not supplied. + string placement_id = 2; + // The check attempt counter, optional. + int32 count = 3; +} + +// Request to start a placement reward. +message EconomyPlacementStartRequest { + // The identifier to start a reward for. + string placement_id = 1; + // Optional metadata to associate with the placement. + map metadata = 2; +} + +// The current status of a placement reward. +message EconomyPlacementStatus { + // The reward ID. + string reward_id = 1; + // The placement ID. + string placement_id = 2; + // The UNIX timestamp when the placement was created. + int64 create_time_sec = 3; + // The UNIX timestamp when the placement was completed. + int64 complete_time_sec = 4; + // If completed, was it successful. + bool success = 5; + // The reward for completing the placement, if it was autocompleted as part of the status request. + Reward reward = 6; + // Metadata associated with the placement, if any. + map metadata = 7; +} + +// Response from granting currencies, reward modifiers, and/or items. +// Contains updated wallet and inventory data, if changed. +// Contains reward granted, if any. +// Contains active reward modifiers, if changed. +message EconomyUpdateAck { + // Updated wallet data, if changed. + map wallet = 1; + // Update inventory data, if changed. + Inventory inventory = 2; + // Reward, if any. + Reward reward = 3; + // Updated active reward modifiers, if changed. + repeated ActiveRewardModifier active_reward_modifiers = 4; + // Current server time. + int64 current_time_sec = 5; +} + +// Response from purchasing currencies and/or items. +// Contains updated wallet and inventory data, if changed. +// Contains reward granted, if any. +// Contains indication of whether or not the purchase was a sandbox purchase. +message EconomyPurchaseAck { + // Updated wallet data, if changed. + map wallet = 1; + // Update inventory data, if changed. + Inventory inventory = 2; + // Reward, if any. + Reward reward = 3; + // Was the purchase a sandbox purchase? + bool is_sandbox_purchase = 4; +} + +// A modifier that may change energy behaviour. +message EnergyModifier { + // The modifier operator. + string operator = 1; + // The modifier value, if applicable. + int32 value = 2; + // The UNIX timestamp when the modifier became active. + int64 start_time_sec = 3; + // The UNIX timestamp when the modifier ends. + int64 end_time_sec = 4; +} + +// Information about a single energy type. +message Energy { + // The unique energy identifier. + string id = 1; + // The current amount. + int32 current = 2; + // The maximum amount. + int32 max = 3; + // Amount of energy granted per refill. + int32 refill = 4; + // Number of seconds between refills. + int64 refill_sec = 5; + // The UNIX timestamp when the count will increase, if it is not at max already. + int64 next_refill_time_sec = 6; + // The UNIX timestamp when the count will reach max, if it is not at max already. + int64 max_refill_time_sec = 7; + // The UNIX timestamp when the count started filling, if it is not at max already. + int64 start_refill_time_sec = 8; + // The modifiers, if any. + repeated EnergyModifier modifiers = 9; + // The available rewards, if any. + AvailableRewards available_rewards = 10; + // Additional metadata properties. + map additional_properties = 11; + // The current UNIX timestamp in seconds. + int64 current_time_sec = 12; +} + +// One or more energy values for a user. +message EnergyList { + // Energy types keyed on the energy identifier. + map energies = 1; +} + +// Request to spend one or more energy amounts. +message EnergySpendRequest { + // Energy amounts to spend. + map amounts = 1; +} + +// Request to spend one or more energy amounts. +message EnergySpendReward { + // The updated list of energy. + EnergyList energies = 1; + // The cumulative reward of spending the energies. + Reward reward = 2; +} + +// Request to grant one or more energy amounts. +message EnergyGrantRequest { + // Energy amounts to grant. + map amounts = 1; +} + +// A leaderboard configuration. +message LeaderboardConfig { + // The leaderboard id. + string id = 1; + // The leaderboard sort order. + string sort_order = 2; + // The leaderboard operator. + string operator = 3; + // The leaderboard reset schedule. + string reset_schedule = 4; + // Whether the leaderboard is authoritative or not. + bool authoritative = 5; + // List of regional leaderboards of the leaderboard, if any. + repeated string regions = 6; +} + +// A list of leaderboard configurations. +message LeaderboardConfigList { + // The list of leaderboard configurations. + repeated LeaderboardConfig leaderboard_configs = 1; +} + +// The states of a Tutorial. +enum TutorialState { + // The Tutorial has not been accepted/declined by the user yet. + TUTORIAL_STATE_NONE = 0; + // The Tutorial was accepted. + TUTORIAL_STATE_ACCEPTED = 1; + // The Tutorial was declined. + TUTORIAL_STATE_DECLINED = 2; + // The Tutorial is in progress. + TUTORIAL_STATE_IN_PROGRESS = 3; + // The Tutorial has been completed. + TUTORIAL_STATE_COMPLETED = 4; + // The Tutorial has been abandoned. + TUTORIAL_STATE_ABANDONED = 5; +} + +// An individual set of tutorial steps. +message Tutorial { + // The unique tutorial identifier. + string id = 1; + // The current step in the tutorial. + int32 current = 2; + // The maximum step in the tutorial based on configuration. + int32 max = 3; + // The accepted state of the tutorial. + TutorialState state = 4; + // The UNIX timestamp when the tutorial was last updated. + int64 update_time_sec = 5; + // The UNIX timestamp when the tutorial was completed, if it is completed. + int64 complete_time_sec = 6; + // Additional metadata properties. + map additional_properties = 7; +} + +// The full tutorial statuses for a given user. +message TutorialList { + // All available tutorials. + map tutorials = 1; +} + +// A request to accept a tutorial. +message TutorialAcceptRequest { + // The tutorial to accept. + string id = 1; +} + +// A request to decline a tutorial. +message TutorialDeclineRequest { + // The tutorial to decline. + string id = 1; +} + +// A request to abandon a tutorial. +message TutorialAbandonRequest { + // The tutorial to abandon. + string id = 1; +} + +// A request to update a tutorial. +message TutorialUpdateRequest { + // The tutorial to update. + string id = 1; + // The latest step that should be marked completed. All previous steps will also be marked as completed. + int32 step = 2; +} + +// A request to reset the state of one or more tutorials. +message TutorialResetRequest { + // The tutorials to reset. + repeated string ids = 1; +} + +// The input message when the user rates the app. +message RateAppRequest { + // The score given by the user. Above zero values indicate a positive review. + uint32 score = 1; + // The message about the reason for their score. May be blank. + string message = 2; +} + +// Member of a particular team. +message TeamMember { + // User identifier. + string id = 1; + // Activity score. + int64 activity = 2; +} + +// A Team represents a group of users who play together. +message Team { + // The ID of a team. + string id = 1; + // The ID of the user who created the team. + string creator_id = 2; + // The unique name of the team. + string name = 3; + // A description for the team. + string description = 4; + // The language expected to be a tag which follows the BCP-47 spec. + string lang_tag = 5; + // Additional information stored as a JSON object. + string metadata = 6; + // A URL for an avatar image. + string avatar_url = 7; + // Anyone can join open groups, otherwise only admins can accept members. + bool open = 8; + // The current count of all members in the group. + int32 edge_count = 9; + // The maximum number of members allowed. + int32 max_count = 10; + // The UNIX timestamp when the group was created. + int64 create_time_sec = 11; + // The UNIX timestamp when the group was last updated. + int64 update_time_sec = 12; + // Activity score. + int64 activity = 13; + // Team member activity. + repeated TeamMember members = 14; +} + +// A request to create a team. +message TeamCreateRequest { + // The name of the team to be created. + string name = 1; + // The description of the team to be created. + string desc = 2; + // True if the team is open to join by any user. + bool open = 3; + // The avatar URL or artwork reference ID for the team, if any. + string avatar_url = 4; + // The language expected to be a tag which follows the BCP-47 spec. + string lang_tag = 5; + // The starting metadata passed in as part of creating the team. + string setup_metadata = 6; +} + +// Request to update a team. +message TeamUpdateRequest { + // Team identifier. + string id = 1; + // A new name for the team, or empty to leave unchanged. + string name = 2; + // A new description for the team, or empty to leave unchanged. + string desc = 3; + // True if the team is open to join by any user. + bool open = 4; + // The avatar URL or artwork reference ID for the team, or empty to leave unchanged. + string avatar_url = 5; + // The language expected to be a tag which follows the BCP-47 spec, or empty to leave unchanged. + string lang_tag = 6; + // Metadata to assign to the team, or empty to leave unchanged. + google.protobuf.Struct metadata = 7; +} + +// A request to list teams which a user can join. +message TeamListRequest { + // An optional cursor used to get the next page. + string cursor = 1; + // The optional location filter. + string location = 2; + // An optional limit on how many results are returned. Defaults to 10. + int32 limit = 3; +} + +// A list of teams. +message TeamList { + // The current page of teams returned in the list. + repeated Team teams = 1; + // A cursor used to get the next page. + string cursor = 2; +} + +// A request to search for teams which the user wants to join. +message TeamSearchRequest { + // The search term(s) passed in by the user. + string input = 1; + // An optional limit on how many results are returned. Defaults to 10. + int32 limit = 2; + // Additionally search by language, if specified. + string lang_tag = 3; + // Minimum team activity score, if specified. + int64 min_activity = 4; +} + +// A request to get a team by its TeamID. +message TeamGetRequest { + // The ID of the team. + string team_id = 1; +} + +// Request to fetch teams for a given set of users. +message UserTeamsListRequest { + // Users to fetch teams for. + repeated string user_ids = 1; +} + +// A user in the server. +message User { + // The id of the user's account. + string id = 1; + // The username of the user's account. + string username = 2; + // The display name of the user. + string display_name = 3; + // A URL for an avatar image. + string avatar_url = 4; + // The language expected to be a tag which follows the BCP-47 spec. + string lang_tag = 5; + // The location set by the user. + string location = 6; + // The timezone set by the user. + string timezone = 7; + // Additional information stored as a JSON object. + string metadata = 8; + // The Facebook id in the user's account. + string facebook_id = 9; + // The Google id in the user's account. + string google_id = 10; + // The Apple Game Center in of the user's account. + string gamecenter_id = 11; + // The Steam id in the user's account. + string steam_id = 12; + // Indicates whether the user is currently online. + bool online = 13; + // Number of related edges to this user. + int32 edge_count = 14; + // The UNIX time in seconds when the user was created. + int64 create_time_sec = 15; + // The UNIX time in seconds when the user was last updated. + int64 update_time = 16; + // The Facebook Instant Game ID in the user's account. + string facebook_instant_game_id = 17; + // The Apple Sign In ID in the user's account. + string apple_id = 18; +} + +// A user and their associated teams. +message UserTeams { + // The user these teams are associated with. + User user = 1; + // All teams this user is part of. + repeated Team teams = 2; +} + +// A list of users and their associated teams. +message UserTeamsList { + // Results from a user teams lookup. + map user_teams = 1; +} + +// A request to write a chat message to the channel for a team the user is part of. +message TeamWriteChatMessageRequest { + // The ID of the team. + string id = 1; + // The content of the chat message. Usually an escaped JSON object. + string content = 2; +} + +// The unlockable cost, may relate to starting an unlock, or fully completing it. +message UnlockableCost { + // The items which will be deducted. + map items = 1; + // The currencies which will be deducted. + map currencies = 2; +} + +// A single unlockable object. +message Unlockable { + // The unlockable definition ID, eg. "bronze-chest". + string id = 1; + // The instance ID. + string instance_id = 2; + // The category the unlockable is part of. + string category = 3; + // The cost to begin unlocking this particular unlockable. + UnlockableCost start_cost = 4; + // The cost to fully unlock this unlockable, accounting for any time already spent. + UnlockableCost cost = 5; + // The description, if any. May be an i18n code. + string description = 6; + // The name. May be an i18n code. + string name = 7; + // The reward already granted when the unlockable has been claimed. + Reward reward = 8; + // The available rewards for when the unlockable is claimed. + AvailableRewards available_rewards = 9; + // Total time this unlockable will take to unlock once activated. + int32 wait_time_sec = 10; + // The UNIX timestamp when this unlockable was granted to the user. + int64 create_time_sec = 11; + // The UNIX timestamp when this unlockable began unlocking, or 0 if it is not active. + int64 unlock_start_time_sec = 12; + // The UNIX timestamp when this unlockable will complete unlocking and become claimable, or 0 if it is not active. + int64 unlock_complete_time_sec = 13; + // If the unlock process has completed (either by time elapsed or purchase) and the unlockable reward can be claimed. + bool can_claim = 14; + // Additional metadata properties. + map additional_properties = 15; + // Additional time that has been added to speed up the unlockable's progress, if any. + int64 advance_time_sec = 16; +} + +// The cost to purchase an additional unlockable active slot. +message UnlockableSlotCost { + // The items which will be deducted. + map items = 1; + // The currencies which will be deducted. + map currencies = 2; +} + +// A list of unlockables currently owned by a user. +message UnlockablesList { + // The list of unlockables owned by a user. + repeated Unlockable unlockables = 1; + // The unlockable overflow slot. + Unlockable overflow = 2; + // The total number of non-overflow slots. + int32 slots = 3; + // The current number of active slots. + int32 active_slots = 4; + // The max number of active slots the user can ever obtain. + int32 max_active_slots = 5; + // The cost to purchase the next active slot, if another is available for purchase. + UnlockableSlotCost slot_cost = 6; + // The newly granted unlockable, if any. + string instance_id = 7; + // Unlockable instance IDs queued to start unlocking as soon as possible. + repeated string queued_unlocks = 8; + // Maximum unlock queue size. + int32 max_queued_unlocks = 9; +} + +// A reward that was granted upon unlock, and a new state of all unlockables. +message UnlockablesReward { + // The updated state of remaining unlockables. + UnlockablesList unlockables = 1; + // The reward granted from the unlockable. + Reward reward = 2; + // The available rewards active for the unlockable. + AvailableRewards available_rewards = 3; +} + +// Request body for interacting with a specific unlockable. +message UnlockablesRequest { + // The unlockable instance ID. + string instance_id = 1; +} + +// Request to add a set of unlockables to the unlock queue. +message UnlockablesQueueAddRequest { + // Unlockable instance IDs to add. + repeated string instance_ids = 1; +} + +// Request to remove a set of unlockables from the unlock queue. +message UnlockablesQueueRemoveRequest { + // Unlockable instance IDs to remove. + repeated string instance_ids = 1; +} + +// Request to replace the unlock queue with the given set of unlockables. +message UnlockablesQueueSetRequest { + // Unlockable instance IDs to set. + repeated string instance_ids = 1; +} + +// A sub-achievement is an achievement which belongs as part of a parent achievement. +message SubAchievement { + // The category to group the sub-achievement together with others. + string category = 1; + // The UNIX timestamp for when the sub-achievement reward was claimed, or zero if unclaimed. + int64 claim_time_sec = 2; + // The count of the sub-achievement. + int64 count = 3; + // The UNIX timestamp for the current server time. + int64 current_time_sec = 4; + // A description of the sub-achievement. May be an i18n code. + string description = 5; + // The UNIX timestamp when this sub-achievement will expire. This may be before its next reset. A zero means it does not expire. + int64 expire_time_sec = 6; + // The ID of the sub-achievement. + string id = 7; + // The maximum count of the sub-achievement. + int64 max_count = 8; + // The name of the sub-achievement. May be an i18n code. + string name = 9; + // The IDs which are a precondition on the progress to be made on this sub-achievement. + repeated string precondition_ids = 10; + // The UNIX timestamp when this sub-achievement will reset. + int64 reset_time_sec = 11; + // The outcome (rolled) reward for the achievement, if any. + Reward reward = 12; + // The available reward and its probabilities. + AvailableRewards available_rewards = 13; + // Additional metadata properties. + map additional_properties = 14; + // Whether the sub-achievement reward will be given automatically upon completion. + bool auto_claim = 15; + // Whether the sub-achievement will reset after completion. + bool auto_reset = 16; +} + +// An achievement which is a numeric task which can be unlocked and has an optional reward. +message Achievement { + // The category to group the achievement together with others. + string category = 1; + // The UNIX timestamp for when the achievement reward was claimed, or zero if unclaimed. + int64 claim_time_sec = 2; + // The UNIX timestamp for when the achievement total reward was claimed, or zero if unclaimed. + int64 total_claim_time_sec = 3; + // The count of the achievement. + int64 count = 4; + // The UNIX timestamp for the current server time. + int64 current_time_sec = 5; + // A description of the achievement. May be an i18n code. + string description = 6; + // The UNIX timestamp when this achievement will expire. This may be before its next reset. A zero means it does not expire. + int64 expire_time_sec = 7; + // The ID of the achievement. + string id = 8; + // The maximum count of the achievement. + int64 max_count = 9; + // The name of the achievement. May be an i18n code. + string name = 10; + // The IDs which are a precondition on the progress to be made on this achievement. + repeated string precondition_ids = 11; + // The UNIX timestamp when this achievement will reset. + int64 reset_time_sec = 12; + // The available reward and its probabilities. + AvailableRewards available_rewards = 13; + // The outcome (rolled) reward for the achievement. + Reward reward = 14; + // The available reward and its probabilities for the total completion of the achievement, if any. + AvailableRewards available_total_reward = 15; + // The outcome (rolled) reward for the total completion of the achievement, if any. + Reward total_reward = 16; + // The sub-achievements for this achievement, if any. + map sub_achievements = 17; + // Additional metadata properties. + map additional_properties = 18; + // Whether the achievement reward will be given automatically upon completion. + bool auto_claim = 19; + // Whether the achievement total reward will be given automatically upon completing this and all sub-achievements. + bool auto_claim_total = 20; + // Whether the achievement will reset after completion. + bool auto_reset = 21; + // The UNIX timestamp when this achievement will allow updates. This may be before its next reset. A zero means it is immediately available. + int64 start_time_sec = 22; + // The UNIX timestamp when this achievement will allow updates. This may be before its next reset. A zero means it does not end. + int64 end_time_sec = 23; +} + +// The achievements returned by the server. +message AchievementList { + // The one off achievements which can be progressed or are unlocked by the user alongside all on the server. + map achievements = 1; + // The repeat achievements which can be progressed or are unlocked by the user alongside all on the server. + map repeat_achievements = 2; +} + +// Claim rewards with one or more achievement on the server. +message AchievementsClaimRequest { + // The set of achievement IDs to claim. + repeated string ids = 1; + // Whether or not to claim the total reward as well, if available. + bool claim_total_reward = 2; +} + +// Get all achievements for the user alongside all on the server. +message AchievementsGetRequest {} + +// A response when an achievements update is acknowledged by the server. +message AchievementsUpdateAck { + // The one off achievements which can be progressed or are unlocked by the user. + map achievements = 1; + // The repeat achievements which can be progressed or are unlocked by the user. + map repeat_achievements = 2; +} + +// Update progress on one or more achievements on the server. +message AchievementsUpdateRequest { + // The set of achievement IDs to progress. + repeated string ids = 1; + // The amount of progress to increment on the achievements. + int64 amount = 2; + // Achievements with different amounts. + map achievements = 3; +} + +// Represents an available reward based on the progress of a streak. +message StreakAvailableReward { + // Minimum streak progress count required for this reward, inclusive. + int64 count_min = 1; + // Maximum streak progress count required for this reward, inclusive. + int64 count_max = 2; + // Available reward contents. + AvailableRewards reward = 3; + // Whether this reward can be claimed at each count between count_min and count_max, both inclusive. + bool repeatable = 4; +} + +// A single claimed streak reward. +message StreakReward { + // Minimum streak progress count required for this reward, inclusive. + int64 count_min = 1; + // Maximum streak progress count required for this reward, inclusive. + int64 count_max = 2; + // Reward that was actually granted. + Reward reward = 3; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when this reward was claimed. + int64 claim_time_sec = 4; + // Whether this reward can be claimed at each count between count_min and count_max, both inclusive. + bool repeatable = 5; +} + +// An individual streak, along with its status and progress if any. +message Streak { + // Unique identifier. + string id = 1; + // Display name for this streak. + string name = 2; + // A user-facing description for this streak. + string description = 3; + // Current overall progress count. + int64 count = 4; + // Maximum allowed overall progress count. + int64 max_count = 5; + // Progress count submitted during this reset. + int64 count_current_reset = 6; + // Maximum progress count allowed during any single reset. + int64 max_count_current_reset = 7; + // How much overall count is lost per idle reset. + int64 idle_count_decay_reset = 8; + // How much overall count can be lost total in any contiguous idle period. + int64 max_idle_count_decay = 9; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the streak's last reset period was. + int64 prev_reset_time_sec = 10; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the streak's next reset period is. + int64 reset_time_sec = 11; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the streak was first registered for this user. + int64 create_time_sec = 12; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the streak was last updated. + int64 update_time_sec = 13; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the streak was last claimed. + int64 claim_time_sec = 14; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the streak becomes available for use. + int64 start_time_sec = 15; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the streak is no longer available for use. + int64 end_time_sec = 16; + // All rewards configured for this streak. + repeated StreakAvailableReward rewards = 17; + // Rewards currently available to claim for this streak. + repeated StreakAvailableReward available_rewards = 18; + // Claimed rewards. + repeated StreakReward claimed_rewards = 19; + // Flag indicating if this streak can currently be claimed to obtain some rewards. + bool can_claim = 20; + // Flag indicating if submitting a count update is allowed. + bool can_update = 21; + // Flag indicating if resetting the streak is allowed. + bool can_reset = 22; + // Last count that was claimed. + int64 claim_count = 23; +} + +// A list of all streaks for a given user. +message StreaksList { + // All available streaks for the caller. + map streaks = 1; +} + +// Request to update one or more streaks with new progress. +message StreaksUpdateRequest { + // Update one or more streaks by identifier. + map updates = 1; +} + +// Request to claim rewards for one or more streaks. +message StreaksClaimRequest { + // List of streak identifiers to claim. + repeated string ids = 1; +} + +// Request to fully reset the progress of one or more streaks. +message StreaksResetRequest { + // List of streak identifiers to reset. + repeated string ids = 1; +} + +// A reward mailbox entry and associated reward information. +message RewardMailboxEntry { + // Unique identifier for this entry. + string id = 1; + // Reward associated with this entry. + Reward reward = 2; + // Create time in UTC seconds. + int64 create_time_sec = 3; + // Update time in UTC seconds. + int64 update_time_sec = 4; + // Expiry time in UTC seconds. + int64 expiry_time_sec = 5; + // Claim time in UTC seconds. + int64 claim_time_sec = 6; + // Indicator if the entry reward can be claimed. + bool can_claim = 7; +} + +// A list of reward mailbox entries, with pagination information if applicable. +message RewardMailboxList { + // A list of reward mailbox entries for this reward mailbox. + repeated RewardMailboxEntry entries = 1; + // Pagination cursor to fetch more results, or empty if there are no more. + string cursor = 2; +} + +// Request to list reward mailbox entries. +message RewardMailboxListRequest { + // Maximum number of reward mailbox entries to return. + int64 limit = 1; + // Cursor to paginate from, if any. + string cursor = 2; +} + +// Request to claim a reward mailbox entry, and optionally remove it at the same time. +message RewardMailboxClaimRequest { + // Identifier for the reward mailbox entry to claim. + string id = 1; + // If the entry should be deleted as part of the claim. + bool delete = 2; +} + +// Request to delete a reward mailbox entry, even if it is not yet claimed. +message RewardMailboxDeleteRequest { + // Identifiers for the reward mailbox entries to delete. + repeated string ids = 1; +} + +// Represents a request to retrieve available team store items. +message TeamStoreListRequest { + // Team identifier for which to list available team store items. + string id = 1; +} + +// The cost(s) associated with a team store item. +message TeamStoreItemCost { + // The virtual currencies, if any. + map currencies = 1; +} + +// Represents an individual available team store item. +message TeamStoreItem { + // The category to group the item together with others. + string category = 1; + // The cost of the item. + TeamStoreItemCost cost = 2; + // A description of the item. May be an i18n code. + string description = 3; + // The ID of the item. + string id = 4; + // The name of the item. May be an i18n code. + string name = 5; + // The available rewards in this store item. + AvailableRewards available_rewards = 6; + // Additional metadata properties. + map additional_properties = 7; + // The item is visible, but if true it's unavailable to purchase by the player. + bool unavailable = 8; +} + +// A list of team store items available for purchase. +message TeamStore { + // The list of store items. + repeated TeamStoreItem store_items = 1; + // The list of active reward modifiers. + repeated ActiveRewardModifier active_reward_modifiers = 4; + // Current server time. + int64 current_time_sec = 5; +} + +// Request to purchase a particular team store item. +message TeamStorePurchaseRequest { + // Team identifier for which to purchase a team store item. + string id = 1; + // A store item's ID. + string item_id = 2; +} + +// Response from purchasing currencies and/or items. +// Contains updated wallet and inventory data, if changed. +// Contains reward granted, if any. +message TeamStorePurchaseAck { + // Updated wallet data, if changed. + map wallet = 1; + // Update inventory data, if changed. + Inventory inventory = 2; + // Reward, if any. + Reward reward = 3; +} + +// Request to fetch a team's wallet. +message TeamWalletGetRequest { + // The team identifier to fetch a wallet for. + string id = 1; +} + +// Request to update a team's wallet. +message TeamWalletGrantRequest { + // The team identifier to update the wallet for. + string id = 1; + // Currencies to grant. + map currencies = 2; +} + +// Represents the contents of a team's wallet. +message TeamWallet { + // Team identifier this wallet belongs to. + string id = 1; + // Currencies currently in the team's wallet. + map currencies = 2; + // Last time in UTC seconds when the wallet was updated. + int64 update_time_sec = 3; +} + +// Request to retrieve stats for specified team. +message TeamStatListRequest { + // Team identifier to fetch stats for. + string id = 1; +} + +// Request an optionally batched stats update for a specified team. +message TeamStatUpdateRequest { + // Team identifier for which to update stats. + string id = 1; + // Public stat updates. + repeated StatUpdate public = 2; + // Private stat updates. + repeated StatUpdate private = 3; +} + +// Request inventory items in the team inventory. +message TeamInventoryListRequest { + // Team identifier for which to list inventory items. + string id = 1; + // The category for the items to filter for, or empty for all. + string item_category = 2; +} + +// Request to consume some amount of items from a team inventory. +message TeamInventoryConsumeRequest { + // Team identifier for which to consume inventory items. + string id = 1; + // Item ID amounts to consume, if any. + map items = 2; + // Whether or not to allow overconsumption. + bool overconsume = 3; + // Instance ID amounts to consume, if any. + map instances = 4; +} + +// Represents a request to grant items to a team. +message TeamInventoryGrantRequest { + // Team identifier for which to grant inventory items. + string id = 1; + // The items to grant. + map items = 2; +} + +// Represents a request to update properties of instanced items belonging to a team. +message TeamInventoryUpdateItemsRequest { + // Team identifier for which to update inventory items. + string id = 1; + // The item updates to action, keyed by item instance ID. + map item_updates = 2; +} + +// Claim rewards with one or more team achievement on the server. +message TeamAchievementsClaimRequest { + // Team identifier for which to claim the specified achievements. + string id = 1; + // The set of team achievement IDs to claim. + repeated string achievement_ids = 2; + // Whether or not to claim the total reward as well, if available. + bool claim_total_reward = 3; +} + +// Get achievements for a particular team. +message TeamAchievementsGetRequest { + // Team identifier for which to get achievement data. + string id = 1; +} + +// Update progress on one or more team achievements on the server. +message TeamAchievementsUpdateRequest { + // Team identifier for which to update achievements. + string id = 1; + // The set of achievement IDs to progress. + repeated string achievement_ids = 2; + // The amount of progress to increment on the achievements. + int64 amount = 3; + // Achievements with different amounts. + map achievements = 4; +} + +// Retrieve available team event leaderboards. +message TeamEventLeaderboardList { + // Team identifier for which to list team event leaderboards. + string id = 1; + // Whether or not the response should include scores, defaults to false. + bool with_scores = 2; + // Optional filter of Event Leaderboard categories to list. If empty does not filter on category. + repeated string categories = 3; +} + +// Find and retrieve a team event leaderboard by ID, automatically joining the event if necessary. +message TeamEventLeaderboardGet { + // Team identifier for which to get the team event leaderboard. + string id = 1; + // Event leaderboard ID to get, and join if necessary/possible. + string event_leaderboard_id = 2; +} + +// Submit a score to a team event leaderboard. +message TeamEventLeaderboardUpdate { + // Team identifier for which to submit the update. + string id = 1; + // Event leaderboard ID. + string event_leaderboard_id = 2; + // Score. + int64 score = 3; + // Subscore. + int64 subscore = 4; + // Metadata. + string metadata = 5; + // Update metadata only if score or subscore change. + bool conditional_metadata_update = 6; +} + +// Claim the available reward for a team event leaderboard by ID. +message TeamEventLeaderboardClaim { + // Team identifier for which to attempt the claim. + string id = 1; + // Event leaderboard ID to claim. + string event_leaderboard_id = 2; +} + +// Roll a new cohort for the specified team event leaderboard. +message TeamEventLeaderboardRoll { + // Team identifier for which to roll a cohort. + string id = 1; + // Event leaderboard ID to roll. + string event_leaderboard_id = 2; + // Metadata for the initial score write. + string metadata = 3; +} + +// A single participant entry to a team event leaderboard. +message TeamEventLeaderboardScore { + // Team identifier which owns this score. + string id = 1; + // Name. + string name = 2; + // Avatar URL. + string avatar_url = 3; + // Time when the user joined the event leaderboard. + int64 create_time_sec = 4; + // Time when the user last submitted a score. + int64 update_time_sec = 5; + // Rank within the event leaderboard. + int64 rank = 6; + // Score. + int64 score = 7; + // Subscore. + int64 subscore = 8; + // Number of score submissions. + int64 num_scores = 9; + // Metadata. + string metadata = 10; +} + +// Individual user contribution towards the score of a team in a team event leaderboard. +message TeamEventLeaderboardContribution { + // User ID that owns this contribution. + string id = 1; + // Username. + string username = 2; + // Display name. + string display_name = 3; + // Avatar URL. + string avatar_url = 4; + // Time when the user first submitted a score for this cohort. + int64 create_time_sec = 5; + // Time when the user last submitted a score fir this cohort. + int64 update_time_sec = 6; + // Aggregate score submitted by this user. + int64 score = 7; + // Aggregate subscore submitted by this user. + int64 subscore = 8; + // Number of score submissions from this user. + int64 num_scores = 9; + // Metadata for this user's most recent score update. + string metadata = 10; +} + +// Details about a specific team event leaderboard. +message TeamEventLeaderboard { + // Event leaderboard ID. + string id = 1; + // The name of the event leaderboard. May be an i18n code. + string name = 2; + // A description of the event leaderboard. May be an i18n code. + string description = 3; + // The category to group the event leaderboard together with others. + string category = 4; + // Score ordering. + bool ascending = 5; + // Score submission operator. + string operator = 6; + // The tier of this instance of the event leaderboard. + int32 tier = 7; + // Time when the event starts. + int64 start_time_sec = 8; + // Time when the event ends. + int64 end_time_sec = 9; + // Time when the event expires. + int64 expiry_time_sec = 10; + // The available reward and its probabilities. + AvailableRewards available_rewards = 11; + // The possible reward tiers for this instance of the event leaderboard, based on its current tier. + map reward_tiers = 12; + // Per-tier promotion/demotion change zones, if configured. + map change_zones = 13; + // Claim time, if any. + int64 claim_time_sec = 14; + // The outcome (rolled) reward for the event leaderboard. + Reward reward = 15; + // Additional metadata properties. + map additional_properties = 16; + // Current participant count. + int64 count = 17; + // Maximum participant count. + int64 max_count = 18; + // Maximum number of score submissions per participant. + int64 max_num_score = 19; + // Participants and their scores. + repeated TeamEventLeaderboardScore scores = 20; + // Indicates if the event is still active, and scores can be submitted. + bool is_active = 21; + // Indicates if the event is over and its reward can be claimed. + bool can_claim = 22; + // Indicates if the event can be rolled to get a new set of opponents. + bool can_roll = 23; + // Extra matchmaker properties for this cohort. + google.protobuf.Struct matchmaker_properties = 24; + // The UNIX timestamp for the current server time. + int64 current_time_sec = 25; + // Cohort ID the user belongs to for this active phase. + string cohort_id = 26; + // Backing ID for underlying score tracking. + string backing_id = 27; + // Contributions from team members towards the score. + repeated TeamEventLeaderboardContribution contributions = 28; +} + +// Several team event leaderboards the team has access to, resulting from a listing operation. +message TeamEventLeaderboards { + // Zero or more event leaderboards. + repeated TeamEventLeaderboard event_leaderboards = 1; +} + +message TeamEventLeaderboardDebugFillRequest { + // Team identifier for which to fill the cohort. + string id = 1; + // Event leaderboard ID to fill. + string event_leaderboard_id = 2; + // Optional target cohort size to fill to, otherwise fill to max cohort size. + int32 target_count = 3; +} + +// DEBUG. Payload describing scores to set for a cohort's participants. +message TeamEventLeaderboardDebugRandomScoresRequest { + // Team identifier for which to use random cohort scores. + string id = 1; + // Event leaderboard ID to update. + string event_leaderboard_id = 2; + // Minimum score, inclusive. + int64 min = 3; + // Maximum score, inclusive. + int64 max = 4; + // Optional operator to use when updating scores. + google.protobuf.Int32Value operator = 5; + // Minimum subscore, inclusive. + int64 subscore_min = 6; + // Maximum subscore, inclusive. + int64 subscore_max = 7; +} + +// Request to list team reward mailbox entries. +message TeamRewardMailboxListRequest { + // Team identifier for which to list reward mailbox entries. + string id = 1; + // Maximum number of reward mailbox entries to return. + int64 limit = 2; + // Cursor to paginate from, if any. + string cursor = 3; +} + +// Request to claim a team reward mailbox entry, and optionally remove it at the same time. +message TeamRewardMailboxClaimRequest { + // Team identifier for which to claim a mailbox entry. + string id = 1; + // Identifier for the reward mailbox entry to claim. + string entry_id = 2; + // If the entry should be deleted as part of the claim. + bool delete = 3; +} + +// Request to delete a team reward mailbox entry, even if it is not yet claimed. +message TeamRewardMailboxDeleteRequest { + // Team identifier for which to delete a mailbox entry. + string id = 1; + // Identifier for the reward mailbox entry to delete. + repeated string entry_ids = 2; +} + +// Reward associated with a contribution threshold in a team gift. +message TeamGiftReward { + // Minimum count required to unlock this reward. + int64 min_count = 1; + // Reward for contributors to this gift. + AvailableRewards contributor_reward = 2; + // Reward to non-contributing team members. + AvailableRewards noncontributor_reward = 3; +} + +// An individual contributor to a team gift. +message TeamGiftContributor { + // User identifier. + string user_id = 1; + // Username. + string username = 2; + // Avatar URL. + string avatar_url = 3; + // Display name. + string display_name = 4; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the user first contributed. + int64 create_time_sec = 5; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the user most recently updated their contribution + int64 update_time_sec = 6; + // Count contributed by this user. + int64 count = 7; +} + +// Team gift available to contribute to or claim rewards from. +message TeamGift { + // Gift identifier. + string id = 1; + // Name. + string name = 2; + // Description. + string description = 3; + // Category. + string category = 4; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the gift became available. + int64 start_time_sec = 5; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the gift completed, and no further contributions are allowed. + int64 contribution_end_time_sec = 6; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the gift completed, and no further contributions are allowed. + int64 end_time_sec = 7; + // Current count. + int64 count = 8; + // Total count that can be contributed as part of this reward. + int64 max_count = 9; + // Maximum count that may be submitted from any individual contributor. + int64 max_contributor_count = 10; + // Cost per unit of contribution. + AvailableRewards contribution_cost = 11; + // Reward per unit of contribution. + AvailableRewards contribution_reward = 12; + // Rewards available as part of the gift once contribution thresholds are met. + repeated TeamGiftReward rewards = 13; + // Additional properties. + google.protobuf.Struct additional_properties = 14; + // Contribution information for team members. + repeated TeamGiftContributor contributors = 15; + // Flag indicating if the caller can contribute to this gift. + bool can_contribute = 16; + // The count still available for the caller to contribute. + int64 contributor_remaining_count = 17; + // Flag indicating if the caller can claim any rewards from this gift. + bool can_claim = 18; + // Rewards available for the caller to claim. + repeated TeamGiftReward available_rewards = 19; +} + +// A list of gifts available for a team. +message TeamGiftList { + // Gifts available for a team. + repeated TeamGift gifts = 1; +} + +// Request to view available gifts for a team. +message TeamGiftListRequest { + // Team identifier for which to list gifts. + string id = 1; +} + +// Request to contribute to a specific team gift. +message TeamGiftContributeRequest { + // Team identifier for which to submit a gift contribution. + string id = 1; + // Gift identifier. + string gift_id = 2; + // Count to contribute. + int64 count = 3; +} + +// Result of contributing to a team gift. +message TeamGiftContributeAck { + // Updated gift data. + TeamGift gift = 1; + // The count that was actually contributed. + int64 count = 2; + // Reward that was actually granted for contributing. + Reward reward = 3; +} + +// Request to claim all rewards currently available from a team gift. +message TeamGiftClaimRequest { + // Team identifier from which to claim a gift. + string id = 1; + // Gift identifier. + string gift_id = 2; + // End time for a past iteration of this gift to claim for, or 0 for current. + int64 end_time_sec = 3; +} + +// Result of claiming rewards from a team gift. +message TeamGiftClaimAck { + // Updated gift data. + TeamGift gift = 1; + // Rewards that were claimed. + repeated Reward rewards = 2; +} + +// Sync operation for a single inventory item. +message SyncInventoryItem { + // Item identifier from config mapping. + string item_id = 1; + // Number of items to add or remove. + int64 delta = 2; + // Item properties with string values. + map string_properties = 3; + // Item properties with numeric values. + map numeric_properties = 4; +} + +// Input for an offline state sync operation for the inventory system. +message SyncInventory { + // Map of instance IDs to update operation data. + map items = 1; +} + +// Input for an offline state sync operation for the economy system. +message SyncEconomy { + // Currencies deltas. + map currencies = 1; + // Economy modifiers to add. + repeated ActiveRewardModifier modifiers = 2; +} + +// Sync operation for a single achievement. +message SyncAchievementsUpdate { + // Count to add. + int64 count = 1; + // Time when the achievement first recorded progress. + int64 create_time_sec = 2; + // Time when the achievement update was generated on the client. + int64 update_time_sec = 3; + // Claim time, if claimed offline. + int64 claim_time_sec = 4; + // Total claim time, if claimed offline. + int64 total_claim_time_sec = 5; +} + +// Input for an offline state sync operation for the achievements system. +message SyncAchievements { + // Achievement updates and associated metadata. + map achievements = 1; +} + +// Full state (not delta) for an energy. +message SyncEnergyState { + // Current count. + int64 count = 1; + // Time when the energy started refilling. + int64 refill_start_time_sec = 2; +} + +// Input for an offline state sync operation for the energy system. +message SyncEnergy { + // Energies and associated full sync data. + map energies = 1; + // Energy modifiers to add. + repeated EnergyModifier modifiers = 2; +} + +// Single event leaderboard update. +message SyncEventLeaderboardUpdate { + // Score. + int64 score = 1; + // Subscore. + int64 subscore = 2; + // Time when the score was generated on the client. + int64 update_time_sec = 3; + // Metadata. + string metadata = 4; +} + +// Input for an offline state sync of event leaderboard updates. +message SyncEventLeaderboards { + // Updates for various event leaderboards, keyed by event leaderboard identifier. + map event_leaderboards = 1; +} + +// Single progression update. +message SyncProgressionUpdate { + // The counts to set. + map counts = 1; + // Time when the progression was first updated on the client, if new. + int64 create_time_sec = 2; + // Time when the progression update was generated on the client. + int64 update_time_sec = 3; + // Cost paid to unlock the progression. + ProgressionCost cost = 4; +} + +// Input for an offline state sync of progressions updates. +message SyncProgressions { + // Updates for various progressions, keyed by progression identifier. + map progressions = 1; +} + +// Input for an offline state sync of tutorials updates. +message SyncTutorials { + // Accept list. + repeated string accepts = 1; + // Decline list. + repeated string declines = 2; + // Abandon list. + repeated string abandons = 3; + // Updates to tutorial steps. Implicitly counts as accepting these tutorials, if not accepted already. + map updates = 4; +} + +// Single unlockable update, either grant or unlock start. +message SyncUnlockableUpdate { + // Unlockable identifier from config. + string unlockable_id = 1; + // Time this unlockabled was granted. + int64 create_time_sec = 2; + // Unlock start time, if any. + int64 start_time_sec = 3; + // Unlock completion time, if any. + int64 unlock_time_sec = 4; +} + +// Input for an offline state sync of unlockables updates. +message SyncUnlockables { + // Unlockable instance IDs to remove. + repeated string removes = 1; + // Unlockable updates keyed by instance identifier, such as new grants or unlock starts. + map updates = 2; +} + +// Single streak state update. +message SyncStreakUpdate { + // Current progress count for this streak. + int64 count = 1; + // Progress count for the current reset. + int64 count_current_reset = 2; + // Last count that was claimed. + int64 claim_count = 3; + // When updates for this streak were first recorded. + int64 create_time_sec = 4; + // When an update for this streak was most recently recorded. + int64 update_time_sec = 5; + // When the last claim for this streak was. + int64 claim_time_sec = 6; + // Record of rewards that have been claimed. + repeated StreakReward claimed_rewards = 7; +} + +// Input for an offline state sync of streaks updates. +message SyncStreaks { + // Streak identifiers to reset. + repeated string resets = 1; + // Streak state updates keyed by streak identifier. + map updates = 2; +} + +// Input for an offline state sync operation. +message SyncRequest { + // Inventory. + SyncInventory inventory = 1; + // Economy. + SyncEconomy economy = 2; + // Achievements. + SyncAchievements achievements = 3; + // Energy. + SyncEnergy energy = 4; + // Event leaderboards. + SyncEventLeaderboards event_leaderboards = 5; + // Progressions. + SyncProgressions progressions = 6; + // Stats. Message reused from standard synchronous stats updates. + StatUpdateRequest stats = 7; + // Tutorials. + SyncTutorials tutorials = 8; + // Unlockables. + SyncUnlockables unlockables = 9; + // Streaks. + SyncStreaks streaks = 10; +} + +// Resulting updates after an offline state sync operation. +// Fields are only populated if the corresponding updated was requested via the sync. +message SyncResponse { + // Updated wallet data, if any. + map wallet = 1; + // Inventory. + Inventory inventory = 2; + // Achievements. + AchievementList achievements = 3; + // Energies. + EnergyList energy = 4; + // Event leaderboards. + repeated EventLeaderboard event_leaderboards = 5; + // Progressions. + ProgressionList progressions = 6; + // Stats. + StatList stats = 7; + // Tutorials. + TutorialList tutorials = 8; + // Unlockables. + UnlockablesList unlockables = 9; + // The list of active reward modifiers. + repeated ActiveRewardModifier active_reward_modifiers = 10; + // Current server time. + int64 current_time_sec = 11; + // Streaks. + StreaksList streaks = 12; +} diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/incentives.go b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/incentives.go new file mode 100644 index 0000000..6862711 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/incentives.go @@ -0,0 +1,62 @@ +// Copyright 2023 Heroic Labs & Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hiro + +import ( + "context" + + "github.com/heroiclabs/nakama-common/runtime" +) + +type IncentivesConfig struct { + Incentives map[string]*IncentivesConfigIncentive `json:"incentives,omitempty"` +} + +type IncentivesConfigIncentive struct { + Type IncentiveType `json:"type,omitempty"` + Name string `json:"name,omitempty"` + Description string `json:"description,omitempty"` + MaxClaims int `json:"max_claims,omitempty"` + MaxGlobalClaims int `json:"max_global_claims,omitempty"` + MaxRecipientAgeSec int64 `json:"max_recipient_age_sec,omitempty"` + RecipientReward *EconomyConfigReward `json:"recipient_reward,omitempty"` + SenderReward *EconomyConfigReward `json:"sender_reward,omitempty"` + MaxConcurrent int `json:"max_concurrent,omitempty"` + ExpiryDurationSec int64 `json:"expiry_duration_sec,omitempty"` + AdditionalProperties map[string]interface{} `json:"additional_properties,omitempty"` +} + +// The IncentivesSystem provides a gameplay system which can create and claim incentives and their associated rewards. +type IncentivesSystem interface { + System + + SenderList(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string) (incentives []*Incentive, err error) + + SenderCreate(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, incentiveID string) (incentives []*Incentive, err error) + + SenderDelete(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, code string) (incentives []*Incentive, err error) + + SenderClaim(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, code string, claimantIDs []string) (incentives []*Incentive, err error) + + RecipientGet(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, code string) (incentive *IncentiveInfo, err error) + + RecipientClaim(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, code string) (incentive *IncentiveInfo, err error) + + // SetOnSenderReward sets a custom reward function which will run after an incentive sender's reward is rolled. + SetOnSenderReward(fn OnReward[*IncentivesConfigIncentive]) + + // SetOnRecipientReward sets a custom reward function which will run after an incentive recipient's reward is rolled. + SetOnRecipientReward(fn OnReward[*IncentivesConfigIncentive]) +} diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/inventory.go b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/inventory.go new file mode 100644 index 0000000..cbf582a --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/inventory.go @@ -0,0 +1,80 @@ +// Copyright 2023 Heroic Labs & Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hiro + +import ( + "context" + + "github.com/heroiclabs/nakama-common/runtime" +) + +type InventoryConfig struct { + Items map[string]*InventoryConfigItem `json:"items,omitempty"` + Limits *InventoryConfigLimits `json:"limits,omitempty"` + ItemSets map[string]map[string]bool `json:"-"` // Auto-computed when the config is read or personalized. + + ConfigSource ConfigSource[*InventoryConfigItem] `json:"-"` // Not included in serialization, set dynamically. +} + +type InventoryConfigItem struct { + Name string `json:"name,omitempty"` + Description string `json:"description,omitempty"` + Category string `json:"category,omitempty"` + ItemSets []string `json:"item_sets,omitempty"` + MaxCount int64 `json:"max_count,omitempty"` + Stackable bool `json:"stackable,omitempty"` + Consumable bool `json:"consumable,omitempty"` + ConsumeReward *EconomyConfigReward `json:"consume_reward,omitempty"` + StringProperties map[string]string `json:"string_properties,omitempty"` + NumericProperties map[string]float64 `json:"numeric_properties,omitempty"` + Disabled bool `json:"disabled,omitempty"` + KeepZero bool `json:"keep_zero,omitempty"` +} + +type InventoryConfigLimits struct { + Categories map[string]int64 `json:"categories,omitempty"` + ItemSets map[string]int64 `json:"item_sets,omitempty"` +} + +// The InventorySystem provides a gameplay system which can manage a player's inventory. +// +// A player can have items added via economy rewards, or directly. +type InventorySystem interface { + System + + // List will return the items defined as well as the computed item sets for the user by ID. + List(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, category string) (items map[string]*InventoryConfigItem, itemSets map[string][]string, err error) + + // ListInventoryItems will return the items which are part of a user's inventory by ID. + ListInventoryItems(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, category string) (inventory *Inventory, err error) + + // ConsumeItems will deduct the item(s) from the user's inventory and run the consume reward for each one, if defined. + ConsumeItems(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, itemIDs, instanceIDs map[string]int64, overConsume bool) (updatedInventory *Inventory, rewards map[string][]*Reward, instanceRewards map[string][]*Reward, err error) + + // GrantItems will add the item(s) to a user's inventory by ID. + GrantItems(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, itemIDs map[string]int64, ignoreLimits bool) (updatedInventory *Inventory, newItems map[string]*InventoryItem, updatedItems map[string]*InventoryItem, notGrantedItemIDs map[string]int64, err error) + + // UpdateItems will update the properties which are stored on each item by instance ID for a user. + UpdateItems(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, instanceIDs map[string]*InventoryUpdateItemProperties) (updatedInventory *Inventory, err error) + + // SetOnConsumeReward sets a custom reward function which will run after an inventory items' consume reward is rolled. + SetOnConsumeReward(fn OnReward[*InventoryConfigItem]) + + // SetConfigSource sets a custom additional config lookup function. + SetConfigSource(fn ConfigSource[*InventoryConfigItem]) +} + +// ConfigSource is a function which can be used to provide additional on-demand configuration data to a requesting system. +type ConfigSource[T any] func(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, configID string) (T, error) diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/leaderboards.go b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/leaderboards.go new file mode 100644 index 0000000..542ef12 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/leaderboards.go @@ -0,0 +1,46 @@ +// Copyright 2023 Heroic Labs & Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hiro + +import ( + "context" + "database/sql" + + "github.com/heroiclabs/nakama-common/api" + "github.com/heroiclabs/nakama-common/runtime" +) + +// LeaderboardsConfig is the data definition for the LeaderboardsSystem type. +type LeaderboardsConfig struct { + Leaderboards []*LeaderboardsConfigLeaderboard `json:"leaderboards,omitempty"` +} + +type LeaderboardsConfigLeaderboard struct { + Id string `json:"id,omitempty"` + SortOrder string `json:"sort_order,omitempty"` + Operator string `json:"operator,omitempty"` + ResetSchedule string `json:"reset_schedule,omitempty"` + Authoritative bool `json:"authoritative,omitempty"` + Regions []string `json:"regions,omitempty"` +} + +// The LeaderboardsSystem defines a collection of leaderboards which can be defined as global or regional with Nakama +// server. +type LeaderboardsSystem interface { + System +} + +// ValidateWriteScoreFn is a function used to validate the leaderboard score input. +type ValidateWriteScoreFn func(context.Context, runtime.Logger, *sql.DB, runtime.NakamaModule, *api.WriteLeaderboardRecordRequest) *runtime.Error diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/personalizer.go b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/personalizer.go new file mode 100644 index 0000000..7c7df97 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/personalizer.go @@ -0,0 +1,29 @@ +// Copyright 2023 Heroic Labs & Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hiro + +import ( + "context" + + "github.com/heroiclabs/nakama-common/runtime" +) + +// The Personalizer describes an intermediate server or service which can be used to personalize the base data +// definitions defined for the gameplay systems. +type Personalizer interface { + // GetValue returns a config which has been modified for a gameplay system, + // or nil if the config is not being adjusted by this personalizer. + GetValue(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, system System, identity string) (config any, err error) +} diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/personalizer_satori.go b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/personalizer_satori.go new file mode 100644 index 0000000..c658e21 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/personalizer_satori.go @@ -0,0 +1,643 @@ +// Copyright 2023 Heroic Labs & Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hiro + +import ( + "context" + "encoding/json" + "errors" + "strings" + "sync" + "sync/atomic" + "time" + "unique" + + "github.com/heroiclabs/nakama-common/runtime" +) + +var _ Publisher = (*SatoriPersonalizer)(nil) + +var _ Personalizer = (*SatoriPersonalizer)(nil) + +type SatoriPersonalizerOption interface { + apply(*SatoriPersonalizer) +} + +type satoriPersonalizerOptionFunc struct { + f func(*SatoriPersonalizer) +} + +func (s *satoriPersonalizerOptionFunc) apply(personalizer *SatoriPersonalizer) { + s.f(personalizer) +} + +func SatoriPersonalizerPublishAuthenticateEvents() SatoriPersonalizerOption { + return &satoriPersonalizerOptionFunc{ + f: func(personalizer *SatoriPersonalizer) { + personalizer.publishAuthenticateRequest = true + }, + } +} + +func SatoriPersonalizerPublishAuthenticateEventsWithSession() SatoriPersonalizerOption { + return &satoriPersonalizerOptionFunc{ + f: func(personalizer *SatoriPersonalizer) { + personalizer.publishAuthenticateRequest = true + personalizer.publishAuthenticateRequestWithSession = true + }, + } +} + +func SatoriPersonalizerPublishAchievementsEvents() SatoriPersonalizerOption { + return &satoriPersonalizerOptionFunc{ + f: func(personalizer *SatoriPersonalizer) { + personalizer.publishAchievementsEvents = true + }, + } +} + +func SatoriPersonalizerPublishBaseEvents() SatoriPersonalizerOption { + return &satoriPersonalizerOptionFunc{ + f: func(personalizer *SatoriPersonalizer) { + personalizer.publishBaseEvents = true + }, + } +} + +func SatoriPersonalizerPublishEconomyEvents() SatoriPersonalizerOption { + return &satoriPersonalizerOptionFunc{ + f: func(personalizer *SatoriPersonalizer) { + personalizer.publishEconomyEvents = true + }, + } +} + +func SatoriPersonalizerPublishEnergyEvents() SatoriPersonalizerOption { + return &satoriPersonalizerOptionFunc{ + f: func(personalizer *SatoriPersonalizer) { + personalizer.publishEnergyEvents = true + }, + } +} + +func SatoriPersonalizerPublishEventLeaderboardsEvents() SatoriPersonalizerOption { + return &satoriPersonalizerOptionFunc{ + f: func(personalizer *SatoriPersonalizer) { + personalizer.publishEventLeaderboardsEvents = true + }, + } +} + +func SatoriPersonalizerPublishIncentivesEvents() SatoriPersonalizerOption { + return &satoriPersonalizerOptionFunc{ + f: func(personalizer *SatoriPersonalizer) { + personalizer.publishIncentivesEvents = true + }, + } +} + +func SatoriPersonalizerPublishInventoryEvents() SatoriPersonalizerOption { + return &satoriPersonalizerOptionFunc{ + f: func(personalizer *SatoriPersonalizer) { + personalizer.publishInventoryEvents = true + }, + } +} + +func SatoriPersonalizerPublishLeaderboardsEvents() SatoriPersonalizerOption { + return &satoriPersonalizerOptionFunc{ + f: func(personalizer *SatoriPersonalizer) { + personalizer.publishLeaderboardsEvents = true + }, + } +} + +func SatoriPersonalizerPublishProgressionEvents() SatoriPersonalizerOption { + return &satoriPersonalizerOptionFunc{ + f: func(personalizer *SatoriPersonalizer) { + personalizer.publishProgressionEvents = true + }, + } +} + +func SatoriPersonalizerPublishStatsEvents() SatoriPersonalizerOption { + return &satoriPersonalizerOptionFunc{ + f: func(personalizer *SatoriPersonalizer) { + personalizer.publishStatsEvents = true + }, + } +} + +func SatoriPersonalizerPublishTeamsEvents() SatoriPersonalizerOption { + return &satoriPersonalizerOptionFunc{ + f: func(personalizer *SatoriPersonalizer) { + personalizer.publishTeamsEvents = true + }, + } +} + +func SatoriPersonalizerPublishTutorialsEvents() SatoriPersonalizerOption { + return &satoriPersonalizerOptionFunc{ + f: func(personalizer *SatoriPersonalizer) { + personalizer.publishTutorialsEvents = true + }, + } +} + +func SatoriPersonalizerPublishUnlockablesEvents() SatoriPersonalizerOption { + return &satoriPersonalizerOptionFunc{ + f: func(personalizer *SatoriPersonalizer) { + personalizer.publishUnlockablesEvents = true + }, + } +} + +func SatoriPersonalizerPublishAuctionsEvents() SatoriPersonalizerOption { + return &satoriPersonalizerOptionFunc{ + f: func(personalizer *SatoriPersonalizer) { + personalizer.publishAuctionsEvents = true + }, + } +} + +func SatoriPersonalizerPublishStreaksEvents() SatoriPersonalizerOption { + return &satoriPersonalizerOptionFunc{ + f: func(personalizer *SatoriPersonalizer) { + personalizer.publishStreaksEvents = true + }, + } +} + +func SatoriPersonalizerPublishChallengeEvents() SatoriPersonalizerOption { + return &satoriPersonalizerOptionFunc{ + f: func(personalizer *SatoriPersonalizer) { + personalizer.publishChallengeEvents = true + }, + } +} + +func SatoriPersonalizerPublishAllEvents() SatoriPersonalizerOption { + return &satoriPersonalizerOptionFunc{ + f: func(personalizer *SatoriPersonalizer) { + personalizer.publishAll = true + }, + } +} + +func SatoriPersonalizerNoCache() SatoriPersonalizerOption { + return &satoriPersonalizerOptionFunc{ + f: func(personalizer *SatoriPersonalizer) { + personalizer.noCache = true + }, + } +} + +type SatoriPersonalizerCache struct { + flags map[string]unique.Handle[string] + liveEvents *atomic.Pointer[runtime.LiveEventList] +} + +type SatoriPersonalizer struct { + publishAll bool + + publishAuthenticateRequest bool + publishAuthenticateRequestWithSession bool + + publishAchievementsEvents bool + publishBaseEvents bool + publishEconomyEvents bool + publishEnergyEvents bool + publishEventLeaderboardsEvents bool + publishIncentivesEvents bool + publishInventoryEvents bool + publishLeaderboardsEvents bool + publishProgressionEvents bool + publishStatsEvents bool + publishTeamsEvents bool + publishTutorialsEvents bool + publishUnlockablesEvents bool + publishAuctionsEvents bool + publishStreaksEvents bool + publishChallengeEvents bool + + noCache bool + + cacheMutex sync.RWMutex + cache map[context.Context]*SatoriPersonalizerCache +} + +func (p *SatoriPersonalizer) Authenticate(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, created bool) { + if !p.IsPublishAuthenticateRequest() && !p.IsPublishAuthenticateRequestWithSession() { + return + } + if _, err := nk.GetSatori().Authenticate(ctx, userID, nil, nil, p.IsPublishAuthenticateRequestWithSession()); err != nil && !errors.Is(err, runtime.ErrSatoriConfigurationInvalid) { + logger.WithField("error", err.Error()).Error("failed to authenticate with Satori") + } +} + +func (p *SatoriPersonalizer) Send(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, events []*PublisherEvent) { + if len(events) == 0 { + return + } + + satoriEvents := make([]*runtime.Event, 0, len(events)) + for _, event := range events { + switch event.System.GetType() { + case SystemTypeAchievements: + if !p.IsPublishAchievementsEvents() { + continue + } + case SystemTypeBase: + if !p.IsPublishBaseEvents() { + continue + } + case SystemTypeEconomy: + if !p.IsPublishEconomyEvents() { + continue + } + case SystemTypeEnergy: + if !p.IsPublishEnergyEvents() { + continue + } + case SystemTypeInventory: + if !p.IsPublishInventoryEvents() { + continue + } + case SystemTypeLeaderboards: + if !p.IsPublishLeaderboardsEvents() { + continue + } + case SystemTypeTeams: + if !p.IsPublishTeamsEvents() { + continue + } + case SystemTypeTutorials: + if !p.IsPublishTutorialsEvents() { + continue + } + case SystemTypeUnlockables: + if !p.IsPublishUnlockablesEvents() { + continue + } + case SystemTypeStats: + if !p.IsPublishStatsEvents() { + continue + } + case SystemTypeEventLeaderboards: + if !p.IsPublishEventLeaderboardsEvents() { + continue + } + case SystemTypeProgression: + if !p.IsPublishProgressionEvents() { + continue + } + case SystemTypeIncentives: + if !p.IsPublishIncentivesEvents() { + continue + } + case SystemTypeAuctions: + if !p.IsPublishAuctionsEvents() { + continue + } + case SystemTypeStreaks: + if !p.IsPublishStreaksEvents() { + continue + } + case SystemTypeChallenges: + if !p.IsPublishChallengeEvents() { + continue + } + default: + } + + satoriEvent := &runtime.Event{ + Name: event.Name, + Id: event.Id, + Metadata: event.Metadata, + Value: event.Value, + Timestamp: event.Timestamp, + } + satoriEvents = append(satoriEvents, satoriEvent) + } + if len(satoriEvents) == 0 { + return + } + if err := nk.GetSatori().EventsPublish(ctx, userID, satoriEvents); err != nil { + logger.WithField("error", err.Error()).Error("failed to publish Satori events") + } +} + +func NewSatoriPersonalizer(ctx context.Context, opts ...SatoriPersonalizerOption) *SatoriPersonalizer { + s := &SatoriPersonalizer{ + cacheMutex: sync.RWMutex{}, + cache: make(map[context.Context]*SatoriPersonalizerCache), + } + + // Apply options, if any supplied. + for _, opt := range opts { + opt.apply(s) + } + + if !s.noCache { + go func() { + ticker := time.NewTicker(30 * time.Second) + defer ticker.Stop() + for { + select { + case <-ctx.Done(): + return + case <-ticker.C: + s.cacheMutex.Lock() + for cacheCtx := range s.cache { + if cacheCtx.Err() != nil { + delete(s.cache, cacheCtx) + } + } + s.cacheMutex.Unlock() + } + } + }() + } + + return s +} + +var allFlagNames = []string{"Hiro-Achievements", "Hiro-Base", "Hiro-Economy", "Hiro-Energy", "Hiro-Inventory", "Hiro-Leaderboards", "Hiro-Teams", "Hiro-Tutorials", "Hiro-Unlockables", "Hiro-Stats", "Hiro-Event-Leaderboards", "Hiro-Progression", "Hiro-Incentives", "Hiro-Auctions", "Hiro-Streaks", "Hiro-Challenges", "Hiro-Reward-Mailbox"} + +func (p *SatoriPersonalizer) GetValue(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, system System, userID string) (any, error) { + var flagName string + switch system.GetType() { + case SystemTypeAchievements: + flagName = "Hiro-Achievements" + case SystemTypeBase: + flagName = "Hiro-Base" + case SystemTypeEconomy: + flagName = "Hiro-Economy" + case SystemTypeEnergy: + flagName = "Hiro-Energy" + case SystemTypeInventory: + flagName = "Hiro-Inventory" + case SystemTypeLeaderboards: + flagName = "Hiro-Leaderboards" + case SystemTypeTeams: + flagName = "Hiro-Teams" + case SystemTypeTutorials: + flagName = "Hiro-Tutorials" + case SystemTypeUnlockables: + flagName = "Hiro-Unlockables" + case SystemTypeStats: + flagName = "Hiro-Stats" + case SystemTypeEventLeaderboards: + flagName = "Hiro-Event-Leaderboards" + case SystemTypeProgression: + flagName = "Hiro-Progression" + case SystemTypeIncentives: + flagName = "Hiro-Incentives" + case SystemTypeAuctions: + flagName = "Hiro-Auctions" + case SystemTypeStreaks: + flagName = "Hiro-Streaks" + case SystemTypeChallenges: + flagName = "Hiro-Challenges" + case SystemTypeRewardMailbox: + flagName = "Hiro-Reward-Mailbox" + default: + return nil, runtime.NewError("hiro system type unknown", 3) + } + + var config any + var found bool + + if p.noCache { + flagList, err := nk.GetSatori().FlagsList(ctx, userID, flagName) + if err != nil { + if strings.Contains(err.Error(), "404 status code") { + logger.WithField("userID", userID).WithField("error", err.Error()).Warn("error requesting Satori flag list, user not found") + return nil, nil + } + logger.WithField("userID", userID).WithField("error", err.Error()).Error("error requesting Satori flag list") + return nil, err + } + + if len(flagList.Flags) >= 1 { + config = system.GetConfig() + decoder := json.NewDecoder(strings.NewReader(flagList.Flags[0].Value)) + decoder.DisallowUnknownFields() + if err := decoder.Decode(config); err != nil { + logger.WithField("userID", userID).WithField("error", err.Error()).Error("error merging Satori flag value") + return nil, err + } + found = true + } + + if s := system.GetType(); s == SystemTypeEventLeaderboards || s == SystemTypeAchievements { + // If looking at event leaderboards, also load live events. + liveEventsList, err := nk.GetSatori().LiveEventsList(ctx, userID) + if err != nil { + if strings.Contains(err.Error(), "404 status code") { + logger.WithField("userID", userID).WithField("error", err.Error()).Warn("error requesting Satori live events list, user not found") + return nil, nil + } + logger.WithField("userID", userID).WithField("error", err.Error()).Error("error requesting Satori live events list") + return nil, err + } + if len(liveEventsList.LiveEvents) > 0 { + if config == nil { + config = system.GetConfig() + } + for _, liveEvent := range liveEventsList.LiveEvents { + decoder := json.NewDecoder(strings.NewReader(liveEvent.Value)) + decoder.DisallowUnknownFields() + if err := decoder.Decode(config); err != nil { + // The live event may be intended for a different purpose, do not log or return an error here. + continue + } + found = true + } + } + } + } else { + var cacheEntry *SatoriPersonalizerCache + p.cacheMutex.RLock() + cacheEntry, found = p.cache[ctx] + p.cacheMutex.RUnlock() + + if !found { + flagList, err := nk.GetSatori().FlagsList(ctx, userID, allFlagNames...) + if err != nil { + if strings.Contains(err.Error(), "404 status code") { + logger.WithField("userID", userID).WithField("error", err.Error()).Warn("error requesting Satori flag list, user not found") + return nil, nil + } + logger.WithField("userID", userID).WithField("error", err.Error()).Error("error requesting Satori flag list") + return nil, err + } + + var liveEventsList *runtime.LiveEventList + if s := system.GetType(); s == SystemTypeEventLeaderboards || s == SystemTypeAchievements { + liveEventsList, err = nk.GetSatori().LiveEventsList(ctx, userID) + if err != nil { + if strings.Contains(err.Error(), "404 status code") { + logger.WithField("userID", userID).WithField("error", err.Error()).Warn("error requesting Satori live events list, user not found") + return nil, nil + } + logger.WithField("userID", userID).WithField("error", err.Error()).Error("error requesting Satori live events list") + return nil, err + } + } + + cacheEntry = &SatoriPersonalizerCache{ + // flags set below. + liveEvents: &atomic.Pointer[runtime.LiveEventList]{}, + } + if flagList != nil { + cacheEntry.flags = make(map[string]unique.Handle[string], len(flagList.Flags)) + for _, flag := range flagList.Flags { + cacheEntry.flags[flag.Name] = unique.Make[string](flag.Value) + } + } + if liveEventsList != nil { + cacheEntry.liveEvents.Store(liveEventsList) + } + p.cacheMutex.Lock() + p.cache[ctx] = cacheEntry + p.cacheMutex.Unlock() + } + + if s := system.GetType(); (s == SystemTypeEventLeaderboards || s == SystemTypeAchievements) && cacheEntry.liveEvents.Load() == nil { + liveEventsList, err := nk.GetSatori().LiveEventsList(ctx, userID) + if err != nil { + if strings.Contains(err.Error(), "404 status code") { + logger.WithField("userID", userID).WithField("error", err.Error()).Warn("error requesting Satori live events list, user not found") + return nil, nil + } + logger.WithField("userID", userID).WithField("error", err.Error()).Error("error requesting Satori live events list") + return nil, err + } + cacheEntry.liveEvents.Store(liveEventsList) + } + + found = false + + for flName, flHandle := range cacheEntry.flags { + if flName != flagName { + continue + } + + config = system.GetConfig() + decoder := json.NewDecoder(strings.NewReader(flHandle.Value())) + decoder.DisallowUnknownFields() + if err := decoder.Decode(config); err != nil { + logger.WithField("userID", userID).WithField("error", err.Error()).Error("error merging Satori flag value") + return nil, err + } + found = true + } + + if liveEventsList := cacheEntry.liveEvents.Load(); liveEventsList != nil && len(liveEventsList.LiveEvents) > 0 { + if config == nil { + config = system.GetConfig() + } + for _, liveEvent := range liveEventsList.LiveEvents { + decoder := json.NewDecoder(strings.NewReader(liveEvent.Value)) + decoder.DisallowUnknownFields() + if err := decoder.Decode(config); err != nil { + // The live event may be intended for a different purpose, do not log or return an error here. + continue + } + found = true + } + } + } + + // If this caller doesn't have the given flag (or live events) return the nil to indicate no change to the config. + if !found { + return nil, nil + } + + return config, nil +} + +func (p *SatoriPersonalizer) IsPublishAuthenticateRequest() bool { + return p.publishAll || p.publishAuthenticateRequest +} + +func (p *SatoriPersonalizer) IsPublishAuthenticateRequestWithSession() bool { + return p.publishAuthenticateRequestWithSession +} + +func (p *SatoriPersonalizer) IsPublishAchievementsEvents() bool { + return p.publishAll || p.publishAchievementsEvents +} + +func (p *SatoriPersonalizer) IsPublishBaseEvents() bool { + return p.publishAll || p.publishBaseEvents +} + +func (p *SatoriPersonalizer) IsPublishEconomyEvents() bool { + return p.publishAll || p.publishEconomyEvents +} + +func (p *SatoriPersonalizer) IsPublishEnergyEvents() bool { + return p.publishAll || p.publishEnergyEvents +} + +func (p *SatoriPersonalizer) IsPublishEventLeaderboardsEvents() bool { + return p.publishAll || p.publishEventLeaderboardsEvents +} + +func (p *SatoriPersonalizer) IsPublishIncentivesEvents() bool { + return p.publishAll || p.publishIncentivesEvents +} + +func (p *SatoriPersonalizer) IsPublishInventoryEvents() bool { + return p.publishAll || p.publishInventoryEvents +} + +func (p *SatoriPersonalizer) IsPublishLeaderboardsEvents() bool { + return p.publishAll || p.publishLeaderboardsEvents +} + +func (p *SatoriPersonalizer) IsPublishProgressionEvents() bool { + return p.publishAll || p.publishProgressionEvents +} + +func (p *SatoriPersonalizer) IsPublishStatsEvents() bool { + return p.publishAll || p.publishStatsEvents +} + +func (p *SatoriPersonalizer) IsPublishTeamsEvents() bool { + return p.publishAll || p.publishTeamsEvents +} + +func (p *SatoriPersonalizer) IsPublishTutorialsEvents() bool { + return p.publishAll || p.publishTutorialsEvents +} + +func (p *SatoriPersonalizer) IsPublishUnlockablesEvents() bool { + return p.publishAll || p.publishUnlockablesEvents +} + +func (p *SatoriPersonalizer) IsPublishAuctionsEvents() bool { + return p.publishAll || p.publishAuctionsEvents +} + +func (p *SatoriPersonalizer) IsPublishStreaksEvents() bool { + return p.publishAll || p.publishStreaksEvents +} + +func (p *SatoriPersonalizer) IsPublishChallengeEvents() bool { + return p.publishAll || p.publishChallengeEvents +} diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/personalizer_storage.go b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/personalizer_storage.go new file mode 100644 index 0000000..7515aa4 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/personalizer_storage.go @@ -0,0 +1,407 @@ +// Copyright 2023 Heroic Labs & Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hiro + +import ( + "context" + "database/sql" + "encoding/json" + "strings" + "sync" + "time" + + "github.com/heroiclabs/nakama-common/api" + "github.com/heroiclabs/nakama-common/runtime" +) + +const ( + StoragePersonalizerCollectionDefault = "hiro_datadefinitions" + + storagePersonalizerKeyBase = "base" + storagePersonalizerKeyAchievements = "achievements" + storagePersonalizerKeyEconomy = "economy" + storagePersonalizerKeyEnergy = "energy" + storagePersonalizerKeyInventory = "inventory" + storagePersonalizerKeyEventLeaderboards = "event_leaderboards" + storagePersonalizerKeyIncentives = "incentives" + storagePersonalizerKeyLeaderboards = "leaderboards" + storagePersonalizerKeyProgression = "progression" + storagePersonalizerKeyStats = "stats" + storagePersonalizerKeyTeams = "teams" + storagePersonalizerKeyTutorials = "tutorials" + storagePersonalizerKeyUnlockables = "unlockables" + storagePersonalizerKeyAuctions = "auctions" + storagePersonalizerKeyStreaks = "streaks" + storagePersonalizerKeyChallenges = "challenges" + storagePersonalizerKeyRewardMailbox = "reward_mailbox" +) + +var _ Personalizer = (*StoragePersonalizer)(nil) + +type StoragePersonalizerCachedStorageObject struct { + object *api.StorageObject + refreshTime time.Time + expiryTime time.Time +} + +type StoragePersonalizer struct { + sync.RWMutex + cache map[SystemType]*StoragePersonalizerCachedStorageObject + cacheExpiry time.Duration + collection string + logger runtime.Logger +} + +type storagePersonalizerUploadRequest struct { + Achievements *AchievementsConfig `json:"achievements,omitempty"` + Economy *EconomyConfig `json:"economy,omitempty"` + Energy *EnergyConfig `json:"energy,omitempty"` + Inventory *InventoryConfig `json:"inventory,omitempty"` + EventLeaderboard *EventLeaderboardsConfig `json:"event_leaderboards,omitempty"` + Incentives *IncentivesConfig `json:"incentives,omitempty"` + Leaderboards *LeaderboardConfig `json:"leaderboards,omitempty"` + Progression *ProgressionConfig `json:"progression,omitempty"` + Stats *StatsConfig `json:"stats,omitempty"` + Teams *TeamsConfig `json:"teams,omitempty"` + Tutorials *TutorialsConfig `json:"tutorials,omitempty"` + Unlockables *UnlockablesConfig `json:"unlockables,omitempty"` + Base *BaseSystemConfig `json:"base,omitempty"` + Auctions *AuctionsConfig `json:"auctions,omitempty"` + Streaks *StreaksConfig `json:"streaks,omitempty"` + Challenges *ChallengesConfig `json:"challenges,omitempty"` + RewardMailbox *RewardMailboxConfig `json:"reward_mailbox,omitempty"` +} + +func NewStoragePersonalizerDefault(logger runtime.Logger, initializer runtime.Initializer, register bool) *StoragePersonalizer { + logger.Info("NewStoragePersonalizerDefault register => %v", register) + return NewStoragePersonalizer(logger, 600, StoragePersonalizerCollectionDefault, initializer, register) +} + +func NewStoragePersonalizer(logger runtime.Logger, cacheExpirySec int, collection string, initializer runtime.Initializer, register bool) *StoragePersonalizer { + personalizer := &StoragePersonalizer{ + cache: make(map[SystemType]*StoragePersonalizerCachedStorageObject, 20), + cacheExpiry: time.Duration(cacheExpirySec) * time.Second, + collection: collection, + logger: logger, + } + + if register { + err := initializer.RegisterRpc(RpcId_RPC_ID_STORAGE_PERSONALIZER_UPLOAD.String(), rpcStoragePersonalizerUpload(initializer, personalizer)) + if err != nil { + logger.WithField("error", err.Error()).Error("Error registering storage personalizer upload RPC.") + } + } + + return personalizer +} + +func rpcStoragePersonalizerUpload(initializer runtime.Initializer, p *StoragePersonalizer) func(context.Context, runtime.Logger, *sql.DB, runtime.NakamaModule, string) (string, error) { + return func(ctx context.Context, logger runtime.Logger, db *sql.DB, nk runtime.NakamaModule, payload string) (string, error) { + _, ok := ctx.Value(runtime.RUNTIME_CTX_USER_ID).(string) + if ok { + return "", ErrSessionUser + } + + decoder := json.NewDecoder(strings.NewReader(payload)) + decoder.DisallowUnknownFields() + + req := &storagePersonalizerUploadRequest{} + + if err := decoder.Decode(req); err != nil { + logger.WithField("error", err.Error()).Error("decoder.Decode error") + if strings.HasPrefix(err.Error(), "json: unknown field") { + return "", runtime.NewError(err.Error(), 3) + } + return "", ErrPayloadDecode + } + + writes := make([]*runtime.StorageWrite, 0, 17) + + if req.Achievements != nil { + write, err := p.newStorageWrite(req.Achievements, storagePersonalizerKeyAchievements) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating achievements storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + if req.Economy != nil { + write, err := p.newStorageWrite(req.Economy, storagePersonalizerKeyEconomy) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating economy storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + if req.Energy != nil { + write, err := p.newStorageWrite(req.Energy, storagePersonalizerKeyEnergy) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating energy storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + if req.Inventory != nil { + write, err := p.newStorageWrite(req.Inventory, storagePersonalizerKeyInventory) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating inventory storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + if req.EventLeaderboard != nil { + write, err := p.newStorageWrite(req.EventLeaderboard, storagePersonalizerKeyEventLeaderboards) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating event leaderboard storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + if req.Incentives != nil { + write, err := p.newStorageWrite(req.Incentives, storagePersonalizerKeyIncentives) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating incentives storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + if req.Leaderboards != nil { + write, err := p.newStorageWrite(req.Leaderboards, storagePersonalizerKeyLeaderboards) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating leaderboards storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + if req.Progression != nil { + write, err := p.newStorageWrite(req.Progression, storagePersonalizerKeyProgression) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating progression storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + if req.Stats != nil { + write, err := p.newStorageWrite(req.Stats, storagePersonalizerKeyStats) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating stats storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + if req.Teams != nil { + write, err := p.newStorageWrite(req.Teams, storagePersonalizerKeyTeams) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating teams storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + if req.Tutorials != nil { + write, err := p.newStorageWrite(req.Tutorials, storagePersonalizerKeyTutorials) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating tutorials storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + if req.Unlockables != nil { + write, err := p.newStorageWrite(req.Unlockables, storagePersonalizerKeyUnlockables) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating unlockables storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + if req.Base != nil { + write, err := p.newStorageWrite(req.Base, storagePersonalizerKeyBase) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating base storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + if req.Auctions != nil { + write, err := p.newStorageWrite(req.Auctions, storagePersonalizerKeyAuctions) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating auctions storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + if req.Streaks != nil { + write, err := p.newStorageWrite(req.Streaks, storagePersonalizerKeyStreaks) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating streaks storage object.") + return "", ErrInternal + } + + writes = append(writes, write) + } + + if req.Challenges != nil { + write, err := p.newStorageWrite(req.Challenges, storagePersonalizerKeyChallenges) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating challenges storage object.") + return "", ErrInternal + } + writes = append(writes, write) + } + + if req.RewardMailbox != nil { + write, err := p.newStorageWrite(req.RewardMailbox, storagePersonalizerKeyRewardMailbox) + if err != nil { + logger.WithField("error", err.Error()).Error("Error creating reward mailbox storage object.") + return "", ErrInternal + } + writes = append(writes, write) + } + + if len(writes) > 0 { + if _, err := nk.StorageWrite(ctx, writes); err != nil { + logger.WithField("error", err.Error()).Error("nk.StorageWrite error") + return "", err + } + } + + return "{}", nil + } +} + +func (p *StoragePersonalizer) GetValue(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, system System, userID string) (any, error) { + now := time.Now().UTC() + systemType := system.GetType() + + p.RLock() + cached, found := p.cache[systemType] + p.RUnlock() + + if !found || now.After(cached.expiryTime) { + var readOp *runtime.StorageRead + switch systemType { + case SystemTypeAchievements: + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyAchievements} + case SystemTypeEconomy: + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyEconomy} + case SystemTypeEnergy: + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyEnergy} + case SystemTypeInventory: + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyInventory} + case SystemTypeEventLeaderboards: + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyEventLeaderboards} + case SystemTypeIncentives: + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyIncentives} + case SystemTypeLeaderboards: + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyLeaderboards} + case SystemTypeProgression: + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyProgression} + case SystemTypeStats: + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyStats} + case SystemTypeTeams: + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyTeams} + case SystemTypeTutorials: + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyTutorials} + case SystemTypeUnlockables: + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyUnlockables} + case SystemTypeBase: + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyBase} + case SystemTypeAuctions: + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyAuctions} + case SystemTypeStreaks: + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyStreaks} + case SystemTypeChallenges: + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyChallenges} + case SystemTypeRewardMailbox: + readOp = &runtime.StorageRead{Collection: p.collection, Key: storagePersonalizerKeyRewardMailbox} + default: + return nil, runtime.NewError("hiro system type unknown", 3) + } + + objects, err := nk.StorageRead(ctx, []*runtime.StorageRead{readOp}) + if err != nil { + logger.WithField("error", err.Error()).Error("nk.StorageRead error") + return nil, err + } + cached = &StoragePersonalizerCachedStorageObject{ + refreshTime: now, + expiryTime: now.Add(p.cacheExpiry), + } + if len(objects) > 0 { + cached.object = objects[0] + } + found = true + p.Lock() + p.cache[systemType] = cached + p.Unlock() + } + + if !found || cached.object == nil { + // No personalization found for this system type. + return nil, nil + } + + config := system.GetConfig() + decoder := json.NewDecoder(strings.NewReader(cached.object.Value)) + decoder.DisallowUnknownFields() + if err := decoder.Decode(config); err != nil { + logger.WithField("userID", userID).WithField("error", err.Error()).Error("error merging storage value") + return nil, err + } + + return config, nil +} + +func (p *StoragePersonalizer) newStorageWrite(config any, storageKey string) (*runtime.StorageWrite, error) { + json, err := json.Marshal(config) + if err != nil { + return nil, err + } + + return &runtime.StorageWrite{ + Collection: p.collection, + Key: storageKey, + Value: string(json), + PermissionRead: 0, + PermissionWrite: 0, + }, nil +} diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/personalizer_storage_nakama.json b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/personalizer_storage_nakama.json new file mode 100644 index 0000000..fa22e35 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/personalizer_storage_nakama.json @@ -0,0 +1,128 @@ +[ + { + "collection": "hiro_datadefinitions", + "key": "base", + "permission_read": 0, + "permission_write": 0, + "user_id": "00000000-0000-0000-0000-000000000000", + "value": { + } + }, + { + "collection": "hiro_datadefinitions", + "key": "achievements", + "permission_read": 0, + "permission_write": 0, + "user_id": "00000000-0000-0000-0000-000000000000", + "value": { + } + }, + { + "collection": "hiro_datadefinitions", + "key": "challenges", + "permission_read": 0, + "permission_write": 0, + "user_id": "00000000-0000-0000-0000-000000000000", + "value": { + } + }, + { + "collection": "hiro_datadefinitions", + "key": "economy", + "permission_read": 0, + "permission_write": 0, + "user_id": "00000000-0000-0000-0000-000000000000", + "value": { + } + }, + { + "collection": "hiro_datadefinitions", + "key": "energy", + "permission_read": 0, + "permission_write": 0, + "user_id": "00000000-0000-0000-0000-000000000000", + "value": { + } + }, + { + "collection": "hiro_datadefinitions", + "key": "event_leaderboards", + "permission_read": 0, + "permission_write": 0, + "user_id": "00000000-0000-0000-0000-000000000000", + "value": { + } + }, + { + "collection": "hiro_datadefinitions", + "key": "incentives", + "permission_read": 0, + "permission_write": 0, + "user_id": "00000000-0000-0000-0000-000000000000", + "value": { + } + }, + { + "collection": "hiro_datadefinitions", + "key": "inventory", + "permission_read": 0, + "permission_write": 0, + "user_id": "00000000-0000-0000-0000-000000000000", + "value": { + } + }, + { + "collection": "hiro_datadefinitions", + "key": "leaderboards", + "permission_read": 0, + "permission_write": 0, + "user_id": "00000000-0000-0000-0000-000000000000", + "value": { + } + }, + { + "collection": "hiro_datadefinitions", + "key": "progression", + "permission_read": 0, + "permission_write": 0, + "user_id": "00000000-0000-0000-0000-000000000000", + "value": { + } + }, + { + "collection": "hiro_datadefinitions", + "key": "stats", + "permission_read": 0, + "permission_write": 0, + "user_id": "00000000-0000-0000-0000-000000000000", + "value": { + } + }, + { + "collection": "hiro_datadefinitions", + "key": "teams", + "permission_read": 0, + "permission_write": 0, + "user_id": "00000000-0000-0000-0000-000000000000", + "value": { + } + }, + { + "collection": "hiro_datadefinitions", + "key": "tutorials", + "permission_read": 0, + "permission_write": 0, + "user_id": "00000000-0000-0000-0000-000000000000", + "value": { + } + }, + { + "collection": "hiro_datadefinitions", + "key": "unlockables", + "permission_read": 0, + "permission_write": 0, + "user_id": "00000000-0000-0000-0000-000000000000", + "value": { + } + } +] diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/progression.go b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/progression.go new file mode 100644 index 0000000..d794fe7 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/progression.go @@ -0,0 +1,63 @@ +// Copyright 2023 Heroic Labs & Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hiro + +import ( + "context" + + "github.com/heroiclabs/nakama-common/runtime" +) + +var ( + ErrProgressionNotFound = runtime.NewError("progression not found", 3) // INVALID_ARGUMENT + ErrProgressionNotAvailablePurchase = runtime.NewError("progression not available to purchase", 3) // INVALID_ARGUMENT + ErrProgressionNotAvailableUpdate = runtime.NewError("progression not available to update", 3) // INVALID_ARGUMENT + ErrProgressionNoCost = runtime.NewError("progression no cost associated", 3) // INVALID_ARGUMENT + ErrProgressionNoCount = runtime.NewError("progression no count associated", 3) // INVALID_ARGUMENT + ErrProgressionAlreadyUnlocked = runtime.NewError("progression already unlocked", 3) // INVALID_ARGUMENT +) + +// ProgressionConfig is the data definition for a ProgressionSystem type. +type ProgressionConfig struct { + Progressions map[string]*ProgressionConfigProgression `json:"progressions,omitempty"` +} + +type ProgressionConfigProgression struct { + Name string `json:"name,omitempty"` + Description string `json:"description,omitempty"` + Category string `json:"category,omitempty"` + AdditionalProperties map[string]string `json:"additional_properties,omitempty"` + Preconditions *ProgressionPreconditionsBlock `json:"preconditions,omitempty"` + ResetSchedule string `json:"reset_schedule,omitempty"` + UnconditionalUpdates bool `json:"unconditional_updates,omitempty"` + PermanentUnlock bool `json:"permanent_unlock,omitempty"` +} + +// A ProgressionSystem is a gameplay system which represents a sequence of progression steps. +type ProgressionSystem interface { + System + + // Get returns all or an optionally-filtered set of progressions for the given user. + Get(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, lastKnownProgressions map[string]*Progression) (progressions map[string]*Progression, deltas map[string]*ProgressionDelta, err error) + + // Purchase permanently unlocks a specified progression, if that progression supports this operation. + Purchase(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, progressionID string) (progressions map[string]*Progression, err error) + + // Update a specified progression, if that progression supports this operation. + Update(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, progressionID string, counts map[string]int64) (progressions map[string]*Progression, err error) + + // Reset one or more progressions to clear their progress. Only applies to progression counts and unlock costs. + Reset(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, progressionIDs []string) (progressions map[string]*Progression, err error) +} diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/publisher.go b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/publisher.go new file mode 100644 index 0000000..519627f --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/publisher.go @@ -0,0 +1,55 @@ +// Copyright 2024 Heroic Labs & Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hiro + +import ( + "context" + + "github.com/heroiclabs/nakama-common/runtime" +) + +type PublisherEvent struct { + Name string `json:"name,omitempty"` + Id string `json:"id,omitempty"` + Timestamp int64 `json:"timestamp,omitempty"` + Metadata map[string]string `json:"metadata,omitempty"` + Value string `json:"value,omitempty"` + + // The Hiro system that generated this event. + System System `json:"-"` + // Source ID represents the identifier of the event source, such as an achievement ID. + SourceId string `json:"-"` + // Source represents the configuration of the event source, such as an achievement config. + Source any `json:"-"` +} + +// The Publisher describes a service or similar target implementation that wishes to receive and process +// analytics-style events generated server-side by the various available Hiro systems. +// +// Each Publisher may choose to process or ignore each event as it sees fit. It may also choose to buffer +// events for batch processing at its discretion, but must take care to. +// +// Publisher implementations must safely handle concurrent calls. +// +// Implementations must handle any errors or retries internally, callers will not repeat calls in case +// of errors. +type Publisher interface { + // Authenticate is called every time a user authenticates with Hiro. The 'created' flag is true if this + // is a newly created user account, and each implementation may choose to handle this as it chooses. + Authenticate(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, created bool) + + // Send is called when there are one or more events generated. + Send(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, events []*PublisherEvent) +} diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/reward_mailbox.go b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/reward_mailbox.go new file mode 100644 index 0000000..565b0fa --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/reward_mailbox.go @@ -0,0 +1,50 @@ +// Copyright 2025 Heroic Labs & Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hiro + +import ( + "context" + + "github.com/heroiclabs/nakama-common/runtime" +) + +var ( + ErrRewardMailboxEntryNotFound = runtime.NewError("reward mailbox entry not found", 3) // INVALID_ARGUMENT + ErrRewardMailboxEntryAlreadyClaimed = runtime.NewError("reward mailbox entry already claimed", 3) // INVALID_ARGUMENT +) + +type RewardMailboxConfig struct { + MaxSize int `json:"max_size,omitempty"` +} + +// A RewardMailboxSystem is a gameplay system representing a rewards mailbox for the player to claim from. +type RewardMailboxSystem interface { + System + + // List the reward mailbox. + List(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, limit int, cursor string) (mailboxList *RewardMailboxList, err error) + + // Claim a reward, and optionally remove it from the mailbox. + Claim(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, id string, delete bool) (mailboxEntry *RewardMailboxEntry, err error) + + // Delete a reward from the mailbox, even if it is not yet claimed. + Delete(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, ids []string) error + + // Grant a reward to the user's mailbox. + Grant(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, reward *Reward) (mailboxEntry *RewardMailboxEntry, err error) + + // SetOnClaimReward sets a custom reward function which will run after a mailbox reward is rolled during claiming. + SetOnClaimReward(fn OnReward[*RewardMailboxEntry]) +} diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/stats.go b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/stats.go new file mode 100644 index 0000000..3a36682 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/stats.go @@ -0,0 +1,43 @@ +// Copyright 2023 Heroic Labs & Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hiro + +import ( + "context" + + "github.com/heroiclabs/nakama-common/runtime" +) + +// StatsConfig is the data definition for a StatsSystem type. +type StatsConfig struct { + Whitelist []string `json:"whitelist,omitempty"` + StatsPublic map[string]*StatsConfigStat `json:"stats_public,omitempty"` + StatsPrivate map[string]*StatsConfigStat `json:"stats_private,omitempty"` +} + +type StatsConfigStat struct { + Value int64 `json:"value,omitempty"` + AdditionalProperties map[string]interface{} `json:"additional_properties,omitempty"` +} + +type StatsSystem interface { + System + + // List all private stats for one or more users. + List(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, userIDs []string) (stats map[string]*StatList, err error) + + // Update private stats for a particular user. + Update(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, publicStats []*StatUpdate, privateStats []*StatUpdate) (stats *StatList, err error) +} diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/streaks.go b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/streaks.go new file mode 100644 index 0000000..b5f3fd7 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/streaks.go @@ -0,0 +1,69 @@ +// Copyright 2024 Heroic Labs & Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hiro + +import ( + "context" + + "github.com/heroiclabs/nakama-common/runtime" +) + +var ErrStreakResetInvalid = runtime.NewError("streak reset schedule invalid", 13) + +// StreaksConfig is the data definition for a StreaksSystem type. +type StreaksConfig struct { + Streaks map[string]*StreaksConfigStreak `json:"streaks,omitempty"` +} + +type StreaksConfigStreak struct { + Name string `json:"name,omitempty"` + Description string `json:"description,omitempty"` + Count int64 `json:"count,omitempty"` + MaxCount int64 `json:"max_count,omitempty"` + MaxCountCurrentReset int64 `json:"max_count_current_reset,omitempty"` + IdleCountDecayReset int64 `json:"idle_count_decay_reset,omitempty"` + MaxIdleCountDecay int64 `json:"max_idle_count_decay,omitempty"` + ResetCronexpr string `json:"reset_cronexpr,omitempty"` + Rewards []*StreaksConfigStreakReward `json:"rewards,omitempty"` + StartTimeSec int64 `json:"start_time_sec,omitempty"` + EndTimeSec int64 `json:"end_time_sec,omitempty"` + Disabled bool `json:"disabled,omitempty"` +} + +type StreaksConfigStreakReward struct { + CountMin int64 `json:"count_min,omitempty"` + CountMax int64 `json:"count_max,omitempty"` + Reward *EconomyConfigReward `json:"reward,omitempty"` + Repeatable bool `json:"repeatable,omitempty"` +} + +type StreaksSystem interface { + System + + // List all streaks and their current state and progress for a given user. + List(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string) (streaks map[string]*Streak, err error) + + // Update one or more streaks with the indicated counts for the given user. + Update(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, streakIDs map[string]int64) (streaks map[string]*Streak, err error) + + // Claim rewards for one or more streaks for the given user. + Claim(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, streakIDs []string) (streaks map[string]*Streak, err error) + + // Reset progress on selected streaks for the given user. + Reset(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, streakIDs []string) (streaks map[string]*Streak, err error) + + // SetOnClaimReward sets a custom reward function which will run after a streak's reward is rolled. + SetOnClaimReward(fn OnReward[*StreaksConfigStreak]) +} diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/teams.go b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/teams.go new file mode 100644 index 0000000..0db7d09 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/teams.go @@ -0,0 +1,276 @@ +// Copyright 2023 Heroic Labs & Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hiro + +import ( + "context" + "database/sql" + + "github.com/heroiclabs/nakama-common/runtime" +) + +var ( + ErrTeamNotFound = runtime.NewError("team not found", 3) // INVALID_ARGUMENT + ErrTeamMaxSizeExceeded = runtime.NewError("team max size exceeded", 3) // INVALID_ARGUMENT + ErrTeamAlreadyMember = runtime.NewError("already part of a team", 3) // INVALID_ARGUMENT + + ErrTeamGiftsNotFound = runtime.NewError("team gift not found", 3) // INVALID_ARGUMENT + ErrTeamGiftsNotActive = runtime.NewError("team gift not active", 3) // INVALID_ARGUMENT + ErrTeamGiftsMaxCount = runtime.NewError("team gift max count reached", 3) // INVALID_ARGUMENT + ErrTeamGiftsMaxContributorCount = runtime.NewError("team gift max contributor count reached", 3) // INVALID_ARGUMENT +) + +// TeamsConfig is the data definition for a TeamsSystem type. +type TeamsConfig struct { + InitialMaxTeamSize int `json:"initial_max_team_size,omitempty"` + MaxTeamSize int `json:"max_team_size,omitempty"` + AllowMultipleTeams bool `json:"allow_multiple_teams,omitempty"` + + Wallet *TeamsWalletConfig `json:"wallet,omitempty"` + StoreItems map[string]*TeamEconomyConfigStoreItem `json:"store_items,omitempty"` + Stats *TeamsStatsConfig `json:"stats,omitempty"` + Inventory *TeamsInventoryConfig `json:"inventory,omitempty"` + Achievements *TeamsAchievementsConfig `json:"achievements,omitempty"` + EventLeaderboards *TeamEventLeaderboardsConfig `json:"event_leaderboards,omitempty"` + RewardMailbox *TeamRewardMailboxConfig `json:"reward_mailbox,omitempty"` + Gifts *TeamGiftsConfig `json:"gifts,omitempty"` +} + +type TeamEconomyConfigStoreItem struct { + Category string `json:"category,omitempty"` + Cost *TeamEconomyConfigStoreItemCost `json:"cost,omitempty"` + Description string `json:"description,omitempty"` + Name string `json:"name,omitempty"` + Reward *EconomyConfigReward `json:"reward,omitempty"` + AdditionalProperties map[string]string `json:"additional_properties,omitempty"` + Disabled bool `json:"disabled,omitempty"` + Unavailable bool `json:"unavailable,omitempty"` +} + +type TeamEconomyConfigStoreItemCost struct { + Currencies map[string]int64 `json:"currencies,omitempty"` +} + +type TeamsWalletConfig struct { + Currencies map[string]int64 `json:"currencies,omitempty"` +} + +type TeamsStatsConfig struct { + StatsPublic map[string]*StatsConfigStat `json:"stats_public,omitempty"` + StatsPrivate map[string]*StatsConfigStat `json:"stats_private,omitempty"` +} + +type TeamsInventoryConfig struct { + Items map[string]*InventoryConfigItem `json:"items,omitempty"` + Limits *InventoryConfigLimits `json:"limits,omitempty"` + ItemSets map[string]map[string]bool `json:"-"` // Auto-computed when the config is read or personalized. + + ConfigSource ConfigSource[*InventoryConfigItem] `json:"-"` // Not included in serialization, set dynamically. +} + +type TeamsAchievementsConfig struct { + Achievements map[string]*AchievementsConfigAchievement `json:"achievements,omitempty"` +} + +type TeamEventLeaderboardsConfig struct { + EventLeaderboards map[string]*EventLeaderboardsConfigLeaderboard `json:"event_leaderboards,omitempty"` +} + +type TeamRewardMailboxConfig struct { + MaxSize int `json:"max_size,omitempty"` +} + +type TeamGiftsConfig struct { + Gifts map[string]*TeamGiftsConfigGift `json:"gifts,omitempty"` +} + +type TeamGiftsConfigGift struct { + Name string `json:"name,omitempty"` + Description string `json:"description,omitempty"` + Category string `json:"category,omitempty"` + ResetSchedule string `json:"reset_schedule,omitempty"` + DurationSec int64 `json:"duration_sec,omitempty"` + MaxCount int64 `json:"max_count,omitempty"` + MaxContributorCount int64 `json:"max_contributor_count,omitempty"` + ContributionCost *EconomyConfigReward `json:"contribution_cost,omitempty"` + ContributionReward *EconomyConfigReward `json:"contribution_reward,omitempty"` + Rewards []*TeamGiftsConfigGiftReward `json:"rewards,omitempty"` + AdditionalProperties map[string]interface{} `json:"additional_properties,omitempty"` +} + +type TeamGiftsConfigGiftReward struct { + MinCount int64 `json:"min_count,omitempty"` + ContributorReward *EconomyConfigReward `json:"contributor_reward,omitempty"` + NoncontributorReward *EconomyConfigReward `json:"noncontributor_reward,omitempty"` +} + +// A TeamsSystem is a gameplay system which wraps the groups system in Nakama server. +type TeamsSystem interface { + System + + // SetActivityCalculator specifies a function to use when calculating team activity score. + SetActivityCalculator(fn TeamActivityCalculator) + + // Create makes a new team (i.e. Nakama group) with additional metadata which configures the team. + Create(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, req *TeamCreateRequest) (team *Team, err error) + + // List will return a list of teams which the user can join. + List(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, req *TeamListRequest) (teams *TeamList, err error) + + // Search for teams based on given criteria. + Search(ctx context.Context, db *sql.DB, logger runtime.Logger, nk runtime.NakamaModule, req *TeamSearchRequest) (teams *TeamList, err error) + + // Update changes one or more properties of the team. + Update(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, req *TeamUpdateRequest) (team *Team, err error) + + // Get a team by its identifier. + Get(ctx context.Context, db *sql.DB, logger runtime.Logger, nk runtime.NakamaModule, req *TeamGetRequest) (*Team, error) + + // UserTeamsList fetches user accounts and their associated teams. + UserTeamsList(ctx context.Context, db *sql.DB, logger runtime.Logger, nk runtime.NakamaModule, req *UserTeamsListRequest) (*UserTeamsList, error) + + // WriteChatMessage sends a message to the user's team even when they're not connected on a realtime socket. + WriteChatMessage(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, req *TeamWriteChatMessageRequest) (resp *ChannelMessageAck, err error) + + // UpdateMaxSize sets a new maximum team size for the selected team. + UpdateMaxSize(ctx context.Context, logger runtime.Logger, db *sql.DB, nk runtime.NakamaModule, userID, teamID string, count int, delta bool) error + + // StoreList will get the defined store items available to the team. + StoreList(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, teamID string) (storeItems map[string]*TeamEconomyConfigStoreItem, rewardModifiers []*ActiveRewardModifier, timestamp int64, err error) + + // StorePurchase will validate a purchase and give the user ID the appropriate rewards. + StorePurchase(ctx context.Context, logger runtime.Logger, db *sql.DB, nk runtime.NakamaModule, userID, teamID, itemID string) (updatedWallet map[string]int64, updatedInventory *Inventory, reward *Reward, err error) + + // SetOnPurchaseReward sets a custom reward function which will run after a team store item's reward is rolled. + SetOnPurchaseReward(fn OnTeamReward[*TeamEconomyConfigStoreItem]) + + // WalletGet fetches the wallet for a specified team. + WalletGet(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, teamID string) (*TeamWallet, error) + + // WalletGrant grants currencies to the specified team's wallet. + WalletGrant(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, teamID string, currencies map[string]int64) (*TeamWallet, error) + + // InventoryList will return the items defined as well as the computed item sets for the team by ID. + InventoryList(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, teamID, category string) (items map[string]*InventoryConfigItem, itemSets map[string][]string, err error) + + // InventoryListInventoryItems will return the items which are part of a team's inventory by ID. + InventoryListInventoryItems(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, teamID, category string) (inventory *Inventory, err error) + + // InventoryConsumeItems will deduct the item(s) from the team's inventory and run the consume reward for each one, if defined. + InventoryConsumeItems(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, teamID string, itemIDs, instanceIDs map[string]int64, overConsume bool) (updatedInventory *Inventory, rewards map[string][]*Reward, instanceRewards map[string][]*Reward, err error) + + // InventoryGrantItems will add the item(s) to a team's inventory by ID. + InventoryGrantItems(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, teamID string, itemIDs map[string]int64, ignoreLimits bool) (updatedInventory *Inventory, newItems map[string]*InventoryItem, updatedItems map[string]*InventoryItem, notGrantedItemIDs map[string]int64, err error) + + // InventoryUpdateItems will update the properties which are stored on each item by instance ID for a team. + InventoryUpdateItems(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, teamID string, instanceIDs map[string]*InventoryUpdateItemProperties) (updatedInventory *Inventory, err error) + + // SetOnInventoryConsumeReward sets a custom reward function which will run after a team inventory item consume reward is rolled. + SetOnInventoryConsumeReward(fn OnTeamReward[*InventoryConfigItem]) + + // SetInventoryConfigSource sets a custom additional config lookup function. + SetInventoryConfigSource(fn ConfigSource[*InventoryConfigItem]) + + // ClaimAchievements when one or more achievements whose progress has completed by their IDs. + ClaimAchievements(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, teamID string, achievementIDs []string, claimTotal bool) (achievements map[string]*Achievement, repeatAchievements map[string]*Achievement, err error) + + // GetAchievements returns all achievements available to the user and progress on them. + GetAchievements(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, teamID string) (achievements map[string]*Achievement, repeatAchievements map[string]*Achievement, err error) + + // UpdateAchievements updates progress on one or more achievements by the same amount. + UpdateAchievements(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, teamID string, achievementUpdates map[string]int64) (achievements map[string]*Achievement, repeatAchievements map[string]*Achievement, err error) + + // SetOnAchievementReward sets a custom reward function which will run after an achievement's reward is rolled. + SetOnAchievementReward(fn OnTeamReward[*AchievementsConfigAchievement]) + + // SetOnSubAchievementReward sets a custom reward function which will run after a sub-achievement's reward is rolled. + SetOnSubAchievementReward(fn OnTeamReward[*AchievementsConfigSubAchievement]) + + // SetOnAchievementTotalReward sets a custom reward function which will run after an achievement's total reward is rolled. + SetOnAchievementTotalReward(fn OnTeamReward[*AchievementsConfigAchievement]) + + // ListEventLeaderboard returns available event leaderboards for the team. + ListEventLeaderboard(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, teamID string, withScores bool, categories []string) (eventLeaderboards []*TeamEventLeaderboard, err error) + + // GetEventLeaderboard returns a specified event leaderboard's cohort for the team. + GetEventLeaderboard(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, teamID, eventLeaderboardID string) (eventLeaderboard *TeamEventLeaderboard, err error) + + // RollEventLeaderboard places the team into a new cohort for the specified event leaderboard if possible. + RollEventLeaderboard(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, teamID, eventLeaderboardID string, tier *int, matchmakerProperties map[string]interface{}, metadata map[string]interface{}) (eventLeaderboard *TeamEventLeaderboard, err error) + + // UpdateEventLeaderboard updates the team's score in the specified event leaderboard, and returns the team's updated cohort information. + UpdateEventLeaderboard(ctx context.Context, logger runtime.Logger, db *sql.DB, nk runtime.NakamaModule, userID, teamID, eventLeaderboardID string, score, subscore int64, metadata map[string]interface{}, conditionalMetadataUpdate bool) (eventLeaderboard *TeamEventLeaderboard, err error) + + // ClaimEventLeaderboard claims the team's reward for the given event leaderboard. + ClaimEventLeaderboard(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, teamID, eventLeaderboardID string) (eventLeaderboard *TeamEventLeaderboard, err error) + + // SetOnEventLeaderboardsReward sets a custom reward function which will run after a team event leaderboard's reward is rolled. + SetOnEventLeaderboardsReward(fn OnTeamReward[*EventLeaderboardsConfigLeaderboard]) + + // SetOnEventLeaderboardCohortSelection sets a custom function that can replace the cohort or opponent selection feature of team event leaderboards. + SetOnEventLeaderboardCohortSelection(fn OnTeamEventLeaderboardCohortSelection) + + // DebugFill fills the user's current cohort with dummy teams for all remaining available slots. + DebugFill(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, teamID, eventLeaderboardID string, targetCount int) (eventLeaderboard *TeamEventLeaderboard, err error) + + // DebugRandomScores assigns random scores to the participants of the team's current cohort, except to the team itself. + DebugRandomScores(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, teamID, eventLeaderboardID string, scoreMin, scoreMax, subscoreMin, subscoreMax int64, operator *int) (eventLeaderboard *TeamEventLeaderboard, err error) + + // RewardMailboxList lists the team reward mailbox, from most recent to oldest. + RewardMailboxList(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, teamID string, limit int, cursor string) (mailboxList *RewardMailboxList, err error) + + // RewardMailboxClaim claims a reward and optionally removes it from the team mailbox. + RewardMailboxClaim(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, teamID string, id string, delete bool) (mailboxEntry *RewardMailboxEntry, err error) + + // RewardMailboxDelete deletes a reward from the team mailbox, even if it is not yet claimed. + RewardMailboxDelete(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, teamID string, ids []string) error + + // RewardMailboxGrant grants a reward to the team's mailbox. + RewardMailboxGrant(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, teamID string, reward *Reward) (mailboxEntry *RewardMailboxEntry, err error) + + // SetOnRewardMailboxClaimReward sets a custom reward function which will run after a team mailbox reward is rolled during claiming. + SetOnRewardMailboxClaimReward(fn OnTeamReward[*RewardMailboxEntry]) + + // StatsList retrieves the full list of stats for the specified teams. + StatsList(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, teamIDs []string) (stats map[string]*StatList, err error) + + // StatsUpdate updates public and private stats for the specified team. + StatsUpdate(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, teamID string, publicStats []*StatUpdate, privateStats []*StatUpdate) (statList *StatList, err error) + + // GiftList lists available team gifts, including past gifts that still have valid rewards to claim. + GiftList(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, teamID string) (giftList *TeamGiftList, err error) + + // GiftContribute updates the specified gift with a given contribution amount. + GiftContribute(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, teamID, giftID string, count int64) (ack *TeamGiftContributeAck, err error) + + // GiftClaim claims all pending rewards for a particular gift. + GiftClaim(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, teamID, giftID string, endTimeSec int64) (ack *TeamGiftClaimAck, err error) + + // SetOnGiftContributeReward sets a custom reward function which will run after a team gift contribution reward is rolled. + SetOnGiftContributeReward(fn OnTeamReward[*TeamGift]) + + // SetOnGiftContributeCost sets a custom reward function which will run after a team gift contribution cost is rolled. + SetOnGiftContributeCost(fn OnTeamReward[*TeamGift]) + + // SetOnGiftClaimReward sets a custom reward function which will run after a team gift reward is rolled during claiming. + SetOnGiftClaimReward(fn OnTeamReward[*TeamGift]) +} + +type OnTeamEventLeaderboardCohortSelection func(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, storageIndex string, eventID string, config *EventLeaderboardsConfigLeaderboard, userID, teamID string, tier int, matchmakerProperties map[string]interface{}) (cohortID string, cohortUserIDs []string, newCohort *EventLeaderboardCohortConfig, err error) + +// TeamActivityCalculator specifies a function used to resolve an activity score for a given team. +// Implementations may inspect the team members list to use individual activity scores as part of +// the calculation. Higher activity values should generally be used to indicate more active teams. +type TeamActivityCalculator func(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, team *Team) int64 diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/tools.go b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/tools.go new file mode 100644 index 0000000..efaf313 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/tools.go @@ -0,0 +1,21 @@ +// Copyright 2023 Heroic Labs & Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build tools + +package hiro + +import ( + _ "google.golang.org/protobuf/cmd/protoc-gen-go" +) diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/tutorials.go b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/tutorials.go new file mode 100644 index 0000000..688efe5 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/tutorials.go @@ -0,0 +1,58 @@ +// Copyright 2023 Heroic Labs & Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hiro + +import ( + "context" + + "github.com/heroiclabs/nakama-common/runtime" +) + +// TutorialsConfig is the data definition for the TutorialsSystem type. +type TutorialsConfig struct { + Tutorials map[string]*TutorialsConfigTutorial `json:"tutorials,omitempty"` +} + +type TutorialsConfigTutorial struct { + StartStep int `json:"start_step,omitempty"` + MaxStep int `json:"max_step,omitempty"` + AdditionalProperties map[string]string `json:"additional_properties,omitempty"` +} + +// The TutorialsSystem is a gameplay system which records progress made through tutorials. +type TutorialsSystem interface { + System + + // Get returns all tutorials defined and progress made by the user towards them. + Get(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string) (tutorials map[string]*Tutorial, err error) + + // Accept marks a tutorial as accepted by the user. + Accept(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, tutorialID string, userID string) (tutorial *Tutorial, err error) + + // Decline marks a tutorial as declined by the user. + Decline(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, tutorialID string, userID string) (tutorial *Tutorial, err error) + + // Abandon marks the tutorial as abandoned by the user. + Abandon(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, tutorialID string, userID string) (tutorial *Tutorial, err error) + + // Update modifies a tutorial by its ID to step through it for the user by ID. + Update(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, tutorialID string, step int) (tutorial map[string]*Tutorial, err error) + + // Reset wipes all known state for the given tutorial identifier(s). + Reset(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, tutorialIDs []string) (tutorials map[string]*Tutorial, err error) + + // SetOnStepCompleted registers a hook that fires on tutorial step completions. + SetOnStepCompleted(func(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, tutorialID string, config *TutorialsConfigTutorial, resetCount, step int, prevStep *int)) +} diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/unlockables.go b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/unlockables.go new file mode 100644 index 0000000..67fb216 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/hiro/unlockables.go @@ -0,0 +1,99 @@ +// Copyright 2023 Heroic Labs & Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package hiro + +import ( + "context" + + "github.com/heroiclabs/nakama-common/runtime" +) + +// UnlockablesConfig is the data definition for a UnlockablesSystem type. +type UnlockablesConfig struct { + ActiveSlots int `json:"active_slots,omitempty"` + MaxActiveSlots int `json:"max_active_slots,omitempty"` + Slots int `json:"slots,omitempty"` + SlotCost *UnlockablesConfigSlotCost `json:"slot_cost,omitempty"` + Unlockables map[string]*UnlockablesConfigUnlockable `json:"unlockables,omitempty"` + MaxQueuedUnlocks int `json:"max_queued_unlocks,omitempty"` + + UnlockableProbabilities []string `json:"-"` +} + +type UnlockablesConfigSlotCost struct { + Items map[string]int64 `json:"items,omitempty"` + Currencies map[string]int64 `json:"currencies,omitempty"` +} + +type UnlockablesConfigUnlockable struct { + Probability int `json:"probability,omitempty"` + Category string `json:"category,omitempty"` + Cost *UnlockablesConfigUnlockableCost `json:"cost,omitempty"` + CostUnitTimeSec int `json:"cost_unit_time_sec,omitempty"` + Description string `json:"description,omitempty"` + Name string `json:"name,omitempty"` + StartCost *UnlockablesConfigUnlockableStartCost `json:"start_cost,omitempty"` + Reward *EconomyConfigReward `json:"reward,omitempty"` + WaitTimeSec int `json:"wait_time_sec,omitempty"` + AdditionalProperties map[string]string `json:"additional_properties,omitempty"` +} + +type UnlockablesConfigUnlockableCost struct { + Items map[string]int64 `json:"items,omitempty"` + Currencies map[string]int64 `json:"currencies,omitempty"` +} + +type UnlockablesConfigUnlockableStartCost struct { + Items map[string]int64 `json:"items,omitempty"` + Currencies map[string]int64 `json:"currencies,omitempty"` +} + +// The UnlockablesSystem is a gameplay system which provides slots to store rewards which can be unlocked over time. +type UnlockablesSystem interface { + System + + // Create will place a new unlockable into a slot either randomly, by ID, or optionally using a custom configuration. + Create(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, unlockableID string, unlockableConfig *UnlockablesConfigUnlockable) (unlockables *UnlockablesList, err error) + + // Get returns all unlockables active for a user by ID. + Get(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string) (unlockables *UnlockablesList, err error) + + // UnlockAdvance will add the given amount of time towards the completion of an unlockable that has been started. + UnlockAdvance(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, instanceID string, seconds int64) (unlockables *UnlockablesList, err error) + + // UnlockStart will begin an unlock of an unlockable by instance ID for a user. + UnlockStart(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, instanceID string) (unlockables *UnlockablesList, err error) + + // PurchaseUnlock will immediately unlock an unlockable with the specified instance ID for a user. + PurchaseUnlock(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, instanceID string) (unlockables *UnlockablesList, err error) + + // PurchaseSlot will create a new slot for a user by ID. + PurchaseSlot(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string) (unlockables *UnlockablesList, err error) + + // Claim an unlockable which has been unlocked by instance ID for the user. + Claim(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID, instanceID string) (reward *UnlockablesReward, err error) + + // QueueAdd adds one or more unlockable instance IDs to the queue to be unlocked as soon as an active slot is available. + QueueAdd(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, instanceIDs []string) (unlockables *UnlockablesList, err error) + + // QueueRemove removes one or more unlockable instance IDs from the unlock queue, unless they have started unlocking already. + QueueRemove(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, instanceIDs []string) (unlockables *UnlockablesList, err error) + + // QueueSet replaces the entirety of the queue with the specified instance IDs, or wipes the queue if no instance IDs are given. + QueueSet(ctx context.Context, logger runtime.Logger, nk runtime.NakamaModule, userID string, instanceIDs []string) (unlockables *UnlockablesList, err error) + + // SetOnClaimReward sets a custom reward function which will run after an unlockable's reward is rolled. + SetOnClaimReward(fn OnReward[*UnlockablesConfigUnlockable]) +} diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/LICENSE b/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/api/api.pb.go b/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/api/api.pb.go new file mode 100644 index 0000000..44d9252 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/api/api.pb.go @@ -0,0 +1,12370 @@ +// Copyright 2019 The Nakama Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//* +// The Nakama server RPC protocol for games and apps. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc v6.32.0 +// source: api.proto + +package api + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Validation Provider, +type StoreProvider int32 + +const ( + // Apple App Store + StoreProvider_APPLE_APP_STORE StoreProvider = 0 + // Google Play Store + StoreProvider_GOOGLE_PLAY_STORE StoreProvider = 1 + // Huawei App Gallery + StoreProvider_HUAWEI_APP_GALLERY StoreProvider = 2 + // Facebook Instant Store + StoreProvider_FACEBOOK_INSTANT_STORE StoreProvider = 3 +) + +// Enum value maps for StoreProvider. +var ( + StoreProvider_name = map[int32]string{ + 0: "APPLE_APP_STORE", + 1: "GOOGLE_PLAY_STORE", + 2: "HUAWEI_APP_GALLERY", + 3: "FACEBOOK_INSTANT_STORE", + } + StoreProvider_value = map[string]int32{ + "APPLE_APP_STORE": 0, + "GOOGLE_PLAY_STORE": 1, + "HUAWEI_APP_GALLERY": 2, + "FACEBOOK_INSTANT_STORE": 3, + } +) + +func (x StoreProvider) Enum() *StoreProvider { + p := new(StoreProvider) + *p = x + return p +} + +func (x StoreProvider) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (StoreProvider) Descriptor() protoreflect.EnumDescriptor { + return file_api_proto_enumTypes[0].Descriptor() +} + +func (StoreProvider) Type() protoreflect.EnumType { + return &file_api_proto_enumTypes[0] +} + +func (x StoreProvider) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use StoreProvider.Descriptor instead. +func (StoreProvider) EnumDescriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{0} +} + +// Environment where a purchase/subscription took place, +type StoreEnvironment int32 + +const ( + // Unknown environment. + StoreEnvironment_UNKNOWN StoreEnvironment = 0 + // Sandbox/test environment. + StoreEnvironment_SANDBOX StoreEnvironment = 1 + // Production environment. + StoreEnvironment_PRODUCTION StoreEnvironment = 2 +) + +// Enum value maps for StoreEnvironment. +var ( + StoreEnvironment_name = map[int32]string{ + 0: "UNKNOWN", + 1: "SANDBOX", + 2: "PRODUCTION", + } + StoreEnvironment_value = map[string]int32{ + "UNKNOWN": 0, + "SANDBOX": 1, + "PRODUCTION": 2, + } +) + +func (x StoreEnvironment) Enum() *StoreEnvironment { + p := new(StoreEnvironment) + *p = x + return p +} + +func (x StoreEnvironment) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (StoreEnvironment) Descriptor() protoreflect.EnumDescriptor { + return file_api_proto_enumTypes[1].Descriptor() +} + +func (StoreEnvironment) Type() protoreflect.EnumType { + return &file_api_proto_enumTypes[1] +} + +func (x StoreEnvironment) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use StoreEnvironment.Descriptor instead. +func (StoreEnvironment) EnumDescriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{1} +} + +// Operator that can be used to override the one set in the leaderboard. +type Operator int32 + +const ( + // Do not override the leaderboard operator. + Operator_NO_OVERRIDE Operator = 0 + // Override the leaderboard operator with BEST. + Operator_BEST Operator = 1 + // Override the leaderboard operator with SET. + Operator_SET Operator = 2 + // Override the leaderboard operator with INCREMENT. + Operator_INCREMENT Operator = 3 + // Override the leaderboard operator with DECREMENT. + Operator_DECREMENT Operator = 4 +) + +// Enum value maps for Operator. +var ( + Operator_name = map[int32]string{ + 0: "NO_OVERRIDE", + 1: "BEST", + 2: "SET", + 3: "INCREMENT", + 4: "DECREMENT", + } + Operator_value = map[string]int32{ + "NO_OVERRIDE": 0, + "BEST": 1, + "SET": 2, + "INCREMENT": 3, + "DECREMENT": 4, + } +) + +func (x Operator) Enum() *Operator { + p := new(Operator) + *p = x + return p +} + +func (x Operator) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Operator) Descriptor() protoreflect.EnumDescriptor { + return file_api_proto_enumTypes[2].Descriptor() +} + +func (Operator) Type() protoreflect.EnumType { + return &file_api_proto_enumTypes[2] +} + +func (x Operator) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Operator.Descriptor instead. +func (Operator) EnumDescriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{2} +} + +// The friendship status. +type Friend_State int32 + +const ( + // The user is a friend of the current user. + Friend_FRIEND Friend_State = 0 + // The current user has sent an invite to the user. + Friend_INVITE_SENT Friend_State = 1 + // The current user has received an invite from this user. + Friend_INVITE_RECEIVED Friend_State = 2 + // The current user has blocked this user. + Friend_BLOCKED Friend_State = 3 +) + +// Enum value maps for Friend_State. +var ( + Friend_State_name = map[int32]string{ + 0: "FRIEND", + 1: "INVITE_SENT", + 2: "INVITE_RECEIVED", + 3: "BLOCKED", + } + Friend_State_value = map[string]int32{ + "FRIEND": 0, + "INVITE_SENT": 1, + "INVITE_RECEIVED": 2, + "BLOCKED": 3, + } +) + +func (x Friend_State) Enum() *Friend_State { + p := new(Friend_State) + *p = x + return p +} + +func (x Friend_State) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Friend_State) Descriptor() protoreflect.EnumDescriptor { + return file_api_proto_enumTypes[3].Descriptor() +} + +func (Friend_State) Type() protoreflect.EnumType { + return &file_api_proto_enumTypes[3] +} + +func (x Friend_State) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Friend_State.Descriptor instead. +func (Friend_State) EnumDescriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{37, 0} +} + +// The group role status. +type GroupUserList_GroupUser_State int32 + +const ( + // The user is a superadmin with full control of the group. + GroupUserList_GroupUser_SUPERADMIN GroupUserList_GroupUser_State = 0 + // The user is an admin with additional privileges. + GroupUserList_GroupUser_ADMIN GroupUserList_GroupUser_State = 1 + // The user is a regular member. + GroupUserList_GroupUser_MEMBER GroupUserList_GroupUser_State = 2 + // The user has requested to join the group + GroupUserList_GroupUser_JOIN_REQUEST GroupUserList_GroupUser_State = 3 +) + +// Enum value maps for GroupUserList_GroupUser_State. +var ( + GroupUserList_GroupUser_State_name = map[int32]string{ + 0: "SUPERADMIN", + 1: "ADMIN", + 2: "MEMBER", + 3: "JOIN_REQUEST", + } + GroupUserList_GroupUser_State_value = map[string]int32{ + "SUPERADMIN": 0, + "ADMIN": 1, + "MEMBER": 2, + "JOIN_REQUEST": 3, + } +) + +func (x GroupUserList_GroupUser_State) Enum() *GroupUserList_GroupUser_State { + p := new(GroupUserList_GroupUser_State) + *p = x + return p +} + +func (x GroupUserList_GroupUser_State) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GroupUserList_GroupUser_State) Descriptor() protoreflect.EnumDescriptor { + return file_api_proto_enumTypes[4].Descriptor() +} + +func (GroupUserList_GroupUser_State) Type() protoreflect.EnumType { + return &file_api_proto_enumTypes[4] +} + +func (x GroupUserList_GroupUser_State) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use GroupUserList_GroupUser_State.Descriptor instead. +func (GroupUserList_GroupUser_State) EnumDescriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{44, 0, 0} +} + +// The group role status. +type UserGroupList_UserGroup_State int32 + +const ( + // The user is a superadmin with full control of the group. + UserGroupList_UserGroup_SUPERADMIN UserGroupList_UserGroup_State = 0 + // The user is an admin with additional privileges. + UserGroupList_UserGroup_ADMIN UserGroupList_UserGroup_State = 1 + // The user is a regular member. + UserGroupList_UserGroup_MEMBER UserGroupList_UserGroup_State = 2 + // The user has requested to join the group + UserGroupList_UserGroup_JOIN_REQUEST UserGroupList_UserGroup_State = 3 +) + +// Enum value maps for UserGroupList_UserGroup_State. +var ( + UserGroupList_UserGroup_State_name = map[int32]string{ + 0: "SUPERADMIN", + 1: "ADMIN", + 2: "MEMBER", + 3: "JOIN_REQUEST", + } + UserGroupList_UserGroup_State_value = map[string]int32{ + "SUPERADMIN": 0, + "ADMIN": 1, + "MEMBER": 2, + "JOIN_REQUEST": 3, + } +) + +func (x UserGroupList_UserGroup_State) Enum() *UserGroupList_UserGroup_State { + p := new(UserGroupList_UserGroup_State) + *p = x + return p +} + +func (x UserGroupList_UserGroup_State) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (UserGroupList_UserGroup_State) Descriptor() protoreflect.EnumDescriptor { + return file_api_proto_enumTypes[5].Descriptor() +} + +func (UserGroupList_UserGroup_State) Type() protoreflect.EnumType { + return &file_api_proto_enumTypes[5] +} + +func (x UserGroupList_UserGroup_State) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use UserGroupList_UserGroup_State.Descriptor instead. +func (UserGroupList_UserGroup_State) EnumDescriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{95, 0, 0} +} + +// A user with additional account details. Always the current user. +type Account struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The user object. + User *User `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` + // The user's wallet data. + Wallet string `protobuf:"bytes,2,opt,name=wallet,proto3" json:"wallet,omitempty"` + // The email address of the user. + Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"` + // The devices which belong to the user's account. + Devices []*AccountDevice `protobuf:"bytes,4,rep,name=devices,proto3" json:"devices,omitempty"` + // The custom id in the user's account. + CustomId string `protobuf:"bytes,5,opt,name=custom_id,json=customId,proto3" json:"custom_id,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the user's email was verified. + VerifyTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=verify_time,json=verifyTime,proto3" json:"verify_time,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the user's account was disabled/banned. + DisableTime *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=disable_time,json=disableTime,proto3" json:"disable_time,omitempty"` +} + +func (x *Account) Reset() { + *x = Account{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Account) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Account) ProtoMessage() {} + +func (x *Account) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Account.ProtoReflect.Descriptor instead. +func (*Account) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{0} +} + +func (x *Account) GetUser() *User { + if x != nil { + return x.User + } + return nil +} + +func (x *Account) GetWallet() string { + if x != nil { + return x.Wallet + } + return "" +} + +func (x *Account) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +func (x *Account) GetDevices() []*AccountDevice { + if x != nil { + return x.Devices + } + return nil +} + +func (x *Account) GetCustomId() string { + if x != nil { + return x.CustomId + } + return "" +} + +func (x *Account) GetVerifyTime() *timestamppb.Timestamp { + if x != nil { + return x.VerifyTime + } + return nil +} + +func (x *Account) GetDisableTime() *timestamppb.Timestamp { + if x != nil { + return x.DisableTime + } + return nil +} + +// Obtain a new authentication token using a refresh token. +type AccountRefresh struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Refresh token. + Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + // Extra information that will be bundled in the session token. + Vars map[string]string `protobuf:"bytes,2,rep,name=vars,proto3" json:"vars,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *AccountRefresh) Reset() { + *x = AccountRefresh{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccountRefresh) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccountRefresh) ProtoMessage() {} + +func (x *AccountRefresh) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccountRefresh.ProtoReflect.Descriptor instead. +func (*AccountRefresh) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{1} +} + +func (x *AccountRefresh) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +func (x *AccountRefresh) GetVars() map[string]string { + if x != nil { + return x.Vars + } + return nil +} + +// Send a Apple Sign In token to the server. Used with authenticate/link/unlink. +type AccountApple struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID token received from Apple to validate. + Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + // Extra information that will be bundled in the session token. + Vars map[string]string `protobuf:"bytes,2,rep,name=vars,proto3" json:"vars,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *AccountApple) Reset() { + *x = AccountApple{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccountApple) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccountApple) ProtoMessage() {} + +func (x *AccountApple) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccountApple.ProtoReflect.Descriptor instead. +func (*AccountApple) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{2} +} + +func (x *AccountApple) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +func (x *AccountApple) GetVars() map[string]string { + if x != nil { + return x.Vars + } + return nil +} + +// Send a custom ID to the server. Used with authenticate/link/unlink. +type AccountCustom struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A custom identifier. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Extra information that will be bundled in the session token. + Vars map[string]string `protobuf:"bytes,2,rep,name=vars,proto3" json:"vars,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *AccountCustom) Reset() { + *x = AccountCustom{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccountCustom) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccountCustom) ProtoMessage() {} + +func (x *AccountCustom) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccountCustom.ProtoReflect.Descriptor instead. +func (*AccountCustom) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{3} +} + +func (x *AccountCustom) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *AccountCustom) GetVars() map[string]string { + if x != nil { + return x.Vars + } + return nil +} + +// Send a device to the server. Used with authenticate/link/unlink and user. +type AccountDevice struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A device identifier. Should be obtained by a platform-specific device API. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Extra information that will be bundled in the session token. + Vars map[string]string `protobuf:"bytes,2,rep,name=vars,proto3" json:"vars,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *AccountDevice) Reset() { + *x = AccountDevice{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccountDevice) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccountDevice) ProtoMessage() {} + +func (x *AccountDevice) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccountDevice.ProtoReflect.Descriptor instead. +func (*AccountDevice) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{4} +} + +func (x *AccountDevice) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *AccountDevice) GetVars() map[string]string { + if x != nil { + return x.Vars + } + return nil +} + +// Send an email with password to the server. Used with authenticate/link/unlink. +type AccountEmail struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A valid RFC-5322 email address. + Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` + // A password for the user account. + Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` // Ignored with unlink operations. + // Extra information that will be bundled in the session token. + Vars map[string]string `protobuf:"bytes,3,rep,name=vars,proto3" json:"vars,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *AccountEmail) Reset() { + *x = AccountEmail{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccountEmail) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccountEmail) ProtoMessage() {} + +func (x *AccountEmail) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccountEmail.ProtoReflect.Descriptor instead. +func (*AccountEmail) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{5} +} + +func (x *AccountEmail) GetEmail() string { + if x != nil { + return x.Email + } + return "" +} + +func (x *AccountEmail) GetPassword() string { + if x != nil { + return x.Password + } + return "" +} + +func (x *AccountEmail) GetVars() map[string]string { + if x != nil { + return x.Vars + } + return nil +} + +// Send a Facebook token to the server. Used with authenticate/link/unlink. +type AccountFacebook struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The OAuth token received from Facebook to access their profile API. + Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + // Extra information that will be bundled in the session token. + Vars map[string]string `protobuf:"bytes,2,rep,name=vars,proto3" json:"vars,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *AccountFacebook) Reset() { + *x = AccountFacebook{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccountFacebook) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccountFacebook) ProtoMessage() {} + +func (x *AccountFacebook) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccountFacebook.ProtoReflect.Descriptor instead. +func (*AccountFacebook) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{6} +} + +func (x *AccountFacebook) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +func (x *AccountFacebook) GetVars() map[string]string { + if x != nil { + return x.Vars + } + return nil +} + +// Send a Facebook Instant Game token to the server. Used with authenticate/link/unlink. +type AccountFacebookInstantGame struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The OAuth token received from a Facebook Instant Game that may be decoded with the Application Secret (must be available with the nakama configuration) + SignedPlayerInfo string `protobuf:"bytes,1,opt,name=signed_player_info,json=signedPlayerInfo,proto3" json:"signed_player_info,omitempty"` + // Extra information that will be bundled in the session token. + Vars map[string]string `protobuf:"bytes,2,rep,name=vars,proto3" json:"vars,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *AccountFacebookInstantGame) Reset() { + *x = AccountFacebookInstantGame{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccountFacebookInstantGame) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccountFacebookInstantGame) ProtoMessage() {} + +func (x *AccountFacebookInstantGame) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccountFacebookInstantGame.ProtoReflect.Descriptor instead. +func (*AccountFacebookInstantGame) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{7} +} + +func (x *AccountFacebookInstantGame) GetSignedPlayerInfo() string { + if x != nil { + return x.SignedPlayerInfo + } + return "" +} + +func (x *AccountFacebookInstantGame) GetVars() map[string]string { + if x != nil { + return x.Vars + } + return nil +} + +// Send Apple's Game Center account credentials to the server. Used with authenticate/link/unlink. +type AccountGameCenter struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Player ID (generated by GameCenter). + PlayerId string `protobuf:"bytes,1,opt,name=player_id,json=playerId,proto3" json:"player_id,omitempty"` + // Bundle ID (generated by GameCenter). + BundleId string `protobuf:"bytes,2,opt,name=bundle_id,json=bundleId,proto3" json:"bundle_id,omitempty"` + // Time since UNIX epoch when the signature was created. + TimestampSeconds int64 `protobuf:"varint,3,opt,name=timestamp_seconds,json=timestampSeconds,proto3" json:"timestamp_seconds,omitempty"` + // A random "NSString" used to compute the hash and keep it randomized. + Salt string `protobuf:"bytes,4,opt,name=salt,proto3" json:"salt,omitempty"` + // The verification signature data generated. + Signature string `protobuf:"bytes,5,opt,name=signature,proto3" json:"signature,omitempty"` + // The URL for the public encryption key. + PublicKeyUrl string `protobuf:"bytes,6,opt,name=public_key_url,json=publicKeyUrl,proto3" json:"public_key_url,omitempty"` + // Extra information that will be bundled in the session token. + Vars map[string]string `protobuf:"bytes,7,rep,name=vars,proto3" json:"vars,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *AccountGameCenter) Reset() { + *x = AccountGameCenter{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccountGameCenter) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccountGameCenter) ProtoMessage() {} + +func (x *AccountGameCenter) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccountGameCenter.ProtoReflect.Descriptor instead. +func (*AccountGameCenter) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{8} +} + +func (x *AccountGameCenter) GetPlayerId() string { + if x != nil { + return x.PlayerId + } + return "" +} + +func (x *AccountGameCenter) GetBundleId() string { + if x != nil { + return x.BundleId + } + return "" +} + +func (x *AccountGameCenter) GetTimestampSeconds() int64 { + if x != nil { + return x.TimestampSeconds + } + return 0 +} + +func (x *AccountGameCenter) GetSalt() string { + if x != nil { + return x.Salt + } + return "" +} + +func (x *AccountGameCenter) GetSignature() string { + if x != nil { + return x.Signature + } + return "" +} + +func (x *AccountGameCenter) GetPublicKeyUrl() string { + if x != nil { + return x.PublicKeyUrl + } + return "" +} + +func (x *AccountGameCenter) GetVars() map[string]string { + if x != nil { + return x.Vars + } + return nil +} + +// Send a Google token to the server. Used with authenticate/link/unlink. +type AccountGoogle struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The OAuth token received from Google to access their profile API. + Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + // Extra information that will be bundled in the session token. + Vars map[string]string `protobuf:"bytes,2,rep,name=vars,proto3" json:"vars,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *AccountGoogle) Reset() { + *x = AccountGoogle{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccountGoogle) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccountGoogle) ProtoMessage() {} + +func (x *AccountGoogle) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccountGoogle.ProtoReflect.Descriptor instead. +func (*AccountGoogle) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{9} +} + +func (x *AccountGoogle) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +func (x *AccountGoogle) GetVars() map[string]string { + if x != nil { + return x.Vars + } + return nil +} + +// Send a Steam token to the server. Used with authenticate/link/unlink. +type AccountSteam struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The account token received from Steam to access their profile API. + Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + // Extra information that will be bundled in the session token. + Vars map[string]string `protobuf:"bytes,2,rep,name=vars,proto3" json:"vars,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *AccountSteam) Reset() { + *x = AccountSteam{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccountSteam) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccountSteam) ProtoMessage() {} + +func (x *AccountSteam) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccountSteam.ProtoReflect.Descriptor instead. +func (*AccountSteam) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{10} +} + +func (x *AccountSteam) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +func (x *AccountSteam) GetVars() map[string]string { + if x != nil { + return x.Vars + } + return nil +} + +// Add one or more friends to the current user. +type AddFriendsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The account id of a user. + Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` + // The account username of a user. + Usernames []string `protobuf:"bytes,2,rep,name=usernames,proto3" json:"usernames,omitempty"` + // Optional metadata to add to friends. + Metadata string `protobuf:"bytes,3,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *AddFriendsRequest) Reset() { + *x = AddFriendsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AddFriendsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AddFriendsRequest) ProtoMessage() {} + +func (x *AddFriendsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AddFriendsRequest.ProtoReflect.Descriptor instead. +func (*AddFriendsRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{11} +} + +func (x *AddFriendsRequest) GetIds() []string { + if x != nil { + return x.Ids + } + return nil +} + +func (x *AddFriendsRequest) GetUsernames() []string { + if x != nil { + return x.Usernames + } + return nil +} + +func (x *AddFriendsRequest) GetMetadata() string { + if x != nil { + return x.Metadata + } + return "" +} + +// Add users to a group. +type AddGroupUsersRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The group to add users to. + GroupId string `protobuf:"bytes,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + // The users to add. + UserIds []string `protobuf:"bytes,2,rep,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` +} + +func (x *AddGroupUsersRequest) Reset() { + *x = AddGroupUsersRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AddGroupUsersRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AddGroupUsersRequest) ProtoMessage() {} + +func (x *AddGroupUsersRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AddGroupUsersRequest.ProtoReflect.Descriptor instead. +func (*AddGroupUsersRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{12} +} + +func (x *AddGroupUsersRequest) GetGroupId() string { + if x != nil { + return x.GroupId + } + return "" +} + +func (x *AddGroupUsersRequest) GetUserIds() []string { + if x != nil { + return x.UserIds + } + return nil +} + +// Authenticate against the server with a refresh token. +type SessionRefreshRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Refresh token. + Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + // Extra information that will be bundled in the session token. + Vars map[string]string `protobuf:"bytes,2,rep,name=vars,proto3" json:"vars,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *SessionRefreshRequest) Reset() { + *x = SessionRefreshRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SessionRefreshRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SessionRefreshRequest) ProtoMessage() {} + +func (x *SessionRefreshRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SessionRefreshRequest.ProtoReflect.Descriptor instead. +func (*SessionRefreshRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{13} +} + +func (x *SessionRefreshRequest) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +func (x *SessionRefreshRequest) GetVars() map[string]string { + if x != nil { + return x.Vars + } + return nil +} + +// Log out a session, invalidate a refresh token, or log out all sessions/refresh tokens for a user. +type SessionLogoutRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Session token to log out. + Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + // Refresh token to invalidate. + RefreshToken string `protobuf:"bytes,2,opt,name=refresh_token,json=refreshToken,proto3" json:"refresh_token,omitempty"` +} + +func (x *SessionLogoutRequest) Reset() { + *x = SessionLogoutRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SessionLogoutRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SessionLogoutRequest) ProtoMessage() {} + +func (x *SessionLogoutRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SessionLogoutRequest.ProtoReflect.Descriptor instead. +func (*SessionLogoutRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{14} +} + +func (x *SessionLogoutRequest) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +func (x *SessionLogoutRequest) GetRefreshToken() string { + if x != nil { + return x.RefreshToken + } + return "" +} + +// Authenticate against the server with Apple Sign In. +type AuthenticateAppleRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The Apple account details. + Account *AccountApple `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` + // Register the account if the user does not already exist. + Create *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=create,proto3" json:"create,omitempty"` + // Set the username on the account at register. Must be unique. + Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` +} + +func (x *AuthenticateAppleRequest) Reset() { + *x = AuthenticateAppleRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuthenticateAppleRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthenticateAppleRequest) ProtoMessage() {} + +func (x *AuthenticateAppleRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuthenticateAppleRequest.ProtoReflect.Descriptor instead. +func (*AuthenticateAppleRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{15} +} + +func (x *AuthenticateAppleRequest) GetAccount() *AccountApple { + if x != nil { + return x.Account + } + return nil +} + +func (x *AuthenticateAppleRequest) GetCreate() *wrapperspb.BoolValue { + if x != nil { + return x.Create + } + return nil +} + +func (x *AuthenticateAppleRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +// Authenticate against the server with a custom ID. +type AuthenticateCustomRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The custom account details. + Account *AccountCustom `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` + // Register the account if the user does not already exist. + Create *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=create,proto3" json:"create,omitempty"` + // Set the username on the account at register. Must be unique. + Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` +} + +func (x *AuthenticateCustomRequest) Reset() { + *x = AuthenticateCustomRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuthenticateCustomRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthenticateCustomRequest) ProtoMessage() {} + +func (x *AuthenticateCustomRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuthenticateCustomRequest.ProtoReflect.Descriptor instead. +func (*AuthenticateCustomRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{16} +} + +func (x *AuthenticateCustomRequest) GetAccount() *AccountCustom { + if x != nil { + return x.Account + } + return nil +} + +func (x *AuthenticateCustomRequest) GetCreate() *wrapperspb.BoolValue { + if x != nil { + return x.Create + } + return nil +} + +func (x *AuthenticateCustomRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +// Authenticate against the server with a device ID. +type AuthenticateDeviceRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The device account details. + Account *AccountDevice `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` + // Register the account if the user does not already exist. + Create *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=create,proto3" json:"create,omitempty"` + // Set the username on the account at register. Must be unique. + Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` +} + +func (x *AuthenticateDeviceRequest) Reset() { + *x = AuthenticateDeviceRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuthenticateDeviceRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthenticateDeviceRequest) ProtoMessage() {} + +func (x *AuthenticateDeviceRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuthenticateDeviceRequest.ProtoReflect.Descriptor instead. +func (*AuthenticateDeviceRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{17} +} + +func (x *AuthenticateDeviceRequest) GetAccount() *AccountDevice { + if x != nil { + return x.Account + } + return nil +} + +func (x *AuthenticateDeviceRequest) GetCreate() *wrapperspb.BoolValue { + if x != nil { + return x.Create + } + return nil +} + +func (x *AuthenticateDeviceRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +// Authenticate against the server with email+password. +type AuthenticateEmailRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The email account details. + Account *AccountEmail `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` + // Register the account if the user does not already exist. + Create *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=create,proto3" json:"create,omitempty"` + // Set the username on the account at register. Must be unique. + Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` +} + +func (x *AuthenticateEmailRequest) Reset() { + *x = AuthenticateEmailRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuthenticateEmailRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthenticateEmailRequest) ProtoMessage() {} + +func (x *AuthenticateEmailRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuthenticateEmailRequest.ProtoReflect.Descriptor instead. +func (*AuthenticateEmailRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{18} +} + +func (x *AuthenticateEmailRequest) GetAccount() *AccountEmail { + if x != nil { + return x.Account + } + return nil +} + +func (x *AuthenticateEmailRequest) GetCreate() *wrapperspb.BoolValue { + if x != nil { + return x.Create + } + return nil +} + +func (x *AuthenticateEmailRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +// Authenticate against the server with Facebook. +type AuthenticateFacebookRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The Facebook account details. + Account *AccountFacebook `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` + // Register the account if the user does not already exist. + Create *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=create,proto3" json:"create,omitempty"` + // Set the username on the account at register. Must be unique. + Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` + // Import Facebook friends for the user. + Sync *wrapperspb.BoolValue `protobuf:"bytes,4,opt,name=sync,proto3" json:"sync,omitempty"` +} + +func (x *AuthenticateFacebookRequest) Reset() { + *x = AuthenticateFacebookRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuthenticateFacebookRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthenticateFacebookRequest) ProtoMessage() {} + +func (x *AuthenticateFacebookRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuthenticateFacebookRequest.ProtoReflect.Descriptor instead. +func (*AuthenticateFacebookRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{19} +} + +func (x *AuthenticateFacebookRequest) GetAccount() *AccountFacebook { + if x != nil { + return x.Account + } + return nil +} + +func (x *AuthenticateFacebookRequest) GetCreate() *wrapperspb.BoolValue { + if x != nil { + return x.Create + } + return nil +} + +func (x *AuthenticateFacebookRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *AuthenticateFacebookRequest) GetSync() *wrapperspb.BoolValue { + if x != nil { + return x.Sync + } + return nil +} + +// Authenticate against the server with Facebook Instant Game token. +type AuthenticateFacebookInstantGameRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The Facebook Instant Game account details. + Account *AccountFacebookInstantGame `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` + // Register the account if the user does not already exist. + Create *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=create,proto3" json:"create,omitempty"` + // Set the username on the account at register. Must be unique. + Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` +} + +func (x *AuthenticateFacebookInstantGameRequest) Reset() { + *x = AuthenticateFacebookInstantGameRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuthenticateFacebookInstantGameRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthenticateFacebookInstantGameRequest) ProtoMessage() {} + +func (x *AuthenticateFacebookInstantGameRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuthenticateFacebookInstantGameRequest.ProtoReflect.Descriptor instead. +func (*AuthenticateFacebookInstantGameRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{20} +} + +func (x *AuthenticateFacebookInstantGameRequest) GetAccount() *AccountFacebookInstantGame { + if x != nil { + return x.Account + } + return nil +} + +func (x *AuthenticateFacebookInstantGameRequest) GetCreate() *wrapperspb.BoolValue { + if x != nil { + return x.Create + } + return nil +} + +func (x *AuthenticateFacebookInstantGameRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +// Authenticate against the server with Apple's Game Center. +type AuthenticateGameCenterRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The Game Center account details. + Account *AccountGameCenter `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` + // Register the account if the user does not already exist. + Create *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=create,proto3" json:"create,omitempty"` + // Set the username on the account at register. Must be unique. + Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` +} + +func (x *AuthenticateGameCenterRequest) Reset() { + *x = AuthenticateGameCenterRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuthenticateGameCenterRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthenticateGameCenterRequest) ProtoMessage() {} + +func (x *AuthenticateGameCenterRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuthenticateGameCenterRequest.ProtoReflect.Descriptor instead. +func (*AuthenticateGameCenterRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{21} +} + +func (x *AuthenticateGameCenterRequest) GetAccount() *AccountGameCenter { + if x != nil { + return x.Account + } + return nil +} + +func (x *AuthenticateGameCenterRequest) GetCreate() *wrapperspb.BoolValue { + if x != nil { + return x.Create + } + return nil +} + +func (x *AuthenticateGameCenterRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +// Authenticate against the server with Google. +type AuthenticateGoogleRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The Google account details. + Account *AccountGoogle `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` + // Register the account if the user does not already exist. + Create *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=create,proto3" json:"create,omitempty"` + // Set the username on the account at register. Must be unique. + Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` +} + +func (x *AuthenticateGoogleRequest) Reset() { + *x = AuthenticateGoogleRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuthenticateGoogleRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthenticateGoogleRequest) ProtoMessage() {} + +func (x *AuthenticateGoogleRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuthenticateGoogleRequest.ProtoReflect.Descriptor instead. +func (*AuthenticateGoogleRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{22} +} + +func (x *AuthenticateGoogleRequest) GetAccount() *AccountGoogle { + if x != nil { + return x.Account + } + return nil +} + +func (x *AuthenticateGoogleRequest) GetCreate() *wrapperspb.BoolValue { + if x != nil { + return x.Create + } + return nil +} + +func (x *AuthenticateGoogleRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +// Authenticate against the server with Steam. +type AuthenticateSteamRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The Steam account details. + Account *AccountSteam `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` + // Register the account if the user does not already exist. + Create *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=create,proto3" json:"create,omitempty"` + // Set the username on the account at register. Must be unique. + Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` + // Import Steam friends for the user. + Sync *wrapperspb.BoolValue `protobuf:"bytes,4,opt,name=sync,proto3" json:"sync,omitempty"` +} + +func (x *AuthenticateSteamRequest) Reset() { + *x = AuthenticateSteamRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuthenticateSteamRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthenticateSteamRequest) ProtoMessage() {} + +func (x *AuthenticateSteamRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AuthenticateSteamRequest.ProtoReflect.Descriptor instead. +func (*AuthenticateSteamRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{23} +} + +func (x *AuthenticateSteamRequest) GetAccount() *AccountSteam { + if x != nil { + return x.Account + } + return nil +} + +func (x *AuthenticateSteamRequest) GetCreate() *wrapperspb.BoolValue { + if x != nil { + return x.Create + } + return nil +} + +func (x *AuthenticateSteamRequest) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *AuthenticateSteamRequest) GetSync() *wrapperspb.BoolValue { + if x != nil { + return x.Sync + } + return nil +} + +// Ban users from a group. +type BanGroupUsersRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The group to ban users from. + GroupId string `protobuf:"bytes,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + // The users to ban. + UserIds []string `protobuf:"bytes,2,rep,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` +} + +func (x *BanGroupUsersRequest) Reset() { + *x = BanGroupUsersRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BanGroupUsersRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BanGroupUsersRequest) ProtoMessage() {} + +func (x *BanGroupUsersRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BanGroupUsersRequest.ProtoReflect.Descriptor instead. +func (*BanGroupUsersRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{24} +} + +func (x *BanGroupUsersRequest) GetGroupId() string { + if x != nil { + return x.GroupId + } + return "" +} + +func (x *BanGroupUsersRequest) GetUserIds() []string { + if x != nil { + return x.UserIds + } + return nil +} + +// Block one or more friends for the current user. +type BlockFriendsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The account id of a user. + Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` + // The account username of a user. + Usernames []string `protobuf:"bytes,2,rep,name=usernames,proto3" json:"usernames,omitempty"` +} + +func (x *BlockFriendsRequest) Reset() { + *x = BlockFriendsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *BlockFriendsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BlockFriendsRequest) ProtoMessage() {} + +func (x *BlockFriendsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BlockFriendsRequest.ProtoReflect.Descriptor instead. +func (*BlockFriendsRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{25} +} + +func (x *BlockFriendsRequest) GetIds() []string { + if x != nil { + return x.Ids + } + return nil +} + +func (x *BlockFriendsRequest) GetUsernames() []string { + if x != nil { + return x.Usernames + } + return nil +} + +// A message sent on a channel. +type ChannelMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The channel this message belongs to. + ChannelId string `protobuf:"bytes,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` + // The unique ID of this message. + MessageId string `protobuf:"bytes,2,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` + // The code representing a message type or category. + Code *wrapperspb.Int32Value `protobuf:"bytes,3,opt,name=code,proto3" json:"code,omitempty"` + // Message sender, usually a user ID. + SenderId string `protobuf:"bytes,4,opt,name=sender_id,json=senderId,proto3" json:"sender_id,omitempty"` + // The username of the message sender, if any. + Username string `protobuf:"bytes,5,opt,name=username,proto3" json:"username,omitempty"` + // The content payload. + Content string `protobuf:"bytes,6,opt,name=content,proto3" json:"content,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the message was created. + CreateTime *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the message was last updated. + UpdateTime *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` + // True if the message was persisted to the channel's history, false otherwise. + Persistent *wrapperspb.BoolValue `protobuf:"bytes,9,opt,name=persistent,proto3" json:"persistent,omitempty"` + // The name of the chat room, or an empty string if this message was not sent through a chat room. + RoomName string `protobuf:"bytes,10,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` + // The ID of the group, or an empty string if this message was not sent through a group channel. + GroupId string `protobuf:"bytes,11,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + // The ID of the first DM user, or an empty string if this message was not sent through a DM chat. + UserIdOne string `protobuf:"bytes,12,opt,name=user_id_one,json=userIdOne,proto3" json:"user_id_one,omitempty"` + // The ID of the second DM user, or an empty string if this message was not sent through a DM chat. + UserIdTwo string `protobuf:"bytes,13,opt,name=user_id_two,json=userIdTwo,proto3" json:"user_id_two,omitempty"` +} + +func (x *ChannelMessage) Reset() { + *x = ChannelMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChannelMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChannelMessage) ProtoMessage() {} + +func (x *ChannelMessage) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChannelMessage.ProtoReflect.Descriptor instead. +func (*ChannelMessage) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{26} +} + +func (x *ChannelMessage) GetChannelId() string { + if x != nil { + return x.ChannelId + } + return "" +} + +func (x *ChannelMessage) GetMessageId() string { + if x != nil { + return x.MessageId + } + return "" +} + +func (x *ChannelMessage) GetCode() *wrapperspb.Int32Value { + if x != nil { + return x.Code + } + return nil +} + +func (x *ChannelMessage) GetSenderId() string { + if x != nil { + return x.SenderId + } + return "" +} + +func (x *ChannelMessage) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *ChannelMessage) GetContent() string { + if x != nil { + return x.Content + } + return "" +} + +func (x *ChannelMessage) GetCreateTime() *timestamppb.Timestamp { + if x != nil { + return x.CreateTime + } + return nil +} + +func (x *ChannelMessage) GetUpdateTime() *timestamppb.Timestamp { + if x != nil { + return x.UpdateTime + } + return nil +} + +func (x *ChannelMessage) GetPersistent() *wrapperspb.BoolValue { + if x != nil { + return x.Persistent + } + return nil +} + +func (x *ChannelMessage) GetRoomName() string { + if x != nil { + return x.RoomName + } + return "" +} + +func (x *ChannelMessage) GetGroupId() string { + if x != nil { + return x.GroupId + } + return "" +} + +func (x *ChannelMessage) GetUserIdOne() string { + if x != nil { + return x.UserIdOne + } + return "" +} + +func (x *ChannelMessage) GetUserIdTwo() string { + if x != nil { + return x.UserIdTwo + } + return "" +} + +// A list of channel messages, usually a result of a list operation. +type ChannelMessageList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A list of messages. + Messages []*ChannelMessage `protobuf:"bytes,1,rep,name=messages,proto3" json:"messages,omitempty"` + // The cursor to send when retrieving the next page, if any. + NextCursor string `protobuf:"bytes,2,opt,name=next_cursor,json=nextCursor,proto3" json:"next_cursor,omitempty"` + // The cursor to send when retrieving the previous page, if any. + PrevCursor string `protobuf:"bytes,3,opt,name=prev_cursor,json=prevCursor,proto3" json:"prev_cursor,omitempty"` + // Cacheable cursor to list newer messages. Durable and designed to be stored, unlike next/prev cursors. + CacheableCursor string `protobuf:"bytes,4,opt,name=cacheable_cursor,json=cacheableCursor,proto3" json:"cacheable_cursor,omitempty"` +} + +func (x *ChannelMessageList) Reset() { + *x = ChannelMessageList{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChannelMessageList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChannelMessageList) ProtoMessage() {} + +func (x *ChannelMessageList) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChannelMessageList.ProtoReflect.Descriptor instead. +func (*ChannelMessageList) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{27} +} + +func (x *ChannelMessageList) GetMessages() []*ChannelMessage { + if x != nil { + return x.Messages + } + return nil +} + +func (x *ChannelMessageList) GetNextCursor() string { + if x != nil { + return x.NextCursor + } + return "" +} + +func (x *ChannelMessageList) GetPrevCursor() string { + if x != nil { + return x.PrevCursor + } + return "" +} + +func (x *ChannelMessageList) GetCacheableCursor() string { + if x != nil { + return x.CacheableCursor + } + return "" +} + +// Create a group with the current user as owner. +type CreateGroupRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A unique name for the group. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // A description for the group. + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + // The language expected to be a tag which follows the BCP-47 spec. + LangTag string `protobuf:"bytes,3,opt,name=lang_tag,json=langTag,proto3" json:"lang_tag,omitempty"` + // A URL for an avatar image. + AvatarUrl string `protobuf:"bytes,4,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` + // Mark a group as open or not where only admins can accept members. + Open bool `protobuf:"varint,5,opt,name=open,proto3" json:"open,omitempty"` + // Maximum number of group members. + MaxCount int32 `protobuf:"varint,6,opt,name=max_count,json=maxCount,proto3" json:"max_count,omitempty"` +} + +func (x *CreateGroupRequest) Reset() { + *x = CreateGroupRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateGroupRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateGroupRequest) ProtoMessage() {} + +func (x *CreateGroupRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[28] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateGroupRequest.ProtoReflect.Descriptor instead. +func (*CreateGroupRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{28} +} + +func (x *CreateGroupRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *CreateGroupRequest) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *CreateGroupRequest) GetLangTag() string { + if x != nil { + return x.LangTag + } + return "" +} + +func (x *CreateGroupRequest) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +func (x *CreateGroupRequest) GetOpen() bool { + if x != nil { + return x.Open + } + return false +} + +func (x *CreateGroupRequest) GetMaxCount() int32 { + if x != nil { + return x.MaxCount + } + return 0 +} + +// Delete one or more friends for the current user. +type DeleteFriendsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The account id of a user. + Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` + // The account username of a user. + Usernames []string `protobuf:"bytes,2,rep,name=usernames,proto3" json:"usernames,omitempty"` +} + +func (x *DeleteFriendsRequest) Reset() { + *x = DeleteFriendsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteFriendsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteFriendsRequest) ProtoMessage() {} + +func (x *DeleteFriendsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[29] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteFriendsRequest.ProtoReflect.Descriptor instead. +func (*DeleteFriendsRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{29} +} + +func (x *DeleteFriendsRequest) GetIds() []string { + if x != nil { + return x.Ids + } + return nil +} + +func (x *DeleteFriendsRequest) GetUsernames() []string { + if x != nil { + return x.Usernames + } + return nil +} + +// Delete a group the user has access to. +type DeleteGroupRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The id of a group. + GroupId string `protobuf:"bytes,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` +} + +func (x *DeleteGroupRequest) Reset() { + *x = DeleteGroupRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteGroupRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteGroupRequest) ProtoMessage() {} + +func (x *DeleteGroupRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[30] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteGroupRequest.ProtoReflect.Descriptor instead. +func (*DeleteGroupRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{30} +} + +func (x *DeleteGroupRequest) GetGroupId() string { + if x != nil { + return x.GroupId + } + return "" +} + +// Delete a leaderboard record. +type DeleteLeaderboardRecordRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The leaderboard ID to delete from. + LeaderboardId string `protobuf:"bytes,1,opt,name=leaderboard_id,json=leaderboardId,proto3" json:"leaderboard_id,omitempty"` +} + +func (x *DeleteLeaderboardRecordRequest) Reset() { + *x = DeleteLeaderboardRecordRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteLeaderboardRecordRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteLeaderboardRecordRequest) ProtoMessage() {} + +func (x *DeleteLeaderboardRecordRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[31] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteLeaderboardRecordRequest.ProtoReflect.Descriptor instead. +func (*DeleteLeaderboardRecordRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{31} +} + +func (x *DeleteLeaderboardRecordRequest) GetLeaderboardId() string { + if x != nil { + return x.LeaderboardId + } + return "" +} + +// Delete one or more notifications for the current user. +type DeleteNotificationsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The id of notifications. + Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` +} + +func (x *DeleteNotificationsRequest) Reset() { + *x = DeleteNotificationsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteNotificationsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteNotificationsRequest) ProtoMessage() {} + +func (x *DeleteNotificationsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[32] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteNotificationsRequest.ProtoReflect.Descriptor instead. +func (*DeleteNotificationsRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{32} +} + +func (x *DeleteNotificationsRequest) GetIds() []string { + if x != nil { + return x.Ids + } + return nil +} + +// Delete a leaderboard record. +type DeleteTournamentRecordRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The tournament ID to delete from. + TournamentId string `protobuf:"bytes,1,opt,name=tournament_id,json=tournamentId,proto3" json:"tournament_id,omitempty"` +} + +func (x *DeleteTournamentRecordRequest) Reset() { + *x = DeleteTournamentRecordRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteTournamentRecordRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteTournamentRecordRequest) ProtoMessage() {} + +func (x *DeleteTournamentRecordRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[33] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteTournamentRecordRequest.ProtoReflect.Descriptor instead. +func (*DeleteTournamentRecordRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{33} +} + +func (x *DeleteTournamentRecordRequest) GetTournamentId() string { + if x != nil { + return x.TournamentId + } + return "" +} + +// Storage objects to delete. +type DeleteStorageObjectId struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The collection which stores the object. + Collection string `protobuf:"bytes,1,opt,name=collection,proto3" json:"collection,omitempty"` + // The key of the object within the collection. + Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` + // The version hash of the object. + Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` +} + +func (x *DeleteStorageObjectId) Reset() { + *x = DeleteStorageObjectId{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteStorageObjectId) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteStorageObjectId) ProtoMessage() {} + +func (x *DeleteStorageObjectId) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[34] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteStorageObjectId.ProtoReflect.Descriptor instead. +func (*DeleteStorageObjectId) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{34} +} + +func (x *DeleteStorageObjectId) GetCollection() string { + if x != nil { + return x.Collection + } + return "" +} + +func (x *DeleteStorageObjectId) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *DeleteStorageObjectId) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +// Batch delete storage objects. +type DeleteStorageObjectsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Batch of storage objects. + ObjectIds []*DeleteStorageObjectId `protobuf:"bytes,1,rep,name=object_ids,json=objectIds,proto3" json:"object_ids,omitempty"` +} + +func (x *DeleteStorageObjectsRequest) Reset() { + *x = DeleteStorageObjectsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeleteStorageObjectsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteStorageObjectsRequest) ProtoMessage() {} + +func (x *DeleteStorageObjectsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[35] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteStorageObjectsRequest.ProtoReflect.Descriptor instead. +func (*DeleteStorageObjectsRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{35} +} + +func (x *DeleteStorageObjectsRequest) GetObjectIds() []*DeleteStorageObjectId { + if x != nil { + return x.ObjectIds + } + return nil +} + +// Represents an event to be passed through the server to registered event handlers. +type Event struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // An event name, type, category, or identifier. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Arbitrary event property values. + Properties map[string]string `protobuf:"bytes,2,rep,name=properties,proto3" json:"properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // The time when the event was triggered. + Timestamp *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + // True if the event came directly from a client call, false otherwise. + External bool `protobuf:"varint,4,opt,name=external,proto3" json:"external,omitempty"` +} + +func (x *Event) Reset() { + *x = Event{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Event) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Event) ProtoMessage() {} + +func (x *Event) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[36] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Event.ProtoReflect.Descriptor instead. +func (*Event) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{36} +} + +func (x *Event) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Event) GetProperties() map[string]string { + if x != nil { + return x.Properties + } + return nil +} + +func (x *Event) GetTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.Timestamp + } + return nil +} + +func (x *Event) GetExternal() bool { + if x != nil { + return x.External + } + return false +} + +// A friend of a user. +type Friend struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The user object. + User *User `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` + // The friend status. + State *wrapperspb.Int32Value `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` // one of "Friend.State". + // Time of the latest relationship update. + UpdateTime *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` + // Metadata. + Metadata string `protobuf:"bytes,4,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *Friend) Reset() { + *x = Friend{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Friend) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Friend) ProtoMessage() {} + +func (x *Friend) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[37] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Friend.ProtoReflect.Descriptor instead. +func (*Friend) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{37} +} + +func (x *Friend) GetUser() *User { + if x != nil { + return x.User + } + return nil +} + +func (x *Friend) GetState() *wrapperspb.Int32Value { + if x != nil { + return x.State + } + return nil +} + +func (x *Friend) GetUpdateTime() *timestamppb.Timestamp { + if x != nil { + return x.UpdateTime + } + return nil +} + +func (x *Friend) GetMetadata() string { + if x != nil { + return x.Metadata + } + return "" +} + +// A collection of zero or more friends of the user. +type FriendList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The Friend objects. + Friends []*Friend `protobuf:"bytes,1,rep,name=friends,proto3" json:"friends,omitempty"` + // Cursor for the next page of results, if any. + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *FriendList) Reset() { + *x = FriendList{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FriendList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FriendList) ProtoMessage() {} + +func (x *FriendList) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[38] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FriendList.ProtoReflect.Descriptor instead. +func (*FriendList) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{38} +} + +func (x *FriendList) GetFriends() []*Friend { + if x != nil { + return x.Friends + } + return nil +} + +func (x *FriendList) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +// A List of friends of friends +type FriendsOfFriendsList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // User friends of friends. + FriendsOfFriends []*FriendsOfFriendsList_FriendOfFriend `protobuf:"bytes,1,rep,name=friends_of_friends,json=friendsOfFriends,proto3" json:"friends_of_friends,omitempty"` + // Cursor for the next page of results, if any. + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *FriendsOfFriendsList) Reset() { + *x = FriendsOfFriendsList{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FriendsOfFriendsList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FriendsOfFriendsList) ProtoMessage() {} + +func (x *FriendsOfFriendsList) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[39] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FriendsOfFriendsList.ProtoReflect.Descriptor instead. +func (*FriendsOfFriendsList) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{39} +} + +func (x *FriendsOfFriendsList) GetFriendsOfFriends() []*FriendsOfFriendsList_FriendOfFriend { + if x != nil { + return x.FriendsOfFriends + } + return nil +} + +func (x *FriendsOfFriendsList) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +// Fetch a batch of zero or more users from the server. +type GetUsersRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The account id of a user. + Ids []string `protobuf:"bytes,1,rep,name=ids,proto3" json:"ids,omitempty"` + // The account username of a user. + Usernames []string `protobuf:"bytes,2,rep,name=usernames,proto3" json:"usernames,omitempty"` + // The Facebook ID of a user. + FacebookIds []string `protobuf:"bytes,3,rep,name=facebook_ids,json=facebookIds,proto3" json:"facebook_ids,omitempty"` +} + +func (x *GetUsersRequest) Reset() { + *x = GetUsersRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetUsersRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetUsersRequest) ProtoMessage() {} + +func (x *GetUsersRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[40] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetUsersRequest.ProtoReflect.Descriptor instead. +func (*GetUsersRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{40} +} + +func (x *GetUsersRequest) GetIds() []string { + if x != nil { + return x.Ids + } + return nil +} + +func (x *GetUsersRequest) GetUsernames() []string { + if x != nil { + return x.Usernames + } + return nil +} + +func (x *GetUsersRequest) GetFacebookIds() []string { + if x != nil { + return x.FacebookIds + } + return nil +} + +// Fetch a subscription by product id. +type GetSubscriptionRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Product id of the subscription + ProductId string `protobuf:"bytes,1,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` +} + +func (x *GetSubscriptionRequest) Reset() { + *x = GetSubscriptionRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetSubscriptionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetSubscriptionRequest) ProtoMessage() {} + +func (x *GetSubscriptionRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[41] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetSubscriptionRequest.ProtoReflect.Descriptor instead. +func (*GetSubscriptionRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{41} +} + +func (x *GetSubscriptionRequest) GetProductId() string { + if x != nil { + return x.ProductId + } + return "" +} + +// A group in the server. +type Group struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The id of a group. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The id of the user who created the group. + CreatorId string `protobuf:"bytes,2,opt,name=creator_id,json=creatorId,proto3" json:"creator_id,omitempty"` + // The unique name of the group. + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + // A description for the group. + Description string `protobuf:"bytes,4,opt,name=description,proto3" json:"description,omitempty"` + // The language expected to be a tag which follows the BCP-47 spec. + LangTag string `protobuf:"bytes,5,opt,name=lang_tag,json=langTag,proto3" json:"lang_tag,omitempty"` + // Additional information stored as a JSON object. + Metadata string `protobuf:"bytes,6,opt,name=metadata,proto3" json:"metadata,omitempty"` + // A URL for an avatar image. + AvatarUrl string `protobuf:"bytes,7,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` + // Anyone can join open groups, otherwise only admins can accept members. + Open *wrapperspb.BoolValue `protobuf:"bytes,8,opt,name=open,proto3" json:"open,omitempty"` + // The current count of all members in the group. + EdgeCount int32 `protobuf:"varint,9,opt,name=edge_count,json=edgeCount,proto3" json:"edge_count,omitempty"` + // The maximum number of members allowed. + MaxCount int32 `protobuf:"varint,10,opt,name=max_count,json=maxCount,proto3" json:"max_count,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the group was created. + CreateTime *timestamppb.Timestamp `protobuf:"bytes,11,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the group was last updated. + UpdateTime *timestamppb.Timestamp `protobuf:"bytes,12,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` +} + +func (x *Group) Reset() { + *x = Group{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Group) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Group) ProtoMessage() {} + +func (x *Group) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[42] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Group.ProtoReflect.Descriptor instead. +func (*Group) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{42} +} + +func (x *Group) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Group) GetCreatorId() string { + if x != nil { + return x.CreatorId + } + return "" +} + +func (x *Group) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Group) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Group) GetLangTag() string { + if x != nil { + return x.LangTag + } + return "" +} + +func (x *Group) GetMetadata() string { + if x != nil { + return x.Metadata + } + return "" +} + +func (x *Group) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +func (x *Group) GetOpen() *wrapperspb.BoolValue { + if x != nil { + return x.Open + } + return nil +} + +func (x *Group) GetEdgeCount() int32 { + if x != nil { + return x.EdgeCount + } + return 0 +} + +func (x *Group) GetMaxCount() int32 { + if x != nil { + return x.MaxCount + } + return 0 +} + +func (x *Group) GetCreateTime() *timestamppb.Timestamp { + if x != nil { + return x.CreateTime + } + return nil +} + +func (x *Group) GetUpdateTime() *timestamppb.Timestamp { + if x != nil { + return x.UpdateTime + } + return nil +} + +// One or more groups returned from a listing operation. +type GroupList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // One or more groups. + Groups []*Group `protobuf:"bytes,1,rep,name=groups,proto3" json:"groups,omitempty"` + // A cursor used to get the next page. + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *GroupList) Reset() { + *x = GroupList{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GroupList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GroupList) ProtoMessage() {} + +func (x *GroupList) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[43] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GroupList.ProtoReflect.Descriptor instead. +func (*GroupList) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{43} +} + +func (x *GroupList) GetGroups() []*Group { + if x != nil { + return x.Groups + } + return nil +} + +func (x *GroupList) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +// A list of users belonging to a group, along with their role. +type GroupUserList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // User-role pairs for a group. + GroupUsers []*GroupUserList_GroupUser `protobuf:"bytes,1,rep,name=group_users,json=groupUsers,proto3" json:"group_users,omitempty"` + // Cursor for the next page of results, if any. + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *GroupUserList) Reset() { + *x = GroupUserList{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GroupUserList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GroupUserList) ProtoMessage() {} + +func (x *GroupUserList) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[44] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GroupUserList.ProtoReflect.Descriptor instead. +func (*GroupUserList) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{44} +} + +func (x *GroupUserList) GetGroupUsers() []*GroupUserList_GroupUser { + if x != nil { + return x.GroupUsers + } + return nil +} + +func (x *GroupUserList) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +// Import Facebook friends into the current user's account. +type ImportFacebookFriendsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The Facebook account details. + Account *AccountFacebook `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` + // Reset the current user's friends list. + Reset_ *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=reset,proto3" json:"reset,omitempty"` +} + +func (x *ImportFacebookFriendsRequest) Reset() { + *x = ImportFacebookFriendsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ImportFacebookFriendsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ImportFacebookFriendsRequest) ProtoMessage() {} + +func (x *ImportFacebookFriendsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[45] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ImportFacebookFriendsRequest.ProtoReflect.Descriptor instead. +func (*ImportFacebookFriendsRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{45} +} + +func (x *ImportFacebookFriendsRequest) GetAccount() *AccountFacebook { + if x != nil { + return x.Account + } + return nil +} + +func (x *ImportFacebookFriendsRequest) GetReset_() *wrapperspb.BoolValue { + if x != nil { + return x.Reset_ + } + return nil +} + +// Import Facebook friends into the current user's account. +type ImportSteamFriendsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The Facebook account details. + Account *AccountSteam `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` + // Reset the current user's friends list. + Reset_ *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=reset,proto3" json:"reset,omitempty"` +} + +func (x *ImportSteamFriendsRequest) Reset() { + *x = ImportSteamFriendsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ImportSteamFriendsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ImportSteamFriendsRequest) ProtoMessage() {} + +func (x *ImportSteamFriendsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[46] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ImportSteamFriendsRequest.ProtoReflect.Descriptor instead. +func (*ImportSteamFriendsRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{46} +} + +func (x *ImportSteamFriendsRequest) GetAccount() *AccountSteam { + if x != nil { + return x.Account + } + return nil +} + +func (x *ImportSteamFriendsRequest) GetReset_() *wrapperspb.BoolValue { + if x != nil { + return x.Reset_ + } + return nil +} + +// Immediately join an open group, or request to join a closed one. +type JoinGroupRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The group ID to join. The group must already exist. + GroupId string `protobuf:"bytes,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` +} + +func (x *JoinGroupRequest) Reset() { + *x = JoinGroupRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *JoinGroupRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*JoinGroupRequest) ProtoMessage() {} + +func (x *JoinGroupRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[47] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use JoinGroupRequest.ProtoReflect.Descriptor instead. +func (*JoinGroupRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{47} +} + +func (x *JoinGroupRequest) GetGroupId() string { + if x != nil { + return x.GroupId + } + return "" +} + +// The request to join a tournament. +type JoinTournamentRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the tournament to join. The tournament must already exist. + TournamentId string `protobuf:"bytes,1,opt,name=tournament_id,json=tournamentId,proto3" json:"tournament_id,omitempty"` +} + +func (x *JoinTournamentRequest) Reset() { + *x = JoinTournamentRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *JoinTournamentRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*JoinTournamentRequest) ProtoMessage() {} + +func (x *JoinTournamentRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[48] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use JoinTournamentRequest.ProtoReflect.Descriptor instead. +func (*JoinTournamentRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{48} +} + +func (x *JoinTournamentRequest) GetTournamentId() string { + if x != nil { + return x.TournamentId + } + return "" +} + +// Kick a set of users from a group. +type KickGroupUsersRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The group ID to kick from. + GroupId string `protobuf:"bytes,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + // The users to kick. + UserIds []string `protobuf:"bytes,2,rep,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` +} + +func (x *KickGroupUsersRequest) Reset() { + *x = KickGroupUsersRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[49] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KickGroupUsersRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KickGroupUsersRequest) ProtoMessage() {} + +func (x *KickGroupUsersRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[49] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use KickGroupUsersRequest.ProtoReflect.Descriptor instead. +func (*KickGroupUsersRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{49} +} + +func (x *KickGroupUsersRequest) GetGroupId() string { + if x != nil { + return x.GroupId + } + return "" +} + +func (x *KickGroupUsersRequest) GetUserIds() []string { + if x != nil { + return x.UserIds + } + return nil +} + +// A leaderboard on the server. +type Leaderboard struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the leaderboard. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // ASC(0) or DESC(1) sort mode of scores in the leaderboard. + SortOrder uint32 `protobuf:"varint,2,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + // BEST, SET, INCREMENT or DECREMENT operator mode of the leaderboard. + Operator Operator `protobuf:"varint,3,opt,name=operator,proto3,enum=nakama.api.Operator" json:"operator,omitempty"` + // The UNIX time when the leaderboard was previously reset. A computed value. + PrevReset uint32 `protobuf:"varint,4,opt,name=prev_reset,json=prevReset,proto3" json:"prev_reset,omitempty"` + // The UNIX time when the leaderboard is next playable. A computed value. + NextReset uint32 `protobuf:"varint,5,opt,name=next_reset,json=nextReset,proto3" json:"next_reset,omitempty"` + // Additional information stored as a JSON object. + Metadata string `protobuf:"bytes,6,opt,name=metadata,proto3" json:"metadata,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the leaderboard was created. + CreateTime *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` + // Whether the leaderboard was created authoritatively or not. + Authoritative bool `protobuf:"varint,8,opt,name=authoritative,proto3" json:"authoritative,omitempty"` +} + +func (x *Leaderboard) Reset() { + *x = Leaderboard{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[50] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Leaderboard) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Leaderboard) ProtoMessage() {} + +func (x *Leaderboard) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[50] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Leaderboard.ProtoReflect.Descriptor instead. +func (*Leaderboard) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{50} +} + +func (x *Leaderboard) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Leaderboard) GetSortOrder() uint32 { + if x != nil { + return x.SortOrder + } + return 0 +} + +func (x *Leaderboard) GetOperator() Operator { + if x != nil { + return x.Operator + } + return Operator_NO_OVERRIDE +} + +func (x *Leaderboard) GetPrevReset() uint32 { + if x != nil { + return x.PrevReset + } + return 0 +} + +func (x *Leaderboard) GetNextReset() uint32 { + if x != nil { + return x.NextReset + } + return 0 +} + +func (x *Leaderboard) GetMetadata() string { + if x != nil { + return x.Metadata + } + return "" +} + +func (x *Leaderboard) GetCreateTime() *timestamppb.Timestamp { + if x != nil { + return x.CreateTime + } + return nil +} + +func (x *Leaderboard) GetAuthoritative() bool { + if x != nil { + return x.Authoritative + } + return false +} + +// A list of leaderboards +type LeaderboardList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The list of leaderboards returned. + Leaderboards []*Leaderboard `protobuf:"bytes,1,rep,name=leaderboards,proto3" json:"leaderboards,omitempty"` + // A pagination cursor (optional). + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *LeaderboardList) Reset() { + *x = LeaderboardList{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[51] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LeaderboardList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LeaderboardList) ProtoMessage() {} + +func (x *LeaderboardList) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[51] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LeaderboardList.ProtoReflect.Descriptor instead. +func (*LeaderboardList) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{51} +} + +func (x *LeaderboardList) GetLeaderboards() []*Leaderboard { + if x != nil { + return x.Leaderboards + } + return nil +} + +func (x *LeaderboardList) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +// Represents a complete leaderboard record with all scores and associated metadata. +type LeaderboardRecord struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the leaderboard this score belongs to. + LeaderboardId string `protobuf:"bytes,1,opt,name=leaderboard_id,json=leaderboardId,proto3" json:"leaderboard_id,omitempty"` + // The ID of the score owner, usually a user or group. + OwnerId string `protobuf:"bytes,2,opt,name=owner_id,json=ownerId,proto3" json:"owner_id,omitempty"` + // The username of the score owner, if the owner is a user. + Username *wrapperspb.StringValue `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` + // The score value. + Score int64 `protobuf:"varint,4,opt,name=score,proto3" json:"score,omitempty"` + // An optional subscore value. + Subscore int64 `protobuf:"varint,5,opt,name=subscore,proto3" json:"subscore,omitempty"` + // The number of submissions to this score record. + NumScore int32 `protobuf:"varint,6,opt,name=num_score,json=numScore,proto3" json:"num_score,omitempty"` + // Metadata. + Metadata string `protobuf:"bytes,7,opt,name=metadata,proto3" json:"metadata,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the leaderboard record was created. + CreateTime *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the leaderboard record was updated. + UpdateTime *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the leaderboard record expires. + ExpiryTime *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=expiry_time,json=expiryTime,proto3" json:"expiry_time,omitempty"` + // The rank of this record. + Rank int64 `protobuf:"varint,11,opt,name=rank,proto3" json:"rank,omitempty"` + // The maximum number of score updates allowed by the owner. + MaxNumScore uint32 `protobuf:"varint,12,opt,name=max_num_score,json=maxNumScore,proto3" json:"max_num_score,omitempty"` +} + +func (x *LeaderboardRecord) Reset() { + *x = LeaderboardRecord{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[52] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LeaderboardRecord) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LeaderboardRecord) ProtoMessage() {} + +func (x *LeaderboardRecord) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[52] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LeaderboardRecord.ProtoReflect.Descriptor instead. +func (*LeaderboardRecord) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{52} +} + +func (x *LeaderboardRecord) GetLeaderboardId() string { + if x != nil { + return x.LeaderboardId + } + return "" +} + +func (x *LeaderboardRecord) GetOwnerId() string { + if x != nil { + return x.OwnerId + } + return "" +} + +func (x *LeaderboardRecord) GetUsername() *wrapperspb.StringValue { + if x != nil { + return x.Username + } + return nil +} + +func (x *LeaderboardRecord) GetScore() int64 { + if x != nil { + return x.Score + } + return 0 +} + +func (x *LeaderboardRecord) GetSubscore() int64 { + if x != nil { + return x.Subscore + } + return 0 +} + +func (x *LeaderboardRecord) GetNumScore() int32 { + if x != nil { + return x.NumScore + } + return 0 +} + +func (x *LeaderboardRecord) GetMetadata() string { + if x != nil { + return x.Metadata + } + return "" +} + +func (x *LeaderboardRecord) GetCreateTime() *timestamppb.Timestamp { + if x != nil { + return x.CreateTime + } + return nil +} + +func (x *LeaderboardRecord) GetUpdateTime() *timestamppb.Timestamp { + if x != nil { + return x.UpdateTime + } + return nil +} + +func (x *LeaderboardRecord) GetExpiryTime() *timestamppb.Timestamp { + if x != nil { + return x.ExpiryTime + } + return nil +} + +func (x *LeaderboardRecord) GetRank() int64 { + if x != nil { + return x.Rank + } + return 0 +} + +func (x *LeaderboardRecord) GetMaxNumScore() uint32 { + if x != nil { + return x.MaxNumScore + } + return 0 +} + +// A set of leaderboard records, may be part of a leaderboard records page or a batch of individual records. +type LeaderboardRecordList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A list of leaderboard records. + Records []*LeaderboardRecord `protobuf:"bytes,1,rep,name=records,proto3" json:"records,omitempty"` + // A batched set of leaderboard records belonging to specified owners. + OwnerRecords []*LeaderboardRecord `protobuf:"bytes,2,rep,name=owner_records,json=ownerRecords,proto3" json:"owner_records,omitempty"` + // The cursor to send when retrieving the next page, if any. + NextCursor string `protobuf:"bytes,3,opt,name=next_cursor,json=nextCursor,proto3" json:"next_cursor,omitempty"` + // The cursor to send when retrieving the previous page, if any. + PrevCursor string `protobuf:"bytes,4,opt,name=prev_cursor,json=prevCursor,proto3" json:"prev_cursor,omitempty"` + // The total number of ranks available. + RankCount int64 `protobuf:"varint,5,opt,name=rank_count,json=rankCount,proto3" json:"rank_count,omitempty"` +} + +func (x *LeaderboardRecordList) Reset() { + *x = LeaderboardRecordList{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[53] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LeaderboardRecordList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LeaderboardRecordList) ProtoMessage() {} + +func (x *LeaderboardRecordList) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[53] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LeaderboardRecordList.ProtoReflect.Descriptor instead. +func (*LeaderboardRecordList) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{53} +} + +func (x *LeaderboardRecordList) GetRecords() []*LeaderboardRecord { + if x != nil { + return x.Records + } + return nil +} + +func (x *LeaderboardRecordList) GetOwnerRecords() []*LeaderboardRecord { + if x != nil { + return x.OwnerRecords + } + return nil +} + +func (x *LeaderboardRecordList) GetNextCursor() string { + if x != nil { + return x.NextCursor + } + return "" +} + +func (x *LeaderboardRecordList) GetPrevCursor() string { + if x != nil { + return x.PrevCursor + } + return "" +} + +func (x *LeaderboardRecordList) GetRankCount() int64 { + if x != nil { + return x.RankCount + } + return 0 +} + +// Leave a group. +type LeaveGroupRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The group ID to leave. + GroupId string `protobuf:"bytes,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` +} + +func (x *LeaveGroupRequest) Reset() { + *x = LeaveGroupRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LeaveGroupRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LeaveGroupRequest) ProtoMessage() {} + +func (x *LeaveGroupRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[54] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LeaveGroupRequest.ProtoReflect.Descriptor instead. +func (*LeaveGroupRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{54} +} + +func (x *LeaveGroupRequest) GetGroupId() string { + if x != nil { + return x.GroupId + } + return "" +} + +// Link Facebook to the current user's account. +type LinkFacebookRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The Facebook account details. + Account *AccountFacebook `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` + // Import Facebook friends for the user. + Sync *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=sync,proto3" json:"sync,omitempty"` +} + +func (x *LinkFacebookRequest) Reset() { + *x = LinkFacebookRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LinkFacebookRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LinkFacebookRequest) ProtoMessage() {} + +func (x *LinkFacebookRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[55] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LinkFacebookRequest.ProtoReflect.Descriptor instead. +func (*LinkFacebookRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{55} +} + +func (x *LinkFacebookRequest) GetAccount() *AccountFacebook { + if x != nil { + return x.Account + } + return nil +} + +func (x *LinkFacebookRequest) GetSync() *wrapperspb.BoolValue { + if x != nil { + return x.Sync + } + return nil +} + +// Link Steam to the current user's account. +type LinkSteamRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The Facebook account details. + Account *AccountSteam `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` + // Import Steam friends for the user. + Sync *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=sync,proto3" json:"sync,omitempty"` +} + +func (x *LinkSteamRequest) Reset() { + *x = LinkSteamRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[56] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LinkSteamRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LinkSteamRequest) ProtoMessage() {} + +func (x *LinkSteamRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[56] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LinkSteamRequest.ProtoReflect.Descriptor instead. +func (*LinkSteamRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{56} +} + +func (x *LinkSteamRequest) GetAccount() *AccountSteam { + if x != nil { + return x.Account + } + return nil +} + +func (x *LinkSteamRequest) GetSync() *wrapperspb.BoolValue { + if x != nil { + return x.Sync + } + return nil +} + +// List a channel's message history. +type ListChannelMessagesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The channel ID to list from. + ChannelId string `protobuf:"bytes,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` + // Max number of records to return. Between 1 and 100. + Limit *wrapperspb.Int32Value `protobuf:"bytes,2,opt,name=limit,proto3" json:"limit,omitempty"` + // True if listing should be older messages to newer, false if reverse. + Forward *wrapperspb.BoolValue `protobuf:"bytes,3,opt,name=forward,proto3" json:"forward,omitempty"` + // A pagination cursor, if any. + Cursor string `protobuf:"bytes,4,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *ListChannelMessagesRequest) Reset() { + *x = ListChannelMessagesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListChannelMessagesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListChannelMessagesRequest) ProtoMessage() {} + +func (x *ListChannelMessagesRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[57] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListChannelMessagesRequest.ProtoReflect.Descriptor instead. +func (*ListChannelMessagesRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{57} +} + +func (x *ListChannelMessagesRequest) GetChannelId() string { + if x != nil { + return x.ChannelId + } + return "" +} + +func (x *ListChannelMessagesRequest) GetLimit() *wrapperspb.Int32Value { + if x != nil { + return x.Limit + } + return nil +} + +func (x *ListChannelMessagesRequest) GetForward() *wrapperspb.BoolValue { + if x != nil { + return x.Forward + } + return nil +} + +func (x *ListChannelMessagesRequest) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +// List friends for a user. +type ListFriendsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Max number of records to return. Between 1 and 100. + Limit *wrapperspb.Int32Value `protobuf:"bytes,1,opt,name=limit,proto3" json:"limit,omitempty"` + // The friend state to list. + State *wrapperspb.Int32Value `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` + // An optional next page cursor. + Cursor string `protobuf:"bytes,3,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *ListFriendsRequest) Reset() { + *x = ListFriendsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[58] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListFriendsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListFriendsRequest) ProtoMessage() {} + +func (x *ListFriendsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[58] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListFriendsRequest.ProtoReflect.Descriptor instead. +func (*ListFriendsRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{58} +} + +func (x *ListFriendsRequest) GetLimit() *wrapperspb.Int32Value { + if x != nil { + return x.Limit + } + return nil +} + +func (x *ListFriendsRequest) GetState() *wrapperspb.Int32Value { + if x != nil { + return x.State + } + return nil +} + +func (x *ListFriendsRequest) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +type ListFriendsOfFriendsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Max number of records to return. Between 1 and 100. + Limit *wrapperspb.Int32Value `protobuf:"bytes,1,opt,name=limit,proto3" json:"limit,omitempty"` + // An optional next page cursor. + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *ListFriendsOfFriendsRequest) Reset() { + *x = ListFriendsOfFriendsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[59] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListFriendsOfFriendsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListFriendsOfFriendsRequest) ProtoMessage() {} + +func (x *ListFriendsOfFriendsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[59] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListFriendsOfFriendsRequest.ProtoReflect.Descriptor instead. +func (*ListFriendsOfFriendsRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{59} +} + +func (x *ListFriendsOfFriendsRequest) GetLimit() *wrapperspb.Int32Value { + if x != nil { + return x.Limit + } + return nil +} + +func (x *ListFriendsOfFriendsRequest) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +// List groups based on given filters. +type ListGroupsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // List groups that contain this value in their names. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // Optional pagination cursor. + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor,omitempty"` + // Max number of groups to return. Between 1 and 100. + Limit *wrapperspb.Int32Value `protobuf:"bytes,3,opt,name=limit,proto3" json:"limit,omitempty"` + // Language tag filter + LangTag string `protobuf:"bytes,4,opt,name=lang_tag,json=langTag,proto3" json:"lang_tag,omitempty"` + // Number of group members + Members *wrapperspb.Int32Value `protobuf:"bytes,5,opt,name=members,proto3" json:"members,omitempty"` + // Optional Open/Closed filter. + Open *wrapperspb.BoolValue `protobuf:"bytes,6,opt,name=open,proto3" json:"open,omitempty"` +} + +func (x *ListGroupsRequest) Reset() { + *x = ListGroupsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[60] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListGroupsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListGroupsRequest) ProtoMessage() {} + +func (x *ListGroupsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[60] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListGroupsRequest.ProtoReflect.Descriptor instead. +func (*ListGroupsRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{60} +} + +func (x *ListGroupsRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ListGroupsRequest) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +func (x *ListGroupsRequest) GetLimit() *wrapperspb.Int32Value { + if x != nil { + return x.Limit + } + return nil +} + +func (x *ListGroupsRequest) GetLangTag() string { + if x != nil { + return x.LangTag + } + return "" +} + +func (x *ListGroupsRequest) GetMembers() *wrapperspb.Int32Value { + if x != nil { + return x.Members + } + return nil +} + +func (x *ListGroupsRequest) GetOpen() *wrapperspb.BoolValue { + if x != nil { + return x.Open + } + return nil +} + +// List all users that are part of a group. +type ListGroupUsersRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The group ID to list from. + GroupId string `protobuf:"bytes,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + // Max number of records to return. Between 1 and 100. + Limit *wrapperspb.Int32Value `protobuf:"bytes,2,opt,name=limit,proto3" json:"limit,omitempty"` + // The group user state to list. + State *wrapperspb.Int32Value `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` + // An optional next page cursor. + Cursor string `protobuf:"bytes,4,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *ListGroupUsersRequest) Reset() { + *x = ListGroupUsersRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[61] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListGroupUsersRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListGroupUsersRequest) ProtoMessage() {} + +func (x *ListGroupUsersRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[61] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListGroupUsersRequest.ProtoReflect.Descriptor instead. +func (*ListGroupUsersRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{61} +} + +func (x *ListGroupUsersRequest) GetGroupId() string { + if x != nil { + return x.GroupId + } + return "" +} + +func (x *ListGroupUsersRequest) GetLimit() *wrapperspb.Int32Value { + if x != nil { + return x.Limit + } + return nil +} + +func (x *ListGroupUsersRequest) GetState() *wrapperspb.Int32Value { + if x != nil { + return x.State + } + return nil +} + +func (x *ListGroupUsersRequest) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +// List leaerboard records from a given leaderboard around the owner. +type ListLeaderboardRecordsAroundOwnerRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the tournament to list for. + LeaderboardId string `protobuf:"bytes,1,opt,name=leaderboard_id,json=leaderboardId,proto3" json:"leaderboard_id,omitempty"` + // Max number of records to return. Between 1 and 100. + Limit *wrapperspb.UInt32Value `protobuf:"bytes,2,opt,name=limit,proto3" json:"limit,omitempty"` + // The owner to retrieve records around. + OwnerId string `protobuf:"bytes,3,opt,name=owner_id,json=ownerId,proto3" json:"owner_id,omitempty"` + // Expiry in seconds (since epoch) to begin fetching records from. + Expiry *wrapperspb.Int64Value `protobuf:"bytes,4,opt,name=expiry,proto3" json:"expiry,omitempty"` + // A next or previous page cursor. + Cursor string `protobuf:"bytes,5,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *ListLeaderboardRecordsAroundOwnerRequest) Reset() { + *x = ListLeaderboardRecordsAroundOwnerRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[62] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListLeaderboardRecordsAroundOwnerRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListLeaderboardRecordsAroundOwnerRequest) ProtoMessage() {} + +func (x *ListLeaderboardRecordsAroundOwnerRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[62] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListLeaderboardRecordsAroundOwnerRequest.ProtoReflect.Descriptor instead. +func (*ListLeaderboardRecordsAroundOwnerRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{62} +} + +func (x *ListLeaderboardRecordsAroundOwnerRequest) GetLeaderboardId() string { + if x != nil { + return x.LeaderboardId + } + return "" +} + +func (x *ListLeaderboardRecordsAroundOwnerRequest) GetLimit() *wrapperspb.UInt32Value { + if x != nil { + return x.Limit + } + return nil +} + +func (x *ListLeaderboardRecordsAroundOwnerRequest) GetOwnerId() string { + if x != nil { + return x.OwnerId + } + return "" +} + +func (x *ListLeaderboardRecordsAroundOwnerRequest) GetExpiry() *wrapperspb.Int64Value { + if x != nil { + return x.Expiry + } + return nil +} + +func (x *ListLeaderboardRecordsAroundOwnerRequest) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +// List leaderboard records from a given leaderboard. +type ListLeaderboardRecordsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the leaderboard to list for. + LeaderboardId string `protobuf:"bytes,1,opt,name=leaderboard_id,json=leaderboardId,proto3" json:"leaderboard_id,omitempty"` + // One or more owners to retrieve records for. + OwnerIds []string `protobuf:"bytes,2,rep,name=owner_ids,json=ownerIds,proto3" json:"owner_ids,omitempty"` + // Max number of records to return. Between 1 and 100. + Limit *wrapperspb.Int32Value `protobuf:"bytes,3,opt,name=limit,proto3" json:"limit,omitempty"` + // A next or previous page cursor. + Cursor string `protobuf:"bytes,4,opt,name=cursor,proto3" json:"cursor,omitempty"` + // Expiry in seconds (since epoch) to begin fetching records from. Optional. 0 means from current time. + Expiry *wrapperspb.Int64Value `protobuf:"bytes,5,opt,name=expiry,proto3" json:"expiry,omitempty"` +} + +func (x *ListLeaderboardRecordsRequest) Reset() { + *x = ListLeaderboardRecordsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[63] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListLeaderboardRecordsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListLeaderboardRecordsRequest) ProtoMessage() {} + +func (x *ListLeaderboardRecordsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[63] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListLeaderboardRecordsRequest.ProtoReflect.Descriptor instead. +func (*ListLeaderboardRecordsRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{63} +} + +func (x *ListLeaderboardRecordsRequest) GetLeaderboardId() string { + if x != nil { + return x.LeaderboardId + } + return "" +} + +func (x *ListLeaderboardRecordsRequest) GetOwnerIds() []string { + if x != nil { + return x.OwnerIds + } + return nil +} + +func (x *ListLeaderboardRecordsRequest) GetLimit() *wrapperspb.Int32Value { + if x != nil { + return x.Limit + } + return nil +} + +func (x *ListLeaderboardRecordsRequest) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +func (x *ListLeaderboardRecordsRequest) GetExpiry() *wrapperspb.Int64Value { + if x != nil { + return x.Expiry + } + return nil +} + +// List realtime matches. +type ListMatchesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Limit the number of returned matches. + Limit *wrapperspb.Int32Value `protobuf:"bytes,1,opt,name=limit,proto3" json:"limit,omitempty"` + // Authoritative or relayed matches. + Authoritative *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=authoritative,proto3" json:"authoritative,omitempty"` + // Label filter. + Label *wrapperspb.StringValue `protobuf:"bytes,3,opt,name=label,proto3" json:"label,omitempty"` + // Minimum user count. + MinSize *wrapperspb.Int32Value `protobuf:"bytes,4,opt,name=min_size,json=minSize,proto3" json:"min_size,omitempty"` + // Maximum user count. + MaxSize *wrapperspb.Int32Value `protobuf:"bytes,5,opt,name=max_size,json=maxSize,proto3" json:"max_size,omitempty"` + // Arbitrary label query. + Query *wrapperspb.StringValue `protobuf:"bytes,6,opt,name=query,proto3" json:"query,omitempty"` +} + +func (x *ListMatchesRequest) Reset() { + *x = ListMatchesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[64] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListMatchesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListMatchesRequest) ProtoMessage() {} + +func (x *ListMatchesRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[64] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListMatchesRequest.ProtoReflect.Descriptor instead. +func (*ListMatchesRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{64} +} + +func (x *ListMatchesRequest) GetLimit() *wrapperspb.Int32Value { + if x != nil { + return x.Limit + } + return nil +} + +func (x *ListMatchesRequest) GetAuthoritative() *wrapperspb.BoolValue { + if x != nil { + return x.Authoritative + } + return nil +} + +func (x *ListMatchesRequest) GetLabel() *wrapperspb.StringValue { + if x != nil { + return x.Label + } + return nil +} + +func (x *ListMatchesRequest) GetMinSize() *wrapperspb.Int32Value { + if x != nil { + return x.MinSize + } + return nil +} + +func (x *ListMatchesRequest) GetMaxSize() *wrapperspb.Int32Value { + if x != nil { + return x.MaxSize + } + return nil +} + +func (x *ListMatchesRequest) GetQuery() *wrapperspb.StringValue { + if x != nil { + return x.Query + } + return nil +} + +// Get a list of unexpired notifications. +type ListNotificationsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The number of notifications to get. Between 1 and 100. + Limit *wrapperspb.Int32Value `protobuf:"bytes,1,opt,name=limit,proto3" json:"limit,omitempty"` + // A cursor to page through notifications. May be cached by clients to get from point in time forwards. + CacheableCursor string `protobuf:"bytes,2,opt,name=cacheable_cursor,json=cacheableCursor,proto3" json:"cacheable_cursor,omitempty"` // value from NotificationList.cacheable_cursor. +} + +func (x *ListNotificationsRequest) Reset() { + *x = ListNotificationsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[65] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListNotificationsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListNotificationsRequest) ProtoMessage() {} + +func (x *ListNotificationsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[65] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListNotificationsRequest.ProtoReflect.Descriptor instead. +func (*ListNotificationsRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{65} +} + +func (x *ListNotificationsRequest) GetLimit() *wrapperspb.Int32Value { + if x != nil { + return x.Limit + } + return nil +} + +func (x *ListNotificationsRequest) GetCacheableCursor() string { + if x != nil { + return x.CacheableCursor + } + return "" +} + +// List publicly readable storage objects in a given collection. +type ListStorageObjectsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ID of the user. + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + // The collection which stores the object. + Collection string `protobuf:"bytes,2,opt,name=collection,proto3" json:"collection,omitempty"` + // The number of storage objects to list. Between 1 and 100. + Limit *wrapperspb.Int32Value `protobuf:"bytes,3,opt,name=limit,proto3" json:"limit,omitempty"` + // The cursor to page through results from. + Cursor string `protobuf:"bytes,4,opt,name=cursor,proto3" json:"cursor,omitempty"` // value from StorageObjectList.cursor. +} + +func (x *ListStorageObjectsRequest) Reset() { + *x = ListStorageObjectsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[66] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListStorageObjectsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListStorageObjectsRequest) ProtoMessage() {} + +func (x *ListStorageObjectsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[66] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListStorageObjectsRequest.ProtoReflect.Descriptor instead. +func (*ListStorageObjectsRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{66} +} + +func (x *ListStorageObjectsRequest) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *ListStorageObjectsRequest) GetCollection() string { + if x != nil { + return x.Collection + } + return "" +} + +func (x *ListStorageObjectsRequest) GetLimit() *wrapperspb.Int32Value { + if x != nil { + return x.Limit + } + return nil +} + +func (x *ListStorageObjectsRequest) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +// List user subscriptions. +type ListSubscriptionsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Max number of results per page + Limit *wrapperspb.Int32Value `protobuf:"bytes,1,opt,name=limit,proto3" json:"limit,omitempty"` + // Cursor to retrieve a page of records from + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *ListSubscriptionsRequest) Reset() { + *x = ListSubscriptionsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[67] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListSubscriptionsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListSubscriptionsRequest) ProtoMessage() {} + +func (x *ListSubscriptionsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[67] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListSubscriptionsRequest.ProtoReflect.Descriptor instead. +func (*ListSubscriptionsRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{67} +} + +func (x *ListSubscriptionsRequest) GetLimit() *wrapperspb.Int32Value { + if x != nil { + return x.Limit + } + return nil +} + +func (x *ListSubscriptionsRequest) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +// List tournament records from a given tournament around the owner. +type ListTournamentRecordsAroundOwnerRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the tournament to list for. + TournamentId string `protobuf:"bytes,1,opt,name=tournament_id,json=tournamentId,proto3" json:"tournament_id,omitempty"` + // Max number of records to return. Between 1 and 100. + Limit *wrapperspb.UInt32Value `protobuf:"bytes,2,opt,name=limit,proto3" json:"limit,omitempty"` + // The owner to retrieve records around. + OwnerId string `protobuf:"bytes,3,opt,name=owner_id,json=ownerId,proto3" json:"owner_id,omitempty"` + // Expiry in seconds (since epoch) to begin fetching records from. + Expiry *wrapperspb.Int64Value `protobuf:"bytes,4,opt,name=expiry,proto3" json:"expiry,omitempty"` + // A next or previous page cursor. + Cursor string `protobuf:"bytes,5,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *ListTournamentRecordsAroundOwnerRequest) Reset() { + *x = ListTournamentRecordsAroundOwnerRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[68] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListTournamentRecordsAroundOwnerRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListTournamentRecordsAroundOwnerRequest) ProtoMessage() {} + +func (x *ListTournamentRecordsAroundOwnerRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[68] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListTournamentRecordsAroundOwnerRequest.ProtoReflect.Descriptor instead. +func (*ListTournamentRecordsAroundOwnerRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{68} +} + +func (x *ListTournamentRecordsAroundOwnerRequest) GetTournamentId() string { + if x != nil { + return x.TournamentId + } + return "" +} + +func (x *ListTournamentRecordsAroundOwnerRequest) GetLimit() *wrapperspb.UInt32Value { + if x != nil { + return x.Limit + } + return nil +} + +func (x *ListTournamentRecordsAroundOwnerRequest) GetOwnerId() string { + if x != nil { + return x.OwnerId + } + return "" +} + +func (x *ListTournamentRecordsAroundOwnerRequest) GetExpiry() *wrapperspb.Int64Value { + if x != nil { + return x.Expiry + } + return nil +} + +func (x *ListTournamentRecordsAroundOwnerRequest) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +// List tournament records from a given tournament. +type ListTournamentRecordsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the tournament to list for. + TournamentId string `protobuf:"bytes,1,opt,name=tournament_id,json=tournamentId,proto3" json:"tournament_id,omitempty"` + // One or more owners to retrieve records for. + OwnerIds []string `protobuf:"bytes,2,rep,name=owner_ids,json=ownerIds,proto3" json:"owner_ids,omitempty"` + // Max number of records to return. Between 1 and 100. + Limit *wrapperspb.Int32Value `protobuf:"bytes,3,opt,name=limit,proto3" json:"limit,omitempty"` + // A next or previous page cursor. + Cursor string `protobuf:"bytes,4,opt,name=cursor,proto3" json:"cursor,omitempty"` + // Expiry in seconds (since epoch) to begin fetching records from. + Expiry *wrapperspb.Int64Value `protobuf:"bytes,5,opt,name=expiry,proto3" json:"expiry,omitempty"` +} + +func (x *ListTournamentRecordsRequest) Reset() { + *x = ListTournamentRecordsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[69] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListTournamentRecordsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListTournamentRecordsRequest) ProtoMessage() {} + +func (x *ListTournamentRecordsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[69] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListTournamentRecordsRequest.ProtoReflect.Descriptor instead. +func (*ListTournamentRecordsRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{69} +} + +func (x *ListTournamentRecordsRequest) GetTournamentId() string { + if x != nil { + return x.TournamentId + } + return "" +} + +func (x *ListTournamentRecordsRequest) GetOwnerIds() []string { + if x != nil { + return x.OwnerIds + } + return nil +} + +func (x *ListTournamentRecordsRequest) GetLimit() *wrapperspb.Int32Value { + if x != nil { + return x.Limit + } + return nil +} + +func (x *ListTournamentRecordsRequest) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +func (x *ListTournamentRecordsRequest) GetExpiry() *wrapperspb.Int64Value { + if x != nil { + return x.Expiry + } + return nil +} + +// List active/upcoming tournaments based on given filters. +type ListTournamentsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The start of the categories to include. Defaults to 0. + CategoryStart *wrapperspb.UInt32Value `protobuf:"bytes,1,opt,name=category_start,json=categoryStart,proto3" json:"category_start,omitempty"` + // The end of the categories to include. Defaults to 128. + CategoryEnd *wrapperspb.UInt32Value `protobuf:"bytes,2,opt,name=category_end,json=categoryEnd,proto3" json:"category_end,omitempty"` + // The start time for tournaments. Defaults to epoch. + StartTime *wrapperspb.UInt32Value `protobuf:"bytes,3,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` + // The end time for tournaments. Defaults to +1 year from current Unix time. + EndTime *wrapperspb.UInt32Value `protobuf:"bytes,4,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"` + // Max number of records to return. Between 1 and 100. + Limit *wrapperspb.Int32Value `protobuf:"bytes,6,opt,name=limit,proto3" json:"limit,omitempty"` + // A next page cursor for listings (optional). + Cursor string `protobuf:"bytes,8,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *ListTournamentsRequest) Reset() { + *x = ListTournamentsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[70] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListTournamentsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListTournamentsRequest) ProtoMessage() {} + +func (x *ListTournamentsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[70] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListTournamentsRequest.ProtoReflect.Descriptor instead. +func (*ListTournamentsRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{70} +} + +func (x *ListTournamentsRequest) GetCategoryStart() *wrapperspb.UInt32Value { + if x != nil { + return x.CategoryStart + } + return nil +} + +func (x *ListTournamentsRequest) GetCategoryEnd() *wrapperspb.UInt32Value { + if x != nil { + return x.CategoryEnd + } + return nil +} + +func (x *ListTournamentsRequest) GetStartTime() *wrapperspb.UInt32Value { + if x != nil { + return x.StartTime + } + return nil +} + +func (x *ListTournamentsRequest) GetEndTime() *wrapperspb.UInt32Value { + if x != nil { + return x.EndTime + } + return nil +} + +func (x *ListTournamentsRequest) GetLimit() *wrapperspb.Int32Value { + if x != nil { + return x.Limit + } + return nil +} + +func (x *ListTournamentsRequest) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +// List the groups a user is part of, and their relationship to each. +type ListUserGroupsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ID of the user. + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + // Max number of records to return. Between 1 and 100. + Limit *wrapperspb.Int32Value `protobuf:"bytes,2,opt,name=limit,proto3" json:"limit,omitempty"` + // The user group state to list. + State *wrapperspb.Int32Value `protobuf:"bytes,3,opt,name=state,proto3" json:"state,omitempty"` + // An optional next page cursor. + Cursor string `protobuf:"bytes,4,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *ListUserGroupsRequest) Reset() { + *x = ListUserGroupsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[71] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListUserGroupsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListUserGroupsRequest) ProtoMessage() {} + +func (x *ListUserGroupsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[71] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListUserGroupsRequest.ProtoReflect.Descriptor instead. +func (*ListUserGroupsRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{71} +} + +func (x *ListUserGroupsRequest) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *ListUserGroupsRequest) GetLimit() *wrapperspb.Int32Value { + if x != nil { + return x.Limit + } + return nil +} + +func (x *ListUserGroupsRequest) GetState() *wrapperspb.Int32Value { + if x != nil { + return x.State + } + return nil +} + +func (x *ListUserGroupsRequest) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +// Represents a realtime match. +type Match struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the match, can be used to join. + MatchId string `protobuf:"bytes,1,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` + // True if it's an server-managed authoritative match, false otherwise. + Authoritative bool `protobuf:"varint,2,opt,name=authoritative,proto3" json:"authoritative,omitempty"` + // Match label, if any. + Label *wrapperspb.StringValue `protobuf:"bytes,3,opt,name=label,proto3" json:"label,omitempty"` + // Current number of users in the match. + Size int32 `protobuf:"varint,4,opt,name=size,proto3" json:"size,omitempty"` + // Tick Rate + TickRate int32 `protobuf:"varint,5,opt,name=tick_rate,json=tickRate,proto3" json:"tick_rate,omitempty"` + // Handler name + HandlerName string `protobuf:"bytes,6,opt,name=handler_name,json=handlerName,proto3" json:"handler_name,omitempty"` +} + +func (x *Match) Reset() { + *x = Match{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[72] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Match) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Match) ProtoMessage() {} + +func (x *Match) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[72] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Match.ProtoReflect.Descriptor instead. +func (*Match) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{72} +} + +func (x *Match) GetMatchId() string { + if x != nil { + return x.MatchId + } + return "" +} + +func (x *Match) GetAuthoritative() bool { + if x != nil { + return x.Authoritative + } + return false +} + +func (x *Match) GetLabel() *wrapperspb.StringValue { + if x != nil { + return x.Label + } + return nil +} + +func (x *Match) GetSize() int32 { + if x != nil { + return x.Size + } + return 0 +} + +func (x *Match) GetTickRate() int32 { + if x != nil { + return x.TickRate + } + return 0 +} + +func (x *Match) GetHandlerName() string { + if x != nil { + return x.HandlerName + } + return "" +} + +// A list of realtime matches. +type MatchList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A number of matches corresponding to a list operation. + Matches []*Match `protobuf:"bytes,1,rep,name=matches,proto3" json:"matches,omitempty"` +} + +func (x *MatchList) Reset() { + *x = MatchList{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[73] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MatchList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MatchList) ProtoMessage() {} + +func (x *MatchList) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[73] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MatchList.ProtoReflect.Descriptor instead. +func (*MatchList) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{73} +} + +func (x *MatchList) GetMatches() []*Match { + if x != nil { + return x.Matches + } + return nil +} + +// Matchmaker ticket completion stats +type MatchmakerCompletionStats struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CreateTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` + CompleteTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=complete_time,json=completeTime,proto3" json:"complete_time,omitempty"` +} + +func (x *MatchmakerCompletionStats) Reset() { + *x = MatchmakerCompletionStats{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[74] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MatchmakerCompletionStats) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MatchmakerCompletionStats) ProtoMessage() {} + +func (x *MatchmakerCompletionStats) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[74] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MatchmakerCompletionStats.ProtoReflect.Descriptor instead. +func (*MatchmakerCompletionStats) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{74} +} + +func (x *MatchmakerCompletionStats) GetCreateTime() *timestamppb.Timestamp { + if x != nil { + return x.CreateTime + } + return nil +} + +func (x *MatchmakerCompletionStats) GetCompleteTime() *timestamppb.Timestamp { + if x != nil { + return x.CompleteTime + } + return nil +} + +// Matchmaker stats +type MatchmakerStats struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TicketCount int32 `protobuf:"varint,1,opt,name=ticket_count,json=ticketCount,proto3" json:"ticket_count,omitempty"` + OldestTicketCreateTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=oldest_ticket_create_time,json=oldestTicketCreateTime,proto3" json:"oldest_ticket_create_time,omitempty"` + Completions []*MatchmakerCompletionStats `protobuf:"bytes,3,rep,name=completions,proto3" json:"completions,omitempty"` +} + +func (x *MatchmakerStats) Reset() { + *x = MatchmakerStats{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[75] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MatchmakerStats) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MatchmakerStats) ProtoMessage() {} + +func (x *MatchmakerStats) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[75] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MatchmakerStats.ProtoReflect.Descriptor instead. +func (*MatchmakerStats) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{75} +} + +func (x *MatchmakerStats) GetTicketCount() int32 { + if x != nil { + return x.TicketCount + } + return 0 +} + +func (x *MatchmakerStats) GetOldestTicketCreateTime() *timestamppb.Timestamp { + if x != nil { + return x.OldestTicketCreateTime + } + return nil +} + +func (x *MatchmakerStats) GetCompletions() []*MatchmakerCompletionStats { + if x != nil { + return x.Completions + } + return nil +} + +// A notification in the server. +type Notification struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ID of the Notification. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Subject of the notification. + Subject string `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"` + // Content of the notification in JSON. + Content string `protobuf:"bytes,3,opt,name=content,proto3" json:"content,omitempty"` + // Category code for this notification. + Code int32 `protobuf:"varint,4,opt,name=code,proto3" json:"code,omitempty"` + // ID of the sender, if a user. Otherwise 'null'. + SenderId string `protobuf:"bytes,5,opt,name=sender_id,json=senderId,proto3" json:"sender_id,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the notification was created. + CreateTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` + // True if this notification was persisted to the database. + Persistent bool `protobuf:"varint,7,opt,name=persistent,proto3" json:"persistent,omitempty"` +} + +func (x *Notification) Reset() { + *x = Notification{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[76] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Notification) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Notification) ProtoMessage() {} + +func (x *Notification) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[76] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Notification.ProtoReflect.Descriptor instead. +func (*Notification) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{76} +} + +func (x *Notification) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Notification) GetSubject() string { + if x != nil { + return x.Subject + } + return "" +} + +func (x *Notification) GetContent() string { + if x != nil { + return x.Content + } + return "" +} + +func (x *Notification) GetCode() int32 { + if x != nil { + return x.Code + } + return 0 +} + +func (x *Notification) GetSenderId() string { + if x != nil { + return x.SenderId + } + return "" +} + +func (x *Notification) GetCreateTime() *timestamppb.Timestamp { + if x != nil { + return x.CreateTime + } + return nil +} + +func (x *Notification) GetPersistent() bool { + if x != nil { + return x.Persistent + } + return false +} + +// A collection of zero or more notifications. +type NotificationList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Collection of notifications. + Notifications []*Notification `protobuf:"bytes,1,rep,name=notifications,proto3" json:"notifications,omitempty"` + // Use this cursor to paginate notifications. Cache this to catch up to new notifications. + CacheableCursor string `protobuf:"bytes,2,opt,name=cacheable_cursor,json=cacheableCursor,proto3" json:"cacheable_cursor,omitempty"` +} + +func (x *NotificationList) Reset() { + *x = NotificationList{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[77] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NotificationList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NotificationList) ProtoMessage() {} + +func (x *NotificationList) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[77] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NotificationList.ProtoReflect.Descriptor instead. +func (*NotificationList) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{77} +} + +func (x *NotificationList) GetNotifications() []*Notification { + if x != nil { + return x.Notifications + } + return nil +} + +func (x *NotificationList) GetCacheableCursor() string { + if x != nil { + return x.CacheableCursor + } + return "" +} + +// Promote a set of users in a group to the next role up. +type PromoteGroupUsersRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The group ID to promote in. + GroupId string `protobuf:"bytes,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + // The users to promote. + UserIds []string `protobuf:"bytes,2,rep,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` +} + +func (x *PromoteGroupUsersRequest) Reset() { + *x = PromoteGroupUsersRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[78] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PromoteGroupUsersRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PromoteGroupUsersRequest) ProtoMessage() {} + +func (x *PromoteGroupUsersRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[78] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PromoteGroupUsersRequest.ProtoReflect.Descriptor instead. +func (*PromoteGroupUsersRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{78} +} + +func (x *PromoteGroupUsersRequest) GetGroupId() string { + if x != nil { + return x.GroupId + } + return "" +} + +func (x *PromoteGroupUsersRequest) GetUserIds() []string { + if x != nil { + return x.UserIds + } + return nil +} + +// Demote a set of users in a group to the next role down. +type DemoteGroupUsersRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The group ID to demote in. + GroupId string `protobuf:"bytes,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + // The users to demote. + UserIds []string `protobuf:"bytes,2,rep,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` +} + +func (x *DemoteGroupUsersRequest) Reset() { + *x = DemoteGroupUsersRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[79] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DemoteGroupUsersRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DemoteGroupUsersRequest) ProtoMessage() {} + +func (x *DemoteGroupUsersRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[79] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DemoteGroupUsersRequest.ProtoReflect.Descriptor instead. +func (*DemoteGroupUsersRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{79} +} + +func (x *DemoteGroupUsersRequest) GetGroupId() string { + if x != nil { + return x.GroupId + } + return "" +} + +func (x *DemoteGroupUsersRequest) GetUserIds() []string { + if x != nil { + return x.UserIds + } + return nil +} + +// Storage objects to get. +type ReadStorageObjectId struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The collection which stores the object. + Collection string `protobuf:"bytes,1,opt,name=collection,proto3" json:"collection,omitempty"` + // The key of the object within the collection. + Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` + // The user owner of the object. + UserId string `protobuf:"bytes,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` +} + +func (x *ReadStorageObjectId) Reset() { + *x = ReadStorageObjectId{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[80] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReadStorageObjectId) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReadStorageObjectId) ProtoMessage() {} + +func (x *ReadStorageObjectId) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[80] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReadStorageObjectId.ProtoReflect.Descriptor instead. +func (*ReadStorageObjectId) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{80} +} + +func (x *ReadStorageObjectId) GetCollection() string { + if x != nil { + return x.Collection + } + return "" +} + +func (x *ReadStorageObjectId) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *ReadStorageObjectId) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +// Batch get storage objects. +type ReadStorageObjectsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Batch of storage objects. + ObjectIds []*ReadStorageObjectId `protobuf:"bytes,1,rep,name=object_ids,json=objectIds,proto3" json:"object_ids,omitempty"` +} + +func (x *ReadStorageObjectsRequest) Reset() { + *x = ReadStorageObjectsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[81] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReadStorageObjectsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReadStorageObjectsRequest) ProtoMessage() {} + +func (x *ReadStorageObjectsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[81] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReadStorageObjectsRequest.ProtoReflect.Descriptor instead. +func (*ReadStorageObjectsRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{81} +} + +func (x *ReadStorageObjectsRequest) GetObjectIds() []*ReadStorageObjectId { + if x != nil { + return x.ObjectIds + } + return nil +} + +// Execute an Lua function on the server. +type Rpc struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The identifier of the function. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The payload of the function which must be a JSON object. + Payload string `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"` + // The authentication key used when executed as a non-client HTTP request. + HttpKey string `protobuf:"bytes,3,opt,name=http_key,json=httpKey,proto3" json:"http_key,omitempty"` +} + +func (x *Rpc) Reset() { + *x = Rpc{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[82] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Rpc) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Rpc) ProtoMessage() {} + +func (x *Rpc) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[82] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Rpc.ProtoReflect.Descriptor instead. +func (*Rpc) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{82} +} + +func (x *Rpc) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Rpc) GetPayload() string { + if x != nil { + return x.Payload + } + return "" +} + +func (x *Rpc) GetHttpKey() string { + if x != nil { + return x.HttpKey + } + return "" +} + +// A user's session used to authenticate messages. +type Session struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // True if the corresponding account was just created, false otherwise. + Created bool `protobuf:"varint,1,opt,name=created,proto3" json:"created,omitempty"` + // Authentication credentials. + Token string `protobuf:"bytes,2,opt,name=token,proto3" json:"token,omitempty"` + // Refresh token that can be used for session token renewal. + RefreshToken string `protobuf:"bytes,3,opt,name=refresh_token,json=refreshToken,proto3" json:"refresh_token,omitempty"` +} + +func (x *Session) Reset() { + *x = Session{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[83] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Session) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Session) ProtoMessage() {} + +func (x *Session) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[83] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Session.ProtoReflect.Descriptor instead. +func (*Session) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{83} +} + +func (x *Session) GetCreated() bool { + if x != nil { + return x.Created + } + return false +} + +func (x *Session) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +func (x *Session) GetRefreshToken() string { + if x != nil { + return x.RefreshToken + } + return "" +} + +// An object within the storage engine. +type StorageObject struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The collection which stores the object. + Collection string `protobuf:"bytes,1,opt,name=collection,proto3" json:"collection,omitempty"` + // The key of the object within the collection. + Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` + // The user owner of the object. + UserId string `protobuf:"bytes,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + // The value of the object. + Value string `protobuf:"bytes,4,opt,name=value,proto3" json:"value,omitempty"` + // The version hash of the object. + Version string `protobuf:"bytes,5,opt,name=version,proto3" json:"version,omitempty"` + // The read access permissions for the object. + PermissionRead int32 `protobuf:"varint,6,opt,name=permission_read,json=permissionRead,proto3" json:"permission_read,omitempty"` + // The write access permissions for the object. + PermissionWrite int32 `protobuf:"varint,7,opt,name=permission_write,json=permissionWrite,proto3" json:"permission_write,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the object was created. + CreateTime *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the object was last updated. + UpdateTime *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` +} + +func (x *StorageObject) Reset() { + *x = StorageObject{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[84] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageObject) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageObject) ProtoMessage() {} + +func (x *StorageObject) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[84] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StorageObject.ProtoReflect.Descriptor instead. +func (*StorageObject) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{84} +} + +func (x *StorageObject) GetCollection() string { + if x != nil { + return x.Collection + } + return "" +} + +func (x *StorageObject) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *StorageObject) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *StorageObject) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +func (x *StorageObject) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *StorageObject) GetPermissionRead() int32 { + if x != nil { + return x.PermissionRead + } + return 0 +} + +func (x *StorageObject) GetPermissionWrite() int32 { + if x != nil { + return x.PermissionWrite + } + return 0 +} + +func (x *StorageObject) GetCreateTime() *timestamppb.Timestamp { + if x != nil { + return x.CreateTime + } + return nil +} + +func (x *StorageObject) GetUpdateTime() *timestamppb.Timestamp { + if x != nil { + return x.UpdateTime + } + return nil +} + +// A storage acknowledgement. +type StorageObjectAck struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The collection which stores the object. + Collection string `protobuf:"bytes,1,opt,name=collection,proto3" json:"collection,omitempty"` + // The key of the object within the collection. + Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` + // The version hash of the object. + Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` + // The owner of the object. + UserId string `protobuf:"bytes,4,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the object was created. + CreateTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the object was last updated. + UpdateTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` +} + +func (x *StorageObjectAck) Reset() { + *x = StorageObjectAck{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[85] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageObjectAck) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageObjectAck) ProtoMessage() {} + +func (x *StorageObjectAck) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[85] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StorageObjectAck.ProtoReflect.Descriptor instead. +func (*StorageObjectAck) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{85} +} + +func (x *StorageObjectAck) GetCollection() string { + if x != nil { + return x.Collection + } + return "" +} + +func (x *StorageObjectAck) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *StorageObjectAck) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *StorageObjectAck) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *StorageObjectAck) GetCreateTime() *timestamppb.Timestamp { + if x != nil { + return x.CreateTime + } + return nil +} + +func (x *StorageObjectAck) GetUpdateTime() *timestamppb.Timestamp { + if x != nil { + return x.UpdateTime + } + return nil +} + +// Batch of acknowledgements for the storage object write. +type StorageObjectAcks struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Batch of storage write acknowledgements. + Acks []*StorageObjectAck `protobuf:"bytes,1,rep,name=acks,proto3" json:"acks,omitempty"` +} + +func (x *StorageObjectAcks) Reset() { + *x = StorageObjectAcks{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[86] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageObjectAcks) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageObjectAcks) ProtoMessage() {} + +func (x *StorageObjectAcks) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[86] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StorageObjectAcks.ProtoReflect.Descriptor instead. +func (*StorageObjectAcks) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{86} +} + +func (x *StorageObjectAcks) GetAcks() []*StorageObjectAck { + if x != nil { + return x.Acks + } + return nil +} + +// Batch of storage objects. +type StorageObjects struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The batch of storage objects. + Objects []*StorageObject `protobuf:"bytes,1,rep,name=objects,proto3" json:"objects,omitempty"` +} + +func (x *StorageObjects) Reset() { + *x = StorageObjects{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[87] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageObjects) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageObjects) ProtoMessage() {} + +func (x *StorageObjects) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[87] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StorageObjects.ProtoReflect.Descriptor instead. +func (*StorageObjects) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{87} +} + +func (x *StorageObjects) GetObjects() []*StorageObject { + if x != nil { + return x.Objects + } + return nil +} + +// List of storage objects. +type StorageObjectList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The list of storage objects. + Objects []*StorageObject `protobuf:"bytes,1,rep,name=objects,proto3" json:"objects,omitempty"` + // The cursor for the next page of results, if any. + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *StorageObjectList) Reset() { + *x = StorageObjectList{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[88] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageObjectList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageObjectList) ProtoMessage() {} + +func (x *StorageObjectList) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[88] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StorageObjectList.ProtoReflect.Descriptor instead. +func (*StorageObjectList) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{88} +} + +func (x *StorageObjectList) GetObjects() []*StorageObject { + if x != nil { + return x.Objects + } + return nil +} + +func (x *StorageObjectList) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +// A tournament on the server. +type Tournament struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the tournament. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The title for the tournament. + Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` + // The description of the tournament. May be blank. + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // The category of the tournament. e.g. "vip" could be category 1. + Category uint32 `protobuf:"varint,4,opt,name=category,proto3" json:"category,omitempty"` + // ASC (0) or DESC (1) sort mode of scores in the tournament. + SortOrder uint32 `protobuf:"varint,5,opt,name=sort_order,json=sortOrder,proto3" json:"sort_order,omitempty"` + // The current number of players in the tournament. + Size uint32 `protobuf:"varint,6,opt,name=size,proto3" json:"size,omitempty"` + // The maximum number of players for the tournament. + MaxSize uint32 `protobuf:"varint,7,opt,name=max_size,json=maxSize,proto3" json:"max_size,omitempty"` + // The maximum score updates allowed per player for the current tournament. + MaxNumScore uint32 `protobuf:"varint,8,opt,name=max_num_score,json=maxNumScore,proto3" json:"max_num_score,omitempty"` + // True if the tournament is active and can enter. A computed value. + CanEnter bool `protobuf:"varint,9,opt,name=can_enter,json=canEnter,proto3" json:"can_enter,omitempty"` + // The UNIX time when the tournament stops being active until next reset. A computed value. + EndActive uint32 `protobuf:"varint,10,opt,name=end_active,json=endActive,proto3" json:"end_active,omitempty"` + // The UNIX time when the tournament is next playable. A computed value. + NextReset uint32 `protobuf:"varint,11,opt,name=next_reset,json=nextReset,proto3" json:"next_reset,omitempty"` + // Additional information stored as a JSON object. + Metadata string `protobuf:"bytes,12,opt,name=metadata,proto3" json:"metadata,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the tournament was created. + CreateTime *timestamppb.Timestamp `protobuf:"bytes,13,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the tournament will start. + StartTime *timestamppb.Timestamp `protobuf:"bytes,14,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the tournament will be stopped. + EndTime *timestamppb.Timestamp `protobuf:"bytes,15,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"` + // Duration of the tournament in seconds. + Duration uint32 `protobuf:"varint,16,opt,name=duration,proto3" json:"duration,omitempty"` + // The UNIX time when the tournament start being active. A computed value. + StartActive uint32 `protobuf:"varint,17,opt,name=start_active,json=startActive,proto3" json:"start_active,omitempty"` + // The UNIX time when the tournament was last reset. A computed value. + PrevReset uint32 `protobuf:"varint,18,opt,name=prev_reset,json=prevReset,proto3" json:"prev_reset,omitempty"` + // Operator. + Operator Operator `protobuf:"varint,19,opt,name=operator,proto3,enum=nakama.api.Operator" json:"operator,omitempty"` + // Whether the leaderboard was created authoritatively or not. + Authoritative bool `protobuf:"varint,20,opt,name=authoritative,proto3" json:"authoritative,omitempty"` + // Whether the user must join the tournament before being able to submit scores. + JoinRequired bool `protobuf:"varint,21,opt,name=join_required,json=joinRequired,proto3" json:"join_required,omitempty"` +} + +func (x *Tournament) Reset() { + *x = Tournament{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[89] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Tournament) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Tournament) ProtoMessage() {} + +func (x *Tournament) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[89] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Tournament.ProtoReflect.Descriptor instead. +func (*Tournament) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{89} +} + +func (x *Tournament) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Tournament) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *Tournament) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *Tournament) GetCategory() uint32 { + if x != nil { + return x.Category + } + return 0 +} + +func (x *Tournament) GetSortOrder() uint32 { + if x != nil { + return x.SortOrder + } + return 0 +} + +func (x *Tournament) GetSize() uint32 { + if x != nil { + return x.Size + } + return 0 +} + +func (x *Tournament) GetMaxSize() uint32 { + if x != nil { + return x.MaxSize + } + return 0 +} + +func (x *Tournament) GetMaxNumScore() uint32 { + if x != nil { + return x.MaxNumScore + } + return 0 +} + +func (x *Tournament) GetCanEnter() bool { + if x != nil { + return x.CanEnter + } + return false +} + +func (x *Tournament) GetEndActive() uint32 { + if x != nil { + return x.EndActive + } + return 0 +} + +func (x *Tournament) GetNextReset() uint32 { + if x != nil { + return x.NextReset + } + return 0 +} + +func (x *Tournament) GetMetadata() string { + if x != nil { + return x.Metadata + } + return "" +} + +func (x *Tournament) GetCreateTime() *timestamppb.Timestamp { + if x != nil { + return x.CreateTime + } + return nil +} + +func (x *Tournament) GetStartTime() *timestamppb.Timestamp { + if x != nil { + return x.StartTime + } + return nil +} + +func (x *Tournament) GetEndTime() *timestamppb.Timestamp { + if x != nil { + return x.EndTime + } + return nil +} + +func (x *Tournament) GetDuration() uint32 { + if x != nil { + return x.Duration + } + return 0 +} + +func (x *Tournament) GetStartActive() uint32 { + if x != nil { + return x.StartActive + } + return 0 +} + +func (x *Tournament) GetPrevReset() uint32 { + if x != nil { + return x.PrevReset + } + return 0 +} + +func (x *Tournament) GetOperator() Operator { + if x != nil { + return x.Operator + } + return Operator_NO_OVERRIDE +} + +func (x *Tournament) GetAuthoritative() bool { + if x != nil { + return x.Authoritative + } + return false +} + +func (x *Tournament) GetJoinRequired() bool { + if x != nil { + return x.JoinRequired + } + return false +} + +// A list of tournaments. +type TournamentList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The list of tournaments returned. + Tournaments []*Tournament `protobuf:"bytes,1,rep,name=tournaments,proto3" json:"tournaments,omitempty"` + // A pagination cursor (optional). + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *TournamentList) Reset() { + *x = TournamentList{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[90] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TournamentList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TournamentList) ProtoMessage() {} + +func (x *TournamentList) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[90] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TournamentList.ProtoReflect.Descriptor instead. +func (*TournamentList) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{90} +} + +func (x *TournamentList) GetTournaments() []*Tournament { + if x != nil { + return x.Tournaments + } + return nil +} + +func (x *TournamentList) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +// A set of tournament records which may be part of a tournament records page or a batch of individual records. +type TournamentRecordList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A list of tournament records. + Records []*LeaderboardRecord `protobuf:"bytes,1,rep,name=records,proto3" json:"records,omitempty"` + // A batched set of tournament records belonging to specified owners. + OwnerRecords []*LeaderboardRecord `protobuf:"bytes,2,rep,name=owner_records,json=ownerRecords,proto3" json:"owner_records,omitempty"` + // The cursor to send when retireving the next page (optional). + NextCursor string `protobuf:"bytes,3,opt,name=next_cursor,json=nextCursor,proto3" json:"next_cursor,omitempty"` + // The cursor to send when retrieving the previous page (optional). + PrevCursor string `protobuf:"bytes,4,opt,name=prev_cursor,json=prevCursor,proto3" json:"prev_cursor,omitempty"` + // The total number of ranks available. + RankCount int64 `protobuf:"varint,5,opt,name=rank_count,json=rankCount,proto3" json:"rank_count,omitempty"` +} + +func (x *TournamentRecordList) Reset() { + *x = TournamentRecordList{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[91] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TournamentRecordList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TournamentRecordList) ProtoMessage() {} + +func (x *TournamentRecordList) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[91] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TournamentRecordList.ProtoReflect.Descriptor instead. +func (*TournamentRecordList) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{91} +} + +func (x *TournamentRecordList) GetRecords() []*LeaderboardRecord { + if x != nil { + return x.Records + } + return nil +} + +func (x *TournamentRecordList) GetOwnerRecords() []*LeaderboardRecord { + if x != nil { + return x.OwnerRecords + } + return nil +} + +func (x *TournamentRecordList) GetNextCursor() string { + if x != nil { + return x.NextCursor + } + return "" +} + +func (x *TournamentRecordList) GetPrevCursor() string { + if x != nil { + return x.PrevCursor + } + return "" +} + +func (x *TournamentRecordList) GetRankCount() int64 { + if x != nil { + return x.RankCount + } + return 0 +} + +// Update a user's account details. +type UpdateAccountRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The username of the user's account. + Username *wrapperspb.StringValue `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"` + // The display name of the user. + DisplayName *wrapperspb.StringValue `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` + // A URL for an avatar image. + AvatarUrl *wrapperspb.StringValue `protobuf:"bytes,3,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` + // The language expected to be a tag which follows the BCP-47 spec. + LangTag *wrapperspb.StringValue `protobuf:"bytes,4,opt,name=lang_tag,json=langTag,proto3" json:"lang_tag,omitempty"` + // The location set by the user. + Location *wrapperspb.StringValue `protobuf:"bytes,5,opt,name=location,proto3" json:"location,omitempty"` + // The timezone set by the user. + Timezone *wrapperspb.StringValue `protobuf:"bytes,6,opt,name=timezone,proto3" json:"timezone,omitempty"` +} + +func (x *UpdateAccountRequest) Reset() { + *x = UpdateAccountRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[92] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateAccountRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateAccountRequest) ProtoMessage() {} + +func (x *UpdateAccountRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[92] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateAccountRequest.ProtoReflect.Descriptor instead. +func (*UpdateAccountRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{92} +} + +func (x *UpdateAccountRequest) GetUsername() *wrapperspb.StringValue { + if x != nil { + return x.Username + } + return nil +} + +func (x *UpdateAccountRequest) GetDisplayName() *wrapperspb.StringValue { + if x != nil { + return x.DisplayName + } + return nil +} + +func (x *UpdateAccountRequest) GetAvatarUrl() *wrapperspb.StringValue { + if x != nil { + return x.AvatarUrl + } + return nil +} + +func (x *UpdateAccountRequest) GetLangTag() *wrapperspb.StringValue { + if x != nil { + return x.LangTag + } + return nil +} + +func (x *UpdateAccountRequest) GetLocation() *wrapperspb.StringValue { + if x != nil { + return x.Location + } + return nil +} + +func (x *UpdateAccountRequest) GetTimezone() *wrapperspb.StringValue { + if x != nil { + return x.Timezone + } + return nil +} + +// Update fields in a given group. +type UpdateGroupRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the group to update. + GroupId string `protobuf:"bytes,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + // Name. + Name *wrapperspb.StringValue `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // Description string. + Description *wrapperspb.StringValue `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + // Lang tag. + LangTag *wrapperspb.StringValue `protobuf:"bytes,4,opt,name=lang_tag,json=langTag,proto3" json:"lang_tag,omitempty"` + // Avatar URL. + AvatarUrl *wrapperspb.StringValue `protobuf:"bytes,5,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` + // Open is true if anyone should be allowed to join, or false if joins must be approved by a group admin. + Open *wrapperspb.BoolValue `protobuf:"bytes,6,opt,name=open,proto3" json:"open,omitempty"` +} + +func (x *UpdateGroupRequest) Reset() { + *x = UpdateGroupRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[93] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateGroupRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateGroupRequest) ProtoMessage() {} + +func (x *UpdateGroupRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[93] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateGroupRequest.ProtoReflect.Descriptor instead. +func (*UpdateGroupRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{93} +} + +func (x *UpdateGroupRequest) GetGroupId() string { + if x != nil { + return x.GroupId + } + return "" +} + +func (x *UpdateGroupRequest) GetName() *wrapperspb.StringValue { + if x != nil { + return x.Name + } + return nil +} + +func (x *UpdateGroupRequest) GetDescription() *wrapperspb.StringValue { + if x != nil { + return x.Description + } + return nil +} + +func (x *UpdateGroupRequest) GetLangTag() *wrapperspb.StringValue { + if x != nil { + return x.LangTag + } + return nil +} + +func (x *UpdateGroupRequest) GetAvatarUrl() *wrapperspb.StringValue { + if x != nil { + return x.AvatarUrl + } + return nil +} + +func (x *UpdateGroupRequest) GetOpen() *wrapperspb.BoolValue { + if x != nil { + return x.Open + } + return nil +} + +// A user in the server. +type User struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The id of the user's account. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The username of the user's account. + Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` + // The display name of the user. + DisplayName string `protobuf:"bytes,3,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` + // A URL for an avatar image. + AvatarUrl string `protobuf:"bytes,4,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` + // The language expected to be a tag which follows the BCP-47 spec. + LangTag string `protobuf:"bytes,5,opt,name=lang_tag,json=langTag,proto3" json:"lang_tag,omitempty"` + // The location set by the user. + Location string `protobuf:"bytes,6,opt,name=location,proto3" json:"location,omitempty"` + // The timezone set by the user. + Timezone string `protobuf:"bytes,7,opt,name=timezone,proto3" json:"timezone,omitempty"` + // Additional information stored as a JSON object. + Metadata string `protobuf:"bytes,8,opt,name=metadata,proto3" json:"metadata,omitempty"` + // The Facebook id in the user's account. + FacebookId string `protobuf:"bytes,9,opt,name=facebook_id,json=facebookId,proto3" json:"facebook_id,omitempty"` + // The Google id in the user's account. + GoogleId string `protobuf:"bytes,10,opt,name=google_id,json=googleId,proto3" json:"google_id,omitempty"` + // The Apple Game Center in of the user's account. + GamecenterId string `protobuf:"bytes,11,opt,name=gamecenter_id,json=gamecenterId,proto3" json:"gamecenter_id,omitempty"` + // The Steam id in the user's account. + SteamId string `protobuf:"bytes,12,opt,name=steam_id,json=steamId,proto3" json:"steam_id,omitempty"` + // Indicates whether the user is currently online. + Online bool `protobuf:"varint,13,opt,name=online,proto3" json:"online,omitempty"` + // Number of related edges to this user. + EdgeCount int32 `protobuf:"varint,14,opt,name=edge_count,json=edgeCount,proto3" json:"edge_count,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the user was created. + CreateTime *timestamppb.Timestamp `protobuf:"bytes,15,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the user was last updated. + UpdateTime *timestamppb.Timestamp `protobuf:"bytes,16,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` + // The Facebook Instant Game ID in the user's account. + FacebookInstantGameId string `protobuf:"bytes,17,opt,name=facebook_instant_game_id,json=facebookInstantGameId,proto3" json:"facebook_instant_game_id,omitempty"` + // The Apple Sign In ID in the user's account. + AppleId string `protobuf:"bytes,18,opt,name=apple_id,json=appleId,proto3" json:"apple_id,omitempty"` +} + +func (x *User) Reset() { + *x = User{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[94] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *User) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*User) ProtoMessage() {} + +func (x *User) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[94] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use User.ProtoReflect.Descriptor instead. +func (*User) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{94} +} + +func (x *User) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *User) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *User) GetDisplayName() string { + if x != nil { + return x.DisplayName + } + return "" +} + +func (x *User) GetAvatarUrl() string { + if x != nil { + return x.AvatarUrl + } + return "" +} + +func (x *User) GetLangTag() string { + if x != nil { + return x.LangTag + } + return "" +} + +func (x *User) GetLocation() string { + if x != nil { + return x.Location + } + return "" +} + +func (x *User) GetTimezone() string { + if x != nil { + return x.Timezone + } + return "" +} + +func (x *User) GetMetadata() string { + if x != nil { + return x.Metadata + } + return "" +} + +func (x *User) GetFacebookId() string { + if x != nil { + return x.FacebookId + } + return "" +} + +func (x *User) GetGoogleId() string { + if x != nil { + return x.GoogleId + } + return "" +} + +func (x *User) GetGamecenterId() string { + if x != nil { + return x.GamecenterId + } + return "" +} + +func (x *User) GetSteamId() string { + if x != nil { + return x.SteamId + } + return "" +} + +func (x *User) GetOnline() bool { + if x != nil { + return x.Online + } + return false +} + +func (x *User) GetEdgeCount() int32 { + if x != nil { + return x.EdgeCount + } + return 0 +} + +func (x *User) GetCreateTime() *timestamppb.Timestamp { + if x != nil { + return x.CreateTime + } + return nil +} + +func (x *User) GetUpdateTime() *timestamppb.Timestamp { + if x != nil { + return x.UpdateTime + } + return nil +} + +func (x *User) GetFacebookInstantGameId() string { + if x != nil { + return x.FacebookInstantGameId + } + return "" +} + +func (x *User) GetAppleId() string { + if x != nil { + return x.AppleId + } + return "" +} + +// A list of groups belonging to a user, along with the user's role in each group. +type UserGroupList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Group-role pairs for a user. + UserGroups []*UserGroupList_UserGroup `protobuf:"bytes,1,rep,name=user_groups,json=userGroups,proto3" json:"user_groups,omitempty"` + // Cursor for the next page of results, if any. + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *UserGroupList) Reset() { + *x = UserGroupList{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[95] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UserGroupList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserGroupList) ProtoMessage() {} + +func (x *UserGroupList) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[95] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UserGroupList.ProtoReflect.Descriptor instead. +func (*UserGroupList) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{95} +} + +func (x *UserGroupList) GetUserGroups() []*UserGroupList_UserGroup { + if x != nil { + return x.UserGroups + } + return nil +} + +func (x *UserGroupList) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +// A collection of zero or more users. +type Users struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The User objects. + Users []*User `protobuf:"bytes,1,rep,name=users,proto3" json:"users,omitempty"` +} + +func (x *Users) Reset() { + *x = Users{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[96] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Users) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Users) ProtoMessage() {} + +func (x *Users) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[96] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Users.ProtoReflect.Descriptor instead. +func (*Users) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{96} +} + +func (x *Users) GetUsers() []*User { + if x != nil { + return x.Users + } + return nil +} + +// Apple IAP Purchases validation request +type ValidatePurchaseAppleRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Base64 encoded Apple receipt data payload. + Receipt string `protobuf:"bytes,1,opt,name=receipt,proto3" json:"receipt,omitempty"` + // Persist the purchase + Persist *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=persist,proto3" json:"persist,omitempty"` +} + +func (x *ValidatePurchaseAppleRequest) Reset() { + *x = ValidatePurchaseAppleRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[97] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidatePurchaseAppleRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidatePurchaseAppleRequest) ProtoMessage() {} + +func (x *ValidatePurchaseAppleRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[97] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValidatePurchaseAppleRequest.ProtoReflect.Descriptor instead. +func (*ValidatePurchaseAppleRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{97} +} + +func (x *ValidatePurchaseAppleRequest) GetReceipt() string { + if x != nil { + return x.Receipt + } + return "" +} + +func (x *ValidatePurchaseAppleRequest) GetPersist() *wrapperspb.BoolValue { + if x != nil { + return x.Persist + } + return nil +} + +// Apple Subscription validation request +type ValidateSubscriptionAppleRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Base64 encoded Apple receipt data payload. + Receipt string `protobuf:"bytes,1,opt,name=receipt,proto3" json:"receipt,omitempty"` + // Persist the subscription. + Persist *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=persist,proto3" json:"persist,omitempty"` +} + +func (x *ValidateSubscriptionAppleRequest) Reset() { + *x = ValidateSubscriptionAppleRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[98] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidateSubscriptionAppleRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidateSubscriptionAppleRequest) ProtoMessage() {} + +func (x *ValidateSubscriptionAppleRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[98] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValidateSubscriptionAppleRequest.ProtoReflect.Descriptor instead. +func (*ValidateSubscriptionAppleRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{98} +} + +func (x *ValidateSubscriptionAppleRequest) GetReceipt() string { + if x != nil { + return x.Receipt + } + return "" +} + +func (x *ValidateSubscriptionAppleRequest) GetPersist() *wrapperspb.BoolValue { + if x != nil { + return x.Persist + } + return nil +} + +// Google IAP Purchase validation request +type ValidatePurchaseGoogleRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // JSON encoded Google purchase payload. + Purchase string `protobuf:"bytes,1,opt,name=purchase,proto3" json:"purchase,omitempty"` + // Persist the purchase + Persist *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=persist,proto3" json:"persist,omitempty"` +} + +func (x *ValidatePurchaseGoogleRequest) Reset() { + *x = ValidatePurchaseGoogleRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[99] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidatePurchaseGoogleRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidatePurchaseGoogleRequest) ProtoMessage() {} + +func (x *ValidatePurchaseGoogleRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[99] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValidatePurchaseGoogleRequest.ProtoReflect.Descriptor instead. +func (*ValidatePurchaseGoogleRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{99} +} + +func (x *ValidatePurchaseGoogleRequest) GetPurchase() string { + if x != nil { + return x.Purchase + } + return "" +} + +func (x *ValidatePurchaseGoogleRequest) GetPersist() *wrapperspb.BoolValue { + if x != nil { + return x.Persist + } + return nil +} + +// Google Subscription validation request +type ValidateSubscriptionGoogleRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // JSON encoded Google purchase payload. + Receipt string `protobuf:"bytes,1,opt,name=receipt,proto3" json:"receipt,omitempty"` + // Persist the subscription. + Persist *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=persist,proto3" json:"persist,omitempty"` +} + +func (x *ValidateSubscriptionGoogleRequest) Reset() { + *x = ValidateSubscriptionGoogleRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[100] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidateSubscriptionGoogleRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidateSubscriptionGoogleRequest) ProtoMessage() {} + +func (x *ValidateSubscriptionGoogleRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[100] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValidateSubscriptionGoogleRequest.ProtoReflect.Descriptor instead. +func (*ValidateSubscriptionGoogleRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{100} +} + +func (x *ValidateSubscriptionGoogleRequest) GetReceipt() string { + if x != nil { + return x.Receipt + } + return "" +} + +func (x *ValidateSubscriptionGoogleRequest) GetPersist() *wrapperspb.BoolValue { + if x != nil { + return x.Persist + } + return nil +} + +// Huawei IAP Purchase validation request +type ValidatePurchaseHuaweiRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // JSON encoded Huawei InAppPurchaseData. + Purchase string `protobuf:"bytes,1,opt,name=purchase,proto3" json:"purchase,omitempty"` + // InAppPurchaseData signature. + Signature string `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` + // Persist the purchase + Persist *wrapperspb.BoolValue `protobuf:"bytes,3,opt,name=persist,proto3" json:"persist,omitempty"` +} + +func (x *ValidatePurchaseHuaweiRequest) Reset() { + *x = ValidatePurchaseHuaweiRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[101] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidatePurchaseHuaweiRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidatePurchaseHuaweiRequest) ProtoMessage() {} + +func (x *ValidatePurchaseHuaweiRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[101] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValidatePurchaseHuaweiRequest.ProtoReflect.Descriptor instead. +func (*ValidatePurchaseHuaweiRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{101} +} + +func (x *ValidatePurchaseHuaweiRequest) GetPurchase() string { + if x != nil { + return x.Purchase + } + return "" +} + +func (x *ValidatePurchaseHuaweiRequest) GetSignature() string { + if x != nil { + return x.Signature + } + return "" +} + +func (x *ValidatePurchaseHuaweiRequest) GetPersist() *wrapperspb.BoolValue { + if x != nil { + return x.Persist + } + return nil +} + +// Facebook Instant IAP Purchase validation request +type ValidatePurchaseFacebookInstantRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Base64 encoded Facebook Instant signedRequest receipt data payload. + SignedRequest string `protobuf:"bytes,1,opt,name=signed_request,json=signedRequest,proto3" json:"signed_request,omitempty"` + // Persist the purchase + Persist *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=persist,proto3" json:"persist,omitempty"` +} + +func (x *ValidatePurchaseFacebookInstantRequest) Reset() { + *x = ValidatePurchaseFacebookInstantRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[102] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidatePurchaseFacebookInstantRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidatePurchaseFacebookInstantRequest) ProtoMessage() {} + +func (x *ValidatePurchaseFacebookInstantRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[102] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValidatePurchaseFacebookInstantRequest.ProtoReflect.Descriptor instead. +func (*ValidatePurchaseFacebookInstantRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{102} +} + +func (x *ValidatePurchaseFacebookInstantRequest) GetSignedRequest() string { + if x != nil { + return x.SignedRequest + } + return "" +} + +func (x *ValidatePurchaseFacebookInstantRequest) GetPersist() *wrapperspb.BoolValue { + if x != nil { + return x.Persist + } + return nil +} + +// Validated Purchase stored by Nakama. +type ValidatedPurchase struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Purchase User ID. + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + // Purchase Product ID. + ProductId string `protobuf:"bytes,2,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` + // Purchase Transaction ID. + TransactionId string `protobuf:"bytes,3,opt,name=transaction_id,json=transactionId,proto3" json:"transaction_id,omitempty"` + // Store identifier + Store StoreProvider `protobuf:"varint,4,opt,name=store,proto3,enum=nakama.api.StoreProvider" json:"store,omitempty"` + // Timestamp when the purchase was done. + PurchaseTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=purchase_time,json=purchaseTime,proto3" json:"purchase_time,omitempty"` + // Timestamp when the receipt validation was stored in DB. + CreateTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` + // Timestamp when the receipt validation was updated in DB. + UpdateTime *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` + // Timestamp when the purchase was refunded. Set to UNIX + RefundTime *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=refund_time,json=refundTime,proto3" json:"refund_time,omitempty"` + // Raw provider validation response. + ProviderResponse string `protobuf:"bytes,9,opt,name=provider_response,json=providerResponse,proto3" json:"provider_response,omitempty"` + // Whether the purchase was done in production or sandbox environment. + Environment StoreEnvironment `protobuf:"varint,10,opt,name=environment,proto3,enum=nakama.api.StoreEnvironment" json:"environment,omitempty"` + // Whether the purchase had already been validated by Nakama before. + SeenBefore bool `protobuf:"varint,11,opt,name=seen_before,json=seenBefore,proto3" json:"seen_before,omitempty"` +} + +func (x *ValidatedPurchase) Reset() { + *x = ValidatedPurchase{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[103] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidatedPurchase) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidatedPurchase) ProtoMessage() {} + +func (x *ValidatedPurchase) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[103] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValidatedPurchase.ProtoReflect.Descriptor instead. +func (*ValidatedPurchase) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{103} +} + +func (x *ValidatedPurchase) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *ValidatedPurchase) GetProductId() string { + if x != nil { + return x.ProductId + } + return "" +} + +func (x *ValidatedPurchase) GetTransactionId() string { + if x != nil { + return x.TransactionId + } + return "" +} + +func (x *ValidatedPurchase) GetStore() StoreProvider { + if x != nil { + return x.Store + } + return StoreProvider_APPLE_APP_STORE +} + +func (x *ValidatedPurchase) GetPurchaseTime() *timestamppb.Timestamp { + if x != nil { + return x.PurchaseTime + } + return nil +} + +func (x *ValidatedPurchase) GetCreateTime() *timestamppb.Timestamp { + if x != nil { + return x.CreateTime + } + return nil +} + +func (x *ValidatedPurchase) GetUpdateTime() *timestamppb.Timestamp { + if x != nil { + return x.UpdateTime + } + return nil +} + +func (x *ValidatedPurchase) GetRefundTime() *timestamppb.Timestamp { + if x != nil { + return x.RefundTime + } + return nil +} + +func (x *ValidatedPurchase) GetProviderResponse() string { + if x != nil { + return x.ProviderResponse + } + return "" +} + +func (x *ValidatedPurchase) GetEnvironment() StoreEnvironment { + if x != nil { + return x.Environment + } + return StoreEnvironment_UNKNOWN +} + +func (x *ValidatedPurchase) GetSeenBefore() bool { + if x != nil { + return x.SeenBefore + } + return false +} + +// Validate IAP response. +type ValidatePurchaseResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Newly seen validated purchases. + ValidatedPurchases []*ValidatedPurchase `protobuf:"bytes,1,rep,name=validated_purchases,json=validatedPurchases,proto3" json:"validated_purchases,omitempty"` +} + +func (x *ValidatePurchaseResponse) Reset() { + *x = ValidatePurchaseResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[104] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidatePurchaseResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidatePurchaseResponse) ProtoMessage() {} + +func (x *ValidatePurchaseResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[104] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValidatePurchaseResponse.ProtoReflect.Descriptor instead. +func (*ValidatePurchaseResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{104} +} + +func (x *ValidatePurchaseResponse) GetValidatedPurchases() []*ValidatedPurchase { + if x != nil { + return x.ValidatedPurchases + } + return nil +} + +// Validate Subscription response. +type ValidateSubscriptionResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ValidatedSubscription *ValidatedSubscription `protobuf:"bytes,1,opt,name=validated_subscription,json=validatedSubscription,proto3" json:"validated_subscription,omitempty"` +} + +func (x *ValidateSubscriptionResponse) Reset() { + *x = ValidateSubscriptionResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[105] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidateSubscriptionResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidateSubscriptionResponse) ProtoMessage() {} + +func (x *ValidateSubscriptionResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[105] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValidateSubscriptionResponse.ProtoReflect.Descriptor instead. +func (*ValidateSubscriptionResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{105} +} + +func (x *ValidateSubscriptionResponse) GetValidatedSubscription() *ValidatedSubscription { + if x != nil { + return x.ValidatedSubscription + } + return nil +} + +type ValidatedSubscription struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Subscription User ID. + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + // Purchase Product ID. + ProductId string `protobuf:"bytes,2,opt,name=product_id,json=productId,proto3" json:"product_id,omitempty"` + // Purchase Original transaction ID (we only keep track of the original subscription, not subsequent renewals). + OriginalTransactionId string `protobuf:"bytes,3,opt,name=original_transaction_id,json=originalTransactionId,proto3" json:"original_transaction_id,omitempty"` + // Store identifier + Store StoreProvider `protobuf:"varint,4,opt,name=store,proto3,enum=nakama.api.StoreProvider" json:"store,omitempty"` + // UNIX Timestamp when the purchase was done. + PurchaseTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=purchase_time,json=purchaseTime,proto3" json:"purchase_time,omitempty"` + // UNIX Timestamp when the receipt validation was stored in DB. + CreateTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` + // UNIX Timestamp when the receipt validation was updated in DB. + UpdateTime *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` + // Whether the purchase was done in production or sandbox environment. + Environment StoreEnvironment `protobuf:"varint,8,opt,name=environment,proto3,enum=nakama.api.StoreEnvironment" json:"environment,omitempty"` + // Subscription expiration time. The subscription can still be auto-renewed to extend the expiration time further. + ExpiryTime *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=expiry_time,json=expiryTime,proto3" json:"expiry_time,omitempty"` + // Subscription refund time. If this time is set, the subscription was refunded. + RefundTime *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=refund_time,json=refundTime,proto3" json:"refund_time,omitempty"` + // Raw provider validation response body. + ProviderResponse string `protobuf:"bytes,11,opt,name=provider_response,json=providerResponse,proto3" json:"provider_response,omitempty"` + // Raw provider notification body. + ProviderNotification string `protobuf:"bytes,12,opt,name=provider_notification,json=providerNotification,proto3" json:"provider_notification,omitempty"` + // Whether the subscription is currently active or not. + Active bool `protobuf:"varint,13,opt,name=active,proto3" json:"active,omitempty"` +} + +func (x *ValidatedSubscription) Reset() { + *x = ValidatedSubscription{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[106] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ValidatedSubscription) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ValidatedSubscription) ProtoMessage() {} + +func (x *ValidatedSubscription) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[106] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ValidatedSubscription.ProtoReflect.Descriptor instead. +func (*ValidatedSubscription) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{106} +} + +func (x *ValidatedSubscription) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *ValidatedSubscription) GetProductId() string { + if x != nil { + return x.ProductId + } + return "" +} + +func (x *ValidatedSubscription) GetOriginalTransactionId() string { + if x != nil { + return x.OriginalTransactionId + } + return "" +} + +func (x *ValidatedSubscription) GetStore() StoreProvider { + if x != nil { + return x.Store + } + return StoreProvider_APPLE_APP_STORE +} + +func (x *ValidatedSubscription) GetPurchaseTime() *timestamppb.Timestamp { + if x != nil { + return x.PurchaseTime + } + return nil +} + +func (x *ValidatedSubscription) GetCreateTime() *timestamppb.Timestamp { + if x != nil { + return x.CreateTime + } + return nil +} + +func (x *ValidatedSubscription) GetUpdateTime() *timestamppb.Timestamp { + if x != nil { + return x.UpdateTime + } + return nil +} + +func (x *ValidatedSubscription) GetEnvironment() StoreEnvironment { + if x != nil { + return x.Environment + } + return StoreEnvironment_UNKNOWN +} + +func (x *ValidatedSubscription) GetExpiryTime() *timestamppb.Timestamp { + if x != nil { + return x.ExpiryTime + } + return nil +} + +func (x *ValidatedSubscription) GetRefundTime() *timestamppb.Timestamp { + if x != nil { + return x.RefundTime + } + return nil +} + +func (x *ValidatedSubscription) GetProviderResponse() string { + if x != nil { + return x.ProviderResponse + } + return "" +} + +func (x *ValidatedSubscription) GetProviderNotification() string { + if x != nil { + return x.ProviderNotification + } + return "" +} + +func (x *ValidatedSubscription) GetActive() bool { + if x != nil { + return x.Active + } + return false +} + +// A list of validated purchases stored by Nakama. +type PurchaseList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Stored validated purchases. + ValidatedPurchases []*ValidatedPurchase `protobuf:"bytes,1,rep,name=validated_purchases,json=validatedPurchases,proto3" json:"validated_purchases,omitempty"` + // The cursor to send when retrieving the next page, if any. + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor,omitempty"` + // The cursor to send when retrieving the previous page, if any. + PrevCursor string `protobuf:"bytes,3,opt,name=prev_cursor,json=prevCursor,proto3" json:"prev_cursor,omitempty"` +} + +func (x *PurchaseList) Reset() { + *x = PurchaseList{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[107] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PurchaseList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PurchaseList) ProtoMessage() {} + +func (x *PurchaseList) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[107] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PurchaseList.ProtoReflect.Descriptor instead. +func (*PurchaseList) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{107} +} + +func (x *PurchaseList) GetValidatedPurchases() []*ValidatedPurchase { + if x != nil { + return x.ValidatedPurchases + } + return nil +} + +func (x *PurchaseList) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +func (x *PurchaseList) GetPrevCursor() string { + if x != nil { + return x.PrevCursor + } + return "" +} + +// A list of validated subscriptions stored by Nakama. +type SubscriptionList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Stored validated subscriptions. + ValidatedSubscriptions []*ValidatedSubscription `protobuf:"bytes,1,rep,name=validated_subscriptions,json=validatedSubscriptions,proto3" json:"validated_subscriptions,omitempty"` + // The cursor to send when retrieving the next page, if any. + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor,omitempty"` + // The cursor to send when retrieving the previous page, if any. + PrevCursor string `protobuf:"bytes,3,opt,name=prev_cursor,json=prevCursor,proto3" json:"prev_cursor,omitempty"` +} + +func (x *SubscriptionList) Reset() { + *x = SubscriptionList{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[108] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SubscriptionList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscriptionList) ProtoMessage() {} + +func (x *SubscriptionList) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[108] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscriptionList.ProtoReflect.Descriptor instead. +func (*SubscriptionList) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{108} +} + +func (x *SubscriptionList) GetValidatedSubscriptions() []*ValidatedSubscription { + if x != nil { + return x.ValidatedSubscriptions + } + return nil +} + +func (x *SubscriptionList) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +func (x *SubscriptionList) GetPrevCursor() string { + if x != nil { + return x.PrevCursor + } + return "" +} + +// A request to submit a score to a leaderboard. +type WriteLeaderboardRecordRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the leaderboard to write to. + LeaderboardId string `protobuf:"bytes,1,opt,name=leaderboard_id,json=leaderboardId,proto3" json:"leaderboard_id,omitempty"` + // Record input. + Record *WriteLeaderboardRecordRequest_LeaderboardRecordWrite `protobuf:"bytes,2,opt,name=record,proto3" json:"record,omitempty"` +} + +func (x *WriteLeaderboardRecordRequest) Reset() { + *x = WriteLeaderboardRecordRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[109] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WriteLeaderboardRecordRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WriteLeaderboardRecordRequest) ProtoMessage() {} + +func (x *WriteLeaderboardRecordRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[109] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WriteLeaderboardRecordRequest.ProtoReflect.Descriptor instead. +func (*WriteLeaderboardRecordRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{109} +} + +func (x *WriteLeaderboardRecordRequest) GetLeaderboardId() string { + if x != nil { + return x.LeaderboardId + } + return "" +} + +func (x *WriteLeaderboardRecordRequest) GetRecord() *WriteLeaderboardRecordRequest_LeaderboardRecordWrite { + if x != nil { + return x.Record + } + return nil +} + +// The object to store. +type WriteStorageObject struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The collection to store the object. + Collection string `protobuf:"bytes,1,opt,name=collection,proto3" json:"collection,omitempty"` + // The key for the object within the collection. + Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` + // The value of the object. + Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` + // The version hash of the object to check. Possible values are: ["", "*", "#hash#"]. + Version string `protobuf:"bytes,4,opt,name=version,proto3" json:"version,omitempty"` // if-match and if-none-match + // The read access permissions for the object. + PermissionRead *wrapperspb.Int32Value `protobuf:"bytes,5,opt,name=permission_read,json=permissionRead,proto3" json:"permission_read,omitempty"` + // The write access permissions for the object. + PermissionWrite *wrapperspb.Int32Value `protobuf:"bytes,6,opt,name=permission_write,json=permissionWrite,proto3" json:"permission_write,omitempty"` +} + +func (x *WriteStorageObject) Reset() { + *x = WriteStorageObject{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[110] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WriteStorageObject) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WriteStorageObject) ProtoMessage() {} + +func (x *WriteStorageObject) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[110] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WriteStorageObject.ProtoReflect.Descriptor instead. +func (*WriteStorageObject) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{110} +} + +func (x *WriteStorageObject) GetCollection() string { + if x != nil { + return x.Collection + } + return "" +} + +func (x *WriteStorageObject) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *WriteStorageObject) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +func (x *WriteStorageObject) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +func (x *WriteStorageObject) GetPermissionRead() *wrapperspb.Int32Value { + if x != nil { + return x.PermissionRead + } + return nil +} + +func (x *WriteStorageObject) GetPermissionWrite() *wrapperspb.Int32Value { + if x != nil { + return x.PermissionWrite + } + return nil +} + +// Write objects to the storage engine. +type WriteStorageObjectsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The objects to store on the server. + Objects []*WriteStorageObject `protobuf:"bytes,1,rep,name=objects,proto3" json:"objects,omitempty"` +} + +func (x *WriteStorageObjectsRequest) Reset() { + *x = WriteStorageObjectsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[111] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WriteStorageObjectsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WriteStorageObjectsRequest) ProtoMessage() {} + +func (x *WriteStorageObjectsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[111] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WriteStorageObjectsRequest.ProtoReflect.Descriptor instead. +func (*WriteStorageObjectsRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{111} +} + +func (x *WriteStorageObjectsRequest) GetObjects() []*WriteStorageObject { + if x != nil { + return x.Objects + } + return nil +} + +// A request to submit a score to a tournament. +type WriteTournamentRecordRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The tournament ID to write the record for. + TournamentId string `protobuf:"bytes,1,opt,name=tournament_id,json=tournamentId,proto3" json:"tournament_id,omitempty"` + // Record input. + Record *WriteTournamentRecordRequest_TournamentRecordWrite `protobuf:"bytes,2,opt,name=record,proto3" json:"record,omitempty"` +} + +func (x *WriteTournamentRecordRequest) Reset() { + *x = WriteTournamentRecordRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[112] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WriteTournamentRecordRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WriteTournamentRecordRequest) ProtoMessage() {} + +func (x *WriteTournamentRecordRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[112] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WriteTournamentRecordRequest.ProtoReflect.Descriptor instead. +func (*WriteTournamentRecordRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{112} +} + +func (x *WriteTournamentRecordRequest) GetTournamentId() string { + if x != nil { + return x.TournamentId + } + return "" +} + +func (x *WriteTournamentRecordRequest) GetRecord() *WriteTournamentRecordRequest_TournamentRecordWrite { + if x != nil { + return x.Record + } + return nil +} + +// A request to list parties. +type ListPartiesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Limit the number of returned parties. + Limit *wrapperspb.Int32Value `protobuf:"bytes,1,opt,name=limit,proto3" json:"limit,omitempty"` + // Optionally filter by open/closed parties. + Open *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=open,proto3" json:"open,omitempty"` + // Arbitrary label query. + Query *wrapperspb.StringValue `protobuf:"bytes,3,opt,name=query,proto3" json:"query,omitempty"` + // Cursor for the next page of results, if any. + Cursor *wrapperspb.StringValue `protobuf:"bytes,4,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *ListPartiesRequest) Reset() { + *x = ListPartiesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[113] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListPartiesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListPartiesRequest) ProtoMessage() {} + +func (x *ListPartiesRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[113] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListPartiesRequest.ProtoReflect.Descriptor instead. +func (*ListPartiesRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{113} +} + +func (x *ListPartiesRequest) GetLimit() *wrapperspb.Int32Value { + if x != nil { + return x.Limit + } + return nil +} + +func (x *ListPartiesRequest) GetOpen() *wrapperspb.BoolValue { + if x != nil { + return x.Open + } + return nil +} + +func (x *ListPartiesRequest) GetQuery() *wrapperspb.StringValue { + if x != nil { + return x.Query + } + return nil +} + +func (x *ListPartiesRequest) GetCursor() *wrapperspb.StringValue { + if x != nil { + return x.Cursor + } + return nil +} + +// Incoming information about a party. +type Party struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Unique party identifier. + PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` + // Open flag. + Open bool `protobuf:"varint,2,opt,name=open,proto3" json:"open,omitempty"` + // Hidden flag. + Hidden bool `protobuf:"varint,3,opt,name=hidden,proto3" json:"hidden,omitempty"` + // Maximum number of party members. + MaxSize int32 `protobuf:"varint,4,opt,name=max_size,json=maxSize,proto3" json:"max_size,omitempty"` + // The party label, if any. + Label string `protobuf:"bytes,5,opt,name=label,proto3" json:"label,omitempty"` +} + +func (x *Party) Reset() { + *x = Party{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[114] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Party) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Party) ProtoMessage() {} + +func (x *Party) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[114] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Party.ProtoReflect.Descriptor instead. +func (*Party) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{114} +} + +func (x *Party) GetPartyId() string { + if x != nil { + return x.PartyId + } + return "" +} + +func (x *Party) GetOpen() bool { + if x != nil { + return x.Open + } + return false +} + +func (x *Party) GetHidden() bool { + if x != nil { + return x.Hidden + } + return false +} + +func (x *Party) GetMaxSize() int32 { + if x != nil { + return x.MaxSize + } + return 0 +} + +func (x *Party) GetLabel() string { + if x != nil { + return x.Label + } + return "" +} + +// A list of realtime matches. +type PartyList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // A number of parties corresponding to a list operation. + Parties []*Party `protobuf:"bytes,1,rep,name=parties,proto3" json:"parties,omitempty"` + // A cursor to send when retrieving the next page, if any. + Cursor string `protobuf:"bytes,2,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *PartyList) Reset() { + *x = PartyList{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[115] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PartyList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PartyList) ProtoMessage() {} + +func (x *PartyList) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[115] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PartyList.ProtoReflect.Descriptor instead. +func (*PartyList) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{115} +} + +func (x *PartyList) GetParties() []*Party { + if x != nil { + return x.Parties + } + return nil +} + +func (x *PartyList) GetCursor() string { + if x != nil { + return x.Cursor + } + return "" +} + +// A friend of a friend. +type FriendsOfFriendsList_FriendOfFriend struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The user who referred its friend. + Referrer string `protobuf:"bytes,1,opt,name=referrer,proto3" json:"referrer,omitempty"` + // User. + User *User `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"` +} + +func (x *FriendsOfFriendsList_FriendOfFriend) Reset() { + *x = FriendsOfFriendsList_FriendOfFriend{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[128] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FriendsOfFriendsList_FriendOfFriend) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FriendsOfFriendsList_FriendOfFriend) ProtoMessage() {} + +func (x *FriendsOfFriendsList_FriendOfFriend) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[128] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FriendsOfFriendsList_FriendOfFriend.ProtoReflect.Descriptor instead. +func (*FriendsOfFriendsList_FriendOfFriend) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{39, 0} +} + +func (x *FriendsOfFriendsList_FriendOfFriend) GetReferrer() string { + if x != nil { + return x.Referrer + } + return "" +} + +func (x *FriendsOfFriendsList_FriendOfFriend) GetUser() *User { + if x != nil { + return x.User + } + return nil +} + +// A single user-role pair. +type GroupUserList_GroupUser struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // User. + User *User `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` + // Their relationship to the group. + State *wrapperspb.Int32Value `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` +} + +func (x *GroupUserList_GroupUser) Reset() { + *x = GroupUserList_GroupUser{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[129] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GroupUserList_GroupUser) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GroupUserList_GroupUser) ProtoMessage() {} + +func (x *GroupUserList_GroupUser) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[129] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GroupUserList_GroupUser.ProtoReflect.Descriptor instead. +func (*GroupUserList_GroupUser) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{44, 0} +} + +func (x *GroupUserList_GroupUser) GetUser() *User { + if x != nil { + return x.User + } + return nil +} + +func (x *GroupUserList_GroupUser) GetState() *wrapperspb.Int32Value { + if x != nil { + return x.State + } + return nil +} + +// A single group-role pair. +type UserGroupList_UserGroup struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Group. + Group *Group `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` + // The user's relationship to the group. + State *wrapperspb.Int32Value `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` +} + +func (x *UserGroupList_UserGroup) Reset() { + *x = UserGroupList_UserGroup{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[130] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UserGroupList_UserGroup) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserGroupList_UserGroup) ProtoMessage() {} + +func (x *UserGroupList_UserGroup) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[130] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UserGroupList_UserGroup.ProtoReflect.Descriptor instead. +func (*UserGroupList_UserGroup) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{95, 0} +} + +func (x *UserGroupList_UserGroup) GetGroup() *Group { + if x != nil { + return x.Group + } + return nil +} + +func (x *UserGroupList_UserGroup) GetState() *wrapperspb.Int32Value { + if x != nil { + return x.State + } + return nil +} + +// Record values to write. +type WriteLeaderboardRecordRequest_LeaderboardRecordWrite struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The score value to submit. + Score int64 `protobuf:"varint,1,opt,name=score,proto3" json:"score,omitempty"` + // An optional secondary value. + Subscore int64 `protobuf:"varint,2,opt,name=subscore,proto3" json:"subscore,omitempty"` + // Optional record metadata. + Metadata string `protobuf:"bytes,3,opt,name=metadata,proto3" json:"metadata,omitempty"` + // Operator override. + Operator Operator `protobuf:"varint,4,opt,name=operator,proto3,enum=nakama.api.Operator" json:"operator,omitempty"` +} + +func (x *WriteLeaderboardRecordRequest_LeaderboardRecordWrite) Reset() { + *x = WriteLeaderboardRecordRequest_LeaderboardRecordWrite{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[131] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WriteLeaderboardRecordRequest_LeaderboardRecordWrite) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WriteLeaderboardRecordRequest_LeaderboardRecordWrite) ProtoMessage() {} + +func (x *WriteLeaderboardRecordRequest_LeaderboardRecordWrite) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[131] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WriteLeaderboardRecordRequest_LeaderboardRecordWrite.ProtoReflect.Descriptor instead. +func (*WriteLeaderboardRecordRequest_LeaderboardRecordWrite) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{109, 0} +} + +func (x *WriteLeaderboardRecordRequest_LeaderboardRecordWrite) GetScore() int64 { + if x != nil { + return x.Score + } + return 0 +} + +func (x *WriteLeaderboardRecordRequest_LeaderboardRecordWrite) GetSubscore() int64 { + if x != nil { + return x.Subscore + } + return 0 +} + +func (x *WriteLeaderboardRecordRequest_LeaderboardRecordWrite) GetMetadata() string { + if x != nil { + return x.Metadata + } + return "" +} + +func (x *WriteLeaderboardRecordRequest_LeaderboardRecordWrite) GetOperator() Operator { + if x != nil { + return x.Operator + } + return Operator_NO_OVERRIDE +} + +// Record values to write. +type WriteTournamentRecordRequest_TournamentRecordWrite struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The score value to submit. + Score int64 `protobuf:"varint,1,opt,name=score,proto3" json:"score,omitempty"` + // An optional secondary value. + Subscore int64 `protobuf:"varint,2,opt,name=subscore,proto3" json:"subscore,omitempty"` + // A JSON object of additional properties (optional). + Metadata string `protobuf:"bytes,3,opt,name=metadata,proto3" json:"metadata,omitempty"` + // Operator override. + Operator Operator `protobuf:"varint,4,opt,name=operator,proto3,enum=nakama.api.Operator" json:"operator,omitempty"` +} + +func (x *WriteTournamentRecordRequest_TournamentRecordWrite) Reset() { + *x = WriteTournamentRecordRequest_TournamentRecordWrite{} + if protoimpl.UnsafeEnabled { + mi := &file_api_proto_msgTypes[132] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WriteTournamentRecordRequest_TournamentRecordWrite) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WriteTournamentRecordRequest_TournamentRecordWrite) ProtoMessage() {} + +func (x *WriteTournamentRecordRequest_TournamentRecordWrite) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[132] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WriteTournamentRecordRequest_TournamentRecordWrite.ProtoReflect.Descriptor instead. +func (*WriteTournamentRecordRequest_TournamentRecordWrite) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{112, 0} +} + +func (x *WriteTournamentRecordRequest_TournamentRecordWrite) GetScore() int64 { + if x != nil { + return x.Score + } + return 0 +} + +func (x *WriteTournamentRecordRequest_TournamentRecordWrite) GetSubscore() int64 { + if x != nil { + return x.Subscore + } + return 0 +} + +func (x *WriteTournamentRecordRequest_TournamentRecordWrite) GetMetadata() string { + if x != nil { + return x.Metadata + } + return "" +} + +func (x *WriteTournamentRecordRequest_TournamentRecordWrite) GetOperator() Operator { + if x != nil { + return x.Operator + } + return Operator_NO_OVERRIDE +} + +var File_api_proto protoreflect.FileDescriptor + +var file_api_proto_rawDesc = []byte{ + 0x0a, 0x09, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x6e, 0x61, 0x6b, + 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, + 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xab, 0x02, 0x0a, 0x07, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x77, 0x61, 0x6c, 0x6c, + 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x33, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6e, 0x61, 0x6b, 0x61, + 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x52, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x1b, 0x0a, + 0x09, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x76, 0x65, + 0x72, 0x69, 0x66, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x76, 0x65, 0x72, + 0x69, 0x66, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x61, 0x62, + 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x61, 0x62, + 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x99, 0x01, 0x0a, 0x0e, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, + 0x38, 0x0a, 0x04, 0x76, 0x61, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, + 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x2e, 0x56, 0x61, 0x72, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x04, 0x76, 0x61, 0x72, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x56, 0x61, 0x72, + 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, 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, 0x95, 0x01, 0x0a, 0x0c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x70, + 0x70, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x36, 0x0a, 0x04, 0x76, 0x61, 0x72, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x70, 0x70, 0x6c, + 0x65, 0x2e, 0x56, 0x61, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x76, 0x61, 0x72, + 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x56, 0x61, 0x72, 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, 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, 0x91, 0x01, 0x0a, 0x0d, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x37, 0x0a, 0x04, + 0x76, 0x61, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x61, 0x6b, + 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x2e, 0x56, 0x61, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x04, 0x76, 0x61, 0x72, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x56, 0x61, 0x72, 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, 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, 0x91, + 0x01, 0x0a, 0x0d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x37, 0x0a, 0x04, 0x76, 0x61, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x04, 0x76, 0x61, 0x72, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x56, 0x61, 0x72, + 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, 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, 0xb1, 0x01, 0x0a, 0x0c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6d, + 0x61, 0x69, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, + 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, + 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x36, 0x0a, 0x04, 0x76, 0x61, 0x72, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x2e, 0x56, 0x61, + 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x76, 0x61, 0x72, 0x73, 0x1a, 0x37, 0x0a, + 0x09, 0x56, 0x61, 0x72, 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, 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, 0x9b, 0x01, 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x46, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x12, 0x39, 0x0a, 0x04, 0x76, 0x61, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, + 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x46, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x2e, 0x56, 0x61, 0x72, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x76, 0x61, 0x72, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x56, + 0x61, 0x72, 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, 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, 0xc9, 0x01, 0x0a, 0x1a, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x46, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x47, + 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x70, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x10, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x50, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x44, 0x0a, 0x04, 0x76, 0x61, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x30, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x46, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x49, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x2e, 0x56, 0x61, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x04, 0x76, 0x61, 0x72, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x56, 0x61, 0x72, 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, 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, 0xc8, 0x02, 0x0a, 0x11, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x61, 0x6d, 0x65, + 0x43, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x49, 0x64, + 0x12, 0x2b, 0x0a, 0x11, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x12, 0x0a, + 0x04, 0x73, 0x61, 0x6c, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x61, 0x6c, + 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, + 0x24, 0x0a, 0x0e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x75, 0x72, + 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, + 0x65, 0x79, 0x55, 0x72, 0x6c, 0x12, 0x3b, 0x0a, 0x04, 0x76, 0x61, 0x72, 0x73, 0x18, 0x07, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x2e, 0x56, 0x61, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x76, 0x61, + 0x72, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x56, 0x61, 0x72, 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, 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, 0x97, 0x01, 0x0a, 0x0d, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x12, 0x37, 0x0a, 0x04, 0x76, 0x61, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x56, 0x61, 0x72, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x76, 0x61, 0x72, 0x73, 0x1a, 0x37, 0x0a, 0x09, + 0x56, 0x61, 0x72, 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, 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, 0x95, 0x01, 0x0a, 0x0c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x53, 0x74, 0x65, 0x61, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x36, 0x0a, 0x04, + 0x76, 0x61, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6e, 0x61, 0x6b, + 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, + 0x74, 0x65, 0x61, 0x6d, 0x2e, 0x56, 0x61, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, + 0x76, 0x61, 0x72, 0x73, 0x1a, 0x37, 0x0a, 0x09, 0x56, 0x61, 0x72, 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, 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, 0x5f, 0x0a, + 0x11, 0x41, 0x64, 0x64, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x03, 0x69, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x4c, + 0x0a, 0x14, 0x41, 0x64, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, + 0x64, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0xa7, 0x01, 0x0a, + 0x15, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x3f, 0x0a, 0x04, + 0x76, 0x61, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6e, 0x61, 0x6b, + 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x56, 0x61, + 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x76, 0x61, 0x72, 0x73, 0x1a, 0x37, 0x0a, + 0x09, 0x56, 0x61, 0x72, 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, 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, 0x51, 0x0a, 0x14, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x66, + 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x9e, 0x01, 0x0a, 0x18, 0x41, 0x75, + 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x41, 0x70, 0x70, 0x6c, + 0x65, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x06, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, + 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xa0, 0x01, 0x0a, 0x19, 0x41, + 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x43, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6e, 0x61, 0x6b, 0x61, + 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x43, 0x75, + 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, + 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xa0, 0x01, + 0x0a, 0x19, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6e, + 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x32, 0x0a, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x22, 0x9e, 0x01, 0x0a, 0x18, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, + 0x65, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, + 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, + 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x32, 0x0a, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, + 0x65, 0x22, 0xd4, 0x01, 0x0a, 0x1b, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x46, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x35, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x46, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x52, + 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x06, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x04, 0x73, 0x79, 0x6e, 0x63, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x22, 0xba, 0x01, 0x0a, 0x26, 0x41, 0x75, 0x74, + 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x46, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, + 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x46, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, + 0x6b, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x52, 0x07, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, + 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, + 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xa8, 0x01, 0x0a, 0x1d, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, + 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x47, 0x61, 0x6d, 0x65, 0x43, 0x65, 0x6e, 0x74, 0x65, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, + 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x61, 0x6d, + 0x65, 0x43, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x32, 0x0a, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x22, 0xa0, 0x01, 0x0a, 0x19, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, + 0x65, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, + 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, + 0x61, 0x6d, 0x65, 0x22, 0xce, 0x01, 0x0a, 0x18, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x53, 0x74, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x32, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x74, 0x65, 0x61, 0x6d, 0x52, 0x07, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x06, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x04, + 0x73, 0x79, 0x6e, 0x63, 0x22, 0x4c, 0x0a, 0x14, 0x42, 0x61, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, + 0x64, 0x73, 0x22, 0x45, 0x0a, 0x13, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x46, 0x72, 0x69, 0x65, 0x6e, + 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x75, + 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, + 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x80, 0x04, 0x0a, 0x0e, 0x43, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1d, 0x0a, 0x0a, + 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x73, + 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x3b, + 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x73, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, + 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, + 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x6f, 0x6e, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x4f, 0x6e, 0x65, 0x12, 0x1e, 0x0a, 0x0b, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x74, 0x77, 0x6f, 0x18, 0x0d, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x54, 0x77, 0x6f, 0x22, 0xb9, 0x01, 0x0a, + 0x12, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4c, + 0x69, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, + 0x65, 0x78, 0x74, 0x5f, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, + 0x70, 0x72, 0x65, 0x76, 0x5f, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x76, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x29, 0x0a, + 0x10, 0x63, 0x61, 0x63, 0x68, 0x65, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x75, 0x72, 0x73, 0x6f, + 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x61, 0x62, + 0x6c, 0x65, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xb5, 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x5f, 0x74, 0x61, + 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x61, 0x6e, 0x67, 0x54, 0x61, 0x67, + 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, + 0x12, 0x0a, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6f, + 0x70, 0x65, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x22, 0x46, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, + 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x75, + 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x2f, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, + 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x47, 0x0a, 0x1e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x6c, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, + 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x69, + 0x64, 0x73, 0x22, 0x44, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6f, 0x75, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x6f, 0x75, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x63, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x5f, 0x0a, + 0x1b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x0a, + 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x49, 0x64, 0x52, 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x73, 0x22, 0xf3, + 0x01, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x0a, + 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, + 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x65, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x69, 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, 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, 0x82, 0x02, 0x0a, 0x06, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, + 0x24, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, + 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x31, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x22, 0x46, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x52, + 0x49, 0x45, 0x4e, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x4e, 0x56, 0x49, 0x54, 0x45, + 0x5f, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x49, 0x4e, 0x56, 0x49, 0x54, + 0x45, 0x5f, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, + 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x10, 0x03, 0x22, 0x52, 0x0a, 0x0a, 0x46, 0x72, 0x69, + 0x65, 0x6e, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x07, 0x66, 0x72, 0x69, 0x65, 0x6e, + 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, + 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x52, 0x07, 0x66, 0x72, + 0x69, 0x65, 0x6e, 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xe1, 0x01, + 0x0a, 0x14, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x73, 0x4f, 0x66, 0x46, 0x72, 0x69, 0x65, 0x6e, + 0x64, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x5d, 0x0a, 0x12, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, + 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x73, 0x4f, 0x66, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x4f, 0x66, 0x46, 0x72, 0x69, + 0x65, 0x6e, 0x64, 0x52, 0x10, 0x66, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x73, 0x4f, 0x66, 0x46, 0x72, + 0x69, 0x65, 0x6e, 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x1a, 0x52, 0x0a, + 0x0e, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x4f, 0x66, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x12, + 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x04, 0x75, + 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6e, 0x61, 0x6b, 0x61, + 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, + 0x72, 0x22, 0x64, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, + 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x66, 0x61, 0x63, 0x65, + 0x62, 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x73, 0x22, 0x37, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, + 0x22, 0xa8, 0x03, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x19, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x6c, 0x61, 0x6e, 0x67, 0x54, 0x61, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, + 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, + 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x2e, 0x0a, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x65, 0x64, 0x67, 0x65, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, + 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x4e, 0x0a, 0x09, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, + 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x06, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0x96, 0x02, 0x0a, 0x0d, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x44, 0x0a, + 0x0b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x55, 0x73, 0x65, 0x72, 0x52, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x55, 0x73, + 0x65, 0x72, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x1a, 0xa6, 0x01, 0x0a, 0x09, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x55, 0x73, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x04, 0x75, 0x73, 0x65, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, + 0x31, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x22, 0x40, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x53, + 0x55, 0x50, 0x45, 0x52, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x41, + 0x44, 0x4d, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, + 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x4a, 0x4f, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, + 0x53, 0x54, 0x10, 0x03, 0x22, 0x87, 0x01, 0x0a, 0x1c, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x46, + 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x46, 0x61, 0x63, 0x65, 0x62, + 0x6f, 0x6f, 0x6b, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x05, + 0x72, 0x65, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, + 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x72, 0x65, 0x73, 0x65, 0x74, 0x22, 0x81, + 0x01, 0x0a, 0x19, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x65, 0x61, 0x6d, 0x46, 0x72, + 0x69, 0x65, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x07, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x53, 0x74, 0x65, 0x61, 0x6d, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x30, 0x0a, 0x05, 0x72, 0x65, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x72, 0x65, 0x73, + 0x65, 0x74, 0x22, 0x2d, 0x0a, 0x10, 0x4a, 0x6f, 0x69, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, + 0x64, 0x22, 0x3c, 0x0a, 0x15, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x6f, + 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, + 0x4d, 0x0a, 0x15, 0x4b, 0x69, 0x63, 0x6b, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x55, 0x73, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0xab, + 0x02, 0x0a, 0x0b, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, + 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x09, 0x73, 0x6f, 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x30, 0x0a, + 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x14, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, + 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x76, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x09, 0x70, 0x72, 0x65, 0x76, 0x52, 0x65, 0x73, 0x65, 0x74, 0x12, 0x1d, + 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x52, 0x65, 0x73, 0x65, 0x74, 0x12, 0x1a, 0x0a, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, 0x22, 0x66, 0x0a, 0x0f, + 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x3b, 0x0a, 0x0c, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x0c, + 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, + 0x72, 0x73, 0x6f, 0x72, 0x22, 0xe9, 0x03, 0x0a, 0x11, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, + 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x6c, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, + 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x08, + 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x75, 0x73, + 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x73, 0x75, 0x62, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, + 0x73, 0x75, 0x62, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x75, 0x6d, 0x5f, + 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6e, 0x75, 0x6d, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, + 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x65, + 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x65, 0x78, + 0x70, 0x69, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x61, 0x6e, 0x6b, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x72, 0x61, 0x6e, 0x6b, 0x12, 0x22, 0x0a, 0x0d, + 0x6d, 0x61, 0x78, 0x5f, 0x6e, 0x75, 0x6d, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x0c, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x53, 0x63, 0x6f, 0x72, 0x65, + 0x22, 0xf5, 0x01, 0x0a, 0x15, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x07, 0x72, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, + 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, + 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x07, 0x72, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x73, 0x12, 0x42, 0x0a, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, + 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, + 0x61, 0x72, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0c, 0x6f, 0x77, 0x6e, 0x65, 0x72, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x65, 0x78, 0x74, 0x5f, + 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x65, + 0x78, 0x74, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x76, + 0x5f, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, + 0x72, 0x65, 0x76, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x61, 0x6e, + 0x6b, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x72, + 0x61, 0x6e, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x2e, 0x0a, 0x11, 0x4c, 0x65, 0x61, 0x76, + 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, + 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x7c, 0x0a, 0x13, 0x4c, 0x69, 0x6e, 0x6b, + 0x46, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x35, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x46, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x52, 0x07, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x22, 0x76, 0x0a, 0x10, 0x4c, 0x69, 0x6e, 0x6b, 0x53, 0x74, + 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x07, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6e, 0x61, + 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x53, 0x74, 0x65, 0x61, 0x6d, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, + 0x0a, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, + 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x04, 0x73, 0x79, 0x6e, 0x63, 0x22, 0xbc, + 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, + 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x05, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, + 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, + 0x34, 0x0a, 0x07, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x66, 0x6f, + 0x72, 0x77, 0x61, 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0x92, 0x01, + 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x31, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, + 0x72, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, + 0x6f, 0x72, 0x22, 0x68, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, + 0x73, 0x4f, 0x66, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x31, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xf4, 0x01, 0x0a, + 0x11, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x31, + 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x61, 0x6e, 0x67, 0x54, 0x61, 0x67, 0x12, 0x35, 0x0a, 0x07, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x73, 0x12, 0x2e, 0x0a, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x04, 0x6f, + 0x70, 0x65, 0x6e, 0x22, 0xb0, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, + 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x31, 0x0a, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, + 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xed, 0x01, 0x0a, 0x28, 0x4c, 0x69, 0x73, 0x74, 0x4c, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x73, 0x41, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, + 0x72, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x05, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, + 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x19, + 0x0a, 0x08, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x06, 0x65, 0x78, 0x70, + 0x69, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, + 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x12, 0x16, + 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xe3, 0x01, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x4c, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x6c, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x49, 0x64, 0x12, + 0x1b, 0x0a, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x08, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, 0x31, 0x0a, 0x05, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, + 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, + 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x33, 0x0a, 0x06, 0x65, 0x78, 0x70, 0x69, 0x72, + 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x22, 0xe1, 0x02, 0x0a, + 0x12, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x40, 0x0a, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, 0x12, 0x32, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x36, 0x0a, 0x08, + 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x6d, 0x69, 0x6e, + 0x53, 0x69, 0x7a, 0x65, 0x12, 0x36, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x32, 0x0a, 0x05, + 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x22, 0x78, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x05, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, + 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, + 0x29, 0x0a, 0x10, 0x63, 0x61, 0x63, 0x68, 0x65, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x75, 0x72, + 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x61, 0x63, 0x68, 0x65, + 0x61, 0x62, 0x6c, 0x65, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0x9f, 0x01, 0x0a, 0x19, 0x4c, + 0x69, 0x73, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x31, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0x65, 0x0a, 0x18, + 0x4c, 0x69, 0x73, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x63, + 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, + 0x73, 0x6f, 0x72, 0x22, 0xea, 0x01, 0x0a, 0x27, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6f, 0x75, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x41, 0x72, 0x6f, + 0x75, 0x6e, 0x64, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x23, 0x0a, 0x0d, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x6e, 0x74, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x06, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x06, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, + 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, + 0x22, 0xe0, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, + 0x65, 0x6e, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x77, 0x6e, 0x65, 0x72, + 0x49, 0x64, 0x73, 0x12, 0x31, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x33, + 0x0a, 0x06, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x65, 0x78, 0x70, + 0x69, 0x72, 0x79, 0x22, 0xdf, 0x02, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6f, 0x75, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x43, + 0x0a, 0x0e, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x12, 0x3f, 0x0a, 0x0c, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x5f, + 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, + 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, + 0x79, 0x45, 0x6e, 0x64, 0x12, 0x3b, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, + 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x37, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x31, 0x0a, 0x05, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, + 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, + 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, + 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xae, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, + 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x31, 0x0a, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, + 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xd0, 0x01, 0x0a, 0x05, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x12, 0x32, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x69, 0x63, + 0x6b, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x74, 0x69, + 0x63, 0x6b, 0x52, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, + 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x68, 0x61, + 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x38, 0x0a, 0x09, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, + 0x68, 0x65, 0x73, 0x22, 0x99, 0x01, 0x0a, 0x19, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, + 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, + 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3f, + 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, + 0xd4, 0x01, 0x0a, 0x0f, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x53, 0x74, + 0x61, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x74, 0x69, 0x63, 0x6b, 0x65, + 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x55, 0x0a, 0x19, 0x6f, 0x6c, 0x64, 0x65, 0x73, 0x74, + 0x5f, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x16, 0x6f, 0x6c, 0x64, 0x65, 0x73, 0x74, 0x54, 0x69, 0x63, + 0x6b, 0x65, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x47, 0x0a, + 0x0b, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xe0, 0x01, 0x0a, 0x0c, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, + 0x1b, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x0b, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x65, 0x72, + 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x70, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x7d, 0x0a, 0x10, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x3e, 0x0a, + 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, + 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x0a, + 0x10, 0x63, 0x61, 0x63, 0x68, 0x65, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x75, 0x72, 0x73, 0x6f, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x61, 0x62, + 0x6c, 0x65, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0x50, 0x0a, 0x18, 0x50, 0x72, 0x6f, 0x6d, + 0x6f, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, + 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x4f, 0x0a, 0x17, 0x44, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, + 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x60, 0x0a, 0x13, 0x52, + 0x65, 0x61, 0x64, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x5b, 0x0a, + 0x19, 0x52, 0x65, 0x61, 0x64, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x0a, 0x6f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x61, 0x64, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x52, + 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x73, 0x22, 0x4a, 0x0a, 0x03, 0x52, 0x70, + 0x63, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x68, + 0x74, 0x74, 0x70, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x68, + 0x74, 0x74, 0x70, 0x4b, 0x65, 0x79, 0x22, 0x5e, 0x0a, 0x07, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, + 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xd8, 0x02, 0x0a, 0x0d, 0x53, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, + 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x70, 0x65, + 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x12, 0x29, 0x0a, 0x10, + 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x22, 0xf1, 0x01, 0x0a, 0x10, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x41, 0x63, 0x6b, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x0b, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x45, 0x0a, 0x11, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x63, 0x6b, 0x73, 0x12, 0x30, 0x0a, 0x04, 0x61, 0x63, + 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, + 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x41, 0x63, 0x6b, 0x52, 0x04, 0x61, 0x63, 0x6b, 0x73, 0x22, 0x45, 0x0a, 0x0e, + 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x33, + 0x0a, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x22, 0x60, 0x0a, 0x11, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6e, 0x61, 0x6b, 0x61, + 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x16, 0x0a, + 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, + 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xe3, 0x05, 0x0a, 0x0a, 0x54, 0x6f, 0x75, 0x72, 0x6e, 0x61, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, + 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, + 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x72, 0x74, + 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x73, 0x6f, + 0x72, 0x74, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6d, + 0x61, 0x78, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x6d, + 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x5f, 0x6e, 0x75, + 0x6d, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6d, + 0x61, 0x78, 0x4e, 0x75, 0x6d, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x61, + 0x6e, 0x5f, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, + 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x6e, 0x64, 0x5f, 0x61, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x65, 0x6e, 0x64, + 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x72, + 0x65, 0x73, 0x65, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x65, 0x78, 0x74, + 0x52, 0x65, 0x73, 0x65, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x39, + 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x11, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, + 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x76, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x74, 0x18, 0x12, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x09, 0x70, 0x72, 0x65, 0x76, 0x52, 0x65, 0x73, 0x65, 0x74, 0x12, 0x30, + 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x14, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x72, + 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6a, + 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x22, 0x62, 0x0a, 0x0e, 0x54, + 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x38, 0x0a, + 0x0b, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x54, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x74, 0x6f, 0x75, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, + 0xf4, 0x01, 0x0a, 0x14, 0x54, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, + 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, + 0x72, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x07, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x73, 0x12, 0x42, 0x0a, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, + 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x0c, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x65, + 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x63, 0x75, + 0x72, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x65, 0x78, 0x74, + 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x76, 0x5f, 0x63, + 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, + 0x76, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x61, 0x6e, 0x6b, 0x5f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x72, 0x61, 0x6e, + 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xfb, 0x02, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x38, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0c, 0x64, 0x69, 0x73, + 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x64, + 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0a, 0x61, 0x76, + 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x61, 0x76, + 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x37, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x5f, + 0x74, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x6c, 0x61, 0x6e, 0x67, 0x54, 0x61, 0x67, + 0x12, 0x38, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x08, 0x74, 0x69, + 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x74, 0x69, 0x6d, 0x65, + 0x7a, 0x6f, 0x6e, 0x65, 0x22, 0xc7, 0x02, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, + 0x5f, 0x74, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x6c, 0x61, 0x6e, 0x67, 0x54, 0x61, + 0x67, 0x12, 0x3b, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x2e, + 0x0a, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, + 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x22, 0xe6, + 0x04, 0x0a, 0x04, 0x55, 0x73, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x69, 0x73, 0x70, 0x6c, + 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, + 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, + 0x61, 0x72, 0x55, 0x72, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x5f, 0x74, 0x61, + 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x61, 0x6e, 0x67, 0x54, 0x61, 0x67, + 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, + 0x74, 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x74, 0x69, 0x6d, 0x65, 0x7a, 0x6f, 0x6e, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, + 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x61, 0x63, 0x65, 0x62, + 0x6f, 0x6f, 0x6b, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x67, 0x61, 0x6d, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x67, 0x61, 0x6d, 0x65, 0x63, + 0x65, 0x6e, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x65, 0x61, 0x6d, + 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x74, 0x65, 0x61, 0x6d, + 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x06, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x64, + 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, + 0x65, 0x64, 0x67, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x66, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x5f, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x5f, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x66, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x47, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, + 0x61, 0x70, 0x70, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x61, 0x70, 0x70, 0x6c, 0x65, 0x49, 0x64, 0x22, 0x99, 0x02, 0x0a, 0x0d, 0x55, 0x73, 0x65, 0x72, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x0b, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x73, 0x65, 0x72, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, + 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x1a, 0xa9, 0x01, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x72, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x27, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x31, + 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x22, 0x40, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x55, + 0x50, 0x45, 0x52, 0x41, 0x44, 0x4d, 0x49, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x44, + 0x4d, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x10, + 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x4a, 0x4f, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, + 0x54, 0x10, 0x03, 0x22, 0x2f, 0x0a, 0x05, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x26, 0x0a, 0x05, + 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6e, 0x61, + 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75, + 0x73, 0x65, 0x72, 0x73, 0x22, 0x6e, 0x0a, 0x1c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, + 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x12, 0x34, + 0x0a, 0x07, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x70, 0x65, 0x72, + 0x73, 0x69, 0x73, 0x74, 0x22, 0x72, 0x0a, 0x20, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, + 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x70, 0x70, 0x6c, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x65, + 0x69, 0x70, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x63, 0x65, 0x69, + 0x70, 0x74, 0x12, 0x34, 0x0a, 0x07, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x07, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x22, 0x71, 0x0a, 0x1d, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x65, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x47, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x75, 0x72, + 0x63, 0x68, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x75, 0x72, + 0x63, 0x68, 0x61, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x07, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x07, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x22, 0x73, 0x0a, 0x21, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x72, 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x12, 0x34, 0x0a, 0x07, 0x70, 0x65, + 0x72, 0x73, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, + 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, + 0x22, 0x8f, 0x01, 0x0a, 0x1d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, 0x75, 0x72, + 0x63, 0x68, 0x61, 0x73, 0x65, 0x48, 0x75, 0x61, 0x77, 0x65, 0x69, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x12, 0x1c, + 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x34, 0x0a, 0x07, + 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x70, 0x65, 0x72, 0x73, 0x69, + 0x73, 0x74, 0x22, 0x85, 0x01, 0x0a, 0x26, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x50, + 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x46, 0x61, 0x63, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, + 0x0e, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x07, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x07, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x22, 0xa9, 0x04, 0x0a, 0x11, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, + 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, + 0x64, 0x75, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, + 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, + 0x2f, 0x0a, 0x05, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, + 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x05, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x12, 0x3f, 0x0a, 0x0d, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, + 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x72, + 0x65, 0x66, 0x75, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x72, 0x65, + 0x66, 0x75, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6e, 0x61, 0x6b, + 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x62, 0x65, + 0x66, 0x6f, 0x72, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x73, 0x65, 0x65, 0x6e, + 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x22, 0x6a, 0x0a, 0x18, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x65, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x52, 0x12, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x50, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, + 0x65, 0x73, 0x22, 0x78, 0x0a, 0x1c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x58, 0x0a, 0x16, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, + 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xa7, 0x05, 0x0a, + 0x15, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x1d, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x49, 0x64, 0x12, 0x36, + 0x0a, 0x17, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x15, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x05, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x52, 0x05, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x70, 0x75, 0x72, 0x63, 0x68, + 0x61, 0x73, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x70, 0x75, 0x72, 0x63, + 0x68, 0x61, 0x73, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, + 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, + 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, + 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x0b, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x3b, 0x0a, 0x0b, 0x72, 0x65, 0x66, 0x75, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x0a, 0x72, 0x65, 0x66, 0x75, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x11, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x15, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, + 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x97, 0x01, 0x0a, 0x0c, 0x50, 0x75, 0x72, 0x63, 0x68, + 0x61, 0x73, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x75, 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x50, 0x75, 0x72, 0x63, 0x68, + 0x61, 0x73, 0x65, 0x52, 0x12, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x50, 0x75, + 0x72, 0x63, 0x68, 0x61, 0x73, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, + 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, 0x76, 0x5f, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x76, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, + 0x22, 0xa7, 0x01, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x5a, 0x0a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x64, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x16, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x65, + 0x76, 0x5f, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x70, 0x72, 0x65, 0x76, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xbb, 0x02, 0x0a, 0x1d, 0x57, + 0x72, 0x69, 0x74, 0x65, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, + 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x49, 0x64, 0x12, 0x58, 0x0a, 0x06, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4c, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x06, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x1a, 0x98, 0x01, + 0x0a, 0x16, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x63, + 0x6f, 0x72, 0x64, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x73, 0x75, 0x62, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x08, 0x73, 0x75, 0x62, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x30, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, + 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x08, + 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x84, 0x02, 0x0a, 0x12, 0x57, 0x72, 0x69, + 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, + 0x1e, 0x0a, 0x0a, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x44, 0x0a, 0x0f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x72, 0x65, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, + 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x61, 0x64, 0x12, 0x46, 0x0a, 0x10, 0x70, 0x65, 0x72, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, + 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x22, + 0x56, 0x0a, 0x1a, 0x57, 0x72, 0x69, 0x74, 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, + 0x07, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x72, 0x69, 0x74, + 0x65, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, + 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x22, 0xb5, 0x02, 0x0a, 0x1c, 0x57, 0x72, 0x69, 0x74, + 0x65, 0x54, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x6f, 0x75, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x74, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x56, 0x0a, + 0x06, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, + 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x54, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x6f, 0x75, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x06, 0x72, + 0x65, 0x63, 0x6f, 0x72, 0x64, 0x1a, 0x97, 0x01, 0x0a, 0x15, 0x54, 0x6f, 0x75, 0x72, 0x6e, 0x61, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x57, 0x72, 0x69, 0x74, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, + 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x73, 0x63, 0x6f, 0x72, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x75, 0x62, 0x73, 0x63, 0x6f, 0x72, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x30, 0x0a, + 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x14, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, + 0xe1, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x6f, 0x70, 0x65, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x12, 0x32, 0x0a, 0x05, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x34, 0x0a, + 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x63, 0x75, 0x72, + 0x73, 0x6f, 0x72, 0x22, 0x7f, 0x0a, 0x05, 0x50, 0x61, 0x72, 0x74, 0x79, 0x12, 0x19, 0x0a, 0x08, + 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x68, + 0x69, 0x64, 0x64, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x68, 0x69, 0x64, + 0x64, 0x65, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x22, 0x50, 0x0a, 0x09, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x2b, 0x0a, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x50, 0x61, 0x72, 0x74, 0x79, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x16, + 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x2a, 0x6f, 0x0a, 0x0d, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x50, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x13, 0x0a, 0x0f, 0x41, 0x50, 0x50, 0x4c, 0x45, + 0x5f, 0x41, 0x50, 0x50, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, + 0x47, 0x4f, 0x4f, 0x47, 0x4c, 0x45, 0x5f, 0x50, 0x4c, 0x41, 0x59, 0x5f, 0x53, 0x54, 0x4f, 0x52, + 0x45, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x48, 0x55, 0x41, 0x57, 0x45, 0x49, 0x5f, 0x41, 0x50, + 0x50, 0x5f, 0x47, 0x41, 0x4c, 0x4c, 0x45, 0x52, 0x59, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x46, + 0x41, 0x43, 0x45, 0x42, 0x4f, 0x4f, 0x4b, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x54, 0x5f, + 0x53, 0x54, 0x4f, 0x52, 0x45, 0x10, 0x03, 0x2a, 0x3c, 0x0a, 0x10, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x0b, 0x0a, 0x07, 0x55, + 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x41, 0x4e, 0x44, + 0x42, 0x4f, 0x58, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x52, 0x4f, 0x44, 0x55, 0x43, 0x54, + 0x49, 0x4f, 0x4e, 0x10, 0x02, 0x2a, 0x4c, 0x0a, 0x08, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, + 0x72, 0x12, 0x0f, 0x0a, 0x0b, 0x4e, 0x4f, 0x5f, 0x4f, 0x56, 0x45, 0x52, 0x52, 0x49, 0x44, 0x45, + 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x45, 0x53, 0x54, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, + 0x53, 0x45, 0x54, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x4e, 0x43, 0x52, 0x45, 0x4d, 0x45, + 0x4e, 0x54, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x43, 0x52, 0x45, 0x4d, 0x45, 0x4e, + 0x54, 0x10, 0x04, 0x42, 0x63, 0x0a, 0x19, 0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x65, 0x72, 0x6f, 0x69, + 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, + 0x42, 0x09, 0x4e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x41, 0x70, 0x69, 0x50, 0x01, 0x5a, 0x27, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x65, 0x72, 0x6f, 0x69, 0x63, + 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0f, 0x4e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_api_proto_rawDescOnce sync.Once + file_api_proto_rawDescData = file_api_proto_rawDesc +) + +func file_api_proto_rawDescGZIP() []byte { + file_api_proto_rawDescOnce.Do(func() { + file_api_proto_rawDescData = protoimpl.X.CompressGZIP(file_api_proto_rawDescData) + }) + return file_api_proto_rawDescData +} + +var file_api_proto_enumTypes = make([]protoimpl.EnumInfo, 6) +var file_api_proto_msgTypes = make([]protoimpl.MessageInfo, 133) +var file_api_proto_goTypes = []interface{}{ + (StoreProvider)(0), // 0: nakama.api.StoreProvider + (StoreEnvironment)(0), // 1: nakama.api.StoreEnvironment + (Operator)(0), // 2: nakama.api.Operator + (Friend_State)(0), // 3: nakama.api.Friend.State + (GroupUserList_GroupUser_State)(0), // 4: nakama.api.GroupUserList.GroupUser.State + (UserGroupList_UserGroup_State)(0), // 5: nakama.api.UserGroupList.UserGroup.State + (*Account)(nil), // 6: nakama.api.Account + (*AccountRefresh)(nil), // 7: nakama.api.AccountRefresh + (*AccountApple)(nil), // 8: nakama.api.AccountApple + (*AccountCustom)(nil), // 9: nakama.api.AccountCustom + (*AccountDevice)(nil), // 10: nakama.api.AccountDevice + (*AccountEmail)(nil), // 11: nakama.api.AccountEmail + (*AccountFacebook)(nil), // 12: nakama.api.AccountFacebook + (*AccountFacebookInstantGame)(nil), // 13: nakama.api.AccountFacebookInstantGame + (*AccountGameCenter)(nil), // 14: nakama.api.AccountGameCenter + (*AccountGoogle)(nil), // 15: nakama.api.AccountGoogle + (*AccountSteam)(nil), // 16: nakama.api.AccountSteam + (*AddFriendsRequest)(nil), // 17: nakama.api.AddFriendsRequest + (*AddGroupUsersRequest)(nil), // 18: nakama.api.AddGroupUsersRequest + (*SessionRefreshRequest)(nil), // 19: nakama.api.SessionRefreshRequest + (*SessionLogoutRequest)(nil), // 20: nakama.api.SessionLogoutRequest + (*AuthenticateAppleRequest)(nil), // 21: nakama.api.AuthenticateAppleRequest + (*AuthenticateCustomRequest)(nil), // 22: nakama.api.AuthenticateCustomRequest + (*AuthenticateDeviceRequest)(nil), // 23: nakama.api.AuthenticateDeviceRequest + (*AuthenticateEmailRequest)(nil), // 24: nakama.api.AuthenticateEmailRequest + (*AuthenticateFacebookRequest)(nil), // 25: nakama.api.AuthenticateFacebookRequest + (*AuthenticateFacebookInstantGameRequest)(nil), // 26: nakama.api.AuthenticateFacebookInstantGameRequest + (*AuthenticateGameCenterRequest)(nil), // 27: nakama.api.AuthenticateGameCenterRequest + (*AuthenticateGoogleRequest)(nil), // 28: nakama.api.AuthenticateGoogleRequest + (*AuthenticateSteamRequest)(nil), // 29: nakama.api.AuthenticateSteamRequest + (*BanGroupUsersRequest)(nil), // 30: nakama.api.BanGroupUsersRequest + (*BlockFriendsRequest)(nil), // 31: nakama.api.BlockFriendsRequest + (*ChannelMessage)(nil), // 32: nakama.api.ChannelMessage + (*ChannelMessageList)(nil), // 33: nakama.api.ChannelMessageList + (*CreateGroupRequest)(nil), // 34: nakama.api.CreateGroupRequest + (*DeleteFriendsRequest)(nil), // 35: nakama.api.DeleteFriendsRequest + (*DeleteGroupRequest)(nil), // 36: nakama.api.DeleteGroupRequest + (*DeleteLeaderboardRecordRequest)(nil), // 37: nakama.api.DeleteLeaderboardRecordRequest + (*DeleteNotificationsRequest)(nil), // 38: nakama.api.DeleteNotificationsRequest + (*DeleteTournamentRecordRequest)(nil), // 39: nakama.api.DeleteTournamentRecordRequest + (*DeleteStorageObjectId)(nil), // 40: nakama.api.DeleteStorageObjectId + (*DeleteStorageObjectsRequest)(nil), // 41: nakama.api.DeleteStorageObjectsRequest + (*Event)(nil), // 42: nakama.api.Event + (*Friend)(nil), // 43: nakama.api.Friend + (*FriendList)(nil), // 44: nakama.api.FriendList + (*FriendsOfFriendsList)(nil), // 45: nakama.api.FriendsOfFriendsList + (*GetUsersRequest)(nil), // 46: nakama.api.GetUsersRequest + (*GetSubscriptionRequest)(nil), // 47: nakama.api.GetSubscriptionRequest + (*Group)(nil), // 48: nakama.api.Group + (*GroupList)(nil), // 49: nakama.api.GroupList + (*GroupUserList)(nil), // 50: nakama.api.GroupUserList + (*ImportFacebookFriendsRequest)(nil), // 51: nakama.api.ImportFacebookFriendsRequest + (*ImportSteamFriendsRequest)(nil), // 52: nakama.api.ImportSteamFriendsRequest + (*JoinGroupRequest)(nil), // 53: nakama.api.JoinGroupRequest + (*JoinTournamentRequest)(nil), // 54: nakama.api.JoinTournamentRequest + (*KickGroupUsersRequest)(nil), // 55: nakama.api.KickGroupUsersRequest + (*Leaderboard)(nil), // 56: nakama.api.Leaderboard + (*LeaderboardList)(nil), // 57: nakama.api.LeaderboardList + (*LeaderboardRecord)(nil), // 58: nakama.api.LeaderboardRecord + (*LeaderboardRecordList)(nil), // 59: nakama.api.LeaderboardRecordList + (*LeaveGroupRequest)(nil), // 60: nakama.api.LeaveGroupRequest + (*LinkFacebookRequest)(nil), // 61: nakama.api.LinkFacebookRequest + (*LinkSteamRequest)(nil), // 62: nakama.api.LinkSteamRequest + (*ListChannelMessagesRequest)(nil), // 63: nakama.api.ListChannelMessagesRequest + (*ListFriendsRequest)(nil), // 64: nakama.api.ListFriendsRequest + (*ListFriendsOfFriendsRequest)(nil), // 65: nakama.api.ListFriendsOfFriendsRequest + (*ListGroupsRequest)(nil), // 66: nakama.api.ListGroupsRequest + (*ListGroupUsersRequest)(nil), // 67: nakama.api.ListGroupUsersRequest + (*ListLeaderboardRecordsAroundOwnerRequest)(nil), // 68: nakama.api.ListLeaderboardRecordsAroundOwnerRequest + (*ListLeaderboardRecordsRequest)(nil), // 69: nakama.api.ListLeaderboardRecordsRequest + (*ListMatchesRequest)(nil), // 70: nakama.api.ListMatchesRequest + (*ListNotificationsRequest)(nil), // 71: nakama.api.ListNotificationsRequest + (*ListStorageObjectsRequest)(nil), // 72: nakama.api.ListStorageObjectsRequest + (*ListSubscriptionsRequest)(nil), // 73: nakama.api.ListSubscriptionsRequest + (*ListTournamentRecordsAroundOwnerRequest)(nil), // 74: nakama.api.ListTournamentRecordsAroundOwnerRequest + (*ListTournamentRecordsRequest)(nil), // 75: nakama.api.ListTournamentRecordsRequest + (*ListTournamentsRequest)(nil), // 76: nakama.api.ListTournamentsRequest + (*ListUserGroupsRequest)(nil), // 77: nakama.api.ListUserGroupsRequest + (*Match)(nil), // 78: nakama.api.Match + (*MatchList)(nil), // 79: nakama.api.MatchList + (*MatchmakerCompletionStats)(nil), // 80: nakama.api.MatchmakerCompletionStats + (*MatchmakerStats)(nil), // 81: nakama.api.MatchmakerStats + (*Notification)(nil), // 82: nakama.api.Notification + (*NotificationList)(nil), // 83: nakama.api.NotificationList + (*PromoteGroupUsersRequest)(nil), // 84: nakama.api.PromoteGroupUsersRequest + (*DemoteGroupUsersRequest)(nil), // 85: nakama.api.DemoteGroupUsersRequest + (*ReadStorageObjectId)(nil), // 86: nakama.api.ReadStorageObjectId + (*ReadStorageObjectsRequest)(nil), // 87: nakama.api.ReadStorageObjectsRequest + (*Rpc)(nil), // 88: nakama.api.Rpc + (*Session)(nil), // 89: nakama.api.Session + (*StorageObject)(nil), // 90: nakama.api.StorageObject + (*StorageObjectAck)(nil), // 91: nakama.api.StorageObjectAck + (*StorageObjectAcks)(nil), // 92: nakama.api.StorageObjectAcks + (*StorageObjects)(nil), // 93: nakama.api.StorageObjects + (*StorageObjectList)(nil), // 94: nakama.api.StorageObjectList + (*Tournament)(nil), // 95: nakama.api.Tournament + (*TournamentList)(nil), // 96: nakama.api.TournamentList + (*TournamentRecordList)(nil), // 97: nakama.api.TournamentRecordList + (*UpdateAccountRequest)(nil), // 98: nakama.api.UpdateAccountRequest + (*UpdateGroupRequest)(nil), // 99: nakama.api.UpdateGroupRequest + (*User)(nil), // 100: nakama.api.User + (*UserGroupList)(nil), // 101: nakama.api.UserGroupList + (*Users)(nil), // 102: nakama.api.Users + (*ValidatePurchaseAppleRequest)(nil), // 103: nakama.api.ValidatePurchaseAppleRequest + (*ValidateSubscriptionAppleRequest)(nil), // 104: nakama.api.ValidateSubscriptionAppleRequest + (*ValidatePurchaseGoogleRequest)(nil), // 105: nakama.api.ValidatePurchaseGoogleRequest + (*ValidateSubscriptionGoogleRequest)(nil), // 106: nakama.api.ValidateSubscriptionGoogleRequest + (*ValidatePurchaseHuaweiRequest)(nil), // 107: nakama.api.ValidatePurchaseHuaweiRequest + (*ValidatePurchaseFacebookInstantRequest)(nil), // 108: nakama.api.ValidatePurchaseFacebookInstantRequest + (*ValidatedPurchase)(nil), // 109: nakama.api.ValidatedPurchase + (*ValidatePurchaseResponse)(nil), // 110: nakama.api.ValidatePurchaseResponse + (*ValidateSubscriptionResponse)(nil), // 111: nakama.api.ValidateSubscriptionResponse + (*ValidatedSubscription)(nil), // 112: nakama.api.ValidatedSubscription + (*PurchaseList)(nil), // 113: nakama.api.PurchaseList + (*SubscriptionList)(nil), // 114: nakama.api.SubscriptionList + (*WriteLeaderboardRecordRequest)(nil), // 115: nakama.api.WriteLeaderboardRecordRequest + (*WriteStorageObject)(nil), // 116: nakama.api.WriteStorageObject + (*WriteStorageObjectsRequest)(nil), // 117: nakama.api.WriteStorageObjectsRequest + (*WriteTournamentRecordRequest)(nil), // 118: nakama.api.WriteTournamentRecordRequest + (*ListPartiesRequest)(nil), // 119: nakama.api.ListPartiesRequest + (*Party)(nil), // 120: nakama.api.Party + (*PartyList)(nil), // 121: nakama.api.PartyList + nil, // 122: nakama.api.AccountRefresh.VarsEntry + nil, // 123: nakama.api.AccountApple.VarsEntry + nil, // 124: nakama.api.AccountCustom.VarsEntry + nil, // 125: nakama.api.AccountDevice.VarsEntry + nil, // 126: nakama.api.AccountEmail.VarsEntry + nil, // 127: nakama.api.AccountFacebook.VarsEntry + nil, // 128: nakama.api.AccountFacebookInstantGame.VarsEntry + nil, // 129: nakama.api.AccountGameCenter.VarsEntry + nil, // 130: nakama.api.AccountGoogle.VarsEntry + nil, // 131: nakama.api.AccountSteam.VarsEntry + nil, // 132: nakama.api.SessionRefreshRequest.VarsEntry + nil, // 133: nakama.api.Event.PropertiesEntry + (*FriendsOfFriendsList_FriendOfFriend)(nil), // 134: nakama.api.FriendsOfFriendsList.FriendOfFriend + (*GroupUserList_GroupUser)(nil), // 135: nakama.api.GroupUserList.GroupUser + (*UserGroupList_UserGroup)(nil), // 136: nakama.api.UserGroupList.UserGroup + (*WriteLeaderboardRecordRequest_LeaderboardRecordWrite)(nil), // 137: nakama.api.WriteLeaderboardRecordRequest.LeaderboardRecordWrite + (*WriteTournamentRecordRequest_TournamentRecordWrite)(nil), // 138: nakama.api.WriteTournamentRecordRequest.TournamentRecordWrite + (*timestamppb.Timestamp)(nil), // 139: google.protobuf.Timestamp + (*wrapperspb.BoolValue)(nil), // 140: google.protobuf.BoolValue + (*wrapperspb.Int32Value)(nil), // 141: google.protobuf.Int32Value + (*wrapperspb.StringValue)(nil), // 142: google.protobuf.StringValue + (*wrapperspb.UInt32Value)(nil), // 143: google.protobuf.UInt32Value + (*wrapperspb.Int64Value)(nil), // 144: google.protobuf.Int64Value +} +var file_api_proto_depIdxs = []int32{ + 100, // 0: nakama.api.Account.user:type_name -> nakama.api.User + 10, // 1: nakama.api.Account.devices:type_name -> nakama.api.AccountDevice + 139, // 2: nakama.api.Account.verify_time:type_name -> google.protobuf.Timestamp + 139, // 3: nakama.api.Account.disable_time:type_name -> google.protobuf.Timestamp + 122, // 4: nakama.api.AccountRefresh.vars:type_name -> nakama.api.AccountRefresh.VarsEntry + 123, // 5: nakama.api.AccountApple.vars:type_name -> nakama.api.AccountApple.VarsEntry + 124, // 6: nakama.api.AccountCustom.vars:type_name -> nakama.api.AccountCustom.VarsEntry + 125, // 7: nakama.api.AccountDevice.vars:type_name -> nakama.api.AccountDevice.VarsEntry + 126, // 8: nakama.api.AccountEmail.vars:type_name -> nakama.api.AccountEmail.VarsEntry + 127, // 9: nakama.api.AccountFacebook.vars:type_name -> nakama.api.AccountFacebook.VarsEntry + 128, // 10: nakama.api.AccountFacebookInstantGame.vars:type_name -> nakama.api.AccountFacebookInstantGame.VarsEntry + 129, // 11: nakama.api.AccountGameCenter.vars:type_name -> nakama.api.AccountGameCenter.VarsEntry + 130, // 12: nakama.api.AccountGoogle.vars:type_name -> nakama.api.AccountGoogle.VarsEntry + 131, // 13: nakama.api.AccountSteam.vars:type_name -> nakama.api.AccountSteam.VarsEntry + 132, // 14: nakama.api.SessionRefreshRequest.vars:type_name -> nakama.api.SessionRefreshRequest.VarsEntry + 8, // 15: nakama.api.AuthenticateAppleRequest.account:type_name -> nakama.api.AccountApple + 140, // 16: nakama.api.AuthenticateAppleRequest.create:type_name -> google.protobuf.BoolValue + 9, // 17: nakama.api.AuthenticateCustomRequest.account:type_name -> nakama.api.AccountCustom + 140, // 18: nakama.api.AuthenticateCustomRequest.create:type_name -> google.protobuf.BoolValue + 10, // 19: nakama.api.AuthenticateDeviceRequest.account:type_name -> nakama.api.AccountDevice + 140, // 20: nakama.api.AuthenticateDeviceRequest.create:type_name -> google.protobuf.BoolValue + 11, // 21: nakama.api.AuthenticateEmailRequest.account:type_name -> nakama.api.AccountEmail + 140, // 22: nakama.api.AuthenticateEmailRequest.create:type_name -> google.protobuf.BoolValue + 12, // 23: nakama.api.AuthenticateFacebookRequest.account:type_name -> nakama.api.AccountFacebook + 140, // 24: nakama.api.AuthenticateFacebookRequest.create:type_name -> google.protobuf.BoolValue + 140, // 25: nakama.api.AuthenticateFacebookRequest.sync:type_name -> google.protobuf.BoolValue + 13, // 26: nakama.api.AuthenticateFacebookInstantGameRequest.account:type_name -> nakama.api.AccountFacebookInstantGame + 140, // 27: nakama.api.AuthenticateFacebookInstantGameRequest.create:type_name -> google.protobuf.BoolValue + 14, // 28: nakama.api.AuthenticateGameCenterRequest.account:type_name -> nakama.api.AccountGameCenter + 140, // 29: nakama.api.AuthenticateGameCenterRequest.create:type_name -> google.protobuf.BoolValue + 15, // 30: nakama.api.AuthenticateGoogleRequest.account:type_name -> nakama.api.AccountGoogle + 140, // 31: nakama.api.AuthenticateGoogleRequest.create:type_name -> google.protobuf.BoolValue + 16, // 32: nakama.api.AuthenticateSteamRequest.account:type_name -> nakama.api.AccountSteam + 140, // 33: nakama.api.AuthenticateSteamRequest.create:type_name -> google.protobuf.BoolValue + 140, // 34: nakama.api.AuthenticateSteamRequest.sync:type_name -> google.protobuf.BoolValue + 141, // 35: nakama.api.ChannelMessage.code:type_name -> google.protobuf.Int32Value + 139, // 36: nakama.api.ChannelMessage.create_time:type_name -> google.protobuf.Timestamp + 139, // 37: nakama.api.ChannelMessage.update_time:type_name -> google.protobuf.Timestamp + 140, // 38: nakama.api.ChannelMessage.persistent:type_name -> google.protobuf.BoolValue + 32, // 39: nakama.api.ChannelMessageList.messages:type_name -> nakama.api.ChannelMessage + 40, // 40: nakama.api.DeleteStorageObjectsRequest.object_ids:type_name -> nakama.api.DeleteStorageObjectId + 133, // 41: nakama.api.Event.properties:type_name -> nakama.api.Event.PropertiesEntry + 139, // 42: nakama.api.Event.timestamp:type_name -> google.protobuf.Timestamp + 100, // 43: nakama.api.Friend.user:type_name -> nakama.api.User + 141, // 44: nakama.api.Friend.state:type_name -> google.protobuf.Int32Value + 139, // 45: nakama.api.Friend.update_time:type_name -> google.protobuf.Timestamp + 43, // 46: nakama.api.FriendList.friends:type_name -> nakama.api.Friend + 134, // 47: nakama.api.FriendsOfFriendsList.friends_of_friends:type_name -> nakama.api.FriendsOfFriendsList.FriendOfFriend + 140, // 48: nakama.api.Group.open:type_name -> google.protobuf.BoolValue + 139, // 49: nakama.api.Group.create_time:type_name -> google.protobuf.Timestamp + 139, // 50: nakama.api.Group.update_time:type_name -> google.protobuf.Timestamp + 48, // 51: nakama.api.GroupList.groups:type_name -> nakama.api.Group + 135, // 52: nakama.api.GroupUserList.group_users:type_name -> nakama.api.GroupUserList.GroupUser + 12, // 53: nakama.api.ImportFacebookFriendsRequest.account:type_name -> nakama.api.AccountFacebook + 140, // 54: nakama.api.ImportFacebookFriendsRequest.reset:type_name -> google.protobuf.BoolValue + 16, // 55: nakama.api.ImportSteamFriendsRequest.account:type_name -> nakama.api.AccountSteam + 140, // 56: nakama.api.ImportSteamFriendsRequest.reset:type_name -> google.protobuf.BoolValue + 2, // 57: nakama.api.Leaderboard.operator:type_name -> nakama.api.Operator + 139, // 58: nakama.api.Leaderboard.create_time:type_name -> google.protobuf.Timestamp + 56, // 59: nakama.api.LeaderboardList.leaderboards:type_name -> nakama.api.Leaderboard + 142, // 60: nakama.api.LeaderboardRecord.username:type_name -> google.protobuf.StringValue + 139, // 61: nakama.api.LeaderboardRecord.create_time:type_name -> google.protobuf.Timestamp + 139, // 62: nakama.api.LeaderboardRecord.update_time:type_name -> google.protobuf.Timestamp + 139, // 63: nakama.api.LeaderboardRecord.expiry_time:type_name -> google.protobuf.Timestamp + 58, // 64: nakama.api.LeaderboardRecordList.records:type_name -> nakama.api.LeaderboardRecord + 58, // 65: nakama.api.LeaderboardRecordList.owner_records:type_name -> nakama.api.LeaderboardRecord + 12, // 66: nakama.api.LinkFacebookRequest.account:type_name -> nakama.api.AccountFacebook + 140, // 67: nakama.api.LinkFacebookRequest.sync:type_name -> google.protobuf.BoolValue + 16, // 68: nakama.api.LinkSteamRequest.account:type_name -> nakama.api.AccountSteam + 140, // 69: nakama.api.LinkSteamRequest.sync:type_name -> google.protobuf.BoolValue + 141, // 70: nakama.api.ListChannelMessagesRequest.limit:type_name -> google.protobuf.Int32Value + 140, // 71: nakama.api.ListChannelMessagesRequest.forward:type_name -> google.protobuf.BoolValue + 141, // 72: nakama.api.ListFriendsRequest.limit:type_name -> google.protobuf.Int32Value + 141, // 73: nakama.api.ListFriendsRequest.state:type_name -> google.protobuf.Int32Value + 141, // 74: nakama.api.ListFriendsOfFriendsRequest.limit:type_name -> google.protobuf.Int32Value + 141, // 75: nakama.api.ListGroupsRequest.limit:type_name -> google.protobuf.Int32Value + 141, // 76: nakama.api.ListGroupsRequest.members:type_name -> google.protobuf.Int32Value + 140, // 77: nakama.api.ListGroupsRequest.open:type_name -> google.protobuf.BoolValue + 141, // 78: nakama.api.ListGroupUsersRequest.limit:type_name -> google.protobuf.Int32Value + 141, // 79: nakama.api.ListGroupUsersRequest.state:type_name -> google.protobuf.Int32Value + 143, // 80: nakama.api.ListLeaderboardRecordsAroundOwnerRequest.limit:type_name -> google.protobuf.UInt32Value + 144, // 81: nakama.api.ListLeaderboardRecordsAroundOwnerRequest.expiry:type_name -> google.protobuf.Int64Value + 141, // 82: nakama.api.ListLeaderboardRecordsRequest.limit:type_name -> google.protobuf.Int32Value + 144, // 83: nakama.api.ListLeaderboardRecordsRequest.expiry:type_name -> google.protobuf.Int64Value + 141, // 84: nakama.api.ListMatchesRequest.limit:type_name -> google.protobuf.Int32Value + 140, // 85: nakama.api.ListMatchesRequest.authoritative:type_name -> google.protobuf.BoolValue + 142, // 86: nakama.api.ListMatchesRequest.label:type_name -> google.protobuf.StringValue + 141, // 87: nakama.api.ListMatchesRequest.min_size:type_name -> google.protobuf.Int32Value + 141, // 88: nakama.api.ListMatchesRequest.max_size:type_name -> google.protobuf.Int32Value + 142, // 89: nakama.api.ListMatchesRequest.query:type_name -> google.protobuf.StringValue + 141, // 90: nakama.api.ListNotificationsRequest.limit:type_name -> google.protobuf.Int32Value + 141, // 91: nakama.api.ListStorageObjectsRequest.limit:type_name -> google.protobuf.Int32Value + 141, // 92: nakama.api.ListSubscriptionsRequest.limit:type_name -> google.protobuf.Int32Value + 143, // 93: nakama.api.ListTournamentRecordsAroundOwnerRequest.limit:type_name -> google.protobuf.UInt32Value + 144, // 94: nakama.api.ListTournamentRecordsAroundOwnerRequest.expiry:type_name -> google.protobuf.Int64Value + 141, // 95: nakama.api.ListTournamentRecordsRequest.limit:type_name -> google.protobuf.Int32Value + 144, // 96: nakama.api.ListTournamentRecordsRequest.expiry:type_name -> google.protobuf.Int64Value + 143, // 97: nakama.api.ListTournamentsRequest.category_start:type_name -> google.protobuf.UInt32Value + 143, // 98: nakama.api.ListTournamentsRequest.category_end:type_name -> google.protobuf.UInt32Value + 143, // 99: nakama.api.ListTournamentsRequest.start_time:type_name -> google.protobuf.UInt32Value + 143, // 100: nakama.api.ListTournamentsRequest.end_time:type_name -> google.protobuf.UInt32Value + 141, // 101: nakama.api.ListTournamentsRequest.limit:type_name -> google.protobuf.Int32Value + 141, // 102: nakama.api.ListUserGroupsRequest.limit:type_name -> google.protobuf.Int32Value + 141, // 103: nakama.api.ListUserGroupsRequest.state:type_name -> google.protobuf.Int32Value + 142, // 104: nakama.api.Match.label:type_name -> google.protobuf.StringValue + 78, // 105: nakama.api.MatchList.matches:type_name -> nakama.api.Match + 139, // 106: nakama.api.MatchmakerCompletionStats.create_time:type_name -> google.protobuf.Timestamp + 139, // 107: nakama.api.MatchmakerCompletionStats.complete_time:type_name -> google.protobuf.Timestamp + 139, // 108: nakama.api.MatchmakerStats.oldest_ticket_create_time:type_name -> google.protobuf.Timestamp + 80, // 109: nakama.api.MatchmakerStats.completions:type_name -> nakama.api.MatchmakerCompletionStats + 139, // 110: nakama.api.Notification.create_time:type_name -> google.protobuf.Timestamp + 82, // 111: nakama.api.NotificationList.notifications:type_name -> nakama.api.Notification + 86, // 112: nakama.api.ReadStorageObjectsRequest.object_ids:type_name -> nakama.api.ReadStorageObjectId + 139, // 113: nakama.api.StorageObject.create_time:type_name -> google.protobuf.Timestamp + 139, // 114: nakama.api.StorageObject.update_time:type_name -> google.protobuf.Timestamp + 139, // 115: nakama.api.StorageObjectAck.create_time:type_name -> google.protobuf.Timestamp + 139, // 116: nakama.api.StorageObjectAck.update_time:type_name -> google.protobuf.Timestamp + 91, // 117: nakama.api.StorageObjectAcks.acks:type_name -> nakama.api.StorageObjectAck + 90, // 118: nakama.api.StorageObjects.objects:type_name -> nakama.api.StorageObject + 90, // 119: nakama.api.StorageObjectList.objects:type_name -> nakama.api.StorageObject + 139, // 120: nakama.api.Tournament.create_time:type_name -> google.protobuf.Timestamp + 139, // 121: nakama.api.Tournament.start_time:type_name -> google.protobuf.Timestamp + 139, // 122: nakama.api.Tournament.end_time:type_name -> google.protobuf.Timestamp + 2, // 123: nakama.api.Tournament.operator:type_name -> nakama.api.Operator + 95, // 124: nakama.api.TournamentList.tournaments:type_name -> nakama.api.Tournament + 58, // 125: nakama.api.TournamentRecordList.records:type_name -> nakama.api.LeaderboardRecord + 58, // 126: nakama.api.TournamentRecordList.owner_records:type_name -> nakama.api.LeaderboardRecord + 142, // 127: nakama.api.UpdateAccountRequest.username:type_name -> google.protobuf.StringValue + 142, // 128: nakama.api.UpdateAccountRequest.display_name:type_name -> google.protobuf.StringValue + 142, // 129: nakama.api.UpdateAccountRequest.avatar_url:type_name -> google.protobuf.StringValue + 142, // 130: nakama.api.UpdateAccountRequest.lang_tag:type_name -> google.protobuf.StringValue + 142, // 131: nakama.api.UpdateAccountRequest.location:type_name -> google.protobuf.StringValue + 142, // 132: nakama.api.UpdateAccountRequest.timezone:type_name -> google.protobuf.StringValue + 142, // 133: nakama.api.UpdateGroupRequest.name:type_name -> google.protobuf.StringValue + 142, // 134: nakama.api.UpdateGroupRequest.description:type_name -> google.protobuf.StringValue + 142, // 135: nakama.api.UpdateGroupRequest.lang_tag:type_name -> google.protobuf.StringValue + 142, // 136: nakama.api.UpdateGroupRequest.avatar_url:type_name -> google.protobuf.StringValue + 140, // 137: nakama.api.UpdateGroupRequest.open:type_name -> google.protobuf.BoolValue + 139, // 138: nakama.api.User.create_time:type_name -> google.protobuf.Timestamp + 139, // 139: nakama.api.User.update_time:type_name -> google.protobuf.Timestamp + 136, // 140: nakama.api.UserGroupList.user_groups:type_name -> nakama.api.UserGroupList.UserGroup + 100, // 141: nakama.api.Users.users:type_name -> nakama.api.User + 140, // 142: nakama.api.ValidatePurchaseAppleRequest.persist:type_name -> google.protobuf.BoolValue + 140, // 143: nakama.api.ValidateSubscriptionAppleRequest.persist:type_name -> google.protobuf.BoolValue + 140, // 144: nakama.api.ValidatePurchaseGoogleRequest.persist:type_name -> google.protobuf.BoolValue + 140, // 145: nakama.api.ValidateSubscriptionGoogleRequest.persist:type_name -> google.protobuf.BoolValue + 140, // 146: nakama.api.ValidatePurchaseHuaweiRequest.persist:type_name -> google.protobuf.BoolValue + 140, // 147: nakama.api.ValidatePurchaseFacebookInstantRequest.persist:type_name -> google.protobuf.BoolValue + 0, // 148: nakama.api.ValidatedPurchase.store:type_name -> nakama.api.StoreProvider + 139, // 149: nakama.api.ValidatedPurchase.purchase_time:type_name -> google.protobuf.Timestamp + 139, // 150: nakama.api.ValidatedPurchase.create_time:type_name -> google.protobuf.Timestamp + 139, // 151: nakama.api.ValidatedPurchase.update_time:type_name -> google.protobuf.Timestamp + 139, // 152: nakama.api.ValidatedPurchase.refund_time:type_name -> google.protobuf.Timestamp + 1, // 153: nakama.api.ValidatedPurchase.environment:type_name -> nakama.api.StoreEnvironment + 109, // 154: nakama.api.ValidatePurchaseResponse.validated_purchases:type_name -> nakama.api.ValidatedPurchase + 112, // 155: nakama.api.ValidateSubscriptionResponse.validated_subscription:type_name -> nakama.api.ValidatedSubscription + 0, // 156: nakama.api.ValidatedSubscription.store:type_name -> nakama.api.StoreProvider + 139, // 157: nakama.api.ValidatedSubscription.purchase_time:type_name -> google.protobuf.Timestamp + 139, // 158: nakama.api.ValidatedSubscription.create_time:type_name -> google.protobuf.Timestamp + 139, // 159: nakama.api.ValidatedSubscription.update_time:type_name -> google.protobuf.Timestamp + 1, // 160: nakama.api.ValidatedSubscription.environment:type_name -> nakama.api.StoreEnvironment + 139, // 161: nakama.api.ValidatedSubscription.expiry_time:type_name -> google.protobuf.Timestamp + 139, // 162: nakama.api.ValidatedSubscription.refund_time:type_name -> google.protobuf.Timestamp + 109, // 163: nakama.api.PurchaseList.validated_purchases:type_name -> nakama.api.ValidatedPurchase + 112, // 164: nakama.api.SubscriptionList.validated_subscriptions:type_name -> nakama.api.ValidatedSubscription + 137, // 165: nakama.api.WriteLeaderboardRecordRequest.record:type_name -> nakama.api.WriteLeaderboardRecordRequest.LeaderboardRecordWrite + 141, // 166: nakama.api.WriteStorageObject.permission_read:type_name -> google.protobuf.Int32Value + 141, // 167: nakama.api.WriteStorageObject.permission_write:type_name -> google.protobuf.Int32Value + 116, // 168: nakama.api.WriteStorageObjectsRequest.objects:type_name -> nakama.api.WriteStorageObject + 138, // 169: nakama.api.WriteTournamentRecordRequest.record:type_name -> nakama.api.WriteTournamentRecordRequest.TournamentRecordWrite + 141, // 170: nakama.api.ListPartiesRequest.limit:type_name -> google.protobuf.Int32Value + 140, // 171: nakama.api.ListPartiesRequest.open:type_name -> google.protobuf.BoolValue + 142, // 172: nakama.api.ListPartiesRequest.query:type_name -> google.protobuf.StringValue + 142, // 173: nakama.api.ListPartiesRequest.cursor:type_name -> google.protobuf.StringValue + 120, // 174: nakama.api.PartyList.parties:type_name -> nakama.api.Party + 100, // 175: nakama.api.FriendsOfFriendsList.FriendOfFriend.user:type_name -> nakama.api.User + 100, // 176: nakama.api.GroupUserList.GroupUser.user:type_name -> nakama.api.User + 141, // 177: nakama.api.GroupUserList.GroupUser.state:type_name -> google.protobuf.Int32Value + 48, // 178: nakama.api.UserGroupList.UserGroup.group:type_name -> nakama.api.Group + 141, // 179: nakama.api.UserGroupList.UserGroup.state:type_name -> google.protobuf.Int32Value + 2, // 180: nakama.api.WriteLeaderboardRecordRequest.LeaderboardRecordWrite.operator:type_name -> nakama.api.Operator + 2, // 181: nakama.api.WriteTournamentRecordRequest.TournamentRecordWrite.operator:type_name -> nakama.api.Operator + 182, // [182:182] is the sub-list for method output_type + 182, // [182:182] is the sub-list for method input_type + 182, // [182:182] is the sub-list for extension type_name + 182, // [182:182] is the sub-list for extension extendee + 0, // [0:182] is the sub-list for field type_name +} + +func init() { file_api_proto_init() } +func file_api_proto_init() { + if File_api_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_api_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Account); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AccountRefresh); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AccountApple); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AccountCustom); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AccountDevice); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AccountEmail); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AccountFacebook); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AccountFacebookInstantGame); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AccountGameCenter); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AccountGoogle); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AccountSteam); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AddFriendsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AddGroupUsersRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SessionRefreshRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SessionLogoutRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AuthenticateAppleRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AuthenticateCustomRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AuthenticateDeviceRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AuthenticateEmailRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AuthenticateFacebookRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AuthenticateFacebookInstantGameRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AuthenticateGameCenterRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AuthenticateGoogleRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AuthenticateSteamRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BanGroupUsersRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*BlockFriendsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChannelMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChannelMessageList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateGroupRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteFriendsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteGroupRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteLeaderboardRecordRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteNotificationsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteTournamentRecordRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteStorageObjectId); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteStorageObjectsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Event); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Friend); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FriendList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FriendsOfFriendsList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetUsersRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetSubscriptionRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Group); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GroupList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GroupUserList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ImportFacebookFriendsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ImportSteamFriendsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*JoinGroupRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*JoinTournamentRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KickGroupUsersRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Leaderboard); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LeaderboardList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LeaderboardRecord); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LeaderboardRecordList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LeaveGroupRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LinkFacebookRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LinkSteamRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListChannelMessagesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListFriendsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListFriendsOfFriendsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListGroupsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListGroupUsersRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListLeaderboardRecordsAroundOwnerRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListLeaderboardRecordsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListMatchesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListNotificationsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListStorageObjectsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListSubscriptionsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListTournamentRecordsAroundOwnerRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListTournamentRecordsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListTournamentsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListUserGroupsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Match); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MatchList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MatchmakerCompletionStats); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MatchmakerStats); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Notification); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NotificationList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PromoteGroupUsersRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DemoteGroupUsersRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReadStorageObjectId); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReadStorageObjectsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Rpc); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Session); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageObject); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageObjectAck); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageObjectAcks); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageObjects); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageObjectList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Tournament); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TournamentList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TournamentRecordList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateAccountRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateGroupRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*User); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UserGroupList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[96].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Users); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidatePurchaseAppleRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidateSubscriptionAppleRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidatePurchaseGoogleRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidateSubscriptionGoogleRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidatePurchaseHuaweiRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[102].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidatePurchaseFacebookInstantRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[103].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidatedPurchase); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidatePurchaseResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[105].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidateSubscriptionResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ValidatedSubscription); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PurchaseList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SubscriptionList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WriteLeaderboardRecordRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WriteStorageObject); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[111].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WriteStorageObjectsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[112].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WriteTournamentRecordRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[113].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListPartiesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[114].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Party); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[115].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PartyList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[128].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FriendsOfFriendsList_FriendOfFriend); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[129].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GroupUserList_GroupUser); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[130].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UserGroupList_UserGroup); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[131].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WriteLeaderboardRecordRequest_LeaderboardRecordWrite); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_proto_msgTypes[132].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WriteTournamentRecordRequest_TournamentRecordWrite); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_api_proto_rawDesc, + NumEnums: 6, + NumMessages: 133, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_api_proto_goTypes, + DependencyIndexes: file_api_proto_depIdxs, + EnumInfos: file_api_proto_enumTypes, + MessageInfos: file_api_proto_msgTypes, + }.Build() + File_api_proto = out.File + file_api_proto_rawDesc = nil + file_api_proto_goTypes = nil + file_api_proto_depIdxs = nil +} diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/api/api.proto b/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/api/api.proto new file mode 100644 index 0000000..4a72f3e --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/api/api.proto @@ -0,0 +1,1458 @@ +// Copyright 2019 The Nakama Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * The Nakama server RPC protocol for games and apps. + */ +syntax = "proto3"; + +package nakama.api; + +import "google/protobuf/timestamp.proto"; +import "google/protobuf/wrappers.proto"; + +option go_package = "github.com/heroiclabs/nakama-common/api"; + +option java_multiple_files = true; +option java_outer_classname = "NakamaApi"; +option java_package = "com.heroiclabs.nakama.api"; + +option csharp_namespace = "Nakama.Protobuf"; + +// A user with additional account details. Always the current user. +message Account { + // The user object. + User user = 1; + // The user's wallet data. + string wallet = 2; + // The email address of the user. + string email = 3; + // The devices which belong to the user's account. + repeated AccountDevice devices = 4; + // The custom id in the user's account. + string custom_id = 5; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the user's email was verified. + google.protobuf.Timestamp verify_time = 6; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the user's account was disabled/banned. + google.protobuf.Timestamp disable_time = 7; +} + +// Obtain a new authentication token using a refresh token. +message AccountRefresh { + // Refresh token. + string token = 1; + // Extra information that will be bundled in the session token. + map vars = 2; +} + +// Send a Apple Sign In token to the server. Used with authenticate/link/unlink. +message AccountApple { + // The ID token received from Apple to validate. + string token = 1; + // Extra information that will be bundled in the session token. + map vars = 2; +} + +// Send a custom ID to the server. Used with authenticate/link/unlink. +message AccountCustom { + // A custom identifier. + string id = 1; + // Extra information that will be bundled in the session token. + map vars = 2; +} + +// Send a device to the server. Used with authenticate/link/unlink and user. +message AccountDevice { + // A device identifier. Should be obtained by a platform-specific device API. + string id = 1; + // Extra information that will be bundled in the session token. + map vars = 2; +} + +// Send an email with password to the server. Used with authenticate/link/unlink. +message AccountEmail { + // A valid RFC-5322 email address. + string email = 1; + // A password for the user account. + string password = 2; // Ignored with unlink operations. + // Extra information that will be bundled in the session token. + map vars = 3; +} + +// Send a Facebook token to the server. Used with authenticate/link/unlink. +message AccountFacebook { + // The OAuth token received from Facebook to access their profile API. + string token = 1; + // Extra information that will be bundled in the session token. + map vars = 2; +} + +// Send a Facebook Instant Game token to the server. Used with authenticate/link/unlink. +message AccountFacebookInstantGame { + // The OAuth token received from a Facebook Instant Game that may be decoded with the Application Secret (must be available with the nakama configuration) + string signed_player_info = 1; + // Extra information that will be bundled in the session token. + map vars = 2; +} + +// Send Apple's Game Center account credentials to the server. Used with authenticate/link/unlink. +message AccountGameCenter { + // https://developer.apple.com/documentation/gamekit/gklocalplayer/1515407-generateidentityverificationsign + + // Player ID (generated by GameCenter). + string player_id = 1; + // Bundle ID (generated by GameCenter). + string bundle_id = 2; + // Time since UNIX epoch when the signature was created. + int64 timestamp_seconds = 3; + // A random "NSString" used to compute the hash and keep it randomized. + string salt = 4; + // The verification signature data generated. + string signature = 5; + // The URL for the public encryption key. + string public_key_url = 6; + // Extra information that will be bundled in the session token. + map vars = 7; +} + +// Send a Google token to the server. Used with authenticate/link/unlink. +message AccountGoogle { + // The OAuth token received from Google to access their profile API. + string token = 1; + // Extra information that will be bundled in the session token. + map vars = 2; +} + +// Send a Steam token to the server. Used with authenticate/link/unlink. +message AccountSteam { + // The account token received from Steam to access their profile API. + string token = 1; + // Extra information that will be bundled in the session token. + map vars = 2; +} + +// Add one or more friends to the current user. +message AddFriendsRequest { + // The account id of a user. + repeated string ids = 1; + // The account username of a user. + repeated string usernames = 2; + // Optional metadata to add to friends. + string metadata = 3; +} + +// Add users to a group. +message AddGroupUsersRequest { + // The group to add users to. + string group_id = 1; + // The users to add. + repeated string user_ids = 2; +} + +// Authenticate against the server with a refresh token. +message SessionRefreshRequest { + // Refresh token. + string token = 1; + // Extra information that will be bundled in the session token. + map vars = 2; +} + +// Log out a session, invalidate a refresh token, or log out all sessions/refresh tokens for a user. +message SessionLogoutRequest { + // Session token to log out. + string token = 1; + // Refresh token to invalidate. + string refresh_token = 2; +} + +// Authenticate against the server with Apple Sign In. +message AuthenticateAppleRequest { + // The Apple account details. + AccountApple account = 1; + // Register the account if the user does not already exist. + google.protobuf.BoolValue create = 2; + // Set the username on the account at register. Must be unique. + string username = 3; +} + +// Authenticate against the server with a custom ID. +message AuthenticateCustomRequest { + // The custom account details. + AccountCustom account = 1; + // Register the account if the user does not already exist. + google.protobuf.BoolValue create = 2; + // Set the username on the account at register. Must be unique. + string username = 3; +} + +// Authenticate against the server with a device ID. +message AuthenticateDeviceRequest { + // The device account details. + AccountDevice account = 1; + // Register the account if the user does not already exist. + google.protobuf.BoolValue create = 2; + // Set the username on the account at register. Must be unique. + string username = 3; +} + +// Authenticate against the server with email+password. +message AuthenticateEmailRequest { + // The email account details. + AccountEmail account = 1; + // Register the account if the user does not already exist. + google.protobuf.BoolValue create = 2; + // Set the username on the account at register. Must be unique. + string username = 3; +} + +// Authenticate against the server with Facebook. +message AuthenticateFacebookRequest { + // The Facebook account details. + AccountFacebook account = 1; + // Register the account if the user does not already exist. + google.protobuf.BoolValue create = 2; + // Set the username on the account at register. Must be unique. + string username = 3; + // Import Facebook friends for the user. + google.protobuf.BoolValue sync = 4; +} + +// Authenticate against the server with Facebook Instant Game token. +message AuthenticateFacebookInstantGameRequest { + // The Facebook Instant Game account details. + AccountFacebookInstantGame account = 1; + // Register the account if the user does not already exist. + google.protobuf.BoolValue create = 2; + // Set the username on the account at register. Must be unique. + string username = 3; +} + +// Authenticate against the server with Apple's Game Center. +message AuthenticateGameCenterRequest { + // The Game Center account details. + AccountGameCenter account = 1; + // Register the account if the user does not already exist. + google.protobuf.BoolValue create = 2; + // Set the username on the account at register. Must be unique. + string username = 3; +} + +// Authenticate against the server with Google. +message AuthenticateGoogleRequest { + // The Google account details. + AccountGoogle account = 1; + // Register the account if the user does not already exist. + google.protobuf.BoolValue create = 2; + // Set the username on the account at register. Must be unique. + string username = 3; +} + +// Authenticate against the server with Steam. +message AuthenticateSteamRequest { + // The Steam account details. + AccountSteam account = 1; + // Register the account if the user does not already exist. + google.protobuf.BoolValue create = 2; + // Set the username on the account at register. Must be unique. + string username = 3; + // Import Steam friends for the user. + google.protobuf.BoolValue sync = 4; +} + +// Ban users from a group. +message BanGroupUsersRequest { + // The group to ban users from. + string group_id = 1; + // The users to ban. + repeated string user_ids = 2; +} + +// Block one or more friends for the current user. +message BlockFriendsRequest { + // The account id of a user. + repeated string ids = 1; + // The account username of a user. + repeated string usernames = 2; +} + +// A message sent on a channel. +message ChannelMessage { + // The channel this message belongs to. + string channel_id = 1; + // The unique ID of this message. + string message_id = 2; + // The code representing a message type or category. + google.protobuf.Int32Value code = 3; + // Message sender, usually a user ID. + string sender_id = 4; + // The username of the message sender, if any. + string username = 5; + // The content payload. + string content = 6; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the message was created. + google.protobuf.Timestamp create_time = 7; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the message was last updated. + google.protobuf.Timestamp update_time = 8; + // True if the message was persisted to the channel's history, false otherwise. + google.protobuf.BoolValue persistent = 9; + // The name of the chat room, or an empty string if this message was not sent through a chat room. + string room_name = 10; + // The ID of the group, or an empty string if this message was not sent through a group channel. + string group_id = 11; + // The ID of the first DM user, or an empty string if this message was not sent through a DM chat. + string user_id_one = 12; + // The ID of the second DM user, or an empty string if this message was not sent through a DM chat. + string user_id_two = 13; +} + +// A list of channel messages, usually a result of a list operation. +message ChannelMessageList { + // A list of messages. + repeated ChannelMessage messages = 1; + // The cursor to send when retrieving the next page, if any. + string next_cursor = 2; + // The cursor to send when retrieving the previous page, if any. + string prev_cursor = 3; + // Cacheable cursor to list newer messages. Durable and designed to be stored, unlike next/prev cursors. + string cacheable_cursor = 4; +} + +// Create a group with the current user as owner. +message CreateGroupRequest { + // A unique name for the group. + string name = 1; + // A description for the group. + string description = 2; + // The language expected to be a tag which follows the BCP-47 spec. + string lang_tag = 3; + // A URL for an avatar image. + string avatar_url = 4; + // Mark a group as open or not where only admins can accept members. + bool open = 5; + // Maximum number of group members. + int32 max_count = 6; +} + +// Delete one or more friends for the current user. +message DeleteFriendsRequest { + // The account id of a user. + repeated string ids = 1; + // The account username of a user. + repeated string usernames = 2; +} + +// Delete a group the user has access to. +message DeleteGroupRequest { + // The id of a group. + string group_id = 1; +} + +// Delete a leaderboard record. +message DeleteLeaderboardRecordRequest { + // The leaderboard ID to delete from. + string leaderboard_id = 1; +} + +// Delete one or more notifications for the current user. +message DeleteNotificationsRequest { + // The id of notifications. + repeated string ids = 1; +} + +// Delete a leaderboard record. +message DeleteTournamentRecordRequest { + // The tournament ID to delete from. + string tournament_id = 1; +} + +// Storage objects to delete. +message DeleteStorageObjectId { + // The collection which stores the object. + string collection = 1; + // The key of the object within the collection. + string key = 2; + // The version hash of the object. + string version = 3; +} + +// Batch delete storage objects. +message DeleteStorageObjectsRequest { + // Batch of storage objects. + repeated DeleteStorageObjectId object_ids = 1; +} + +// Represents an event to be passed through the server to registered event handlers. +message Event { + // An event name, type, category, or identifier. + string name = 1; + // Arbitrary event property values. + map properties = 2; + // The time when the event was triggered. + google.protobuf.Timestamp timestamp = 3; + // True if the event came directly from a client call, false otherwise. + bool external = 4; +} + +// A friend of a user. +message Friend { + // The friendship status. + enum State { + // The user is a friend of the current user. + FRIEND = 0; + // The current user has sent an invite to the user. + INVITE_SENT = 1; + // The current user has received an invite from this user. + INVITE_RECEIVED = 2; + // The current user has blocked this user. + BLOCKED = 3; + } + + // The user object. + User user = 1; + // The friend status. + google.protobuf.Int32Value state = 2; // one of "Friend.State". + // Time of the latest relationship update. + google.protobuf.Timestamp update_time = 3; + // Metadata. + string metadata = 4; +} + +// A collection of zero or more friends of the user. +message FriendList { + // The Friend objects. + repeated Friend friends = 1; + // Cursor for the next page of results, if any. + string cursor = 2; +} + +// A List of friends of friends +message FriendsOfFriendsList { + // A friend of a friend. + message FriendOfFriend { + // The user who referred its friend. + string referrer = 1; + // User. + User user = 2; + } + // User friends of friends. + repeated FriendOfFriend friends_of_friends = 1; + // Cursor for the next page of results, if any. + string cursor = 2; +} + +// Fetch a batch of zero or more users from the server. +message GetUsersRequest { + // The account id of a user. + repeated string ids = 1; + // The account username of a user. + repeated string usernames = 2; + // The Facebook ID of a user. + repeated string facebook_ids = 3; +} + +// Fetch a subscription by product id. +message GetSubscriptionRequest { + // Product id of the subscription + string product_id = 1; +} + +// A group in the server. +message Group { + // The id of a group. + string id = 1; + // The id of the user who created the group. + string creator_id = 2; + // The unique name of the group. + string name = 3; + // A description for the group. + string description = 4; + // The language expected to be a tag which follows the BCP-47 spec. + string lang_tag = 5; + // Additional information stored as a JSON object. + string metadata = 6; + // A URL for an avatar image. + string avatar_url = 7; + // Anyone can join open groups, otherwise only admins can accept members. + google.protobuf.BoolValue open = 8; + // The current count of all members in the group. + int32 edge_count = 9; + // The maximum number of members allowed. + int32 max_count = 10; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the group was created. + google.protobuf.Timestamp create_time = 11; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the group was last updated. + google.protobuf.Timestamp update_time = 12; +} + +// One or more groups returned from a listing operation. +message GroupList { + // One or more groups. + repeated Group groups = 1; + // A cursor used to get the next page. + string cursor = 2; +} + +// A list of users belonging to a group, along with their role. +message GroupUserList { + // A single user-role pair. + message GroupUser { + // The group role status. + enum State { + // The user is a superadmin with full control of the group. + SUPERADMIN = 0; + // The user is an admin with additional privileges. + ADMIN = 1; + // The user is a regular member. + MEMBER = 2; + // The user has requested to join the group + JOIN_REQUEST = 3; + } + + // User. + User user = 1; + // Their relationship to the group. + google.protobuf.Int32Value state = 2; + } + + // User-role pairs for a group. + repeated GroupUser group_users = 1; + // Cursor for the next page of results, if any. + string cursor = 2; +} + +// Import Facebook friends into the current user's account. +message ImportFacebookFriendsRequest { + // The Facebook account details. + AccountFacebook account = 1; + // Reset the current user's friends list. + google.protobuf.BoolValue reset = 2; +} + +// Import Facebook friends into the current user's account. +message ImportSteamFriendsRequest { + // The Facebook account details. + AccountSteam account = 1; + // Reset the current user's friends list. + google.protobuf.BoolValue reset = 2; +} + +// Immediately join an open group, or request to join a closed one. +message JoinGroupRequest { + // The group ID to join. The group must already exist. + string group_id = 1; +} + +// The request to join a tournament. +message JoinTournamentRequest { + // The ID of the tournament to join. The tournament must already exist. + string tournament_id = 1; +} + +// Kick a set of users from a group. +message KickGroupUsersRequest { + // The group ID to kick from. + string group_id = 1; + // The users to kick. + repeated string user_ids = 2; +} + +// A leaderboard on the server. +message Leaderboard { + // The ID of the leaderboard. + string id = 1; + // ASC(0) or DESC(1) sort mode of scores in the leaderboard. + uint32 sort_order = 2; + // BEST, SET, INCREMENT or DECREMENT operator mode of the leaderboard. + Operator operator = 3; + // The UNIX time when the leaderboard was previously reset. A computed value. + uint32 prev_reset = 4; + // The UNIX time when the leaderboard is next playable. A computed value. + uint32 next_reset = 5; + // Additional information stored as a JSON object. + string metadata = 6; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the leaderboard was created. + google.protobuf.Timestamp create_time = 7; + // Whether the leaderboard was created authoritatively or not. + bool authoritative = 8; +} + +// A list of leaderboards +message LeaderboardList { + // The list of leaderboards returned. + repeated Leaderboard leaderboards = 1; + // A pagination cursor (optional). + string cursor = 2; +} + +// Represents a complete leaderboard record with all scores and associated metadata. +message LeaderboardRecord { + // The ID of the leaderboard this score belongs to. + string leaderboard_id = 1; + // The ID of the score owner, usually a user or group. + string owner_id = 2; + // The username of the score owner, if the owner is a user. + google.protobuf.StringValue username = 3; + // The score value. + int64 score = 4; + // An optional subscore value. + int64 subscore = 5; + // The number of submissions to this score record. + int32 num_score = 6; + // Metadata. + string metadata = 7; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the leaderboard record was created. + google.protobuf.Timestamp create_time = 8; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the leaderboard record was updated. + google.protobuf.Timestamp update_time = 9; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the leaderboard record expires. + google.protobuf.Timestamp expiry_time = 10; + // The rank of this record. + int64 rank = 11; + // The maximum number of score updates allowed by the owner. + uint32 max_num_score = 12; +} + +// A set of leaderboard records, may be part of a leaderboard records page or a batch of individual records. +message LeaderboardRecordList { + // A list of leaderboard records. + repeated LeaderboardRecord records = 1; + // A batched set of leaderboard records belonging to specified owners. + repeated LeaderboardRecord owner_records = 2; + // The cursor to send when retrieving the next page, if any. + string next_cursor = 3; + // The cursor to send when retrieving the previous page, if any. + string prev_cursor = 4; + // The total number of ranks available. + int64 rank_count = 5; +} + +// Leave a group. +message LeaveGroupRequest { + // The group ID to leave. + string group_id = 1; +} + +// Link Facebook to the current user's account. +message LinkFacebookRequest { + // The Facebook account details. + AccountFacebook account = 1; + // Import Facebook friends for the user. + google.protobuf.BoolValue sync = 2; +} + +// Link Steam to the current user's account. +message LinkSteamRequest { + // The Facebook account details. + AccountSteam account = 1; + // Import Steam friends for the user. + google.protobuf.BoolValue sync = 2; +} + +// List a channel's message history. +message ListChannelMessagesRequest { + // The channel ID to list from. + string channel_id = 1; + // Max number of records to return. Between 1 and 100. + google.protobuf.Int32Value limit = 2; + // True if listing should be older messages to newer, false if reverse. + google.protobuf.BoolValue forward = 3; + // A pagination cursor, if any. + string cursor = 4; +} + +// List friends for a user. +message ListFriendsRequest { + // Max number of records to return. Between 1 and 100. + google.protobuf.Int32Value limit = 1; + // The friend state to list. + google.protobuf.Int32Value state = 2; + // An optional next page cursor. + string cursor = 3; +} + +message ListFriendsOfFriendsRequest { + // Max number of records to return. Between 1 and 100. + google.protobuf.Int32Value limit = 1; + // An optional next page cursor. + string cursor = 2; +} + +// List groups based on given filters. +message ListGroupsRequest { + // List groups that contain this value in their names. + string name = 1; + // Optional pagination cursor. + string cursor = 2; + // Max number of groups to return. Between 1 and 100. + google.protobuf.Int32Value limit = 3; + // Language tag filter + string lang_tag = 4; + // Number of group members + google.protobuf.Int32Value members = 5; + // Optional Open/Closed filter. + google.protobuf.BoolValue open = 6; +} + +// List all users that are part of a group. +message ListGroupUsersRequest { + // The group ID to list from. + string group_id = 1; + // Max number of records to return. Between 1 and 100. + google.protobuf.Int32Value limit = 2; + // The group user state to list. + google.protobuf.Int32Value state = 3; + // An optional next page cursor. + string cursor = 4; +} + +// List leaerboard records from a given leaderboard around the owner. +message ListLeaderboardRecordsAroundOwnerRequest { + // The ID of the tournament to list for. + string leaderboard_id = 1; + // Max number of records to return. Between 1 and 100. + google.protobuf.UInt32Value limit = 2; + // The owner to retrieve records around. + string owner_id = 3; + // Expiry in seconds (since epoch) to begin fetching records from. + google.protobuf.Int64Value expiry = 4; + // A next or previous page cursor. + string cursor = 5; +} + +// List leaderboard records from a given leaderboard. +message ListLeaderboardRecordsRequest { + // The ID of the leaderboard to list for. + string leaderboard_id = 1; + // One or more owners to retrieve records for. + repeated string owner_ids = 2; + // Max number of records to return. Between 1 and 100. + google.protobuf.Int32Value limit = 3; + // A next or previous page cursor. + string cursor = 4; + // Expiry in seconds (since epoch) to begin fetching records from. Optional. 0 means from current time. + google.protobuf.Int64Value expiry = 5; +} + +// List realtime matches. +message ListMatchesRequest { + // Limit the number of returned matches. + google.protobuf.Int32Value limit = 1; + // Authoritative or relayed matches. + google.protobuf.BoolValue authoritative = 2; + // Label filter. + google.protobuf.StringValue label = 3; + // Minimum user count. + google.protobuf.Int32Value min_size = 4; + // Maximum user count. + google.protobuf.Int32Value max_size = 5; + // Arbitrary label query. + google.protobuf.StringValue query = 6; +} + +// Get a list of unexpired notifications. +message ListNotificationsRequest { + // The number of notifications to get. Between 1 and 100. + google.protobuf.Int32Value limit = 1; + // A cursor to page through notifications. May be cached by clients to get from point in time forwards. + string cacheable_cursor = 2; // value from NotificationList.cacheable_cursor. +} + +// List publicly readable storage objects in a given collection. +message ListStorageObjectsRequest { + // ID of the user. + string user_id = 1; + // The collection which stores the object. + string collection = 2; + // The number of storage objects to list. Between 1 and 100. + google.protobuf.Int32Value limit = 3; + // The cursor to page through results from. + string cursor = 4; // value from StorageObjectList.cursor. +} + +// List user subscriptions. +message ListSubscriptionsRequest { + // Max number of results per page + google.protobuf.Int32Value limit = 1; + // Cursor to retrieve a page of records from + string cursor = 2; +} + +// List tournament records from a given tournament around the owner. +message ListTournamentRecordsAroundOwnerRequest { + // The ID of the tournament to list for. + string tournament_id = 1; + // Max number of records to return. Between 1 and 100. + google.protobuf.UInt32Value limit = 2; + // The owner to retrieve records around. + string owner_id = 3; + // Expiry in seconds (since epoch) to begin fetching records from. + google.protobuf.Int64Value expiry = 4; + // A next or previous page cursor. + string cursor = 5; +} + +// List tournament records from a given tournament. +message ListTournamentRecordsRequest { + // The ID of the tournament to list for. + string tournament_id = 1; + // One or more owners to retrieve records for. + repeated string owner_ids = 2; + // Max number of records to return. Between 1 and 100. + google.protobuf.Int32Value limit = 3; + // A next or previous page cursor. + string cursor = 4; + // Expiry in seconds (since epoch) to begin fetching records from. + google.protobuf.Int64Value expiry = 5; +} + +// List active/upcoming tournaments based on given filters. +message ListTournamentsRequest { + // The start of the categories to include. Defaults to 0. + google.protobuf.UInt32Value category_start = 1; + // The end of the categories to include. Defaults to 128. + google.protobuf.UInt32Value category_end = 2; + // The start time for tournaments. Defaults to epoch. + google.protobuf.UInt32Value start_time = 3; + // The end time for tournaments. Defaults to +1 year from current Unix time. + google.protobuf.UInt32Value end_time = 4; + // Max number of records to return. Between 1 and 100. + google.protobuf.Int32Value limit = 6; + // A next page cursor for listings (optional). + string cursor = 8; +} + +// List the groups a user is part of, and their relationship to each. +message ListUserGroupsRequest { + // ID of the user. + string user_id = 1; + // Max number of records to return. Between 1 and 100. + google.protobuf.Int32Value limit = 2; + // The user group state to list. + google.protobuf.Int32Value state = 3; + // An optional next page cursor. + string cursor = 4; +} + +// Represents a realtime match. +message Match { + // The ID of the match, can be used to join. + string match_id = 1; + // True if it's an server-managed authoritative match, false otherwise. + bool authoritative = 2; + // Match label, if any. + google.protobuf.StringValue label = 3; + // Current number of users in the match. + int32 size = 4; + // Tick Rate + int32 tick_rate = 5; + // Handler name + string handler_name = 6; +} + +// A list of realtime matches. +message MatchList { + // A number of matches corresponding to a list operation. + repeated Match matches = 1; +} + +// Matchmaker ticket completion stats +message MatchmakerCompletionStats { + google.protobuf.Timestamp create_time = 1; + google.protobuf.Timestamp complete_time = 2; +} + +// Matchmaker stats +message MatchmakerStats { + int32 ticket_count = 1; + google.protobuf.Timestamp oldest_ticket_create_time = 2; + repeated MatchmakerCompletionStats completions = 3; +} + +// A notification in the server. +message Notification { + // ID of the Notification. + string id = 1; + // Subject of the notification. + string subject = 2; + // Content of the notification in JSON. + string content = 3; + // Category code for this notification. + int32 code = 4; + // ID of the sender, if a user. Otherwise 'null'. + string sender_id = 5; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the notification was created. + google.protobuf.Timestamp create_time = 6; + // True if this notification was persisted to the database. + bool persistent = 7; +} + +// A collection of zero or more notifications. +message NotificationList { + // Collection of notifications. + repeated Notification notifications = 1; + // Use this cursor to paginate notifications. Cache this to catch up to new notifications. + string cacheable_cursor = 2; +} + +// Promote a set of users in a group to the next role up. +message PromoteGroupUsersRequest { + // The group ID to promote in. + string group_id = 1; + // The users to promote. + repeated string user_ids = 2; +} + +// Demote a set of users in a group to the next role down. +message DemoteGroupUsersRequest { + // The group ID to demote in. + string group_id = 1; + // The users to demote. + repeated string user_ids = 2; +} + +// Storage objects to get. +message ReadStorageObjectId { + // The collection which stores the object. + string collection = 1; + // The key of the object within the collection. + string key = 2; + // The user owner of the object. + string user_id = 3; +} + +// Batch get storage objects. +message ReadStorageObjectsRequest { + // Batch of storage objects. + repeated ReadStorageObjectId object_ids = 1; +} + +// Execute an Lua function on the server. +message Rpc { + // The identifier of the function. + string id = 1; + // The payload of the function which must be a JSON object. + string payload = 2; + // The authentication key used when executed as a non-client HTTP request. + string http_key = 3; +} + +// A user's session used to authenticate messages. +message Session { + // True if the corresponding account was just created, false otherwise. + bool created = 1; + // Authentication credentials. + string token = 2; + // Refresh token that can be used for session token renewal. + string refresh_token = 3; +} + +// An object within the storage engine. +message StorageObject { + // The collection which stores the object. + string collection = 1; + // The key of the object within the collection. + string key = 2; + // The user owner of the object. + string user_id = 3; + // The value of the object. + string value = 4; + // The version hash of the object. + string version = 5; + // The read access permissions for the object. + int32 permission_read = 6; + // The write access permissions for the object. + int32 permission_write = 7; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the object was created. + google.protobuf.Timestamp create_time = 8; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the object was last updated. + google.protobuf.Timestamp update_time = 9; +} + +// A storage acknowledgement. +message StorageObjectAck { + // The collection which stores the object. + string collection = 1; + // The key of the object within the collection. + string key = 2; + // The version hash of the object. + string version = 3; + // The owner of the object. + string user_id = 4; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the object was created. + google.protobuf.Timestamp create_time = 5; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the object was last updated. + google.protobuf.Timestamp update_time = 6; +} + +// Batch of acknowledgements for the storage object write. +message StorageObjectAcks { + // Batch of storage write acknowledgements. + repeated StorageObjectAck acks = 1; +} + +// Batch of storage objects. +message StorageObjects { + // The batch of storage objects. + repeated StorageObject objects = 1; +} + +// List of storage objects. +message StorageObjectList { + // The list of storage objects. + repeated StorageObject objects = 1; + // The cursor for the next page of results, if any. + string cursor = 2; +} + +// A tournament on the server. +message Tournament { + // The ID of the tournament. + string id = 1; + // The title for the tournament. + string title = 2; + // The description of the tournament. May be blank. + string description = 3; + // The category of the tournament. e.g. "vip" could be category 1. + uint32 category = 4; + // ASC (0) or DESC (1) sort mode of scores in the tournament. + uint32 sort_order = 5; + // The current number of players in the tournament. + uint32 size = 6; + // The maximum number of players for the tournament. + uint32 max_size = 7; + // The maximum score updates allowed per player for the current tournament. + uint32 max_num_score = 8; + // True if the tournament is active and can enter. A computed value. + bool can_enter = 9; + // The UNIX time when the tournament stops being active until next reset. A computed value. + uint32 end_active = 10; + // The UNIX time when the tournament is next playable. A computed value. + uint32 next_reset = 11; + // Additional information stored as a JSON object. + string metadata = 12; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the tournament was created. + google.protobuf.Timestamp create_time = 13; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the tournament will start. + google.protobuf.Timestamp start_time = 14; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the tournament will be stopped. + google.protobuf.Timestamp end_time = 15; + // Duration of the tournament in seconds. + uint32 duration = 16; + // The UNIX time when the tournament start being active. A computed value. + uint32 start_active = 17; + // The UNIX time when the tournament was last reset. A computed value. + uint32 prev_reset = 18; + // Operator. + Operator operator = 19; + // Whether the leaderboard was created authoritatively or not. + bool authoritative = 20; + // Whether the user must join the tournament before being able to submit scores. + bool join_required = 21; +} + +// A list of tournaments. +message TournamentList { + // The list of tournaments returned. + repeated Tournament tournaments = 1; + // A pagination cursor (optional). + string cursor = 2; +} + +// A set of tournament records which may be part of a tournament records page or a batch of individual records. +message TournamentRecordList { + // A list of tournament records. + repeated LeaderboardRecord records = 1; + // A batched set of tournament records belonging to specified owners. + repeated LeaderboardRecord owner_records = 2; + // The cursor to send when retireving the next page (optional). + string next_cursor = 3; + // The cursor to send when retrieving the previous page (optional). + string prev_cursor = 4; + // The total number of ranks available. + int64 rank_count = 5; +} + +// Update a user's account details. +message UpdateAccountRequest { + // The username of the user's account. + google.protobuf.StringValue username = 1; + // The display name of the user. + google.protobuf.StringValue display_name = 2; + // A URL for an avatar image. + google.protobuf.StringValue avatar_url = 3; + // The language expected to be a tag which follows the BCP-47 spec. + google.protobuf.StringValue lang_tag = 4; + // The location set by the user. + google.protobuf.StringValue location = 5; + // The timezone set by the user. + google.protobuf.StringValue timezone = 6; +} + +// Update fields in a given group. +message UpdateGroupRequest { + // The ID of the group to update. + string group_id = 1; + // Name. + google.protobuf.StringValue name = 2; + // Description string. + google.protobuf.StringValue description = 3; + // Lang tag. + google.protobuf.StringValue lang_tag = 4; + // Avatar URL. + google.protobuf.StringValue avatar_url = 5; + // Open is true if anyone should be allowed to join, or false if joins must be approved by a group admin. + google.protobuf.BoolValue open = 6; +} + +// A user in the server. +message User { + // The id of the user's account. + string id = 1; + // The username of the user's account. + string username = 2; + // The display name of the user. + string display_name = 3; + // A URL for an avatar image. + string avatar_url = 4; + // The language expected to be a tag which follows the BCP-47 spec. + string lang_tag = 5; + // The location set by the user. + string location = 6; + // The timezone set by the user. + string timezone = 7; + // Additional information stored as a JSON object. + string metadata = 8; + // The Facebook id in the user's account. + string facebook_id = 9; + // The Google id in the user's account. + string google_id = 10; + // The Apple Game Center in of the user's account. + string gamecenter_id = 11; + // The Steam id in the user's account. + string steam_id = 12; + // Indicates whether the user is currently online. + bool online = 13; + // Number of related edges to this user. + int32 edge_count = 14; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the user was created. + google.protobuf.Timestamp create_time = 15; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the user was last updated. + google.protobuf.Timestamp update_time = 16; + // The Facebook Instant Game ID in the user's account. + string facebook_instant_game_id = 17; + // The Apple Sign In ID in the user's account. + string apple_id = 18; +} + +// A list of groups belonging to a user, along with the user's role in each group. +message UserGroupList { + // A single group-role pair. + message UserGroup { + // The group role status. + enum State { + // The user is a superadmin with full control of the group. + SUPERADMIN = 0; + // The user is an admin with additional privileges. + ADMIN = 1; + // The user is a regular member. + MEMBER = 2; + // The user has requested to join the group + JOIN_REQUEST = 3; + } + + // Group. + Group group = 1; + // The user's relationship to the group. + google.protobuf.Int32Value state = 2; + } + + // Group-role pairs for a user. + repeated UserGroup user_groups = 1; + // Cursor for the next page of results, if any. + string cursor = 2; +} + +// A collection of zero or more users. +message Users { + // The User objects. + repeated User users = 1; +} + +// Apple IAP Purchases validation request +message ValidatePurchaseAppleRequest { + // Base64 encoded Apple receipt data payload. + string receipt = 1; + // Persist the purchase + google.protobuf.BoolValue persist = 2; +} + +// Apple Subscription validation request +message ValidateSubscriptionAppleRequest { + // Base64 encoded Apple receipt data payload. + string receipt = 1; + // Persist the subscription. + google.protobuf.BoolValue persist = 2; +} + +// Google IAP Purchase validation request +message ValidatePurchaseGoogleRequest { + // JSON encoded Google purchase payload. + string purchase = 1; + // Persist the purchase + google.protobuf.BoolValue persist = 2; +} + +// Google Subscription validation request +message ValidateSubscriptionGoogleRequest { + // JSON encoded Google purchase payload. + string receipt = 1; + // Persist the subscription. + google.protobuf.BoolValue persist = 2; +} + +// Huawei IAP Purchase validation request +message ValidatePurchaseHuaweiRequest { + // JSON encoded Huawei InAppPurchaseData. + string purchase = 1; + // InAppPurchaseData signature. + string signature = 2; + // Persist the purchase + google.protobuf.BoolValue persist = 3; +} + +// Facebook Instant IAP Purchase validation request +message ValidatePurchaseFacebookInstantRequest { + // Base64 encoded Facebook Instant signedRequest receipt data payload. + string signed_request = 1; + // Persist the purchase + google.protobuf.BoolValue persist = 2; +} + +// Validated Purchase stored by Nakama. +message ValidatedPurchase { + // Purchase User ID. + string user_id = 1; + // Purchase Product ID. + string product_id = 2; + // Purchase Transaction ID. + string transaction_id = 3; + // Store identifier + StoreProvider store = 4; + // Timestamp when the purchase was done. + google.protobuf.Timestamp purchase_time = 5; + // Timestamp when the receipt validation was stored in DB. + google.protobuf.Timestamp create_time = 6; + // Timestamp when the receipt validation was updated in DB. + google.protobuf.Timestamp update_time = 7; + // Timestamp when the purchase was refunded. Set to UNIX + google.protobuf.Timestamp refund_time = 8; + // Raw provider validation response. + string provider_response = 9; + // Whether the purchase was done in production or sandbox environment. + StoreEnvironment environment = 10; + // Whether the purchase had already been validated by Nakama before. + bool seen_before = 11; +} + +// Validate IAP response. +message ValidatePurchaseResponse { + // Newly seen validated purchases. + repeated ValidatedPurchase validated_purchases = 1; +} + +// Validate Subscription response. +message ValidateSubscriptionResponse { + ValidatedSubscription validated_subscription = 1; +} + +// Validation Provider, +enum StoreProvider { + // Apple App Store + APPLE_APP_STORE = 0; + // Google Play Store + GOOGLE_PLAY_STORE = 1; + // Huawei App Gallery + HUAWEI_APP_GALLERY = 2; + // Facebook Instant Store + FACEBOOK_INSTANT_STORE = 3; +} + +// Environment where a purchase/subscription took place, +enum StoreEnvironment { + // Unknown environment. + UNKNOWN = 0; + // Sandbox/test environment. + SANDBOX = 1; + // Production environment. + PRODUCTION = 2; +} + +message ValidatedSubscription { + // Subscription User ID. + string user_id = 1; + // Purchase Product ID. + string product_id = 2; + // Purchase Original transaction ID (we only keep track of the original subscription, not subsequent renewals). + string original_transaction_id = 3; + // Store identifier + StoreProvider store = 4; + // UNIX Timestamp when the purchase was done. + google.protobuf.Timestamp purchase_time = 5; + // UNIX Timestamp when the receipt validation was stored in DB. + google.protobuf.Timestamp create_time = 6; + // UNIX Timestamp when the receipt validation was updated in DB. + google.protobuf.Timestamp update_time = 7; + // Whether the purchase was done in production or sandbox environment. + StoreEnvironment environment = 8; + // Subscription expiration time. The subscription can still be auto-renewed to extend the expiration time further. + google.protobuf.Timestamp expiry_time = 9; + // Subscription refund time. If this time is set, the subscription was refunded. + google.protobuf.Timestamp refund_time = 10; + // Raw provider validation response body. + string provider_response = 11; + // Raw provider notification body. + string provider_notification = 12; + // Whether the subscription is currently active or not. + bool active = 13; +} + +// A list of validated purchases stored by Nakama. +message PurchaseList { + // Stored validated purchases. + repeated ValidatedPurchase validated_purchases = 1; + // The cursor to send when retrieving the next page, if any. + string cursor = 2; + // The cursor to send when retrieving the previous page, if any. + string prev_cursor = 3; +} + +// A list of validated subscriptions stored by Nakama. +message SubscriptionList { + // Stored validated subscriptions. + repeated ValidatedSubscription validated_subscriptions = 1; + // The cursor to send when retrieving the next page, if any. + string cursor = 2; + // The cursor to send when retrieving the previous page, if any. + string prev_cursor = 3; +} + +// A request to submit a score to a leaderboard. +message WriteLeaderboardRecordRequest { + // Record values to write. + message LeaderboardRecordWrite { + // The score value to submit. + int64 score = 1; + // An optional secondary value. + int64 subscore = 2; + // Optional record metadata. + string metadata = 3; + // Operator override. + Operator operator = 4; + } + + // The ID of the leaderboard to write to. + string leaderboard_id = 1; + // Record input. + LeaderboardRecordWrite record = 2; +} + +// The object to store. +message WriteStorageObject { + // The collection to store the object. + string collection = 1; + // The key for the object within the collection. + string key = 2; + // The value of the object. + string value = 3; + // The version hash of the object to check. Possible values are: ["", "*", "#hash#"]. + string version = 4; // if-match and if-none-match + // The read access permissions for the object. + google.protobuf.Int32Value permission_read = 5; + // The write access permissions for the object. + google.protobuf.Int32Value permission_write = 6; +} + +// Write objects to the storage engine. +message WriteStorageObjectsRequest { + // The objects to store on the server. + repeated WriteStorageObject objects = 1; +} + +// A request to submit a score to a tournament. +message WriteTournamentRecordRequest { + // Record values to write. + message TournamentRecordWrite { + // The score value to submit. + int64 score = 1; + // An optional secondary value. + int64 subscore = 2; + // A JSON object of additional properties (optional). + string metadata = 3; + // Operator override. + Operator operator = 4; + } + + // The tournament ID to write the record for. + string tournament_id = 1; + // Record input. + TournamentRecordWrite record = 2; +} + +// Operator that can be used to override the one set in the leaderboard. +enum Operator { + // Do not override the leaderboard operator. + NO_OVERRIDE = 0; + // Override the leaderboard operator with BEST. + BEST = 1; + // Override the leaderboard operator with SET. + SET = 2; + // Override the leaderboard operator with INCREMENT. + INCREMENT = 3; + // Override the leaderboard operator with DECREMENT. + DECREMENT = 4; +} + +// A request to list parties. +message ListPartiesRequest { + // Limit the number of returned parties. + google.protobuf.Int32Value limit = 1; + // Optionally filter by open/closed parties. + google.protobuf.BoolValue open = 2; + // Arbitrary label query. + google.protobuf.StringValue query = 3; + // Cursor for the next page of results, if any. + google.protobuf.StringValue cursor = 4; +} + +// Incoming information about a party. +message Party { + // Unique party identifier. + string party_id = 1; + // Open flag. + bool open = 2; + // Hidden flag. + bool hidden = 3; + // Maximum number of party members. + int32 max_size = 4; + // The party label, if any. + string label = 5; +} + +// A list of realtime matches. +message PartyList { + // A number of parties corresponding to a list operation. + repeated Party parties = 1; + // A cursor to send when retrieving the next page, if any. + string cursor = 2; +} diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/api/build.go b/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/api/build.go new file mode 100644 index 0000000..698d0ef --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/api/build.go @@ -0,0 +1,17 @@ +// Copyright 2020 The Nakama Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package api + +//go:generate protoc -I. --go_out=. --go_opt=paths=source_relative api.proto diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/rtapi/build.go b/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/rtapi/build.go new file mode 100644 index 0000000..5bcf7ee --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/rtapi/build.go @@ -0,0 +1,17 @@ +// Copyright 2020 The Nakama Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package rtapi + +//go:generate protoc -I.. -I. --go_out=. --go_opt=paths=source_relative realtime.proto diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/rtapi/realtime.pb.go b/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/rtapi/realtime.pb.go new file mode 100644 index 0000000..23a4ea8 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/rtapi/realtime.pb.go @@ -0,0 +1,6118 @@ +// Copyright 2019 The Nakama Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//* +// The realtime protocol for Nakama server. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc v6.32.0 +// source: realtime.proto + +package rtapi + +import ( + api "github.com/heroiclabs/nakama-common/api" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// The type of chat channel. +type ChannelJoin_Type int32 + +const ( + // Default case. Assumed as ROOM type. + ChannelJoin_TYPE_UNSPECIFIED ChannelJoin_Type = 0 + // A room which anyone can join to chat. + ChannelJoin_ROOM ChannelJoin_Type = 1 + // A private channel for 1-on-1 chat. + ChannelJoin_DIRECT_MESSAGE ChannelJoin_Type = 2 + // A channel for group chat. + ChannelJoin_GROUP ChannelJoin_Type = 3 +) + +// Enum value maps for ChannelJoin_Type. +var ( + ChannelJoin_Type_name = map[int32]string{ + 0: "TYPE_UNSPECIFIED", + 1: "ROOM", + 2: "DIRECT_MESSAGE", + 3: "GROUP", + } + ChannelJoin_Type_value = map[string]int32{ + "TYPE_UNSPECIFIED": 0, + "ROOM": 1, + "DIRECT_MESSAGE": 2, + "GROUP": 3, + } +) + +func (x ChannelJoin_Type) Enum() *ChannelJoin_Type { + p := new(ChannelJoin_Type) + *p = x + return p +} + +func (x ChannelJoin_Type) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ChannelJoin_Type) Descriptor() protoreflect.EnumDescriptor { + return file_realtime_proto_enumTypes[0].Descriptor() +} + +func (ChannelJoin_Type) Type() protoreflect.EnumType { + return &file_realtime_proto_enumTypes[0] +} + +func (x ChannelJoin_Type) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ChannelJoin_Type.Descriptor instead. +func (ChannelJoin_Type) EnumDescriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{2, 0} +} + +// The selection of possible error codes. +type Error_Code int32 + +const ( + // An unexpected result from the server. + Error_RUNTIME_EXCEPTION Error_Code = 0 + // The server received a message which is not recognised. + Error_UNRECOGNIZED_PAYLOAD Error_Code = 1 + // A message was expected but contains no content. + Error_MISSING_PAYLOAD Error_Code = 2 + // Fields in the message have an invalid format. + Error_BAD_INPUT Error_Code = 3 + // The match id was not found. + Error_MATCH_NOT_FOUND Error_Code = 4 + // The match join was rejected. + Error_MATCH_JOIN_REJECTED Error_Code = 5 + // The runtime function does not exist on the server. + Error_RUNTIME_FUNCTION_NOT_FOUND Error_Code = 6 + // The runtime function executed with an error. + Error_RUNTIME_FUNCTION_EXCEPTION Error_Code = 7 +) + +// Enum value maps for Error_Code. +var ( + Error_Code_name = map[int32]string{ + 0: "RUNTIME_EXCEPTION", + 1: "UNRECOGNIZED_PAYLOAD", + 2: "MISSING_PAYLOAD", + 3: "BAD_INPUT", + 4: "MATCH_NOT_FOUND", + 5: "MATCH_JOIN_REJECTED", + 6: "RUNTIME_FUNCTION_NOT_FOUND", + 7: "RUNTIME_FUNCTION_EXCEPTION", + } + Error_Code_value = map[string]int32{ + "RUNTIME_EXCEPTION": 0, + "UNRECOGNIZED_PAYLOAD": 1, + "MISSING_PAYLOAD": 2, + "BAD_INPUT": 3, + "MATCH_NOT_FOUND": 4, + "MATCH_JOIN_REJECTED": 5, + "RUNTIME_FUNCTION_NOT_FOUND": 6, + "RUNTIME_FUNCTION_EXCEPTION": 7, + } +) + +func (x Error_Code) Enum() *Error_Code { + p := new(Error_Code) + *p = x + return p +} + +func (x Error_Code) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Error_Code) Descriptor() protoreflect.EnumDescriptor { + return file_realtime_proto_enumTypes[1].Descriptor() +} + +func (Error_Code) Type() protoreflect.EnumType { + return &file_realtime_proto_enumTypes[1] +} + +func (x Error_Code) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Error_Code.Descriptor instead. +func (Error_Code) EnumDescriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{9, 0} +} + +// An envelope for a realtime message. +type Envelope struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Cid string `protobuf:"bytes,1,opt,name=cid,proto3" json:"cid,omitempty"` + // Types that are assignable to Message: + // + // *Envelope_Channel + // *Envelope_ChannelJoin + // *Envelope_ChannelLeave + // *Envelope_ChannelMessage + // *Envelope_ChannelMessageAck + // *Envelope_ChannelMessageSend + // *Envelope_ChannelMessageUpdate + // *Envelope_ChannelMessageRemove + // *Envelope_ChannelPresenceEvent + // *Envelope_Error + // *Envelope_Match + // *Envelope_MatchCreate + // *Envelope_MatchData + // *Envelope_MatchDataSend + // *Envelope_MatchJoin + // *Envelope_MatchLeave + // *Envelope_MatchPresenceEvent + // *Envelope_MatchmakerAdd + // *Envelope_MatchmakerMatched + // *Envelope_MatchmakerRemove + // *Envelope_MatchmakerTicket + // *Envelope_Notifications + // *Envelope_Rpc + // *Envelope_Status + // *Envelope_StatusFollow + // *Envelope_StatusPresenceEvent + // *Envelope_StatusUnfollow + // *Envelope_StatusUpdate + // *Envelope_StreamData + // *Envelope_StreamPresenceEvent + // *Envelope_Ping + // *Envelope_Pong + // *Envelope_Party + // *Envelope_PartyCreate + // *Envelope_PartyJoin + // *Envelope_PartyLeave + // *Envelope_PartyPromote + // *Envelope_PartyLeader + // *Envelope_PartyAccept + // *Envelope_PartyRemove + // *Envelope_PartyClose + // *Envelope_PartyJoinRequestList + // *Envelope_PartyJoinRequest + // *Envelope_PartyMatchmakerAdd + // *Envelope_PartyMatchmakerRemove + // *Envelope_PartyMatchmakerTicket + // *Envelope_PartyData + // *Envelope_PartyDataSend + // *Envelope_PartyPresenceEvent + // *Envelope_PartyUpdate + Message isEnvelope_Message `protobuf_oneof:"message"` +} + +func (x *Envelope) Reset() { + *x = Envelope{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Envelope) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Envelope) ProtoMessage() {} + +func (x *Envelope) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Envelope.ProtoReflect.Descriptor instead. +func (*Envelope) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{0} +} + +func (x *Envelope) GetCid() string { + if x != nil { + return x.Cid + } + return "" +} + +func (m *Envelope) GetMessage() isEnvelope_Message { + if m != nil { + return m.Message + } + return nil +} + +func (x *Envelope) GetChannel() *Channel { + if x, ok := x.GetMessage().(*Envelope_Channel); ok { + return x.Channel + } + return nil +} + +func (x *Envelope) GetChannelJoin() *ChannelJoin { + if x, ok := x.GetMessage().(*Envelope_ChannelJoin); ok { + return x.ChannelJoin + } + return nil +} + +func (x *Envelope) GetChannelLeave() *ChannelLeave { + if x, ok := x.GetMessage().(*Envelope_ChannelLeave); ok { + return x.ChannelLeave + } + return nil +} + +func (x *Envelope) GetChannelMessage() *api.ChannelMessage { + if x, ok := x.GetMessage().(*Envelope_ChannelMessage); ok { + return x.ChannelMessage + } + return nil +} + +func (x *Envelope) GetChannelMessageAck() *ChannelMessageAck { + if x, ok := x.GetMessage().(*Envelope_ChannelMessageAck); ok { + return x.ChannelMessageAck + } + return nil +} + +func (x *Envelope) GetChannelMessageSend() *ChannelMessageSend { + if x, ok := x.GetMessage().(*Envelope_ChannelMessageSend); ok { + return x.ChannelMessageSend + } + return nil +} + +func (x *Envelope) GetChannelMessageUpdate() *ChannelMessageUpdate { + if x, ok := x.GetMessage().(*Envelope_ChannelMessageUpdate); ok { + return x.ChannelMessageUpdate + } + return nil +} + +func (x *Envelope) GetChannelMessageRemove() *ChannelMessageRemove { + if x, ok := x.GetMessage().(*Envelope_ChannelMessageRemove); ok { + return x.ChannelMessageRemove + } + return nil +} + +func (x *Envelope) GetChannelPresenceEvent() *ChannelPresenceEvent { + if x, ok := x.GetMessage().(*Envelope_ChannelPresenceEvent); ok { + return x.ChannelPresenceEvent + } + return nil +} + +func (x *Envelope) GetError() *Error { + if x, ok := x.GetMessage().(*Envelope_Error); ok { + return x.Error + } + return nil +} + +func (x *Envelope) GetMatch() *Match { + if x, ok := x.GetMessage().(*Envelope_Match); ok { + return x.Match + } + return nil +} + +func (x *Envelope) GetMatchCreate() *MatchCreate { + if x, ok := x.GetMessage().(*Envelope_MatchCreate); ok { + return x.MatchCreate + } + return nil +} + +func (x *Envelope) GetMatchData() *MatchData { + if x, ok := x.GetMessage().(*Envelope_MatchData); ok { + return x.MatchData + } + return nil +} + +func (x *Envelope) GetMatchDataSend() *MatchDataSend { + if x, ok := x.GetMessage().(*Envelope_MatchDataSend); ok { + return x.MatchDataSend + } + return nil +} + +func (x *Envelope) GetMatchJoin() *MatchJoin { + if x, ok := x.GetMessage().(*Envelope_MatchJoin); ok { + return x.MatchJoin + } + return nil +} + +func (x *Envelope) GetMatchLeave() *MatchLeave { + if x, ok := x.GetMessage().(*Envelope_MatchLeave); ok { + return x.MatchLeave + } + return nil +} + +func (x *Envelope) GetMatchPresenceEvent() *MatchPresenceEvent { + if x, ok := x.GetMessage().(*Envelope_MatchPresenceEvent); ok { + return x.MatchPresenceEvent + } + return nil +} + +func (x *Envelope) GetMatchmakerAdd() *MatchmakerAdd { + if x, ok := x.GetMessage().(*Envelope_MatchmakerAdd); ok { + return x.MatchmakerAdd + } + return nil +} + +func (x *Envelope) GetMatchmakerMatched() *MatchmakerMatched { + if x, ok := x.GetMessage().(*Envelope_MatchmakerMatched); ok { + return x.MatchmakerMatched + } + return nil +} + +func (x *Envelope) GetMatchmakerRemove() *MatchmakerRemove { + if x, ok := x.GetMessage().(*Envelope_MatchmakerRemove); ok { + return x.MatchmakerRemove + } + return nil +} + +func (x *Envelope) GetMatchmakerTicket() *MatchmakerTicket { + if x, ok := x.GetMessage().(*Envelope_MatchmakerTicket); ok { + return x.MatchmakerTicket + } + return nil +} + +func (x *Envelope) GetNotifications() *Notifications { + if x, ok := x.GetMessage().(*Envelope_Notifications); ok { + return x.Notifications + } + return nil +} + +func (x *Envelope) GetRpc() *api.Rpc { + if x, ok := x.GetMessage().(*Envelope_Rpc); ok { + return x.Rpc + } + return nil +} + +func (x *Envelope) GetStatus() *Status { + if x, ok := x.GetMessage().(*Envelope_Status); ok { + return x.Status + } + return nil +} + +func (x *Envelope) GetStatusFollow() *StatusFollow { + if x, ok := x.GetMessage().(*Envelope_StatusFollow); ok { + return x.StatusFollow + } + return nil +} + +func (x *Envelope) GetStatusPresenceEvent() *StatusPresenceEvent { + if x, ok := x.GetMessage().(*Envelope_StatusPresenceEvent); ok { + return x.StatusPresenceEvent + } + return nil +} + +func (x *Envelope) GetStatusUnfollow() *StatusUnfollow { + if x, ok := x.GetMessage().(*Envelope_StatusUnfollow); ok { + return x.StatusUnfollow + } + return nil +} + +func (x *Envelope) GetStatusUpdate() *StatusUpdate { + if x, ok := x.GetMessage().(*Envelope_StatusUpdate); ok { + return x.StatusUpdate + } + return nil +} + +func (x *Envelope) GetStreamData() *StreamData { + if x, ok := x.GetMessage().(*Envelope_StreamData); ok { + return x.StreamData + } + return nil +} + +func (x *Envelope) GetStreamPresenceEvent() *StreamPresenceEvent { + if x, ok := x.GetMessage().(*Envelope_StreamPresenceEvent); ok { + return x.StreamPresenceEvent + } + return nil +} + +func (x *Envelope) GetPing() *Ping { + if x, ok := x.GetMessage().(*Envelope_Ping); ok { + return x.Ping + } + return nil +} + +func (x *Envelope) GetPong() *Pong { + if x, ok := x.GetMessage().(*Envelope_Pong); ok { + return x.Pong + } + return nil +} + +func (x *Envelope) GetParty() *Party { + if x, ok := x.GetMessage().(*Envelope_Party); ok { + return x.Party + } + return nil +} + +func (x *Envelope) GetPartyCreate() *PartyCreate { + if x, ok := x.GetMessage().(*Envelope_PartyCreate); ok { + return x.PartyCreate + } + return nil +} + +func (x *Envelope) GetPartyJoin() *PartyJoin { + if x, ok := x.GetMessage().(*Envelope_PartyJoin); ok { + return x.PartyJoin + } + return nil +} + +func (x *Envelope) GetPartyLeave() *PartyLeave { + if x, ok := x.GetMessage().(*Envelope_PartyLeave); ok { + return x.PartyLeave + } + return nil +} + +func (x *Envelope) GetPartyPromote() *PartyPromote { + if x, ok := x.GetMessage().(*Envelope_PartyPromote); ok { + return x.PartyPromote + } + return nil +} + +func (x *Envelope) GetPartyLeader() *PartyLeader { + if x, ok := x.GetMessage().(*Envelope_PartyLeader); ok { + return x.PartyLeader + } + return nil +} + +func (x *Envelope) GetPartyAccept() *PartyAccept { + if x, ok := x.GetMessage().(*Envelope_PartyAccept); ok { + return x.PartyAccept + } + return nil +} + +func (x *Envelope) GetPartyRemove() *PartyRemove { + if x, ok := x.GetMessage().(*Envelope_PartyRemove); ok { + return x.PartyRemove + } + return nil +} + +func (x *Envelope) GetPartyClose() *PartyClose { + if x, ok := x.GetMessage().(*Envelope_PartyClose); ok { + return x.PartyClose + } + return nil +} + +func (x *Envelope) GetPartyJoinRequestList() *PartyJoinRequestList { + if x, ok := x.GetMessage().(*Envelope_PartyJoinRequestList); ok { + return x.PartyJoinRequestList + } + return nil +} + +func (x *Envelope) GetPartyJoinRequest() *PartyJoinRequest { + if x, ok := x.GetMessage().(*Envelope_PartyJoinRequest); ok { + return x.PartyJoinRequest + } + return nil +} + +func (x *Envelope) GetPartyMatchmakerAdd() *PartyMatchmakerAdd { + if x, ok := x.GetMessage().(*Envelope_PartyMatchmakerAdd); ok { + return x.PartyMatchmakerAdd + } + return nil +} + +func (x *Envelope) GetPartyMatchmakerRemove() *PartyMatchmakerRemove { + if x, ok := x.GetMessage().(*Envelope_PartyMatchmakerRemove); ok { + return x.PartyMatchmakerRemove + } + return nil +} + +func (x *Envelope) GetPartyMatchmakerTicket() *PartyMatchmakerTicket { + if x, ok := x.GetMessage().(*Envelope_PartyMatchmakerTicket); ok { + return x.PartyMatchmakerTicket + } + return nil +} + +func (x *Envelope) GetPartyData() *PartyData { + if x, ok := x.GetMessage().(*Envelope_PartyData); ok { + return x.PartyData + } + return nil +} + +func (x *Envelope) GetPartyDataSend() *PartyDataSend { + if x, ok := x.GetMessage().(*Envelope_PartyDataSend); ok { + return x.PartyDataSend + } + return nil +} + +func (x *Envelope) GetPartyPresenceEvent() *PartyPresenceEvent { + if x, ok := x.GetMessage().(*Envelope_PartyPresenceEvent); ok { + return x.PartyPresenceEvent + } + return nil +} + +func (x *Envelope) GetPartyUpdate() *PartyUpdate { + if x, ok := x.GetMessage().(*Envelope_PartyUpdate); ok { + return x.PartyUpdate + } + return nil +} + +type isEnvelope_Message interface { + isEnvelope_Message() +} + +type Envelope_Channel struct { + // A response from a channel join operation. + Channel *Channel `protobuf:"bytes,2,opt,name=channel,proto3,oneof"` +} + +type Envelope_ChannelJoin struct { + // Join a realtime chat channel. + ChannelJoin *ChannelJoin `protobuf:"bytes,3,opt,name=channel_join,json=channelJoin,proto3,oneof"` +} + +type Envelope_ChannelLeave struct { + // Leave a realtime chat channel. + ChannelLeave *ChannelLeave `protobuf:"bytes,4,opt,name=channel_leave,json=channelLeave,proto3,oneof"` +} + +type Envelope_ChannelMessage struct { + // An incoming message on a realtime chat channel. + ChannelMessage *api.ChannelMessage `protobuf:"bytes,5,opt,name=channel_message,json=channelMessage,proto3,oneof"` +} + +type Envelope_ChannelMessageAck struct { + // An acknowledgement received in response to sending a message on a chat channel. + ChannelMessageAck *ChannelMessageAck `protobuf:"bytes,6,opt,name=channel_message_ack,json=channelMessageAck,proto3,oneof"` +} + +type Envelope_ChannelMessageSend struct { + // Send a message to a realtime chat channel. + ChannelMessageSend *ChannelMessageSend `protobuf:"bytes,7,opt,name=channel_message_send,json=channelMessageSend,proto3,oneof"` +} + +type Envelope_ChannelMessageUpdate struct { + // Update a message previously sent to a realtime chat channel. + ChannelMessageUpdate *ChannelMessageUpdate `protobuf:"bytes,8,opt,name=channel_message_update,json=channelMessageUpdate,proto3,oneof"` +} + +type Envelope_ChannelMessageRemove struct { + // Remove a message previously sent to a realtime chat channel. + ChannelMessageRemove *ChannelMessageRemove `protobuf:"bytes,9,opt,name=channel_message_remove,json=channelMessageRemove,proto3,oneof"` +} + +type Envelope_ChannelPresenceEvent struct { + // Presence update for a particular realtime chat channel. + ChannelPresenceEvent *ChannelPresenceEvent `protobuf:"bytes,10,opt,name=channel_presence_event,json=channelPresenceEvent,proto3,oneof"` +} + +type Envelope_Error struct { + // Describes an error which occurred on the server. + Error *Error `protobuf:"bytes,11,opt,name=error,proto3,oneof"` +} + +type Envelope_Match struct { + // Incoming information about a realtime match. + Match *Match `protobuf:"bytes,12,opt,name=match,proto3,oneof"` +} + +type Envelope_MatchCreate struct { + // A client to server request to create a realtime match. + MatchCreate *MatchCreate `protobuf:"bytes,13,opt,name=match_create,json=matchCreate,proto3,oneof"` +} + +type Envelope_MatchData struct { + // Incoming realtime match data delivered from the server. + MatchData *MatchData `protobuf:"bytes,14,opt,name=match_data,json=matchData,proto3,oneof"` +} + +type Envelope_MatchDataSend struct { + // A client to server request to send data to a realtime match. + MatchDataSend *MatchDataSend `protobuf:"bytes,15,opt,name=match_data_send,json=matchDataSend,proto3,oneof"` +} + +type Envelope_MatchJoin struct { + // A client to server request to join a realtime match. + MatchJoin *MatchJoin `protobuf:"bytes,16,opt,name=match_join,json=matchJoin,proto3,oneof"` +} + +type Envelope_MatchLeave struct { + // A client to server request to leave a realtime match. + MatchLeave *MatchLeave `protobuf:"bytes,17,opt,name=match_leave,json=matchLeave,proto3,oneof"` +} + +type Envelope_MatchPresenceEvent struct { + // Presence update for a particular realtime match. + MatchPresenceEvent *MatchPresenceEvent `protobuf:"bytes,18,opt,name=match_presence_event,json=matchPresenceEvent,proto3,oneof"` +} + +type Envelope_MatchmakerAdd struct { + // Submit a new matchmaking process request. + MatchmakerAdd *MatchmakerAdd `protobuf:"bytes,19,opt,name=matchmaker_add,json=matchmakerAdd,proto3,oneof"` +} + +type Envelope_MatchmakerMatched struct { + // A successful matchmaking result. + MatchmakerMatched *MatchmakerMatched `protobuf:"bytes,20,opt,name=matchmaker_matched,json=matchmakerMatched,proto3,oneof"` +} + +type Envelope_MatchmakerRemove struct { + // Cancel a matchmaking process using a ticket. + MatchmakerRemove *MatchmakerRemove `protobuf:"bytes,21,opt,name=matchmaker_remove,json=matchmakerRemove,proto3,oneof"` +} + +type Envelope_MatchmakerTicket struct { + // A response from starting a new matchmaking process. + MatchmakerTicket *MatchmakerTicket `protobuf:"bytes,22,opt,name=matchmaker_ticket,json=matchmakerTicket,proto3,oneof"` +} + +type Envelope_Notifications struct { + // Notifications send by the server. + Notifications *Notifications `protobuf:"bytes,23,opt,name=notifications,proto3,oneof"` +} + +type Envelope_Rpc struct { + // RPC call or response. + Rpc *api.Rpc `protobuf:"bytes,24,opt,name=rpc,proto3,oneof"` +} + +type Envelope_Status struct { + // An incoming status snapshot for some set of users. + Status *Status `protobuf:"bytes,25,opt,name=status,proto3,oneof"` +} + +type Envelope_StatusFollow struct { + // Start following some set of users to receive their status updates. + StatusFollow *StatusFollow `protobuf:"bytes,26,opt,name=status_follow,json=statusFollow,proto3,oneof"` +} + +type Envelope_StatusPresenceEvent struct { + // An incoming status update. + StatusPresenceEvent *StatusPresenceEvent `protobuf:"bytes,27,opt,name=status_presence_event,json=statusPresenceEvent,proto3,oneof"` +} + +type Envelope_StatusUnfollow struct { + // Stop following some set of users to no longer receive their status updates. + StatusUnfollow *StatusUnfollow `protobuf:"bytes,28,opt,name=status_unfollow,json=statusUnfollow,proto3,oneof"` +} + +type Envelope_StatusUpdate struct { + // Set the user's own status. + StatusUpdate *StatusUpdate `protobuf:"bytes,29,opt,name=status_update,json=statusUpdate,proto3,oneof"` +} + +type Envelope_StreamData struct { + // A data message delivered over a stream. + StreamData *StreamData `protobuf:"bytes,30,opt,name=stream_data,json=streamData,proto3,oneof"` +} + +type Envelope_StreamPresenceEvent struct { + // Presence update for a particular stream. + StreamPresenceEvent *StreamPresenceEvent `protobuf:"bytes,31,opt,name=stream_presence_event,json=streamPresenceEvent,proto3,oneof"` +} + +type Envelope_Ping struct { + // Application-level heartbeat and connection check. + Ping *Ping `protobuf:"bytes,32,opt,name=ping,proto3,oneof"` +} + +type Envelope_Pong struct { + // Application-level heartbeat and connection check response. + Pong *Pong `protobuf:"bytes,33,opt,name=pong,proto3,oneof"` +} + +type Envelope_Party struct { + // Incoming information about a party. + Party *Party `protobuf:"bytes,34,opt,name=party,proto3,oneof"` +} + +type Envelope_PartyCreate struct { + // Create a party. + PartyCreate *PartyCreate `protobuf:"bytes,35,opt,name=party_create,json=partyCreate,proto3,oneof"` +} + +type Envelope_PartyJoin struct { + // Join a party, or request to join if the party is not open. + PartyJoin *PartyJoin `protobuf:"bytes,36,opt,name=party_join,json=partyJoin,proto3,oneof"` +} + +type Envelope_PartyLeave struct { + // Leave a party. + PartyLeave *PartyLeave `protobuf:"bytes,37,opt,name=party_leave,json=partyLeave,proto3,oneof"` +} + +type Envelope_PartyPromote struct { + // Promote a new party leader. + PartyPromote *PartyPromote `protobuf:"bytes,38,opt,name=party_promote,json=partyPromote,proto3,oneof"` +} + +type Envelope_PartyLeader struct { + // Announcement of a new party leader. + PartyLeader *PartyLeader `protobuf:"bytes,39,opt,name=party_leader,json=partyLeader,proto3,oneof"` +} + +type Envelope_PartyAccept struct { + // Accept a request to join. + PartyAccept *PartyAccept `protobuf:"bytes,40,opt,name=party_accept,json=partyAccept,proto3,oneof"` +} + +type Envelope_PartyRemove struct { + // Kick a party member, or decline a request to join. + PartyRemove *PartyRemove `protobuf:"bytes,41,opt,name=party_remove,json=partyRemove,proto3,oneof"` +} + +type Envelope_PartyClose struct { + // End a party, kicking all party members and closing it. + PartyClose *PartyClose `protobuf:"bytes,42,opt,name=party_close,json=partyClose,proto3,oneof"` +} + +type Envelope_PartyJoinRequestList struct { + // Request a list of pending join requests for a party. + PartyJoinRequestList *PartyJoinRequestList `protobuf:"bytes,43,opt,name=party_join_request_list,json=partyJoinRequestList,proto3,oneof"` +} + +type Envelope_PartyJoinRequest struct { + // Incoming notification for one or more new presences attempting to join the party. + PartyJoinRequest *PartyJoinRequest `protobuf:"bytes,44,opt,name=party_join_request,json=partyJoinRequest,proto3,oneof"` +} + +type Envelope_PartyMatchmakerAdd struct { + // Begin matchmaking as a party. + PartyMatchmakerAdd *PartyMatchmakerAdd `protobuf:"bytes,45,opt,name=party_matchmaker_add,json=partyMatchmakerAdd,proto3,oneof"` +} + +type Envelope_PartyMatchmakerRemove struct { + // Cancel a party matchmaking process using a ticket. + PartyMatchmakerRemove *PartyMatchmakerRemove `protobuf:"bytes,46,opt,name=party_matchmaker_remove,json=partyMatchmakerRemove,proto3,oneof"` +} + +type Envelope_PartyMatchmakerTicket struct { + // A response from starting a new party matchmaking process. + PartyMatchmakerTicket *PartyMatchmakerTicket `protobuf:"bytes,47,opt,name=party_matchmaker_ticket,json=partyMatchmakerTicket,proto3,oneof"` +} + +type Envelope_PartyData struct { + // Incoming party data delivered from the server. + PartyData *PartyData `protobuf:"bytes,48,opt,name=party_data,json=partyData,proto3,oneof"` +} + +type Envelope_PartyDataSend struct { + // A client to server request to send data to a party. + PartyDataSend *PartyDataSend `protobuf:"bytes,49,opt,name=party_data_send,json=partyDataSend,proto3,oneof"` +} + +type Envelope_PartyPresenceEvent struct { + // Presence update for a particular party. + PartyPresenceEvent *PartyPresenceEvent `protobuf:"bytes,50,opt,name=party_presence_event,json=partyPresenceEvent,proto3,oneof"` +} + +type Envelope_PartyUpdate struct { + // Update Party label and whether it's open or closed. + PartyUpdate *PartyUpdate `protobuf:"bytes,51,opt,name=party_update,json=partyUpdate,proto3,oneof"` +} + +func (*Envelope_Channel) isEnvelope_Message() {} + +func (*Envelope_ChannelJoin) isEnvelope_Message() {} + +func (*Envelope_ChannelLeave) isEnvelope_Message() {} + +func (*Envelope_ChannelMessage) isEnvelope_Message() {} + +func (*Envelope_ChannelMessageAck) isEnvelope_Message() {} + +func (*Envelope_ChannelMessageSend) isEnvelope_Message() {} + +func (*Envelope_ChannelMessageUpdate) isEnvelope_Message() {} + +func (*Envelope_ChannelMessageRemove) isEnvelope_Message() {} + +func (*Envelope_ChannelPresenceEvent) isEnvelope_Message() {} + +func (*Envelope_Error) isEnvelope_Message() {} + +func (*Envelope_Match) isEnvelope_Message() {} + +func (*Envelope_MatchCreate) isEnvelope_Message() {} + +func (*Envelope_MatchData) isEnvelope_Message() {} + +func (*Envelope_MatchDataSend) isEnvelope_Message() {} + +func (*Envelope_MatchJoin) isEnvelope_Message() {} + +func (*Envelope_MatchLeave) isEnvelope_Message() {} + +func (*Envelope_MatchPresenceEvent) isEnvelope_Message() {} + +func (*Envelope_MatchmakerAdd) isEnvelope_Message() {} + +func (*Envelope_MatchmakerMatched) isEnvelope_Message() {} + +func (*Envelope_MatchmakerRemove) isEnvelope_Message() {} + +func (*Envelope_MatchmakerTicket) isEnvelope_Message() {} + +func (*Envelope_Notifications) isEnvelope_Message() {} + +func (*Envelope_Rpc) isEnvelope_Message() {} + +func (*Envelope_Status) isEnvelope_Message() {} + +func (*Envelope_StatusFollow) isEnvelope_Message() {} + +func (*Envelope_StatusPresenceEvent) isEnvelope_Message() {} + +func (*Envelope_StatusUnfollow) isEnvelope_Message() {} + +func (*Envelope_StatusUpdate) isEnvelope_Message() {} + +func (*Envelope_StreamData) isEnvelope_Message() {} + +func (*Envelope_StreamPresenceEvent) isEnvelope_Message() {} + +func (*Envelope_Ping) isEnvelope_Message() {} + +func (*Envelope_Pong) isEnvelope_Message() {} + +func (*Envelope_Party) isEnvelope_Message() {} + +func (*Envelope_PartyCreate) isEnvelope_Message() {} + +func (*Envelope_PartyJoin) isEnvelope_Message() {} + +func (*Envelope_PartyLeave) isEnvelope_Message() {} + +func (*Envelope_PartyPromote) isEnvelope_Message() {} + +func (*Envelope_PartyLeader) isEnvelope_Message() {} + +func (*Envelope_PartyAccept) isEnvelope_Message() {} + +func (*Envelope_PartyRemove) isEnvelope_Message() {} + +func (*Envelope_PartyClose) isEnvelope_Message() {} + +func (*Envelope_PartyJoinRequestList) isEnvelope_Message() {} + +func (*Envelope_PartyJoinRequest) isEnvelope_Message() {} + +func (*Envelope_PartyMatchmakerAdd) isEnvelope_Message() {} + +func (*Envelope_PartyMatchmakerRemove) isEnvelope_Message() {} + +func (*Envelope_PartyMatchmakerTicket) isEnvelope_Message() {} + +func (*Envelope_PartyData) isEnvelope_Message() {} + +func (*Envelope_PartyDataSend) isEnvelope_Message() {} + +func (*Envelope_PartyPresenceEvent) isEnvelope_Message() {} + +func (*Envelope_PartyUpdate) isEnvelope_Message() {} + +// A realtime chat channel. +type Channel struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the channel. + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // The users currently in the channel. + Presences []*UserPresence `protobuf:"bytes,2,rep,name=presences,proto3" json:"presences,omitempty"` + // A reference to the current user's presence in the channel. + Self *UserPresence `protobuf:"bytes,3,opt,name=self,proto3" json:"self,omitempty"` + // The name of the chat room, or an empty string if this message was not sent through a chat room. + RoomName string `protobuf:"bytes,4,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` + // The ID of the group, or an empty string if this message was not sent through a group channel. + GroupId string `protobuf:"bytes,5,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + // The ID of the first DM user, or an empty string if this message was not sent through a DM chat. + UserIdOne string `protobuf:"bytes,6,opt,name=user_id_one,json=userIdOne,proto3" json:"user_id_one,omitempty"` + // The ID of the second DM user, or an empty string if this message was not sent through a DM chat. + UserIdTwo string `protobuf:"bytes,7,opt,name=user_id_two,json=userIdTwo,proto3" json:"user_id_two,omitempty"` +} + +func (x *Channel) Reset() { + *x = Channel{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Channel) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Channel) ProtoMessage() {} + +func (x *Channel) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Channel.ProtoReflect.Descriptor instead. +func (*Channel) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{1} +} + +func (x *Channel) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Channel) GetPresences() []*UserPresence { + if x != nil { + return x.Presences + } + return nil +} + +func (x *Channel) GetSelf() *UserPresence { + if x != nil { + return x.Self + } + return nil +} + +func (x *Channel) GetRoomName() string { + if x != nil { + return x.RoomName + } + return "" +} + +func (x *Channel) GetGroupId() string { + if x != nil { + return x.GroupId + } + return "" +} + +func (x *Channel) GetUserIdOne() string { + if x != nil { + return x.UserIdOne + } + return "" +} + +func (x *Channel) GetUserIdTwo() string { + if x != nil { + return x.UserIdTwo + } + return "" +} + +// Join operation for a realtime chat channel. +type ChannelJoin struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The user ID to DM with, group ID to chat with, or room channel name to join. + Target string `protobuf:"bytes,1,opt,name=target,proto3" json:"target,omitempty"` + // The type of the chat channel. + Type int32 `protobuf:"varint,2,opt,name=type,proto3" json:"type,omitempty"` // one of "ChannelId.Type". + // Whether messages sent on this channel should be persistent. + Persistence *wrapperspb.BoolValue `protobuf:"bytes,3,opt,name=persistence,proto3" json:"persistence,omitempty"` + // Whether the user should appear in the channel's presence list and events. + Hidden *wrapperspb.BoolValue `protobuf:"bytes,4,opt,name=hidden,proto3" json:"hidden,omitempty"` +} + +func (x *ChannelJoin) Reset() { + *x = ChannelJoin{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChannelJoin) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChannelJoin) ProtoMessage() {} + +func (x *ChannelJoin) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChannelJoin.ProtoReflect.Descriptor instead. +func (*ChannelJoin) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{2} +} + +func (x *ChannelJoin) GetTarget() string { + if x != nil { + return x.Target + } + return "" +} + +func (x *ChannelJoin) GetType() int32 { + if x != nil { + return x.Type + } + return 0 +} + +func (x *ChannelJoin) GetPersistence() *wrapperspb.BoolValue { + if x != nil { + return x.Persistence + } + return nil +} + +func (x *ChannelJoin) GetHidden() *wrapperspb.BoolValue { + if x != nil { + return x.Hidden + } + return nil +} + +// Leave a realtime channel. +type ChannelLeave struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the channel to leave. + ChannelId string `protobuf:"bytes,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` +} + +func (x *ChannelLeave) Reset() { + *x = ChannelLeave{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChannelLeave) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChannelLeave) ProtoMessage() {} + +func (x *ChannelLeave) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChannelLeave.ProtoReflect.Descriptor instead. +func (*ChannelLeave) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{3} +} + +func (x *ChannelLeave) GetChannelId() string { + if x != nil { + return x.ChannelId + } + return "" +} + +// A receipt reply from a channel message send operation. +type ChannelMessageAck struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The channel the message was sent to. + ChannelId string `protobuf:"bytes,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` + // The unique ID assigned to the message. + MessageId string `protobuf:"bytes,2,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` + // The code representing a message type or category. + Code *wrapperspb.Int32Value `protobuf:"bytes,3,opt,name=code,proto3" json:"code,omitempty"` + // Username of the message sender. + Username string `protobuf:"bytes,4,opt,name=username,proto3" json:"username,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the message was created. + CreateTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the message was last updated. + UpdateTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` + // True if the message was persisted to the channel's history, false otherwise. + Persistent *wrapperspb.BoolValue `protobuf:"bytes,7,opt,name=persistent,proto3" json:"persistent,omitempty"` + // The name of the chat room, or an empty string if this message was not sent through a chat room. + RoomName string `protobuf:"bytes,8,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` + // The ID of the group, or an empty string if this message was not sent through a group channel. + GroupId string `protobuf:"bytes,9,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + // The ID of the first DM user, or an empty string if this message was not sent through a DM chat. + UserIdOne string `protobuf:"bytes,10,opt,name=user_id_one,json=userIdOne,proto3" json:"user_id_one,omitempty"` + // The ID of the second DM user, or an empty string if this message was not sent through a DM chat. + UserIdTwo string `protobuf:"bytes,11,opt,name=user_id_two,json=userIdTwo,proto3" json:"user_id_two,omitempty"` +} + +func (x *ChannelMessageAck) Reset() { + *x = ChannelMessageAck{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChannelMessageAck) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChannelMessageAck) ProtoMessage() {} + +func (x *ChannelMessageAck) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChannelMessageAck.ProtoReflect.Descriptor instead. +func (*ChannelMessageAck) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{4} +} + +func (x *ChannelMessageAck) GetChannelId() string { + if x != nil { + return x.ChannelId + } + return "" +} + +func (x *ChannelMessageAck) GetMessageId() string { + if x != nil { + return x.MessageId + } + return "" +} + +func (x *ChannelMessageAck) GetCode() *wrapperspb.Int32Value { + if x != nil { + return x.Code + } + return nil +} + +func (x *ChannelMessageAck) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *ChannelMessageAck) GetCreateTime() *timestamppb.Timestamp { + if x != nil { + return x.CreateTime + } + return nil +} + +func (x *ChannelMessageAck) GetUpdateTime() *timestamppb.Timestamp { + if x != nil { + return x.UpdateTime + } + return nil +} + +func (x *ChannelMessageAck) GetPersistent() *wrapperspb.BoolValue { + if x != nil { + return x.Persistent + } + return nil +} + +func (x *ChannelMessageAck) GetRoomName() string { + if x != nil { + return x.RoomName + } + return "" +} + +func (x *ChannelMessageAck) GetGroupId() string { + if x != nil { + return x.GroupId + } + return "" +} + +func (x *ChannelMessageAck) GetUserIdOne() string { + if x != nil { + return x.UserIdOne + } + return "" +} + +func (x *ChannelMessageAck) GetUserIdTwo() string { + if x != nil { + return x.UserIdTwo + } + return "" +} + +// Send a message to a realtime channel. +type ChannelMessageSend struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The channel to sent to. + ChannelId string `protobuf:"bytes,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` + // Message content. + Content string `protobuf:"bytes,2,opt,name=content,proto3" json:"content,omitempty"` +} + +func (x *ChannelMessageSend) Reset() { + *x = ChannelMessageSend{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChannelMessageSend) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChannelMessageSend) ProtoMessage() {} + +func (x *ChannelMessageSend) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChannelMessageSend.ProtoReflect.Descriptor instead. +func (*ChannelMessageSend) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{5} +} + +func (x *ChannelMessageSend) GetChannelId() string { + if x != nil { + return x.ChannelId + } + return "" +} + +func (x *ChannelMessageSend) GetContent() string { + if x != nil { + return x.Content + } + return "" +} + +// Update a message previously sent to a realtime channel. +type ChannelMessageUpdate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The channel the message was sent to. + ChannelId string `protobuf:"bytes,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` + // The ID assigned to the message to update. + MessageId string `protobuf:"bytes,2,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` + // New message content. + Content string `protobuf:"bytes,3,opt,name=content,proto3" json:"content,omitempty"` +} + +func (x *ChannelMessageUpdate) Reset() { + *x = ChannelMessageUpdate{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChannelMessageUpdate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChannelMessageUpdate) ProtoMessage() {} + +func (x *ChannelMessageUpdate) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChannelMessageUpdate.ProtoReflect.Descriptor instead. +func (*ChannelMessageUpdate) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{6} +} + +func (x *ChannelMessageUpdate) GetChannelId() string { + if x != nil { + return x.ChannelId + } + return "" +} + +func (x *ChannelMessageUpdate) GetMessageId() string { + if x != nil { + return x.MessageId + } + return "" +} + +func (x *ChannelMessageUpdate) GetContent() string { + if x != nil { + return x.Content + } + return "" +} + +// Remove a message previously sent to a realtime channel. +type ChannelMessageRemove struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The channel the message was sent to. + ChannelId string `protobuf:"bytes,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` + // The ID assigned to the message to update. + MessageId string `protobuf:"bytes,2,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` +} + +func (x *ChannelMessageRemove) Reset() { + *x = ChannelMessageRemove{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChannelMessageRemove) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChannelMessageRemove) ProtoMessage() {} + +func (x *ChannelMessageRemove) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChannelMessageRemove.ProtoReflect.Descriptor instead. +func (*ChannelMessageRemove) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{7} +} + +func (x *ChannelMessageRemove) GetChannelId() string { + if x != nil { + return x.ChannelId + } + return "" +} + +func (x *ChannelMessageRemove) GetMessageId() string { + if x != nil { + return x.MessageId + } + return "" +} + +// A set of joins and leaves on a particular channel. +type ChannelPresenceEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The channel identifier this event is for. + ChannelId string `protobuf:"bytes,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` + // Presences joining the channel as part of this event, if any. + Joins []*UserPresence `protobuf:"bytes,2,rep,name=joins,proto3" json:"joins,omitempty"` + // Presences leaving the channel as part of this event, if any. + Leaves []*UserPresence `protobuf:"bytes,3,rep,name=leaves,proto3" json:"leaves,omitempty"` + // The name of the chat room, or an empty string if this message was not sent through a chat room. + RoomName string `protobuf:"bytes,4,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` + // The ID of the group, or an empty string if this message was not sent through a group channel. + GroupId string `protobuf:"bytes,5,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` + // The ID of the first DM user, or an empty string if this message was not sent through a DM chat. + UserIdOne string `protobuf:"bytes,6,opt,name=user_id_one,json=userIdOne,proto3" json:"user_id_one,omitempty"` + // The ID of the second DM user, or an empty string if this message was not sent through a DM chat. + UserIdTwo string `protobuf:"bytes,7,opt,name=user_id_two,json=userIdTwo,proto3" json:"user_id_two,omitempty"` +} + +func (x *ChannelPresenceEvent) Reset() { + *x = ChannelPresenceEvent{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChannelPresenceEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChannelPresenceEvent) ProtoMessage() {} + +func (x *ChannelPresenceEvent) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChannelPresenceEvent.ProtoReflect.Descriptor instead. +func (*ChannelPresenceEvent) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{8} +} + +func (x *ChannelPresenceEvent) GetChannelId() string { + if x != nil { + return x.ChannelId + } + return "" +} + +func (x *ChannelPresenceEvent) GetJoins() []*UserPresence { + if x != nil { + return x.Joins + } + return nil +} + +func (x *ChannelPresenceEvent) GetLeaves() []*UserPresence { + if x != nil { + return x.Leaves + } + return nil +} + +func (x *ChannelPresenceEvent) GetRoomName() string { + if x != nil { + return x.RoomName + } + return "" +} + +func (x *ChannelPresenceEvent) GetGroupId() string { + if x != nil { + return x.GroupId + } + return "" +} + +func (x *ChannelPresenceEvent) GetUserIdOne() string { + if x != nil { + return x.UserIdOne + } + return "" +} + +func (x *ChannelPresenceEvent) GetUserIdTwo() string { + if x != nil { + return x.UserIdTwo + } + return "" +} + +// A logical error which may occur on the server. +type Error struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The error code which should be one of "Error.Code" enums. + Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + // A message in English to help developers debug the response. + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + // Additional error details which may be different for each response. + Context map[string]string `protobuf:"bytes,3,rep,name=context,proto3" json:"context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *Error) Reset() { + *x = Error{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Error) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Error) ProtoMessage() {} + +func (x *Error) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Error.ProtoReflect.Descriptor instead. +func (*Error) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{9} +} + +func (x *Error) GetCode() int32 { + if x != nil { + return x.Code + } + return 0 +} + +func (x *Error) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *Error) GetContext() map[string]string { + if x != nil { + return x.Context + } + return nil +} + +// A realtime match. +type Match struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The match unique ID. + MatchId string `protobuf:"bytes,1,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` + // True if it's an server-managed authoritative match, false otherwise. + Authoritative bool `protobuf:"varint,2,opt,name=authoritative,proto3" json:"authoritative,omitempty"` + // Match label, if any. + Label *wrapperspb.StringValue `protobuf:"bytes,3,opt,name=label,proto3" json:"label,omitempty"` + // The number of users currently in the match. + Size int32 `protobuf:"varint,4,opt,name=size,proto3" json:"size,omitempty"` + // The users currently in the match. + Presences []*UserPresence `protobuf:"bytes,5,rep,name=presences,proto3" json:"presences,omitempty"` + // A reference to the current user's presence in the match. + Self *UserPresence `protobuf:"bytes,6,opt,name=self,proto3" json:"self,omitempty"` +} + +func (x *Match) Reset() { + *x = Match{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Match) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Match) ProtoMessage() {} + +func (x *Match) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Match.ProtoReflect.Descriptor instead. +func (*Match) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{10} +} + +func (x *Match) GetMatchId() string { + if x != nil { + return x.MatchId + } + return "" +} + +func (x *Match) GetAuthoritative() bool { + if x != nil { + return x.Authoritative + } + return false +} + +func (x *Match) GetLabel() *wrapperspb.StringValue { + if x != nil { + return x.Label + } + return nil +} + +func (x *Match) GetSize() int32 { + if x != nil { + return x.Size + } + return 0 +} + +func (x *Match) GetPresences() []*UserPresence { + if x != nil { + return x.Presences + } + return nil +} + +func (x *Match) GetSelf() *UserPresence { + if x != nil { + return x.Self + } + return nil +} + +// Create a new realtime match. +type MatchCreate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Optional name to use when creating the match. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +} + +func (x *MatchCreate) Reset() { + *x = MatchCreate{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MatchCreate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MatchCreate) ProtoMessage() {} + +func (x *MatchCreate) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MatchCreate.ProtoReflect.Descriptor instead. +func (*MatchCreate) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{11} +} + +func (x *MatchCreate) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +// Realtime match data received from the server. +type MatchData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The match unique ID. + MatchId string `protobuf:"bytes,1,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` + // A reference to the user presence that sent this data, if any. + Presence *UserPresence `protobuf:"bytes,2,opt,name=presence,proto3" json:"presence,omitempty"` + // Op code value. + OpCode int64 `protobuf:"varint,3,opt,name=op_code,json=opCode,proto3" json:"op_code,omitempty"` + // Data payload, if any. + Data []byte `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` + // True if this data was delivered reliably, false otherwise. + Reliable bool `protobuf:"varint,5,opt,name=reliable,proto3" json:"reliable,omitempty"` +} + +func (x *MatchData) Reset() { + *x = MatchData{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MatchData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MatchData) ProtoMessage() {} + +func (x *MatchData) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MatchData.ProtoReflect.Descriptor instead. +func (*MatchData) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{12} +} + +func (x *MatchData) GetMatchId() string { + if x != nil { + return x.MatchId + } + return "" +} + +func (x *MatchData) GetPresence() *UserPresence { + if x != nil { + return x.Presence + } + return nil +} + +func (x *MatchData) GetOpCode() int64 { + if x != nil { + return x.OpCode + } + return 0 +} + +func (x *MatchData) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +func (x *MatchData) GetReliable() bool { + if x != nil { + return x.Reliable + } + return false +} + +// Send realtime match data to the server. +type MatchDataSend struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The match unique ID. + MatchId string `protobuf:"bytes,1,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` + // Op code value. + OpCode int64 `protobuf:"varint,2,opt,name=op_code,json=opCode,proto3" json:"op_code,omitempty"` + // Data payload, if any. + Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` + // List of presences in the match to deliver to, if filtering is required. Otherwise deliver to everyone in the match. + Presences []*UserPresence `protobuf:"bytes,4,rep,name=presences,proto3" json:"presences,omitempty"` + // True if the data should be sent reliably, false otherwise. + Reliable bool `protobuf:"varint,5,opt,name=reliable,proto3" json:"reliable,omitempty"` +} + +func (x *MatchDataSend) Reset() { + *x = MatchDataSend{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MatchDataSend) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MatchDataSend) ProtoMessage() {} + +func (x *MatchDataSend) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MatchDataSend.ProtoReflect.Descriptor instead. +func (*MatchDataSend) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{13} +} + +func (x *MatchDataSend) GetMatchId() string { + if x != nil { + return x.MatchId + } + return "" +} + +func (x *MatchDataSend) GetOpCode() int64 { + if x != nil { + return x.OpCode + } + return 0 +} + +func (x *MatchDataSend) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +func (x *MatchDataSend) GetPresences() []*UserPresence { + if x != nil { + return x.Presences + } + return nil +} + +func (x *MatchDataSend) GetReliable() bool { + if x != nil { + return x.Reliable + } + return false +} + +// Join an existing realtime match. +type MatchJoin struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Id: + // + // *MatchJoin_MatchId + // *MatchJoin_Token + Id isMatchJoin_Id `protobuf_oneof:"id"` + // An optional set of key-value metadata pairs to be passed to the match handler, if any. + Metadata map[string]string `protobuf:"bytes,3,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *MatchJoin) Reset() { + *x = MatchJoin{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MatchJoin) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MatchJoin) ProtoMessage() {} + +func (x *MatchJoin) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MatchJoin.ProtoReflect.Descriptor instead. +func (*MatchJoin) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{14} +} + +func (m *MatchJoin) GetId() isMatchJoin_Id { + if m != nil { + return m.Id + } + return nil +} + +func (x *MatchJoin) GetMatchId() string { + if x, ok := x.GetId().(*MatchJoin_MatchId); ok { + return x.MatchId + } + return "" +} + +func (x *MatchJoin) GetToken() string { + if x, ok := x.GetId().(*MatchJoin_Token); ok { + return x.Token + } + return "" +} + +func (x *MatchJoin) GetMetadata() map[string]string { + if x != nil { + return x.Metadata + } + return nil +} + +type isMatchJoin_Id interface { + isMatchJoin_Id() +} + +type MatchJoin_MatchId struct { + // The match unique ID. + MatchId string `protobuf:"bytes,1,opt,name=match_id,json=matchId,proto3,oneof"` +} + +type MatchJoin_Token struct { + // A matchmaking result token. + Token string `protobuf:"bytes,2,opt,name=token,proto3,oneof"` +} + +func (*MatchJoin_MatchId) isMatchJoin_Id() {} + +func (*MatchJoin_Token) isMatchJoin_Id() {} + +// Leave a realtime match. +type MatchLeave struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The match unique ID. + MatchId string `protobuf:"bytes,1,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` +} + +func (x *MatchLeave) Reset() { + *x = MatchLeave{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MatchLeave) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MatchLeave) ProtoMessage() {} + +func (x *MatchLeave) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MatchLeave.ProtoReflect.Descriptor instead. +func (*MatchLeave) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{15} +} + +func (x *MatchLeave) GetMatchId() string { + if x != nil { + return x.MatchId + } + return "" +} + +// A set of joins and leaves on a particular realtime match. +type MatchPresenceEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The match unique ID. + MatchId string `protobuf:"bytes,1,opt,name=match_id,json=matchId,proto3" json:"match_id,omitempty"` + // User presences that have just joined the match. + Joins []*UserPresence `protobuf:"bytes,2,rep,name=joins,proto3" json:"joins,omitempty"` + // User presences that have just left the match. + Leaves []*UserPresence `protobuf:"bytes,3,rep,name=leaves,proto3" json:"leaves,omitempty"` +} + +func (x *MatchPresenceEvent) Reset() { + *x = MatchPresenceEvent{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MatchPresenceEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MatchPresenceEvent) ProtoMessage() {} + +func (x *MatchPresenceEvent) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MatchPresenceEvent.ProtoReflect.Descriptor instead. +func (*MatchPresenceEvent) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{16} +} + +func (x *MatchPresenceEvent) GetMatchId() string { + if x != nil { + return x.MatchId + } + return "" +} + +func (x *MatchPresenceEvent) GetJoins() []*UserPresence { + if x != nil { + return x.Joins + } + return nil +} + +func (x *MatchPresenceEvent) GetLeaves() []*UserPresence { + if x != nil { + return x.Leaves + } + return nil +} + +// Start a new matchmaking process. +type MatchmakerAdd struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Minimum total user count to match together. + MinCount int32 `protobuf:"varint,1,opt,name=min_count,json=minCount,proto3" json:"min_count,omitempty"` + // Maximum total user count to match together. + MaxCount int32 `protobuf:"varint,2,opt,name=max_count,json=maxCount,proto3" json:"max_count,omitempty"` + // Filter query used to identify suitable users. + Query string `protobuf:"bytes,3,opt,name=query,proto3" json:"query,omitempty"` + // String properties. + StringProperties map[string]string `protobuf:"bytes,4,rep,name=string_properties,json=stringProperties,proto3" json:"string_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Numeric properties. + NumericProperties map[string]float64 `protobuf:"bytes,5,rep,name=numeric_properties,json=numericProperties,proto3" json:"numeric_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"` + // Optional multiple of the count that must be satisfied. + CountMultiple *wrapperspb.Int32Value `protobuf:"bytes,6,opt,name=count_multiple,json=countMultiple,proto3" json:"count_multiple,omitempty"` +} + +func (x *MatchmakerAdd) Reset() { + *x = MatchmakerAdd{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MatchmakerAdd) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MatchmakerAdd) ProtoMessage() {} + +func (x *MatchmakerAdd) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MatchmakerAdd.ProtoReflect.Descriptor instead. +func (*MatchmakerAdd) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{17} +} + +func (x *MatchmakerAdd) GetMinCount() int32 { + if x != nil { + return x.MinCount + } + return 0 +} + +func (x *MatchmakerAdd) GetMaxCount() int32 { + if x != nil { + return x.MaxCount + } + return 0 +} + +func (x *MatchmakerAdd) GetQuery() string { + if x != nil { + return x.Query + } + return "" +} + +func (x *MatchmakerAdd) GetStringProperties() map[string]string { + if x != nil { + return x.StringProperties + } + return nil +} + +func (x *MatchmakerAdd) GetNumericProperties() map[string]float64 { + if x != nil { + return x.NumericProperties + } + return nil +} + +func (x *MatchmakerAdd) GetCountMultiple() *wrapperspb.Int32Value { + if x != nil { + return x.CountMultiple + } + return nil +} + +// A successful matchmaking result. +type MatchmakerMatched struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The matchmaking ticket that has completed. + Ticket string `protobuf:"bytes,1,opt,name=ticket,proto3" json:"ticket,omitempty"` + // The match token or match ID to join. + // + // Types that are assignable to Id: + // + // *MatchmakerMatched_MatchId + // *MatchmakerMatched_Token + Id isMatchmakerMatched_Id `protobuf_oneof:"id"` + // The users that have been matched together, and information about their matchmaking data. + Users []*MatchmakerMatched_MatchmakerUser `protobuf:"bytes,4,rep,name=users,proto3" json:"users,omitempty"` + // A reference to the current user and their properties. + Self *MatchmakerMatched_MatchmakerUser `protobuf:"bytes,5,opt,name=self,proto3" json:"self,omitempty"` +} + +func (x *MatchmakerMatched) Reset() { + *x = MatchmakerMatched{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MatchmakerMatched) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MatchmakerMatched) ProtoMessage() {} + +func (x *MatchmakerMatched) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MatchmakerMatched.ProtoReflect.Descriptor instead. +func (*MatchmakerMatched) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{18} +} + +func (x *MatchmakerMatched) GetTicket() string { + if x != nil { + return x.Ticket + } + return "" +} + +func (m *MatchmakerMatched) GetId() isMatchmakerMatched_Id { + if m != nil { + return m.Id + } + return nil +} + +func (x *MatchmakerMatched) GetMatchId() string { + if x, ok := x.GetId().(*MatchmakerMatched_MatchId); ok { + return x.MatchId + } + return "" +} + +func (x *MatchmakerMatched) GetToken() string { + if x, ok := x.GetId().(*MatchmakerMatched_Token); ok { + return x.Token + } + return "" +} + +func (x *MatchmakerMatched) GetUsers() []*MatchmakerMatched_MatchmakerUser { + if x != nil { + return x.Users + } + return nil +} + +func (x *MatchmakerMatched) GetSelf() *MatchmakerMatched_MatchmakerUser { + if x != nil { + return x.Self + } + return nil +} + +type isMatchmakerMatched_Id interface { + isMatchmakerMatched_Id() +} + +type MatchmakerMatched_MatchId struct { + // Match ID. + MatchId string `protobuf:"bytes,2,opt,name=match_id,json=matchId,proto3,oneof"` +} + +type MatchmakerMatched_Token struct { + // Match join token. + Token string `protobuf:"bytes,3,opt,name=token,proto3,oneof"` +} + +func (*MatchmakerMatched_MatchId) isMatchmakerMatched_Id() {} + +func (*MatchmakerMatched_Token) isMatchmakerMatched_Id() {} + +// Cancel an existing ongoing matchmaking process. +type MatchmakerRemove struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ticket to cancel. + Ticket string `protobuf:"bytes,1,opt,name=ticket,proto3" json:"ticket,omitempty"` +} + +func (x *MatchmakerRemove) Reset() { + *x = MatchmakerRemove{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MatchmakerRemove) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MatchmakerRemove) ProtoMessage() {} + +func (x *MatchmakerRemove) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MatchmakerRemove.ProtoReflect.Descriptor instead. +func (*MatchmakerRemove) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{19} +} + +func (x *MatchmakerRemove) GetTicket() string { + if x != nil { + return x.Ticket + } + return "" +} + +// A ticket representing a new matchmaking process. +type MatchmakerTicket struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ticket that can be used to cancel matchmaking. + Ticket string `protobuf:"bytes,1,opt,name=ticket,proto3" json:"ticket,omitempty"` +} + +func (x *MatchmakerTicket) Reset() { + *x = MatchmakerTicket{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MatchmakerTicket) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MatchmakerTicket) ProtoMessage() {} + +func (x *MatchmakerTicket) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MatchmakerTicket.ProtoReflect.Descriptor instead. +func (*MatchmakerTicket) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{20} +} + +func (x *MatchmakerTicket) GetTicket() string { + if x != nil { + return x.Ticket + } + return "" +} + +// A collection of zero or more notifications. +type Notifications struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Collection of notifications. + Notifications []*api.Notification `protobuf:"bytes,1,rep,name=notifications,proto3" json:"notifications,omitempty"` +} + +func (x *Notifications) Reset() { + *x = Notifications{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Notifications) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Notifications) ProtoMessage() {} + +func (x *Notifications) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Notifications.ProtoReflect.Descriptor instead. +func (*Notifications) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{21} +} + +func (x *Notifications) GetNotifications() []*api.Notification { + if x != nil { + return x.Notifications + } + return nil +} + +// Incoming information about a party. +type Party struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Unique party identifier. + PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` + // Open flag. + Open bool `protobuf:"varint,2,opt,name=open,proto3" json:"open,omitempty"` + // Hidden flag. + Hidden bool `protobuf:"varint,3,opt,name=hidden,proto3" json:"hidden,omitempty"` + // Maximum number of party members. + MaxSize int32 `protobuf:"varint,4,opt,name=max_size,json=maxSize,proto3" json:"max_size,omitempty"` + // Self. + Self *UserPresence `protobuf:"bytes,5,opt,name=self,proto3" json:"self,omitempty"` + // Leader. + Leader *UserPresence `protobuf:"bytes,6,opt,name=leader,proto3" json:"leader,omitempty"` + // All current party members. + Presences []*UserPresence `protobuf:"bytes,7,rep,name=presences,proto3" json:"presences,omitempty"` + // Label for party listing. + Label string `protobuf:"bytes,8,opt,name=label,proto3" json:"label,omitempty"` +} + +func (x *Party) Reset() { + *x = Party{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Party) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Party) ProtoMessage() {} + +func (x *Party) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Party.ProtoReflect.Descriptor instead. +func (*Party) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{22} +} + +func (x *Party) GetPartyId() string { + if x != nil { + return x.PartyId + } + return "" +} + +func (x *Party) GetOpen() bool { + if x != nil { + return x.Open + } + return false +} + +func (x *Party) GetHidden() bool { + if x != nil { + return x.Hidden + } + return false +} + +func (x *Party) GetMaxSize() int32 { + if x != nil { + return x.MaxSize + } + return 0 +} + +func (x *Party) GetSelf() *UserPresence { + if x != nil { + return x.Self + } + return nil +} + +func (x *Party) GetLeader() *UserPresence { + if x != nil { + return x.Leader + } + return nil +} + +func (x *Party) GetPresences() []*UserPresence { + if x != nil { + return x.Presences + } + return nil +} + +func (x *Party) GetLabel() string { + if x != nil { + return x.Label + } + return "" +} + +// Create a party. +type PartyCreate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Whether or not the party will require join requests to be approved by the party leader. + Open bool `protobuf:"varint,1,opt,name=open,proto3" json:"open,omitempty"` + // Maximum number of party members. + MaxSize int32 `protobuf:"varint,2,opt,name=max_size,json=maxSize,proto3" json:"max_size,omitempty"` + // Label + Label string `protobuf:"bytes,3,opt,name=label,proto3" json:"label,omitempty"` + // Whether the party is visible in party listings. + Hidden bool `protobuf:"varint,4,opt,name=hidden,proto3" json:"hidden,omitempty"` +} + +func (x *PartyCreate) Reset() { + *x = PartyCreate{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PartyCreate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PartyCreate) ProtoMessage() {} + +func (x *PartyCreate) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PartyCreate.ProtoReflect.Descriptor instead. +func (*PartyCreate) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{23} +} + +func (x *PartyCreate) GetOpen() bool { + if x != nil { + return x.Open + } + return false +} + +func (x *PartyCreate) GetMaxSize() int32 { + if x != nil { + return x.MaxSize + } + return 0 +} + +func (x *PartyCreate) GetLabel() string { + if x != nil { + return x.Label + } + return "" +} + +func (x *PartyCreate) GetHidden() bool { + if x != nil { + return x.Hidden + } + return false +} + +// Update a party label. +type PartyUpdate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Party ID. + PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` + // Label to set. + Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label,omitempty"` + // Change the party to open or closed. + Open bool `protobuf:"varint,3,opt,name=open,proto3" json:"open,omitempty"` + // Whether the party is visible in party listings. + Hidden bool `protobuf:"varint,4,opt,name=hidden,proto3" json:"hidden,omitempty"` +} + +func (x *PartyUpdate) Reset() { + *x = PartyUpdate{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PartyUpdate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PartyUpdate) ProtoMessage() {} + +func (x *PartyUpdate) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PartyUpdate.ProtoReflect.Descriptor instead. +func (*PartyUpdate) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{24} +} + +func (x *PartyUpdate) GetPartyId() string { + if x != nil { + return x.PartyId + } + return "" +} + +func (x *PartyUpdate) GetLabel() string { + if x != nil { + return x.Label + } + return "" +} + +func (x *PartyUpdate) GetOpen() bool { + if x != nil { + return x.Open + } + return false +} + +func (x *PartyUpdate) GetHidden() bool { + if x != nil { + return x.Hidden + } + return false +} + +// Join a party, or request to join if the party is not open. +type PartyJoin struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Party ID to join. + PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` +} + +func (x *PartyJoin) Reset() { + *x = PartyJoin{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PartyJoin) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PartyJoin) ProtoMessage() {} + +func (x *PartyJoin) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PartyJoin.ProtoReflect.Descriptor instead. +func (*PartyJoin) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{25} +} + +func (x *PartyJoin) GetPartyId() string { + if x != nil { + return x.PartyId + } + return "" +} + +// Leave a party. +type PartyLeave struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Party ID to leave. + PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` +} + +func (x *PartyLeave) Reset() { + *x = PartyLeave{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PartyLeave) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PartyLeave) ProtoMessage() {} + +func (x *PartyLeave) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PartyLeave.ProtoReflect.Descriptor instead. +func (*PartyLeave) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{26} +} + +func (x *PartyLeave) GetPartyId() string { + if x != nil { + return x.PartyId + } + return "" +} + +// Promote a new party leader. +type PartyPromote struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Party ID to promote a new leader for. + PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` + // The presence of an existing party member to promote as the new leader. + Presence *UserPresence `protobuf:"bytes,2,opt,name=presence,proto3" json:"presence,omitempty"` +} + +func (x *PartyPromote) Reset() { + *x = PartyPromote{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PartyPromote) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PartyPromote) ProtoMessage() {} + +func (x *PartyPromote) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PartyPromote.ProtoReflect.Descriptor instead. +func (*PartyPromote) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{27} +} + +func (x *PartyPromote) GetPartyId() string { + if x != nil { + return x.PartyId + } + return "" +} + +func (x *PartyPromote) GetPresence() *UserPresence { + if x != nil { + return x.Presence + } + return nil +} + +// Announcement of a new party leader. +type PartyLeader struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Party ID to announce the new leader for. + PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` + // The presence of the new party leader. + Presence *UserPresence `protobuf:"bytes,2,opt,name=presence,proto3" json:"presence,omitempty"` +} + +func (x *PartyLeader) Reset() { + *x = PartyLeader{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PartyLeader) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PartyLeader) ProtoMessage() {} + +func (x *PartyLeader) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[28] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PartyLeader.ProtoReflect.Descriptor instead. +func (*PartyLeader) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{28} +} + +func (x *PartyLeader) GetPartyId() string { + if x != nil { + return x.PartyId + } + return "" +} + +func (x *PartyLeader) GetPresence() *UserPresence { + if x != nil { + return x.Presence + } + return nil +} + +// Accept a request to join. +type PartyAccept struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Party ID to accept a join request for. + PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` + // The presence to accept as a party member. + Presence *UserPresence `protobuf:"bytes,2,opt,name=presence,proto3" json:"presence,omitempty"` +} + +func (x *PartyAccept) Reset() { + *x = PartyAccept{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PartyAccept) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PartyAccept) ProtoMessage() {} + +func (x *PartyAccept) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[29] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PartyAccept.ProtoReflect.Descriptor instead. +func (*PartyAccept) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{29} +} + +func (x *PartyAccept) GetPartyId() string { + if x != nil { + return x.PartyId + } + return "" +} + +func (x *PartyAccept) GetPresence() *UserPresence { + if x != nil { + return x.Presence + } + return nil +} + +// Kick a party member, or decline a request to join. +type PartyRemove struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Party ID to remove/reject from. + PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` + // The presence to remove or reject. + Presence *UserPresence `protobuf:"bytes,2,opt,name=presence,proto3" json:"presence,omitempty"` +} + +func (x *PartyRemove) Reset() { + *x = PartyRemove{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PartyRemove) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PartyRemove) ProtoMessage() {} + +func (x *PartyRemove) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[30] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PartyRemove.ProtoReflect.Descriptor instead. +func (*PartyRemove) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{30} +} + +func (x *PartyRemove) GetPartyId() string { + if x != nil { + return x.PartyId + } + return "" +} + +func (x *PartyRemove) GetPresence() *UserPresence { + if x != nil { + return x.Presence + } + return nil +} + +// End a party, kicking all party members and closing it. +type PartyClose struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Party ID to close. + PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` +} + +func (x *PartyClose) Reset() { + *x = PartyClose{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PartyClose) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PartyClose) ProtoMessage() {} + +func (x *PartyClose) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[31] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PartyClose.ProtoReflect.Descriptor instead. +func (*PartyClose) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{31} +} + +func (x *PartyClose) GetPartyId() string { + if x != nil { + return x.PartyId + } + return "" +} + +// Request a list of pending join requests for a party. +type PartyJoinRequestList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Party ID to get a list of join requests for. + PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` +} + +func (x *PartyJoinRequestList) Reset() { + *x = PartyJoinRequestList{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PartyJoinRequestList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PartyJoinRequestList) ProtoMessage() {} + +func (x *PartyJoinRequestList) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[32] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PartyJoinRequestList.ProtoReflect.Descriptor instead. +func (*PartyJoinRequestList) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{32} +} + +func (x *PartyJoinRequestList) GetPartyId() string { + if x != nil { + return x.PartyId + } + return "" +} + +// Incoming notification for one or more new presences attempting to join the party. +type PartyJoinRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Party ID these presences are attempting to join. + PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` + // Presences attempting to join. + Presences []*UserPresence `protobuf:"bytes,2,rep,name=presences,proto3" json:"presences,omitempty"` +} + +func (x *PartyJoinRequest) Reset() { + *x = PartyJoinRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PartyJoinRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PartyJoinRequest) ProtoMessage() {} + +func (x *PartyJoinRequest) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[33] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PartyJoinRequest.ProtoReflect.Descriptor instead. +func (*PartyJoinRequest) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{33} +} + +func (x *PartyJoinRequest) GetPartyId() string { + if x != nil { + return x.PartyId + } + return "" +} + +func (x *PartyJoinRequest) GetPresences() []*UserPresence { + if x != nil { + return x.Presences + } + return nil +} + +// Begin matchmaking as a party. +type PartyMatchmakerAdd struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Party ID. + PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` + // Minimum total user count to match together. + MinCount int32 `protobuf:"varint,2,opt,name=min_count,json=minCount,proto3" json:"min_count,omitempty"` + // Maximum total user count to match together. + MaxCount int32 `protobuf:"varint,3,opt,name=max_count,json=maxCount,proto3" json:"max_count,omitempty"` + // Filter query used to identify suitable users. + Query string `protobuf:"bytes,4,opt,name=query,proto3" json:"query,omitempty"` + // String properties. + StringProperties map[string]string `protobuf:"bytes,5,rep,name=string_properties,json=stringProperties,proto3" json:"string_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Numeric properties. + NumericProperties map[string]float64 `protobuf:"bytes,6,rep,name=numeric_properties,json=numericProperties,proto3" json:"numeric_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"` + // Optional multiple of the count that must be satisfied. + CountMultiple *wrapperspb.Int32Value `protobuf:"bytes,7,opt,name=count_multiple,json=countMultiple,proto3" json:"count_multiple,omitempty"` +} + +func (x *PartyMatchmakerAdd) Reset() { + *x = PartyMatchmakerAdd{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PartyMatchmakerAdd) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PartyMatchmakerAdd) ProtoMessage() {} + +func (x *PartyMatchmakerAdd) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[34] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PartyMatchmakerAdd.ProtoReflect.Descriptor instead. +func (*PartyMatchmakerAdd) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{34} +} + +func (x *PartyMatchmakerAdd) GetPartyId() string { + if x != nil { + return x.PartyId + } + return "" +} + +func (x *PartyMatchmakerAdd) GetMinCount() int32 { + if x != nil { + return x.MinCount + } + return 0 +} + +func (x *PartyMatchmakerAdd) GetMaxCount() int32 { + if x != nil { + return x.MaxCount + } + return 0 +} + +func (x *PartyMatchmakerAdd) GetQuery() string { + if x != nil { + return x.Query + } + return "" +} + +func (x *PartyMatchmakerAdd) GetStringProperties() map[string]string { + if x != nil { + return x.StringProperties + } + return nil +} + +func (x *PartyMatchmakerAdd) GetNumericProperties() map[string]float64 { + if x != nil { + return x.NumericProperties + } + return nil +} + +func (x *PartyMatchmakerAdd) GetCountMultiple() *wrapperspb.Int32Value { + if x != nil { + return x.CountMultiple + } + return nil +} + +// Cancel a party matchmaking process using a ticket. +type PartyMatchmakerRemove struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Party ID. + PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` + // The ticket to cancel. + Ticket string `protobuf:"bytes,2,opt,name=ticket,proto3" json:"ticket,omitempty"` +} + +func (x *PartyMatchmakerRemove) Reset() { + *x = PartyMatchmakerRemove{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PartyMatchmakerRemove) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PartyMatchmakerRemove) ProtoMessage() {} + +func (x *PartyMatchmakerRemove) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[35] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PartyMatchmakerRemove.ProtoReflect.Descriptor instead. +func (*PartyMatchmakerRemove) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{35} +} + +func (x *PartyMatchmakerRemove) GetPartyId() string { + if x != nil { + return x.PartyId + } + return "" +} + +func (x *PartyMatchmakerRemove) GetTicket() string { + if x != nil { + return x.Ticket + } + return "" +} + +// A response from starting a new party matchmaking process. +type PartyMatchmakerTicket struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Party ID. + PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` + // The ticket that can be used to cancel matchmaking. + Ticket string `protobuf:"bytes,2,opt,name=ticket,proto3" json:"ticket,omitempty"` +} + +func (x *PartyMatchmakerTicket) Reset() { + *x = PartyMatchmakerTicket{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PartyMatchmakerTicket) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PartyMatchmakerTicket) ProtoMessage() {} + +func (x *PartyMatchmakerTicket) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[36] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PartyMatchmakerTicket.ProtoReflect.Descriptor instead. +func (*PartyMatchmakerTicket) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{36} +} + +func (x *PartyMatchmakerTicket) GetPartyId() string { + if x != nil { + return x.PartyId + } + return "" +} + +func (x *PartyMatchmakerTicket) GetTicket() string { + if x != nil { + return x.Ticket + } + return "" +} + +// Incoming party data delivered from the server. +type PartyData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The party ID. + PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` + // A reference to the user presence that sent this data, if any. + Presence *UserPresence `protobuf:"bytes,2,opt,name=presence,proto3" json:"presence,omitempty"` + // Op code value. + OpCode int64 `protobuf:"varint,3,opt,name=op_code,json=opCode,proto3" json:"op_code,omitempty"` + // Data payload, if any. + Data []byte `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` +} + +func (x *PartyData) Reset() { + *x = PartyData{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PartyData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PartyData) ProtoMessage() {} + +func (x *PartyData) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[37] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PartyData.ProtoReflect.Descriptor instead. +func (*PartyData) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{37} +} + +func (x *PartyData) GetPartyId() string { + if x != nil { + return x.PartyId + } + return "" +} + +func (x *PartyData) GetPresence() *UserPresence { + if x != nil { + return x.Presence + } + return nil +} + +func (x *PartyData) GetOpCode() int64 { + if x != nil { + return x.OpCode + } + return 0 +} + +func (x *PartyData) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +// Send data to a party. +type PartyDataSend struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Party ID to send to. + PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` + // Op code value. + OpCode int64 `protobuf:"varint,2,opt,name=op_code,json=opCode,proto3" json:"op_code,omitempty"` + // Data payload, if any. + Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` +} + +func (x *PartyDataSend) Reset() { + *x = PartyDataSend{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PartyDataSend) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PartyDataSend) ProtoMessage() {} + +func (x *PartyDataSend) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[38] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PartyDataSend.ProtoReflect.Descriptor instead. +func (*PartyDataSend) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{38} +} + +func (x *PartyDataSend) GetPartyId() string { + if x != nil { + return x.PartyId + } + return "" +} + +func (x *PartyDataSend) GetOpCode() int64 { + if x != nil { + return x.OpCode + } + return 0 +} + +func (x *PartyDataSend) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +// Presence update for a particular party. +type PartyPresenceEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The party ID. + PartyId string `protobuf:"bytes,1,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` + // User presences that have just joined the party. + Joins []*UserPresence `protobuf:"bytes,2,rep,name=joins,proto3" json:"joins,omitempty"` + // User presences that have just left the party. + Leaves []*UserPresence `protobuf:"bytes,3,rep,name=leaves,proto3" json:"leaves,omitempty"` +} + +func (x *PartyPresenceEvent) Reset() { + *x = PartyPresenceEvent{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PartyPresenceEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PartyPresenceEvent) ProtoMessage() {} + +func (x *PartyPresenceEvent) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[39] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PartyPresenceEvent.ProtoReflect.Descriptor instead. +func (*PartyPresenceEvent) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{39} +} + +func (x *PartyPresenceEvent) GetPartyId() string { + if x != nil { + return x.PartyId + } + return "" +} + +func (x *PartyPresenceEvent) GetJoins() []*UserPresence { + if x != nil { + return x.Joins + } + return nil +} + +func (x *PartyPresenceEvent) GetLeaves() []*UserPresence { + if x != nil { + return x.Leaves + } + return nil +} + +// Application-level heartbeat and connection check. +type Ping struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *Ping) Reset() { + *x = Ping{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Ping) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Ping) ProtoMessage() {} + +func (x *Ping) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[40] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Ping.ProtoReflect.Descriptor instead. +func (*Ping) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{40} +} + +// Application-level heartbeat and connection check response. +type Pong struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *Pong) Reset() { + *x = Pong{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Pong) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Pong) ProtoMessage() {} + +func (x *Pong) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[41] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Pong.ProtoReflect.Descriptor instead. +func (*Pong) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{41} +} + +// A snapshot of statuses for some set of users. +type Status struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // User statuses. + Presences []*UserPresence `protobuf:"bytes,1,rep,name=presences,proto3" json:"presences,omitempty"` +} + +func (x *Status) Reset() { + *x = Status{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Status) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Status) ProtoMessage() {} + +func (x *Status) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[42] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Status.ProtoReflect.Descriptor instead. +func (*Status) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{42} +} + +func (x *Status) GetPresences() []*UserPresence { + if x != nil { + return x.Presences + } + return nil +} + +// Start receiving status updates for some set of users. +type StatusFollow struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // User IDs to follow. + UserIds []string `protobuf:"bytes,1,rep,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` + // Usernames to follow. + Usernames []string `protobuf:"bytes,2,rep,name=usernames,proto3" json:"usernames,omitempty"` +} + +func (x *StatusFollow) Reset() { + *x = StatusFollow{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StatusFollow) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatusFollow) ProtoMessage() {} + +func (x *StatusFollow) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[43] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatusFollow.ProtoReflect.Descriptor instead. +func (*StatusFollow) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{43} +} + +func (x *StatusFollow) GetUserIds() []string { + if x != nil { + return x.UserIds + } + return nil +} + +func (x *StatusFollow) GetUsernames() []string { + if x != nil { + return x.Usernames + } + return nil +} + +// A batch of status updates for a given user. +type StatusPresenceEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // New statuses for the user. + Joins []*UserPresence `protobuf:"bytes,2,rep,name=joins,proto3" json:"joins,omitempty"` + // Previous statuses for the user. + Leaves []*UserPresence `protobuf:"bytes,3,rep,name=leaves,proto3" json:"leaves,omitempty"` +} + +func (x *StatusPresenceEvent) Reset() { + *x = StatusPresenceEvent{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StatusPresenceEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatusPresenceEvent) ProtoMessage() {} + +func (x *StatusPresenceEvent) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[44] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatusPresenceEvent.ProtoReflect.Descriptor instead. +func (*StatusPresenceEvent) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{44} +} + +func (x *StatusPresenceEvent) GetJoins() []*UserPresence { + if x != nil { + return x.Joins + } + return nil +} + +func (x *StatusPresenceEvent) GetLeaves() []*UserPresence { + if x != nil { + return x.Leaves + } + return nil +} + +// Stop receiving status updates for some set of users. +type StatusUnfollow struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Users to unfollow. + UserIds []string `protobuf:"bytes,1,rep,name=user_ids,json=userIds,proto3" json:"user_ids,omitempty"` +} + +func (x *StatusUnfollow) Reset() { + *x = StatusUnfollow{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StatusUnfollow) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatusUnfollow) ProtoMessage() {} + +func (x *StatusUnfollow) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[45] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatusUnfollow.ProtoReflect.Descriptor instead. +func (*StatusUnfollow) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{45} +} + +func (x *StatusUnfollow) GetUserIds() []string { + if x != nil { + return x.UserIds + } + return nil +} + +// Set the user's own status. +type StatusUpdate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Status string to set, if not present the user will appear offline. + Status *wrapperspb.StringValue `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` +} + +func (x *StatusUpdate) Reset() { + *x = StatusUpdate{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StatusUpdate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatusUpdate) ProtoMessage() {} + +func (x *StatusUpdate) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[46] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatusUpdate.ProtoReflect.Descriptor instead. +func (*StatusUpdate) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{46} +} + +func (x *StatusUpdate) GetStatus() *wrapperspb.StringValue { + if x != nil { + return x.Status + } + return nil +} + +// Represents identifying information for a stream. +type Stream struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Mode identifies the type of stream. + Mode int32 `protobuf:"varint,1,opt,name=mode,proto3" json:"mode,omitempty"` + // Subject is the primary identifier, if any. + Subject string `protobuf:"bytes,2,opt,name=subject,proto3" json:"subject,omitempty"` + // Subcontext is a secondary identifier, if any. + Subcontext string `protobuf:"bytes,3,opt,name=subcontext,proto3" json:"subcontext,omitempty"` + // The label is an arbitrary identifying string, if the stream has one. + Label string `protobuf:"bytes,4,opt,name=label,proto3" json:"label,omitempty"` +} + +func (x *Stream) Reset() { + *x = Stream{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Stream) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Stream) ProtoMessage() {} + +func (x *Stream) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[47] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Stream.ProtoReflect.Descriptor instead. +func (*Stream) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{47} +} + +func (x *Stream) GetMode() int32 { + if x != nil { + return x.Mode + } + return 0 +} + +func (x *Stream) GetSubject() string { + if x != nil { + return x.Subject + } + return "" +} + +func (x *Stream) GetSubcontext() string { + if x != nil { + return x.Subcontext + } + return "" +} + +func (x *Stream) GetLabel() string { + if x != nil { + return x.Label + } + return "" +} + +// A data message delivered over a stream. +type StreamData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The stream this data message relates to. + Stream *Stream `protobuf:"bytes,1,opt,name=stream,proto3" json:"stream,omitempty"` + // The sender, if any. + Sender *UserPresence `protobuf:"bytes,2,opt,name=sender,proto3" json:"sender,omitempty"` + // Arbitrary contents of the data message. + Data string `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` + // True if this data was delivered reliably, false otherwise. + Reliable bool `protobuf:"varint,4,opt,name=reliable,proto3" json:"reliable,omitempty"` +} + +func (x *StreamData) Reset() { + *x = StreamData{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreamData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreamData) ProtoMessage() {} + +func (x *StreamData) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[48] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreamData.ProtoReflect.Descriptor instead. +func (*StreamData) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{48} +} + +func (x *StreamData) GetStream() *Stream { + if x != nil { + return x.Stream + } + return nil +} + +func (x *StreamData) GetSender() *UserPresence { + if x != nil { + return x.Sender + } + return nil +} + +func (x *StreamData) GetData() string { + if x != nil { + return x.Data + } + return "" +} + +func (x *StreamData) GetReliable() bool { + if x != nil { + return x.Reliable + } + return false +} + +// A set of joins and leaves on a particular stream. +type StreamPresenceEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The stream this event relates to. + Stream *Stream `protobuf:"bytes,1,opt,name=stream,proto3" json:"stream,omitempty"` + // Presences joining the stream as part of this event, if any. + Joins []*UserPresence `protobuf:"bytes,2,rep,name=joins,proto3" json:"joins,omitempty"` + // Presences leaving the stream as part of this event, if any. + Leaves []*UserPresence `protobuf:"bytes,3,rep,name=leaves,proto3" json:"leaves,omitempty"` +} + +func (x *StreamPresenceEvent) Reset() { + *x = StreamPresenceEvent{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[49] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreamPresenceEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreamPresenceEvent) ProtoMessage() {} + +func (x *StreamPresenceEvent) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[49] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreamPresenceEvent.ProtoReflect.Descriptor instead. +func (*StreamPresenceEvent) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{49} +} + +func (x *StreamPresenceEvent) GetStream() *Stream { + if x != nil { + return x.Stream + } + return nil +} + +func (x *StreamPresenceEvent) GetJoins() []*UserPresence { + if x != nil { + return x.Joins + } + return nil +} + +func (x *StreamPresenceEvent) GetLeaves() []*UserPresence { + if x != nil { + return x.Leaves + } + return nil +} + +// A user session associated to a stream, usually through a list operation or a join/leave event. +type UserPresence struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The user this presence belongs to. + UserId string `protobuf:"bytes,1,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` + // A unique session ID identifying the particular connection, because the user may have many. + SessionId string `protobuf:"bytes,2,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + // The username for display purposes. + Username string `protobuf:"bytes,3,opt,name=username,proto3" json:"username,omitempty"` + // Whether this presence generates persistent data/messages, if applicable for the stream type. + Persistence bool `protobuf:"varint,4,opt,name=persistence,proto3" json:"persistence,omitempty"` + // A user-set status message for this stream, if applicable. + Status *wrapperspb.StringValue `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` +} + +func (x *UserPresence) Reset() { + *x = UserPresence{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[50] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UserPresence) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserPresence) ProtoMessage() {} + +func (x *UserPresence) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[50] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UserPresence.ProtoReflect.Descriptor instead. +func (*UserPresence) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{50} +} + +func (x *UserPresence) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *UserPresence) GetSessionId() string { + if x != nil { + return x.SessionId + } + return "" +} + +func (x *UserPresence) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +func (x *UserPresence) GetPersistence() bool { + if x != nil { + return x.Persistence + } + return false +} + +func (x *UserPresence) GetStatus() *wrapperspb.StringValue { + if x != nil { + return x.Status + } + return nil +} + +type MatchmakerMatched_MatchmakerUser struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // User info. + Presence *UserPresence `protobuf:"bytes,1,opt,name=presence,proto3" json:"presence,omitempty"` + // Party identifier, if this user was matched as a party member. + PartyId string `protobuf:"bytes,2,opt,name=party_id,json=partyId,proto3" json:"party_id,omitempty"` + // String properties. + StringProperties map[string]string `protobuf:"bytes,5,rep,name=string_properties,json=stringProperties,proto3" json:"string_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // Numeric properties. + NumericProperties map[string]float64 `protobuf:"bytes,6,rep,name=numeric_properties,json=numericProperties,proto3" json:"numeric_properties,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"fixed64,2,opt,name=value,proto3"` +} + +func (x *MatchmakerMatched_MatchmakerUser) Reset() { + *x = MatchmakerMatched_MatchmakerUser{} + if protoimpl.UnsafeEnabled { + mi := &file_realtime_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MatchmakerMatched_MatchmakerUser) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MatchmakerMatched_MatchmakerUser) ProtoMessage() {} + +func (x *MatchmakerMatched_MatchmakerUser) ProtoReflect() protoreflect.Message { + mi := &file_realtime_proto_msgTypes[55] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MatchmakerMatched_MatchmakerUser.ProtoReflect.Descriptor instead. +func (*MatchmakerMatched_MatchmakerUser) Descriptor() ([]byte, []int) { + return file_realtime_proto_rawDescGZIP(), []int{18, 0} +} + +func (x *MatchmakerMatched_MatchmakerUser) GetPresence() *UserPresence { + if x != nil { + return x.Presence + } + return nil +} + +func (x *MatchmakerMatched_MatchmakerUser) GetPartyId() string { + if x != nil { + return x.PartyId + } + return "" +} + +func (x *MatchmakerMatched_MatchmakerUser) GetStringProperties() map[string]string { + if x != nil { + return x.StringProperties + } + return nil +} + +func (x *MatchmakerMatched_MatchmakerUser) GetNumericProperties() map[string]float64 { + if x != nil { + return x.NumericProperties + } + return nil +} + +var File_realtime_proto protoreflect.FileDescriptor + +var file_realtime_proto_rawDesc = []byte{ + 0x0a, 0x0e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x0f, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, + 0x65, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x0d, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0xb7, 0x1c, 0x0a, 0x08, 0x45, 0x6e, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, + 0x12, 0x34, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x48, 0x00, 0x52, 0x07, 0x63, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x41, 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, + 0x6c, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6e, + 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x43, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4a, 0x6f, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x44, 0x0a, 0x0d, 0x63, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, + 0x6d, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x48, + 0x00, 0x52, 0x0c, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, + 0x45, 0x0a, 0x0f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, + 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x54, 0x0a, 0x13, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, + 0x6c, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x61, 0x63, 0x6b, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, + 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x41, 0x63, 0x6b, 0x48, 0x00, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x6e, + 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x63, 0x6b, 0x12, 0x57, 0x0a, 0x14, + 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, + 0x73, 0x65, 0x6e, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x61, 0x6b, + 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x43, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x48, + 0x00, 0x52, 0x12, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x5d, 0x0a, 0x16, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, + 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x14, + 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x12, 0x5d, 0x0a, 0x16, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, + 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x48, 0x00, 0x52, 0x14, 0x63, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x12, 0x5d, 0x0a, 0x16, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x70, + 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, + 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x50, 0x72, 0x65, + 0x73, 0x65, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x63, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x12, 0x2e, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x48, 0x00, 0x52, 0x05, 0x6d, 0x61, 0x74, + 0x63, 0x68, 0x12, 0x41, 0x0a, 0x0c, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, + 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x3b, 0x0a, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6e, 0x61, 0x6b, 0x61, + 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x09, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x48, 0x0a, 0x0f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x61, 0x74, 0x61, + 0x5f, 0x73, 0x65, 0x6e, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6e, 0x61, + 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x0d, 0x6d, + 0x61, 0x74, 0x63, 0x68, 0x44, 0x61, 0x74, 0x61, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x3b, 0x0a, 0x0a, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, + 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4a, 0x6f, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x09, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x3e, 0x0a, 0x0b, 0x6d, 0x61, 0x74, + 0x63, 0x68, 0x5f, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, + 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, + 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x6d, + 0x61, 0x74, 0x63, 0x68, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x57, 0x0a, 0x14, 0x6d, 0x61, 0x74, + 0x63, 0x68, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, + 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, + 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x12, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x12, 0x47, 0x0a, 0x0e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, + 0x5f, 0x61, 0x64, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6e, 0x61, 0x6b, + 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x41, 0x64, 0x64, 0x48, 0x00, 0x52, 0x0d, 0x6d, 0x61, + 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x41, 0x64, 0x64, 0x12, 0x53, 0x0a, 0x12, 0x6d, + 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, + 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, + 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, + 0x61, 0x6b, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x48, 0x00, 0x52, 0x11, 0x6d, + 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, + 0x12, 0x50, 0x0a, 0x11, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x5f, 0x72, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x61, + 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x48, 0x00, + 0x52, 0x10, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x12, 0x50, 0x0a, 0x11, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, + 0x5f, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, + 0x48, 0x00, 0x52, 0x10, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x54, 0x69, + 0x63, 0x6b, 0x65, 0x74, 0x12, 0x46, 0x0a, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6e, 0x61, + 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0d, 0x6e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x23, 0x0a, 0x03, + 0x72, 0x70, 0x63, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6e, 0x61, 0x6b, 0x61, + 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x70, 0x63, 0x48, 0x00, 0x52, 0x03, 0x72, 0x70, + 0x63, 0x12, 0x31, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x44, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x66, + 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, + 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x5a, 0x0a, 0x15, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6e, 0x61, 0x6b, 0x61, + 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x13, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, + 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x4a, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x5f, 0x75, 0x6e, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, + 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x55, 0x6e, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, + 0x48, 0x00, 0x52, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x55, 0x6e, 0x66, 0x6f, 0x6c, 0x6c, + 0x6f, 0x77, 0x12, 0x44, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x75, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, + 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x3e, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x0a, 0x73, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x12, 0x5a, 0x0a, 0x15, 0x73, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, + 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x13, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x20, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, + 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, + 0x67, 0x12, 0x2b, 0x0a, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, + 0x65, 0x2e, 0x50, 0x6f, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x12, 0x2e, + 0x0a, 0x05, 0x70, 0x61, 0x72, 0x74, 0x79, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x50, 0x61, 0x72, 0x74, 0x79, 0x48, 0x00, 0x52, 0x05, 0x70, 0x61, 0x72, 0x74, 0x79, 0x12, 0x41, + 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x23, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, + 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x79, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x12, 0x3b, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x18, + 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, + 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4a, 0x6f, 0x69, + 0x6e, 0x48, 0x00, 0x52, 0x09, 0x70, 0x61, 0x72, 0x74, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x3e, + 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x18, 0x25, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, + 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4c, 0x65, 0x61, 0x76, 0x65, + 0x48, 0x00, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x79, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x12, 0x44, + 0x0a, 0x0d, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x18, + 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, + 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x72, 0x6f, + 0x6d, 0x6f, 0x74, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x79, 0x50, 0x72, 0x6f, + 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x6c, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6e, 0x61, 0x6b, + 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, + 0x74, 0x79, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x74, + 0x79, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x79, + 0x5f, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x50, 0x61, 0x72, 0x74, 0x79, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x70, + 0x61, 0x72, 0x74, 0x79, 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x12, 0x41, 0x0a, 0x0c, 0x70, 0x61, + 0x72, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, + 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x48, 0x00, + 0x52, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x79, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x3e, 0x0a, + 0x0b, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x18, 0x2a, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, + 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x48, + 0x00, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x74, 0x79, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x5e, 0x0a, + 0x17, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, + 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, + 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x14, 0x70, 0x61, 0x72, 0x74, 0x79, 0x4a, 0x6f, + 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x51, 0x0a, + 0x12, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6e, 0x61, 0x6b, 0x61, + 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, + 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x10, + 0x70, 0x61, 0x72, 0x74, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x57, 0x0a, 0x14, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6d, + 0x61, 0x6b, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, + 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, + 0x41, 0x64, 0x64, 0x48, 0x00, 0x52, 0x12, 0x70, 0x61, 0x72, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x41, 0x64, 0x64, 0x12, 0x60, 0x0a, 0x17, 0x70, 0x61, 0x72, + 0x74, 0x79, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x5f, 0x72, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6e, 0x61, 0x6b, + 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, + 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x48, 0x00, 0x52, 0x15, 0x70, 0x61, 0x72, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x60, 0x0a, 0x17, 0x70, + 0x61, 0x72, 0x74, 0x79, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x5f, + 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6e, + 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, + 0x61, 0x72, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x54, 0x69, + 0x63, 0x6b, 0x65, 0x74, 0x48, 0x00, 0x52, 0x15, 0x70, 0x61, 0x72, 0x74, 0x79, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x3b, 0x0a, + 0x0a, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x30, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, + 0x09, 0x70, 0x61, 0x72, 0x74, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x48, 0x0a, 0x0f, 0x70, 0x61, + 0x72, 0x74, 0x79, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x65, 0x6e, 0x64, 0x18, 0x31, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, + 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x44, 0x61, 0x74, 0x61, 0x53, + 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x74, 0x79, 0x44, 0x61, 0x74, 0x61, + 0x53, 0x65, 0x6e, 0x64, 0x12, 0x57, 0x0a, 0x14, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x70, 0x72, + 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x32, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, + 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, + 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x12, 0x70, 0x61, 0x72, 0x74, 0x79, + 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, + 0x0c, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x33, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, + 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x48, 0x00, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x42, 0x09, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x81, 0x02, 0x0a, 0x07, + 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x73, 0x65, + 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, + 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, + 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x09, 0x70, 0x72, 0x65, 0x73, 0x65, + 0x6e, 0x63, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x04, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, + 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, + 0x65, 0x52, 0x04, 0x73, 0x65, 0x6c, 0x66, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, 0x6f, 0x6d, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x6f, 0x6f, 0x6d, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, + 0x1e, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x6f, 0x6e, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x4f, 0x6e, 0x65, 0x12, + 0x1e, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x74, 0x77, 0x6f, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x54, 0x77, 0x6f, 0x22, + 0xf2, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4a, 0x6f, 0x69, 0x6e, 0x12, + 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x70, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x70, 0x65, + 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x32, 0x0a, 0x06, 0x68, 0x69, 0x64, + 0x64, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x45, 0x0a, + 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x52, + 0x4f, 0x4f, 0x4d, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x5f, + 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x47, 0x52, 0x4f, + 0x55, 0x50, 0x10, 0x03, 0x22, 0x2d, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4c, + 0x65, 0x61, 0x76, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, + 0x6c, 0x49, 0x64, 0x22, 0xcc, 0x03, 0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x63, 0x6b, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3a, + 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, + 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x6f, + 0x6f, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, + 0x6f, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x6f, 0x6e, + 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x4f, + 0x6e, 0x65, 0x12, 0x1e, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x74, 0x77, + 0x6f, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x54, + 0x77, 0x6f, 0x22, 0x4d, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x22, 0x6e, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x22, 0x54, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x22, 0x99, 0x02, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, + 0x33, 0x0a, 0x05, 0x6a, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, + 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, + 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x6a, + 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x35, 0x0a, 0x06, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, + 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, + 0x6e, 0x63, 0x65, 0x52, 0x06, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x72, + 0x6f, 0x6f, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x72, 0x6f, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x6f, + 0x6e, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, + 0x4f, 0x6e, 0x65, 0x12, 0x1e, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x74, + 0x77, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, + 0x54, 0x77, 0x6f, 0x22, 0xfc, 0x02, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x12, 0x0a, + 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3d, 0x0a, 0x07, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6e, + 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x3a, 0x0a, 0x0c, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x78, 0x74, 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, 0xc9, 0x01, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, + 0x15, 0x0a, 0x11, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x50, + 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x55, 0x4e, 0x52, 0x45, 0x43, 0x4f, + 0x47, 0x4e, 0x49, 0x5a, 0x45, 0x44, 0x5f, 0x50, 0x41, 0x59, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x01, + 0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4e, 0x47, 0x5f, 0x50, 0x41, 0x59, 0x4c, + 0x4f, 0x41, 0x44, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x42, 0x41, 0x44, 0x5f, 0x49, 0x4e, 0x50, + 0x55, 0x54, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x5f, 0x4e, 0x4f, + 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x4d, 0x41, 0x54, + 0x43, 0x48, 0x5f, 0x4a, 0x4f, 0x49, 0x4e, 0x5f, 0x52, 0x45, 0x4a, 0x45, 0x43, 0x54, 0x45, 0x44, + 0x10, 0x05, 0x12, 0x1e, 0x0a, 0x1a, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x46, 0x55, + 0x4e, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, + 0x10, 0x06, 0x12, 0x1e, 0x0a, 0x1a, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x46, 0x55, + 0x4e, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x50, 0x54, 0x49, 0x4f, 0x4e, + 0x10, 0x07, 0x22, 0x80, 0x02, 0x0a, 0x05, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x19, 0x0a, 0x08, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, 0x12, 0x32, 0x0a, + 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x3b, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, + 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, + 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, + 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x09, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, + 0x65, 0x73, 0x12, 0x31, 0x0a, 0x04, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, + 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, + 0x04, 0x73, 0x65, 0x6c, 0x66, 0x22, 0x21, 0x0a, 0x0b, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xaa, 0x01, 0x0a, 0x09, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x44, 0x61, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x49, + 0x64, 0x12, 0x39, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, + 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, + 0x63, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x17, 0x0a, 0x07, + 0x6f, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, + 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x6c, + 0x69, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x6c, + 0x69, 0x61, 0x62, 0x6c, 0x65, 0x22, 0xb0, 0x01, 0x0a, 0x0d, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x44, + 0x61, 0x74, 0x61, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, + 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6f, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x3b, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, + 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, + 0x65, 0x52, 0x09, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, + 0x72, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, + 0x72, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x22, 0xc9, 0x01, 0x0a, 0x09, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x1b, 0x0a, 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, + 0x68, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x44, 0x0a, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, + 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4a, 0x6f, 0x69, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 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, 0x04, + 0x0a, 0x02, 0x69, 0x64, 0x22, 0x27, 0x0a, 0x0a, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x65, 0x61, + 0x76, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x22, 0x9b, 0x01, + 0x0a, 0x12, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, 0x12, + 0x33, 0x0a, 0x05, 0x6a, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, + 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, + 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x6a, + 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x35, 0x0a, 0x06, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, + 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, + 0x6e, 0x63, 0x65, 0x52, 0x06, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x22, 0xf7, 0x03, 0x0a, 0x0d, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x41, 0x64, 0x64, 0x12, 0x1b, 0x0a, + 0x09, 0x6d, 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x08, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, + 0x78, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6d, + 0x61, 0x78, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x61, 0x0a, + 0x11, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, + 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x41, 0x64, 0x64, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, + 0x12, 0x64, 0x0a, 0x12, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x70, 0x72, 0x6f, 0x70, + 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x6e, + 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x41, 0x64, 0x64, 0x2e, 0x4e, 0x75, 0x6d, + 0x65, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x11, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, + 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x0e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, + 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x1a, 0x43, 0x0a, 0x15, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 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, 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, 0x1a, + 0x44, 0x0a, 0x16, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x69, 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, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd9, 0x05, 0x0a, 0x11, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, + 0x61, 0x6b, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, + 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x69, 0x63, + 0x6b, 0x65, 0x74, 0x12, 0x1b, 0x0a, 0x08, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x49, 0x64, + 0x12, 0x16, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x00, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x47, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, + 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, + 0x61, 0x6b, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x2e, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72, + 0x73, 0x12, 0x45, 0x0a, 0x04, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x31, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, + 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x65, 0x64, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x55, 0x73, + 0x65, 0x72, 0x52, 0x04, 0x73, 0x65, 0x6c, 0x66, 0x1a, 0xe0, 0x03, 0x0a, 0x0e, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x08, 0x70, + 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, + 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, + 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, 0x72, + 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, + 0x64, 0x12, 0x74, 0x0a, 0x11, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x72, 0x6f, 0x70, + 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x47, 0x2e, 0x6e, + 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, + 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x2e, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, + 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x77, 0x0a, 0x12, 0x6e, 0x75, 0x6d, 0x65, 0x72, + 0x69, 0x63, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, + 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x64, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, + 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x50, 0x72, + 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6e, + 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, + 0x1a, 0x43, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x69, 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, 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, 0x1a, 0x44, 0x0a, 0x16, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, + 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x04, 0x0a, 0x02, 0x69, + 0x64, 0x22, 0x2a, 0x0a, 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x52, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x2a, 0x0a, + 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x54, 0x69, 0x63, 0x6b, 0x65, + 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x4f, 0x0a, 0x0d, 0x4e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3e, 0x0a, 0x0d, 0x6e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x6e, 0x6f, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xa6, 0x02, 0x0a, 0x05, 0x50, + 0x61, 0x72, 0x74, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6f, + 0x70, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x06, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x6d, + 0x61, 0x78, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, + 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, + 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, + 0x6e, 0x63, 0x65, 0x52, 0x04, 0x73, 0x65, 0x6c, 0x66, 0x12, 0x35, 0x0a, 0x06, 0x6c, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, + 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, + 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x6c, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x12, 0x3b, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x07, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, + 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, + 0x63, 0x65, 0x52, 0x09, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x14, 0x0a, + 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x22, 0x6a, 0x0a, 0x0b, 0x50, 0x61, 0x72, 0x74, 0x79, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x53, 0x69, 0x7a, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x69, 0x64, 0x64, 0x65, + 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, + 0x6a, 0x0a, 0x0b, 0x50, 0x61, 0x72, 0x74, 0x79, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x19, + 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x12, + 0x12, 0x0a, 0x04, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6f, + 0x70, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x06, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x26, 0x0a, 0x09, 0x50, + 0x61, 0x72, 0x74, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, + 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, + 0x79, 0x49, 0x64, 0x22, 0x27, 0x0a, 0x0a, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4c, 0x65, 0x61, 0x76, + 0x65, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x22, 0x64, 0x0a, 0x0c, + 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x19, 0x0a, 0x08, + 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, + 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, + 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, + 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, + 0x63, 0x65, 0x22, 0x63, 0x0a, 0x0b, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4c, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x08, + 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, + 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, + 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, + 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x63, 0x0a, 0x0b, 0x50, 0x61, 0x72, 0x74, 0x79, + 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, + 0x64, 0x12, 0x39, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, + 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, + 0x63, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x22, 0x63, 0x0a, 0x0b, + 0x50, 0x61, 0x72, 0x74, 0x79, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x70, + 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, + 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, + 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, + 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, + 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, + 0x65, 0x22, 0x27, 0x0a, 0x0a, 0x50, 0x61, 0x72, 0x74, 0x79, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, + 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x22, 0x31, 0x0a, 0x14, 0x50, 0x61, + 0x72, 0x74, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x22, 0x6a, 0x0a, + 0x10, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x09, + 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, + 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x09, + 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0xa1, 0x04, 0x0a, 0x12, 0x50, 0x61, + 0x72, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x41, 0x64, 0x64, + 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, + 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, + 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x5f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6d, 0x61, 0x78, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x66, 0x0a, 0x11, 0x73, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, + 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x41, 0x64, 0x64, 0x2e, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x10, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x69, 0x65, 0x73, 0x12, 0x69, 0x0a, 0x12, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x70, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x3a, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, + 0x65, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, + 0x72, 0x41, 0x64, 0x64, 0x2e, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, + 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6e, 0x75, 0x6d, + 0x65, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x42, + 0x0a, 0x0e, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, + 0x6c, 0x65, 0x1a, 0x43, 0x0a, 0x15, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, + 0x65, 0x72, 0x74, 0x69, 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, 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, 0x1a, 0x44, 0x0a, 0x16, 0x4e, 0x75, 0x6d, 0x65, 0x72, + 0x69, 0x63, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4a, 0x0a, + 0x15, 0x50, 0x61, 0x72, 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, + 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, + 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x4a, 0x0a, 0x15, 0x50, 0x61, 0x72, + 0x74, 0x79, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x6d, 0x61, 0x6b, 0x65, 0x72, 0x54, 0x69, 0x63, 0x6b, + 0x65, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x12, 0x16, 0x0a, + 0x06, 0x74, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, + 0x69, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x8e, 0x01, 0x0a, 0x09, 0x50, 0x61, 0x72, 0x74, 0x79, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, 0x64, 0x12, 0x39, + 0x0a, 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, + 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, + 0x08, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6f, 0x70, 0x5f, + 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x70, 0x43, 0x6f, + 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x57, 0x0a, 0x0d, 0x50, 0x61, 0x72, 0x74, 0x79, 0x44, + 0x61, 0x74, 0x61, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, + 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6f, 0x70, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x06, 0x6f, 0x70, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, + 0x9b, 0x01, 0x0a, 0x12, 0x50, 0x61, 0x72, 0x74, 0x79, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, + 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x74, 0x79, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x79, 0x49, + 0x64, 0x12, 0x33, 0x0a, 0x05, 0x6a, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, + 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, + 0x05, 0x6a, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x35, 0x0a, 0x06, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, + 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, + 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x22, 0x06, 0x0a, + 0x04, 0x50, 0x69, 0x6e, 0x67, 0x22, 0x06, 0x0a, 0x04, 0x50, 0x6f, 0x6e, 0x67, 0x22, 0x45, 0x0a, + 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3b, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x73, 0x65, + 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, + 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, + 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x09, 0x70, 0x72, 0x65, 0x73, 0x65, + 0x6e, 0x63, 0x65, 0x73, 0x22, 0x47, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x46, 0x6f, + 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x12, + 0x1c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x81, 0x01, + 0x0a, 0x13, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x05, 0x6a, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, + 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, + 0x6e, 0x63, 0x65, 0x52, 0x05, 0x6a, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x35, 0x0a, 0x06, 0x6c, 0x65, + 0x61, 0x76, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, + 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, + 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x6c, 0x65, 0x61, 0x76, 0x65, + 0x73, 0x22, 0x2b, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x55, 0x6e, 0x66, 0x6f, 0x6c, + 0x6c, 0x6f, 0x77, 0x12, 0x19, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x73, 0x22, 0x44, + 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x34, + 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x22, 0x6c, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x12, + 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x6d, 0x6f, + 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x1e, 0x0a, 0x0a, + 0x73, 0x75, 0x62, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x73, 0x75, 0x62, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x22, 0xa4, 0x01, 0x0a, 0x0a, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x06, 0x73, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x12, 0x35, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, + 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, + 0x65, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, + 0x08, 0x72, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x08, 0x72, 0x65, 0x6c, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x22, 0xb2, 0x01, 0x0a, 0x13, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x06, 0x73, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x12, 0x33, 0x0a, 0x05, 0x6a, 0x6f, 0x69, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, + 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, + 0x52, 0x05, 0x6a, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x35, 0x0a, 0x06, 0x6c, 0x65, 0x61, 0x76, 0x65, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, + 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, + 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x06, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x22, 0xba, + 0x01, 0x0a, 0x0c, 0x55, 0x73, 0x65, 0x72, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x12, + 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, + 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, + 0x74, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x6c, 0x0a, 0x1b, 0x63, + 0x6f, 0x6d, 0x2e, 0x68, 0x65, 0x72, 0x6f, 0x69, 0x63, 0x6c, 0x61, 0x62, 0x73, 0x2e, 0x6e, 0x61, + 0x6b, 0x61, 0x6d, 0x61, 0x2e, 0x72, 0x74, 0x61, 0x70, 0x69, 0x42, 0x0e, 0x4e, 0x61, 0x6b, 0x61, + 0x6d, 0x61, 0x52, 0x65, 0x61, 0x6c, 0x74, 0x69, 0x6d, 0x65, 0x50, 0x01, 0x5a, 0x29, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x65, 0x72, 0x6f, 0x69, 0x63, 0x6c, + 0x61, 0x62, 0x73, 0x2f, 0x6e, 0x61, 0x6b, 0x61, 0x6d, 0x61, 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2f, 0x72, 0x74, 0x61, 0x70, 0x69, 0xaa, 0x02, 0x0f, 0x4e, 0x61, 0x6b, 0x61, 0x6d, 0x61, + 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, +} + +var ( + file_realtime_proto_rawDescOnce sync.Once + file_realtime_proto_rawDescData = file_realtime_proto_rawDesc +) + +func file_realtime_proto_rawDescGZIP() []byte { + file_realtime_proto_rawDescOnce.Do(func() { + file_realtime_proto_rawDescData = protoimpl.X.CompressGZIP(file_realtime_proto_rawDescData) + }) + return file_realtime_proto_rawDescData +} + +var file_realtime_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_realtime_proto_msgTypes = make([]protoimpl.MessageInfo, 60) +var file_realtime_proto_goTypes = []interface{}{ + (ChannelJoin_Type)(0), // 0: nakama.realtime.ChannelJoin.Type + (Error_Code)(0), // 1: nakama.realtime.Error.Code + (*Envelope)(nil), // 2: nakama.realtime.Envelope + (*Channel)(nil), // 3: nakama.realtime.Channel + (*ChannelJoin)(nil), // 4: nakama.realtime.ChannelJoin + (*ChannelLeave)(nil), // 5: nakama.realtime.ChannelLeave + (*ChannelMessageAck)(nil), // 6: nakama.realtime.ChannelMessageAck + (*ChannelMessageSend)(nil), // 7: nakama.realtime.ChannelMessageSend + (*ChannelMessageUpdate)(nil), // 8: nakama.realtime.ChannelMessageUpdate + (*ChannelMessageRemove)(nil), // 9: nakama.realtime.ChannelMessageRemove + (*ChannelPresenceEvent)(nil), // 10: nakama.realtime.ChannelPresenceEvent + (*Error)(nil), // 11: nakama.realtime.Error + (*Match)(nil), // 12: nakama.realtime.Match + (*MatchCreate)(nil), // 13: nakama.realtime.MatchCreate + (*MatchData)(nil), // 14: nakama.realtime.MatchData + (*MatchDataSend)(nil), // 15: nakama.realtime.MatchDataSend + (*MatchJoin)(nil), // 16: nakama.realtime.MatchJoin + (*MatchLeave)(nil), // 17: nakama.realtime.MatchLeave + (*MatchPresenceEvent)(nil), // 18: nakama.realtime.MatchPresenceEvent + (*MatchmakerAdd)(nil), // 19: nakama.realtime.MatchmakerAdd + (*MatchmakerMatched)(nil), // 20: nakama.realtime.MatchmakerMatched + (*MatchmakerRemove)(nil), // 21: nakama.realtime.MatchmakerRemove + (*MatchmakerTicket)(nil), // 22: nakama.realtime.MatchmakerTicket + (*Notifications)(nil), // 23: nakama.realtime.Notifications + (*Party)(nil), // 24: nakama.realtime.Party + (*PartyCreate)(nil), // 25: nakama.realtime.PartyCreate + (*PartyUpdate)(nil), // 26: nakama.realtime.PartyUpdate + (*PartyJoin)(nil), // 27: nakama.realtime.PartyJoin + (*PartyLeave)(nil), // 28: nakama.realtime.PartyLeave + (*PartyPromote)(nil), // 29: nakama.realtime.PartyPromote + (*PartyLeader)(nil), // 30: nakama.realtime.PartyLeader + (*PartyAccept)(nil), // 31: nakama.realtime.PartyAccept + (*PartyRemove)(nil), // 32: nakama.realtime.PartyRemove + (*PartyClose)(nil), // 33: nakama.realtime.PartyClose + (*PartyJoinRequestList)(nil), // 34: nakama.realtime.PartyJoinRequestList + (*PartyJoinRequest)(nil), // 35: nakama.realtime.PartyJoinRequest + (*PartyMatchmakerAdd)(nil), // 36: nakama.realtime.PartyMatchmakerAdd + (*PartyMatchmakerRemove)(nil), // 37: nakama.realtime.PartyMatchmakerRemove + (*PartyMatchmakerTicket)(nil), // 38: nakama.realtime.PartyMatchmakerTicket + (*PartyData)(nil), // 39: nakama.realtime.PartyData + (*PartyDataSend)(nil), // 40: nakama.realtime.PartyDataSend + (*PartyPresenceEvent)(nil), // 41: nakama.realtime.PartyPresenceEvent + (*Ping)(nil), // 42: nakama.realtime.Ping + (*Pong)(nil), // 43: nakama.realtime.Pong + (*Status)(nil), // 44: nakama.realtime.Status + (*StatusFollow)(nil), // 45: nakama.realtime.StatusFollow + (*StatusPresenceEvent)(nil), // 46: nakama.realtime.StatusPresenceEvent + (*StatusUnfollow)(nil), // 47: nakama.realtime.StatusUnfollow + (*StatusUpdate)(nil), // 48: nakama.realtime.StatusUpdate + (*Stream)(nil), // 49: nakama.realtime.Stream + (*StreamData)(nil), // 50: nakama.realtime.StreamData + (*StreamPresenceEvent)(nil), // 51: nakama.realtime.StreamPresenceEvent + (*UserPresence)(nil), // 52: nakama.realtime.UserPresence + nil, // 53: nakama.realtime.Error.ContextEntry + nil, // 54: nakama.realtime.MatchJoin.MetadataEntry + nil, // 55: nakama.realtime.MatchmakerAdd.StringPropertiesEntry + nil, // 56: nakama.realtime.MatchmakerAdd.NumericPropertiesEntry + (*MatchmakerMatched_MatchmakerUser)(nil), // 57: nakama.realtime.MatchmakerMatched.MatchmakerUser + nil, // 58: nakama.realtime.MatchmakerMatched.MatchmakerUser.StringPropertiesEntry + nil, // 59: nakama.realtime.MatchmakerMatched.MatchmakerUser.NumericPropertiesEntry + nil, // 60: nakama.realtime.PartyMatchmakerAdd.StringPropertiesEntry + nil, // 61: nakama.realtime.PartyMatchmakerAdd.NumericPropertiesEntry + (*api.ChannelMessage)(nil), // 62: nakama.api.ChannelMessage + (*api.Rpc)(nil), // 63: nakama.api.Rpc + (*wrapperspb.BoolValue)(nil), // 64: google.protobuf.BoolValue + (*wrapperspb.Int32Value)(nil), // 65: google.protobuf.Int32Value + (*timestamppb.Timestamp)(nil), // 66: google.protobuf.Timestamp + (*wrapperspb.StringValue)(nil), // 67: google.protobuf.StringValue + (*api.Notification)(nil), // 68: nakama.api.Notification +} +var file_realtime_proto_depIdxs = []int32{ + 3, // 0: nakama.realtime.Envelope.channel:type_name -> nakama.realtime.Channel + 4, // 1: nakama.realtime.Envelope.channel_join:type_name -> nakama.realtime.ChannelJoin + 5, // 2: nakama.realtime.Envelope.channel_leave:type_name -> nakama.realtime.ChannelLeave + 62, // 3: nakama.realtime.Envelope.channel_message:type_name -> nakama.api.ChannelMessage + 6, // 4: nakama.realtime.Envelope.channel_message_ack:type_name -> nakama.realtime.ChannelMessageAck + 7, // 5: nakama.realtime.Envelope.channel_message_send:type_name -> nakama.realtime.ChannelMessageSend + 8, // 6: nakama.realtime.Envelope.channel_message_update:type_name -> nakama.realtime.ChannelMessageUpdate + 9, // 7: nakama.realtime.Envelope.channel_message_remove:type_name -> nakama.realtime.ChannelMessageRemove + 10, // 8: nakama.realtime.Envelope.channel_presence_event:type_name -> nakama.realtime.ChannelPresenceEvent + 11, // 9: nakama.realtime.Envelope.error:type_name -> nakama.realtime.Error + 12, // 10: nakama.realtime.Envelope.match:type_name -> nakama.realtime.Match + 13, // 11: nakama.realtime.Envelope.match_create:type_name -> nakama.realtime.MatchCreate + 14, // 12: nakama.realtime.Envelope.match_data:type_name -> nakama.realtime.MatchData + 15, // 13: nakama.realtime.Envelope.match_data_send:type_name -> nakama.realtime.MatchDataSend + 16, // 14: nakama.realtime.Envelope.match_join:type_name -> nakama.realtime.MatchJoin + 17, // 15: nakama.realtime.Envelope.match_leave:type_name -> nakama.realtime.MatchLeave + 18, // 16: nakama.realtime.Envelope.match_presence_event:type_name -> nakama.realtime.MatchPresenceEvent + 19, // 17: nakama.realtime.Envelope.matchmaker_add:type_name -> nakama.realtime.MatchmakerAdd + 20, // 18: nakama.realtime.Envelope.matchmaker_matched:type_name -> nakama.realtime.MatchmakerMatched + 21, // 19: nakama.realtime.Envelope.matchmaker_remove:type_name -> nakama.realtime.MatchmakerRemove + 22, // 20: nakama.realtime.Envelope.matchmaker_ticket:type_name -> nakama.realtime.MatchmakerTicket + 23, // 21: nakama.realtime.Envelope.notifications:type_name -> nakama.realtime.Notifications + 63, // 22: nakama.realtime.Envelope.rpc:type_name -> nakama.api.Rpc + 44, // 23: nakama.realtime.Envelope.status:type_name -> nakama.realtime.Status + 45, // 24: nakama.realtime.Envelope.status_follow:type_name -> nakama.realtime.StatusFollow + 46, // 25: nakama.realtime.Envelope.status_presence_event:type_name -> nakama.realtime.StatusPresenceEvent + 47, // 26: nakama.realtime.Envelope.status_unfollow:type_name -> nakama.realtime.StatusUnfollow + 48, // 27: nakama.realtime.Envelope.status_update:type_name -> nakama.realtime.StatusUpdate + 50, // 28: nakama.realtime.Envelope.stream_data:type_name -> nakama.realtime.StreamData + 51, // 29: nakama.realtime.Envelope.stream_presence_event:type_name -> nakama.realtime.StreamPresenceEvent + 42, // 30: nakama.realtime.Envelope.ping:type_name -> nakama.realtime.Ping + 43, // 31: nakama.realtime.Envelope.pong:type_name -> nakama.realtime.Pong + 24, // 32: nakama.realtime.Envelope.party:type_name -> nakama.realtime.Party + 25, // 33: nakama.realtime.Envelope.party_create:type_name -> nakama.realtime.PartyCreate + 27, // 34: nakama.realtime.Envelope.party_join:type_name -> nakama.realtime.PartyJoin + 28, // 35: nakama.realtime.Envelope.party_leave:type_name -> nakama.realtime.PartyLeave + 29, // 36: nakama.realtime.Envelope.party_promote:type_name -> nakama.realtime.PartyPromote + 30, // 37: nakama.realtime.Envelope.party_leader:type_name -> nakama.realtime.PartyLeader + 31, // 38: nakama.realtime.Envelope.party_accept:type_name -> nakama.realtime.PartyAccept + 32, // 39: nakama.realtime.Envelope.party_remove:type_name -> nakama.realtime.PartyRemove + 33, // 40: nakama.realtime.Envelope.party_close:type_name -> nakama.realtime.PartyClose + 34, // 41: nakama.realtime.Envelope.party_join_request_list:type_name -> nakama.realtime.PartyJoinRequestList + 35, // 42: nakama.realtime.Envelope.party_join_request:type_name -> nakama.realtime.PartyJoinRequest + 36, // 43: nakama.realtime.Envelope.party_matchmaker_add:type_name -> nakama.realtime.PartyMatchmakerAdd + 37, // 44: nakama.realtime.Envelope.party_matchmaker_remove:type_name -> nakama.realtime.PartyMatchmakerRemove + 38, // 45: nakama.realtime.Envelope.party_matchmaker_ticket:type_name -> nakama.realtime.PartyMatchmakerTicket + 39, // 46: nakama.realtime.Envelope.party_data:type_name -> nakama.realtime.PartyData + 40, // 47: nakama.realtime.Envelope.party_data_send:type_name -> nakama.realtime.PartyDataSend + 41, // 48: nakama.realtime.Envelope.party_presence_event:type_name -> nakama.realtime.PartyPresenceEvent + 26, // 49: nakama.realtime.Envelope.party_update:type_name -> nakama.realtime.PartyUpdate + 52, // 50: nakama.realtime.Channel.presences:type_name -> nakama.realtime.UserPresence + 52, // 51: nakama.realtime.Channel.self:type_name -> nakama.realtime.UserPresence + 64, // 52: nakama.realtime.ChannelJoin.persistence:type_name -> google.protobuf.BoolValue + 64, // 53: nakama.realtime.ChannelJoin.hidden:type_name -> google.protobuf.BoolValue + 65, // 54: nakama.realtime.ChannelMessageAck.code:type_name -> google.protobuf.Int32Value + 66, // 55: nakama.realtime.ChannelMessageAck.create_time:type_name -> google.protobuf.Timestamp + 66, // 56: nakama.realtime.ChannelMessageAck.update_time:type_name -> google.protobuf.Timestamp + 64, // 57: nakama.realtime.ChannelMessageAck.persistent:type_name -> google.protobuf.BoolValue + 52, // 58: nakama.realtime.ChannelPresenceEvent.joins:type_name -> nakama.realtime.UserPresence + 52, // 59: nakama.realtime.ChannelPresenceEvent.leaves:type_name -> nakama.realtime.UserPresence + 53, // 60: nakama.realtime.Error.context:type_name -> nakama.realtime.Error.ContextEntry + 67, // 61: nakama.realtime.Match.label:type_name -> google.protobuf.StringValue + 52, // 62: nakama.realtime.Match.presences:type_name -> nakama.realtime.UserPresence + 52, // 63: nakama.realtime.Match.self:type_name -> nakama.realtime.UserPresence + 52, // 64: nakama.realtime.MatchData.presence:type_name -> nakama.realtime.UserPresence + 52, // 65: nakama.realtime.MatchDataSend.presences:type_name -> nakama.realtime.UserPresence + 54, // 66: nakama.realtime.MatchJoin.metadata:type_name -> nakama.realtime.MatchJoin.MetadataEntry + 52, // 67: nakama.realtime.MatchPresenceEvent.joins:type_name -> nakama.realtime.UserPresence + 52, // 68: nakama.realtime.MatchPresenceEvent.leaves:type_name -> nakama.realtime.UserPresence + 55, // 69: nakama.realtime.MatchmakerAdd.string_properties:type_name -> nakama.realtime.MatchmakerAdd.StringPropertiesEntry + 56, // 70: nakama.realtime.MatchmakerAdd.numeric_properties:type_name -> nakama.realtime.MatchmakerAdd.NumericPropertiesEntry + 65, // 71: nakama.realtime.MatchmakerAdd.count_multiple:type_name -> google.protobuf.Int32Value + 57, // 72: nakama.realtime.MatchmakerMatched.users:type_name -> nakama.realtime.MatchmakerMatched.MatchmakerUser + 57, // 73: nakama.realtime.MatchmakerMatched.self:type_name -> nakama.realtime.MatchmakerMatched.MatchmakerUser + 68, // 74: nakama.realtime.Notifications.notifications:type_name -> nakama.api.Notification + 52, // 75: nakama.realtime.Party.self:type_name -> nakama.realtime.UserPresence + 52, // 76: nakama.realtime.Party.leader:type_name -> nakama.realtime.UserPresence + 52, // 77: nakama.realtime.Party.presences:type_name -> nakama.realtime.UserPresence + 52, // 78: nakama.realtime.PartyPromote.presence:type_name -> nakama.realtime.UserPresence + 52, // 79: nakama.realtime.PartyLeader.presence:type_name -> nakama.realtime.UserPresence + 52, // 80: nakama.realtime.PartyAccept.presence:type_name -> nakama.realtime.UserPresence + 52, // 81: nakama.realtime.PartyRemove.presence:type_name -> nakama.realtime.UserPresence + 52, // 82: nakama.realtime.PartyJoinRequest.presences:type_name -> nakama.realtime.UserPresence + 60, // 83: nakama.realtime.PartyMatchmakerAdd.string_properties:type_name -> nakama.realtime.PartyMatchmakerAdd.StringPropertiesEntry + 61, // 84: nakama.realtime.PartyMatchmakerAdd.numeric_properties:type_name -> nakama.realtime.PartyMatchmakerAdd.NumericPropertiesEntry + 65, // 85: nakama.realtime.PartyMatchmakerAdd.count_multiple:type_name -> google.protobuf.Int32Value + 52, // 86: nakama.realtime.PartyData.presence:type_name -> nakama.realtime.UserPresence + 52, // 87: nakama.realtime.PartyPresenceEvent.joins:type_name -> nakama.realtime.UserPresence + 52, // 88: nakama.realtime.PartyPresenceEvent.leaves:type_name -> nakama.realtime.UserPresence + 52, // 89: nakama.realtime.Status.presences:type_name -> nakama.realtime.UserPresence + 52, // 90: nakama.realtime.StatusPresenceEvent.joins:type_name -> nakama.realtime.UserPresence + 52, // 91: nakama.realtime.StatusPresenceEvent.leaves:type_name -> nakama.realtime.UserPresence + 67, // 92: nakama.realtime.StatusUpdate.status:type_name -> google.protobuf.StringValue + 49, // 93: nakama.realtime.StreamData.stream:type_name -> nakama.realtime.Stream + 52, // 94: nakama.realtime.StreamData.sender:type_name -> nakama.realtime.UserPresence + 49, // 95: nakama.realtime.StreamPresenceEvent.stream:type_name -> nakama.realtime.Stream + 52, // 96: nakama.realtime.StreamPresenceEvent.joins:type_name -> nakama.realtime.UserPresence + 52, // 97: nakama.realtime.StreamPresenceEvent.leaves:type_name -> nakama.realtime.UserPresence + 67, // 98: nakama.realtime.UserPresence.status:type_name -> google.protobuf.StringValue + 52, // 99: nakama.realtime.MatchmakerMatched.MatchmakerUser.presence:type_name -> nakama.realtime.UserPresence + 58, // 100: nakama.realtime.MatchmakerMatched.MatchmakerUser.string_properties:type_name -> nakama.realtime.MatchmakerMatched.MatchmakerUser.StringPropertiesEntry + 59, // 101: nakama.realtime.MatchmakerMatched.MatchmakerUser.numeric_properties:type_name -> nakama.realtime.MatchmakerMatched.MatchmakerUser.NumericPropertiesEntry + 102, // [102:102] is the sub-list for method output_type + 102, // [102:102] is the sub-list for method input_type + 102, // [102:102] is the sub-list for extension type_name + 102, // [102:102] is the sub-list for extension extendee + 0, // [0:102] is the sub-list for field type_name +} + +func init() { file_realtime_proto_init() } +func file_realtime_proto_init() { + if File_realtime_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_realtime_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Envelope); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Channel); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChannelJoin); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChannelLeave); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChannelMessageAck); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChannelMessageSend); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChannelMessageUpdate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChannelMessageRemove); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChannelPresenceEvent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Error); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Match); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MatchCreate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MatchData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MatchDataSend); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MatchJoin); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MatchLeave); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MatchPresenceEvent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MatchmakerAdd); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MatchmakerMatched); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MatchmakerRemove); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MatchmakerTicket); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Notifications); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Party); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PartyCreate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PartyUpdate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PartyJoin); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PartyLeave); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PartyPromote); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PartyLeader); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PartyAccept); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PartyRemove); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PartyClose); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PartyJoinRequestList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PartyJoinRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PartyMatchmakerAdd); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PartyMatchmakerRemove); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PartyMatchmakerTicket); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PartyData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PartyDataSend); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PartyPresenceEvent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Ping); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Pong); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Status); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StatusFollow); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StatusPresenceEvent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StatusUnfollow); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StatusUpdate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Stream); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StreamData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StreamPresenceEvent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UserPresence); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_realtime_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MatchmakerMatched_MatchmakerUser); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_realtime_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*Envelope_Channel)(nil), + (*Envelope_ChannelJoin)(nil), + (*Envelope_ChannelLeave)(nil), + (*Envelope_ChannelMessage)(nil), + (*Envelope_ChannelMessageAck)(nil), + (*Envelope_ChannelMessageSend)(nil), + (*Envelope_ChannelMessageUpdate)(nil), + (*Envelope_ChannelMessageRemove)(nil), + (*Envelope_ChannelPresenceEvent)(nil), + (*Envelope_Error)(nil), + (*Envelope_Match)(nil), + (*Envelope_MatchCreate)(nil), + (*Envelope_MatchData)(nil), + (*Envelope_MatchDataSend)(nil), + (*Envelope_MatchJoin)(nil), + (*Envelope_MatchLeave)(nil), + (*Envelope_MatchPresenceEvent)(nil), + (*Envelope_MatchmakerAdd)(nil), + (*Envelope_MatchmakerMatched)(nil), + (*Envelope_MatchmakerRemove)(nil), + (*Envelope_MatchmakerTicket)(nil), + (*Envelope_Notifications)(nil), + (*Envelope_Rpc)(nil), + (*Envelope_Status)(nil), + (*Envelope_StatusFollow)(nil), + (*Envelope_StatusPresenceEvent)(nil), + (*Envelope_StatusUnfollow)(nil), + (*Envelope_StatusUpdate)(nil), + (*Envelope_StreamData)(nil), + (*Envelope_StreamPresenceEvent)(nil), + (*Envelope_Ping)(nil), + (*Envelope_Pong)(nil), + (*Envelope_Party)(nil), + (*Envelope_PartyCreate)(nil), + (*Envelope_PartyJoin)(nil), + (*Envelope_PartyLeave)(nil), + (*Envelope_PartyPromote)(nil), + (*Envelope_PartyLeader)(nil), + (*Envelope_PartyAccept)(nil), + (*Envelope_PartyRemove)(nil), + (*Envelope_PartyClose)(nil), + (*Envelope_PartyJoinRequestList)(nil), + (*Envelope_PartyJoinRequest)(nil), + (*Envelope_PartyMatchmakerAdd)(nil), + (*Envelope_PartyMatchmakerRemove)(nil), + (*Envelope_PartyMatchmakerTicket)(nil), + (*Envelope_PartyData)(nil), + (*Envelope_PartyDataSend)(nil), + (*Envelope_PartyPresenceEvent)(nil), + (*Envelope_PartyUpdate)(nil), + } + file_realtime_proto_msgTypes[14].OneofWrappers = []interface{}{ + (*MatchJoin_MatchId)(nil), + (*MatchJoin_Token)(nil), + } + file_realtime_proto_msgTypes[18].OneofWrappers = []interface{}{ + (*MatchmakerMatched_MatchId)(nil), + (*MatchmakerMatched_Token)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_realtime_proto_rawDesc, + NumEnums: 2, + NumMessages: 60, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_realtime_proto_goTypes, + DependencyIndexes: file_realtime_proto_depIdxs, + EnumInfos: file_realtime_proto_enumTypes, + MessageInfos: file_realtime_proto_msgTypes, + }.Build() + File_realtime_proto = out.File + file_realtime_proto_rawDesc = nil + file_realtime_proto_goTypes = nil + file_realtime_proto_depIdxs = nil +} diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/rtapi/realtime.proto b/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/rtapi/realtime.proto new file mode 100644 index 0000000..b23efef --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/rtapi/realtime.proto @@ -0,0 +1,690 @@ +// Copyright 2019 The Nakama Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/** + * The realtime protocol for Nakama server. + */ +syntax = "proto3"; + +package nakama.realtime; + +import "google/protobuf/timestamp.proto"; +import "google/protobuf/wrappers.proto"; +import "api/api.proto"; + +option go_package = "github.com/heroiclabs/nakama-common/rtapi"; + +option java_multiple_files = true; +option java_outer_classname = "NakamaRealtime"; +option java_package = "com.heroiclabs.nakama.rtapi"; + +option csharp_namespace = "Nakama.Protobuf"; + +// An envelope for a realtime message. +message Envelope { + string cid = 1; + oneof message { + // A response from a channel join operation. + Channel channel = 2; + // Join a realtime chat channel. + ChannelJoin channel_join = 3; + // Leave a realtime chat channel. + ChannelLeave channel_leave = 4; + // An incoming message on a realtime chat channel. + api.ChannelMessage channel_message = 5; + // An acknowledgement received in response to sending a message on a chat channel. + ChannelMessageAck channel_message_ack = 6; + // Send a message to a realtime chat channel. + ChannelMessageSend channel_message_send = 7; + // Update a message previously sent to a realtime chat channel. + ChannelMessageUpdate channel_message_update = 8; + // Remove a message previously sent to a realtime chat channel. + ChannelMessageRemove channel_message_remove = 9; + // Presence update for a particular realtime chat channel. + ChannelPresenceEvent channel_presence_event = 10; + // Describes an error which occurred on the server. + Error error = 11; + // Incoming information about a realtime match. + Match match = 12; + // A client to server request to create a realtime match. + MatchCreate match_create = 13; + // Incoming realtime match data delivered from the server. + MatchData match_data = 14; + // A client to server request to send data to a realtime match. + MatchDataSend match_data_send = 15; + // A client to server request to join a realtime match. + MatchJoin match_join = 16; + // A client to server request to leave a realtime match. + MatchLeave match_leave = 17; + // Presence update for a particular realtime match. + MatchPresenceEvent match_presence_event = 18; + // Submit a new matchmaking process request. + MatchmakerAdd matchmaker_add = 19; + // A successful matchmaking result. + MatchmakerMatched matchmaker_matched = 20; + // Cancel a matchmaking process using a ticket. + MatchmakerRemove matchmaker_remove = 21; + // A response from starting a new matchmaking process. + MatchmakerTicket matchmaker_ticket = 22; + // Notifications send by the server. + Notifications notifications = 23; + // RPC call or response. + api.Rpc rpc = 24; + // An incoming status snapshot for some set of users. + Status status = 25; + // Start following some set of users to receive their status updates. + StatusFollow status_follow = 26; + // An incoming status update. + StatusPresenceEvent status_presence_event = 27; + // Stop following some set of users to no longer receive their status updates. + StatusUnfollow status_unfollow = 28; + // Set the user's own status. + StatusUpdate status_update = 29; + // A data message delivered over a stream. + StreamData stream_data = 30; + // Presence update for a particular stream. + StreamPresenceEvent stream_presence_event = 31; + // Application-level heartbeat and connection check. + Ping ping = 32; + // Application-level heartbeat and connection check response. + Pong pong = 33; + // Incoming information about a party. + Party party = 34; + // Create a party. + PartyCreate party_create = 35; + // Join a party, or request to join if the party is not open. + PartyJoin party_join = 36; + // Leave a party. + PartyLeave party_leave = 37; + // Promote a new party leader. + PartyPromote party_promote = 38; + // Announcement of a new party leader. + PartyLeader party_leader = 39; + // Accept a request to join. + PartyAccept party_accept = 40; + // Kick a party member, or decline a request to join. + PartyRemove party_remove = 41; + // End a party, kicking all party members and closing it. + PartyClose party_close = 42; + // Request a list of pending join requests for a party. + PartyJoinRequestList party_join_request_list = 43; + // Incoming notification for one or more new presences attempting to join the party. + PartyJoinRequest party_join_request = 44; + // Begin matchmaking as a party. + PartyMatchmakerAdd party_matchmaker_add = 45; + // Cancel a party matchmaking process using a ticket. + PartyMatchmakerRemove party_matchmaker_remove = 46; + // A response from starting a new party matchmaking process. + PartyMatchmakerTicket party_matchmaker_ticket = 47; + // Incoming party data delivered from the server. + PartyData party_data = 48; + // A client to server request to send data to a party. + PartyDataSend party_data_send = 49; + // Presence update for a particular party. + PartyPresenceEvent party_presence_event = 50; + // Update Party label and whether it's open or closed. + PartyUpdate party_update = 51; + } +} + +// A realtime chat channel. +message Channel { + // The ID of the channel. + string id = 1; + // The users currently in the channel. + repeated UserPresence presences = 2; + // A reference to the current user's presence in the channel. + UserPresence self = 3; + // The name of the chat room, or an empty string if this message was not sent through a chat room. + string room_name = 4; + // The ID of the group, or an empty string if this message was not sent through a group channel. + string group_id = 5; + // The ID of the first DM user, or an empty string if this message was not sent through a DM chat. + string user_id_one = 6; + // The ID of the second DM user, or an empty string if this message was not sent through a DM chat. + string user_id_two = 7; +} + +// Join operation for a realtime chat channel. +message ChannelJoin { + // The type of chat channel. + enum Type { + // Default case. Assumed as ROOM type. + TYPE_UNSPECIFIED = 0; + // A room which anyone can join to chat. + ROOM = 1; + // A private channel for 1-on-1 chat. + DIRECT_MESSAGE = 2; + // A channel for group chat. + GROUP = 3; + } + + // The user ID to DM with, group ID to chat with, or room channel name to join. + string target = 1; + // The type of the chat channel. + int32 type = 2; // one of "ChannelId.Type". + // Whether messages sent on this channel should be persistent. + google.protobuf.BoolValue persistence = 3; + // Whether the user should appear in the channel's presence list and events. + google.protobuf.BoolValue hidden = 4; +} + +// Leave a realtime channel. +message ChannelLeave { + // The ID of the channel to leave. + string channel_id = 1; +} + +// A receipt reply from a channel message send operation. +message ChannelMessageAck { + // The channel the message was sent to. + string channel_id = 1; + // The unique ID assigned to the message. + string message_id = 2; + // The code representing a message type or category. + google.protobuf.Int32Value code = 3; + // Username of the message sender. + string username = 4; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the message was created. + google.protobuf.Timestamp create_time = 5; + // The UNIX time (for gRPC clients) or ISO string (for REST clients) when the message was last updated. + google.protobuf.Timestamp update_time = 6; + // True if the message was persisted to the channel's history, false otherwise. + google.protobuf.BoolValue persistent = 7; + // The name of the chat room, or an empty string if this message was not sent through a chat room. + string room_name = 8; + // The ID of the group, or an empty string if this message was not sent through a group channel. + string group_id = 9; + // The ID of the first DM user, or an empty string if this message was not sent through a DM chat. + string user_id_one = 10; + // The ID of the second DM user, or an empty string if this message was not sent through a DM chat. + string user_id_two = 11; +} + +// Send a message to a realtime channel. +message ChannelMessageSend { + // The channel to sent to. + string channel_id = 1; + // Message content. + string content = 2; +} + +// Update a message previously sent to a realtime channel. +message ChannelMessageUpdate { + // The channel the message was sent to. + string channel_id = 1; + // The ID assigned to the message to update. + string message_id = 2; + // New message content. + string content = 3; +} + +// Remove a message previously sent to a realtime channel. +message ChannelMessageRemove { + // The channel the message was sent to. + string channel_id = 1; + // The ID assigned to the message to update. + string message_id = 2; +} + +// A set of joins and leaves on a particular channel. +message ChannelPresenceEvent { + // The channel identifier this event is for. + string channel_id = 1; + // Presences joining the channel as part of this event, if any. + repeated UserPresence joins = 2; + // Presences leaving the channel as part of this event, if any. + repeated UserPresence leaves = 3; + // The name of the chat room, or an empty string if this message was not sent through a chat room. + string room_name = 4; + // The ID of the group, or an empty string if this message was not sent through a group channel. + string group_id = 5; + // The ID of the first DM user, or an empty string if this message was not sent through a DM chat. + string user_id_one = 6; + // The ID of the second DM user, or an empty string if this message was not sent through a DM chat. + string user_id_two = 7; +} + +// A logical error which may occur on the server. +message Error { + // The selection of possible error codes. + enum Code { + // An unexpected result from the server. + RUNTIME_EXCEPTION = 0; + // The server received a message which is not recognised. + UNRECOGNIZED_PAYLOAD = 1; + // A message was expected but contains no content. + MISSING_PAYLOAD = 2; + // Fields in the message have an invalid format. + BAD_INPUT = 3; + // The match id was not found. + MATCH_NOT_FOUND = 4; + // The match join was rejected. + MATCH_JOIN_REJECTED = 5; + // The runtime function does not exist on the server. + RUNTIME_FUNCTION_NOT_FOUND = 6; + // The runtime function executed with an error. + RUNTIME_FUNCTION_EXCEPTION = 7; + } + + // The error code which should be one of "Error.Code" enums. + int32 code = 1; + // A message in English to help developers debug the response. + string message = 2; + // Additional error details which may be different for each response. + map context = 3; +} + +// A realtime match. +message Match { + // The match unique ID. + string match_id = 1; + // True if it's an server-managed authoritative match, false otherwise. + bool authoritative = 2; + // Match label, if any. + google.protobuf.StringValue label = 3; + // The number of users currently in the match. + int32 size = 4; + // The users currently in the match. + repeated UserPresence presences = 5; + // A reference to the current user's presence in the match. + UserPresence self = 6; +} + +// Create a new realtime match. +message MatchCreate { + // Optional name to use when creating the match. + string name = 1; +} + +// Realtime match data received from the server. +message MatchData { + // The match unique ID. + string match_id = 1; + // A reference to the user presence that sent this data, if any. + UserPresence presence = 2; + // Op code value. + int64 op_code = 3; + // Data payload, if any. + bytes data = 4; + // True if this data was delivered reliably, false otherwise. + bool reliable = 5; +} + +// Send realtime match data to the server. +message MatchDataSend { + // The match unique ID. + string match_id = 1; + // Op code value. + int64 op_code = 2; + // Data payload, if any. + bytes data = 3; + // List of presences in the match to deliver to, if filtering is required. Otherwise deliver to everyone in the match. + repeated UserPresence presences = 4; + // True if the data should be sent reliably, false otherwise. + bool reliable = 5; +} + +// Join an existing realtime match. +message MatchJoin { + oneof id { + // The match unique ID. + string match_id = 1; + // A matchmaking result token. + string token = 2; + } + // An optional set of key-value metadata pairs to be passed to the match handler, if any. + map metadata = 3; +} + +// Leave a realtime match. +message MatchLeave { + // The match unique ID. + string match_id = 1; +} + +// A set of joins and leaves on a particular realtime match. +message MatchPresenceEvent { + // The match unique ID. + string match_id = 1; + // User presences that have just joined the match. + repeated UserPresence joins = 2; + // User presences that have just left the match. + repeated UserPresence leaves = 3; +} + +// Start a new matchmaking process. +message MatchmakerAdd { + // Minimum total user count to match together. + int32 min_count = 1; + // Maximum total user count to match together. + int32 max_count = 2; + // Filter query used to identify suitable users. + string query = 3; + // String properties. + map string_properties = 4; + // Numeric properties. + map numeric_properties = 5; + // Optional multiple of the count that must be satisfied. + google.protobuf.Int32Value count_multiple = 6; +} + +// A successful matchmaking result. +message MatchmakerMatched { + message MatchmakerUser { + // User info. + UserPresence presence = 1; + // Party identifier, if this user was matched as a party member. + string party_id = 2; + // String properties. + map string_properties = 5; + // Numeric properties. + map numeric_properties = 6; + } + + // The matchmaking ticket that has completed. + string ticket = 1; + // The match token or match ID to join. + oneof id { + // Match ID. + string match_id = 2; + // Match join token. + string token = 3; + } + // The users that have been matched together, and information about their matchmaking data. + repeated MatchmakerUser users = 4; + // A reference to the current user and their properties. + MatchmakerUser self = 5; +} + +// Cancel an existing ongoing matchmaking process. +message MatchmakerRemove { + // The ticket to cancel. + string ticket = 1; +} + +// A ticket representing a new matchmaking process. +message MatchmakerTicket { + // The ticket that can be used to cancel matchmaking. + string ticket = 1; +} + +// A collection of zero or more notifications. +message Notifications { + // Collection of notifications. + repeated api.Notification notifications = 1; +} + +// Incoming information about a party. +message Party { + // Unique party identifier. + string party_id = 1; + // Open flag. + bool open = 2; + // Hidden flag. + bool hidden = 3; + // Maximum number of party members. + int32 max_size = 4; + // Self. + UserPresence self = 5; + // Leader. + UserPresence leader = 6; + // All current party members. + repeated UserPresence presences = 7; + // Label for party listing. + string label = 8; +} + +// Create a party. +message PartyCreate { + // Whether or not the party will require join requests to be approved by the party leader. + bool open = 1; + // Maximum number of party members. + int32 max_size = 2; + // Label + string label = 3; + // Whether the party is visible in party listings. + bool hidden = 4; +} + +// Update a party label. +message PartyUpdate { + // Party ID. + string party_id = 1; + // Label to set. + string label = 2; + // Change the party to open or closed. + bool open = 3; + // Whether the party is visible in party listings. + bool hidden = 4; +} + +// Join a party, or request to join if the party is not open. +message PartyJoin { + // Party ID to join. + string party_id = 1; +} + +// Leave a party. +message PartyLeave { + // Party ID to leave. + string party_id = 1; +} + +// Promote a new party leader. +message PartyPromote { + // Party ID to promote a new leader for. + string party_id = 1; + // The presence of an existing party member to promote as the new leader. + UserPresence presence = 2; +} + +// Announcement of a new party leader. +message PartyLeader { + // Party ID to announce the new leader for. + string party_id = 1; + // The presence of the new party leader. + UserPresence presence = 2; +} + +// Accept a request to join. +message PartyAccept { + // Party ID to accept a join request for. + string party_id = 1; + // The presence to accept as a party member. + UserPresence presence = 2; +} + +// Kick a party member, or decline a request to join. +message PartyRemove { + // Party ID to remove/reject from. + string party_id = 1; + // The presence to remove or reject. + UserPresence presence = 2; +} + +// End a party, kicking all party members and closing it. +message PartyClose { + // Party ID to close. + string party_id = 1; +} + +// Request a list of pending join requests for a party. +message PartyJoinRequestList { + // Party ID to get a list of join requests for. + string party_id = 1; +} + +// Incoming notification for one or more new presences attempting to join the party. +message PartyJoinRequest { + // Party ID these presences are attempting to join. + string party_id = 1; + // Presences attempting to join. + repeated UserPresence presences = 2; +} + +// Begin matchmaking as a party. +message PartyMatchmakerAdd { + // Party ID. + string party_id = 1; + // Minimum total user count to match together. + int32 min_count = 2; + // Maximum total user count to match together. + int32 max_count = 3; + // Filter query used to identify suitable users. + string query = 4; + // String properties. + map string_properties = 5; + // Numeric properties. + map numeric_properties = 6; + // Optional multiple of the count that must be satisfied. + google.protobuf.Int32Value count_multiple = 7; +} + +// Cancel a party matchmaking process using a ticket. +message PartyMatchmakerRemove { + // Party ID. + string party_id = 1; + // The ticket to cancel. + string ticket = 2; +} + +// A response from starting a new party matchmaking process. +message PartyMatchmakerTicket { + // Party ID. + string party_id = 1; + // The ticket that can be used to cancel matchmaking. + string ticket = 2; +} + +// Incoming party data delivered from the server. +message PartyData { + // The party ID. + string party_id = 1; + // A reference to the user presence that sent this data, if any. + UserPresence presence = 2; + // Op code value. + int64 op_code = 3; + // Data payload, if any. + bytes data = 4; +} + +// Send data to a party. +message PartyDataSend { + // Party ID to send to. + string party_id = 1; + // Op code value. + int64 op_code = 2; + // Data payload, if any. + bytes data = 3; +} + +// Presence update for a particular party. +message PartyPresenceEvent { + // The party ID. + string party_id = 1; + // User presences that have just joined the party. + repeated UserPresence joins = 2; + // User presences that have just left the party. + repeated UserPresence leaves = 3; +} + + +// Application-level heartbeat and connection check. +message Ping {} + +// Application-level heartbeat and connection check response. +message Pong {} + +// A snapshot of statuses for some set of users. +message Status { + // User statuses. + repeated UserPresence presences = 1; +} + +// Start receiving status updates for some set of users. +message StatusFollow { + // User IDs to follow. + repeated string user_ids = 1; + // Usernames to follow. + repeated string usernames = 2; +} + +// A batch of status updates for a given user. +message StatusPresenceEvent { + // New statuses for the user. + repeated UserPresence joins = 2; + // Previous statuses for the user. + repeated UserPresence leaves = 3; +} + +// Stop receiving status updates for some set of users. +message StatusUnfollow { + // Users to unfollow. + repeated string user_ids = 1; +} + +// Set the user's own status. +message StatusUpdate { + // Status string to set, if not present the user will appear offline. + google.protobuf.StringValue status = 1; +} + +// Represents identifying information for a stream. +message Stream { + // Mode identifies the type of stream. + int32 mode = 1; + // Subject is the primary identifier, if any. + string subject = 2; + // Subcontext is a secondary identifier, if any. + string subcontext = 3; + // The label is an arbitrary identifying string, if the stream has one. + string label = 4; +} + +// A data message delivered over a stream. +message StreamData { + // The stream this data message relates to. + Stream stream = 1; + // The sender, if any. + UserPresence sender = 2; + // Arbitrary contents of the data message. + string data = 3; + // True if this data was delivered reliably, false otherwise. + bool reliable = 4; +} + +// A set of joins and leaves on a particular stream. +message StreamPresenceEvent { + // The stream this event relates to. + Stream stream = 1; + // Presences joining the stream as part of this event, if any. + repeated UserPresence joins = 2; + // Presences leaving the stream as part of this event, if any. + repeated UserPresence leaves = 3; +} + +// A user session associated to a stream, usually through a list operation or a join/leave event. +message UserPresence { + // The user this presence belongs to. + string user_id = 1; + // A unique session ID identifying the particular connection, because the user may have many. + string session_id = 2; + // The username for display purposes. + string username = 3; + // Whether this presence generates persistent data/messages, if applicable for the stream type. + bool persistence = 4; + // A user-set status message for this stream, if applicable. + google.protobuf.StringValue status = 5; +} diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/runtime/config.go b/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/runtime/config.go new file mode 100644 index 0000000..689f03a --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/runtime/config.go @@ -0,0 +1,128 @@ +// Copyright 2024 The Nakama Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package runtime + +// Config interface is the Nakama core configuration. +type Config interface { + GetName() string + GetShutdownGraceSec() int + GetLogger() LoggerConfig + GetSession() SessionConfig + GetSocket() SocketConfig + GetSocial() SocialConfig + GetRuntime() RuntimeConfig + GetIAP() IAPConfig + GetGoogleAuth() GoogleAuthConfig + GetSatori() SatoriConfig +} + +// LoggerConfig is configuration relevant to logging levels and output. +type LoggerConfig interface { + GetLevel() string +} + +// SessionConfig is configuration relevant to the session. +type SessionConfig interface { + GetEncryptionKey() string + GetTokenExpirySec() int64 + GetRefreshEncryptionKey() string + GetRefreshTokenExpirySec() int64 + GetSingleSocket() bool + GetSingleMatch() bool + GetSingleParty() bool + GetSingleSession() bool +} + +// SocketConfig is configuration relevant to the transport socket and protocol. +type SocketConfig interface { + GetServerKey() string + GetPort() int + GetAddress() string + GetProtocol() string +} + +// SocialConfig is configuration relevant to the social authentication providers. +type SocialConfig interface { + GetSteam() SocialConfigSteam + GetFacebookInstantGame() SocialConfigFacebookInstantGame + GetFacebookLimitedLogin() SocialConfigFacebookLimitedLogin + GetApple() SocialConfigApple +} + +// SocialConfigSteam is configuration relevant to Steam. +type SocialConfigSteam interface { + GetPublisherKey() string + GetAppID() int +} + +// SocialConfigFacebookInstantGame is configuration relevant to Facebook Instant Games. +type SocialConfigFacebookInstantGame interface { + GetAppSecret() string +} + +// SocialConfigFacebookLimitedLogin is configuration relevant to Facebook Limited Login. +type SocialConfigFacebookLimitedLogin interface { + GetAppId() string +} + +// SocialConfigApple is configuration relevant to Apple Sign In. +type SocialConfigApple interface { + GetBundleId() string +} + +// RuntimeConfig is configuration relevant to the Runtimes. +type RuntimeConfig interface { + GetEnv() []string + GetHTTPKey() string +} + +type IAPConfig interface { + GetApple() IAPAppleConfig + GetGoogle() IAPGoogleConfig + GetHuawei() IAPHuaweiConfig + GetFacebookInstant() IAPFacebookInstantConfig +} + +type IAPAppleConfig interface { + GetSharedPassword() string + GetNotificationsEndpointId() string +} + +type IAPGoogleConfig interface { + GetClientEmail() string + GetPrivateKey() string + GetNotificationsEndpointId() string +} + +type SatoriConfig interface { + GetUrl() string + GetApiKeyName() string + GetApiKey() string + GetSigningKey() string +} + +type IAPHuaweiConfig interface { + GetPublicKey() string + GetClientID() string + GetClientSecret() string +} + +type IAPFacebookInstantConfig interface { + GetAppSecret() string +} + +type GoogleAuthConfig interface { + GetCredentialsJSON() string +} diff --git a/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/runtime/runtime.go b/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/runtime/runtime.go new file mode 100644 index 0000000..de91875 --- /dev/null +++ b/Nakama+Hiro/vendor/github.com/heroiclabs/nakama-common/runtime/runtime.go @@ -0,0 +1,2005 @@ +// Copyright 2019 The Nakama Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/* +Package runtime is an API to interact with the embedded Runtime environment in Nakama. + +The game server includes support to develop native code in Go with the plugin package from the Go stdlib. +It's used to enable compiled shared objects to be loaded by the game server at startup. + +The Go runtime support can be used to develop authoritative multiplayer match handlers, +RPC functions, hook into messages processed by the server, and extend the server with any other custom logic. +It offers the same capabilities as the Lua runtime support but has the advantage that any package from the Go ecosystem can be used. + +Here's the smallest example of a Go module written with the server runtime. + + package main + + import ( + "context" + "database/sql" + "log" + + "github.com/heroiclabs/nakama-common/runtime" + ) + + func InitModule(ctx context.Context, logger Logger, db *sql.DB, nk runtime.NakamaModule, initializer runtime.Initializer) error { + if err := initializer.RegisterRpc("get_time", getServerTime); err != nil { + return err + } + logger.Println("module loaded") + return nil + } + + func getServerTime(ctx context.Context, logger Logger, db *sql.DB, nk runtime.NakamaModule, payload string) (string, error) { + serverTime := map[string]int64 { + "time": time.Now().UTC().Unix(), + } + + response, err := json.Marshal(serverTime) + if err != nil { + logger.Printf("failed to marshal response: %v", response) + return "", errors.New("internal error; see logs") + } + return string(response), nil + } + +On server start, Nakama scans the module directory folder (https://heroiclabs.com/docs/runtime-code-basics/#load-modules). +If it finds a shared object file (*.so), it attempts to open the file as a plugin and initialize it by running the InitModule function. +This function is guaranteed to ever be invoked once during the uptime of the server. + +To setup your own project to build modules for the game server you can follow these steps. + + 1. Build Nakama from source: + go get -d github.com/heroiclabs/nakama-common + cd $GOPATH/src/github.com/heroiclabs/nakama-common + env CGO_ENABLED=1 go build + + 2. Setup a folder for your own server code: + mkdir -p $GOPATH/src/some_project + cd $GOPATH/src/some_project + + 3. Build your plugin as a shared object: + go build --buildmode=plugin -o ./modules/some_project.so + +NOTE: It is not possible to build plugins on Windows with the native compiler toolchain but they can be cross-compiled and run with Docker. + + 4. Start Nakama with your module: + $GOPATH/src/github.com/heroiclabs/nakama-common/nakama --runtime.path $GOPATH/src/plugin_project/modules + +TIP: You don't have to install Nakama from source but you still need to have the `api`, `rtapi` and `runtime` packages from Nakama on your `GOPATH`. Heroic Labs also offers a docker plugin-builder image that streamlines the plugin workflow. + +For more information about the Go runtime have a look at the docs: +https://heroiclabs.com/docs/runtime-code-basics +*/ +package runtime + +import ( + "context" + "database/sql" + "errors" + "fmt" + "net/http" + "os" + "time" + + "github.com/heroiclabs/nakama-common/api" + "github.com/heroiclabs/nakama-common/rtapi" + "google.golang.org/protobuf/types/known/timestamppb" +) + +const ( + // All available environmental variables made available to the runtime environment. + // This is useful to store API keys and other secrets which may be different between servers run in production and in development. + // envs := ctx.Value(runtime.RUNTIME_CTX_ENV).(map[string]string) + // This can always be safely cast into a `map[string]string`. + RUNTIME_CTX_ENV = "env" + + // The mode associated with the execution context. It's one of these values: + // "event", "run_once", "rpc", "before", "after", "match", "matchmaker", "leaderboard_reset", "tournament_reset", "tournament_end". + RUNTIME_CTX_MODE = "execution_mode" + + // The node ID where the current runtime context is executing. + RUNTIME_CTX_NODE = "node" + + // Server version. + RUNTIME_CTX_VERSION = "version" + + // Http headers. Only applicable to HTTP RPC requests. + RUNTIME_CTX_HEADERS = "headers" + + // Query params that was passed through from HTTP request. + RUNTIME_CTX_QUERY_PARAMS = "query_params" + + // The user ID associated with the execution context. + RUNTIME_CTX_USER_ID = "user_id" + + // The username associated with the execution context. + RUNTIME_CTX_USERNAME = "username" + + // Variables stored in the user's session token. + RUNTIME_CTX_VARS = "vars" + + // The user session expiry in seconds associated with the execution context. + RUNTIME_CTX_USER_SESSION_EXP = "user_session_exp" + + // The user session associated with the execution context. + RUNTIME_CTX_SESSION_ID = "session_id" + + // The user session's lang value, if one is set. + RUNTIME_CTX_LANG = "lang" + + // The IP address of the client making the request. + RUNTIME_CTX_CLIENT_IP = "client_ip" + + // The port number of the client making the request. + RUNTIME_CTX_CLIENT_PORT = "client_port" + + // The match ID that is currently being executed. Only applicable to server authoritative multiplayer. + RUNTIME_CTX_MATCH_ID = "match_id" + + // The node ID that the match is being executed on. Only applicable to server authoritative multiplayer. + RUNTIME_CTX_MATCH_NODE = "match_node" + + // Labels associated with the match. Only applicable to server authoritative multiplayer. + RUNTIME_CTX_MATCH_LABEL = "match_label" + + // Tick rate defined for this match. Only applicable to server authoritative multiplayer. + RUNTIME_CTX_MATCH_TICK_RATE = "match_tick_rate" +) + +var ( + ErrStorageRejectedVersion = errors.New("Storage write rejected - version check failed.") + ErrStorageRejectedPermission = errors.New("Storage write rejected - permission denied.") + + ErrChannelIDInvalid = errors.New("invalid channel id") + ErrChannelCursorInvalid = errors.New("invalid channel cursor") + ErrChannelGroupNotFound = errors.New("group not found") + + ErrInvalidChannelTarget = errors.New("Invalid channel target") + ErrInvalidChannelType = errors.New("Invalid channel type") + + ErrFriendInvalidCursor = errors.New("friend cursor invalid") + + ErrLeaderboardNotFound = errors.New("leaderboard not found") + + ErrTournamentNotFound = errors.New("tournament not found") + ErrTournamentAuthoritative = errors.New("tournament only allows authoritative submissions") + ErrTournamentMaxSizeReached = errors.New("tournament max size reached") + ErrTournamentOutsideDuration = errors.New("tournament outside of duration") + ErrTournamentWriteMaxNumScoreReached = errors.New("max number score count reached") + ErrTournamentWriteJoinRequired = errors.New("required to join before writing tournament record") + + ErrMatchmakerQueryInvalid = errors.New("matchmaker query invalid") + ErrMatchmakerDuplicateSession = errors.New("matchmaker duplicate session") + ErrMatchmakerIndex = errors.New("matchmaker index error") + ErrMatchmakerDelete = errors.New("matchmaker delete error") + ErrMatchmakerNotAvailable = errors.New("matchmaker not available") + ErrMatchmakerTooManyTickets = errors.New("matchmaker too many tickets") + ErrMatchmakerTicketNotFound = errors.New("matchmaker ticket not found") + + ErrPartyClosed = errors.New("party closed") + ErrPartyFull = errors.New("party full") + ErrPartyJoinRequestDuplicate = errors.New("party join request duplicate") + ErrPartyJoinRequestAlreadyMember = errors.New("party join request already member") + ErrPartyJoinRequestsFull = errors.New("party join requests full") + ErrPartyNotLeader = errors.New("party leader only") + ErrPartyNotMember = errors.New("party member not found") + ErrPartyNotRequest = errors.New("party join request not found") + ErrPartyAcceptRequest = errors.New("party could not accept request") + ErrPartyRemove = errors.New("party could not remove") + ErrPartyRemoveSelf = errors.New("party cannot remove self") + ErrPartyLabelTooLong = errors.New("party label too long") + + ErrGracePeriodExpired = errors.New("grace period expired") + + ErrGroupNameInUse = errors.New("group name in use") + ErrGroupPermissionDenied = errors.New("group permission denied") + ErrGroupNoUpdateOps = errors.New("no group updates") + ErrGroupNotUpdated = errors.New("group not updated") + ErrGroupNotFound = errors.New("group not found") + ErrGroupFull = errors.New("group is full") + ErrGroupUserNotFound = errors.New("user not found") + ErrGroupLastSuperadmin = errors.New("user is last group superadmin") + ErrGroupUserInvalidCursor = errors.New("group user cursor invalid") + ErrUserGroupInvalidCursor = errors.New("user group cursor invalid") + ErrGroupCreatorInvalid = errors.New("group creator user ID not valid") + + ErrWalletLedgerInvalidCursor = errors.New("wallet ledger cursor invalid") + + ErrCannotEncodeParams = errors.New("error creating match: cannot encode params") + ErrCannotDecodeParams = errors.New("error creating match: cannot decode params") + ErrMatchIdInvalid = errors.New("match id invalid") + ErrMatchNotFound = errors.New("match not found") + ErrMatchBusy = errors.New("match busy") + ErrMatchStateFailed = errors.New("match did not return state") + ErrMatchLabelTooLong = errors.New("match label too long, must be 0-2048 bytes") + ErrDeferredBroadcastFull = errors.New("too many deferred message broadcasts per tick") + + ErrSatoriConfigurationInvalid = errors.New("satori configuration is invalid") +) + +const ( + // Storage permission for public read, any user can read the object. + STORAGE_PERMISSION_PUBLIC_READ = 2 + + // Storage permission for owner read, only the user who owns it may access. + STORAGE_PERMISSION_OWNER_READ = 1 + + // Storage permission for no read. The object is only readable by server runtime. + STORAGE_PERMISSION_NO_READ = 0 + + // Storage permission for owner write, only the user who owns it may write. + STORAGE_PERMISSION_OWNER_WRITE = 1 + + // Storage permission for no write. The object is only writable by server runtime. + STORAGE_PERMISSION_NO_WRITE = 0 +) + +/* +Error is used to indicate a failure in code. The message and code are returned to the client. +If an Error is used as response for a HTTP/gRPC request, then the server tries to use the error value as the gRPC error code. This will in turn translate to HTTP status codes. + +For more information, please have a look at the following: + + https://github.com/grpc/grpc-go/blob/master/codes/codes.go + https://github.com/grpc-ecosystem/grpc-gateway/blob/master/runtime/errors.go + https://golang.org/pkg/net/http/ +*/ +type Error struct { + Message string + Code int +} + +// Error returns the encapsulated error message. +func (e *Error) Error() string { + return e.Message +} + +/* +NewError returns a new error. The message and code are sent directly to the client. The code field is also optionally translated to gRPC/HTTP code. + + runtime.NewError("Server unavailable", 14) // 14 = Unavailable = 503 HTTP status code +*/ +func NewError(message string, code int) *Error { + return &Error{Message: message, Code: code} +} + +/* +Logger exposes a logging framework to use in modules. It exposes level-specific logging functions and a set of common functions for compatibility. +*/ +type Logger interface { + /* + Log a message with optional arguments at DEBUG level. Arguments are handled in the manner of fmt.Printf. + */ + Debug(format string, v ...interface{}) + /* + Log a message with optional arguments at INFO level. Arguments are handled in the manner of fmt.Printf. + */ + Info(format string, v ...interface{}) + /* + Log a message with optional arguments at WARN level. Arguments are handled in the manner of fmt.Printf. + */ + Warn(format string, v ...interface{}) + /* + Log a message with optional arguments at ERROR level. Arguments are handled in the manner of fmt.Printf. + */ + Error(format string, v ...interface{}) + /* + Return a logger with the specified field set so that they are included in subsequent logging calls. + */ + WithField(key string, v interface{}) Logger + /* + Return a logger with the specified fields set so that they are included in subsequent logging calls. + */ + WithFields(fields map[string]interface{}) Logger + /* + Returns the fields set in this logger. + */ + Fields() map[string]interface{} +} + +/* +Initializer is used to register various callback functions with the server. +It is made available to the InitModule function as an input parameter when the function is invoked by the server when loading the module on server start. + +NOTE: You must not cache the reference to this and reuse it as a later point as this could have unintended side effects. +*/ +type Initializer interface { + /* + GetConfig returns a read only subset of the Nakama configuration values. + */ + GetConfig() (Config, error) + /* + RegisterRpc registers a function with the given ID. This ID can be used within client code to send an RPC message to + execute the function and return the result. Results are always returned as a JSON string (or optionally empty string). + + If there is an issue with the RPC call, return an empty string and the associated error which will be returned to the client. + */ + RegisterRpc(id string, fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, payload string) (string, error)) error + + /* + RegisterBeforeRt registers a function with for a message. Any function may be registered to intercept a message received from a client and operate on it (or reject it) based on custom logic. + This is useful to enforce specific rules on top of the standard features in the server. + + You can return `nil` instead of the `rtapi.Envelope` and this will disable that particular server functionality. + + Message names can be found here: https://heroiclabs.com/docs/runtime-code-basics/#message-names + */ + RegisterBeforeRt(id string, fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *rtapi.Envelope) (*rtapi.Envelope, error)) error + + /* + RegisterAfterRt registers a function for a message. The registered function will be called after the message has been processed in the pipeline. + The custom code will be executed asynchronously after the response message has been sent to a client + + Message names can be found here: https://heroiclabs.com/docs/runtime-code-basics/#message-names + */ + RegisterAfterRt(id string, fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out, in *rtapi.Envelope) error) error + + // RegisterMatchmakerMatched + RegisterMatchmakerMatched(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, entries []MatchmakerEntry) (string, error)) error + + // RegisterMatchmakerOverride + RegisterMatchmakerOverride(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, candidateMatches [][]MatchmakerEntry) (matches [][]MatchmakerEntry)) error + + // RegisterMatchmakerProcessor + RegisterMatchmakerProcessor(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, entries []MatchmakerEntry) (matches [][]MatchmakerEntry)) error + + // RegisterMatch + RegisterMatch(name string, fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule) (Match, error)) error + + // RegisterTournamentEnd + RegisterTournamentEnd(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, tournament *api.Tournament, end, reset int64) error) error + + // RegisterTournamentReset + RegisterTournamentReset(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, tournament *api.Tournament, end, reset int64) error) error + + // RegisterLeaderboardReset + RegisterLeaderboardReset(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, leaderboard *api.Leaderboard, reset int64) error) error + + // RegisterPurchaseNotificationApple + RegisterPurchaseNotificationApple(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, notificationType NotificationType, purchase *api.ValidatedPurchase, payload *AppleNotificationData) error) error + + // RegisterSubscriptionNotificationApple + RegisterSubscriptionNotificationApple(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, notificationType NotificationType, subscription *api.ValidatedSubscription, payload *AppleNotificationData) error) error + + // RegisterPurchaseNotificationGoogle + RegisterPurchaseNotificationGoogle(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, notificationType NotificationType, purchase *api.ValidatedPurchase, providerPayload *PurchaseV2GoogleResponse) error) error + + // RegisterSubscriptionNotificationGoogle + RegisterSubscriptionNotificationGoogle(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, notificationType NotificationType, subscription *api.ValidatedSubscription, providerPayload *SubscriptionV2GoogleResponse) error) error + + // RegisterBeforeGetAccount is used to register a function invoked when the server receives the relevant request. + RegisterBeforeGetAccount(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule) error) error + + // RegisterAfterGetAccount is used to register a function invoked after the server processes the relevant request. + RegisterAfterGetAccount(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.Account) error) error + + // RegisterBeforeUpdateAccount is used to register a function invoked when the server receives the relevant request. + RegisterBeforeUpdateAccount(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.UpdateAccountRequest) (*api.UpdateAccountRequest, error)) error + + // RegisterAfterUpdateAccount is used to register a function invoked after the server processes the relevant request. + RegisterAfterUpdateAccount(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.UpdateAccountRequest) error) error + + // RegisterBeforeDeleteAccount is used to register a function invoked when the server receives the relevant request. + RegisterBeforeDeleteAccount(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule) error) error + + // RegisterAfterDeleteAccount is used to register a function invoked after the server processes the relevant request. + RegisterAfterDeleteAccount(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule) error) error + + // RegisterBeforeSessionRefresh can be used to perform pre-refresh checks. + RegisterBeforeSessionRefresh(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.SessionRefreshRequest) (*api.SessionRefreshRequest, error)) error + + // RegisterAfterSessionRefresh can be used to perform after successful refresh checks. + RegisterAfterSessionRefresh(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.Session, in *api.SessionRefreshRequest) error) error + + // RegisterBeforeSessionLogout can be used to perform pre-logout checks. + RegisterBeforeSessionLogout(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.SessionLogoutRequest) (*api.SessionLogoutRequest, error)) error + + // RegisterAfterSessionLogout can be used to perform after successful logout checks. + RegisterAfterSessionLogout(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.SessionLogoutRequest) error) error + + // RegisterBeforeAuthenticateApple can be used to perform pre-authentication checks. + RegisterBeforeAuthenticateApple(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AuthenticateAppleRequest) (*api.AuthenticateAppleRequest, error)) error + + // RegisterAfterAuthenticateApple can be used to perform after successful authentication checks. + RegisterAfterAuthenticateApple(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.Session, in *api.AuthenticateAppleRequest) error) error + + // RegisterBeforeAuthenticateCustom can be used to perform pre-authentication checks. + // You can use this to process the input (such as decoding custom tokens) and ensure inter-compatibility between Nakama and your own custom system. + RegisterBeforeAuthenticateCustom(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AuthenticateCustomRequest) (*api.AuthenticateCustomRequest, error)) error + + // RegisterAfterAuthenticateCustom can be used to perform after successful authentication checks. + // For instance, you can run special logic if the account was just created like adding them to newcomers leaderboard. + RegisterAfterAuthenticateCustom(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.Session, in *api.AuthenticateCustomRequest) error) error + + // RegisterBeforeAuthenticateDevice can be used to perform pre-authentication checks. + RegisterBeforeAuthenticateDevice(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AuthenticateDeviceRequest) (*api.AuthenticateDeviceRequest, error)) error + + // RegisterAfterAuthenticateDevice can be used to perform after successful authentication checks. + RegisterAfterAuthenticateDevice(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.Session, in *api.AuthenticateDeviceRequest) error) error + + // RegisterBeforeAuthenticateEmail can be used to perform pre-authentication checks. + RegisterBeforeAuthenticateEmail(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AuthenticateEmailRequest) (*api.AuthenticateEmailRequest, error)) error + + // RegisterAfterAuthenticateEmail can be used to perform after successful authentication checks. + RegisterAfterAuthenticateEmail(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.Session, in *api.AuthenticateEmailRequest) error) error + + // RegisterBeforeAuthenticateFacebook can be used to perform pre-authentication checks. + RegisterBeforeAuthenticateFacebook(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AuthenticateFacebookRequest) (*api.AuthenticateFacebookRequest, error)) error + + // RegisterAfterAuthenticateFacebook can be used to perform after successful authentication checks. + RegisterAfterAuthenticateFacebook(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.Session, in *api.AuthenticateFacebookRequest) error) error + + // RegisterBeforeAuthenticateFacebookInstantGame can be used to perform pre-authentication checks. + RegisterBeforeAuthenticateFacebookInstantGame(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AuthenticateFacebookInstantGameRequest) (*api.AuthenticateFacebookInstantGameRequest, error)) error + + // RegisterAfterAuthenticateFacebookInstantGame can be used to perform after successful authentication checks. + RegisterAfterAuthenticateFacebookInstantGame(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.Session, in *api.AuthenticateFacebookInstantGameRequest) error) error + + // RegisterBeforeAuthenticateGameCenter can be used to perform pre-authentication checks. + RegisterBeforeAuthenticateGameCenter(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AuthenticateGameCenterRequest) (*api.AuthenticateGameCenterRequest, error)) error + + // RegisterAfterAuthenticateGameCenter can be used to perform after successful authentication checks. + RegisterAfterAuthenticateGameCenter(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.Session, in *api.AuthenticateGameCenterRequest) error) error + + // RegisterBeforeAuthenticateGoogle can be used to perform pre-authentication checks. + RegisterBeforeAuthenticateGoogle(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AuthenticateGoogleRequest) (*api.AuthenticateGoogleRequest, error)) error + + // RegisterAfterAuthenticateGoogle can be used to perform after successful authentication checks. + RegisterAfterAuthenticateGoogle(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.Session, in *api.AuthenticateGoogleRequest) error) error + + // RegisterBeforeAuthenticateSteam can be used to perform pre-authentication checks. + RegisterBeforeAuthenticateSteam(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AuthenticateSteamRequest) (*api.AuthenticateSteamRequest, error)) error + + // RegisterAfterAuthenticateSteam can be used to perform after successful authentication checks. + RegisterAfterAuthenticateSteam(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.Session, in *api.AuthenticateSteamRequest) error) error + + // RegisterBeforeListChannelMessages can be used to perform additional logic before listing messages on a channel. + RegisterBeforeListChannelMessages(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ListChannelMessagesRequest) (*api.ListChannelMessagesRequest, error)) error + + // RegisterAfterListChannelMessages can be used to perform additional logic after messages for a channel is listed. + RegisterAfterListChannelMessages(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.ChannelMessageList, in *api.ListChannelMessagesRequest) error) error + + // RegisterBeforeListChannelMessages can be used to perform additional logic before listing friends. + RegisterBeforeListFriends(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ListFriendsRequest) (*api.ListFriendsRequest, error)) error + + // RegisterAfterListFriends can be used to perform additional logic after friends are listed. + RegisterAfterListFriends(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.FriendList) error) error + + // RegisterBeforeListFriendsOfFriends can be used to perform additional logic before listing friends of friends. + RegisterBeforeListFriendsOfFriends(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ListFriendsOfFriendsRequest) (*api.ListFriendsOfFriendsRequest, error)) error + + // RegisterAfterListFriendsOfFriends can be used to perform additional logic after listing friends of friends. + RegisterAfterListFriendsOfFriends(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.FriendsOfFriendsList) error) error + + // RegisterBeforeAddFriends can be used to perform additional logic before friends are added. + RegisterBeforeAddFriends(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AddFriendsRequest) (*api.AddFriendsRequest, error)) error + + // RegisterAfterAddFriends can be used to perform additional logic after friends are added. + RegisterAfterAddFriends(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AddFriendsRequest) error) error + + // RegisterBeforeDeleteFriends can be used to perform additional logic before friends are deleted. + RegisterBeforeDeleteFriends(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.DeleteFriendsRequest) (*api.DeleteFriendsRequest, error)) error + + // RegisterAfterDeleteFriends can be used to perform additional logic after friends are deleted. + RegisterAfterDeleteFriends(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.DeleteFriendsRequest) error) error + + // RegisterBeforeBlockFriends can be used to perform additional logic before friends are blocked. + RegisterBeforeBlockFriends(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.BlockFriendsRequest) (*api.BlockFriendsRequest, error)) error + + // RegisterAfterBlockFriends can be used to perform additional logic after friends are blocked. + RegisterAfterBlockFriends(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.BlockFriendsRequest) error) error + + // RegisterBeforeImportFacebookFriends can be used to perform additional logic before Facebook friends are imported. + RegisterBeforeImportFacebookFriends(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ImportFacebookFriendsRequest) (*api.ImportFacebookFriendsRequest, error)) error + + // RegisterAfterImportFacebookFriends can be used to perform additional logic after Facebook friends are imported. + RegisterAfterImportFacebookFriends(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ImportFacebookFriendsRequest) error) error + + // RegisterBeforeImportSteamFriends can be used to perform additional logic before Facebook friends are imported. + RegisterBeforeImportSteamFriends(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ImportSteamFriendsRequest) (*api.ImportSteamFriendsRequest, error)) error + + // RegisterAfterImportSteamFriends can be used to perform additional logic after Facebook friends are imported. + RegisterAfterImportSteamFriends(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ImportSteamFriendsRequest) error) error + + // RegisterBeforeCreateGroup can be used to perform additional logic before a group is created. + RegisterBeforeCreateGroup(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.CreateGroupRequest) (*api.CreateGroupRequest, error)) error + + // RegisterAfterCreateGroup can be used to perform additional logic after a group is created. + RegisterAfterCreateGroup(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.Group, in *api.CreateGroupRequest) error) error + + // RegisterBeforeUpdateGroup can be used to perform additional logic before a group is updated. + RegisterBeforeUpdateGroup(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.UpdateGroupRequest) (*api.UpdateGroupRequest, error)) error + + // RegisterAfterUpdateGroup can be used to perform additional logic after a group is updated. + RegisterAfterUpdateGroup(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.UpdateGroupRequest) error) error + + // RegisterBeforeDeleteGroup can be used to perform additional logic before a group is deleted. + RegisterBeforeDeleteGroup(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.DeleteGroupRequest) (*api.DeleteGroupRequest, error)) error + + // RegisterAfterDeleteGroup can be used to perform additional logic after a group is deleted. + RegisterAfterDeleteGroup(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.DeleteGroupRequest) error) error + + // RegisterBeforeJoinGroup can be used to perform additional logic before user joins a group. + RegisterBeforeJoinGroup(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.JoinGroupRequest) (*api.JoinGroupRequest, error)) error + + // RegisterAfterJoinGroup can be used to perform additional logic after user joins a group. + RegisterAfterJoinGroup(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.JoinGroupRequest) error) error + + // RegisterBeforeLeaveGroup can be used to perform additional logic before user leaves a group. + RegisterBeforeLeaveGroup(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.LeaveGroupRequest) (*api.LeaveGroupRequest, error)) error + + // RegisterAfterLeaveGroup can be used to perform additional logic after user leaves a group. + RegisterAfterLeaveGroup(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.LeaveGroupRequest) error) error + + // RegisterBeforeAddGroupUsers can be used to perform additional logic before user is added to a group. + RegisterBeforeAddGroupUsers(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AddGroupUsersRequest) (*api.AddGroupUsersRequest, error)) error + + // RegisterAfterAddGroupUsers can be used to perform additional logic after user is added to a group. + RegisterAfterAddGroupUsers(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AddGroupUsersRequest) error) error + + // RegisterBeforeBanGroupUsers can be used to perform additional logic before user is banned from a group. + RegisterBeforeBanGroupUsers(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.BanGroupUsersRequest) (*api.BanGroupUsersRequest, error)) error + + // RegisterAfterBanGroupUsers can be used to perform additional logic after user is banned from a group. + RegisterAfterBanGroupUsers(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.BanGroupUsersRequest) error) error + + // RegisterBeforeKickGroupUsers can be used to perform additional logic before user is kicked to a group. + RegisterBeforeKickGroupUsers(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.KickGroupUsersRequest) (*api.KickGroupUsersRequest, error)) error + + // RegisterAfterKickGroupUsers can be used to perform additional logic after user is kicked from a group. + RegisterAfterKickGroupUsers(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.KickGroupUsersRequest) error) error + + // RegisterBeforePromoteGroupUsers can be used to perform additional logic before user is promoted. + RegisterBeforePromoteGroupUsers(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.PromoteGroupUsersRequest) (*api.PromoteGroupUsersRequest, error)) error + + // RegisterAfterPromoteGroupUsers can be used to perform additional logic after user is promoted. + RegisterAfterPromoteGroupUsers(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.PromoteGroupUsersRequest) error) error + + // RegisterBeforeDemoteGroupUsers can be used to perform additional logic before user is demoted. + RegisterBeforeDemoteGroupUsers(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.DemoteGroupUsersRequest) (*api.DemoteGroupUsersRequest, error)) error + + // RegisterAfterDemoteGroupUsers can be used to perform additional logic after user is demoted. + RegisterAfterDemoteGroupUsers(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.DemoteGroupUsersRequest) error) error + + // RegisterBeforeListGroupUsers can be used to perform additional logic before users in a group is listed. + RegisterBeforeListGroupUsers(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ListGroupUsersRequest) (*api.ListGroupUsersRequest, error)) error + + // RegisterAfterListGroupUsers can be used to perform additional logic after users in a group is listed. + RegisterAfterListGroupUsers(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.GroupUserList, in *api.ListGroupUsersRequest) error) error + + // RegisterBeforeListUserGroups can be used to perform additional logic before groups for a user is listed. + RegisterBeforeListUserGroups(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ListUserGroupsRequest) (*api.ListUserGroupsRequest, error)) error + + // RegisterAfterListUserGroups can be used to perform additional logic after groups for a user is listed. + RegisterAfterListUserGroups(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.UserGroupList, in *api.ListUserGroupsRequest) error) error + + // RegisterBeforeListGroups can be used to perform additional logic before groups are listed. + RegisterBeforeListGroups(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ListGroupsRequest) (*api.ListGroupsRequest, error)) error + + // RegisterAfterListGroups can be used to perform additional logic after groups are listed. + RegisterAfterListGroups(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.GroupList, in *api.ListGroupsRequest) error) error + + // RegisterBeforeDeleteLeaderboardRecord can be used to perform additional logic before deleting record from a leaderboard. + RegisterBeforeDeleteLeaderboardRecord(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.DeleteLeaderboardRecordRequest) (*api.DeleteLeaderboardRecordRequest, error)) error + + // RegisterAfterDeleteLeaderboardRecord can be used to perform additional logic after deleting record from a leaderboard. + RegisterAfterDeleteLeaderboardRecord(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.DeleteLeaderboardRecordRequest) error) error + + // RegisterBeforeDeleteTournamentRecord can be used to perform additional logic before deleting record from a leaderboard. + RegisterBeforeDeleteTournamentRecord(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.DeleteTournamentRecordRequest) (*api.DeleteTournamentRecordRequest, error)) error + + // RegisterAfterDeleteTournamentRecord can be used to perform additional logic after deleting record from a leaderboard. + RegisterAfterDeleteTournamentRecord(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.DeleteTournamentRecordRequest) error) error + + // RegisterBeforeListLeaderboardRecords can be used to perform additional logic before listing records from a leaderboard. + RegisterBeforeListLeaderboardRecords(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ListLeaderboardRecordsRequest) (*api.ListLeaderboardRecordsRequest, error)) error + + // RegisterAfterListLeaderboardRecords can be used to perform additional logic after listing records from a leaderboard. + RegisterAfterListLeaderboardRecords(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.LeaderboardRecordList, in *api.ListLeaderboardRecordsRequest) error) error + + // RegisterBeforeWriteLeaderboardRecord can be used to perform additional logic before submitting new record to a leaderboard. + RegisterBeforeWriteLeaderboardRecord(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.WriteLeaderboardRecordRequest) (*api.WriteLeaderboardRecordRequest, error)) error + + // RegisterAfterWriteLeaderboardRecord can be used to perform additional logic after submitting new record to a leaderboard. + RegisterAfterWriteLeaderboardRecord(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.LeaderboardRecord, in *api.WriteLeaderboardRecordRequest) error) error + + // RegisterBeforeListLeaderboardRecordsAroundOwner can be used to perform additional logic before listing records from a leaderboard. + RegisterBeforeListLeaderboardRecordsAroundOwner(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ListLeaderboardRecordsAroundOwnerRequest) (*api.ListLeaderboardRecordsAroundOwnerRequest, error)) error + + // RegisterAfterListLeaderboardRecordsAroundOwner can be used to perform additional logic after listing records from a leaderboard. + RegisterAfterListLeaderboardRecordsAroundOwner(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.LeaderboardRecordList, in *api.ListLeaderboardRecordsAroundOwnerRequest) error) error + + // RegisterBeforeLinkApple can be used to perform additional logic before linking Apple ID to an account. + RegisterBeforeLinkApple(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountApple) (*api.AccountApple, error)) error + + // RegisterAfterLinkApple can be used to perform additional logic after linking Apple ID to an account. + RegisterAfterLinkApple(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountApple) error) error + + // RegisterBeforeLinkCustom can be used to perform additional logic before linking custom ID to an account. + RegisterBeforeLinkCustom(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountCustom) (*api.AccountCustom, error)) error + + // RegisterAfterLinkCustom can be used to perform additional logic after linking custom ID to an account. + RegisterAfterLinkCustom(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountCustom) error) error + + // RegisterBeforeLinkDevice can be used to perform additional logic before linking device ID to an account. + RegisterBeforeLinkDevice(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountDevice) (*api.AccountDevice, error)) error + + // RegisterAfterLinkDevice can be used to perform additional logic after linking device ID to an account. + RegisterAfterLinkDevice(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountDevice) error) error + + // RegisterBeforeLinkEmail can be used to perform additional logic before linking email to an account. + RegisterBeforeLinkEmail(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountEmail) (*api.AccountEmail, error)) error + + // RegisterAfterLinkEmail can be used to perform additional logic after linking email to an account. + RegisterAfterLinkEmail(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountEmail) error) error + + // RegisterBeforeLinkFacebook can be used to perform additional logic before linking Facebook to an account. + RegisterBeforeLinkFacebook(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.LinkFacebookRequest) (*api.LinkFacebookRequest, error)) error + + // RegisterAfterLinkFacebook can be used to perform additional logic after linking Facebook to an account. + RegisterAfterLinkFacebook(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.LinkFacebookRequest) error) error + + // RegisterBeforeLinkFacebookInstantGame can be used to perform additional logic before linking Facebook Instant Game profile to an account. + RegisterBeforeLinkFacebookInstantGame(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountFacebookInstantGame) (*api.AccountFacebookInstantGame, error)) error + + // RegisterAfterLinkFacebookInstantGame can be used to perform additional logic after linking Facebook Instant Game profile to an account. + RegisterAfterLinkFacebookInstantGame(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountFacebookInstantGame) error) error + + // RegisterBeforeLinkGameCenter can be used to perform additional logic before linking GameCenter to an account. + RegisterBeforeLinkGameCenter(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountGameCenter) (*api.AccountGameCenter, error)) error + + // RegisterAfterLinkGameCenter can be used to perform additional logic after linking GameCenter to an account. + RegisterAfterLinkGameCenter(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountGameCenter) error) error + + // RegisterBeforeLinkGoogle can be used to perform additional logic before linking Google to an account. + RegisterBeforeLinkGoogle(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountGoogle) (*api.AccountGoogle, error)) error + + // RegisterAfterLinkGoogle can be used to perform additional logic after linking Google to an account. + RegisterAfterLinkGoogle(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountGoogle) error) error + + // RegisterBeforeLinkSteam can be used to perform additional logic before linking Steam to an account. + RegisterBeforeLinkSteam(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.LinkSteamRequest) (*api.LinkSteamRequest, error)) error + + // RegisterAfterLinkSteam can be used to perform additional logic after linking Steam to an account. + RegisterAfterLinkSteam(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.LinkSteamRequest) error) error + + // RegisterBeforeListMatches can be used to perform additional logic before listing matches. + RegisterBeforeListMatches(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ListMatchesRequest) (*api.ListMatchesRequest, error)) error + + // RegisterAfterListMatches can be used to perform additional logic after listing matches. + RegisterAfterListMatches(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.MatchList, in *api.ListMatchesRequest) error) error + + // RegisterBeforeMatchmakerStats is used to register a function invoked when the server receives the relevant request. + RegisterBeforeGetMatchmakerStats(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule) error) error + + // RegisterAfterMarchmakerStats is used to register a function invoked after the server processes the relevant request. + RegisterAfterGetMatchmakerStats(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.MatchmakerStats) error) error + + // RegisterBeforeListNotifications can be used to perform additional logic before listing notifications for a user. + RegisterBeforeListNotifications(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ListNotificationsRequest) (*api.ListNotificationsRequest, error)) error + + // RegisterAfterListNotifications can be used to perform additional logic after listing notifications for a user. + RegisterAfterListNotifications(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.NotificationList, in *api.ListNotificationsRequest) error) error + + // RegisterBeforeDeleteNotifications can be used to perform additional logic before deleting notifications. + RegisterBeforeDeleteNotifications(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.DeleteNotificationsRequest) (*api.DeleteNotificationsRequest, error)) error + + // RegisterAfterDeleteNotifications can be used to perform additional logic after deleting notifications. + RegisterAfterDeleteNotifications(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.DeleteNotificationsRequest) error) error + + // RegisterBeforeListStorageObjects can be used to perform additional logic before listing storage objects. + RegisterBeforeListStorageObjects(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ListStorageObjectsRequest) (*api.ListStorageObjectsRequest, error)) error + + // RegisterAfterListStorageObjects can be used to perform additional logic after listing storage objects. + RegisterAfterListStorageObjects(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.StorageObjectList, in *api.ListStorageObjectsRequest) error) error + + // RegisterBeforeReadStorageObjects can be used to perform additional logic before reading storage objects. + RegisterBeforeReadStorageObjects(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ReadStorageObjectsRequest) (*api.ReadStorageObjectsRequest, error)) error + + // RegisterAfterReadStorageObjects can be used to perform additional logic after reading storage objects. + RegisterAfterReadStorageObjects(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.StorageObjects, in *api.ReadStorageObjectsRequest) error) error + + // RegisterBeforeWriteStorageObjects can be used to perform additional logic before writing storage objects. + RegisterBeforeWriteStorageObjects(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.WriteStorageObjectsRequest) (*api.WriteStorageObjectsRequest, error)) error + + // RegisterAfterWriteStorageObjects can be used to perform additional logic after writing storage objects. + RegisterAfterWriteStorageObjects(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.StorageObjectAcks, in *api.WriteStorageObjectsRequest) error) error + + // RegisterBeforeDeleteStorageObjects can be used to perform additional logic before deleting storage objects. + RegisterBeforeDeleteStorageObjects(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.DeleteStorageObjectsRequest) (*api.DeleteStorageObjectsRequest, error)) error + + // RegisterAfterDeleteStorageObjects can be used to perform additional logic after deleting storage objects. + RegisterAfterDeleteStorageObjects(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.DeleteStorageObjectsRequest) error) error + + // RegisterBeforeJoinTournament can be used to perform additional logic before user joins a tournament. + RegisterBeforeJoinTournament(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.JoinTournamentRequest) (*api.JoinTournamentRequest, error)) error + + // RegisterAfterJoinTournament can be used to perform additional logic after user joins a tournament. + RegisterAfterJoinTournament(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.JoinTournamentRequest) error) error + + // RegisterBeforeListTournamentRecords can be used to perform additional logic before listing tournament records. + RegisterBeforeListTournamentRecords(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ListTournamentRecordsRequest) (*api.ListTournamentRecordsRequest, error)) error + + // RegisterAfterListTournamentRecords can be used to perform additional logic after listing tournament records. + RegisterAfterListTournamentRecords(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.TournamentRecordList, in *api.ListTournamentRecordsRequest) error) error + + // RegisterBeforeListTournaments can be used to perform additional logic before listing tournaments. + RegisterBeforeListTournaments(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ListTournamentsRequest) (*api.ListTournamentsRequest, error)) error + + // RegisterAfterListTournaments can be used to perform additional logic after listing tournaments. + RegisterAfterListTournaments(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.TournamentList, in *api.ListTournamentsRequest) error) error + + // RegisterBeforeWriteTournamentRecord can be used to perform additional logic before writing tournament records. + RegisterBeforeWriteTournamentRecord(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.WriteTournamentRecordRequest) (*api.WriteTournamentRecordRequest, error)) error + + // RegisterAfterWriteTournamentRecord can be used to perform additional logic after writing tournament records. + RegisterAfterWriteTournamentRecord(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.LeaderboardRecord, in *api.WriteTournamentRecordRequest) error) error + + // RegisterBeforeListTournamentRecordsAroundOwner can be used to perform additional logic before listing tournament records. + RegisterBeforeListTournamentRecordsAroundOwner(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ListTournamentRecordsAroundOwnerRequest) (*api.ListTournamentRecordsAroundOwnerRequest, error)) error + + // RegisterAfterListTournamentRecordsAroundOwner can be used to perform additional logic after listing tournament records. + RegisterAfterListTournamentRecordsAroundOwner(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.TournamentRecordList, in *api.ListTournamentRecordsAroundOwnerRequest) error) error + + // RegisterBeforeValidatePurchaseApple can be used to perform additional logic before validating an Apple Store IAP receipt. + RegisterBeforeValidatePurchaseApple(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ValidatePurchaseAppleRequest) (*api.ValidatePurchaseAppleRequest, error)) error + + // RegisterAfterValidatePurchaseApple can be used to perform additional logic after validating an Apple Store IAP receipt. + RegisterAfterValidatePurchaseApple(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.ValidatePurchaseResponse, in *api.ValidatePurchaseAppleRequest) error) error + + // RegisterBeforeValidateSubscriptionApple can be used to perform additional logic before validation an Apple Store Subscription receipt. + RegisterBeforeValidateSubscriptionApple(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ValidateSubscriptionAppleRequest) (*api.ValidateSubscriptionAppleRequest, error)) error + + // RegisterAfterValidateSubscriptionApple can be used to perform additional logic after validation an Apple Store Subscription receipt. + RegisterAfterValidateSubscriptionApple(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.ValidateSubscriptionResponse, in *api.ValidateSubscriptionAppleRequest) error) error + + // RegisterBeforeValidatePurchaseGoogle can be used to perform additional logic before validating a Google Play Store IAP receipt. + RegisterBeforeValidatePurchaseGoogle(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ValidatePurchaseGoogleRequest) (*api.ValidatePurchaseGoogleRequest, error)) error + + // RegisterAfterValidatePurchaseGoogle can be used to perform additional logic after validating a Google Play Store IAP receipt. + RegisterAfterValidatePurchaseGoogle(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.ValidatePurchaseResponse, in *api.ValidatePurchaseGoogleRequest) error) error + + // RegisterBeforeValidateSubscriptionGoogle can be used to perform additional logic before validation an Google Store Subscription receipt. + RegisterBeforeValidateSubscriptionGoogle(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ValidateSubscriptionGoogleRequest) (*api.ValidateSubscriptionGoogleRequest, error)) error + + // RegisterAfterValidateSubscriptionGoogle can be used to perform additional logic after validation an Google Store Subscription receipt. + RegisterAfterValidateSubscriptionGoogle(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.ValidateSubscriptionResponse, in *api.ValidateSubscriptionGoogleRequest) error) error + + // RegisterBeforeValidatePurchaseHuawei can be used to perform additional logic before validating an Huawei App Gallery IAP receipt. + RegisterBeforeValidatePurchaseHuawei(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ValidatePurchaseHuaweiRequest) (*api.ValidatePurchaseHuaweiRequest, error)) error + + // RegisterAfterValidatePurchaseHuawei can be used to perform additional logic after validating an Huawei App Gallery IAP receipt. + RegisterAfterValidatePurchaseHuawei(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.ValidatePurchaseResponse, in *api.ValidatePurchaseHuaweiRequest) error) error + + // RegisterBeforeValidatePurchaseFacebookInstant can be used to perform additional logic before validating an Facebook Instant IAP receipt. + RegisterBeforeValidatePurchaseFacebookInstant(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ValidatePurchaseFacebookInstantRequest) (*api.ValidatePurchaseFacebookInstantRequest, error)) error + + // RegisterAfterValidatePurchaseFacebookInstant can be used to perform additional logic after validating an Facebook Instant IAP receipt. + RegisterAfterValidatePurchaseFacebookInstant(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.ValidatePurchaseResponse, in *api.ValidatePurchaseFacebookInstantRequest) error) error + + // RegisterBeforeListSubscriptions can be used to perform additional logic before listing subscriptions. + RegisterBeforeListSubscriptions(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ListSubscriptionsRequest) (*api.ListSubscriptionsRequest, error)) error + + // RegisterAfterListSubscriptions can be used to perform additional logic after listing subscriptions. + RegisterAfterListSubscriptions(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.SubscriptionList, in *api.ListSubscriptionsRequest) error) error + + // RegisterBeforeGetSubscription can be used to perform additional logic before listing subscriptions. + RegisterBeforeGetSubscription(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.GetSubscriptionRequest) (*api.GetSubscriptionRequest, error)) error + + // RegisterAfterGetSubscription can be used to perform additional logic after listing subscriptions. + RegisterAfterGetSubscription(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.ValidatedSubscription, in *api.GetSubscriptionRequest) error) error + + // RegisterBeforeUnlinkApple can be used to perform additional logic before Apple ID is unlinked from an account. + RegisterBeforeUnlinkApple(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountApple) (*api.AccountApple, error)) error + + // RegisterAfterUnlinkApple can be used to perform additional logic after Apple ID is unlinked from an account. + RegisterAfterUnlinkApple(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountApple) error) error + + // RegisterBeforeUnlinkCustom can be used to perform additional logic before custom ID is unlinked from an account. + RegisterBeforeUnlinkCustom(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountCustom) (*api.AccountCustom, error)) error + + // RegisterAfterUnlinkCustom can be used to perform additional logic after custom ID is unlinked from an account. + RegisterAfterUnlinkCustom(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountCustom) error) error + + // RegisterBeforeUnlinkDevice can be used to perform additional logic before device ID is unlinked from an account. + RegisterBeforeUnlinkDevice(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountDevice) (*api.AccountDevice, error)) error + + // RegisterAfterUnlinkDevice can be used to perform additional logic after device ID is unlinked from an account. + RegisterAfterUnlinkDevice(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountDevice) error) error + + // RegisterBeforeUnlinkEmail can be used to perform additional logic before email is unlinked from an account. + RegisterBeforeUnlinkEmail(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountEmail) (*api.AccountEmail, error)) error + + // RegisterAfterUnlinkEmail can be used to perform additional logic after email is unlinked from an account. + RegisterAfterUnlinkEmail(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountEmail) error) error + + // RegisterBeforeUnlinkFacebook can be used to perform additional logic before Facebook is unlinked from an account. + RegisterBeforeUnlinkFacebook(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountFacebook) (*api.AccountFacebook, error)) error + + // RegisterAfterUnlinkFacebook can be used to perform additional logic after Facebook is unlinked from an account. + RegisterAfterUnlinkFacebook(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountFacebook) error) error + + // RegisterBeforeUnlinkFacebookInstantGame can be used to perform additional logic before Facebook Instant Game profile is unlinked from an account. + RegisterBeforeUnlinkFacebookInstantGame(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountFacebookInstantGame) (*api.AccountFacebookInstantGame, error)) error + + // RegisterAfterUnlinkFacebookInstantGame can be used to perform additional logic after Facebook Instant Game profile is unlinked from an account. + RegisterAfterUnlinkFacebookInstantGame(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountFacebookInstantGame) error) error + + // RegisterBeforeUnlinkGameCenter can be used to perform additional logic before GameCenter is unlinked from an account. + RegisterBeforeUnlinkGameCenter(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountGameCenter) (*api.AccountGameCenter, error)) error + + // RegisterAfterUnlinkGameCenter can be used to perform additional logic after GameCenter is unlinked from an account. + RegisterAfterUnlinkGameCenter(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountGameCenter) error) error + + // RegisterBeforeUnlinkGoogle can be used to perform additional logic before Google is unlinked from an account. + RegisterBeforeUnlinkGoogle(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountGoogle) (*api.AccountGoogle, error)) error + + // RegisterAfterUnlinkGoogle can be used to perform additional logic after Google is unlinked from an account. + RegisterAfterUnlinkGoogle(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountGoogle) error) error + + // RegisterBeforeUnlinkSteam can be used to perform additional logic before Steam is unlinked from an account. + RegisterBeforeUnlinkSteam(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountSteam) (*api.AccountSteam, error)) error + + // RegisterAfterUnlinkSteam can be used to perform additional logic after Steam is unlinked from an account. + RegisterAfterUnlinkSteam(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.AccountSteam) error) error + + // RegisterBeforeGetUsers can be used to perform additional logic before retrieving users. + RegisterBeforeGetUsers(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.GetUsersRequest) (*api.GetUsersRequest, error)) error + + // RegisterAfterGetUsers can be used to perform additional logic after retrieving users. + RegisterAfterGetUsers(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.Users, in *api.GetUsersRequest) error) error + + // RegisterBeforeListParties can be used to perform additional logic before retrieving parties. + RegisterBeforeListParties(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, in *api.ListPartiesRequest) (*api.ListPartiesRequest, error)) error + + // RegisterAfterListParties can be used to perform additiona logic after retrieving parties. + RegisterAfterListParties(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, out *api.PartyList, in *api.ListPartiesRequest) error) error + + // RegisterEvent can be used to define a function handler that triggers when custom events are received or generated. + RegisterEvent(fn func(ctx context.Context, logger Logger, evt *api.Event)) error + + // RegisterEventSessionStart can be used to define functions triggered when client sessions start. + RegisterEventSessionStart(fn func(ctx context.Context, logger Logger, evt *api.Event)) error + + // RegisterEventSessionEnd can be used to define functions triggered when client sessions end. + RegisterEventSessionEnd(fn func(ctx context.Context, logger Logger, evt *api.Event)) error + + // RegisterStorageIndex creates a new storage index definition and triggers an indexing process if needed. + RegisterStorageIndex(name, collection, key string, fields []string, sortableFields []string, maxEntries int, indexOnly bool) error + + // RegisterStorageIndexFilter can be used to define a filtering function for a given storage index. + RegisterStorageIndexFilter(indexName string, fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, write *StorageWrite) bool) error + + // RegisterFleetManager can be used to register a FleetManager implementation that can be retrieved from the runtime using GetFleetManager(). + RegisterFleetManager(fleetManagerInit FleetManagerInitializer) error + + // RegisterShutdown can be used to register a function that is executed once the server receives a termination signal. + // This function only fires if shutdown_grace_sec > 0 and will be terminated early if its execution takes longer than the configured grace seconds. + RegisterShutdown(fn func(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule)) error + + // RegisterHttp attaches a new HTTP handler to a specified path on the main client API server endpoint. + RegisterHttp(pathPattern string, handler func(http.ResponseWriter, *http.Request), methods ...string) error +} + +type PresenceReason uint8 + +const ( + PresenceReasonUnknown PresenceReason = iota + PresenceReasonJoin + PresenceReasonUpdate + PresenceReasonLeave + PresenceReasonDisconnect +) + +type PresenceMeta interface { + GetHidden() bool + GetPersistence() bool + GetUsername() string + GetStatus() string + GetReason() PresenceReason +} + +type Presence interface { + PresenceMeta + GetUserId() string + GetSessionId() string + GetNodeId() string +} + +type MatchmakerEntry interface { + GetPresence() Presence + GetTicket() string + GetProperties() map[string]interface{} + GetPartyId() string + GetCreateTime() int64 +} + +type MatchData interface { + Presence + GetOpCode() int64 + GetData() []byte + GetReliable() bool + GetReceiveTime() int64 +} + +type MatchDispatcher interface { + BroadcastMessage(opCode int64, data []byte, presences []Presence, sender Presence, reliable bool) error + BroadcastMessageDeferred(opCode int64, data []byte, presences []Presence, sender Presence, reliable bool) error + MatchKick(presences []Presence) error + MatchLabelUpdate(label string) error +} + +type Match interface { + MatchInit(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, params map[string]interface{}) (interface{}, int, string) + MatchJoinAttempt(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, dispatcher MatchDispatcher, tick int64, state interface{}, presence Presence, metadata map[string]string) (interface{}, bool, string) + MatchJoin(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, dispatcher MatchDispatcher, tick int64, state interface{}, presences []Presence) interface{} + MatchLeave(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, dispatcher MatchDispatcher, tick int64, state interface{}, presences []Presence) interface{} + MatchLoop(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, dispatcher MatchDispatcher, tick int64, state interface{}, messages []MatchData) interface{} + MatchTerminate(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, dispatcher MatchDispatcher, tick int64, state interface{}, graceSeconds int) interface{} + MatchSignal(ctx context.Context, logger Logger, db *sql.DB, nk NakamaModule, dispatcher MatchDispatcher, tick int64, state interface{}, data string) (interface{}, string) +} + +type AccountUpdate struct { + UserID string + Username string + Metadata map[string]interface{} + DisplayName string + Timezone string + Location string + LangTag string + AvatarUrl string +} + +type NotificationSend struct { + UserID string + Subject string + Content map[string]interface{} + Code int + Sender string + Persistent bool +} + +type NotificationDelete struct { + UserID string + NotificationID string +} + +type Notification struct { + Id string + UserID string + Subject string + Content map[string]any + Code int + Sender string + CreateTime *timestamppb.Timestamp + Persistent bool +} + +type NotificationUpdate struct { + Id string + Subject *string + Content map[string]any + Sender *string +} + +type WalletUpdate struct { + UserID string + Changeset map[string]int64 + Metadata map[string]interface{} +} + +type WalletUpdateResult struct { + UserID string + Updated map[string]int64 + Previous map[string]int64 +} + +type WalletNegativeError struct { + UserID string + Path string + Current int64 + Amount int64 +} + +func (e *WalletNegativeError) Error() string { + return fmt.Sprintf("wallet update rejected negative value at path '%v'", e.Path) +} + +type WalletLedgerItem interface { + GetID() string + GetUserID() string + GetCreateTime() int64 + GetUpdateTime() int64 + GetChangeset() map[string]int64 + GetMetadata() map[string]interface{} +} + +type StorageRead struct { + Collection string + Key string + UserID string +} + +type StorageWrite struct { + Collection string + Key string + UserID string + Value string + Version string + PermissionRead int + PermissionWrite int +} + +type StorageDelete struct { + Collection string + Key string + UserID string + Version string +} + +type ChannelType int + +const ( + Room ChannelType = iota + 1 + DirectMessage + Group +) + +type NakamaModule interface { + AuthenticateApple(ctx context.Context, token, username string, create bool) (string, string, bool, error) + AuthenticateCustom(ctx context.Context, id, username string, create bool) (string, string, bool, error) + AuthenticateDevice(ctx context.Context, id, username string, create bool) (string, string, bool, error) + AuthenticateEmail(ctx context.Context, email, password, username string, create bool) (string, string, bool, error) + AuthenticateFacebook(ctx context.Context, token string, importFriends bool, username string, create bool) (string, string, bool, error) + AuthenticateFacebookInstantGame(ctx context.Context, signedPlayerInfo string, username string, create bool) (string, string, bool, error) + AuthenticateGameCenter(ctx context.Context, playerID, bundleID string, timestamp int64, salt, signature, publicKeyUrl, username string, create bool) (string, string, bool, error) + AuthenticateGoogle(ctx context.Context, token, username string, create bool) (string, string, bool, error) + AuthenticateSteam(ctx context.Context, token, username string, create bool) (string, string, bool, error) + + AuthenticateTokenGenerate(userID, username string, exp int64, vars map[string]string) (string, int64, error) + + AccountGetId(ctx context.Context, userID string) (*api.Account, error) + AccountsGetId(ctx context.Context, userIDs []string) ([]*api.Account, error) + AccountUpdateId(ctx context.Context, userID, username string, metadata map[string]interface{}, displayName, timezone, location, langTag, avatarUrl string) error + + AccountDeleteId(ctx context.Context, userID string, recorded bool) error + AccountExportId(ctx context.Context, userID string) (string, error) + + UsersGetId(ctx context.Context, userIDs []string, facebookIDs []string) ([]*api.User, error) + UsersGetUsername(ctx context.Context, usernames []string) ([]*api.User, error) + UsersGetFriendStatus(ctx context.Context, userID string, userIDs []string) ([]*api.Friend, error) + UsersGetRandom(ctx context.Context, count int) ([]*api.User, error) + UsersBanId(ctx context.Context, userIDs []string) error + UsersUnbanId(ctx context.Context, userIDs []string) error + + LinkApple(ctx context.Context, userID, token string) error + LinkCustom(ctx context.Context, userID, customID string) error + LinkDevice(ctx context.Context, userID, deviceID string) error + LinkEmail(ctx context.Context, userID, email, password string) error + LinkFacebook(ctx context.Context, userID, username, token string, importFriends bool) error + LinkFacebookInstantGame(ctx context.Context, userID, signedPlayerInfo string) error + LinkGameCenter(ctx context.Context, userID, playerID, bundleID string, timestamp int64, salt, signature, publicKeyUrl string) error + LinkGoogle(ctx context.Context, userID, token string) error + LinkSteam(ctx context.Context, userID, username, token string, importFriends bool) error + + CronPrev(expression string, timestamp int64) (int64, error) + CronNext(expression string, timestamp int64) (int64, error) + ReadFile(path string) (*os.File, error) + + UnlinkApple(ctx context.Context, userID, token string) error + UnlinkCustom(ctx context.Context, userID, customID string) error + UnlinkDevice(ctx context.Context, userID, deviceID string) error + UnlinkEmail(ctx context.Context, userID, email string) error + UnlinkFacebook(ctx context.Context, userID, token string) error + UnlinkFacebookInstantGame(ctx context.Context, userID, signedPlayerInfo string) error + UnlinkGameCenter(ctx context.Context, userID, playerID, bundleID string, timestamp int64, salt, signature, publicKeyUrl string) error + UnlinkGoogle(ctx context.Context, userID, token string) error + UnlinkSteam(ctx context.Context, userID, token string) error + + StreamUserList(mode uint8, subject, subcontext, label string, includeHidden, includeNotHidden bool) ([]Presence, error) + StreamUserGet(mode uint8, subject, subcontext, label, userID, sessionID string) (PresenceMeta, error) + StreamUserJoin(mode uint8, subject, subcontext, label, userID, sessionID string, hidden, persistence bool, status string) (bool, error) + StreamUserUpdate(mode uint8, subject, subcontext, label, userID, sessionID string, hidden, persistence bool, status string) error + StreamUserLeave(mode uint8, subject, subcontext, label, userID, sessionID string) error + StreamUserKick(mode uint8, subject, subcontext, label string, presence Presence) error + StreamCount(mode uint8, subject, subcontext, label string) (int, error) + StreamClose(mode uint8, subject, subcontext, label string) error + StreamSend(mode uint8, subject, subcontext, label, data string, presences []Presence, reliable bool) error + StreamSendRaw(mode uint8, subject, subcontext, label string, msg *rtapi.Envelope, presences []Presence, reliable bool) error + + SessionDisconnect(ctx context.Context, sessionID string, reason ...PresenceReason) error + SessionLogout(userID, token, refreshToken string) error + + MatchCreate(ctx context.Context, module string, params map[string]interface{}) (string, error) + MatchGet(ctx context.Context, id string) (*api.Match, error) + MatchList(ctx context.Context, limit int, authoritative bool, label string, minSize, maxSize *int, query string) ([]*api.Match, error) + MatchSignal(ctx context.Context, id string, data string) (string, error) + + NotificationSend(ctx context.Context, userID, subject string, content map[string]interface{}, code int, sender string, persistent bool) error + NotificationsList(ctx context.Context, userID string, limit int, cursor string) ([]*api.Notification, string, error) + NotificationsSend(ctx context.Context, notifications []*NotificationSend) error + NotificationSendAll(ctx context.Context, subject string, content map[string]interface{}, code int, persistent bool) error + NotificationsUpdate(ctx context.Context, updates ...NotificationUpdate) error + NotificationsDelete(ctx context.Context, notifications []*NotificationDelete) error + NotificationsGetId(ctx context.Context, userID string, ids []string) ([]*Notification, error) + NotificationsDeleteId(ctx context.Context, userID string, ids []string) error + + WalletUpdate(ctx context.Context, userID string, changeset map[string]int64, metadata map[string]interface{}, updateLedger bool) (updated map[string]int64, previous map[string]int64, err error) + WalletsUpdate(ctx context.Context, updates []*WalletUpdate, updateLedger bool) ([]*WalletUpdateResult, error) + WalletLedgerUpdate(ctx context.Context, itemID string, metadata map[string]interface{}) (WalletLedgerItem, error) + WalletLedgerList(ctx context.Context, userID string, limit int, cursor string) ([]WalletLedgerItem, string, error) + + StorageList(ctx context.Context, callerID, userID, collection string, limit int, cursor string) ([]*api.StorageObject, string, error) + StorageRead(ctx context.Context, reads []*StorageRead) ([]*api.StorageObject, error) + StorageWrite(ctx context.Context, writes []*StorageWrite) ([]*api.StorageObjectAck, error) + StorageDelete(ctx context.Context, deletes []*StorageDelete) error + StorageIndexList(ctx context.Context, callerID, indexName, query string, limit int, order []string, cursor string) (*api.StorageObjects, string, error) + + MultiUpdate(ctx context.Context, accountUpdates []*AccountUpdate, storageWrites []*StorageWrite, storageDeletes []*StorageDelete, walletUpdates []*WalletUpdate, updateLedger bool) ([]*api.StorageObjectAck, []*WalletUpdateResult, error) + + LeaderboardCreate(ctx context.Context, id string, authoritative bool, sortOrder, operator, resetSchedule string, metadata map[string]interface{}, enableRanks bool) error + LeaderboardDelete(ctx context.Context, id string) error + LeaderboardList(limit int, cursor string) (*api.LeaderboardList, error) + LeaderboardRanksDisable(ctx context.Context, id string) error + LeaderboardRecordsList(ctx context.Context, id string, ownerIDs []string, limit int, cursor string, expiry int64) (records []*api.LeaderboardRecord, ownerRecords []*api.LeaderboardRecord, nextCursor string, prevCursor string, err error) + LeaderboardRecordsListCursorFromRank(id string, rank, overrideExpiry int64) (string, error) + LeaderboardRecordWrite(ctx context.Context, id, ownerID, username string, score, subscore int64, metadata map[string]interface{}, overrideOperator *int) (*api.LeaderboardRecord, error) + LeaderboardRecordDelete(ctx context.Context, id, ownerID string) error + LeaderboardsGetId(ctx context.Context, ids []string) ([]*api.Leaderboard, error) + LeaderboardRecordsHaystack(ctx context.Context, id, ownerID string, limit int, cursor string, expiry int64) (*api.LeaderboardRecordList, error) + + PurchaseValidateApple(ctx context.Context, userID, receipt string, persist bool, passwordOverride ...string) (*api.ValidatePurchaseResponse, error) + PurchaseValidateGoogle(ctx context.Context, userID, receipt string, persist bool, overrides ...struct { + ClientEmail string + PrivateKey string + }) (*api.ValidatePurchaseResponse, error) + PurchaseValidateHuawei(ctx context.Context, userID, signature, inAppPurchaseData string, persist bool) (*api.ValidatePurchaseResponse, error) + PurchaseValidateFacebookInstant(ctx context.Context, userID, signedRequest string, persist bool) (*api.ValidatePurchaseResponse, error) + PurchasesList(ctx context.Context, userID string, limit int, cursor string) (*api.PurchaseList, error) + PurchaseGetByTransactionId(ctx context.Context, transactionID string) (*api.ValidatedPurchase, error) + + SubscriptionValidateApple(ctx context.Context, userID, receipt string, persist bool, passwordOverride ...string) (*api.ValidateSubscriptionResponse, error) + SubscriptionValidateGoogle(ctx context.Context, userID, receipt string, persist bool, overrides ...struct { + ClientEmail string + PrivateKey string + }) (*api.ValidateSubscriptionResponse, error) + SubscriptionsList(ctx context.Context, userID string, limit int, cursor string) (*api.SubscriptionList, error) + SubscriptionGetByProductId(ctx context.Context, userID, productID string) (*api.ValidatedSubscription, error) + + TournamentCreate(ctx context.Context, id string, authoritative bool, sortOrder, operator, resetSchedule string, metadata map[string]interface{}, title, description string, category, startTime, endTime, duration, maxSize, maxNumScore int, joinRequired, enableRanks bool) error + TournamentDelete(ctx context.Context, id string) error + TournamentAddAttempt(ctx context.Context, id, ownerID string, count int) error + TournamentJoin(ctx context.Context, id, ownerID, username string) error + TournamentsGetId(ctx context.Context, tournamentIDs []string) ([]*api.Tournament, error) + TournamentList(ctx context.Context, categoryStart, categoryEnd, startTime, endTime, limit int, cursor string) (*api.TournamentList, error) + TournamentRanksDisable(ctx context.Context, id string) error + TournamentRecordsList(ctx context.Context, tournamentId string, ownerIDs []string, limit int, cursor string, overrideExpiry int64) (records []*api.LeaderboardRecord, ownerRecords []*api.LeaderboardRecord, prevCursor string, nextCursor string, err error) + TournamentRecordWrite(ctx context.Context, id, ownerID, username string, score, subscore int64, metadata map[string]interface{}, operatorOverride *int) (*api.LeaderboardRecord, error) + TournamentRecordDelete(ctx context.Context, id, ownerID string) error + TournamentRecordsHaystack(ctx context.Context, id, ownerID string, limit int, cursor string, expiry int64) (*api.TournamentRecordList, error) + + GroupsGetId(ctx context.Context, groupIDs []string) ([]*api.Group, error) + GroupCreate(ctx context.Context, userID, name, creatorID, langTag, description, avatarUrl string, open bool, metadata map[string]interface{}, maxCount int) (*api.Group, error) + GroupUpdate(ctx context.Context, id, userID, name, creatorID, langTag, description, avatarUrl string, open bool, metadata map[string]interface{}, maxCount int) error + GroupDelete(ctx context.Context, id string) error + GroupUserJoin(ctx context.Context, groupID, userID, username string) error + GroupUserLeave(ctx context.Context, groupID, userID, username string) error + GroupUsersAdd(ctx context.Context, callerID, groupID string, userIDs []string) error + GroupUsersBan(ctx context.Context, callerID, groupID string, userIDs []string) error + GroupUsersKick(ctx context.Context, callerID, groupID string, userIDs []string) error + GroupUsersPromote(ctx context.Context, callerID, groupID string, userIDs []string) error + GroupUsersDemote(ctx context.Context, callerID, groupID string, userIDs []string) error + GroupUsersList(ctx context.Context, id string, limit int, state *int, cursor string) ([]*api.GroupUserList_GroupUser, string, error) + GroupsList(ctx context.Context, name, langTag string, members *int, open *bool, limit int, cursor string) ([]*api.Group, string, error) + GroupsGetRandom(ctx context.Context, count int) ([]*api.Group, error) + UserGroupsList(ctx context.Context, userID string, limit int, state *int, cursor string) ([]*api.UserGroupList_UserGroup, string, error) + + FriendMetadataUpdate(ctx context.Context, userID string, friendUserId string, metadata map[string]any) error + FriendsList(ctx context.Context, userID string, limit int, state *int, cursor string) ([]*api.Friend, string, error) + FriendsOfFriendsList(ctx context.Context, userID string, limit int, cursor string) ([]*api.FriendsOfFriendsList_FriendOfFriend, string, error) + FriendsAdd(ctx context.Context, userID string, username string, ids []string, usernames []string, metadata map[string]any) error + FriendsDelete(ctx context.Context, userID string, username string, ids []string, usernames []string) error + FriendsBlock(ctx context.Context, userID string, username string, ids []string, usernames []string) error + + Event(ctx context.Context, evt *api.Event) error + + MetricsCounterAdd(name string, tags map[string]string, delta int64) + MetricsGaugeSet(name string, tags map[string]string, value float64) + MetricsTimerRecord(name string, tags map[string]string, value time.Duration) + + ChannelIdBuild(ctx context.Context, sender string, target string, chanType ChannelType) (string, error) + ChannelMessageSend(ctx context.Context, channelID string, content map[string]interface{}, senderId, senderUsername string, persist bool) (*rtapi.ChannelMessageAck, error) + ChannelMessageUpdate(ctx context.Context, channelID, messageID string, content map[string]interface{}, senderId, senderUsername string, persist bool) (*rtapi.ChannelMessageAck, error) + ChannelMessageRemove(ctx context.Context, channelId, messageId string, senderId, senderUsername string, persist bool) (*rtapi.ChannelMessageAck, error) + ChannelMessagesList(ctx context.Context, channelId string, limit int, forward bool, cursor string) (messages []*api.ChannelMessage, nextCursor string, prevCursor string, err error) + + PartyList(ctx context.Context, limit int, open *bool, showHidden bool, query, cursor string) ([]*api.Party, string, error) + + StatusFollow(sessionID string, userIDs []string) error + StatusUnfollow(sessionID string, userIDs []string) error + + GetSatori() Satori + GetFleetManager() FleetManager +} + +/* +Nakama fleet manager definitions. +*/ +type InstanceInfo struct { + // A platform-specific unique instance identifier. Identifiers may be recycled for + // future use, but the underlying Fleet Manager platform is expected to ensure + // uniqueness at least among concurrently running instances. + Id string `json:"id"` + // Connection information in a platform-specific format, usually "address:port" + ConnectionInfo *ConnectionInfo `json:"connection_info"` + // When this instance was first created. + CreateTime time.Time `json:"create_time"` + // Number of active player sessions on the server + PlayerCount int `json:"player_count"` + // Status + Status string `json:"status"` + // Application-specific data for use in indexing and listings. + Metadata map[string]any `json:"metadata"` +} + +type ConnectionInfo struct { + IpAddress string `json:"ip_address"` + DnsName string `json:"dns_name"` + Port int `json:"port"` +} + +type JoinInfo struct { + InstanceInfo *InstanceInfo `json:"instance_info"` + SessionInfo []*SessionInfo `json:"session_info"` +} + +type SessionInfo struct { + UserId string `json:"user_id"` + SessionId string `json:"session_id"` +} + +type FmCreateStatus int + +const ( + // Create successfully created a new game instance. + CreateSuccess FmCreateStatus = iota + // Create request could not find a suitable instance within the configured timeout. + CreateTimeout + // Create failed to create a new game instance. + CreateError +) + +type FmCallbackHandler interface { + // Generate a new callback id. + GenerateCallbackId() string + // Set the callback indexed by the generated id. + SetCallback(callbackId string, fn FmCreateCallbackFn) + // Invoke a callback by callback Id. + InvokeCallback(callbackId string, status FmCreateStatus, instanceInfo *InstanceInfo, sessionInfo []*SessionInfo, metadata map[string]any, err error) +} + +type FleetUserLatencies struct { + // User id + UserId string + // Latency experienced by the user contacting a server in a fleet instance region. + LatencyInMilliseconds float32 + // Region associated to the experienced latency value. + RegionIdentifier string +} + +// FmCreateCallbackFn is the function that is invoked when Create asynchronously succeeds or fails (due to timeout or issues bringing up a new instance). +// The function params include all the information needed to inform a client with a realtime connection to the server of the status of the Create request, +// including the new instance connection information in case of success. +// If status != CreateSuccess, then instanceInfo, sessionInfo and metadata will be nil and err will contain an error message. +// If no userIds were provided to Create, then sessionInfo will be nil regardless of successful instance creation. +type FmCreateCallbackFn func(status FmCreateStatus, instanceInfo *InstanceInfo, sessionInfo []*SessionInfo, metadata map[string]any, err error) + +type FleetManager interface { + // Get retrieves the most up-to-date information about an instance currently running + // in the Fleet Manager platform. An error is expected if the instance does not exist, + // either because it never existed or it was otherwise removed at some point. + Get(ctx context.Context, id string) (instance *InstanceInfo, err error) + + // List retrieves a set of instances, optionally filtered by a platform-specific query. + // The limit and previous cursor inputs are used as part of pagination, if supported. + List(ctx context.Context, query string, limit int, previousCursor string) (list []*InstanceInfo, nextCursor string, err error) + + // Create issues a request to the underlying Fleet Manager platform to create a new + // instance and initialize it with the given metadata. The metadata is expected to be + // application-specific and only relevant to the application itself, not the platform. + // The instance creation happens asynchronously - the passed callback is invoked once the + // creation process was either successful or failed. + // If a list of userIds is optionally provided, the new instance (on successful creation) will reserve slots + // for the respective clients to connect, and the callback will contain the required []*SessionInfo. + // Latencies is optional and its support depends on the Fleet Manager provider. + Create(ctx context.Context, maxPlayers int, userIds []string, latencies []FleetUserLatencies, metadata map[string]any, callback FmCreateCallbackFn) (err error) + + // Join reserves a number of player slots in the target instance. These slots are reserved for a minute, after which, + // if clients do not connect to the instance to claim them, the returned SessionInfo will become invalid and the + // player slots will become available to new player sessions. + Join(ctx context.Context, id string, userIds []string, metadata map[string]string) (joinInfo *JoinInfo, err error) +} + +type FleetManagerInitializer interface { + FleetManager + // Init function - it is called internally by RegisterFleetManager to expose NakamaModule and FmCallbackHandler. + // The implementation should keep references to nk and callbackHandler. + Init(nk NakamaModule, callbackHandler FmCallbackHandler) error + Update(ctx context.Context, id string, playerCount int, metadata map[string]any) error + Delete(ctx context.Context, id string) error +} + +/* +Satori runtime integration definitions. +*/ +type Satori interface { + Authenticate(ctx context.Context, id string, defaultProperties, customProperties map[string]string, noSession bool, ipAddress ...string) (*Properties, error) + PropertiesGet(ctx context.Context, id string) (*Properties, error) + PropertiesUpdate(ctx context.Context, id string, properties *PropertiesUpdate) error + EventsPublish(ctx context.Context, id string, events []*Event, ipAddress ...string) error + ServerEventsPublish(ctx context.Context, events []*Event, ipAddress ...string) error + ExperimentsList(ctx context.Context, id string, names ...string) (*ExperimentList, error) + FlagsList(ctx context.Context, id string, names ...string) (*FlagList, error) + FlagsOverridesList(ctx context.Context, id string, names ...string) (*FlagOverridesList, error) + LiveEventsList(ctx context.Context, id string, names ...string) (*LiveEventList, error) + MessagesList(ctx context.Context, id string, limit int, forward bool, cursor string) (*MessageList, error) + MessageUpdate(ctx context.Context, id, messageId string, readTime, consumeTime int64) error + MessageDelete(ctx context.Context, id, messageId string) error +} + +type Properties struct { + Default map[string]string `json:"default,omitempty"` + Custom map[string]string `json:"custom,omitempty"` + Computed map[string]string `json:"computed,omitempty"` +} + +type PropertiesUpdate struct { + Default map[string]string `json:"default,omitempty"` + Custom map[string]string `json:"custom,omitempty"` + Recompute *bool `json:"recompute,omitempty"` +} + +type Events struct { + Events []*Event +} + +type Event struct { + Name string `json:"name,omitempty"` + Id string `json:"id,omitempty"` + Metadata map[string]string `json:"metadata,omitempty"` + Value string `json:"value,omitempty"` + IdentityId string `json:"identity_id,omitempty"` + SessionId string `json:"session_id,omitempty"` + SessionIssuedAt int64 `json:"session_issued_at,omitempty"` + SessionExpiresAt int64 `json:"session_expires_at,omitempty"` + Timestamp int64 `json:"-"` +} + +type ExperimentList struct { + Experiments []*Experiment `json:"experiments,omitempty"` +} + +type Experiment struct { + Name string `json:"name,omitempty"` + Value string `json:"value,omitempty"` +} + +type FlagList struct { + Flags []*Flag `json:"flags,omitempty"` +} + +type FlagOverridesList struct { + Flags []*FlagOverrides `json:"flags,omitempty"` +} + +type FlagOverrides struct { + FlagName string `protobuf:"bytes,1,opt,name=flag_name,json=flagName,proto3" json:"flag_name,omitempty"` + // The list of configuration that affect the value of the flag. + Overrides []*FlagOverride `json:"overrides,omitempty"` +} + +type FlagOverride struct { + Type OverrideType `json:"type,omitempty"` + Name string `json:"name,omitempty"` + VariantName string `json:"variant_name,omitempty"` + Value string `json:"value,omitempty"` + CreateTimeSec int64 `json:"create_time_sec,string,omitempty"` +} + +type OverrideType int + +const ( + FlagOverrideTypeFlag OverrideType = 0 + FlagOverrideTypeFlagVariant OverrideType = 1 + FlagOverrideTypeLiveEventFlag OverrideType = 2 + FlagOverrideTypeLiveEventFlagVariant OverrideType = 3 + FlagOverrideTypeExperimentPhaseVariantFlag OverrideType = 4 +) + +func (ot OverrideType) String() string { + switch ot { + case FlagOverrideTypeFlag: + return "FLAG" + case FlagOverrideTypeFlagVariant: + return "FLAG_VARIANT" + case FlagOverrideTypeLiveEventFlag: + return "LIVE_EVENT_FLAG" + case FlagOverrideTypeLiveEventFlagVariant: + return "LIVE_EVENT_FLAG_VARIANT" + case FlagOverrideTypeExperimentPhaseVariantFlag: + return "EXPERIMENT_PHASE_VARIANT_FLAG" + default: + return "UNKNOWN" + } +} + +type Flag struct { + Name string `json:"name,omitempty"` + Value string `json:"value,omitempty"` + ConditionChanged bool `json:"condition_changed,omitempty"` + ValueChangeReason *struct { + Type FlagType `json:"type,omitempty"` + Name string `json:"name,omitempty"` + VariantName string `json:"variant_name,omitempty"` + } `json:"change_reason,omitempty"` +} + +type FlagType int + +const ( + FlagTypeUnknown FlagType = 0 + FlagTypeFlagVariant FlagType = 1 + FlagTypeLiveEventFlag FlagType = 2 + FlagTypeExperiment FlagType = 3 +) + +func (ft FlagType) String() string { + switch ft { + case FlagTypeUnknown: + return "UNKNOWN" + case FlagTypeFlagVariant: + return "FLAG_VARIANT" + case FlagTypeLiveEventFlag: + return "LIVE_EVENT" + case FlagTypeExperiment: + return "EXPERIMENT" + default: + return "UNKNOWN" + } +} + +type LiveEventList struct { + LiveEvents []*LiveEvent `json:"live_events,omitempty"` +} + +type LiveEvent struct { + Name string `json:"name,omitempty"` + Description string `json:"description,omitempty"` + Value string `json:"value,omitempty"` + ActiveStartTimeSec int64 `json:"active_start_time_sec,string,omitempty"` + ActiveEndTimeSec int64 `json:"active_end_time_sec,string,omitempty"` + Id string `json:"id,omitempty"` + StartTimeSec int64 `json:"start_time_sec,string,omitempty"` + EndTimeSec int64 `json:"end_time_sec,string,omitempty"` + DurationSec int64 `json:"duration_sec,string,omitempty"` + ResetCronExpr string `json:"reset_cron,omitempty"` +} + +type MessageList struct { + Messages []*Message `json:"messages,omitempty"` + NextCursor string `json:"next_cursor,omitempty"` + PrevCursor string `json:"prev_cursor,omitempty"` + CacheableCursor string `json:"cacheable_cursor,omitempty"` +} + +type Message struct { + ScheduleId string `json:"schedule_id,omitempty"` + SendTime int64 `json:"send_time,string,omitempty"` + Metadata map[string]any `json:"metadata,omitempty"` + CreateTime int64 `json:"create_time,string,omitempty"` + UpdateTime int64 `json:"update_time,string,omitempty"` + ReadTime int64 `json:"read_time,string,omitempty"` + ConsumeTime int64 `json:"consume_time,string,omitempty"` + Text string `json:"text,omitempty"` + Id string `json:"id,omitempty"` + Title string `json:"title,omitempty"` + ImageUrl string `json:"image_url,omitempty"` +} + +type MessageUpdate struct { + ReadTime int64 `json:"read_time,omitempty"` + ConsumeTime int64 `json:"consume_time,omitempty"` +} + +/* +IAP Notifications. +*/ +type AppleNotificationData struct { + AppAppleId string `json:"appAppleId"` // The unique identifier of the app that the notification applies to. This property is available for apps that users download from the App Store. It isn’t present in the sandbox environment. + BundleId string `json:"bundleId"` // The bundle identifier of the app. + BundleVersion string `json:"bundleVersion"` // The version of the build that identifies an iteration of the bundle. + ConsumptionRequestReason string `json:"consumptionRequestReason"` // The reason the customer requested the refund. This field appears only for CONSUMPTION_REQUEST notifications, which the server sends when a customer initiates a refund request for a consumable in-app purchase or auto-renewable subscription. + Environment string `json:"string"` // The server environment that the notification applies to, either sandbox or production. + SignedRenewalInfo string `json:"signedRenewalInfo"` // Subscription renewal information signed by the App Store, in JSON Web Signature (JWS) format. This field appears only for notifications that apply to auto-renewable subscriptions. + SignedTransactionInfo string `json:"signedTransactionInfo"` // Transaction information signed by the App Store, in JSON Web Signature (JWS) format. + Status AppleSubscriptionStatus `json:"status"` // The status of an auto-renewable subscription as of the signedDate in the responseBodyV2DecodedPayload. This field appears only for notifications sent for auto-renewable subscriptions. https://developer.apple.com/documentation/appstoreservernotifications/status + RenewalInfo *AppleNotificationRenewalInfo `json:"renewalInfo"` + TransactionInfo *AppleNotificationTransactionInfo `json:"transactionInfo"` +} + +type AppleSubscriptionStatus int32 + +const ( + AppleSubActive AppleSubscriptionStatus = 1 // The auto-renewable subscription is active. + AppleSubExpired AppleSubscriptionStatus = 2 // The auto-renewable subscription is expired. + AppleSubBillingRetryPeriod AppleSubscriptionStatus = 3 // The auto-renewable subscription is in a billing retry period. + AppleSubBillingGracePeriod AppleSubscriptionStatus = 4 // The auto-renewable subscription is in a Billing Grace Period. + AppleSubRevoked AppleSubscriptionStatus = 5 // The auto-renewable subscription is revoked. +) + +func (s AppleSubscriptionStatus) String() string { + switch s { + case AppleSubActive: + return "ACTIVE" + case AppleSubExpired: + return "EXPIRED" + case AppleSubBillingRetryPeriod: + return "BILLING_RETRY_PERIOD" + case AppleSubBillingGracePeriod: + return "BILLING_GRACE_PERIOD" + case AppleSubRevoked: + return "REVOKED" + default: + return "UNKNOWN" + } +} + +// Reference: https://developer.apple.com/documentation/appstoreserverapi/jwstransactiondecodedpayload +type AppleNotificationTransactionInfo struct { + AppAccountToken string `json:"appAccountToken"` // A UUID you create at the time of purchase that associates the transaction with a customer on your own service. If your app doesn’t provide an appAccountToken, this field is omitted. + AppTransactionId string `json:"appTransactionId"` // The unique identifier of the app download transaction. + BundleId string `json:"bundleId"` // The bundle identifier of the app. + Currency string `json:"currency"` // The three-letter ISO 4217 currency code associated with the price parameter. This value is present only if price is present. + Environment string `json:"environment"` // The server environment, either sandbox or production. + ExpiresDate int64 `json:"expiresDate"` // The UNIX time, in milliseconds, that the subscription expires or renews. + InAppOwnershipType string `json:"inAppOwnershipType"` // A string that describes whether the transaction was purchased by the customer, or is available to them through Family Sharing. Possible Values: FAMILY_SHARED | PURCHASED. + IsUpgraded bool `json:"isUpgraded"` // A Boolean value that indicates whether the customer upgraded to another subscription. + OfferDiscountType string `json:"offerDiscountType"` // The payment mode you configure for the subscription offer, such as Free Trial, Pay As You Go, or Pay Up Front. + OfferIdentifier string `json:"offerIdentifier"` // The identifier that contains the offer code or the promotional offer identifier. + OfferPeriod string `json:"offerPeriod"` // The duration of the offer applied to the transaction. + OfferType AppleOfferType `json:"offerType"` // A value that represents the promotional offer type. + OriginalPurchaseDate int64 `json:"originalPurchaseDate"` // The UNIX time, in milliseconds, that represents the purchase date of the original transaction identifier. + OriginalTransactionId string `json:"originalTransactionId"` // The transaction identifier of the original purchase. + Price int64 `json:"price"` // An integer value that represents the price multiplied by 1000 of the in-app purchase or subscription offer you configured in App Store Connect and that the system records at the time of the purchase. + ProductId string `json:"productId"` // The unique identifier of the product. + PurchaseDate int64 `json:"purchaseDate"` // The UNIX time, in milliseconds, that the App Store charged the customer’s account for a purchase, restored product, subscription, or subscription renewal after a lapse. + Quantity int32 `json:"quantity"` // The number of consumable products the customer purchased. + RevocationDate int64 `json:"revocationDate"` // The UNIX time, in milliseconds, that the App Store refunded the transaction or revoked it from Family Sharing. + RevocationReason AppleRevocationReason `json:"revocationReason"` // The reason for a refunded transaction. + SignedDate int64 `json:"signedDate"` // The UNIX time, in milliseconds, that the App Store signed the JSON Web Signature (JWS) data. + Storefront string `json:"storefront"` // The three-letter code that represents the country or region associated with the App Store storefront for the purchase. + StorefrontId string `json:"storefrontId"` // An Apple-defined value that uniquely identifies the App Store storefront associated with the purchase. + SubscriptionGroupIdentifier string `json:"subscriptionGroupIdentifier"` // The identifier of the subscription group to which the subscription belongs. + TransactionId string `json:"transactionId"` // The unique identifier of the transaction. + TransactionReason string `json:"transactionReason"` // The cause of a purchase transaction, which indicates whether it’s a customer’s purchase or a renewal for an auto-renewable subscription that the system initiates. Values: PURCHASE | RENEWAL. + Type string `json:"type"` // The type of the in-app purchase. Values: Auto-Renewable Subscription | Non-Consumable | Consumable | Non-Renewing Subscription. + WebOrderLineItemId string `json:"webOrderLineItemId"` // The unique identifier of subscription-purchase events across devices, including renewals. +} + +// Reference: https://developer.apple.com/documentation/appstoreserverapi/jwsrenewalinfodecodedpayload +type AppleNotificationRenewalInfo struct { + AppAccountToken string `json:"appAccountToken"` // A UUID you create at the time of purchase that associates the transaction with a customer on your own service. If your app doesn’t provide an appAccountToken, this field is omitted. + AppTransactionId string `json:"appTransactionId"` // The unique identifier of the app download transaction. + AutoRenewProductId string `json:"autoRenewProductId"` // The identifier of the product that renews at the next billing period. + AutoRenewStatus AppleAutoRenewStatus `json:"autoRenewStatus"` // A value that indicates whether the subscription renews at the end of the current billing period. Possible Values: 1 (true) | 0 (false). + EligibleWinBackOfferIds []string `json:"eligibleWinBackOfferIds"` // The list of win-back offer IDs that the customer is eligible for. + Environment string `json:"environment"` // The server environment, either sandbox or production. + ExpirationIntent AppleExpirationIntent `json:"expirationIntent"` // The reason the subscription expired. + GracePeriodExpiresDate int64 `json:"gracePeriodExpiresDate"` // The time when the Billing Grace Period for subscription renewals expires. + IsInBillingRetryPeriod bool `json:"isInBillingRetryPeriod"` // A Boolean value that indicates whether the App Store is attempting to automatically renew the expired subscription. + OfferDiscountType string `json:"offerDiscountType"` // The payment mode for subscription offers on an auto-renewable subscription. Possible values: FREE_TRIAL | PAY_AS_YOU_GO | PAY_UP_FRONT. + OfferIdentifier string `json:"offerIdentifier"` // The identifier that contains the offer code or the promotional offer identifier. + OfferType AppleOfferType `json:"offerType"` // A value that represents the promotional offer type. + OriginalTransactionId string `json:"originalTransactionId"` // The transaction identifier of the original purchase. + PriceIncreaseStatus ApplePriceIncreaseStatus `json:"priceIncreaseStatus"` // A value that indicates whether the customer has agreed to a recent price increase. Possible Values: 1 (true) | 0 (false). + ProductId string `json:"productId"` // The unique identifier of the product. + RecentSubscriptionStartDate int64 `json:"recentSubscriptionStartDate"` // The UNIX time, in milliseconds, that the current subscription period for the customer’s most recent subscription purchase or renewal began. + RenewalDate int64 `json:"renewalDate"` // The UNIX time, in milliseconds, that the subscription will renew or has renewed. + RenewalPrice int64 `json:"renewalPrice"` // The renewal price, in milliunits, of the auto-renewable subscription that renews at the next billing period. + SignedDate int64 `json:"signedDate"` // The UNIX time, in milliseconds, that the App Store signed the JSON Web Signature (JWS) data. + SubscriptionGroupId string `json:"subscriptionGroupId"` // The identifier of the subscription group to which the subscription belongs. +} + +type ApplePriceIncreaseStatus int32 + +const ( + ApplePriceIncreaseStatusNotAgreed ApplePriceIncreaseStatus = 0 // The customer has not yet agreed to the price increase. + ApplePriceIncreaseStatusAgreed ApplePriceIncreaseStatus = 1 // The customer has agreed to the price increase. +) + +func (s ApplePriceIncreaseStatus) String() string { + switch s { + case ApplePriceIncreaseStatusNotAgreed: + return "NOT_AGREED" + case ApplePriceIncreaseStatusAgreed: + return "AGREED" + default: + return "UNKNOWN" + } +} + +type AppleExpirationIntent int32 + +const ( + AppleSubscriptionCancelled AppleExpirationIntent = 1 + AppleSubscriptionBillingError AppleExpirationIntent = 2 + AppleSubscriptionPriceIncrease AppleExpirationIntent = 3 + AppleSubscriptionProductUnavailable AppleExpirationIntent = 4 + AppleSubscriptionUnknownError AppleExpirationIntent = 5 +) + +func (s AppleExpirationIntent) String() string { + switch s { + case AppleSubscriptionCancelled: + return "CANCELLED" + case AppleSubscriptionBillingError: + return "BILLING_ERROR" + case AppleSubscriptionPriceIncrease: + return "PRICE_INCREASE" + case AppleSubscriptionProductUnavailable: + return "PRODUCT_UNAVAILABLE" + case AppleSubscriptionUnknownError: + return "UNKNOWN_ERROR" + default: + return "UNKNOWN" + } +} + +type AppleAutoRenewStatus int32 + +const ( + AppleAutoRenewStatusOff AppleAutoRenewStatus = 0 // The customer has turned off auto-renewal for their subscription. + AppleAutoRenewStatusOn AppleAutoRenewStatus = 1 // The customer has turned on auto-renewal for their subscription. +) + +func (s AppleAutoRenewStatus) String() string { + switch s { + case AppleAutoRenewStatusOff: + return "OFF" + case AppleAutoRenewStatusOn: + return "ON" + default: + return "UNKNOWN" + } +} + +type AppleOfferType int32 + +const ( + IntroductoryOffer AppleOfferType = 1 + PromotionalOffer AppleOfferType = 2 + SubscriptionOfferCode AppleOfferType = 3 + WinBackOffer AppleOfferType = 4 +) + +func (s AppleOfferType) String() string { + switch s { + case IntroductoryOffer: + return "INTRODUCTORY_OFFER" + case PromotionalOffer: + return "PROMOTIONAL_OFFER" + case SubscriptionOfferCode: + return "SubscriptionOfferCode" + case WinBackOffer: + return "WIN_BACK" + default: + return "UNKNOWN" + } +} + +// Apple Notification types +const ( + AppleNotifConsumptionRequest = "CONSUMPTION_REQUEST" + AppleNotifDidChangeRenewalPref = "DID_CHANGE_RENEWAL_PREF" +) + +type AppleRevocationReason int32 + +const ( + OtherReasons AppleRevocationReason = 0 // The App Store refunded the transaction on behalf of the customer for other reasons, for example, an accidental purchase. + AppPerceivedIssue AppleRevocationReason = 1 // The App Store refunded the transaction on behalf of the customer due to an actual or perceived issue within your app. +) + +type NotificationType int + +const ( + IAPNotificationSubscribed NotificationType = 1 + IAPNotificationRenewed NotificationType = 2 + IAPNotificationExpired NotificationType = 3 + IAPNotificationCancelled NotificationType = 4 + IAPNotificationRefunded NotificationType = 5 +) + +func (nt NotificationType) String() string { + switch nt { + case IAPNotificationSubscribed: + return "SUBSCRIBED" + case IAPNotificationRenewed: + return "RENEWED" + case IAPNotificationExpired: + return "EXPIRED" + case IAPNotificationCancelled: + return "CANCELLED" + case IAPNotificationRefunded: + return "REFUNDED" + default: + return "UNKNOWN" + } +} + +// Reference: https://developer.android.com/google/play/billing/rtdn-reference +type GoogleDeveloperNotificationData struct { + Version string `json:"version"` + PackageName string `json:"packageName"` + EventTimeMillis string `json:"eventTimeMillis"` + OneTimeProductNotification *GoogleOneTimeProductNotification `json:"oneTimeProductNotification"` + SubscriptionNotification *GoogleSubscriptionNotification `json:"subscriptionNotification"` + VoidedPurchaseNotification *GoogleVoidedPurchaseNotification `json:"voidedPurchaseNotification"` + TestNotification map[string]string `json:"testNotification"` +} + +type GoogleOneTimeProductNotification struct { + Version string `json:"version"` + NotificationType int `json:"notificationType"` + PurchaseToken string `json:"purchaseToken"` + Sku string `json:"sku"` +} + +type GoogleSubscriptionNotification struct { + Version string `json:"version"` + NotificationType GoogleSubscritpionNotificationType `json:"notificationType"` + PurchaseToken string `json:"purchaseToken"` +} + +type GoogleSubscritpionNotificationType int + +const ( + GoogleSubscriptionRecovered GoogleSubscritpionNotificationType = 1 + GoogleSubscriptionRenewed GoogleSubscritpionNotificationType = 2 + GoogleSubscriptionCanceled GoogleSubscritpionNotificationType = 3 + GoogleSubscriptionPurchased GoogleSubscritpionNotificationType = 4 + GoogleSubscriptionOnHold GoogleSubscritpionNotificationType = 5 + GoogleSubscriptionInGracePeriod GoogleSubscritpionNotificationType = 6 + GoogleSubscriptionRestarted GoogleSubscritpionNotificationType = 7 + GoogleSubscriptionPriceChangeConfirmed GoogleSubscritpionNotificationType = 8 // Deprecated + GoogleSubscriptionDeferred GoogleSubscritpionNotificationType = 9 + GoogleSubscriptionPaused GoogleSubscritpionNotificationType = 10 + GoogleSubscriptionPauseScheduleChanged GoogleSubscritpionNotificationType = 11 + GoogleSubscriptionRevoked GoogleSubscritpionNotificationType = 12 + GoogleSubscriptionExpired GoogleSubscritpionNotificationType = 13 + GoogleSubscriptionPendingPurchaseCanceled GoogleSubscritpionNotificationType = 20 + GoogleSubscriptionPriceChangeUpdated GoogleSubscritpionNotificationType = 19 +) + +func (nt GoogleSubscritpionNotificationType) String() string { + switch nt { + case GoogleSubscriptionRecovered: + return "SUBSCRIBED" + case GoogleSubscriptionRenewed: + return "RENEWED" + case GoogleSubscriptionCanceled: + return "CANCELED" + case GoogleSubscriptionPurchased: + return "PURCHASED" + case GoogleSubscriptionOnHold: + return "ON_HOLD" + case GoogleSubscriptionInGracePeriod: + return "IN_GRACE_PERIOD" + case GoogleSubscriptionRestarted: + return "RESTARTED" + case GoogleSubscriptionPriceChangeConfirmed: + return "PRICE_CHANGE_CONFIRMED" + case GoogleSubscriptionDeferred: + return "DEFERRED" + case GoogleSubscriptionPaused: + return "PAUSED" + case GoogleSubscriptionPauseScheduleChanged: + return "PAUSE_SCHEDULE_CHANGED" + case GoogleSubscriptionRevoked: + return "REVOKED" + case GoogleSubscriptionExpired: + return "EXPIRED" + case GoogleSubscriptionPendingPurchaseCanceled: + return "PENDING_PURCHASE_CANCELED" + case GoogleSubscriptionPriceChangeUpdated: + return "PRICE_CHANGE_UPDATED" + default: + return "UNKNOWN" + } +} + +type GoogleVoidedPurchaseNotification struct { + PurchaseToken string `json:"purchaseToken"` + OrderId string `json:"orderId"` + ProductType GoogleProductType `json:"productType"` + RefundType GoogleRefundType `json:"refundType"` +} + +type GoogleProductType int + +const ( + GoogleProductTypeSubscription GoogleProductType = 1 + GoogleProductTypeOneTime GoogleProductType = 2 +) + +type GoogleRefundType int + +const ( + GoogleRefundTypeFullRefund GoogleProductType = 1 + GoogleRefundTypeQuantityBasedPartialRefund GoogleProductType = 2 +) + +type SubscriptionV2GoogleResponse struct { + Kind string `json:"kind"` + RegionCode string `json:"regionCode"` + LineItems []struct { + ProductId string `json:"productId"` + ExpiryTime time.Time `json:"expiryTime"` + LatestSuccessfulOrderId string `json:"latestSuccessfulOrderId"` + AutoRenewingPlan struct { + AutoRenewEnabled bool `json:"autoRenewEnabled"` + RecurringPrice struct { + Units string `json:"units"` + Nanos int64 `json:"nanos"` + CurrencyCode string `json:"currencyCode"` + } `json:"recurringPrice"` + PriceChangeDetails struct { + NewPrice struct { + Units string `json:"units"` + Nanos int64 `json:"nanos"` + CurrencyCode string `json:"currencyCode"` + } `json:"newPrice"` + PriceChangeMode int `json:"priceChangeMode"` + PriceChangeState int `json:"priceChangeState"` + ExpectedNewPriceChargeTime time.Time `json:"expectedNewPriceChargeTime"` + } `json:"priceChangeDetails"` + InstallmentDetails struct { + InitialCommittedPaymentsCount int `json:"initialCommittedPaymentsCount"` + SubsequentCommittedPaymentsCount int `json:"subsequentCommittedPaymentsCount"` + RemainingCommittedPaymentsCount int `json:"remainingCommittedPaymentsCount"` + PendingCancellation struct{} `json:"pendingCancellation"` + } `json:"installmentDetails"` + PriceStepUpConsentDetails struct { + State int `json:"state"` + ConsentDeadlineTime time.Time `json:"consentDeadlineTime"` + NewPrice struct { + Units string `json:"units"` + Nanos int64 `json:"nanos"` + CurrencyCode string `json:"currencyCode"` + } `json:"newPrice"` + } `json:"priceStepUpConsentDetails"` + } `json:"autoRenewingPlan"` + PrepaidPlan struct { + AllowExtendAfterTime time.Time `json:"allowExtendAfterTime"` + } `json:"prepaidPlan"` + OfferDetails struct { + BasePlanId string `json:"basePlanId"` + OfferId string `json:"offerId"` + OfferTags []string `json:"offerTags"` + } `json:"offerDetails"` + DeferredItemReplacement struct { + ProductId string `json:"productId"` + } `json:"DeferredItemReplacement"` + DeferredItemRemoval struct{} `json:"deferredItemRemoval"` + SignupPromotion struct { + OneTimeCode struct { + PromotionCode string `json:"promotionCode"` + } `json:"oneTimeCode"` + VanityCode struct { + PromotionType string `json:"promotionType"` + } `json:"promotionType"` + } `json:"signupPromotion"` + } `json:"lineItems"` + StartTime time.Time `json:"startTime"` + SubscriptionState string `json:"subscriptionState"` + LatestOrderId string `json:"latestOrderId"` // Deprecated: use lineItems.latestSuccessfulOrderId + LinkedPurchaseToken string `json:"linkedPurchaseToken"` + PausedStateContext struct { + AutoResumeTime time.Time `json:"autoResumeTime"` + } `json:"pausedStateContext"` + CancelStateContext struct { + UserInitiatedCancellation struct { + CancelSurveyResult struct { + Reason int `json:"reason"` + ReasonUserInput string `json:"reasonUserInput"` + } `json:"cancelSurveyResult"` + } `json:"userInitiatedCancellation"` + SystemInitiatedCancellation struct{} `json:"systemInitiatedCancellation"` + DeveloperInitiatedCancellation struct{} `json:"developerInitiatedCancellation"` + ReplacementCancellation struct{} `json:"replacementCancellation"` + } `json:"cancelStateContext"` + TestPurchase *struct{} `json:"testPurchase"` + AcknowledgementState int `json:"acknowledgementState"` + ExternalAccountIdentifiers struct { + ExternalAccountId string `json:"externalAccountId"` + ObfuscatedExternalAccountId string `json:"obfuscatedExternalAccountId"` + ObfuscatedExternalProfileId string `json:"obfuscatedExternalProfileId"` + } `json:"externalAccountIdentifiers"` + SubscribeWithGoogleInfo struct { + ProfileId string `json:"profileId"` + ProfileName string `json:"profileName"` + EmailAddress string `json:"emailAddress"` + GivenName string `json:"givenName"` + FamilyName string `json:"familyName"` + } `json:"subscribeWithGoogleInfo"` +} + +func (s *SubscriptionV2GoogleResponse) GetObfuscatedExternalAccountId() string { + return s.ExternalAccountIdentifiers.ObfuscatedExternalAccountId +} + +func (s *SubscriptionV2GoogleResponse) GetObfuscatedExternalProfileId() string { + return s.ExternalAccountIdentifiers.ObfuscatedExternalProfileId +} + +const ( + SubscriptionGoogleStateUnspecified = "SUBSCRIPTION_STATE_UNSPECIFIED" + SubscriptionGoogleStatePending = "SUBSCRIPTION_STATE_PENDING" + SubscriptionGoogleStateActive = "SUBSCRIPTION_STATE_ACTIVE" + SubscriptionGoogleStatePaused = "SUBSCRIPTION_STATE_PAUSED" + SubscriptionGoogleStateInGracePeriod = "SUBSCRIPTION_STATE_IN_GRACE_PERIOD" + SubscriptionGoogleStateOnHold = "SUBSCRIPTION_STATE_ON_HOLD" + SubscriptionGoogleStateCanceled = "SUBSCRIPTION_STATE_CANCELED" + SubscriptionGoogleStateExpired = "SUBSCRIPTION_STATE_EXPIRED" + SubscriptionGoogleStatePendingPurchaseCanceled = "SUBSCRIPTION_STATE_PENDING_PURCHASE_CANCELED" +) + +type PurchaseV2GoogleResponse struct { + ProductLineItem []struct { + ProductId string `json:"productId"` + ProductOfferDetails struct { + OfferTags []string `json:"offerTags"` + OfferId string `json:"offerId"` + PurchaseOptionId string `json:"purchaseOptionId"` + RentOfferDetails struct{} `json:"rentOfferDetails"` + OfferToken string `json:"offerToken"` + Quantity int `json:"quantity"` + RefundableQuantity int `json:"refundableQuantity"` + ConsumptionState string `json:"consumptionState"` + } `json:"productOfferDetails"` + } `json:"productLineItem"` + Kind string `json:"kind"` + PurchaseStateContext struct { + PurchaseState string `json:"purchaseState"` + } `json:"purchaseStateContext"` + TestPurchaseContext *struct { + FopType string `json:"fopType"` + } `json:"testPurchaseContext"` + OrderId string `json:"orderId"` + ObfuscatedExternalAccountId string `json:"obfuscatedExternalAccountId"` + ObfuscatedExternalProfileId string `json:"obfuscatedExternalProfileId"` + RegionCode string `json:"regionCode"` + PurchaseCompletionTime time.Time `json:"purchaseCompletionTime"` + AcknowledgementState string `json:"acknowledgementState"` +} + +func (p *PurchaseV2GoogleResponse) GetObfuscatedExternalAccountId() string { + return p.ObfuscatedExternalAccountId +} + +func (p *PurchaseV2GoogleResponse) GetObfuscatedExternalProfileId() string { + return p.ObfuscatedExternalProfileId +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/LICENSE b/Nakama+Hiro/vendor/google.golang.org/protobuf/LICENSE new file mode 100644 index 0000000..49ea0f9 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2018 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/PATENTS b/Nakama+Hiro/vendor/google.golang.org/protobuf/PATENTS new file mode 100644 index 0000000..7330990 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/init.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/init.go new file mode 100644 index 0000000..e9a8e69 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/init.go @@ -0,0 +1,167 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package internal_gengo + +import ( + "unicode" + "unicode/utf8" + + "google.golang.org/protobuf/compiler/protogen" + "google.golang.org/protobuf/encoding/protowire" + + "google.golang.org/protobuf/types/descriptorpb" +) + +type fileInfo struct { + *protogen.File + + allEnums []*enumInfo + allMessages []*messageInfo + allExtensions []*extensionInfo + + allEnumsByPtr map[*enumInfo]int // value is index into allEnums + allMessagesByPtr map[*messageInfo]int // value is index into allMessages + allMessageFieldsByPtr map[*messageInfo]*structFields + + // needRawDesc specifies whether the generator should emit logic to provide + // the legacy raw descriptor in GZIP'd form. + // This is updated by enum and message generation logic as necessary, + // and checked at the end of file generation. + needRawDesc bool +} + +type structFields struct { + count int + unexported map[int]string +} + +func (sf *structFields) append(name string) { + if r, _ := utf8.DecodeRuneInString(name); !unicode.IsUpper(r) { + if sf.unexported == nil { + sf.unexported = make(map[int]string) + } + sf.unexported[sf.count] = name + } + sf.count++ +} + +func newFileInfo(file *protogen.File) *fileInfo { + f := &fileInfo{File: file} + + // Collect all enums, messages, and extensions in "flattened ordering". + // See filetype.TypeBuilder. + var walkMessages func([]*protogen.Message, func(*protogen.Message)) + walkMessages = func(messages []*protogen.Message, f func(*protogen.Message)) { + for _, m := range messages { + f(m) + walkMessages(m.Messages, f) + } + } + initEnumInfos := func(enums []*protogen.Enum) { + for _, enum := range enums { + f.allEnums = append(f.allEnums, newEnumInfo(f, enum)) + } + } + initMessageInfos := func(messages []*protogen.Message) { + for _, message := range messages { + f.allMessages = append(f.allMessages, newMessageInfo(f, message)) + } + } + initExtensionInfos := func(extensions []*protogen.Extension) { + for _, extension := range extensions { + f.allExtensions = append(f.allExtensions, newExtensionInfo(f, extension)) + } + } + initEnumInfos(f.Enums) + initMessageInfos(f.Messages) + initExtensionInfos(f.Extensions) + walkMessages(f.Messages, func(m *protogen.Message) { + initEnumInfos(m.Enums) + initMessageInfos(m.Messages) + initExtensionInfos(m.Extensions) + }) + + // Derive a reverse mapping of enum and message pointers to their index + // in allEnums and allMessages. + if len(f.allEnums) > 0 { + f.allEnumsByPtr = make(map[*enumInfo]int) + for i, e := range f.allEnums { + f.allEnumsByPtr[e] = i + } + } + if len(f.allMessages) > 0 { + f.allMessagesByPtr = make(map[*messageInfo]int) + f.allMessageFieldsByPtr = make(map[*messageInfo]*structFields) + for i, m := range f.allMessages { + f.allMessagesByPtr[m] = i + f.allMessageFieldsByPtr[m] = new(structFields) + } + } + + return f +} + +type enumInfo struct { + *protogen.Enum + + genJSONMethod bool + genRawDescMethod bool +} + +func newEnumInfo(f *fileInfo, enum *protogen.Enum) *enumInfo { + e := &enumInfo{Enum: enum} + e.genJSONMethod = true + e.genRawDescMethod = true + opaqueNewEnumInfoHook(f, e) + return e +} + +type messageInfo struct { + *protogen.Message + + genRawDescMethod bool + genExtRangeMethod bool + + isTracked bool + noInterface bool +} + +func newMessageInfo(f *fileInfo, message *protogen.Message) *messageInfo { + m := &messageInfo{Message: message} + m.genRawDescMethod = true + m.genExtRangeMethod = true + m.isTracked = isTrackedMessage(m) + opaqueNewMessageInfoHook(f, m) + return m +} + +// isTrackedMessage reports whether field tracking is enabled on the message. +func isTrackedMessage(m *messageInfo) (tracked bool) { + const trackFieldUse_fieldNumber = 37383685 + + // Decode the option from unknown fields to avoid a dependency on the + // annotation proto from protoc-gen-go. + b := m.Desc.Options().(*descriptorpb.MessageOptions).ProtoReflect().GetUnknown() + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + if num == trackFieldUse_fieldNumber && typ == protowire.VarintType { + v, _ := protowire.ConsumeVarint(b) + tracked = protowire.DecodeBool(v) + } + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + return tracked +} + +type extensionInfo struct { + *protogen.Extension +} + +func newExtensionInfo(f *fileInfo, extension *protogen.Extension) *extensionInfo { + x := &extensionInfo{Extension: extension} + return x +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/init_opaque.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/init_opaque.go new file mode 100644 index 0000000..221176a --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/init_opaque.go @@ -0,0 +1,33 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package internal_gengo + +import "google.golang.org/protobuf/types/gofeaturespb" + +func (m *messageInfo) isOpen() bool { + return m.Message.APILevel == gofeaturespb.GoFeatures_API_OPEN +} + +func (m *messageInfo) isHybrid() bool { + return m.Message.APILevel == gofeaturespb.GoFeatures_API_HYBRID +} + +func (m *messageInfo) isOpaque() bool { + return m.Message.APILevel == gofeaturespb.GoFeatures_API_OPAQUE +} + +func opaqueNewEnumInfoHook(f *fileInfo, e *enumInfo) { + if f.File.APILevel != gofeaturespb.GoFeatures_API_OPEN { + e.genJSONMethod = false + e.genRawDescMethod = false + } +} + +func opaqueNewMessageInfoHook(f *fileInfo, m *messageInfo) { + if !m.isOpen() { + m.genRawDescMethod = false + m.genExtRangeMethod = false + } +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/main.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/main.go new file mode 100644 index 0000000..e29f52b --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/main.go @@ -0,0 +1,932 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package internal_gengo is internal to the protobuf module. +package internal_gengo + +import ( + "fmt" + "go/ast" + "go/parser" + "go/token" + "math" + "strconv" + "strings" + "unicode" + "unicode/utf8" + + "google.golang.org/protobuf/compiler/protogen" + "google.golang.org/protobuf/internal/editionssupport" + "google.golang.org/protobuf/internal/encoding/tag" + "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/internal/genid" + "google.golang.org/protobuf/internal/version" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoimpl" + + "google.golang.org/protobuf/types/descriptorpb" + "google.golang.org/protobuf/types/gofeaturespb" + "google.golang.org/protobuf/types/pluginpb" +) + +// SupportedFeatures reports the set of supported protobuf language features. +var SupportedFeatures = uint64(pluginpb.CodeGeneratorResponse_FEATURE_PROTO3_OPTIONAL | pluginpb.CodeGeneratorResponse_FEATURE_SUPPORTS_EDITIONS) + +var SupportedEditionsMinimum = editionssupport.Minimum +var SupportedEditionsMaximum = editionssupport.Maximum + +// GenerateVersionMarkers specifies whether to generate version markers. +var GenerateVersionMarkers = true + +// Standard library dependencies. +const ( + base64Package = protogen.GoImportPath("encoding/base64") + jsonPackage = protogen.GoImportPath("encoding/json") + mathPackage = protogen.GoImportPath("math") + reflectPackage = protogen.GoImportPath("reflect") + sortPackage = protogen.GoImportPath("sort") + stringsPackage = protogen.GoImportPath("strings") + syncPackage = protogen.GoImportPath("sync") + timePackage = protogen.GoImportPath("time") + utf8Package = protogen.GoImportPath("unicode/utf8") + unsafePackage = protogen.GoImportPath("unsafe") +) + +// Protobuf library dependencies. +// +// These are declared as an interface type so that they can be more easily +// patched to support unique build environments that impose restrictions +// on the dependencies of generated source code. +var ( + protoPackage goImportPath = protogen.GoImportPath("google.golang.org/protobuf/proto") + protoifacePackage goImportPath = protogen.GoImportPath("google.golang.org/protobuf/runtime/protoiface") + protoimplPackage goImportPath = protogen.GoImportPath("google.golang.org/protobuf/runtime/protoimpl") + protojsonPackage goImportPath = protogen.GoImportPath("google.golang.org/protobuf/encoding/protojson") + protoreflectPackage goImportPath = protogen.GoImportPath("google.golang.org/protobuf/reflect/protoreflect") + protoregistryPackage goImportPath = protogen.GoImportPath("google.golang.org/protobuf/reflect/protoregistry") +) + +type goImportPath interface { + String() string + Ident(string) protogen.GoIdent +} + +func setToOpaque(msg *protogen.Message) { + msg.APILevel = gofeaturespb.GoFeatures_API_OPAQUE + for _, nested := range msg.Messages { + nested.APILevel = gofeaturespb.GoFeatures_API_OPAQUE + setToOpaque(nested) + } +} + +// GenerateFile generates the contents of a .pb.go file. +// +// With the Hybrid API, multiple files are generated (_protoopaque.pb.go variant), +// but only the first file (regular, not a variant) is returned. +func GenerateFile(gen *protogen.Plugin, file *protogen.File) *protogen.GeneratedFile { + return generateFiles(gen, file)[0] +} + +func generateFiles(gen *protogen.Plugin, file *protogen.File) []*protogen.GeneratedFile { + f := newFileInfo(file) + generated := []*protogen.GeneratedFile{ + generateOneFile(gen, file, f, ""), + } + if f.APILevel == gofeaturespb.GoFeatures_API_HYBRID { + // Update all APILevel fields to OPAQUE + f.APILevel = gofeaturespb.GoFeatures_API_OPAQUE + for _, msg := range f.Messages { + setToOpaque(msg) + } + generated = append(generated, generateOneFile(gen, file, f, "_protoopaque")) + } + return generated +} + +func generateOneFile(gen *protogen.Plugin, file *protogen.File, f *fileInfo, variant string) *protogen.GeneratedFile { + filename := file.GeneratedFilenamePrefix + variant + ".pb.go" + g := gen.NewGeneratedFile(filename, file.GoImportPath) + + var packageDoc protogen.Comments + if !gen.InternalStripForEditionsDiff() { + genStandaloneComments(g, f, int32(genid.FileDescriptorProto_Syntax_field_number)) + genGeneratedHeader(gen, g, f) + genStandaloneComments(g, f, int32(genid.FileDescriptorProto_Package_field_number)) + + packageDoc = genPackageKnownComment(f) + } + if variant == "_protoopaque" { + g.P("//go:build protoopaque") + } else if f.APILevel == gofeaturespb.GoFeatures_API_HYBRID { + g.P("//go:build !protoopaque") + } + g.P(packageDoc, "package ", f.GoPackageName) + g.P() + + // Emit a static check that enforces a minimum version of the proto package. + if GenerateVersionMarkers { + g.P("const (") + g.P("// Verify that this generated code is sufficiently up-to-date.") + g.P("_ = ", protoimplPackage.Ident("EnforceVersion"), "(", protoimpl.GenVersion, " - ", protoimplPackage.Ident("MinVersion"), ")") + g.P("// Verify that runtime/protoimpl is sufficiently up-to-date.") + g.P("_ = ", protoimplPackage.Ident("EnforceVersion"), "(", protoimplPackage.Ident("MaxVersion"), " - ", protoimpl.GenVersion, ")") + g.P(")") + g.P() + } + + for i, imps := 0, f.Desc.Imports(); i < imps.Len(); i++ { + genImport(gen, g, f, imps.Get(i)) + } + for _, enum := range f.allEnums { + genEnum(g, f, enum) + } + for _, message := range f.allMessages { + genMessage(g, f, message) + } + genExtensions(g, f) + + // The descriptor contains a lot of information about the syntax which is + // quite different between the proto2/3 version of a file and the equivalent + // editions version. For example, when a proto3 file is translated from + // proto3 to editions every field in that file that is marked optional in + // proto3 will have a features.field_presence option set. + // Another problem is that the descriptor contains implementation details + // that are not relevant for the semantic. For example, proto3 optional + // fields are implemented as oneof fields with one case. The descriptor + // contains different information about oneofs. If the file is translated + // to editions it no longer is treated as a oneof with one case and thus + // none of the oneof specific information is generated. + // To be able to compare the descriptor before and after translation of the + // associated proto file, we would need to trim many parts. This would lead + // to a brittle implementation in case the translation ever changes. + if !g.InternalStripForEditionsDiff() { + genReflectFileDescriptor(gen, g, f) + } + + return g +} + +// genStandaloneComments prints all leading comments for a FileDescriptorProto +// location identified by the field number n. +func genStandaloneComments(g *protogen.GeneratedFile, f *fileInfo, n int32) { + loc := f.Desc.SourceLocations().ByPath(protoreflect.SourcePath{n}) + for _, s := range loc.LeadingDetachedComments { + g.P(protogen.Comments(s)) + g.P() + } + if s := loc.LeadingComments; s != "" { + g.P(protogen.Comments(s)) + g.P() + } +} + +func genGeneratedHeader(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileInfo) { + g.P("// Code generated by protoc-gen-go. DO NOT EDIT.") + + if GenerateVersionMarkers { + g.P("// versions:") + protocGenGoVersion := version.String() + protocVersion := "(unknown)" + if v := gen.Request.GetCompilerVersion(); v != nil { + protocVersion = fmt.Sprintf("v%v.%v.%v", v.GetMajor(), v.GetMinor(), v.GetPatch()) + if s := v.GetSuffix(); s != "" { + protocVersion += "-" + s + } + } + g.P("// \tprotoc-gen-go ", protocGenGoVersion) + g.P("// \tprotoc ", protocVersion) + } + + if f.Proto.GetOptions().GetDeprecated() { + g.P("// ", f.Desc.Path(), " is a deprecated file.") + } else { + g.P("// source: ", f.Desc.Path()) + } + g.P() +} + +func genImport(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileInfo, imp protoreflect.FileImport) { + impFile, ok := gen.FilesByPath[imp.Path()] + if !ok { + return + } + if impFile.GoImportPath == f.GoImportPath { + // Don't generate imports or aliases for types in the same Go package. + return + } + // Generate imports for all dependencies, even if they are not + // referenced, because other code and tools depend on having the + // full transitive closure of protocol buffer types in the binary. + g.Import(impFile.GoImportPath) + if !imp.IsPublic { + return + } + + // Generate public imports by generating the imported file, parsing it, + // and extracting every symbol that should receive a forwarding declaration. + impGens := generateFiles(gen, impFile) + for _, impGen := range impGens { + impGen.Skip() + } + b, err := impGens[0].Content() + if err != nil { + gen.Error(err) + return + } + fset := token.NewFileSet() + astFile, err := parser.ParseFile(fset, "", b, parser.ParseComments) + if err != nil { + gen.Error(err) + return + } + genForward := func(tok token.Token, name string, expr ast.Expr) { + // Don't import unexported symbols. + r, _ := utf8.DecodeRuneInString(name) + if !unicode.IsUpper(r) { + return + } + // Don't import the FileDescriptor. + if name == impFile.GoDescriptorIdent.GoName { + return + } + // Don't import decls referencing a symbol defined in another package. + // i.e., don't import decls which are themselves public imports: + // + // type T = somepackage.T + if _, ok := expr.(*ast.SelectorExpr); ok { + return + } + g.P(tok, " ", name, " = ", impFile.GoImportPath.Ident(name)) + } + g.P("// Symbols defined in public import of ", imp.Path(), ".") + g.P() + for _, decl := range astFile.Decls { + switch decl := decl.(type) { + case *ast.GenDecl: + for _, spec := range decl.Specs { + switch spec := spec.(type) { + case *ast.TypeSpec: + genForward(decl.Tok, spec.Name.Name, spec.Type) + case *ast.ValueSpec: + for i, name := range spec.Names { + var expr ast.Expr + if i < len(spec.Values) { + expr = spec.Values[i] + } + genForward(decl.Tok, name.Name, expr) + } + case *ast.ImportSpec: + default: + panic(fmt.Sprintf("can't generate forward for spec type %T", spec)) + } + } + } + } + g.P() +} + +func genEnum(g *protogen.GeneratedFile, f *fileInfo, e *enumInfo) { + // Enum type declaration. + g.AnnotateSymbol(e.GoIdent.GoName, protogen.Annotation{Location: e.Location}) + leadingComments := appendDeprecationSuffix(e.Comments.Leading, + e.Desc.ParentFile(), + e.Desc.Options().(*descriptorpb.EnumOptions).GetDeprecated()) + g.P(leadingComments, + "type ", e.GoIdent, " int32") + + // Enum value constants. + g.P("const (") + anyOldName := false + for _, value := range e.Values { + g.AnnotateSymbol(value.GoIdent.GoName, protogen.Annotation{Location: value.Location}) + leadingComments := appendDeprecationSuffix(value.Comments.Leading, + value.Desc.ParentFile(), + value.Desc.Options().(*descriptorpb.EnumValueOptions).GetDeprecated()) + g.P(leadingComments, + value.GoIdent, " ", e.GoIdent, " = ", value.Desc.Number(), + trailingComment(value.Comments.Trailing)) + + if value.PrefixedAlias.GoName != "" && + value.PrefixedAlias.GoName != value.GoIdent.GoName { + anyOldName = true + } + } + g.P(")") + g.P() + if anyOldName { + g.P("// Old (prefixed) names for ", e.GoIdent, " enum values.") + g.P("const (") + for _, value := range e.Values { + if value.PrefixedAlias.GoName != "" && + value.PrefixedAlias.GoName != value.GoIdent.GoName { + g.P(value.PrefixedAlias, " ", e.GoIdent, " = ", value.GoIdent) + } + } + g.P(")") + g.P() + } + + // Enum value maps. + g.P("// Enum value maps for ", e.GoIdent, ".") + g.P("var (") + g.P(e.GoIdent.GoName+"_name", " = map[int32]string{") + for _, value := range e.Values { + duplicate := "" + if value.Desc != e.Desc.Values().ByNumber(value.Desc.Number()) { + duplicate = "// Duplicate value: " + } + g.P(duplicate, value.Desc.Number(), ": ", strconv.Quote(string(value.Desc.Name())), ",") + } + g.P("}") + g.P(e.GoIdent.GoName+"_value", " = map[string]int32{") + for _, value := range e.Values { + g.P(strconv.Quote(string(value.Desc.Name())), ": ", value.Desc.Number(), ",") + } + g.P("}") + g.P(")") + g.P() + + // Enum method. + // + // NOTE: A pointer value is needed to represent presence in proto2. + // Since a proto2 message can reference a proto3 enum, it is useful to + // always generate this method (even on proto3 enums) to support that case. + g.P("func (x ", e.GoIdent, ") Enum() *", e.GoIdent, " {") + g.P("p := new(", e.GoIdent, ")") + g.P("*p = x") + g.P("return p") + g.P("}") + g.P() + + // String method. + g.P("func (x ", e.GoIdent, ") String() string {") + g.P("return ", protoimplPackage.Ident("X"), ".EnumStringOf(x.Descriptor(), ", protoreflectPackage.Ident("EnumNumber"), "(x))") + g.P("}") + g.P() + + genEnumReflectMethods(g, f, e) + + // UnmarshalJSON method. + needsUnmarshalJSONMethod := false + if fde, ok := e.Desc.(*filedesc.Enum); ok { + needsUnmarshalJSONMethod = fde.L1.EditionFeatures.GenerateLegacyUnmarshalJSON + } + if e.genJSONMethod && needsUnmarshalJSONMethod { + g.P("// Deprecated: Do not use.") + g.P("func (x *", e.GoIdent, ") UnmarshalJSON(b []byte) error {") + g.P("num, err := ", protoimplPackage.Ident("X"), ".UnmarshalJSONEnum(x.Descriptor(), b)") + g.P("if err != nil {") + g.P("return err") + g.P("}") + g.P("*x = ", e.GoIdent, "(num)") + g.P("return nil") + g.P("}") + g.P() + } + + // EnumDescriptor method. + if e.genRawDescMethod { + var indexes []string + for i := 1; i < len(e.Location.Path); i += 2 { + indexes = append(indexes, strconv.Itoa(int(e.Location.Path[i]))) + } + g.P("// Deprecated: Use ", e.GoIdent, ".Descriptor instead.") + g.P("func (", e.GoIdent, ") EnumDescriptor() ([]byte, []int) {") + g.P("return ", rawDescVarName(f), "GZIP(), []int{", strings.Join(indexes, ","), "}") + g.P("}") + g.P() + f.needRawDesc = true + } +} + +func genMessage(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) { + if m.Desc.IsMapEntry() { + return + } + if opaqueGenMessageHook(g, f, m) { + return + } + + // Message type declaration. + g.AnnotateSymbol(m.GoIdent.GoName, protogen.Annotation{Location: m.Location}) + leadingComments := appendDeprecationSuffix(m.Comments.Leading, + m.Desc.ParentFile(), + m.Desc.Options().(*descriptorpb.MessageOptions).GetDeprecated()) + g.P(leadingComments, + "type ", m.GoIdent, " struct {") + genMessageFields(g, f, m) + g.P("}") + g.P() + + genMessageKnownFunctions(g, f, m) + genMessageDefaultDecls(g, f, m) + genMessageMethods(g, f, m) + genMessageOneofWrapperTypes(g, f, m) +} + +func genMessageFields(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) { + sf := f.allMessageFieldsByPtr[m] + genMessageInternalFields(g, f, m, sf) + for _, field := range m.Fields { + genMessageField(g, f, m, field, sf) + } +} + +func genMessageInternalFields(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo, sf *structFields) { + g.P(genid.State_goname, " ", protoimplPackage.Ident("MessageState")) + sf.append(genid.State_goname) + g.P(genid.SizeCache_goname, " ", protoimplPackage.Ident("SizeCache")) + sf.append(genid.SizeCache_goname) + g.P(genid.UnknownFields_goname, " ", protoimplPackage.Ident("UnknownFields")) + sf.append(genid.UnknownFields_goname) + if m.Desc.ExtensionRanges().Len() > 0 { + g.P(genid.ExtensionFields_goname, " ", protoimplPackage.Ident("ExtensionFields")) + sf.append(genid.ExtensionFields_goname) + } + if sf.count > 0 { + g.P() + } +} + +func genMessageField(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo, field *protogen.Field, sf *structFields) { + if oneof := field.Oneof; oneof != nil && !oneof.Desc.IsSynthetic() { + // It would be a bit simpler to iterate over the oneofs below, + // but generating the field here keeps the contents of the Go + // struct in the same order as the contents of the source + // .proto file. + if oneof.Fields[0] != field { + return // only generate for first appearance + } + + tags := structTags{ + {"protobuf_oneof", string(oneof.Desc.Name())}, + } + if m.isTracked { + tags = append(tags, gotrackTags...) + } + + g.AnnotateSymbol(m.GoIdent.GoName+"."+oneof.GoName, protogen.Annotation{Location: oneof.Location}) + leadingComments := oneof.Comments.Leading + if leadingComments != "" { + leadingComments += "\n" + } + ss := []string{fmt.Sprintf(" Types that are assignable to %s:\n", oneof.GoName)} + for _, field := range oneof.Fields { + ss = append(ss, "\t*"+field.GoIdent.GoName+"\n") + } + leadingComments += protogen.Comments(strings.Join(ss, "")) + g.P(leadingComments, + oneof.GoName, " ", oneofInterfaceName(oneof), tags) + sf.append(oneof.GoName) + return + } + goType, pointer := fieldGoType(g, f, field) + if pointer { + goType = "*" + goType + } + tags := structTags{ + {"protobuf", fieldProtobufTagValue(field)}, + {"json", fieldJSONTagValue(field)}, + } + if field.Desc.IsMap() { + key := field.Message.Fields[0] + val := field.Message.Fields[1] + tags = append(tags, structTags{ + {"protobuf_key", fieldProtobufTagValue(key)}, + {"protobuf_val", fieldProtobufTagValue(val)}, + }...) + } + if m.isTracked { + tags = append(tags, gotrackTags...) + } + + name := field.GoName + g.AnnotateSymbol(m.GoIdent.GoName+"."+name, protogen.Annotation{Location: field.Location}) + leadingComments := appendDeprecationSuffix(field.Comments.Leading, + field.Desc.ParentFile(), + field.Desc.Options().(*descriptorpb.FieldOptions).GetDeprecated()) + g.P(leadingComments, + name, " ", goType, tags, + trailingComment(field.Comments.Trailing)) + sf.append(field.GoName) +} + +// genMessageDefaultDecls generates consts and vars holding the default +// values of fields. +func genMessageDefaultDecls(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) { + var consts, vars []string + for _, field := range m.Fields { + if !field.Desc.HasDefault() { + continue + } + name := "Default_" + m.GoIdent.GoName + "_" + field.GoName + goType, _ := fieldGoType(g, f, field) + defVal := field.Desc.Default() + switch field.Desc.Kind() { + case protoreflect.StringKind: + consts = append(consts, fmt.Sprintf("%s = %s(%q)", name, goType, defVal.String())) + case protoreflect.BytesKind: + vars = append(vars, fmt.Sprintf("%s = %s(%q)", name, goType, defVal.Bytes())) + case protoreflect.EnumKind: + idx := field.Desc.DefaultEnumValue().Index() + val := field.Enum.Values[idx] + if val.GoIdent.GoImportPath == f.GoImportPath { + consts = append(consts, fmt.Sprintf("%s = %s", name, g.QualifiedGoIdent(val.GoIdent))) + } else { + // If the enum value is declared in a different Go package, + // reference it by number since the name may not be correct. + // See https://github.com/golang/protobuf/issues/513. + consts = append(consts, fmt.Sprintf("%s = %s(%d) // %s", + name, g.QualifiedGoIdent(field.Enum.GoIdent), val.Desc.Number(), g.QualifiedGoIdent(val.GoIdent))) + } + case protoreflect.FloatKind, protoreflect.DoubleKind: + if f := defVal.Float(); math.IsNaN(f) || math.IsInf(f, 0) { + var fn, arg string + switch f := defVal.Float(); { + case math.IsInf(f, -1): + fn, arg = g.QualifiedGoIdent(mathPackage.Ident("Inf")), "-1" + case math.IsInf(f, +1): + fn, arg = g.QualifiedGoIdent(mathPackage.Ident("Inf")), "+1" + case math.IsNaN(f): + fn, arg = g.QualifiedGoIdent(mathPackage.Ident("NaN")), "" + } + vars = append(vars, fmt.Sprintf("%s = %s(%s(%s))", name, goType, fn, arg)) + } else { + consts = append(consts, fmt.Sprintf("%s = %s(%v)", name, goType, f)) + } + default: + consts = append(consts, fmt.Sprintf("%s = %s(%v)", name, goType, defVal.Interface())) + } + } + if len(consts) > 0 { + g.P("// Default values for ", m.GoIdent, " fields.") + g.P("const (") + for _, s := range consts { + g.P(s) + } + g.P(")") + } + if len(vars) > 0 { + g.P("// Default values for ", m.GoIdent, " fields.") + g.P("var (") + for _, s := range vars { + g.P(s) + } + g.P(")") + } + g.P() +} + +func genMessageMethods(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) { + genMessageBaseMethods(g, f, m) + genMessageGetterMethods(g, f, m) +} + +func genMessageBaseMethods(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) { + // Reset method. + g.P("func (x *", m.GoIdent, ") Reset() {") + g.P("*x = ", m.GoIdent, "{}") + g.P("mi := &", messageTypesVarName(f), "[", f.allMessagesByPtr[m], "]") + g.P("ms := ", protoimplPackage.Ident("X"), ".MessageStateOf(", protoimplPackage.Ident("Pointer"), "(x))") + g.P("ms.StoreMessageInfo(mi)") + g.P("}") + g.P() + + // String method. + g.P("func (x *", m.GoIdent, ") String() string {") + g.P("return ", protoimplPackage.Ident("X"), ".MessageStringOf(x)") + g.P("}") + g.P() + + // ProtoMessage method. + g.P("func (*", m.GoIdent, ") ProtoMessage() {}") + g.P() + + // ProtoReflect method. + genMessageReflectMethods(g, f, m) + + // Descriptor method. + if m.genRawDescMethod { + var indexes []string + for i := 1; i < len(m.Location.Path); i += 2 { + indexes = append(indexes, strconv.Itoa(int(m.Location.Path[i]))) + } + g.P("// Deprecated: Use ", m.GoIdent, ".ProtoReflect.Descriptor instead.") + g.P("func (*", m.GoIdent, ") Descriptor() ([]byte, []int) {") + g.P("return ", rawDescVarName(f), "GZIP(), []int{", strings.Join(indexes, ","), "}") + g.P("}") + g.P() + f.needRawDesc = true + } +} + +func genMessageGetterMethods(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) { + for _, field := range m.Fields { + genNoInterfacePragma(g, m.isTracked) + + // Getter for parent oneof. + if oneof := field.Oneof; oneof != nil && oneof.Fields[0] == field && !oneof.Desc.IsSynthetic() { + g.AnnotateSymbol(m.GoIdent.GoName+".Get"+oneof.GoName, protogen.Annotation{Location: oneof.Location}) + g.P("func (m *", m.GoIdent.GoName, ") Get", oneof.GoName, "() ", oneofInterfaceName(oneof), " {") + g.P("if m != nil {") + g.P("return m.", oneof.GoName) + g.P("}") + g.P("return nil") + g.P("}") + g.P() + } + + // Getter for message field. + goType, pointer := fieldGoType(g, f, field) + defaultValue := fieldDefaultValue(g, f, m, field) + g.AnnotateSymbol(m.GoIdent.GoName+".Get"+field.GoName, protogen.Annotation{Location: field.Location}) + leadingComments := appendDeprecationSuffix("", + field.Desc.ParentFile(), + field.Desc.Options().(*descriptorpb.FieldOptions).GetDeprecated()) + switch { + case field.Oneof != nil && !field.Oneof.Desc.IsSynthetic(): + g.P(leadingComments, "func (x *", m.GoIdent, ") Get", field.GoName, "() ", goType, " {") + g.P("if x, ok := x.Get", field.Oneof.GoName, "().(*", field.GoIdent, "); ok {") + g.P("return x.", field.GoName) + g.P("}") + g.P("return ", defaultValue) + g.P("}") + default: + g.P(leadingComments, "func (x *", m.GoIdent, ") Get", field.GoName, "() ", goType, " {") + if !field.Desc.HasPresence() || defaultValue == "nil" { + g.P("if x != nil {") + } else { + g.P("if x != nil && x.", field.GoName, " != nil {") + } + star := "" + if pointer { + star = "*" + } + g.P("return ", star, " x.", field.GoName) + g.P("}") + g.P("return ", defaultValue) + g.P("}") + } + g.P() + } +} + +// fieldGoType returns the Go type used for a field. +// +// If it returns pointer=true, the struct field is a pointer to the type. +func fieldGoType(g *protogen.GeneratedFile, f *fileInfo, field *protogen.Field) (goType string, pointer bool) { + pointer = field.Desc.HasPresence() + switch field.Desc.Kind() { + case protoreflect.BoolKind: + goType = "bool" + case protoreflect.EnumKind: + goType = g.QualifiedGoIdent(field.Enum.GoIdent) + case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind: + goType = "int32" + case protoreflect.Uint32Kind, protoreflect.Fixed32Kind: + goType = "uint32" + case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind: + goType = "int64" + case protoreflect.Uint64Kind, protoreflect.Fixed64Kind: + goType = "uint64" + case protoreflect.FloatKind: + goType = "float32" + case protoreflect.DoubleKind: + goType = "float64" + case protoreflect.StringKind: + goType = "string" + case protoreflect.BytesKind: + goType = "[]byte" + pointer = false // rely on nullability of slices for presence + case protoreflect.MessageKind, protoreflect.GroupKind: + goType = "*" + g.QualifiedGoIdent(field.Message.GoIdent) + pointer = false // pointer captured as part of the type + } + switch { + case field.Desc.IsList(): + return "[]" + goType, false + case field.Desc.IsMap(): + keyType, _ := fieldGoType(g, f, field.Message.Fields[0]) + valType, _ := fieldGoType(g, f, field.Message.Fields[1]) + return fmt.Sprintf("map[%v]%v", keyType, valType), false + } + return goType, pointer +} + +func fieldProtobufTagValue(field *protogen.Field) string { + var enumName string + if field.Desc.Kind() == protoreflect.EnumKind { + enumName = protoimpl.X.LegacyEnumName(field.Enum.Desc) + } + return tag.Marshal(field.Desc, enumName) +} + +func fieldDefaultValue(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo, field *protogen.Field) string { + if field.Desc.IsList() { + return "nil" + } + if field.Desc.HasDefault() { + defVarName := "Default_" + m.GoIdent.GoName + "_" + field.GoName + if field.Desc.Kind() == protoreflect.BytesKind { + return "append([]byte(nil), " + defVarName + "...)" + } + return defVarName + } + switch field.Desc.Kind() { + case protoreflect.BoolKind: + return "false" + case protoreflect.StringKind: + return `""` + case protoreflect.MessageKind, protoreflect.GroupKind, protoreflect.BytesKind: + return "nil" + case protoreflect.EnumKind: + val := field.Enum.Values[0] + if val.GoIdent.GoImportPath == f.GoImportPath { + return g.QualifiedGoIdent(val.GoIdent) + } else { + // If the enum value is declared in a different Go package, + // reference it by number since the name may not be correct. + // See https://github.com/golang/protobuf/issues/513. + return g.QualifiedGoIdent(field.Enum.GoIdent) + "(" + strconv.FormatInt(int64(val.Desc.Number()), 10) + ")" + } + default: + return "0" + } +} + +func fieldJSONTagValue(field *protogen.Field) string { + return string(field.Desc.Name()) + ",omitempty" +} + +func genExtensions(g *protogen.GeneratedFile, f *fileInfo) { + if len(f.allExtensions) == 0 { + return + } + + g.P("var ", extensionTypesVarName(f), " = []", protoimplPackage.Ident("ExtensionInfo"), "{") + for _, x := range f.allExtensions { + g.P("{") + g.P("ExtendedType: (*", x.Extendee.GoIdent, ")(nil),") + goType, pointer := fieldGoType(g, f, x.Extension) + if pointer { + goType = "*" + goType + } + g.P("ExtensionType: (", goType, ")(nil),") + g.P("Field: ", x.Desc.Number(), ",") + g.P("Name: ", strconv.Quote(string(x.Desc.FullName())), ",") + g.P("Tag: ", strconv.Quote(fieldProtobufTagValue(x.Extension)), ",") + g.P("Filename: ", strconv.Quote(f.Desc.Path()), ",") + g.P("},") + } + g.P("}") + g.P() + + // Group extensions by the target message. + var orderedTargets []protogen.GoIdent + allExtensionsByTarget := make(map[protogen.GoIdent][]*extensionInfo) + allExtensionsByPtr := make(map[*extensionInfo]int) + for i, x := range f.allExtensions { + target := x.Extendee.GoIdent + if len(allExtensionsByTarget[target]) == 0 { + orderedTargets = append(orderedTargets, target) + } + allExtensionsByTarget[target] = append(allExtensionsByTarget[target], x) + allExtensionsByPtr[x] = i + } + for _, target := range orderedTargets { + g.P("// Extension fields to ", target, ".") + g.P("var (") + for _, x := range allExtensionsByTarget[target] { + xd := x.Desc + typeName := xd.Kind().String() + switch xd.Kind() { + case protoreflect.EnumKind: + typeName = string(xd.Enum().FullName()) + case protoreflect.MessageKind, protoreflect.GroupKind: + typeName = string(xd.Message().FullName()) + } + fieldName := string(xd.Name()) + + leadingComments := x.Comments.Leading + if leadingComments != "" { + leadingComments += "\n" + } + leadingComments += protogen.Comments(fmt.Sprintf(" %v %v %v = %v;\n", + xd.Cardinality(), typeName, fieldName, xd.Number())) + leadingComments = appendDeprecationSuffix(leadingComments, + x.Desc.ParentFile(), + x.Desc.Options().(*descriptorpb.FieldOptions).GetDeprecated()) + g.P(leadingComments, + "E_", x.GoIdent, " = &", extensionTypesVarName(f), "[", allExtensionsByPtr[x], "]", + trailingComment(x.Comments.Trailing)) + } + g.P(")") + g.P() + } +} + +// genMessageOneofWrapperTypes generates the oneof wrapper types and +// associates the types with the parent message type. +func genMessageOneofWrapperTypes(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) { + for _, oneof := range m.Oneofs { + if oneof.Desc.IsSynthetic() { + continue + } + ifName := oneofInterfaceName(oneof) + g.P("type ", ifName, " interface {") + g.P(ifName, "()") + g.P("}") + g.P() + for _, field := range oneof.Fields { + g.AnnotateSymbol(field.GoIdent.GoName, protogen.Annotation{Location: field.Location}) + g.AnnotateSymbol(field.GoIdent.GoName+"."+field.GoName, protogen.Annotation{Location: field.Location}) + g.P("type ", field.GoIdent, " struct {") + goType, _ := fieldGoType(g, f, field) + tags := structTags{ + {"protobuf", fieldProtobufTagValue(field)}, + } + if m.isTracked { + tags = append(tags, gotrackTags...) + } + leadingComments := appendDeprecationSuffix(field.Comments.Leading, + field.Desc.ParentFile(), + field.Desc.Options().(*descriptorpb.FieldOptions).GetDeprecated()) + g.P(leadingComments, + field.GoName, " ", goType, tags, + trailingComment(field.Comments.Trailing)) + g.P("}") + g.P() + } + for _, field := range oneof.Fields { + g.P("func (*", field.GoIdent, ") ", ifName, "() {}") + g.P() + } + } +} + +// oneofInterfaceName returns the name of the interface type implemented by +// the oneof field value types. +func oneofInterfaceName(oneof *protogen.Oneof) string { + return "is" + oneof.GoIdent.GoName +} + +// genNoInterfacePragma generates a standalone "nointerface" pragma to +// decorate methods with field-tracking support. +func genNoInterfacePragma(g *protogen.GeneratedFile, tracked bool) { + if tracked { + g.P("//go:nointerface") + g.P() + } +} + +var gotrackTags = structTags{{"go", "track"}} + +// structTags is a data structure for build idiomatic Go struct tags. +// Each [2]string is a key-value pair, where value is the unescaped string. +// +// Example: structTags{{"key", "value"}}.String() -> `key:"value"` +type structTags [][2]string + +func (tags structTags) String() string { + if len(tags) == 0 { + return "" + } + var ss []string + for _, tag := range tags { + // NOTE: When quoting the value, we need to make sure the backtick + // character does not appear. Convert all cases to the escaped hex form. + key := tag[0] + val := strings.Replace(strconv.Quote(tag[1]), "`", `\x60`, -1) + ss = append(ss, fmt.Sprintf("%s:%s", key, val)) + } + return "`" + strings.Join(ss, " ") + "`" +} + +// appendDeprecationSuffix optionally appends a deprecation notice as a suffix. +func appendDeprecationSuffix(prefix protogen.Comments, parentFile protoreflect.FileDescriptor, deprecated bool) protogen.Comments { + fileDeprecated := parentFile.Options().(*descriptorpb.FileOptions).GetDeprecated() + if !deprecated && !fileDeprecated { + return prefix + } + if prefix != "" { + prefix += "\n" + } + if fileDeprecated { + return prefix + " Deprecated: The entire proto file " + protogen.Comments(parentFile.Path()) + " is marked as deprecated.\n" + } + return prefix + " Deprecated: Marked as deprecated in " + protogen.Comments(parentFile.Path()) + ".\n" +} + +// trailingComment is like protogen.Comments, but lacks a trailing newline. +type trailingComment protogen.Comments + +func (c trailingComment) String() string { + s := strings.TrimSuffix(protogen.Comments(c).String(), "\n") + if strings.Contains(s, "\n") { + // We don't support multi-lined trailing comments as it is unclear + // how to best render them in the generated code. + return "" + } + return s +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/opaque.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/opaque.go new file mode 100644 index 0000000..45749ed --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/opaque.go @@ -0,0 +1,1218 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package internal_gengo + +import ( + "fmt" + "strings" + "unicode" + "unicode/utf8" + + "google.golang.org/protobuf/compiler/protogen" + "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/internal/genid" + "google.golang.org/protobuf/reflect/protoreflect" + + "google.golang.org/protobuf/types/descriptorpb" +) + +func opaqueGenMessageHook(g *protogen.GeneratedFile, f *fileInfo, message *messageInfo) bool { + opaqueGenMessage(g, f, message) + return true +} + +func opaqueGenMessage(g *protogen.GeneratedFile, f *fileInfo, message *messageInfo) { + // Message type declaration. + g.AnnotateSymbol(message.GoIdent.GoName, protogen.Annotation{Location: message.Location}) + leadingComments := appendDeprecationSuffix(message.Comments.Leading, + message.Desc.ParentFile(), + message.Desc.Options().(*descriptorpb.MessageOptions).GetDeprecated()) + g.P(leadingComments, + "type ", message.GoIdent, " struct {") + + sf := f.allMessageFieldsByPtr[message] + if sf == nil { + sf = new(structFields) + f.allMessageFieldsByPtr[message] = sf + } + + var tags structTags + switch { + case message.isOpen(): + tags = structTags{{"protogen", "open.v1"}} + case message.isHybrid(): + tags = structTags{{"protogen", "hybrid.v1"}} + case message.isOpaque(): + tags = structTags{{"protogen", "opaque.v1"}} + } + + g.P(genid.State_goname, " ", protoimplPackage.Ident("MessageState"), tags) + sf.append(genid.State_goname) + fields := message.Fields + for _, field := range fields { + opaqueGenMessageField(g, f, message, field, sf) + } + opaqueGenMessageInternalFields(g, f, message, sf) + g.P("}") + g.P() + + genMessageKnownFunctions(g, f, message) + genMessageDefaultDecls(g, f, message) + opaqueGenMessageMethods(g, f, message) + opaqueGenMessageBuilder(g, f, message) + opaqueGenOneofWrapperTypes(g, f, message) +} + +// opaqueGenMessageField generates a struct field. +func opaqueGenMessageField(g *protogen.GeneratedFile, f *fileInfo, message *messageInfo, field *protogen.Field, sf *structFields) { + if oneof := field.Oneof; oneof != nil && !oneof.Desc.IsSynthetic() { + // It would be a bit simpler to iterate over the oneofs below, + // but generating the field here keeps the contents of the Go + // struct in the same order as the contents of the source + // .proto file. + if field != oneof.Fields[0] { + return + } + opaqueGenOneofFields(g, f, message, oneof, sf) + return + } + + goType, pointer := opaqueFieldGoType(g, f, message, field) + if pointer { + goType = "*" + goType + } + protobufTagValue := fieldProtobufTagValue(field) + jsonTagValue := fieldJSONTagValue(field) + if g.InternalStripForEditionsDiff() { + if field.Desc.ContainingOneof() != nil && field.Desc.ContainingOneof().IsSynthetic() { + protobufTagValue = strings.ReplaceAll(protobufTagValue, ",oneof", "") + } + protobufTagValue = strings.ReplaceAll(protobufTagValue, ",proto3", "") + } + tags := structTags{ + {"protobuf", protobufTagValue}, + } + if !message.isOpaque() { + tags = append(tags, structTags{{"json", jsonTagValue}}...) + } + if field.Desc.IsMap() { + keyTagValue := fieldProtobufTagValue(field.Message.Fields[0]) + valTagValue := fieldProtobufTagValue(field.Message.Fields[1]) + keyTagValue = strings.ReplaceAll(keyTagValue, ",proto3", "") + valTagValue = strings.ReplaceAll(valTagValue, ",proto3", "") + tags = append(tags, structTags{ + {"protobuf_key", keyTagValue}, + {"protobuf_val", valTagValue}, + }...) + } + + name := field.GoName + if message.isOpaque() { + name = "xxx_hidden_" + name + } + + if message.isOpaque() { + g.P(name, " ", goType, tags) + sf.append(name) + if message.isTracked { + g.P("// Deprecated: Do not use. This will be deleted in the near future.") + g.P("XXX_ft_", field.GoName, " struct{} `go:\"track\"`") + sf.append("XXX_ft_" + field.GoName) + } + } else { + if message.isTracked { + tags = append(tags, structTags{ + {"go", "track"}, + }...) + } + g.AnnotateSymbol(field.Parent.GoIdent.GoName+"."+name, protogen.Annotation{Location: field.Location}) + leadingComments := appendDeprecationSuffix(field.Comments.Leading, + field.Desc.ParentFile(), + field.Desc.Options().(*descriptorpb.FieldOptions).GetDeprecated()) + g.P(leadingComments, + name, " ", goType, tags, + trailingComment(field.Comments.Trailing)) + sf.append(name) + } +} + +// opaqueGenOneofFields generates the message fields for a oneof. +func opaqueGenOneofFields(g *protogen.GeneratedFile, f *fileInfo, message *messageInfo, oneof *protogen.Oneof, sf *structFields) { + tags := structTags{ + {"protobuf_oneof", string(oneof.Desc.Name())}, + } + if message.isTracked { + tags = append(tags, structTags{ + {"go", "track"}, + }...) + } + + oneofName := opaqueOneofFieldName(oneof, message.isOpaque()) + goType := opaqueOneofInterfaceName(oneof) + + if message.isOpaque() { + g.P(oneofName, " ", goType, tags) + sf.append(oneofName) + if message.isTracked { + g.P("// Deprecated: Do not use. This will be deleted in the near future.") + g.P("XXX_ft_", oneof.GoName, " struct{} `go:\"track\"`") + sf.append("XXX_ft_" + oneof.GoName) + } + return + } + + leadingComments := oneof.Comments.Leading + if leadingComments != "" { + leadingComments += "\n" + } + // NOTE(rsc): The extra \n here is working around #52605, + // making the comment be in Go 1.19 doc comment format + // even though it's not really a doc comment. + ss := []string{" Types that are valid to be assigned to ", oneofName, ":\n\n"} + for _, field := range oneof.Fields { + ss = append(ss, "\t*"+opaqueFieldOneofType(field, message.isOpaque()).GoName+"\n") + } + leadingComments += protogen.Comments(strings.Join(ss, "")) + g.P(leadingComments, oneofName, " ", goType, tags) + sf.append(oneofName) +} + +// opaqueGenMessageInternalFields adds additional XXX_ fields to a message struct. +func opaqueGenMessageInternalFields(g *protogen.GeneratedFile, f *fileInfo, message *messageInfo, sf *structFields) { + if opaqueNeedsPresenceArray(message) { + if opaqueNeedsLazyStruct(message) { + g.P("// Deprecated: Do not use. This will be deleted in the near future.") + g.P("XXX_lazyUnmarshalInfo ", protoimplPackage.Ident("LazyUnmarshalInfo")) + sf.append("XXX_lazyUnmarshalInfo") + } + g.P("XXX_raceDetectHookData ", protoimplPackage.Ident("RaceDetectHookData")) + sf.append("XXX_raceDetectHookData") + + // Presence must be stored in a data type no larger than 32 bit: + // + // Presence used to be a uint64, accessed with atomic.LoadUint64, but it + // turns out that on 32-bit platforms like GOARCH=arm, the struct field + // was 32-bit aligned (not 64-bit aligned) and hence atomic accesses + // failed. + // + // The easiest solution was to switch to a uint32 on all platforms, + // which did not come with a performance penalty. + g.P("XXX_presence [", (opaqueNumPresenceFields(message)+31)/32, "]uint32") + sf.append("XXX_presence") + } + if message.Desc.ExtensionRanges().Len() > 0 { + g.P(genid.ExtensionFields_goname, " ", protoimplPackage.Ident("ExtensionFields")) + sf.append(genid.ExtensionFields_goname) + } + g.P(genid.UnknownFields_goname, " ", protoimplPackage.Ident("UnknownFields")) + sf.append(genid.UnknownFields_goname) + g.P(genid.SizeCache_goname, " ", protoimplPackage.Ident("SizeCache")) + sf.append(genid.SizeCache_goname) +} + +func opaqueGenMessageMethods(g *protogen.GeneratedFile, f *fileInfo, message *messageInfo) { + genMessageBaseMethods(g, f, message) + + isRepeated := func(field *protogen.Field) bool { + return field.Desc.Cardinality() == protoreflect.Repeated + } + + for _, field := range message.Fields { + if isFirstOneofField(field) && !message.isOpaque() { + opaqueGenGetOneof(g, f, message, field.Oneof) + } + opaqueGenGet(g, f, message, field) + } + for _, field := range message.Fields { + // For the plain open mode, we do not have setters. + if message.isOpen() { + continue + } + opaqueGenSet(g, f, message, field) + } + for _, field := range message.Fields { + // Open API does not have Has method. + // Repeated (includes map) fields do not have Has method. + if message.isOpen() || isRepeated(field) { + continue + } + + if !field.Desc.HasPresence() { + continue + } + + if isFirstOneofField(field) { + opaqueGenHasOneof(g, f, message, field.Oneof) + } + opaqueGenHas(g, f, message, field) + } + for _, field := range message.Fields { + // Open API does not have Clear method. + // Repeated (includes map) fields do not have Clear method. + if message.isOpen() || isRepeated(field) { + continue + } + if !field.Desc.HasPresence() { + continue + } + + if isFirstOneofField(field) { + opaqueGenClearOneof(g, f, message, field.Oneof) + } + opaqueGenClear(g, f, message, field) + } + // Plain open protos do not have which methods. + if !message.isOpen() { + opaqueGenWhichOneof(g, f, message) + } + + if g.InternalStripForEditionsDiff() { + return + } +} + +func isLazy(field *protogen.Field) bool { + // Prerequisite: field is of kind message + if field.Message == nil { + return false + } + + // Was the field marked as [lazy = true] in the .proto file? + return field.Desc.(interface{ IsLazy() bool }).IsLazy() +} + +// opaqueGenGet generates a Get method for a field. +func opaqueGenGet(g *protogen.GeneratedFile, f *fileInfo, message *messageInfo, field *protogen.Field) { + goType, pointer := opaqueFieldGoType(g, f, message, field) + getterName, bcName := field.MethodName("Get") + + // If we need a backwards compatible getter name, we add it now. + if bcName != "" { + defer func() { + g.P("// Deprecated: Use ", getterName, " instead.") + g.P("func (x *", message.GoIdent, ") ", bcName, "() ", goType, " {") + g.P("return x.", getterName, "()") + g.P("}") + g.P() + }() + } + + leadingComments := appendDeprecationSuffix("", + field.Desc.ParentFile(), + field.Desc.Options().(*descriptorpb.FieldOptions).GetDeprecated()) + fieldtrackNoInterface(g, message.isTracked) + g.AnnotateSymbol(message.GoIdent.GoName+"."+getterName, protogen.Annotation{Location: field.Location}) + + defaultValue := fieldDefaultValue(g, f, message, field) + + // Oneof field. + if oneof := field.Oneof; oneof != nil && !oneof.Desc.IsSynthetic() { + structPtr := "x" + g.P(leadingComments, "func (x *", message.GoIdent, ") ", getterName, "() ", goType, " {") + g.P("if x != nil {") + if message.isOpaque() && message.isTracked { + g.P("_ = ", structPtr, ".XXX_ft_", field.Oneof.GoName) + } + g.P("if x, ok := ", structPtr, ".", opaqueOneofFieldName(oneof, message.isOpaque()), ".(*", opaqueFieldOneofType(field, message.isOpaque()), "); ok {") + g.P("return x.", field.GoName) + g.P("}") + // End if m != nil {. + g.P("}") + g.P("return ", defaultValue) + g.P("}") + g.P() + return + } + + // Non-oneof field for open type message. + if !message.isOpaque() { + g.P(leadingComments, "func (x *", message.GoIdent, ") ", getterName, "() ", goType, " {") + if !field.Desc.HasPresence() || defaultValue == "nil" { + g.P("if x != nil {") + } else { + g.P("if x != nil && x.", field.GoName, " != nil {") + } + star := "" + if pointer { + star = "*" + } + g.P("return ", star, " x.", field.GoName) + g.P("}") + g.P("return ", defaultValue) + g.P("}") + g.P() + return + } + + // Non-oneof field for opaque type message. + g.P(leadingComments, "func (x *", message.GoIdent, ") ", getterName, "() ", goType, "{") + structPtr := "x" + g.P("if x != nil {") + if message.isTracked { + g.P("_ = ", structPtr, ".XXX_ft_", field.GoName) + } + if usePresence(message, field) { + pi := opaqueFieldPresenceIndex(field) + ai := pi / 32 + // For + // + // 1. Message fields of lazy messages (unmarshalled lazily), + // 2. Fields with a default value, + // 3. Closed enums + // + // ...we check presence, but for other fields using presence, we can return + // whatever is there and it should be correct regardless of presence, which + // saves us an atomic operation. + isEnum := field.Desc.Kind() == protoreflect.EnumKind + usePresenceForRead := (isLazy(field)) || + field.Desc.HasDefault() || isEnum + + if usePresenceForRead { + g.P("if ", protoimplPackage.Ident("X"), ".Present(&(", structPtr, ".XXX_presence[", ai, "]),", pi, ") {") + } + // For lazy, check if pointer is nil and optionally unmarshal + if isLazy(field) { + // Since pointer to lazily unmarshaled sub-message can be written during a conceptual + // "read" operation, all read/write accesses to the pointer must be atomic. This + // function gets inlined on x86 as just a simple get and compare. Still need to make the + // slice accesses be atomic. + g.P("if ", protoimplPackage.Ident("X"), ".AtomicCheckPointerIsNil(&", structPtr, ".xxx_hidden_", field.GoName, ") {") + g.P(protoimplPackage.Ident("X"), ".UnmarshalField(", structPtr, ", ", field.Desc.Number(), ")") + g.P("}") + } + if field.Message == nil || field.Desc.IsMap() { + star := "" + if pointer { + star = "*" + } + if pointer { + g.P("if ", structPtr, ".xxx_hidden_", field.GoName, "!= nil {") + } + + g.P("return ", star, structPtr, ".xxx_hidden_", field.GoName) + if pointer { + g.P("}") + g.P("return ", defaultValue) + } + } else { + // We need to do an atomic load of the msg pointer field, but cannot explicitly use + // unsafe pointers here. We load the value and store into rv, via protoimpl.Pointer, + // which is aliased to unsafe.Pointer in pointer_unsafe.go, but is aliased to + // interface{} in pointer_reflect.go + star := "" + if pointer { + star = "*" + } + if isLazy(field) { + g.P("var rv ", star, goType) + g.P(protoimplPackage.Ident("X"), ".AtomicLoadPointer(", protoimplPackage.Ident("Pointer"), "(&", structPtr, ".xxx_hidden_", field.GoName, "), ", protoimplPackage.Ident("Pointer"), "(&rv))") + g.P("return ", star, "rv") + } else { + if pointer { + g.P("if ", structPtr, ".xxx_hidden_", field.GoName, "!= nil {") + } + g.P("return ", star, structPtr, ".xxx_hidden_", field.GoName) + if pointer { + g.P("}") + } + } + } + if usePresenceForRead { + g.P("}") + } + } else if pointer { + g.P("if ", structPtr, ".xxx_hidden_", field.GoName, " != nil {") + g.P("return *", structPtr, ".xxx_hidden_", field.GoName) + g.P("}") + } else { + g.P("return ", structPtr, ".xxx_hidden_", field.GoName) + } + // End if m != nil {. + g.P("}") + g.P("return ", defaultValue) + g.P("}") + g.P() +} + +// opaqueGenSet generates a Set method for a field. +func opaqueGenSet(g *protogen.GeneratedFile, f *fileInfo, message *messageInfo, field *protogen.Field) { + goType, pointer := opaqueFieldGoType(g, f, message, field) + setterName, bcName := field.MethodName("Set") + + // If we need a backwards compatible setter name, we add it now. + if bcName != "" { + defer func() { + g.P("// Deprecated: Use ", setterName, " instead.") + g.P("func (x *", message.GoIdent, ") ", bcName, "(v ", goType, ") {") + g.P("x.", setterName, "(v)") + g.P("}") + g.P() + }() + } + + leadingComments := appendDeprecationSuffix("", + field.Desc.ParentFile(), + field.Desc.Options().(*descriptorpb.FieldOptions).GetDeprecated()) + g.AnnotateSymbol(message.GoIdent.GoName+"."+setterName, protogen.Annotation{ + Location: field.Location, + Semantic: descriptorpb.GeneratedCodeInfo_Annotation_SET.Enum(), + }) + fieldtrackNoInterface(g, message.noInterface) + + // Oneof field. + if oneof := field.Oneof; oneof != nil && !oneof.Desc.IsSynthetic() { + g.P(leadingComments, "func (x *", message.GoIdent, ") ", setterName, "(v ", goType, ") {") + structPtr := "x" + if message.isOpaque() && message.isTracked { + // Add access to zero field for tracking + g.P(structPtr, ".XXX_ft_", oneof.GoName, " = struct{}{}") + } + if field.Desc.Kind() == protoreflect.BytesKind { + g.P("if v == nil { v = []byte{} }") + } else if field.Message != nil { + g.P("if v == nil {") + g.P(structPtr, ".", opaqueOneofFieldName(oneof, message.isOpaque()), "= nil") + g.P("return") + g.P("}") + } + g.P(structPtr, ".", opaqueOneofFieldName(oneof, message.isOpaque()), "= &", opaqueFieldOneofType(field, message.isOpaque()), "{v}") + g.P("}") + g.P() + return + } + + // Non-oneof field for open type message. + if !message.isOpaque() { + g.P(leadingComments, "func (x *", message.GoIdent, ") ", setterName, "(v ", goType, ") {") + if field.Desc.Cardinality() != protoreflect.Repeated && field.Desc.Kind() == protoreflect.BytesKind { + g.P("if v == nil { v = []byte{} }") + } + amp := "" + if pointer { + amp = "&" + } + + v := "v" + g.P("x.", field.GoName, " = ", amp, v) + g.P("}") + g.P() + return + } + + // Non-oneof field for opaque type message. + g.P(leadingComments, "func (x *", message.GoIdent, ") ", setterName, "(v ", goType, ") {") + structPtr := "x" + if message.isTracked { + // Add access to zero field for tracking + g.P(structPtr, ".XXX_ft_", field.GoName, " = struct{}{}") + } + if field.Desc.Cardinality() != protoreflect.Repeated && field.Desc.Kind() == protoreflect.BytesKind { + g.P("if v == nil { v = []byte{} }") + } + amp := "" + if pointer { + amp = "&" + } + if usePresence(message, field) { + pi := opaqueFieldPresenceIndex(field) + ai := pi / 32 + + if field.Message != nil && field.Desc.IsList() { + g.P("var sv *", goType) + g.P(protoimplPackage.Ident("X"), ".AtomicLoadPointer(", protoimplPackage.Ident("Pointer"), "(&", structPtr, ".xxx_hidden_", field.GoName, "), ", protoimplPackage.Ident("Pointer"), "(&sv))") + g.P("if sv == nil {") + g.P("sv = &", goType, "{}") + g.P(protoimplPackage.Ident("X"), ".AtomicInitializePointer(", protoimplPackage.Ident("Pointer"), "(&", structPtr, ".xxx_hidden_", field.GoName, "), ", protoimplPackage.Ident("Pointer"), "(&sv))") + g.P("}") + g.P("*sv = v") + g.P(protoimplPackage.Ident("X"), ".SetPresent(&(", structPtr, ".XXX_presence[", ai, "]),", pi, ",", opaqueNumPresenceFields(message), ")") + } else if field.Message != nil && !field.Desc.IsMap() { + // Only for lazy messages do we need to set pointers atomically + if isLazy(field) { + g.P(protoimplPackage.Ident("X"), ".AtomicSetPointer(&", structPtr, ".xxx_hidden_", field.GoName, ", ", amp, "v)") + } else { + g.P(structPtr, ".xxx_hidden_", field.GoName, " = ", amp, "v") + } + // When setting a message or slice of messages to a nil + // value, we must clear the presence bit, else we will + // later think that this field still needs to be lazily decoded. + g.P("if v == nil {") + g.P(protoimplPackage.Ident("X"), ".ClearPresent(&(", structPtr, ".XXX_presence[", ai, "]),", pi, ")") + g.P("} else {") + g.P(protoimplPackage.Ident("X"), ".SetPresent(&(", structPtr, ".XXX_presence[", ai, "]),", pi, ",", opaqueNumPresenceFields(message), ")") + g.P("}") + } else { + // Any map or non-message, possibly repeated, field that uses presence (proto2 only) + g.P(structPtr, ".xxx_hidden_", field.GoName, " = ", amp, "v") + // For consistent behaviour with lazy fields, non-map repeated fields should be cleared when + // the last object is removed. Maps are cleared when set to a nil map. + if field.Desc.Cardinality() == protoreflect.Repeated { // Includes maps. + g.P("if v == nil {") + g.P(protoimplPackage.Ident("X"), ".ClearPresent(&(", structPtr, ".XXX_presence[", ai, "]),", pi, ")") + g.P("} else {") + } + g.P(protoimplPackage.Ident("X"), ".SetPresent(&(", structPtr, ".XXX_presence[", ai, "]),", pi, ",", opaqueNumPresenceFields(message), ")") + if field.Desc.Cardinality() == protoreflect.Repeated { + g.P("}") + } + } + } else { + // proto3 non-lazy fields + g.P(structPtr, ".xxx_hidden_", field.GoName, " = ", amp, "v") + } + g.P("}") + g.P() +} + +// usePresence returns true if the presence map should be used for a field. It +// is always true for lazy message types. It is also true for all scalar fields. +// repeated, map or message fields are not using the presence map. +func usePresence(message *messageInfo, field *protogen.Field) bool { + if !message.isOpaque() { + return false + } + usePresence, _ := filedesc.UsePresenceForField(field.Desc) + return usePresence +} + +// opaqueGenHas generates a Has method for a field. +func opaqueGenHas(g *protogen.GeneratedFile, f *fileInfo, message *messageInfo, field *protogen.Field) { + hasserName, _ := field.MethodName("Has") + + leadingComments := appendDeprecationSuffix("", + field.Desc.ParentFile(), + field.Desc.Options().(*descriptorpb.FieldOptions).GetDeprecated()) + g.AnnotateSymbol(message.GoIdent.GoName+"."+hasserName, protogen.Annotation{Location: field.Location}) + fieldtrackNoInterface(g, message.noInterface) + + // Oneof field. + if oneof := field.Oneof; oneof != nil && !oneof.Desc.IsSynthetic() { + g.P(leadingComments, "func (x *", message.GoIdent, ") ", hasserName, "() bool {") + structPtr := "x" + g.P("if ", structPtr, " == nil {") + g.P("return false") + g.P("}") + if message.isOpaque() && message.isTracked { + // Add access to zero field for tracking + g.P("_ = ", structPtr, ".", "XXX_ft_", oneof.GoName) + } + g.P("_, ok := ", structPtr, ".", opaqueOneofFieldName(oneof, message.isOpaque()), ".(*", opaqueFieldOneofType(field, message.isOpaque()), ")") + g.P("return ok") + g.P("}") + g.P() + return + } + + // Non-oneof field in open message. + if !message.isOpaque() { + g.P(leadingComments, "func (x *", message.GoIdent, ") ", hasserName, "() bool {") + g.P("if x == nil {") + g.P("return false") + g.P("}") + g.P("return ", "x.", field.GoName, " != nil") + g.P("}") + g.P() + return + } + + // Non-oneof field in opaque message. + g.P(leadingComments, "func (x *", message.GoIdent, ") ", hasserName, "() bool {") + g.P("if x == nil {") + g.P("return false") + g.P("}") + structPtr := "x" + if message.isTracked { + // Add access to zero field for tracking + g.P("_ = ", structPtr, ".", "XXX_ft_"+field.GoName) + } + if usePresence(message, field) { + pi := opaqueFieldPresenceIndex(field) + ai := pi / 32 + g.P("return ", protoimplPackage.Ident("X"), ".Present(&(", structPtr, ".XXX_presence[", ai, "]),", pi, ")") + } else { + // Has for proto3 message without presence + g.P("return ", structPtr, ".xxx_hidden_", field.GoName, " != nil") + } + + g.P("}") + g.P() +} + +// opaqueGenClear generates a Clear method for a field. +func opaqueGenClear(g *protogen.GeneratedFile, f *fileInfo, message *messageInfo, field *protogen.Field) { + clearerName, _ := field.MethodName("Clear") + pi := opaqueFieldPresenceIndex(field) + ai := pi / 32 + + leadingComments := appendDeprecationSuffix("", + field.Desc.ParentFile(), + field.Desc.Options().(*descriptorpb.FieldOptions).GetDeprecated()) + g.AnnotateSymbol(message.GoIdent.GoName+"."+clearerName, protogen.Annotation{ + Location: field.Location, + Semantic: descriptorpb.GeneratedCodeInfo_Annotation_SET.Enum(), + }) + fieldtrackNoInterface(g, message.noInterface) + + // Oneof field. + if oneof := field.Oneof; oneof != nil && !oneof.Desc.IsSynthetic() { + g.P(leadingComments, "func (x *", message.GoIdent, ") ", clearerName, "() {") + structPtr := "x" + if message.isOpaque() && message.isTracked { + // Add access to zero field for tracking + g.P(structPtr, ".", "XXX_ft_", oneof.GoName, " = struct{}{}") + } + g.P("if _, ok := ", structPtr, ".", opaqueOneofFieldName(oneof, message.isOpaque()), ".(*", opaqueFieldOneofType(field, message.isOpaque()), "); ok {") + g.P(structPtr, ".", opaqueOneofFieldName(oneof, message.isOpaque()), " = nil") + g.P("}") + g.P("}") + g.P() + return + } + + // Non-oneof field in open message. + if !message.isOpaque() { + g.P(leadingComments, "func (x *", message.GoIdent, ") ", clearerName, "() {") + g.P("x.", field.GoName, " = nil") + g.P("}") + g.P() + return + } + + // Non-oneof field in opaque message. + g.P(leadingComments, "func (x *", message.GoIdent, ") ", clearerName, "() {") + structPtr := "x" + if message.isTracked { + // Add access to zero field for tracking + g.P(structPtr, ".", "XXX_ft_", field.GoName, " = struct{}{}") + } + + if usePresence(message, field) { + g.P(protoimplPackage.Ident("X"), ".ClearPresent(&(", structPtr, ".XXX_presence[", ai, "]),", pi, ")") + } + + // Avoid needing to read the presence value in Get by ensuring that we set the + // right zero value (unless we have an explicit default, in which case we + // revert to presence checking in Get). Rationale: Get is called far more + // frequently than Clear, it should be as lean as possible. + zv := opaqueZeroValueForField(g, field) + // For lazy, (repeated) message fields are unmarshalled lazily. Hence they are + // assigned atomically in Getters (which are allowed to be called + // concurrently). Due to this, historically, the code generator would use + // atomic operations everywhere. + // + // TODO(b/291588964): Stop using atomic operations for non-presence fields in + // write calls (Set/Clear). Concurrent reads are allowed, + // but concurrent read/write or write/write are not, we + // shouldn't cater to it. + if isLazy(field) { + goType, _ := opaqueFieldGoType(g, f, message, field) + g.P(protoimplPackage.Ident("X"), ".AtomicSetPointer(&", structPtr, ".xxx_hidden_", field.GoName, ",(", goType, ")(", zv, "))") + } else if !field.Desc.HasDefault() { + g.P(structPtr, ".xxx_hidden_", field.GoName, " = ", zv) + } + g.P("}") + g.P() +} + +// Determine what value to set a cleared field to. +func opaqueZeroValueForField(g *protogen.GeneratedFile, field *protogen.Field) string { + if field.Desc.Cardinality() == protoreflect.Repeated { + return "nil" + } + switch field.Desc.Kind() { + case protoreflect.StringKind: + return "nil" + case protoreflect.MessageKind, protoreflect.GroupKind, protoreflect.BytesKind: + return "nil" + case protoreflect.BoolKind: + return "false" + case protoreflect.EnumKind: + return g.QualifiedGoIdent(field.Enum.Values[0].GoIdent) + default: + return "0" + } +} + +// opaqueGenGetOneof generates a Get function for a oneof union. +func opaqueGenGetOneof(g *protogen.GeneratedFile, f *fileInfo, message *messageInfo, oneof *protogen.Oneof) { + ifName := opaqueOneofInterfaceName(oneof) + g.AnnotateSymbol(message.GoIdent.GoName+".Get"+oneof.GoName, protogen.Annotation{Location: oneof.Location}) + fieldtrackNoInterface(g, message.isTracked) + g.P("func (x *", message.GoIdent.GoName, ") Get", oneof.GoName, "() ", ifName, " {") + g.P("if x != nil {") + g.P("return x.", opaqueOneofFieldName(oneof, message.isOpaque())) + g.P("}") + g.P("return nil") + g.P("}") + g.P() +} + +// opaqueGenHasOneof generates a Has function for a oneof union. +func opaqueGenHasOneof(g *protogen.GeneratedFile, f *fileInfo, message *messageInfo, oneof *protogen.Oneof) { + fieldtrackNoInterface(g, message.noInterface) + hasserName := oneof.MethodName("Has") + g.P("func (x *", message.GoIdent, ") ", hasserName, "() bool {") + g.P("if x == nil {") + g.P("return false") + g.P("}") + structPtr := "x" + if message.isOpaque() && message.isTracked { + // Add access to zero field for tracking + g.P("_ = ", structPtr, ".XXX_ft_", oneof.GoName) + } + g.P("return ", structPtr, ".", opaqueOneofFieldName(oneof, message.isOpaque()), " != nil") + g.P("}") + g.P() +} + +// opaqueGenClearOneof generates a Clear function for a oneof union. +func opaqueGenClearOneof(g *protogen.GeneratedFile, f *fileInfo, message *messageInfo, oneof *protogen.Oneof) { + fieldtrackNoInterface(g, message.noInterface) + clearerName := oneof.MethodName("Clear") + g.P("func (x *", message.GoIdent, ") ", clearerName, "() {") + structPtr := "x" + if message.isOpaque() && message.isTracked { + // Add access to zero field for tracking + g.P(structPtr, ".", "XXX_ft_", oneof.GoName, " = struct{}{}") + } + g.P(structPtr, ".", opaqueOneofFieldName(oneof, message.isOpaque()), " = nil") + g.P("}") + g.P() +} + +// opaqueGenWhichOneof generates the Which method for each oneof union, as well as the case values for each member +// of that union. +func opaqueGenWhichOneof(g *protogen.GeneratedFile, f *fileInfo, message *messageInfo) { + // Go through the message, and for each field that is the first of a oneof field, dig down + // and generate constants + the actual which method. + oneofIndex := 0 + for _, field := range message.Fields { + if oneof := field.Oneof; oneof != nil { + if !isFirstOneofField(field) { + continue + } + caseType := opaqueOneofCaseTypeName(oneof) + g.P("const ", message.GoIdent.GoName, "_", oneof.GoName, "_not_set_case ", caseType, " = ", 0) + for _, f := range oneof.Fields { + g.P("const ", message.GoIdent.GoName, "_", f.GoName, "_case ", caseType, " = ", f.Desc.Number()) + } + fieldtrackNoInterface(g, message.noInterface) + whicherName := oneof.MethodName("Which") + g.P("func (x *", message.GoIdent, ") ", whicherName, "() ", caseType, " {") + g.P("if x == nil {") + g.P("return ", message.GoIdent.GoName, "_", oneof.GoName, "_not_set_case ") + g.P("}") + g.P("switch x.", opaqueOneofFieldName(oneof, message.isOpaque()), ".(type) {") + for _, f := range oneof.Fields { + g.P("case *", opaqueFieldOneofType(f, message.isOpaque()), ":") + g.P("return ", message.GoIdent.GoName, "_", f.GoName, "_case") + } + g.P("default", ":") + g.P("return ", message.GoIdent.GoName, "_", oneof.GoName, "_not_set_case ") + g.P("}") + g.P("}") + g.P() + oneofIndex++ + } + } +} + +func opaqueNeedsPresenceArray(message *messageInfo) bool { + if !message.isOpaque() { + return false + } + for _, field := range message.Fields { + if usePresence, _ := filedesc.UsePresenceForField(field.Desc); usePresence { + return true + } + } + return false +} + +func opaqueNeedsLazyStruct(message *messageInfo) bool { + for _, field := range message.Fields { + if isLazy(field) { + return true + } + } + return false +} + +// opaqueGenMessageBuilder generates a Builder type for a message. +func opaqueGenMessageBuilder(g *protogen.GeneratedFile, f *fileInfo, message *messageInfo) { + if message.isOpen() { + return + } + // Builder type. + bName := g.QualifiedGoIdent(message.GoIdent) + genid.BuilderSuffix_goname + g.AnnotateSymbol(message.GoIdent.GoName+genid.BuilderSuffix_goname, protogen.Annotation{Location: message.Location}) + + leadingComments := appendDeprecationSuffix("", + message.Desc.ParentFile(), + message.Desc.Options().(*descriptorpb.MessageOptions).GetDeprecated()) + g.P(leadingComments, "type ", bName, " struct {") + g.P("_ [0]func() // Prevents comparability and use of unkeyed literals for the builder.") + g.P() + for _, field := range message.Fields { + oneof := field.Oneof + + goType, pointer := opaqueBuilderFieldGoType(g, f, message, field) + if pointer { + goType = "*" + goType + } else if oneof != nil && fieldDefaultValue(g, f, message, field) != "nil" { + goType = "*" + goType + } + // Track all non-oneof fields. Note: synthetic oneofs are an + // implementation detail of proto3 optional fields: + // go/proto-proposals/proto3-presence.md, which should be tracked. + tag := "" + if (oneof == nil || oneof.Desc.IsSynthetic()) && message.isTracked { + tag = "`go:\"track\"`" + } + if oneof != nil && oneof.Fields[0] == field && !oneof.Desc.IsSynthetic() { + if oneof.Comments.Leading != "" { + g.P(oneof.Comments.Leading) + g.P() + } + g.P("// Fields of oneof ", opaqueOneofFieldName(oneof, message.isOpaque()), ":") + } + g.AnnotateSymbol(field.Parent.GoIdent.GoName+genid.BuilderSuffix_goname+"."+field.BuilderFieldName(), protogen.Annotation{Location: field.Location}) + leadingComments := appendDeprecationSuffix(field.Comments.Leading, + field.Desc.ParentFile(), + field.Desc.Options().(*descriptorpb.FieldOptions).GetDeprecated()) + g.P(leadingComments, + field.BuilderFieldName(), " ", goType, " ", tag) + if oneof != nil && oneof.Fields[len(oneof.Fields)-1] == field && !oneof.Desc.IsSynthetic() { + g.P("// -- end of ", opaqueOneofFieldName(oneof, message.isOpaque())) + } + } + g.P("}") + g.P() + + opaqueGenBuildMethod(g, f, message, bName) +} + +// opaqueGenBuildMethod generates the actual Build method for the builder +func opaqueGenBuildMethod(g *protogen.GeneratedFile, f *fileInfo, message *messageInfo, bName string) { + // Build method on the builder type. + fieldtrackNoInterface(g, message.noInterface) + g.P("func (b0 ", bName, ") Build() *", message.GoIdent, " {") + g.P("m0 := &", message.GoIdent, "{}") + + if message.isTracked { + // Redeclare the builder and message types as local + // defined types, so that field tracking records the + // field uses against these types instead of the + // original struct types. + // + // TODO: Actually redeclare the struct types + // without `go:"track"` tags? + g.P("type (notrackB ", bName, "; notrackM ", message.GoIdent, ")") + g.P("b, x := (*notrackB)(&b0), (*notrackM)(m0)") + } else { + g.P("b, x := &b0, m0") + } + g.P("_, _ = b, x") + + for _, field := range message.Fields { + oneof := field.Oneof + if oneof != nil && !oneof.Desc.IsSynthetic() { + qual := "" + if fieldDefaultValue(g, f, message, field) != "nil" { + qual = "*" + } + + g.P("if b.", field.BuilderFieldName(), " != nil {") + oneofName := opaqueOneofFieldName(oneof, message.isOpaque()) + oneofType := opaqueFieldOneofType(field, message.isOpaque()) + g.P("x.", oneofName, " = &", oneofType, "{", qual, "b.", field.BuilderFieldName(), "}") + g.P("}") + } else { // proto3 optional ends up here (synthetic oneof) + qual := "" + _, pointer := opaqueBuilderFieldGoType(g, f, message, field) + if pointer && message.isOpaque() && !field.Desc.IsList() && field.Desc.Kind() != protoreflect.StringKind { + qual = "*" + } else if message.isOpaque() && field.Desc.IsList() && field.Desc.Message() != nil { + qual = "&" + } + presence := usePresence(message, field) + if presence { + g.P("if b.", field.BuilderFieldName(), " != nil {") + } + if presence { + pi := opaqueFieldPresenceIndex(field) + g.P(protoimplPackage.Ident("X"), ".SetPresentNonAtomic(&(x.XXX_presence[", pi/32, "]),", pi, ",", opaqueNumPresenceFields(message), ")") + } + goName := field.GoName + if message.isOpaque() { + goName = "xxx_hidden_" + goName + } + g.P("x.", goName, " = ", qual, "b.", field.BuilderFieldName()) + if presence { + g.P("}") + } + } + } + + g.P("return m0") + g.P("}") + g.P() +} + +// opaqueBuilderFieldGoType does the same as opaqueFieldGoType, but corrects for +// types that are different in a builder +func opaqueBuilderFieldGoType(g *protogen.GeneratedFile, f *fileInfo, message *messageInfo, field *protogen.Field) (goType string, pointer bool) { + goType, pointer = opaqueFieldGoType(g, f, message, field) + kind := field.Desc.Kind() + + // Use []T instead of *[]T for opaque repeated lists. + if message.isOpaque() && field.Desc.IsList() { + pointer = false + } + + // Use *T for optional fields. + optional := field.Desc.HasPresence() + if optional && + kind != protoreflect.GroupKind && + kind != protoreflect.MessageKind && + kind != protoreflect.BytesKind && + field.Desc.Cardinality() != protoreflect.Repeated { + pointer = true + } + + return goType, pointer +} + +func opaqueGenOneofWrapperTypes(g *protogen.GeneratedFile, f *fileInfo, message *messageInfo) { + // TODO: We should avoid generating these wrapper types in pure-opaque mode. + if !message.isOpen() { + for _, oneof := range message.Oneofs { + if oneof.Desc.IsSynthetic() { + continue + } + caseTypeName := opaqueOneofCaseTypeName(oneof) + g.P("type ", caseTypeName, " ", protoreflectPackage.Ident("FieldNumber")) + g.P("") + + idx := f.allMessagesByPtr[message] + typesVar := messageTypesVarName(f) + g.P("func (x ", caseTypeName, ") String() string {") + g.P("md := ", typesVar, "[", idx, "].Descriptor()") + g.P("if x == 0 {") + g.P(`return "not set"`) + g.P("}") + g.P("return ", protoimplPackage.Ident("X"), ".MessageFieldStringOf(md, ", protoreflectPackage.Ident("FieldNumber"), "(x))") + g.P("}") + g.P() + } + } + for _, oneof := range message.Oneofs { + if oneof.Desc.IsSynthetic() { + continue + } + ifName := opaqueOneofInterfaceName(oneof) + g.P("type ", ifName, " interface {") + g.P(ifName, "()") + g.P("}") + g.P() + for _, field := range oneof.Fields { + name := opaqueFieldOneofType(field, message.isOpaque()) + g.AnnotateSymbol(name.GoName, protogen.Annotation{Location: field.Location}) + g.AnnotateSymbol(name.GoName+"."+field.GoName, protogen.Annotation{Location: field.Location}) + g.P("type ", name, " struct {") + goType, _ := opaqueFieldGoType(g, f, message, field) + protobufTagValue := fieldProtobufTagValue(field) + if g.InternalStripForEditionsDiff() { + protobufTagValue = strings.ReplaceAll(protobufTagValue, ",proto3", "") + } + tags := structTags{ + {"protobuf", protobufTagValue}, + } + leadingComments := appendDeprecationSuffix(field.Comments.Leading, + field.Desc.ParentFile(), + field.Desc.Options().(*descriptorpb.FieldOptions).GetDeprecated()) + g.P(leadingComments, + field.GoName, " ", goType, tags, + trailingComment(field.Comments.Trailing)) + g.P("}") + g.P() + } + for _, field := range oneof.Fields { + g.P("func (*", opaqueFieldOneofType(field, message.isOpaque()), ") ", ifName, "() {}") + g.P() + } + } +} + +// opaqueFieldGoType returns the Go type used for a field. +// +// If it returns pointer=true, the struct field is a pointer to the type. +func opaqueFieldGoType(g *protogen.GeneratedFile, f *fileInfo, message *messageInfo, field *protogen.Field) (goType string, pointer bool) { + pointer = true + switch field.Desc.Kind() { + case protoreflect.BoolKind: + goType = "bool" + case protoreflect.EnumKind: + goType = g.QualifiedGoIdent(field.Enum.GoIdent) + case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind: + goType = "int32" + case protoreflect.Uint32Kind, protoreflect.Fixed32Kind: + goType = "uint32" + case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind: + goType = "int64" + case protoreflect.Uint64Kind, protoreflect.Fixed64Kind: + goType = "uint64" + case protoreflect.FloatKind: + goType = "float32" + case protoreflect.DoubleKind: + goType = "float64" + case protoreflect.StringKind: + goType = "string" + case protoreflect.BytesKind: + goType = "[]byte" + pointer = false + case protoreflect.MessageKind, protoreflect.GroupKind: + goType = opaqueMessageFieldGoType(g, f, field, message.isOpaque()) + pointer = false + } + switch { + case field.Desc.IsList(): + goType = "[]" + goType + pointer = false + case field.Desc.IsMap(): + keyType, _ := opaqueFieldGoType(g, f, message, field.Message.Fields[0]) + valType, _ := opaqueFieldGoType(g, f, message, field.Message.Fields[1]) + return fmt.Sprintf("map[%v]%v", keyType, valType), false + } + + // Extension fields always have pointer type, even when defined in a proto3 file. + if !field.Desc.IsExtension() && !field.Desc.HasPresence() { + pointer = false + } + + if message.isOpaque() { + switch { + case field.Desc.IsList() && field.Desc.Message() != nil: + pointer = true + case !field.Desc.IsList() && field.Desc.Kind() == protoreflect.StringKind: + switch { + case field.Desc.HasPresence(): + pointer = true + default: + pointer = false + } + default: + pointer = false + } + } + + return goType, pointer +} + +func opaqueMessageFieldGoType(g *protogen.GeneratedFile, f *fileInfo, field *protogen.Field, isOpaque bool) string { + return "*" + g.QualifiedGoIdent(field.Message.GoIdent) +} + +// opaqueFieldPresenceIndex returns the index to pass to presence functions. +// +// TODO: field.Desc.Index() would be simpler, and would give space to record the presence of oneof fields. +func opaqueFieldPresenceIndex(field *protogen.Field) int { + structFieldIndex := 0 + for _, f := range field.Parent.Fields { + if field == f { + break + } + if f.Oneof == nil || isLastOneofField(f) { + structFieldIndex++ + } + } + return structFieldIndex +} + +// opaqueNumPresenceFields returns the number of fields that may be passed to presence functions. +// +// Since all fields in a oneof currently share a single entry in the presence bitmap, +// this is not just len(message.Fields). +func opaqueNumPresenceFields(message *messageInfo) int { + if len(message.Fields) == 0 { + return 0 + } + return opaqueFieldPresenceIndex(message.Fields[len(message.Fields)-1]) + 1 +} + +func fieldtrackNoInterface(g *protogen.GeneratedFile, isTracked bool) { + if isTracked { + g.P("//go:nointerface") + } +} + +// opaqueOneofFieldName returns the name of the struct field that holds +// the value of a oneof. +func opaqueOneofFieldName(oneof *protogen.Oneof, isOpaque bool) string { + if isOpaque { + return "xxx_hidden_" + oneof.GoName + } + return oneof.GoName +} + +func opaqueFieldOneofType(field *protogen.Field, isOpaque bool) protogen.GoIdent { + ident := protogen.GoIdent{ + GoImportPath: field.Parent.GoIdent.GoImportPath, + GoName: field.Parent.GoIdent.GoName + "_" + field.GoName, + } + // Check for collisions with nested messages or enums. + // + // This conflict resolution is incomplete: Among other things, it + // does not consider collisions with other oneof field types. +Loop: + for { + for _, message := range field.Parent.Messages { + if message.GoIdent == ident { + ident.GoName += "_" + continue Loop + } + } + for _, enum := range field.Parent.Enums { + if enum.GoIdent == ident { + ident.GoName += "_" + continue Loop + } + } + return unexportIdent(ident, isOpaque) + } +} + +// unexportIdent turns id into its unexported version (by lower-casing), but +// only if isOpaque is set. This function is used for oneof wrapper types, +// which remain exported in the non-opaque API for now. +func unexportIdent(id protogen.GoIdent, isOpaque bool) protogen.GoIdent { + if !isOpaque { + return id + } + r, sz := utf8.DecodeRuneInString(id.GoName) + if r == utf8.RuneError { + panic(fmt.Sprintf("Go identifier %q contains invalid UTF8?!", id.GoName)) + } + r = unicode.ToLower(r) + id.GoName = string(r) + id.GoName[sz:] + return id +} + +func opaqueOneofInterfaceName(oneof *protogen.Oneof) string { + return fmt.Sprintf("is%s_%s", oneof.Parent.GoIdent.GoName, oneof.GoName) +} +func opaqueOneofCaseTypeName(oneof *protogen.Oneof) string { + return fmt.Sprintf("case_%s_%s", oneof.Parent.GoIdent.GoName, oneof.GoName) +} + +// isFirstOneofField reports whether this is the first field in a oneof. +func isFirstOneofField(field *protogen.Field) bool { + return field.Oneof != nil && field == field.Oneof.Fields[0] && !field.Oneof.Desc.IsSynthetic() +} + +// isLastOneofField returns true if this is the last field in a oneof. +func isLastOneofField(field *protogen.Field) bool { + return field.Oneof != nil && field == field.Oneof.Fields[len(field.Oneof.Fields)-1] +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/reflect.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/reflect.go new file mode 100644 index 0000000..4e0b7ad --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/reflect.go @@ -0,0 +1,361 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package internal_gengo + +import ( + "bytes" + "fmt" + "math" + "strings" + "unicode/utf8" + + "google.golang.org/protobuf/compiler/protogen" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protopath" + "google.golang.org/protobuf/reflect/protorange" + "google.golang.org/protobuf/reflect/protoreflect" + + "google.golang.org/protobuf/types/descriptorpb" +) + +func genReflectFileDescriptor(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileInfo) { + g.P("var ", f.GoDescriptorIdent, " ", protoreflectPackage.Ident("FileDescriptor")) + g.P() + + genFileDescriptor(gen, g, f) + if len(f.allEnums) > 0 { + g.P("var ", enumTypesVarName(f), " = make([]", protoimplPackage.Ident("EnumInfo"), ",", len(f.allEnums), ")") + } + if len(f.allMessages) > 0 { + g.P("var ", messageTypesVarName(f), " = make([]", protoimplPackage.Ident("MessageInfo"), ",", len(f.allMessages), ")") + } + + // Generate a unique list of Go types for all declarations and dependencies, + // and the associated index into the type list for all dependencies. + var goTypes []string + var depIdxs []string + seen := map[protoreflect.FullName]int{} + genDep := func(name protoreflect.FullName, depSource string) { + if depSource != "" { + line := fmt.Sprintf("%d, // %d: %s -> %s", seen[name], len(depIdxs), depSource, name) + depIdxs = append(depIdxs, line) + } + } + genEnum := func(e *protogen.Enum, depSource string) { + if e != nil { + name := e.Desc.FullName() + if _, ok := seen[name]; !ok { + line := fmt.Sprintf("(%s)(0), // %d: %s", g.QualifiedGoIdent(e.GoIdent), len(goTypes), name) + goTypes = append(goTypes, line) + seen[name] = len(seen) + } + if depSource != "" { + genDep(name, depSource) + } + } + } + genMessage := func(m *protogen.Message, depSource string) { + if m != nil { + name := m.Desc.FullName() + if _, ok := seen[name]; !ok { + line := fmt.Sprintf("(*%s)(nil), // %d: %s", g.QualifiedGoIdent(m.GoIdent), len(goTypes), name) + if m.Desc.IsMapEntry() { + // Map entry messages have no associated Go type. + line = fmt.Sprintf("nil, // %d: %s", len(goTypes), name) + } + goTypes = append(goTypes, line) + seen[name] = len(seen) + } + if depSource != "" { + genDep(name, depSource) + } + } + } + + // This ordering is significant. + // See filetype.TypeBuilder.DependencyIndexes. + type offsetEntry struct { + start int + name string + } + var depOffsets []offsetEntry + for _, enum := range f.allEnums { + genEnum(enum.Enum, "") + } + for _, message := range f.allMessages { + genMessage(message.Message, "") + } + depOffsets = append(depOffsets, offsetEntry{len(depIdxs), "field type_name"}) + for _, message := range f.allMessages { + for _, field := range message.Fields { + source := string(field.Desc.FullName()) + genEnum(field.Enum, source+":type_name") + genMessage(field.Message, source+":type_name") + } + } + depOffsets = append(depOffsets, offsetEntry{len(depIdxs), "extension extendee"}) + for _, extension := range f.allExtensions { + source := string(extension.Desc.FullName()) + genMessage(extension.Extendee, source+":extendee") + } + depOffsets = append(depOffsets, offsetEntry{len(depIdxs), "extension type_name"}) + for _, extension := range f.allExtensions { + source := string(extension.Desc.FullName()) + genEnum(extension.Enum, source+":type_name") + genMessage(extension.Message, source+":type_name") + } + depOffsets = append(depOffsets, offsetEntry{len(depIdxs), "method input_type"}) + for _, service := range f.Services { + for _, method := range service.Methods { + source := string(method.Desc.FullName()) + genMessage(method.Input, source+":input_type") + } + } + depOffsets = append(depOffsets, offsetEntry{len(depIdxs), "method output_type"}) + for _, service := range f.Services { + for _, method := range service.Methods { + source := string(method.Desc.FullName()) + genMessage(method.Output, source+":output_type") + } + } + depOffsets = append(depOffsets, offsetEntry{len(depIdxs), ""}) + for i := len(depOffsets) - 2; i >= 0; i-- { + curr, next := depOffsets[i], depOffsets[i+1] + depIdxs = append(depIdxs, fmt.Sprintf("%d, // [%d:%d] is the sub-list for %s", + curr.start, curr.start, next.start, curr.name)) + } + if len(depIdxs) > math.MaxInt32 { + panic("too many dependencies") // sanity check + } + + g.P("var ", goTypesVarName(f), " = []any{") + for _, s := range goTypes { + g.P(s) + } + g.P("}") + + g.P("var ", depIdxsVarName(f), " = []int32{") + for _, s := range depIdxs { + g.P(s) + } + g.P("}") + + g.P("func init() { ", initFuncName(f.File), "() }") + + g.P("func ", initFuncName(f.File), "() {") + g.P("if ", f.GoDescriptorIdent, " != nil {") + g.P("return") + g.P("}") + + // Ensure that initialization functions for different files in the same Go + // package run in the correct order: Call the init funcs for every .proto file + // imported by this one that is in the same Go package. + for i, imps := 0, f.Desc.Imports(); i < imps.Len(); i++ { + impFile := gen.FilesByPath[imps.Get(i).Path()] + if impFile.GoImportPath != f.GoImportPath { + continue + } + g.P(initFuncName(impFile), "()") + } + + if len(f.allMessages) > 0 { + // Populate MessageInfo.OneofWrappers. + for _, message := range f.allMessages { + if len(message.Oneofs) > 0 { + idx := f.allMessagesByPtr[message] + typesVar := messageTypesVarName(f) + + // Associate the wrapper types by directly passing them to the MessageInfo. + g.P(typesVar, "[", idx, "].OneofWrappers = []any {") + for _, oneof := range message.Oneofs { + if !oneof.Desc.IsSynthetic() { + for _, field := range oneof.Fields { + g.P("(*", unexportIdent(field.GoIdent, message.isOpaque()), ")(nil),") + } + } + } + g.P("}") + } + } + } + + g.P("type x struct{}") + g.P("out := ", protoimplPackage.Ident("TypeBuilder"), "{") + g.P("File: ", protoimplPackage.Ident("DescBuilder"), "{") + g.P("GoPackagePath: ", reflectPackage.Ident("TypeOf"), "(x{}).PkgPath(),") + // Avoid a copy of the descriptor. This means modification of the + // RawDescriptor byte slice will crash the program. But generated + // RawDescriptors are never supposed to be modified anyway. + g.P("RawDescriptor: ", unsafeBytesRawDesc(g, f), ",") + g.P("NumEnums: ", len(f.allEnums), ",") + g.P("NumMessages: ", len(f.allMessages), ",") + g.P("NumExtensions: ", len(f.allExtensions), ",") + g.P("NumServices: ", len(f.Services), ",") + g.P("},") + g.P("GoTypes: ", goTypesVarName(f), ",") + g.P("DependencyIndexes: ", depIdxsVarName(f), ",") + if len(f.allEnums) > 0 { + g.P("EnumInfos: ", enumTypesVarName(f), ",") + } + if len(f.allMessages) > 0 { + g.P("MessageInfos: ", messageTypesVarName(f), ",") + } + if len(f.allExtensions) > 0 { + g.P("ExtensionInfos: ", extensionTypesVarName(f), ",") + } + g.P("}.Build()") + g.P(f.GoDescriptorIdent, " = out.File") + + // Set inputs to nil to allow GC to reclaim resources. + g.P(goTypesVarName(f), " = nil") + g.P(depIdxsVarName(f), " = nil") + g.P("}") +} + +// stripSourceRetentionFieldsFromMessage walks the given message tree recursively +// and clears any fields with the field option: [retention = RETENTION_SOURCE] +func stripSourceRetentionFieldsFromMessage(m protoreflect.Message) { + protorange.Range(m, func(ppv protopath.Values) error { + m2, ok := ppv.Index(-1).Value.Interface().(protoreflect.Message) + if !ok { + return nil + } + m2.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + fdo, ok := fd.Options().(*descriptorpb.FieldOptions) + if ok && fdo.GetRetention() == descriptorpb.FieldOptions_RETENTION_SOURCE { + m2.Clear(fd) + } + return true + }) + return nil + }) +} + +func genFileDescriptor(gen *protogen.Plugin, g *protogen.GeneratedFile, f *fileInfo) { + descProto := proto.Clone(f.Proto).(*descriptorpb.FileDescriptorProto) + descProto.SourceCodeInfo = nil // drop source code information + stripSourceRetentionFieldsFromMessage(descProto.ProtoReflect()) + b, err := proto.MarshalOptions{AllowPartial: true, Deterministic: true}.Marshal(descProto) + if err != nil { + gen.Error(err) + return + } + + // Generate the raw descriptor as a kind-of readable const string. + // To not generate a single potentially very long line, we use the 0x0a + // byte to split the string into multiple "lines" and concatenate + // them with "+". + // The 0x0a comes from the observation that the FileDescriptorProto, + // and many of the messages it includes (for example + // DescriptorProto, EnumDescriptorProto, etc.), define a string + // (which is LEN encoded) as field with field_number=1. + // That makes all these messages start with (1<<3 + 2[:LEN])=0x0a + // in the wire-format. + // See also https://protobuf.dev/programming-guides/encoding/#structure. + fmt.Fprint(g, "const ", rawDescVarName(f), `=""`) + for _, line := range bytes.SplitAfter(b, []byte{'\x0a'}) { + g.P("+") + fmt.Fprintf(g, "%q", line) + } + g.P() + + if f.needRawDesc { + onceVar := rawDescVarName(f) + "Once" + dataVar := rawDescVarName(f) + "Data" + g.P("var (") + g.P(onceVar, " ", syncPackage.Ident("Once")) + g.P(dataVar, " []byte") + g.P(")") + g.P() + + g.P("func ", rawDescVarName(f), "GZIP() []byte {") + g.P(onceVar, ".Do(func() {") + g.P(dataVar, " = ", protoimplPackage.Ident("X"), ".CompressGZIP(", unsafeBytesRawDesc(g, f), ")") + g.P("})") + g.P("return ", dataVar) + g.P("}") + g.P() + } +} + +// unsafeBytesRawDesc returns an inlined version of [strs.UnsafeBytes] +// (gencode cannot depend on internal/strs). Modification of this byte +// slice will crash the program. +func unsafeBytesRawDesc(g *protogen.GeneratedFile, f *fileInfo) string { + return fmt.Sprintf("%s(%s(%[3]s), len(%[3]s))", + g.QualifiedGoIdent(unsafePackage.Ident("Slice")), + g.QualifiedGoIdent(unsafePackage.Ident("StringData")), + rawDescVarName(f)) +} + +func genEnumReflectMethods(g *protogen.GeneratedFile, f *fileInfo, e *enumInfo) { + idx := f.allEnumsByPtr[e] + typesVar := enumTypesVarName(f) + + // Descriptor method. + g.P("func (", e.GoIdent, ") Descriptor() ", protoreflectPackage.Ident("EnumDescriptor"), " {") + g.P("return ", typesVar, "[", idx, "].Descriptor()") + g.P("}") + g.P() + + // Type method. + g.P("func (", e.GoIdent, ") Type() ", protoreflectPackage.Ident("EnumType"), " {") + g.P("return &", typesVar, "[", idx, "]") + g.P("}") + g.P() + + // Number method. + g.P("func (x ", e.GoIdent, ") Number() ", protoreflectPackage.Ident("EnumNumber"), " {") + g.P("return ", protoreflectPackage.Ident("EnumNumber"), "(x)") + g.P("}") + g.P() +} + +func genMessageReflectMethods(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) { + idx := f.allMessagesByPtr[m] + typesVar := messageTypesVarName(f) + + // ProtoReflect method. + g.P("func (x *", m.GoIdent, ") ProtoReflect() ", protoreflectPackage.Ident("Message"), " {") + g.P("mi := &", typesVar, "[", idx, "]") + g.P("if x != nil {") + g.P("ms := ", protoimplPackage.Ident("X"), ".MessageStateOf(", protoimplPackage.Ident("Pointer"), "(x))") + g.P("if ms.LoadMessageInfo() == nil {") + g.P("ms.StoreMessageInfo(mi)") + g.P("}") + g.P("return ms") + g.P("}") + g.P("return mi.MessageOf(x)") + g.P("}") + g.P() +} + +func fileVarName(f *protogen.File, suffix string) string { + prefix := f.GoDescriptorIdent.GoName + _, n := utf8.DecodeRuneInString(prefix) + prefix = strings.ToLower(prefix[:n]) + prefix[n:] + return prefix + "_" + suffix +} +func rawDescVarName(f *fileInfo) string { + return fileVarName(f.File, "rawDesc") +} +func goTypesVarName(f *fileInfo) string { + return fileVarName(f.File, "goTypes") +} +func depIdxsVarName(f *fileInfo) string { + return fileVarName(f.File, "depIdxs") +} +func enumTypesVarName(f *fileInfo) string { + return fileVarName(f.File, "enumTypes") +} +func messageTypesVarName(f *fileInfo) string { + return fileVarName(f.File, "msgTypes") +} +func extensionTypesVarName(f *fileInfo) string { + return fileVarName(f.File, "extTypes") +} +func initFuncName(f *protogen.File) string { + return fileVarName(f, "init") +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/well_known_types.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/well_known_types.go new file mode 100644 index 0000000..2ae6b03 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo/well_known_types.go @@ -0,0 +1,1094 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package internal_gengo + +import ( + "strings" + + "google.golang.org/protobuf/compiler/protogen" + "google.golang.org/protobuf/internal/genid" +) + +// Specialized support for well-known types are hard-coded into the generator +// as opposed to being injected in adjacent .go sources in the generated package +// in order to support specialized build systems like Bazel that always generate +// dynamically from the source .proto files. + +func genPackageKnownComment(f *fileInfo) protogen.Comments { + switch f.Desc.Path() { + case genid.File_google_protobuf_any_proto: + return ` Package anypb contains generated types for ` + genid.File_google_protobuf_any_proto + `. + + The Any message is a dynamic representation of any other message value. + It is functionally a tuple of the full name of the remote message type and + the serialized bytes of the remote message value. + + + Constructing an Any + + An Any message containing another message value is constructed using New: + + any, err := anypb.New(m) + if err != nil { + ... // handle error + } + ... // make use of any + + + Unmarshaling an Any + + With a populated Any message, the underlying message can be serialized into + a remote concrete message value in a few ways. + + If the exact concrete type is known, then a new (or pre-existing) instance + of that message can be passed to the UnmarshalTo method: + + m := new(foopb.MyMessage) + if err := any.UnmarshalTo(m); err != nil { + ... // handle error + } + ... // make use of m + + If the exact concrete type is not known, then the UnmarshalNew method can be + used to unmarshal the contents into a new instance of the remote message type: + + m, err := any.UnmarshalNew() + if err != nil { + ... // handle error + } + ... // make use of m + + UnmarshalNew uses the global type registry to resolve the message type and + construct a new instance of that message to unmarshal into. In order for a + message type to appear in the global registry, the Go type representing that + protobuf message type must be linked into the Go binary. For messages + generated by protoc-gen-go, this is achieved through an import of the + generated Go package representing a .proto file. + + A common pattern with UnmarshalNew is to use a type switch with the resulting + proto.Message value: + + switch m := m.(type) { + case *foopb.MyMessage: + ... // make use of m as a *foopb.MyMessage + case *barpb.OtherMessage: + ... // make use of m as a *barpb.OtherMessage + case *bazpb.SomeMessage: + ... // make use of m as a *bazpb.SomeMessage + } + + This pattern ensures that the generated packages containing the message types + listed in the case clauses are linked into the Go binary and therefore also + registered in the global registry. + + + Type checking an Any + + In order to type check whether an Any message represents some other message, + then use the MessageIs method: + + if any.MessageIs((*foopb.MyMessage)(nil)) { + ... // make use of any, knowing that it contains a foopb.MyMessage + } + + The MessageIs method can also be used with an allocated instance of the target + message type if the intention is to unmarshal into it if the type matches: + + m := new(foopb.MyMessage) + if any.MessageIs(m) { + if err := any.UnmarshalTo(m); err != nil { + ... // handle error + } + ... // make use of m + } + +` + case genid.File_google_protobuf_timestamp_proto: + return ` Package timestamppb contains generated types for ` + genid.File_google_protobuf_timestamp_proto + `. + + The Timestamp message represents a timestamp, + an instant in time since the Unix epoch (January 1st, 1970). + + + Conversion to a Go Time + + The AsTime method can be used to convert a Timestamp message to a + standard Go time.Time value in UTC: + + t := ts.AsTime() + ... // make use of t as a time.Time + + Converting to a time.Time is a common operation so that the extensive + set of time-based operations provided by the time package can be leveraged. + See https://golang.org/pkg/time for more information. + + The AsTime method performs the conversion on a best-effort basis. Timestamps + with denormal values (e.g., nanoseconds beyond 0 and 99999999, inclusive) + are normalized during the conversion to a time.Time. To manually check for + invalid Timestamps per the documented limitations in timestamp.proto, + additionally call the CheckValid method: + + if err := ts.CheckValid(); err != nil { + ... // handle error + } + + + Conversion from a Go Time + + The timestamppb.New function can be used to construct a Timestamp message + from a standard Go time.Time value: + + ts := timestamppb.New(t) + ... // make use of ts as a *timestamppb.Timestamp + + In order to construct a Timestamp representing the current time, use Now: + + ts := timestamppb.Now() + ... // make use of ts as a *timestamppb.Timestamp + +` + case genid.File_google_protobuf_duration_proto: + return ` Package durationpb contains generated types for ` + genid.File_google_protobuf_duration_proto + `. + + The Duration message represents a signed span of time. + + + Conversion to a Go Duration + + The AsDuration method can be used to convert a Duration message to a + standard Go time.Duration value: + + d := dur.AsDuration() + ... // make use of d as a time.Duration + + Converting to a time.Duration is a common operation so that the extensive + set of time-based operations provided by the time package can be leveraged. + See https://golang.org/pkg/time for more information. + + The AsDuration method performs the conversion on a best-effort basis. + Durations with denormal values (e.g., nanoseconds beyond -99999999 and + +99999999, inclusive; or seconds and nanoseconds with opposite signs) + are normalized during the conversion to a time.Duration. To manually check for + invalid Duration per the documented limitations in duration.proto, + additionally call the CheckValid method: + + if err := dur.CheckValid(); err != nil { + ... // handle error + } + + Note that the documented limitations in duration.proto does not protect a + Duration from overflowing the representable range of a time.Duration in Go. + The AsDuration method uses saturation arithmetic such that an overflow clamps + the resulting value to the closest representable value (e.g., math.MaxInt64 + for positive overflow and math.MinInt64 for negative overflow). + + + Conversion from a Go Duration + + The durationpb.New function can be used to construct a Duration message + from a standard Go time.Duration value: + + dur := durationpb.New(d) + ... // make use of d as a *durationpb.Duration + +` + case genid.File_google_protobuf_struct_proto: + return ` Package structpb contains generated types for ` + genid.File_google_protobuf_struct_proto + `. + + The messages (i.e., Value, Struct, and ListValue) defined in struct.proto are + used to represent arbitrary JSON. The Value message represents a JSON value, + the Struct message represents a JSON object, and the ListValue message + represents a JSON array. See https://json.org for more information. + + The Value, Struct, and ListValue types have generated MarshalJSON and + UnmarshalJSON methods such that they serialize JSON equivalent to what the + messages themselves represent. Use of these types with the + "google.golang.org/protobuf/encoding/protojson" package + ensures that they will be serialized as their JSON equivalent. + + # Conversion to and from a Go interface + + The standard Go "encoding/json" package has functionality to serialize + arbitrary types to a large degree. The Value.AsInterface, Struct.AsMap, and + ListValue.AsSlice methods can convert the protobuf message representation into + a form represented by any, map[string]any, and []any. + This form can be used with other packages that operate on such data structures + and also directly with the standard json package. + + In order to convert the any, map[string]any, and []any + forms back as Value, Struct, and ListValue messages, use the NewStruct, + NewList, and NewValue constructor functions. + + # Example usage + + Consider the following example JSON object: + + { + "firstName": "John", + "lastName": "Smith", + "isAlive": true, + "age": 27, + "address": { + "streetAddress": "21 2nd Street", + "city": "New York", + "state": "NY", + "postalCode": "10021-3100" + }, + "phoneNumbers": [ + { + "type": "home", + "number": "212 555-1234" + }, + { + "type": "office", + "number": "646 555-4567" + } + ], + "children": [], + "spouse": null + } + + To construct a Value message representing the above JSON object: + + m, err := structpb.NewValue(map[string]any{ + "firstName": "John", + "lastName": "Smith", + "isAlive": true, + "age": 27, + "address": map[string]any{ + "streetAddress": "21 2nd Street", + "city": "New York", + "state": "NY", + "postalCode": "10021-3100", + }, + "phoneNumbers": []any{ + map[string]any{ + "type": "home", + "number": "212 555-1234", + }, + map[string]any{ + "type": "office", + "number": "646 555-4567", + }, + }, + "children": []any{}, + "spouse": nil, + }) + if err != nil { + ... // handle error + } + ... // make use of m as a *structpb.Value +` + case genid.File_google_protobuf_field_mask_proto: + return ` Package fieldmaskpb contains generated types for ` + genid.File_google_protobuf_field_mask_proto + `. + + The FieldMask message represents a set of symbolic field paths. + The paths are specific to some target message type, + which is not stored within the FieldMask message itself. + + + Constructing a FieldMask + + The New function is used construct a FieldMask: + + var messageType *descriptorpb.DescriptorProto + fm, err := fieldmaskpb.New(messageType, "field.name", "field.number") + if err != nil { + ... // handle error + } + ... // make use of fm + + The "field.name" and "field.number" paths are valid paths according to the + google.protobuf.DescriptorProto message. Use of a path that does not correlate + to valid fields reachable from DescriptorProto would result in an error. + + Once a FieldMask message has been constructed, + the Append method can be used to insert additional paths to the path set: + + var messageType *descriptorpb.DescriptorProto + if err := fm.Append(messageType, "options"); err != nil { + ... // handle error + } + + + Type checking a FieldMask + + In order to verify that a FieldMask represents a set of fields that are + reachable from some target message type, use the IsValid method: + + var messageType *descriptorpb.DescriptorProto + if fm.IsValid(messageType) { + ... // make use of fm + } + + IsValid needs to be passed the target message type as an input since the + FieldMask message itself does not store the message type that the set of paths + are for. +` + default: + return "" + } +} + +func genMessageKnownFunctions(g *protogen.GeneratedFile, f *fileInfo, m *messageInfo) { + switch m.Desc.FullName() { + case genid.Any_message_fullname: + g.P("// New marshals src into a new Any instance.") + g.P("func New(src ", protoPackage.Ident("Message"), ") (*Any, error) {") + g.P(" dst := new(Any)") + g.P(" if err := dst.MarshalFrom(src); err != nil {") + g.P(" return nil, err") + g.P(" }") + g.P(" return dst, nil") + g.P("}") + g.P() + + g.P("// MarshalFrom marshals src into dst as the underlying message") + g.P("// using the provided marshal options.") + g.P("//") + g.P("// If no options are specified, call dst.MarshalFrom instead.") + g.P("func MarshalFrom(dst *Any, src ", protoPackage.Ident("Message"), ", opts ", protoPackage.Ident("MarshalOptions"), ") error {") + g.P(" const urlPrefix = \"type.googleapis.com/\"") + g.P(" if src == nil {") + g.P(" return ", protoimplPackage.Ident("X"), ".NewError(\"invalid nil source message\")") + g.P(" }") + g.P(" b, err := opts.Marshal(src)") + g.P(" if err != nil {") + g.P(" return err") + g.P(" }") + g.P(" dst.TypeUrl = urlPrefix + string(src.ProtoReflect().Descriptor().FullName())") + g.P(" dst.Value = b") + g.P(" return nil") + g.P("}") + g.P() + + g.P("// UnmarshalTo unmarshals the underlying message from src into dst") + g.P("// using the provided unmarshal options.") + g.P("// It reports an error if dst is not of the right message type.") + g.P("//") + g.P("// If no options are specified, call src.UnmarshalTo instead.") + g.P("func UnmarshalTo(src *Any, dst ", protoPackage.Ident("Message"), ", opts ", protoPackage.Ident("UnmarshalOptions"), ") error {") + g.P(" if src == nil {") + g.P(" return ", protoimplPackage.Ident("X"), ".NewError(\"invalid nil source message\")") + g.P(" }") + g.P(" if !src.MessageIs(dst) {") + g.P(" got := dst.ProtoReflect().Descriptor().FullName()") + g.P(" want := src.MessageName()") + g.P(" return ", protoimplPackage.Ident("X"), ".NewError(\"mismatched message type: got %q, want %q\", got, want)") + g.P(" }") + g.P(" return opts.Unmarshal(src.GetValue(), dst)") + g.P("}") + g.P() + + g.P("// UnmarshalNew unmarshals the underlying message from src into dst,") + g.P("// which is newly created message using a type resolved from the type URL.") + g.P("// The message type is resolved according to opt.Resolver,") + g.P("// which should implement protoregistry.MessageTypeResolver.") + g.P("// It reports an error if the underlying message type could not be resolved.") + g.P("//") + g.P("// If no options are specified, call src.UnmarshalNew instead.") + g.P("func UnmarshalNew(src *Any, opts ", protoPackage.Ident("UnmarshalOptions"), ") (dst ", protoPackage.Ident("Message"), ", err error) {") + g.P(" if src.GetTypeUrl() == \"\" {") + g.P(" return nil, ", protoimplPackage.Ident("X"), ".NewError(\"invalid empty type URL\")") + g.P(" }") + g.P(" if opts.Resolver == nil {") + g.P(" opts.Resolver = ", protoregistryPackage.Ident("GlobalTypes")) + g.P(" }") + g.P(" r, ok := opts.Resolver.(", protoregistryPackage.Ident("MessageTypeResolver"), ")") + g.P(" if !ok {") + g.P(" return nil, ", protoregistryPackage.Ident("NotFound")) + g.P(" }") + g.P(" mt, err := r.FindMessageByURL(src.GetTypeUrl())") + g.P(" if err != nil {") + g.P(" if err == ", protoregistryPackage.Ident("NotFound"), " {") + g.P(" return nil, err") + g.P(" }") + g.P(" return nil, ", protoimplPackage.Ident("X"), ".NewError(\"could not resolve %q: %v\", src.GetTypeUrl(), err)") + g.P(" }") + g.P(" dst = mt.New().Interface()") + g.P(" return dst, opts.Unmarshal(src.GetValue(), dst)") + g.P("}") + g.P() + + g.P("// MessageIs reports whether the underlying message is of the same type as m.") + g.P("func (x *Any) MessageIs(m ", protoPackage.Ident("Message"), ") bool {") + g.P(" if m == nil {") + g.P(" return false") + g.P(" }") + g.P(" url := x.GetTypeUrl()") + g.P(" name := string(m.ProtoReflect().Descriptor().FullName())") + g.P(" if !", stringsPackage.Ident("HasSuffix"), "(url, name) {") + g.P(" return false") + g.P(" }") + g.P(" return len(url) == len(name) || url[len(url)-len(name)-1] == '/'") + g.P("}") + g.P() + + g.P("// MessageName reports the full name of the underlying message,") + g.P("// returning an empty string if invalid.") + g.P("func (x *Any) MessageName() ", protoreflectPackage.Ident("FullName"), " {") + g.P(" url := x.GetTypeUrl()") + g.P(" name := ", protoreflectPackage.Ident("FullName"), "(url)") + g.P(" if i := ", stringsPackage.Ident("LastIndexByte"), "(url, '/'); i >= 0 {") + g.P(" name = name[i+len(\"/\"):]") + g.P(" }") + g.P(" if !name.IsValid() {") + g.P(" return \"\"") + g.P(" }") + g.P(" return name") + g.P("}") + g.P() + + g.P("// MarshalFrom marshals m into x as the underlying message.") + g.P("func (x *Any) MarshalFrom(m ", protoPackage.Ident("Message"), ") error {") + g.P(" return MarshalFrom(x, m, ", protoPackage.Ident("MarshalOptions"), "{})") + g.P("}") + g.P() + + g.P("// UnmarshalTo unmarshals the contents of the underlying message of x into m.") + g.P("// It resets m before performing the unmarshal operation.") + g.P("// It reports an error if m is not of the right message type.") + g.P("func (x *Any) UnmarshalTo(m ", protoPackage.Ident("Message"), ") error {") + g.P(" return UnmarshalTo(x, m, ", protoPackage.Ident("UnmarshalOptions"), "{})") + g.P("}") + g.P() + + g.P("// UnmarshalNew unmarshals the contents of the underlying message of x into") + g.P("// a newly allocated message of the specified type.") + g.P("// It reports an error if the underlying message type could not be resolved.") + g.P("func (x *Any) UnmarshalNew() (", protoPackage.Ident("Message"), ", error) {") + g.P(" return UnmarshalNew(x, ", protoPackage.Ident("UnmarshalOptions"), "{})") + g.P("}") + g.P() + + case genid.Timestamp_message_fullname: + g.P("// Now constructs a new Timestamp from the current time.") + g.P("func Now() *Timestamp {") + g.P(" return New(", timePackage.Ident("Now"), "())") + g.P("}") + g.P() + + g.P("// New constructs a new Timestamp from the provided time.Time.") + g.P("func New(t ", timePackage.Ident("Time"), ") *Timestamp {") + g.P(" return &Timestamp{Seconds: int64(t.Unix()), Nanos: int32(t.Nanosecond())}") + g.P("}") + g.P() + + g.P("// AsTime converts x to a time.Time.") + g.P("func (x *Timestamp) AsTime() ", timePackage.Ident("Time"), " {") + g.P(" return ", timePackage.Ident("Unix"), "(int64(x.GetSeconds()), int64(x.GetNanos())).UTC()") + g.P("}") + g.P() + + g.P("// IsValid reports whether the timestamp is valid.") + g.P("// It is equivalent to CheckValid == nil.") + g.P("func (x *Timestamp) IsValid() bool {") + g.P(" return x.check() == 0") + g.P("}") + g.P() + + g.P("// CheckValid returns an error if the timestamp is invalid.") + g.P("// In particular, it checks whether the value represents a date that is") + g.P("// in the range of 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.") + g.P("// An error is reported for a nil Timestamp.") + g.P("func (x *Timestamp) CheckValid() error {") + g.P(" switch x.check() {") + g.P(" case invalidNil:") + g.P(" return ", protoimplPackage.Ident("X"), ".NewError(\"invalid nil Timestamp\")") + g.P(" case invalidUnderflow:") + g.P(" return ", protoimplPackage.Ident("X"), ".NewError(\"timestamp (%v) before 0001-01-01\", x)") + g.P(" case invalidOverflow:") + g.P(" return ", protoimplPackage.Ident("X"), ".NewError(\"timestamp (%v) after 9999-12-31\", x)") + g.P(" case invalidNanos:") + g.P(" return ", protoimplPackage.Ident("X"), ".NewError(\"timestamp (%v) has out-of-range nanos\", x)") + g.P(" default:") + g.P(" return nil") + g.P(" }") + g.P("}") + g.P() + + g.P("const (") + g.P(" _ = iota") + g.P(" invalidNil") + g.P(" invalidUnderflow") + g.P(" invalidOverflow") + g.P(" invalidNanos") + g.P(")") + g.P() + + g.P("func (x *Timestamp) check() uint {") + g.P(" const minTimestamp = -62135596800 // Seconds between 1970-01-01T00:00:00Z and 0001-01-01T00:00:00Z, inclusive") + g.P(" const maxTimestamp = +253402300799 // Seconds between 1970-01-01T00:00:00Z and 9999-12-31T23:59:59Z, inclusive") + g.P(" secs := x.GetSeconds()") + g.P(" nanos := x.GetNanos()") + g.P(" switch {") + g.P(" case x == nil:") + g.P(" return invalidNil") + g.P(" case secs < minTimestamp:") + g.P(" return invalidUnderflow") + g.P(" case secs > maxTimestamp:") + g.P(" return invalidOverflow") + g.P(" case nanos < 0 || nanos >= 1e9:") + g.P(" return invalidNanos") + g.P(" default:") + g.P(" return 0") + g.P(" }") + g.P("}") + g.P() + + case genid.Duration_message_fullname: + g.P("// New constructs a new Duration from the provided time.Duration.") + g.P("func New(d ", timePackage.Ident("Duration"), ") *Duration {") + g.P(" nanos := d.Nanoseconds()") + g.P(" secs := nanos / 1e9") + g.P(" nanos -= secs * 1e9") + g.P(" return &Duration{Seconds: int64(secs), Nanos: int32(nanos)}") + g.P("}") + g.P() + + g.P("// AsDuration converts x to a time.Duration,") + g.P("// returning the closest duration value in the event of overflow.") + g.P("func (x *Duration) AsDuration() ", timePackage.Ident("Duration"), " {") + g.P(" secs := x.GetSeconds()") + g.P(" nanos := x.GetNanos()") + g.P(" d := ", timePackage.Ident("Duration"), "(secs) * ", timePackage.Ident("Second")) + g.P(" overflow := d/", timePackage.Ident("Second"), " != ", timePackage.Ident("Duration"), "(secs)") + g.P(" d += ", timePackage.Ident("Duration"), "(nanos) * ", timePackage.Ident("Nanosecond")) + g.P(" overflow = overflow || (secs < 0 && nanos < 0 && d > 0)") + g.P(" overflow = overflow || (secs > 0 && nanos > 0 && d < 0)") + g.P(" if overflow {") + g.P(" switch {") + g.P(" case secs < 0:") + g.P(" return ", timePackage.Ident("Duration"), "(", mathPackage.Ident("MinInt64"), ")") + g.P(" case secs > 0:") + g.P(" return ", timePackage.Ident("Duration"), "(", mathPackage.Ident("MaxInt64"), ")") + g.P(" }") + g.P(" }") + g.P(" return d") + g.P("}") + g.P() + + g.P("// IsValid reports whether the duration is valid.") + g.P("// It is equivalent to CheckValid == nil.") + g.P("func (x *Duration) IsValid() bool {") + g.P(" return x.check() == 0") + g.P("}") + g.P() + + g.P("// CheckValid returns an error if the duration is invalid.") + g.P("// In particular, it checks whether the value is within the range of") + g.P("// -10000 years to +10000 years inclusive.") + g.P("// An error is reported for a nil Duration.") + g.P("func (x *Duration) CheckValid() error {") + g.P(" switch x.check() {") + g.P(" case invalidNil:") + g.P(" return ", protoimplPackage.Ident("X"), ".NewError(\"invalid nil Duration\")") + g.P(" case invalidUnderflow:") + g.P(" return ", protoimplPackage.Ident("X"), ".NewError(\"duration (%v) exceeds -10000 years\", x)") + g.P(" case invalidOverflow:") + g.P(" return ", protoimplPackage.Ident("X"), ".NewError(\"duration (%v) exceeds +10000 years\", x)") + g.P(" case invalidNanosRange:") + g.P(" return ", protoimplPackage.Ident("X"), ".NewError(\"duration (%v) has out-of-range nanos\", x)") + g.P(" case invalidNanosSign:") + g.P(" return ", protoimplPackage.Ident("X"), ".NewError(\"duration (%v) has seconds and nanos with different signs\", x)") + g.P(" default:") + g.P(" return nil") + g.P(" }") + g.P("}") + g.P() + + g.P("const (") + g.P(" _ = iota") + g.P(" invalidNil") + g.P(" invalidUnderflow") + g.P(" invalidOverflow") + g.P(" invalidNanosRange") + g.P(" invalidNanosSign") + g.P(")") + g.P() + + g.P("func (x *Duration) check() uint {") + g.P(" const absDuration = 315576000000 // 10000yr * 365.25day/yr * 24hr/day * 60min/hr * 60sec/min") + g.P(" secs := x.GetSeconds()") + g.P(" nanos := x.GetNanos()") + g.P(" switch {") + g.P(" case x == nil:") + g.P(" return invalidNil") + g.P(" case secs < -absDuration:") + g.P(" return invalidUnderflow") + g.P(" case secs > +absDuration:") + g.P(" return invalidOverflow") + g.P(" case nanos <= -1e9 || nanos >= +1e9:") + g.P(" return invalidNanosRange") + g.P(" case (secs > 0 && nanos < 0) || (secs < 0 && nanos > 0):") + g.P(" return invalidNanosSign") + g.P(" default:") + g.P(" return 0") + g.P(" }") + g.P("}") + g.P() + + case genid.Struct_message_fullname: + g.P("// NewStruct constructs a Struct from a general-purpose Go map.") + g.P("// The map keys must be valid UTF-8.") + g.P("// The map values are converted using NewValue.") + g.P("func NewStruct(v map[string]any) (*Struct, error) {") + g.P(" x := &Struct{Fields: make(map[string]*Value, len(v))}") + g.P(" for k, v := range v {") + g.P(" if !", utf8Package.Ident("ValidString"), "(k) {") + g.P(" return nil, ", protoimplPackage.Ident("X"), ".NewError(\"invalid UTF-8 in string: %q\", k)") + g.P(" }") + g.P(" var err error") + g.P(" x.Fields[k], err = NewValue(v)") + g.P(" if err != nil {") + g.P(" return nil, err") + g.P(" }") + g.P(" }") + g.P(" return x, nil") + g.P("}") + g.P() + + g.P("// AsMap converts x to a general-purpose Go map.") + g.P("// The map values are converted by calling Value.AsInterface.") + g.P("func (x *Struct) AsMap() map[string]any {") + g.P(" f := x.GetFields()") + g.P(" vs := make(map[string]any, len(f))") + g.P(" for k, v := range f {") + g.P(" vs[k] = v.AsInterface()") + g.P(" }") + g.P(" return vs") + g.P("}") + g.P() + + g.P("func (x *Struct) MarshalJSON() ([]byte, error) {") + g.P(" return ", protojsonPackage.Ident("Marshal"), "(x)") + g.P("}") + g.P() + + g.P("func (x *Struct) UnmarshalJSON(b []byte) error {") + g.P(" return ", protojsonPackage.Ident("Unmarshal"), "(b, x)") + g.P("}") + g.P() + + case genid.ListValue_message_fullname: + g.P("// NewList constructs a ListValue from a general-purpose Go slice.") + g.P("// The slice elements are converted using NewValue.") + g.P("func NewList(v []any) (*ListValue, error) {") + g.P(" x := &ListValue{Values: make([]*Value, len(v))}") + g.P(" for i, v := range v {") + g.P(" var err error") + g.P(" x.Values[i], err = NewValue(v)") + g.P(" if err != nil {") + g.P(" return nil, err") + g.P(" }") + g.P(" }") + g.P(" return x, nil") + g.P("}") + g.P() + + g.P("// AsSlice converts x to a general-purpose Go slice.") + g.P("// The slice elements are converted by calling Value.AsInterface.") + g.P("func (x *ListValue) AsSlice() []any {") + g.P(" vals := x.GetValues()") + g.P(" vs := make([]any, len(vals))") + g.P(" for i, v := range vals {") + g.P(" vs[i] = v.AsInterface()") + g.P(" }") + g.P(" return vs") + g.P("}") + g.P() + + g.P("func (x *ListValue) MarshalJSON() ([]byte, error) {") + g.P(" return ", protojsonPackage.Ident("Marshal"), "(x)") + g.P("}") + g.P() + + g.P("func (x *ListValue) UnmarshalJSON(b []byte) error {") + g.P(" return ", protojsonPackage.Ident("Unmarshal"), "(b, x)") + g.P("}") + g.P() + + case genid.Value_message_fullname: + g.P("// NewValue constructs a Value from a general-purpose Go interface.") + g.P("//") + g.P("// ╔═══════════════════════════════════════╤════════════════════════════════════════════╗") + g.P("// ║ Go type │ Conversion ║") + g.P("// ╠═══════════════════════════════════════╪════════════════════════════════════════════╣") + g.P("// ║ nil │ stored as NullValue ║") + g.P("// ║ bool │ stored as BoolValue ║") + g.P("// ║ int, int8, int16, int32, int64 │ stored as NumberValue ║") + g.P("// ║ uint, uint8, uint16, uint32, uint64 │ stored as NumberValue ║") + g.P("// ║ float32, float64 │ stored as NumberValue ║") + g.P("// ║ json.Number │ stored as NumberValue ║") + g.P("// ║ string │ stored as StringValue; must be valid UTF-8 ║") + g.P("// ║ []byte │ stored as StringValue; base64-encoded ║") + g.P("// ║ map[string]any │ stored as StructValue ║") + g.P("// ║ []any │ stored as ListValue ║") + g.P("// ╚═══════════════════════════════════════╧════════════════════════════════════════════╝") + g.P("//") + g.P("// When converting an int64 or uint64 to a NumberValue, numeric precision loss") + g.P("// is possible since they are stored as a float64.") + g.P("func NewValue(v any) (*Value, error) {") + g.P(" switch v := v.(type) {") + g.P(" case nil:") + g.P(" return NewNullValue(), nil") + g.P(" case bool:") + g.P(" return NewBoolValue(v), nil") + g.P(" case int:") + g.P(" return NewNumberValue(float64(v)), nil") + g.P(" case int8:") + g.P(" return NewNumberValue(float64(v)), nil") + g.P(" case int16:") + g.P(" return NewNumberValue(float64(v)), nil") + g.P(" case int32:") + g.P(" return NewNumberValue(float64(v)), nil") + g.P(" case int64:") + g.P(" return NewNumberValue(float64(v)), nil") + g.P(" case uint:") + g.P(" return NewNumberValue(float64(v)), nil") + g.P(" case uint8:") + g.P(" return NewNumberValue(float64(v)), nil") + g.P(" case uint16:") + g.P(" return NewNumberValue(float64(v)), nil") + g.P(" case uint32:") + g.P(" return NewNumberValue(float64(v)), nil") + g.P(" case uint64:") + g.P(" return NewNumberValue(float64(v)), nil") + g.P(" case float32:") + g.P(" return NewNumberValue(float64(v)), nil") + g.P(" case float64:") + g.P(" return NewNumberValue(float64(v)), nil") + g.P(" case ", jsonPackage.Ident("Number"), ":") + g.P(" n, err := v.Float64()") + g.P(" if err != nil {") + g.P(" return nil, ", protoimplPackage.Ident("X"), ".NewError(\"invalid number format %q, expected a float64: %v\", v, err)") + g.P(" }") + g.P(" return NewNumberValue(n), nil") + g.P(" case string:") + g.P(" if !", utf8Package.Ident("ValidString"), "(v) {") + g.P(" return nil, ", protoimplPackage.Ident("X"), ".NewError(\"invalid UTF-8 in string: %q\", v)") + g.P(" }") + g.P(" return NewStringValue(v), nil") + g.P(" case []byte:") + g.P(" s := ", base64Package.Ident("StdEncoding"), ".EncodeToString(v)") + g.P(" return NewStringValue(s), nil") + g.P(" case map[string]any:") + g.P(" v2, err := NewStruct(v)") + g.P(" if err != nil {") + g.P(" return nil, err") + g.P(" }") + g.P(" return NewStructValue(v2), nil") + g.P(" case []any:") + g.P(" v2, err := NewList(v)") + g.P(" if err != nil {") + g.P(" return nil, err") + g.P(" }") + g.P(" return NewListValue(v2), nil") + g.P(" default:") + g.P(" return nil, ", protoimplPackage.Ident("X"), ".NewError(\"invalid type: %T\", v)") + g.P(" }") + g.P("}") + g.P() + + g.P("// NewNullValue constructs a new null Value.") + g.P("func NewNullValue() *Value {") + g.P(" return &Value{Kind: &Value_NullValue{NullValue: NullValue_NULL_VALUE}}") + g.P("}") + g.P() + + g.P("// NewBoolValue constructs a new boolean Value.") + g.P("func NewBoolValue(v bool) *Value {") + g.P(" return &Value{Kind: &Value_BoolValue{BoolValue: v}}") + g.P("}") + g.P() + + g.P("// NewNumberValue constructs a new number Value.") + g.P("func NewNumberValue(v float64) *Value {") + g.P(" return &Value{Kind: &Value_NumberValue{NumberValue: v}}") + g.P("}") + g.P() + + g.P("// NewStringValue constructs a new string Value.") + g.P("func NewStringValue(v string) *Value {") + g.P(" return &Value{Kind: &Value_StringValue{StringValue: v}}") + g.P("}") + g.P() + + g.P("// NewStructValue constructs a new struct Value.") + g.P("func NewStructValue(v *Struct) *Value {") + g.P(" return &Value{Kind: &Value_StructValue{StructValue: v}}") + g.P("}") + g.P() + + g.P("// NewListValue constructs a new list Value.") + g.P("func NewListValue(v *ListValue) *Value {") + g.P(" return &Value{Kind: &Value_ListValue{ListValue: v}}") + g.P("}") + g.P() + + g.P("// AsInterface converts x to a general-purpose Go interface.") + g.P("//") + g.P("// Calling Value.MarshalJSON and \"encoding/json\".Marshal on this output produce") + g.P("// semantically equivalent JSON (assuming no errors occur).") + g.P("//") + g.P("// Floating-point values (i.e., \"NaN\", \"Infinity\", and \"-Infinity\") are") + g.P("// converted as strings to remain compatible with MarshalJSON.") + g.P("func (x *Value) AsInterface() any {") + g.P(" switch v := x.GetKind().(type) {") + g.P(" case *Value_NumberValue:") + g.P(" if v != nil {") + g.P(" switch {") + g.P(" case ", mathPackage.Ident("IsNaN"), "(v.NumberValue):") + g.P(" return \"NaN\"") + g.P(" case ", mathPackage.Ident("IsInf"), "(v.NumberValue, +1):") + g.P(" return \"Infinity\"") + g.P(" case ", mathPackage.Ident("IsInf"), "(v.NumberValue, -1):") + g.P(" return \"-Infinity\"") + g.P(" default:") + g.P(" return v.NumberValue") + g.P(" }") + g.P(" }") + g.P(" case *Value_StringValue:") + g.P(" if v != nil {") + g.P(" return v.StringValue") + g.P(" }") + g.P(" case *Value_BoolValue:") + g.P(" if v != nil {") + g.P(" return v.BoolValue") + g.P(" }") + g.P(" case *Value_StructValue:") + g.P(" if v != nil {") + g.P(" return v.StructValue.AsMap()") + g.P(" }") + g.P(" case *Value_ListValue:") + g.P(" if v != nil {") + g.P(" return v.ListValue.AsSlice()") + g.P(" }") + g.P(" }") + g.P(" return nil") + g.P("}") + g.P() + + g.P("func (x *Value) MarshalJSON() ([]byte, error) {") + g.P(" return ", protojsonPackage.Ident("Marshal"), "(x)") + g.P("}") + g.P() + + g.P("func (x *Value) UnmarshalJSON(b []byte) error {") + g.P(" return ", protojsonPackage.Ident("Unmarshal"), "(b, x)") + g.P("}") + g.P() + + case genid.FieldMask_message_fullname: + g.P("// New constructs a field mask from a list of paths and verifies that") + g.P("// each one is valid according to the specified message type.") + g.P("func New(m ", protoPackage.Ident("Message"), ", paths ...string) (*FieldMask, error) {") + g.P(" x := new(FieldMask)") + g.P(" return x, x.Append(m, paths...)") + g.P("}") + g.P() + + g.P("// Union returns the union of all the paths in the input field masks.") + g.P("func Union(mx *FieldMask, my *FieldMask, ms ...*FieldMask) *FieldMask {") + g.P(" var out []string") + g.P(" out = append(out, mx.GetPaths()...)") + g.P(" out = append(out, my.GetPaths()...)") + g.P(" for _, m := range ms {") + g.P(" out = append(out, m.GetPaths()...)") + g.P(" }") + g.P(" return &FieldMask{Paths: normalizePaths(out)}") + g.P("}") + g.P() + + g.P("// Intersect returns the intersection of all the paths in the input field masks.") + g.P("func Intersect(mx *FieldMask, my *FieldMask, ms ...*FieldMask) *FieldMask {") + g.P(" var ss1, ss2 []string // reused buffers for performance") + g.P(" intersect := func(out, in []string) []string {") + g.P(" ss1 = normalizePaths(append(ss1[:0], in...))") + g.P(" ss2 = normalizePaths(append(ss2[:0], out...))") + g.P(" out = out[:0]") + g.P(" for i1, i2 := 0, 0; i1 < len(ss1) && i2 < len(ss2); {") + g.P(" switch s1, s2 := ss1[i1], ss2[i2]; {") + g.P(" case hasPathPrefix(s1, s2):") + g.P(" out = append(out, s1)") + g.P(" i1++") + g.P(" case hasPathPrefix(s2, s1):") + g.P(" out = append(out, s2)") + g.P(" i2++") + g.P(" case lessPath(s1, s2):") + g.P(" i1++") + g.P(" case lessPath(s2, s1):") + g.P(" i2++") + g.P(" }") + g.P(" }") + g.P(" return out") + g.P(" }") + g.P() + g.P(" out := Union(mx, my, ms...).GetPaths()") + g.P(" out = intersect(out, mx.GetPaths())") + g.P(" out = intersect(out, my.GetPaths())") + g.P(" for _, m := range ms {") + g.P(" out = intersect(out, m.GetPaths())") + g.P(" }") + g.P(" return &FieldMask{Paths: normalizePaths(out)}") + g.P("}") + g.P() + + g.P("// IsValid reports whether all the paths are syntactically valid and") + g.P("// refer to known fields in the specified message type.") + g.P("// It reports false for a nil FieldMask.") + g.P("func (x *FieldMask) IsValid(m ", protoPackage.Ident("Message"), ") bool {") + g.P(" paths := x.GetPaths()") + g.P(" return x != nil && numValidPaths(m, paths) == len(paths)") + g.P("}") + g.P() + + g.P("// Append appends a list of paths to the mask and verifies that each one") + g.P("// is valid according to the specified message type.") + g.P("// An invalid path is not appended and breaks insertion of subsequent paths.") + g.P("func (x *FieldMask) Append(m ", protoPackage.Ident("Message"), ", paths ...string) error {") + g.P(" numValid := numValidPaths(m, paths)") + g.P(" x.Paths = append(x.Paths, paths[:numValid]...)") + g.P(" paths = paths[numValid:]") + g.P(" if len(paths) > 0 {") + g.P(" name := m.ProtoReflect().Descriptor().FullName()") + g.P(" return ", protoimplPackage.Ident("X"), ".NewError(\"invalid path %q for message %q\", paths[0], name)") + g.P(" }") + g.P(" return nil") + g.P("}") + g.P() + + g.P("func numValidPaths(m ", protoPackage.Ident("Message"), ", paths []string) int {") + g.P(" md0 := m.ProtoReflect().Descriptor()") + g.P(" for i, path := range paths {") + g.P(" md := md0") + g.P(" if !rangeFields(path, func(field string) bool {") + g.P(" // Search the field within the message.") + g.P(" if md == nil {") + g.P(" return false // not within a message") + g.P(" }") + g.P(" fd := md.Fields().ByName(", protoreflectPackage.Ident("Name"), "(field))") + g.P(" // The real field name of a group is the message name.") + g.P(" if fd == nil {") + g.P(" gd := md.Fields().ByName(", protoreflectPackage.Ident("Name"), "(", stringsPackage.Ident("ToLower"), "(field)))") + g.P(" if gd != nil && gd.Kind() == ", protoreflectPackage.Ident("GroupKind"), " && string(gd.Message().Name()) == field {") + g.P(" fd = gd") + g.P(" }") + g.P(" } else if fd.Kind() == ", protoreflectPackage.Ident("GroupKind"), " && string(fd.Message().Name()) != field {") + g.P(" fd = nil") + g.P(" }") + g.P(" if fd == nil {") + g.P(" return false // message has does not have this field") + g.P(" }") + g.P() + g.P(" // Identify the next message to search within.") + g.P(" md = fd.Message() // may be nil") + g.P() + g.P(" // Repeated fields are only allowed at the last position.") + g.P(" if fd.IsList() || fd.IsMap() {") + g.P(" md = nil") + g.P(" }") + g.P() + g.P(" return true") + g.P(" }) {") + g.P(" return i") + g.P(" }") + g.P(" }") + g.P(" return len(paths)") + g.P("}") + g.P() + + g.P("// Normalize converts the mask to its canonical form where all paths are sorted") + g.P("// and redundant paths are removed.") + g.P("func (x *FieldMask) Normalize() {") + g.P(" x.Paths = normalizePaths(x.Paths)") + g.P("}") + g.P() + g.P("func normalizePaths(paths []string) []string {") + g.P(" ", sortPackage.Ident("Slice"), "(paths, func(i, j int) bool {") + g.P(" return lessPath(paths[i], paths[j])") + g.P(" })") + g.P() + g.P(" // Elide any path that is a prefix match on the previous.") + g.P(" out := paths[:0]") + g.P(" for _, path := range paths {") + g.P(" if len(out) > 0 && hasPathPrefix(path, out[len(out)-1]) {") + g.P(" continue") + g.P(" }") + g.P(" out = append(out, path)") + g.P(" }") + g.P(" return out") + g.P("}") + g.P() + + g.P("// hasPathPrefix is like strings.HasPrefix, but further checks for either") + g.P("// an exact matche or that the prefix is delimited by a dot.") + g.P("func hasPathPrefix(path, prefix string) bool {") + g.P(" return ", stringsPackage.Ident("HasPrefix"), "(path, prefix) && (len(path) == len(prefix) || path[len(prefix)] == '.')") + g.P("}") + g.P() + + g.P("// lessPath is a lexicographical comparison where dot is specially treated") + g.P("// as the smallest symbol.") + g.P("func lessPath(x, y string) bool {") + g.P(" for i := 0; i < len(x) && i < len(y); i++ {") + g.P(" if x[i] != y[i] {") + g.P(" return (x[i] - '.') < (y[i] - '.')") + g.P(" }") + g.P(" }") + g.P(" return len(x) < len(y)") + g.P("}") + g.P() + + g.P("// rangeFields is like strings.Split(path, \".\"), but avoids allocations by") + g.P("// iterating over each field in place and calling a iterator function.") + g.P("func rangeFields(path string, f func(field string) bool) bool {") + g.P(" for {") + g.P(" var field string") + g.P(" if i := ", stringsPackage.Ident("IndexByte"), "(path, '.'); i >= 0 {") + g.P(" field, path = path[:i], path[i:]") + g.P(" } else {") + g.P(" field, path = path, \"\"") + g.P(" }") + g.P() + g.P(" if !f(field) {") + g.P(" return false") + g.P(" }") + g.P() + g.P(" if len(path) == 0 {") + g.P(" return true") + g.P(" }") + g.P(" path = ", stringsPackage.Ident("TrimPrefix"), "(path, \".\")") + g.P(" }") + g.P("}") + g.P() + + case genid.BoolValue_message_fullname, + genid.Int32Value_message_fullname, + genid.Int64Value_message_fullname, + genid.UInt32Value_message_fullname, + genid.UInt64Value_message_fullname, + genid.FloatValue_message_fullname, + genid.DoubleValue_message_fullname, + genid.StringValue_message_fullname, + genid.BytesValue_message_fullname: + funcName := strings.TrimSuffix(m.GoIdent.GoName, "Value") + typeName := strings.ToLower(funcName) + switch typeName { + case "float": + typeName = "float32" + case "double": + typeName = "float64" + case "bytes": + typeName = "[]byte" + } + + g.P("// ", funcName, " stores v in a new ", m.GoIdent, " and returns a pointer to it.") + g.P("func ", funcName, "(v ", typeName, ") *", m.GoIdent, " {") + g.P(" return &", m.GoIdent, "{Value: v}") + g.P("}") + g.P() + } +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/main.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/main.go new file mode 100644 index 0000000..f3b5acb --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/cmd/protoc-gen-go/main.go @@ -0,0 +1,60 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// The protoc-gen-go binary is a protoc plugin to generate Go code for +// both proto2 and proto3 versions of the protocol buffer language. +// +// For more information about the usage of this plugin, see: +// https://protobuf.dev/reference/go/go-generated. +package main + +import ( + "errors" + "flag" + "fmt" + "os" + "path/filepath" + + gengo "google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo" + "google.golang.org/protobuf/compiler/protogen" + "google.golang.org/protobuf/internal/version" +) + +const genGoDocURL = "https://protobuf.dev/reference/go/go-generated" +const grpcDocURL = "https://grpc.io/docs/languages/go/quickstart/#regenerate-grpc-code" + +func main() { + if len(os.Args) == 2 && os.Args[1] == "--version" { + fmt.Fprintf(os.Stdout, "%v %v\n", filepath.Base(os.Args[0]), version.String()) + os.Exit(0) + } + if len(os.Args) == 2 && os.Args[1] == "--help" { + fmt.Fprintf(os.Stdout, "See "+genGoDocURL+" for usage information.\n") + os.Exit(0) + } + + var ( + flags flag.FlagSet + plugins = flags.String("plugins", "", "deprecated option") + experimentalStripNonFunctionalCodegen = flags.Bool("experimental_strip_nonfunctional_codegen", false, "experimental_strip_nonfunctional_codegen true means that the plugin will not emit certain parts of the generated code in order to make it possible to compare a proto2/proto3 file with its equivalent (according to proto spec) editions file. Primarily, this is the encoded descriptor.") + ) + protogen.Options{ + ParamFunc: flags.Set, + InternalStripForEditionsDiff: experimentalStripNonFunctionalCodegen, + }.Run(func(gen *protogen.Plugin) error { + if *plugins != "" { + return errors.New("protoc-gen-go: plugins are not supported; use 'protoc --go-grpc_out=...' to generate gRPC\n\n" + + "See " + grpcDocURL + " for more information.") + } + for _, f := range gen.Files { + if f.Generate { + gengo.GenerateFile(gen, f) + } + } + gen.SupportedFeatures = gengo.SupportedFeatures + gen.SupportedEditionsMinimum = gengo.SupportedEditionsMinimum + gen.SupportedEditionsMaximum = gengo.SupportedEditionsMaximum + return nil + }) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/compiler/protogen/protogen.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/compiler/protogen/protogen.go new file mode 100644 index 0000000..f7f295a --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/compiler/protogen/protogen.go @@ -0,0 +1,1567 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package protogen provides support for writing protoc plugins. +// +// Plugins for protoc, the Protocol Buffer compiler, +// are programs which read a [pluginpb.CodeGeneratorRequest] message from standard input +// and write a [pluginpb.CodeGeneratorResponse] message to standard output. +// This package provides support for writing plugins which generate Go code. +package protogen + +import ( + "bufio" + "bytes" + "fmt" + "go/ast" + "go/parser" + "go/printer" + "go/token" + "go/types" + "io" + "os" + "path" + "path/filepath" + "sort" + "strconv" + "strings" + + "google.golang.org/protobuf/encoding/prototext" + "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/internal/genid" + "google.golang.org/protobuf/internal/strs" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protodesc" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" + "google.golang.org/protobuf/types/dynamicpb" + + "google.golang.org/protobuf/types/descriptorpb" + "google.golang.org/protobuf/types/gofeaturespb" + "google.golang.org/protobuf/types/pluginpb" +) + +const goPackageDocURL = "https://protobuf.dev/reference/go/go-generated#package" + +// Run executes a function as a protoc plugin. +// +// It reads a [pluginpb.CodeGeneratorRequest] message from [os.Stdin], invokes the plugin +// function, and writes a [pluginpb.CodeGeneratorResponse] message to [os.Stdout]. +// +// If a failure occurs while reading or writing, Run prints an error to +// [os.Stderr] and calls [os.Exit](1). +func (opts Options) Run(f func(*Plugin) error) { + if err := run(opts, f); err != nil { + fmt.Fprintf(os.Stderr, "%s: %v\n", filepath.Base(os.Args[0]), err) + os.Exit(1) + } +} + +func run(opts Options, f func(*Plugin) error) error { + if len(os.Args) > 1 { + return fmt.Errorf("unknown argument %q (this program should be run by protoc, not directly)", os.Args[1]) + } + in, err := io.ReadAll(os.Stdin) + if err != nil { + return err + } + req := &pluginpb.CodeGeneratorRequest{} + if err := proto.Unmarshal(in, req); err != nil { + return err + } + gen, err := opts.New(req) + if err != nil { + return err + } + if err := f(gen); err != nil { + // Errors from the plugin function are reported by setting the + // error field in the CodeGeneratorResponse. + // + // In contrast, errors that indicate a problem in protoc + // itself (unparsable input, I/O errors, etc.) are reported + // to stderr. + gen.Error(err) + } + resp := gen.Response() + out, err := proto.Marshal(resp) + if err != nil { + return err + } + if _, err := os.Stdout.Write(out); err != nil { + return err + } + return nil +} + +// A Plugin is a protoc plugin invocation. +type Plugin struct { + // Request is the CodeGeneratorRequest provided by protoc. + Request *pluginpb.CodeGeneratorRequest + + // Files is the set of files to generate and everything they import. + // Files appear in topological order, so each file appears before any + // file that imports it. + Files []*File + FilesByPath map[string]*File + + // SupportedFeatures is the set of protobuf language features supported by + // this generator plugin. See the documentation for + // google.protobuf.CodeGeneratorResponse.supported_features for details. + SupportedFeatures uint64 + + SupportedEditionsMinimum descriptorpb.Edition + SupportedEditionsMaximum descriptorpb.Edition + + fileReg *protoregistry.Files + enumsByName map[protoreflect.FullName]*Enum + messagesByName map[protoreflect.FullName]*Message + annotateCode bool + pathType pathType + module string + genFiles []*GeneratedFile + opts Options + err error +} + +type Options struct { + // If ParamFunc is non-nil, it will be called with each unknown + // generator parameter. + // + // Plugins for protoc can accept parameters from the command line, + // passed in the --_out protoc, separated from the output + // directory with a colon; e.g., + // + // --go_out==,=: + // + // Parameters passed in this fashion as a comma-separated list of + // key=value pairs will be passed to the ParamFunc. + // + // The (flag.FlagSet).Set method matches this function signature, + // so parameters can be converted into flags as in the following: + // + // var flags flag.FlagSet + // value := flags.Bool("param", false, "") + // opts := &protogen.Options{ + // ParamFunc: flags.Set, + // } + // opts.Run(func(p *protogen.Plugin) error { + // if *value { ... } + // }) + ParamFunc func(name, value string) error + + // ImportRewriteFunc is called with the import path of each package + // imported by a generated file. It returns the import path to use + // for this package. + ImportRewriteFunc func(GoImportPath) GoImportPath + + // StripForEditionsDiff true means that the plugin will not emit certain + // parts of the generated code in order to make it possible to compare a + // proto2/proto3 file with its equivalent (according to proto spec) + // editions file. Primarily, this is the encoded descriptor. + // + // This must be a registered flag that is initialized by ParamFunc. It will + // be used by Options.New after it has parsed the flags. + // + // This struct field is for internal use by Go Protobuf only. Do not use it, + // we might remove it at any time. + InternalStripForEditionsDiff *bool + + // DefaultAPILevel overrides which API to generate by default (despite what + // the editions feature default specifies). One of OPEN, HYBRID or OPAQUE. + DefaultAPILevel gofeaturespb.GoFeatures_APILevel +} + +// New returns a new Plugin. +func (opts Options) New(req *pluginpb.CodeGeneratorRequest) (*Plugin, error) { + gen := &Plugin{ + Request: req, + FilesByPath: make(map[string]*File), + fileReg: new(protoregistry.Files), + enumsByName: make(map[protoreflect.FullName]*Enum), + messagesByName: make(map[protoreflect.FullName]*Message), + opts: opts, + } + + packageNames := make(map[string]GoPackageName) // filename -> package name + importPaths := make(map[string]GoImportPath) // filename -> import path + apiLevel := make(map[string]gofeaturespb.GoFeatures_APILevel) // filename -> api level + for _, param := range strings.Split(req.GetParameter(), ",") { + var value string + if i := strings.Index(param, "="); i >= 0 { + value = param[i+1:] + param = param[0:i] + } + switch param { + case "": + // Ignore. + case "module": + gen.module = value + case "paths": + switch value { + case "import": + gen.pathType = pathTypeImport + case "source_relative": + gen.pathType = pathTypeSourceRelative + default: + return nil, fmt.Errorf(`unknown path type %q: want "import" or "source_relative"`, value) + } + case "annotate_code": + switch value { + case "true", "": + gen.annotateCode = true + case "false": + default: + return nil, fmt.Errorf(`bad value for parameter %q: want "true" or "false"`, param) + } + case "default_api_level": + switch value { + case "API_OPEN": + opts.DefaultAPILevel = gofeaturespb.GoFeatures_API_OPEN + case "API_HYBRID": + opts.DefaultAPILevel = gofeaturespb.GoFeatures_API_HYBRID + case "API_OPAQUE": + opts.DefaultAPILevel = gofeaturespb.GoFeatures_API_OPAQUE + default: + return nil, fmt.Errorf(`unknown API level %q for parameter %q: want "API_OPEN", "API_HYBRID" or "API_OPAQUE"`, value, param) + } + gen.opts = opts + default: + if param[0] == 'M' { + impPath, pkgName := splitImportPathAndPackageName(value) + if pkgName != "" { + packageNames[param[1:]] = pkgName + } + if impPath != "" { + importPaths[param[1:]] = impPath + } + continue + } + if strings.HasPrefix(param, "apilevelM") { + var level gofeaturespb.GoFeatures_APILevel + switch value { + case "API_OPEN": + level = gofeaturespb.GoFeatures_API_OPEN + case "API_HYBRID": + level = gofeaturespb.GoFeatures_API_HYBRID + case "API_OPAQUE": + level = gofeaturespb.GoFeatures_API_OPAQUE + default: + return nil, fmt.Errorf(`unknown API level %q for parameter %q: want "API_OPEN", "API_HYBRID" or "API_OPAQUE"`, value, param) + } + apiLevel[strings.TrimPrefix(param, "apilevelM")] = level + continue + } + if opts.ParamFunc != nil { + if err := opts.ParamFunc(param, value); err != nil { + return nil, err + } + } + } + } + + // When the module= option is provided, we strip the module name + // prefix from generated files. This only makes sense if generated + // filenames are based on the import path. + if gen.module != "" && gen.pathType == pathTypeSourceRelative { + return nil, fmt.Errorf("cannot use module= with paths=source_relative") + } + + // Figure out the import path and package name for each file. + // + // The rules here are complicated and have grown organically over time. + // Interactions between different ways of specifying package information + // may be surprising. + // + // The recommended approach is to include a go_package option in every + // .proto source file specifying the full import path of the Go package + // associated with this file. + // + // option go_package = "google.golang.org/protobuf/types/known/anypb"; + // + // Alternatively, build systems which want to exert full control over + // import paths may specify M= flags. + for _, fdesc := range gen.Request.ProtoFile { + filename := fdesc.GetName() + // The "M" command-line flags take precedence over + // the "go_package" option in the .proto source file. + impPath, pkgName := splitImportPathAndPackageName(fdesc.GetOptions().GetGoPackage()) + if importPaths[filename] == "" && impPath != "" { + importPaths[filename] = impPath + } + if packageNames[filename] == "" && pkgName != "" { + packageNames[filename] = pkgName + } + switch { + case importPaths[filename] == "": + // The import path must be specified one way or another. + return nil, fmt.Errorf( + "unable to determine Go import path for %q\n\n"+ + "Please specify either:\n"+ + "\t• a \"go_package\" option in the .proto source file, or\n"+ + "\t• a \"M\" argument on the command line.\n\n"+ + "See %v for more information.\n", + fdesc.GetName(), goPackageDocURL) + case !strings.Contains(string(importPaths[filename]), ".") && + !strings.Contains(string(importPaths[filename]), "/"): + // Check that import paths contain at least a dot or slash to avoid + // a common mistake where import path is confused with package name. + return nil, fmt.Errorf( + "invalid Go import path %q for %q\n\n"+ + "The import path must contain at least one period ('.') or forward slash ('/') character.\n\n"+ + "See %v for more information.\n", + string(importPaths[filename]), fdesc.GetName(), goPackageDocURL) + case packageNames[filename] == "": + // If the package name is not explicitly specified, + // then derive a reasonable package name from the import path. + // + // NOTE: The package name is derived first from the import path in + // the "go_package" option (if present) before trying the "M" flag. + // The inverted order for this is because the primary use of the "M" + // flag is by build systems that have full control over the + // import paths all packages, where it is generally expected that + // the Go package name still be identical for the Go toolchain and + // for custom build systems like Bazel. + if impPath == "" { + impPath = importPaths[filename] + } + packageNames[filename] = cleanPackageName(path.Base(string(impPath))) + } + } + + // Consistency check: Every file with the same Go import path should have + // the same Go package name. + packageFiles := make(map[GoImportPath][]string) + for filename, importPath := range importPaths { + if _, ok := packageNames[filename]; !ok { + // Skip files mentioned in a M= parameter + // but which do not appear in the CodeGeneratorRequest. + continue + } + packageFiles[importPath] = append(packageFiles[importPath], filename) + } + for importPath, filenames := range packageFiles { + for i := 1; i < len(filenames); i++ { + if a, b := packageNames[filenames[0]], packageNames[filenames[i]]; a != b { + return nil, fmt.Errorf("Go package %v has inconsistent names %v (%v) and %v (%v)", + importPath, a, filenames[0], b, filenames[i]) + } + } + } + + // The extracted types from the full import set + typeRegistry := newExtensionRegistry() + for _, fdesc := range gen.Request.ProtoFile { + filename := fdesc.GetName() + if gen.FilesByPath[filename] != nil { + return nil, fmt.Errorf("duplicate file name: %q", filename) + } + f, err := newFile(gen, fdesc, packageNames[filename], importPaths[filename], apiLevel[filename]) + if err != nil { + return nil, err + } + gen.Files = append(gen.Files, f) + gen.FilesByPath[filename] = f + if err = typeRegistry.registerAllExtensionsFromFile(f.Desc); err != nil { + return nil, err + } + } + for _, filename := range gen.Request.FileToGenerate { + f, ok := gen.FilesByPath[filename] + if !ok { + return nil, fmt.Errorf("no descriptor for generated file: %v", filename) + } + f.Generate = true + } + + // Create fully-linked descriptors if new extensions were found + if typeRegistry.hasNovelExtensions() { + for _, f := range gen.Files { + b, err := proto.Marshal(f.Proto.ProtoReflect().Interface()) + if err != nil { + return nil, err + } + err = proto.UnmarshalOptions{Resolver: typeRegistry}.Unmarshal(b, f.Proto) + if err != nil { + return nil, err + } + } + } + return gen, nil +} + +// InternalStripForEditionsDiff returns whether or not to strip non-functional +// codegen for editions diff testing. +// +// This function is for internal use by Go Protobuf only. Do not use it, we +// might remove it at any time. +func (gen *Plugin) InternalStripForEditionsDiff() bool { + return gen.opts.InternalStripForEditionsDiff != nil && *gen.opts.InternalStripForEditionsDiff +} + +// Error records an error in code generation. The generator will report the +// error back to protoc and will not produce output. +func (gen *Plugin) Error(err error) { + if gen.err == nil { + gen.err = err + } +} + +// Response returns the generator output. +func (gen *Plugin) Response() *pluginpb.CodeGeneratorResponse { + resp := &pluginpb.CodeGeneratorResponse{} + // Always report the support for editions. Otherwise protoc might obfuscate + // the error by saying editions are not supported by the plugin. + // It is arguable if protoc should handle this but it is possible that the + // error only exists because the plugin does not support editions and thus + // it is not unreasonable for protoc to suspect it is the lack of editions + // support that led to this error. + if gen.SupportedFeatures > 0 { + resp.SupportedFeatures = proto.Uint64(gen.SupportedFeatures) + } + if gen.SupportedEditionsMinimum != descriptorpb.Edition_EDITION_UNKNOWN && gen.SupportedEditionsMaximum != descriptorpb.Edition_EDITION_UNKNOWN { + resp.MinimumEdition = proto.Int32(int32(gen.SupportedEditionsMinimum)) + resp.MaximumEdition = proto.Int32(int32(gen.SupportedEditionsMaximum)) + } + + if gen.err != nil { + resp.Error = proto.String(gen.err.Error()) + return resp + } + for _, g := range gen.genFiles { + if g.skip { + continue + } + content, err := g.Content() + if err != nil { + return &pluginpb.CodeGeneratorResponse{ + Error: proto.String(err.Error()), + } + } + filename := g.filename + if gen.module != "" { + trim := gen.module + "/" + if !strings.HasPrefix(filename, trim) { + return &pluginpb.CodeGeneratorResponse{ + Error: proto.String(fmt.Sprintf("%v: generated file does not match prefix %q", filename, gen.module)), + } + } + filename = strings.TrimPrefix(filename, trim) + } + resp.File = append(resp.File, &pluginpb.CodeGeneratorResponse_File{ + Name: proto.String(filename), + Content: proto.String(string(content)), + }) + if gen.annotateCode && strings.HasSuffix(g.filename, ".go") { + meta, err := g.metaFile(content) + if err != nil { + return &pluginpb.CodeGeneratorResponse{ + Error: proto.String(err.Error()), + } + } + resp.File = append(resp.File, &pluginpb.CodeGeneratorResponse_File{ + Name: proto.String(filename + ".meta"), + Content: proto.String(meta), + }) + } + } + return resp +} + +// A File describes a .proto source file. +type File struct { + Desc protoreflect.FileDescriptor + Proto *descriptorpb.FileDescriptorProto + + GoDescriptorIdent GoIdent // name of Go variable for the file descriptor + GoPackageName GoPackageName // name of this file's Go package + GoImportPath GoImportPath // import path of this file's Go package + + Enums []*Enum // top-level enum declarations + Messages []*Message // top-level message declarations + Extensions []*Extension // top-level extension declarations + Services []*Service // top-level service declarations + + Generate bool // true if we should generate code for this file + + // GeneratedFilenamePrefix is used to construct filenames for generated + // files associated with this source file. + // + // For example, the source file "dir/foo.proto" might have a filename prefix + // of "dir/foo". Appending ".pb.go" produces an output file of "dir/foo.pb.go". + GeneratedFilenamePrefix string + + location Location + + // APILevel specifies which API to generate. One of OPEN, HYBRID or OPAQUE. + APILevel gofeaturespb.GoFeatures_APILevel +} + +func newFile(gen *Plugin, p *descriptorpb.FileDescriptorProto, packageName GoPackageName, importPath GoImportPath, apiLevel gofeaturespb.GoFeatures_APILevel) (*File, error) { + desc, err := protodesc.NewFile(p, gen.fileReg) + if err != nil { + return nil, fmt.Errorf("invalid FileDescriptorProto %q: %v", p.GetName(), err) + } + if err := gen.fileReg.RegisterFile(desc); err != nil { + return nil, fmt.Errorf("cannot register descriptor %q: %v", p.GetName(), err) + } + defaultAPILevel := gen.defaultAPILevel() + if apiLevel != gofeaturespb.GoFeatures_API_LEVEL_UNSPECIFIED { + defaultAPILevel = apiLevel + } + f := &File{ + Desc: desc, + Proto: p, + GoPackageName: packageName, + GoImportPath: importPath, + location: Location{SourceFile: desc.Path()}, + + APILevel: fileAPILevel(desc, defaultAPILevel), + } + + // Determine the prefix for generated Go files. + prefix := p.GetName() + if ext := path.Ext(prefix); ext == ".proto" || ext == ".protodevel" { + prefix = prefix[:len(prefix)-len(ext)] + } + switch gen.pathType { + case pathTypeImport: + // If paths=import, the output filename is derived from the Go import path. + prefix = path.Join(string(f.GoImportPath), path.Base(prefix)) + case pathTypeSourceRelative: + // If paths=source_relative, the output filename is derived from + // the input filename. + } + f.GoDescriptorIdent = GoIdent{ + GoName: "File_" + strs.GoSanitized(p.GetName()), + GoImportPath: f.GoImportPath, + } + f.GeneratedFilenamePrefix = prefix + + for i, eds := 0, desc.Enums(); i < eds.Len(); i++ { + f.Enums = append(f.Enums, newEnum(gen, f, nil, eds.Get(i))) + } + for i, mds := 0, desc.Messages(); i < mds.Len(); i++ { + f.Messages = append(f.Messages, newMessage(gen, f, nil, mds.Get(i))) + } + for i, xds := 0, desc.Extensions(); i < xds.Len(); i++ { + f.Extensions = append(f.Extensions, newField(gen, f, nil, xds.Get(i))) + } + for i, sds := 0, desc.Services(); i < sds.Len(); i++ { + f.Services = append(f.Services, newService(gen, f, sds.Get(i))) + } + for _, message := range f.Messages { + if err := message.resolveDependencies(gen); err != nil { + return nil, err + } + } + for _, extension := range f.Extensions { + if err := extension.resolveDependencies(gen); err != nil { + return nil, err + } + } + for _, service := range f.Services { + for _, method := range service.Methods { + if err := method.resolveDependencies(gen); err != nil { + return nil, err + } + } + } + return f, nil +} + +// splitImportPathAndPackageName splits off the optional Go package name +// from the Go import path when separated by a ';' delimiter. +func splitImportPathAndPackageName(s string) (GoImportPath, GoPackageName) { + if i := strings.Index(s, ";"); i >= 0 { + return GoImportPath(s[:i]), GoPackageName(s[i+1:]) + } + return GoImportPath(s), "" +} + +// An Enum describes an enum. +type Enum struct { + Desc protoreflect.EnumDescriptor + + GoIdent GoIdent // name of the generated Go type + + Values []*EnumValue // enum value declarations + + Location Location // location of this enum + Comments CommentSet // comments associated with this enum +} + +func newEnum(gen *Plugin, f *File, parent *Message, desc protoreflect.EnumDescriptor) *Enum { + var loc Location + if parent != nil { + loc = parent.Location.appendPath(genid.DescriptorProto_EnumType_field_number, desc.Index()) + } else { + loc = f.location.appendPath(genid.FileDescriptorProto_EnumType_field_number, desc.Index()) + } + enum := &Enum{ + Desc: desc, + GoIdent: newGoIdent(f, desc), + Location: loc, + Comments: makeCommentSet(gen, f.Desc.SourceLocations().ByDescriptor(desc)), + } + gen.enumsByName[desc.FullName()] = enum + for i, vds := 0, enum.Desc.Values(); i < vds.Len(); i++ { + enum.Values = append(enum.Values, newEnumValue(gen, f, parent, enum, vds.Get(i))) + } + return enum +} + +// An EnumValue describes an enum value. +type EnumValue struct { + Desc protoreflect.EnumValueDescriptor + + GoIdent GoIdent // name of the generated Go declaration + + // PrefixedAlias is usually empty, except when the strip_enum_prefix feature + // for this enum was set to GENERATE_BOTH, in which case PrefixedAlias holds + // the old name which should be generated as an alias for the new name for + // compatibility. + PrefixedAlias GoIdent + + Parent *Enum // enum in which this value is declared + + Location Location // location of this enum value + Comments CommentSet // comments associated with this enum value +} + +func newEnumValue(gen *Plugin, f *File, message *Message, enum *Enum, desc protoreflect.EnumValueDescriptor) *EnumValue { + // A top-level enum value's name is: EnumName_ValueName + // An enum value contained in a message is: MessageName_ValueName + // + // For historical reasons, enum value names are not camel-cased. + parentIdent := enum.GoIdent + if message != nil { + parentIdent = message.GoIdent + } + name := parentIdent.GoName + "_" + string(desc.Name()) + var prefixedName string + loc := enum.Location.appendPath(genid.EnumDescriptorProto_Value_field_number, desc.Index()) + if ed, ok := enum.Desc.(*filedesc.Enum); ok { + prefix := strings.Replace(strings.ToLower(string(enum.Desc.Name())), "_", "", -1) + + // Start with the StripEnumPrefix of the enum descriptor, + // then override it with the StripEnumPrefix of the enum value descriptor, + // if any. + sep := ed.L1.EditionFeatures.StripEnumPrefix + evof := desc.Options().(*descriptorpb.EnumValueOptions).GetFeatures() + if proto.HasExtension(evof, gofeaturespb.E_Go) { + gf := proto.GetExtension(evof, gofeaturespb.E_Go).(*gofeaturespb.GoFeatures) + if gf.StripEnumPrefix != nil { + sep = int(*gf.StripEnumPrefix) + } + } + + switch sep { + case genid.GoFeatures_STRIP_ENUM_PREFIX_KEEP_enum_value: + // keep long name + + case genid.GoFeatures_STRIP_ENUM_PREFIX_STRIP_enum_value: + name = parentIdent.GoName + "_" + strs.TrimEnumPrefix(string(desc.Name()), prefix) + + case genid.GoFeatures_STRIP_ENUM_PREFIX_GENERATE_BOTH_enum_value: + prefixedName = name + name = parentIdent.GoName + "_" + strs.TrimEnumPrefix(string(desc.Name()), prefix) + } + } + ev := &EnumValue{ + Desc: desc, + GoIdent: f.GoImportPath.Ident(name), + Parent: enum, + Location: loc, + Comments: makeCommentSet(gen, f.Desc.SourceLocations().ByDescriptor(desc)), + } + if prefixedName != "" { + ev.PrefixedAlias = f.GoImportPath.Ident(prefixedName) + } + return ev +} + +// A Message describes a message. +type Message struct { + Desc protoreflect.MessageDescriptor + + GoIdent GoIdent // name of the generated Go type + + Fields []*Field // message field declarations + Oneofs []*Oneof // message oneof declarations + + Enums []*Enum // nested enum declarations + Messages []*Message // nested message declarations + Extensions []*Extension // nested extension declarations + + Location Location // location of this message + Comments CommentSet // comments associated with this message + + // APILevel specifies which API to generate. One of OPEN, HYBRID or OPAQUE. + APILevel gofeaturespb.GoFeatures_APILevel +} + +func newMessage(gen *Plugin, f *File, parent *Message, desc protoreflect.MessageDescriptor) *Message { + var loc Location + if parent != nil { + loc = parent.Location.appendPath(genid.DescriptorProto_NestedType_field_number, desc.Index()) + } else { + loc = f.location.appendPath(genid.FileDescriptorProto_MessageType_field_number, desc.Index()) + } + + def := f.APILevel + if parent != nil { + // editions feature semantics: applies to nested messages. + def = parent.APILevel + } + + message := &Message{ + Desc: desc, + GoIdent: newGoIdent(f, desc), + Location: loc, + Comments: makeCommentSet(gen, f.Desc.SourceLocations().ByDescriptor(desc)), + + APILevel: messageAPILevel(desc, def), + } + gen.messagesByName[desc.FullName()] = message + for i, eds := 0, desc.Enums(); i < eds.Len(); i++ { + message.Enums = append(message.Enums, newEnum(gen, f, message, eds.Get(i))) + } + for i, mds := 0, desc.Messages(); i < mds.Len(); i++ { + message.Messages = append(message.Messages, newMessage(gen, f, message, mds.Get(i))) + } + for i, fds := 0, desc.Fields(); i < fds.Len(); i++ { + message.Fields = append(message.Fields, newField(gen, f, message, fds.Get(i))) + } + for i, ods := 0, desc.Oneofs(); i < ods.Len(); i++ { + message.Oneofs = append(message.Oneofs, newOneof(gen, f, message, ods.Get(i))) + } + for i, xds := 0, desc.Extensions(); i < xds.Len(); i++ { + message.Extensions = append(message.Extensions, newField(gen, f, message, xds.Get(i))) + } + + // Resolve local references between fields and oneofs. + for _, field := range message.Fields { + if od := field.Desc.ContainingOneof(); od != nil { + oneof := message.Oneofs[od.Index()] + field.Oneof = oneof + oneof.Fields = append(oneof.Fields, field) + } + } + + // Field name conflict resolution. + // + // We assume well-known method names that may be attached to a generated + // message type, as well as a 'Get*' method for each field. For each + // field in turn, we add _s to its name until there are no conflicts. + // + // Any change to the following set of method names is a potential + // incompatible API change because it may change generated field names. + // + // TODO: If we ever support a 'go_name' option to set the Go name of a + // field, we should consider dropping this entirely. The conflict + // resolution algorithm is subtle and surprising (changing the order + // in which fields appear in the .proto source file can change the + // names of fields in generated code), and does not adapt well to + // adding new per-field methods such as setters. + usedNames := map[string]bool{ + "Reset": true, + "String": true, + "ProtoMessage": true, + "Marshal": true, + "Unmarshal": true, + "ExtensionRangeArray": true, + "ExtensionMap": true, + "Descriptor": true, + } + makeNameUnique := func(name string, hasGetter bool) string { + for usedNames[name] || (hasGetter && usedNames["Get"+name]) { + name += "_" + } + usedNames[name] = true + usedNames["Get"+name] = hasGetter + return name + } + for _, field := range message.Fields { + field.GoName = makeNameUnique(field.GoName, true) + field.GoIdent.GoName = message.GoIdent.GoName + "_" + field.GoName + if field.Oneof != nil && field.Oneof.Fields[0] == field { + // Make the name for a oneof unique as well. For historical reasons, + // this assumes that a getter method is not generated for oneofs. + // This is incorrect, but fixing it breaks existing code. + field.Oneof.GoName = makeNameUnique(field.Oneof.GoName, false) + field.Oneof.GoIdent.GoName = message.GoIdent.GoName + "_" + field.Oneof.GoName + } + } + + // Oneof field name conflict resolution. + // + // This conflict resolution is incomplete as it does not consider collisions + // with other oneof field types, but fixing it breaks existing code. + for _, field := range message.Fields { + if field.Oneof != nil { + Loop: + for { + for _, nestedMessage := range message.Messages { + if nestedMessage.GoIdent == field.GoIdent { + field.GoIdent.GoName += "_" + continue Loop + } + } + for _, nestedEnum := range message.Enums { + if nestedEnum.GoIdent == field.GoIdent { + field.GoIdent.GoName += "_" + continue Loop + } + } + break Loop + } + } + } + + opaqueNewMessageHook(message) + + return message +} + +func (message *Message) resolveDependencies(gen *Plugin) error { + for _, field := range message.Fields { + if err := field.resolveDependencies(gen); err != nil { + return err + } + } + for _, message := range message.Messages { + if err := message.resolveDependencies(gen); err != nil { + return err + } + } + for _, extension := range message.Extensions { + if err := extension.resolveDependencies(gen); err != nil { + return err + } + } + return nil +} + +// A Field describes a message field. +type Field struct { + Desc protoreflect.FieldDescriptor + + // GoName is the base name of this field's Go field and methods. + // For code generated by protoc-gen-go, this means a field named + // '{{GoName}}' and a getter method named 'Get{{GoName}}'. + GoName string // e.g., "FieldName" + + // GoIdent is the base name of a top-level declaration for this field. + // For code generated by protoc-gen-go, this means a wrapper type named + // '{{GoIdent}}' for members fields of a oneof, and a variable named + // 'E_{{GoIdent}}' for extension fields. + GoIdent GoIdent // e.g., "MessageName_FieldName" + + Parent *Message // message in which this field is declared; nil if top-level extension + Oneof *Oneof // containing oneof; nil if not part of a oneof + Extendee *Message // extended message for extension fields; nil otherwise + + Enum *Enum // type for enum fields; nil otherwise + Message *Message // type for message or group fields; nil otherwise + + Location Location // location of this field + Comments CommentSet // comments associated with this field + + // camelCase is the same as GoName, but without the name + // mangling. This is used in builders, where only the single + // name "Build" needs to be mangled. + camelCase string + + // hasConflictHybrid tells us if we are to insert an '_' into + // the method names, (e.g. SetFoo becomes Set_Foo). This will + // be set even if we generate opaque protos, as we will want + // to potentially generate these method names anyway + // (opaque-v0). + hasConflictHybrid bool +} + +func newField(gen *Plugin, f *File, message *Message, desc protoreflect.FieldDescriptor) *Field { + var loc Location + switch { + case desc.IsExtension() && message == nil: + loc = f.location.appendPath(genid.FileDescriptorProto_Extension_field_number, desc.Index()) + case desc.IsExtension() && message != nil: + loc = message.Location.appendPath(genid.DescriptorProto_Extension_field_number, desc.Index()) + default: + loc = message.Location.appendPath(genid.DescriptorProto_Field_field_number, desc.Index()) + } + camelCased := strs.GoCamelCase(string(desc.Name())) + var parentPrefix string + if message != nil { + parentPrefix = message.GoIdent.GoName + "_" + } + field := &Field{ + Desc: desc, + GoName: camelCased, + GoIdent: GoIdent{ + GoImportPath: f.GoImportPath, + GoName: parentPrefix + camelCased, + }, + Parent: message, + Location: loc, + Comments: makeCommentSet(gen, f.Desc.SourceLocations().ByDescriptor(desc)), + } + + opaqueNewFieldHook(desc, field) + + return field +} + +func (field *Field) resolveDependencies(gen *Plugin) error { + desc := field.Desc + switch desc.Kind() { + case protoreflect.EnumKind: + name := field.Desc.Enum().FullName() + enum, ok := gen.enumsByName[name] + if !ok { + return fmt.Errorf("field %v: no descriptor for enum %v", desc.FullName(), name) + } + field.Enum = enum + case protoreflect.MessageKind, protoreflect.GroupKind: + name := desc.Message().FullName() + message, ok := gen.messagesByName[name] + if !ok { + return fmt.Errorf("field %v: no descriptor for type %v", desc.FullName(), name) + } + field.Message = message + } + if desc.IsExtension() { + name := desc.ContainingMessage().FullName() + message, ok := gen.messagesByName[name] + if !ok { + return fmt.Errorf("field %v: no descriptor for type %v", desc.FullName(), name) + } + field.Extendee = message + } + return nil +} + +// A Oneof describes a message oneof. +type Oneof struct { + Desc protoreflect.OneofDescriptor + + // GoName is the base name of this oneof's Go field and methods. + // For code generated by protoc-gen-go, this means a field named + // '{{GoName}}' and a getter method named 'Get{{GoName}}'. + GoName string // e.g., "OneofName" + + // GoIdent is the base name of a top-level declaration for this oneof. + GoIdent GoIdent // e.g., "MessageName_OneofName" + + Parent *Message // message in which this oneof is declared + + Fields []*Field // fields that are part of this oneof + + Location Location // location of this oneof + Comments CommentSet // comments associated with this oneof + + // camelCase is the same as GoName, but without the name mangling. + // This is used in builders, which never have their names mangled + camelCase string + + // hasConflictHybrid tells us if we are to insert an '_' into + // the method names, (e.g. SetFoo becomes Set_Foo). This will + // be set even if we generate opaque protos, as we will want + // to potentially generate these method names anyway + // (opaque-v0). + hasConflictHybrid bool +} + +func newOneof(gen *Plugin, f *File, message *Message, desc protoreflect.OneofDescriptor) *Oneof { + loc := message.Location.appendPath(genid.DescriptorProto_OneofDecl_field_number, desc.Index()) + camelCased := strs.GoCamelCase(string(desc.Name())) + parentPrefix := message.GoIdent.GoName + "_" + oneof := &Oneof{ + Desc: desc, + Parent: message, + GoName: camelCased, + GoIdent: GoIdent{ + GoImportPath: f.GoImportPath, + GoName: parentPrefix + camelCased, + }, + Location: loc, + Comments: makeCommentSet(gen, f.Desc.SourceLocations().ByDescriptor(desc)), + } + + opaqueNewOneofHook(desc, oneof) + + return oneof +} + +// Extension is an alias of [Field] for documentation. +type Extension = Field + +// A Service describes a service. +type Service struct { + Desc protoreflect.ServiceDescriptor + + GoName string + + Methods []*Method // service method declarations + + Location Location // location of this service + Comments CommentSet // comments associated with this service +} + +func newService(gen *Plugin, f *File, desc protoreflect.ServiceDescriptor) *Service { + loc := f.location.appendPath(genid.FileDescriptorProto_Service_field_number, desc.Index()) + service := &Service{ + Desc: desc, + GoName: strs.GoCamelCase(string(desc.Name())), + Location: loc, + Comments: makeCommentSet(gen, f.Desc.SourceLocations().ByDescriptor(desc)), + } + for i, mds := 0, desc.Methods(); i < mds.Len(); i++ { + service.Methods = append(service.Methods, newMethod(gen, f, service, mds.Get(i))) + } + return service +} + +// A Method describes a method in a service. +type Method struct { + Desc protoreflect.MethodDescriptor + + GoName string + + Parent *Service // service in which this method is declared + + Input *Message + Output *Message + + Location Location // location of this method + Comments CommentSet // comments associated with this method +} + +func newMethod(gen *Plugin, f *File, service *Service, desc protoreflect.MethodDescriptor) *Method { + loc := service.Location.appendPath(genid.ServiceDescriptorProto_Method_field_number, desc.Index()) + method := &Method{ + Desc: desc, + GoName: strs.GoCamelCase(string(desc.Name())), + Parent: service, + Location: loc, + Comments: makeCommentSet(gen, f.Desc.SourceLocations().ByDescriptor(desc)), + } + return method +} + +func (method *Method) resolveDependencies(gen *Plugin) error { + desc := method.Desc + + inName := desc.Input().FullName() + in, ok := gen.messagesByName[inName] + if !ok { + return fmt.Errorf("method %v: no descriptor for type %v", desc.FullName(), inName) + } + method.Input = in + + outName := desc.Output().FullName() + out, ok := gen.messagesByName[outName] + if !ok { + return fmt.Errorf("method %v: no descriptor for type %v", desc.FullName(), outName) + } + method.Output = out + + return nil +} + +// A GeneratedFile is a generated file. +type GeneratedFile struct { + gen *Plugin + skip bool + filename string + goImportPath GoImportPath + buf bytes.Buffer + packageNames map[GoImportPath]GoPackageName + usedPackageNames map[GoPackageName]bool + manualImports map[GoImportPath]bool + annotations map[string][]Annotation + stripForEditionsDiff bool +} + +// NewGeneratedFile creates a new generated file with the given filename +// and import path. +func (gen *Plugin) NewGeneratedFile(filename string, goImportPath GoImportPath) *GeneratedFile { + g := &GeneratedFile{ + gen: gen, + filename: filename, + goImportPath: goImportPath, + packageNames: make(map[GoImportPath]GoPackageName), + usedPackageNames: make(map[GoPackageName]bool), + manualImports: make(map[GoImportPath]bool), + annotations: make(map[string][]Annotation), + stripForEditionsDiff: gen.InternalStripForEditionsDiff(), + } + + // All predeclared identifiers in Go are already used. + for _, s := range types.Universe.Names() { + g.usedPackageNames[GoPackageName(s)] = true + } + + gen.genFiles = append(gen.genFiles, g) + return g +} + +// P prints a line to the generated output. It converts each parameter to a +// string following the same rules as [fmt.Print]. It never inserts spaces +// between parameters. +func (g *GeneratedFile) P(v ...any) { + for _, x := range v { + switch x := x.(type) { + case GoIdent: + fmt.Fprint(&g.buf, g.QualifiedGoIdent(x)) + default: + fmt.Fprint(&g.buf, x) + } + } + fmt.Fprintln(&g.buf) +} + +// QualifiedGoIdent returns the string to use for a Go identifier. +// +// If the identifier is from a different Go package than the generated file, +// the returned name will be qualified (package.name) and an import statement +// for the identifier's package will be included in the file. +func (g *GeneratedFile) QualifiedGoIdent(ident GoIdent) string { + if ident.GoImportPath == g.goImportPath { + return ident.GoName + } + if packageName, ok := g.packageNames[ident.GoImportPath]; ok { + return string(packageName) + "." + ident.GoName + } + packageName := cleanPackageName(path.Base(string(ident.GoImportPath))) + for i, orig := 1, packageName; g.usedPackageNames[packageName]; i++ { + packageName = orig + GoPackageName(strconv.Itoa(i)) + } + g.packageNames[ident.GoImportPath] = packageName + g.usedPackageNames[packageName] = true + return string(packageName) + "." + ident.GoName +} + +// Import ensures a package is imported by the generated file. +// +// Packages referenced by [GeneratedFile.QualifiedGoIdent] are automatically imported. +// Explicitly importing a package with Import is generally only necessary +// when the import will be blank (import _ "package"). +func (g *GeneratedFile) Import(importPath GoImportPath) { + g.manualImports[importPath] = true +} + +// Write implements [io.Writer]. +func (g *GeneratedFile) Write(p []byte) (n int, err error) { + return g.buf.Write(p) +} + +// Skip removes the generated file from the plugin output. +func (g *GeneratedFile) Skip() { + g.skip = true +} + +// Unskip reverts a previous call to [GeneratedFile.Skip], +// re-including the generated file in the plugin output. +func (g *GeneratedFile) Unskip() { + g.skip = false +} + +// InternalStripForEditionsDiff returns true if the plugin should not emit certain +// parts of the generated code in order to make it possible to compare a +// proto2/proto3 file with its equivalent (according to proto spec) editions +// file. Primarily, this is the encoded descriptor. +// +// This function is for internal use by Go Protobuf only. Do not use it, we +// might remove it at any time. +func (g *GeneratedFile) InternalStripForEditionsDiff() bool { + return g.stripForEditionsDiff +} + +// Annotate associates a symbol in a generated Go file with a location in a +// source .proto file. +// +// The symbol may refer to a type, constant, variable, function, method, or +// struct field. The "T.sel" syntax is used to identify the method or field +// 'sel' on type 'T'. +// +// Deprecated: Use the [GeneratedFile.AnnotateSymbol] method instead. +func (g *GeneratedFile) Annotate(symbol string, loc Location) { + g.AnnotateSymbol(symbol, Annotation{Location: loc}) +} + +// An Annotation provides semantic detail for a generated proto element. +// +// See the google.protobuf.GeneratedCodeInfo.Annotation documentation in +// descriptor.proto for details. +type Annotation struct { + // Location is the source .proto file for the element. + Location Location + + // Semantic is the symbol's effect on the element in the original .proto file. + Semantic *descriptorpb.GeneratedCodeInfo_Annotation_Semantic +} + +// AnnotateSymbol associates a symbol in a generated Go file with a location +// in a source .proto file and a semantic type. +// +// The symbol may refer to a type, constant, variable, function, method, or +// struct field. The "T.sel" syntax is used to identify the method or field +// 'sel' on type 'T'. +func (g *GeneratedFile) AnnotateSymbol(symbol string, info Annotation) { + g.annotations[symbol] = append(g.annotations[symbol], info) +} + +// Content returns the contents of the generated file. +func (g *GeneratedFile) Content() ([]byte, error) { + if !strings.HasSuffix(g.filename, ".go") { + return g.buf.Bytes(), nil + } + + // Reformat generated code. + original := g.buf.Bytes() + fset := token.NewFileSet() + file, err := parser.ParseFile(fset, "", original, parser.ParseComments) + if err != nil { + // Print out the bad code with line numbers. + // This should never happen in practice, but it can while changing generated code + // so consider this a debugging aid. + var src bytes.Buffer + s := bufio.NewScanner(bytes.NewReader(original)) + for line := 1; s.Scan(); line++ { + fmt.Fprintf(&src, "%5d\t%s\n", line, s.Bytes()) + } + return nil, fmt.Errorf("%v: unparsable Go source: %v\n%v", g.filename, err, src.String()) + } + + // Collect a sorted list of all imports. + var importPaths [][2]string + rewriteImport := func(importPath string) string { + if f := g.gen.opts.ImportRewriteFunc; f != nil { + return string(f(GoImportPath(importPath))) + } + return importPath + } + for importPath := range g.packageNames { + pkgName := string(g.packageNames[GoImportPath(importPath)]) + pkgPath := rewriteImport(string(importPath)) + importPaths = append(importPaths, [2]string{pkgName, pkgPath}) + } + for importPath := range g.manualImports { + if _, ok := g.packageNames[importPath]; !ok { + pkgPath := rewriteImport(string(importPath)) + importPaths = append(importPaths, [2]string{"_", pkgPath}) + } + } + sort.Slice(importPaths, func(i, j int) bool { + return importPaths[i][1] < importPaths[j][1] + }) + + // Modify the AST to include a new import block. + if len(importPaths) > 0 { + // Insert block after package statement or + // possible comment attached to the end of the package statement. + pos := file.Package + tokFile := fset.File(file.Package) + pkgLine := tokFile.Line(file.Package) + for _, c := range file.Comments { + if tokFile.Line(c.Pos()) > pkgLine { + break + } + pos = c.End() + } + + // Construct the import block. + impDecl := &ast.GenDecl{ + Tok: token.IMPORT, + TokPos: pos, + Lparen: pos, + Rparen: pos, + } + for _, importPath := range importPaths { + impDecl.Specs = append(impDecl.Specs, &ast.ImportSpec{ + Name: &ast.Ident{ + Name: importPath[0], + NamePos: pos, + }, + Path: &ast.BasicLit{ + Kind: token.STRING, + Value: strconv.Quote(importPath[1]), + ValuePos: pos, + }, + EndPos: pos, + }) + } + file.Decls = append([]ast.Decl{impDecl}, file.Decls...) + } + + var out bytes.Buffer + if err = (&printer.Config{Mode: printer.TabIndent | printer.UseSpaces, Tabwidth: 8}).Fprint(&out, fset, file); err != nil { + return nil, fmt.Errorf("%v: can not reformat Go source: %v", g.filename, err) + } + return out.Bytes(), nil +} + +func (g *GeneratedFile) generatedCodeInfo(content []byte) (*descriptorpb.GeneratedCodeInfo, error) { + fset := token.NewFileSet() + astFile, err := parser.ParseFile(fset, "", content, 0) + if err != nil { + return nil, err + } + info := &descriptorpb.GeneratedCodeInfo{} + + seenAnnotations := make(map[string]bool) + annotate := func(s string, ident *ast.Ident) { + seenAnnotations[s] = true + for _, a := range g.annotations[s] { + info.Annotation = append(info.Annotation, &descriptorpb.GeneratedCodeInfo_Annotation{ + SourceFile: proto.String(a.Location.SourceFile), + Path: a.Location.Path, + Begin: proto.Int32(int32(fset.Position(ident.Pos()).Offset)), + End: proto.Int32(int32(fset.Position(ident.End()).Offset)), + Semantic: a.Semantic, + }) + } + } + for _, decl := range astFile.Decls { + switch decl := decl.(type) { + case *ast.GenDecl: + for _, spec := range decl.Specs { + switch spec := spec.(type) { + case *ast.TypeSpec: + annotate(spec.Name.Name, spec.Name) + switch st := spec.Type.(type) { + case *ast.StructType: + for _, field := range st.Fields.List { + for _, name := range field.Names { + annotate(spec.Name.Name+"."+name.Name, name) + } + } + case *ast.InterfaceType: + for _, field := range st.Methods.List { + for _, name := range field.Names { + annotate(spec.Name.Name+"."+name.Name, name) + } + } + } + case *ast.ValueSpec: + for _, name := range spec.Names { + annotate(name.Name, name) + } + } + } + case *ast.FuncDecl: + if decl.Recv == nil { + annotate(decl.Name.Name, decl.Name) + } else { + recv := decl.Recv.List[0].Type + if s, ok := recv.(*ast.StarExpr); ok { + recv = s.X + } + if id, ok := recv.(*ast.Ident); ok { + annotate(id.Name+"."+decl.Name.Name, decl.Name) + } + } + } + } + for a := range g.annotations { + if !seenAnnotations[a] { + return nil, fmt.Errorf("%v: no symbol matching annotation %q", g.filename, a) + } + } + + return info, nil +} + +// metaFile returns the contents of the file's metadata file, which is a +// text formatted string of the google.protobuf.GeneratedCodeInfo. +func (g *GeneratedFile) metaFile(content []byte) (string, error) { + info, err := g.generatedCodeInfo(content) + if err != nil { + return "", err + } + + b, err := prototext.Marshal(info) + if err != nil { + return "", err + } + return string(b), nil +} + +// A GoIdent is a Go identifier, consisting of a name and import path. +// The name is a single identifier and may not be a dot-qualified selector. +type GoIdent struct { + GoName string + GoImportPath GoImportPath +} + +func (id GoIdent) String() string { return fmt.Sprintf("%q.%v", id.GoImportPath, id.GoName) } + +// newGoIdent returns the Go identifier for a descriptor. +func newGoIdent(f *File, d protoreflect.Descriptor) GoIdent { + name := strings.TrimPrefix(string(d.FullName()), string(f.Desc.Package())+".") + return GoIdent{ + GoName: strs.GoCamelCase(name), + GoImportPath: f.GoImportPath, + } +} + +// A GoImportPath is the import path of a Go package. +// For example: "google.golang.org/protobuf/compiler/protogen" +type GoImportPath string + +func (p GoImportPath) String() string { return strconv.Quote(string(p)) } + +// Ident returns a GoIdent with s as the GoName and p as the GoImportPath. +func (p GoImportPath) Ident(s string) GoIdent { + return GoIdent{GoName: s, GoImportPath: p} +} + +// A GoPackageName is the name of a Go package. e.g., "protobuf". +type GoPackageName string + +// cleanPackageName converts a string to a valid Go package name. +func cleanPackageName(name string) GoPackageName { + return GoPackageName(strs.GoSanitized(name)) +} + +type pathType int + +const ( + pathTypeImport pathType = iota + pathTypeSourceRelative +) + +// A Location is a location in a .proto source file. +// +// See the google.protobuf.SourceCodeInfo documentation in descriptor.proto +// for details. +type Location struct { + SourceFile string + Path protoreflect.SourcePath +} + +// appendPath add elements to a Location's path, returning a new Location. +func (loc Location) appendPath(num protoreflect.FieldNumber, idx int) Location { + loc.Path = append(protoreflect.SourcePath(nil), loc.Path...) // make copy + loc.Path = append(loc.Path, int32(num), int32(idx)) + return loc +} + +// CommentSet is a set of leading and trailing comments associated +// with a .proto descriptor declaration. +type CommentSet struct { + LeadingDetached []Comments + Leading Comments + Trailing Comments +} + +func makeCommentSet(gen *Plugin, loc protoreflect.SourceLocation) CommentSet { + if gen.InternalStripForEditionsDiff() { + return CommentSet{} + } + var leadingDetached []Comments + for _, s := range loc.LeadingDetachedComments { + leadingDetached = append(leadingDetached, Comments(s)) + } + return CommentSet{ + LeadingDetached: leadingDetached, + Leading: Comments(loc.LeadingComments), + Trailing: Comments(loc.TrailingComments), + } +} + +// Comments is a comments string as provided by protoc. +type Comments string + +// String formats the comments by inserting // to the start of each line, +// ensuring that there is a trailing newline. +// An empty comment is formatted as an empty string. +func (c Comments) String() string { + if c == "" { + return "" + } + var b []byte + for _, line := range strings.Split(strings.TrimSuffix(string(c), "\n"), "\n") { + b = append(b, "//"...) + b = append(b, line...) + b = append(b, "\n"...) + } + return string(b) +} + +// extensionRegistry allows registration of new extensions defined in the .proto +// file for which we are generating bindings. +// +// Lookups consult the local type registry first and fall back to the base type +// registry which defaults to protoregistry.GlobalTypes. +type extensionRegistry struct { + base *protoregistry.Types + local *protoregistry.Types +} + +func newExtensionRegistry() *extensionRegistry { + return &extensionRegistry{ + base: protoregistry.GlobalTypes, + local: &protoregistry.Types{}, + } +} + +// FindExtensionByName implements proto.UnmarshalOptions.FindExtensionByName +func (e *extensionRegistry) FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) { + if xt, err := e.local.FindExtensionByName(field); err == nil { + return xt, nil + } + + return e.base.FindExtensionByName(field) +} + +// FindExtensionByNumber implements proto.UnmarshalOptions.FindExtensionByNumber +func (e *extensionRegistry) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) { + if xt, err := e.local.FindExtensionByNumber(message, field); err == nil { + return xt, nil + } + + return e.base.FindExtensionByNumber(message, field) +} + +func (e *extensionRegistry) hasNovelExtensions() bool { + return e.local.NumExtensions() > 0 +} + +func (e *extensionRegistry) registerAllExtensionsFromFile(f protoreflect.FileDescriptor) error { + if err := e.registerAllExtensions(f.Extensions()); err != nil { + return err + } + return nil +} + +func (e *extensionRegistry) registerAllExtensionsFromMessage(ms protoreflect.MessageDescriptors) error { + for i := 0; i < ms.Len(); i++ { + m := ms.Get(i) + if err := e.registerAllExtensions(m.Extensions()); err != nil { + return err + } + } + return nil +} + +func (e *extensionRegistry) registerAllExtensions(exts protoreflect.ExtensionDescriptors) error { + for i := 0; i < exts.Len(); i++ { + if err := e.registerExtension(exts.Get(i)); err != nil { + return err + } + } + return nil +} + +// registerExtension adds the given extension to the type registry if an +// extension with that full name does not exist yet. +func (e *extensionRegistry) registerExtension(xd protoreflect.ExtensionDescriptor) error { + if _, err := e.FindExtensionByName(xd.FullName()); err != protoregistry.NotFound { + // Either the extension already exists or there was an error, either way we're done. + return err + } + return e.local.RegisterExtension(dynamicpb.NewExtensionType(xd)) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/compiler/protogen/protogen_apilevel.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/compiler/protogen/protogen_apilevel.go new file mode 100644 index 0000000..9908669 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/compiler/protogen/protogen_apilevel.go @@ -0,0 +1,173 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protogen + +import ( + "fmt" + + "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/internal/genid" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/types/gofeaturespb" +) + +func fileAPILevel(fd protoreflect.FileDescriptor, def gofeaturespb.GoFeatures_APILevel) gofeaturespb.GoFeatures_APILevel { + level := gofeaturespb.GoFeatures_API_OPEN + level = def + if fd, ok := fd.(*filedesc.File); ok { + al := fd.L1.EditionFeatures.APILevel + if al != genid.GoFeatures_API_LEVEL_UNSPECIFIED_enum_value { + level = gofeaturespb.GoFeatures_APILevel(al) + } + } + + return level +} + +func messageAPILevel(md protoreflect.MessageDescriptor, def gofeaturespb.GoFeatures_APILevel) gofeaturespb.GoFeatures_APILevel { + level := def + if md, ok := md.(*filedesc.Message); ok { + al := md.L1.EditionFeatures.APILevel + if al != genid.GoFeatures_API_LEVEL_UNSPECIFIED_enum_value { + level = gofeaturespb.GoFeatures_APILevel(al) + } + } + + return level +} + +func (p *Plugin) defaultAPILevel() gofeaturespb.GoFeatures_APILevel { + if p.opts.DefaultAPILevel != gofeaturespb.GoFeatures_API_LEVEL_UNSPECIFIED { + return p.opts.DefaultAPILevel + } + + return gofeaturespb.GoFeatures_API_OPEN +} + +// MethodName returns the (possibly mangled) name of the generated accessor +// method, along with the backwards-compatible name (if needed). +// +// method must be one of Get, Set, Has, Clear. MethodName panics otherwise. +func (field *Field) MethodName(method string) (name, compat string) { + switch method { + case "Get": + return field.getterName() + + case "Set": + return field.setterName() + + case "Has", "Clear": + return field.methodName(method), "" + + default: + panic(fmt.Sprintf("Field.MethodName called for unknown method %q", method)) + } +} + +// methodName returns the (possibly mangled) name of the generated method with +// the given prefix. +// +// For the Open API, the return value is "". +func (field *Field) methodName(prefix string) string { + switch field.Parent.APILevel { + case gofeaturespb.GoFeatures_API_OPEN: + // In the Open API, only generate getters (no Has or Clear methods). + return "" + + case gofeaturespb.GoFeatures_API_HYBRID: + var infix string + if field.hasConflictHybrid { + infix = "_" + } + return prefix + infix + field.camelCase + + case gofeaturespb.GoFeatures_API_OPAQUE: + return prefix + field.camelCase + + default: + panic("BUG: message is neither open, nor hybrid, nor opaque?!") + } +} + +// getterName returns the (possibly mangled) name of the generated Get method, +// along with the backwards-compatible name (if needed). +func (field *Field) getterName() (getter, compat string) { + switch field.Parent.APILevel { + case gofeaturespb.GoFeatures_API_OPEN: + // In the Open API, only generate a getter with the old style mangled name. + return "Get" + field.GoName, "" + + case gofeaturespb.GoFeatures_API_HYBRID: + // In the Hybrid API, return the mangled getter name and the old style + // name if needed, for backwards compatibility with the Open API. + var infix string + if field.hasConflictHybrid { + infix = "_" + } + orig := "Get" + infix + field.camelCase + mangled := "Get" + field.GoName + if mangled == orig { + mangled = "" + } + return orig, mangled + + case gofeaturespb.GoFeatures_API_OPAQUE: + return field.methodName("Get"), "" + + default: + panic("BUG: message is neither open, nor hybrid, nor opaque?!") + } +} + +// setterName returns the (possibly mangled) name of the generated Set method, +// along with the backwards-compatible name (if needed). +func (field *Field) setterName() (setter, compat string) { + return field.methodName("Set"), "" +} + +// BuilderFieldName returns the name of this field in the corresponding _builder +// struct. +func (field *Field) BuilderFieldName() string { + return field.camelCase +} + +// MethodName returns the (possibly mangled) name of the generated accessor +// method. +// +// method must be one of Has, Clear, Which. MethodName panics otherwise. +func (oneof *Oneof) MethodName(method string) string { + switch method { + case "Has", "Clear", "Which": + return oneof.methodName(method) + + default: + panic(fmt.Sprintf("Oneof.MethodName called for unknown method %q", method)) + } +} + +// methodName returns the (possibly mangled) name of the generated method with +// the given prefix. +// +// For the Open API, the return value is "". +func (oneof *Oneof) methodName(prefix string) string { + switch oneof.Parent.APILevel { + case gofeaturespb.GoFeatures_API_OPEN: + // In the Open API, only generate getters. + return "" + + case gofeaturespb.GoFeatures_API_HYBRID: + var infix string + if oneof.hasConflictHybrid { + infix = "_" + } + return prefix + infix + oneof.camelCase + + case gofeaturespb.GoFeatures_API_OPAQUE: + return prefix + oneof.camelCase + + default: + panic("BUG: message is neither open, nor hybrid, nor opaque?!") + } +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/compiler/protogen/protogen_opaque.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/compiler/protogen/protogen_opaque.go new file mode 100644 index 0000000..1c84b0c --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/compiler/protogen/protogen_opaque.go @@ -0,0 +1,110 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protogen + +import ( + "strconv" + + "google.golang.org/protobuf/internal/strs" + "google.golang.org/protobuf/reflect/protoreflect" +) + +func opaqueNewFieldHook(desc protoreflect.FieldDescriptor, field *Field) { + field.camelCase = strs.GoCamelCase(string(desc.Name())) +} + +func opaqueNewOneofHook(desc protoreflect.OneofDescriptor, oneof *Oneof) { + oneof.camelCase = strs.GoCamelCase(string(desc.Name())) +} + +func resolveCamelCaseConflict(f *Field) { + suffix := "_" + strconv.Itoa(int(f.Desc.Number())) + f.camelCase += suffix + if f.Oneof != nil { + f.Oneof.camelCase += suffix + } +} + +// This function finds fields with different names whose GoCamelCase() is +// identical, for example _foo and X_foo, for both of which camelCase == "XFoo", +// and resolves the resulting conflict by appending a _ suffix, +// like the Java implementation does. +func resolveCamelCaseConflicts(message *Message) { + camel2field := make(map[string]*Field) + for _, field := range message.Fields { + other, conflicting := camel2field[field.camelCase] + if conflicting { + resolveCamelCaseConflict(other) + resolveCamelCaseConflict(field) + // Assumption: at most two fields can have the same camelCase. + // Otherwise, the first field ends up with another suffix. + continue + } + camel2field[field.camelCase] = field + } +} + +func opaqueNewMessageHook(message *Message) { + // New name mangling scheme: Add a '_' between method base + // name (Get, Set, Clear etc) and original field name if + // needed. As a special case, there is one globally reserved + // name, e.g. "Build" thet still results in actual renaming of + // the builder field like in the old scheme. We begin by + // taking care of this special case. + for _, field := range message.Fields { + if field.camelCase == "Build" { + field.camelCase += "_" + } + } + + // Then find all names of the original field names, we do not want the old scheme to affect + // how we name things. + + resolveCamelCaseConflicts(message) + + camelCases := map[string]bool{} + for _, field := range message.Fields { + if field.Oneof != nil { + // We add the name of the union here (potentially many times). + camelCases[field.Oneof.camelCase] = true + // fallthrough: The member fields of the oneof are considered fields + // in the struct although they are not technically there. This is to + // allow changing a proto2 optional to a oneof with source code + // compatibility. + } + camelCases[field.camelCase] = true + } + // For each field, check if any of it's methods would clash with an original field name + for _, field := range message.Fields { + // Every field (except the union fields, that are taken care of separately) has + // a Get and a Set method. + methods := []string{"Set", "Get"} + // For explicit presence fields, we also have Has and Clear. + if field.Desc.HasPresence() { + methods = append(methods, "Has", "Clear") + } + for _, method := range methods { + // If any method name clashes with a field name, all methods get a + // "_" inserted between the operation and the field name. + if camelCases[method+field.camelCase] { + field.hasConflictHybrid = true + } + } + } + // The union names for oneofs need only have a methods prefix if there is a clash with Has, Clear or Which in + // hybrid and opaque-v0. + for _, field := range message.Fields { + if field.Oneof == nil { + continue + } + for _, method := range []string{"Has", "Clear", "Which"} { + // Same logic as for regular fields - all methods get the "_" if one needs it. + if camelCases[method+field.Oneof.camelCase] { + field.Oneof.hasConflictHybrid = true + } + } + } + +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/protojson/decode.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/protojson/decode.go new file mode 100644 index 0000000..737d687 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/protojson/decode.go @@ -0,0 +1,680 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protojson + +import ( + "encoding/base64" + "fmt" + "math" + "strconv" + "strings" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/encoding/json" + "google.golang.org/protobuf/internal/encoding/messageset" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/flags" + "google.golang.org/protobuf/internal/genid" + "google.golang.org/protobuf/internal/pragma" + "google.golang.org/protobuf/internal/set" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" +) + +// Unmarshal reads the given []byte into the given [proto.Message]. +// The provided message must be mutable (e.g., a non-nil pointer to a message). +func Unmarshal(b []byte, m proto.Message) error { + return UnmarshalOptions{}.Unmarshal(b, m) +} + +// UnmarshalOptions is a configurable JSON format parser. +type UnmarshalOptions struct { + pragma.NoUnkeyedLiterals + + // If AllowPartial is set, input for messages that will result in missing + // required fields will not return an error. + AllowPartial bool + + // If DiscardUnknown is set, unknown fields and enum name values are ignored. + DiscardUnknown bool + + // Resolver is used for looking up types when unmarshaling + // google.protobuf.Any messages or extension fields. + // If nil, this defaults to using protoregistry.GlobalTypes. + Resolver interface { + protoregistry.MessageTypeResolver + protoregistry.ExtensionTypeResolver + } + + // RecursionLimit limits how deeply messages may be nested. + // If zero, a default limit is applied. + RecursionLimit int +} + +// Unmarshal reads the given []byte and populates the given [proto.Message] +// using options in the UnmarshalOptions object. +// It will clear the message first before setting the fields. +// If it returns an error, the given message may be partially set. +// The provided message must be mutable (e.g., a non-nil pointer to a message). +func (o UnmarshalOptions) Unmarshal(b []byte, m proto.Message) error { + return o.unmarshal(b, m) +} + +// unmarshal is a centralized function that all unmarshal operations go through. +// For profiling purposes, avoid changing the name of this function or +// introducing other code paths for unmarshal that do not go through this. +func (o UnmarshalOptions) unmarshal(b []byte, m proto.Message) error { + proto.Reset(m) + + if o.Resolver == nil { + o.Resolver = protoregistry.GlobalTypes + } + if o.RecursionLimit == 0 { + o.RecursionLimit = protowire.DefaultRecursionLimit + } + + dec := decoder{json.NewDecoder(b), o} + if err := dec.unmarshalMessage(m.ProtoReflect(), false); err != nil { + return err + } + + // Check for EOF. + tok, err := dec.Read() + if err != nil { + return err + } + if tok.Kind() != json.EOF { + return dec.unexpectedTokenError(tok) + } + + if o.AllowPartial { + return nil + } + return proto.CheckInitialized(m) +} + +type decoder struct { + *json.Decoder + opts UnmarshalOptions +} + +// newError returns an error object with position info. +func (d decoder) newError(pos int, f string, x ...any) error { + line, column := d.Position(pos) + head := fmt.Sprintf("(line %d:%d): ", line, column) + return errors.New(head+f, x...) +} + +// unexpectedTokenError returns a syntax error for the given unexpected token. +func (d decoder) unexpectedTokenError(tok json.Token) error { + return d.syntaxError(tok.Pos(), "unexpected token %s", tok.RawString()) +} + +// syntaxError returns a syntax error for given position. +func (d decoder) syntaxError(pos int, f string, x ...any) error { + line, column := d.Position(pos) + head := fmt.Sprintf("syntax error (line %d:%d): ", line, column) + return errors.New(head+f, x...) +} + +// unmarshalMessage unmarshals a message into the given protoreflect.Message. +func (d decoder) unmarshalMessage(m protoreflect.Message, skipTypeURL bool) error { + d.opts.RecursionLimit-- + if d.opts.RecursionLimit < 0 { + return errors.New("exceeded max recursion depth") + } + if unmarshal := wellKnownTypeUnmarshaler(m.Descriptor().FullName()); unmarshal != nil { + return unmarshal(d, m) + } + + tok, err := d.Read() + if err != nil { + return err + } + if tok.Kind() != json.ObjectOpen { + return d.unexpectedTokenError(tok) + } + + messageDesc := m.Descriptor() + if !flags.ProtoLegacy && messageset.IsMessageSet(messageDesc) { + return errors.New("no support for proto1 MessageSets") + } + + var seenNums set.Ints + var seenOneofs set.Ints + fieldDescs := messageDesc.Fields() + for { + // Read field name. + tok, err := d.Read() + if err != nil { + return err + } + switch tok.Kind() { + default: + return d.unexpectedTokenError(tok) + case json.ObjectClose: + return nil + case json.Name: + // Continue below. + } + + name := tok.Name() + // Unmarshaling a non-custom embedded message in Any will contain the + // JSON field "@type" which should be skipped because it is not a field + // of the embedded message, but simply an artifact of the Any format. + if skipTypeURL && name == "@type" { + d.Read() + continue + } + + // Get the FieldDescriptor. + var fd protoreflect.FieldDescriptor + if strings.HasPrefix(name, "[") && strings.HasSuffix(name, "]") { + // Only extension names are in [name] format. + extName := protoreflect.FullName(name[1 : len(name)-1]) + extType, err := d.opts.Resolver.FindExtensionByName(extName) + if err != nil && err != protoregistry.NotFound { + return d.newError(tok.Pos(), "unable to resolve %s: %v", tok.RawString(), err) + } + if extType != nil { + fd = extType.TypeDescriptor() + if !messageDesc.ExtensionRanges().Has(fd.Number()) || fd.ContainingMessage().FullName() != messageDesc.FullName() { + return d.newError(tok.Pos(), "message %v cannot be extended by %v", messageDesc.FullName(), fd.FullName()) + } + } + } else { + // The name can either be the JSON name or the proto field name. + fd = fieldDescs.ByJSONName(name) + if fd == nil { + fd = fieldDescs.ByTextName(name) + } + } + + if fd == nil { + // Field is unknown. + if d.opts.DiscardUnknown { + if err := d.skipJSONValue(); err != nil { + return err + } + continue + } + return d.newError(tok.Pos(), "unknown field %v", tok.RawString()) + } + + // Do not allow duplicate fields. + num := uint64(fd.Number()) + if seenNums.Has(num) { + return d.newError(tok.Pos(), "duplicate field %v", tok.RawString()) + } + seenNums.Set(num) + + // No need to set values for JSON null unless the field type is + // google.protobuf.Value or google.protobuf.NullValue. + if tok, _ := d.Peek(); tok.Kind() == json.Null && !isKnownValue(fd) && !isNullValue(fd) { + d.Read() + continue + } + + switch { + case fd.IsList(): + list := m.Mutable(fd).List() + if err := d.unmarshalList(list, fd); err != nil { + return err + } + case fd.IsMap(): + mmap := m.Mutable(fd).Map() + if err := d.unmarshalMap(mmap, fd); err != nil { + return err + } + default: + // If field is a oneof, check if it has already been set. + if od := fd.ContainingOneof(); od != nil { + idx := uint64(od.Index()) + if seenOneofs.Has(idx) { + return d.newError(tok.Pos(), "error parsing %s, oneof %v is already set", tok.RawString(), od.FullName()) + } + seenOneofs.Set(idx) + } + + // Required or optional fields. + if err := d.unmarshalSingular(m, fd); err != nil { + return err + } + } + } +} + +func isKnownValue(fd protoreflect.FieldDescriptor) bool { + md := fd.Message() + return md != nil && md.FullName() == genid.Value_message_fullname +} + +func isNullValue(fd protoreflect.FieldDescriptor) bool { + ed := fd.Enum() + return ed != nil && ed.FullName() == genid.NullValue_enum_fullname +} + +// unmarshalSingular unmarshals to the non-repeated field specified +// by the given FieldDescriptor. +func (d decoder) unmarshalSingular(m protoreflect.Message, fd protoreflect.FieldDescriptor) error { + var val protoreflect.Value + var err error + switch fd.Kind() { + case protoreflect.MessageKind, protoreflect.GroupKind: + val = m.NewField(fd) + err = d.unmarshalMessage(val.Message(), false) + default: + val, err = d.unmarshalScalar(fd) + } + + if err != nil { + return err + } + if val.IsValid() { + m.Set(fd, val) + } + return nil +} + +// unmarshalScalar unmarshals to a scalar/enum protoreflect.Value specified by +// the given FieldDescriptor. +func (d decoder) unmarshalScalar(fd protoreflect.FieldDescriptor) (protoreflect.Value, error) { + const b32 int = 32 + const b64 int = 64 + + tok, err := d.Read() + if err != nil { + return protoreflect.Value{}, err + } + + kind := fd.Kind() + switch kind { + case protoreflect.BoolKind: + if tok.Kind() == json.Bool { + return protoreflect.ValueOfBool(tok.Bool()), nil + } + + case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind: + if v, ok := unmarshalInt(tok, b32); ok { + return v, nil + } + + case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind: + if v, ok := unmarshalInt(tok, b64); ok { + return v, nil + } + + case protoreflect.Uint32Kind, protoreflect.Fixed32Kind: + if v, ok := unmarshalUint(tok, b32); ok { + return v, nil + } + + case protoreflect.Uint64Kind, protoreflect.Fixed64Kind: + if v, ok := unmarshalUint(tok, b64); ok { + return v, nil + } + + case protoreflect.FloatKind: + if v, ok := unmarshalFloat(tok, b32); ok { + return v, nil + } + + case protoreflect.DoubleKind: + if v, ok := unmarshalFloat(tok, b64); ok { + return v, nil + } + + case protoreflect.StringKind: + if tok.Kind() == json.String { + return protoreflect.ValueOfString(tok.ParsedString()), nil + } + + case protoreflect.BytesKind: + if v, ok := unmarshalBytes(tok); ok { + return v, nil + } + + case protoreflect.EnumKind: + if v, ok := unmarshalEnum(tok, fd, d.opts.DiscardUnknown); ok { + return v, nil + } + + default: + panic(fmt.Sprintf("unmarshalScalar: invalid scalar kind %v", kind)) + } + + return protoreflect.Value{}, d.newError(tok.Pos(), "invalid value for %v field %v: %v", kind, fd.JSONName(), tok.RawString()) +} + +func unmarshalInt(tok json.Token, bitSize int) (protoreflect.Value, bool) { + switch tok.Kind() { + case json.Number: + return getInt(tok, bitSize) + + case json.String: + // Decode number from string. + s := strings.TrimSpace(tok.ParsedString()) + if len(s) != len(tok.ParsedString()) { + return protoreflect.Value{}, false + } + dec := json.NewDecoder([]byte(s)) + tok, err := dec.Read() + if err != nil { + return protoreflect.Value{}, false + } + return getInt(tok, bitSize) + } + return protoreflect.Value{}, false +} + +func getInt(tok json.Token, bitSize int) (protoreflect.Value, bool) { + n, ok := tok.Int(bitSize) + if !ok { + return protoreflect.Value{}, false + } + if bitSize == 32 { + return protoreflect.ValueOfInt32(int32(n)), true + } + return protoreflect.ValueOfInt64(n), true +} + +func unmarshalUint(tok json.Token, bitSize int) (protoreflect.Value, bool) { + switch tok.Kind() { + case json.Number: + return getUint(tok, bitSize) + + case json.String: + // Decode number from string. + s := strings.TrimSpace(tok.ParsedString()) + if len(s) != len(tok.ParsedString()) { + return protoreflect.Value{}, false + } + dec := json.NewDecoder([]byte(s)) + tok, err := dec.Read() + if err != nil { + return protoreflect.Value{}, false + } + return getUint(tok, bitSize) + } + return protoreflect.Value{}, false +} + +func getUint(tok json.Token, bitSize int) (protoreflect.Value, bool) { + n, ok := tok.Uint(bitSize) + if !ok { + return protoreflect.Value{}, false + } + if bitSize == 32 { + return protoreflect.ValueOfUint32(uint32(n)), true + } + return protoreflect.ValueOfUint64(n), true +} + +func unmarshalFloat(tok json.Token, bitSize int) (protoreflect.Value, bool) { + switch tok.Kind() { + case json.Number: + return getFloat(tok, bitSize) + + case json.String: + s := tok.ParsedString() + switch s { + case "NaN": + if bitSize == 32 { + return protoreflect.ValueOfFloat32(float32(math.NaN())), true + } + return protoreflect.ValueOfFloat64(math.NaN()), true + case "Infinity": + if bitSize == 32 { + return protoreflect.ValueOfFloat32(float32(math.Inf(+1))), true + } + return protoreflect.ValueOfFloat64(math.Inf(+1)), true + case "-Infinity": + if bitSize == 32 { + return protoreflect.ValueOfFloat32(float32(math.Inf(-1))), true + } + return protoreflect.ValueOfFloat64(math.Inf(-1)), true + } + + // Decode number from string. + if len(s) != len(strings.TrimSpace(s)) { + return protoreflect.Value{}, false + } + dec := json.NewDecoder([]byte(s)) + tok, err := dec.Read() + if err != nil { + return protoreflect.Value{}, false + } + return getFloat(tok, bitSize) + } + return protoreflect.Value{}, false +} + +func getFloat(tok json.Token, bitSize int) (protoreflect.Value, bool) { + n, ok := tok.Float(bitSize) + if !ok { + return protoreflect.Value{}, false + } + if bitSize == 32 { + return protoreflect.ValueOfFloat32(float32(n)), true + } + return protoreflect.ValueOfFloat64(n), true +} + +func unmarshalBytes(tok json.Token) (protoreflect.Value, bool) { + if tok.Kind() != json.String { + return protoreflect.Value{}, false + } + + s := tok.ParsedString() + enc := base64.StdEncoding + if strings.ContainsAny(s, "-_") { + enc = base64.URLEncoding + } + if len(s)%4 != 0 { + enc = enc.WithPadding(base64.NoPadding) + } + b, err := enc.DecodeString(s) + if err != nil { + return protoreflect.Value{}, false + } + return protoreflect.ValueOfBytes(b), true +} + +func unmarshalEnum(tok json.Token, fd protoreflect.FieldDescriptor, discardUnknown bool) (protoreflect.Value, bool) { + switch tok.Kind() { + case json.String: + // Lookup EnumNumber based on name. + s := tok.ParsedString() + if enumVal := fd.Enum().Values().ByName(protoreflect.Name(s)); enumVal != nil { + return protoreflect.ValueOfEnum(enumVal.Number()), true + } + if discardUnknown { + return protoreflect.Value{}, true + } + + case json.Number: + if n, ok := tok.Int(32); ok { + return protoreflect.ValueOfEnum(protoreflect.EnumNumber(n)), true + } + + case json.Null: + // This is only valid for google.protobuf.NullValue. + if isNullValue(fd) { + return protoreflect.ValueOfEnum(0), true + } + } + + return protoreflect.Value{}, false +} + +func (d decoder) unmarshalList(list protoreflect.List, fd protoreflect.FieldDescriptor) error { + tok, err := d.Read() + if err != nil { + return err + } + if tok.Kind() != json.ArrayOpen { + return d.unexpectedTokenError(tok) + } + + switch fd.Kind() { + case protoreflect.MessageKind, protoreflect.GroupKind: + for { + tok, err := d.Peek() + if err != nil { + return err + } + + if tok.Kind() == json.ArrayClose { + d.Read() + return nil + } + + val := list.NewElement() + if err := d.unmarshalMessage(val.Message(), false); err != nil { + return err + } + list.Append(val) + } + default: + for { + tok, err := d.Peek() + if err != nil { + return err + } + + if tok.Kind() == json.ArrayClose { + d.Read() + return nil + } + + val, err := d.unmarshalScalar(fd) + if err != nil { + return err + } + if val.IsValid() { + list.Append(val) + } + } + } + + return nil +} + +func (d decoder) unmarshalMap(mmap protoreflect.Map, fd protoreflect.FieldDescriptor) error { + tok, err := d.Read() + if err != nil { + return err + } + if tok.Kind() != json.ObjectOpen { + return d.unexpectedTokenError(tok) + } + + // Determine ahead whether map entry is a scalar type or a message type in + // order to call the appropriate unmarshalMapValue func inside the for loop + // below. + var unmarshalMapValue func() (protoreflect.Value, error) + switch fd.MapValue().Kind() { + case protoreflect.MessageKind, protoreflect.GroupKind: + unmarshalMapValue = func() (protoreflect.Value, error) { + val := mmap.NewValue() + if err := d.unmarshalMessage(val.Message(), false); err != nil { + return protoreflect.Value{}, err + } + return val, nil + } + default: + unmarshalMapValue = func() (protoreflect.Value, error) { + return d.unmarshalScalar(fd.MapValue()) + } + } + +Loop: + for { + // Read field name. + tok, err := d.Read() + if err != nil { + return err + } + switch tok.Kind() { + default: + return d.unexpectedTokenError(tok) + case json.ObjectClose: + break Loop + case json.Name: + // Continue. + } + + // Unmarshal field name. + pkey, err := d.unmarshalMapKey(tok, fd.MapKey()) + if err != nil { + return err + } + + // Check for duplicate field name. + if mmap.Has(pkey) { + return d.newError(tok.Pos(), "duplicate map key %v", tok.RawString()) + } + + // Read and unmarshal field value. + pval, err := unmarshalMapValue() + if err != nil { + return err + } + if pval.IsValid() { + mmap.Set(pkey, pval) + } + } + + return nil +} + +// unmarshalMapKey converts given token of Name kind into a protoreflect.MapKey. +// A map key type is any integral or string type. +func (d decoder) unmarshalMapKey(tok json.Token, fd protoreflect.FieldDescriptor) (protoreflect.MapKey, error) { + const b32 = 32 + const b64 = 64 + const base10 = 10 + + name := tok.Name() + kind := fd.Kind() + switch kind { + case protoreflect.StringKind: + return protoreflect.ValueOfString(name).MapKey(), nil + + case protoreflect.BoolKind: + switch name { + case "true": + return protoreflect.ValueOfBool(true).MapKey(), nil + case "false": + return protoreflect.ValueOfBool(false).MapKey(), nil + } + + case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind: + if n, err := strconv.ParseInt(name, base10, b32); err == nil { + return protoreflect.ValueOfInt32(int32(n)).MapKey(), nil + } + + case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind: + if n, err := strconv.ParseInt(name, base10, b64); err == nil { + return protoreflect.ValueOfInt64(int64(n)).MapKey(), nil + } + + case protoreflect.Uint32Kind, protoreflect.Fixed32Kind: + if n, err := strconv.ParseUint(name, base10, b32); err == nil { + return protoreflect.ValueOfUint32(uint32(n)).MapKey(), nil + } + + case protoreflect.Uint64Kind, protoreflect.Fixed64Kind: + if n, err := strconv.ParseUint(name, base10, b64); err == nil { + return protoreflect.ValueOfUint64(uint64(n)).MapKey(), nil + } + + default: + panic(fmt.Sprintf("invalid kind for map key: %v", kind)) + } + + return protoreflect.MapKey{}, d.newError(tok.Pos(), "invalid value for %v key: %s", kind, tok.RawString()) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/protojson/doc.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/protojson/doc.go new file mode 100644 index 0000000..ae71007 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/protojson/doc.go @@ -0,0 +1,11 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package protojson marshals and unmarshals protocol buffer messages as JSON +// format. It follows the guide at +// https://protobuf.dev/programming-guides/proto3#json. +// +// This package produces a different output than the standard [encoding/json] +// package, which does not operate correctly on protocol buffer messages. +package protojson diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/protojson/encode.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/protojson/encode.go new file mode 100644 index 0000000..0e72d85 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/protojson/encode.go @@ -0,0 +1,380 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protojson + +import ( + "encoding/base64" + "fmt" + + "google.golang.org/protobuf/internal/encoding/json" + "google.golang.org/protobuf/internal/encoding/messageset" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/internal/flags" + "google.golang.org/protobuf/internal/genid" + "google.golang.org/protobuf/internal/order" + "google.golang.org/protobuf/internal/pragma" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" +) + +const defaultIndent = " " + +// Format formats the message as a multiline string. +// This function is only intended for human consumption and ignores errors. +// Do not depend on the output being stable. Its output will change across +// different builds of your program, even when using the same version of the +// protobuf module. +func Format(m proto.Message) string { + return MarshalOptions{Multiline: true}.Format(m) +} + +// Marshal writes the given [proto.Message] in JSON format using default options. +// Do not depend on the output being stable. Its output will change across +// different builds of your program, even when using the same version of the +// protobuf module. +func Marshal(m proto.Message) ([]byte, error) { + return MarshalOptions{}.Marshal(m) +} + +// MarshalOptions is a configurable JSON format marshaler. +type MarshalOptions struct { + pragma.NoUnkeyedLiterals + + // Multiline specifies whether the marshaler should format the output in + // indented-form with every textual element on a new line. + // If Indent is an empty string, then an arbitrary indent is chosen. + Multiline bool + + // Indent specifies the set of indentation characters to use in a multiline + // formatted output such that every entry is preceded by Indent and + // terminated by a newline. If non-empty, then Multiline is treated as true. + // Indent can only be composed of space or tab characters. + Indent string + + // AllowPartial allows messages that have missing required fields to marshal + // without returning an error. If AllowPartial is false (the default), + // Marshal will return error if there are any missing required fields. + AllowPartial bool + + // UseProtoNames uses proto field name instead of lowerCamelCase name in JSON + // field names. + UseProtoNames bool + + // UseEnumNumbers emits enum values as numbers. + UseEnumNumbers bool + + // EmitUnpopulated specifies whether to emit unpopulated fields. It does not + // emit unpopulated oneof fields or unpopulated extension fields. + // The JSON value emitted for unpopulated fields are as follows: + // ╔═══════╤════════════════════════════╗ + // ║ JSON │ Protobuf field ║ + // ╠═══════╪════════════════════════════╣ + // ║ false │ proto3 boolean fields ║ + // ║ 0 │ proto3 numeric fields ║ + // ║ "" │ proto3 string/bytes fields ║ + // ║ null │ proto2 scalar fields ║ + // ║ null │ message fields ║ + // ║ [] │ list fields ║ + // ║ {} │ map fields ║ + // ╚═══════╧════════════════════════════╝ + EmitUnpopulated bool + + // EmitDefaultValues specifies whether to emit default-valued primitive fields, + // empty lists, and empty maps. The fields affected are as follows: + // ╔═══════╤════════════════════════════════════════╗ + // ║ JSON │ Protobuf field ║ + // ╠═══════╪════════════════════════════════════════╣ + // ║ false │ non-optional scalar boolean fields ║ + // ║ 0 │ non-optional scalar numeric fields ║ + // ║ "" │ non-optional scalar string/byte fields ║ + // ║ [] │ empty repeated fields ║ + // ║ {} │ empty map fields ║ + // ╚═══════╧════════════════════════════════════════╝ + // + // Behaves similarly to EmitUnpopulated, but does not emit "null"-value fields, + // i.e. presence-sensing fields that are omitted will remain omitted to preserve + // presence-sensing. + // EmitUnpopulated takes precedence over EmitDefaultValues since the former generates + // a strict superset of the latter. + EmitDefaultValues bool + + // Resolver is used for looking up types when expanding google.protobuf.Any + // messages. If nil, this defaults to using protoregistry.GlobalTypes. + Resolver interface { + protoregistry.ExtensionTypeResolver + protoregistry.MessageTypeResolver + } +} + +// Format formats the message as a string. +// This method is only intended for human consumption and ignores errors. +// Do not depend on the output being stable. Its output will change across +// different builds of your program, even when using the same version of the +// protobuf module. +func (o MarshalOptions) Format(m proto.Message) string { + if m == nil || !m.ProtoReflect().IsValid() { + return "" // invalid syntax, but okay since this is for debugging + } + o.AllowPartial = true + b, _ := o.Marshal(m) + return string(b) +} + +// Marshal marshals the given [proto.Message] in the JSON format using options in +// Do not depend on the output being stable. Its output will change across +// different builds of your program, even when using the same version of the +// protobuf module. +func (o MarshalOptions) Marshal(m proto.Message) ([]byte, error) { + return o.marshal(nil, m) +} + +// MarshalAppend appends the JSON format encoding of m to b, +// returning the result. +func (o MarshalOptions) MarshalAppend(b []byte, m proto.Message) ([]byte, error) { + return o.marshal(b, m) +} + +// marshal is a centralized function that all marshal operations go through. +// For profiling purposes, avoid changing the name of this function or +// introducing other code paths for marshal that do not go through this. +func (o MarshalOptions) marshal(b []byte, m proto.Message) ([]byte, error) { + if o.Multiline && o.Indent == "" { + o.Indent = defaultIndent + } + if o.Resolver == nil { + o.Resolver = protoregistry.GlobalTypes + } + + internalEnc, err := json.NewEncoder(b, o.Indent) + if err != nil { + return nil, err + } + + // Treat nil message interface as an empty message, + // in which case the output in an empty JSON object. + if m == nil { + return append(b, '{', '}'), nil + } + + enc := encoder{internalEnc, o} + if err := enc.marshalMessage(m.ProtoReflect(), ""); err != nil { + return nil, err + } + if o.AllowPartial { + return enc.Bytes(), nil + } + return enc.Bytes(), proto.CheckInitialized(m) +} + +type encoder struct { + *json.Encoder + opts MarshalOptions +} + +// typeFieldDesc is a synthetic field descriptor used for the "@type" field. +var typeFieldDesc = func() protoreflect.FieldDescriptor { + var fd filedesc.Field + fd.L0.FullName = "@type" + fd.L0.Index = -1 + fd.L1.Cardinality = protoreflect.Optional + fd.L1.Kind = protoreflect.StringKind + return &fd +}() + +// typeURLFieldRanger wraps a protoreflect.Message and modifies its Range method +// to additionally iterate over a synthetic field for the type URL. +type typeURLFieldRanger struct { + order.FieldRanger + typeURL string +} + +func (m typeURLFieldRanger) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if !f(typeFieldDesc, protoreflect.ValueOfString(m.typeURL)) { + return + } + m.FieldRanger.Range(f) +} + +// unpopulatedFieldRanger wraps a protoreflect.Message and modifies its Range +// method to additionally iterate over unpopulated fields. +type unpopulatedFieldRanger struct { + protoreflect.Message + + skipNull bool +} + +func (m unpopulatedFieldRanger) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + fds := m.Descriptor().Fields() + for i := 0; i < fds.Len(); i++ { + fd := fds.Get(i) + if m.Has(fd) || fd.ContainingOneof() != nil { + continue // ignore populated fields and fields within a oneofs + } + + v := m.Get(fd) + if fd.HasPresence() { + if m.skipNull { + continue + } + v = protoreflect.Value{} // use invalid value to emit null + } + if !f(fd, v) { + return + } + } + m.Message.Range(f) +} + +// marshalMessage marshals the fields in the given protoreflect.Message. +// If the typeURL is non-empty, then a synthetic "@type" field is injected +// containing the URL as the value. +func (e encoder) marshalMessage(m protoreflect.Message, typeURL string) error { + if !flags.ProtoLegacy && messageset.IsMessageSet(m.Descriptor()) { + return errors.New("no support for proto1 MessageSets") + } + + if marshal := wellKnownTypeMarshaler(m.Descriptor().FullName()); marshal != nil { + return marshal(e, m) + } + + e.StartObject() + defer e.EndObject() + + var fields order.FieldRanger = m + switch { + case e.opts.EmitUnpopulated: + fields = unpopulatedFieldRanger{Message: m, skipNull: false} + case e.opts.EmitDefaultValues: + fields = unpopulatedFieldRanger{Message: m, skipNull: true} + } + if typeURL != "" { + fields = typeURLFieldRanger{fields, typeURL} + } + + var err error + order.RangeFields(fields, order.IndexNameFieldOrder, func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + name := fd.JSONName() + if e.opts.UseProtoNames { + name = fd.TextName() + } + + if err = e.WriteName(name); err != nil { + return false + } + if err = e.marshalValue(v, fd); err != nil { + return false + } + return true + }) + return err +} + +// marshalValue marshals the given protoreflect.Value. +func (e encoder) marshalValue(val protoreflect.Value, fd protoreflect.FieldDescriptor) error { + switch { + case fd.IsList(): + return e.marshalList(val.List(), fd) + case fd.IsMap(): + return e.marshalMap(val.Map(), fd) + default: + return e.marshalSingular(val, fd) + } +} + +// marshalSingular marshals the given non-repeated field value. This includes +// all scalar types, enums, messages, and groups. +func (e encoder) marshalSingular(val protoreflect.Value, fd protoreflect.FieldDescriptor) error { + if !val.IsValid() { + e.WriteNull() + return nil + } + + switch kind := fd.Kind(); kind { + case protoreflect.BoolKind: + e.WriteBool(val.Bool()) + + case protoreflect.StringKind: + if e.WriteString(val.String()) != nil { + return errors.InvalidUTF8(string(fd.FullName())) + } + + case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind: + e.WriteInt(val.Int()) + + case protoreflect.Uint32Kind, protoreflect.Fixed32Kind: + e.WriteUint(val.Uint()) + + case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Uint64Kind, + protoreflect.Sfixed64Kind, protoreflect.Fixed64Kind: + // 64-bit integers are written out as JSON string. + e.WriteString(val.String()) + + case protoreflect.FloatKind: + // Encoder.WriteFloat handles the special numbers NaN and infinites. + e.WriteFloat(val.Float(), 32) + + case protoreflect.DoubleKind: + // Encoder.WriteFloat handles the special numbers NaN and infinites. + e.WriteFloat(val.Float(), 64) + + case protoreflect.BytesKind: + e.WriteString(base64.StdEncoding.EncodeToString(val.Bytes())) + + case protoreflect.EnumKind: + if fd.Enum().FullName() == genid.NullValue_enum_fullname { + e.WriteNull() + } else { + desc := fd.Enum().Values().ByNumber(val.Enum()) + if e.opts.UseEnumNumbers || desc == nil { + e.WriteInt(int64(val.Enum())) + } else { + e.WriteString(string(desc.Name())) + } + } + + case protoreflect.MessageKind, protoreflect.GroupKind: + if err := e.marshalMessage(val.Message(), ""); err != nil { + return err + } + + default: + panic(fmt.Sprintf("%v has unknown kind: %v", fd.FullName(), kind)) + } + return nil +} + +// marshalList marshals the given protoreflect.List. +func (e encoder) marshalList(list protoreflect.List, fd protoreflect.FieldDescriptor) error { + e.StartArray() + defer e.EndArray() + + for i := 0; i < list.Len(); i++ { + item := list.Get(i) + if err := e.marshalSingular(item, fd); err != nil { + return err + } + } + return nil +} + +// marshalMap marshals given protoreflect.Map. +func (e encoder) marshalMap(mmap protoreflect.Map, fd protoreflect.FieldDescriptor) error { + e.StartObject() + defer e.EndObject() + + var err error + order.RangeEntries(mmap, order.GenericKeyOrder, func(k protoreflect.MapKey, v protoreflect.Value) bool { + if err = e.WriteName(k.String()); err != nil { + return false + } + if err = e.marshalSingular(v, fd.MapValue()); err != nil { + return false + } + return true + }) + return err +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go new file mode 100644 index 0000000..e9fe103 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go @@ -0,0 +1,880 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protojson + +import ( + "bytes" + "fmt" + "math" + "strconv" + "strings" + "time" + + "google.golang.org/protobuf/internal/encoding/json" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/genid" + "google.golang.org/protobuf/internal/strs" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" +) + +type marshalFunc func(encoder, protoreflect.Message) error + +// wellKnownTypeMarshaler returns a marshal function if the message type +// has specialized serialization behavior. It returns nil otherwise. +func wellKnownTypeMarshaler(name protoreflect.FullName) marshalFunc { + if name.Parent() == genid.GoogleProtobuf_package { + switch name.Name() { + case genid.Any_message_name: + return encoder.marshalAny + case genid.Timestamp_message_name: + return encoder.marshalTimestamp + case genid.Duration_message_name: + return encoder.marshalDuration + case genid.BoolValue_message_name, + genid.Int32Value_message_name, + genid.Int64Value_message_name, + genid.UInt32Value_message_name, + genid.UInt64Value_message_name, + genid.FloatValue_message_name, + genid.DoubleValue_message_name, + genid.StringValue_message_name, + genid.BytesValue_message_name: + return encoder.marshalWrapperType + case genid.Struct_message_name: + return encoder.marshalStruct + case genid.ListValue_message_name: + return encoder.marshalListValue + case genid.Value_message_name: + return encoder.marshalKnownValue + case genid.FieldMask_message_name: + return encoder.marshalFieldMask + case genid.Empty_message_name: + return encoder.marshalEmpty + } + } + return nil +} + +type unmarshalFunc func(decoder, protoreflect.Message) error + +// wellKnownTypeUnmarshaler returns a unmarshal function if the message type +// has specialized serialization behavior. It returns nil otherwise. +func wellKnownTypeUnmarshaler(name protoreflect.FullName) unmarshalFunc { + if name.Parent() == genid.GoogleProtobuf_package { + switch name.Name() { + case genid.Any_message_name: + return decoder.unmarshalAny + case genid.Timestamp_message_name: + return decoder.unmarshalTimestamp + case genid.Duration_message_name: + return decoder.unmarshalDuration + case genid.BoolValue_message_name, + genid.Int32Value_message_name, + genid.Int64Value_message_name, + genid.UInt32Value_message_name, + genid.UInt64Value_message_name, + genid.FloatValue_message_name, + genid.DoubleValue_message_name, + genid.StringValue_message_name, + genid.BytesValue_message_name: + return decoder.unmarshalWrapperType + case genid.Struct_message_name: + return decoder.unmarshalStruct + case genid.ListValue_message_name: + return decoder.unmarshalListValue + case genid.Value_message_name: + return decoder.unmarshalKnownValue + case genid.FieldMask_message_name: + return decoder.unmarshalFieldMask + case genid.Empty_message_name: + return decoder.unmarshalEmpty + } + } + return nil +} + +// The JSON representation of an Any message uses the regular representation of +// the deserialized, embedded message, with an additional field `@type` which +// contains the type URL. If the embedded message type is well-known and has a +// custom JSON representation, that representation will be embedded adding a +// field `value` which holds the custom JSON in addition to the `@type` field. + +func (e encoder) marshalAny(m protoreflect.Message) error { + fds := m.Descriptor().Fields() + fdType := fds.ByNumber(genid.Any_TypeUrl_field_number) + fdValue := fds.ByNumber(genid.Any_Value_field_number) + + if !m.Has(fdType) { + if !m.Has(fdValue) { + // If message is empty, marshal out empty JSON object. + e.StartObject() + e.EndObject() + return nil + } else { + // Return error if type_url field is not set, but value is set. + return errors.New("%s: %v is not set", genid.Any_message_fullname, genid.Any_TypeUrl_field_name) + } + } + + typeVal := m.Get(fdType) + valueVal := m.Get(fdValue) + + // Resolve the type in order to unmarshal value field. + typeURL := typeVal.String() + emt, err := e.opts.Resolver.FindMessageByURL(typeURL) + if err != nil { + return errors.New("%s: unable to resolve %q: %v", genid.Any_message_fullname, typeURL, err) + } + + em := emt.New() + err = proto.UnmarshalOptions{ + AllowPartial: true, // never check required fields inside an Any + Resolver: e.opts.Resolver, + }.Unmarshal(valueVal.Bytes(), em.Interface()) + if err != nil { + return errors.New("%s: unable to unmarshal %q: %v", genid.Any_message_fullname, typeURL, err) + } + + // If type of value has custom JSON encoding, marshal out a field "value" + // with corresponding custom JSON encoding of the embedded message as a + // field. + if marshal := wellKnownTypeMarshaler(emt.Descriptor().FullName()); marshal != nil { + e.StartObject() + defer e.EndObject() + + // Marshal out @type field. + e.WriteName("@type") + if err := e.WriteString(typeURL); err != nil { + return err + } + + e.WriteName("value") + return marshal(e, em) + } + + // Else, marshal out the embedded message's fields in this Any object. + if err := e.marshalMessage(em, typeURL); err != nil { + return err + } + + return nil +} + +func (d decoder) unmarshalAny(m protoreflect.Message) error { + // Peek to check for json.ObjectOpen to avoid advancing a read. + start, err := d.Peek() + if err != nil { + return err + } + if start.Kind() != json.ObjectOpen { + return d.unexpectedTokenError(start) + } + + // Use another decoder to parse the unread bytes for @type field. This + // avoids advancing a read from current decoder because the current JSON + // object may contain the fields of the embedded type. + dec := decoder{d.Clone(), UnmarshalOptions{RecursionLimit: d.opts.RecursionLimit}} + tok, err := findTypeURL(dec) + switch err { + case errEmptyObject: + // An empty JSON object translates to an empty Any message. + d.Read() // Read json.ObjectOpen. + d.Read() // Read json.ObjectClose. + return nil + + case errMissingType: + if d.opts.DiscardUnknown { + // Treat all fields as unknowns, similar to an empty object. + return d.skipJSONValue() + } + // Use start.Pos() for line position. + return d.newError(start.Pos(), err.Error()) + + default: + if err != nil { + return err + } + } + + typeURL := tok.ParsedString() + emt, err := d.opts.Resolver.FindMessageByURL(typeURL) + if err != nil { + return d.newError(tok.Pos(), "unable to resolve %v: %q", tok.RawString(), err) + } + + // Create new message for the embedded message type and unmarshal into it. + em := emt.New() + if unmarshal := wellKnownTypeUnmarshaler(emt.Descriptor().FullName()); unmarshal != nil { + // If embedded message is a custom type, + // unmarshal the JSON "value" field into it. + if err := d.unmarshalAnyValue(unmarshal, em); err != nil { + return err + } + } else { + // Else unmarshal the current JSON object into it. + if err := d.unmarshalMessage(em, true); err != nil { + return err + } + } + // Serialize the embedded message and assign the resulting bytes to the + // proto value field. + b, err := proto.MarshalOptions{ + AllowPartial: true, // No need to check required fields inside an Any. + Deterministic: true, + }.Marshal(em.Interface()) + if err != nil { + return d.newError(start.Pos(), "error in marshaling Any.value field: %v", err) + } + + fds := m.Descriptor().Fields() + fdType := fds.ByNumber(genid.Any_TypeUrl_field_number) + fdValue := fds.ByNumber(genid.Any_Value_field_number) + + m.Set(fdType, protoreflect.ValueOfString(typeURL)) + m.Set(fdValue, protoreflect.ValueOfBytes(b)) + return nil +} + +var errEmptyObject = fmt.Errorf(`empty object`) +var errMissingType = fmt.Errorf(`missing "@type" field`) + +// findTypeURL returns the token for the "@type" field value from the given +// JSON bytes. It is expected that the given bytes start with json.ObjectOpen. +// It returns errEmptyObject if the JSON object is empty or errMissingType if +// @type field does not exist. It returns other error if the @type field is not +// valid or other decoding issues. +func findTypeURL(d decoder) (json.Token, error) { + var typeURL string + var typeTok json.Token + numFields := 0 + // Skip start object. + d.Read() + +Loop: + for { + tok, err := d.Read() + if err != nil { + return json.Token{}, err + } + + switch tok.Kind() { + case json.ObjectClose: + if typeURL == "" { + // Did not find @type field. + if numFields > 0 { + return json.Token{}, errMissingType + } + return json.Token{}, errEmptyObject + } + break Loop + + case json.Name: + numFields++ + if tok.Name() != "@type" { + // Skip value. + if err := d.skipJSONValue(); err != nil { + return json.Token{}, err + } + continue + } + + // Return error if this was previously set already. + if typeURL != "" { + return json.Token{}, d.newError(tok.Pos(), `duplicate "@type" field`) + } + // Read field value. + tok, err := d.Read() + if err != nil { + return json.Token{}, err + } + if tok.Kind() != json.String { + return json.Token{}, d.newError(tok.Pos(), `@type field value is not a string: %v`, tok.RawString()) + } + typeURL = tok.ParsedString() + if typeURL == "" { + return json.Token{}, d.newError(tok.Pos(), `@type field contains empty value`) + } + typeTok = tok + } + } + + return typeTok, nil +} + +// skipJSONValue parses a JSON value (null, boolean, string, number, object and +// array) in order to advance the read to the next JSON value. It relies on +// the decoder returning an error if the types are not in valid sequence. +func (d decoder) skipJSONValue() error { + var open int + for { + tok, err := d.Read() + if err != nil { + return err + } + switch tok.Kind() { + case json.ObjectClose, json.ArrayClose: + open-- + case json.ObjectOpen, json.ArrayOpen: + open++ + if open > d.opts.RecursionLimit { + return errors.New("exceeded max recursion depth") + } + case json.EOF: + // This can only happen if there's a bug in Decoder.Read. + // Avoid an infinite loop if this does happen. + return errors.New("unexpected EOF") + } + if open == 0 { + return nil + } + } +} + +// unmarshalAnyValue unmarshals the given custom-type message from the JSON +// object's "value" field. +func (d decoder) unmarshalAnyValue(unmarshal unmarshalFunc, m protoreflect.Message) error { + // Skip ObjectOpen, and start reading the fields. + d.Read() + + var found bool // Used for detecting duplicate "value". + for { + tok, err := d.Read() + if err != nil { + return err + } + switch tok.Kind() { + case json.ObjectClose: + if !found { + // We tolerate an omitted `value` field with the google.protobuf.Empty Well-Known-Type, + // for compatibility with other proto runtimes that have interpreted the spec differently. + if m.Descriptor().FullName() != genid.Empty_message_fullname { + return d.newError(tok.Pos(), `missing "value" field`) + } + } + return nil + + case json.Name: + switch tok.Name() { + case "@type": + // Skip the value as this was previously parsed already. + d.Read() + + case "value": + if found { + return d.newError(tok.Pos(), `duplicate "value" field`) + } + // Unmarshal the field value into the given message. + if err := unmarshal(d, m); err != nil { + return err + } + found = true + + default: + if d.opts.DiscardUnknown { + if err := d.skipJSONValue(); err != nil { + return err + } + continue + } + return d.newError(tok.Pos(), "unknown field %v", tok.RawString()) + } + } + } +} + +// Wrapper types are encoded as JSON primitives like string, number or boolean. + +func (e encoder) marshalWrapperType(m protoreflect.Message) error { + fd := m.Descriptor().Fields().ByNumber(genid.WrapperValue_Value_field_number) + val := m.Get(fd) + return e.marshalSingular(val, fd) +} + +func (d decoder) unmarshalWrapperType(m protoreflect.Message) error { + fd := m.Descriptor().Fields().ByNumber(genid.WrapperValue_Value_field_number) + val, err := d.unmarshalScalar(fd) + if err != nil { + return err + } + m.Set(fd, val) + return nil +} + +// The JSON representation for Empty is an empty JSON object. + +func (e encoder) marshalEmpty(protoreflect.Message) error { + e.StartObject() + e.EndObject() + return nil +} + +func (d decoder) unmarshalEmpty(protoreflect.Message) error { + tok, err := d.Read() + if err != nil { + return err + } + if tok.Kind() != json.ObjectOpen { + return d.unexpectedTokenError(tok) + } + + for { + tok, err := d.Read() + if err != nil { + return err + } + switch tok.Kind() { + case json.ObjectClose: + return nil + + case json.Name: + if d.opts.DiscardUnknown { + if err := d.skipJSONValue(); err != nil { + return err + } + continue + } + return d.newError(tok.Pos(), "unknown field %v", tok.RawString()) + + default: + return d.unexpectedTokenError(tok) + } + } +} + +// The JSON representation for Struct is a JSON object that contains the encoded +// Struct.fields map and follows the serialization rules for a map. + +func (e encoder) marshalStruct(m protoreflect.Message) error { + fd := m.Descriptor().Fields().ByNumber(genid.Struct_Fields_field_number) + return e.marshalMap(m.Get(fd).Map(), fd) +} + +func (d decoder) unmarshalStruct(m protoreflect.Message) error { + fd := m.Descriptor().Fields().ByNumber(genid.Struct_Fields_field_number) + return d.unmarshalMap(m.Mutable(fd).Map(), fd) +} + +// The JSON representation for ListValue is JSON array that contains the encoded +// ListValue.values repeated field and follows the serialization rules for a +// repeated field. + +func (e encoder) marshalListValue(m protoreflect.Message) error { + fd := m.Descriptor().Fields().ByNumber(genid.ListValue_Values_field_number) + return e.marshalList(m.Get(fd).List(), fd) +} + +func (d decoder) unmarshalListValue(m protoreflect.Message) error { + fd := m.Descriptor().Fields().ByNumber(genid.ListValue_Values_field_number) + return d.unmarshalList(m.Mutable(fd).List(), fd) +} + +// The JSON representation for a Value is dependent on the oneof field that is +// set. Each of the field in the oneof has its own custom serialization rule. A +// Value message needs to be a oneof field set, else it is an error. + +func (e encoder) marshalKnownValue(m protoreflect.Message) error { + od := m.Descriptor().Oneofs().ByName(genid.Value_Kind_oneof_name) + fd := m.WhichOneof(od) + if fd == nil { + return errors.New("%s: none of the oneof fields is set", genid.Value_message_fullname) + } + if fd.Number() == genid.Value_NumberValue_field_number { + if v := m.Get(fd).Float(); math.IsNaN(v) || math.IsInf(v, 0) { + return errors.New("%s: invalid %v value", genid.Value_NumberValue_field_fullname, v) + } + } + return e.marshalSingular(m.Get(fd), fd) +} + +func (d decoder) unmarshalKnownValue(m protoreflect.Message) error { + tok, err := d.Peek() + if err != nil { + return err + } + + var fd protoreflect.FieldDescriptor + var val protoreflect.Value + switch tok.Kind() { + case json.Null: + d.Read() + fd = m.Descriptor().Fields().ByNumber(genid.Value_NullValue_field_number) + val = protoreflect.ValueOfEnum(0) + + case json.Bool: + tok, err := d.Read() + if err != nil { + return err + } + fd = m.Descriptor().Fields().ByNumber(genid.Value_BoolValue_field_number) + val = protoreflect.ValueOfBool(tok.Bool()) + + case json.Number: + tok, err := d.Read() + if err != nil { + return err + } + fd = m.Descriptor().Fields().ByNumber(genid.Value_NumberValue_field_number) + var ok bool + val, ok = unmarshalFloat(tok, 64) + if !ok { + return d.newError(tok.Pos(), "invalid %v: %v", genid.Value_message_fullname, tok.RawString()) + } + + case json.String: + // A JSON string may have been encoded from the number_value field, + // e.g. "NaN", "Infinity", etc. Parsing a proto double type also allows + // for it to be in JSON string form. Given this custom encoding spec, + // however, there is no way to identify that and hence a JSON string is + // always assigned to the string_value field, which means that certain + // encoding cannot be parsed back to the same field. + tok, err := d.Read() + if err != nil { + return err + } + fd = m.Descriptor().Fields().ByNumber(genid.Value_StringValue_field_number) + val = protoreflect.ValueOfString(tok.ParsedString()) + + case json.ObjectOpen: + fd = m.Descriptor().Fields().ByNumber(genid.Value_StructValue_field_number) + val = m.NewField(fd) + if err := d.unmarshalStruct(val.Message()); err != nil { + return err + } + + case json.ArrayOpen: + fd = m.Descriptor().Fields().ByNumber(genid.Value_ListValue_field_number) + val = m.NewField(fd) + if err := d.unmarshalListValue(val.Message()); err != nil { + return err + } + + default: + return d.newError(tok.Pos(), "invalid %v: %v", genid.Value_message_fullname, tok.RawString()) + } + + m.Set(fd, val) + return nil +} + +// The JSON representation for a Duration is a JSON string that ends in the +// suffix "s" (indicating seconds) and is preceded by the number of seconds, +// with nanoseconds expressed as fractional seconds. +// +// Durations less than one second are represented with a 0 seconds field and a +// positive or negative nanos field. For durations of one second or more, a +// non-zero value for the nanos field must be of the same sign as the seconds +// field. +// +// Duration.seconds must be from -315,576,000,000 to +315,576,000,000 inclusive. +// Duration.nanos must be from -999,999,999 to +999,999,999 inclusive. + +const ( + secondsInNanos = 999999999 + maxSecondsInDuration = 315576000000 +) + +func (e encoder) marshalDuration(m protoreflect.Message) error { + fds := m.Descriptor().Fields() + fdSeconds := fds.ByNumber(genid.Duration_Seconds_field_number) + fdNanos := fds.ByNumber(genid.Duration_Nanos_field_number) + + secsVal := m.Get(fdSeconds) + nanosVal := m.Get(fdNanos) + secs := secsVal.Int() + nanos := nanosVal.Int() + if secs < -maxSecondsInDuration || secs > maxSecondsInDuration { + return errors.New("%s: seconds out of range %v", genid.Duration_message_fullname, secs) + } + if nanos < -secondsInNanos || nanos > secondsInNanos { + return errors.New("%s: nanos out of range %v", genid.Duration_message_fullname, nanos) + } + if (secs > 0 && nanos < 0) || (secs < 0 && nanos > 0) { + return errors.New("%s: signs of seconds and nanos do not match", genid.Duration_message_fullname) + } + // Generated output always contains 0, 3, 6, or 9 fractional digits, + // depending on required precision, followed by the suffix "s". + var sign string + if secs < 0 || nanos < 0 { + sign, secs, nanos = "-", -1*secs, -1*nanos + } + x := fmt.Sprintf("%s%d.%09d", sign, secs, nanos) + x = strings.TrimSuffix(x, "000") + x = strings.TrimSuffix(x, "000") + x = strings.TrimSuffix(x, ".000") + e.WriteString(x + "s") + return nil +} + +func (d decoder) unmarshalDuration(m protoreflect.Message) error { + tok, err := d.Read() + if err != nil { + return err + } + if tok.Kind() != json.String { + return d.unexpectedTokenError(tok) + } + + secs, nanos, ok := parseDuration(tok.ParsedString()) + if !ok { + return d.newError(tok.Pos(), "invalid %v value %v", genid.Duration_message_fullname, tok.RawString()) + } + // Validate seconds. No need to validate nanos because parseDuration would + // have covered that already. + if secs < -maxSecondsInDuration || secs > maxSecondsInDuration { + return d.newError(tok.Pos(), "%v value out of range: %v", genid.Duration_message_fullname, tok.RawString()) + } + + fds := m.Descriptor().Fields() + fdSeconds := fds.ByNumber(genid.Duration_Seconds_field_number) + fdNanos := fds.ByNumber(genid.Duration_Nanos_field_number) + + m.Set(fdSeconds, protoreflect.ValueOfInt64(secs)) + m.Set(fdNanos, protoreflect.ValueOfInt32(nanos)) + return nil +} + +// parseDuration parses the given input string for seconds and nanoseconds value +// for the Duration JSON format. The format is a decimal number with a suffix +// 's'. It can have optional plus/minus sign. There needs to be at least an +// integer or fractional part. Fractional part is limited to 9 digits only for +// nanoseconds precision, regardless of whether there are trailing zero digits. +// Example values are 1s, 0.1s, 1.s, .1s, +1s, -1s, -.1s. +func parseDuration(input string) (int64, int32, bool) { + b := []byte(input) + size := len(b) + if size < 2 { + return 0, 0, false + } + if b[size-1] != 's' { + return 0, 0, false + } + b = b[:size-1] + + // Read optional plus/minus symbol. + var neg bool + switch b[0] { + case '-': + neg = true + b = b[1:] + case '+': + b = b[1:] + } + if len(b) == 0 { + return 0, 0, false + } + + // Read the integer part. + var intp []byte + switch { + case b[0] == '0': + b = b[1:] + + case '1' <= b[0] && b[0] <= '9': + intp = b[0:] + b = b[1:] + n := 1 + for len(b) > 0 && '0' <= b[0] && b[0] <= '9' { + n++ + b = b[1:] + } + intp = intp[:n] + + case b[0] == '.': + // Continue below. + + default: + return 0, 0, false + } + + hasFrac := false + var frac [9]byte + if len(b) > 0 { + if b[0] != '.' { + return 0, 0, false + } + // Read the fractional part. + b = b[1:] + n := 0 + for len(b) > 0 && n < 9 && '0' <= b[0] && b[0] <= '9' { + frac[n] = b[0] + n++ + b = b[1:] + } + // It is not valid if there are more bytes left. + if len(b) > 0 { + return 0, 0, false + } + // Pad fractional part with 0s. + for i := n; i < 9; i++ { + frac[i] = '0' + } + hasFrac = true + } + + var secs int64 + if len(intp) > 0 { + var err error + secs, err = strconv.ParseInt(string(intp), 10, 64) + if err != nil { + return 0, 0, false + } + } + + var nanos int64 + if hasFrac { + nanob := bytes.TrimLeft(frac[:], "0") + if len(nanob) > 0 { + var err error + nanos, err = strconv.ParseInt(string(nanob), 10, 32) + if err != nil { + return 0, 0, false + } + } + } + + if neg { + if secs > 0 { + secs = -secs + } + if nanos > 0 { + nanos = -nanos + } + } + return secs, int32(nanos), true +} + +// The JSON representation for a Timestamp is a JSON string in the RFC 3339 +// format, i.e. "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" where +// {year} is always expressed using four digits while {month}, {day}, {hour}, +// {min}, and {sec} are zero-padded to two digits each. The fractional seconds, +// which can go up to 9 digits, up to 1 nanosecond resolution, is optional. The +// "Z" suffix indicates the timezone ("UTC"); the timezone is required. Encoding +// should always use UTC (as indicated by "Z") and a decoder should be able to +// accept both UTC and other timezones (as indicated by an offset). +// +// Timestamp.seconds must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z +// inclusive. +// Timestamp.nanos must be from 0 to 999,999,999 inclusive. + +const ( + maxTimestampSeconds = 253402300799 + minTimestampSeconds = -62135596800 +) + +func (e encoder) marshalTimestamp(m protoreflect.Message) error { + fds := m.Descriptor().Fields() + fdSeconds := fds.ByNumber(genid.Timestamp_Seconds_field_number) + fdNanos := fds.ByNumber(genid.Timestamp_Nanos_field_number) + + secsVal := m.Get(fdSeconds) + nanosVal := m.Get(fdNanos) + secs := secsVal.Int() + nanos := nanosVal.Int() + if secs < minTimestampSeconds || secs > maxTimestampSeconds { + return errors.New("%s: seconds out of range %v", genid.Timestamp_message_fullname, secs) + } + if nanos < 0 || nanos > secondsInNanos { + return errors.New("%s: nanos out of range %v", genid.Timestamp_message_fullname, nanos) + } + // Uses RFC 3339, where generated output will be Z-normalized and uses 0, 3, + // 6 or 9 fractional digits. + t := time.Unix(secs, nanos).UTC() + x := t.Format("2006-01-02T15:04:05.000000000") + x = strings.TrimSuffix(x, "000") + x = strings.TrimSuffix(x, "000") + x = strings.TrimSuffix(x, ".000") + e.WriteString(x + "Z") + return nil +} + +func (d decoder) unmarshalTimestamp(m protoreflect.Message) error { + tok, err := d.Read() + if err != nil { + return err + } + if tok.Kind() != json.String { + return d.unexpectedTokenError(tok) + } + + s := tok.ParsedString() + t, err := time.Parse(time.RFC3339Nano, s) + if err != nil { + return d.newError(tok.Pos(), "invalid %v value %v", genid.Timestamp_message_fullname, tok.RawString()) + } + // Validate seconds. + secs := t.Unix() + if secs < minTimestampSeconds || secs > maxTimestampSeconds { + return d.newError(tok.Pos(), "%v value out of range: %v", genid.Timestamp_message_fullname, tok.RawString()) + } + // Validate subseconds. + i := strings.LastIndexByte(s, '.') // start of subsecond field + j := strings.LastIndexAny(s, "Z-+") // start of timezone field + if i >= 0 && j >= i && j-i > len(".999999999") { + return d.newError(tok.Pos(), "invalid %v value %v", genid.Timestamp_message_fullname, tok.RawString()) + } + + fds := m.Descriptor().Fields() + fdSeconds := fds.ByNumber(genid.Timestamp_Seconds_field_number) + fdNanos := fds.ByNumber(genid.Timestamp_Nanos_field_number) + + m.Set(fdSeconds, protoreflect.ValueOfInt64(secs)) + m.Set(fdNanos, protoreflect.ValueOfInt32(int32(t.Nanosecond()))) + return nil +} + +// The JSON representation for a FieldMask is a JSON string where paths are +// separated by a comma. Fields name in each path are converted to/from +// lower-camel naming conventions. Encoding should fail if the path name would +// end up differently after a round-trip. + +func (e encoder) marshalFieldMask(m protoreflect.Message) error { + fd := m.Descriptor().Fields().ByNumber(genid.FieldMask_Paths_field_number) + list := m.Get(fd).List() + paths := make([]string, 0, list.Len()) + + for i := 0; i < list.Len(); i++ { + s := list.Get(i).String() + if !protoreflect.FullName(s).IsValid() { + return errors.New("%s contains invalid path: %q", genid.FieldMask_Paths_field_fullname, s) + } + // Return error if conversion to camelCase is not reversible. + cc := strs.JSONCamelCase(s) + if s != strs.JSONSnakeCase(cc) { + return errors.New("%s contains irreversible value %q", genid.FieldMask_Paths_field_fullname, s) + } + paths = append(paths, cc) + } + + e.WriteString(strings.Join(paths, ",")) + return nil +} + +func (d decoder) unmarshalFieldMask(m protoreflect.Message) error { + tok, err := d.Read() + if err != nil { + return err + } + if tok.Kind() != json.String { + return d.unexpectedTokenError(tok) + } + str := strings.TrimSpace(tok.ParsedString()) + if str == "" { + return nil + } + paths := strings.Split(str, ",") + + fd := m.Descriptor().Fields().ByNumber(genid.FieldMask_Paths_field_number) + list := m.Mutable(fd).List() + + for _, s0 := range paths { + s := strs.JSONSnakeCase(s0) + if strings.Contains(s0, "_") || !protoreflect.FullName(s).IsValid() { + return d.newError(tok.Pos(), "%v contains invalid path: %q", genid.FieldMask_Paths_field_fullname, s0) + } + list.Append(protoreflect.ValueOfString(s)) + } + return nil +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/prototext/decode.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/prototext/decode.go new file mode 100644 index 0000000..b538050 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/prototext/decode.go @@ -0,0 +1,767 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package prototext + +import ( + "fmt" + "unicode/utf8" + + "google.golang.org/protobuf/internal/encoding/messageset" + "google.golang.org/protobuf/internal/encoding/text" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/flags" + "google.golang.org/protobuf/internal/genid" + "google.golang.org/protobuf/internal/pragma" + "google.golang.org/protobuf/internal/set" + "google.golang.org/protobuf/internal/strs" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" +) + +// Unmarshal reads the given []byte into the given [proto.Message]. +// The provided message must be mutable (e.g., a non-nil pointer to a message). +func Unmarshal(b []byte, m proto.Message) error { + return UnmarshalOptions{}.Unmarshal(b, m) +} + +// UnmarshalOptions is a configurable textproto format unmarshaler. +type UnmarshalOptions struct { + pragma.NoUnkeyedLiterals + + // AllowPartial accepts input for messages that will result in missing + // required fields. If AllowPartial is false (the default), Unmarshal will + // return error if there are any missing required fields. + AllowPartial bool + + // DiscardUnknown specifies whether to ignore unknown fields when parsing. + // An unknown field is any field whose field name or field number does not + // resolve to any known or extension field in the message. + // By default, unmarshal rejects unknown fields as an error. + DiscardUnknown bool + + // Resolver is used for looking up types when unmarshaling + // google.protobuf.Any messages or extension fields. + // If nil, this defaults to using protoregistry.GlobalTypes. + Resolver interface { + protoregistry.MessageTypeResolver + protoregistry.ExtensionTypeResolver + } +} + +// Unmarshal reads the given []byte and populates the given [proto.Message] +// using options in the UnmarshalOptions object. +// The provided message must be mutable (e.g., a non-nil pointer to a message). +func (o UnmarshalOptions) Unmarshal(b []byte, m proto.Message) error { + return o.unmarshal(b, m) +} + +// unmarshal is a centralized function that all unmarshal operations go through. +// For profiling purposes, avoid changing the name of this function or +// introducing other code paths for unmarshal that do not go through this. +func (o UnmarshalOptions) unmarshal(b []byte, m proto.Message) error { + proto.Reset(m) + + if o.Resolver == nil { + o.Resolver = protoregistry.GlobalTypes + } + + dec := decoder{text.NewDecoder(b), o} + if err := dec.unmarshalMessage(m.ProtoReflect(), false); err != nil { + return err + } + if o.AllowPartial { + return nil + } + return proto.CheckInitialized(m) +} + +type decoder struct { + *text.Decoder + opts UnmarshalOptions +} + +// newError returns an error object with position info. +func (d decoder) newError(pos int, f string, x ...any) error { + line, column := d.Position(pos) + head := fmt.Sprintf("(line %d:%d): ", line, column) + return errors.New(head+f, x...) +} + +// unexpectedTokenError returns a syntax error for the given unexpected token. +func (d decoder) unexpectedTokenError(tok text.Token) error { + return d.syntaxError(tok.Pos(), "unexpected token: %s", tok.RawString()) +} + +// syntaxError returns a syntax error for given position. +func (d decoder) syntaxError(pos int, f string, x ...any) error { + line, column := d.Position(pos) + head := fmt.Sprintf("syntax error (line %d:%d): ", line, column) + return errors.New(head+f, x...) +} + +// unmarshalMessage unmarshals into the given protoreflect.Message. +func (d decoder) unmarshalMessage(m protoreflect.Message, checkDelims bool) error { + messageDesc := m.Descriptor() + if !flags.ProtoLegacy && messageset.IsMessageSet(messageDesc) { + return errors.New("no support for proto1 MessageSets") + } + + if messageDesc.FullName() == genid.Any_message_fullname { + return d.unmarshalAny(m, checkDelims) + } + + if checkDelims { + tok, err := d.Read() + if err != nil { + return err + } + + if tok.Kind() != text.MessageOpen { + return d.unexpectedTokenError(tok) + } + } + + var seenNums set.Ints + var seenOneofs set.Ints + fieldDescs := messageDesc.Fields() + + for { + // Read field name. + tok, err := d.Read() + if err != nil { + return err + } + switch typ := tok.Kind(); typ { + case text.Name: + // Continue below. + case text.EOF: + if checkDelims { + return text.ErrUnexpectedEOF + } + return nil + default: + if checkDelims && typ == text.MessageClose { + return nil + } + return d.unexpectedTokenError(tok) + } + + // Resolve the field descriptor. + var name protoreflect.Name + var fd protoreflect.FieldDescriptor + var xt protoreflect.ExtensionType + var xtErr error + var isFieldNumberName bool + + switch tok.NameKind() { + case text.IdentName: + name = protoreflect.Name(tok.IdentName()) + fd = fieldDescs.ByTextName(string(name)) + + case text.TypeName: + // Handle extensions only. This code path is not for Any. + xt, xtErr = d.opts.Resolver.FindExtensionByName(protoreflect.FullName(tok.TypeName())) + + case text.FieldNumber: + isFieldNumberName = true + num := protoreflect.FieldNumber(tok.FieldNumber()) + if !num.IsValid() { + return d.newError(tok.Pos(), "invalid field number: %d", num) + } + fd = fieldDescs.ByNumber(num) + if fd == nil { + xt, xtErr = d.opts.Resolver.FindExtensionByNumber(messageDesc.FullName(), num) + } + } + + if xt != nil { + fd = xt.TypeDescriptor() + if !messageDesc.ExtensionRanges().Has(fd.Number()) || fd.ContainingMessage().FullName() != messageDesc.FullName() { + return d.newError(tok.Pos(), "message %v cannot be extended by %v", messageDesc.FullName(), fd.FullName()) + } + } else if xtErr != nil && xtErr != protoregistry.NotFound { + return d.newError(tok.Pos(), "unable to resolve [%s]: %v", tok.RawString(), xtErr) + } + + // Handle unknown fields. + if fd == nil { + if d.opts.DiscardUnknown || messageDesc.ReservedNames().Has(name) { + d.skipValue() + continue + } + return d.newError(tok.Pos(), "unknown field: %v", tok.RawString()) + } + + // Handle fields identified by field number. + if isFieldNumberName { + // TODO: Add an option to permit parsing field numbers. + // + // This requires careful thought as the MarshalOptions.EmitUnknown + // option allows formatting unknown fields as the field number and the + // best-effort textual representation of the field value. In that case, + // it may not be possible to unmarshal the value from a parser that does + // have information about the unknown field. + return d.newError(tok.Pos(), "cannot specify field by number: %v", tok.RawString()) + } + + switch { + case fd.IsList(): + kind := fd.Kind() + if kind != protoreflect.MessageKind && kind != protoreflect.GroupKind && !tok.HasSeparator() { + return d.syntaxError(tok.Pos(), "missing field separator :") + } + + list := m.Mutable(fd).List() + if err := d.unmarshalList(fd, list); err != nil { + return err + } + + case fd.IsMap(): + mmap := m.Mutable(fd).Map() + if err := d.unmarshalMap(fd, mmap); err != nil { + return err + } + + default: + kind := fd.Kind() + if kind != protoreflect.MessageKind && kind != protoreflect.GroupKind && !tok.HasSeparator() { + return d.syntaxError(tok.Pos(), "missing field separator :") + } + + // If field is a oneof, check if it has already been set. + if od := fd.ContainingOneof(); od != nil { + idx := uint64(od.Index()) + if seenOneofs.Has(idx) { + return d.newError(tok.Pos(), "error parsing %q, oneof %v is already set", tok.RawString(), od.FullName()) + } + seenOneofs.Set(idx) + } + + num := uint64(fd.Number()) + if seenNums.Has(num) { + return d.newError(tok.Pos(), "non-repeated field %q is repeated", tok.RawString()) + } + + if err := d.unmarshalSingular(fd, m); err != nil { + return err + } + seenNums.Set(num) + } + } + + return nil +} + +// unmarshalSingular unmarshals a non-repeated field value specified by the +// given FieldDescriptor. +func (d decoder) unmarshalSingular(fd protoreflect.FieldDescriptor, m protoreflect.Message) error { + var val protoreflect.Value + var err error + switch fd.Kind() { + case protoreflect.MessageKind, protoreflect.GroupKind: + val = m.NewField(fd) + err = d.unmarshalMessage(val.Message(), true) + default: + val, err = d.unmarshalScalar(fd) + } + if err == nil { + m.Set(fd, val) + } + return err +} + +// unmarshalScalar unmarshals a scalar/enum protoreflect.Value specified by the +// given FieldDescriptor. +func (d decoder) unmarshalScalar(fd protoreflect.FieldDescriptor) (protoreflect.Value, error) { + tok, err := d.Read() + if err != nil { + return protoreflect.Value{}, err + } + + if tok.Kind() != text.Scalar { + return protoreflect.Value{}, d.unexpectedTokenError(tok) + } + + kind := fd.Kind() + switch kind { + case protoreflect.BoolKind: + if b, ok := tok.Bool(); ok { + return protoreflect.ValueOfBool(b), nil + } + + case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind: + if n, ok := tok.Int32(); ok { + return protoreflect.ValueOfInt32(n), nil + } + + case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind: + if n, ok := tok.Int64(); ok { + return protoreflect.ValueOfInt64(n), nil + } + + case protoreflect.Uint32Kind, protoreflect.Fixed32Kind: + if n, ok := tok.Uint32(); ok { + return protoreflect.ValueOfUint32(n), nil + } + + case protoreflect.Uint64Kind, protoreflect.Fixed64Kind: + if n, ok := tok.Uint64(); ok { + return protoreflect.ValueOfUint64(n), nil + } + + case protoreflect.FloatKind: + if n, ok := tok.Float32(); ok { + return protoreflect.ValueOfFloat32(n), nil + } + + case protoreflect.DoubleKind: + if n, ok := tok.Float64(); ok { + return protoreflect.ValueOfFloat64(n), nil + } + + case protoreflect.StringKind: + if s, ok := tok.String(); ok { + if strs.EnforceUTF8(fd) && !utf8.ValidString(s) { + return protoreflect.Value{}, d.newError(tok.Pos(), "contains invalid UTF-8") + } + return protoreflect.ValueOfString(s), nil + } + + case protoreflect.BytesKind: + if b, ok := tok.String(); ok { + return protoreflect.ValueOfBytes([]byte(b)), nil + } + + case protoreflect.EnumKind: + if lit, ok := tok.Enum(); ok { + // Lookup EnumNumber based on name. + if enumVal := fd.Enum().Values().ByName(protoreflect.Name(lit)); enumVal != nil { + return protoreflect.ValueOfEnum(enumVal.Number()), nil + } + } + if num, ok := tok.Int32(); ok { + return protoreflect.ValueOfEnum(protoreflect.EnumNumber(num)), nil + } + + default: + panic(fmt.Sprintf("invalid scalar kind %v", kind)) + } + + return protoreflect.Value{}, d.newError(tok.Pos(), "invalid value for %v type: %v", kind, tok.RawString()) +} + +// unmarshalList unmarshals into given protoreflect.List. A list value can +// either be in [] syntax or simply just a single scalar/message value. +func (d decoder) unmarshalList(fd protoreflect.FieldDescriptor, list protoreflect.List) error { + tok, err := d.Peek() + if err != nil { + return err + } + + switch fd.Kind() { + case protoreflect.MessageKind, protoreflect.GroupKind: + switch tok.Kind() { + case text.ListOpen: + d.Read() + for { + tok, err := d.Peek() + if err != nil { + return err + } + + switch tok.Kind() { + case text.ListClose: + d.Read() + return nil + case text.MessageOpen: + pval := list.NewElement() + if err := d.unmarshalMessage(pval.Message(), true); err != nil { + return err + } + list.Append(pval) + default: + return d.unexpectedTokenError(tok) + } + } + + case text.MessageOpen: + pval := list.NewElement() + if err := d.unmarshalMessage(pval.Message(), true); err != nil { + return err + } + list.Append(pval) + return nil + } + + default: + switch tok.Kind() { + case text.ListOpen: + d.Read() + for { + tok, err := d.Peek() + if err != nil { + return err + } + + switch tok.Kind() { + case text.ListClose: + d.Read() + return nil + case text.Scalar: + pval, err := d.unmarshalScalar(fd) + if err != nil { + return err + } + list.Append(pval) + default: + return d.unexpectedTokenError(tok) + } + } + + case text.Scalar: + pval, err := d.unmarshalScalar(fd) + if err != nil { + return err + } + list.Append(pval) + return nil + } + } + + return d.unexpectedTokenError(tok) +} + +// unmarshalMap unmarshals into given protoreflect.Map. A map value is a +// textproto message containing {key: , value: }. +func (d decoder) unmarshalMap(fd protoreflect.FieldDescriptor, mmap protoreflect.Map) error { + // Determine ahead whether map entry is a scalar type or a message type in + // order to call the appropriate unmarshalMapValue func inside + // unmarshalMapEntry. + var unmarshalMapValue func() (protoreflect.Value, error) + switch fd.MapValue().Kind() { + case protoreflect.MessageKind, protoreflect.GroupKind: + unmarshalMapValue = func() (protoreflect.Value, error) { + pval := mmap.NewValue() + if err := d.unmarshalMessage(pval.Message(), true); err != nil { + return protoreflect.Value{}, err + } + return pval, nil + } + default: + unmarshalMapValue = func() (protoreflect.Value, error) { + return d.unmarshalScalar(fd.MapValue()) + } + } + + tok, err := d.Read() + if err != nil { + return err + } + switch tok.Kind() { + case text.MessageOpen: + return d.unmarshalMapEntry(fd, mmap, unmarshalMapValue) + + case text.ListOpen: + for { + tok, err := d.Read() + if err != nil { + return err + } + switch tok.Kind() { + case text.ListClose: + return nil + case text.MessageOpen: + if err := d.unmarshalMapEntry(fd, mmap, unmarshalMapValue); err != nil { + return err + } + default: + return d.unexpectedTokenError(tok) + } + } + + default: + return d.unexpectedTokenError(tok) + } +} + +// unmarshalMap unmarshals into given protoreflect.Map. A map value is a +// textproto message containing {key: , value: }. +func (d decoder) unmarshalMapEntry(fd protoreflect.FieldDescriptor, mmap protoreflect.Map, unmarshalMapValue func() (protoreflect.Value, error)) error { + var key protoreflect.MapKey + var pval protoreflect.Value +Loop: + for { + // Read field name. + tok, err := d.Read() + if err != nil { + return err + } + switch tok.Kind() { + case text.Name: + if tok.NameKind() != text.IdentName { + if !d.opts.DiscardUnknown { + return d.newError(tok.Pos(), "unknown map entry field %q", tok.RawString()) + } + d.skipValue() + continue Loop + } + // Continue below. + case text.MessageClose: + break Loop + default: + return d.unexpectedTokenError(tok) + } + + switch name := protoreflect.Name(tok.IdentName()); name { + case genid.MapEntry_Key_field_name: + if !tok.HasSeparator() { + return d.syntaxError(tok.Pos(), "missing field separator :") + } + if key.IsValid() { + return d.newError(tok.Pos(), "map entry %q cannot be repeated", name) + } + val, err := d.unmarshalScalar(fd.MapKey()) + if err != nil { + return err + } + key = val.MapKey() + + case genid.MapEntry_Value_field_name: + if kind := fd.MapValue().Kind(); (kind != protoreflect.MessageKind) && (kind != protoreflect.GroupKind) { + if !tok.HasSeparator() { + return d.syntaxError(tok.Pos(), "missing field separator :") + } + } + if pval.IsValid() { + return d.newError(tok.Pos(), "map entry %q cannot be repeated", name) + } + pval, err = unmarshalMapValue() + if err != nil { + return err + } + + default: + if !d.opts.DiscardUnknown { + return d.newError(tok.Pos(), "unknown map entry field %q", name) + } + d.skipValue() + } + } + + if !key.IsValid() { + key = fd.MapKey().Default().MapKey() + } + if !pval.IsValid() { + switch fd.MapValue().Kind() { + case protoreflect.MessageKind, protoreflect.GroupKind: + // If value field is not set for message/group types, construct an + // empty one as default. + pval = mmap.NewValue() + default: + pval = fd.MapValue().Default() + } + } + mmap.Set(key, pval) + return nil +} + +// unmarshalAny unmarshals an Any textproto. It can either be in expanded form +// or non-expanded form. +func (d decoder) unmarshalAny(m protoreflect.Message, checkDelims bool) error { + var typeURL string + var bValue []byte + var seenTypeUrl bool + var seenValue bool + var isExpanded bool + + if checkDelims { + tok, err := d.Read() + if err != nil { + return err + } + + if tok.Kind() != text.MessageOpen { + return d.unexpectedTokenError(tok) + } + } + +Loop: + for { + // Read field name. Can only have 3 possible field names, i.e. type_url, + // value and type URL name inside []. + tok, err := d.Read() + if err != nil { + return err + } + if typ := tok.Kind(); typ != text.Name { + if checkDelims { + if typ == text.MessageClose { + break Loop + } + } else if typ == text.EOF { + break Loop + } + return d.unexpectedTokenError(tok) + } + + switch tok.NameKind() { + case text.IdentName: + // Both type_url and value fields require field separator :. + if !tok.HasSeparator() { + return d.syntaxError(tok.Pos(), "missing field separator :") + } + + switch name := protoreflect.Name(tok.IdentName()); name { + case genid.Any_TypeUrl_field_name: + if seenTypeUrl { + return d.newError(tok.Pos(), "duplicate %v field", genid.Any_TypeUrl_field_fullname) + } + if isExpanded { + return d.newError(tok.Pos(), "conflict with [%s] field", typeURL) + } + tok, err := d.Read() + if err != nil { + return err + } + var ok bool + typeURL, ok = tok.String() + if !ok { + return d.newError(tok.Pos(), "invalid %v field value: %v", genid.Any_TypeUrl_field_fullname, tok.RawString()) + } + seenTypeUrl = true + + case genid.Any_Value_field_name: + if seenValue { + return d.newError(tok.Pos(), "duplicate %v field", genid.Any_Value_field_fullname) + } + if isExpanded { + return d.newError(tok.Pos(), "conflict with [%s] field", typeURL) + } + tok, err := d.Read() + if err != nil { + return err + } + s, ok := tok.String() + if !ok { + return d.newError(tok.Pos(), "invalid %v field value: %v", genid.Any_Value_field_fullname, tok.RawString()) + } + bValue = []byte(s) + seenValue = true + + default: + if !d.opts.DiscardUnknown { + return d.newError(tok.Pos(), "invalid field name %q in %v message", tok.RawString(), genid.Any_message_fullname) + } + } + + case text.TypeName: + if isExpanded { + return d.newError(tok.Pos(), "cannot have more than one type") + } + if seenTypeUrl { + return d.newError(tok.Pos(), "conflict with type_url field") + } + typeURL = tok.TypeName() + var err error + bValue, err = d.unmarshalExpandedAny(typeURL, tok.Pos()) + if err != nil { + return err + } + isExpanded = true + + default: + if !d.opts.DiscardUnknown { + return d.newError(tok.Pos(), "invalid field name %q in %v message", tok.RawString(), genid.Any_message_fullname) + } + } + } + + fds := m.Descriptor().Fields() + if len(typeURL) > 0 { + m.Set(fds.ByNumber(genid.Any_TypeUrl_field_number), protoreflect.ValueOfString(typeURL)) + } + if len(bValue) > 0 { + m.Set(fds.ByNumber(genid.Any_Value_field_number), protoreflect.ValueOfBytes(bValue)) + } + return nil +} + +func (d decoder) unmarshalExpandedAny(typeURL string, pos int) ([]byte, error) { + mt, err := d.opts.Resolver.FindMessageByURL(typeURL) + if err != nil { + return nil, d.newError(pos, "unable to resolve message [%v]: %v", typeURL, err) + } + // Create new message for the embedded message type and unmarshal the value + // field into it. + m := mt.New() + if err := d.unmarshalMessage(m, true); err != nil { + return nil, err + } + // Serialize the embedded message and return the resulting bytes. + b, err := proto.MarshalOptions{ + AllowPartial: true, // Never check required fields inside an Any. + Deterministic: true, + }.Marshal(m.Interface()) + if err != nil { + return nil, d.newError(pos, "error in marshaling message into Any.value: %v", err) + } + return b, nil +} + +// skipValue makes the decoder parse a field value in order to advance the read +// to the next field. It relies on Read returning an error if the types are not +// in valid sequence. +func (d decoder) skipValue() error { + tok, err := d.Read() + if err != nil { + return err + } + // Only need to continue reading for messages and lists. + switch tok.Kind() { + case text.MessageOpen: + return d.skipMessageValue() + + case text.ListOpen: + for { + tok, err := d.Read() + if err != nil { + return err + } + switch tok.Kind() { + case text.ListClose: + return nil + case text.MessageOpen: + if err := d.skipMessageValue(); err != nil { + return err + } + default: + // Skip items. This will not validate whether skipped values are + // of the same type or not, same behavior as C++ + // TextFormat::Parser::AllowUnknownField(true) version 3.8.0. + } + } + } + return nil +} + +// skipMessageValue makes the decoder parse and skip over all fields in a +// message. It assumes that the previous read type is MessageOpen. +func (d decoder) skipMessageValue() error { + for { + tok, err := d.Read() + if err != nil { + return err + } + switch tok.Kind() { + case text.MessageClose: + return nil + case text.Name: + if err := d.skipValue(); err != nil { + return err + } + } + } +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/prototext/doc.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/prototext/doc.go new file mode 100644 index 0000000..162b4f9 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/prototext/doc.go @@ -0,0 +1,7 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package prototext marshals and unmarshals protocol buffer messages as the +// textproto format. +package prototext diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/prototext/encode.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/prototext/encode.go new file mode 100644 index 0000000..1f57e66 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/prototext/encode.go @@ -0,0 +1,380 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package prototext + +import ( + "fmt" + "strconv" + "unicode/utf8" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/encoding/messageset" + "google.golang.org/protobuf/internal/encoding/text" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/flags" + "google.golang.org/protobuf/internal/genid" + "google.golang.org/protobuf/internal/order" + "google.golang.org/protobuf/internal/pragma" + "google.golang.org/protobuf/internal/strs" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" +) + +const defaultIndent = " " + +// Format formats the message as a multiline string. +// This function is only intended for human consumption and ignores errors. +// Do not depend on the output being stable. Its output will change across +// different builds of your program, even when using the same version of the +// protobuf module. +func Format(m proto.Message) string { + return MarshalOptions{Multiline: true}.Format(m) +} + +// Marshal writes the given [proto.Message] in textproto format using default +// options. Do not depend on the output being stable. Its output will change +// across different builds of your program, even when using the same version of +// the protobuf module. +func Marshal(m proto.Message) ([]byte, error) { + return MarshalOptions{}.Marshal(m) +} + +// MarshalOptions is a configurable text format marshaler. +type MarshalOptions struct { + pragma.NoUnkeyedLiterals + + // Multiline specifies whether the marshaler should format the output in + // indented-form with every textual element on a new line. + // If Indent is an empty string, then an arbitrary indent is chosen. + Multiline bool + + // Indent specifies the set of indentation characters to use in a multiline + // formatted output such that every entry is preceded by Indent and + // terminated by a newline. If non-empty, then Multiline is treated as true. + // Indent can only be composed of space or tab characters. + Indent string + + // EmitASCII specifies whether to format strings and bytes as ASCII only + // as opposed to using UTF-8 encoding when possible. + EmitASCII bool + + // allowInvalidUTF8 specifies whether to permit the encoding of strings + // with invalid UTF-8. This is unexported as it is intended to only + // be specified by the Format method. + allowInvalidUTF8 bool + + // AllowPartial allows messages that have missing required fields to marshal + // without returning an error. If AllowPartial is false (the default), + // Marshal will return error if there are any missing required fields. + AllowPartial bool + + // EmitUnknown specifies whether to emit unknown fields in the output. + // If specified, the unmarshaler may be unable to parse the output. + // The default is to exclude unknown fields. + EmitUnknown bool + + // Resolver is used for looking up types when expanding google.protobuf.Any + // messages. If nil, this defaults to using protoregistry.GlobalTypes. + Resolver interface { + protoregistry.ExtensionTypeResolver + protoregistry.MessageTypeResolver + } +} + +// Format formats the message as a string. +// This method is only intended for human consumption and ignores errors. +// Do not depend on the output being stable. Its output will change across +// different builds of your program, even when using the same version of the +// protobuf module. +func (o MarshalOptions) Format(m proto.Message) string { + if m == nil || !m.ProtoReflect().IsValid() { + return "" // invalid syntax, but okay since this is for debugging + } + o.allowInvalidUTF8 = true + o.AllowPartial = true + o.EmitUnknown = true + b, _ := o.Marshal(m) + return string(b) +} + +// Marshal writes the given [proto.Message] in textproto format using options in +// MarshalOptions object. Do not depend on the output being stable. Its output +// will change across different builds of your program, even when using the +// same version of the protobuf module. +func (o MarshalOptions) Marshal(m proto.Message) ([]byte, error) { + return o.marshal(nil, m) +} + +// MarshalAppend appends the textproto format encoding of m to b, +// returning the result. +func (o MarshalOptions) MarshalAppend(b []byte, m proto.Message) ([]byte, error) { + return o.marshal(b, m) +} + +// marshal is a centralized function that all marshal operations go through. +// For profiling purposes, avoid changing the name of this function or +// introducing other code paths for marshal that do not go through this. +func (o MarshalOptions) marshal(b []byte, m proto.Message) ([]byte, error) { + var delims = [2]byte{'{', '}'} + + if o.Multiline && o.Indent == "" { + o.Indent = defaultIndent + } + if o.Resolver == nil { + o.Resolver = protoregistry.GlobalTypes + } + + internalEnc, err := text.NewEncoder(b, o.Indent, delims, o.EmitASCII) + if err != nil { + return nil, err + } + + // Treat nil message interface as an empty message, + // in which case there is nothing to output. + if m == nil { + return b, nil + } + + enc := encoder{internalEnc, o} + err = enc.marshalMessage(m.ProtoReflect(), false) + if err != nil { + return nil, err + } + out := enc.Bytes() + if len(o.Indent) > 0 && len(out) > 0 { + out = append(out, '\n') + } + if o.AllowPartial { + return out, nil + } + return out, proto.CheckInitialized(m) +} + +type encoder struct { + *text.Encoder + opts MarshalOptions +} + +// marshalMessage marshals the given protoreflect.Message. +func (e encoder) marshalMessage(m protoreflect.Message, inclDelims bool) error { + messageDesc := m.Descriptor() + if !flags.ProtoLegacy && messageset.IsMessageSet(messageDesc) { + return errors.New("no support for proto1 MessageSets") + } + + if inclDelims { + e.StartMessage() + defer e.EndMessage() + } + + // Handle Any expansion. + if messageDesc.FullName() == genid.Any_message_fullname { + if e.marshalAny(m) { + return nil + } + // If unable to expand, continue on to marshal Any as a regular message. + } + + // Marshal fields. + var err error + order.RangeFields(m, order.IndexNameFieldOrder, func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + if err = e.marshalField(fd.TextName(), v, fd); err != nil { + return false + } + return true + }) + if err != nil { + return err + } + + // Marshal unknown fields. + if e.opts.EmitUnknown { + e.marshalUnknown(m.GetUnknown()) + } + + return nil +} + +// marshalField marshals the given field with protoreflect.Value. +func (e encoder) marshalField(name string, val protoreflect.Value, fd protoreflect.FieldDescriptor) error { + switch { + case fd.IsList(): + return e.marshalList(name, val.List(), fd) + case fd.IsMap(): + return e.marshalMap(name, val.Map(), fd) + default: + e.WriteName(name) + return e.marshalSingular(val, fd) + } +} + +// marshalSingular marshals the given non-repeated field value. This includes +// all scalar types, enums, messages, and groups. +func (e encoder) marshalSingular(val protoreflect.Value, fd protoreflect.FieldDescriptor) error { + kind := fd.Kind() + switch kind { + case protoreflect.BoolKind: + e.WriteBool(val.Bool()) + + case protoreflect.StringKind: + s := val.String() + if !e.opts.allowInvalidUTF8 && strs.EnforceUTF8(fd) && !utf8.ValidString(s) { + return errors.InvalidUTF8(string(fd.FullName())) + } + e.WriteString(s) + + case protoreflect.Int32Kind, protoreflect.Int64Kind, + protoreflect.Sint32Kind, protoreflect.Sint64Kind, + protoreflect.Sfixed32Kind, protoreflect.Sfixed64Kind: + e.WriteInt(val.Int()) + + case protoreflect.Uint32Kind, protoreflect.Uint64Kind, + protoreflect.Fixed32Kind, protoreflect.Fixed64Kind: + e.WriteUint(val.Uint()) + + case protoreflect.FloatKind: + // Encoder.WriteFloat handles the special numbers NaN and infinites. + e.WriteFloat(val.Float(), 32) + + case protoreflect.DoubleKind: + // Encoder.WriteFloat handles the special numbers NaN and infinites. + e.WriteFloat(val.Float(), 64) + + case protoreflect.BytesKind: + e.WriteString(string(val.Bytes())) + + case protoreflect.EnumKind: + num := val.Enum() + if desc := fd.Enum().Values().ByNumber(num); desc != nil { + e.WriteLiteral(string(desc.Name())) + } else { + // Use numeric value if there is no enum description. + e.WriteInt(int64(num)) + } + + case protoreflect.MessageKind, protoreflect.GroupKind: + return e.marshalMessage(val.Message(), true) + + default: + panic(fmt.Sprintf("%v has unknown kind: %v", fd.FullName(), kind)) + } + return nil +} + +// marshalList marshals the given protoreflect.List as multiple name-value fields. +func (e encoder) marshalList(name string, list protoreflect.List, fd protoreflect.FieldDescriptor) error { + size := list.Len() + for i := 0; i < size; i++ { + e.WriteName(name) + if err := e.marshalSingular(list.Get(i), fd); err != nil { + return err + } + } + return nil +} + +// marshalMap marshals the given protoreflect.Map as multiple name-value fields. +func (e encoder) marshalMap(name string, mmap protoreflect.Map, fd protoreflect.FieldDescriptor) error { + var err error + order.RangeEntries(mmap, order.GenericKeyOrder, func(key protoreflect.MapKey, val protoreflect.Value) bool { + e.WriteName(name) + e.StartMessage() + defer e.EndMessage() + + e.WriteName(string(genid.MapEntry_Key_field_name)) + err = e.marshalSingular(key.Value(), fd.MapKey()) + if err != nil { + return false + } + + e.WriteName(string(genid.MapEntry_Value_field_name)) + err = e.marshalSingular(val, fd.MapValue()) + if err != nil { + return false + } + return true + }) + return err +} + +// marshalUnknown parses the given []byte and marshals fields out. +// This function assumes proper encoding in the given []byte. +func (e encoder) marshalUnknown(b []byte) { + const dec = 10 + const hex = 16 + for len(b) > 0 { + num, wtype, n := protowire.ConsumeTag(b) + b = b[n:] + e.WriteName(strconv.FormatInt(int64(num), dec)) + + switch wtype { + case protowire.VarintType: + var v uint64 + v, n = protowire.ConsumeVarint(b) + e.WriteUint(v) + case protowire.Fixed32Type: + var v uint32 + v, n = protowire.ConsumeFixed32(b) + e.WriteLiteral("0x" + strconv.FormatUint(uint64(v), hex)) + case protowire.Fixed64Type: + var v uint64 + v, n = protowire.ConsumeFixed64(b) + e.WriteLiteral("0x" + strconv.FormatUint(v, hex)) + case protowire.BytesType: + var v []byte + v, n = protowire.ConsumeBytes(b) + e.WriteString(string(v)) + case protowire.StartGroupType: + e.StartMessage() + var v []byte + v, n = protowire.ConsumeGroup(num, b) + e.marshalUnknown(v) + e.EndMessage() + default: + panic(fmt.Sprintf("prototext: error parsing unknown field wire type: %v", wtype)) + } + + b = b[n:] + } +} + +// marshalAny marshals the given google.protobuf.Any message in expanded form. +// It returns true if it was able to marshal, else false. +func (e encoder) marshalAny(any protoreflect.Message) bool { + // Construct the embedded message. + fds := any.Descriptor().Fields() + fdType := fds.ByNumber(genid.Any_TypeUrl_field_number) + typeURL := any.Get(fdType).String() + mt, err := e.opts.Resolver.FindMessageByURL(typeURL) + if err != nil { + return false + } + m := mt.New().Interface() + + // Unmarshal bytes into embedded message. + fdValue := fds.ByNumber(genid.Any_Value_field_number) + value := any.Get(fdValue) + err = proto.UnmarshalOptions{ + AllowPartial: true, + Resolver: e.opts.Resolver, + }.Unmarshal(value.Bytes(), m) + if err != nil { + return false + } + + // Get current encoder position. If marshaling fails, reset encoder output + // back to this position. + pos := e.Snapshot() + + // Field name is the proto field name enclosed in []. + e.WriteName("[" + typeURL + "]") + err = e.marshalMessage(m.ProtoReflect(), true) + if err != nil { + e.Reset(pos) + return false + } + return true +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/protowire/wire.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/protowire/wire.go new file mode 100644 index 0000000..743bfb8 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/encoding/protowire/wire.go @@ -0,0 +1,571 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package protowire parses and formats the raw wire encoding. +// See https://protobuf.dev/programming-guides/encoding. +// +// For marshaling and unmarshaling entire protobuf messages, +// use the [google.golang.org/protobuf/proto] package instead. +package protowire + +import ( + "io" + "math" + "math/bits" + + "google.golang.org/protobuf/internal/errors" +) + +// Number represents the field number. +type Number int32 + +const ( + MinValidNumber Number = 1 + FirstReservedNumber Number = 19000 + LastReservedNumber Number = 19999 + MaxValidNumber Number = 1<<29 - 1 + DefaultRecursionLimit = 10000 +) + +// IsValid reports whether the field number is semantically valid. +func (n Number) IsValid() bool { + return MinValidNumber <= n && n <= MaxValidNumber +} + +// Type represents the wire type. +type Type int8 + +const ( + VarintType Type = 0 + Fixed32Type Type = 5 + Fixed64Type Type = 1 + BytesType Type = 2 + StartGroupType Type = 3 + EndGroupType Type = 4 +) + +const ( + _ = -iota + errCodeTruncated + errCodeFieldNumber + errCodeOverflow + errCodeReserved + errCodeEndGroup + errCodeRecursionDepth +) + +var ( + errFieldNumber = errors.New("invalid field number") + errOverflow = errors.New("variable length integer overflow") + errReserved = errors.New("cannot parse reserved wire type") + errEndGroup = errors.New("mismatching end group marker") + errParse = errors.New("parse error") +) + +// ParseError converts an error code into an error value. +// This returns nil if n is a non-negative number. +func ParseError(n int) error { + if n >= 0 { + return nil + } + switch n { + case errCodeTruncated: + return io.ErrUnexpectedEOF + case errCodeFieldNumber: + return errFieldNumber + case errCodeOverflow: + return errOverflow + case errCodeReserved: + return errReserved + case errCodeEndGroup: + return errEndGroup + default: + return errParse + } +} + +// ConsumeField parses an entire field record (both tag and value) and returns +// the field number, the wire type, and the total length. +// This returns a negative length upon an error (see [ParseError]). +// +// The total length includes the tag header and the end group marker (if the +// field is a group). +func ConsumeField(b []byte) (Number, Type, int) { + num, typ, n := ConsumeTag(b) + if n < 0 { + return 0, 0, n // forward error code + } + m := ConsumeFieldValue(num, typ, b[n:]) + if m < 0 { + return 0, 0, m // forward error code + } + return num, typ, n + m +} + +// ConsumeFieldValue parses a field value and returns its length. +// This assumes that the field [Number] and wire [Type] have already been parsed. +// This returns a negative length upon an error (see [ParseError]). +// +// When parsing a group, the length includes the end group marker and +// the end group is verified to match the starting field number. +func ConsumeFieldValue(num Number, typ Type, b []byte) (n int) { + return consumeFieldValueD(num, typ, b, DefaultRecursionLimit) +} + +func consumeFieldValueD(num Number, typ Type, b []byte, depth int) (n int) { + switch typ { + case VarintType: + _, n = ConsumeVarint(b) + return n + case Fixed32Type: + _, n = ConsumeFixed32(b) + return n + case Fixed64Type: + _, n = ConsumeFixed64(b) + return n + case BytesType: + _, n = ConsumeBytes(b) + return n + case StartGroupType: + if depth < 0 { + return errCodeRecursionDepth + } + n0 := len(b) + for { + num2, typ2, n := ConsumeTag(b) + if n < 0 { + return n // forward error code + } + b = b[n:] + if typ2 == EndGroupType { + if num != num2 { + return errCodeEndGroup + } + return n0 - len(b) + } + + n = consumeFieldValueD(num2, typ2, b, depth-1) + if n < 0 { + return n // forward error code + } + b = b[n:] + } + case EndGroupType: + return errCodeEndGroup + default: + return errCodeReserved + } +} + +// AppendTag encodes num and typ as a varint-encoded tag and appends it to b. +func AppendTag(b []byte, num Number, typ Type) []byte { + return AppendVarint(b, EncodeTag(num, typ)) +} + +// ConsumeTag parses b as a varint-encoded tag, reporting its length. +// This returns a negative length upon an error (see [ParseError]). +func ConsumeTag(b []byte) (Number, Type, int) { + v, n := ConsumeVarint(b) + if n < 0 { + return 0, 0, n // forward error code + } + num, typ := DecodeTag(v) + if num < MinValidNumber { + return 0, 0, errCodeFieldNumber + } + return num, typ, n +} + +func SizeTag(num Number) int { + return SizeVarint(EncodeTag(num, 0)) // wire type has no effect on size +} + +// AppendVarint appends v to b as a varint-encoded uint64. +func AppendVarint(b []byte, v uint64) []byte { + switch { + case v < 1<<7: + b = append(b, byte(v)) + case v < 1<<14: + b = append(b, + byte((v>>0)&0x7f|0x80), + byte(v>>7)) + case v < 1<<21: + b = append(b, + byte((v>>0)&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte(v>>14)) + case v < 1<<28: + b = append(b, + byte((v>>0)&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte(v>>21)) + case v < 1<<35: + b = append(b, + byte((v>>0)&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte(v>>28)) + case v < 1<<42: + b = append(b, + byte((v>>0)&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte(v>>35)) + case v < 1<<49: + b = append(b, + byte((v>>0)&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte((v>>35)&0x7f|0x80), + byte(v>>42)) + case v < 1<<56: + b = append(b, + byte((v>>0)&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte((v>>35)&0x7f|0x80), + byte((v>>42)&0x7f|0x80), + byte(v>>49)) + case v < 1<<63: + b = append(b, + byte((v>>0)&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte((v>>35)&0x7f|0x80), + byte((v>>42)&0x7f|0x80), + byte((v>>49)&0x7f|0x80), + byte(v>>56)) + default: + b = append(b, + byte((v>>0)&0x7f|0x80), + byte((v>>7)&0x7f|0x80), + byte((v>>14)&0x7f|0x80), + byte((v>>21)&0x7f|0x80), + byte((v>>28)&0x7f|0x80), + byte((v>>35)&0x7f|0x80), + byte((v>>42)&0x7f|0x80), + byte((v>>49)&0x7f|0x80), + byte((v>>56)&0x7f|0x80), + 1) + } + return b +} + +// ConsumeVarint parses b as a varint-encoded uint64, reporting its length. +// This returns a negative length upon an error (see [ParseError]). +func ConsumeVarint(b []byte) (v uint64, n int) { + var y uint64 + if len(b) <= 0 { + return 0, errCodeTruncated + } + v = uint64(b[0]) + if v < 0x80 { + return v, 1 + } + v -= 0x80 + + if len(b) <= 1 { + return 0, errCodeTruncated + } + y = uint64(b[1]) + v += y << 7 + if y < 0x80 { + return v, 2 + } + v -= 0x80 << 7 + + if len(b) <= 2 { + return 0, errCodeTruncated + } + y = uint64(b[2]) + v += y << 14 + if y < 0x80 { + return v, 3 + } + v -= 0x80 << 14 + + if len(b) <= 3 { + return 0, errCodeTruncated + } + y = uint64(b[3]) + v += y << 21 + if y < 0x80 { + return v, 4 + } + v -= 0x80 << 21 + + if len(b) <= 4 { + return 0, errCodeTruncated + } + y = uint64(b[4]) + v += y << 28 + if y < 0x80 { + return v, 5 + } + v -= 0x80 << 28 + + if len(b) <= 5 { + return 0, errCodeTruncated + } + y = uint64(b[5]) + v += y << 35 + if y < 0x80 { + return v, 6 + } + v -= 0x80 << 35 + + if len(b) <= 6 { + return 0, errCodeTruncated + } + y = uint64(b[6]) + v += y << 42 + if y < 0x80 { + return v, 7 + } + v -= 0x80 << 42 + + if len(b) <= 7 { + return 0, errCodeTruncated + } + y = uint64(b[7]) + v += y << 49 + if y < 0x80 { + return v, 8 + } + v -= 0x80 << 49 + + if len(b) <= 8 { + return 0, errCodeTruncated + } + y = uint64(b[8]) + v += y << 56 + if y < 0x80 { + return v, 9 + } + v -= 0x80 << 56 + + if len(b) <= 9 { + return 0, errCodeTruncated + } + y = uint64(b[9]) + v += y << 63 + if y < 2 { + return v, 10 + } + return 0, errCodeOverflow +} + +// SizeVarint returns the encoded size of a varint. +// The size is guaranteed to be within 1 and 10, inclusive. +func SizeVarint(v uint64) int { + // This computes 1 + (bits.Len64(v)-1)/7. + // 9/64 is a good enough approximation of 1/7 + // + // The Go compiler can translate the bits.LeadingZeros64 call into the LZCNT + // instruction, which is very fast on CPUs from the last few years. The + // specific way of expressing the calculation matches C++ Protobuf, see + // https://godbolt.org/z/4P3h53oM4 for the C++ code and how gcc/clang + // optimize that function for GOAMD64=v1 and GOAMD64=v3 (-march=haswell). + + // By OR'ing v with 1, we guarantee that v is never 0, without changing the + // result of SizeVarint. LZCNT is not defined for 0, meaning the compiler + // needs to add extra instructions to handle that case. + // + // The Go compiler currently (go1.24.4) does not make use of this knowledge. + // This opportunity (removing the XOR instruction, which handles the 0 case) + // results in a small (1%) performance win across CPU architectures. + // + // Independently of avoiding the 0 case, we need the v |= 1 line because + // it allows the Go compiler to eliminate an extra XCHGL barrier. + v |= 1 + + // It would be clearer to write log2value := 63 - uint32(...), but + // writing uint32(...) ^ 63 is much more efficient (-14% ARM, -20% Intel). + // Proof of identity for our value range [0..63]: + // https://go.dev/play/p/Pdn9hEWYakX + log2value := uint32(bits.LeadingZeros64(v)) ^ 63 + return int((log2value*9 + (64 + 9)) / 64) +} + +// AppendFixed32 appends v to b as a little-endian uint32. +func AppendFixed32(b []byte, v uint32) []byte { + return append(b, + byte(v>>0), + byte(v>>8), + byte(v>>16), + byte(v>>24)) +} + +// ConsumeFixed32 parses b as a little-endian uint32, reporting its length. +// This returns a negative length upon an error (see [ParseError]). +func ConsumeFixed32(b []byte) (v uint32, n int) { + if len(b) < 4 { + return 0, errCodeTruncated + } + v = uint32(b[0])<<0 | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 + return v, 4 +} + +// SizeFixed32 returns the encoded size of a fixed32; which is always 4. +func SizeFixed32() int { + return 4 +} + +// AppendFixed64 appends v to b as a little-endian uint64. +func AppendFixed64(b []byte, v uint64) []byte { + return append(b, + byte(v>>0), + byte(v>>8), + byte(v>>16), + byte(v>>24), + byte(v>>32), + byte(v>>40), + byte(v>>48), + byte(v>>56)) +} + +// ConsumeFixed64 parses b as a little-endian uint64, reporting its length. +// This returns a negative length upon an error (see [ParseError]). +func ConsumeFixed64(b []byte) (v uint64, n int) { + if len(b) < 8 { + return 0, errCodeTruncated + } + v = uint64(b[0])<<0 | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 + return v, 8 +} + +// SizeFixed64 returns the encoded size of a fixed64; which is always 8. +func SizeFixed64() int { + return 8 +} + +// AppendBytes appends v to b as a length-prefixed bytes value. +func AppendBytes(b []byte, v []byte) []byte { + return append(AppendVarint(b, uint64(len(v))), v...) +} + +// ConsumeBytes parses b as a length-prefixed bytes value, reporting its length. +// This returns a negative length upon an error (see [ParseError]). +func ConsumeBytes(b []byte) (v []byte, n int) { + m, n := ConsumeVarint(b) + if n < 0 { + return nil, n // forward error code + } + if m > uint64(len(b[n:])) { + return nil, errCodeTruncated + } + return b[n:][:m], n + int(m) +} + +// SizeBytes returns the encoded size of a length-prefixed bytes value, +// given only the length. +func SizeBytes(n int) int { + return SizeVarint(uint64(n)) + n +} + +// AppendString appends v to b as a length-prefixed bytes value. +func AppendString(b []byte, v string) []byte { + return append(AppendVarint(b, uint64(len(v))), v...) +} + +// ConsumeString parses b as a length-prefixed bytes value, reporting its length. +// This returns a negative length upon an error (see [ParseError]). +func ConsumeString(b []byte) (v string, n int) { + bb, n := ConsumeBytes(b) + return string(bb), n +} + +// AppendGroup appends v to b as group value, with a trailing end group marker. +// The value v must not contain the end marker. +func AppendGroup(b []byte, num Number, v []byte) []byte { + return AppendVarint(append(b, v...), EncodeTag(num, EndGroupType)) +} + +// ConsumeGroup parses b as a group value until the trailing end group marker, +// and verifies that the end marker matches the provided num. The value v +// does not contain the end marker, while the length does contain the end marker. +// This returns a negative length upon an error (see [ParseError]). +func ConsumeGroup(num Number, b []byte) (v []byte, n int) { + n = ConsumeFieldValue(num, StartGroupType, b) + if n < 0 { + return nil, n // forward error code + } + b = b[:n] + + // Truncate off end group marker, but need to handle denormalized varints. + // Assuming end marker is never 0 (which is always the case since + // EndGroupType is non-zero), we can truncate all trailing bytes where the + // lower 7 bits are all zero (implying that the varint is denormalized). + for len(b) > 0 && b[len(b)-1]&0x7f == 0 { + b = b[:len(b)-1] + } + b = b[:len(b)-SizeTag(num)] + return b, n +} + +// SizeGroup returns the encoded size of a group, given only the length. +func SizeGroup(num Number, n int) int { + return n + SizeTag(num) +} + +// DecodeTag decodes the field [Number] and wire [Type] from its unified form. +// The [Number] is -1 if the decoded field number overflows int32. +// Other than overflow, this does not check for field number validity. +func DecodeTag(x uint64) (Number, Type) { + // NOTE: MessageSet allows for larger field numbers than normal. + if x>>3 > uint64(math.MaxInt32) { + return -1, 0 + } + return Number(x >> 3), Type(x & 7) +} + +// EncodeTag encodes the field [Number] and wire [Type] into its unified form. +func EncodeTag(num Number, typ Type) uint64 { + return uint64(num)<<3 | uint64(typ&7) +} + +// DecodeZigZag decodes a zig-zag-encoded uint64 as an int64. +// +// Input: {…, 5, 3, 1, 0, 2, 4, 6, …} +// Output: {…, -3, -2, -1, 0, +1, +2, +3, …} +func DecodeZigZag(x uint64) int64 { + return int64(x>>1) ^ int64(x)<<63>>63 +} + +// EncodeZigZag encodes an int64 as a zig-zag-encoded uint64. +// +// Input: {…, -3, -2, -1, 0, +1, +2, +3, …} +// Output: {…, 5, 3, 1, 0, 2, 4, 6, …} +func EncodeZigZag(x int64) uint64 { + return uint64(x<<1) ^ uint64(x>>63) +} + +// DecodeBool decodes a uint64 as a bool. +// +// Input: { 0, 1, 2, …} +// Output: {false, true, true, …} +func DecodeBool(x uint64) bool { + return x != 0 +} + +// EncodeBool encodes a bool as a uint64. +// +// Input: {false, true} +// Output: { 0, 1} +func EncodeBool(x bool) uint64 { + if x { + return 1 + } + return 0 +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/descfmt/stringer.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/descfmt/stringer.go new file mode 100644 index 0000000..87e46bd --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/descfmt/stringer.go @@ -0,0 +1,414 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package descfmt provides functionality to format descriptors. +package descfmt + +import ( + "fmt" + "io" + "reflect" + "strconv" + "strings" + + "google.golang.org/protobuf/internal/detrand" + "google.golang.org/protobuf/internal/pragma" + "google.golang.org/protobuf/reflect/protoreflect" +) + +type list interface { + Len() int + pragma.DoNotImplement +} + +func FormatList(s fmt.State, r rune, vs list) { + io.WriteString(s, formatListOpt(vs, true, r == 'v' && (s.Flag('+') || s.Flag('#')))) +} +func formatListOpt(vs list, isRoot, allowMulti bool) string { + start, end := "[", "]" + if isRoot { + var name string + switch vs.(type) { + case protoreflect.Names: + name = "Names" + case protoreflect.FieldNumbers: + name = "FieldNumbers" + case protoreflect.FieldRanges: + name = "FieldRanges" + case protoreflect.EnumRanges: + name = "EnumRanges" + case protoreflect.FileImports: + name = "FileImports" + case protoreflect.Descriptor: + name = reflect.ValueOf(vs).MethodByName("Get").Type().Out(0).Name() + "s" + default: + name = reflect.ValueOf(vs).Elem().Type().Name() + } + start, end = name+"{", "}" + } + + var ss []string + switch vs := vs.(type) { + case protoreflect.Names: + for i := 0; i < vs.Len(); i++ { + ss = append(ss, fmt.Sprint(vs.Get(i))) + } + return start + joinStrings(ss, false) + end + case protoreflect.FieldNumbers: + for i := 0; i < vs.Len(); i++ { + ss = append(ss, fmt.Sprint(vs.Get(i))) + } + return start + joinStrings(ss, false) + end + case protoreflect.FieldRanges: + for i := 0; i < vs.Len(); i++ { + r := vs.Get(i) + if r[0]+1 == r[1] { + ss = append(ss, fmt.Sprintf("%d", r[0])) + } else { + ss = append(ss, fmt.Sprintf("%d:%d", r[0], r[1])) // enum ranges are end exclusive + } + } + return start + joinStrings(ss, false) + end + case protoreflect.EnumRanges: + for i := 0; i < vs.Len(); i++ { + r := vs.Get(i) + if r[0] == r[1] { + ss = append(ss, fmt.Sprintf("%d", r[0])) + } else { + ss = append(ss, fmt.Sprintf("%d:%d", r[0], int64(r[1])+1)) // enum ranges are end inclusive + } + } + return start + joinStrings(ss, false) + end + case protoreflect.FileImports: + for i := 0; i < vs.Len(); i++ { + var rs records + rv := reflect.ValueOf(vs.Get(i)) + rs.Append(rv, []methodAndName{ + {rv.MethodByName("Path"), "Path"}, + {rv.MethodByName("Package"), "Package"}, + {rv.MethodByName("IsPublic"), "IsPublic"}, + {rv.MethodByName("IsWeak"), "IsWeak"}, + }...) + ss = append(ss, "{"+rs.Join()+"}") + } + return start + joinStrings(ss, allowMulti) + end + default: + _, isEnumValue := vs.(protoreflect.EnumValueDescriptors) + for i := 0; i < vs.Len(); i++ { + m := reflect.ValueOf(vs).MethodByName("Get") + v := m.Call([]reflect.Value{reflect.ValueOf(i)})[0].Interface() + ss = append(ss, formatDescOpt(v.(protoreflect.Descriptor), false, allowMulti && !isEnumValue, nil)) + } + return start + joinStrings(ss, allowMulti && isEnumValue) + end + } +} + +type methodAndName struct { + method reflect.Value + name string +} + +func FormatDesc(s fmt.State, r rune, t protoreflect.Descriptor) { + io.WriteString(s, formatDescOpt(t, true, r == 'v' && (s.Flag('+') || s.Flag('#')), nil)) +} + +func InternalFormatDescOptForTesting(t protoreflect.Descriptor, isRoot, allowMulti bool, record func(string)) string { + return formatDescOpt(t, isRoot, allowMulti, record) +} + +func formatDescOpt(t protoreflect.Descriptor, isRoot, allowMulti bool, record func(string)) string { + rv := reflect.ValueOf(t) + rt := rv.MethodByName("ProtoType").Type().In(0) + + start, end := "{", "}" + if isRoot { + start = rt.Name() + "{" + } + + _, isFile := t.(protoreflect.FileDescriptor) + rs := records{ + allowMulti: allowMulti, + record: record, + } + if t.IsPlaceholder() { + if isFile { + rs.Append(rv, []methodAndName{ + {rv.MethodByName("Path"), "Path"}, + {rv.MethodByName("Package"), "Package"}, + {rv.MethodByName("IsPlaceholder"), "IsPlaceholder"}, + }...) + } else { + rs.Append(rv, []methodAndName{ + {rv.MethodByName("FullName"), "FullName"}, + {rv.MethodByName("IsPlaceholder"), "IsPlaceholder"}, + }...) + } + } else { + switch { + case isFile: + rs.Append(rv, methodAndName{rv.MethodByName("Syntax"), "Syntax"}) + case isRoot: + rs.Append(rv, []methodAndName{ + {rv.MethodByName("Syntax"), "Syntax"}, + {rv.MethodByName("FullName"), "FullName"}, + }...) + default: + rs.Append(rv, methodAndName{rv.MethodByName("Name"), "Name"}) + } + switch t := t.(type) { + case protoreflect.FieldDescriptor: + accessors := []methodAndName{ + {rv.MethodByName("Number"), "Number"}, + {rv.MethodByName("Cardinality"), "Cardinality"}, + {rv.MethodByName("Kind"), "Kind"}, + {rv.MethodByName("HasJSONName"), "HasJSONName"}, + {rv.MethodByName("JSONName"), "JSONName"}, + {rv.MethodByName("HasPresence"), "HasPresence"}, + {rv.MethodByName("IsExtension"), "IsExtension"}, + {rv.MethodByName("IsPacked"), "IsPacked"}, + {rv.MethodByName("IsWeak"), "IsWeak"}, + {rv.MethodByName("IsList"), "IsList"}, + {rv.MethodByName("IsMap"), "IsMap"}, + {rv.MethodByName("MapKey"), "MapKey"}, + {rv.MethodByName("MapValue"), "MapValue"}, + {rv.MethodByName("HasDefault"), "HasDefault"}, + {rv.MethodByName("Default"), "Default"}, + {rv.MethodByName("ContainingOneof"), "ContainingOneof"}, + {rv.MethodByName("ContainingMessage"), "ContainingMessage"}, + {rv.MethodByName("Message"), "Message"}, + {rv.MethodByName("Enum"), "Enum"}, + } + for _, s := range accessors { + switch s.name { + case "MapKey": + if k := t.MapKey(); k != nil { + rs.recs = append(rs.recs, [2]string{"MapKey", k.Kind().String()}) + } + case "MapValue": + if v := t.MapValue(); v != nil { + switch v.Kind() { + case protoreflect.EnumKind: + rs.AppendRecs("MapValue", [2]string{"MapValue", string(v.Enum().FullName())}) + case protoreflect.MessageKind, protoreflect.GroupKind: + rs.AppendRecs("MapValue", [2]string{"MapValue", string(v.Message().FullName())}) + default: + rs.AppendRecs("MapValue", [2]string{"MapValue", v.Kind().String()}) + } + } + case "ContainingOneof": + if od := t.ContainingOneof(); od != nil { + rs.AppendRecs("ContainingOneof", [2]string{"Oneof", string(od.Name())}) + } + case "ContainingMessage": + if t.IsExtension() { + rs.AppendRecs("ContainingMessage", [2]string{"Extendee", string(t.ContainingMessage().FullName())}) + } + case "Message": + if !t.IsMap() { + rs.Append(rv, s) + } + default: + rs.Append(rv, s) + } + } + case protoreflect.OneofDescriptor: + var ss []string + fs := t.Fields() + for i := 0; i < fs.Len(); i++ { + ss = append(ss, string(fs.Get(i).Name())) + } + if len(ss) > 0 { + rs.AppendRecs("Fields", [2]string{"Fields", "[" + joinStrings(ss, false) + "]"}) + } + + case protoreflect.FileDescriptor: + rs.Append(rv, []methodAndName{ + {rv.MethodByName("Path"), "Path"}, + {rv.MethodByName("Package"), "Package"}, + {rv.MethodByName("Imports"), "Imports"}, + {rv.MethodByName("Messages"), "Messages"}, + {rv.MethodByName("Enums"), "Enums"}, + {rv.MethodByName("Extensions"), "Extensions"}, + {rv.MethodByName("Services"), "Services"}, + }...) + + case protoreflect.MessageDescriptor: + rs.Append(rv, []methodAndName{ + {rv.MethodByName("IsMapEntry"), "IsMapEntry"}, + {rv.MethodByName("Fields"), "Fields"}, + {rv.MethodByName("Oneofs"), "Oneofs"}, + {rv.MethodByName("ReservedNames"), "ReservedNames"}, + {rv.MethodByName("ReservedRanges"), "ReservedRanges"}, + {rv.MethodByName("RequiredNumbers"), "RequiredNumbers"}, + {rv.MethodByName("ExtensionRanges"), "ExtensionRanges"}, + {rv.MethodByName("Messages"), "Messages"}, + {rv.MethodByName("Enums"), "Enums"}, + {rv.MethodByName("Extensions"), "Extensions"}, + }...) + + case protoreflect.EnumDescriptor: + rs.Append(rv, []methodAndName{ + {rv.MethodByName("Values"), "Values"}, + {rv.MethodByName("ReservedNames"), "ReservedNames"}, + {rv.MethodByName("ReservedRanges"), "ReservedRanges"}, + {rv.MethodByName("IsClosed"), "IsClosed"}, + }...) + + case protoreflect.EnumValueDescriptor: + rs.Append(rv, []methodAndName{ + {rv.MethodByName("Number"), "Number"}, + }...) + + case protoreflect.ServiceDescriptor: + rs.Append(rv, []methodAndName{ + {rv.MethodByName("Methods"), "Methods"}, + }...) + + case protoreflect.MethodDescriptor: + rs.Append(rv, []methodAndName{ + {rv.MethodByName("Input"), "Input"}, + {rv.MethodByName("Output"), "Output"}, + {rv.MethodByName("IsStreamingClient"), "IsStreamingClient"}, + {rv.MethodByName("IsStreamingServer"), "IsStreamingServer"}, + }...) + } + if m := rv.MethodByName("GoType"); m.IsValid() { + rs.Append(rv, methodAndName{m, "GoType"}) + } + } + return start + rs.Join() + end +} + +type records struct { + recs [][2]string + allowMulti bool + + // record is a function that will be called for every Append() or + // AppendRecs() call, to be used for testing with the + // InternalFormatDescOptForTesting function. + record func(string) +} + +func (rs *records) AppendRecs(fieldName string, newRecs [2]string) { + if rs.record != nil { + rs.record(fieldName) + } + rs.recs = append(rs.recs, newRecs) +} + +func (rs *records) Append(v reflect.Value, accessors ...methodAndName) { + for _, a := range accessors { + if rs.record != nil { + rs.record(a.name) + } + var rv reflect.Value + if a.method.IsValid() { + rv = a.method.Call(nil)[0] + } + if v.Kind() == reflect.Struct && !rv.IsValid() { + rv = v.FieldByName(a.name) + } + if !rv.IsValid() { + panic(fmt.Sprintf("unknown accessor: %v.%s", v.Type(), a.name)) + } + if _, ok := rv.Interface().(protoreflect.Value); ok { + rv = rv.MethodByName("Interface").Call(nil)[0] + if !rv.IsNil() { + rv = rv.Elem() + } + } + + // Ignore zero values. + var isZero bool + switch rv.Kind() { + case reflect.Interface, reflect.Slice: + isZero = rv.IsNil() + case reflect.Bool: + isZero = rv.Bool() == false + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + isZero = rv.Int() == 0 + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + isZero = rv.Uint() == 0 + case reflect.String: + isZero = rv.String() == "" + } + if n, ok := rv.Interface().(list); ok { + isZero = n.Len() == 0 + } + if isZero { + continue + } + + // Format the value. + var s string + v := rv.Interface() + switch v := v.(type) { + case list: + s = formatListOpt(v, false, rs.allowMulti) + case protoreflect.FieldDescriptor, protoreflect.OneofDescriptor, protoreflect.EnumValueDescriptor, protoreflect.MethodDescriptor: + s = string(v.(protoreflect.Descriptor).Name()) + case protoreflect.Descriptor: + s = string(v.FullName()) + case string: + s = strconv.Quote(v) + case []byte: + s = fmt.Sprintf("%q", v) + default: + s = fmt.Sprint(v) + } + rs.recs = append(rs.recs, [2]string{a.name, s}) + } +} + +func (rs *records) Join() string { + var ss []string + + // In single line mode, simply join all records with commas. + if !rs.allowMulti { + for _, r := range rs.recs { + ss = append(ss, r[0]+formatColon(0)+r[1]) + } + return joinStrings(ss, false) + } + + // In allowMulti line mode, align single line records for more readable output. + var maxLen int + flush := func(i int) { + for _, r := range rs.recs[len(ss):i] { + ss = append(ss, r[0]+formatColon(maxLen-len(r[0]))+r[1]) + } + maxLen = 0 + } + for i, r := range rs.recs { + if isMulti := strings.Contains(r[1], "\n"); isMulti { + flush(i) + ss = append(ss, r[0]+formatColon(0)+strings.Join(strings.Split(r[1], "\n"), "\n\t")) + } else if maxLen < len(r[0]) { + maxLen = len(r[0]) + } + } + flush(len(rs.recs)) + return joinStrings(ss, true) +} + +func formatColon(padding int) string { + // Deliberately introduce instability into the debug output to + // discourage users from performing string comparisons. + // This provides us flexibility to change the output in the future. + if detrand.Bool() { + return ":" + strings.Repeat(" ", 1+padding) // use non-breaking spaces (U+00a0) + } else { + return ":" + strings.Repeat(" ", 1+padding) // use regular spaces (U+0020) + } +} + +func joinStrings(ss []string, isMulti bool) string { + if len(ss) == 0 { + return "" + } + if isMulti { + return "\n\t" + strings.Join(ss, "\n\t") + "\n" + } + return strings.Join(ss, ", ") +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/descopts/options.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/descopts/options.go new file mode 100644 index 0000000..024ffeb --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/descopts/options.go @@ -0,0 +1,29 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package descopts contains the nil pointers to concrete descriptor options. +// +// This package exists as a form of reverse dependency injection so that certain +// packages (e.g., internal/filedesc and internal/filetype can avoid a direct +// dependency on the descriptor proto package). +package descopts + +import "google.golang.org/protobuf/reflect/protoreflect" + +// These variables are set by the init function in descriptor.pb.go via logic +// in internal/filetype. In other words, so long as the descriptor proto package +// is linked in, these variables will be populated. +// +// Each variable is populated with a nil pointer to the options struct. +var ( + File protoreflect.ProtoMessage + Enum protoreflect.ProtoMessage + EnumValue protoreflect.ProtoMessage + Message protoreflect.ProtoMessage + Field protoreflect.ProtoMessage + Oneof protoreflect.ProtoMessage + ExtensionRange protoreflect.ProtoMessage + Service protoreflect.ProtoMessage + Method protoreflect.ProtoMessage +) diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/detrand/rand.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/detrand/rand.go new file mode 100644 index 0000000..49c8676 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/detrand/rand.go @@ -0,0 +1,69 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package detrand provides deterministically random functionality. +// +// The pseudo-randomness of these functions is seeded by the program binary +// itself and guarantees that the output does not change within a program, +// while ensuring that the output is unstable across different builds. +package detrand + +import ( + "encoding/binary" + "hash/fnv" + "os" +) + +// Disable disables detrand such that all functions returns the zero value. +// This function is not concurrent-safe and must be called during program init. +func Disable() { + randSeed = 0 +} + +// Bool returns a deterministically random boolean. +func Bool() bool { + return randSeed%2 == 1 +} + +// Intn returns a deterministically random integer between 0 and n-1, inclusive. +func Intn(n int) int { + if n <= 0 { + panic("must be positive") + } + return int(randSeed % uint64(n)) +} + +// randSeed is a best-effort at an approximate hash of the Go binary. +var randSeed = binaryHash() + +func binaryHash() uint64 { + // Open the Go binary. + s, err := os.Executable() + if err != nil { + return 0 + } + f, err := os.Open(s) + if err != nil { + return 0 + } + defer f.Close() + + // Hash the size and several samples of the Go binary. + const numSamples = 8 + var buf [64]byte + h := fnv.New64() + fi, err := f.Stat() + if err != nil { + return 0 + } + binary.LittleEndian.PutUint64(buf[:8], uint64(fi.Size())) + h.Write(buf[:8]) + for i := int64(0); i < numSamples; i++ { + if _, err := f.ReadAt(buf[:], i*fi.Size()/numSamples); err != nil { + return 0 + } + h.Write(buf[:]) + } + return h.Sum64() +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/editiondefaults/defaults.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/editiondefaults/defaults.go new file mode 100644 index 0000000..14656b6 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/editiondefaults/defaults.go @@ -0,0 +1,12 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package editiondefaults contains the binary representation of the editions +// defaults. +package editiondefaults + +import _ "embed" + +//go:embed editions_defaults.binpb +var Defaults []byte diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/editiondefaults/editions_defaults.binpb b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/editiondefaults/editions_defaults.binpb new file mode 100644 index 0000000000000000000000000000000000000000..04696351eeeef14cbbd69fd1f4250530b1fbfd56 GIT binary patch literal 154 zcmX}mI}(5(3Eat$;}$;v literal 0 HcmV?d00001 diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/editionssupport/editions.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/editionssupport/editions.go new file mode 100644 index 0000000..bf1aba0 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/editionssupport/editions.go @@ -0,0 +1,18 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package editionssupport defines constants for editions that are supported. +package editionssupport + +import "google.golang.org/protobuf/types/descriptorpb" + +const ( + Minimum = descriptorpb.Edition_EDITION_PROTO2 + Maximum = descriptorpb.Edition_EDITION_2023 + + // MaximumKnown is the maximum edition that is known to Go Protobuf, but not + // declared as supported. In other words: end users cannot use it, but + // testprotos inside Go Protobuf can. + MaximumKnown = descriptorpb.Edition_EDITION_2024 +) diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/defval/default.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/defval/default.go new file mode 100644 index 0000000..328dc73 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/defval/default.go @@ -0,0 +1,213 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package defval marshals and unmarshals textual forms of default values. +// +// This package handles both the form historically used in Go struct field tags +// and also the form used by google.protobuf.FieldDescriptorProto.default_value +// since they differ in superficial ways. +package defval + +import ( + "fmt" + "math" + "strconv" + + ptext "google.golang.org/protobuf/internal/encoding/text" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/reflect/protoreflect" +) + +// Format is the serialization format used to represent the default value. +type Format int + +const ( + _ Format = iota + + // Descriptor uses the serialization format that protoc uses with the + // google.protobuf.FieldDescriptorProto.default_value field. + Descriptor + + // GoTag uses the historical serialization format in Go struct field tags. + GoTag +) + +// Unmarshal deserializes the default string s according to the given kind k. +// When k is an enum, a list of enum value descriptors must be provided. +func Unmarshal(s string, k protoreflect.Kind, evs protoreflect.EnumValueDescriptors, f Format) (protoreflect.Value, protoreflect.EnumValueDescriptor, error) { + switch k { + case protoreflect.BoolKind: + if f == GoTag { + switch s { + case "1": + return protoreflect.ValueOfBool(true), nil, nil + case "0": + return protoreflect.ValueOfBool(false), nil, nil + } + } else { + switch s { + case "true": + return protoreflect.ValueOfBool(true), nil, nil + case "false": + return protoreflect.ValueOfBool(false), nil, nil + } + } + case protoreflect.EnumKind: + if f == GoTag { + // Go tags use the numeric form of the enum value. + if n, err := strconv.ParseInt(s, 10, 32); err == nil { + if ev := evs.ByNumber(protoreflect.EnumNumber(n)); ev != nil { + return protoreflect.ValueOfEnum(ev.Number()), ev, nil + } + } + } else { + // Descriptor default_value use the enum identifier. + ev := evs.ByName(protoreflect.Name(s)) + if ev != nil { + return protoreflect.ValueOfEnum(ev.Number()), ev, nil + } + } + case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind: + if v, err := strconv.ParseInt(s, 10, 32); err == nil { + return protoreflect.ValueOfInt32(int32(v)), nil, nil + } + case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind: + if v, err := strconv.ParseInt(s, 10, 64); err == nil { + return protoreflect.ValueOfInt64(int64(v)), nil, nil + } + case protoreflect.Uint32Kind, protoreflect.Fixed32Kind: + if v, err := strconv.ParseUint(s, 10, 32); err == nil { + return protoreflect.ValueOfUint32(uint32(v)), nil, nil + } + case protoreflect.Uint64Kind, protoreflect.Fixed64Kind: + if v, err := strconv.ParseUint(s, 10, 64); err == nil { + return protoreflect.ValueOfUint64(uint64(v)), nil, nil + } + case protoreflect.FloatKind, protoreflect.DoubleKind: + var v float64 + var err error + switch s { + case "-inf": + v = math.Inf(-1) + case "inf": + v = math.Inf(+1) + case "nan": + v = math.NaN() + default: + v, err = strconv.ParseFloat(s, 64) + } + if err == nil { + if k == protoreflect.FloatKind { + return protoreflect.ValueOfFloat32(float32(v)), nil, nil + } else { + return protoreflect.ValueOfFloat64(float64(v)), nil, nil + } + } + case protoreflect.StringKind: + // String values are already unescaped and can be used as is. + return protoreflect.ValueOfString(s), nil, nil + case protoreflect.BytesKind: + if b, ok := unmarshalBytes(s); ok { + return protoreflect.ValueOfBytes(b), nil, nil + } + } + return protoreflect.Value{}, nil, errors.New("could not parse value for %v: %q", k, s) +} + +// Marshal serializes v as the default string according to the given kind k. +// When specifying the Descriptor format for an enum kind, the associated +// enum value descriptor must be provided. +func Marshal(v protoreflect.Value, ev protoreflect.EnumValueDescriptor, k protoreflect.Kind, f Format) (string, error) { + switch k { + case protoreflect.BoolKind: + if f == GoTag { + if v.Bool() { + return "1", nil + } else { + return "0", nil + } + } else { + if v.Bool() { + return "true", nil + } else { + return "false", nil + } + } + case protoreflect.EnumKind: + if f == GoTag { + return strconv.FormatInt(int64(v.Enum()), 10), nil + } else { + return string(ev.Name()), nil + } + case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind, protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind: + return strconv.FormatInt(v.Int(), 10), nil + case protoreflect.Uint32Kind, protoreflect.Fixed32Kind, protoreflect.Uint64Kind, protoreflect.Fixed64Kind: + return strconv.FormatUint(v.Uint(), 10), nil + case protoreflect.FloatKind, protoreflect.DoubleKind: + f := v.Float() + switch { + case math.IsInf(f, -1): + return "-inf", nil + case math.IsInf(f, +1): + return "inf", nil + case math.IsNaN(f): + return "nan", nil + default: + if k == protoreflect.FloatKind { + return strconv.FormatFloat(f, 'g', -1, 32), nil + } else { + return strconv.FormatFloat(f, 'g', -1, 64), nil + } + } + case protoreflect.StringKind: + // String values are serialized as is without any escaping. + return v.String(), nil + case protoreflect.BytesKind: + if s, ok := marshalBytes(v.Bytes()); ok { + return s, nil + } + } + return "", errors.New("could not format value for %v: %v", k, v) +} + +// unmarshalBytes deserializes bytes by applying C unescaping. +func unmarshalBytes(s string) ([]byte, bool) { + // Bytes values use the same escaping as the text format, + // however they lack the surrounding double quotes. + v, err := ptext.UnmarshalString(`"` + s + `"`) + if err != nil { + return nil, false + } + return []byte(v), true +} + +// marshalBytes serializes bytes by using C escaping. +// To match the exact output of protoc, this is identical to the +// CEscape function in strutil.cc of the protoc source code. +func marshalBytes(b []byte) (string, bool) { + var s []byte + for _, c := range b { + switch c { + case '\n': + s = append(s, `\n`...) + case '\r': + s = append(s, `\r`...) + case '\t': + s = append(s, `\t`...) + case '"': + s = append(s, `\"`...) + case '\'': + s = append(s, `\'`...) + case '\\': + s = append(s, `\\`...) + default: + if printableASCII := c >= 0x20 && c <= 0x7e; printableASCII { + s = append(s, c) + } else { + s = append(s, fmt.Sprintf(`\%03o`, c)...) + } + } + } + return string(s), true +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/json/decode.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/json/decode.go new file mode 100644 index 0000000..ea1d3e6 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/json/decode.go @@ -0,0 +1,340 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package json + +import ( + "bytes" + "fmt" + "io" + "regexp" + "unicode/utf8" + + "google.golang.org/protobuf/internal/errors" +) + +// call specifies which Decoder method was invoked. +type call uint8 + +const ( + readCall call = iota + peekCall +) + +const unexpectedFmt = "unexpected token %s" + +// ErrUnexpectedEOF means that EOF was encountered in the middle of the input. +var ErrUnexpectedEOF = errors.New("%v", io.ErrUnexpectedEOF) + +// Decoder is a token-based JSON decoder. +type Decoder struct { + // lastCall is last method called, either readCall or peekCall. + // Initial value is readCall. + lastCall call + + // lastToken contains the last read token. + lastToken Token + + // lastErr contains the last read error. + lastErr error + + // openStack is a stack containing ObjectOpen and ArrayOpen values. The + // top of stack represents the object or the array the current value is + // directly located in. + openStack []Kind + + // orig is used in reporting line and column. + orig []byte + // in contains the unconsumed input. + in []byte +} + +// NewDecoder returns a Decoder to read the given []byte. +func NewDecoder(b []byte) *Decoder { + return &Decoder{orig: b, in: b} +} + +// Peek looks ahead and returns the next token kind without advancing a read. +func (d *Decoder) Peek() (Token, error) { + defer func() { d.lastCall = peekCall }() + if d.lastCall == readCall { + d.lastToken, d.lastErr = d.Read() + } + return d.lastToken, d.lastErr +} + +// Read returns the next JSON token. +// It will return an error if there is no valid token. +func (d *Decoder) Read() (Token, error) { + const scalar = Null | Bool | Number | String + + defer func() { d.lastCall = readCall }() + if d.lastCall == peekCall { + return d.lastToken, d.lastErr + } + + tok, err := d.parseNext() + if err != nil { + return Token{}, err + } + + switch tok.kind { + case EOF: + if len(d.openStack) != 0 || + d.lastToken.kind&scalar|ObjectClose|ArrayClose == 0 { + return Token{}, ErrUnexpectedEOF + } + + case Null: + if !d.isValueNext() { + return Token{}, d.newSyntaxError(tok.pos, unexpectedFmt, tok.RawString()) + } + + case Bool, Number: + if !d.isValueNext() { + return Token{}, d.newSyntaxError(tok.pos, unexpectedFmt, tok.RawString()) + } + + case String: + if d.isValueNext() { + break + } + // This string token should only be for a field name. + if d.lastToken.kind&(ObjectOpen|comma) == 0 { + return Token{}, d.newSyntaxError(tok.pos, unexpectedFmt, tok.RawString()) + } + if len(d.in) == 0 { + return Token{}, ErrUnexpectedEOF + } + if c := d.in[0]; c != ':' { + return Token{}, d.newSyntaxError(d.currPos(), `unexpected character %s, missing ":" after field name`, string(c)) + } + tok.kind = Name + d.consume(1) + + case ObjectOpen, ArrayOpen: + if !d.isValueNext() { + return Token{}, d.newSyntaxError(tok.pos, unexpectedFmt, tok.RawString()) + } + d.openStack = append(d.openStack, tok.kind) + + case ObjectClose: + if len(d.openStack) == 0 || + d.lastToken.kind&(Name|comma) != 0 || + d.openStack[len(d.openStack)-1] != ObjectOpen { + return Token{}, d.newSyntaxError(tok.pos, unexpectedFmt, tok.RawString()) + } + d.openStack = d.openStack[:len(d.openStack)-1] + + case ArrayClose: + if len(d.openStack) == 0 || + d.lastToken.kind == comma || + d.openStack[len(d.openStack)-1] != ArrayOpen { + return Token{}, d.newSyntaxError(tok.pos, unexpectedFmt, tok.RawString()) + } + d.openStack = d.openStack[:len(d.openStack)-1] + + case comma: + if len(d.openStack) == 0 || + d.lastToken.kind&(scalar|ObjectClose|ArrayClose) == 0 { + return Token{}, d.newSyntaxError(tok.pos, unexpectedFmt, tok.RawString()) + } + } + + // Update d.lastToken only after validating token to be in the right sequence. + d.lastToken = tok + + if d.lastToken.kind == comma { + return d.Read() + } + return tok, nil +} + +// Any sequence that looks like a non-delimiter (for error reporting). +var errRegexp = regexp.MustCompile(`^([-+._a-zA-Z0-9]{1,32}|.)`) + +// parseNext parses for the next JSON token. It returns a Token object for +// different types, except for Name. It does not handle whether the next token +// is in a valid sequence or not. +func (d *Decoder) parseNext() (Token, error) { + // Trim leading spaces. + d.consume(0) + + in := d.in + if len(in) == 0 { + return d.consumeToken(EOF, 0), nil + } + + switch in[0] { + case 'n': + if n := matchWithDelim("null", in); n != 0 { + return d.consumeToken(Null, n), nil + } + + case 't': + if n := matchWithDelim("true", in); n != 0 { + return d.consumeBoolToken(true, n), nil + } + + case 'f': + if n := matchWithDelim("false", in); n != 0 { + return d.consumeBoolToken(false, n), nil + } + + case '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': + if n, ok := parseNumber(in); ok { + return d.consumeToken(Number, n), nil + } + + case '"': + s, n, err := d.parseString(in) + if err != nil { + return Token{}, err + } + return d.consumeStringToken(s, n), nil + + case '{': + return d.consumeToken(ObjectOpen, 1), nil + + case '}': + return d.consumeToken(ObjectClose, 1), nil + + case '[': + return d.consumeToken(ArrayOpen, 1), nil + + case ']': + return d.consumeToken(ArrayClose, 1), nil + + case ',': + return d.consumeToken(comma, 1), nil + } + return Token{}, d.newSyntaxError(d.currPos(), "invalid value %s", errRegexp.Find(in)) +} + +// newSyntaxError returns an error with line and column information useful for +// syntax errors. +func (d *Decoder) newSyntaxError(pos int, f string, x ...any) error { + e := errors.New(f, x...) + line, column := d.Position(pos) + return errors.New("syntax error (line %d:%d): %v", line, column, e) +} + +// Position returns line and column number of given index of the original input. +// It will panic if index is out of range. +func (d *Decoder) Position(idx int) (line int, column int) { + b := d.orig[:idx] + line = bytes.Count(b, []byte("\n")) + 1 + if i := bytes.LastIndexByte(b, '\n'); i >= 0 { + b = b[i+1:] + } + column = utf8.RuneCount(b) + 1 // ignore multi-rune characters + return line, column +} + +// currPos returns the current index position of d.in from d.orig. +func (d *Decoder) currPos() int { + return len(d.orig) - len(d.in) +} + +// matchWithDelim matches s with the input b and verifies that the match +// terminates with a delimiter of some form (e.g., r"[^-+_.a-zA-Z0-9]"). +// As a special case, EOF is considered a delimiter. It returns the length of s +// if there is a match, else 0. +func matchWithDelim(s string, b []byte) int { + if !bytes.HasPrefix(b, []byte(s)) { + return 0 + } + + n := len(s) + if n < len(b) && isNotDelim(b[n]) { + return 0 + } + return n +} + +// isNotDelim returns true if given byte is a not delimiter character. +func isNotDelim(c byte) bool { + return (c == '-' || c == '+' || c == '.' || c == '_' || + ('a' <= c && c <= 'z') || + ('A' <= c && c <= 'Z') || + ('0' <= c && c <= '9')) +} + +// consume consumes n bytes of input and any subsequent whitespace. +func (d *Decoder) consume(n int) { + d.in = d.in[n:] + for len(d.in) > 0 { + switch d.in[0] { + case ' ', '\n', '\r', '\t': + d.in = d.in[1:] + default: + return + } + } +} + +// isValueNext returns true if next type should be a JSON value: Null, +// Number, String or Bool. +func (d *Decoder) isValueNext() bool { + if len(d.openStack) == 0 { + return d.lastToken.kind == 0 + } + + start := d.openStack[len(d.openStack)-1] + switch start { + case ObjectOpen: + return d.lastToken.kind&Name != 0 + case ArrayOpen: + return d.lastToken.kind&(ArrayOpen|comma) != 0 + } + panic(fmt.Sprintf( + "unreachable logic in Decoder.isValueNext, lastToken.kind: %v, openStack: %v", + d.lastToken.kind, start)) +} + +// consumeToken constructs a Token for given Kind with raw value derived from +// current d.in and given size, and consumes the given size-length of it. +func (d *Decoder) consumeToken(kind Kind, size int) Token { + tok := Token{ + kind: kind, + raw: d.in[:size], + pos: len(d.orig) - len(d.in), + } + d.consume(size) + return tok +} + +// consumeBoolToken constructs a Token for a Bool kind with raw value derived from +// current d.in and given size. +func (d *Decoder) consumeBoolToken(b bool, size int) Token { + tok := Token{ + kind: Bool, + raw: d.in[:size], + pos: len(d.orig) - len(d.in), + boo: b, + } + d.consume(size) + return tok +} + +// consumeStringToken constructs a Token for a String kind with raw value derived +// from current d.in and given size. +func (d *Decoder) consumeStringToken(s string, size int) Token { + tok := Token{ + kind: String, + raw: d.in[:size], + pos: len(d.orig) - len(d.in), + str: s, + } + d.consume(size) + return tok +} + +// Clone returns a copy of the Decoder for use in reading ahead the next JSON +// object, array or other values without affecting current Decoder. +func (d *Decoder) Clone() *Decoder { + ret := *d + ret.openStack = append([]Kind(nil), ret.openStack...) + return &ret +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/json/decode_number.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/json/decode_number.go new file mode 100644 index 0000000..2999d71 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/json/decode_number.go @@ -0,0 +1,254 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package json + +import ( + "bytes" + "strconv" +) + +// parseNumber reads the given []byte for a valid JSON number. If it is valid, +// it returns the number of bytes. Parsing logic follows the definition in +// https://tools.ietf.org/html/rfc7159#section-6, and is based off +// encoding/json.isValidNumber function. +func parseNumber(input []byte) (int, bool) { + var n int + + s := input + if len(s) == 0 { + return 0, false + } + + // Optional - + if s[0] == '-' { + s = s[1:] + n++ + if len(s) == 0 { + return 0, false + } + } + + // Digits + switch { + case s[0] == '0': + s = s[1:] + n++ + + case '1' <= s[0] && s[0] <= '9': + s = s[1:] + n++ + for len(s) > 0 && '0' <= s[0] && s[0] <= '9' { + s = s[1:] + n++ + } + + default: + return 0, false + } + + // . followed by 1 or more digits. + if len(s) >= 2 && s[0] == '.' && '0' <= s[1] && s[1] <= '9' { + s = s[2:] + n += 2 + for len(s) > 0 && '0' <= s[0] && s[0] <= '9' { + s = s[1:] + n++ + } + } + + // e or E followed by an optional - or + and + // 1 or more digits. + if len(s) >= 2 && (s[0] == 'e' || s[0] == 'E') { + s = s[1:] + n++ + if s[0] == '+' || s[0] == '-' { + s = s[1:] + n++ + if len(s) == 0 { + return 0, false + } + } + for len(s) > 0 && '0' <= s[0] && s[0] <= '9' { + s = s[1:] + n++ + } + } + + // Check that next byte is a delimiter or it is at the end. + if n < len(input) && isNotDelim(input[n]) { + return 0, false + } + + return n, true +} + +// numberParts is the result of parsing out a valid JSON number. It contains +// the parts of a number. The parts are used for integer conversion. +type numberParts struct { + neg bool + intp []byte + frac []byte + exp []byte +} + +// parseNumber constructs numberParts from given []byte. The logic here is +// similar to consumeNumber above with the difference of having to construct +// numberParts. The slice fields in numberParts are subslices of the input. +func parseNumberParts(input []byte) (numberParts, bool) { + var neg bool + var intp []byte + var frac []byte + var exp []byte + + s := input + if len(s) == 0 { + return numberParts{}, false + } + + // Optional - + if s[0] == '-' { + neg = true + s = s[1:] + if len(s) == 0 { + return numberParts{}, false + } + } + + // Digits + switch { + case s[0] == '0': + // Skip first 0 and no need to store. + s = s[1:] + + case '1' <= s[0] && s[0] <= '9': + intp = s + n := 1 + s = s[1:] + for len(s) > 0 && '0' <= s[0] && s[0] <= '9' { + s = s[1:] + n++ + } + intp = intp[:n] + + default: + return numberParts{}, false + } + + // . followed by 1 or more digits. + if len(s) >= 2 && s[0] == '.' && '0' <= s[1] && s[1] <= '9' { + frac = s[1:] + n := 1 + s = s[2:] + for len(s) > 0 && '0' <= s[0] && s[0] <= '9' { + s = s[1:] + n++ + } + frac = frac[:n] + } + + // e or E followed by an optional - or + and + // 1 or more digits. + if len(s) >= 2 && (s[0] == 'e' || s[0] == 'E') { + s = s[1:] + exp = s + n := 0 + if s[0] == '+' || s[0] == '-' { + s = s[1:] + n++ + if len(s) == 0 { + return numberParts{}, false + } + } + for len(s) > 0 && '0' <= s[0] && s[0] <= '9' { + s = s[1:] + n++ + } + exp = exp[:n] + } + + return numberParts{ + neg: neg, + intp: intp, + frac: bytes.TrimRight(frac, "0"), // Remove unnecessary 0s to the right. + exp: exp, + }, true +} + +// normalizeToIntString returns an integer string in normal form without the +// E-notation for given numberParts. It will return false if it is not an +// integer or if the exponent exceeds than max/min int value. +func normalizeToIntString(n numberParts) (string, bool) { + intpSize := len(n.intp) + fracSize := len(n.frac) + + if intpSize == 0 && fracSize == 0 { + return "0", true + } + + var exp int + if len(n.exp) > 0 { + i, err := strconv.ParseInt(string(n.exp), 10, 32) + if err != nil { + return "", false + } + exp = int(i) + } + + var num []byte + if exp >= 0 { + // For positive E, shift fraction digits into integer part and also pad + // with zeroes as needed. + + // If there are more digits in fraction than the E value, then the + // number is not an integer. + if fracSize > exp { + return "", false + } + + // Make sure resulting digits are within max value limit to avoid + // unnecessarily constructing a large byte slice that may simply fail + // later on. + const maxDigits = 20 // Max uint64 value has 20 decimal digits. + if intpSize+exp > maxDigits { + return "", false + } + + // Set cap to make a copy of integer part when appended. + num = n.intp[:len(n.intp):len(n.intp)] + num = append(num, n.frac...) + for i := 0; i < exp-fracSize; i++ { + num = append(num, '0') + } + } else { + // For negative E, shift digits in integer part out. + + // If there are fractions, then the number is not an integer. + if fracSize > 0 { + return "", false + } + + // index is where the decimal point will be after adjusting for negative + // exponent. + index := intpSize + exp + if index < 0 { + return "", false + } + + num = n.intp + // If any of the digits being shifted to the right of the decimal point + // is non-zero, then the number is not an integer. + for i := index; i < intpSize; i++ { + if num[i] != '0' { + return "", false + } + } + num = num[:index] + } + + if n.neg { + return "-" + string(num), true + } + return string(num), true +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/json/decode_string.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/json/decode_string.go new file mode 100644 index 0000000..f7fea7d --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/json/decode_string.go @@ -0,0 +1,91 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package json + +import ( + "strconv" + "unicode" + "unicode/utf16" + "unicode/utf8" + + "google.golang.org/protobuf/internal/strs" +) + +func (d *Decoder) parseString(in []byte) (string, int, error) { + in0 := in + if len(in) == 0 { + return "", 0, ErrUnexpectedEOF + } + if in[0] != '"' { + return "", 0, d.newSyntaxError(d.currPos(), "invalid character %q at start of string", in[0]) + } + in = in[1:] + i := indexNeedEscapeInBytes(in) + in, out := in[i:], in[:i:i] // set cap to prevent mutations + for len(in) > 0 { + switch r, n := utf8.DecodeRune(in); { + case r == utf8.RuneError && n == 1: + return "", 0, d.newSyntaxError(d.currPos(), "invalid UTF-8 in string") + case r < ' ': + return "", 0, d.newSyntaxError(d.currPos(), "invalid character %q in string", r) + case r == '"': + in = in[1:] + n := len(in0) - len(in) + return string(out), n, nil + case r == '\\': + if len(in) < 2 { + return "", 0, ErrUnexpectedEOF + } + switch r := in[1]; r { + case '"', '\\', '/': + in, out = in[2:], append(out, r) + case 'b': + in, out = in[2:], append(out, '\b') + case 'f': + in, out = in[2:], append(out, '\f') + case 'n': + in, out = in[2:], append(out, '\n') + case 'r': + in, out = in[2:], append(out, '\r') + case 't': + in, out = in[2:], append(out, '\t') + case 'u': + if len(in) < 6 { + return "", 0, ErrUnexpectedEOF + } + v, err := strconv.ParseUint(string(in[2:6]), 16, 16) + if err != nil { + return "", 0, d.newSyntaxError(d.currPos(), "invalid escape code %q in string", in[:6]) + } + in = in[6:] + + r := rune(v) + if utf16.IsSurrogate(r) { + if len(in) < 6 { + return "", 0, ErrUnexpectedEOF + } + v, err := strconv.ParseUint(string(in[2:6]), 16, 16) + r = utf16.DecodeRune(r, rune(v)) + if in[0] != '\\' || in[1] != 'u' || + r == unicode.ReplacementChar || err != nil { + return "", 0, d.newSyntaxError(d.currPos(), "invalid escape code %q in string", in[:6]) + } + in = in[6:] + } + out = append(out, string(r)...) + default: + return "", 0, d.newSyntaxError(d.currPos(), "invalid escape code %q in string", in[:2]) + } + default: + i := indexNeedEscapeInBytes(in[n:]) + in, out = in[n+i:], append(out, in[:n+i]...) + } + } + return "", 0, ErrUnexpectedEOF +} + +// indexNeedEscapeInBytes returns the index of the character that needs +// escaping. If no characters need escaping, this returns the input length. +func indexNeedEscapeInBytes(b []byte) int { return indexNeedEscapeInString(strs.UnsafeString(b)) } diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/json/decode_token.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/json/decode_token.go new file mode 100644 index 0000000..50578d6 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/json/decode_token.go @@ -0,0 +1,192 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package json + +import ( + "bytes" + "fmt" + "strconv" +) + +// Kind represents a token kind expressible in the JSON format. +type Kind uint16 + +const ( + Invalid Kind = (1 << iota) / 2 + EOF + Null + Bool + Number + String + Name + ObjectOpen + ObjectClose + ArrayOpen + ArrayClose + + // comma is only for parsing in between tokens and + // does not need to be exported. + comma +) + +func (k Kind) String() string { + switch k { + case EOF: + return "eof" + case Null: + return "null" + case Bool: + return "bool" + case Number: + return "number" + case String: + return "string" + case ObjectOpen: + return "{" + case ObjectClose: + return "}" + case Name: + return "name" + case ArrayOpen: + return "[" + case ArrayClose: + return "]" + case comma: + return "," + } + return "" +} + +// Token provides a parsed token kind and value. +// +// Values are provided by the difference accessor methods. The accessor methods +// Name, Bool, and ParsedString will panic if called on the wrong kind. There +// are different accessor methods for the Number kind for converting to the +// appropriate Go numeric type and those methods have the ok return value. +type Token struct { + // Token kind. + kind Kind + // pos provides the position of the token in the original input. + pos int + // raw bytes of the serialized token. + // This is a subslice into the original input. + raw []byte + // boo is parsed boolean value. + boo bool + // str is parsed string value. + str string +} + +// Kind returns the token kind. +func (t Token) Kind() Kind { + return t.kind +} + +// RawString returns the read value in string. +func (t Token) RawString() string { + return string(t.raw) +} + +// Pos returns the token position from the input. +func (t Token) Pos() int { + return t.pos +} + +// Name returns the object name if token is Name, else it panics. +func (t Token) Name() string { + if t.kind == Name { + return t.str + } + panic(fmt.Sprintf("Token is not a Name: %v", t.RawString())) +} + +// Bool returns the bool value if token kind is Bool, else it panics. +func (t Token) Bool() bool { + if t.kind == Bool { + return t.boo + } + panic(fmt.Sprintf("Token is not a Bool: %v", t.RawString())) +} + +// ParsedString returns the string value for a JSON string token or the read +// value in string if token is not a string. +func (t Token) ParsedString() string { + if t.kind == String { + return t.str + } + panic(fmt.Sprintf("Token is not a String: %v", t.RawString())) +} + +// Float returns the floating-point number if token kind is Number. +// +// The floating-point precision is specified by the bitSize parameter: 32 for +// float32 or 64 for float64. If bitSize=32, the result still has type float64, +// but it will be convertible to float32 without changing its value. It will +// return false if the number exceeds the floating point limits for given +// bitSize. +func (t Token) Float(bitSize int) (float64, bool) { + if t.kind != Number { + return 0, false + } + f, err := strconv.ParseFloat(t.RawString(), bitSize) + if err != nil { + return 0, false + } + return f, true +} + +// Int returns the signed integer number if token is Number. +// +// The given bitSize specifies the integer type that the result must fit into. +// It returns false if the number is not an integer value or if the result +// exceeds the limits for given bitSize. +func (t Token) Int(bitSize int) (int64, bool) { + s, ok := t.getIntStr() + if !ok { + return 0, false + } + n, err := strconv.ParseInt(s, 10, bitSize) + if err != nil { + return 0, false + } + return n, true +} + +// Uint returns the signed integer number if token is Number. +// +// The given bitSize specifies the unsigned integer type that the result must +// fit into. It returns false if the number is not an unsigned integer value +// or if the result exceeds the limits for given bitSize. +func (t Token) Uint(bitSize int) (uint64, bool) { + s, ok := t.getIntStr() + if !ok { + return 0, false + } + n, err := strconv.ParseUint(s, 10, bitSize) + if err != nil { + return 0, false + } + return n, true +} + +func (t Token) getIntStr() (string, bool) { + if t.kind != Number { + return "", false + } + parts, ok := parseNumberParts(t.raw) + if !ok { + return "", false + } + return normalizeToIntString(parts) +} + +// TokenEquals returns true if given Tokens are equal, else false. +func TokenEquals(x, y Token) bool { + return x.kind == y.kind && + x.pos == y.pos && + bytes.Equal(x.raw, y.raw) && + x.boo == y.boo && + x.str == y.str +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/json/encode.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/json/encode.go new file mode 100644 index 0000000..934f2dc --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/json/encode.go @@ -0,0 +1,278 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package json + +import ( + "math" + "math/bits" + "strconv" + "strings" + "unicode/utf8" + + "google.golang.org/protobuf/internal/detrand" + "google.golang.org/protobuf/internal/errors" +) + +// kind represents an encoding type. +type kind uint8 + +const ( + _ kind = (1 << iota) / 2 + name + scalar + objectOpen + objectClose + arrayOpen + arrayClose +) + +// Encoder provides methods to write out JSON constructs and values. The user is +// responsible for producing valid sequences of JSON constructs and values. +type Encoder struct { + indent string + lastKind kind + indents []byte + out []byte +} + +// NewEncoder returns an Encoder. +// +// If indent is a non-empty string, it causes every entry for an Array or Object +// to be preceded by the indent and trailed by a newline. +func NewEncoder(buf []byte, indent string) (*Encoder, error) { + e := &Encoder{ + out: buf, + } + if len(indent) > 0 { + if strings.Trim(indent, " \t") != "" { + return nil, errors.New("indent may only be composed of space or tab characters") + } + e.indent = indent + } + return e, nil +} + +// Bytes returns the content of the written bytes. +func (e *Encoder) Bytes() []byte { + return e.out +} + +// WriteNull writes out the null value. +func (e *Encoder) WriteNull() { + e.prepareNext(scalar) + e.out = append(e.out, "null"...) +} + +// WriteBool writes out the given boolean value. +func (e *Encoder) WriteBool(b bool) { + e.prepareNext(scalar) + if b { + e.out = append(e.out, "true"...) + } else { + e.out = append(e.out, "false"...) + } +} + +// WriteString writes out the given string in JSON string value. Returns error +// if input string contains invalid UTF-8. +func (e *Encoder) WriteString(s string) error { + e.prepareNext(scalar) + var err error + if e.out, err = appendString(e.out, s); err != nil { + return err + } + return nil +} + +// Sentinel error used for indicating invalid UTF-8. +var errInvalidUTF8 = errors.New("invalid UTF-8") + +func appendString(out []byte, in string) ([]byte, error) { + out = append(out, '"') + i := indexNeedEscapeInString(in) + in, out = in[i:], append(out, in[:i]...) + for len(in) > 0 { + switch r, n := utf8.DecodeRuneInString(in); { + case r == utf8.RuneError && n == 1: + return out, errInvalidUTF8 + case r < ' ' || r == '"' || r == '\\': + out = append(out, '\\') + switch r { + case '"', '\\': + out = append(out, byte(r)) + case '\b': + out = append(out, 'b') + case '\f': + out = append(out, 'f') + case '\n': + out = append(out, 'n') + case '\r': + out = append(out, 'r') + case '\t': + out = append(out, 't') + default: + out = append(out, 'u') + out = append(out, "0000"[1+(bits.Len32(uint32(r))-1)/4:]...) + out = strconv.AppendUint(out, uint64(r), 16) + } + in = in[n:] + default: + i := indexNeedEscapeInString(in[n:]) + in, out = in[n+i:], append(out, in[:n+i]...) + } + } + out = append(out, '"') + return out, nil +} + +// indexNeedEscapeInString returns the index of the character that needs +// escaping. If no characters need escaping, this returns the input length. +func indexNeedEscapeInString(s string) int { + for i, r := range s { + if r < ' ' || r == '\\' || r == '"' || r == utf8.RuneError { + return i + } + } + return len(s) +} + +// WriteFloat writes out the given float and bitSize in JSON number value. +func (e *Encoder) WriteFloat(n float64, bitSize int) { + e.prepareNext(scalar) + e.out = appendFloat(e.out, n, bitSize) +} + +// appendFloat formats given float in bitSize, and appends to the given []byte. +func appendFloat(out []byte, n float64, bitSize int) []byte { + switch { + case math.IsNaN(n): + return append(out, `"NaN"`...) + case math.IsInf(n, +1): + return append(out, `"Infinity"`...) + case math.IsInf(n, -1): + return append(out, `"-Infinity"`...) + } + + // JSON number formatting logic based on encoding/json. + // See floatEncoder.encode for reference. + fmt := byte('f') + if abs := math.Abs(n); abs != 0 { + if bitSize == 64 && (abs < 1e-6 || abs >= 1e21) || + bitSize == 32 && (float32(abs) < 1e-6 || float32(abs) >= 1e21) { + fmt = 'e' + } + } + out = strconv.AppendFloat(out, n, fmt, -1, bitSize) + if fmt == 'e' { + n := len(out) + if n >= 4 && out[n-4] == 'e' && out[n-3] == '-' && out[n-2] == '0' { + out[n-2] = out[n-1] + out = out[:n-1] + } + } + return out +} + +// WriteInt writes out the given signed integer in JSON number value. +func (e *Encoder) WriteInt(n int64) { + e.prepareNext(scalar) + e.out = strconv.AppendInt(e.out, n, 10) +} + +// WriteUint writes out the given unsigned integer in JSON number value. +func (e *Encoder) WriteUint(n uint64) { + e.prepareNext(scalar) + e.out = strconv.AppendUint(e.out, n, 10) +} + +// StartObject writes out the '{' symbol. +func (e *Encoder) StartObject() { + e.prepareNext(objectOpen) + e.out = append(e.out, '{') +} + +// EndObject writes out the '}' symbol. +func (e *Encoder) EndObject() { + e.prepareNext(objectClose) + e.out = append(e.out, '}') +} + +// WriteName writes out the given string in JSON string value and the name +// separator ':'. Returns error if input string contains invalid UTF-8, which +// should not be likely as protobuf field names should be valid. +func (e *Encoder) WriteName(s string) error { + e.prepareNext(name) + var err error + // Append to output regardless of error. + e.out, err = appendString(e.out, s) + e.out = append(e.out, ':') + return err +} + +// StartArray writes out the '[' symbol. +func (e *Encoder) StartArray() { + e.prepareNext(arrayOpen) + e.out = append(e.out, '[') +} + +// EndArray writes out the ']' symbol. +func (e *Encoder) EndArray() { + e.prepareNext(arrayClose) + e.out = append(e.out, ']') +} + +// prepareNext adds possible comma and indentation for the next value based +// on last type and indent option. It also updates lastKind to next. +func (e *Encoder) prepareNext(next kind) { + defer func() { + // Set lastKind to next. + e.lastKind = next + }() + + if len(e.indent) == 0 { + // Need to add comma on the following condition. + if e.lastKind&(scalar|objectClose|arrayClose) != 0 && + next&(name|scalar|objectOpen|arrayOpen) != 0 { + e.out = append(e.out, ',') + // For single-line output, add a random extra space after each + // comma to make output unstable. + if detrand.Bool() { + e.out = append(e.out, ' ') + } + } + return + } + + switch { + case e.lastKind&(objectOpen|arrayOpen) != 0: + // If next type is NOT closing, add indent and newline. + if next&(objectClose|arrayClose) == 0 { + e.indents = append(e.indents, e.indent...) + e.out = append(e.out, '\n') + e.out = append(e.out, e.indents...) + } + + case e.lastKind&(scalar|objectClose|arrayClose) != 0: + switch { + // If next type is either a value or name, add comma and newline. + case next&(name|scalar|objectOpen|arrayOpen) != 0: + e.out = append(e.out, ',', '\n') + + // If next type is a closing object or array, adjust indentation. + case next&(objectClose|arrayClose) != 0: + e.indents = e.indents[:len(e.indents)-len(e.indent)] + e.out = append(e.out, '\n') + } + e.out = append(e.out, e.indents...) + + case e.lastKind&name != 0: + e.out = append(e.out, ' ') + // For multi-line output, add a random extra space after key: to make + // output unstable. + if detrand.Bool() { + e.out = append(e.out, ' ') + } + } +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/messageset/messageset.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/messageset/messageset.go new file mode 100644 index 0000000..a6693f0 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/messageset/messageset.go @@ -0,0 +1,242 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package messageset encodes and decodes the obsolete MessageSet wire format. +package messageset + +import ( + "math" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/reflect/protoreflect" +) + +// The MessageSet wire format is equivalent to a message defined as follows, +// where each Item defines an extension field with a field number of 'type_id' +// and content of 'message'. MessageSet extensions must be non-repeated message +// fields. +// +// message MessageSet { +// repeated group Item = 1 { +// required int32 type_id = 2; +// required string message = 3; +// } +// } +const ( + FieldItem = protowire.Number(1) + FieldTypeID = protowire.Number(2) + FieldMessage = protowire.Number(3) +) + +// ExtensionName is the field name for extensions of MessageSet. +// +// A valid MessageSet extension must be of the form: +// +// message MyMessage { +// extend proto2.bridge.MessageSet { +// optional MyMessage message_set_extension = 1234; +// } +// ... +// } +const ExtensionName = "message_set_extension" + +// IsMessageSet returns whether the message uses the MessageSet wire format. +func IsMessageSet(md protoreflect.MessageDescriptor) bool { + xmd, ok := md.(interface{ IsMessageSet() bool }) + return ok && xmd.IsMessageSet() +} + +// IsMessageSetExtension reports this field properly extends a MessageSet. +func IsMessageSetExtension(fd protoreflect.FieldDescriptor) bool { + switch { + case fd.Name() != ExtensionName: + return false + case !IsMessageSet(fd.ContainingMessage()): + return false + case fd.FullName().Parent() != fd.Message().FullName(): + return false + } + return true +} + +// SizeField returns the size of a MessageSet item field containing an extension +// with the given field number, not counting the contents of the message subfield. +func SizeField(num protowire.Number) int { + return 2*protowire.SizeTag(FieldItem) + protowire.SizeTag(FieldTypeID) + protowire.SizeVarint(uint64(num)) +} + +// Unmarshal parses a MessageSet. +// +// It calls fn with the type ID and value of each item in the MessageSet. +// Unknown fields are discarded. +// +// If wantLen is true, the item values include the varint length prefix. +// This is ugly, but simplifies the fast-path decoder in internal/impl. +func Unmarshal(b []byte, wantLen bool, fn func(typeID protowire.Number, value []byte) error) error { + for len(b) > 0 { + num, wtyp, n := protowire.ConsumeTag(b) + if n < 0 { + return protowire.ParseError(n) + } + b = b[n:] + if num != FieldItem || wtyp != protowire.StartGroupType { + n := protowire.ConsumeFieldValue(num, wtyp, b) + if n < 0 { + return protowire.ParseError(n) + } + b = b[n:] + continue + } + typeID, value, n, err := ConsumeFieldValue(b, wantLen) + if err != nil { + return err + } + b = b[n:] + if typeID == 0 { + continue + } + if err := fn(typeID, value); err != nil { + return err + } + } + return nil +} + +// ConsumeFieldValue parses b as a MessageSet item field value until and including +// the trailing end group marker. It assumes the start group tag has already been parsed. +// It returns the contents of the type_id and message subfields and the total +// item length. +// +// If wantLen is true, the returned message value includes the length prefix. +func ConsumeFieldValue(b []byte, wantLen bool) (typeid protowire.Number, message []byte, n int, err error) { + ilen := len(b) + for { + num, wtyp, n := protowire.ConsumeTag(b) + if n < 0 { + return 0, nil, 0, protowire.ParseError(n) + } + b = b[n:] + switch { + case num == FieldItem && wtyp == protowire.EndGroupType: + if wantLen && len(message) == 0 { + // The message field was missing, which should never happen. + // Be prepared for this case anyway. + message = protowire.AppendVarint(message, 0) + } + return typeid, message, ilen - len(b), nil + case num == FieldTypeID && wtyp == protowire.VarintType: + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return 0, nil, 0, protowire.ParseError(n) + } + b = b[n:] + if v < 1 || v > math.MaxInt32 { + return 0, nil, 0, errors.New("invalid type_id in message set") + } + typeid = protowire.Number(v) + case num == FieldMessage && wtyp == protowire.BytesType: + m, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, nil, 0, protowire.ParseError(n) + } + if message == nil { + if wantLen { + message = b[:n:n] + } else { + message = m[:len(m):len(m)] + } + } else { + // This case should never happen in practice, but handle it for + // correctness: The MessageSet item contains multiple message + // fields, which need to be merged. + // + // In the case where we're returning the length, this becomes + // quite inefficient since we need to strip the length off + // the existing data and reconstruct it with the combined length. + if wantLen { + _, nn := protowire.ConsumeVarint(message) + m0 := message[nn:] + message = nil + message = protowire.AppendVarint(message, uint64(len(m0)+len(m))) + message = append(message, m0...) + message = append(message, m...) + } else { + message = append(message, m...) + } + } + b = b[n:] + default: + // We have no place to put it, so we just ignore unknown fields. + n := protowire.ConsumeFieldValue(num, wtyp, b) + if n < 0 { + return 0, nil, 0, protowire.ParseError(n) + } + b = b[n:] + } + } +} + +// AppendFieldStart appends the start of a MessageSet item field containing +// an extension with the given number. The caller must add the message +// subfield (including the tag). +func AppendFieldStart(b []byte, num protowire.Number) []byte { + b = protowire.AppendTag(b, FieldItem, protowire.StartGroupType) + b = protowire.AppendTag(b, FieldTypeID, protowire.VarintType) + b = protowire.AppendVarint(b, uint64(num)) + return b +} + +// AppendFieldEnd appends the trailing end group marker for a MessageSet item field. +func AppendFieldEnd(b []byte) []byte { + return protowire.AppendTag(b, FieldItem, protowire.EndGroupType) +} + +// SizeUnknown returns the size of an unknown fields section in MessageSet format. +// +// See AppendUnknown. +func SizeUnknown(unknown []byte) (size int) { + for len(unknown) > 0 { + num, typ, n := protowire.ConsumeTag(unknown) + if n < 0 || typ != protowire.BytesType { + return 0 + } + unknown = unknown[n:] + _, n = protowire.ConsumeBytes(unknown) + if n < 0 { + return 0 + } + unknown = unknown[n:] + size += SizeField(num) + protowire.SizeTag(FieldMessage) + n + } + return size +} + +// AppendUnknown appends unknown fields to b in MessageSet format. +// +// For historic reasons, unresolved items in a MessageSet are stored in a +// message's unknown fields section in non-MessageSet format. That is, an +// unknown item with typeID T and value V appears in the unknown fields as +// a field with number T and value V. +// +// This function converts the unknown fields back into MessageSet form. +func AppendUnknown(b, unknown []byte) ([]byte, error) { + for len(unknown) > 0 { + num, typ, n := protowire.ConsumeTag(unknown) + if n < 0 || typ != protowire.BytesType { + return nil, errors.New("invalid data in message set unknown fields") + } + unknown = unknown[n:] + _, n = protowire.ConsumeBytes(unknown) + if n < 0 { + return nil, errors.New("invalid data in message set unknown fields") + } + b = AppendFieldStart(b, num) + b = protowire.AppendTag(b, FieldMessage, protowire.BytesType) + b = append(b, unknown[:n]...) + b = AppendFieldEnd(b) + unknown = unknown[n:] + } + return b, nil +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go new file mode 100644 index 0000000..669133d --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go @@ -0,0 +1,201 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package tag marshals and unmarshals the legacy struct tags as generated +// by historical versions of protoc-gen-go. +package tag + +import ( + "reflect" + "strconv" + "strings" + + "google.golang.org/protobuf/internal/encoding/defval" + "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/internal/strs" + "google.golang.org/protobuf/reflect/protoreflect" +) + +var byteType = reflect.TypeOf(byte(0)) + +// Unmarshal decodes the tag into a prototype.Field. +// +// The goType is needed to determine the original protoreflect.Kind since the +// tag does not record sufficient information to determine that. +// The type is the underlying field type (e.g., a repeated field may be +// represented by []T, but the Go type passed in is just T). +// A list of enum value descriptors must be provided for enum fields. +// This does not populate the Enum or Message. +// +// This function is a best effort attempt; parsing errors are ignored. +func Unmarshal(tag string, goType reflect.Type, evs protoreflect.EnumValueDescriptors) protoreflect.FieldDescriptor { + f := new(filedesc.Field) + f.L0.ParentFile = filedesc.SurrogateProto2 + f.L1.EditionFeatures = f.L0.ParentFile.L1.EditionFeatures + for len(tag) > 0 { + i := strings.IndexByte(tag, ',') + if i < 0 { + i = len(tag) + } + switch s := tag[:i]; { + case strings.HasPrefix(s, "name="): + f.L0.FullName = protoreflect.FullName(s[len("name="):]) + case strings.Trim(s, "0123456789") == "": + n, _ := strconv.ParseUint(s, 10, 32) + f.L1.Number = protoreflect.FieldNumber(n) + case s == "opt": + f.L1.Cardinality = protoreflect.Optional + case s == "req": + f.L1.Cardinality = protoreflect.Required + case s == "rep": + f.L1.Cardinality = protoreflect.Repeated + case s == "varint": + switch goType.Kind() { + case reflect.Bool: + f.L1.Kind = protoreflect.BoolKind + case reflect.Int32: + f.L1.Kind = protoreflect.Int32Kind + case reflect.Int64: + f.L1.Kind = protoreflect.Int64Kind + case reflect.Uint32: + f.L1.Kind = protoreflect.Uint32Kind + case reflect.Uint64: + f.L1.Kind = protoreflect.Uint64Kind + } + case s == "zigzag32": + if goType.Kind() == reflect.Int32 { + f.L1.Kind = protoreflect.Sint32Kind + } + case s == "zigzag64": + if goType.Kind() == reflect.Int64 { + f.L1.Kind = protoreflect.Sint64Kind + } + case s == "fixed32": + switch goType.Kind() { + case reflect.Int32: + f.L1.Kind = protoreflect.Sfixed32Kind + case reflect.Uint32: + f.L1.Kind = protoreflect.Fixed32Kind + case reflect.Float32: + f.L1.Kind = protoreflect.FloatKind + } + case s == "fixed64": + switch goType.Kind() { + case reflect.Int64: + f.L1.Kind = protoreflect.Sfixed64Kind + case reflect.Uint64: + f.L1.Kind = protoreflect.Fixed64Kind + case reflect.Float64: + f.L1.Kind = protoreflect.DoubleKind + } + case s == "bytes": + switch { + case goType.Kind() == reflect.String: + f.L1.Kind = protoreflect.StringKind + case goType.Kind() == reflect.Slice && goType.Elem() == byteType: + f.L1.Kind = protoreflect.BytesKind + default: + f.L1.Kind = protoreflect.MessageKind + } + case s == "group": + f.L1.Kind = protoreflect.GroupKind + case strings.HasPrefix(s, "enum="): + f.L1.Kind = protoreflect.EnumKind + case strings.HasPrefix(s, "json="): + jsonName := s[len("json="):] + if jsonName != strs.JSONCamelCase(string(f.L0.FullName.Name())) { + f.L1.StringName.InitJSON(jsonName) + } + case s == "packed": + f.L1.EditionFeatures.IsPacked = true + case strings.HasPrefix(s, "def="): + // The default tag is special in that everything afterwards is the + // default regardless of the presence of commas. + s, i = tag[len("def="):], len(tag) + v, ev, _ := defval.Unmarshal(s, f.L1.Kind, evs, defval.GoTag) + f.L1.Default = filedesc.DefaultValue(v, ev) + case s == "proto3": + f.L0.ParentFile = filedesc.SurrogateProto3 + } + tag = strings.TrimPrefix(tag[i:], ",") + } + + // The generator uses the group message name instead of the field name. + // We obtain the real field name by lowercasing the group name. + if f.L1.Kind == protoreflect.GroupKind { + f.L0.FullName = protoreflect.FullName(strings.ToLower(string(f.L0.FullName))) + } + return f +} + +// Marshal encodes the protoreflect.FieldDescriptor as a tag. +// +// The enumName must be provided if the kind is an enum. +// Historically, the formulation of the enum "name" was the proto package +// dot-concatenated with the generated Go identifier for the enum type. +// Depending on the context on how Marshal is called, there are different ways +// through which that information is determined. As such it is the caller's +// responsibility to provide a function to obtain that information. +func Marshal(fd protoreflect.FieldDescriptor, enumName string) string { + var tag []string + switch fd.Kind() { + case protoreflect.BoolKind, protoreflect.EnumKind, protoreflect.Int32Kind, protoreflect.Uint32Kind, protoreflect.Int64Kind, protoreflect.Uint64Kind: + tag = append(tag, "varint") + case protoreflect.Sint32Kind: + tag = append(tag, "zigzag32") + case protoreflect.Sint64Kind: + tag = append(tag, "zigzag64") + case protoreflect.Sfixed32Kind, protoreflect.Fixed32Kind, protoreflect.FloatKind: + tag = append(tag, "fixed32") + case protoreflect.Sfixed64Kind, protoreflect.Fixed64Kind, protoreflect.DoubleKind: + tag = append(tag, "fixed64") + case protoreflect.StringKind, protoreflect.BytesKind, protoreflect.MessageKind: + tag = append(tag, "bytes") + case protoreflect.GroupKind: + tag = append(tag, "group") + } + tag = append(tag, strconv.Itoa(int(fd.Number()))) + switch fd.Cardinality() { + case protoreflect.Optional: + tag = append(tag, "opt") + case protoreflect.Required: + tag = append(tag, "req") + case protoreflect.Repeated: + tag = append(tag, "rep") + } + if fd.IsPacked() { + tag = append(tag, "packed") + } + name := string(fd.Name()) + if fd.Kind() == protoreflect.GroupKind { + // The name of the FieldDescriptor for a group field is + // lowercased. To find the original capitalization, we + // look in the field's MessageType. + name = string(fd.Message().Name()) + } + tag = append(tag, "name="+name) + if jsonName := fd.JSONName(); jsonName != "" && jsonName != name && !fd.IsExtension() { + // NOTE: The jsonName != name condition is suspect, but it preserve + // the exact same semantics from the previous generator. + tag = append(tag, "json="+jsonName) + } + // The previous implementation does not tag extension fields as proto3, + // even when the field is defined in a proto3 file. Match that behavior + // for consistency. + if fd.Syntax() == protoreflect.Proto3 && !fd.IsExtension() { + tag = append(tag, "proto3") + } + if fd.Kind() == protoreflect.EnumKind && enumName != "" { + tag = append(tag, "enum="+enumName) + } + if fd.ContainingOneof() != nil { + tag = append(tag, "oneof") + } + // This must appear last in the tag, since commas in strings aren't escaped. + if fd.HasDefault() { + def, _ := defval.Marshal(fd.Default(), fd.DefaultEnumValue(), fd.Kind(), defval.GoTag) + tag = append(tag, "def="+def) + } + return strings.Join(tag, ",") +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go new file mode 100644 index 0000000..099b2bf --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go @@ -0,0 +1,686 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package text + +import ( + "bytes" + "fmt" + "io" + "strconv" + "unicode/utf8" + + "google.golang.org/protobuf/internal/errors" +) + +// Decoder is a token-based textproto decoder. +type Decoder struct { + // lastCall is last method called, either readCall or peekCall. + // Initial value is readCall. + lastCall call + + // lastToken contains the last read token. + lastToken Token + + // lastErr contains the last read error. + lastErr error + + // openStack is a stack containing the byte characters for MessageOpen and + // ListOpen kinds. The top of stack represents the message or the list that + // the current token is nested in. An empty stack means the current token is + // at the top level message. The characters '{' and '<' both represent the + // MessageOpen kind. + openStack []byte + + // orig is used in reporting line and column. + orig []byte + // in contains the unconsumed input. + in []byte +} + +// NewDecoder returns a Decoder to read the given []byte. +func NewDecoder(b []byte) *Decoder { + return &Decoder{orig: b, in: b} +} + +// ErrUnexpectedEOF means that EOF was encountered in the middle of the input. +var ErrUnexpectedEOF = errors.New("%v", io.ErrUnexpectedEOF) + +// call specifies which Decoder method was invoked. +type call uint8 + +const ( + readCall call = iota + peekCall +) + +// Peek looks ahead and returns the next token and error without advancing a read. +func (d *Decoder) Peek() (Token, error) { + defer func() { d.lastCall = peekCall }() + if d.lastCall == readCall { + d.lastToken, d.lastErr = d.Read() + } + return d.lastToken, d.lastErr +} + +// Read returns the next token. +// It will return an error if there is no valid token. +func (d *Decoder) Read() (Token, error) { + defer func() { d.lastCall = readCall }() + if d.lastCall == peekCall { + return d.lastToken, d.lastErr + } + + tok, err := d.parseNext(d.lastToken.kind) + if err != nil { + return Token{}, err + } + + switch tok.kind { + case comma, semicolon: + tok, err = d.parseNext(tok.kind) + if err != nil { + return Token{}, err + } + } + d.lastToken = tok + return tok, nil +} + +const ( + mismatchedFmt = "mismatched close character %q" + unexpectedFmt = "unexpected character %q" +) + +// parseNext parses the next Token based on given last kind. +func (d *Decoder) parseNext(lastKind Kind) (Token, error) { + // Trim leading spaces. + d.consume(0) + isEOF := false + if len(d.in) == 0 { + isEOF = true + } + + switch lastKind { + case EOF: + return d.consumeToken(EOF, 0, 0), nil + + case bof: + // Start of top level message. Next token can be EOF or Name. + if isEOF { + return d.consumeToken(EOF, 0, 0), nil + } + return d.parseFieldName() + + case Name: + // Next token can be MessageOpen, ListOpen or Scalar. + if isEOF { + return Token{}, ErrUnexpectedEOF + } + switch ch := d.in[0]; ch { + case '{', '<': + d.pushOpenStack(ch) + return d.consumeToken(MessageOpen, 1, 0), nil + case '[': + d.pushOpenStack(ch) + return d.consumeToken(ListOpen, 1, 0), nil + default: + return d.parseScalar() + } + + case Scalar: + openKind, closeCh := d.currentOpenKind() + switch openKind { + case bof: + // Top level message. + // Next token can be EOF, comma, semicolon or Name. + if isEOF { + return d.consumeToken(EOF, 0, 0), nil + } + switch d.in[0] { + case ',': + return d.consumeToken(comma, 1, 0), nil + case ';': + return d.consumeToken(semicolon, 1, 0), nil + default: + return d.parseFieldName() + } + + case MessageOpen: + // Next token can be MessageClose, comma, semicolon or Name. + if isEOF { + return Token{}, ErrUnexpectedEOF + } + switch ch := d.in[0]; ch { + case closeCh: + d.popOpenStack() + return d.consumeToken(MessageClose, 1, 0), nil + case otherCloseChar[closeCh]: + return Token{}, d.newSyntaxError(mismatchedFmt, ch) + case ',': + return d.consumeToken(comma, 1, 0), nil + case ';': + return d.consumeToken(semicolon, 1, 0), nil + default: + return d.parseFieldName() + } + + case ListOpen: + // Next token can be ListClose or comma. + if isEOF { + return Token{}, ErrUnexpectedEOF + } + switch ch := d.in[0]; ch { + case ']': + d.popOpenStack() + return d.consumeToken(ListClose, 1, 0), nil + case ',': + return d.consumeToken(comma, 1, 0), nil + default: + return Token{}, d.newSyntaxError(unexpectedFmt, ch) + } + } + + case MessageOpen: + // Next token can be MessageClose or Name. + if isEOF { + return Token{}, ErrUnexpectedEOF + } + _, closeCh := d.currentOpenKind() + switch ch := d.in[0]; ch { + case closeCh: + d.popOpenStack() + return d.consumeToken(MessageClose, 1, 0), nil + case otherCloseChar[closeCh]: + return Token{}, d.newSyntaxError(mismatchedFmt, ch) + default: + return d.parseFieldName() + } + + case MessageClose: + openKind, closeCh := d.currentOpenKind() + switch openKind { + case bof: + // Top level message. + // Next token can be EOF, comma, semicolon or Name. + if isEOF { + return d.consumeToken(EOF, 0, 0), nil + } + switch ch := d.in[0]; ch { + case ',': + return d.consumeToken(comma, 1, 0), nil + case ';': + return d.consumeToken(semicolon, 1, 0), nil + default: + return d.parseFieldName() + } + + case MessageOpen: + // Next token can be MessageClose, comma, semicolon or Name. + if isEOF { + return Token{}, ErrUnexpectedEOF + } + switch ch := d.in[0]; ch { + case closeCh: + d.popOpenStack() + return d.consumeToken(MessageClose, 1, 0), nil + case otherCloseChar[closeCh]: + return Token{}, d.newSyntaxError(mismatchedFmt, ch) + case ',': + return d.consumeToken(comma, 1, 0), nil + case ';': + return d.consumeToken(semicolon, 1, 0), nil + default: + return d.parseFieldName() + } + + case ListOpen: + // Next token can be ListClose or comma + if isEOF { + return Token{}, ErrUnexpectedEOF + } + switch ch := d.in[0]; ch { + case closeCh: + d.popOpenStack() + return d.consumeToken(ListClose, 1, 0), nil + case ',': + return d.consumeToken(comma, 1, 0), nil + default: + return Token{}, d.newSyntaxError(unexpectedFmt, ch) + } + } + + case ListOpen: + // Next token can be ListClose, MessageStart or Scalar. + if isEOF { + return Token{}, ErrUnexpectedEOF + } + switch ch := d.in[0]; ch { + case ']': + d.popOpenStack() + return d.consumeToken(ListClose, 1, 0), nil + case '{', '<': + d.pushOpenStack(ch) + return d.consumeToken(MessageOpen, 1, 0), nil + default: + return d.parseScalar() + } + + case ListClose: + openKind, closeCh := d.currentOpenKind() + switch openKind { + case bof: + // Top level message. + // Next token can be EOF, comma, semicolon or Name. + if isEOF { + return d.consumeToken(EOF, 0, 0), nil + } + switch ch := d.in[0]; ch { + case ',': + return d.consumeToken(comma, 1, 0), nil + case ';': + return d.consumeToken(semicolon, 1, 0), nil + default: + return d.parseFieldName() + } + + case MessageOpen: + // Next token can be MessageClose, comma, semicolon or Name. + if isEOF { + return Token{}, ErrUnexpectedEOF + } + switch ch := d.in[0]; ch { + case closeCh: + d.popOpenStack() + return d.consumeToken(MessageClose, 1, 0), nil + case otherCloseChar[closeCh]: + return Token{}, d.newSyntaxError(mismatchedFmt, ch) + case ',': + return d.consumeToken(comma, 1, 0), nil + case ';': + return d.consumeToken(semicolon, 1, 0), nil + default: + return d.parseFieldName() + } + + default: + // It is not possible to have this case. Let it panic below. + } + + case comma, semicolon: + openKind, closeCh := d.currentOpenKind() + switch openKind { + case bof: + // Top level message. Next token can be EOF or Name. + if isEOF { + return d.consumeToken(EOF, 0, 0), nil + } + return d.parseFieldName() + + case MessageOpen: + // Next token can be MessageClose or Name. + if isEOF { + return Token{}, ErrUnexpectedEOF + } + switch ch := d.in[0]; ch { + case closeCh: + d.popOpenStack() + return d.consumeToken(MessageClose, 1, 0), nil + case otherCloseChar[closeCh]: + return Token{}, d.newSyntaxError(mismatchedFmt, ch) + default: + return d.parseFieldName() + } + + case ListOpen: + if lastKind == semicolon { + // It is not be possible to have this case as logic here + // should not have produced a semicolon Token when inside a + // list. Let it panic below. + break + } + // Next token can be MessageOpen or Scalar. + if isEOF { + return Token{}, ErrUnexpectedEOF + } + switch ch := d.in[0]; ch { + case '{', '<': + d.pushOpenStack(ch) + return d.consumeToken(MessageOpen, 1, 0), nil + default: + return d.parseScalar() + } + } + } + + line, column := d.Position(len(d.orig) - len(d.in)) + panic(fmt.Sprintf("Decoder.parseNext: bug at handling line %d:%d with lastKind=%v", line, column, lastKind)) +} + +var otherCloseChar = map[byte]byte{ + '}': '>', + '>': '}', +} + +// currentOpenKind indicates whether current position is inside a message, list +// or top-level message by returning MessageOpen, ListOpen or bof respectively. +// If the returned kind is either a MessageOpen or ListOpen, it also returns the +// corresponding closing character. +func (d *Decoder) currentOpenKind() (Kind, byte) { + if len(d.openStack) == 0 { + return bof, 0 + } + openCh := d.openStack[len(d.openStack)-1] + switch openCh { + case '{': + return MessageOpen, '}' + case '<': + return MessageOpen, '>' + case '[': + return ListOpen, ']' + } + panic(fmt.Sprintf("Decoder: openStack contains invalid byte %c", openCh)) +} + +func (d *Decoder) pushOpenStack(ch byte) { + d.openStack = append(d.openStack, ch) +} + +func (d *Decoder) popOpenStack() { + d.openStack = d.openStack[:len(d.openStack)-1] +} + +// parseFieldName parses field name and separator. +func (d *Decoder) parseFieldName() (tok Token, err error) { + defer func() { + if err == nil && d.tryConsumeChar(':') { + tok.attrs |= hasSeparator + } + }() + + // Extension or Any type URL. + if d.in[0] == '[' { + return d.parseTypeName() + } + + // Identifier. + if size := parseIdent(d.in, false); size > 0 { + return d.consumeToken(Name, size, uint8(IdentName)), nil + } + + // Field number. Identify if input is a valid number that is not negative + // and is decimal integer within 32-bit range. + if num := parseNumber(d.in); num.size > 0 { + str := num.string(d.in) + if !num.neg && num.kind == numDec { + if _, err := strconv.ParseInt(str, 10, 32); err == nil { + return d.consumeToken(Name, num.size, uint8(FieldNumber)), nil + } + } + return Token{}, d.newSyntaxError("invalid field number: %s", str) + } + + return Token{}, d.newSyntaxError("invalid field name: %s", errId(d.in)) +} + +// parseTypeName parses Any type URL or extension field name. The name is +// enclosed in [ and ] characters. The C++ parser does not handle many legal URL +// strings. This implementation is more liberal and allows for the pattern +// ^[-_a-zA-Z0-9]+([./][-_a-zA-Z0-9]+)*`). Whitespaces and comments are allowed +// in between [ ], '.', '/' and the sub names. +func (d *Decoder) parseTypeName() (Token, error) { + startPos := len(d.orig) - len(d.in) + // Use alias s to advance first in order to use d.in for error handling. + // Caller already checks for [ as first character. + s := consume(d.in[1:], 0) + if len(s) == 0 { + return Token{}, ErrUnexpectedEOF + } + + var name []byte + for len(s) > 0 && isTypeNameChar(s[0]) { + name = append(name, s[0]) + s = s[1:] + } + s = consume(s, 0) + + var closed bool + for len(s) > 0 && !closed { + switch { + case s[0] == ']': + s = s[1:] + closed = true + + case s[0] == '/', s[0] == '.': + if len(name) > 0 && (name[len(name)-1] == '/' || name[len(name)-1] == '.') { + return Token{}, d.newSyntaxError("invalid type URL/extension field name: %s", + d.orig[startPos:len(d.orig)-len(s)+1]) + } + name = append(name, s[0]) + s = s[1:] + s = consume(s, 0) + for len(s) > 0 && isTypeNameChar(s[0]) { + name = append(name, s[0]) + s = s[1:] + } + s = consume(s, 0) + + default: + return Token{}, d.newSyntaxError( + "invalid type URL/extension field name: %s", d.orig[startPos:len(d.orig)-len(s)+1]) + } + } + + if !closed { + return Token{}, ErrUnexpectedEOF + } + + // First character cannot be '.'. Last character cannot be '.' or '/'. + size := len(name) + if size == 0 || name[0] == '.' || name[size-1] == '.' || name[size-1] == '/' { + return Token{}, d.newSyntaxError("invalid type URL/extension field name: %s", + d.orig[startPos:len(d.orig)-len(s)]) + } + + d.in = s + endPos := len(d.orig) - len(d.in) + d.consume(0) + + return Token{ + kind: Name, + attrs: uint8(TypeName), + pos: startPos, + raw: d.orig[startPos:endPos], + str: string(name), + }, nil +} + +func isTypeNameChar(b byte) bool { + return (b == '-' || b == '_' || + ('0' <= b && b <= '9') || + ('a' <= b && b <= 'z') || + ('A' <= b && b <= 'Z')) +} + +func isWhiteSpace(b byte) bool { + switch b { + case ' ', '\n', '\r', '\t': + return true + default: + return false + } +} + +// parseIdent parses an unquoted proto identifier and returns size. +// If allowNeg is true, it allows '-' to be the first character in the +// identifier. This is used when parsing literal values like -infinity, etc. +// Regular expression matches an identifier: `^[_a-zA-Z][_a-zA-Z0-9]*` +func parseIdent(input []byte, allowNeg bool) int { + var size int + + s := input + if len(s) == 0 { + return 0 + } + + if allowNeg && s[0] == '-' { + s = s[1:] + size++ + if len(s) == 0 { + return 0 + } + } + + switch { + case s[0] == '_', + 'a' <= s[0] && s[0] <= 'z', + 'A' <= s[0] && s[0] <= 'Z': + s = s[1:] + size++ + default: + return 0 + } + + for len(s) > 0 && (s[0] == '_' || + 'a' <= s[0] && s[0] <= 'z' || + 'A' <= s[0] && s[0] <= 'Z' || + '0' <= s[0] && s[0] <= '9') { + s = s[1:] + size++ + } + + if len(s) > 0 && !isDelim(s[0]) { + return 0 + } + + return size +} + +// parseScalar parses for a string, literal or number value. +func (d *Decoder) parseScalar() (Token, error) { + if d.in[0] == '"' || d.in[0] == '\'' { + return d.parseStringValue() + } + + if tok, ok := d.parseLiteralValue(); ok { + return tok, nil + } + + if tok, ok := d.parseNumberValue(); ok { + return tok, nil + } + + return Token{}, d.newSyntaxError("invalid scalar value: %s", errId(d.in)) +} + +// parseLiteralValue parses a literal value. A literal value is used for +// bools, special floats and enums. This function simply identifies that the +// field value is a literal. +func (d *Decoder) parseLiteralValue() (Token, bool) { + size := parseIdent(d.in, true) + if size == 0 { + return Token{}, false + } + return d.consumeToken(Scalar, size, literalValue), true +} + +// consumeToken constructs a Token for given Kind from d.in and consumes given +// size-length from it. +func (d *Decoder) consumeToken(kind Kind, size int, attrs uint8) Token { + // Important to compute raw and pos before consuming. + tok := Token{ + kind: kind, + attrs: attrs, + pos: len(d.orig) - len(d.in), + raw: d.in[:size], + } + d.consume(size) + return tok +} + +// newSyntaxError returns a syntax error with line and column information for +// current position. +func (d *Decoder) newSyntaxError(f string, x ...any) error { + e := errors.New(f, x...) + line, column := d.Position(len(d.orig) - len(d.in)) + return errors.New("syntax error (line %d:%d): %v", line, column, e) +} + +// Position returns line and column number of given index of the original input. +// It will panic if index is out of range. +func (d *Decoder) Position(idx int) (line int, column int) { + b := d.orig[:idx] + line = bytes.Count(b, []byte("\n")) + 1 + if i := bytes.LastIndexByte(b, '\n'); i >= 0 { + b = b[i+1:] + } + column = utf8.RuneCount(b) + 1 // ignore multi-rune characters + return line, column +} + +func (d *Decoder) tryConsumeChar(c byte) bool { + if len(d.in) > 0 && d.in[0] == c { + d.consume(1) + return true + } + return false +} + +// consume consumes n bytes of input and any subsequent whitespace or comments. +func (d *Decoder) consume(n int) { + d.in = consume(d.in, n) + return +} + +// consume consumes n bytes of input and any subsequent whitespace or comments. +func consume(b []byte, n int) []byte { + b = b[n:] + for len(b) > 0 { + switch b[0] { + case ' ', '\n', '\r', '\t': + b = b[1:] + case '#': + if i := bytes.IndexByte(b, '\n'); i >= 0 { + b = b[i+len("\n"):] + } else { + b = nil + } + default: + return b + } + } + return b +} + +// errId extracts a byte sequence that looks like an invalid ID +// (for the purposes of error reporting). +func errId(seq []byte) []byte { + const maxLen = 32 + for i := 0; i < len(seq); { + if i > maxLen { + return append(seq[:i:i], "…"...) + } + r, size := utf8.DecodeRune(seq[i:]) + if r > utf8.RuneSelf || (r != '/' && isDelim(byte(r))) { + if i == 0 { + // Either the first byte is invalid UTF-8 or a + // delimiter, or the first rune is non-ASCII. + // Return it as-is. + i = size + } + return seq[:i:i] + } + i += size + } + // No delimiter found. + return seq +} + +// isDelim returns true if given byte is a delimiter character. +func isDelim(c byte) bool { + return !(c == '-' || c == '+' || c == '.' || c == '_' || + ('a' <= c && c <= 'z') || + ('A' <= c && c <= 'Z') || + ('0' <= c && c <= '9')) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go new file mode 100644 index 0000000..45c81f0 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/text/decode_number.go @@ -0,0 +1,211 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package text + +// parseNumberValue parses a number from the input and returns a Token object. +func (d *Decoder) parseNumberValue() (Token, bool) { + in := d.in + num := parseNumber(in) + if num.size == 0 { + return Token{}, false + } + numAttrs := num.kind + if num.neg { + numAttrs |= isNegative + } + tok := Token{ + kind: Scalar, + attrs: numberValue, + pos: len(d.orig) - len(d.in), + raw: d.in[:num.size], + str: num.string(d.in), + numAttrs: numAttrs, + } + d.consume(num.size) + return tok, true +} + +const ( + numDec uint8 = (1 << iota) / 2 + numHex + numOct + numFloat +) + +// number is the result of parsing out a valid number from parseNumber. It +// contains data for doing float or integer conversion via the strconv package +// in conjunction with the input bytes. +type number struct { + kind uint8 + neg bool + size int + // if neg, this is the length of whitespace and comments between + // the minus sign and the rest fo the number literal + sep int +} + +func (num number) string(data []byte) string { + strSize := num.size + last := num.size - 1 + if num.kind == numFloat && (data[last] == 'f' || data[last] == 'F') { + strSize = last + } + if num.neg && num.sep > 0 { + // strip whitespace/comments between negative sign and the rest + strLen := strSize - num.sep + str := make([]byte, strLen) + str[0] = data[0] + copy(str[1:], data[num.sep+1:strSize]) + return string(str) + } + return string(data[:strSize]) + +} + +// parseNumber constructs a number object from given input. It allows for the +// following patterns: +// +// integer: ^-?([1-9][0-9]*|0[xX][0-9a-fA-F]+|0[0-7]*) +// float: ^-?((0|[1-9][0-9]*)?([.][0-9]*)?([eE][+-]?[0-9]+)?[fF]?) +// +// It also returns the number of parsed bytes for the given number, 0 if it is +// not a number. +func parseNumber(input []byte) number { + kind := numDec + var size int + var neg bool + + s := input + if len(s) == 0 { + return number{} + } + + // Optional - + var sep int + if s[0] == '-' { + neg = true + s = s[1:] + size++ + // Consume any whitespace or comments between the + // negative sign and the rest of the number + lenBefore := len(s) + s = consume(s, 0) + sep = lenBefore - len(s) + size += sep + if len(s) == 0 { + return number{} + } + } + + switch { + case s[0] == '0': + if len(s) > 1 { + switch { + case s[1] == 'x' || s[1] == 'X': + // Parse as hex number. + kind = numHex + n := 2 + s = s[2:] + for len(s) > 0 && (('0' <= s[0] && s[0] <= '9') || + ('a' <= s[0] && s[0] <= 'f') || + ('A' <= s[0] && s[0] <= 'F')) { + s = s[1:] + n++ + } + if n == 2 { + return number{} + } + size += n + + case '0' <= s[1] && s[1] <= '7': + // Parse as octal number. + kind = numOct + n := 2 + s = s[2:] + for len(s) > 0 && '0' <= s[0] && s[0] <= '7' { + s = s[1:] + n++ + } + size += n + } + + if kind&(numHex|numOct) > 0 { + if len(s) > 0 && !isDelim(s[0]) { + return number{} + } + return number{kind: kind, neg: neg, size: size, sep: sep} + } + } + s = s[1:] + size++ + + case '1' <= s[0] && s[0] <= '9': + n := 1 + s = s[1:] + for len(s) > 0 && '0' <= s[0] && s[0] <= '9' { + s = s[1:] + n++ + } + size += n + + case s[0] == '.': + // Set kind to numFloat to signify the intent to parse as float. And + // that it needs to have other digits after '.'. + kind = numFloat + + default: + return number{} + } + + // . followed by 0 or more digits. + if len(s) > 0 && s[0] == '.' { + n := 1 + s = s[1:] + // If decimal point was before any digits, it should be followed by + // other digits. + if len(s) == 0 && kind == numFloat { + return number{} + } + for len(s) > 0 && '0' <= s[0] && s[0] <= '9' { + s = s[1:] + n++ + } + size += n + kind = numFloat + } + + // e or E followed by an optional - or + and 1 or more digits. + if len(s) >= 2 && (s[0] == 'e' || s[0] == 'E') { + kind = numFloat + s = s[1:] + n := 1 + if s[0] == '+' || s[0] == '-' { + s = s[1:] + n++ + if len(s) == 0 { + return number{} + } + } + for len(s) > 0 && '0' <= s[0] && s[0] <= '9' { + s = s[1:] + n++ + } + size += n + } + + // Optional suffix f or F for floats. + if len(s) > 0 && (s[0] == 'f' || s[0] == 'F') { + kind = numFloat + s = s[1:] + size++ + } + + // Check that next byte is a delimiter or it is at the end. + if len(s) > 0 && !isDelim(s[0]) { + return number{} + } + + return number{kind: kind, neg: neg, size: size, sep: sep} +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/text/decode_string.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/text/decode_string.go new file mode 100644 index 0000000..d4d3490 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/text/decode_string.go @@ -0,0 +1,161 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package text + +import ( + "bytes" + "strconv" + "strings" + "unicode" + "unicode/utf16" + "unicode/utf8" + + "google.golang.org/protobuf/internal/strs" +) + +// parseStringValue parses string field token. +// This differs from parseString since the text format allows +// multiple back-to-back string literals where they are semantically treated +// as a single large string with all values concatenated. +// +// E.g., `"foo" "bar" "baz"` => "foobarbaz" +func (d *Decoder) parseStringValue() (Token, error) { + // Note that the ending quote is sufficient to unambiguously mark the end + // of a string. Thus, the text grammar does not require intervening + // whitespace or control characters in-between strings. + // Thus, the following is valid: + // `"foo"'bar'"baz"` => "foobarbaz" + in0 := d.in + var ss []string + for len(d.in) > 0 && (d.in[0] == '"' || d.in[0] == '\'') { + s, err := d.parseString() + if err != nil { + return Token{}, err + } + ss = append(ss, s) + } + // d.in already points to the end of the value at this point. + return Token{ + kind: Scalar, + attrs: stringValue, + pos: len(d.orig) - len(in0), + raw: in0[:len(in0)-len(d.in)], + str: strings.Join(ss, ""), + }, nil +} + +// parseString parses a string value enclosed in " or '. +func (d *Decoder) parseString() (string, error) { + in := d.in + if len(in) == 0 { + return "", ErrUnexpectedEOF + } + quote := in[0] + in = in[1:] + i := indexNeedEscapeInBytes(in) + in, out := in[i:], in[:i:i] // set cap to prevent mutations + for len(in) > 0 { + switch r, n := utf8.DecodeRune(in); { + case r == utf8.RuneError && n == 1: + return "", d.newSyntaxError("invalid UTF-8 detected") + case r == 0 || r == '\n': + return "", d.newSyntaxError("invalid character %q in string", r) + case r == rune(quote): + in = in[1:] + d.consume(len(d.in) - len(in)) + return string(out), nil + case r == '\\': + if len(in) < 2 { + return "", ErrUnexpectedEOF + } + switch r := in[1]; r { + case '"', '\'', '\\', '?': + in, out = in[2:], append(out, r) + case 'a': + in, out = in[2:], append(out, '\a') + case 'b': + in, out = in[2:], append(out, '\b') + case 'n': + in, out = in[2:], append(out, '\n') + case 'r': + in, out = in[2:], append(out, '\r') + case 't': + in, out = in[2:], append(out, '\t') + case 'v': + in, out = in[2:], append(out, '\v') + case 'f': + in, out = in[2:], append(out, '\f') + case '0', '1', '2', '3', '4', '5', '6', '7': + // One, two, or three octal characters. + n := len(in[1:]) - len(bytes.TrimLeft(in[1:], "01234567")) + if n > 3 { + n = 3 + } + v, err := strconv.ParseUint(string(in[1:1+n]), 8, 8) + if err != nil { + return "", d.newSyntaxError("invalid octal escape code %q in string", in[:1+n]) + } + in, out = in[1+n:], append(out, byte(v)) + case 'x': + // One or two hexadecimal characters. + n := len(in[2:]) - len(bytes.TrimLeft(in[2:], "0123456789abcdefABCDEF")) + if n > 2 { + n = 2 + } + v, err := strconv.ParseUint(string(in[2:2+n]), 16, 8) + if err != nil { + return "", d.newSyntaxError("invalid hex escape code %q in string", in[:2+n]) + } + in, out = in[2+n:], append(out, byte(v)) + case 'u', 'U': + // Four or eight hexadecimal characters + n := 6 + if r == 'U' { + n = 10 + } + if len(in) < n { + return "", ErrUnexpectedEOF + } + v, err := strconv.ParseUint(string(in[2:n]), 16, 32) + if utf8.MaxRune < v || err != nil { + return "", d.newSyntaxError("invalid Unicode escape code %q in string", in[:n]) + } + in = in[n:] + + r := rune(v) + if utf16.IsSurrogate(r) { + if len(in) < 6 { + return "", ErrUnexpectedEOF + } + v, err := strconv.ParseUint(string(in[2:6]), 16, 16) + r = utf16.DecodeRune(r, rune(v)) + if in[0] != '\\' || in[1] != 'u' || r == unicode.ReplacementChar || err != nil { + return "", d.newSyntaxError("invalid Unicode escape code %q in string", in[:6]) + } + in = in[6:] + } + out = append(out, string(r)...) + default: + return "", d.newSyntaxError("invalid escape code %q in string", in[:2]) + } + default: + i := indexNeedEscapeInBytes(in[n:]) + in, out = in[n+i:], append(out, in[:n+i]...) + } + } + return "", ErrUnexpectedEOF +} + +// indexNeedEscapeInString returns the index of the character that needs +// escaping. If no characters need escaping, this returns the input length. +func indexNeedEscapeInBytes(b []byte) int { return indexNeedEscapeInString(strs.UnsafeString(b)) } + +// UnmarshalString returns an unescaped string given a textproto string value. +// String value needs to contain single or double quotes. This is only used by +// internal/encoding/defval package for unmarshaling bytes. +func UnmarshalString(s string) (string, error) { + d := NewDecoder([]byte(s)) + return d.parseString() +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/text/decode_token.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/text/decode_token.go new file mode 100644 index 0000000..83d2b0d --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/text/decode_token.go @@ -0,0 +1,373 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package text + +import ( + "bytes" + "fmt" + "math" + "strconv" + "strings" + + "google.golang.org/protobuf/internal/flags" +) + +// Kind represents a token kind expressible in the textproto format. +type Kind uint8 + +// Kind values. +const ( + Invalid Kind = iota + EOF + Name // Name indicates the field name. + Scalar // Scalar are scalar values, e.g. "string", 47, ENUM_LITERAL, true. + MessageOpen + MessageClose + ListOpen + ListClose + + // comma and semi-colon are only for parsing in between values and should not be exposed. + comma + semicolon + + // bof indicates beginning of file, which is the default token + // kind at the beginning of parsing. + bof = Invalid +) + +func (t Kind) String() string { + switch t { + case Invalid: + return "" + case EOF: + return "eof" + case Scalar: + return "scalar" + case Name: + return "name" + case MessageOpen: + return "{" + case MessageClose: + return "}" + case ListOpen: + return "[" + case ListClose: + return "]" + case comma: + return "," + case semicolon: + return ";" + default: + return fmt.Sprintf("", uint8(t)) + } +} + +// NameKind represents different types of field names. +type NameKind uint8 + +// NameKind values. +const ( + IdentName NameKind = iota + 1 + TypeName + FieldNumber +) + +func (t NameKind) String() string { + switch t { + case IdentName: + return "IdentName" + case TypeName: + return "TypeName" + case FieldNumber: + return "FieldNumber" + default: + return fmt.Sprintf("", uint8(t)) + } +} + +// Bit mask in Token.attrs to indicate if a Name token is followed by the +// separator char ':'. The field name separator char is optional for message +// field or repeated message field, but required for all other types. Decoder +// simply indicates whether a Name token is followed by separator or not. It is +// up to the prototext package to validate. +const hasSeparator = 1 << 7 + +// Scalar value types. +const ( + numberValue = iota + 1 + stringValue + literalValue +) + +// Bit mask in Token.numAttrs to indicate that the number is a negative. +const isNegative = 1 << 7 + +// Token provides a parsed token kind and value. Values are provided by the +// different accessor methods. +type Token struct { + // Kind of the Token object. + kind Kind + // attrs contains metadata for the following Kinds: + // Name: hasSeparator bit and one of NameKind. + // Scalar: one of numberValue, stringValue, literalValue. + attrs uint8 + // numAttrs contains metadata for numberValue: + // - highest bit is whether negative or positive. + // - lower bits indicate one of numDec, numHex, numOct, numFloat. + numAttrs uint8 + // pos provides the position of the token in the original input. + pos int + // raw bytes of the serialized token. + // This is a subslice into the original input. + raw []byte + // str contains parsed string for the following: + // - stringValue of Scalar kind + // - numberValue of Scalar kind + // - TypeName of Name kind + str string +} + +// Kind returns the token kind. +func (t Token) Kind() Kind { + return t.kind +} + +// RawString returns the read value in string. +func (t Token) RawString() string { + return string(t.raw) +} + +// Pos returns the token position from the input. +func (t Token) Pos() int { + return t.pos +} + +// NameKind returns IdentName, TypeName or FieldNumber. +// It panics if type is not Name. +func (t Token) NameKind() NameKind { + if t.kind == Name { + return NameKind(t.attrs &^ hasSeparator) + } + panic(fmt.Sprintf("Token is not a Name type: %s", t.kind)) +} + +// HasSeparator returns true if the field name is followed by the separator char +// ':', else false. It panics if type is not Name. +func (t Token) HasSeparator() bool { + if t.kind == Name { + return t.attrs&hasSeparator != 0 + } + panic(fmt.Sprintf("Token is not a Name type: %s", t.kind)) +} + +// IdentName returns the value for IdentName type. +func (t Token) IdentName() string { + if t.kind == Name && t.attrs&uint8(IdentName) != 0 { + return string(t.raw) + } + panic(fmt.Sprintf("Token is not an IdentName: %s:%s", t.kind, NameKind(t.attrs&^hasSeparator))) +} + +// TypeName returns the value for TypeName type. +func (t Token) TypeName() string { + if t.kind == Name && t.attrs&uint8(TypeName) != 0 { + return t.str + } + panic(fmt.Sprintf("Token is not a TypeName: %s:%s", t.kind, NameKind(t.attrs&^hasSeparator))) +} + +// FieldNumber returns the value for FieldNumber type. It returns a +// non-negative int32 value. Caller will still need to validate for the correct +// field number range. +func (t Token) FieldNumber() int32 { + if t.kind != Name || t.attrs&uint8(FieldNumber) == 0 { + panic(fmt.Sprintf("Token is not a FieldNumber: %s:%s", t.kind, NameKind(t.attrs&^hasSeparator))) + } + // Following should not return an error as it had already been called right + // before this Token was constructed. + num, _ := strconv.ParseInt(string(t.raw), 10, 32) + return int32(num) +} + +// String returns the string value for a Scalar type. +func (t Token) String() (string, bool) { + if t.kind != Scalar || t.attrs != stringValue { + return "", false + } + return t.str, true +} + +// Enum returns the literal value for a Scalar type for use as enum literals. +func (t Token) Enum() (string, bool) { + if t.kind != Scalar || t.attrs != literalValue || (len(t.raw) > 0 && t.raw[0] == '-') { + return "", false + } + return string(t.raw), true +} + +// Bool returns the bool value for a Scalar type. +func (t Token) Bool() (bool, bool) { + if t.kind != Scalar { + return false, false + } + switch t.attrs { + case literalValue: + if b, ok := boolLits[string(t.raw)]; ok { + return b, true + } + case numberValue: + // Unsigned integer representation of 0 or 1 is permitted: 00, 0x0, 01, + // 0x1, etc. + n, err := strconv.ParseUint(t.str, 0, 64) + if err == nil { + switch n { + case 0: + return false, true + case 1: + return true, true + } + } + } + return false, false +} + +// These exact boolean literals are the ones supported in C++. +var boolLits = map[string]bool{ + "t": true, + "true": true, + "True": true, + "f": false, + "false": false, + "False": false, +} + +// Uint64 returns the uint64 value for a Scalar type. +func (t Token) Uint64() (uint64, bool) { + if t.kind != Scalar || t.attrs != numberValue || + t.numAttrs&isNegative > 0 || t.numAttrs&numFloat > 0 { + return 0, false + } + n, err := strconv.ParseUint(t.str, 0, 64) + if err != nil { + return 0, false + } + return n, true +} + +// Uint32 returns the uint32 value for a Scalar type. +func (t Token) Uint32() (uint32, bool) { + if t.kind != Scalar || t.attrs != numberValue || + t.numAttrs&isNegative > 0 || t.numAttrs&numFloat > 0 { + return 0, false + } + n, err := strconv.ParseUint(t.str, 0, 32) + if err != nil { + return 0, false + } + return uint32(n), true +} + +// Int64 returns the int64 value for a Scalar type. +func (t Token) Int64() (int64, bool) { + if t.kind != Scalar || t.attrs != numberValue || t.numAttrs&numFloat > 0 { + return 0, false + } + if n, err := strconv.ParseInt(t.str, 0, 64); err == nil { + return n, true + } + // C++ accepts large positive hex numbers as negative values. + // This feature is here for proto1 backwards compatibility purposes. + if flags.ProtoLegacy && (t.numAttrs == numHex) { + if n, err := strconv.ParseUint(t.str, 0, 64); err == nil { + return int64(n), true + } + } + return 0, false +} + +// Int32 returns the int32 value for a Scalar type. +func (t Token) Int32() (int32, bool) { + if t.kind != Scalar || t.attrs != numberValue || t.numAttrs&numFloat > 0 { + return 0, false + } + if n, err := strconv.ParseInt(t.str, 0, 32); err == nil { + return int32(n), true + } + // C++ accepts large positive hex numbers as negative values. + // This feature is here for proto1 backwards compatibility purposes. + if flags.ProtoLegacy && (t.numAttrs == numHex) { + if n, err := strconv.ParseUint(t.str, 0, 32); err == nil { + return int32(n), true + } + } + return 0, false +} + +// Float64 returns the float64 value for a Scalar type. +func (t Token) Float64() (float64, bool) { + if t.kind != Scalar { + return 0, false + } + switch t.attrs { + case literalValue: + if f, ok := floatLits[strings.ToLower(string(t.raw))]; ok { + return f, true + } + case numberValue: + n, err := strconv.ParseFloat(t.str, 64) + if err == nil { + return n, true + } + nerr := err.(*strconv.NumError) + if nerr.Err == strconv.ErrRange { + return n, true + } + } + return 0, false +} + +// Float32 returns the float32 value for a Scalar type. +func (t Token) Float32() (float32, bool) { + if t.kind != Scalar { + return 0, false + } + switch t.attrs { + case literalValue: + if f, ok := floatLits[strings.ToLower(string(t.raw))]; ok { + return float32(f), true + } + case numberValue: + n, err := strconv.ParseFloat(t.str, 64) + if err == nil { + // Overflows are treated as (-)infinity. + return float32(n), true + } + nerr := err.(*strconv.NumError) + if nerr.Err == strconv.ErrRange { + return float32(n), true + } + } + return 0, false +} + +// These are the supported float literals which C++ permits case-insensitive +// variants of these. +var floatLits = map[string]float64{ + "nan": math.NaN(), + "inf": math.Inf(1), + "infinity": math.Inf(1), + "-inf": math.Inf(-1), + "-infinity": math.Inf(-1), +} + +// TokenEquals returns true if given Tokens are equal, else false. +func TokenEquals(x, y Token) bool { + return x.kind == y.kind && + x.attrs == y.attrs && + x.numAttrs == y.numAttrs && + x.pos == y.pos && + bytes.Equal(x.raw, y.raw) && + x.str == y.str +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/text/doc.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/text/doc.go new file mode 100644 index 0000000..7ae6c2a --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/text/doc.go @@ -0,0 +1,29 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package text implements the text format for protocol buffers. +// This package has no semantic understanding for protocol buffers and is only +// a parser and composer for the format. +// +// There is no formal specification for the protobuf text format, as such the +// C++ implementation (see google::protobuf::TextFormat) is the reference +// implementation of the text format. +// +// This package is neither a superset nor a subset of the C++ implementation. +// This implementation permits a more liberal grammar in some cases to be +// backwards compatible with the historical Go implementation. +// Future parsings unique to Go should not be added. +// Some grammars allowed by the C++ implementation are deliberately +// not implemented here because they are considered a bug by the protobuf team +// and should not be replicated. +// +// The Go implementation should implement a sufficient amount of the C++ +// grammar such that the default text serialization by C++ can be parsed by Go. +// However, just because the C++ parser accepts some input does not mean that +// the Go implementation should as well. +// +// The text format is almost a superset of JSON except: +// - message keys are not quoted strings, but identifiers +// - the top-level value must be a message without the delimiters +package text diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go new file mode 100644 index 0000000..cf7aed7 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/encoding/text/encode.go @@ -0,0 +1,272 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package text + +import ( + "math" + "math/bits" + "strconv" + "strings" + "unicode/utf8" + + "google.golang.org/protobuf/internal/detrand" + "google.golang.org/protobuf/internal/errors" +) + +// encType represents an encoding type. +type encType uint8 + +const ( + _ encType = (1 << iota) / 2 + name + scalar + messageOpen + messageClose +) + +// Encoder provides methods to write out textproto constructs and values. The user is +// responsible for producing valid sequences of constructs and values. +type Encoder struct { + encoderState + + indent string + delims [2]byte + outputASCII bool +} + +type encoderState struct { + lastType encType + indents []byte + out []byte +} + +// NewEncoder returns an Encoder. +// +// If indent is a non-empty string, it causes every entry in a List or Message +// to be preceded by the indent and trailed by a newline. +// +// If delims is not the zero value, it controls the delimiter characters used +// for messages (e.g., "{}" vs "<>"). +// +// If outputASCII is true, strings will be serialized in such a way that +// multi-byte UTF-8 sequences are escaped. This property ensures that the +// overall output is ASCII (as opposed to UTF-8). +func NewEncoder(buf []byte, indent string, delims [2]byte, outputASCII bool) (*Encoder, error) { + e := &Encoder{ + encoderState: encoderState{out: buf}, + } + if len(indent) > 0 { + if strings.Trim(indent, " \t") != "" { + return nil, errors.New("indent may only be composed of space and tab characters") + } + e.indent = indent + } + switch delims { + case [2]byte{0, 0}: + e.delims = [2]byte{'{', '}'} + case [2]byte{'{', '}'}, [2]byte{'<', '>'}: + e.delims = delims + default: + return nil, errors.New("delimiters may only be \"{}\" or \"<>\"") + } + e.outputASCII = outputASCII + + return e, nil +} + +// Bytes returns the content of the written bytes. +func (e *Encoder) Bytes() []byte { + return e.out +} + +// StartMessage writes out the '{' or '<' symbol. +func (e *Encoder) StartMessage() { + e.prepareNext(messageOpen) + e.out = append(e.out, e.delims[0]) +} + +// EndMessage writes out the '}' or '>' symbol. +func (e *Encoder) EndMessage() { + e.prepareNext(messageClose) + e.out = append(e.out, e.delims[1]) +} + +// WriteName writes out the field name and the separator ':'. +func (e *Encoder) WriteName(s string) { + e.prepareNext(name) + e.out = append(e.out, s...) + e.out = append(e.out, ':') +} + +// WriteBool writes out the given boolean value. +func (e *Encoder) WriteBool(b bool) { + if b { + e.WriteLiteral("true") + } else { + e.WriteLiteral("false") + } +} + +// WriteString writes out the given string value. +func (e *Encoder) WriteString(s string) { + e.prepareNext(scalar) + e.out = appendString(e.out, s, e.outputASCII) +} + +func appendString(out []byte, in string, outputASCII bool) []byte { + out = append(out, '"') + i := indexNeedEscapeInString(in) + in, out = in[i:], append(out, in[:i]...) + for len(in) > 0 { + switch r, n := utf8.DecodeRuneInString(in); { + case r == utf8.RuneError && n == 1: + // We do not report invalid UTF-8 because strings in the text format + // are used to represent both the proto string and bytes type. + r = rune(in[0]) + fallthrough + case r < ' ' || r == '"' || r == '\\' || r == 0x7f: + out = append(out, '\\') + switch r { + case '"', '\\': + out = append(out, byte(r)) + case '\n': + out = append(out, 'n') + case '\r': + out = append(out, 'r') + case '\t': + out = append(out, 't') + default: + out = append(out, 'x') + out = append(out, "00"[1+(bits.Len32(uint32(r))-1)/4:]...) + out = strconv.AppendUint(out, uint64(r), 16) + } + in = in[n:] + case r >= utf8.RuneSelf && (outputASCII || r <= 0x009f): + out = append(out, '\\') + if r <= math.MaxUint16 { + out = append(out, 'u') + out = append(out, "0000"[1+(bits.Len32(uint32(r))-1)/4:]...) + out = strconv.AppendUint(out, uint64(r), 16) + } else { + out = append(out, 'U') + out = append(out, "00000000"[1+(bits.Len32(uint32(r))-1)/4:]...) + out = strconv.AppendUint(out, uint64(r), 16) + } + in = in[n:] + default: + i := indexNeedEscapeInString(in[n:]) + in, out = in[n+i:], append(out, in[:n+i]...) + } + } + out = append(out, '"') + return out +} + +// indexNeedEscapeInString returns the index of the character that needs +// escaping. If no characters need escaping, this returns the input length. +func indexNeedEscapeInString(s string) int { + for i := 0; i < len(s); i++ { + if c := s[i]; c < ' ' || c == '"' || c == '\'' || c == '\\' || c >= 0x7f { + return i + } + } + return len(s) +} + +// WriteFloat writes out the given float value for given bitSize. +func (e *Encoder) WriteFloat(n float64, bitSize int) { + e.prepareNext(scalar) + e.out = appendFloat(e.out, n, bitSize) +} + +func appendFloat(out []byte, n float64, bitSize int) []byte { + switch { + case math.IsNaN(n): + return append(out, "nan"...) + case math.IsInf(n, +1): + return append(out, "inf"...) + case math.IsInf(n, -1): + return append(out, "-inf"...) + default: + return strconv.AppendFloat(out, n, 'g', -1, bitSize) + } +} + +// WriteInt writes out the given signed integer value. +func (e *Encoder) WriteInt(n int64) { + e.prepareNext(scalar) + e.out = strconv.AppendInt(e.out, n, 10) +} + +// WriteUint writes out the given unsigned integer value. +func (e *Encoder) WriteUint(n uint64) { + e.prepareNext(scalar) + e.out = strconv.AppendUint(e.out, n, 10) +} + +// WriteLiteral writes out the given string as a literal value without quotes. +// This is used for writing enum literal strings. +func (e *Encoder) WriteLiteral(s string) { + e.prepareNext(scalar) + e.out = append(e.out, s...) +} + +// prepareNext adds possible space and indentation for the next value based +// on last encType and indent option. It also updates e.lastType to next. +func (e *Encoder) prepareNext(next encType) { + defer func() { + e.lastType = next + }() + + // Single line. + if len(e.indent) == 0 { + // Add space after each field before the next one. + if e.lastType&(scalar|messageClose) != 0 && next == name { + e.out = append(e.out, ' ') + // Add a random extra space to make output unstable. + if detrand.Bool() { + e.out = append(e.out, ' ') + } + } + return + } + + // Multi-line. + switch { + case e.lastType == name: + e.out = append(e.out, ' ') + // Add a random extra space after name: to make output unstable. + if detrand.Bool() { + e.out = append(e.out, ' ') + } + + case e.lastType == messageOpen && next != messageClose: + e.indents = append(e.indents, e.indent...) + e.out = append(e.out, '\n') + e.out = append(e.out, e.indents...) + + case e.lastType&(scalar|messageClose) != 0: + if next == messageClose { + e.indents = e.indents[:len(e.indents)-len(e.indent)] + } + e.out = append(e.out, '\n') + e.out = append(e.out, e.indents...) + } +} + +// Snapshot returns the current snapshot for use in Reset. +func (e *Encoder) Snapshot() encoderState { + return e.encoderState +} + +// Reset resets the Encoder to the given encoderState from a Snapshot. +func (e *Encoder) Reset(es encoderState) { + e.encoderState = es +} + +// AppendString appends the escaped form of the input string to b. +func AppendString(b []byte, s string) []byte { + return appendString(b, s, false) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/errors/errors.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/errors/errors.go new file mode 100644 index 0000000..c2d6bd5 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/errors/errors.go @@ -0,0 +1,104 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package errors implements functions to manipulate errors. +package errors + +import ( + "errors" + "fmt" + + "google.golang.org/protobuf/internal/detrand" +) + +// Error is a sentinel matching all errors produced by this package. +var Error = errors.New("protobuf error") + +// New formats a string according to the format specifier and arguments and +// returns an error that has a "proto" prefix. +func New(f string, x ...any) error { + return &prefixError{s: format(f, x...)} +} + +type prefixError struct{ s string } + +var prefix = func() string { + // Deliberately introduce instability into the error message string to + // discourage users from performing error string comparisons. + if detrand.Bool() { + return "proto: " // use non-breaking spaces (U+00a0) + } else { + return "proto: " // use regular spaces (U+0020) + } +}() + +func (e *prefixError) Error() string { + return prefix + e.s +} + +func (e *prefixError) Unwrap() error { + return Error +} + +// Wrap returns an error that has a "proto" prefix, the formatted string described +// by the format specifier and arguments, and a suffix of err. The error wraps err. +func Wrap(err error, f string, x ...any) error { + return &wrapError{ + s: format(f, x...), + err: err, + } +} + +type wrapError struct { + s string + err error +} + +func (e *wrapError) Error() string { + return format("%v%v: %v", prefix, e.s, e.err) +} + +func (e *wrapError) Unwrap() error { + return e.err +} + +func (e *wrapError) Is(target error) bool { + return target == Error +} + +func format(f string, x ...any) string { + // avoid "proto: " prefix when chaining + for i := 0; i < len(x); i++ { + switch e := x[i].(type) { + case *prefixError: + x[i] = e.s + case *wrapError: + x[i] = format("%v: %v", e.s, e.err) + } + } + return fmt.Sprintf(f, x...) +} + +func InvalidUTF8(name string) error { + return New("field %v contains invalid UTF-8", name) +} + +func RequiredNotSet(name string) error { + return New("required field %v not set", name) +} + +type SizeMismatchError struct { + Calculated, Measured int +} + +func (e *SizeMismatchError) Error() string { + return fmt.Sprintf("size mismatch (see https://github.com/golang/protobuf/issues/1609): calculated=%d, measured=%d", e.Calculated, e.Measured) +} + +func MismatchedSizeCalculation(calculated, measured int) error { + return &SizeMismatchError{ + Calculated: calculated, + Measured: measured, + } +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/build.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/build.go new file mode 100644 index 0000000..7cac1c1 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/build.go @@ -0,0 +1,157 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package filedesc provides functionality for constructing descriptors. +// +// The types in this package implement interfaces in the protoreflect package +// related to protobuf descripriptors. +package filedesc + +import ( + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/genid" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" +) + +// Builder construct a protoreflect.FileDescriptor from the raw descriptor. +type Builder struct { + // GoPackagePath is the Go package path that is invoking this builder. + GoPackagePath string + + // RawDescriptor is the wire-encoded bytes of FileDescriptorProto + // and must be populated. + RawDescriptor []byte + + // NumEnums is the total number of enums declared in the file. + NumEnums int32 + // NumMessages is the total number of messages declared in the file. + // It includes the implicit message declarations for map entries. + NumMessages int32 + // NumExtensions is the total number of extensions declared in the file. + NumExtensions int32 + // NumServices is the total number of services declared in the file. + NumServices int32 + + // TypeResolver resolves extension field types for descriptor options. + // If nil, it uses protoregistry.GlobalTypes. + TypeResolver interface { + protoregistry.ExtensionTypeResolver + } + + // FileRegistry is use to lookup file, enum, and message dependencies. + // Once constructed, the file descriptor is registered here. + // If nil, it uses protoregistry.GlobalFiles. + FileRegistry interface { + FindFileByPath(string) (protoreflect.FileDescriptor, error) + FindDescriptorByName(protoreflect.FullName) (protoreflect.Descriptor, error) + RegisterFile(protoreflect.FileDescriptor) error + } +} + +// resolverByIndex is an interface Builder.FileRegistry may implement. +// If so, it permits looking up an enum or message dependency based on the +// sub-list and element index into filetype.Builder.DependencyIndexes. +type resolverByIndex interface { + FindEnumByIndex(int32, int32, []Enum, []Message) protoreflect.EnumDescriptor + FindMessageByIndex(int32, int32, []Enum, []Message) protoreflect.MessageDescriptor +} + +// Indexes of each sub-list in filetype.Builder.DependencyIndexes. +const ( + listFieldDeps int32 = iota + listExtTargets + listExtDeps + listMethInDeps + listMethOutDeps +) + +// Out is the output of the Builder. +type Out struct { + File protoreflect.FileDescriptor + + // Enums is all enum descriptors in "flattened ordering". + Enums []Enum + // Messages is all message descriptors in "flattened ordering". + // It includes the implicit message declarations for map entries. + Messages []Message + // Extensions is all extension descriptors in "flattened ordering". + Extensions []Extension + // Service is all service descriptors in "flattened ordering". + Services []Service +} + +// Build constructs a FileDescriptor given the parameters set in Builder. +// It assumes that the inputs are well-formed and panics if any inconsistencies +// are encountered. +// +// If NumEnums+NumMessages+NumExtensions+NumServices is zero, +// then Build automatically derives them from the raw descriptor. +func (db Builder) Build() (out Out) { + // Populate the counts if uninitialized. + if db.NumEnums+db.NumMessages+db.NumExtensions+db.NumServices == 0 { + db.unmarshalCounts(db.RawDescriptor, true) + } + + // Initialize resolvers and registries if unpopulated. + if db.TypeResolver == nil { + db.TypeResolver = protoregistry.GlobalTypes + } + if db.FileRegistry == nil { + db.FileRegistry = protoregistry.GlobalFiles + } + + fd := newRawFile(db) + out.File = fd + out.Enums = fd.allEnums + out.Messages = fd.allMessages + out.Extensions = fd.allExtensions + out.Services = fd.allServices + + if err := db.FileRegistry.RegisterFile(fd); err != nil { + panic(err) + } + return out +} + +// unmarshalCounts counts the number of enum, message, extension, and service +// declarations in the raw message, which is either a FileDescriptorProto +// or a MessageDescriptorProto depending on whether isFile is set. +func (db *Builder) unmarshalCounts(b []byte, isFile bool) { + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + if isFile { + switch num { + case genid.FileDescriptorProto_EnumType_field_number: + db.NumEnums++ + case genid.FileDescriptorProto_MessageType_field_number: + db.unmarshalCounts(v, false) + db.NumMessages++ + case genid.FileDescriptorProto_Extension_field_number: + db.NumExtensions++ + case genid.FileDescriptorProto_Service_field_number: + db.NumServices++ + } + } else { + switch num { + case genid.DescriptorProto_EnumType_field_number: + db.NumEnums++ + case genid.DescriptorProto_NestedType_field_number: + db.unmarshalCounts(v, false) + db.NumMessages++ + case genid.DescriptorProto_Extension_field_number: + db.NumExtensions++ + } + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/desc.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/desc.go new file mode 100644 index 0000000..688aabe --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/desc.go @@ -0,0 +1,748 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package filedesc + +import ( + "bytes" + "fmt" + "strings" + "sync" + "sync/atomic" + + "google.golang.org/protobuf/internal/descfmt" + "google.golang.org/protobuf/internal/descopts" + "google.golang.org/protobuf/internal/encoding/defval" + "google.golang.org/protobuf/internal/encoding/messageset" + "google.golang.org/protobuf/internal/genid" + "google.golang.org/protobuf/internal/pragma" + "google.golang.org/protobuf/internal/strs" + "google.golang.org/protobuf/reflect/protoreflect" +) + +// Edition is an Enum for proto2.Edition +type Edition int32 + +// These values align with the value of Enum in descriptor.proto which allows +// direct conversion between the proto enum and this enum. +const ( + EditionUnknown Edition = 0 + EditionProto2 Edition = 998 + EditionProto3 Edition = 999 + Edition2023 Edition = 1000 + Edition2024 Edition = 1001 + EditionUnsupported Edition = 100000 +) + +// The types in this file may have a suffix: +// • L0: Contains fields common to all descriptors (except File) and +// must be initialized up front. +// • L1: Contains fields specific to a descriptor and +// must be initialized up front. If the associated proto uses Editions, the +// Editions features must always be resolved. If not explicitly set, the +// appropriate default must be resolved and set. +// • L2: Contains fields that are lazily initialized when constructing +// from the raw file descriptor. When constructing as a literal, the L2 +// fields must be initialized up front. +// +// The types are exported so that packages like reflect/protodesc can +// directly construct descriptors. + +type ( + File struct { + fileRaw + L1 FileL1 + + once uint32 // atomically set if L2 is valid + mu sync.Mutex // protects L2 + L2 *FileL2 + } + FileL1 struct { + Syntax protoreflect.Syntax + Edition Edition // Only used if Syntax == Editions + Path string + Package protoreflect.FullName + + Enums Enums + Messages Messages + Extensions Extensions + Services Services + + EditionFeatures EditionFeatures + } + FileL2 struct { + Options func() protoreflect.ProtoMessage + Imports FileImports + Locations SourceLocations + } + + // EditionFeatures is a frequently-instantiated struct, so please take care + // to minimize padding when adding new fields to this struct (add them in + // the right place/order). + EditionFeatures struct { + // StripEnumPrefix determines if the plugin generates enum value + // constants as-is, with their prefix stripped, or both variants. + StripEnumPrefix int + + // IsFieldPresence is true if field_presence is EXPLICIT + // https://protobuf.dev/editions/features/#field_presence + IsFieldPresence bool + + // IsFieldPresence is true if field_presence is LEGACY_REQUIRED + // https://protobuf.dev/editions/features/#field_presence + IsLegacyRequired bool + + // IsOpenEnum is true if enum_type is OPEN + // https://protobuf.dev/editions/features/#enum_type + IsOpenEnum bool + + // IsPacked is true if repeated_field_encoding is PACKED + // https://protobuf.dev/editions/features/#repeated_field_encoding + IsPacked bool + + // IsUTF8Validated is true if utf_validation is VERIFY + // https://protobuf.dev/editions/features/#utf8_validation + IsUTF8Validated bool + + // IsDelimitedEncoded is true if message_encoding is DELIMITED + // https://protobuf.dev/editions/features/#message_encoding + IsDelimitedEncoded bool + + // IsJSONCompliant is true if json_format is ALLOW + // https://protobuf.dev/editions/features/#json_format + IsJSONCompliant bool + + // GenerateLegacyUnmarshalJSON determines if the plugin generates the + // UnmarshalJSON([]byte) error method for enums. + GenerateLegacyUnmarshalJSON bool + // APILevel controls which API (Open, Hybrid or Opaque) should be used + // for generated code (.pb.go files). + APILevel int + } +) + +func (fd *File) ParentFile() protoreflect.FileDescriptor { return fd } +func (fd *File) Parent() protoreflect.Descriptor { return nil } +func (fd *File) Index() int { return 0 } +func (fd *File) Syntax() protoreflect.Syntax { return fd.L1.Syntax } + +// Not exported and just used to reconstruct the original FileDescriptor proto +func (fd *File) Edition() int32 { return int32(fd.L1.Edition) } +func (fd *File) Name() protoreflect.Name { return fd.L1.Package.Name() } +func (fd *File) FullName() protoreflect.FullName { return fd.L1.Package } +func (fd *File) IsPlaceholder() bool { return false } +func (fd *File) Options() protoreflect.ProtoMessage { + if f := fd.lazyInit().Options; f != nil { + return f() + } + return descopts.File +} +func (fd *File) Path() string { return fd.L1.Path } +func (fd *File) Package() protoreflect.FullName { return fd.L1.Package } +func (fd *File) Imports() protoreflect.FileImports { return &fd.lazyInit().Imports } +func (fd *File) Enums() protoreflect.EnumDescriptors { return &fd.L1.Enums } +func (fd *File) Messages() protoreflect.MessageDescriptors { return &fd.L1.Messages } +func (fd *File) Extensions() protoreflect.ExtensionDescriptors { return &fd.L1.Extensions } +func (fd *File) Services() protoreflect.ServiceDescriptors { return &fd.L1.Services } +func (fd *File) SourceLocations() protoreflect.SourceLocations { return &fd.lazyInit().Locations } +func (fd *File) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, fd) } +func (fd *File) ProtoType(protoreflect.FileDescriptor) {} +func (fd *File) ProtoInternal(pragma.DoNotImplement) {} + +func (fd *File) lazyInit() *FileL2 { + if atomic.LoadUint32(&fd.once) == 0 { + fd.lazyInitOnce() + } + return fd.L2 +} + +func (fd *File) lazyInitOnce() { + fd.mu.Lock() + if fd.L2 == nil { + fd.lazyRawInit() // recursively initializes all L2 structures + } + atomic.StoreUint32(&fd.once, 1) + fd.mu.Unlock() +} + +// GoPackagePath is a pseudo-internal API for determining the Go package path +// that this file descriptor is declared in. +// +// WARNING: This method is exempt from the compatibility promise and may be +// removed in the future without warning. +func (fd *File) GoPackagePath() string { + return fd.builder.GoPackagePath +} + +type ( + Enum struct { + Base + L1 EnumL1 + L2 *EnumL2 // protected by fileDesc.once + } + EnumL1 struct { + eagerValues bool // controls whether EnumL2.Values is already populated + + EditionFeatures EditionFeatures + } + EnumL2 struct { + Options func() protoreflect.ProtoMessage + Values EnumValues + ReservedNames Names + ReservedRanges EnumRanges + } + + EnumValue struct { + Base + L1 EnumValueL1 + } + EnumValueL1 struct { + Options func() protoreflect.ProtoMessage + Number protoreflect.EnumNumber + } +) + +func (ed *Enum) Options() protoreflect.ProtoMessage { + if f := ed.lazyInit().Options; f != nil { + return f() + } + return descopts.Enum +} +func (ed *Enum) Values() protoreflect.EnumValueDescriptors { + if ed.L1.eagerValues { + return &ed.L2.Values + } + return &ed.lazyInit().Values +} +func (ed *Enum) ReservedNames() protoreflect.Names { return &ed.lazyInit().ReservedNames } +func (ed *Enum) ReservedRanges() protoreflect.EnumRanges { return &ed.lazyInit().ReservedRanges } +func (ed *Enum) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, ed) } +func (ed *Enum) ProtoType(protoreflect.EnumDescriptor) {} +func (ed *Enum) lazyInit() *EnumL2 { + ed.L0.ParentFile.lazyInit() // implicitly initializes L2 + return ed.L2 +} +func (ed *Enum) IsClosed() bool { + return !ed.L1.EditionFeatures.IsOpenEnum +} + +func (ed *EnumValue) Options() protoreflect.ProtoMessage { + if f := ed.L1.Options; f != nil { + return f() + } + return descopts.EnumValue +} +func (ed *EnumValue) Number() protoreflect.EnumNumber { return ed.L1.Number } +func (ed *EnumValue) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, ed) } +func (ed *EnumValue) ProtoType(protoreflect.EnumValueDescriptor) {} + +type ( + Message struct { + Base + L1 MessageL1 + L2 *MessageL2 // protected by fileDesc.once + } + MessageL1 struct { + Enums Enums + Messages Messages + Extensions Extensions + IsMapEntry bool // promoted from google.protobuf.MessageOptions + IsMessageSet bool // promoted from google.protobuf.MessageOptions + + EditionFeatures EditionFeatures + } + MessageL2 struct { + Options func() protoreflect.ProtoMessage + Fields Fields + Oneofs Oneofs + ReservedNames Names + ReservedRanges FieldRanges + RequiredNumbers FieldNumbers // must be consistent with Fields.Cardinality + ExtensionRanges FieldRanges + ExtensionRangeOptions []func() protoreflect.ProtoMessage // must be same length as ExtensionRanges + } + + Field struct { + Base + L1 FieldL1 + } + FieldL1 struct { + Options func() protoreflect.ProtoMessage + Number protoreflect.FieldNumber + Cardinality protoreflect.Cardinality // must be consistent with Message.RequiredNumbers + Kind protoreflect.Kind + StringName stringName + IsProto3Optional bool // promoted from google.protobuf.FieldDescriptorProto + IsLazy bool // promoted from google.protobuf.FieldOptions + Default defaultValue + ContainingOneof protoreflect.OneofDescriptor // must be consistent with Message.Oneofs.Fields + Enum protoreflect.EnumDescriptor + Message protoreflect.MessageDescriptor + + EditionFeatures EditionFeatures + } + + Oneof struct { + Base + L1 OneofL1 + } + OneofL1 struct { + Options func() protoreflect.ProtoMessage + Fields OneofFields // must be consistent with Message.Fields.ContainingOneof + + EditionFeatures EditionFeatures + } +) + +func (md *Message) Options() protoreflect.ProtoMessage { + if f := md.lazyInit().Options; f != nil { + return f() + } + return descopts.Message +} +func (md *Message) IsMapEntry() bool { return md.L1.IsMapEntry } +func (md *Message) Fields() protoreflect.FieldDescriptors { return &md.lazyInit().Fields } +func (md *Message) Oneofs() protoreflect.OneofDescriptors { return &md.lazyInit().Oneofs } +func (md *Message) ReservedNames() protoreflect.Names { return &md.lazyInit().ReservedNames } +func (md *Message) ReservedRanges() protoreflect.FieldRanges { return &md.lazyInit().ReservedRanges } +func (md *Message) RequiredNumbers() protoreflect.FieldNumbers { return &md.lazyInit().RequiredNumbers } +func (md *Message) ExtensionRanges() protoreflect.FieldRanges { return &md.lazyInit().ExtensionRanges } +func (md *Message) ExtensionRangeOptions(i int) protoreflect.ProtoMessage { + if f := md.lazyInit().ExtensionRangeOptions[i]; f != nil { + return f() + } + return descopts.ExtensionRange +} +func (md *Message) Enums() protoreflect.EnumDescriptors { return &md.L1.Enums } +func (md *Message) Messages() protoreflect.MessageDescriptors { return &md.L1.Messages } +func (md *Message) Extensions() protoreflect.ExtensionDescriptors { return &md.L1.Extensions } +func (md *Message) ProtoType(protoreflect.MessageDescriptor) {} +func (md *Message) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, md) } +func (md *Message) lazyInit() *MessageL2 { + md.L0.ParentFile.lazyInit() // implicitly initializes L2 + return md.L2 +} + +// IsMessageSet is a pseudo-internal API for checking whether a message +// should serialize in the proto1 message format. +// +// WARNING: This method is exempt from the compatibility promise and may be +// removed in the future without warning. +func (md *Message) IsMessageSet() bool { + return md.L1.IsMessageSet +} + +func (fd *Field) Options() protoreflect.ProtoMessage { + if f := fd.L1.Options; f != nil { + return f() + } + return descopts.Field +} +func (fd *Field) Number() protoreflect.FieldNumber { return fd.L1.Number } +func (fd *Field) Cardinality() protoreflect.Cardinality { return fd.L1.Cardinality } +func (fd *Field) Kind() protoreflect.Kind { + return fd.L1.Kind +} +func (fd *Field) HasJSONName() bool { return fd.L1.StringName.hasJSON } +func (fd *Field) JSONName() string { return fd.L1.StringName.getJSON(fd) } +func (fd *Field) TextName() string { return fd.L1.StringName.getText(fd) } +func (fd *Field) HasPresence() bool { + if fd.L1.Cardinality == protoreflect.Repeated { + return false + } + return fd.IsExtension() || fd.L1.EditionFeatures.IsFieldPresence || fd.L1.Message != nil || fd.L1.ContainingOneof != nil +} +func (fd *Field) HasOptionalKeyword() bool { + return (fd.L0.ParentFile.L1.Syntax == protoreflect.Proto2 && fd.L1.Cardinality == protoreflect.Optional && fd.L1.ContainingOneof == nil) || fd.L1.IsProto3Optional +} +func (fd *Field) IsPacked() bool { + if fd.L1.Cardinality != protoreflect.Repeated { + return false + } + switch fd.L1.Kind { + case protoreflect.StringKind, protoreflect.BytesKind, protoreflect.MessageKind, protoreflect.GroupKind: + return false + } + return fd.L1.EditionFeatures.IsPacked +} +func (fd *Field) IsExtension() bool { return false } +func (fd *Field) IsWeak() bool { return false } +func (fd *Field) IsLazy() bool { return fd.L1.IsLazy } +func (fd *Field) IsList() bool { return fd.Cardinality() == protoreflect.Repeated && !fd.IsMap() } +func (fd *Field) IsMap() bool { return fd.Message() != nil && fd.Message().IsMapEntry() } +func (fd *Field) MapKey() protoreflect.FieldDescriptor { + if !fd.IsMap() { + return nil + } + return fd.Message().Fields().ByNumber(genid.MapEntry_Key_field_number) +} +func (fd *Field) MapValue() protoreflect.FieldDescriptor { + if !fd.IsMap() { + return nil + } + return fd.Message().Fields().ByNumber(genid.MapEntry_Value_field_number) +} +func (fd *Field) HasDefault() bool { return fd.L1.Default.has } +func (fd *Field) Default() protoreflect.Value { return fd.L1.Default.get(fd) } +func (fd *Field) DefaultEnumValue() protoreflect.EnumValueDescriptor { return fd.L1.Default.enum } +func (fd *Field) ContainingOneof() protoreflect.OneofDescriptor { return fd.L1.ContainingOneof } +func (fd *Field) ContainingMessage() protoreflect.MessageDescriptor { + return fd.L0.Parent.(protoreflect.MessageDescriptor) +} +func (fd *Field) Enum() protoreflect.EnumDescriptor { + return fd.L1.Enum +} +func (fd *Field) Message() protoreflect.MessageDescriptor { + return fd.L1.Message +} +func (fd *Field) IsMapEntry() bool { + parent, ok := fd.L0.Parent.(protoreflect.MessageDescriptor) + return ok && parent.IsMapEntry() +} +func (fd *Field) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, fd) } +func (fd *Field) ProtoType(protoreflect.FieldDescriptor) {} + +// EnforceUTF8 is a pseudo-internal API to determine whether to enforce UTF-8 +// validation for the string field. This exists for Google-internal use only +// since proto3 did not enforce UTF-8 validity prior to the open-source release. +// If this method does not exist, the default is to enforce valid UTF-8. +// +// WARNING: This method is exempt from the compatibility promise and may be +// removed in the future without warning. +func (fd *Field) EnforceUTF8() bool { + return fd.L1.EditionFeatures.IsUTF8Validated +} + +func (od *Oneof) IsSynthetic() bool { + return od.L0.ParentFile.L1.Syntax == protoreflect.Proto3 && len(od.L1.Fields.List) == 1 && od.L1.Fields.List[0].HasOptionalKeyword() +} +func (od *Oneof) Options() protoreflect.ProtoMessage { + if f := od.L1.Options; f != nil { + return f() + } + return descopts.Oneof +} +func (od *Oneof) Fields() protoreflect.FieldDescriptors { return &od.L1.Fields } +func (od *Oneof) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, od) } +func (od *Oneof) ProtoType(protoreflect.OneofDescriptor) {} + +type ( + Extension struct { + Base + L1 ExtensionL1 + L2 *ExtensionL2 // protected by fileDesc.once + } + ExtensionL1 struct { + Number protoreflect.FieldNumber + Extendee protoreflect.MessageDescriptor + Cardinality protoreflect.Cardinality + Kind protoreflect.Kind + IsLazy bool + EditionFeatures EditionFeatures + } + ExtensionL2 struct { + Options func() protoreflect.ProtoMessage + StringName stringName + IsProto3Optional bool // promoted from google.protobuf.FieldDescriptorProto + Default defaultValue + Enum protoreflect.EnumDescriptor + Message protoreflect.MessageDescriptor + } +) + +func (xd *Extension) Options() protoreflect.ProtoMessage { + if f := xd.lazyInit().Options; f != nil { + return f() + } + return descopts.Field +} +func (xd *Extension) Number() protoreflect.FieldNumber { return xd.L1.Number } +func (xd *Extension) Cardinality() protoreflect.Cardinality { return xd.L1.Cardinality } +func (xd *Extension) Kind() protoreflect.Kind { return xd.L1.Kind } +func (xd *Extension) HasJSONName() bool { return xd.lazyInit().StringName.hasJSON } +func (xd *Extension) JSONName() string { return xd.lazyInit().StringName.getJSON(xd) } +func (xd *Extension) TextName() string { return xd.lazyInit().StringName.getText(xd) } +func (xd *Extension) HasPresence() bool { return xd.L1.Cardinality != protoreflect.Repeated } +func (xd *Extension) HasOptionalKeyword() bool { + return (xd.L0.ParentFile.L1.Syntax == protoreflect.Proto2 && xd.L1.Cardinality == protoreflect.Optional) || xd.lazyInit().IsProto3Optional +} +func (xd *Extension) IsPacked() bool { + if xd.L1.Cardinality != protoreflect.Repeated { + return false + } + switch xd.L1.Kind { + case protoreflect.StringKind, protoreflect.BytesKind, protoreflect.MessageKind, protoreflect.GroupKind: + return false + } + return xd.L1.EditionFeatures.IsPacked +} +func (xd *Extension) IsExtension() bool { return true } +func (xd *Extension) IsWeak() bool { return false } +func (xd *Extension) IsLazy() bool { return xd.L1.IsLazy } +func (xd *Extension) IsList() bool { return xd.Cardinality() == protoreflect.Repeated } +func (xd *Extension) IsMap() bool { return false } +func (xd *Extension) MapKey() protoreflect.FieldDescriptor { return nil } +func (xd *Extension) MapValue() protoreflect.FieldDescriptor { return nil } +func (xd *Extension) HasDefault() bool { return xd.lazyInit().Default.has } +func (xd *Extension) Default() protoreflect.Value { return xd.lazyInit().Default.get(xd) } +func (xd *Extension) DefaultEnumValue() protoreflect.EnumValueDescriptor { + return xd.lazyInit().Default.enum +} +func (xd *Extension) ContainingOneof() protoreflect.OneofDescriptor { return nil } +func (xd *Extension) ContainingMessage() protoreflect.MessageDescriptor { return xd.L1.Extendee } +func (xd *Extension) Enum() protoreflect.EnumDescriptor { return xd.lazyInit().Enum } +func (xd *Extension) Message() protoreflect.MessageDescriptor { return xd.lazyInit().Message } +func (xd *Extension) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, xd) } +func (xd *Extension) ProtoType(protoreflect.FieldDescriptor) {} +func (xd *Extension) ProtoInternal(pragma.DoNotImplement) {} +func (xd *Extension) lazyInit() *ExtensionL2 { + xd.L0.ParentFile.lazyInit() // implicitly initializes L2 + return xd.L2 +} + +type ( + Service struct { + Base + L1 ServiceL1 + L2 *ServiceL2 // protected by fileDesc.once + } + ServiceL1 struct{} + ServiceL2 struct { + Options func() protoreflect.ProtoMessage + Methods Methods + } + + Method struct { + Base + L1 MethodL1 + } + MethodL1 struct { + Options func() protoreflect.ProtoMessage + Input protoreflect.MessageDescriptor + Output protoreflect.MessageDescriptor + IsStreamingClient bool + IsStreamingServer bool + } +) + +func (sd *Service) Options() protoreflect.ProtoMessage { + if f := sd.lazyInit().Options; f != nil { + return f() + } + return descopts.Service +} +func (sd *Service) Methods() protoreflect.MethodDescriptors { return &sd.lazyInit().Methods } +func (sd *Service) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, sd) } +func (sd *Service) ProtoType(protoreflect.ServiceDescriptor) {} +func (sd *Service) ProtoInternal(pragma.DoNotImplement) {} +func (sd *Service) lazyInit() *ServiceL2 { + sd.L0.ParentFile.lazyInit() // implicitly initializes L2 + return sd.L2 +} + +func (md *Method) Options() protoreflect.ProtoMessage { + if f := md.L1.Options; f != nil { + return f() + } + return descopts.Method +} +func (md *Method) Input() protoreflect.MessageDescriptor { return md.L1.Input } +func (md *Method) Output() protoreflect.MessageDescriptor { return md.L1.Output } +func (md *Method) IsStreamingClient() bool { return md.L1.IsStreamingClient } +func (md *Method) IsStreamingServer() bool { return md.L1.IsStreamingServer } +func (md *Method) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, md) } +func (md *Method) ProtoType(protoreflect.MethodDescriptor) {} +func (md *Method) ProtoInternal(pragma.DoNotImplement) {} + +// Surrogate files are can be used to create standalone descriptors +// where the syntax is only information derived from the parent file. +var ( + SurrogateProto2 = &File{L1: FileL1{Syntax: protoreflect.Proto2}, L2: &FileL2{}} + SurrogateProto3 = &File{L1: FileL1{Syntax: protoreflect.Proto3}, L2: &FileL2{}} + SurrogateEdition2023 = &File{L1: FileL1{Syntax: protoreflect.Editions, Edition: Edition2023}, L2: &FileL2{}} +) + +type ( + Base struct { + L0 BaseL0 + } + BaseL0 struct { + FullName protoreflect.FullName // must be populated + ParentFile *File // must be populated + Parent protoreflect.Descriptor + Index int + } +) + +func (d *Base) Name() protoreflect.Name { return d.L0.FullName.Name() } +func (d *Base) FullName() protoreflect.FullName { return d.L0.FullName } +func (d *Base) ParentFile() protoreflect.FileDescriptor { + if d.L0.ParentFile == SurrogateProto2 || d.L0.ParentFile == SurrogateProto3 { + return nil // surrogate files are not real parents + } + return d.L0.ParentFile +} +func (d *Base) Parent() protoreflect.Descriptor { return d.L0.Parent } +func (d *Base) Index() int { return d.L0.Index } +func (d *Base) Syntax() protoreflect.Syntax { return d.L0.ParentFile.Syntax() } +func (d *Base) IsPlaceholder() bool { return false } +func (d *Base) ProtoInternal(pragma.DoNotImplement) {} + +type stringName struct { + hasJSON bool + once sync.Once + nameJSON string + nameText string +} + +// InitJSON initializes the name. It is exported for use by other internal packages. +func (s *stringName) InitJSON(name string) { + s.hasJSON = true + s.nameJSON = name +} + +// Returns true if this field is structured like the synthetic field of a proto2 +// group. This allows us to expand our treatment of delimited fields without +// breaking proto2 files that have been upgraded to editions. +func isGroupLike(fd protoreflect.FieldDescriptor) bool { + // Groups are always group types. + if fd.Kind() != protoreflect.GroupKind { + return false + } + + // Group fields are always the lowercase type name. + if strings.ToLower(string(fd.Message().Name())) != string(fd.Name()) { + return false + } + + // Groups could only be defined in the same file they're used. + if fd.Message().ParentFile() != fd.ParentFile() { + return false + } + + // Group messages are always defined in the same scope as the field. File + // level extensions will compare NULL == NULL here, which is why the file + // comparison above is necessary to ensure both come from the same file. + if fd.IsExtension() { + return fd.Parent() == fd.Message().Parent() + } + return fd.ContainingMessage() == fd.Message().Parent() +} + +func (s *stringName) lazyInit(fd protoreflect.FieldDescriptor) *stringName { + s.once.Do(func() { + if fd.IsExtension() { + // For extensions, JSON and text are formatted the same way. + var name string + if messageset.IsMessageSetExtension(fd) { + name = string("[" + fd.FullName().Parent() + "]") + } else { + name = string("[" + fd.FullName() + "]") + } + s.nameJSON = name + s.nameText = name + } else { + // Format the JSON name. + if !s.hasJSON { + s.nameJSON = strs.JSONCamelCase(string(fd.Name())) + } + + // Format the text name. + s.nameText = string(fd.Name()) + if isGroupLike(fd) { + s.nameText = string(fd.Message().Name()) + } + } + }) + return s +} + +func (s *stringName) getJSON(fd protoreflect.FieldDescriptor) string { return s.lazyInit(fd).nameJSON } +func (s *stringName) getText(fd protoreflect.FieldDescriptor) string { return s.lazyInit(fd).nameText } + +func DefaultValue(v protoreflect.Value, ev protoreflect.EnumValueDescriptor) defaultValue { + dv := defaultValue{has: v.IsValid(), val: v, enum: ev} + if b, ok := v.Interface().([]byte); ok { + // Store a copy of the default bytes, so that we can detect + // accidental mutations of the original value. + dv.bytes = append([]byte(nil), b...) + } + return dv +} + +func unmarshalDefault(b []byte, k protoreflect.Kind, pf *File, ed protoreflect.EnumDescriptor) defaultValue { + var evs protoreflect.EnumValueDescriptors + if k == protoreflect.EnumKind { + // If the enum is declared within the same file, be careful not to + // blindly call the Values method, lest we bind ourselves in a deadlock. + if e, ok := ed.(*Enum); ok && e.L0.ParentFile == pf { + evs = &e.L2.Values + } else { + evs = ed.Values() + } + + // If we are unable to resolve the enum dependency, use a placeholder + // enum value since we will not be able to parse the default value. + if ed.IsPlaceholder() && protoreflect.Name(b).IsValid() { + v := protoreflect.ValueOfEnum(0) + ev := PlaceholderEnumValue(ed.FullName().Parent().Append(protoreflect.Name(b))) + return DefaultValue(v, ev) + } + } + + v, ev, err := defval.Unmarshal(string(b), k, evs, defval.Descriptor) + if err != nil { + panic(err) + } + return DefaultValue(v, ev) +} + +type defaultValue struct { + has bool + val protoreflect.Value + enum protoreflect.EnumValueDescriptor + bytes []byte +} + +func (dv *defaultValue) get(fd protoreflect.FieldDescriptor) protoreflect.Value { + // Return the zero value as the default if unpopulated. + if !dv.has { + if fd.Cardinality() == protoreflect.Repeated { + return protoreflect.Value{} + } + switch fd.Kind() { + case protoreflect.BoolKind: + return protoreflect.ValueOfBool(false) + case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind: + return protoreflect.ValueOfInt32(0) + case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind: + return protoreflect.ValueOfInt64(0) + case protoreflect.Uint32Kind, protoreflect.Fixed32Kind: + return protoreflect.ValueOfUint32(0) + case protoreflect.Uint64Kind, protoreflect.Fixed64Kind: + return protoreflect.ValueOfUint64(0) + case protoreflect.FloatKind: + return protoreflect.ValueOfFloat32(0) + case protoreflect.DoubleKind: + return protoreflect.ValueOfFloat64(0) + case protoreflect.StringKind: + return protoreflect.ValueOfString("") + case protoreflect.BytesKind: + return protoreflect.ValueOfBytes(nil) + case protoreflect.EnumKind: + if evs := fd.Enum().Values(); evs.Len() > 0 { + return protoreflect.ValueOfEnum(evs.Get(0).Number()) + } + return protoreflect.ValueOfEnum(0) + } + } + + if len(dv.bytes) > 0 && !bytes.Equal(dv.bytes, dv.val.Bytes()) { + // TODO: Avoid panic if we're running with the race detector + // and instead spawn a goroutine that periodically resets + // this value back to the original to induce a race. + panic(fmt.Sprintf("detected mutation on the default bytes for %v", fd.FullName())) + } + return dv.val +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go new file mode 100644 index 0000000..d2f5494 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go @@ -0,0 +1,560 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package filedesc + +import ( + "fmt" + "sync" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/genid" + "google.golang.org/protobuf/internal/strs" + "google.golang.org/protobuf/reflect/protoreflect" +) + +// fileRaw is a data struct used when initializing a file descriptor from +// a raw FileDescriptorProto. +type fileRaw struct { + builder Builder + allEnums []Enum + allMessages []Message + allExtensions []Extension + allServices []Service +} + +func newRawFile(db Builder) *File { + fd := &File{fileRaw: fileRaw{builder: db}} + fd.initDecls(db.NumEnums, db.NumMessages, db.NumExtensions, db.NumServices) + fd.unmarshalSeed(db.RawDescriptor) + + // Extended message targets are eagerly resolved since registration + // needs this information at program init time. + for i := range fd.allExtensions { + xd := &fd.allExtensions[i] + xd.L1.Extendee = fd.resolveMessageDependency(xd.L1.Extendee, listExtTargets, int32(i)) + } + + fd.checkDecls() + return fd +} + +// initDecls pre-allocates slices for the exact number of enums, messages +// (including map entries), extensions, and services declared in the proto file. +// This is done to avoid regrowing the slice, which would change the address +// for any previously seen declaration. +// +// The alloc methods "allocates" slices by pulling from the capacity. +func (fd *File) initDecls(numEnums, numMessages, numExtensions, numServices int32) { + fd.allEnums = make([]Enum, 0, numEnums) + fd.allMessages = make([]Message, 0, numMessages) + fd.allExtensions = make([]Extension, 0, numExtensions) + fd.allServices = make([]Service, 0, numServices) +} + +func (fd *File) allocEnums(n int) []Enum { + total := len(fd.allEnums) + es := fd.allEnums[total : total+n] + fd.allEnums = fd.allEnums[:total+n] + return es +} +func (fd *File) allocMessages(n int) []Message { + total := len(fd.allMessages) + ms := fd.allMessages[total : total+n] + fd.allMessages = fd.allMessages[:total+n] + return ms +} +func (fd *File) allocExtensions(n int) []Extension { + total := len(fd.allExtensions) + xs := fd.allExtensions[total : total+n] + fd.allExtensions = fd.allExtensions[:total+n] + return xs +} +func (fd *File) allocServices(n int) []Service { + total := len(fd.allServices) + xs := fd.allServices[total : total+n] + fd.allServices = fd.allServices[:total+n] + return xs +} + +// checkDecls performs a sanity check that the expected number of expected +// declarations matches the number that were found in the descriptor proto. +func (fd *File) checkDecls() { + switch { + case len(fd.allEnums) != cap(fd.allEnums): + case len(fd.allMessages) != cap(fd.allMessages): + case len(fd.allExtensions) != cap(fd.allExtensions): + case len(fd.allServices) != cap(fd.allServices): + default: + return + } + panic("mismatching cardinality") +} + +func (fd *File) unmarshalSeed(b []byte) { + sb := getBuilder() + defer putBuilder(sb) + + var prevField protoreflect.FieldNumber + var numEnums, numMessages, numExtensions, numServices int + var posEnums, posMessages, posExtensions, posServices int + var options []byte + b0 := b + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.FileDescriptorProto_Syntax_field_number: + switch string(v) { + case "proto2": + fd.L1.Syntax = protoreflect.Proto2 + fd.L1.Edition = EditionProto2 + case "proto3": + fd.L1.Syntax = protoreflect.Proto3 + fd.L1.Edition = EditionProto3 + case "editions": + fd.L1.Syntax = protoreflect.Editions + default: + panic("invalid syntax") + } + case genid.FileDescriptorProto_Name_field_number: + fd.L1.Path = sb.MakeString(v) + case genid.FileDescriptorProto_Package_field_number: + fd.L1.Package = protoreflect.FullName(sb.MakeString(v)) + case genid.FileDescriptorProto_Options_field_number: + options = v + case genid.FileDescriptorProto_EnumType_field_number: + if prevField != genid.FileDescriptorProto_EnumType_field_number { + if numEnums > 0 { + panic("non-contiguous repeated field") + } + posEnums = len(b0) - len(b) - n - m + } + numEnums++ + case genid.FileDescriptorProto_MessageType_field_number: + if prevField != genid.FileDescriptorProto_MessageType_field_number { + if numMessages > 0 { + panic("non-contiguous repeated field") + } + posMessages = len(b0) - len(b) - n - m + } + numMessages++ + case genid.FileDescriptorProto_Extension_field_number: + if prevField != genid.FileDescriptorProto_Extension_field_number { + if numExtensions > 0 { + panic("non-contiguous repeated field") + } + posExtensions = len(b0) - len(b) - n - m + } + numExtensions++ + case genid.FileDescriptorProto_Service_field_number: + if prevField != genid.FileDescriptorProto_Service_field_number { + if numServices > 0 { + panic("non-contiguous repeated field") + } + posServices = len(b0) - len(b) - n - m + } + numServices++ + } + prevField = num + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case genid.FileDescriptorProto_Edition_field_number: + fd.L1.Edition = Edition(v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + prevField = -1 // ignore known field numbers of unknown wire type + } + } + + // If syntax is missing, it is assumed to be proto2. + if fd.L1.Syntax == 0 { + fd.L1.Syntax = protoreflect.Proto2 + fd.L1.Edition = EditionProto2 + } + + fd.L1.EditionFeatures = getFeaturesFor(fd.L1.Edition) + + // Parse editions features from options if any + if options != nil { + fd.unmarshalSeedOptions(options) + } + + // Must allocate all declarations before parsing each descriptor type + // to ensure we handled all descriptors in "flattened ordering". + if numEnums > 0 { + fd.L1.Enums.List = fd.allocEnums(numEnums) + } + if numMessages > 0 { + fd.L1.Messages.List = fd.allocMessages(numMessages) + } + if numExtensions > 0 { + fd.L1.Extensions.List = fd.allocExtensions(numExtensions) + } + if numServices > 0 { + fd.L1.Services.List = fd.allocServices(numServices) + } + + if numEnums > 0 { + b := b0[posEnums:] + for i := range fd.L1.Enums.List { + _, n := protowire.ConsumeVarint(b) + v, m := protowire.ConsumeBytes(b[n:]) + fd.L1.Enums.List[i].unmarshalSeed(v, sb, fd, fd, i) + b = b[n+m:] + } + } + if numMessages > 0 { + b := b0[posMessages:] + for i := range fd.L1.Messages.List { + _, n := protowire.ConsumeVarint(b) + v, m := protowire.ConsumeBytes(b[n:]) + fd.L1.Messages.List[i].unmarshalSeed(v, sb, fd, fd, i) + b = b[n+m:] + } + } + if numExtensions > 0 { + b := b0[posExtensions:] + for i := range fd.L1.Extensions.List { + _, n := protowire.ConsumeVarint(b) + v, m := protowire.ConsumeBytes(b[n:]) + fd.L1.Extensions.List[i].unmarshalSeed(v, sb, fd, fd, i) + b = b[n+m:] + } + } + if numServices > 0 { + b := b0[posServices:] + for i := range fd.L1.Services.List { + _, n := protowire.ConsumeVarint(b) + v, m := protowire.ConsumeBytes(b[n:]) + fd.L1.Services.List[i].unmarshalSeed(v, sb, fd, fd, i) + b = b[n+m:] + } + } +} + +func (fd *File) unmarshalSeedOptions(b []byte) { + for b := b; len(b) > 0; { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.FileOptions_Features_field_number: + if fd.Syntax() != protoreflect.Editions { + panic(fmt.Sprintf("invalid descriptor: using edition features in a proto with syntax %s", fd.Syntax())) + } + fd.L1.EditionFeatures = unmarshalFeatureSet(v, fd.L1.EditionFeatures) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } +} + +func (ed *Enum) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) { + ed.L0.ParentFile = pf + ed.L0.Parent = pd + ed.L0.Index = i + ed.L1.EditionFeatures = featuresFromParentDesc(ed.Parent()) + + var numValues int + for b := b; len(b) > 0; { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.EnumDescriptorProto_Name_field_number: + ed.L0.FullName = appendFullName(sb, pd.FullName(), v) + case genid.EnumDescriptorProto_Value_field_number: + numValues++ + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + + // Only construct enum value descriptors for top-level enums since + // they are needed for registration. + if pd != pf { + return + } + ed.L1.eagerValues = true + ed.L2 = new(EnumL2) + ed.L2.Values.List = make([]EnumValue, numValues) + for i := 0; len(b) > 0; { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.EnumDescriptorProto_Value_field_number: + ed.L2.Values.List[i].unmarshalFull(v, sb, pf, ed, i) + i++ + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } +} + +func (md *Message) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) { + md.L0.ParentFile = pf + md.L0.Parent = pd + md.L0.Index = i + md.L1.EditionFeatures = featuresFromParentDesc(md.Parent()) + + var prevField protoreflect.FieldNumber + var numEnums, numMessages, numExtensions int + var posEnums, posMessages, posExtensions int + b0 := b + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.DescriptorProto_Name_field_number: + md.L0.FullName = appendFullName(sb, pd.FullName(), v) + case genid.DescriptorProto_EnumType_field_number: + if prevField != genid.DescriptorProto_EnumType_field_number { + if numEnums > 0 { + panic("non-contiguous repeated field") + } + posEnums = len(b0) - len(b) - n - m + } + numEnums++ + case genid.DescriptorProto_NestedType_field_number: + if prevField != genid.DescriptorProto_NestedType_field_number { + if numMessages > 0 { + panic("non-contiguous repeated field") + } + posMessages = len(b0) - len(b) - n - m + } + numMessages++ + case genid.DescriptorProto_Extension_field_number: + if prevField != genid.DescriptorProto_Extension_field_number { + if numExtensions > 0 { + panic("non-contiguous repeated field") + } + posExtensions = len(b0) - len(b) - n - m + } + numExtensions++ + case genid.DescriptorProto_Options_field_number: + md.unmarshalSeedOptions(v) + } + prevField = num + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + prevField = -1 // ignore known field numbers of unknown wire type + } + } + + // Must allocate all declarations before parsing each descriptor type + // to ensure we handled all descriptors in "flattened ordering". + if numEnums > 0 { + md.L1.Enums.List = pf.allocEnums(numEnums) + } + if numMessages > 0 { + md.L1.Messages.List = pf.allocMessages(numMessages) + } + if numExtensions > 0 { + md.L1.Extensions.List = pf.allocExtensions(numExtensions) + } + + if numEnums > 0 { + b := b0[posEnums:] + for i := range md.L1.Enums.List { + _, n := protowire.ConsumeVarint(b) + v, m := protowire.ConsumeBytes(b[n:]) + md.L1.Enums.List[i].unmarshalSeed(v, sb, pf, md, i) + b = b[n+m:] + } + } + if numMessages > 0 { + b := b0[posMessages:] + for i := range md.L1.Messages.List { + _, n := protowire.ConsumeVarint(b) + v, m := protowire.ConsumeBytes(b[n:]) + md.L1.Messages.List[i].unmarshalSeed(v, sb, pf, md, i) + b = b[n+m:] + } + } + if numExtensions > 0 { + b := b0[posExtensions:] + for i := range md.L1.Extensions.List { + _, n := protowire.ConsumeVarint(b) + v, m := protowire.ConsumeBytes(b[n:]) + md.L1.Extensions.List[i].unmarshalSeed(v, sb, pf, md, i) + b = b[n+m:] + } + } +} + +func (md *Message) unmarshalSeedOptions(b []byte) { + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case genid.MessageOptions_MapEntry_field_number: + md.L1.IsMapEntry = protowire.DecodeBool(v) + case genid.MessageOptions_MessageSetWireFormat_field_number: + md.L1.IsMessageSet = protowire.DecodeBool(v) + } + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.MessageOptions_Features_field_number: + md.L1.EditionFeatures = unmarshalFeatureSet(v, md.L1.EditionFeatures) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } +} + +func (xd *Extension) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) { + xd.L0.ParentFile = pf + xd.L0.Parent = pd + xd.L0.Index = i + xd.L1.EditionFeatures = featuresFromParentDesc(pd) + + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case genid.FieldDescriptorProto_Number_field_number: + xd.L1.Number = protoreflect.FieldNumber(v) + case genid.FieldDescriptorProto_Label_field_number: + xd.L1.Cardinality = protoreflect.Cardinality(v) + case genid.FieldDescriptorProto_Type_field_number: + xd.L1.Kind = protoreflect.Kind(v) + } + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.FieldDescriptorProto_Name_field_number: + xd.L0.FullName = appendFullName(sb, pd.FullName(), v) + case genid.FieldDescriptorProto_Extendee_field_number: + xd.L1.Extendee = PlaceholderMessage(makeFullName(sb, v)) + case genid.FieldDescriptorProto_Options_field_number: + xd.unmarshalOptions(v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + + if xd.L1.Kind == protoreflect.MessageKind && xd.L1.EditionFeatures.IsDelimitedEncoded { + xd.L1.Kind = protoreflect.GroupKind + } +} + +func (xd *Extension) unmarshalOptions(b []byte) { + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case genid.FieldOptions_Packed_field_number: + xd.L1.EditionFeatures.IsPacked = protowire.DecodeBool(v) + case genid.FieldOptions_Lazy_field_number: + xd.L1.IsLazy = protowire.DecodeBool(v) + } + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.FieldOptions_Features_field_number: + xd.L1.EditionFeatures = unmarshalFeatureSet(v, xd.L1.EditionFeatures) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } +} + +func (sd *Service) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) { + sd.L0.ParentFile = pf + sd.L0.Parent = pd + sd.L0.Index = i + + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.ServiceDescriptorProto_Name_field_number: + sd.L0.FullName = appendFullName(sb, pd.FullName(), v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } +} + +var nameBuilderPool = sync.Pool{ + New: func() any { return new(strs.Builder) }, +} + +func getBuilder() *strs.Builder { + return nameBuilderPool.Get().(*strs.Builder) +} +func putBuilder(b *strs.Builder) { + nameBuilderPool.Put(b) +} + +// makeFullName converts b to a protoreflect.FullName, +// where b must start with a leading dot. +func makeFullName(sb *strs.Builder, b []byte) protoreflect.FullName { + if len(b) == 0 || b[0] != '.' { + panic("name reference must be fully qualified") + } + return protoreflect.FullName(sb.MakeString(b[1:])) +} + +func appendFullName(sb *strs.Builder, prefix protoreflect.FullName, suffix []byte) protoreflect.FullName { + return sb.AppendFullName(prefix, protoreflect.Name(strs.UnsafeString(suffix))) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go new file mode 100644 index 0000000..d4c9445 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go @@ -0,0 +1,694 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package filedesc + +import ( + "reflect" + "sync" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/descopts" + "google.golang.org/protobuf/internal/genid" + "google.golang.org/protobuf/internal/strs" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" +) + +func (fd *File) lazyRawInit() { + fd.unmarshalFull(fd.builder.RawDescriptor) + fd.resolveMessages() + fd.resolveExtensions() + fd.resolveServices() +} + +func (file *File) resolveMessages() { + var depIdx int32 + for i := range file.allMessages { + md := &file.allMessages[i] + + // Resolve message field dependencies. + for j := range md.L2.Fields.List { + fd := &md.L2.Fields.List[j] + + // Resolve message field dependency. + switch fd.L1.Kind { + case protoreflect.EnumKind: + fd.L1.Enum = file.resolveEnumDependency(fd.L1.Enum, listFieldDeps, depIdx) + depIdx++ + case protoreflect.MessageKind, protoreflect.GroupKind: + fd.L1.Message = file.resolveMessageDependency(fd.L1.Message, listFieldDeps, depIdx) + depIdx++ + if fd.L1.Kind == protoreflect.GroupKind && (fd.IsMap() || fd.IsMapEntry()) { + // A map field might inherit delimited encoding from a file-wide default feature. + // But maps never actually use delimited encoding. (At least for now...) + fd.L1.Kind = protoreflect.MessageKind + } + } + + // Default is resolved here since it depends on Enum being resolved. + if v := fd.L1.Default.val; v.IsValid() { + fd.L1.Default = unmarshalDefault(v.Bytes(), fd.L1.Kind, file, fd.L1.Enum) + } + } + } +} + +func (file *File) resolveExtensions() { + var depIdx int32 + for i := range file.allExtensions { + xd := &file.allExtensions[i] + + // Resolve extension field dependency. + switch xd.L1.Kind { + case protoreflect.EnumKind: + xd.L2.Enum = file.resolveEnumDependency(xd.L2.Enum, listExtDeps, depIdx) + depIdx++ + case protoreflect.MessageKind, protoreflect.GroupKind: + xd.L2.Message = file.resolveMessageDependency(xd.L2.Message, listExtDeps, depIdx) + depIdx++ + } + + // Default is resolved here since it depends on Enum being resolved. + if v := xd.L2.Default.val; v.IsValid() { + xd.L2.Default = unmarshalDefault(v.Bytes(), xd.L1.Kind, file, xd.L2.Enum) + } + } +} + +func (file *File) resolveServices() { + var depIdx int32 + for i := range file.allServices { + sd := &file.allServices[i] + + // Resolve method dependencies. + for j := range sd.L2.Methods.List { + md := &sd.L2.Methods.List[j] + md.L1.Input = file.resolveMessageDependency(md.L1.Input, listMethInDeps, depIdx) + md.L1.Output = file.resolveMessageDependency(md.L1.Output, listMethOutDeps, depIdx) + depIdx++ + } + } +} + +func (file *File) resolveEnumDependency(ed protoreflect.EnumDescriptor, i, j int32) protoreflect.EnumDescriptor { + r := file.builder.FileRegistry + if r, ok := r.(resolverByIndex); ok { + if ed2 := r.FindEnumByIndex(i, j, file.allEnums, file.allMessages); ed2 != nil { + return ed2 + } + } + for i := range file.allEnums { + if ed2 := &file.allEnums[i]; ed2.L0.FullName == ed.FullName() { + return ed2 + } + } + if d, _ := r.FindDescriptorByName(ed.FullName()); d != nil { + return d.(protoreflect.EnumDescriptor) + } + return ed +} + +func (file *File) resolveMessageDependency(md protoreflect.MessageDescriptor, i, j int32) protoreflect.MessageDescriptor { + r := file.builder.FileRegistry + if r, ok := r.(resolverByIndex); ok { + if md2 := r.FindMessageByIndex(i, j, file.allEnums, file.allMessages); md2 != nil { + return md2 + } + } + for i := range file.allMessages { + if md2 := &file.allMessages[i]; md2.L0.FullName == md.FullName() { + return md2 + } + } + if d, _ := r.FindDescriptorByName(md.FullName()); d != nil { + return d.(protoreflect.MessageDescriptor) + } + return md +} + +func (fd *File) unmarshalFull(b []byte) { + sb := getBuilder() + defer putBuilder(sb) + + var enumIdx, messageIdx, extensionIdx, serviceIdx int + var rawOptions []byte + fd.L2 = new(FileL2) + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case genid.FileDescriptorProto_PublicDependency_field_number: + fd.L2.Imports[v].IsPublic = true + } + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.FileDescriptorProto_Dependency_field_number: + path := sb.MakeString(v) + imp, _ := fd.builder.FileRegistry.FindFileByPath(path) + if imp == nil { + imp = PlaceholderFile(path) + } + fd.L2.Imports = append(fd.L2.Imports, protoreflect.FileImport{FileDescriptor: imp}) + case genid.FileDescriptorProto_EnumType_field_number: + fd.L1.Enums.List[enumIdx].unmarshalFull(v, sb) + enumIdx++ + case genid.FileDescriptorProto_MessageType_field_number: + fd.L1.Messages.List[messageIdx].unmarshalFull(v, sb) + messageIdx++ + case genid.FileDescriptorProto_Extension_field_number: + fd.L1.Extensions.List[extensionIdx].unmarshalFull(v, sb) + extensionIdx++ + case genid.FileDescriptorProto_Service_field_number: + fd.L1.Services.List[serviceIdx].unmarshalFull(v, sb) + serviceIdx++ + case genid.FileDescriptorProto_Options_field_number: + rawOptions = appendOptions(rawOptions, v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + fd.L2.Options = fd.builder.optionsUnmarshaler(&descopts.File, rawOptions) +} + +func (ed *Enum) unmarshalFull(b []byte, sb *strs.Builder) { + var rawValues [][]byte + var rawOptions []byte + if !ed.L1.eagerValues { + ed.L2 = new(EnumL2) + } + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.EnumDescriptorProto_Value_field_number: + rawValues = append(rawValues, v) + case genid.EnumDescriptorProto_ReservedName_field_number: + ed.L2.ReservedNames.List = append(ed.L2.ReservedNames.List, protoreflect.Name(sb.MakeString(v))) + case genid.EnumDescriptorProto_ReservedRange_field_number: + ed.L2.ReservedRanges.List = append(ed.L2.ReservedRanges.List, unmarshalEnumReservedRange(v)) + case genid.EnumDescriptorProto_Options_field_number: + rawOptions = appendOptions(rawOptions, v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + if !ed.L1.eagerValues && len(rawValues) > 0 { + ed.L2.Values.List = make([]EnumValue, len(rawValues)) + for i, b := range rawValues { + ed.L2.Values.List[i].unmarshalFull(b, sb, ed.L0.ParentFile, ed, i) + } + } + ed.L2.Options = ed.L0.ParentFile.builder.optionsUnmarshaler(&descopts.Enum, rawOptions) +} + +func unmarshalEnumReservedRange(b []byte) (r [2]protoreflect.EnumNumber) { + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case genid.EnumDescriptorProto_EnumReservedRange_Start_field_number: + r[0] = protoreflect.EnumNumber(v) + case genid.EnumDescriptorProto_EnumReservedRange_End_field_number: + r[1] = protoreflect.EnumNumber(v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + return r +} + +func (vd *EnumValue) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) { + vd.L0.ParentFile = pf + vd.L0.Parent = pd + vd.L0.Index = i + + var rawOptions []byte + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case genid.EnumValueDescriptorProto_Number_field_number: + vd.L1.Number = protoreflect.EnumNumber(v) + } + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.EnumValueDescriptorProto_Name_field_number: + // NOTE: Enum values are in the same scope as the enum parent. + vd.L0.FullName = appendFullName(sb, pd.Parent().FullName(), v) + case genid.EnumValueDescriptorProto_Options_field_number: + rawOptions = appendOptions(rawOptions, v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + vd.L1.Options = pf.builder.optionsUnmarshaler(&descopts.EnumValue, rawOptions) +} + +func (md *Message) unmarshalFull(b []byte, sb *strs.Builder) { + var rawFields, rawOneofs [][]byte + var enumIdx, messageIdx, extensionIdx int + var rawOptions []byte + md.L2 = new(MessageL2) + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.DescriptorProto_Field_field_number: + rawFields = append(rawFields, v) + case genid.DescriptorProto_OneofDecl_field_number: + rawOneofs = append(rawOneofs, v) + case genid.DescriptorProto_ReservedName_field_number: + md.L2.ReservedNames.List = append(md.L2.ReservedNames.List, protoreflect.Name(sb.MakeString(v))) + case genid.DescriptorProto_ReservedRange_field_number: + md.L2.ReservedRanges.List = append(md.L2.ReservedRanges.List, unmarshalMessageReservedRange(v)) + case genid.DescriptorProto_ExtensionRange_field_number: + r, rawOptions := unmarshalMessageExtensionRange(v) + opts := md.L0.ParentFile.builder.optionsUnmarshaler(&descopts.ExtensionRange, rawOptions) + md.L2.ExtensionRanges.List = append(md.L2.ExtensionRanges.List, r) + md.L2.ExtensionRangeOptions = append(md.L2.ExtensionRangeOptions, opts) + case genid.DescriptorProto_EnumType_field_number: + md.L1.Enums.List[enumIdx].unmarshalFull(v, sb) + enumIdx++ + case genid.DescriptorProto_NestedType_field_number: + md.L1.Messages.List[messageIdx].unmarshalFull(v, sb) + messageIdx++ + case genid.DescriptorProto_Extension_field_number: + md.L1.Extensions.List[extensionIdx].unmarshalFull(v, sb) + extensionIdx++ + case genid.DescriptorProto_Options_field_number: + md.unmarshalOptions(v) + rawOptions = appendOptions(rawOptions, v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + if len(rawFields) > 0 || len(rawOneofs) > 0 { + md.L2.Fields.List = make([]Field, len(rawFields)) + md.L2.Oneofs.List = make([]Oneof, len(rawOneofs)) + for i, b := range rawFields { + fd := &md.L2.Fields.List[i] + fd.unmarshalFull(b, sb, md.L0.ParentFile, md, i) + if fd.L1.Cardinality == protoreflect.Required { + md.L2.RequiredNumbers.List = append(md.L2.RequiredNumbers.List, fd.L1.Number) + } + } + for i, b := range rawOneofs { + od := &md.L2.Oneofs.List[i] + od.unmarshalFull(b, sb, md.L0.ParentFile, md, i) + } + } + md.L2.Options = md.L0.ParentFile.builder.optionsUnmarshaler(&descopts.Message, rawOptions) +} + +func (md *Message) unmarshalOptions(b []byte) { + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case genid.MessageOptions_MapEntry_field_number: + md.L1.IsMapEntry = protowire.DecodeBool(v) + case genid.MessageOptions_MessageSetWireFormat_field_number: + md.L1.IsMessageSet = protowire.DecodeBool(v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } +} + +func unmarshalMessageReservedRange(b []byte) (r [2]protoreflect.FieldNumber) { + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case genid.DescriptorProto_ReservedRange_Start_field_number: + r[0] = protoreflect.FieldNumber(v) + case genid.DescriptorProto_ReservedRange_End_field_number: + r[1] = protoreflect.FieldNumber(v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + return r +} + +func unmarshalMessageExtensionRange(b []byte) (r [2]protoreflect.FieldNumber, rawOptions []byte) { + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case genid.DescriptorProto_ExtensionRange_Start_field_number: + r[0] = protoreflect.FieldNumber(v) + case genid.DescriptorProto_ExtensionRange_End_field_number: + r[1] = protoreflect.FieldNumber(v) + } + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.DescriptorProto_ExtensionRange_Options_field_number: + rawOptions = appendOptions(rawOptions, v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + return r, rawOptions +} + +func (fd *Field) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) { + fd.L0.ParentFile = pf + fd.L0.Parent = pd + fd.L0.Index = i + fd.L1.EditionFeatures = featuresFromParentDesc(fd.Parent()) + + var rawTypeName []byte + var rawOptions []byte + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case genid.FieldDescriptorProto_Number_field_number: + fd.L1.Number = protoreflect.FieldNumber(v) + case genid.FieldDescriptorProto_Label_field_number: + fd.L1.Cardinality = protoreflect.Cardinality(v) + case genid.FieldDescriptorProto_Type_field_number: + fd.L1.Kind = protoreflect.Kind(v) + case genid.FieldDescriptorProto_OneofIndex_field_number: + // In Message.unmarshalFull, we allocate slices for both + // the field and oneof descriptors before unmarshaling either + // of them. This ensures pointers to slice elements are stable. + od := &pd.(*Message).L2.Oneofs.List[v] + od.L1.Fields.List = append(od.L1.Fields.List, fd) + if fd.L1.ContainingOneof != nil { + panic("oneof type already set") + } + fd.L1.ContainingOneof = od + case genid.FieldDescriptorProto_Proto3Optional_field_number: + fd.L1.IsProto3Optional = protowire.DecodeBool(v) + } + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.FieldDescriptorProto_Name_field_number: + fd.L0.FullName = appendFullName(sb, pd.FullName(), v) + case genid.FieldDescriptorProto_JsonName_field_number: + fd.L1.StringName.InitJSON(sb.MakeString(v)) + case genid.FieldDescriptorProto_DefaultValue_field_number: + fd.L1.Default.val = protoreflect.ValueOfBytes(v) // temporarily store as bytes; later resolved in resolveMessages + case genid.FieldDescriptorProto_TypeName_field_number: + rawTypeName = v + case genid.FieldDescriptorProto_Options_field_number: + fd.unmarshalOptions(v) + rawOptions = appendOptions(rawOptions, v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + if fd.L1.Kind == protoreflect.MessageKind && fd.L1.EditionFeatures.IsDelimitedEncoded { + fd.L1.Kind = protoreflect.GroupKind + } + if fd.L1.EditionFeatures.IsLegacyRequired { + fd.L1.Cardinality = protoreflect.Required + } + if rawTypeName != nil { + name := makeFullName(sb, rawTypeName) + switch fd.L1.Kind { + case protoreflect.EnumKind: + fd.L1.Enum = PlaceholderEnum(name) + case protoreflect.MessageKind, protoreflect.GroupKind: + fd.L1.Message = PlaceholderMessage(name) + } + } + fd.L1.Options = pf.builder.optionsUnmarshaler(&descopts.Field, rawOptions) +} + +func (fd *Field) unmarshalOptions(b []byte) { + const FieldOptions_EnforceUTF8 = 13 + + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case genid.FieldOptions_Packed_field_number: + fd.L1.EditionFeatures.IsPacked = protowire.DecodeBool(v) + case genid.FieldOptions_Lazy_field_number: + fd.L1.IsLazy = protowire.DecodeBool(v) + case FieldOptions_EnforceUTF8: + fd.L1.EditionFeatures.IsUTF8Validated = protowire.DecodeBool(v) + } + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.FieldOptions_Features_field_number: + fd.L1.EditionFeatures = unmarshalFeatureSet(v, fd.L1.EditionFeatures) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } +} + +func (od *Oneof) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) { + od.L0.ParentFile = pf + od.L0.Parent = pd + od.L0.Index = i + + var rawOptions []byte + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.OneofDescriptorProto_Name_field_number: + od.L0.FullName = appendFullName(sb, pd.FullName(), v) + case genid.OneofDescriptorProto_Options_field_number: + rawOptions = appendOptions(rawOptions, v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + od.L1.Options = pf.builder.optionsUnmarshaler(&descopts.Oneof, rawOptions) +} + +func (xd *Extension) unmarshalFull(b []byte, sb *strs.Builder) { + var rawTypeName []byte + var rawOptions []byte + xd.L2 = new(ExtensionL2) + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case genid.FieldDescriptorProto_Proto3Optional_field_number: + xd.L2.IsProto3Optional = protowire.DecodeBool(v) + } + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.FieldDescriptorProto_JsonName_field_number: + xd.L2.StringName.InitJSON(sb.MakeString(v)) + case genid.FieldDescriptorProto_DefaultValue_field_number: + xd.L2.Default.val = protoreflect.ValueOfBytes(v) // temporarily store as bytes; later resolved in resolveExtensions + case genid.FieldDescriptorProto_TypeName_field_number: + rawTypeName = v + case genid.FieldDescriptorProto_Options_field_number: + rawOptions = appendOptions(rawOptions, v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + if rawTypeName != nil { + name := makeFullName(sb, rawTypeName) + switch xd.L1.Kind { + case protoreflect.EnumKind: + xd.L2.Enum = PlaceholderEnum(name) + case protoreflect.MessageKind, protoreflect.GroupKind: + xd.L2.Message = PlaceholderMessage(name) + } + } + xd.L2.Options = xd.L0.ParentFile.builder.optionsUnmarshaler(&descopts.Field, rawOptions) +} + +func (sd *Service) unmarshalFull(b []byte, sb *strs.Builder) { + var rawMethods [][]byte + var rawOptions []byte + sd.L2 = new(ServiceL2) + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.ServiceDescriptorProto_Method_field_number: + rawMethods = append(rawMethods, v) + case genid.ServiceDescriptorProto_Options_field_number: + rawOptions = appendOptions(rawOptions, v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + if len(rawMethods) > 0 { + sd.L2.Methods.List = make([]Method, len(rawMethods)) + for i, b := range rawMethods { + sd.L2.Methods.List[i].unmarshalFull(b, sb, sd.L0.ParentFile, sd, i) + } + } + sd.L2.Options = sd.L0.ParentFile.builder.optionsUnmarshaler(&descopts.Service, rawOptions) +} + +func (md *Method) unmarshalFull(b []byte, sb *strs.Builder, pf *File, pd protoreflect.Descriptor, i int) { + md.L0.ParentFile = pf + md.L0.Parent = pd + md.L0.Index = i + + var rawOptions []byte + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case genid.MethodDescriptorProto_ClientStreaming_field_number: + md.L1.IsStreamingClient = protowire.DecodeBool(v) + case genid.MethodDescriptorProto_ServerStreaming_field_number: + md.L1.IsStreamingServer = protowire.DecodeBool(v) + } + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.MethodDescriptorProto_Name_field_number: + md.L0.FullName = appendFullName(sb, pd.FullName(), v) + case genid.MethodDescriptorProto_InputType_field_number: + md.L1.Input = PlaceholderMessage(makeFullName(sb, v)) + case genid.MethodDescriptorProto_OutputType_field_number: + md.L1.Output = PlaceholderMessage(makeFullName(sb, v)) + case genid.MethodDescriptorProto_Options_field_number: + rawOptions = appendOptions(rawOptions, v) + } + default: + m := protowire.ConsumeFieldValue(num, typ, b) + b = b[m:] + } + } + md.L1.Options = pf.builder.optionsUnmarshaler(&descopts.Method, rawOptions) +} + +// appendOptions appends src to dst, where the returned slice is never nil. +// This is necessary to distinguish between empty and unpopulated options. +func appendOptions(dst, src []byte) []byte { + if dst == nil { + dst = []byte{} + } + return append(dst, src...) +} + +// optionsUnmarshaler constructs a lazy unmarshal function for an options message. +// +// The type of message to unmarshal to is passed as a pointer since the +// vars in descopts may not yet be populated at the time this function is called. +func (db *Builder) optionsUnmarshaler(p *protoreflect.ProtoMessage, b []byte) func() protoreflect.ProtoMessage { + if b == nil { + return nil + } + var opts protoreflect.ProtoMessage + var once sync.Once + return func() protoreflect.ProtoMessage { + once.Do(func() { + if *p == nil { + panic("Descriptor.Options called without importing the descriptor package") + } + opts = reflect.New(reflect.TypeOf(*p).Elem()).Interface().(protoreflect.ProtoMessage) + if err := (proto.UnmarshalOptions{ + AllowPartial: true, + Resolver: db.TypeResolver, + }).Unmarshal(b, opts); err != nil { + panic(err) + } + }) + return opts + } +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/desc_list.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/desc_list.go new file mode 100644 index 0000000..e3b6587 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/desc_list.go @@ -0,0 +1,457 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package filedesc + +import ( + "fmt" + "math" + "sort" + "sync" + + "google.golang.org/protobuf/internal/genid" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/descfmt" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/pragma" + "google.golang.org/protobuf/reflect/protoreflect" +) + +type FileImports []protoreflect.FileImport + +func (p *FileImports) Len() int { return len(*p) } +func (p *FileImports) Get(i int) protoreflect.FileImport { return (*p)[i] } +func (p *FileImports) Format(s fmt.State, r rune) { descfmt.FormatList(s, r, p) } +func (p *FileImports) ProtoInternal(pragma.DoNotImplement) {} + +type Names struct { + List []protoreflect.Name + once sync.Once + has map[protoreflect.Name]int // protected by once +} + +func (p *Names) Len() int { return len(p.List) } +func (p *Names) Get(i int) protoreflect.Name { return p.List[i] } +func (p *Names) Has(s protoreflect.Name) bool { return p.lazyInit().has[s] > 0 } +func (p *Names) Format(s fmt.State, r rune) { descfmt.FormatList(s, r, p) } +func (p *Names) ProtoInternal(pragma.DoNotImplement) {} +func (p *Names) lazyInit() *Names { + p.once.Do(func() { + if len(p.List) > 0 { + p.has = make(map[protoreflect.Name]int, len(p.List)) + for _, s := range p.List { + p.has[s] = p.has[s] + 1 + } + } + }) + return p +} + +// CheckValid reports any errors with the set of names with an error message +// that completes the sentence: "ranges is invalid because it has ..." +func (p *Names) CheckValid() error { + for s, n := range p.lazyInit().has { + switch { + case n > 1: + return errors.New("duplicate name: %q", s) + case false && !s.IsValid(): + // NOTE: The C++ implementation does not validate the identifier. + // See https://github.com/protocolbuffers/protobuf/issues/6335. + return errors.New("invalid name: %q", s) + } + } + return nil +} + +type EnumRanges struct { + List [][2]protoreflect.EnumNumber // start inclusive; end inclusive + once sync.Once + sorted [][2]protoreflect.EnumNumber // protected by once +} + +func (p *EnumRanges) Len() int { return len(p.List) } +func (p *EnumRanges) Get(i int) [2]protoreflect.EnumNumber { return p.List[i] } +func (p *EnumRanges) Has(n protoreflect.EnumNumber) bool { + for ls := p.lazyInit().sorted; len(ls) > 0; { + i := len(ls) / 2 + switch r := enumRange(ls[i]); { + case n < r.Start(): + ls = ls[:i] // search lower + case n > r.End(): + ls = ls[i+1:] // search upper + default: + return true + } + } + return false +} +func (p *EnumRanges) Format(s fmt.State, r rune) { descfmt.FormatList(s, r, p) } +func (p *EnumRanges) ProtoInternal(pragma.DoNotImplement) {} +func (p *EnumRanges) lazyInit() *EnumRanges { + p.once.Do(func() { + p.sorted = append(p.sorted, p.List...) + sort.Slice(p.sorted, func(i, j int) bool { + return p.sorted[i][0] < p.sorted[j][0] + }) + }) + return p +} + +// CheckValid reports any errors with the set of names with an error message +// that completes the sentence: "ranges is invalid because it has ..." +func (p *EnumRanges) CheckValid() error { + var rp enumRange + for i, r := range p.lazyInit().sorted { + r := enumRange(r) + switch { + case !(r.Start() <= r.End()): + return errors.New("invalid range: %v", r) + case !(rp.End() < r.Start()) && i > 0: + return errors.New("overlapping ranges: %v with %v", rp, r) + } + rp = r + } + return nil +} + +type enumRange [2]protoreflect.EnumNumber + +func (r enumRange) Start() protoreflect.EnumNumber { return r[0] } // inclusive +func (r enumRange) End() protoreflect.EnumNumber { return r[1] } // inclusive +func (r enumRange) String() string { + if r.Start() == r.End() { + return fmt.Sprintf("%d", r.Start()) + } + return fmt.Sprintf("%d to %d", r.Start(), r.End()) +} + +type FieldRanges struct { + List [][2]protoreflect.FieldNumber // start inclusive; end exclusive + once sync.Once + sorted [][2]protoreflect.FieldNumber // protected by once +} + +func (p *FieldRanges) Len() int { return len(p.List) } +func (p *FieldRanges) Get(i int) [2]protoreflect.FieldNumber { return p.List[i] } +func (p *FieldRanges) Has(n protoreflect.FieldNumber) bool { + for ls := p.lazyInit().sorted; len(ls) > 0; { + i := len(ls) / 2 + switch r := fieldRange(ls[i]); { + case n < r.Start(): + ls = ls[:i] // search lower + case n > r.End(): + ls = ls[i+1:] // search upper + default: + return true + } + } + return false +} +func (p *FieldRanges) Format(s fmt.State, r rune) { descfmt.FormatList(s, r, p) } +func (p *FieldRanges) ProtoInternal(pragma.DoNotImplement) {} +func (p *FieldRanges) lazyInit() *FieldRanges { + p.once.Do(func() { + p.sorted = append(p.sorted, p.List...) + sort.Slice(p.sorted, func(i, j int) bool { + return p.sorted[i][0] < p.sorted[j][0] + }) + }) + return p +} + +// CheckValid reports any errors with the set of ranges with an error message +// that completes the sentence: "ranges is invalid because it has ..." +func (p *FieldRanges) CheckValid(isMessageSet bool) error { + var rp fieldRange + for i, r := range p.lazyInit().sorted { + r := fieldRange(r) + switch { + case !isValidFieldNumber(r.Start(), isMessageSet): + return errors.New("invalid field number: %d", r.Start()) + case !isValidFieldNumber(r.End(), isMessageSet): + return errors.New("invalid field number: %d", r.End()) + case !(r.Start() <= r.End()): + return errors.New("invalid range: %v", r) + case !(rp.End() < r.Start()) && i > 0: + return errors.New("overlapping ranges: %v with %v", rp, r) + } + rp = r + } + return nil +} + +// isValidFieldNumber reports whether the field number is valid. +// Unlike the FieldNumber.IsValid method, it allows ranges that cover the +// reserved number range. +func isValidFieldNumber(n protoreflect.FieldNumber, isMessageSet bool) bool { + return protowire.MinValidNumber <= n && (n <= protowire.MaxValidNumber || isMessageSet) +} + +// CheckOverlap reports an error if p and q overlap. +func (p *FieldRanges) CheckOverlap(q *FieldRanges) error { + rps := p.lazyInit().sorted + rqs := q.lazyInit().sorted + for pi, qi := 0, 0; pi < len(rps) && qi < len(rqs); { + rp := fieldRange(rps[pi]) + rq := fieldRange(rqs[qi]) + if !(rp.End() < rq.Start() || rq.End() < rp.Start()) { + return errors.New("overlapping ranges: %v with %v", rp, rq) + } + if rp.Start() < rq.Start() { + pi++ + } else { + qi++ + } + } + return nil +} + +type fieldRange [2]protoreflect.FieldNumber + +func (r fieldRange) Start() protoreflect.FieldNumber { return r[0] } // inclusive +func (r fieldRange) End() protoreflect.FieldNumber { return r[1] - 1 } // inclusive +func (r fieldRange) String() string { + if r.Start() == r.End() { + return fmt.Sprintf("%d", r.Start()) + } + return fmt.Sprintf("%d to %d", r.Start(), r.End()) +} + +type FieldNumbers struct { + List []protoreflect.FieldNumber + once sync.Once + has map[protoreflect.FieldNumber]struct{} // protected by once +} + +func (p *FieldNumbers) Len() int { return len(p.List) } +func (p *FieldNumbers) Get(i int) protoreflect.FieldNumber { return p.List[i] } +func (p *FieldNumbers) Has(n protoreflect.FieldNumber) bool { + p.once.Do(func() { + if len(p.List) > 0 { + p.has = make(map[protoreflect.FieldNumber]struct{}, len(p.List)) + for _, n := range p.List { + p.has[n] = struct{}{} + } + } + }) + _, ok := p.has[n] + return ok +} +func (p *FieldNumbers) Format(s fmt.State, r rune) { descfmt.FormatList(s, r, p) } +func (p *FieldNumbers) ProtoInternal(pragma.DoNotImplement) {} + +type OneofFields struct { + List []protoreflect.FieldDescriptor + once sync.Once + byName map[protoreflect.Name]protoreflect.FieldDescriptor // protected by once + byJSON map[string]protoreflect.FieldDescriptor // protected by once + byText map[string]protoreflect.FieldDescriptor // protected by once + byNum map[protoreflect.FieldNumber]protoreflect.FieldDescriptor // protected by once +} + +func (p *OneofFields) Len() int { return len(p.List) } +func (p *OneofFields) Get(i int) protoreflect.FieldDescriptor { return p.List[i] } +func (p *OneofFields) ByName(s protoreflect.Name) protoreflect.FieldDescriptor { + return p.lazyInit().byName[s] +} +func (p *OneofFields) ByJSONName(s string) protoreflect.FieldDescriptor { + return p.lazyInit().byJSON[s] +} +func (p *OneofFields) ByTextName(s string) protoreflect.FieldDescriptor { + return p.lazyInit().byText[s] +} +func (p *OneofFields) ByNumber(n protoreflect.FieldNumber) protoreflect.FieldDescriptor { + return p.lazyInit().byNum[n] +} +func (p *OneofFields) Format(s fmt.State, r rune) { descfmt.FormatList(s, r, p) } +func (p *OneofFields) ProtoInternal(pragma.DoNotImplement) {} + +func (p *OneofFields) lazyInit() *OneofFields { + p.once.Do(func() { + if len(p.List) > 0 { + p.byName = make(map[protoreflect.Name]protoreflect.FieldDescriptor, len(p.List)) + p.byJSON = make(map[string]protoreflect.FieldDescriptor, len(p.List)) + p.byText = make(map[string]protoreflect.FieldDescriptor, len(p.List)) + p.byNum = make(map[protoreflect.FieldNumber]protoreflect.FieldDescriptor, len(p.List)) + for _, f := range p.List { + // Field names and numbers are guaranteed to be unique. + p.byName[f.Name()] = f + p.byJSON[f.JSONName()] = f + p.byText[f.TextName()] = f + p.byNum[f.Number()] = f + } + } + }) + return p +} + +type SourceLocations struct { + // List is a list of SourceLocations. + // The SourceLocation.Next field does not need to be populated + // as it will be lazily populated upon first need. + List []protoreflect.SourceLocation + + // File is the parent file descriptor that these locations are relative to. + // If non-nil, ByDescriptor verifies that the provided descriptor + // is a child of this file descriptor. + File protoreflect.FileDescriptor + + once sync.Once + byPath map[pathKey]int +} + +func (p *SourceLocations) Len() int { return len(p.List) } +func (p *SourceLocations) Get(i int) protoreflect.SourceLocation { return p.lazyInit().List[i] } +func (p *SourceLocations) byKey(k pathKey) protoreflect.SourceLocation { + if i, ok := p.lazyInit().byPath[k]; ok { + return p.List[i] + } + return protoreflect.SourceLocation{} +} +func (p *SourceLocations) ByPath(path protoreflect.SourcePath) protoreflect.SourceLocation { + return p.byKey(newPathKey(path)) +} +func (p *SourceLocations) ByDescriptor(desc protoreflect.Descriptor) protoreflect.SourceLocation { + if p.File != nil && desc != nil && p.File != desc.ParentFile() { + return protoreflect.SourceLocation{} // mismatching parent files + } + var pathArr [16]int32 + path := pathArr[:0] + for { + switch desc.(type) { + case protoreflect.FileDescriptor: + // Reverse the path since it was constructed in reverse. + for i, j := 0, len(path)-1; i < j; i, j = i+1, j-1 { + path[i], path[j] = path[j], path[i] + } + return p.byKey(newPathKey(path)) + case protoreflect.MessageDescriptor: + path = append(path, int32(desc.Index())) + desc = desc.Parent() + switch desc.(type) { + case protoreflect.FileDescriptor: + path = append(path, int32(genid.FileDescriptorProto_MessageType_field_number)) + case protoreflect.MessageDescriptor: + path = append(path, int32(genid.DescriptorProto_NestedType_field_number)) + default: + return protoreflect.SourceLocation{} + } + case protoreflect.FieldDescriptor: + isExtension := desc.(protoreflect.FieldDescriptor).IsExtension() + path = append(path, int32(desc.Index())) + desc = desc.Parent() + if isExtension { + switch desc.(type) { + case protoreflect.FileDescriptor: + path = append(path, int32(genid.FileDescriptorProto_Extension_field_number)) + case protoreflect.MessageDescriptor: + path = append(path, int32(genid.DescriptorProto_Extension_field_number)) + default: + return protoreflect.SourceLocation{} + } + } else { + switch desc.(type) { + case protoreflect.MessageDescriptor: + path = append(path, int32(genid.DescriptorProto_Field_field_number)) + default: + return protoreflect.SourceLocation{} + } + } + case protoreflect.OneofDescriptor: + path = append(path, int32(desc.Index())) + desc = desc.Parent() + switch desc.(type) { + case protoreflect.MessageDescriptor: + path = append(path, int32(genid.DescriptorProto_OneofDecl_field_number)) + default: + return protoreflect.SourceLocation{} + } + case protoreflect.EnumDescriptor: + path = append(path, int32(desc.Index())) + desc = desc.Parent() + switch desc.(type) { + case protoreflect.FileDescriptor: + path = append(path, int32(genid.FileDescriptorProto_EnumType_field_number)) + case protoreflect.MessageDescriptor: + path = append(path, int32(genid.DescriptorProto_EnumType_field_number)) + default: + return protoreflect.SourceLocation{} + } + case protoreflect.EnumValueDescriptor: + path = append(path, int32(desc.Index())) + desc = desc.Parent() + switch desc.(type) { + case protoreflect.EnumDescriptor: + path = append(path, int32(genid.EnumDescriptorProto_Value_field_number)) + default: + return protoreflect.SourceLocation{} + } + case protoreflect.ServiceDescriptor: + path = append(path, int32(desc.Index())) + desc = desc.Parent() + switch desc.(type) { + case protoreflect.FileDescriptor: + path = append(path, int32(genid.FileDescriptorProto_Service_field_number)) + default: + return protoreflect.SourceLocation{} + } + case protoreflect.MethodDescriptor: + path = append(path, int32(desc.Index())) + desc = desc.Parent() + switch desc.(type) { + case protoreflect.ServiceDescriptor: + path = append(path, int32(genid.ServiceDescriptorProto_Method_field_number)) + default: + return protoreflect.SourceLocation{} + } + default: + return protoreflect.SourceLocation{} + } + } +} +func (p *SourceLocations) lazyInit() *SourceLocations { + p.once.Do(func() { + if len(p.List) > 0 { + // Collect all the indexes for a given path. + pathIdxs := make(map[pathKey][]int, len(p.List)) + for i, l := range p.List { + k := newPathKey(l.Path) + pathIdxs[k] = append(pathIdxs[k], i) + } + + // Update the next index for all locations. + p.byPath = make(map[pathKey]int, len(p.List)) + for k, idxs := range pathIdxs { + for i := 0; i < len(idxs)-1; i++ { + p.List[idxs[i]].Next = idxs[i+1] + } + p.List[idxs[len(idxs)-1]].Next = 0 + p.byPath[k] = idxs[0] // record the first location for this path + } + } + }) + return p +} +func (p *SourceLocations) ProtoInternal(pragma.DoNotImplement) {} + +// pathKey is a comparable representation of protoreflect.SourcePath. +type pathKey struct { + arr [16]uint8 // first n-1 path segments; last element is the length + str string // used if the path does not fit in arr +} + +func newPathKey(p protoreflect.SourcePath) (k pathKey) { + if len(p) < len(k.arr) { + for i, ps := range p { + if ps < 0 || math.MaxUint8 <= ps { + return pathKey{str: p.String()} + } + k.arr[i] = uint8(ps) + } + k.arr[len(k.arr)-1] = uint8(len(p)) + return k + } + return pathKey{str: p.String()} +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/desc_list_gen.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/desc_list_gen.go new file mode 100644 index 0000000..f4107c0 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/desc_list_gen.go @@ -0,0 +1,367 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-types. DO NOT EDIT. + +package filedesc + +import ( + "fmt" + "strings" + "sync" + + "google.golang.org/protobuf/internal/descfmt" + "google.golang.org/protobuf/internal/pragma" + "google.golang.org/protobuf/reflect/protoreflect" +) + +type Enums struct { + List []Enum + once sync.Once + byName map[protoreflect.Name]*Enum // protected by once +} + +func (p *Enums) Len() int { + return len(p.List) +} +func (p *Enums) Get(i int) protoreflect.EnumDescriptor { + return &p.List[i] +} +func (p *Enums) ByName(s protoreflect.Name) protoreflect.EnumDescriptor { + if d := p.lazyInit().byName[s]; d != nil { + return d + } + return nil +} +func (p *Enums) Format(s fmt.State, r rune) { + descfmt.FormatList(s, r, p) +} +func (p *Enums) ProtoInternal(pragma.DoNotImplement) {} +func (p *Enums) lazyInit() *Enums { + p.once.Do(func() { + if len(p.List) > 0 { + p.byName = make(map[protoreflect.Name]*Enum, len(p.List)) + for i := range p.List { + d := &p.List[i] + if _, ok := p.byName[d.Name()]; !ok { + p.byName[d.Name()] = d + } + } + } + }) + return p +} + +type EnumValues struct { + List []EnumValue + once sync.Once + byName map[protoreflect.Name]*EnumValue // protected by once + byNum map[protoreflect.EnumNumber]*EnumValue // protected by once +} + +func (p *EnumValues) Len() int { + return len(p.List) +} +func (p *EnumValues) Get(i int) protoreflect.EnumValueDescriptor { + return &p.List[i] +} +func (p *EnumValues) ByName(s protoreflect.Name) protoreflect.EnumValueDescriptor { + if d := p.lazyInit().byName[s]; d != nil { + return d + } + return nil +} +func (p *EnumValues) ByNumber(n protoreflect.EnumNumber) protoreflect.EnumValueDescriptor { + if d := p.lazyInit().byNum[n]; d != nil { + return d + } + return nil +} +func (p *EnumValues) Format(s fmt.State, r rune) { + descfmt.FormatList(s, r, p) +} +func (p *EnumValues) ProtoInternal(pragma.DoNotImplement) {} +func (p *EnumValues) lazyInit() *EnumValues { + p.once.Do(func() { + if len(p.List) > 0 { + p.byName = make(map[protoreflect.Name]*EnumValue, len(p.List)) + p.byNum = make(map[protoreflect.EnumNumber]*EnumValue, len(p.List)) + for i := range p.List { + d := &p.List[i] + if _, ok := p.byName[d.Name()]; !ok { + p.byName[d.Name()] = d + } + if _, ok := p.byNum[d.Number()]; !ok { + p.byNum[d.Number()] = d + } + } + } + }) + return p +} + +type Messages struct { + List []Message + once sync.Once + byName map[protoreflect.Name]*Message // protected by once +} + +func (p *Messages) Len() int { + return len(p.List) +} +func (p *Messages) Get(i int) protoreflect.MessageDescriptor { + return &p.List[i] +} +func (p *Messages) ByName(s protoreflect.Name) protoreflect.MessageDescriptor { + if d := p.lazyInit().byName[s]; d != nil { + return d + } + return nil +} +func (p *Messages) Format(s fmt.State, r rune) { + descfmt.FormatList(s, r, p) +} +func (p *Messages) ProtoInternal(pragma.DoNotImplement) {} +func (p *Messages) lazyInit() *Messages { + p.once.Do(func() { + if len(p.List) > 0 { + p.byName = make(map[protoreflect.Name]*Message, len(p.List)) + for i := range p.List { + d := &p.List[i] + if _, ok := p.byName[d.Name()]; !ok { + p.byName[d.Name()] = d + } + } + } + }) + return p +} + +type Fields struct { + List []Field + once sync.Once + byName map[protoreflect.Name]*Field // protected by once + byJSON map[string]*Field // protected by once + byText map[string]*Field // protected by once + byNum map[protoreflect.FieldNumber]*Field // protected by once +} + +func (p *Fields) Len() int { + return len(p.List) +} +func (p *Fields) Get(i int) protoreflect.FieldDescriptor { + return &p.List[i] +} +func (p *Fields) ByName(s protoreflect.Name) protoreflect.FieldDescriptor { + if d := p.lazyInit().byName[s]; d != nil { + return d + } + return nil +} +func (p *Fields) ByJSONName(s string) protoreflect.FieldDescriptor { + if d := p.lazyInit().byJSON[s]; d != nil { + return d + } + return nil +} +func (p *Fields) ByTextName(s string) protoreflect.FieldDescriptor { + if d := p.lazyInit().byText[s]; d != nil { + return d + } + return nil +} +func (p *Fields) ByNumber(n protoreflect.FieldNumber) protoreflect.FieldDescriptor { + if d := p.lazyInit().byNum[n]; d != nil { + return d + } + return nil +} +func (p *Fields) Format(s fmt.State, r rune) { + descfmt.FormatList(s, r, p) +} +func (p *Fields) ProtoInternal(pragma.DoNotImplement) {} +func (p *Fields) lazyInit() *Fields { + p.once.Do(func() { + if len(p.List) > 0 { + p.byName = make(map[protoreflect.Name]*Field, len(p.List)) + p.byJSON = make(map[string]*Field, len(p.List)) + p.byText = make(map[string]*Field, len(p.List)) + p.byNum = make(map[protoreflect.FieldNumber]*Field, len(p.List)) + for i := range p.List { + d := &p.List[i] + if _, ok := p.byName[d.Name()]; !ok { + p.byName[d.Name()] = d + } + if _, ok := p.byJSON[d.JSONName()]; !ok { + p.byJSON[d.JSONName()] = d + } + if _, ok := p.byText[d.TextName()]; !ok { + p.byText[d.TextName()] = d + } + if isGroupLike(d) { + lowerJSONName := strings.ToLower(d.JSONName()) + if _, ok := p.byJSON[lowerJSONName]; !ok { + p.byJSON[lowerJSONName] = d + } + lowerTextName := strings.ToLower(d.TextName()) + if _, ok := p.byText[lowerTextName]; !ok { + p.byText[lowerTextName] = d + } + } + if _, ok := p.byNum[d.Number()]; !ok { + p.byNum[d.Number()] = d + } + } + } + }) + return p +} + +type Oneofs struct { + List []Oneof + once sync.Once + byName map[protoreflect.Name]*Oneof // protected by once +} + +func (p *Oneofs) Len() int { + return len(p.List) +} +func (p *Oneofs) Get(i int) protoreflect.OneofDescriptor { + return &p.List[i] +} +func (p *Oneofs) ByName(s protoreflect.Name) protoreflect.OneofDescriptor { + if d := p.lazyInit().byName[s]; d != nil { + return d + } + return nil +} +func (p *Oneofs) Format(s fmt.State, r rune) { + descfmt.FormatList(s, r, p) +} +func (p *Oneofs) ProtoInternal(pragma.DoNotImplement) {} +func (p *Oneofs) lazyInit() *Oneofs { + p.once.Do(func() { + if len(p.List) > 0 { + p.byName = make(map[protoreflect.Name]*Oneof, len(p.List)) + for i := range p.List { + d := &p.List[i] + if _, ok := p.byName[d.Name()]; !ok { + p.byName[d.Name()] = d + } + } + } + }) + return p +} + +type Extensions struct { + List []Extension + once sync.Once + byName map[protoreflect.Name]*Extension // protected by once +} + +func (p *Extensions) Len() int { + return len(p.List) +} +func (p *Extensions) Get(i int) protoreflect.ExtensionDescriptor { + return &p.List[i] +} +func (p *Extensions) ByName(s protoreflect.Name) protoreflect.ExtensionDescriptor { + if d := p.lazyInit().byName[s]; d != nil { + return d + } + return nil +} +func (p *Extensions) Format(s fmt.State, r rune) { + descfmt.FormatList(s, r, p) +} +func (p *Extensions) ProtoInternal(pragma.DoNotImplement) {} +func (p *Extensions) lazyInit() *Extensions { + p.once.Do(func() { + if len(p.List) > 0 { + p.byName = make(map[protoreflect.Name]*Extension, len(p.List)) + for i := range p.List { + d := &p.List[i] + if _, ok := p.byName[d.Name()]; !ok { + p.byName[d.Name()] = d + } + } + } + }) + return p +} + +type Services struct { + List []Service + once sync.Once + byName map[protoreflect.Name]*Service // protected by once +} + +func (p *Services) Len() int { + return len(p.List) +} +func (p *Services) Get(i int) protoreflect.ServiceDescriptor { + return &p.List[i] +} +func (p *Services) ByName(s protoreflect.Name) protoreflect.ServiceDescriptor { + if d := p.lazyInit().byName[s]; d != nil { + return d + } + return nil +} +func (p *Services) Format(s fmt.State, r rune) { + descfmt.FormatList(s, r, p) +} +func (p *Services) ProtoInternal(pragma.DoNotImplement) {} +func (p *Services) lazyInit() *Services { + p.once.Do(func() { + if len(p.List) > 0 { + p.byName = make(map[protoreflect.Name]*Service, len(p.List)) + for i := range p.List { + d := &p.List[i] + if _, ok := p.byName[d.Name()]; !ok { + p.byName[d.Name()] = d + } + } + } + }) + return p +} + +type Methods struct { + List []Method + once sync.Once + byName map[protoreflect.Name]*Method // protected by once +} + +func (p *Methods) Len() int { + return len(p.List) +} +func (p *Methods) Get(i int) protoreflect.MethodDescriptor { + return &p.List[i] +} +func (p *Methods) ByName(s protoreflect.Name) protoreflect.MethodDescriptor { + if d := p.lazyInit().byName[s]; d != nil { + return d + } + return nil +} +func (p *Methods) Format(s fmt.State, r rune) { + descfmt.FormatList(s, r, p) +} +func (p *Methods) ProtoInternal(pragma.DoNotImplement) {} +func (p *Methods) lazyInit() *Methods { + p.once.Do(func() { + if len(p.List) > 0 { + p.byName = make(map[protoreflect.Name]*Method, len(p.List)) + for i := range p.List { + d := &p.List[i] + if _, ok := p.byName[d.Name()]; !ok { + p.byName[d.Name()] = d + } + } + } + }) + return p +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/editions.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/editions.go new file mode 100644 index 0000000..a0aad27 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/editions.go @@ -0,0 +1,170 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package filedesc + +import ( + "fmt" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/editiondefaults" + "google.golang.org/protobuf/internal/genid" + "google.golang.org/protobuf/reflect/protoreflect" +) + +var defaultsCache = make(map[Edition]EditionFeatures) +var defaultsKeys = []Edition{} + +func init() { + unmarshalEditionDefaults(editiondefaults.Defaults) + SurrogateProto2.L1.EditionFeatures = getFeaturesFor(EditionProto2) + SurrogateProto3.L1.EditionFeatures = getFeaturesFor(EditionProto3) + SurrogateEdition2023.L1.EditionFeatures = getFeaturesFor(Edition2023) +} + +func unmarshalGoFeature(b []byte, parent EditionFeatures) EditionFeatures { + for len(b) > 0 { + num, _, n := protowire.ConsumeTag(b) + b = b[n:] + switch num { + case genid.GoFeatures_LegacyUnmarshalJsonEnum_field_number: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + parent.GenerateLegacyUnmarshalJSON = protowire.DecodeBool(v) + case genid.GoFeatures_ApiLevel_field_number: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + parent.APILevel = int(v) + case genid.GoFeatures_StripEnumPrefix_field_number: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + parent.StripEnumPrefix = int(v) + default: + panic(fmt.Sprintf("unkown field number %d while unmarshalling GoFeatures", num)) + } + } + return parent +} + +func unmarshalFeatureSet(b []byte, parent EditionFeatures) EditionFeatures { + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case genid.FeatureSet_FieldPresence_field_number: + parent.IsFieldPresence = v == genid.FeatureSet_EXPLICIT_enum_value || v == genid.FeatureSet_LEGACY_REQUIRED_enum_value + parent.IsLegacyRequired = v == genid.FeatureSet_LEGACY_REQUIRED_enum_value + case genid.FeatureSet_EnumType_field_number: + parent.IsOpenEnum = v == genid.FeatureSet_OPEN_enum_value + case genid.FeatureSet_RepeatedFieldEncoding_field_number: + parent.IsPacked = v == genid.FeatureSet_PACKED_enum_value + case genid.FeatureSet_Utf8Validation_field_number: + parent.IsUTF8Validated = v == genid.FeatureSet_VERIFY_enum_value + case genid.FeatureSet_MessageEncoding_field_number: + parent.IsDelimitedEncoded = v == genid.FeatureSet_DELIMITED_enum_value + case genid.FeatureSet_JsonFormat_field_number: + parent.IsJSONCompliant = v == genid.FeatureSet_ALLOW_enum_value + case genid.FeatureSet_EnforceNamingStyle_field_number: + // EnforceNamingStyle is enforced in protoc, languages other than C++ + // are not supposed to do anything with this feature. + case genid.FeatureSet_DefaultSymbolVisibility_field_number: + // DefaultSymbolVisibility is enforced in protoc, runtimes should not + // inspect this value. + default: + panic(fmt.Sprintf("unkown field number %d while unmarshalling FeatureSet", num)) + } + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.FeatureSet_Go_ext_number: + parent = unmarshalGoFeature(v, parent) + } + } + } + + return parent +} + +func featuresFromParentDesc(parentDesc protoreflect.Descriptor) EditionFeatures { + var parentFS EditionFeatures + switch p := parentDesc.(type) { + case *File: + parentFS = p.L1.EditionFeatures + case *Message: + parentFS = p.L1.EditionFeatures + default: + panic(fmt.Sprintf("unknown parent type %T", parentDesc)) + } + return parentFS +} + +func unmarshalEditionDefault(b []byte) { + var ed Edition + var fs EditionFeatures + for len(b) > 0 { + num, typ, n := protowire.ConsumeTag(b) + b = b[n:] + switch typ { + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case genid.FeatureSetDefaults_FeatureSetEditionDefault_Edition_field_number: + ed = Edition(v) + } + case protowire.BytesType: + v, m := protowire.ConsumeBytes(b) + b = b[m:] + switch num { + case genid.FeatureSetDefaults_FeatureSetEditionDefault_FixedFeatures_field_number: + fs = unmarshalFeatureSet(v, fs) + case genid.FeatureSetDefaults_FeatureSetEditionDefault_OverridableFeatures_field_number: + fs = unmarshalFeatureSet(v, fs) + } + } + } + defaultsCache[ed] = fs + defaultsKeys = append(defaultsKeys, ed) +} + +func unmarshalEditionDefaults(b []byte) { + for len(b) > 0 { + num, _, n := protowire.ConsumeTag(b) + b = b[n:] + switch num { + case genid.FeatureSetDefaults_Defaults_field_number: + def, m := protowire.ConsumeBytes(b) + b = b[m:] + unmarshalEditionDefault(def) + case genid.FeatureSetDefaults_MinimumEdition_field_number, + genid.FeatureSetDefaults_MaximumEdition_field_number: + // We don't care about the minimum and maximum editions. If the + // edition we are looking for later on is not in the cache we know + // it is outside of the range between minimum and maximum edition. + _, m := protowire.ConsumeVarint(b) + b = b[m:] + default: + panic(fmt.Sprintf("unkown field number %d while unmarshalling EditionDefault", num)) + } + } +} + +func getFeaturesFor(ed Edition) EditionFeatures { + match := EditionUnknown + for _, key := range defaultsKeys { + if key > ed { + break + } + match = key + } + if match == EditionUnknown { + panic(fmt.Sprintf("unsupported edition: %v", ed)) + } + return defaultsCache[match] +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/placeholder.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/placeholder.go new file mode 100644 index 0000000..bfb3b84 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/placeholder.go @@ -0,0 +1,110 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package filedesc + +import ( + "google.golang.org/protobuf/internal/descopts" + "google.golang.org/protobuf/internal/pragma" + "google.golang.org/protobuf/reflect/protoreflect" +) + +var ( + emptyNames = new(Names) + emptyEnumRanges = new(EnumRanges) + emptyFieldRanges = new(FieldRanges) + emptyFieldNumbers = new(FieldNumbers) + emptySourceLocations = new(SourceLocations) + + emptyFiles = new(FileImports) + emptyMessages = new(Messages) + emptyFields = new(Fields) + emptyOneofs = new(Oneofs) + emptyEnums = new(Enums) + emptyEnumValues = new(EnumValues) + emptyExtensions = new(Extensions) + emptyServices = new(Services) +) + +// PlaceholderFile is a placeholder, representing only the file path. +type PlaceholderFile string + +func (f PlaceholderFile) ParentFile() protoreflect.FileDescriptor { return f } +func (f PlaceholderFile) Parent() protoreflect.Descriptor { return nil } +func (f PlaceholderFile) Index() int { return 0 } +func (f PlaceholderFile) Syntax() protoreflect.Syntax { return 0 } +func (f PlaceholderFile) Name() protoreflect.Name { return "" } +func (f PlaceholderFile) FullName() protoreflect.FullName { return "" } +func (f PlaceholderFile) IsPlaceholder() bool { return true } +func (f PlaceholderFile) Options() protoreflect.ProtoMessage { return descopts.File } +func (f PlaceholderFile) Path() string { return string(f) } +func (f PlaceholderFile) Package() protoreflect.FullName { return "" } +func (f PlaceholderFile) Imports() protoreflect.FileImports { return emptyFiles } +func (f PlaceholderFile) Messages() protoreflect.MessageDescriptors { return emptyMessages } +func (f PlaceholderFile) Enums() protoreflect.EnumDescriptors { return emptyEnums } +func (f PlaceholderFile) Extensions() protoreflect.ExtensionDescriptors { return emptyExtensions } +func (f PlaceholderFile) Services() protoreflect.ServiceDescriptors { return emptyServices } +func (f PlaceholderFile) SourceLocations() protoreflect.SourceLocations { return emptySourceLocations } +func (f PlaceholderFile) ProtoType(protoreflect.FileDescriptor) { return } +func (f PlaceholderFile) ProtoInternal(pragma.DoNotImplement) { return } + +// PlaceholderEnum is a placeholder, representing only the full name. +type PlaceholderEnum protoreflect.FullName + +func (e PlaceholderEnum) ParentFile() protoreflect.FileDescriptor { return nil } +func (e PlaceholderEnum) Parent() protoreflect.Descriptor { return nil } +func (e PlaceholderEnum) Index() int { return 0 } +func (e PlaceholderEnum) Syntax() protoreflect.Syntax { return 0 } +func (e PlaceholderEnum) Name() protoreflect.Name { return protoreflect.FullName(e).Name() } +func (e PlaceholderEnum) FullName() protoreflect.FullName { return protoreflect.FullName(e) } +func (e PlaceholderEnum) IsPlaceholder() bool { return true } +func (e PlaceholderEnum) Options() protoreflect.ProtoMessage { return descopts.Enum } +func (e PlaceholderEnum) Values() protoreflect.EnumValueDescriptors { return emptyEnumValues } +func (e PlaceholderEnum) ReservedNames() protoreflect.Names { return emptyNames } +func (e PlaceholderEnum) ReservedRanges() protoreflect.EnumRanges { return emptyEnumRanges } +func (e PlaceholderEnum) IsClosed() bool { return false } +func (e PlaceholderEnum) ProtoType(protoreflect.EnumDescriptor) { return } +func (e PlaceholderEnum) ProtoInternal(pragma.DoNotImplement) { return } + +// PlaceholderEnumValue is a placeholder, representing only the full name. +type PlaceholderEnumValue protoreflect.FullName + +func (e PlaceholderEnumValue) ParentFile() protoreflect.FileDescriptor { return nil } +func (e PlaceholderEnumValue) Parent() protoreflect.Descriptor { return nil } +func (e PlaceholderEnumValue) Index() int { return 0 } +func (e PlaceholderEnumValue) Syntax() protoreflect.Syntax { return 0 } +func (e PlaceholderEnumValue) Name() protoreflect.Name { return protoreflect.FullName(e).Name() } +func (e PlaceholderEnumValue) FullName() protoreflect.FullName { return protoreflect.FullName(e) } +func (e PlaceholderEnumValue) IsPlaceholder() bool { return true } +func (e PlaceholderEnumValue) Options() protoreflect.ProtoMessage { return descopts.EnumValue } +func (e PlaceholderEnumValue) Number() protoreflect.EnumNumber { return 0 } +func (e PlaceholderEnumValue) ProtoType(protoreflect.EnumValueDescriptor) { return } +func (e PlaceholderEnumValue) ProtoInternal(pragma.DoNotImplement) { return } + +// PlaceholderMessage is a placeholder, representing only the full name. +type PlaceholderMessage protoreflect.FullName + +func (m PlaceholderMessage) ParentFile() protoreflect.FileDescriptor { return nil } +func (m PlaceholderMessage) Parent() protoreflect.Descriptor { return nil } +func (m PlaceholderMessage) Index() int { return 0 } +func (m PlaceholderMessage) Syntax() protoreflect.Syntax { return 0 } +func (m PlaceholderMessage) Name() protoreflect.Name { return protoreflect.FullName(m).Name() } +func (m PlaceholderMessage) FullName() protoreflect.FullName { return protoreflect.FullName(m) } +func (m PlaceholderMessage) IsPlaceholder() bool { return true } +func (m PlaceholderMessage) Options() protoreflect.ProtoMessage { return descopts.Message } +func (m PlaceholderMessage) IsMapEntry() bool { return false } +func (m PlaceholderMessage) Fields() protoreflect.FieldDescriptors { return emptyFields } +func (m PlaceholderMessage) Oneofs() protoreflect.OneofDescriptors { return emptyOneofs } +func (m PlaceholderMessage) ReservedNames() protoreflect.Names { return emptyNames } +func (m PlaceholderMessage) ReservedRanges() protoreflect.FieldRanges { return emptyFieldRanges } +func (m PlaceholderMessage) RequiredNumbers() protoreflect.FieldNumbers { return emptyFieldNumbers } +func (m PlaceholderMessage) ExtensionRanges() protoreflect.FieldRanges { return emptyFieldRanges } +func (m PlaceholderMessage) ExtensionRangeOptions(int) protoreflect.ProtoMessage { + panic("index out of range") +} +func (m PlaceholderMessage) Messages() protoreflect.MessageDescriptors { return emptyMessages } +func (m PlaceholderMessage) Enums() protoreflect.EnumDescriptors { return emptyEnums } +func (m PlaceholderMessage) Extensions() protoreflect.ExtensionDescriptors { return emptyExtensions } +func (m PlaceholderMessage) ProtoType(protoreflect.MessageDescriptor) { return } +func (m PlaceholderMessage) ProtoInternal(pragma.DoNotImplement) { return } diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/presence.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/presence.go new file mode 100644 index 0000000..a12ec97 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filedesc/presence.go @@ -0,0 +1,33 @@ +// Copyright 2025 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package filedesc + +import "google.golang.org/protobuf/reflect/protoreflect" + +// UsePresenceForField reports whether the presence bitmap should be used for +// the specified field. +func UsePresenceForField(fd protoreflect.FieldDescriptor) (usePresence, canBeLazy bool) { + switch { + case fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic(): + // Oneof fields never use the presence bitmap. + // + // Synthetic oneofs are an exception: Those are used to implement proto3 + // optional fields and hence should follow non-oneof field semantics. + return false, false + + case fd.IsMap(): + // Map-typed fields never use the presence bitmap. + return false, false + + case fd.Kind() == protoreflect.MessageKind || fd.Kind() == protoreflect.GroupKind: + // Lazy fields always use the presence bitmap (only messages can be lazy). + isLazy := fd.(interface{ IsLazy() bool }).IsLazy() + return isLazy, isLazy + + default: + // If the field has presence, use the presence bitmap. + return fd.HasPresence(), false + } +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filetype/build.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filetype/build.go new file mode 100644 index 0000000..e1b4130 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/filetype/build.go @@ -0,0 +1,296 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package filetype provides functionality for wrapping descriptors +// with Go type information. +package filetype + +import ( + "reflect" + + "google.golang.org/protobuf/internal/descopts" + "google.golang.org/protobuf/internal/filedesc" + pimpl "google.golang.org/protobuf/internal/impl" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" +) + +// Builder constructs type descriptors from a raw file descriptor +// and associated Go types for each enum and message declaration. +// +// # Flattened Ordering +// +// The protobuf type system represents declarations as a tree. Certain nodes in +// the tree require us to either associate it with a concrete Go type or to +// resolve a dependency, which is information that must be provided separately +// since it cannot be derived from the file descriptor alone. +// +// However, representing a tree as Go literals is difficult to simply do in a +// space and time efficient way. Thus, we store them as a flattened list of +// objects where the serialization order from the tree-based form is important. +// +// The "flattened ordering" is defined as a tree traversal of all enum, message, +// extension, and service declarations using the following algorithm: +// +// def VisitFileDecls(fd): +// for e in fd.Enums: yield e +// for m in fd.Messages: yield m +// for x in fd.Extensions: yield x +// for s in fd.Services: yield s +// for m in fd.Messages: yield from VisitMessageDecls(m) +// +// def VisitMessageDecls(md): +// for e in md.Enums: yield e +// for m in md.Messages: yield m +// for x in md.Extensions: yield x +// for m in md.Messages: yield from VisitMessageDecls(m) +// +// The traversal starts at the root file descriptor and yields each direct +// declaration within each node before traversing into sub-declarations +// that children themselves may have. +type Builder struct { + // File is the underlying file descriptor builder. + File filedesc.Builder + + // GoTypes is a unique set of the Go types for all declarations and + // dependencies. Each type is represented as a zero value of the Go type. + // + // Declarations are Go types generated for enums and messages directly + // declared (not publicly imported) in the proto source file. + // Messages for map entries are accounted for, but represented by nil. + // Enum declarations in "flattened ordering" come first, followed by + // message declarations in "flattened ordering". + // + // Dependencies are Go types for enums or messages referenced by + // message fields, for parent extended messages of + // extension fields, for enums or messages referenced by extension fields, + // and for input and output messages referenced by service methods. + // Dependencies must come after declarations, but the ordering of + // dependencies themselves is unspecified. + GoTypes []any + + // DependencyIndexes is an ordered list of indexes into GoTypes for the + // dependencies of messages, extensions, or services. + // + // There are 5 sub-lists in "flattened ordering" concatenated back-to-back: + // 0. Message field dependencies: list of the enum or message type + // referred to by every message field. + // 1. Extension field targets: list of the extended parent message of + // every extension. + // 2. Extension field dependencies: list of the enum or message type + // referred to by every extension field. + // 3. Service method inputs: list of the input message type + // referred to by every service method. + // 4. Service method outputs: list of the output message type + // referred to by every service method. + // + // The offset into DependencyIndexes for the start of each sub-list + // is appended to the end in reverse order. + DependencyIndexes []int32 + + // EnumInfos is a list of enum infos in "flattened ordering". + EnumInfos []pimpl.EnumInfo + + // MessageInfos is a list of message infos in "flattened ordering". + // If provided, the GoType and PBType for each element is populated. + // + // Requirement: len(MessageInfos) == len(Build.Messages) + MessageInfos []pimpl.MessageInfo + + // ExtensionInfos is a list of extension infos in "flattened ordering". + // Each element is initialized and registered with the protoregistry package. + // + // Requirement: len(LegacyExtensions) == len(Build.Extensions) + ExtensionInfos []pimpl.ExtensionInfo + + // TypeRegistry is the registry to register each type descriptor. + // If nil, it uses protoregistry.GlobalTypes. + TypeRegistry interface { + RegisterMessage(protoreflect.MessageType) error + RegisterEnum(protoreflect.EnumType) error + RegisterExtension(protoreflect.ExtensionType) error + } +} + +// Out is the output of the builder. +type Out struct { + File protoreflect.FileDescriptor +} + +func (tb Builder) Build() (out Out) { + // Replace the resolver with one that resolves dependencies by index, + // which is faster and more reliable than relying on the global registry. + if tb.File.FileRegistry == nil { + tb.File.FileRegistry = protoregistry.GlobalFiles + } + tb.File.FileRegistry = &resolverByIndex{ + goTypes: tb.GoTypes, + depIdxs: tb.DependencyIndexes, + fileRegistry: tb.File.FileRegistry, + } + + // Initialize registry if unpopulated. + if tb.TypeRegistry == nil { + tb.TypeRegistry = protoregistry.GlobalTypes + } + + fbOut := tb.File.Build() + out.File = fbOut.File + + // Process enums. + enumGoTypes := tb.GoTypes[:len(fbOut.Enums)] + if len(tb.EnumInfos) != len(fbOut.Enums) { + panic("mismatching enum lengths") + } + if len(fbOut.Enums) > 0 { + for i := range fbOut.Enums { + tb.EnumInfos[i] = pimpl.EnumInfo{ + GoReflectType: reflect.TypeOf(enumGoTypes[i]), + Desc: &fbOut.Enums[i], + } + // Register enum types. + if err := tb.TypeRegistry.RegisterEnum(&tb.EnumInfos[i]); err != nil { + panic(err) + } + } + } + + // Process messages. + messageGoTypes := tb.GoTypes[len(fbOut.Enums):][:len(fbOut.Messages)] + if len(tb.MessageInfos) != len(fbOut.Messages) { + panic("mismatching message lengths") + } + if len(fbOut.Messages) > 0 { + for i := range fbOut.Messages { + if messageGoTypes[i] == nil { + continue // skip map entry + } + + tb.MessageInfos[i].GoReflectType = reflect.TypeOf(messageGoTypes[i]) + tb.MessageInfos[i].Desc = &fbOut.Messages[i] + + // Register message types. + if err := tb.TypeRegistry.RegisterMessage(&tb.MessageInfos[i]); err != nil { + panic(err) + } + } + + // As a special-case for descriptor.proto, + // locally register concrete message type for the options. + if out.File.Path() == "google/protobuf/descriptor.proto" && out.File.Package() == "google.protobuf" { + for i := range fbOut.Messages { + switch fbOut.Messages[i].Name() { + case "FileOptions": + descopts.File = messageGoTypes[i].(protoreflect.ProtoMessage) + case "EnumOptions": + descopts.Enum = messageGoTypes[i].(protoreflect.ProtoMessage) + case "EnumValueOptions": + descopts.EnumValue = messageGoTypes[i].(protoreflect.ProtoMessage) + case "MessageOptions": + descopts.Message = messageGoTypes[i].(protoreflect.ProtoMessage) + case "FieldOptions": + descopts.Field = messageGoTypes[i].(protoreflect.ProtoMessage) + case "OneofOptions": + descopts.Oneof = messageGoTypes[i].(protoreflect.ProtoMessage) + case "ExtensionRangeOptions": + descopts.ExtensionRange = messageGoTypes[i].(protoreflect.ProtoMessage) + case "ServiceOptions": + descopts.Service = messageGoTypes[i].(protoreflect.ProtoMessage) + case "MethodOptions": + descopts.Method = messageGoTypes[i].(protoreflect.ProtoMessage) + } + } + } + } + + // Process extensions. + if len(tb.ExtensionInfos) != len(fbOut.Extensions) { + panic("mismatching extension lengths") + } + var depIdx int32 + for i := range fbOut.Extensions { + // For enum and message kinds, determine the referent Go type so + // that we can construct their constructors. + const listExtDeps = 2 + var goType reflect.Type + switch fbOut.Extensions[i].L1.Kind { + case protoreflect.EnumKind: + j := depIdxs.Get(tb.DependencyIndexes, listExtDeps, depIdx) + goType = reflect.TypeOf(tb.GoTypes[j]) + depIdx++ + case protoreflect.MessageKind, protoreflect.GroupKind: + j := depIdxs.Get(tb.DependencyIndexes, listExtDeps, depIdx) + goType = reflect.TypeOf(tb.GoTypes[j]) + depIdx++ + default: + goType = goTypeForPBKind[fbOut.Extensions[i].L1.Kind] + } + if fbOut.Extensions[i].IsList() { + goType = reflect.SliceOf(goType) + } + + pimpl.InitExtensionInfo(&tb.ExtensionInfos[i], &fbOut.Extensions[i], goType) + + // Register extension types. + if err := tb.TypeRegistry.RegisterExtension(&tb.ExtensionInfos[i]); err != nil { + panic(err) + } + } + + return out +} + +var goTypeForPBKind = map[protoreflect.Kind]reflect.Type{ + protoreflect.BoolKind: reflect.TypeOf(bool(false)), + protoreflect.Int32Kind: reflect.TypeOf(int32(0)), + protoreflect.Sint32Kind: reflect.TypeOf(int32(0)), + protoreflect.Sfixed32Kind: reflect.TypeOf(int32(0)), + protoreflect.Int64Kind: reflect.TypeOf(int64(0)), + protoreflect.Sint64Kind: reflect.TypeOf(int64(0)), + protoreflect.Sfixed64Kind: reflect.TypeOf(int64(0)), + protoreflect.Uint32Kind: reflect.TypeOf(uint32(0)), + protoreflect.Fixed32Kind: reflect.TypeOf(uint32(0)), + protoreflect.Uint64Kind: reflect.TypeOf(uint64(0)), + protoreflect.Fixed64Kind: reflect.TypeOf(uint64(0)), + protoreflect.FloatKind: reflect.TypeOf(float32(0)), + protoreflect.DoubleKind: reflect.TypeOf(float64(0)), + protoreflect.StringKind: reflect.TypeOf(string("")), + protoreflect.BytesKind: reflect.TypeOf([]byte(nil)), +} + +type depIdxs []int32 + +// Get retrieves the jth element of the ith sub-list. +func (x depIdxs) Get(i, j int32) int32 { + return x[x[int32(len(x))-i-1]+j] +} + +type ( + resolverByIndex struct { + goTypes []any + depIdxs depIdxs + fileRegistry + } + fileRegistry interface { + FindFileByPath(string) (protoreflect.FileDescriptor, error) + FindDescriptorByName(protoreflect.FullName) (protoreflect.Descriptor, error) + RegisterFile(protoreflect.FileDescriptor) error + } +) + +func (r *resolverByIndex) FindEnumByIndex(i, j int32, es []filedesc.Enum, ms []filedesc.Message) protoreflect.EnumDescriptor { + if depIdx := int(r.depIdxs.Get(i, j)); int(depIdx) < len(es)+len(ms) { + return &es[depIdx] + } else { + return pimpl.Export{}.EnumDescriptorOf(r.goTypes[depIdx]) + } +} + +func (r *resolverByIndex) FindMessageByIndex(i, j int32, es []filedesc.Enum, ms []filedesc.Message) protoreflect.MessageDescriptor { + if depIdx := int(r.depIdxs.Get(i, j)); depIdx < len(es)+len(ms) { + return &ms[depIdx-len(es)] + } else { + return pimpl.Export{}.MessageDescriptorOf(r.goTypes[depIdx]) + } +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/flags/flags.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/flags/flags.go new file mode 100644 index 0000000..a06ccab --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/flags/flags.go @@ -0,0 +1,24 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package flags provides a set of flags controlled by build tags. +package flags + +// ProtoLegacy specifies whether to enable support for legacy functionality +// such as MessageSets, and various other obscure behavior +// that is necessary to maintain backwards compatibility with proto1 or +// the pre-release variants of proto2 and proto3. +// +// This is disabled by default unless built with the "protolegacy" tag. +// +// WARNING: The compatibility agreement covers nothing provided by this flag. +// As such, functionality may suddenly be removed or changed at our discretion. +const ProtoLegacy = protoLegacy + +// LazyUnmarshalExtensions specifies whether to lazily unmarshal extensions. +// +// Lazy extension unmarshaling validates the contents of message-valued +// extension fields at unmarshal time, but defers creating the message +// structure until the extension is first accessed. +const LazyUnmarshalExtensions = ProtoLegacy diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go new file mode 100644 index 0000000..bda8e8c --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_disable.go @@ -0,0 +1,10 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !protolegacy +// +build !protolegacy + +package flags + +const protoLegacy = false diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go new file mode 100644 index 0000000..6d8d9bd --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/flags/proto_legacy_enable.go @@ -0,0 +1,10 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build protolegacy +// +build protolegacy + +package flags + +const protoLegacy = true diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/any_gen.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/any_gen.go new file mode 100644 index 0000000..e6f7d47 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/any_gen.go @@ -0,0 +1,34 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-protos. DO NOT EDIT. + +package genid + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" +) + +const File_google_protobuf_any_proto = "google/protobuf/any.proto" + +// Names for google.protobuf.Any. +const ( + Any_message_name protoreflect.Name = "Any" + Any_message_fullname protoreflect.FullName = "google.protobuf.Any" +) + +// Field names for google.protobuf.Any. +const ( + Any_TypeUrl_field_name protoreflect.Name = "type_url" + Any_Value_field_name protoreflect.Name = "value" + + Any_TypeUrl_field_fullname protoreflect.FullName = "google.protobuf.Any.type_url" + Any_Value_field_fullname protoreflect.FullName = "google.protobuf.Any.value" +) + +// Field numbers for google.protobuf.Any. +const ( + Any_TypeUrl_field_number protoreflect.FieldNumber = 1 + Any_Value_field_number protoreflect.FieldNumber = 2 +) diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/api_gen.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/api_gen.go new file mode 100644 index 0000000..3ceb6fa --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/api_gen.go @@ -0,0 +1,112 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-protos. DO NOT EDIT. + +package genid + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" +) + +const File_google_protobuf_api_proto = "google/protobuf/api.proto" + +// Names for google.protobuf.Api. +const ( + Api_message_name protoreflect.Name = "Api" + Api_message_fullname protoreflect.FullName = "google.protobuf.Api" +) + +// Field names for google.protobuf.Api. +const ( + Api_Name_field_name protoreflect.Name = "name" + Api_Methods_field_name protoreflect.Name = "methods" + Api_Options_field_name protoreflect.Name = "options" + Api_Version_field_name protoreflect.Name = "version" + Api_SourceContext_field_name protoreflect.Name = "source_context" + Api_Mixins_field_name protoreflect.Name = "mixins" + Api_Syntax_field_name protoreflect.Name = "syntax" + Api_Edition_field_name protoreflect.Name = "edition" + + Api_Name_field_fullname protoreflect.FullName = "google.protobuf.Api.name" + Api_Methods_field_fullname protoreflect.FullName = "google.protobuf.Api.methods" + Api_Options_field_fullname protoreflect.FullName = "google.protobuf.Api.options" + Api_Version_field_fullname protoreflect.FullName = "google.protobuf.Api.version" + Api_SourceContext_field_fullname protoreflect.FullName = "google.protobuf.Api.source_context" + Api_Mixins_field_fullname protoreflect.FullName = "google.protobuf.Api.mixins" + Api_Syntax_field_fullname protoreflect.FullName = "google.protobuf.Api.syntax" + Api_Edition_field_fullname protoreflect.FullName = "google.protobuf.Api.edition" +) + +// Field numbers for google.protobuf.Api. +const ( + Api_Name_field_number protoreflect.FieldNumber = 1 + Api_Methods_field_number protoreflect.FieldNumber = 2 + Api_Options_field_number protoreflect.FieldNumber = 3 + Api_Version_field_number protoreflect.FieldNumber = 4 + Api_SourceContext_field_number protoreflect.FieldNumber = 5 + Api_Mixins_field_number protoreflect.FieldNumber = 6 + Api_Syntax_field_number protoreflect.FieldNumber = 7 + Api_Edition_field_number protoreflect.FieldNumber = 8 +) + +// Names for google.protobuf.Method. +const ( + Method_message_name protoreflect.Name = "Method" + Method_message_fullname protoreflect.FullName = "google.protobuf.Method" +) + +// Field names for google.protobuf.Method. +const ( + Method_Name_field_name protoreflect.Name = "name" + Method_RequestTypeUrl_field_name protoreflect.Name = "request_type_url" + Method_RequestStreaming_field_name protoreflect.Name = "request_streaming" + Method_ResponseTypeUrl_field_name protoreflect.Name = "response_type_url" + Method_ResponseStreaming_field_name protoreflect.Name = "response_streaming" + Method_Options_field_name protoreflect.Name = "options" + Method_Syntax_field_name protoreflect.Name = "syntax" + Method_Edition_field_name protoreflect.Name = "edition" + + Method_Name_field_fullname protoreflect.FullName = "google.protobuf.Method.name" + Method_RequestTypeUrl_field_fullname protoreflect.FullName = "google.protobuf.Method.request_type_url" + Method_RequestStreaming_field_fullname protoreflect.FullName = "google.protobuf.Method.request_streaming" + Method_ResponseTypeUrl_field_fullname protoreflect.FullName = "google.protobuf.Method.response_type_url" + Method_ResponseStreaming_field_fullname protoreflect.FullName = "google.protobuf.Method.response_streaming" + Method_Options_field_fullname protoreflect.FullName = "google.protobuf.Method.options" + Method_Syntax_field_fullname protoreflect.FullName = "google.protobuf.Method.syntax" + Method_Edition_field_fullname protoreflect.FullName = "google.protobuf.Method.edition" +) + +// Field numbers for google.protobuf.Method. +const ( + Method_Name_field_number protoreflect.FieldNumber = 1 + Method_RequestTypeUrl_field_number protoreflect.FieldNumber = 2 + Method_RequestStreaming_field_number protoreflect.FieldNumber = 3 + Method_ResponseTypeUrl_field_number protoreflect.FieldNumber = 4 + Method_ResponseStreaming_field_number protoreflect.FieldNumber = 5 + Method_Options_field_number protoreflect.FieldNumber = 6 + Method_Syntax_field_number protoreflect.FieldNumber = 7 + Method_Edition_field_number protoreflect.FieldNumber = 8 +) + +// Names for google.protobuf.Mixin. +const ( + Mixin_message_name protoreflect.Name = "Mixin" + Mixin_message_fullname protoreflect.FullName = "google.protobuf.Mixin" +) + +// Field names for google.protobuf.Mixin. +const ( + Mixin_Name_field_name protoreflect.Name = "name" + Mixin_Root_field_name protoreflect.Name = "root" + + Mixin_Name_field_fullname protoreflect.FullName = "google.protobuf.Mixin.name" + Mixin_Root_field_fullname protoreflect.FullName = "google.protobuf.Mixin.root" +) + +// Field numbers for google.protobuf.Mixin. +const ( + Mixin_Name_field_number protoreflect.FieldNumber = 1 + Mixin_Root_field_number protoreflect.FieldNumber = 2 +) diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go new file mode 100644 index 0000000..950a6a3 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go @@ -0,0 +1,1332 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-protos. DO NOT EDIT. + +package genid + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" +) + +const File_google_protobuf_descriptor_proto = "google/protobuf/descriptor.proto" + +// Full and short names for google.protobuf.Edition. +const ( + Edition_enum_fullname = "google.protobuf.Edition" + Edition_enum_name = "Edition" +) + +// Enum values for google.protobuf.Edition. +const ( + Edition_EDITION_UNKNOWN_enum_value = 0 + Edition_EDITION_LEGACY_enum_value = 900 + Edition_EDITION_PROTO2_enum_value = 998 + Edition_EDITION_PROTO3_enum_value = 999 + Edition_EDITION_2023_enum_value = 1000 + Edition_EDITION_2024_enum_value = 1001 + Edition_EDITION_1_TEST_ONLY_enum_value = 1 + Edition_EDITION_2_TEST_ONLY_enum_value = 2 + Edition_EDITION_99997_TEST_ONLY_enum_value = 99997 + Edition_EDITION_99998_TEST_ONLY_enum_value = 99998 + Edition_EDITION_99999_TEST_ONLY_enum_value = 99999 + Edition_EDITION_MAX_enum_value = 2147483647 +) + +// Full and short names for google.protobuf.SymbolVisibility. +const ( + SymbolVisibility_enum_fullname = "google.protobuf.SymbolVisibility" + SymbolVisibility_enum_name = "SymbolVisibility" +) + +// Enum values for google.protobuf.SymbolVisibility. +const ( + SymbolVisibility_VISIBILITY_UNSET_enum_value = 0 + SymbolVisibility_VISIBILITY_LOCAL_enum_value = 1 + SymbolVisibility_VISIBILITY_EXPORT_enum_value = 2 +) + +// Names for google.protobuf.FileDescriptorSet. +const ( + FileDescriptorSet_message_name protoreflect.Name = "FileDescriptorSet" + FileDescriptorSet_message_fullname protoreflect.FullName = "google.protobuf.FileDescriptorSet" +) + +// Field names for google.protobuf.FileDescriptorSet. +const ( + FileDescriptorSet_File_field_name protoreflect.Name = "file" + + FileDescriptorSet_File_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorSet.file" +) + +// Field numbers for google.protobuf.FileDescriptorSet. +const ( + FileDescriptorSet_File_field_number protoreflect.FieldNumber = 1 +) + +// Names for google.protobuf.FileDescriptorProto. +const ( + FileDescriptorProto_message_name protoreflect.Name = "FileDescriptorProto" + FileDescriptorProto_message_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto" +) + +// Field names for google.protobuf.FileDescriptorProto. +const ( + FileDescriptorProto_Name_field_name protoreflect.Name = "name" + FileDescriptorProto_Package_field_name protoreflect.Name = "package" + FileDescriptorProto_Dependency_field_name protoreflect.Name = "dependency" + FileDescriptorProto_PublicDependency_field_name protoreflect.Name = "public_dependency" + FileDescriptorProto_WeakDependency_field_name protoreflect.Name = "weak_dependency" + FileDescriptorProto_OptionDependency_field_name protoreflect.Name = "option_dependency" + FileDescriptorProto_MessageType_field_name protoreflect.Name = "message_type" + FileDescriptorProto_EnumType_field_name protoreflect.Name = "enum_type" + FileDescriptorProto_Service_field_name protoreflect.Name = "service" + FileDescriptorProto_Extension_field_name protoreflect.Name = "extension" + FileDescriptorProto_Options_field_name protoreflect.Name = "options" + FileDescriptorProto_SourceCodeInfo_field_name protoreflect.Name = "source_code_info" + FileDescriptorProto_Syntax_field_name protoreflect.Name = "syntax" + FileDescriptorProto_Edition_field_name protoreflect.Name = "edition" + + FileDescriptorProto_Name_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.name" + FileDescriptorProto_Package_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.package" + FileDescriptorProto_Dependency_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.dependency" + FileDescriptorProto_PublicDependency_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.public_dependency" + FileDescriptorProto_WeakDependency_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.weak_dependency" + FileDescriptorProto_OptionDependency_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.option_dependency" + FileDescriptorProto_MessageType_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.message_type" + FileDescriptorProto_EnumType_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.enum_type" + FileDescriptorProto_Service_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.service" + FileDescriptorProto_Extension_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.extension" + FileDescriptorProto_Options_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.options" + FileDescriptorProto_SourceCodeInfo_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.source_code_info" + FileDescriptorProto_Syntax_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.syntax" + FileDescriptorProto_Edition_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.edition" +) + +// Field numbers for google.protobuf.FileDescriptorProto. +const ( + FileDescriptorProto_Name_field_number protoreflect.FieldNumber = 1 + FileDescriptorProto_Package_field_number protoreflect.FieldNumber = 2 + FileDescriptorProto_Dependency_field_number protoreflect.FieldNumber = 3 + FileDescriptorProto_PublicDependency_field_number protoreflect.FieldNumber = 10 + FileDescriptorProto_WeakDependency_field_number protoreflect.FieldNumber = 11 + FileDescriptorProto_OptionDependency_field_number protoreflect.FieldNumber = 15 + FileDescriptorProto_MessageType_field_number protoreflect.FieldNumber = 4 + FileDescriptorProto_EnumType_field_number protoreflect.FieldNumber = 5 + FileDescriptorProto_Service_field_number protoreflect.FieldNumber = 6 + FileDescriptorProto_Extension_field_number protoreflect.FieldNumber = 7 + FileDescriptorProto_Options_field_number protoreflect.FieldNumber = 8 + FileDescriptorProto_SourceCodeInfo_field_number protoreflect.FieldNumber = 9 + FileDescriptorProto_Syntax_field_number protoreflect.FieldNumber = 12 + FileDescriptorProto_Edition_field_number protoreflect.FieldNumber = 14 +) + +// Names for google.protobuf.DescriptorProto. +const ( + DescriptorProto_message_name protoreflect.Name = "DescriptorProto" + DescriptorProto_message_fullname protoreflect.FullName = "google.protobuf.DescriptorProto" +) + +// Field names for google.protobuf.DescriptorProto. +const ( + DescriptorProto_Name_field_name protoreflect.Name = "name" + DescriptorProto_Field_field_name protoreflect.Name = "field" + DescriptorProto_Extension_field_name protoreflect.Name = "extension" + DescriptorProto_NestedType_field_name protoreflect.Name = "nested_type" + DescriptorProto_EnumType_field_name protoreflect.Name = "enum_type" + DescriptorProto_ExtensionRange_field_name protoreflect.Name = "extension_range" + DescriptorProto_OneofDecl_field_name protoreflect.Name = "oneof_decl" + DescriptorProto_Options_field_name protoreflect.Name = "options" + DescriptorProto_ReservedRange_field_name protoreflect.Name = "reserved_range" + DescriptorProto_ReservedName_field_name protoreflect.Name = "reserved_name" + DescriptorProto_Visibility_field_name protoreflect.Name = "visibility" + + DescriptorProto_Name_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.name" + DescriptorProto_Field_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.field" + DescriptorProto_Extension_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.extension" + DescriptorProto_NestedType_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.nested_type" + DescriptorProto_EnumType_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.enum_type" + DescriptorProto_ExtensionRange_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.extension_range" + DescriptorProto_OneofDecl_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.oneof_decl" + DescriptorProto_Options_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.options" + DescriptorProto_ReservedRange_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.reserved_range" + DescriptorProto_ReservedName_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.reserved_name" + DescriptorProto_Visibility_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.visibility" +) + +// Field numbers for google.protobuf.DescriptorProto. +const ( + DescriptorProto_Name_field_number protoreflect.FieldNumber = 1 + DescriptorProto_Field_field_number protoreflect.FieldNumber = 2 + DescriptorProto_Extension_field_number protoreflect.FieldNumber = 6 + DescriptorProto_NestedType_field_number protoreflect.FieldNumber = 3 + DescriptorProto_EnumType_field_number protoreflect.FieldNumber = 4 + DescriptorProto_ExtensionRange_field_number protoreflect.FieldNumber = 5 + DescriptorProto_OneofDecl_field_number protoreflect.FieldNumber = 8 + DescriptorProto_Options_field_number protoreflect.FieldNumber = 7 + DescriptorProto_ReservedRange_field_number protoreflect.FieldNumber = 9 + DescriptorProto_ReservedName_field_number protoreflect.FieldNumber = 10 + DescriptorProto_Visibility_field_number protoreflect.FieldNumber = 11 +) + +// Names for google.protobuf.DescriptorProto.ExtensionRange. +const ( + DescriptorProto_ExtensionRange_message_name protoreflect.Name = "ExtensionRange" + DescriptorProto_ExtensionRange_message_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.ExtensionRange" +) + +// Field names for google.protobuf.DescriptorProto.ExtensionRange. +const ( + DescriptorProto_ExtensionRange_Start_field_name protoreflect.Name = "start" + DescriptorProto_ExtensionRange_End_field_name protoreflect.Name = "end" + DescriptorProto_ExtensionRange_Options_field_name protoreflect.Name = "options" + + DescriptorProto_ExtensionRange_Start_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.ExtensionRange.start" + DescriptorProto_ExtensionRange_End_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.ExtensionRange.end" + DescriptorProto_ExtensionRange_Options_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.ExtensionRange.options" +) + +// Field numbers for google.protobuf.DescriptorProto.ExtensionRange. +const ( + DescriptorProto_ExtensionRange_Start_field_number protoreflect.FieldNumber = 1 + DescriptorProto_ExtensionRange_End_field_number protoreflect.FieldNumber = 2 + DescriptorProto_ExtensionRange_Options_field_number protoreflect.FieldNumber = 3 +) + +// Names for google.protobuf.DescriptorProto.ReservedRange. +const ( + DescriptorProto_ReservedRange_message_name protoreflect.Name = "ReservedRange" + DescriptorProto_ReservedRange_message_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.ReservedRange" +) + +// Field names for google.protobuf.DescriptorProto.ReservedRange. +const ( + DescriptorProto_ReservedRange_Start_field_name protoreflect.Name = "start" + DescriptorProto_ReservedRange_End_field_name protoreflect.Name = "end" + + DescriptorProto_ReservedRange_Start_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.ReservedRange.start" + DescriptorProto_ReservedRange_End_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.ReservedRange.end" +) + +// Field numbers for google.protobuf.DescriptorProto.ReservedRange. +const ( + DescriptorProto_ReservedRange_Start_field_number protoreflect.FieldNumber = 1 + DescriptorProto_ReservedRange_End_field_number protoreflect.FieldNumber = 2 +) + +// Names for google.protobuf.ExtensionRangeOptions. +const ( + ExtensionRangeOptions_message_name protoreflect.Name = "ExtensionRangeOptions" + ExtensionRangeOptions_message_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions" +) + +// Field names for google.protobuf.ExtensionRangeOptions. +const ( + ExtensionRangeOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option" + ExtensionRangeOptions_Declaration_field_name protoreflect.Name = "declaration" + ExtensionRangeOptions_Features_field_name protoreflect.Name = "features" + ExtensionRangeOptions_Verification_field_name protoreflect.Name = "verification" + + ExtensionRangeOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.uninterpreted_option" + ExtensionRangeOptions_Declaration_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.declaration" + ExtensionRangeOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.features" + ExtensionRangeOptions_Verification_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.verification" +) + +// Field numbers for google.protobuf.ExtensionRangeOptions. +const ( + ExtensionRangeOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999 + ExtensionRangeOptions_Declaration_field_number protoreflect.FieldNumber = 2 + ExtensionRangeOptions_Features_field_number protoreflect.FieldNumber = 50 + ExtensionRangeOptions_Verification_field_number protoreflect.FieldNumber = 3 +) + +// Full and short names for google.protobuf.ExtensionRangeOptions.VerificationState. +const ( + ExtensionRangeOptions_VerificationState_enum_fullname = "google.protobuf.ExtensionRangeOptions.VerificationState" + ExtensionRangeOptions_VerificationState_enum_name = "VerificationState" +) + +// Enum values for google.protobuf.ExtensionRangeOptions.VerificationState. +const ( + ExtensionRangeOptions_DECLARATION_enum_value = 0 + ExtensionRangeOptions_UNVERIFIED_enum_value = 1 +) + +// Names for google.protobuf.ExtensionRangeOptions.Declaration. +const ( + ExtensionRangeOptions_Declaration_message_name protoreflect.Name = "Declaration" + ExtensionRangeOptions_Declaration_message_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration" +) + +// Field names for google.protobuf.ExtensionRangeOptions.Declaration. +const ( + ExtensionRangeOptions_Declaration_Number_field_name protoreflect.Name = "number" + ExtensionRangeOptions_Declaration_FullName_field_name protoreflect.Name = "full_name" + ExtensionRangeOptions_Declaration_Type_field_name protoreflect.Name = "type" + ExtensionRangeOptions_Declaration_Reserved_field_name protoreflect.Name = "reserved" + ExtensionRangeOptions_Declaration_Repeated_field_name protoreflect.Name = "repeated" + + ExtensionRangeOptions_Declaration_Number_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.number" + ExtensionRangeOptions_Declaration_FullName_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.full_name" + ExtensionRangeOptions_Declaration_Type_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.type" + ExtensionRangeOptions_Declaration_Reserved_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.reserved" + ExtensionRangeOptions_Declaration_Repeated_field_fullname protoreflect.FullName = "google.protobuf.ExtensionRangeOptions.Declaration.repeated" +) + +// Field numbers for google.protobuf.ExtensionRangeOptions.Declaration. +const ( + ExtensionRangeOptions_Declaration_Number_field_number protoreflect.FieldNumber = 1 + ExtensionRangeOptions_Declaration_FullName_field_number protoreflect.FieldNumber = 2 + ExtensionRangeOptions_Declaration_Type_field_number protoreflect.FieldNumber = 3 + ExtensionRangeOptions_Declaration_Reserved_field_number protoreflect.FieldNumber = 5 + ExtensionRangeOptions_Declaration_Repeated_field_number protoreflect.FieldNumber = 6 +) + +// Names for google.protobuf.FieldDescriptorProto. +const ( + FieldDescriptorProto_message_name protoreflect.Name = "FieldDescriptorProto" + FieldDescriptorProto_message_fullname protoreflect.FullName = "google.protobuf.FieldDescriptorProto" +) + +// Field names for google.protobuf.FieldDescriptorProto. +const ( + FieldDescriptorProto_Name_field_name protoreflect.Name = "name" + FieldDescriptorProto_Number_field_name protoreflect.Name = "number" + FieldDescriptorProto_Label_field_name protoreflect.Name = "label" + FieldDescriptorProto_Type_field_name protoreflect.Name = "type" + FieldDescriptorProto_TypeName_field_name protoreflect.Name = "type_name" + FieldDescriptorProto_Extendee_field_name protoreflect.Name = "extendee" + FieldDescriptorProto_DefaultValue_field_name protoreflect.Name = "default_value" + FieldDescriptorProto_OneofIndex_field_name protoreflect.Name = "oneof_index" + FieldDescriptorProto_JsonName_field_name protoreflect.Name = "json_name" + FieldDescriptorProto_Options_field_name protoreflect.Name = "options" + FieldDescriptorProto_Proto3Optional_field_name protoreflect.Name = "proto3_optional" + + FieldDescriptorProto_Name_field_fullname protoreflect.FullName = "google.protobuf.FieldDescriptorProto.name" + FieldDescriptorProto_Number_field_fullname protoreflect.FullName = "google.protobuf.FieldDescriptorProto.number" + FieldDescriptorProto_Label_field_fullname protoreflect.FullName = "google.protobuf.FieldDescriptorProto.label" + FieldDescriptorProto_Type_field_fullname protoreflect.FullName = "google.protobuf.FieldDescriptorProto.type" + FieldDescriptorProto_TypeName_field_fullname protoreflect.FullName = "google.protobuf.FieldDescriptorProto.type_name" + FieldDescriptorProto_Extendee_field_fullname protoreflect.FullName = "google.protobuf.FieldDescriptorProto.extendee" + FieldDescriptorProto_DefaultValue_field_fullname protoreflect.FullName = "google.protobuf.FieldDescriptorProto.default_value" + FieldDescriptorProto_OneofIndex_field_fullname protoreflect.FullName = "google.protobuf.FieldDescriptorProto.oneof_index" + FieldDescriptorProto_JsonName_field_fullname protoreflect.FullName = "google.protobuf.FieldDescriptorProto.json_name" + FieldDescriptorProto_Options_field_fullname protoreflect.FullName = "google.protobuf.FieldDescriptorProto.options" + FieldDescriptorProto_Proto3Optional_field_fullname protoreflect.FullName = "google.protobuf.FieldDescriptorProto.proto3_optional" +) + +// Field numbers for google.protobuf.FieldDescriptorProto. +const ( + FieldDescriptorProto_Name_field_number protoreflect.FieldNumber = 1 + FieldDescriptorProto_Number_field_number protoreflect.FieldNumber = 3 + FieldDescriptorProto_Label_field_number protoreflect.FieldNumber = 4 + FieldDescriptorProto_Type_field_number protoreflect.FieldNumber = 5 + FieldDescriptorProto_TypeName_field_number protoreflect.FieldNumber = 6 + FieldDescriptorProto_Extendee_field_number protoreflect.FieldNumber = 2 + FieldDescriptorProto_DefaultValue_field_number protoreflect.FieldNumber = 7 + FieldDescriptorProto_OneofIndex_field_number protoreflect.FieldNumber = 9 + FieldDescriptorProto_JsonName_field_number protoreflect.FieldNumber = 10 + FieldDescriptorProto_Options_field_number protoreflect.FieldNumber = 8 + FieldDescriptorProto_Proto3Optional_field_number protoreflect.FieldNumber = 17 +) + +// Full and short names for google.protobuf.FieldDescriptorProto.Type. +const ( + FieldDescriptorProto_Type_enum_fullname = "google.protobuf.FieldDescriptorProto.Type" + FieldDescriptorProto_Type_enum_name = "Type" +) + +// Enum values for google.protobuf.FieldDescriptorProto.Type. +const ( + FieldDescriptorProto_TYPE_DOUBLE_enum_value = 1 + FieldDescriptorProto_TYPE_FLOAT_enum_value = 2 + FieldDescriptorProto_TYPE_INT64_enum_value = 3 + FieldDescriptorProto_TYPE_UINT64_enum_value = 4 + FieldDescriptorProto_TYPE_INT32_enum_value = 5 + FieldDescriptorProto_TYPE_FIXED64_enum_value = 6 + FieldDescriptorProto_TYPE_FIXED32_enum_value = 7 + FieldDescriptorProto_TYPE_BOOL_enum_value = 8 + FieldDescriptorProto_TYPE_STRING_enum_value = 9 + FieldDescriptorProto_TYPE_GROUP_enum_value = 10 + FieldDescriptorProto_TYPE_MESSAGE_enum_value = 11 + FieldDescriptorProto_TYPE_BYTES_enum_value = 12 + FieldDescriptorProto_TYPE_UINT32_enum_value = 13 + FieldDescriptorProto_TYPE_ENUM_enum_value = 14 + FieldDescriptorProto_TYPE_SFIXED32_enum_value = 15 + FieldDescriptorProto_TYPE_SFIXED64_enum_value = 16 + FieldDescriptorProto_TYPE_SINT32_enum_value = 17 + FieldDescriptorProto_TYPE_SINT64_enum_value = 18 +) + +// Full and short names for google.protobuf.FieldDescriptorProto.Label. +const ( + FieldDescriptorProto_Label_enum_fullname = "google.protobuf.FieldDescriptorProto.Label" + FieldDescriptorProto_Label_enum_name = "Label" +) + +// Enum values for google.protobuf.FieldDescriptorProto.Label. +const ( + FieldDescriptorProto_LABEL_OPTIONAL_enum_value = 1 + FieldDescriptorProto_LABEL_REPEATED_enum_value = 3 + FieldDescriptorProto_LABEL_REQUIRED_enum_value = 2 +) + +// Names for google.protobuf.OneofDescriptorProto. +const ( + OneofDescriptorProto_message_name protoreflect.Name = "OneofDescriptorProto" + OneofDescriptorProto_message_fullname protoreflect.FullName = "google.protobuf.OneofDescriptorProto" +) + +// Field names for google.protobuf.OneofDescriptorProto. +const ( + OneofDescriptorProto_Name_field_name protoreflect.Name = "name" + OneofDescriptorProto_Options_field_name protoreflect.Name = "options" + + OneofDescriptorProto_Name_field_fullname protoreflect.FullName = "google.protobuf.OneofDescriptorProto.name" + OneofDescriptorProto_Options_field_fullname protoreflect.FullName = "google.protobuf.OneofDescriptorProto.options" +) + +// Field numbers for google.protobuf.OneofDescriptorProto. +const ( + OneofDescriptorProto_Name_field_number protoreflect.FieldNumber = 1 + OneofDescriptorProto_Options_field_number protoreflect.FieldNumber = 2 +) + +// Names for google.protobuf.EnumDescriptorProto. +const ( + EnumDescriptorProto_message_name protoreflect.Name = "EnumDescriptorProto" + EnumDescriptorProto_message_fullname protoreflect.FullName = "google.protobuf.EnumDescriptorProto" +) + +// Field names for google.protobuf.EnumDescriptorProto. +const ( + EnumDescriptorProto_Name_field_name protoreflect.Name = "name" + EnumDescriptorProto_Value_field_name protoreflect.Name = "value" + EnumDescriptorProto_Options_field_name protoreflect.Name = "options" + EnumDescriptorProto_ReservedRange_field_name protoreflect.Name = "reserved_range" + EnumDescriptorProto_ReservedName_field_name protoreflect.Name = "reserved_name" + EnumDescriptorProto_Visibility_field_name protoreflect.Name = "visibility" + + EnumDescriptorProto_Name_field_fullname protoreflect.FullName = "google.protobuf.EnumDescriptorProto.name" + EnumDescriptorProto_Value_field_fullname protoreflect.FullName = "google.protobuf.EnumDescriptorProto.value" + EnumDescriptorProto_Options_field_fullname protoreflect.FullName = "google.protobuf.EnumDescriptorProto.options" + EnumDescriptorProto_ReservedRange_field_fullname protoreflect.FullName = "google.protobuf.EnumDescriptorProto.reserved_range" + EnumDescriptorProto_ReservedName_field_fullname protoreflect.FullName = "google.protobuf.EnumDescriptorProto.reserved_name" + EnumDescriptorProto_Visibility_field_fullname protoreflect.FullName = "google.protobuf.EnumDescriptorProto.visibility" +) + +// Field numbers for google.protobuf.EnumDescriptorProto. +const ( + EnumDescriptorProto_Name_field_number protoreflect.FieldNumber = 1 + EnumDescriptorProto_Value_field_number protoreflect.FieldNumber = 2 + EnumDescriptorProto_Options_field_number protoreflect.FieldNumber = 3 + EnumDescriptorProto_ReservedRange_field_number protoreflect.FieldNumber = 4 + EnumDescriptorProto_ReservedName_field_number protoreflect.FieldNumber = 5 + EnumDescriptorProto_Visibility_field_number protoreflect.FieldNumber = 6 +) + +// Names for google.protobuf.EnumDescriptorProto.EnumReservedRange. +const ( + EnumDescriptorProto_EnumReservedRange_message_name protoreflect.Name = "EnumReservedRange" + EnumDescriptorProto_EnumReservedRange_message_fullname protoreflect.FullName = "google.protobuf.EnumDescriptorProto.EnumReservedRange" +) + +// Field names for google.protobuf.EnumDescriptorProto.EnumReservedRange. +const ( + EnumDescriptorProto_EnumReservedRange_Start_field_name protoreflect.Name = "start" + EnumDescriptorProto_EnumReservedRange_End_field_name protoreflect.Name = "end" + + EnumDescriptorProto_EnumReservedRange_Start_field_fullname protoreflect.FullName = "google.protobuf.EnumDescriptorProto.EnumReservedRange.start" + EnumDescriptorProto_EnumReservedRange_End_field_fullname protoreflect.FullName = "google.protobuf.EnumDescriptorProto.EnumReservedRange.end" +) + +// Field numbers for google.protobuf.EnumDescriptorProto.EnumReservedRange. +const ( + EnumDescriptorProto_EnumReservedRange_Start_field_number protoreflect.FieldNumber = 1 + EnumDescriptorProto_EnumReservedRange_End_field_number protoreflect.FieldNumber = 2 +) + +// Names for google.protobuf.EnumValueDescriptorProto. +const ( + EnumValueDescriptorProto_message_name protoreflect.Name = "EnumValueDescriptorProto" + EnumValueDescriptorProto_message_fullname protoreflect.FullName = "google.protobuf.EnumValueDescriptorProto" +) + +// Field names for google.protobuf.EnumValueDescriptorProto. +const ( + EnumValueDescriptorProto_Name_field_name protoreflect.Name = "name" + EnumValueDescriptorProto_Number_field_name protoreflect.Name = "number" + EnumValueDescriptorProto_Options_field_name protoreflect.Name = "options" + + EnumValueDescriptorProto_Name_field_fullname protoreflect.FullName = "google.protobuf.EnumValueDescriptorProto.name" + EnumValueDescriptorProto_Number_field_fullname protoreflect.FullName = "google.protobuf.EnumValueDescriptorProto.number" + EnumValueDescriptorProto_Options_field_fullname protoreflect.FullName = "google.protobuf.EnumValueDescriptorProto.options" +) + +// Field numbers for google.protobuf.EnumValueDescriptorProto. +const ( + EnumValueDescriptorProto_Name_field_number protoreflect.FieldNumber = 1 + EnumValueDescriptorProto_Number_field_number protoreflect.FieldNumber = 2 + EnumValueDescriptorProto_Options_field_number protoreflect.FieldNumber = 3 +) + +// Names for google.protobuf.ServiceDescriptorProto. +const ( + ServiceDescriptorProto_message_name protoreflect.Name = "ServiceDescriptorProto" + ServiceDescriptorProto_message_fullname protoreflect.FullName = "google.protobuf.ServiceDescriptorProto" +) + +// Field names for google.protobuf.ServiceDescriptorProto. +const ( + ServiceDescriptorProto_Name_field_name protoreflect.Name = "name" + ServiceDescriptorProto_Method_field_name protoreflect.Name = "method" + ServiceDescriptorProto_Options_field_name protoreflect.Name = "options" + + ServiceDescriptorProto_Name_field_fullname protoreflect.FullName = "google.protobuf.ServiceDescriptorProto.name" + ServiceDescriptorProto_Method_field_fullname protoreflect.FullName = "google.protobuf.ServiceDescriptorProto.method" + ServiceDescriptorProto_Options_field_fullname protoreflect.FullName = "google.protobuf.ServiceDescriptorProto.options" +) + +// Field numbers for google.protobuf.ServiceDescriptorProto. +const ( + ServiceDescriptorProto_Name_field_number protoreflect.FieldNumber = 1 + ServiceDescriptorProto_Method_field_number protoreflect.FieldNumber = 2 + ServiceDescriptorProto_Options_field_number protoreflect.FieldNumber = 3 +) + +// Names for google.protobuf.MethodDescriptorProto. +const ( + MethodDescriptorProto_message_name protoreflect.Name = "MethodDescriptorProto" + MethodDescriptorProto_message_fullname protoreflect.FullName = "google.protobuf.MethodDescriptorProto" +) + +// Field names for google.protobuf.MethodDescriptorProto. +const ( + MethodDescriptorProto_Name_field_name protoreflect.Name = "name" + MethodDescriptorProto_InputType_field_name protoreflect.Name = "input_type" + MethodDescriptorProto_OutputType_field_name protoreflect.Name = "output_type" + MethodDescriptorProto_Options_field_name protoreflect.Name = "options" + MethodDescriptorProto_ClientStreaming_field_name protoreflect.Name = "client_streaming" + MethodDescriptorProto_ServerStreaming_field_name protoreflect.Name = "server_streaming" + + MethodDescriptorProto_Name_field_fullname protoreflect.FullName = "google.protobuf.MethodDescriptorProto.name" + MethodDescriptorProto_InputType_field_fullname protoreflect.FullName = "google.protobuf.MethodDescriptorProto.input_type" + MethodDescriptorProto_OutputType_field_fullname protoreflect.FullName = "google.protobuf.MethodDescriptorProto.output_type" + MethodDescriptorProto_Options_field_fullname protoreflect.FullName = "google.protobuf.MethodDescriptorProto.options" + MethodDescriptorProto_ClientStreaming_field_fullname protoreflect.FullName = "google.protobuf.MethodDescriptorProto.client_streaming" + MethodDescriptorProto_ServerStreaming_field_fullname protoreflect.FullName = "google.protobuf.MethodDescriptorProto.server_streaming" +) + +// Field numbers for google.protobuf.MethodDescriptorProto. +const ( + MethodDescriptorProto_Name_field_number protoreflect.FieldNumber = 1 + MethodDescriptorProto_InputType_field_number protoreflect.FieldNumber = 2 + MethodDescriptorProto_OutputType_field_number protoreflect.FieldNumber = 3 + MethodDescriptorProto_Options_field_number protoreflect.FieldNumber = 4 + MethodDescriptorProto_ClientStreaming_field_number protoreflect.FieldNumber = 5 + MethodDescriptorProto_ServerStreaming_field_number protoreflect.FieldNumber = 6 +) + +// Names for google.protobuf.FileOptions. +const ( + FileOptions_message_name protoreflect.Name = "FileOptions" + FileOptions_message_fullname protoreflect.FullName = "google.protobuf.FileOptions" +) + +// Field names for google.protobuf.FileOptions. +const ( + FileOptions_JavaPackage_field_name protoreflect.Name = "java_package" + FileOptions_JavaOuterClassname_field_name protoreflect.Name = "java_outer_classname" + FileOptions_JavaMultipleFiles_field_name protoreflect.Name = "java_multiple_files" + FileOptions_JavaGenerateEqualsAndHash_field_name protoreflect.Name = "java_generate_equals_and_hash" + FileOptions_JavaStringCheckUtf8_field_name protoreflect.Name = "java_string_check_utf8" + FileOptions_OptimizeFor_field_name protoreflect.Name = "optimize_for" + FileOptions_GoPackage_field_name protoreflect.Name = "go_package" + FileOptions_CcGenericServices_field_name protoreflect.Name = "cc_generic_services" + FileOptions_JavaGenericServices_field_name protoreflect.Name = "java_generic_services" + FileOptions_PyGenericServices_field_name protoreflect.Name = "py_generic_services" + FileOptions_Deprecated_field_name protoreflect.Name = "deprecated" + FileOptions_CcEnableArenas_field_name protoreflect.Name = "cc_enable_arenas" + FileOptions_ObjcClassPrefix_field_name protoreflect.Name = "objc_class_prefix" + FileOptions_CsharpNamespace_field_name protoreflect.Name = "csharp_namespace" + FileOptions_SwiftPrefix_field_name protoreflect.Name = "swift_prefix" + FileOptions_PhpClassPrefix_field_name protoreflect.Name = "php_class_prefix" + FileOptions_PhpNamespace_field_name protoreflect.Name = "php_namespace" + FileOptions_PhpMetadataNamespace_field_name protoreflect.Name = "php_metadata_namespace" + FileOptions_RubyPackage_field_name protoreflect.Name = "ruby_package" + FileOptions_Features_field_name protoreflect.Name = "features" + FileOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option" + + FileOptions_JavaPackage_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.java_package" + FileOptions_JavaOuterClassname_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.java_outer_classname" + FileOptions_JavaMultipleFiles_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.java_multiple_files" + FileOptions_JavaGenerateEqualsAndHash_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.java_generate_equals_and_hash" + FileOptions_JavaStringCheckUtf8_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.java_string_check_utf8" + FileOptions_OptimizeFor_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.optimize_for" + FileOptions_GoPackage_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.go_package" + FileOptions_CcGenericServices_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.cc_generic_services" + FileOptions_JavaGenericServices_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.java_generic_services" + FileOptions_PyGenericServices_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.py_generic_services" + FileOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.deprecated" + FileOptions_CcEnableArenas_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.cc_enable_arenas" + FileOptions_ObjcClassPrefix_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.objc_class_prefix" + FileOptions_CsharpNamespace_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.csharp_namespace" + FileOptions_SwiftPrefix_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.swift_prefix" + FileOptions_PhpClassPrefix_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.php_class_prefix" + FileOptions_PhpNamespace_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.php_namespace" + FileOptions_PhpMetadataNamespace_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.php_metadata_namespace" + FileOptions_RubyPackage_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.ruby_package" + FileOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.features" + FileOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.FileOptions.uninterpreted_option" +) + +// Field numbers for google.protobuf.FileOptions. +const ( + FileOptions_JavaPackage_field_number protoreflect.FieldNumber = 1 + FileOptions_JavaOuterClassname_field_number protoreflect.FieldNumber = 8 + FileOptions_JavaMultipleFiles_field_number protoreflect.FieldNumber = 10 + FileOptions_JavaGenerateEqualsAndHash_field_number protoreflect.FieldNumber = 20 + FileOptions_JavaStringCheckUtf8_field_number protoreflect.FieldNumber = 27 + FileOptions_OptimizeFor_field_number protoreflect.FieldNumber = 9 + FileOptions_GoPackage_field_number protoreflect.FieldNumber = 11 + FileOptions_CcGenericServices_field_number protoreflect.FieldNumber = 16 + FileOptions_JavaGenericServices_field_number protoreflect.FieldNumber = 17 + FileOptions_PyGenericServices_field_number protoreflect.FieldNumber = 18 + FileOptions_Deprecated_field_number protoreflect.FieldNumber = 23 + FileOptions_CcEnableArenas_field_number protoreflect.FieldNumber = 31 + FileOptions_ObjcClassPrefix_field_number protoreflect.FieldNumber = 36 + FileOptions_CsharpNamespace_field_number protoreflect.FieldNumber = 37 + FileOptions_SwiftPrefix_field_number protoreflect.FieldNumber = 39 + FileOptions_PhpClassPrefix_field_number protoreflect.FieldNumber = 40 + FileOptions_PhpNamespace_field_number protoreflect.FieldNumber = 41 + FileOptions_PhpMetadataNamespace_field_number protoreflect.FieldNumber = 44 + FileOptions_RubyPackage_field_number protoreflect.FieldNumber = 45 + FileOptions_Features_field_number protoreflect.FieldNumber = 50 + FileOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999 +) + +// Full and short names for google.protobuf.FileOptions.OptimizeMode. +const ( + FileOptions_OptimizeMode_enum_fullname = "google.protobuf.FileOptions.OptimizeMode" + FileOptions_OptimizeMode_enum_name = "OptimizeMode" +) + +// Enum values for google.protobuf.FileOptions.OptimizeMode. +const ( + FileOptions_SPEED_enum_value = 1 + FileOptions_CODE_SIZE_enum_value = 2 + FileOptions_LITE_RUNTIME_enum_value = 3 +) + +// Names for google.protobuf.MessageOptions. +const ( + MessageOptions_message_name protoreflect.Name = "MessageOptions" + MessageOptions_message_fullname protoreflect.FullName = "google.protobuf.MessageOptions" +) + +// Field names for google.protobuf.MessageOptions. +const ( + MessageOptions_MessageSetWireFormat_field_name protoreflect.Name = "message_set_wire_format" + MessageOptions_NoStandardDescriptorAccessor_field_name protoreflect.Name = "no_standard_descriptor_accessor" + MessageOptions_Deprecated_field_name protoreflect.Name = "deprecated" + MessageOptions_MapEntry_field_name protoreflect.Name = "map_entry" + MessageOptions_DeprecatedLegacyJsonFieldConflicts_field_name protoreflect.Name = "deprecated_legacy_json_field_conflicts" + MessageOptions_Features_field_name protoreflect.Name = "features" + MessageOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option" + + MessageOptions_MessageSetWireFormat_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.message_set_wire_format" + MessageOptions_NoStandardDescriptorAccessor_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.no_standard_descriptor_accessor" + MessageOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.deprecated" + MessageOptions_MapEntry_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.map_entry" + MessageOptions_DeprecatedLegacyJsonFieldConflicts_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.deprecated_legacy_json_field_conflicts" + MessageOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.features" + MessageOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.MessageOptions.uninterpreted_option" +) + +// Field numbers for google.protobuf.MessageOptions. +const ( + MessageOptions_MessageSetWireFormat_field_number protoreflect.FieldNumber = 1 + MessageOptions_NoStandardDescriptorAccessor_field_number protoreflect.FieldNumber = 2 + MessageOptions_Deprecated_field_number protoreflect.FieldNumber = 3 + MessageOptions_MapEntry_field_number protoreflect.FieldNumber = 7 + MessageOptions_DeprecatedLegacyJsonFieldConflicts_field_number protoreflect.FieldNumber = 11 + MessageOptions_Features_field_number protoreflect.FieldNumber = 12 + MessageOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999 +) + +// Names for google.protobuf.FieldOptions. +const ( + FieldOptions_message_name protoreflect.Name = "FieldOptions" + FieldOptions_message_fullname protoreflect.FullName = "google.protobuf.FieldOptions" +) + +// Field names for google.protobuf.FieldOptions. +const ( + FieldOptions_Ctype_field_name protoreflect.Name = "ctype" + FieldOptions_Packed_field_name protoreflect.Name = "packed" + FieldOptions_Jstype_field_name protoreflect.Name = "jstype" + FieldOptions_Lazy_field_name protoreflect.Name = "lazy" + FieldOptions_UnverifiedLazy_field_name protoreflect.Name = "unverified_lazy" + FieldOptions_Deprecated_field_name protoreflect.Name = "deprecated" + FieldOptions_Weak_field_name protoreflect.Name = "weak" + FieldOptions_DebugRedact_field_name protoreflect.Name = "debug_redact" + FieldOptions_Retention_field_name protoreflect.Name = "retention" + FieldOptions_Targets_field_name protoreflect.Name = "targets" + FieldOptions_EditionDefaults_field_name protoreflect.Name = "edition_defaults" + FieldOptions_Features_field_name protoreflect.Name = "features" + FieldOptions_FeatureSupport_field_name protoreflect.Name = "feature_support" + FieldOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option" + + FieldOptions_Ctype_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.ctype" + FieldOptions_Packed_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.packed" + FieldOptions_Jstype_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.jstype" + FieldOptions_Lazy_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.lazy" + FieldOptions_UnverifiedLazy_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.unverified_lazy" + FieldOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.deprecated" + FieldOptions_Weak_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.weak" + FieldOptions_DebugRedact_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.debug_redact" + FieldOptions_Retention_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.retention" + FieldOptions_Targets_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.targets" + FieldOptions_EditionDefaults_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.edition_defaults" + FieldOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.features" + FieldOptions_FeatureSupport_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.feature_support" + FieldOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.uninterpreted_option" +) + +// Field numbers for google.protobuf.FieldOptions. +const ( + FieldOptions_Ctype_field_number protoreflect.FieldNumber = 1 + FieldOptions_Packed_field_number protoreflect.FieldNumber = 2 + FieldOptions_Jstype_field_number protoreflect.FieldNumber = 6 + FieldOptions_Lazy_field_number protoreflect.FieldNumber = 5 + FieldOptions_UnverifiedLazy_field_number protoreflect.FieldNumber = 15 + FieldOptions_Deprecated_field_number protoreflect.FieldNumber = 3 + FieldOptions_Weak_field_number protoreflect.FieldNumber = 10 + FieldOptions_DebugRedact_field_number protoreflect.FieldNumber = 16 + FieldOptions_Retention_field_number protoreflect.FieldNumber = 17 + FieldOptions_Targets_field_number protoreflect.FieldNumber = 19 + FieldOptions_EditionDefaults_field_number protoreflect.FieldNumber = 20 + FieldOptions_Features_field_number protoreflect.FieldNumber = 21 + FieldOptions_FeatureSupport_field_number protoreflect.FieldNumber = 22 + FieldOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999 +) + +// Full and short names for google.protobuf.FieldOptions.CType. +const ( + FieldOptions_CType_enum_fullname = "google.protobuf.FieldOptions.CType" + FieldOptions_CType_enum_name = "CType" +) + +// Enum values for google.protobuf.FieldOptions.CType. +const ( + FieldOptions_STRING_enum_value = 0 + FieldOptions_CORD_enum_value = 1 + FieldOptions_STRING_PIECE_enum_value = 2 +) + +// Full and short names for google.protobuf.FieldOptions.JSType. +const ( + FieldOptions_JSType_enum_fullname = "google.protobuf.FieldOptions.JSType" + FieldOptions_JSType_enum_name = "JSType" +) + +// Enum values for google.protobuf.FieldOptions.JSType. +const ( + FieldOptions_JS_NORMAL_enum_value = 0 + FieldOptions_JS_STRING_enum_value = 1 + FieldOptions_JS_NUMBER_enum_value = 2 +) + +// Full and short names for google.protobuf.FieldOptions.OptionRetention. +const ( + FieldOptions_OptionRetention_enum_fullname = "google.protobuf.FieldOptions.OptionRetention" + FieldOptions_OptionRetention_enum_name = "OptionRetention" +) + +// Enum values for google.protobuf.FieldOptions.OptionRetention. +const ( + FieldOptions_RETENTION_UNKNOWN_enum_value = 0 + FieldOptions_RETENTION_RUNTIME_enum_value = 1 + FieldOptions_RETENTION_SOURCE_enum_value = 2 +) + +// Full and short names for google.protobuf.FieldOptions.OptionTargetType. +const ( + FieldOptions_OptionTargetType_enum_fullname = "google.protobuf.FieldOptions.OptionTargetType" + FieldOptions_OptionTargetType_enum_name = "OptionTargetType" +) + +// Enum values for google.protobuf.FieldOptions.OptionTargetType. +const ( + FieldOptions_TARGET_TYPE_UNKNOWN_enum_value = 0 + FieldOptions_TARGET_TYPE_FILE_enum_value = 1 + FieldOptions_TARGET_TYPE_EXTENSION_RANGE_enum_value = 2 + FieldOptions_TARGET_TYPE_MESSAGE_enum_value = 3 + FieldOptions_TARGET_TYPE_FIELD_enum_value = 4 + FieldOptions_TARGET_TYPE_ONEOF_enum_value = 5 + FieldOptions_TARGET_TYPE_ENUM_enum_value = 6 + FieldOptions_TARGET_TYPE_ENUM_ENTRY_enum_value = 7 + FieldOptions_TARGET_TYPE_SERVICE_enum_value = 8 + FieldOptions_TARGET_TYPE_METHOD_enum_value = 9 +) + +// Names for google.protobuf.FieldOptions.EditionDefault. +const ( + FieldOptions_EditionDefault_message_name protoreflect.Name = "EditionDefault" + FieldOptions_EditionDefault_message_fullname protoreflect.FullName = "google.protobuf.FieldOptions.EditionDefault" +) + +// Field names for google.protobuf.FieldOptions.EditionDefault. +const ( + FieldOptions_EditionDefault_Edition_field_name protoreflect.Name = "edition" + FieldOptions_EditionDefault_Value_field_name protoreflect.Name = "value" + + FieldOptions_EditionDefault_Edition_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.EditionDefault.edition" + FieldOptions_EditionDefault_Value_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.EditionDefault.value" +) + +// Field numbers for google.protobuf.FieldOptions.EditionDefault. +const ( + FieldOptions_EditionDefault_Edition_field_number protoreflect.FieldNumber = 3 + FieldOptions_EditionDefault_Value_field_number protoreflect.FieldNumber = 2 +) + +// Names for google.protobuf.FieldOptions.FeatureSupport. +const ( + FieldOptions_FeatureSupport_message_name protoreflect.Name = "FeatureSupport" + FieldOptions_FeatureSupport_message_fullname protoreflect.FullName = "google.protobuf.FieldOptions.FeatureSupport" +) + +// Field names for google.protobuf.FieldOptions.FeatureSupport. +const ( + FieldOptions_FeatureSupport_EditionIntroduced_field_name protoreflect.Name = "edition_introduced" + FieldOptions_FeatureSupport_EditionDeprecated_field_name protoreflect.Name = "edition_deprecated" + FieldOptions_FeatureSupport_DeprecationWarning_field_name protoreflect.Name = "deprecation_warning" + FieldOptions_FeatureSupport_EditionRemoved_field_name protoreflect.Name = "edition_removed" + + FieldOptions_FeatureSupport_EditionIntroduced_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.FeatureSupport.edition_introduced" + FieldOptions_FeatureSupport_EditionDeprecated_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.FeatureSupport.edition_deprecated" + FieldOptions_FeatureSupport_DeprecationWarning_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.FeatureSupport.deprecation_warning" + FieldOptions_FeatureSupport_EditionRemoved_field_fullname protoreflect.FullName = "google.protobuf.FieldOptions.FeatureSupport.edition_removed" +) + +// Field numbers for google.protobuf.FieldOptions.FeatureSupport. +const ( + FieldOptions_FeatureSupport_EditionIntroduced_field_number protoreflect.FieldNumber = 1 + FieldOptions_FeatureSupport_EditionDeprecated_field_number protoreflect.FieldNumber = 2 + FieldOptions_FeatureSupport_DeprecationWarning_field_number protoreflect.FieldNumber = 3 + FieldOptions_FeatureSupport_EditionRemoved_field_number protoreflect.FieldNumber = 4 +) + +// Names for google.protobuf.OneofOptions. +const ( + OneofOptions_message_name protoreflect.Name = "OneofOptions" + OneofOptions_message_fullname protoreflect.FullName = "google.protobuf.OneofOptions" +) + +// Field names for google.protobuf.OneofOptions. +const ( + OneofOptions_Features_field_name protoreflect.Name = "features" + OneofOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option" + + OneofOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.OneofOptions.features" + OneofOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.OneofOptions.uninterpreted_option" +) + +// Field numbers for google.protobuf.OneofOptions. +const ( + OneofOptions_Features_field_number protoreflect.FieldNumber = 1 + OneofOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999 +) + +// Names for google.protobuf.EnumOptions. +const ( + EnumOptions_message_name protoreflect.Name = "EnumOptions" + EnumOptions_message_fullname protoreflect.FullName = "google.protobuf.EnumOptions" +) + +// Field names for google.protobuf.EnumOptions. +const ( + EnumOptions_AllowAlias_field_name protoreflect.Name = "allow_alias" + EnumOptions_Deprecated_field_name protoreflect.Name = "deprecated" + EnumOptions_DeprecatedLegacyJsonFieldConflicts_field_name protoreflect.Name = "deprecated_legacy_json_field_conflicts" + EnumOptions_Features_field_name protoreflect.Name = "features" + EnumOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option" + + EnumOptions_AllowAlias_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.allow_alias" + EnumOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.deprecated" + EnumOptions_DeprecatedLegacyJsonFieldConflicts_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.deprecated_legacy_json_field_conflicts" + EnumOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.features" + EnumOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.EnumOptions.uninterpreted_option" +) + +// Field numbers for google.protobuf.EnumOptions. +const ( + EnumOptions_AllowAlias_field_number protoreflect.FieldNumber = 2 + EnumOptions_Deprecated_field_number protoreflect.FieldNumber = 3 + EnumOptions_DeprecatedLegacyJsonFieldConflicts_field_number protoreflect.FieldNumber = 6 + EnumOptions_Features_field_number protoreflect.FieldNumber = 7 + EnumOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999 +) + +// Names for google.protobuf.EnumValueOptions. +const ( + EnumValueOptions_message_name protoreflect.Name = "EnumValueOptions" + EnumValueOptions_message_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions" +) + +// Field names for google.protobuf.EnumValueOptions. +const ( + EnumValueOptions_Deprecated_field_name protoreflect.Name = "deprecated" + EnumValueOptions_Features_field_name protoreflect.Name = "features" + EnumValueOptions_DebugRedact_field_name protoreflect.Name = "debug_redact" + EnumValueOptions_FeatureSupport_field_name protoreflect.Name = "feature_support" + EnumValueOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option" + + EnumValueOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions.deprecated" + EnumValueOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions.features" + EnumValueOptions_DebugRedact_field_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions.debug_redact" + EnumValueOptions_FeatureSupport_field_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions.feature_support" + EnumValueOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.EnumValueOptions.uninterpreted_option" +) + +// Field numbers for google.protobuf.EnumValueOptions. +const ( + EnumValueOptions_Deprecated_field_number protoreflect.FieldNumber = 1 + EnumValueOptions_Features_field_number protoreflect.FieldNumber = 2 + EnumValueOptions_DebugRedact_field_number protoreflect.FieldNumber = 3 + EnumValueOptions_FeatureSupport_field_number protoreflect.FieldNumber = 4 + EnumValueOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999 +) + +// Names for google.protobuf.ServiceOptions. +const ( + ServiceOptions_message_name protoreflect.Name = "ServiceOptions" + ServiceOptions_message_fullname protoreflect.FullName = "google.protobuf.ServiceOptions" +) + +// Field names for google.protobuf.ServiceOptions. +const ( + ServiceOptions_Features_field_name protoreflect.Name = "features" + ServiceOptions_Deprecated_field_name protoreflect.Name = "deprecated" + ServiceOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option" + + ServiceOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.ServiceOptions.features" + ServiceOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.ServiceOptions.deprecated" + ServiceOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.ServiceOptions.uninterpreted_option" +) + +// Field numbers for google.protobuf.ServiceOptions. +const ( + ServiceOptions_Features_field_number protoreflect.FieldNumber = 34 + ServiceOptions_Deprecated_field_number protoreflect.FieldNumber = 33 + ServiceOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999 +) + +// Names for google.protobuf.MethodOptions. +const ( + MethodOptions_message_name protoreflect.Name = "MethodOptions" + MethodOptions_message_fullname protoreflect.FullName = "google.protobuf.MethodOptions" +) + +// Field names for google.protobuf.MethodOptions. +const ( + MethodOptions_Deprecated_field_name protoreflect.Name = "deprecated" + MethodOptions_IdempotencyLevel_field_name protoreflect.Name = "idempotency_level" + MethodOptions_Features_field_name protoreflect.Name = "features" + MethodOptions_UninterpretedOption_field_name protoreflect.Name = "uninterpreted_option" + + MethodOptions_Deprecated_field_fullname protoreflect.FullName = "google.protobuf.MethodOptions.deprecated" + MethodOptions_IdempotencyLevel_field_fullname protoreflect.FullName = "google.protobuf.MethodOptions.idempotency_level" + MethodOptions_Features_field_fullname protoreflect.FullName = "google.protobuf.MethodOptions.features" + MethodOptions_UninterpretedOption_field_fullname protoreflect.FullName = "google.protobuf.MethodOptions.uninterpreted_option" +) + +// Field numbers for google.protobuf.MethodOptions. +const ( + MethodOptions_Deprecated_field_number protoreflect.FieldNumber = 33 + MethodOptions_IdempotencyLevel_field_number protoreflect.FieldNumber = 34 + MethodOptions_Features_field_number protoreflect.FieldNumber = 35 + MethodOptions_UninterpretedOption_field_number protoreflect.FieldNumber = 999 +) + +// Full and short names for google.protobuf.MethodOptions.IdempotencyLevel. +const ( + MethodOptions_IdempotencyLevel_enum_fullname = "google.protobuf.MethodOptions.IdempotencyLevel" + MethodOptions_IdempotencyLevel_enum_name = "IdempotencyLevel" +) + +// Enum values for google.protobuf.MethodOptions.IdempotencyLevel. +const ( + MethodOptions_IDEMPOTENCY_UNKNOWN_enum_value = 0 + MethodOptions_NO_SIDE_EFFECTS_enum_value = 1 + MethodOptions_IDEMPOTENT_enum_value = 2 +) + +// Names for google.protobuf.UninterpretedOption. +const ( + UninterpretedOption_message_name protoreflect.Name = "UninterpretedOption" + UninterpretedOption_message_fullname protoreflect.FullName = "google.protobuf.UninterpretedOption" +) + +// Field names for google.protobuf.UninterpretedOption. +const ( + UninterpretedOption_Name_field_name protoreflect.Name = "name" + UninterpretedOption_IdentifierValue_field_name protoreflect.Name = "identifier_value" + UninterpretedOption_PositiveIntValue_field_name protoreflect.Name = "positive_int_value" + UninterpretedOption_NegativeIntValue_field_name protoreflect.Name = "negative_int_value" + UninterpretedOption_DoubleValue_field_name protoreflect.Name = "double_value" + UninterpretedOption_StringValue_field_name protoreflect.Name = "string_value" + UninterpretedOption_AggregateValue_field_name protoreflect.Name = "aggregate_value" + + UninterpretedOption_Name_field_fullname protoreflect.FullName = "google.protobuf.UninterpretedOption.name" + UninterpretedOption_IdentifierValue_field_fullname protoreflect.FullName = "google.protobuf.UninterpretedOption.identifier_value" + UninterpretedOption_PositiveIntValue_field_fullname protoreflect.FullName = "google.protobuf.UninterpretedOption.positive_int_value" + UninterpretedOption_NegativeIntValue_field_fullname protoreflect.FullName = "google.protobuf.UninterpretedOption.negative_int_value" + UninterpretedOption_DoubleValue_field_fullname protoreflect.FullName = "google.protobuf.UninterpretedOption.double_value" + UninterpretedOption_StringValue_field_fullname protoreflect.FullName = "google.protobuf.UninterpretedOption.string_value" + UninterpretedOption_AggregateValue_field_fullname protoreflect.FullName = "google.protobuf.UninterpretedOption.aggregate_value" +) + +// Field numbers for google.protobuf.UninterpretedOption. +const ( + UninterpretedOption_Name_field_number protoreflect.FieldNumber = 2 + UninterpretedOption_IdentifierValue_field_number protoreflect.FieldNumber = 3 + UninterpretedOption_PositiveIntValue_field_number protoreflect.FieldNumber = 4 + UninterpretedOption_NegativeIntValue_field_number protoreflect.FieldNumber = 5 + UninterpretedOption_DoubleValue_field_number protoreflect.FieldNumber = 6 + UninterpretedOption_StringValue_field_number protoreflect.FieldNumber = 7 + UninterpretedOption_AggregateValue_field_number protoreflect.FieldNumber = 8 +) + +// Names for google.protobuf.UninterpretedOption.NamePart. +const ( + UninterpretedOption_NamePart_message_name protoreflect.Name = "NamePart" + UninterpretedOption_NamePart_message_fullname protoreflect.FullName = "google.protobuf.UninterpretedOption.NamePart" +) + +// Field names for google.protobuf.UninterpretedOption.NamePart. +const ( + UninterpretedOption_NamePart_NamePart_field_name protoreflect.Name = "name_part" + UninterpretedOption_NamePart_IsExtension_field_name protoreflect.Name = "is_extension" + + UninterpretedOption_NamePart_NamePart_field_fullname protoreflect.FullName = "google.protobuf.UninterpretedOption.NamePart.name_part" + UninterpretedOption_NamePart_IsExtension_field_fullname protoreflect.FullName = "google.protobuf.UninterpretedOption.NamePart.is_extension" +) + +// Field numbers for google.protobuf.UninterpretedOption.NamePart. +const ( + UninterpretedOption_NamePart_NamePart_field_number protoreflect.FieldNumber = 1 + UninterpretedOption_NamePart_IsExtension_field_number protoreflect.FieldNumber = 2 +) + +// Names for google.protobuf.FeatureSet. +const ( + FeatureSet_message_name protoreflect.Name = "FeatureSet" + FeatureSet_message_fullname protoreflect.FullName = "google.protobuf.FeatureSet" +) + +// Field names for google.protobuf.FeatureSet. +const ( + FeatureSet_FieldPresence_field_name protoreflect.Name = "field_presence" + FeatureSet_EnumType_field_name protoreflect.Name = "enum_type" + FeatureSet_RepeatedFieldEncoding_field_name protoreflect.Name = "repeated_field_encoding" + FeatureSet_Utf8Validation_field_name protoreflect.Name = "utf8_validation" + FeatureSet_MessageEncoding_field_name protoreflect.Name = "message_encoding" + FeatureSet_JsonFormat_field_name protoreflect.Name = "json_format" + FeatureSet_EnforceNamingStyle_field_name protoreflect.Name = "enforce_naming_style" + FeatureSet_DefaultSymbolVisibility_field_name protoreflect.Name = "default_symbol_visibility" + + FeatureSet_FieldPresence_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.field_presence" + FeatureSet_EnumType_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.enum_type" + FeatureSet_RepeatedFieldEncoding_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.repeated_field_encoding" + FeatureSet_Utf8Validation_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.utf8_validation" + FeatureSet_MessageEncoding_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.message_encoding" + FeatureSet_JsonFormat_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.json_format" + FeatureSet_EnforceNamingStyle_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.enforce_naming_style" + FeatureSet_DefaultSymbolVisibility_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.default_symbol_visibility" +) + +// Field numbers for google.protobuf.FeatureSet. +const ( + FeatureSet_FieldPresence_field_number protoreflect.FieldNumber = 1 + FeatureSet_EnumType_field_number protoreflect.FieldNumber = 2 + FeatureSet_RepeatedFieldEncoding_field_number protoreflect.FieldNumber = 3 + FeatureSet_Utf8Validation_field_number protoreflect.FieldNumber = 4 + FeatureSet_MessageEncoding_field_number protoreflect.FieldNumber = 5 + FeatureSet_JsonFormat_field_number protoreflect.FieldNumber = 6 + FeatureSet_EnforceNamingStyle_field_number protoreflect.FieldNumber = 7 + FeatureSet_DefaultSymbolVisibility_field_number protoreflect.FieldNumber = 8 +) + +// Full and short names for google.protobuf.FeatureSet.FieldPresence. +const ( + FeatureSet_FieldPresence_enum_fullname = "google.protobuf.FeatureSet.FieldPresence" + FeatureSet_FieldPresence_enum_name = "FieldPresence" +) + +// Enum values for google.protobuf.FeatureSet.FieldPresence. +const ( + FeatureSet_FIELD_PRESENCE_UNKNOWN_enum_value = 0 + FeatureSet_EXPLICIT_enum_value = 1 + FeatureSet_IMPLICIT_enum_value = 2 + FeatureSet_LEGACY_REQUIRED_enum_value = 3 +) + +// Full and short names for google.protobuf.FeatureSet.EnumType. +const ( + FeatureSet_EnumType_enum_fullname = "google.protobuf.FeatureSet.EnumType" + FeatureSet_EnumType_enum_name = "EnumType" +) + +// Enum values for google.protobuf.FeatureSet.EnumType. +const ( + FeatureSet_ENUM_TYPE_UNKNOWN_enum_value = 0 + FeatureSet_OPEN_enum_value = 1 + FeatureSet_CLOSED_enum_value = 2 +) + +// Full and short names for google.protobuf.FeatureSet.RepeatedFieldEncoding. +const ( + FeatureSet_RepeatedFieldEncoding_enum_fullname = "google.protobuf.FeatureSet.RepeatedFieldEncoding" + FeatureSet_RepeatedFieldEncoding_enum_name = "RepeatedFieldEncoding" +) + +// Enum values for google.protobuf.FeatureSet.RepeatedFieldEncoding. +const ( + FeatureSet_REPEATED_FIELD_ENCODING_UNKNOWN_enum_value = 0 + FeatureSet_PACKED_enum_value = 1 + FeatureSet_EXPANDED_enum_value = 2 +) + +// Full and short names for google.protobuf.FeatureSet.Utf8Validation. +const ( + FeatureSet_Utf8Validation_enum_fullname = "google.protobuf.FeatureSet.Utf8Validation" + FeatureSet_Utf8Validation_enum_name = "Utf8Validation" +) + +// Enum values for google.protobuf.FeatureSet.Utf8Validation. +const ( + FeatureSet_UTF8_VALIDATION_UNKNOWN_enum_value = 0 + FeatureSet_VERIFY_enum_value = 2 + FeatureSet_NONE_enum_value = 3 +) + +// Full and short names for google.protobuf.FeatureSet.MessageEncoding. +const ( + FeatureSet_MessageEncoding_enum_fullname = "google.protobuf.FeatureSet.MessageEncoding" + FeatureSet_MessageEncoding_enum_name = "MessageEncoding" +) + +// Enum values for google.protobuf.FeatureSet.MessageEncoding. +const ( + FeatureSet_MESSAGE_ENCODING_UNKNOWN_enum_value = 0 + FeatureSet_LENGTH_PREFIXED_enum_value = 1 + FeatureSet_DELIMITED_enum_value = 2 +) + +// Full and short names for google.protobuf.FeatureSet.JsonFormat. +const ( + FeatureSet_JsonFormat_enum_fullname = "google.protobuf.FeatureSet.JsonFormat" + FeatureSet_JsonFormat_enum_name = "JsonFormat" +) + +// Enum values for google.protobuf.FeatureSet.JsonFormat. +const ( + FeatureSet_JSON_FORMAT_UNKNOWN_enum_value = 0 + FeatureSet_ALLOW_enum_value = 1 + FeatureSet_LEGACY_BEST_EFFORT_enum_value = 2 +) + +// Full and short names for google.protobuf.FeatureSet.EnforceNamingStyle. +const ( + FeatureSet_EnforceNamingStyle_enum_fullname = "google.protobuf.FeatureSet.EnforceNamingStyle" + FeatureSet_EnforceNamingStyle_enum_name = "EnforceNamingStyle" +) + +// Enum values for google.protobuf.FeatureSet.EnforceNamingStyle. +const ( + FeatureSet_ENFORCE_NAMING_STYLE_UNKNOWN_enum_value = 0 + FeatureSet_STYLE2024_enum_value = 1 + FeatureSet_STYLE_LEGACY_enum_value = 2 +) + +// Names for google.protobuf.FeatureSet.VisibilityFeature. +const ( + FeatureSet_VisibilityFeature_message_name protoreflect.Name = "VisibilityFeature" + FeatureSet_VisibilityFeature_message_fullname protoreflect.FullName = "google.protobuf.FeatureSet.VisibilityFeature" +) + +// Full and short names for google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility. +const ( + FeatureSet_VisibilityFeature_DefaultSymbolVisibility_enum_fullname = "google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility" + FeatureSet_VisibilityFeature_DefaultSymbolVisibility_enum_name = "DefaultSymbolVisibility" +) + +// Enum values for google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility. +const ( + FeatureSet_VisibilityFeature_DEFAULT_SYMBOL_VISIBILITY_UNKNOWN_enum_value = 0 + FeatureSet_VisibilityFeature_EXPORT_ALL_enum_value = 1 + FeatureSet_VisibilityFeature_EXPORT_TOP_LEVEL_enum_value = 2 + FeatureSet_VisibilityFeature_LOCAL_ALL_enum_value = 3 + FeatureSet_VisibilityFeature_STRICT_enum_value = 4 +) + +// Names for google.protobuf.FeatureSetDefaults. +const ( + FeatureSetDefaults_message_name protoreflect.Name = "FeatureSetDefaults" + FeatureSetDefaults_message_fullname protoreflect.FullName = "google.protobuf.FeatureSetDefaults" +) + +// Field names for google.protobuf.FeatureSetDefaults. +const ( + FeatureSetDefaults_Defaults_field_name protoreflect.Name = "defaults" + FeatureSetDefaults_MinimumEdition_field_name protoreflect.Name = "minimum_edition" + FeatureSetDefaults_MaximumEdition_field_name protoreflect.Name = "maximum_edition" + + FeatureSetDefaults_Defaults_field_fullname protoreflect.FullName = "google.protobuf.FeatureSetDefaults.defaults" + FeatureSetDefaults_MinimumEdition_field_fullname protoreflect.FullName = "google.protobuf.FeatureSetDefaults.minimum_edition" + FeatureSetDefaults_MaximumEdition_field_fullname protoreflect.FullName = "google.protobuf.FeatureSetDefaults.maximum_edition" +) + +// Field numbers for google.protobuf.FeatureSetDefaults. +const ( + FeatureSetDefaults_Defaults_field_number protoreflect.FieldNumber = 1 + FeatureSetDefaults_MinimumEdition_field_number protoreflect.FieldNumber = 4 + FeatureSetDefaults_MaximumEdition_field_number protoreflect.FieldNumber = 5 +) + +// Names for google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault. +const ( + FeatureSetDefaults_FeatureSetEditionDefault_message_name protoreflect.Name = "FeatureSetEditionDefault" + FeatureSetDefaults_FeatureSetEditionDefault_message_fullname protoreflect.FullName = "google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault" +) + +// Field names for google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault. +const ( + FeatureSetDefaults_FeatureSetEditionDefault_Edition_field_name protoreflect.Name = "edition" + FeatureSetDefaults_FeatureSetEditionDefault_OverridableFeatures_field_name protoreflect.Name = "overridable_features" + FeatureSetDefaults_FeatureSetEditionDefault_FixedFeatures_field_name protoreflect.Name = "fixed_features" + + FeatureSetDefaults_FeatureSetEditionDefault_Edition_field_fullname protoreflect.FullName = "google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.edition" + FeatureSetDefaults_FeatureSetEditionDefault_OverridableFeatures_field_fullname protoreflect.FullName = "google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.overridable_features" + FeatureSetDefaults_FeatureSetEditionDefault_FixedFeatures_field_fullname protoreflect.FullName = "google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.fixed_features" +) + +// Field numbers for google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault. +const ( + FeatureSetDefaults_FeatureSetEditionDefault_Edition_field_number protoreflect.FieldNumber = 3 + FeatureSetDefaults_FeatureSetEditionDefault_OverridableFeatures_field_number protoreflect.FieldNumber = 4 + FeatureSetDefaults_FeatureSetEditionDefault_FixedFeatures_field_number protoreflect.FieldNumber = 5 +) + +// Names for google.protobuf.SourceCodeInfo. +const ( + SourceCodeInfo_message_name protoreflect.Name = "SourceCodeInfo" + SourceCodeInfo_message_fullname protoreflect.FullName = "google.protobuf.SourceCodeInfo" +) + +// Field names for google.protobuf.SourceCodeInfo. +const ( + SourceCodeInfo_Location_field_name protoreflect.Name = "location" + + SourceCodeInfo_Location_field_fullname protoreflect.FullName = "google.protobuf.SourceCodeInfo.location" +) + +// Field numbers for google.protobuf.SourceCodeInfo. +const ( + SourceCodeInfo_Location_field_number protoreflect.FieldNumber = 1 +) + +// Names for google.protobuf.SourceCodeInfo.Location. +const ( + SourceCodeInfo_Location_message_name protoreflect.Name = "Location" + SourceCodeInfo_Location_message_fullname protoreflect.FullName = "google.protobuf.SourceCodeInfo.Location" +) + +// Field names for google.protobuf.SourceCodeInfo.Location. +const ( + SourceCodeInfo_Location_Path_field_name protoreflect.Name = "path" + SourceCodeInfo_Location_Span_field_name protoreflect.Name = "span" + SourceCodeInfo_Location_LeadingComments_field_name protoreflect.Name = "leading_comments" + SourceCodeInfo_Location_TrailingComments_field_name protoreflect.Name = "trailing_comments" + SourceCodeInfo_Location_LeadingDetachedComments_field_name protoreflect.Name = "leading_detached_comments" + + SourceCodeInfo_Location_Path_field_fullname protoreflect.FullName = "google.protobuf.SourceCodeInfo.Location.path" + SourceCodeInfo_Location_Span_field_fullname protoreflect.FullName = "google.protobuf.SourceCodeInfo.Location.span" + SourceCodeInfo_Location_LeadingComments_field_fullname protoreflect.FullName = "google.protobuf.SourceCodeInfo.Location.leading_comments" + SourceCodeInfo_Location_TrailingComments_field_fullname protoreflect.FullName = "google.protobuf.SourceCodeInfo.Location.trailing_comments" + SourceCodeInfo_Location_LeadingDetachedComments_field_fullname protoreflect.FullName = "google.protobuf.SourceCodeInfo.Location.leading_detached_comments" +) + +// Field numbers for google.protobuf.SourceCodeInfo.Location. +const ( + SourceCodeInfo_Location_Path_field_number protoreflect.FieldNumber = 1 + SourceCodeInfo_Location_Span_field_number protoreflect.FieldNumber = 2 + SourceCodeInfo_Location_LeadingComments_field_number protoreflect.FieldNumber = 3 + SourceCodeInfo_Location_TrailingComments_field_number protoreflect.FieldNumber = 4 + SourceCodeInfo_Location_LeadingDetachedComments_field_number protoreflect.FieldNumber = 6 +) + +// Names for google.protobuf.GeneratedCodeInfo. +const ( + GeneratedCodeInfo_message_name protoreflect.Name = "GeneratedCodeInfo" + GeneratedCodeInfo_message_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo" +) + +// Field names for google.protobuf.GeneratedCodeInfo. +const ( + GeneratedCodeInfo_Annotation_field_name protoreflect.Name = "annotation" + + GeneratedCodeInfo_Annotation_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.annotation" +) + +// Field numbers for google.protobuf.GeneratedCodeInfo. +const ( + GeneratedCodeInfo_Annotation_field_number protoreflect.FieldNumber = 1 +) + +// Names for google.protobuf.GeneratedCodeInfo.Annotation. +const ( + GeneratedCodeInfo_Annotation_message_name protoreflect.Name = "Annotation" + GeneratedCodeInfo_Annotation_message_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation" +) + +// Field names for google.protobuf.GeneratedCodeInfo.Annotation. +const ( + GeneratedCodeInfo_Annotation_Path_field_name protoreflect.Name = "path" + GeneratedCodeInfo_Annotation_SourceFile_field_name protoreflect.Name = "source_file" + GeneratedCodeInfo_Annotation_Begin_field_name protoreflect.Name = "begin" + GeneratedCodeInfo_Annotation_End_field_name protoreflect.Name = "end" + GeneratedCodeInfo_Annotation_Semantic_field_name protoreflect.Name = "semantic" + + GeneratedCodeInfo_Annotation_Path_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.path" + GeneratedCodeInfo_Annotation_SourceFile_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.source_file" + GeneratedCodeInfo_Annotation_Begin_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.begin" + GeneratedCodeInfo_Annotation_End_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.end" + GeneratedCodeInfo_Annotation_Semantic_field_fullname protoreflect.FullName = "google.protobuf.GeneratedCodeInfo.Annotation.semantic" +) + +// Field numbers for google.protobuf.GeneratedCodeInfo.Annotation. +const ( + GeneratedCodeInfo_Annotation_Path_field_number protoreflect.FieldNumber = 1 + GeneratedCodeInfo_Annotation_SourceFile_field_number protoreflect.FieldNumber = 2 + GeneratedCodeInfo_Annotation_Begin_field_number protoreflect.FieldNumber = 3 + GeneratedCodeInfo_Annotation_End_field_number protoreflect.FieldNumber = 4 + GeneratedCodeInfo_Annotation_Semantic_field_number protoreflect.FieldNumber = 5 +) + +// Full and short names for google.protobuf.GeneratedCodeInfo.Annotation.Semantic. +const ( + GeneratedCodeInfo_Annotation_Semantic_enum_fullname = "google.protobuf.GeneratedCodeInfo.Annotation.Semantic" + GeneratedCodeInfo_Annotation_Semantic_enum_name = "Semantic" +) + +// Enum values for google.protobuf.GeneratedCodeInfo.Annotation.Semantic. +const ( + GeneratedCodeInfo_Annotation_NONE_enum_value = 0 + GeneratedCodeInfo_Annotation_SET_enum_value = 1 + GeneratedCodeInfo_Annotation_ALIAS_enum_value = 2 +) diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/doc.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/doc.go new file mode 100644 index 0000000..d9b9d91 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/doc.go @@ -0,0 +1,11 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package genid contains constants for declarations in descriptor.proto +// and the well-known types. +package genid + +import "google.golang.org/protobuf/reflect/protoreflect" + +const GoogleProtobuf_package protoreflect.FullName = "google.protobuf" diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/duration_gen.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/duration_gen.go new file mode 100644 index 0000000..b070ef4 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/duration_gen.go @@ -0,0 +1,34 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-protos. DO NOT EDIT. + +package genid + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" +) + +const File_google_protobuf_duration_proto = "google/protobuf/duration.proto" + +// Names for google.protobuf.Duration. +const ( + Duration_message_name protoreflect.Name = "Duration" + Duration_message_fullname protoreflect.FullName = "google.protobuf.Duration" +) + +// Field names for google.protobuf.Duration. +const ( + Duration_Seconds_field_name protoreflect.Name = "seconds" + Duration_Nanos_field_name protoreflect.Name = "nanos" + + Duration_Seconds_field_fullname protoreflect.FullName = "google.protobuf.Duration.seconds" + Duration_Nanos_field_fullname protoreflect.FullName = "google.protobuf.Duration.nanos" +) + +// Field numbers for google.protobuf.Duration. +const ( + Duration_Seconds_field_number protoreflect.FieldNumber = 1 + Duration_Nanos_field_number protoreflect.FieldNumber = 2 +) diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/empty_gen.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/empty_gen.go new file mode 100644 index 0000000..762abb3 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/empty_gen.go @@ -0,0 +1,19 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-protos. DO NOT EDIT. + +package genid + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" +) + +const File_google_protobuf_empty_proto = "google/protobuf/empty.proto" + +// Names for google.protobuf.Empty. +const ( + Empty_message_name protoreflect.Name = "Empty" + Empty_message_fullname protoreflect.FullName = "google.protobuf.Empty" +) diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/field_mask_gen.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/field_mask_gen.go new file mode 100644 index 0000000..70bed45 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/field_mask_gen.go @@ -0,0 +1,31 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-protos. DO NOT EDIT. + +package genid + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" +) + +const File_google_protobuf_field_mask_proto = "google/protobuf/field_mask.proto" + +// Names for google.protobuf.FieldMask. +const ( + FieldMask_message_name protoreflect.Name = "FieldMask" + FieldMask_message_fullname protoreflect.FullName = "google.protobuf.FieldMask" +) + +// Field names for google.protobuf.FieldMask. +const ( + FieldMask_Paths_field_name protoreflect.Name = "paths" + + FieldMask_Paths_field_fullname protoreflect.FullName = "google.protobuf.FieldMask.paths" +) + +// Field numbers for google.protobuf.FieldMask. +const ( + FieldMask_Paths_field_number protoreflect.FieldNumber = 1 +) diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/go_features_gen.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/go_features_gen.go new file mode 100644 index 0000000..f5ee7f5 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/go_features_gen.go @@ -0,0 +1,70 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-protos. DO NOT EDIT. + +package genid + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" +) + +const File_google_protobuf_go_features_proto = "google/protobuf/go_features.proto" + +// Names for pb.GoFeatures. +const ( + GoFeatures_message_name protoreflect.Name = "GoFeatures" + GoFeatures_message_fullname protoreflect.FullName = "pb.GoFeatures" +) + +// Field names for pb.GoFeatures. +const ( + GoFeatures_LegacyUnmarshalJsonEnum_field_name protoreflect.Name = "legacy_unmarshal_json_enum" + GoFeatures_ApiLevel_field_name protoreflect.Name = "api_level" + GoFeatures_StripEnumPrefix_field_name protoreflect.Name = "strip_enum_prefix" + + GoFeatures_LegacyUnmarshalJsonEnum_field_fullname protoreflect.FullName = "pb.GoFeatures.legacy_unmarshal_json_enum" + GoFeatures_ApiLevel_field_fullname protoreflect.FullName = "pb.GoFeatures.api_level" + GoFeatures_StripEnumPrefix_field_fullname protoreflect.FullName = "pb.GoFeatures.strip_enum_prefix" +) + +// Field numbers for pb.GoFeatures. +const ( + GoFeatures_LegacyUnmarshalJsonEnum_field_number protoreflect.FieldNumber = 1 + GoFeatures_ApiLevel_field_number protoreflect.FieldNumber = 2 + GoFeatures_StripEnumPrefix_field_number protoreflect.FieldNumber = 3 +) + +// Full and short names for pb.GoFeatures.APILevel. +const ( + GoFeatures_APILevel_enum_fullname = "pb.GoFeatures.APILevel" + GoFeatures_APILevel_enum_name = "APILevel" +) + +// Enum values for pb.GoFeatures.APILevel. +const ( + GoFeatures_API_LEVEL_UNSPECIFIED_enum_value = 0 + GoFeatures_API_OPEN_enum_value = 1 + GoFeatures_API_HYBRID_enum_value = 2 + GoFeatures_API_OPAQUE_enum_value = 3 +) + +// Full and short names for pb.GoFeatures.StripEnumPrefix. +const ( + GoFeatures_StripEnumPrefix_enum_fullname = "pb.GoFeatures.StripEnumPrefix" + GoFeatures_StripEnumPrefix_enum_name = "StripEnumPrefix" +) + +// Enum values for pb.GoFeatures.StripEnumPrefix. +const ( + GoFeatures_STRIP_ENUM_PREFIX_UNSPECIFIED_enum_value = 0 + GoFeatures_STRIP_ENUM_PREFIX_KEEP_enum_value = 1 + GoFeatures_STRIP_ENUM_PREFIX_GENERATE_BOTH_enum_value = 2 + GoFeatures_STRIP_ENUM_PREFIX_STRIP_enum_value = 3 +) + +// Extension numbers +const ( + FeatureSet_Go_ext_number protoreflect.FieldNumber = 1002 +) diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/goname.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/goname.go new file mode 100644 index 0000000..99bb95b --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/goname.go @@ -0,0 +1,20 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package genid + +// Go names of implementation-specific struct fields in generated messages. +const ( + State_goname = "state" + + SizeCache_goname = "sizeCache" + SizeCacheA_goname = "XXX_sizecache" + + UnknownFields_goname = "unknownFields" + UnknownFieldsA_goname = "XXX_unrecognized" + + ExtensionFields_goname = "extensionFields" + ExtensionFieldsA_goname = "XXX_InternalExtensions" + ExtensionFieldsB_goname = "XXX_extensions" +) diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/map_entry.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/map_entry.go new file mode 100644 index 0000000..bef5a25 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/map_entry.go @@ -0,0 +1,16 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package genid + +import "google.golang.org/protobuf/reflect/protoreflect" + +// Generic field names and numbers for synthetic map entry messages. +const ( + MapEntry_Key_field_name protoreflect.Name = "key" + MapEntry_Value_field_name protoreflect.Name = "value" + + MapEntry_Key_field_number protoreflect.FieldNumber = 1 + MapEntry_Value_field_number protoreflect.FieldNumber = 2 +) diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/name.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/name.go new file mode 100644 index 0000000..224f339 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/name.go @@ -0,0 +1,12 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package genid + +const ( + NoUnkeyedLiteral_goname = "noUnkeyedLiteral" + NoUnkeyedLiteralA_goname = "XXX_NoUnkeyedLiteral" + + BuilderSuffix_goname = "_builder" +) diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/source_context_gen.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/source_context_gen.go new file mode 100644 index 0000000..3e99ae1 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/source_context_gen.go @@ -0,0 +1,31 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-protos. DO NOT EDIT. + +package genid + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" +) + +const File_google_protobuf_source_context_proto = "google/protobuf/source_context.proto" + +// Names for google.protobuf.SourceContext. +const ( + SourceContext_message_name protoreflect.Name = "SourceContext" + SourceContext_message_fullname protoreflect.FullName = "google.protobuf.SourceContext" +) + +// Field names for google.protobuf.SourceContext. +const ( + SourceContext_FileName_field_name protoreflect.Name = "file_name" + + SourceContext_FileName_field_fullname protoreflect.FullName = "google.protobuf.SourceContext.file_name" +) + +// Field numbers for google.protobuf.SourceContext. +const ( + SourceContext_FileName_field_number protoreflect.FieldNumber = 1 +) diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/struct_gen.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/struct_gen.go new file mode 100644 index 0000000..ad6f80c --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/struct_gen.go @@ -0,0 +1,121 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-protos. DO NOT EDIT. + +package genid + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" +) + +const File_google_protobuf_struct_proto = "google/protobuf/struct.proto" + +// Full and short names for google.protobuf.NullValue. +const ( + NullValue_enum_fullname = "google.protobuf.NullValue" + NullValue_enum_name = "NullValue" +) + +// Enum values for google.protobuf.NullValue. +const ( + NullValue_NULL_VALUE_enum_value = 0 +) + +// Names for google.protobuf.Struct. +const ( + Struct_message_name protoreflect.Name = "Struct" + Struct_message_fullname protoreflect.FullName = "google.protobuf.Struct" +) + +// Field names for google.protobuf.Struct. +const ( + Struct_Fields_field_name protoreflect.Name = "fields" + + Struct_Fields_field_fullname protoreflect.FullName = "google.protobuf.Struct.fields" +) + +// Field numbers for google.protobuf.Struct. +const ( + Struct_Fields_field_number protoreflect.FieldNumber = 1 +) + +// Names for google.protobuf.Struct.FieldsEntry. +const ( + Struct_FieldsEntry_message_name protoreflect.Name = "FieldsEntry" + Struct_FieldsEntry_message_fullname protoreflect.FullName = "google.protobuf.Struct.FieldsEntry" +) + +// Field names for google.protobuf.Struct.FieldsEntry. +const ( + Struct_FieldsEntry_Key_field_name protoreflect.Name = "key" + Struct_FieldsEntry_Value_field_name protoreflect.Name = "value" + + Struct_FieldsEntry_Key_field_fullname protoreflect.FullName = "google.protobuf.Struct.FieldsEntry.key" + Struct_FieldsEntry_Value_field_fullname protoreflect.FullName = "google.protobuf.Struct.FieldsEntry.value" +) + +// Field numbers for google.protobuf.Struct.FieldsEntry. +const ( + Struct_FieldsEntry_Key_field_number protoreflect.FieldNumber = 1 + Struct_FieldsEntry_Value_field_number protoreflect.FieldNumber = 2 +) + +// Names for google.protobuf.Value. +const ( + Value_message_name protoreflect.Name = "Value" + Value_message_fullname protoreflect.FullName = "google.protobuf.Value" +) + +// Field names for google.protobuf.Value. +const ( + Value_NullValue_field_name protoreflect.Name = "null_value" + Value_NumberValue_field_name protoreflect.Name = "number_value" + Value_StringValue_field_name protoreflect.Name = "string_value" + Value_BoolValue_field_name protoreflect.Name = "bool_value" + Value_StructValue_field_name protoreflect.Name = "struct_value" + Value_ListValue_field_name protoreflect.Name = "list_value" + + Value_NullValue_field_fullname protoreflect.FullName = "google.protobuf.Value.null_value" + Value_NumberValue_field_fullname protoreflect.FullName = "google.protobuf.Value.number_value" + Value_StringValue_field_fullname protoreflect.FullName = "google.protobuf.Value.string_value" + Value_BoolValue_field_fullname protoreflect.FullName = "google.protobuf.Value.bool_value" + Value_StructValue_field_fullname protoreflect.FullName = "google.protobuf.Value.struct_value" + Value_ListValue_field_fullname protoreflect.FullName = "google.protobuf.Value.list_value" +) + +// Field numbers for google.protobuf.Value. +const ( + Value_NullValue_field_number protoreflect.FieldNumber = 1 + Value_NumberValue_field_number protoreflect.FieldNumber = 2 + Value_StringValue_field_number protoreflect.FieldNumber = 3 + Value_BoolValue_field_number protoreflect.FieldNumber = 4 + Value_StructValue_field_number protoreflect.FieldNumber = 5 + Value_ListValue_field_number protoreflect.FieldNumber = 6 +) + +// Oneof names for google.protobuf.Value. +const ( + Value_Kind_oneof_name protoreflect.Name = "kind" + + Value_Kind_oneof_fullname protoreflect.FullName = "google.protobuf.Value.kind" +) + +// Names for google.protobuf.ListValue. +const ( + ListValue_message_name protoreflect.Name = "ListValue" + ListValue_message_fullname protoreflect.FullName = "google.protobuf.ListValue" +) + +// Field names for google.protobuf.ListValue. +const ( + ListValue_Values_field_name protoreflect.Name = "values" + + ListValue_Values_field_fullname protoreflect.FullName = "google.protobuf.ListValue.values" +) + +// Field numbers for google.protobuf.ListValue. +const ( + ListValue_Values_field_number protoreflect.FieldNumber = 1 +) diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/timestamp_gen.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/timestamp_gen.go new file mode 100644 index 0000000..f5cd563 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/timestamp_gen.go @@ -0,0 +1,34 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-protos. DO NOT EDIT. + +package genid + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" +) + +const File_google_protobuf_timestamp_proto = "google/protobuf/timestamp.proto" + +// Names for google.protobuf.Timestamp. +const ( + Timestamp_message_name protoreflect.Name = "Timestamp" + Timestamp_message_fullname protoreflect.FullName = "google.protobuf.Timestamp" +) + +// Field names for google.protobuf.Timestamp. +const ( + Timestamp_Seconds_field_name protoreflect.Name = "seconds" + Timestamp_Nanos_field_name protoreflect.Name = "nanos" + + Timestamp_Seconds_field_fullname protoreflect.FullName = "google.protobuf.Timestamp.seconds" + Timestamp_Nanos_field_fullname protoreflect.FullName = "google.protobuf.Timestamp.nanos" +) + +// Field numbers for google.protobuf.Timestamp. +const ( + Timestamp_Seconds_field_number protoreflect.FieldNumber = 1 + Timestamp_Nanos_field_number protoreflect.FieldNumber = 2 +) diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/type_gen.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/type_gen.go new file mode 100644 index 0000000..49bc73e --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/type_gen.go @@ -0,0 +1,228 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-protos. DO NOT EDIT. + +package genid + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" +) + +const File_google_protobuf_type_proto = "google/protobuf/type.proto" + +// Full and short names for google.protobuf.Syntax. +const ( + Syntax_enum_fullname = "google.protobuf.Syntax" + Syntax_enum_name = "Syntax" +) + +// Enum values for google.protobuf.Syntax. +const ( + Syntax_SYNTAX_PROTO2_enum_value = 0 + Syntax_SYNTAX_PROTO3_enum_value = 1 + Syntax_SYNTAX_EDITIONS_enum_value = 2 +) + +// Names for google.protobuf.Type. +const ( + Type_message_name protoreflect.Name = "Type" + Type_message_fullname protoreflect.FullName = "google.protobuf.Type" +) + +// Field names for google.protobuf.Type. +const ( + Type_Name_field_name protoreflect.Name = "name" + Type_Fields_field_name protoreflect.Name = "fields" + Type_Oneofs_field_name protoreflect.Name = "oneofs" + Type_Options_field_name protoreflect.Name = "options" + Type_SourceContext_field_name protoreflect.Name = "source_context" + Type_Syntax_field_name protoreflect.Name = "syntax" + Type_Edition_field_name protoreflect.Name = "edition" + + Type_Name_field_fullname protoreflect.FullName = "google.protobuf.Type.name" + Type_Fields_field_fullname protoreflect.FullName = "google.protobuf.Type.fields" + Type_Oneofs_field_fullname protoreflect.FullName = "google.protobuf.Type.oneofs" + Type_Options_field_fullname protoreflect.FullName = "google.protobuf.Type.options" + Type_SourceContext_field_fullname protoreflect.FullName = "google.protobuf.Type.source_context" + Type_Syntax_field_fullname protoreflect.FullName = "google.protobuf.Type.syntax" + Type_Edition_field_fullname protoreflect.FullName = "google.protobuf.Type.edition" +) + +// Field numbers for google.protobuf.Type. +const ( + Type_Name_field_number protoreflect.FieldNumber = 1 + Type_Fields_field_number protoreflect.FieldNumber = 2 + Type_Oneofs_field_number protoreflect.FieldNumber = 3 + Type_Options_field_number protoreflect.FieldNumber = 4 + Type_SourceContext_field_number protoreflect.FieldNumber = 5 + Type_Syntax_field_number protoreflect.FieldNumber = 6 + Type_Edition_field_number protoreflect.FieldNumber = 7 +) + +// Names for google.protobuf.Field. +const ( + Field_message_name protoreflect.Name = "Field" + Field_message_fullname protoreflect.FullName = "google.protobuf.Field" +) + +// Field names for google.protobuf.Field. +const ( + Field_Kind_field_name protoreflect.Name = "kind" + Field_Cardinality_field_name protoreflect.Name = "cardinality" + Field_Number_field_name protoreflect.Name = "number" + Field_Name_field_name protoreflect.Name = "name" + Field_TypeUrl_field_name protoreflect.Name = "type_url" + Field_OneofIndex_field_name protoreflect.Name = "oneof_index" + Field_Packed_field_name protoreflect.Name = "packed" + Field_Options_field_name protoreflect.Name = "options" + Field_JsonName_field_name protoreflect.Name = "json_name" + Field_DefaultValue_field_name protoreflect.Name = "default_value" + + Field_Kind_field_fullname protoreflect.FullName = "google.protobuf.Field.kind" + Field_Cardinality_field_fullname protoreflect.FullName = "google.protobuf.Field.cardinality" + Field_Number_field_fullname protoreflect.FullName = "google.protobuf.Field.number" + Field_Name_field_fullname protoreflect.FullName = "google.protobuf.Field.name" + Field_TypeUrl_field_fullname protoreflect.FullName = "google.protobuf.Field.type_url" + Field_OneofIndex_field_fullname protoreflect.FullName = "google.protobuf.Field.oneof_index" + Field_Packed_field_fullname protoreflect.FullName = "google.protobuf.Field.packed" + Field_Options_field_fullname protoreflect.FullName = "google.protobuf.Field.options" + Field_JsonName_field_fullname protoreflect.FullName = "google.protobuf.Field.json_name" + Field_DefaultValue_field_fullname protoreflect.FullName = "google.protobuf.Field.default_value" +) + +// Field numbers for google.protobuf.Field. +const ( + Field_Kind_field_number protoreflect.FieldNumber = 1 + Field_Cardinality_field_number protoreflect.FieldNumber = 2 + Field_Number_field_number protoreflect.FieldNumber = 3 + Field_Name_field_number protoreflect.FieldNumber = 4 + Field_TypeUrl_field_number protoreflect.FieldNumber = 6 + Field_OneofIndex_field_number protoreflect.FieldNumber = 7 + Field_Packed_field_number protoreflect.FieldNumber = 8 + Field_Options_field_number protoreflect.FieldNumber = 9 + Field_JsonName_field_number protoreflect.FieldNumber = 10 + Field_DefaultValue_field_number protoreflect.FieldNumber = 11 +) + +// Full and short names for google.protobuf.Field.Kind. +const ( + Field_Kind_enum_fullname = "google.protobuf.Field.Kind" + Field_Kind_enum_name = "Kind" +) + +// Enum values for google.protobuf.Field.Kind. +const ( + Field_TYPE_UNKNOWN_enum_value = 0 + Field_TYPE_DOUBLE_enum_value = 1 + Field_TYPE_FLOAT_enum_value = 2 + Field_TYPE_INT64_enum_value = 3 + Field_TYPE_UINT64_enum_value = 4 + Field_TYPE_INT32_enum_value = 5 + Field_TYPE_FIXED64_enum_value = 6 + Field_TYPE_FIXED32_enum_value = 7 + Field_TYPE_BOOL_enum_value = 8 + Field_TYPE_STRING_enum_value = 9 + Field_TYPE_GROUP_enum_value = 10 + Field_TYPE_MESSAGE_enum_value = 11 + Field_TYPE_BYTES_enum_value = 12 + Field_TYPE_UINT32_enum_value = 13 + Field_TYPE_ENUM_enum_value = 14 + Field_TYPE_SFIXED32_enum_value = 15 + Field_TYPE_SFIXED64_enum_value = 16 + Field_TYPE_SINT32_enum_value = 17 + Field_TYPE_SINT64_enum_value = 18 +) + +// Full and short names for google.protobuf.Field.Cardinality. +const ( + Field_Cardinality_enum_fullname = "google.protobuf.Field.Cardinality" + Field_Cardinality_enum_name = "Cardinality" +) + +// Enum values for google.protobuf.Field.Cardinality. +const ( + Field_CARDINALITY_UNKNOWN_enum_value = 0 + Field_CARDINALITY_OPTIONAL_enum_value = 1 + Field_CARDINALITY_REQUIRED_enum_value = 2 + Field_CARDINALITY_REPEATED_enum_value = 3 +) + +// Names for google.protobuf.Enum. +const ( + Enum_message_name protoreflect.Name = "Enum" + Enum_message_fullname protoreflect.FullName = "google.protobuf.Enum" +) + +// Field names for google.protobuf.Enum. +const ( + Enum_Name_field_name protoreflect.Name = "name" + Enum_Enumvalue_field_name protoreflect.Name = "enumvalue" + Enum_Options_field_name protoreflect.Name = "options" + Enum_SourceContext_field_name protoreflect.Name = "source_context" + Enum_Syntax_field_name protoreflect.Name = "syntax" + Enum_Edition_field_name protoreflect.Name = "edition" + + Enum_Name_field_fullname protoreflect.FullName = "google.protobuf.Enum.name" + Enum_Enumvalue_field_fullname protoreflect.FullName = "google.protobuf.Enum.enumvalue" + Enum_Options_field_fullname protoreflect.FullName = "google.protobuf.Enum.options" + Enum_SourceContext_field_fullname protoreflect.FullName = "google.protobuf.Enum.source_context" + Enum_Syntax_field_fullname protoreflect.FullName = "google.protobuf.Enum.syntax" + Enum_Edition_field_fullname protoreflect.FullName = "google.protobuf.Enum.edition" +) + +// Field numbers for google.protobuf.Enum. +const ( + Enum_Name_field_number protoreflect.FieldNumber = 1 + Enum_Enumvalue_field_number protoreflect.FieldNumber = 2 + Enum_Options_field_number protoreflect.FieldNumber = 3 + Enum_SourceContext_field_number protoreflect.FieldNumber = 4 + Enum_Syntax_field_number protoreflect.FieldNumber = 5 + Enum_Edition_field_number protoreflect.FieldNumber = 6 +) + +// Names for google.protobuf.EnumValue. +const ( + EnumValue_message_name protoreflect.Name = "EnumValue" + EnumValue_message_fullname protoreflect.FullName = "google.protobuf.EnumValue" +) + +// Field names for google.protobuf.EnumValue. +const ( + EnumValue_Name_field_name protoreflect.Name = "name" + EnumValue_Number_field_name protoreflect.Name = "number" + EnumValue_Options_field_name protoreflect.Name = "options" + + EnumValue_Name_field_fullname protoreflect.FullName = "google.protobuf.EnumValue.name" + EnumValue_Number_field_fullname protoreflect.FullName = "google.protobuf.EnumValue.number" + EnumValue_Options_field_fullname protoreflect.FullName = "google.protobuf.EnumValue.options" +) + +// Field numbers for google.protobuf.EnumValue. +const ( + EnumValue_Name_field_number protoreflect.FieldNumber = 1 + EnumValue_Number_field_number protoreflect.FieldNumber = 2 + EnumValue_Options_field_number protoreflect.FieldNumber = 3 +) + +// Names for google.protobuf.Option. +const ( + Option_message_name protoreflect.Name = "Option" + Option_message_fullname protoreflect.FullName = "google.protobuf.Option" +) + +// Field names for google.protobuf.Option. +const ( + Option_Name_field_name protoreflect.Name = "name" + Option_Value_field_name protoreflect.Name = "value" + + Option_Name_field_fullname protoreflect.FullName = "google.protobuf.Option.name" + Option_Value_field_fullname protoreflect.FullName = "google.protobuf.Option.value" +) + +// Field numbers for google.protobuf.Option. +const ( + Option_Name_field_number protoreflect.FieldNumber = 1 + Option_Value_field_number protoreflect.FieldNumber = 2 +) diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/wrappers.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/wrappers.go new file mode 100644 index 0000000..9404270 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/wrappers.go @@ -0,0 +1,13 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package genid + +import "google.golang.org/protobuf/reflect/protoreflect" + +// Generic field name and number for messages in wrappers.proto. +const ( + WrapperValue_Value_field_name protoreflect.Name = "value" + WrapperValue_Value_field_number protoreflect.FieldNumber = 1 +) diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/wrappers_gen.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/wrappers_gen.go new file mode 100644 index 0000000..72527d2 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/genid/wrappers_gen.go @@ -0,0 +1,175 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-protos. DO NOT EDIT. + +package genid + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" +) + +const File_google_protobuf_wrappers_proto = "google/protobuf/wrappers.proto" + +// Names for google.protobuf.DoubleValue. +const ( + DoubleValue_message_name protoreflect.Name = "DoubleValue" + DoubleValue_message_fullname protoreflect.FullName = "google.protobuf.DoubleValue" +) + +// Field names for google.protobuf.DoubleValue. +const ( + DoubleValue_Value_field_name protoreflect.Name = "value" + + DoubleValue_Value_field_fullname protoreflect.FullName = "google.protobuf.DoubleValue.value" +) + +// Field numbers for google.protobuf.DoubleValue. +const ( + DoubleValue_Value_field_number protoreflect.FieldNumber = 1 +) + +// Names for google.protobuf.FloatValue. +const ( + FloatValue_message_name protoreflect.Name = "FloatValue" + FloatValue_message_fullname protoreflect.FullName = "google.protobuf.FloatValue" +) + +// Field names for google.protobuf.FloatValue. +const ( + FloatValue_Value_field_name protoreflect.Name = "value" + + FloatValue_Value_field_fullname protoreflect.FullName = "google.protobuf.FloatValue.value" +) + +// Field numbers for google.protobuf.FloatValue. +const ( + FloatValue_Value_field_number protoreflect.FieldNumber = 1 +) + +// Names for google.protobuf.Int64Value. +const ( + Int64Value_message_name protoreflect.Name = "Int64Value" + Int64Value_message_fullname protoreflect.FullName = "google.protobuf.Int64Value" +) + +// Field names for google.protobuf.Int64Value. +const ( + Int64Value_Value_field_name protoreflect.Name = "value" + + Int64Value_Value_field_fullname protoreflect.FullName = "google.protobuf.Int64Value.value" +) + +// Field numbers for google.protobuf.Int64Value. +const ( + Int64Value_Value_field_number protoreflect.FieldNumber = 1 +) + +// Names for google.protobuf.UInt64Value. +const ( + UInt64Value_message_name protoreflect.Name = "UInt64Value" + UInt64Value_message_fullname protoreflect.FullName = "google.protobuf.UInt64Value" +) + +// Field names for google.protobuf.UInt64Value. +const ( + UInt64Value_Value_field_name protoreflect.Name = "value" + + UInt64Value_Value_field_fullname protoreflect.FullName = "google.protobuf.UInt64Value.value" +) + +// Field numbers for google.protobuf.UInt64Value. +const ( + UInt64Value_Value_field_number protoreflect.FieldNumber = 1 +) + +// Names for google.protobuf.Int32Value. +const ( + Int32Value_message_name protoreflect.Name = "Int32Value" + Int32Value_message_fullname protoreflect.FullName = "google.protobuf.Int32Value" +) + +// Field names for google.protobuf.Int32Value. +const ( + Int32Value_Value_field_name protoreflect.Name = "value" + + Int32Value_Value_field_fullname protoreflect.FullName = "google.protobuf.Int32Value.value" +) + +// Field numbers for google.protobuf.Int32Value. +const ( + Int32Value_Value_field_number protoreflect.FieldNumber = 1 +) + +// Names for google.protobuf.UInt32Value. +const ( + UInt32Value_message_name protoreflect.Name = "UInt32Value" + UInt32Value_message_fullname protoreflect.FullName = "google.protobuf.UInt32Value" +) + +// Field names for google.protobuf.UInt32Value. +const ( + UInt32Value_Value_field_name protoreflect.Name = "value" + + UInt32Value_Value_field_fullname protoreflect.FullName = "google.protobuf.UInt32Value.value" +) + +// Field numbers for google.protobuf.UInt32Value. +const ( + UInt32Value_Value_field_number protoreflect.FieldNumber = 1 +) + +// Names for google.protobuf.BoolValue. +const ( + BoolValue_message_name protoreflect.Name = "BoolValue" + BoolValue_message_fullname protoreflect.FullName = "google.protobuf.BoolValue" +) + +// Field names for google.protobuf.BoolValue. +const ( + BoolValue_Value_field_name protoreflect.Name = "value" + + BoolValue_Value_field_fullname protoreflect.FullName = "google.protobuf.BoolValue.value" +) + +// Field numbers for google.protobuf.BoolValue. +const ( + BoolValue_Value_field_number protoreflect.FieldNumber = 1 +) + +// Names for google.protobuf.StringValue. +const ( + StringValue_message_name protoreflect.Name = "StringValue" + StringValue_message_fullname protoreflect.FullName = "google.protobuf.StringValue" +) + +// Field names for google.protobuf.StringValue. +const ( + StringValue_Value_field_name protoreflect.Name = "value" + + StringValue_Value_field_fullname protoreflect.FullName = "google.protobuf.StringValue.value" +) + +// Field numbers for google.protobuf.StringValue. +const ( + StringValue_Value_field_number protoreflect.FieldNumber = 1 +) + +// Names for google.protobuf.BytesValue. +const ( + BytesValue_message_name protoreflect.Name = "BytesValue" + BytesValue_message_fullname protoreflect.FullName = "google.protobuf.BytesValue" +) + +// Field names for google.protobuf.BytesValue. +const ( + BytesValue_Value_field_name protoreflect.Name = "value" + + BytesValue_Value_field_fullname protoreflect.FullName = "google.protobuf.BytesValue.value" +) + +// Field numbers for google.protobuf.BytesValue. +const ( + BytesValue_Value_field_number protoreflect.FieldNumber = 1 +) diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/api_export.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/api_export.go new file mode 100644 index 0000000..5d5771c --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/api_export.go @@ -0,0 +1,177 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + "strconv" + + "google.golang.org/protobuf/encoding/prototext" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" +) + +// Export is a zero-length named type that exists only to export a set of +// functions that we do not want to appear in godoc. +type Export struct{} + +// NewError formats a string according to the format specifier and arguments and +// returns an error that has a "proto" prefix. +func (Export) NewError(f string, x ...any) error { + return errors.New(f, x...) +} + +// enum is any enum type generated by protoc-gen-go +// and must be a named int32 type. +type enum = any + +// EnumOf returns the protoreflect.Enum interface over e. +// It returns nil if e is nil. +func (Export) EnumOf(e enum) protoreflect.Enum { + switch e := e.(type) { + case nil: + return nil + case protoreflect.Enum: + return e + default: + return legacyWrapEnum(reflect.ValueOf(e)) + } +} + +// EnumDescriptorOf returns the protoreflect.EnumDescriptor for e. +// It returns nil if e is nil. +func (Export) EnumDescriptorOf(e enum) protoreflect.EnumDescriptor { + switch e := e.(type) { + case nil: + return nil + case protoreflect.Enum: + return e.Descriptor() + default: + return LegacyLoadEnumDesc(reflect.TypeOf(e)) + } +} + +// EnumTypeOf returns the protoreflect.EnumType for e. +// It returns nil if e is nil. +func (Export) EnumTypeOf(e enum) protoreflect.EnumType { + switch e := e.(type) { + case nil: + return nil + case protoreflect.Enum: + return e.Type() + default: + return legacyLoadEnumType(reflect.TypeOf(e)) + } +} + +// EnumStringOf returns the enum value as a string, either as the name if +// the number is resolvable, or the number formatted as a string. +func (Export) EnumStringOf(ed protoreflect.EnumDescriptor, n protoreflect.EnumNumber) string { + ev := ed.Values().ByNumber(n) + if ev != nil { + return string(ev.Name()) + } + return strconv.Itoa(int(n)) +} + +// message is any message type generated by protoc-gen-go +// and must be a pointer to a named struct type. +type message = any + +// legacyMessageWrapper wraps a v2 message as a v1 message. +type legacyMessageWrapper struct{ m protoreflect.ProtoMessage } + +func (m legacyMessageWrapper) Reset() { proto.Reset(m.m) } +func (m legacyMessageWrapper) String() string { return Export{}.MessageStringOf(m.m) } +func (m legacyMessageWrapper) ProtoMessage() {} + +// ProtoMessageV1Of converts either a v1 or v2 message to a v1 message. +// It returns nil if m is nil. +func (Export) ProtoMessageV1Of(m message) protoiface.MessageV1 { + switch mv := m.(type) { + case nil: + return nil + case protoiface.MessageV1: + return mv + case unwrapper: + return Export{}.ProtoMessageV1Of(mv.protoUnwrap()) + case protoreflect.ProtoMessage: + return legacyMessageWrapper{mv} + default: + panic(fmt.Sprintf("message %T is neither a v1 or v2 Message", m)) + } +} + +func (Export) protoMessageV2Of(m message) protoreflect.ProtoMessage { + switch mv := m.(type) { + case nil: + return nil + case protoreflect.ProtoMessage: + return mv + case legacyMessageWrapper: + return mv.m + case protoiface.MessageV1: + return nil + default: + panic(fmt.Sprintf("message %T is neither a v1 or v2 Message", m)) + } +} + +// ProtoMessageV2Of converts either a v1 or v2 message to a v2 message. +// It returns nil if m is nil. +func (Export) ProtoMessageV2Of(m message) protoreflect.ProtoMessage { + if m == nil { + return nil + } + if mv := (Export{}).protoMessageV2Of(m); mv != nil { + return mv + } + return legacyWrapMessage(reflect.ValueOf(m)).Interface() +} + +// MessageOf returns the protoreflect.Message interface over m. +// It returns nil if m is nil. +func (Export) MessageOf(m message) protoreflect.Message { + if m == nil { + return nil + } + if mv := (Export{}).protoMessageV2Of(m); mv != nil { + return mv.ProtoReflect() + } + return legacyWrapMessage(reflect.ValueOf(m)) +} + +// MessageDescriptorOf returns the protoreflect.MessageDescriptor for m. +// It returns nil if m is nil. +func (Export) MessageDescriptorOf(m message) protoreflect.MessageDescriptor { + if m == nil { + return nil + } + if mv := (Export{}).protoMessageV2Of(m); mv != nil { + return mv.ProtoReflect().Descriptor() + } + return LegacyLoadMessageDesc(reflect.TypeOf(m)) +} + +// MessageTypeOf returns the protoreflect.MessageType for m. +// It returns nil if m is nil. +func (Export) MessageTypeOf(m message) protoreflect.MessageType { + if m == nil { + return nil + } + if mv := (Export{}).protoMessageV2Of(m); mv != nil { + return mv.ProtoReflect().Type() + } + return legacyLoadMessageType(reflect.TypeOf(m), "") +} + +// MessageStringOf returns the message value as a string, +// which is the message serialized in the protobuf text format. +func (Export) MessageStringOf(m protoreflect.ProtoMessage) string { + return prototext.MarshalOptions{Multiline: false}.Format(m) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/api_export_opaque.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/api_export_opaque.go new file mode 100644 index 0000000..6075d6f --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/api_export_opaque.go @@ -0,0 +1,128 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "strconv" + "sync/atomic" + "unsafe" + + "google.golang.org/protobuf/reflect/protoreflect" +) + +func (Export) UnmarshalField(msg any, fieldNum int32) { + UnmarshalField(msg.(protoreflect.ProtoMessage).ProtoReflect(), protoreflect.FieldNumber(fieldNum)) +} + +// Present checks the presence set for a certain field number (zero +// based, ordered by appearance in original proto file). part is +// a pointer to the correct element in the bitmask array, num is the +// field number unaltered. Example (field number 70 -> part = +// &m.XXX_presence[1], num = 70) +func (Export) Present(part *uint32, num uint32) bool { + // This hook will read an unprotected shadow presence set if + // we're unning under the race detector + raceDetectHookPresent(part, num) + return atomic.LoadUint32(part)&(1<<(num%32)) > 0 +} + +// SetPresent adds a field to the presence set. part is a pointer to +// the relevant element in the array and num is the field number +// unaltered. size is the number of fields in the protocol +// buffer. +func (Export) SetPresent(part *uint32, num uint32, size uint32) { + // This hook will mutate an unprotected shadow presence set if + // we're running under the race detector + raceDetectHookSetPresent(part, num, presenceSize(size)) + for { + old := atomic.LoadUint32(part) + if atomic.CompareAndSwapUint32(part, old, old|(1<<(num%32))) { + return + } + } +} + +// SetPresentNonAtomic is like SetPresent, but operates non-atomically. +// It is meant for use by builder methods, where the message is known not +// to be accessible yet by other goroutines. +func (Export) SetPresentNonAtomic(part *uint32, num uint32, size uint32) { + // This hook will mutate an unprotected shadow presence set if + // we're running under the race detector + raceDetectHookSetPresent(part, num, presenceSize(size)) + *part |= 1 << (num % 32) +} + +// ClearPresence removes a field from the presence set. part is a +// pointer to the relevant element in the presence array and num is +// the field number unaltered. +func (Export) ClearPresent(part *uint32, num uint32) { + // This hook will mutate an unprotected shadow presence set if + // we're running under the race detector + raceDetectHookClearPresent(part, num) + for { + old := atomic.LoadUint32(part) + if atomic.CompareAndSwapUint32(part, old, old&^(1<<(num%32))) { + return + } + } +} + +// interfaceToPointer takes a pointer to an empty interface whose value is a +// pointer type, and converts it into a "pointer" that points to the same +// target +func interfaceToPointer(i *any) pointer { + return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]} +} + +func (p pointer) atomicGetPointer() pointer { + return pointer{p: atomic.LoadPointer((*unsafe.Pointer)(p.p))} +} + +func (p pointer) atomicSetPointer(q pointer) { + atomic.StorePointer((*unsafe.Pointer)(p.p), q.p) +} + +// AtomicCheckPointerIsNil takes an interface (which is a pointer to a +// pointer) and returns true if the pointed-to pointer is nil (using an +// atomic load). This function is inlineable and, on x86, just becomes a +// simple load and compare. +func (Export) AtomicCheckPointerIsNil(ptr any) bool { + return interfaceToPointer(&ptr).atomicGetPointer().IsNil() +} + +// AtomicSetPointer takes two interfaces (first is a pointer to a pointer, +// second is a pointer) and atomically sets the second pointer into location +// referenced by first pointer. Unfortunately, atomicSetPointer() does not inline +// (even on x86), so this does not become a simple store on x86. +func (Export) AtomicSetPointer(dstPtr, valPtr any) { + interfaceToPointer(&dstPtr).atomicSetPointer(interfaceToPointer(&valPtr)) +} + +// AtomicLoadPointer loads the pointer at the location pointed at by src, +// and stores that pointer value into the location pointed at by dst. +func (Export) AtomicLoadPointer(ptr Pointer, dst Pointer) { + *(*unsafe.Pointer)(unsafe.Pointer(dst)) = atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(ptr))) +} + +// AtomicInitializePointer makes ptr and dst point to the same value. +// +// If *ptr is a nil pointer, it sets *ptr = *dst. +// +// If *ptr is a non-nil pointer, it sets *dst = *ptr. +func (Export) AtomicInitializePointer(ptr Pointer, dst Pointer) { + if !atomic.CompareAndSwapPointer((*unsafe.Pointer)(ptr), unsafe.Pointer(nil), *(*unsafe.Pointer)(dst)) { + *(*unsafe.Pointer)(unsafe.Pointer(dst)) = atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(ptr))) + } +} + +// MessageFieldStringOf returns the field formatted as a string, +// either as the field name if resolvable otherwise as a decimal string. +func (Export) MessageFieldStringOf(md protoreflect.MessageDescriptor, n protoreflect.FieldNumber) string { + fd := md.Fields().ByNumber(n) + if fd != nil { + return string(fd.Name()) + } + return strconv.Itoa(int(n)) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/bitmap.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/bitmap.go new file mode 100644 index 0000000..ea27654 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/bitmap.go @@ -0,0 +1,34 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !race + +package impl + +// There is no additional data as we're not running under race detector. +type RaceDetectHookData struct{} + +// Empty stubs for when not using the race detector. Calls to these from index.go should be optimized away. +func (presence) raceDetectHookPresent(num uint32) {} +func (presence) raceDetectHookSetPresent(num uint32, size presenceSize) {} +func (presence) raceDetectHookClearPresent(num uint32) {} +func (presence) raceDetectHookAllocAndCopy(src presence) {} + +// raceDetectHookPresent is called by the generated file interface +// (*proto.internalFuncs) Present to optionally read an unprotected +// shadow bitmap when race detection is enabled. In regular code it is +// a noop. +func raceDetectHookPresent(field *uint32, num uint32) {} + +// raceDetectHookSetPresent is called by the generated file interface +// (*proto.internalFuncs) SetPresent to optionally write an unprotected +// shadow bitmap when race detection is enabled. In regular code it is +// a noop. +func raceDetectHookSetPresent(field *uint32, num uint32, size presenceSize) {} + +// raceDetectHookClearPresent is called by the generated file interface +// (*proto.internalFuncs) ClearPresent to optionally write an unprotected +// shadow bitmap when race detection is enabled. In regular code it is +// a noop. +func raceDetectHookClearPresent(field *uint32, num uint32) {} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/bitmap_race.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/bitmap_race.go new file mode 100644 index 0000000..e9a2758 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/bitmap_race.go @@ -0,0 +1,126 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build race + +package impl + +// When running under race detector, we add a presence map of bytes, that we can access +// in the hook functions so that we trigger the race detection whenever we have concurrent +// Read-Writes or Write-Writes. The race detector does not otherwise detect invalid concurrent +// access to lazy fields as all updates of bitmaps and pointers are done using atomic operations. +type RaceDetectHookData struct { + shadowPresence *[]byte +} + +// Hooks for presence bitmap operations that allocate, read and write the shadowPresence +// using non-atomic operations. +func (data *RaceDetectHookData) raceDetectHookAlloc(size presenceSize) { + sp := make([]byte, size) + atomicStoreShadowPresence(&data.shadowPresence, &sp) +} + +func (p presence) raceDetectHookPresent(num uint32) { + data := p.toRaceDetectData() + if data == nil { + return + } + sp := atomicLoadShadowPresence(&data.shadowPresence) + if sp != nil { + _ = (*sp)[num] + } +} + +func (p presence) raceDetectHookSetPresent(num uint32, size presenceSize) { + data := p.toRaceDetectData() + if data == nil { + return + } + sp := atomicLoadShadowPresence(&data.shadowPresence) + if sp == nil { + data.raceDetectHookAlloc(size) + sp = atomicLoadShadowPresence(&data.shadowPresence) + } + (*sp)[num] = 1 +} + +func (p presence) raceDetectHookClearPresent(num uint32) { + data := p.toRaceDetectData() + if data == nil { + return + } + sp := atomicLoadShadowPresence(&data.shadowPresence) + if sp != nil { + (*sp)[num] = 0 + + } +} + +// raceDetectHookAllocAndCopy allocates a new shadowPresence slice at lazy and copies +// shadowPresence bytes from src to lazy. +func (p presence) raceDetectHookAllocAndCopy(q presence) { + sData := q.toRaceDetectData() + dData := p.toRaceDetectData() + if sData == nil { + return + } + srcSp := atomicLoadShadowPresence(&sData.shadowPresence) + if srcSp == nil { + atomicStoreShadowPresence(&dData.shadowPresence, nil) + return + } + n := len(*srcSp) + dSlice := make([]byte, n) + atomicStoreShadowPresence(&dData.shadowPresence, &dSlice) + for i := 0; i < n; i++ { + dSlice[i] = (*srcSp)[i] + } +} + +// raceDetectHookPresent is called by the generated file interface +// (*proto.internalFuncs) Present to optionally read an unprotected +// shadow bitmap when race detection is enabled. In regular code it is +// a noop. +func raceDetectHookPresent(field *uint32, num uint32) { + data := findPointerToRaceDetectData(field, num) + if data == nil { + return + } + sp := atomicLoadShadowPresence(&data.shadowPresence) + if sp != nil { + _ = (*sp)[num] + } +} + +// raceDetectHookSetPresent is called by the generated file interface +// (*proto.internalFuncs) SetPresent to optionally write an unprotected +// shadow bitmap when race detection is enabled. In regular code it is +// a noop. +func raceDetectHookSetPresent(field *uint32, num uint32, size presenceSize) { + data := findPointerToRaceDetectData(field, num) + if data == nil { + return + } + sp := atomicLoadShadowPresence(&data.shadowPresence) + if sp == nil { + data.raceDetectHookAlloc(size) + sp = atomicLoadShadowPresence(&data.shadowPresence) + } + (*sp)[num] = 1 +} + +// raceDetectHookClearPresent is called by the generated file interface +// (*proto.internalFuncs) ClearPresent to optionally write an unprotected +// shadow bitmap when race detection is enabled. In regular code it is +// a noop. +func raceDetectHookClearPresent(field *uint32, num uint32) { + data := findPointerToRaceDetectData(field, num) + if data == nil { + return + } + sp := atomicLoadShadowPresence(&data.shadowPresence) + if sp != nil { + (*sp)[num] = 0 + } +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/checkinit.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/checkinit.go new file mode 100644 index 0000000..fe2c719 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/checkinit.go @@ -0,0 +1,174 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "sync" + + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" +) + +func (mi *MessageInfo) checkInitialized(in protoiface.CheckInitializedInput) (protoiface.CheckInitializedOutput, error) { + var p pointer + if ms, ok := in.Message.(*messageState); ok { + p = ms.pointer() + } else { + p = in.Message.(*messageReflectWrapper).pointer() + } + return protoiface.CheckInitializedOutput{}, mi.checkInitializedPointer(p) +} + +func (mi *MessageInfo) checkInitializedPointer(p pointer) error { + mi.init() + if !mi.needsInitCheck { + return nil + } + if p.IsNil() { + for _, f := range mi.orderedCoderFields { + if f.isRequired { + return errors.RequiredNotSet(string(mi.Desc.Fields().ByNumber(f.num).FullName())) + } + } + return nil + } + + var presence presence + if mi.presenceOffset.IsValid() { + presence = p.Apply(mi.presenceOffset).PresenceInfo() + } + + if mi.extensionOffset.IsValid() { + e := p.Apply(mi.extensionOffset).Extensions() + if err := mi.isInitExtensions(e); err != nil { + return err + } + } + for _, f := range mi.orderedCoderFields { + if !f.isRequired && f.funcs.isInit == nil { + continue + } + + if f.presenceIndex != noPresence { + if !presence.Present(f.presenceIndex) { + if f.isRequired { + return errors.RequiredNotSet(string(mi.Desc.Fields().ByNumber(f.num).FullName())) + } + continue + } + if f.funcs.isInit != nil { + f.mi.init() + if f.mi.needsInitCheck { + if f.isLazy && p.Apply(f.offset).AtomicGetPointer().IsNil() { + lazy := *p.Apply(mi.lazyOffset).LazyInfoPtr() + if !lazy.AllowedPartial() { + // Nothing to see here, it was checked on unmarshal + continue + } + mi.lazyUnmarshal(p, f.num) + } + if err := f.funcs.isInit(p.Apply(f.offset), f); err != nil { + return err + } + } + } + continue + } + + fptr := p.Apply(f.offset) + if f.isPointer && fptr.Elem().IsNil() { + if f.isRequired { + return errors.RequiredNotSet(string(mi.Desc.Fields().ByNumber(f.num).FullName())) + } + continue + } + if f.funcs.isInit == nil { + continue + } + if err := f.funcs.isInit(fptr, f); err != nil { + return err + } + } + return nil +} + +func (mi *MessageInfo) isInitExtensions(ext *map[int32]ExtensionField) error { + if ext == nil { + return nil + } + for _, x := range *ext { + ei := getExtensionFieldInfo(x.Type()) + if ei.funcs.isInit == nil || x.isUnexpandedLazy() { + continue + } + v := x.Value() + if !v.IsValid() { + continue + } + if err := ei.funcs.isInit(v); err != nil { + return err + } + } + return nil +} + +var ( + needsInitCheckMu sync.Mutex + needsInitCheckMap sync.Map +) + +// needsInitCheck reports whether a message needs to be checked for partial initialization. +// +// It returns true if the message transitively includes any required or extension fields. +func needsInitCheck(md protoreflect.MessageDescriptor) bool { + if v, ok := needsInitCheckMap.Load(md); ok { + if has, ok := v.(bool); ok { + return has + } + } + needsInitCheckMu.Lock() + defer needsInitCheckMu.Unlock() + return needsInitCheckLocked(md) +} + +func needsInitCheckLocked(md protoreflect.MessageDescriptor) (has bool) { + if v, ok := needsInitCheckMap.Load(md); ok { + // If has is true, we've previously determined that this message + // needs init checks. + // + // If has is false, we've previously determined that it can never + // be uninitialized. + // + // If has is not a bool, we've just encountered a cycle in the + // message graph. In this case, it is safe to return false: If + // the message does have required fields, we'll detect them later + // in the graph traversal. + has, ok := v.(bool) + return ok && has + } + needsInitCheckMap.Store(md, struct{}{}) // avoid cycles while descending into this message + defer func() { + needsInitCheckMap.Store(md, has) + }() + if md.RequiredNumbers().Len() > 0 { + return true + } + if md.ExtensionRanges().Len() > 0 { + return true + } + for i := 0; i < md.Fields().Len(); i++ { + fd := md.Fields().Get(i) + // Map keys are never messages, so just consider the map value. + if fd.IsMap() { + fd = fd.MapValue() + } + fmd := fd.Message() + if fmd != nil && needsInitCheckLocked(fmd) { + return true + } + } + return false +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go new file mode 100644 index 0000000..0d5b546 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go @@ -0,0 +1,228 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "sync" + "sync/atomic" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/reflect/protoreflect" +) + +type extensionFieldInfo struct { + wiretag uint64 + tagsize int + unmarshalNeedsValue bool + funcs valueCoderFuncs + validation validationInfo +} + +func getExtensionFieldInfo(xt protoreflect.ExtensionType) *extensionFieldInfo { + if xi, ok := xt.(*ExtensionInfo); ok { + xi.lazyInit() + return xi.info + } + // Ideally we'd cache the resulting *extensionFieldInfo so we don't have to + // recompute this metadata repeatedly. But without support for something like + // weak references, such a cache would pin temporary values (like dynamic + // extension types, constructed for the duration of a user request) to the + // heap forever, causing memory usage of the cache to grow unbounded. + // See discussion in https://github.com/golang/protobuf/issues/1521. + return makeExtensionFieldInfo(xt.TypeDescriptor()) +} + +func makeExtensionFieldInfo(xd protoreflect.ExtensionDescriptor) *extensionFieldInfo { + var wiretag uint64 + if !xd.IsPacked() { + wiretag = protowire.EncodeTag(xd.Number(), wireTypes[xd.Kind()]) + } else { + wiretag = protowire.EncodeTag(xd.Number(), protowire.BytesType) + } + e := &extensionFieldInfo{ + wiretag: wiretag, + tagsize: protowire.SizeVarint(wiretag), + funcs: encoderFuncsForValue(xd), + } + // Does the unmarshal function need a value passed to it? + // This is true for composite types, where we pass in a message, list, or map to fill in, + // and for enums, where we pass in a prototype value to specify the concrete enum type. + switch xd.Kind() { + case protoreflect.MessageKind, protoreflect.GroupKind, protoreflect.EnumKind: + e.unmarshalNeedsValue = true + default: + if xd.Cardinality() == protoreflect.Repeated { + e.unmarshalNeedsValue = true + } + } + return e +} + +type lazyExtensionValue struct { + atomicOnce uint32 // atomically set if value is valid + mu sync.Mutex + xi *extensionFieldInfo + value protoreflect.Value + b []byte +} + +type ExtensionField struct { + typ protoreflect.ExtensionType + + // value is either the value of GetValue, + // or a *lazyExtensionValue that then returns the value of GetValue. + value protoreflect.Value + lazy *lazyExtensionValue +} + +func (f *ExtensionField) appendLazyBytes(xt protoreflect.ExtensionType, xi *extensionFieldInfo, num protowire.Number, wtyp protowire.Type, b []byte) { + if f.lazy == nil { + f.lazy = &lazyExtensionValue{xi: xi} + } + f.typ = xt + f.lazy.xi = xi + f.lazy.b = protowire.AppendTag(f.lazy.b, num, wtyp) + f.lazy.b = append(f.lazy.b, b...) +} + +func (f *ExtensionField) canLazy(xt protoreflect.ExtensionType) bool { + if f.typ == nil { + return true + } + if f.typ == xt && f.lazy != nil && atomic.LoadUint32(&f.lazy.atomicOnce) == 0 { + return true + } + return false +} + +// isUnexpandedLazy returns true if the ExensionField is lazy and not +// yet expanded, which means it's present and already checked for +// initialized required fields. +func (f *ExtensionField) isUnexpandedLazy() bool { + return f.lazy != nil && atomic.LoadUint32(&f.lazy.atomicOnce) == 0 +} + +// lazyBuffer retrieves the buffer for a lazy extension if it's not yet expanded. +// +// The returned buffer has to be kept over whatever operation we're planning, +// as re-retrieving it will fail after the message is lazily decoded. +func (f *ExtensionField) lazyBuffer() []byte { + // This function might be in the critical path, so check the atomic without + // taking a look first, then only take the lock if needed. + if !f.isUnexpandedLazy() { + return nil + } + f.lazy.mu.Lock() + defer f.lazy.mu.Unlock() + return f.lazy.b +} + +func (f *ExtensionField) lazyInit() { + f.lazy.mu.Lock() + defer f.lazy.mu.Unlock() + if atomic.LoadUint32(&f.lazy.atomicOnce) == 1 { + return + } + if f.lazy.xi != nil { + b := f.lazy.b + val := f.typ.New() + for len(b) > 0 { + var tag uint64 + if b[0] < 0x80 { + tag = uint64(b[0]) + b = b[1:] + } else if len(b) >= 2 && b[1] < 128 { + tag = uint64(b[0]&0x7f) + uint64(b[1])<<7 + b = b[2:] + } else { + var n int + tag, n = protowire.ConsumeVarint(b) + if n < 0 { + panic(errors.New("bad tag in lazy extension decoding")) + } + b = b[n:] + } + num := protowire.Number(tag >> 3) + wtyp := protowire.Type(tag & 7) + var out unmarshalOutput + var err error + val, out, err = f.lazy.xi.funcs.unmarshal(b, val, num, wtyp, lazyUnmarshalOptions) + if err != nil { + panic(errors.New("decode failure in lazy extension decoding: %v", err)) + } + b = b[out.n:] + } + f.lazy.value = val + } else { + panic("No support for lazy fns for ExtensionField") + } + f.lazy.xi = nil + f.lazy.b = nil + atomic.StoreUint32(&f.lazy.atomicOnce, 1) +} + +// Set sets the type and value of the extension field. +// This must not be called concurrently. +func (f *ExtensionField) Set(t protoreflect.ExtensionType, v protoreflect.Value) { + f.typ = t + f.value = v + f.lazy = nil +} + +// Value returns the value of the extension field. +// This may be called concurrently. +func (f *ExtensionField) Value() protoreflect.Value { + if f.lazy != nil { + if atomic.LoadUint32(&f.lazy.atomicOnce) == 0 { + f.lazyInit() + } + return f.lazy.value + } + return f.value +} + +// Type returns the type of the extension field. +// This may be called concurrently. +func (f ExtensionField) Type() protoreflect.ExtensionType { + return f.typ +} + +// IsSet returns whether the extension field is set. +// This may be called concurrently. +func (f ExtensionField) IsSet() bool { + return f.typ != nil +} + +// IsLazy reports whether a field is lazily encoded. +// It is exported for testing. +func IsLazy(m protoreflect.Message, fd protoreflect.FieldDescriptor) bool { + var mi *MessageInfo + var p pointer + switch m := m.(type) { + case *messageState: + mi = m.messageInfo() + p = m.pointer() + case *messageReflectWrapper: + mi = m.messageInfo() + p = m.pointer() + default: + return false + } + xd, ok := fd.(protoreflect.ExtensionTypeDescriptor) + if !ok { + return false + } + xt := xd.Type() + ext := mi.extensionMap(p) + if ext == nil { + return false + } + f, ok := (*ext)[int32(fd.Number())] + if !ok { + return false + } + return f.typ == xt && f.lazy != nil && atomic.LoadUint32(&f.lazy.atomicOnce) == 0 +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_field.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_field.go new file mode 100644 index 0000000..d14d7d9 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_field.go @@ -0,0 +1,788 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "reflect" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" +) + +type errInvalidUTF8 struct{} + +func (errInvalidUTF8) Error() string { return "string field contains invalid UTF-8" } +func (errInvalidUTF8) InvalidUTF8() bool { return true } +func (errInvalidUTF8) Unwrap() error { return errors.Error } + +// initOneofFieldCoders initializes the fast-path functions for the fields in a oneof. +// +// For size, marshal, and isInit operations, functions are set only on the first field +// in the oneof. The functions are called when the oneof is non-nil, and will dispatch +// to the appropriate field-specific function as necessary. +// +// The unmarshal function is set on each field individually as usual. +func (mi *MessageInfo) initOneofFieldCoders(od protoreflect.OneofDescriptor, si structInfo) { + fs := si.oneofsByName[od.Name()] + ft := fs.Type + oneofFields := make(map[reflect.Type]*coderFieldInfo) + needIsInit := false + fields := od.Fields() + for i, lim := 0, fields.Len(); i < lim; i++ { + fd := od.Fields().Get(i) + num := fd.Number() + // Make a copy of the original coderFieldInfo for use in unmarshaling. + // + // oneofFields[oneofType].funcs.marshal is the field-specific marshal function. + // + // mi.coderFields[num].marshal is set on only the first field in the oneof, + // and dispatches to the field-specific marshaler in oneofFields. + cf := *mi.coderFields[num] + ot := si.oneofWrappersByNumber[num] + cf.ft = ot.Field(0).Type + cf.mi, cf.funcs = fieldCoder(fd, cf.ft) + oneofFields[ot] = &cf + if cf.funcs.isInit != nil { + needIsInit = true + } + mi.coderFields[num].funcs.unmarshal = func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) { + var vw reflect.Value // pointer to wrapper type + vi := p.AsValueOf(ft).Elem() // oneof field value of interface kind + if !vi.IsNil() && !vi.Elem().IsNil() && vi.Elem().Elem().Type() == ot { + vw = vi.Elem() + } else { + vw = reflect.New(ot) + } + out, err := cf.funcs.unmarshal(b, pointerOfValue(vw).Apply(zeroOffset), wtyp, &cf, opts) + if err != nil { + return out, err + } + if cf.funcs.isInit == nil { + out.initialized = true + } + vi.Set(vw) + return out, nil + } + } + getInfo := func(p pointer) (pointer, *coderFieldInfo) { + v := p.AsValueOf(ft).Elem() + if v.IsNil() { + return pointer{}, nil + } + v = v.Elem() // interface -> *struct + if v.IsNil() { + return pointer{}, nil + } + return pointerOfValue(v).Apply(zeroOffset), oneofFields[v.Elem().Type()] + } + first := mi.coderFields[od.Fields().Get(0).Number()] + first.funcs.size = func(p pointer, _ *coderFieldInfo, opts marshalOptions) int { + p, info := getInfo(p) + if info == nil || info.funcs.size == nil { + return 0 + } + return info.funcs.size(p, info, opts) + } + first.funcs.marshal = func(b []byte, p pointer, _ *coderFieldInfo, opts marshalOptions) ([]byte, error) { + p, info := getInfo(p) + if info == nil || info.funcs.marshal == nil { + return b, nil + } + return info.funcs.marshal(b, p, info, opts) + } + first.funcs.merge = func(dst, src pointer, _ *coderFieldInfo, opts mergeOptions) { + srcp, srcinfo := getInfo(src) + if srcinfo == nil || srcinfo.funcs.merge == nil { + return + } + dstp, dstinfo := getInfo(dst) + if dstinfo != srcinfo { + dst.AsValueOf(ft).Elem().Set(reflect.New(src.AsValueOf(ft).Elem().Elem().Elem().Type())) + dstp = pointerOfValue(dst.AsValueOf(ft).Elem().Elem()).Apply(zeroOffset) + } + srcinfo.funcs.merge(dstp, srcp, srcinfo, opts) + } + if needIsInit { + first.funcs.isInit = func(p pointer, _ *coderFieldInfo) error { + p, info := getInfo(p) + if info == nil || info.funcs.isInit == nil { + return nil + } + return info.funcs.isInit(p, info) + } + } +} + +func makeMessageFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) pointerCoderFuncs { + if mi := getMessageInfo(ft); mi != nil { + funcs := pointerCoderFuncs{ + size: sizeMessageInfo, + marshal: appendMessageInfo, + unmarshal: consumeMessageInfo, + merge: mergeMessage, + } + if needsInitCheck(mi.Desc) { + funcs.isInit = isInitMessageInfo + } + return funcs + } else { + return pointerCoderFuncs{ + size: func(p pointer, f *coderFieldInfo, opts marshalOptions) int { + m := asMessage(p.AsValueOf(ft).Elem()) + return sizeMessage(m, f.tagsize, opts) + }, + marshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + m := asMessage(p.AsValueOf(ft).Elem()) + return appendMessage(b, m, f.wiretag, opts) + }, + unmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) { + mp := p.AsValueOf(ft).Elem() + if mp.IsNil() { + mp.Set(reflect.New(ft.Elem())) + } + return consumeMessage(b, asMessage(mp), wtyp, opts) + }, + isInit: func(p pointer, f *coderFieldInfo) error { + m := asMessage(p.AsValueOf(ft).Elem()) + return proto.CheckInitialized(m) + }, + merge: mergeMessage, + } + } +} + +func sizeMessageInfo(p pointer, f *coderFieldInfo, opts marshalOptions) int { + return protowire.SizeBytes(f.mi.sizePointer(p.Elem(), opts)) + f.tagsize +} + +func appendMessageInfo(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + calculatedSize := f.mi.sizePointer(p.Elem(), opts) + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(calculatedSize)) + before := len(b) + b, err := f.mi.marshalAppendPointer(b, p.Elem(), opts) + if measuredSize := len(b) - before; calculatedSize != measuredSize && err == nil { + return nil, errors.MismatchedSizeCalculation(calculatedSize, measuredSize) + } + return b, err +} + +func consumeMessageInfo(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + if p.Elem().IsNil() { + p.SetPointer(pointerOfValue(reflect.New(f.mi.GoReflectType.Elem()))) + } + o, err := f.mi.unmarshalPointer(v, p.Elem(), 0, opts) + if err != nil { + return out, err + } + out.n = n + out.initialized = o.initialized + return out, nil +} + +func isInitMessageInfo(p pointer, f *coderFieldInfo) error { + return f.mi.checkInitializedPointer(p.Elem()) +} + +func sizeMessage(m proto.Message, tagsize int, opts marshalOptions) int { + return protowire.SizeBytes(opts.Options().Size(m)) + tagsize +} + +func appendMessage(b []byte, m proto.Message, wiretag uint64, opts marshalOptions) ([]byte, error) { + mopts := opts.Options() + calculatedSize := mopts.Size(m) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, uint64(calculatedSize)) + before := len(b) + b, err := mopts.MarshalAppend(b, m) + if measuredSize := len(b) - before; calculatedSize != measuredSize && err == nil { + return nil, errors.MismatchedSizeCalculation(calculatedSize, measuredSize) + } + return b, err +} + +func consumeMessage(b []byte, m proto.Message, wtyp protowire.Type, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + o, err := opts.Options().UnmarshalState(protoiface.UnmarshalInput{ + Buf: v, + Message: m.ProtoReflect(), + }) + if err != nil { + return out, err + } + out.n = n + out.initialized = o.Flags&protoiface.UnmarshalInitialized != 0 + return out, nil +} + +func sizeMessageValue(v protoreflect.Value, tagsize int, opts marshalOptions) int { + m := v.Message().Interface() + return sizeMessage(m, tagsize, opts) +} + +func appendMessageValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + m := v.Message().Interface() + return appendMessage(b, m, wiretag, opts) +} + +func consumeMessageValue(b []byte, v protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (protoreflect.Value, unmarshalOutput, error) { + m := v.Message().Interface() + out, err := consumeMessage(b, m, wtyp, opts) + return v, out, err +} + +func isInitMessageValue(v protoreflect.Value) error { + m := v.Message().Interface() + return proto.CheckInitialized(m) +} + +var coderMessageValue = valueCoderFuncs{ + size: sizeMessageValue, + marshal: appendMessageValue, + unmarshal: consumeMessageValue, + isInit: isInitMessageValue, + merge: mergeMessageValue, +} + +func sizeGroupValue(v protoreflect.Value, tagsize int, opts marshalOptions) int { + m := v.Message().Interface() + return sizeGroup(m, tagsize, opts) +} + +func appendGroupValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + m := v.Message().Interface() + return appendGroup(b, m, wiretag, opts) +} + +func consumeGroupValue(b []byte, v protoreflect.Value, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (protoreflect.Value, unmarshalOutput, error) { + m := v.Message().Interface() + out, err := consumeGroup(b, m, num, wtyp, opts) + return v, out, err +} + +var coderGroupValue = valueCoderFuncs{ + size: sizeGroupValue, + marshal: appendGroupValue, + unmarshal: consumeGroupValue, + isInit: isInitMessageValue, + merge: mergeMessageValue, +} + +func makeGroupFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) pointerCoderFuncs { + num := fd.Number() + if mi := getMessageInfo(ft); mi != nil { + funcs := pointerCoderFuncs{ + size: sizeGroupType, + marshal: appendGroupType, + unmarshal: consumeGroupType, + merge: mergeMessage, + } + if needsInitCheck(mi.Desc) { + funcs.isInit = isInitMessageInfo + } + return funcs + } else { + return pointerCoderFuncs{ + size: func(p pointer, f *coderFieldInfo, opts marshalOptions) int { + m := asMessage(p.AsValueOf(ft).Elem()) + return sizeGroup(m, f.tagsize, opts) + }, + marshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + m := asMessage(p.AsValueOf(ft).Elem()) + return appendGroup(b, m, f.wiretag, opts) + }, + unmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) { + mp := p.AsValueOf(ft).Elem() + if mp.IsNil() { + mp.Set(reflect.New(ft.Elem())) + } + return consumeGroup(b, asMessage(mp), num, wtyp, opts) + }, + isInit: func(p pointer, f *coderFieldInfo) error { + m := asMessage(p.AsValueOf(ft).Elem()) + return proto.CheckInitialized(m) + }, + merge: mergeMessage, + } + } +} + +func sizeGroupType(p pointer, f *coderFieldInfo, opts marshalOptions) int { + return 2*f.tagsize + f.mi.sizePointer(p.Elem(), opts) +} + +func appendGroupType(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, f.wiretag) // start group + b, err := f.mi.marshalAppendPointer(b, p.Elem(), opts) + b = protowire.AppendVarint(b, f.wiretag+1) // end group + return b, err +} + +func consumeGroupType(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.StartGroupType { + return out, errUnknown + } + if p.Elem().IsNil() { + p.SetPointer(pointerOfValue(reflect.New(f.mi.GoReflectType.Elem()))) + } + return f.mi.unmarshalPointer(b, p.Elem(), f.num, opts) +} + +func sizeGroup(m proto.Message, tagsize int, opts marshalOptions) int { + return 2*tagsize + opts.Options().Size(m) +} + +func appendGroup(b []byte, m proto.Message, wiretag uint64, opts marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) // start group + b, err := opts.Options().MarshalAppend(b, m) + b = protowire.AppendVarint(b, wiretag+1) // end group + return b, err +} + +func consumeGroup(b []byte, m proto.Message, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.StartGroupType { + return out, errUnknown + } + b, n := protowire.ConsumeGroup(num, b) + if n < 0 { + return out, errDecode + } + o, err := opts.Options().UnmarshalState(protoiface.UnmarshalInput{ + Buf: b, + Message: m.ProtoReflect(), + }) + if err != nil { + return out, err + } + out.n = n + out.initialized = o.Flags&protoiface.UnmarshalInitialized != 0 + return out, nil +} + +func makeMessageSliceFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) pointerCoderFuncs { + if mi := getMessageInfo(ft); mi != nil { + funcs := pointerCoderFuncs{ + size: sizeMessageSliceInfo, + marshal: appendMessageSliceInfo, + unmarshal: consumeMessageSliceInfo, + merge: mergeMessageSlice, + } + if needsInitCheck(mi.Desc) { + funcs.isInit = isInitMessageSliceInfo + } + return funcs + } + return pointerCoderFuncs{ + size: func(p pointer, f *coderFieldInfo, opts marshalOptions) int { + return sizeMessageSlice(p, ft, f.tagsize, opts) + }, + marshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + return appendMessageSlice(b, p, f.wiretag, ft, opts) + }, + unmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) { + return consumeMessageSlice(b, p, ft, wtyp, opts) + }, + isInit: func(p pointer, f *coderFieldInfo) error { + return isInitMessageSlice(p, ft) + }, + merge: mergeMessageSlice, + } +} + +func sizeMessageSliceInfo(p pointer, f *coderFieldInfo, opts marshalOptions) int { + s := p.PointerSlice() + n := 0 + for _, v := range s { + n += protowire.SizeBytes(f.mi.sizePointer(v, opts)) + f.tagsize + } + return n +} + +func appendMessageSliceInfo(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := p.PointerSlice() + var err error + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + siz := f.mi.sizePointer(v, opts) + b = protowire.AppendVarint(b, uint64(siz)) + before := len(b) + b, err = f.mi.marshalAppendPointer(b, v, opts) + if err != nil { + return b, err + } + if measuredSize := len(b) - before; siz != measuredSize { + return nil, errors.MismatchedSizeCalculation(siz, measuredSize) + } + } + return b, nil +} + +func consumeMessageSliceInfo(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + m := reflect.New(f.mi.GoReflectType.Elem()).Interface() + mp := pointerOfIface(m) + o, err := f.mi.unmarshalPointer(v, mp, 0, opts) + if err != nil { + return out, err + } + p.AppendPointerSlice(mp) + out.n = n + out.initialized = o.initialized + return out, nil +} + +func isInitMessageSliceInfo(p pointer, f *coderFieldInfo) error { + s := p.PointerSlice() + for _, v := range s { + if err := f.mi.checkInitializedPointer(v); err != nil { + return err + } + } + return nil +} + +func sizeMessageSlice(p pointer, goType reflect.Type, tagsize int, opts marshalOptions) int { + mopts := opts.Options() + s := p.PointerSlice() + n := 0 + for _, v := range s { + m := asMessage(v.AsValueOf(goType.Elem())) + n += protowire.SizeBytes(mopts.Size(m)) + tagsize + } + return n +} + +func appendMessageSlice(b []byte, p pointer, wiretag uint64, goType reflect.Type, opts marshalOptions) ([]byte, error) { + mopts := opts.Options() + s := p.PointerSlice() + var err error + for _, v := range s { + m := asMessage(v.AsValueOf(goType.Elem())) + b = protowire.AppendVarint(b, wiretag) + siz := mopts.Size(m) + b = protowire.AppendVarint(b, uint64(siz)) + before := len(b) + b, err = mopts.MarshalAppend(b, m) + if err != nil { + return b, err + } + if measuredSize := len(b) - before; siz != measuredSize { + return nil, errors.MismatchedSizeCalculation(siz, measuredSize) + } + } + return b, nil +} + +func consumeMessageSlice(b []byte, p pointer, goType reflect.Type, wtyp protowire.Type, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + mp := reflect.New(goType.Elem()) + o, err := opts.Options().UnmarshalState(protoiface.UnmarshalInput{ + Buf: v, + Message: asMessage(mp).ProtoReflect(), + }) + if err != nil { + return out, err + } + p.AppendPointerSlice(pointerOfValue(mp)) + out.n = n + out.initialized = o.Flags&protoiface.UnmarshalInitialized != 0 + return out, nil +} + +func isInitMessageSlice(p pointer, goType reflect.Type) error { + s := p.PointerSlice() + for _, v := range s { + m := asMessage(v.AsValueOf(goType.Elem())) + if err := proto.CheckInitialized(m); err != nil { + return err + } + } + return nil +} + +// Slices of messages + +func sizeMessageSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) int { + mopts := opts.Options() + list := listv.List() + n := 0 + for i, llen := 0, list.Len(); i < llen; i++ { + m := list.Get(i).Message().Interface() + n += protowire.SizeBytes(mopts.Size(m)) + tagsize + } + return n +} + +func appendMessageSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + mopts := opts.Options() + for i, llen := 0, list.Len(); i < llen; i++ { + m := list.Get(i).Message().Interface() + b = protowire.AppendVarint(b, wiretag) + siz := mopts.Size(m) + b = protowire.AppendVarint(b, uint64(siz)) + before := len(b) + var err error + b, err = mopts.MarshalAppend(b, m) + if err != nil { + return b, err + } + if measuredSize := len(b) - before; siz != measuredSize { + return nil, errors.MismatchedSizeCalculation(siz, measuredSize) + } + } + return b, nil +} + +func consumeMessageSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp != protowire.BytesType { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + m := list.NewElement() + o, err := opts.Options().UnmarshalState(protoiface.UnmarshalInput{ + Buf: v, + Message: m.Message(), + }) + if err != nil { + return protoreflect.Value{}, out, err + } + list.Append(m) + out.n = n + out.initialized = o.Flags&protoiface.UnmarshalInitialized != 0 + return listv, out, nil +} + +func isInitMessageSliceValue(listv protoreflect.Value) error { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + m := list.Get(i).Message().Interface() + if err := proto.CheckInitialized(m); err != nil { + return err + } + } + return nil +} + +var coderMessageSliceValue = valueCoderFuncs{ + size: sizeMessageSliceValue, + marshal: appendMessageSliceValue, + unmarshal: consumeMessageSliceValue, + isInit: isInitMessageSliceValue, + merge: mergeMessageListValue, +} + +func sizeGroupSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) int { + mopts := opts.Options() + list := listv.List() + n := 0 + for i, llen := 0, list.Len(); i < llen; i++ { + m := list.Get(i).Message().Interface() + n += 2*tagsize + mopts.Size(m) + } + return n +} + +func appendGroupSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + mopts := opts.Options() + for i, llen := 0, list.Len(); i < llen; i++ { + m := list.Get(i).Message().Interface() + b = protowire.AppendVarint(b, wiretag) // start group + var err error + b, err = mopts.MarshalAppend(b, m) + if err != nil { + return b, err + } + b = protowire.AppendVarint(b, wiretag+1) // end group + } + return b, nil +} + +func consumeGroupSliceValue(b []byte, listv protoreflect.Value, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp != protowire.StartGroupType { + return protoreflect.Value{}, out, errUnknown + } + b, n := protowire.ConsumeGroup(num, b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + m := list.NewElement() + o, err := opts.Options().UnmarshalState(protoiface.UnmarshalInput{ + Buf: b, + Message: m.Message(), + }) + if err != nil { + return protoreflect.Value{}, out, err + } + list.Append(m) + out.n = n + out.initialized = o.Flags&protoiface.UnmarshalInitialized != 0 + return listv, out, nil +} + +var coderGroupSliceValue = valueCoderFuncs{ + size: sizeGroupSliceValue, + marshal: appendGroupSliceValue, + unmarshal: consumeGroupSliceValue, + isInit: isInitMessageSliceValue, + merge: mergeMessageListValue, +} + +func makeGroupSliceFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) pointerCoderFuncs { + num := fd.Number() + if mi := getMessageInfo(ft); mi != nil { + funcs := pointerCoderFuncs{ + size: sizeGroupSliceInfo, + marshal: appendGroupSliceInfo, + unmarshal: consumeGroupSliceInfo, + merge: mergeMessageSlice, + } + if needsInitCheck(mi.Desc) { + funcs.isInit = isInitMessageSliceInfo + } + return funcs + } + return pointerCoderFuncs{ + size: func(p pointer, f *coderFieldInfo, opts marshalOptions) int { + return sizeGroupSlice(p, ft, f.tagsize, opts) + }, + marshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + return appendGroupSlice(b, p, f.wiretag, ft, opts) + }, + unmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) { + return consumeGroupSlice(b, p, num, wtyp, ft, opts) + }, + isInit: func(p pointer, f *coderFieldInfo) error { + return isInitMessageSlice(p, ft) + }, + merge: mergeMessageSlice, + } +} + +func sizeGroupSlice(p pointer, messageType reflect.Type, tagsize int, opts marshalOptions) int { + mopts := opts.Options() + s := p.PointerSlice() + n := 0 + for _, v := range s { + m := asMessage(v.AsValueOf(messageType.Elem())) + n += 2*tagsize + mopts.Size(m) + } + return n +} + +func appendGroupSlice(b []byte, p pointer, wiretag uint64, messageType reflect.Type, opts marshalOptions) ([]byte, error) { + s := p.PointerSlice() + var err error + for _, v := range s { + m := asMessage(v.AsValueOf(messageType.Elem())) + b = protowire.AppendVarint(b, wiretag) // start group + b, err = opts.Options().MarshalAppend(b, m) + if err != nil { + return b, err + } + b = protowire.AppendVarint(b, wiretag+1) // end group + } + return b, nil +} + +func consumeGroupSlice(b []byte, p pointer, num protowire.Number, wtyp protowire.Type, goType reflect.Type, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.StartGroupType { + return out, errUnknown + } + b, n := protowire.ConsumeGroup(num, b) + if n < 0 { + return out, errDecode + } + mp := reflect.New(goType.Elem()) + o, err := opts.Options().UnmarshalState(protoiface.UnmarshalInput{ + Buf: b, + Message: asMessage(mp).ProtoReflect(), + }) + if err != nil { + return out, err + } + p.AppendPointerSlice(pointerOfValue(mp)) + out.n = n + out.initialized = o.Flags&protoiface.UnmarshalInitialized != 0 + return out, nil +} + +func sizeGroupSliceInfo(p pointer, f *coderFieldInfo, opts marshalOptions) int { + s := p.PointerSlice() + n := 0 + for _, v := range s { + n += 2*f.tagsize + f.mi.sizePointer(v, opts) + } + return n +} + +func appendGroupSliceInfo(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := p.PointerSlice() + var err error + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) // start group + b, err = f.mi.marshalAppendPointer(b, v, opts) + if err != nil { + return b, err + } + b = protowire.AppendVarint(b, f.wiretag+1) // end group + } + return b, nil +} + +func consumeGroupSliceInfo(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) { + if wtyp != protowire.StartGroupType { + return unmarshalOutput{}, errUnknown + } + m := reflect.New(f.mi.GoReflectType.Elem()).Interface() + mp := pointerOfIface(m) + out, err := f.mi.unmarshalPointer(b, mp, f.num, opts) + if err != nil { + return out, err + } + p.AppendPointerSlice(mp) + return out, nil +} + +func asMessage(v reflect.Value) protoreflect.ProtoMessage { + if m, ok := v.Interface().(protoreflect.ProtoMessage); ok { + return m + } + return legacyWrapMessage(v).Interface() +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_field_opaque.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_field_opaque.go new file mode 100644 index 0000000..76818ea --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_field_opaque.go @@ -0,0 +1,264 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/reflect/protoreflect" +) + +func makeOpaqueMessageFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) (*MessageInfo, pointerCoderFuncs) { + mi := getMessageInfo(ft) + if mi == nil { + panic(fmt.Sprintf("invalid field: %v: unsupported message type %v", fd.FullName(), ft)) + } + switch fd.Kind() { + case protoreflect.MessageKind: + return mi, pointerCoderFuncs{ + size: sizeOpaqueMessage, + marshal: appendOpaqueMessage, + unmarshal: consumeOpaqueMessage, + isInit: isInitOpaqueMessage, + merge: mergeOpaqueMessage, + } + case protoreflect.GroupKind: + return mi, pointerCoderFuncs{ + size: sizeOpaqueGroup, + marshal: appendOpaqueGroup, + unmarshal: consumeOpaqueGroup, + isInit: isInitOpaqueMessage, + merge: mergeOpaqueMessage, + } + } + panic("unexpected field kind") +} + +func sizeOpaqueMessage(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + return protowire.SizeBytes(f.mi.sizePointer(p.AtomicGetPointer(), opts)) + f.tagsize +} + +func appendOpaqueMessage(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + mp := p.AtomicGetPointer() + calculatedSize := f.mi.sizePointer(mp, opts) + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(calculatedSize)) + before := len(b) + b, err := f.mi.marshalAppendPointer(b, mp, opts) + if measuredSize := len(b) - before; calculatedSize != measuredSize && err == nil { + return nil, errors.MismatchedSizeCalculation(calculatedSize, measuredSize) + } + return b, err +} + +func consumeOpaqueMessage(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + mp := p.AtomicGetPointer() + if mp.IsNil() { + mp = p.AtomicSetPointerIfNil(pointerOfValue(reflect.New(f.mi.GoReflectType.Elem()))) + } + o, err := f.mi.unmarshalPointer(v, mp, 0, opts) + if err != nil { + return out, err + } + out.n = n + out.initialized = o.initialized + return out, nil +} + +func isInitOpaqueMessage(p pointer, f *coderFieldInfo) error { + mp := p.AtomicGetPointer() + if mp.IsNil() { + return nil + } + return f.mi.checkInitializedPointer(mp) +} + +func mergeOpaqueMessage(dst, src pointer, f *coderFieldInfo, opts mergeOptions) { + dstmp := dst.AtomicGetPointer() + if dstmp.IsNil() { + dstmp = dst.AtomicSetPointerIfNil(pointerOfValue(reflect.New(f.mi.GoReflectType.Elem()))) + } + f.mi.mergePointer(dstmp, src.AtomicGetPointer(), opts) +} + +func sizeOpaqueGroup(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + return 2*f.tagsize + f.mi.sizePointer(p.AtomicGetPointer(), opts) +} + +func appendOpaqueGroup(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, f.wiretag) // start group + b, err := f.mi.marshalAppendPointer(b, p.AtomicGetPointer(), opts) + b = protowire.AppendVarint(b, f.wiretag+1) // end group + return b, err +} + +func consumeOpaqueGroup(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.StartGroupType { + return out, errUnknown + } + mp := p.AtomicGetPointer() + if mp.IsNil() { + mp = p.AtomicSetPointerIfNil(pointerOfValue(reflect.New(f.mi.GoReflectType.Elem()))) + } + o, e := f.mi.unmarshalPointer(b, mp, f.num, opts) + return o, e +} + +func makeOpaqueRepeatedMessageFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) (*MessageInfo, pointerCoderFuncs) { + if ft.Kind() != reflect.Ptr || ft.Elem().Kind() != reflect.Slice { + panic(fmt.Sprintf("invalid field: %v: unsupported type for opaque repeated message: %v", fd.FullName(), ft)) + } + mt := ft.Elem().Elem() // *[]*T -> *T + mi := getMessageInfo(mt) + if mi == nil { + panic(fmt.Sprintf("invalid field: %v: unsupported message type %v", fd.FullName(), mt)) + } + switch fd.Kind() { + case protoreflect.MessageKind: + return mi, pointerCoderFuncs{ + size: sizeOpaqueMessageSlice, + marshal: appendOpaqueMessageSlice, + unmarshal: consumeOpaqueMessageSlice, + isInit: isInitOpaqueMessageSlice, + merge: mergeOpaqueMessageSlice, + } + case protoreflect.GroupKind: + return mi, pointerCoderFuncs{ + size: sizeOpaqueGroupSlice, + marshal: appendOpaqueGroupSlice, + unmarshal: consumeOpaqueGroupSlice, + isInit: isInitOpaqueMessageSlice, + merge: mergeOpaqueMessageSlice, + } + } + panic("unexpected field kind") +} + +func sizeOpaqueMessageSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := p.AtomicGetPointer().PointerSlice() + n := 0 + for _, v := range s { + n += protowire.SizeBytes(f.mi.sizePointer(v, opts)) + f.tagsize + } + return n +} + +func appendOpaqueMessageSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := p.AtomicGetPointer().PointerSlice() + var err error + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + siz := f.mi.sizePointer(v, opts) + b = protowire.AppendVarint(b, uint64(siz)) + before := len(b) + b, err = f.mi.marshalAppendPointer(b, v, opts) + if err != nil { + return b, err + } + if measuredSize := len(b) - before; siz != measuredSize { + return nil, errors.MismatchedSizeCalculation(siz, measuredSize) + } + } + return b, nil +} + +func consumeOpaqueMessageSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + mp := pointerOfValue(reflect.New(f.mi.GoReflectType.Elem())) + o, err := f.mi.unmarshalPointer(v, mp, 0, opts) + if err != nil { + return out, err + } + sp := p.AtomicGetPointer() + if sp.IsNil() { + sp = p.AtomicSetPointerIfNil(pointerOfValue(reflect.New(f.ft.Elem()))) + } + sp.AppendPointerSlice(mp) + out.n = n + out.initialized = o.initialized + return out, nil +} + +func isInitOpaqueMessageSlice(p pointer, f *coderFieldInfo) error { + sp := p.AtomicGetPointer() + if sp.IsNil() { + return nil + } + s := sp.PointerSlice() + for _, v := range s { + if err := f.mi.checkInitializedPointer(v); err != nil { + return err + } + } + return nil +} + +func mergeOpaqueMessageSlice(dst, src pointer, f *coderFieldInfo, opts mergeOptions) { + ds := dst.AtomicGetPointer() + if ds.IsNil() { + ds = dst.AtomicSetPointerIfNil(pointerOfValue(reflect.New(f.ft.Elem()))) + } + for _, sp := range src.AtomicGetPointer().PointerSlice() { + dm := pointerOfValue(reflect.New(f.mi.GoReflectType.Elem())) + f.mi.mergePointer(dm, sp, opts) + ds.AppendPointerSlice(dm) + } +} + +func sizeOpaqueGroupSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := p.AtomicGetPointer().PointerSlice() + n := 0 + for _, v := range s { + n += 2*f.tagsize + f.mi.sizePointer(v, opts) + } + return n +} + +func appendOpaqueGroupSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := p.AtomicGetPointer().PointerSlice() + var err error + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) // start group + b, err = f.mi.marshalAppendPointer(b, v, opts) + if err != nil { + return b, err + } + b = protowire.AppendVarint(b, f.wiretag+1) // end group + } + return b, nil +} + +func consumeOpaqueGroupSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.StartGroupType { + return out, errUnknown + } + mp := pointerOfValue(reflect.New(f.mi.GoReflectType.Elem())) + out, err = f.mi.unmarshalPointer(b, mp, f.num, opts) + if err != nil { + return out, err + } + sp := p.AtomicGetPointer() + if sp.IsNil() { + sp = p.AtomicSetPointerIfNil(pointerOfValue(reflect.New(f.ft.Elem()))) + } + sp.AppendPointerSlice(mp) + return out, err +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_gen.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_gen.go new file mode 100644 index 0000000..f55dc01 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_gen.go @@ -0,0 +1,5724 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-types. DO NOT EDIT. + +package impl + +import ( + "math" + "unicode/utf8" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/reflect/protoreflect" +) + +// sizeBool returns the size of wire encoding a bool pointer as a Bool. +func sizeBool(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := *p.Bool() + return f.tagsize + protowire.SizeVarint(protowire.EncodeBool(v)) +} + +// appendBool wire encodes a bool pointer as a Bool. +func appendBool(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Bool() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, protowire.EncodeBool(v)) + return b, nil +} + +// consumeBool wire decodes a bool pointer as a Bool. +func consumeBool(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + *p.Bool() = protowire.DecodeBool(v) + out.n = n + return out, nil +} + +var coderBool = pointerCoderFuncs{ + size: sizeBool, + marshal: appendBool, + unmarshal: consumeBool, + merge: mergeBool, +} + +// sizeBoolNoZero returns the size of wire encoding a bool pointer as a Bool. +// The zero value is not encoded. +func sizeBoolNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := *p.Bool() + if v == false { + return 0 + } + return f.tagsize + protowire.SizeVarint(protowire.EncodeBool(v)) +} + +// appendBoolNoZero wire encodes a bool pointer as a Bool. +// The zero value is not encoded. +func appendBoolNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Bool() + if v == false { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, protowire.EncodeBool(v)) + return b, nil +} + +var coderBoolNoZero = pointerCoderFuncs{ + size: sizeBoolNoZero, + marshal: appendBoolNoZero, + unmarshal: consumeBool, + merge: mergeBoolNoZero, +} + +// sizeBoolPtr returns the size of wire encoding a *bool pointer as a Bool. +// It panics if the pointer is nil. +func sizeBoolPtr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := **p.BoolPtr() + return f.tagsize + protowire.SizeVarint(protowire.EncodeBool(v)) +} + +// appendBoolPtr wire encodes a *bool pointer as a Bool. +// It panics if the pointer is nil. +func appendBoolPtr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := **p.BoolPtr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, protowire.EncodeBool(v)) + return b, nil +} + +// consumeBoolPtr wire decodes a *bool pointer as a Bool. +func consumeBoolPtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + vp := p.BoolPtr() + if *vp == nil { + *vp = new(bool) + } + **vp = protowire.DecodeBool(v) + out.n = n + return out, nil +} + +var coderBoolPtr = pointerCoderFuncs{ + size: sizeBoolPtr, + marshal: appendBoolPtr, + unmarshal: consumeBoolPtr, + merge: mergeBoolPtr, +} + +// sizeBoolSlice returns the size of wire encoding a []bool pointer as a repeated Bool. +func sizeBoolSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.BoolSlice() + for _, v := range s { + size += f.tagsize + protowire.SizeVarint(protowire.EncodeBool(v)) + } + return size +} + +// appendBoolSlice encodes a []bool pointer as a repeated Bool. +func appendBoolSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.BoolSlice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, protowire.EncodeBool(v)) + } + return b, nil +} + +// consumeBoolSlice wire decodes a []bool pointer as a repeated Bool. +func consumeBoolSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.BoolSlice() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + count := 0 + for _, v := range b { + if v < 0x80 { + count++ + } + } + if count > 0 { + p.growBoolSlice(count) + } + s := *sp + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + s = append(s, protowire.DecodeBool(v)) + b = b[n:] + } + *sp = s + out.n = n + return out, nil + } + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + *sp = append(*sp, protowire.DecodeBool(v)) + out.n = n + return out, nil +} + +var coderBoolSlice = pointerCoderFuncs{ + size: sizeBoolSlice, + marshal: appendBoolSlice, + unmarshal: consumeBoolSlice, + merge: mergeBoolSlice, +} + +// sizeBoolPackedSlice returns the size of wire encoding a []bool pointer as a packed repeated Bool. +func sizeBoolPackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.BoolSlice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += protowire.SizeVarint(protowire.EncodeBool(v)) + } + return f.tagsize + protowire.SizeBytes(n) +} + +// appendBoolPackedSlice encodes a []bool pointer as a packed repeated Bool. +func appendBoolPackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.BoolSlice() + if len(s) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := 0 + for _, v := range s { + n += protowire.SizeVarint(protowire.EncodeBool(v)) + } + b = protowire.AppendVarint(b, uint64(n)) + for _, v := range s { + b = protowire.AppendVarint(b, protowire.EncodeBool(v)) + } + return b, nil +} + +var coderBoolPackedSlice = pointerCoderFuncs{ + size: sizeBoolPackedSlice, + marshal: appendBoolPackedSlice, + unmarshal: consumeBoolSlice, + merge: mergeBoolSlice, +} + +// sizeBoolValue returns the size of wire encoding a bool value as a Bool. +func sizeBoolValue(v protoreflect.Value, tagsize int, opts marshalOptions) int { + return tagsize + protowire.SizeVarint(protowire.EncodeBool(v.Bool())) +} + +// appendBoolValue encodes a bool value as a Bool. +func appendBoolValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, protowire.EncodeBool(v.Bool())) + return b, nil +} + +// consumeBoolValue decodes a bool value as a Bool. +func consumeBoolValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + out.n = n + return protoreflect.ValueOfBool(protowire.DecodeBool(v)), out, nil +} + +var coderBoolValue = valueCoderFuncs{ + size: sizeBoolValue, + marshal: appendBoolValue, + unmarshal: consumeBoolValue, + merge: mergeScalarValue, +} + +// sizeBoolSliceValue returns the size of wire encoding a []bool value as a repeated Bool. +func sizeBoolSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + size += tagsize + protowire.SizeVarint(protowire.EncodeBool(v.Bool())) + } + return size +} + +// appendBoolSliceValue encodes a []bool value as a repeated Bool. +func appendBoolSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, protowire.EncodeBool(v.Bool())) + } + return b, nil +} + +// consumeBoolSliceValue wire decodes a []bool value as a repeated Bool. +func consumeBoolSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfBool(protowire.DecodeBool(v))) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfBool(protowire.DecodeBool(v))) + out.n = n + return listv, out, nil +} + +var coderBoolSliceValue = valueCoderFuncs{ + size: sizeBoolSliceValue, + marshal: appendBoolSliceValue, + unmarshal: consumeBoolSliceValue, + merge: mergeListValue, +} + +// sizeBoolPackedSliceValue returns the size of wire encoding a []bool value as a packed repeated Bool. +func sizeBoolPackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := 0 + for i, llen := 0, llen; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(protowire.EncodeBool(v.Bool())) + } + return tagsize + protowire.SizeBytes(n) +} + +// appendBoolPackedSliceValue encodes a []bool value as a packed repeated Bool. +func appendBoolPackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := 0 + for i := 0; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(protowire.EncodeBool(v.Bool())) + } + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, protowire.EncodeBool(v.Bool())) + } + return b, nil +} + +var coderBoolPackedSliceValue = valueCoderFuncs{ + size: sizeBoolPackedSliceValue, + marshal: appendBoolPackedSliceValue, + unmarshal: consumeBoolSliceValue, + merge: mergeListValue, +} + +// sizeEnumValue returns the size of wire encoding a value as a Enum. +func sizeEnumValue(v protoreflect.Value, tagsize int, opts marshalOptions) int { + return tagsize + protowire.SizeVarint(uint64(v.Enum())) +} + +// appendEnumValue encodes a value as a Enum. +func appendEnumValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, uint64(v.Enum())) + return b, nil +} + +// consumeEnumValue decodes a value as a Enum. +func consumeEnumValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + out.n = n + return protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)), out, nil +} + +var coderEnumValue = valueCoderFuncs{ + size: sizeEnumValue, + marshal: appendEnumValue, + unmarshal: consumeEnumValue, + merge: mergeScalarValue, +} + +// sizeEnumSliceValue returns the size of wire encoding a [] value as a repeated Enum. +func sizeEnumSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + size += tagsize + protowire.SizeVarint(uint64(v.Enum())) + } + return size +} + +// appendEnumSliceValue encodes a [] value as a repeated Enum. +func appendEnumSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, uint64(v.Enum())) + } + return b, nil +} + +// consumeEnumSliceValue wire decodes a [] value as a repeated Enum. +func consumeEnumSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfEnum(protoreflect.EnumNumber(v))) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfEnum(protoreflect.EnumNumber(v))) + out.n = n + return listv, out, nil +} + +var coderEnumSliceValue = valueCoderFuncs{ + size: sizeEnumSliceValue, + marshal: appendEnumSliceValue, + unmarshal: consumeEnumSliceValue, + merge: mergeListValue, +} + +// sizeEnumPackedSliceValue returns the size of wire encoding a [] value as a packed repeated Enum. +func sizeEnumPackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := 0 + for i, llen := 0, llen; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(uint64(v.Enum())) + } + return tagsize + protowire.SizeBytes(n) +} + +// appendEnumPackedSliceValue encodes a [] value as a packed repeated Enum. +func appendEnumPackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := 0 + for i := 0; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(uint64(v.Enum())) + } + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, uint64(v.Enum())) + } + return b, nil +} + +var coderEnumPackedSliceValue = valueCoderFuncs{ + size: sizeEnumPackedSliceValue, + marshal: appendEnumPackedSliceValue, + unmarshal: consumeEnumSliceValue, + merge: mergeListValue, +} + +// sizeInt32 returns the size of wire encoding a int32 pointer as a Int32. +func sizeInt32(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := *p.Int32() + return f.tagsize + protowire.SizeVarint(uint64(v)) +} + +// appendInt32 wire encodes a int32 pointer as a Int32. +func appendInt32(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Int32() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(v)) + return b, nil +} + +// consumeInt32 wire decodes a int32 pointer as a Int32. +func consumeInt32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + *p.Int32() = int32(v) + out.n = n + return out, nil +} + +var coderInt32 = pointerCoderFuncs{ + size: sizeInt32, + marshal: appendInt32, + unmarshal: consumeInt32, + merge: mergeInt32, +} + +// sizeInt32NoZero returns the size of wire encoding a int32 pointer as a Int32. +// The zero value is not encoded. +func sizeInt32NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := *p.Int32() + if v == 0 { + return 0 + } + return f.tagsize + protowire.SizeVarint(uint64(v)) +} + +// appendInt32NoZero wire encodes a int32 pointer as a Int32. +// The zero value is not encoded. +func appendInt32NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Int32() + if v == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(v)) + return b, nil +} + +var coderInt32NoZero = pointerCoderFuncs{ + size: sizeInt32NoZero, + marshal: appendInt32NoZero, + unmarshal: consumeInt32, + merge: mergeInt32NoZero, +} + +// sizeInt32Ptr returns the size of wire encoding a *int32 pointer as a Int32. +// It panics if the pointer is nil. +func sizeInt32Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := **p.Int32Ptr() + return f.tagsize + protowire.SizeVarint(uint64(v)) +} + +// appendInt32Ptr wire encodes a *int32 pointer as a Int32. +// It panics if the pointer is nil. +func appendInt32Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := **p.Int32Ptr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(v)) + return b, nil +} + +// consumeInt32Ptr wire decodes a *int32 pointer as a Int32. +func consumeInt32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + vp := p.Int32Ptr() + if *vp == nil { + *vp = new(int32) + } + **vp = int32(v) + out.n = n + return out, nil +} + +var coderInt32Ptr = pointerCoderFuncs{ + size: sizeInt32Ptr, + marshal: appendInt32Ptr, + unmarshal: consumeInt32Ptr, + merge: mergeInt32Ptr, +} + +// sizeInt32Slice returns the size of wire encoding a []int32 pointer as a repeated Int32. +func sizeInt32Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.Int32Slice() + for _, v := range s { + size += f.tagsize + protowire.SizeVarint(uint64(v)) + } + return size +} + +// appendInt32Slice encodes a []int32 pointer as a repeated Int32. +func appendInt32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.Int32Slice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(v)) + } + return b, nil +} + +// consumeInt32Slice wire decodes a []int32 pointer as a repeated Int32. +func consumeInt32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.Int32Slice() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + count := 0 + for _, v := range b { + if v < 0x80 { + count++ + } + } + if count > 0 { + p.growInt32Slice(count) + } + s := *sp + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + s = append(s, int32(v)) + b = b[n:] + } + *sp = s + out.n = n + return out, nil + } + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + *sp = append(*sp, int32(v)) + out.n = n + return out, nil +} + +var coderInt32Slice = pointerCoderFuncs{ + size: sizeInt32Slice, + marshal: appendInt32Slice, + unmarshal: consumeInt32Slice, + merge: mergeInt32Slice, +} + +// sizeInt32PackedSlice returns the size of wire encoding a []int32 pointer as a packed repeated Int32. +func sizeInt32PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.Int32Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += protowire.SizeVarint(uint64(v)) + } + return f.tagsize + protowire.SizeBytes(n) +} + +// appendInt32PackedSlice encodes a []int32 pointer as a packed repeated Int32. +func appendInt32PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.Int32Slice() + if len(s) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := 0 + for _, v := range s { + n += protowire.SizeVarint(uint64(v)) + } + b = protowire.AppendVarint(b, uint64(n)) + for _, v := range s { + b = protowire.AppendVarint(b, uint64(v)) + } + return b, nil +} + +var coderInt32PackedSlice = pointerCoderFuncs{ + size: sizeInt32PackedSlice, + marshal: appendInt32PackedSlice, + unmarshal: consumeInt32Slice, + merge: mergeInt32Slice, +} + +// sizeInt32Value returns the size of wire encoding a int32 value as a Int32. +func sizeInt32Value(v protoreflect.Value, tagsize int, opts marshalOptions) int { + return tagsize + protowire.SizeVarint(uint64(int32(v.Int()))) +} + +// appendInt32Value encodes a int32 value as a Int32. +func appendInt32Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, uint64(int32(v.Int()))) + return b, nil +} + +// consumeInt32Value decodes a int32 value as a Int32. +func consumeInt32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + out.n = n + return protoreflect.ValueOfInt32(int32(v)), out, nil +} + +var coderInt32Value = valueCoderFuncs{ + size: sizeInt32Value, + marshal: appendInt32Value, + unmarshal: consumeInt32Value, + merge: mergeScalarValue, +} + +// sizeInt32SliceValue returns the size of wire encoding a []int32 value as a repeated Int32. +func sizeInt32SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + size += tagsize + protowire.SizeVarint(uint64(int32(v.Int()))) + } + return size +} + +// appendInt32SliceValue encodes a []int32 value as a repeated Int32. +func appendInt32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, uint64(int32(v.Int()))) + } + return b, nil +} + +// consumeInt32SliceValue wire decodes a []int32 value as a repeated Int32. +func consumeInt32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfInt32(int32(v))) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfInt32(int32(v))) + out.n = n + return listv, out, nil +} + +var coderInt32SliceValue = valueCoderFuncs{ + size: sizeInt32SliceValue, + marshal: appendInt32SliceValue, + unmarshal: consumeInt32SliceValue, + merge: mergeListValue, +} + +// sizeInt32PackedSliceValue returns the size of wire encoding a []int32 value as a packed repeated Int32. +func sizeInt32PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := 0 + for i, llen := 0, llen; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(uint64(int32(v.Int()))) + } + return tagsize + protowire.SizeBytes(n) +} + +// appendInt32PackedSliceValue encodes a []int32 value as a packed repeated Int32. +func appendInt32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := 0 + for i := 0; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(uint64(int32(v.Int()))) + } + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, uint64(int32(v.Int()))) + } + return b, nil +} + +var coderInt32PackedSliceValue = valueCoderFuncs{ + size: sizeInt32PackedSliceValue, + marshal: appendInt32PackedSliceValue, + unmarshal: consumeInt32SliceValue, + merge: mergeListValue, +} + +// sizeSint32 returns the size of wire encoding a int32 pointer as a Sint32. +func sizeSint32(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := *p.Int32() + return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(v))) +} + +// appendSint32 wire encodes a int32 pointer as a Sint32. +func appendSint32(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Int32() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v))) + return b, nil +} + +// consumeSint32 wire decodes a int32 pointer as a Sint32. +func consumeSint32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + *p.Int32() = int32(protowire.DecodeZigZag(v & math.MaxUint32)) + out.n = n + return out, nil +} + +var coderSint32 = pointerCoderFuncs{ + size: sizeSint32, + marshal: appendSint32, + unmarshal: consumeSint32, + merge: mergeInt32, +} + +// sizeSint32NoZero returns the size of wire encoding a int32 pointer as a Sint32. +// The zero value is not encoded. +func sizeSint32NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := *p.Int32() + if v == 0 { + return 0 + } + return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(v))) +} + +// appendSint32NoZero wire encodes a int32 pointer as a Sint32. +// The zero value is not encoded. +func appendSint32NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Int32() + if v == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v))) + return b, nil +} + +var coderSint32NoZero = pointerCoderFuncs{ + size: sizeSint32NoZero, + marshal: appendSint32NoZero, + unmarshal: consumeSint32, + merge: mergeInt32NoZero, +} + +// sizeSint32Ptr returns the size of wire encoding a *int32 pointer as a Sint32. +// It panics if the pointer is nil. +func sizeSint32Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := **p.Int32Ptr() + return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(v))) +} + +// appendSint32Ptr wire encodes a *int32 pointer as a Sint32. +// It panics if the pointer is nil. +func appendSint32Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := **p.Int32Ptr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v))) + return b, nil +} + +// consumeSint32Ptr wire decodes a *int32 pointer as a Sint32. +func consumeSint32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + vp := p.Int32Ptr() + if *vp == nil { + *vp = new(int32) + } + **vp = int32(protowire.DecodeZigZag(v & math.MaxUint32)) + out.n = n + return out, nil +} + +var coderSint32Ptr = pointerCoderFuncs{ + size: sizeSint32Ptr, + marshal: appendSint32Ptr, + unmarshal: consumeSint32Ptr, + merge: mergeInt32Ptr, +} + +// sizeSint32Slice returns the size of wire encoding a []int32 pointer as a repeated Sint32. +func sizeSint32Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.Int32Slice() + for _, v := range s { + size += f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(v))) + } + return size +} + +// appendSint32Slice encodes a []int32 pointer as a repeated Sint32. +func appendSint32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.Int32Slice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v))) + } + return b, nil +} + +// consumeSint32Slice wire decodes a []int32 pointer as a repeated Sint32. +func consumeSint32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.Int32Slice() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + count := 0 + for _, v := range b { + if v < 0x80 { + count++ + } + } + if count > 0 { + p.growInt32Slice(count) + } + s := *sp + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + s = append(s, int32(protowire.DecodeZigZag(v&math.MaxUint32))) + b = b[n:] + } + *sp = s + out.n = n + return out, nil + } + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + *sp = append(*sp, int32(protowire.DecodeZigZag(v&math.MaxUint32))) + out.n = n + return out, nil +} + +var coderSint32Slice = pointerCoderFuncs{ + size: sizeSint32Slice, + marshal: appendSint32Slice, + unmarshal: consumeSint32Slice, + merge: mergeInt32Slice, +} + +// sizeSint32PackedSlice returns the size of wire encoding a []int32 pointer as a packed repeated Sint32. +func sizeSint32PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.Int32Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += protowire.SizeVarint(protowire.EncodeZigZag(int64(v))) + } + return f.tagsize + protowire.SizeBytes(n) +} + +// appendSint32PackedSlice encodes a []int32 pointer as a packed repeated Sint32. +func appendSint32PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.Int32Slice() + if len(s) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := 0 + for _, v := range s { + n += protowire.SizeVarint(protowire.EncodeZigZag(int64(v))) + } + b = protowire.AppendVarint(b, uint64(n)) + for _, v := range s { + b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(v))) + } + return b, nil +} + +var coderSint32PackedSlice = pointerCoderFuncs{ + size: sizeSint32PackedSlice, + marshal: appendSint32PackedSlice, + unmarshal: consumeSint32Slice, + merge: mergeInt32Slice, +} + +// sizeSint32Value returns the size of wire encoding a int32 value as a Sint32. +func sizeSint32Value(v protoreflect.Value, tagsize int, opts marshalOptions) int { + return tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int())))) +} + +// appendSint32Value encodes a int32 value as a Sint32. +func appendSint32Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(int32(v.Int())))) + return b, nil +} + +// consumeSint32Value decodes a int32 value as a Sint32. +func consumeSint32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + out.n = n + return protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32))), out, nil +} + +var coderSint32Value = valueCoderFuncs{ + size: sizeSint32Value, + marshal: appendSint32Value, + unmarshal: consumeSint32Value, + merge: mergeScalarValue, +} + +// sizeSint32SliceValue returns the size of wire encoding a []int32 value as a repeated Sint32. +func sizeSint32SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + size += tagsize + protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int())))) + } + return size +} + +// appendSint32SliceValue encodes a []int32 value as a repeated Sint32. +func appendSint32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(int32(v.Int())))) + } + return b, nil +} + +// consumeSint32SliceValue wire decodes a []int32 value as a repeated Sint32. +func consumeSint32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32)))) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32)))) + out.n = n + return listv, out, nil +} + +var coderSint32SliceValue = valueCoderFuncs{ + size: sizeSint32SliceValue, + marshal: appendSint32SliceValue, + unmarshal: consumeSint32SliceValue, + merge: mergeListValue, +} + +// sizeSint32PackedSliceValue returns the size of wire encoding a []int32 value as a packed repeated Sint32. +func sizeSint32PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := 0 + for i, llen := 0, llen; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int())))) + } + return tagsize + protowire.SizeBytes(n) +} + +// appendSint32PackedSliceValue encodes a []int32 value as a packed repeated Sint32. +func appendSint32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := 0 + for i := 0; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int())))) + } + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(int32(v.Int())))) + } + return b, nil +} + +var coderSint32PackedSliceValue = valueCoderFuncs{ + size: sizeSint32PackedSliceValue, + marshal: appendSint32PackedSliceValue, + unmarshal: consumeSint32SliceValue, + merge: mergeListValue, +} + +// sizeUint32 returns the size of wire encoding a uint32 pointer as a Uint32. +func sizeUint32(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := *p.Uint32() + return f.tagsize + protowire.SizeVarint(uint64(v)) +} + +// appendUint32 wire encodes a uint32 pointer as a Uint32. +func appendUint32(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Uint32() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(v)) + return b, nil +} + +// consumeUint32 wire decodes a uint32 pointer as a Uint32. +func consumeUint32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + *p.Uint32() = uint32(v) + out.n = n + return out, nil +} + +var coderUint32 = pointerCoderFuncs{ + size: sizeUint32, + marshal: appendUint32, + unmarshal: consumeUint32, + merge: mergeUint32, +} + +// sizeUint32NoZero returns the size of wire encoding a uint32 pointer as a Uint32. +// The zero value is not encoded. +func sizeUint32NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := *p.Uint32() + if v == 0 { + return 0 + } + return f.tagsize + protowire.SizeVarint(uint64(v)) +} + +// appendUint32NoZero wire encodes a uint32 pointer as a Uint32. +// The zero value is not encoded. +func appendUint32NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Uint32() + if v == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(v)) + return b, nil +} + +var coderUint32NoZero = pointerCoderFuncs{ + size: sizeUint32NoZero, + marshal: appendUint32NoZero, + unmarshal: consumeUint32, + merge: mergeUint32NoZero, +} + +// sizeUint32Ptr returns the size of wire encoding a *uint32 pointer as a Uint32. +// It panics if the pointer is nil. +func sizeUint32Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := **p.Uint32Ptr() + return f.tagsize + protowire.SizeVarint(uint64(v)) +} + +// appendUint32Ptr wire encodes a *uint32 pointer as a Uint32. +// It panics if the pointer is nil. +func appendUint32Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := **p.Uint32Ptr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(v)) + return b, nil +} + +// consumeUint32Ptr wire decodes a *uint32 pointer as a Uint32. +func consumeUint32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + vp := p.Uint32Ptr() + if *vp == nil { + *vp = new(uint32) + } + **vp = uint32(v) + out.n = n + return out, nil +} + +var coderUint32Ptr = pointerCoderFuncs{ + size: sizeUint32Ptr, + marshal: appendUint32Ptr, + unmarshal: consumeUint32Ptr, + merge: mergeUint32Ptr, +} + +// sizeUint32Slice returns the size of wire encoding a []uint32 pointer as a repeated Uint32. +func sizeUint32Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.Uint32Slice() + for _, v := range s { + size += f.tagsize + protowire.SizeVarint(uint64(v)) + } + return size +} + +// appendUint32Slice encodes a []uint32 pointer as a repeated Uint32. +func appendUint32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.Uint32Slice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(v)) + } + return b, nil +} + +// consumeUint32Slice wire decodes a []uint32 pointer as a repeated Uint32. +func consumeUint32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.Uint32Slice() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + count := 0 + for _, v := range b { + if v < 0x80 { + count++ + } + } + if count > 0 { + p.growUint32Slice(count) + } + s := *sp + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + s = append(s, uint32(v)) + b = b[n:] + } + *sp = s + out.n = n + return out, nil + } + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + *sp = append(*sp, uint32(v)) + out.n = n + return out, nil +} + +var coderUint32Slice = pointerCoderFuncs{ + size: sizeUint32Slice, + marshal: appendUint32Slice, + unmarshal: consumeUint32Slice, + merge: mergeUint32Slice, +} + +// sizeUint32PackedSlice returns the size of wire encoding a []uint32 pointer as a packed repeated Uint32. +func sizeUint32PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.Uint32Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += protowire.SizeVarint(uint64(v)) + } + return f.tagsize + protowire.SizeBytes(n) +} + +// appendUint32PackedSlice encodes a []uint32 pointer as a packed repeated Uint32. +func appendUint32PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.Uint32Slice() + if len(s) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := 0 + for _, v := range s { + n += protowire.SizeVarint(uint64(v)) + } + b = protowire.AppendVarint(b, uint64(n)) + for _, v := range s { + b = protowire.AppendVarint(b, uint64(v)) + } + return b, nil +} + +var coderUint32PackedSlice = pointerCoderFuncs{ + size: sizeUint32PackedSlice, + marshal: appendUint32PackedSlice, + unmarshal: consumeUint32Slice, + merge: mergeUint32Slice, +} + +// sizeUint32Value returns the size of wire encoding a uint32 value as a Uint32. +func sizeUint32Value(v protoreflect.Value, tagsize int, opts marshalOptions) int { + return tagsize + protowire.SizeVarint(uint64(uint32(v.Uint()))) +} + +// appendUint32Value encodes a uint32 value as a Uint32. +func appendUint32Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, uint64(uint32(v.Uint()))) + return b, nil +} + +// consumeUint32Value decodes a uint32 value as a Uint32. +func consumeUint32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + out.n = n + return protoreflect.ValueOfUint32(uint32(v)), out, nil +} + +var coderUint32Value = valueCoderFuncs{ + size: sizeUint32Value, + marshal: appendUint32Value, + unmarshal: consumeUint32Value, + merge: mergeScalarValue, +} + +// sizeUint32SliceValue returns the size of wire encoding a []uint32 value as a repeated Uint32. +func sizeUint32SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + size += tagsize + protowire.SizeVarint(uint64(uint32(v.Uint()))) + } + return size +} + +// appendUint32SliceValue encodes a []uint32 value as a repeated Uint32. +func appendUint32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, uint64(uint32(v.Uint()))) + } + return b, nil +} + +// consumeUint32SliceValue wire decodes a []uint32 value as a repeated Uint32. +func consumeUint32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfUint32(uint32(v))) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfUint32(uint32(v))) + out.n = n + return listv, out, nil +} + +var coderUint32SliceValue = valueCoderFuncs{ + size: sizeUint32SliceValue, + marshal: appendUint32SliceValue, + unmarshal: consumeUint32SliceValue, + merge: mergeListValue, +} + +// sizeUint32PackedSliceValue returns the size of wire encoding a []uint32 value as a packed repeated Uint32. +func sizeUint32PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := 0 + for i, llen := 0, llen; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(uint64(uint32(v.Uint()))) + } + return tagsize + protowire.SizeBytes(n) +} + +// appendUint32PackedSliceValue encodes a []uint32 value as a packed repeated Uint32. +func appendUint32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := 0 + for i := 0; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(uint64(uint32(v.Uint()))) + } + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, uint64(uint32(v.Uint()))) + } + return b, nil +} + +var coderUint32PackedSliceValue = valueCoderFuncs{ + size: sizeUint32PackedSliceValue, + marshal: appendUint32PackedSliceValue, + unmarshal: consumeUint32SliceValue, + merge: mergeListValue, +} + +// sizeInt64 returns the size of wire encoding a int64 pointer as a Int64. +func sizeInt64(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := *p.Int64() + return f.tagsize + protowire.SizeVarint(uint64(v)) +} + +// appendInt64 wire encodes a int64 pointer as a Int64. +func appendInt64(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Int64() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(v)) + return b, nil +} + +// consumeInt64 wire decodes a int64 pointer as a Int64. +func consumeInt64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + *p.Int64() = int64(v) + out.n = n + return out, nil +} + +var coderInt64 = pointerCoderFuncs{ + size: sizeInt64, + marshal: appendInt64, + unmarshal: consumeInt64, + merge: mergeInt64, +} + +// sizeInt64NoZero returns the size of wire encoding a int64 pointer as a Int64. +// The zero value is not encoded. +func sizeInt64NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := *p.Int64() + if v == 0 { + return 0 + } + return f.tagsize + protowire.SizeVarint(uint64(v)) +} + +// appendInt64NoZero wire encodes a int64 pointer as a Int64. +// The zero value is not encoded. +func appendInt64NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Int64() + if v == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(v)) + return b, nil +} + +var coderInt64NoZero = pointerCoderFuncs{ + size: sizeInt64NoZero, + marshal: appendInt64NoZero, + unmarshal: consumeInt64, + merge: mergeInt64NoZero, +} + +// sizeInt64Ptr returns the size of wire encoding a *int64 pointer as a Int64. +// It panics if the pointer is nil. +func sizeInt64Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := **p.Int64Ptr() + return f.tagsize + protowire.SizeVarint(uint64(v)) +} + +// appendInt64Ptr wire encodes a *int64 pointer as a Int64. +// It panics if the pointer is nil. +func appendInt64Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := **p.Int64Ptr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(v)) + return b, nil +} + +// consumeInt64Ptr wire decodes a *int64 pointer as a Int64. +func consumeInt64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + vp := p.Int64Ptr() + if *vp == nil { + *vp = new(int64) + } + **vp = int64(v) + out.n = n + return out, nil +} + +var coderInt64Ptr = pointerCoderFuncs{ + size: sizeInt64Ptr, + marshal: appendInt64Ptr, + unmarshal: consumeInt64Ptr, + merge: mergeInt64Ptr, +} + +// sizeInt64Slice returns the size of wire encoding a []int64 pointer as a repeated Int64. +func sizeInt64Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.Int64Slice() + for _, v := range s { + size += f.tagsize + protowire.SizeVarint(uint64(v)) + } + return size +} + +// appendInt64Slice encodes a []int64 pointer as a repeated Int64. +func appendInt64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.Int64Slice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(v)) + } + return b, nil +} + +// consumeInt64Slice wire decodes a []int64 pointer as a repeated Int64. +func consumeInt64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.Int64Slice() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + count := 0 + for _, v := range b { + if v < 0x80 { + count++ + } + } + if count > 0 { + p.growInt64Slice(count) + } + s := *sp + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + s = append(s, int64(v)) + b = b[n:] + } + *sp = s + out.n = n + return out, nil + } + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + *sp = append(*sp, int64(v)) + out.n = n + return out, nil +} + +var coderInt64Slice = pointerCoderFuncs{ + size: sizeInt64Slice, + marshal: appendInt64Slice, + unmarshal: consumeInt64Slice, + merge: mergeInt64Slice, +} + +// sizeInt64PackedSlice returns the size of wire encoding a []int64 pointer as a packed repeated Int64. +func sizeInt64PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.Int64Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += protowire.SizeVarint(uint64(v)) + } + return f.tagsize + protowire.SizeBytes(n) +} + +// appendInt64PackedSlice encodes a []int64 pointer as a packed repeated Int64. +func appendInt64PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.Int64Slice() + if len(s) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := 0 + for _, v := range s { + n += protowire.SizeVarint(uint64(v)) + } + b = protowire.AppendVarint(b, uint64(n)) + for _, v := range s { + b = protowire.AppendVarint(b, uint64(v)) + } + return b, nil +} + +var coderInt64PackedSlice = pointerCoderFuncs{ + size: sizeInt64PackedSlice, + marshal: appendInt64PackedSlice, + unmarshal: consumeInt64Slice, + merge: mergeInt64Slice, +} + +// sizeInt64Value returns the size of wire encoding a int64 value as a Int64. +func sizeInt64Value(v protoreflect.Value, tagsize int, opts marshalOptions) int { + return tagsize + protowire.SizeVarint(uint64(v.Int())) +} + +// appendInt64Value encodes a int64 value as a Int64. +func appendInt64Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, uint64(v.Int())) + return b, nil +} + +// consumeInt64Value decodes a int64 value as a Int64. +func consumeInt64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + out.n = n + return protoreflect.ValueOfInt64(int64(v)), out, nil +} + +var coderInt64Value = valueCoderFuncs{ + size: sizeInt64Value, + marshal: appendInt64Value, + unmarshal: consumeInt64Value, + merge: mergeScalarValue, +} + +// sizeInt64SliceValue returns the size of wire encoding a []int64 value as a repeated Int64. +func sizeInt64SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + size += tagsize + protowire.SizeVarint(uint64(v.Int())) + } + return size +} + +// appendInt64SliceValue encodes a []int64 value as a repeated Int64. +func appendInt64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, uint64(v.Int())) + } + return b, nil +} + +// consumeInt64SliceValue wire decodes a []int64 value as a repeated Int64. +func consumeInt64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfInt64(int64(v))) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfInt64(int64(v))) + out.n = n + return listv, out, nil +} + +var coderInt64SliceValue = valueCoderFuncs{ + size: sizeInt64SliceValue, + marshal: appendInt64SliceValue, + unmarshal: consumeInt64SliceValue, + merge: mergeListValue, +} + +// sizeInt64PackedSliceValue returns the size of wire encoding a []int64 value as a packed repeated Int64. +func sizeInt64PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := 0 + for i, llen := 0, llen; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(uint64(v.Int())) + } + return tagsize + protowire.SizeBytes(n) +} + +// appendInt64PackedSliceValue encodes a []int64 value as a packed repeated Int64. +func appendInt64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := 0 + for i := 0; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(uint64(v.Int())) + } + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, uint64(v.Int())) + } + return b, nil +} + +var coderInt64PackedSliceValue = valueCoderFuncs{ + size: sizeInt64PackedSliceValue, + marshal: appendInt64PackedSliceValue, + unmarshal: consumeInt64SliceValue, + merge: mergeListValue, +} + +// sizeSint64 returns the size of wire encoding a int64 pointer as a Sint64. +func sizeSint64(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := *p.Int64() + return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v)) +} + +// appendSint64 wire encodes a int64 pointer as a Sint64. +func appendSint64(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Int64() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(v)) + return b, nil +} + +// consumeSint64 wire decodes a int64 pointer as a Sint64. +func consumeSint64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + *p.Int64() = protowire.DecodeZigZag(v) + out.n = n + return out, nil +} + +var coderSint64 = pointerCoderFuncs{ + size: sizeSint64, + marshal: appendSint64, + unmarshal: consumeSint64, + merge: mergeInt64, +} + +// sizeSint64NoZero returns the size of wire encoding a int64 pointer as a Sint64. +// The zero value is not encoded. +func sizeSint64NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := *p.Int64() + if v == 0 { + return 0 + } + return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v)) +} + +// appendSint64NoZero wire encodes a int64 pointer as a Sint64. +// The zero value is not encoded. +func appendSint64NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Int64() + if v == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(v)) + return b, nil +} + +var coderSint64NoZero = pointerCoderFuncs{ + size: sizeSint64NoZero, + marshal: appendSint64NoZero, + unmarshal: consumeSint64, + merge: mergeInt64NoZero, +} + +// sizeSint64Ptr returns the size of wire encoding a *int64 pointer as a Sint64. +// It panics if the pointer is nil. +func sizeSint64Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := **p.Int64Ptr() + return f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v)) +} + +// appendSint64Ptr wire encodes a *int64 pointer as a Sint64. +// It panics if the pointer is nil. +func appendSint64Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := **p.Int64Ptr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(v)) + return b, nil +} + +// consumeSint64Ptr wire decodes a *int64 pointer as a Sint64. +func consumeSint64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + vp := p.Int64Ptr() + if *vp == nil { + *vp = new(int64) + } + **vp = protowire.DecodeZigZag(v) + out.n = n + return out, nil +} + +var coderSint64Ptr = pointerCoderFuncs{ + size: sizeSint64Ptr, + marshal: appendSint64Ptr, + unmarshal: consumeSint64Ptr, + merge: mergeInt64Ptr, +} + +// sizeSint64Slice returns the size of wire encoding a []int64 pointer as a repeated Sint64. +func sizeSint64Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.Int64Slice() + for _, v := range s { + size += f.tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v)) + } + return size +} + +// appendSint64Slice encodes a []int64 pointer as a repeated Sint64. +func appendSint64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.Int64Slice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(v)) + } + return b, nil +} + +// consumeSint64Slice wire decodes a []int64 pointer as a repeated Sint64. +func consumeSint64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.Int64Slice() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + count := 0 + for _, v := range b { + if v < 0x80 { + count++ + } + } + if count > 0 { + p.growInt64Slice(count) + } + s := *sp + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + s = append(s, protowire.DecodeZigZag(v)) + b = b[n:] + } + *sp = s + out.n = n + return out, nil + } + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + *sp = append(*sp, protowire.DecodeZigZag(v)) + out.n = n + return out, nil +} + +var coderSint64Slice = pointerCoderFuncs{ + size: sizeSint64Slice, + marshal: appendSint64Slice, + unmarshal: consumeSint64Slice, + merge: mergeInt64Slice, +} + +// sizeSint64PackedSlice returns the size of wire encoding a []int64 pointer as a packed repeated Sint64. +func sizeSint64PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.Int64Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += protowire.SizeVarint(protowire.EncodeZigZag(v)) + } + return f.tagsize + protowire.SizeBytes(n) +} + +// appendSint64PackedSlice encodes a []int64 pointer as a packed repeated Sint64. +func appendSint64PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.Int64Slice() + if len(s) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := 0 + for _, v := range s { + n += protowire.SizeVarint(protowire.EncodeZigZag(v)) + } + b = protowire.AppendVarint(b, uint64(n)) + for _, v := range s { + b = protowire.AppendVarint(b, protowire.EncodeZigZag(v)) + } + return b, nil +} + +var coderSint64PackedSlice = pointerCoderFuncs{ + size: sizeSint64PackedSlice, + marshal: appendSint64PackedSlice, + unmarshal: consumeSint64Slice, + merge: mergeInt64Slice, +} + +// sizeSint64Value returns the size of wire encoding a int64 value as a Sint64. +func sizeSint64Value(v protoreflect.Value, tagsize int, opts marshalOptions) int { + return tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v.Int())) +} + +// appendSint64Value encodes a int64 value as a Sint64. +func appendSint64Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(v.Int())) + return b, nil +} + +// consumeSint64Value decodes a int64 value as a Sint64. +func consumeSint64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + out.n = n + return protoreflect.ValueOfInt64(protowire.DecodeZigZag(v)), out, nil +} + +var coderSint64Value = valueCoderFuncs{ + size: sizeSint64Value, + marshal: appendSint64Value, + unmarshal: consumeSint64Value, + merge: mergeScalarValue, +} + +// sizeSint64SliceValue returns the size of wire encoding a []int64 value as a repeated Sint64. +func sizeSint64SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + size += tagsize + protowire.SizeVarint(protowire.EncodeZigZag(v.Int())) + } + return size +} + +// appendSint64SliceValue encodes a []int64 value as a repeated Sint64. +func appendSint64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(v.Int())) + } + return b, nil +} + +// consumeSint64SliceValue wire decodes a []int64 value as a repeated Sint64. +func consumeSint64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfInt64(protowire.DecodeZigZag(v))) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfInt64(protowire.DecodeZigZag(v))) + out.n = n + return listv, out, nil +} + +var coderSint64SliceValue = valueCoderFuncs{ + size: sizeSint64SliceValue, + marshal: appendSint64SliceValue, + unmarshal: consumeSint64SliceValue, + merge: mergeListValue, +} + +// sizeSint64PackedSliceValue returns the size of wire encoding a []int64 value as a packed repeated Sint64. +func sizeSint64PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := 0 + for i, llen := 0, llen; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(protowire.EncodeZigZag(v.Int())) + } + return tagsize + protowire.SizeBytes(n) +} + +// appendSint64PackedSliceValue encodes a []int64 value as a packed repeated Sint64. +func appendSint64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := 0 + for i := 0; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(protowire.EncodeZigZag(v.Int())) + } + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, protowire.EncodeZigZag(v.Int())) + } + return b, nil +} + +var coderSint64PackedSliceValue = valueCoderFuncs{ + size: sizeSint64PackedSliceValue, + marshal: appendSint64PackedSliceValue, + unmarshal: consumeSint64SliceValue, + merge: mergeListValue, +} + +// sizeUint64 returns the size of wire encoding a uint64 pointer as a Uint64. +func sizeUint64(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := *p.Uint64() + return f.tagsize + protowire.SizeVarint(v) +} + +// appendUint64 wire encodes a uint64 pointer as a Uint64. +func appendUint64(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Uint64() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, v) + return b, nil +} + +// consumeUint64 wire decodes a uint64 pointer as a Uint64. +func consumeUint64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + *p.Uint64() = v + out.n = n + return out, nil +} + +var coderUint64 = pointerCoderFuncs{ + size: sizeUint64, + marshal: appendUint64, + unmarshal: consumeUint64, + merge: mergeUint64, +} + +// sizeUint64NoZero returns the size of wire encoding a uint64 pointer as a Uint64. +// The zero value is not encoded. +func sizeUint64NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := *p.Uint64() + if v == 0 { + return 0 + } + return f.tagsize + protowire.SizeVarint(v) +} + +// appendUint64NoZero wire encodes a uint64 pointer as a Uint64. +// The zero value is not encoded. +func appendUint64NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Uint64() + if v == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, v) + return b, nil +} + +var coderUint64NoZero = pointerCoderFuncs{ + size: sizeUint64NoZero, + marshal: appendUint64NoZero, + unmarshal: consumeUint64, + merge: mergeUint64NoZero, +} + +// sizeUint64Ptr returns the size of wire encoding a *uint64 pointer as a Uint64. +// It panics if the pointer is nil. +func sizeUint64Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := **p.Uint64Ptr() + return f.tagsize + protowire.SizeVarint(v) +} + +// appendUint64Ptr wire encodes a *uint64 pointer as a Uint64. +// It panics if the pointer is nil. +func appendUint64Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := **p.Uint64Ptr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, v) + return b, nil +} + +// consumeUint64Ptr wire decodes a *uint64 pointer as a Uint64. +func consumeUint64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + vp := p.Uint64Ptr() + if *vp == nil { + *vp = new(uint64) + } + **vp = v + out.n = n + return out, nil +} + +var coderUint64Ptr = pointerCoderFuncs{ + size: sizeUint64Ptr, + marshal: appendUint64Ptr, + unmarshal: consumeUint64Ptr, + merge: mergeUint64Ptr, +} + +// sizeUint64Slice returns the size of wire encoding a []uint64 pointer as a repeated Uint64. +func sizeUint64Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.Uint64Slice() + for _, v := range s { + size += f.tagsize + protowire.SizeVarint(v) + } + return size +} + +// appendUint64Slice encodes a []uint64 pointer as a repeated Uint64. +func appendUint64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.Uint64Slice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, v) + } + return b, nil +} + +// consumeUint64Slice wire decodes a []uint64 pointer as a repeated Uint64. +func consumeUint64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.Uint64Slice() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + count := 0 + for _, v := range b { + if v < 0x80 { + count++ + } + } + if count > 0 { + p.growUint64Slice(count) + } + s := *sp + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + s = append(s, v) + b = b[n:] + } + *sp = s + out.n = n + return out, nil + } + if wtyp != protowire.VarintType { + return out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return out, errDecode + } + *sp = append(*sp, v) + out.n = n + return out, nil +} + +var coderUint64Slice = pointerCoderFuncs{ + size: sizeUint64Slice, + marshal: appendUint64Slice, + unmarshal: consumeUint64Slice, + merge: mergeUint64Slice, +} + +// sizeUint64PackedSlice returns the size of wire encoding a []uint64 pointer as a packed repeated Uint64. +func sizeUint64PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.Uint64Slice() + if len(s) == 0 { + return 0 + } + n := 0 + for _, v := range s { + n += protowire.SizeVarint(v) + } + return f.tagsize + protowire.SizeBytes(n) +} + +// appendUint64PackedSlice encodes a []uint64 pointer as a packed repeated Uint64. +func appendUint64PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.Uint64Slice() + if len(s) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := 0 + for _, v := range s { + n += protowire.SizeVarint(v) + } + b = protowire.AppendVarint(b, uint64(n)) + for _, v := range s { + b = protowire.AppendVarint(b, v) + } + return b, nil +} + +var coderUint64PackedSlice = pointerCoderFuncs{ + size: sizeUint64PackedSlice, + marshal: appendUint64PackedSlice, + unmarshal: consumeUint64Slice, + merge: mergeUint64Slice, +} + +// sizeUint64Value returns the size of wire encoding a uint64 value as a Uint64. +func sizeUint64Value(v protoreflect.Value, tagsize int, opts marshalOptions) int { + return tagsize + protowire.SizeVarint(v.Uint()) +} + +// appendUint64Value encodes a uint64 value as a Uint64. +func appendUint64Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, v.Uint()) + return b, nil +} + +// consumeUint64Value decodes a uint64 value as a Uint64. +func consumeUint64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + out.n = n + return protoreflect.ValueOfUint64(v), out, nil +} + +var coderUint64Value = valueCoderFuncs{ + size: sizeUint64Value, + marshal: appendUint64Value, + unmarshal: consumeUint64Value, + merge: mergeScalarValue, +} + +// sizeUint64SliceValue returns the size of wire encoding a []uint64 value as a repeated Uint64. +func sizeUint64SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + size += tagsize + protowire.SizeVarint(v.Uint()) + } + return size +} + +// appendUint64SliceValue encodes a []uint64 value as a repeated Uint64. +func appendUint64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendVarint(b, v.Uint()) + } + return b, nil +} + +// consumeUint64SliceValue wire decodes a []uint64 value as a repeated Uint64. +func consumeUint64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + for len(b) > 0 { + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfUint64(v)) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.VarintType { + return protoreflect.Value{}, out, errUnknown + } + var v uint64 + var n int + if len(b) >= 1 && b[0] < 0x80 { + v = uint64(b[0]) + n = 1 + } else if len(b) >= 2 && b[1] < 128 { + v = uint64(b[0]&0x7f) + uint64(b[1])<<7 + n = 2 + } else { + v, n = protowire.ConsumeVarint(b) + } + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfUint64(v)) + out.n = n + return listv, out, nil +} + +var coderUint64SliceValue = valueCoderFuncs{ + size: sizeUint64SliceValue, + marshal: appendUint64SliceValue, + unmarshal: consumeUint64SliceValue, + merge: mergeListValue, +} + +// sizeUint64PackedSliceValue returns the size of wire encoding a []uint64 value as a packed repeated Uint64. +func sizeUint64PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := 0 + for i, llen := 0, llen; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(v.Uint()) + } + return tagsize + protowire.SizeBytes(n) +} + +// appendUint64PackedSliceValue encodes a []uint64 value as a packed repeated Uint64. +func appendUint64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := 0 + for i := 0; i < llen; i++ { + v := list.Get(i) + n += protowire.SizeVarint(v.Uint()) + } + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, v.Uint()) + } + return b, nil +} + +var coderUint64PackedSliceValue = valueCoderFuncs{ + size: sizeUint64PackedSliceValue, + marshal: appendUint64PackedSliceValue, + unmarshal: consumeUint64SliceValue, + merge: mergeListValue, +} + +// sizeSfixed32 returns the size of wire encoding a int32 pointer as a Sfixed32. +func sizeSfixed32(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + + return f.tagsize + protowire.SizeFixed32() +} + +// appendSfixed32 wire encodes a int32 pointer as a Sfixed32. +func appendSfixed32(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Int32() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed32(b, uint32(v)) + return b, nil +} + +// consumeSfixed32 wire decodes a int32 pointer as a Sfixed32. +func consumeSfixed32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.Fixed32Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return out, errDecode + } + *p.Int32() = int32(v) + out.n = n + return out, nil +} + +var coderSfixed32 = pointerCoderFuncs{ + size: sizeSfixed32, + marshal: appendSfixed32, + unmarshal: consumeSfixed32, + merge: mergeInt32, +} + +// sizeSfixed32NoZero returns the size of wire encoding a int32 pointer as a Sfixed32. +// The zero value is not encoded. +func sizeSfixed32NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := *p.Int32() + if v == 0 { + return 0 + } + return f.tagsize + protowire.SizeFixed32() +} + +// appendSfixed32NoZero wire encodes a int32 pointer as a Sfixed32. +// The zero value is not encoded. +func appendSfixed32NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Int32() + if v == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed32(b, uint32(v)) + return b, nil +} + +var coderSfixed32NoZero = pointerCoderFuncs{ + size: sizeSfixed32NoZero, + marshal: appendSfixed32NoZero, + unmarshal: consumeSfixed32, + merge: mergeInt32NoZero, +} + +// sizeSfixed32Ptr returns the size of wire encoding a *int32 pointer as a Sfixed32. +// It panics if the pointer is nil. +func sizeSfixed32Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + return f.tagsize + protowire.SizeFixed32() +} + +// appendSfixed32Ptr wire encodes a *int32 pointer as a Sfixed32. +// It panics if the pointer is nil. +func appendSfixed32Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := **p.Int32Ptr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed32(b, uint32(v)) + return b, nil +} + +// consumeSfixed32Ptr wire decodes a *int32 pointer as a Sfixed32. +func consumeSfixed32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.Fixed32Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return out, errDecode + } + vp := p.Int32Ptr() + if *vp == nil { + *vp = new(int32) + } + **vp = int32(v) + out.n = n + return out, nil +} + +var coderSfixed32Ptr = pointerCoderFuncs{ + size: sizeSfixed32Ptr, + marshal: appendSfixed32Ptr, + unmarshal: consumeSfixed32Ptr, + merge: mergeInt32Ptr, +} + +// sizeSfixed32Slice returns the size of wire encoding a []int32 pointer as a repeated Sfixed32. +func sizeSfixed32Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.Int32Slice() + size = len(s) * (f.tagsize + protowire.SizeFixed32()) + return size +} + +// appendSfixed32Slice encodes a []int32 pointer as a repeated Sfixed32. +func appendSfixed32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.Int32Slice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed32(b, uint32(v)) + } + return b, nil +} + +// consumeSfixed32Slice wire decodes a []int32 pointer as a repeated Sfixed32. +func consumeSfixed32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.Int32Slice() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + count := len(b) / protowire.SizeFixed32() + if count > 0 { + p.growInt32Slice(count) + } + s := *sp + for len(b) > 0 { + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return out, errDecode + } + s = append(s, int32(v)) + b = b[n:] + } + *sp = s + out.n = n + return out, nil + } + if wtyp != protowire.Fixed32Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return out, errDecode + } + *sp = append(*sp, int32(v)) + out.n = n + return out, nil +} + +var coderSfixed32Slice = pointerCoderFuncs{ + size: sizeSfixed32Slice, + marshal: appendSfixed32Slice, + unmarshal: consumeSfixed32Slice, + merge: mergeInt32Slice, +} + +// sizeSfixed32PackedSlice returns the size of wire encoding a []int32 pointer as a packed repeated Sfixed32. +func sizeSfixed32PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.Int32Slice() + if len(s) == 0 { + return 0 + } + n := len(s) * protowire.SizeFixed32() + return f.tagsize + protowire.SizeBytes(n) +} + +// appendSfixed32PackedSlice encodes a []int32 pointer as a packed repeated Sfixed32. +func appendSfixed32PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.Int32Slice() + if len(s) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := len(s) * protowire.SizeFixed32() + b = protowire.AppendVarint(b, uint64(n)) + for _, v := range s { + b = protowire.AppendFixed32(b, uint32(v)) + } + return b, nil +} + +var coderSfixed32PackedSlice = pointerCoderFuncs{ + size: sizeSfixed32PackedSlice, + marshal: appendSfixed32PackedSlice, + unmarshal: consumeSfixed32Slice, + merge: mergeInt32Slice, +} + +// sizeSfixed32Value returns the size of wire encoding a int32 value as a Sfixed32. +func sizeSfixed32Value(v protoreflect.Value, tagsize int, opts marshalOptions) int { + return tagsize + protowire.SizeFixed32() +} + +// appendSfixed32Value encodes a int32 value as a Sfixed32. +func appendSfixed32Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendFixed32(b, uint32(v.Int())) + return b, nil +} + +// consumeSfixed32Value decodes a int32 value as a Sfixed32. +func consumeSfixed32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.Fixed32Type { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + out.n = n + return protoreflect.ValueOfInt32(int32(v)), out, nil +} + +var coderSfixed32Value = valueCoderFuncs{ + size: sizeSfixed32Value, + marshal: appendSfixed32Value, + unmarshal: consumeSfixed32Value, + merge: mergeScalarValue, +} + +// sizeSfixed32SliceValue returns the size of wire encoding a []int32 value as a repeated Sfixed32. +func sizeSfixed32SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + size = list.Len() * (tagsize + protowire.SizeFixed32()) + return size +} + +// appendSfixed32SliceValue encodes a []int32 value as a repeated Sfixed32. +func appendSfixed32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendFixed32(b, uint32(v.Int())) + } + return b, nil +} + +// consumeSfixed32SliceValue wire decodes a []int32 value as a repeated Sfixed32. +func consumeSfixed32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + for len(b) > 0 { + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfInt32(int32(v))) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.Fixed32Type { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfInt32(int32(v))) + out.n = n + return listv, out, nil +} + +var coderSfixed32SliceValue = valueCoderFuncs{ + size: sizeSfixed32SliceValue, + marshal: appendSfixed32SliceValue, + unmarshal: consumeSfixed32SliceValue, + merge: mergeListValue, +} + +// sizeSfixed32PackedSliceValue returns the size of wire encoding a []int32 value as a packed repeated Sfixed32. +func sizeSfixed32PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := llen * protowire.SizeFixed32() + return tagsize + protowire.SizeBytes(n) +} + +// appendSfixed32PackedSliceValue encodes a []int32 value as a packed repeated Sfixed32. +func appendSfixed32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := llen * protowire.SizeFixed32() + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendFixed32(b, uint32(v.Int())) + } + return b, nil +} + +var coderSfixed32PackedSliceValue = valueCoderFuncs{ + size: sizeSfixed32PackedSliceValue, + marshal: appendSfixed32PackedSliceValue, + unmarshal: consumeSfixed32SliceValue, + merge: mergeListValue, +} + +// sizeFixed32 returns the size of wire encoding a uint32 pointer as a Fixed32. +func sizeFixed32(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + + return f.tagsize + protowire.SizeFixed32() +} + +// appendFixed32 wire encodes a uint32 pointer as a Fixed32. +func appendFixed32(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Uint32() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed32(b, v) + return b, nil +} + +// consumeFixed32 wire decodes a uint32 pointer as a Fixed32. +func consumeFixed32(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.Fixed32Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return out, errDecode + } + *p.Uint32() = v + out.n = n + return out, nil +} + +var coderFixed32 = pointerCoderFuncs{ + size: sizeFixed32, + marshal: appendFixed32, + unmarshal: consumeFixed32, + merge: mergeUint32, +} + +// sizeFixed32NoZero returns the size of wire encoding a uint32 pointer as a Fixed32. +// The zero value is not encoded. +func sizeFixed32NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := *p.Uint32() + if v == 0 { + return 0 + } + return f.tagsize + protowire.SizeFixed32() +} + +// appendFixed32NoZero wire encodes a uint32 pointer as a Fixed32. +// The zero value is not encoded. +func appendFixed32NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Uint32() + if v == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed32(b, v) + return b, nil +} + +var coderFixed32NoZero = pointerCoderFuncs{ + size: sizeFixed32NoZero, + marshal: appendFixed32NoZero, + unmarshal: consumeFixed32, + merge: mergeUint32NoZero, +} + +// sizeFixed32Ptr returns the size of wire encoding a *uint32 pointer as a Fixed32. +// It panics if the pointer is nil. +func sizeFixed32Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + return f.tagsize + protowire.SizeFixed32() +} + +// appendFixed32Ptr wire encodes a *uint32 pointer as a Fixed32. +// It panics if the pointer is nil. +func appendFixed32Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := **p.Uint32Ptr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed32(b, v) + return b, nil +} + +// consumeFixed32Ptr wire decodes a *uint32 pointer as a Fixed32. +func consumeFixed32Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.Fixed32Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return out, errDecode + } + vp := p.Uint32Ptr() + if *vp == nil { + *vp = new(uint32) + } + **vp = v + out.n = n + return out, nil +} + +var coderFixed32Ptr = pointerCoderFuncs{ + size: sizeFixed32Ptr, + marshal: appendFixed32Ptr, + unmarshal: consumeFixed32Ptr, + merge: mergeUint32Ptr, +} + +// sizeFixed32Slice returns the size of wire encoding a []uint32 pointer as a repeated Fixed32. +func sizeFixed32Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.Uint32Slice() + size = len(s) * (f.tagsize + protowire.SizeFixed32()) + return size +} + +// appendFixed32Slice encodes a []uint32 pointer as a repeated Fixed32. +func appendFixed32Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.Uint32Slice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed32(b, v) + } + return b, nil +} + +// consumeFixed32Slice wire decodes a []uint32 pointer as a repeated Fixed32. +func consumeFixed32Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.Uint32Slice() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + count := len(b) / protowire.SizeFixed32() + if count > 0 { + p.growUint32Slice(count) + } + s := *sp + for len(b) > 0 { + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return out, errDecode + } + s = append(s, v) + b = b[n:] + } + *sp = s + out.n = n + return out, nil + } + if wtyp != protowire.Fixed32Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return out, errDecode + } + *sp = append(*sp, v) + out.n = n + return out, nil +} + +var coderFixed32Slice = pointerCoderFuncs{ + size: sizeFixed32Slice, + marshal: appendFixed32Slice, + unmarshal: consumeFixed32Slice, + merge: mergeUint32Slice, +} + +// sizeFixed32PackedSlice returns the size of wire encoding a []uint32 pointer as a packed repeated Fixed32. +func sizeFixed32PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.Uint32Slice() + if len(s) == 0 { + return 0 + } + n := len(s) * protowire.SizeFixed32() + return f.tagsize + protowire.SizeBytes(n) +} + +// appendFixed32PackedSlice encodes a []uint32 pointer as a packed repeated Fixed32. +func appendFixed32PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.Uint32Slice() + if len(s) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := len(s) * protowire.SizeFixed32() + b = protowire.AppendVarint(b, uint64(n)) + for _, v := range s { + b = protowire.AppendFixed32(b, v) + } + return b, nil +} + +var coderFixed32PackedSlice = pointerCoderFuncs{ + size: sizeFixed32PackedSlice, + marshal: appendFixed32PackedSlice, + unmarshal: consumeFixed32Slice, + merge: mergeUint32Slice, +} + +// sizeFixed32Value returns the size of wire encoding a uint32 value as a Fixed32. +func sizeFixed32Value(v protoreflect.Value, tagsize int, opts marshalOptions) int { + return tagsize + protowire.SizeFixed32() +} + +// appendFixed32Value encodes a uint32 value as a Fixed32. +func appendFixed32Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendFixed32(b, uint32(v.Uint())) + return b, nil +} + +// consumeFixed32Value decodes a uint32 value as a Fixed32. +func consumeFixed32Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.Fixed32Type { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + out.n = n + return protoreflect.ValueOfUint32(uint32(v)), out, nil +} + +var coderFixed32Value = valueCoderFuncs{ + size: sizeFixed32Value, + marshal: appendFixed32Value, + unmarshal: consumeFixed32Value, + merge: mergeScalarValue, +} + +// sizeFixed32SliceValue returns the size of wire encoding a []uint32 value as a repeated Fixed32. +func sizeFixed32SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + size = list.Len() * (tagsize + protowire.SizeFixed32()) + return size +} + +// appendFixed32SliceValue encodes a []uint32 value as a repeated Fixed32. +func appendFixed32SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendFixed32(b, uint32(v.Uint())) + } + return b, nil +} + +// consumeFixed32SliceValue wire decodes a []uint32 value as a repeated Fixed32. +func consumeFixed32SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + for len(b) > 0 { + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfUint32(uint32(v))) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.Fixed32Type { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfUint32(uint32(v))) + out.n = n + return listv, out, nil +} + +var coderFixed32SliceValue = valueCoderFuncs{ + size: sizeFixed32SliceValue, + marshal: appendFixed32SliceValue, + unmarshal: consumeFixed32SliceValue, + merge: mergeListValue, +} + +// sizeFixed32PackedSliceValue returns the size of wire encoding a []uint32 value as a packed repeated Fixed32. +func sizeFixed32PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := llen * protowire.SizeFixed32() + return tagsize + protowire.SizeBytes(n) +} + +// appendFixed32PackedSliceValue encodes a []uint32 value as a packed repeated Fixed32. +func appendFixed32PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := llen * protowire.SizeFixed32() + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendFixed32(b, uint32(v.Uint())) + } + return b, nil +} + +var coderFixed32PackedSliceValue = valueCoderFuncs{ + size: sizeFixed32PackedSliceValue, + marshal: appendFixed32PackedSliceValue, + unmarshal: consumeFixed32SliceValue, + merge: mergeListValue, +} + +// sizeFloat returns the size of wire encoding a float32 pointer as a Float. +func sizeFloat(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + + return f.tagsize + protowire.SizeFixed32() +} + +// appendFloat wire encodes a float32 pointer as a Float. +func appendFloat(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Float32() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed32(b, math.Float32bits(v)) + return b, nil +} + +// consumeFloat wire decodes a float32 pointer as a Float. +func consumeFloat(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.Fixed32Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return out, errDecode + } + *p.Float32() = math.Float32frombits(v) + out.n = n + return out, nil +} + +var coderFloat = pointerCoderFuncs{ + size: sizeFloat, + marshal: appendFloat, + unmarshal: consumeFloat, + merge: mergeFloat32, +} + +// sizeFloatNoZero returns the size of wire encoding a float32 pointer as a Float. +// The zero value is not encoded. +func sizeFloatNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := *p.Float32() + if v == 0 && !math.Signbit(float64(v)) { + return 0 + } + return f.tagsize + protowire.SizeFixed32() +} + +// appendFloatNoZero wire encodes a float32 pointer as a Float. +// The zero value is not encoded. +func appendFloatNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Float32() + if v == 0 && !math.Signbit(float64(v)) { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed32(b, math.Float32bits(v)) + return b, nil +} + +var coderFloatNoZero = pointerCoderFuncs{ + size: sizeFloatNoZero, + marshal: appendFloatNoZero, + unmarshal: consumeFloat, + merge: mergeFloat32NoZero, +} + +// sizeFloatPtr returns the size of wire encoding a *float32 pointer as a Float. +// It panics if the pointer is nil. +func sizeFloatPtr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + return f.tagsize + protowire.SizeFixed32() +} + +// appendFloatPtr wire encodes a *float32 pointer as a Float. +// It panics if the pointer is nil. +func appendFloatPtr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := **p.Float32Ptr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed32(b, math.Float32bits(v)) + return b, nil +} + +// consumeFloatPtr wire decodes a *float32 pointer as a Float. +func consumeFloatPtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.Fixed32Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return out, errDecode + } + vp := p.Float32Ptr() + if *vp == nil { + *vp = new(float32) + } + **vp = math.Float32frombits(v) + out.n = n + return out, nil +} + +var coderFloatPtr = pointerCoderFuncs{ + size: sizeFloatPtr, + marshal: appendFloatPtr, + unmarshal: consumeFloatPtr, + merge: mergeFloat32Ptr, +} + +// sizeFloatSlice returns the size of wire encoding a []float32 pointer as a repeated Float. +func sizeFloatSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.Float32Slice() + size = len(s) * (f.tagsize + protowire.SizeFixed32()) + return size +} + +// appendFloatSlice encodes a []float32 pointer as a repeated Float. +func appendFloatSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.Float32Slice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed32(b, math.Float32bits(v)) + } + return b, nil +} + +// consumeFloatSlice wire decodes a []float32 pointer as a repeated Float. +func consumeFloatSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.Float32Slice() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + count := len(b) / protowire.SizeFixed32() + if count > 0 { + p.growFloat32Slice(count) + } + s := *sp + for len(b) > 0 { + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return out, errDecode + } + s = append(s, math.Float32frombits(v)) + b = b[n:] + } + *sp = s + out.n = n + return out, nil + } + if wtyp != protowire.Fixed32Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return out, errDecode + } + *sp = append(*sp, math.Float32frombits(v)) + out.n = n + return out, nil +} + +var coderFloatSlice = pointerCoderFuncs{ + size: sizeFloatSlice, + marshal: appendFloatSlice, + unmarshal: consumeFloatSlice, + merge: mergeFloat32Slice, +} + +// sizeFloatPackedSlice returns the size of wire encoding a []float32 pointer as a packed repeated Float. +func sizeFloatPackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.Float32Slice() + if len(s) == 0 { + return 0 + } + n := len(s) * protowire.SizeFixed32() + return f.tagsize + protowire.SizeBytes(n) +} + +// appendFloatPackedSlice encodes a []float32 pointer as a packed repeated Float. +func appendFloatPackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.Float32Slice() + if len(s) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := len(s) * protowire.SizeFixed32() + b = protowire.AppendVarint(b, uint64(n)) + for _, v := range s { + b = protowire.AppendFixed32(b, math.Float32bits(v)) + } + return b, nil +} + +var coderFloatPackedSlice = pointerCoderFuncs{ + size: sizeFloatPackedSlice, + marshal: appendFloatPackedSlice, + unmarshal: consumeFloatSlice, + merge: mergeFloat32Slice, +} + +// sizeFloatValue returns the size of wire encoding a float32 value as a Float. +func sizeFloatValue(v protoreflect.Value, tagsize int, opts marshalOptions) int { + return tagsize + protowire.SizeFixed32() +} + +// appendFloatValue encodes a float32 value as a Float. +func appendFloatValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendFixed32(b, math.Float32bits(float32(v.Float()))) + return b, nil +} + +// consumeFloatValue decodes a float32 value as a Float. +func consumeFloatValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.Fixed32Type { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + out.n = n + return protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))), out, nil +} + +var coderFloatValue = valueCoderFuncs{ + size: sizeFloatValue, + marshal: appendFloatValue, + unmarshal: consumeFloatValue, + merge: mergeScalarValue, +} + +// sizeFloatSliceValue returns the size of wire encoding a []float32 value as a repeated Float. +func sizeFloatSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + size = list.Len() * (tagsize + protowire.SizeFixed32()) + return size +} + +// appendFloatSliceValue encodes a []float32 value as a repeated Float. +func appendFloatSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendFixed32(b, math.Float32bits(float32(v.Float()))) + } + return b, nil +} + +// consumeFloatSliceValue wire decodes a []float32 value as a repeated Float. +func consumeFloatSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + for len(b) > 0 { + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v)))) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.Fixed32Type { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v)))) + out.n = n + return listv, out, nil +} + +var coderFloatSliceValue = valueCoderFuncs{ + size: sizeFloatSliceValue, + marshal: appendFloatSliceValue, + unmarshal: consumeFloatSliceValue, + merge: mergeListValue, +} + +// sizeFloatPackedSliceValue returns the size of wire encoding a []float32 value as a packed repeated Float. +func sizeFloatPackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := llen * protowire.SizeFixed32() + return tagsize + protowire.SizeBytes(n) +} + +// appendFloatPackedSliceValue encodes a []float32 value as a packed repeated Float. +func appendFloatPackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := llen * protowire.SizeFixed32() + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendFixed32(b, math.Float32bits(float32(v.Float()))) + } + return b, nil +} + +var coderFloatPackedSliceValue = valueCoderFuncs{ + size: sizeFloatPackedSliceValue, + marshal: appendFloatPackedSliceValue, + unmarshal: consumeFloatSliceValue, + merge: mergeListValue, +} + +// sizeSfixed64 returns the size of wire encoding a int64 pointer as a Sfixed64. +func sizeSfixed64(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + + return f.tagsize + protowire.SizeFixed64() +} + +// appendSfixed64 wire encodes a int64 pointer as a Sfixed64. +func appendSfixed64(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Int64() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed64(b, uint64(v)) + return b, nil +} + +// consumeSfixed64 wire decodes a int64 pointer as a Sfixed64. +func consumeSfixed64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.Fixed64Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return out, errDecode + } + *p.Int64() = int64(v) + out.n = n + return out, nil +} + +var coderSfixed64 = pointerCoderFuncs{ + size: sizeSfixed64, + marshal: appendSfixed64, + unmarshal: consumeSfixed64, + merge: mergeInt64, +} + +// sizeSfixed64NoZero returns the size of wire encoding a int64 pointer as a Sfixed64. +// The zero value is not encoded. +func sizeSfixed64NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := *p.Int64() + if v == 0 { + return 0 + } + return f.tagsize + protowire.SizeFixed64() +} + +// appendSfixed64NoZero wire encodes a int64 pointer as a Sfixed64. +// The zero value is not encoded. +func appendSfixed64NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Int64() + if v == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed64(b, uint64(v)) + return b, nil +} + +var coderSfixed64NoZero = pointerCoderFuncs{ + size: sizeSfixed64NoZero, + marshal: appendSfixed64NoZero, + unmarshal: consumeSfixed64, + merge: mergeInt64NoZero, +} + +// sizeSfixed64Ptr returns the size of wire encoding a *int64 pointer as a Sfixed64. +// It panics if the pointer is nil. +func sizeSfixed64Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + return f.tagsize + protowire.SizeFixed64() +} + +// appendSfixed64Ptr wire encodes a *int64 pointer as a Sfixed64. +// It panics if the pointer is nil. +func appendSfixed64Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := **p.Int64Ptr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed64(b, uint64(v)) + return b, nil +} + +// consumeSfixed64Ptr wire decodes a *int64 pointer as a Sfixed64. +func consumeSfixed64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.Fixed64Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return out, errDecode + } + vp := p.Int64Ptr() + if *vp == nil { + *vp = new(int64) + } + **vp = int64(v) + out.n = n + return out, nil +} + +var coderSfixed64Ptr = pointerCoderFuncs{ + size: sizeSfixed64Ptr, + marshal: appendSfixed64Ptr, + unmarshal: consumeSfixed64Ptr, + merge: mergeInt64Ptr, +} + +// sizeSfixed64Slice returns the size of wire encoding a []int64 pointer as a repeated Sfixed64. +func sizeSfixed64Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.Int64Slice() + size = len(s) * (f.tagsize + protowire.SizeFixed64()) + return size +} + +// appendSfixed64Slice encodes a []int64 pointer as a repeated Sfixed64. +func appendSfixed64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.Int64Slice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed64(b, uint64(v)) + } + return b, nil +} + +// consumeSfixed64Slice wire decodes a []int64 pointer as a repeated Sfixed64. +func consumeSfixed64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.Int64Slice() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + count := len(b) / protowire.SizeFixed64() + if count > 0 { + p.growInt64Slice(count) + } + s := *sp + for len(b) > 0 { + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return out, errDecode + } + s = append(s, int64(v)) + b = b[n:] + } + *sp = s + out.n = n + return out, nil + } + if wtyp != protowire.Fixed64Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return out, errDecode + } + *sp = append(*sp, int64(v)) + out.n = n + return out, nil +} + +var coderSfixed64Slice = pointerCoderFuncs{ + size: sizeSfixed64Slice, + marshal: appendSfixed64Slice, + unmarshal: consumeSfixed64Slice, + merge: mergeInt64Slice, +} + +// sizeSfixed64PackedSlice returns the size of wire encoding a []int64 pointer as a packed repeated Sfixed64. +func sizeSfixed64PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.Int64Slice() + if len(s) == 0 { + return 0 + } + n := len(s) * protowire.SizeFixed64() + return f.tagsize + protowire.SizeBytes(n) +} + +// appendSfixed64PackedSlice encodes a []int64 pointer as a packed repeated Sfixed64. +func appendSfixed64PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.Int64Slice() + if len(s) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := len(s) * protowire.SizeFixed64() + b = protowire.AppendVarint(b, uint64(n)) + for _, v := range s { + b = protowire.AppendFixed64(b, uint64(v)) + } + return b, nil +} + +var coderSfixed64PackedSlice = pointerCoderFuncs{ + size: sizeSfixed64PackedSlice, + marshal: appendSfixed64PackedSlice, + unmarshal: consumeSfixed64Slice, + merge: mergeInt64Slice, +} + +// sizeSfixed64Value returns the size of wire encoding a int64 value as a Sfixed64. +func sizeSfixed64Value(v protoreflect.Value, tagsize int, opts marshalOptions) int { + return tagsize + protowire.SizeFixed64() +} + +// appendSfixed64Value encodes a int64 value as a Sfixed64. +func appendSfixed64Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendFixed64(b, uint64(v.Int())) + return b, nil +} + +// consumeSfixed64Value decodes a int64 value as a Sfixed64. +func consumeSfixed64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.Fixed64Type { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + out.n = n + return protoreflect.ValueOfInt64(int64(v)), out, nil +} + +var coderSfixed64Value = valueCoderFuncs{ + size: sizeSfixed64Value, + marshal: appendSfixed64Value, + unmarshal: consumeSfixed64Value, + merge: mergeScalarValue, +} + +// sizeSfixed64SliceValue returns the size of wire encoding a []int64 value as a repeated Sfixed64. +func sizeSfixed64SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + size = list.Len() * (tagsize + protowire.SizeFixed64()) + return size +} + +// appendSfixed64SliceValue encodes a []int64 value as a repeated Sfixed64. +func appendSfixed64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendFixed64(b, uint64(v.Int())) + } + return b, nil +} + +// consumeSfixed64SliceValue wire decodes a []int64 value as a repeated Sfixed64. +func consumeSfixed64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + for len(b) > 0 { + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfInt64(int64(v))) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.Fixed64Type { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfInt64(int64(v))) + out.n = n + return listv, out, nil +} + +var coderSfixed64SliceValue = valueCoderFuncs{ + size: sizeSfixed64SliceValue, + marshal: appendSfixed64SliceValue, + unmarshal: consumeSfixed64SliceValue, + merge: mergeListValue, +} + +// sizeSfixed64PackedSliceValue returns the size of wire encoding a []int64 value as a packed repeated Sfixed64. +func sizeSfixed64PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := llen * protowire.SizeFixed64() + return tagsize + protowire.SizeBytes(n) +} + +// appendSfixed64PackedSliceValue encodes a []int64 value as a packed repeated Sfixed64. +func appendSfixed64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := llen * protowire.SizeFixed64() + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendFixed64(b, uint64(v.Int())) + } + return b, nil +} + +var coderSfixed64PackedSliceValue = valueCoderFuncs{ + size: sizeSfixed64PackedSliceValue, + marshal: appendSfixed64PackedSliceValue, + unmarshal: consumeSfixed64SliceValue, + merge: mergeListValue, +} + +// sizeFixed64 returns the size of wire encoding a uint64 pointer as a Fixed64. +func sizeFixed64(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + + return f.tagsize + protowire.SizeFixed64() +} + +// appendFixed64 wire encodes a uint64 pointer as a Fixed64. +func appendFixed64(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Uint64() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed64(b, v) + return b, nil +} + +// consumeFixed64 wire decodes a uint64 pointer as a Fixed64. +func consumeFixed64(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.Fixed64Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return out, errDecode + } + *p.Uint64() = v + out.n = n + return out, nil +} + +var coderFixed64 = pointerCoderFuncs{ + size: sizeFixed64, + marshal: appendFixed64, + unmarshal: consumeFixed64, + merge: mergeUint64, +} + +// sizeFixed64NoZero returns the size of wire encoding a uint64 pointer as a Fixed64. +// The zero value is not encoded. +func sizeFixed64NoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := *p.Uint64() + if v == 0 { + return 0 + } + return f.tagsize + protowire.SizeFixed64() +} + +// appendFixed64NoZero wire encodes a uint64 pointer as a Fixed64. +// The zero value is not encoded. +func appendFixed64NoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Uint64() + if v == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed64(b, v) + return b, nil +} + +var coderFixed64NoZero = pointerCoderFuncs{ + size: sizeFixed64NoZero, + marshal: appendFixed64NoZero, + unmarshal: consumeFixed64, + merge: mergeUint64NoZero, +} + +// sizeFixed64Ptr returns the size of wire encoding a *uint64 pointer as a Fixed64. +// It panics if the pointer is nil. +func sizeFixed64Ptr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + return f.tagsize + protowire.SizeFixed64() +} + +// appendFixed64Ptr wire encodes a *uint64 pointer as a Fixed64. +// It panics if the pointer is nil. +func appendFixed64Ptr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := **p.Uint64Ptr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed64(b, v) + return b, nil +} + +// consumeFixed64Ptr wire decodes a *uint64 pointer as a Fixed64. +func consumeFixed64Ptr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.Fixed64Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return out, errDecode + } + vp := p.Uint64Ptr() + if *vp == nil { + *vp = new(uint64) + } + **vp = v + out.n = n + return out, nil +} + +var coderFixed64Ptr = pointerCoderFuncs{ + size: sizeFixed64Ptr, + marshal: appendFixed64Ptr, + unmarshal: consumeFixed64Ptr, + merge: mergeUint64Ptr, +} + +// sizeFixed64Slice returns the size of wire encoding a []uint64 pointer as a repeated Fixed64. +func sizeFixed64Slice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.Uint64Slice() + size = len(s) * (f.tagsize + protowire.SizeFixed64()) + return size +} + +// appendFixed64Slice encodes a []uint64 pointer as a repeated Fixed64. +func appendFixed64Slice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.Uint64Slice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed64(b, v) + } + return b, nil +} + +// consumeFixed64Slice wire decodes a []uint64 pointer as a repeated Fixed64. +func consumeFixed64Slice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.Uint64Slice() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + count := len(b) / protowire.SizeFixed64() + if count > 0 { + p.growUint64Slice(count) + } + s := *sp + for len(b) > 0 { + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return out, errDecode + } + s = append(s, v) + b = b[n:] + } + *sp = s + out.n = n + return out, nil + } + if wtyp != protowire.Fixed64Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return out, errDecode + } + *sp = append(*sp, v) + out.n = n + return out, nil +} + +var coderFixed64Slice = pointerCoderFuncs{ + size: sizeFixed64Slice, + marshal: appendFixed64Slice, + unmarshal: consumeFixed64Slice, + merge: mergeUint64Slice, +} + +// sizeFixed64PackedSlice returns the size of wire encoding a []uint64 pointer as a packed repeated Fixed64. +func sizeFixed64PackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.Uint64Slice() + if len(s) == 0 { + return 0 + } + n := len(s) * protowire.SizeFixed64() + return f.tagsize + protowire.SizeBytes(n) +} + +// appendFixed64PackedSlice encodes a []uint64 pointer as a packed repeated Fixed64. +func appendFixed64PackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.Uint64Slice() + if len(s) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := len(s) * protowire.SizeFixed64() + b = protowire.AppendVarint(b, uint64(n)) + for _, v := range s { + b = protowire.AppendFixed64(b, v) + } + return b, nil +} + +var coderFixed64PackedSlice = pointerCoderFuncs{ + size: sizeFixed64PackedSlice, + marshal: appendFixed64PackedSlice, + unmarshal: consumeFixed64Slice, + merge: mergeUint64Slice, +} + +// sizeFixed64Value returns the size of wire encoding a uint64 value as a Fixed64. +func sizeFixed64Value(v protoreflect.Value, tagsize int, opts marshalOptions) int { + return tagsize + protowire.SizeFixed64() +} + +// appendFixed64Value encodes a uint64 value as a Fixed64. +func appendFixed64Value(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendFixed64(b, v.Uint()) + return b, nil +} + +// consumeFixed64Value decodes a uint64 value as a Fixed64. +func consumeFixed64Value(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.Fixed64Type { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + out.n = n + return protoreflect.ValueOfUint64(v), out, nil +} + +var coderFixed64Value = valueCoderFuncs{ + size: sizeFixed64Value, + marshal: appendFixed64Value, + unmarshal: consumeFixed64Value, + merge: mergeScalarValue, +} + +// sizeFixed64SliceValue returns the size of wire encoding a []uint64 value as a repeated Fixed64. +func sizeFixed64SliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + size = list.Len() * (tagsize + protowire.SizeFixed64()) + return size +} + +// appendFixed64SliceValue encodes a []uint64 value as a repeated Fixed64. +func appendFixed64SliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendFixed64(b, v.Uint()) + } + return b, nil +} + +// consumeFixed64SliceValue wire decodes a []uint64 value as a repeated Fixed64. +func consumeFixed64SliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + for len(b) > 0 { + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfUint64(v)) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.Fixed64Type { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfUint64(v)) + out.n = n + return listv, out, nil +} + +var coderFixed64SliceValue = valueCoderFuncs{ + size: sizeFixed64SliceValue, + marshal: appendFixed64SliceValue, + unmarshal: consumeFixed64SliceValue, + merge: mergeListValue, +} + +// sizeFixed64PackedSliceValue returns the size of wire encoding a []uint64 value as a packed repeated Fixed64. +func sizeFixed64PackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := llen * protowire.SizeFixed64() + return tagsize + protowire.SizeBytes(n) +} + +// appendFixed64PackedSliceValue encodes a []uint64 value as a packed repeated Fixed64. +func appendFixed64PackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := llen * protowire.SizeFixed64() + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendFixed64(b, v.Uint()) + } + return b, nil +} + +var coderFixed64PackedSliceValue = valueCoderFuncs{ + size: sizeFixed64PackedSliceValue, + marshal: appendFixed64PackedSliceValue, + unmarshal: consumeFixed64SliceValue, + merge: mergeListValue, +} + +// sizeDouble returns the size of wire encoding a float64 pointer as a Double. +func sizeDouble(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + + return f.tagsize + protowire.SizeFixed64() +} + +// appendDouble wire encodes a float64 pointer as a Double. +func appendDouble(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Float64() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed64(b, math.Float64bits(v)) + return b, nil +} + +// consumeDouble wire decodes a float64 pointer as a Double. +func consumeDouble(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.Fixed64Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return out, errDecode + } + *p.Float64() = math.Float64frombits(v) + out.n = n + return out, nil +} + +var coderDouble = pointerCoderFuncs{ + size: sizeDouble, + marshal: appendDouble, + unmarshal: consumeDouble, + merge: mergeFloat64, +} + +// sizeDoubleNoZero returns the size of wire encoding a float64 pointer as a Double. +// The zero value is not encoded. +func sizeDoubleNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := *p.Float64() + if v == 0 && !math.Signbit(float64(v)) { + return 0 + } + return f.tagsize + protowire.SizeFixed64() +} + +// appendDoubleNoZero wire encodes a float64 pointer as a Double. +// The zero value is not encoded. +func appendDoubleNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Float64() + if v == 0 && !math.Signbit(float64(v)) { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed64(b, math.Float64bits(v)) + return b, nil +} + +var coderDoubleNoZero = pointerCoderFuncs{ + size: sizeDoubleNoZero, + marshal: appendDoubleNoZero, + unmarshal: consumeDouble, + merge: mergeFloat64NoZero, +} + +// sizeDoublePtr returns the size of wire encoding a *float64 pointer as a Double. +// It panics if the pointer is nil. +func sizeDoublePtr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + return f.tagsize + protowire.SizeFixed64() +} + +// appendDoublePtr wire encodes a *float64 pointer as a Double. +// It panics if the pointer is nil. +func appendDoublePtr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := **p.Float64Ptr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed64(b, math.Float64bits(v)) + return b, nil +} + +// consumeDoublePtr wire decodes a *float64 pointer as a Double. +func consumeDoublePtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.Fixed64Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return out, errDecode + } + vp := p.Float64Ptr() + if *vp == nil { + *vp = new(float64) + } + **vp = math.Float64frombits(v) + out.n = n + return out, nil +} + +var coderDoublePtr = pointerCoderFuncs{ + size: sizeDoublePtr, + marshal: appendDoublePtr, + unmarshal: consumeDoublePtr, + merge: mergeFloat64Ptr, +} + +// sizeDoubleSlice returns the size of wire encoding a []float64 pointer as a repeated Double. +func sizeDoubleSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.Float64Slice() + size = len(s) * (f.tagsize + protowire.SizeFixed64()) + return size +} + +// appendDoubleSlice encodes a []float64 pointer as a repeated Double. +func appendDoubleSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.Float64Slice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendFixed64(b, math.Float64bits(v)) + } + return b, nil +} + +// consumeDoubleSlice wire decodes a []float64 pointer as a repeated Double. +func consumeDoubleSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.Float64Slice() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + count := len(b) / protowire.SizeFixed64() + if count > 0 { + p.growFloat64Slice(count) + } + s := *sp + for len(b) > 0 { + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return out, errDecode + } + s = append(s, math.Float64frombits(v)) + b = b[n:] + } + *sp = s + out.n = n + return out, nil + } + if wtyp != protowire.Fixed64Type { + return out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return out, errDecode + } + *sp = append(*sp, math.Float64frombits(v)) + out.n = n + return out, nil +} + +var coderDoubleSlice = pointerCoderFuncs{ + size: sizeDoubleSlice, + marshal: appendDoubleSlice, + unmarshal: consumeDoubleSlice, + merge: mergeFloat64Slice, +} + +// sizeDoublePackedSlice returns the size of wire encoding a []float64 pointer as a packed repeated Double. +func sizeDoublePackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.Float64Slice() + if len(s) == 0 { + return 0 + } + n := len(s) * protowire.SizeFixed64() + return f.tagsize + protowire.SizeBytes(n) +} + +// appendDoublePackedSlice encodes a []float64 pointer as a packed repeated Double. +func appendDoublePackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.Float64Slice() + if len(s) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + n := len(s) * protowire.SizeFixed64() + b = protowire.AppendVarint(b, uint64(n)) + for _, v := range s { + b = protowire.AppendFixed64(b, math.Float64bits(v)) + } + return b, nil +} + +var coderDoublePackedSlice = pointerCoderFuncs{ + size: sizeDoublePackedSlice, + marshal: appendDoublePackedSlice, + unmarshal: consumeDoubleSlice, + merge: mergeFloat64Slice, +} + +// sizeDoubleValue returns the size of wire encoding a float64 value as a Double. +func sizeDoubleValue(v protoreflect.Value, tagsize int, opts marshalOptions) int { + return tagsize + protowire.SizeFixed64() +} + +// appendDoubleValue encodes a float64 value as a Double. +func appendDoubleValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendFixed64(b, math.Float64bits(v.Float())) + return b, nil +} + +// consumeDoubleValue decodes a float64 value as a Double. +func consumeDoubleValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.Fixed64Type { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + out.n = n + return protoreflect.ValueOfFloat64(math.Float64frombits(v)), out, nil +} + +var coderDoubleValue = valueCoderFuncs{ + size: sizeDoubleValue, + marshal: appendDoubleValue, + unmarshal: consumeDoubleValue, + merge: mergeScalarValue, +} + +// sizeDoubleSliceValue returns the size of wire encoding a []float64 value as a repeated Double. +func sizeDoubleSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + size = list.Len() * (tagsize + protowire.SizeFixed64()) + return size +} + +// appendDoubleSliceValue encodes a []float64 value as a repeated Double. +func appendDoubleSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendFixed64(b, math.Float64bits(v.Float())) + } + return b, nil +} + +// consumeDoubleSliceValue wire decodes a []float64 value as a repeated Double. +func consumeDoubleSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp == protowire.BytesType { + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + for len(b) > 0 { + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfFloat64(math.Float64frombits(v))) + b = b[n:] + } + out.n = n + return listv, out, nil + } + if wtyp != protowire.Fixed64Type { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfFloat64(math.Float64frombits(v))) + out.n = n + return listv, out, nil +} + +var coderDoubleSliceValue = valueCoderFuncs{ + size: sizeDoubleSliceValue, + marshal: appendDoubleSliceValue, + unmarshal: consumeDoubleSliceValue, + merge: mergeListValue, +} + +// sizeDoublePackedSliceValue returns the size of wire encoding a []float64 value as a packed repeated Double. +func sizeDoublePackedSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return 0 + } + n := llen * protowire.SizeFixed64() + return tagsize + protowire.SizeBytes(n) +} + +// appendDoublePackedSliceValue encodes a []float64 value as a packed repeated Double. +func appendDoublePackedSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + llen := list.Len() + if llen == 0 { + return b, nil + } + b = protowire.AppendVarint(b, wiretag) + n := llen * protowire.SizeFixed64() + b = protowire.AppendVarint(b, uint64(n)) + for i := 0; i < llen; i++ { + v := list.Get(i) + b = protowire.AppendFixed64(b, math.Float64bits(v.Float())) + } + return b, nil +} + +var coderDoublePackedSliceValue = valueCoderFuncs{ + size: sizeDoublePackedSliceValue, + marshal: appendDoublePackedSliceValue, + unmarshal: consumeDoubleSliceValue, + merge: mergeListValue, +} + +// sizeString returns the size of wire encoding a string pointer as a String. +func sizeString(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := *p.String() + return f.tagsize + protowire.SizeBytes(len(v)) +} + +// appendString wire encodes a string pointer as a String. +func appendString(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.String() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendString(b, v) + return b, nil +} + +// consumeString wire decodes a string pointer as a String. +func consumeString(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + *p.String() = string(v) + out.n = n + return out, nil +} + +var coderString = pointerCoderFuncs{ + size: sizeString, + marshal: appendString, + unmarshal: consumeString, + merge: mergeString, +} + +// appendStringValidateUTF8 wire encodes a string pointer as a String. +func appendStringValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.String() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendString(b, v) + if !utf8.ValidString(v) { + return b, errInvalidUTF8{} + } + return b, nil +} + +// consumeStringValidateUTF8 wire decodes a string pointer as a String. +func consumeStringValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + if !utf8.Valid(v) { + return out, errInvalidUTF8{} + } + *p.String() = string(v) + out.n = n + return out, nil +} + +var coderStringValidateUTF8 = pointerCoderFuncs{ + size: sizeString, + marshal: appendStringValidateUTF8, + unmarshal: consumeStringValidateUTF8, + merge: mergeString, +} + +// sizeStringNoZero returns the size of wire encoding a string pointer as a String. +// The zero value is not encoded. +func sizeStringNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := *p.String() + if len(v) == 0 { + return 0 + } + return f.tagsize + protowire.SizeBytes(len(v)) +} + +// appendStringNoZero wire encodes a string pointer as a String. +// The zero value is not encoded. +func appendStringNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.String() + if len(v) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendString(b, v) + return b, nil +} + +var coderStringNoZero = pointerCoderFuncs{ + size: sizeStringNoZero, + marshal: appendStringNoZero, + unmarshal: consumeString, + merge: mergeStringNoZero, +} + +// appendStringNoZeroValidateUTF8 wire encodes a string pointer as a String. +// The zero value is not encoded. +func appendStringNoZeroValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.String() + if len(v) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendString(b, v) + if !utf8.ValidString(v) { + return b, errInvalidUTF8{} + } + return b, nil +} + +var coderStringNoZeroValidateUTF8 = pointerCoderFuncs{ + size: sizeStringNoZero, + marshal: appendStringNoZeroValidateUTF8, + unmarshal: consumeStringValidateUTF8, + merge: mergeStringNoZero, +} + +// sizeStringPtr returns the size of wire encoding a *string pointer as a String. +// It panics if the pointer is nil. +func sizeStringPtr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := **p.StringPtr() + return f.tagsize + protowire.SizeBytes(len(v)) +} + +// appendStringPtr wire encodes a *string pointer as a String. +// It panics if the pointer is nil. +func appendStringPtr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := **p.StringPtr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendString(b, v) + return b, nil +} + +// consumeStringPtr wire decodes a *string pointer as a String. +func consumeStringPtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + vp := p.StringPtr() + if *vp == nil { + *vp = new(string) + } + **vp = string(v) + out.n = n + return out, nil +} + +var coderStringPtr = pointerCoderFuncs{ + size: sizeStringPtr, + marshal: appendStringPtr, + unmarshal: consumeStringPtr, + merge: mergeStringPtr, +} + +// appendStringPtrValidateUTF8 wire encodes a *string pointer as a String. +// It panics if the pointer is nil. +func appendStringPtrValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := **p.StringPtr() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendString(b, v) + if !utf8.ValidString(v) { + return b, errInvalidUTF8{} + } + return b, nil +} + +// consumeStringPtrValidateUTF8 wire decodes a *string pointer as a String. +func consumeStringPtrValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + if !utf8.Valid(v) { + return out, errInvalidUTF8{} + } + vp := p.StringPtr() + if *vp == nil { + *vp = new(string) + } + **vp = string(v) + out.n = n + return out, nil +} + +var coderStringPtrValidateUTF8 = pointerCoderFuncs{ + size: sizeStringPtr, + marshal: appendStringPtrValidateUTF8, + unmarshal: consumeStringPtrValidateUTF8, + merge: mergeStringPtr, +} + +// sizeStringSlice returns the size of wire encoding a []string pointer as a repeated String. +func sizeStringSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.StringSlice() + for _, v := range s { + size += f.tagsize + protowire.SizeBytes(len(v)) + } + return size +} + +// appendStringSlice encodes a []string pointer as a repeated String. +func appendStringSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.StringSlice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendString(b, v) + } + return b, nil +} + +// consumeStringSlice wire decodes a []string pointer as a repeated String. +func consumeStringSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.StringSlice() + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + *sp = append(*sp, string(v)) + out.n = n + return out, nil +} + +var coderStringSlice = pointerCoderFuncs{ + size: sizeStringSlice, + marshal: appendStringSlice, + unmarshal: consumeStringSlice, + merge: mergeStringSlice, +} + +// appendStringSliceValidateUTF8 encodes a []string pointer as a repeated String. +func appendStringSliceValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.StringSlice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendString(b, v) + if !utf8.ValidString(v) { + return b, errInvalidUTF8{} + } + } + return b, nil +} + +// consumeStringSliceValidateUTF8 wire decodes a []string pointer as a repeated String. +func consumeStringSliceValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + if !utf8.Valid(v) { + return out, errInvalidUTF8{} + } + sp := p.StringSlice() + *sp = append(*sp, string(v)) + out.n = n + return out, nil +} + +var coderStringSliceValidateUTF8 = pointerCoderFuncs{ + size: sizeStringSlice, + marshal: appendStringSliceValidateUTF8, + unmarshal: consumeStringSliceValidateUTF8, + merge: mergeStringSlice, +} + +// sizeStringValue returns the size of wire encoding a string value as a String. +func sizeStringValue(v protoreflect.Value, tagsize int, opts marshalOptions) int { + return tagsize + protowire.SizeBytes(len(v.String())) +} + +// appendStringValue encodes a string value as a String. +func appendStringValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendString(b, v.String()) + return b, nil +} + +// consumeStringValue decodes a string value as a String. +func consumeStringValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + out.n = n + return protoreflect.ValueOfString(string(v)), out, nil +} + +var coderStringValue = valueCoderFuncs{ + size: sizeStringValue, + marshal: appendStringValue, + unmarshal: consumeStringValue, + merge: mergeScalarValue, +} + +// appendStringValueValidateUTF8 encodes a string value as a String. +func appendStringValueValidateUTF8(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendString(b, v.String()) + if !utf8.ValidString(v.String()) { + return b, errInvalidUTF8{} + } + return b, nil +} + +// consumeStringValueValidateUTF8 decodes a string value as a String. +func consumeStringValueValidateUTF8(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + if !utf8.Valid(v) { + return protoreflect.Value{}, out, errInvalidUTF8{} + } + out.n = n + return protoreflect.ValueOfString(string(v)), out, nil +} + +var coderStringValueValidateUTF8 = valueCoderFuncs{ + size: sizeStringValue, + marshal: appendStringValueValidateUTF8, + unmarshal: consumeStringValueValidateUTF8, + merge: mergeScalarValue, +} + +// sizeStringSliceValue returns the size of wire encoding a []string value as a repeated String. +func sizeStringSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + size += tagsize + protowire.SizeBytes(len(v.String())) + } + return size +} + +// appendStringSliceValue encodes a []string value as a repeated String. +func appendStringSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendString(b, v.String()) + } + return b, nil +} + +// consumeStringSliceValue wire decodes a []string value as a repeated String. +func consumeStringSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp != protowire.BytesType { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfString(string(v))) + out.n = n + return listv, out, nil +} + +var coderStringSliceValue = valueCoderFuncs{ + size: sizeStringSliceValue, + marshal: appendStringSliceValue, + unmarshal: consumeStringSliceValue, + merge: mergeListValue, +} + +// sizeBytes returns the size of wire encoding a []byte pointer as a Bytes. +func sizeBytes(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := *p.Bytes() + return f.tagsize + protowire.SizeBytes(len(v)) +} + +// appendBytes wire encodes a []byte pointer as a Bytes. +func appendBytes(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Bytes() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendBytes(b, v) + return b, nil +} + +// consumeBytes wire decodes a []byte pointer as a Bytes. +func consumeBytes(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + *p.Bytes() = append(emptyBuf[:], v...) + out.n = n + return out, nil +} + +var coderBytes = pointerCoderFuncs{ + size: sizeBytes, + marshal: appendBytes, + unmarshal: consumeBytes, + merge: mergeBytes, +} + +// appendBytesValidateUTF8 wire encodes a []byte pointer as a Bytes. +func appendBytesValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Bytes() + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendBytes(b, v) + if !utf8.Valid(v) { + return b, errInvalidUTF8{} + } + return b, nil +} + +// consumeBytesValidateUTF8 wire decodes a []byte pointer as a Bytes. +func consumeBytesValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + if !utf8.Valid(v) { + return out, errInvalidUTF8{} + } + *p.Bytes() = append(emptyBuf[:], v...) + out.n = n + return out, nil +} + +var coderBytesValidateUTF8 = pointerCoderFuncs{ + size: sizeBytes, + marshal: appendBytesValidateUTF8, + unmarshal: consumeBytesValidateUTF8, + merge: mergeBytes, +} + +// sizeBytesNoZero returns the size of wire encoding a []byte pointer as a Bytes. +// The zero value is not encoded. +func sizeBytesNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + v := *p.Bytes() + if len(v) == 0 { + return 0 + } + return f.tagsize + protowire.SizeBytes(len(v)) +} + +// appendBytesNoZero wire encodes a []byte pointer as a Bytes. +// The zero value is not encoded. +func appendBytesNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Bytes() + if len(v) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendBytes(b, v) + return b, nil +} + +// consumeBytesNoZero wire decodes a []byte pointer as a Bytes. +// The zero value is not decoded. +func consumeBytesNoZero(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + *p.Bytes() = append(([]byte)(nil), v...) + out.n = n + return out, nil +} + +var coderBytesNoZero = pointerCoderFuncs{ + size: sizeBytesNoZero, + marshal: appendBytesNoZero, + unmarshal: consumeBytesNoZero, + merge: mergeBytesNoZero, +} + +// appendBytesNoZeroValidateUTF8 wire encodes a []byte pointer as a Bytes. +// The zero value is not encoded. +func appendBytesNoZeroValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + v := *p.Bytes() + if len(v) == 0 { + return b, nil + } + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendBytes(b, v) + if !utf8.Valid(v) { + return b, errInvalidUTF8{} + } + return b, nil +} + +// consumeBytesNoZeroValidateUTF8 wire decodes a []byte pointer as a Bytes. +func consumeBytesNoZeroValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + if !utf8.Valid(v) { + return out, errInvalidUTF8{} + } + *p.Bytes() = append(([]byte)(nil), v...) + out.n = n + return out, nil +} + +var coderBytesNoZeroValidateUTF8 = pointerCoderFuncs{ + size: sizeBytesNoZero, + marshal: appendBytesNoZeroValidateUTF8, + unmarshal: consumeBytesNoZeroValidateUTF8, + merge: mergeBytesNoZero, +} + +// sizeBytesSlice returns the size of wire encoding a [][]byte pointer as a repeated Bytes. +func sizeBytesSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := *p.BytesSlice() + for _, v := range s { + size += f.tagsize + protowire.SizeBytes(len(v)) + } + return size +} + +// appendBytesSlice encodes a [][]byte pointer as a repeated Bytes. +func appendBytesSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.BytesSlice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendBytes(b, v) + } + return b, nil +} + +// consumeBytesSlice wire decodes a [][]byte pointer as a repeated Bytes. +func consumeBytesSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + sp := p.BytesSlice() + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + *sp = append(*sp, append(emptyBuf[:], v...)) + out.n = n + return out, nil +} + +var coderBytesSlice = pointerCoderFuncs{ + size: sizeBytesSlice, + marshal: appendBytesSlice, + unmarshal: consumeBytesSlice, + merge: mergeBytesSlice, +} + +// appendBytesSliceValidateUTF8 encodes a [][]byte pointer as a repeated Bytes. +func appendBytesSliceValidateUTF8(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := *p.BytesSlice() + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendBytes(b, v) + if !utf8.Valid(v) { + return b, errInvalidUTF8{} + } + } + return b, nil +} + +// consumeBytesSliceValidateUTF8 wire decodes a [][]byte pointer as a repeated Bytes. +func consumeBytesSliceValidateUTF8(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + if !utf8.Valid(v) { + return out, errInvalidUTF8{} + } + sp := p.BytesSlice() + *sp = append(*sp, append(emptyBuf[:], v...)) + out.n = n + return out, nil +} + +var coderBytesSliceValidateUTF8 = pointerCoderFuncs{ + size: sizeBytesSlice, + marshal: appendBytesSliceValidateUTF8, + unmarshal: consumeBytesSliceValidateUTF8, + merge: mergeBytesSlice, +} + +// sizeBytesValue returns the size of wire encoding a []byte value as a Bytes. +func sizeBytesValue(v protoreflect.Value, tagsize int, opts marshalOptions) int { + return tagsize + protowire.SizeBytes(len(v.Bytes())) +} + +// appendBytesValue encodes a []byte value as a Bytes. +func appendBytesValue(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendBytes(b, v.Bytes()) + return b, nil +} + +// consumeBytesValue decodes a []byte value as a Bytes. +func consumeBytesValue(b []byte, _ protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + out.n = n + return protoreflect.ValueOfBytes(append(emptyBuf[:], v...)), out, nil +} + +var coderBytesValue = valueCoderFuncs{ + size: sizeBytesValue, + marshal: appendBytesValue, + unmarshal: consumeBytesValue, + merge: mergeBytesValue, +} + +// sizeBytesSliceValue returns the size of wire encoding a [][]byte value as a repeated Bytes. +func sizeBytesSliceValue(listv protoreflect.Value, tagsize int, opts marshalOptions) (size int) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + size += tagsize + protowire.SizeBytes(len(v.Bytes())) + } + return size +} + +// appendBytesSliceValue encodes a [][]byte value as a repeated Bytes. +func appendBytesSliceValue(b []byte, listv protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) { + list := listv.List() + for i, llen := 0, list.Len(); i < llen; i++ { + v := list.Get(i) + b = protowire.AppendVarint(b, wiretag) + b = protowire.AppendBytes(b, v.Bytes()) + } + return b, nil +} + +// consumeBytesSliceValue wire decodes a [][]byte value as a repeated Bytes. +func consumeBytesSliceValue(b []byte, listv protoreflect.Value, _ protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (_ protoreflect.Value, out unmarshalOutput, err error) { + list := listv.List() + if wtyp != protowire.BytesType { + return protoreflect.Value{}, out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return protoreflect.Value{}, out, errDecode + } + list.Append(protoreflect.ValueOfBytes(append(emptyBuf[:], v...))) + out.n = n + return listv, out, nil +} + +var coderBytesSliceValue = valueCoderFuncs{ + size: sizeBytesSliceValue, + marshal: appendBytesSliceValue, + unmarshal: consumeBytesSliceValue, + merge: mergeBytesListValue, +} + +// We append to an empty array rather than a nil []byte to get non-nil zero-length byte slices. +var emptyBuf [0]byte + +var wireTypes = map[protoreflect.Kind]protowire.Type{ + protoreflect.BoolKind: protowire.VarintType, + protoreflect.EnumKind: protowire.VarintType, + protoreflect.Int32Kind: protowire.VarintType, + protoreflect.Sint32Kind: protowire.VarintType, + protoreflect.Uint32Kind: protowire.VarintType, + protoreflect.Int64Kind: protowire.VarintType, + protoreflect.Sint64Kind: protowire.VarintType, + protoreflect.Uint64Kind: protowire.VarintType, + protoreflect.Sfixed32Kind: protowire.Fixed32Type, + protoreflect.Fixed32Kind: protowire.Fixed32Type, + protoreflect.FloatKind: protowire.Fixed32Type, + protoreflect.Sfixed64Kind: protowire.Fixed64Type, + protoreflect.Fixed64Kind: protowire.Fixed64Type, + protoreflect.DoubleKind: protowire.Fixed64Type, + protoreflect.StringKind: protowire.BytesType, + protoreflect.BytesKind: protowire.BytesType, + protoreflect.MessageKind: protowire.BytesType, + protoreflect.GroupKind: protowire.StartGroupType, +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_map.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_map.go new file mode 100644 index 0000000..229c698 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_map.go @@ -0,0 +1,399 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "reflect" + "sort" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/genid" + "google.golang.org/protobuf/reflect/protoreflect" +) + +type mapInfo struct { + goType reflect.Type + keyWiretag uint64 + valWiretag uint64 + keyFuncs valueCoderFuncs + valFuncs valueCoderFuncs + keyZero protoreflect.Value + keyKind protoreflect.Kind + conv *mapConverter +} + +func encoderFuncsForMap(fd protoreflect.FieldDescriptor, ft reflect.Type) (valueMessage *MessageInfo, funcs pointerCoderFuncs) { + // TODO: Consider generating specialized map coders. + keyField := fd.MapKey() + valField := fd.MapValue() + keyWiretag := protowire.EncodeTag(1, wireTypes[keyField.Kind()]) + valWiretag := protowire.EncodeTag(2, wireTypes[valField.Kind()]) + keyFuncs := encoderFuncsForValue(keyField) + valFuncs := encoderFuncsForValue(valField) + conv := newMapConverter(ft, fd) + + mapi := &mapInfo{ + goType: ft, + keyWiretag: keyWiretag, + valWiretag: valWiretag, + keyFuncs: keyFuncs, + valFuncs: valFuncs, + keyZero: keyField.Default(), + keyKind: keyField.Kind(), + conv: conv, + } + if valField.Kind() == protoreflect.MessageKind { + valueMessage = getMessageInfo(ft.Elem()) + } + + funcs = pointerCoderFuncs{ + size: func(p pointer, f *coderFieldInfo, opts marshalOptions) int { + return sizeMap(p.AsValueOf(ft).Elem(), mapi, f, opts) + }, + marshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + return appendMap(b, p.AsValueOf(ft).Elem(), mapi, f, opts) + }, + unmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) { + mp := p.AsValueOf(ft) + if mp.Elem().IsNil() { + mp.Elem().Set(reflect.MakeMap(mapi.goType)) + } + if f.mi == nil { + return consumeMap(b, mp.Elem(), wtyp, mapi, f, opts) + } else { + return consumeMapOfMessage(b, mp.Elem(), wtyp, mapi, f, opts) + } + }, + } + switch valField.Kind() { + case protoreflect.MessageKind: + funcs.merge = mergeMapOfMessage + case protoreflect.BytesKind: + funcs.merge = mergeMapOfBytes + default: + funcs.merge = mergeMap + } + if valFuncs.isInit != nil { + funcs.isInit = func(p pointer, f *coderFieldInfo) error { + return isInitMap(p.AsValueOf(ft).Elem(), mapi, f) + } + } + return valueMessage, funcs +} + +const ( + mapKeyTagSize = 1 // field 1, tag size 1. + mapValTagSize = 1 // field 2, tag size 2. +) + +func sizeMap(mapv reflect.Value, mapi *mapInfo, f *coderFieldInfo, opts marshalOptions) int { + if mapv.Len() == 0 { + return 0 + } + n := 0 + iter := mapv.MapRange() + for iter.Next() { + key := mapi.conv.keyConv.PBValueOf(iter.Key()).MapKey() + keySize := mapi.keyFuncs.size(key.Value(), mapKeyTagSize, opts) + var valSize int + value := mapi.conv.valConv.PBValueOf(iter.Value()) + if f.mi == nil { + valSize = mapi.valFuncs.size(value, mapValTagSize, opts) + } else { + p := pointerOfValue(iter.Value()) + valSize += mapValTagSize + valSize += protowire.SizeBytes(f.mi.sizePointer(p, opts)) + } + n += f.tagsize + protowire.SizeBytes(keySize+valSize) + } + return n +} + +func consumeMap(b []byte, mapv reflect.Value, wtyp protowire.Type, mapi *mapInfo, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + var ( + key = mapi.keyZero + val = mapi.conv.valConv.New() + ) + for len(b) > 0 { + num, wtyp, n := protowire.ConsumeTag(b) + if n < 0 { + return out, errDecode + } + if num > protowire.MaxValidNumber { + return out, errDecode + } + b = b[n:] + err := errUnknown + switch num { + case genid.MapEntry_Key_field_number: + var v protoreflect.Value + var o unmarshalOutput + v, o, err = mapi.keyFuncs.unmarshal(b, key, num, wtyp, opts) + if err != nil { + break + } + key = v + n = o.n + case genid.MapEntry_Value_field_number: + var v protoreflect.Value + var o unmarshalOutput + v, o, err = mapi.valFuncs.unmarshal(b, val, num, wtyp, opts) + if err != nil { + break + } + val = v + n = o.n + } + if err == errUnknown { + n = protowire.ConsumeFieldValue(num, wtyp, b) + if n < 0 { + return out, errDecode + } + } else if err != nil { + return out, err + } + b = b[n:] + } + mapv.SetMapIndex(mapi.conv.keyConv.GoValueOf(key), mapi.conv.valConv.GoValueOf(val)) + out.n = n + return out, nil +} + +func consumeMapOfMessage(b []byte, mapv reflect.Value, wtyp protowire.Type, mapi *mapInfo, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + b, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + var ( + key = mapi.keyZero + val = reflect.New(f.mi.GoReflectType.Elem()) + ) + for len(b) > 0 { + num, wtyp, n := protowire.ConsumeTag(b) + if n < 0 { + return out, errDecode + } + if num > protowire.MaxValidNumber { + return out, errDecode + } + b = b[n:] + err := errUnknown + switch num { + case 1: + var v protoreflect.Value + var o unmarshalOutput + v, o, err = mapi.keyFuncs.unmarshal(b, key, num, wtyp, opts) + if err != nil { + break + } + key = v + n = o.n + case 2: + if wtyp != protowire.BytesType { + break + } + var v []byte + v, n = protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + var o unmarshalOutput + o, err = f.mi.unmarshalPointer(v, pointerOfValue(val), 0, opts) + if o.initialized { + // Consider this map item initialized so long as we see + // an initialized value. + out.initialized = true + } + } + if err == errUnknown { + n = protowire.ConsumeFieldValue(num, wtyp, b) + if n < 0 { + return out, errDecode + } + } else if err != nil { + return out, err + } + b = b[n:] + } + mapv.SetMapIndex(mapi.conv.keyConv.GoValueOf(key), val) + out.n = n + return out, nil +} + +func appendMapItem(b []byte, keyrv, valrv reflect.Value, mapi *mapInfo, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + if f.mi == nil { + key := mapi.conv.keyConv.PBValueOf(keyrv).MapKey() + val := mapi.conv.valConv.PBValueOf(valrv) + size := 0 + size += mapi.keyFuncs.size(key.Value(), mapKeyTagSize, opts) + size += mapi.valFuncs.size(val, mapValTagSize, opts) + b = protowire.AppendVarint(b, uint64(size)) + before := len(b) + b, err := mapi.keyFuncs.marshal(b, key.Value(), mapi.keyWiretag, opts) + if err != nil { + return nil, err + } + b, err = mapi.valFuncs.marshal(b, val, mapi.valWiretag, opts) + if measuredSize := len(b) - before; size != measuredSize && err == nil { + return nil, errors.MismatchedSizeCalculation(size, measuredSize) + } + return b, err + } else { + key := mapi.conv.keyConv.PBValueOf(keyrv).MapKey() + val := pointerOfValue(valrv) + valSize := f.mi.sizePointer(val, opts) + size := 0 + size += mapi.keyFuncs.size(key.Value(), mapKeyTagSize, opts) + size += mapValTagSize + protowire.SizeBytes(valSize) + b = protowire.AppendVarint(b, uint64(size)) + b, err := mapi.keyFuncs.marshal(b, key.Value(), mapi.keyWiretag, opts) + if err != nil { + return nil, err + } + b = protowire.AppendVarint(b, mapi.valWiretag) + b = protowire.AppendVarint(b, uint64(valSize)) + before := len(b) + b, err = f.mi.marshalAppendPointer(b, val, opts) + if measuredSize := len(b) - before; valSize != measuredSize && err == nil { + return nil, errors.MismatchedSizeCalculation(valSize, measuredSize) + } + return b, err + } +} + +func appendMap(b []byte, mapv reflect.Value, mapi *mapInfo, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + if mapv.Len() == 0 { + return b, nil + } + if opts.Deterministic() { + return appendMapDeterministic(b, mapv, mapi, f, opts) + } + iter := mapv.MapRange() + for iter.Next() { + var err error + b = protowire.AppendVarint(b, f.wiretag) + b, err = appendMapItem(b, iter.Key(), iter.Value(), mapi, f, opts) + if err != nil { + return b, err + } + } + return b, nil +} + +func appendMapDeterministic(b []byte, mapv reflect.Value, mapi *mapInfo, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + keys := mapv.MapKeys() + sort.Slice(keys, func(i, j int) bool { + switch keys[i].Kind() { + case reflect.Bool: + return !keys[i].Bool() && keys[j].Bool() + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return keys[i].Int() < keys[j].Int() + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return keys[i].Uint() < keys[j].Uint() + case reflect.Float32, reflect.Float64: + return keys[i].Float() < keys[j].Float() + case reflect.String: + return keys[i].String() < keys[j].String() + default: + panic("invalid kind: " + keys[i].Kind().String()) + } + }) + for _, key := range keys { + var err error + b = protowire.AppendVarint(b, f.wiretag) + b, err = appendMapItem(b, key, mapv.MapIndex(key), mapi, f, opts) + if err != nil { + return b, err + } + } + return b, nil +} + +func isInitMap(mapv reflect.Value, mapi *mapInfo, f *coderFieldInfo) error { + if mi := f.mi; mi != nil { + mi.init() + if !mi.needsInitCheck { + return nil + } + iter := mapv.MapRange() + for iter.Next() { + val := pointerOfValue(iter.Value()) + if err := mi.checkInitializedPointer(val); err != nil { + return err + } + } + } else { + iter := mapv.MapRange() + for iter.Next() { + val := mapi.conv.valConv.PBValueOf(iter.Value()) + if err := mapi.valFuncs.isInit(val); err != nil { + return err + } + } + } + return nil +} + +func mergeMap(dst, src pointer, f *coderFieldInfo, opts mergeOptions) { + dstm := dst.AsValueOf(f.ft).Elem() + srcm := src.AsValueOf(f.ft).Elem() + if srcm.Len() == 0 { + return + } + if dstm.IsNil() { + dstm.Set(reflect.MakeMap(f.ft)) + } + iter := srcm.MapRange() + for iter.Next() { + dstm.SetMapIndex(iter.Key(), iter.Value()) + } +} + +func mergeMapOfBytes(dst, src pointer, f *coderFieldInfo, opts mergeOptions) { + dstm := dst.AsValueOf(f.ft).Elem() + srcm := src.AsValueOf(f.ft).Elem() + if srcm.Len() == 0 { + return + } + if dstm.IsNil() { + dstm.Set(reflect.MakeMap(f.ft)) + } + iter := srcm.MapRange() + for iter.Next() { + dstm.SetMapIndex(iter.Key(), reflect.ValueOf(append(emptyBuf[:], iter.Value().Bytes()...))) + } +} + +func mergeMapOfMessage(dst, src pointer, f *coderFieldInfo, opts mergeOptions) { + dstm := dst.AsValueOf(f.ft).Elem() + srcm := src.AsValueOf(f.ft).Elem() + if srcm.Len() == 0 { + return + } + if dstm.IsNil() { + dstm.Set(reflect.MakeMap(f.ft)) + } + iter := srcm.MapRange() + for iter.Next() { + val := reflect.New(f.ft.Elem().Elem()) + if f.mi != nil { + f.mi.mergePointer(pointerOfValue(val), pointerOfValue(iter.Value()), opts) + } else { + opts.Merge(asMessage(val), asMessage(iter.Value())) + } + dstm.SetMapIndex(iter.Key(), val) + } +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_message.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_message.go new file mode 100644 index 0000000..f78b57b --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_message.go @@ -0,0 +1,230 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + "sort" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/encoding/messageset" + "google.golang.org/protobuf/internal/order" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" +) + +// coderMessageInfo contains per-message information used by the fast-path functions. +// This is a different type from MessageInfo to keep MessageInfo as general-purpose as +// possible. +type coderMessageInfo struct { + methods protoiface.Methods + + orderedCoderFields []*coderFieldInfo + denseCoderFields []*coderFieldInfo + coderFields map[protowire.Number]*coderFieldInfo + sizecacheOffset offset + unknownOffset offset + unknownPtrKind bool + extensionOffset offset + needsInitCheck bool + isMessageSet bool + numRequiredFields uint8 + + lazyOffset offset + presenceOffset offset + presenceSize presenceSize +} + +type coderFieldInfo struct { + funcs pointerCoderFuncs // fast-path per-field functions + mi *MessageInfo // field's message + ft reflect.Type + validation validationInfo // information used by message validation + num protoreflect.FieldNumber // field number + offset offset // struct field offset + wiretag uint64 // field tag (number + wire type) + tagsize int // size of the varint-encoded tag + isPointer bool // true if IsNil may be called on the struct field + isRequired bool // true if field is required + + isLazy bool + presenceIndex uint32 +} + +const noPresence = 0xffffffff + +func (mi *MessageInfo) makeCoderMethods(t reflect.Type, si structInfo) { + mi.sizecacheOffset = invalidOffset + mi.unknownOffset = invalidOffset + mi.extensionOffset = invalidOffset + mi.lazyOffset = invalidOffset + mi.presenceOffset = si.presenceOffset + + if si.sizecacheOffset.IsValid() && si.sizecacheType == sizecacheType { + mi.sizecacheOffset = si.sizecacheOffset + } + if si.unknownOffset.IsValid() && (si.unknownType == unknownFieldsAType || si.unknownType == unknownFieldsBType) { + mi.unknownOffset = si.unknownOffset + mi.unknownPtrKind = si.unknownType.Kind() == reflect.Ptr + } + if si.extensionOffset.IsValid() && si.extensionType == extensionFieldsType { + mi.extensionOffset = si.extensionOffset + } + + mi.coderFields = make(map[protowire.Number]*coderFieldInfo) + fields := mi.Desc.Fields() + preallocFields := make([]coderFieldInfo, fields.Len()) + for i := 0; i < fields.Len(); i++ { + fd := fields.Get(i) + + fs := si.fieldsByNumber[fd.Number()] + isOneof := fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic() + if isOneof { + fs = si.oneofsByName[fd.ContainingOneof().Name()] + } + ft := fs.Type + var wiretag uint64 + if !fd.IsPacked() { + wiretag = protowire.EncodeTag(fd.Number(), wireTypes[fd.Kind()]) + } else { + wiretag = protowire.EncodeTag(fd.Number(), protowire.BytesType) + } + var fieldOffset offset + var funcs pointerCoderFuncs + var childMessage *MessageInfo + switch { + case ft == nil: + // This never occurs for generated message types. + // It implies that a hand-crafted type has missing Go fields + // for specific protobuf message fields. + funcs = pointerCoderFuncs{ + size: func(p pointer, f *coderFieldInfo, opts marshalOptions) int { + return 0 + }, + marshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + return nil, nil + }, + unmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) { + panic("missing Go struct field for " + string(fd.FullName())) + }, + isInit: func(p pointer, f *coderFieldInfo) error { + panic("missing Go struct field for " + string(fd.FullName())) + }, + merge: func(dst, src pointer, f *coderFieldInfo, opts mergeOptions) { + panic("missing Go struct field for " + string(fd.FullName())) + }, + } + case isOneof: + fieldOffset = offsetOf(fs) + default: + fieldOffset = offsetOf(fs) + childMessage, funcs = fieldCoder(fd, ft) + } + cf := &preallocFields[i] + *cf = coderFieldInfo{ + num: fd.Number(), + offset: fieldOffset, + wiretag: wiretag, + ft: ft, + tagsize: protowire.SizeVarint(wiretag), + funcs: funcs, + mi: childMessage, + validation: newFieldValidationInfo(mi, si, fd, ft), + isPointer: fd.Cardinality() == protoreflect.Repeated || fd.HasPresence(), + isRequired: fd.Cardinality() == protoreflect.Required, + + presenceIndex: noPresence, + } + mi.orderedCoderFields = append(mi.orderedCoderFields, cf) + mi.coderFields[cf.num] = cf + } + for i, oneofs := 0, mi.Desc.Oneofs(); i < oneofs.Len(); i++ { + if od := oneofs.Get(i); !od.IsSynthetic() { + mi.initOneofFieldCoders(od, si) + } + } + if messageset.IsMessageSet(mi.Desc) { + if !mi.extensionOffset.IsValid() { + panic(fmt.Sprintf("%v: MessageSet with no extensions field", mi.Desc.FullName())) + } + if !mi.unknownOffset.IsValid() { + panic(fmt.Sprintf("%v: MessageSet with no unknown field", mi.Desc.FullName())) + } + mi.isMessageSet = true + } + sort.Slice(mi.orderedCoderFields, func(i, j int) bool { + return mi.orderedCoderFields[i].num < mi.orderedCoderFields[j].num + }) + + var maxDense protoreflect.FieldNumber + for _, cf := range mi.orderedCoderFields { + if cf.num >= 16 && cf.num >= 2*maxDense { + break + } + maxDense = cf.num + } + mi.denseCoderFields = make([]*coderFieldInfo, maxDense+1) + for _, cf := range mi.orderedCoderFields { + if int(cf.num) >= len(mi.denseCoderFields) { + break + } + mi.denseCoderFields[cf.num] = cf + } + + // To preserve compatibility with historic wire output, marshal oneofs last. + if mi.Desc.Oneofs().Len() > 0 { + sort.Slice(mi.orderedCoderFields, func(i, j int) bool { + fi := fields.ByNumber(mi.orderedCoderFields[i].num) + fj := fields.ByNumber(mi.orderedCoderFields[j].num) + return order.LegacyFieldOrder(fi, fj) + }) + } + + mi.needsInitCheck = needsInitCheck(mi.Desc) + if mi.methods.Marshal == nil && mi.methods.Size == nil { + mi.methods.Flags |= protoiface.SupportMarshalDeterministic + mi.methods.Marshal = mi.marshal + mi.methods.Size = mi.size + } + if mi.methods.Unmarshal == nil { + mi.methods.Flags |= protoiface.SupportUnmarshalDiscardUnknown + mi.methods.Unmarshal = mi.unmarshal + } + if mi.methods.CheckInitialized == nil { + mi.methods.CheckInitialized = mi.checkInitialized + } + if mi.methods.Merge == nil { + mi.methods.Merge = mi.merge + } + if mi.methods.Equal == nil { + mi.methods.Equal = equal + } +} + +// getUnknownBytes returns a *[]byte for the unknown fields. +// It is the caller's responsibility to check whether the pointer is nil. +// This function is specially designed to be inlineable. +func (mi *MessageInfo) getUnknownBytes(p pointer) *[]byte { + if mi.unknownPtrKind { + return *p.Apply(mi.unknownOffset).BytesPtr() + } else { + return p.Apply(mi.unknownOffset).Bytes() + } +} + +// mutableUnknownBytes returns a *[]byte for the unknown fields. +// The returned pointer is guaranteed to not be nil. +func (mi *MessageInfo) mutableUnknownBytes(p pointer) *[]byte { + if mi.unknownPtrKind { + bp := p.Apply(mi.unknownOffset).BytesPtr() + if *bp == nil { + *bp = new([]byte) + } + return *bp + } else { + return p.Apply(mi.unknownOffset).Bytes() + } +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_message_opaque.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_message_opaque.go new file mode 100644 index 0000000..bdad12a --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_message_opaque.go @@ -0,0 +1,154 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + "sort" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/encoding/messageset" + "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/internal/order" + "google.golang.org/protobuf/reflect/protoreflect" + piface "google.golang.org/protobuf/runtime/protoiface" +) + +func (mi *MessageInfo) makeOpaqueCoderMethods(t reflect.Type, si opaqueStructInfo) { + mi.sizecacheOffset = si.sizecacheOffset + mi.unknownOffset = si.unknownOffset + mi.unknownPtrKind = si.unknownType.Kind() == reflect.Ptr + mi.extensionOffset = si.extensionOffset + mi.lazyOffset = si.lazyOffset + mi.presenceOffset = si.presenceOffset + + mi.coderFields = make(map[protowire.Number]*coderFieldInfo) + fields := mi.Desc.Fields() + for i := 0; i < fields.Len(); i++ { + fd := fields.Get(i) + + fs := si.fieldsByNumber[fd.Number()] + if fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic() { + fs = si.oneofsByName[fd.ContainingOneof().Name()] + } + ft := fs.Type + var wiretag uint64 + if !fd.IsPacked() { + wiretag = protowire.EncodeTag(fd.Number(), wireTypes[fd.Kind()]) + } else { + wiretag = protowire.EncodeTag(fd.Number(), protowire.BytesType) + } + var fieldOffset offset + var funcs pointerCoderFuncs + var childMessage *MessageInfo + switch { + case fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic(): + fieldOffset = offsetOf(fs) + case fd.Message() != nil && !fd.IsMap(): + fieldOffset = offsetOf(fs) + if fd.IsList() { + childMessage, funcs = makeOpaqueRepeatedMessageFieldCoder(fd, ft) + } else { + childMessage, funcs = makeOpaqueMessageFieldCoder(fd, ft) + } + default: + fieldOffset = offsetOf(fs) + childMessage, funcs = fieldCoder(fd, ft) + } + cf := &coderFieldInfo{ + num: fd.Number(), + offset: fieldOffset, + wiretag: wiretag, + ft: ft, + tagsize: protowire.SizeVarint(wiretag), + funcs: funcs, + mi: childMessage, + validation: newFieldValidationInfo(mi, si.structInfo, fd, ft), + isPointer: (fd.Cardinality() == protoreflect.Repeated || + fd.Kind() == protoreflect.MessageKind || + fd.Kind() == protoreflect.GroupKind), + isRequired: fd.Cardinality() == protoreflect.Required, + presenceIndex: noPresence, + } + + // TODO: Use presence for all fields. + // + // In some cases, such as maps, presence means only "might be set" rather + // than "is definitely set", but every field should have a presence bit to + // permit us to skip over definitely-unset fields at marshal time. + + var hasPresence bool + hasPresence, cf.isLazy = filedesc.UsePresenceForField(fd) + + if hasPresence { + cf.presenceIndex, mi.presenceSize = presenceIndex(mi.Desc, fd) + } + + mi.orderedCoderFields = append(mi.orderedCoderFields, cf) + mi.coderFields[cf.num] = cf + } + for i, oneofs := 0, mi.Desc.Oneofs(); i < oneofs.Len(); i++ { + if od := oneofs.Get(i); !od.IsSynthetic() { + mi.initOneofFieldCoders(od, si.structInfo) + } + } + if messageset.IsMessageSet(mi.Desc) { + if !mi.extensionOffset.IsValid() { + panic(fmt.Sprintf("%v: MessageSet with no extensions field", mi.Desc.FullName())) + } + if !mi.unknownOffset.IsValid() { + panic(fmt.Sprintf("%v: MessageSet with no unknown field", mi.Desc.FullName())) + } + mi.isMessageSet = true + } + sort.Slice(mi.orderedCoderFields, func(i, j int) bool { + return mi.orderedCoderFields[i].num < mi.orderedCoderFields[j].num + }) + + var maxDense protoreflect.FieldNumber + for _, cf := range mi.orderedCoderFields { + if cf.num >= 16 && cf.num >= 2*maxDense { + break + } + maxDense = cf.num + } + mi.denseCoderFields = make([]*coderFieldInfo, maxDense+1) + for _, cf := range mi.orderedCoderFields { + if int(cf.num) > len(mi.denseCoderFields) { + break + } + mi.denseCoderFields[cf.num] = cf + } + + // To preserve compatibility with historic wire output, marshal oneofs last. + if mi.Desc.Oneofs().Len() > 0 { + sort.Slice(mi.orderedCoderFields, func(i, j int) bool { + fi := fields.ByNumber(mi.orderedCoderFields[i].num) + fj := fields.ByNumber(mi.orderedCoderFields[j].num) + return order.LegacyFieldOrder(fi, fj) + }) + } + + mi.needsInitCheck = needsInitCheck(mi.Desc) + if mi.methods.Marshal == nil && mi.methods.Size == nil { + mi.methods.Flags |= piface.SupportMarshalDeterministic + mi.methods.Marshal = mi.marshal + mi.methods.Size = mi.size + } + if mi.methods.Unmarshal == nil { + mi.methods.Flags |= piface.SupportUnmarshalDiscardUnknown + mi.methods.Unmarshal = mi.unmarshal + } + if mi.methods.CheckInitialized == nil { + mi.methods.CheckInitialized = mi.checkInitialized + } + if mi.methods.Merge == nil { + mi.methods.Merge = mi.merge + } + if mi.methods.Equal == nil { + mi.methods.Equal = equal + } +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_messageset.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_messageset.go new file mode 100644 index 0000000..7a16ec1 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_messageset.go @@ -0,0 +1,145 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "sort" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/encoding/messageset" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/flags" +) + +func sizeMessageSet(mi *MessageInfo, p pointer, opts marshalOptions) (size int) { + if !flags.ProtoLegacy { + return 0 + } + + ext := *p.Apply(mi.extensionOffset).Extensions() + for _, x := range ext { + xi := getExtensionFieldInfo(x.Type()) + if xi.funcs.size == nil { + continue + } + num, _ := protowire.DecodeTag(xi.wiretag) + size += messageset.SizeField(num) + if fullyLazyExtensions(opts) { + // Don't expand the extension, instead use the buffer to calculate size + if lb := x.lazyBuffer(); lb != nil { + // We got hold of the buffer, so it's still lazy. + // Don't count the tag size in the extension buffer, it's already added. + size += protowire.SizeTag(messageset.FieldMessage) + len(lb) - xi.tagsize + continue + } + } + size += xi.funcs.size(x.Value(), protowire.SizeTag(messageset.FieldMessage), opts) + } + + if u := mi.getUnknownBytes(p); u != nil { + size += messageset.SizeUnknown(*u) + } + + return size +} + +func marshalMessageSet(mi *MessageInfo, b []byte, p pointer, opts marshalOptions) ([]byte, error) { + if !flags.ProtoLegacy { + return b, errors.New("no support for message_set_wire_format") + } + + ext := *p.Apply(mi.extensionOffset).Extensions() + switch len(ext) { + case 0: + case 1: + // Fast-path for one extension: Don't bother sorting the keys. + for _, x := range ext { + var err error + b, err = marshalMessageSetField(mi, b, x, opts) + if err != nil { + return b, err + } + } + default: + // Sort the keys to provide a deterministic encoding. + // Not sure this is required, but the old code does it. + keys := make([]int, 0, len(ext)) + for k := range ext { + keys = append(keys, int(k)) + } + sort.Ints(keys) + for _, k := range keys { + var err error + b, err = marshalMessageSetField(mi, b, ext[int32(k)], opts) + if err != nil { + return b, err + } + } + } + + if u := mi.getUnknownBytes(p); u != nil { + var err error + b, err = messageset.AppendUnknown(b, *u) + if err != nil { + return b, err + } + } + + return b, nil +} + +func marshalMessageSetField(mi *MessageInfo, b []byte, x ExtensionField, opts marshalOptions) ([]byte, error) { + xi := getExtensionFieldInfo(x.Type()) + num, _ := protowire.DecodeTag(xi.wiretag) + b = messageset.AppendFieldStart(b, num) + + if fullyLazyExtensions(opts) { + // Don't expand the extension if it's still in wire format, instead use the buffer content. + if lb := x.lazyBuffer(); lb != nil { + // The tag inside the lazy buffer is a different tag (the extension + // number), but what we need here is the tag for FieldMessage: + b = protowire.AppendVarint(b, protowire.EncodeTag(messageset.FieldMessage, protowire.BytesType)) + b = append(b, lb[xi.tagsize:]...) + b = messageset.AppendFieldEnd(b) + return b, nil + } + } + + b, err := xi.funcs.marshal(b, x.Value(), protowire.EncodeTag(messageset.FieldMessage, protowire.BytesType), opts) + if err != nil { + return b, err + } + b = messageset.AppendFieldEnd(b) + return b, nil +} + +func unmarshalMessageSet(mi *MessageInfo, b []byte, p pointer, opts unmarshalOptions) (out unmarshalOutput, err error) { + if !flags.ProtoLegacy { + return out, errors.New("no support for message_set_wire_format") + } + + ep := p.Apply(mi.extensionOffset).Extensions() + if *ep == nil { + *ep = make(map[int32]ExtensionField) + } + ext := *ep + initialized := true + err = messageset.Unmarshal(b, true, func(num protowire.Number, v []byte) error { + o, err := mi.unmarshalExtension(v, num, protowire.BytesType, ext, opts) + if err == errUnknown { + u := mi.mutableUnknownBytes(p) + *u = protowire.AppendTag(*u, num, protowire.BytesType) + *u = append(*u, v...) + return nil + } + if !o.initialized { + initialized = false + } + return err + }) + out.n = len(b) + out.initialized = initialized + return out, err +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_tables.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_tables.go new file mode 100644 index 0000000..1307775 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_tables.go @@ -0,0 +1,557 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/strs" + "google.golang.org/protobuf/reflect/protoreflect" +) + +// pointerCoderFuncs is a set of pointer encoding functions. +type pointerCoderFuncs struct { + mi *MessageInfo + size func(p pointer, f *coderFieldInfo, opts marshalOptions) int + marshal func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) + unmarshal func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) + isInit func(p pointer, f *coderFieldInfo) error + merge func(dst, src pointer, f *coderFieldInfo, opts mergeOptions) +} + +// valueCoderFuncs is a set of protoreflect.Value encoding functions. +type valueCoderFuncs struct { + size func(v protoreflect.Value, tagsize int, opts marshalOptions) int + marshal func(b []byte, v protoreflect.Value, wiretag uint64, opts marshalOptions) ([]byte, error) + unmarshal func(b []byte, v protoreflect.Value, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (protoreflect.Value, unmarshalOutput, error) + isInit func(v protoreflect.Value) error + merge func(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value +} + +// fieldCoder returns pointer functions for a field, used for operating on +// struct fields. +func fieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) (*MessageInfo, pointerCoderFuncs) { + switch { + case fd.IsMap(): + return encoderFuncsForMap(fd, ft) + case fd.Cardinality() == protoreflect.Repeated && !fd.IsPacked(): + // Repeated fields (not packed). + if ft.Kind() != reflect.Slice { + break + } + ft := ft.Elem() + switch fd.Kind() { + case protoreflect.BoolKind: + if ft.Kind() == reflect.Bool { + return nil, coderBoolSlice + } + case protoreflect.EnumKind: + if ft.Kind() == reflect.Int32 { + return nil, coderEnumSlice + } + case protoreflect.Int32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderInt32Slice + } + case protoreflect.Sint32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderSint32Slice + } + case protoreflect.Uint32Kind: + if ft.Kind() == reflect.Uint32 { + return nil, coderUint32Slice + } + case protoreflect.Int64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderInt64Slice + } + case protoreflect.Sint64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderSint64Slice + } + case protoreflect.Uint64Kind: + if ft.Kind() == reflect.Uint64 { + return nil, coderUint64Slice + } + case protoreflect.Sfixed32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderSfixed32Slice + } + case protoreflect.Fixed32Kind: + if ft.Kind() == reflect.Uint32 { + return nil, coderFixed32Slice + } + case protoreflect.FloatKind: + if ft.Kind() == reflect.Float32 { + return nil, coderFloatSlice + } + case protoreflect.Sfixed64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderSfixed64Slice + } + case protoreflect.Fixed64Kind: + if ft.Kind() == reflect.Uint64 { + return nil, coderFixed64Slice + } + case protoreflect.DoubleKind: + if ft.Kind() == reflect.Float64 { + return nil, coderDoubleSlice + } + case protoreflect.StringKind: + if ft.Kind() == reflect.String && strs.EnforceUTF8(fd) { + return nil, coderStringSliceValidateUTF8 + } + if ft.Kind() == reflect.String { + return nil, coderStringSlice + } + if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 && strs.EnforceUTF8(fd) { + return nil, coderBytesSliceValidateUTF8 + } + if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 { + return nil, coderBytesSlice + } + case protoreflect.BytesKind: + if ft.Kind() == reflect.String { + return nil, coderStringSlice + } + if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 { + return nil, coderBytesSlice + } + case protoreflect.MessageKind: + return getMessageInfo(ft), makeMessageSliceFieldCoder(fd, ft) + case protoreflect.GroupKind: + return getMessageInfo(ft), makeGroupSliceFieldCoder(fd, ft) + } + case fd.Cardinality() == protoreflect.Repeated && fd.IsPacked(): + // Packed repeated fields. + // + // Only repeated fields of primitive numeric types + // (Varint, Fixed32, or Fixed64 wire type) can be packed. + if ft.Kind() != reflect.Slice { + break + } + ft := ft.Elem() + switch fd.Kind() { + case protoreflect.BoolKind: + if ft.Kind() == reflect.Bool { + return nil, coderBoolPackedSlice + } + case protoreflect.EnumKind: + if ft.Kind() == reflect.Int32 { + return nil, coderEnumPackedSlice + } + case protoreflect.Int32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderInt32PackedSlice + } + case protoreflect.Sint32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderSint32PackedSlice + } + case protoreflect.Uint32Kind: + if ft.Kind() == reflect.Uint32 { + return nil, coderUint32PackedSlice + } + case protoreflect.Int64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderInt64PackedSlice + } + case protoreflect.Sint64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderSint64PackedSlice + } + case protoreflect.Uint64Kind: + if ft.Kind() == reflect.Uint64 { + return nil, coderUint64PackedSlice + } + case protoreflect.Sfixed32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderSfixed32PackedSlice + } + case protoreflect.Fixed32Kind: + if ft.Kind() == reflect.Uint32 { + return nil, coderFixed32PackedSlice + } + case protoreflect.FloatKind: + if ft.Kind() == reflect.Float32 { + return nil, coderFloatPackedSlice + } + case protoreflect.Sfixed64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderSfixed64PackedSlice + } + case protoreflect.Fixed64Kind: + if ft.Kind() == reflect.Uint64 { + return nil, coderFixed64PackedSlice + } + case protoreflect.DoubleKind: + if ft.Kind() == reflect.Float64 { + return nil, coderDoublePackedSlice + } + } + case fd.Kind() == protoreflect.MessageKind: + return getMessageInfo(ft), makeMessageFieldCoder(fd, ft) + case fd.Kind() == protoreflect.GroupKind: + return getMessageInfo(ft), makeGroupFieldCoder(fd, ft) + case !fd.HasPresence() && fd.ContainingOneof() == nil: + // Populated oneof fields always encode even if set to the zero value, + // which normally are not encoded in proto3. + switch fd.Kind() { + case protoreflect.BoolKind: + if ft.Kind() == reflect.Bool { + return nil, coderBoolNoZero + } + case protoreflect.EnumKind: + if ft.Kind() == reflect.Int32 { + return nil, coderEnumNoZero + } + case protoreflect.Int32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderInt32NoZero + } + case protoreflect.Sint32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderSint32NoZero + } + case protoreflect.Uint32Kind: + if ft.Kind() == reflect.Uint32 { + return nil, coderUint32NoZero + } + case protoreflect.Int64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderInt64NoZero + } + case protoreflect.Sint64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderSint64NoZero + } + case protoreflect.Uint64Kind: + if ft.Kind() == reflect.Uint64 { + return nil, coderUint64NoZero + } + case protoreflect.Sfixed32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderSfixed32NoZero + } + case protoreflect.Fixed32Kind: + if ft.Kind() == reflect.Uint32 { + return nil, coderFixed32NoZero + } + case protoreflect.FloatKind: + if ft.Kind() == reflect.Float32 { + return nil, coderFloatNoZero + } + case protoreflect.Sfixed64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderSfixed64NoZero + } + case protoreflect.Fixed64Kind: + if ft.Kind() == reflect.Uint64 { + return nil, coderFixed64NoZero + } + case protoreflect.DoubleKind: + if ft.Kind() == reflect.Float64 { + return nil, coderDoubleNoZero + } + case protoreflect.StringKind: + if ft.Kind() == reflect.String && strs.EnforceUTF8(fd) { + return nil, coderStringNoZeroValidateUTF8 + } + if ft.Kind() == reflect.String { + return nil, coderStringNoZero + } + if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 && strs.EnforceUTF8(fd) { + return nil, coderBytesNoZeroValidateUTF8 + } + if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 { + return nil, coderBytesNoZero + } + case protoreflect.BytesKind: + if ft.Kind() == reflect.String { + return nil, coderStringNoZero + } + if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 { + return nil, coderBytesNoZero + } + } + case ft.Kind() == reflect.Ptr: + ft := ft.Elem() + switch fd.Kind() { + case protoreflect.BoolKind: + if ft.Kind() == reflect.Bool { + return nil, coderBoolPtr + } + case protoreflect.EnumKind: + if ft.Kind() == reflect.Int32 { + return nil, coderEnumPtr + } + case protoreflect.Int32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderInt32Ptr + } + case protoreflect.Sint32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderSint32Ptr + } + case protoreflect.Uint32Kind: + if ft.Kind() == reflect.Uint32 { + return nil, coderUint32Ptr + } + case protoreflect.Int64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderInt64Ptr + } + case protoreflect.Sint64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderSint64Ptr + } + case protoreflect.Uint64Kind: + if ft.Kind() == reflect.Uint64 { + return nil, coderUint64Ptr + } + case protoreflect.Sfixed32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderSfixed32Ptr + } + case protoreflect.Fixed32Kind: + if ft.Kind() == reflect.Uint32 { + return nil, coderFixed32Ptr + } + case protoreflect.FloatKind: + if ft.Kind() == reflect.Float32 { + return nil, coderFloatPtr + } + case protoreflect.Sfixed64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderSfixed64Ptr + } + case protoreflect.Fixed64Kind: + if ft.Kind() == reflect.Uint64 { + return nil, coderFixed64Ptr + } + case protoreflect.DoubleKind: + if ft.Kind() == reflect.Float64 { + return nil, coderDoublePtr + } + case protoreflect.StringKind: + if ft.Kind() == reflect.String && strs.EnforceUTF8(fd) { + return nil, coderStringPtrValidateUTF8 + } + if ft.Kind() == reflect.String { + return nil, coderStringPtr + } + case protoreflect.BytesKind: + if ft.Kind() == reflect.String { + return nil, coderStringPtr + } + } + default: + switch fd.Kind() { + case protoreflect.BoolKind: + if ft.Kind() == reflect.Bool { + return nil, coderBool + } + case protoreflect.EnumKind: + if ft.Kind() == reflect.Int32 { + return nil, coderEnum + } + case protoreflect.Int32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderInt32 + } + case protoreflect.Sint32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderSint32 + } + case protoreflect.Uint32Kind: + if ft.Kind() == reflect.Uint32 { + return nil, coderUint32 + } + case protoreflect.Int64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderInt64 + } + case protoreflect.Sint64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderSint64 + } + case protoreflect.Uint64Kind: + if ft.Kind() == reflect.Uint64 { + return nil, coderUint64 + } + case protoreflect.Sfixed32Kind: + if ft.Kind() == reflect.Int32 { + return nil, coderSfixed32 + } + case protoreflect.Fixed32Kind: + if ft.Kind() == reflect.Uint32 { + return nil, coderFixed32 + } + case protoreflect.FloatKind: + if ft.Kind() == reflect.Float32 { + return nil, coderFloat + } + case protoreflect.Sfixed64Kind: + if ft.Kind() == reflect.Int64 { + return nil, coderSfixed64 + } + case protoreflect.Fixed64Kind: + if ft.Kind() == reflect.Uint64 { + return nil, coderFixed64 + } + case protoreflect.DoubleKind: + if ft.Kind() == reflect.Float64 { + return nil, coderDouble + } + case protoreflect.StringKind: + if ft.Kind() == reflect.String && strs.EnforceUTF8(fd) { + return nil, coderStringValidateUTF8 + } + if ft.Kind() == reflect.String { + return nil, coderString + } + if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 && strs.EnforceUTF8(fd) { + return nil, coderBytesValidateUTF8 + } + if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 { + return nil, coderBytes + } + case protoreflect.BytesKind: + if ft.Kind() == reflect.String { + return nil, coderString + } + if ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 { + return nil, coderBytes + } + } + } + panic(fmt.Sprintf("invalid type: no encoder for %v %v %v/%v", fd.FullName(), fd.Cardinality(), fd.Kind(), ft)) +} + +// encoderFuncsForValue returns value functions for a field, used for +// extension values and map encoding. +func encoderFuncsForValue(fd protoreflect.FieldDescriptor) valueCoderFuncs { + switch { + case fd.Cardinality() == protoreflect.Repeated && !fd.IsPacked(): + switch fd.Kind() { + case protoreflect.BoolKind: + return coderBoolSliceValue + case protoreflect.EnumKind: + return coderEnumSliceValue + case protoreflect.Int32Kind: + return coderInt32SliceValue + case protoreflect.Sint32Kind: + return coderSint32SliceValue + case protoreflect.Uint32Kind: + return coderUint32SliceValue + case protoreflect.Int64Kind: + return coderInt64SliceValue + case protoreflect.Sint64Kind: + return coderSint64SliceValue + case protoreflect.Uint64Kind: + return coderUint64SliceValue + case protoreflect.Sfixed32Kind: + return coderSfixed32SliceValue + case protoreflect.Fixed32Kind: + return coderFixed32SliceValue + case protoreflect.FloatKind: + return coderFloatSliceValue + case protoreflect.Sfixed64Kind: + return coderSfixed64SliceValue + case protoreflect.Fixed64Kind: + return coderFixed64SliceValue + case protoreflect.DoubleKind: + return coderDoubleSliceValue + case protoreflect.StringKind: + // We don't have a UTF-8 validating coder for repeated string fields. + // Value coders are used for extensions and maps. + // Extensions are never proto3, and maps never contain lists. + return coderStringSliceValue + case protoreflect.BytesKind: + return coderBytesSliceValue + case protoreflect.MessageKind: + return coderMessageSliceValue + case protoreflect.GroupKind: + return coderGroupSliceValue + } + case fd.Cardinality() == protoreflect.Repeated && fd.IsPacked(): + switch fd.Kind() { + case protoreflect.BoolKind: + return coderBoolPackedSliceValue + case protoreflect.EnumKind: + return coderEnumPackedSliceValue + case protoreflect.Int32Kind: + return coderInt32PackedSliceValue + case protoreflect.Sint32Kind: + return coderSint32PackedSliceValue + case protoreflect.Uint32Kind: + return coderUint32PackedSliceValue + case protoreflect.Int64Kind: + return coderInt64PackedSliceValue + case protoreflect.Sint64Kind: + return coderSint64PackedSliceValue + case protoreflect.Uint64Kind: + return coderUint64PackedSliceValue + case protoreflect.Sfixed32Kind: + return coderSfixed32PackedSliceValue + case protoreflect.Fixed32Kind: + return coderFixed32PackedSliceValue + case protoreflect.FloatKind: + return coderFloatPackedSliceValue + case protoreflect.Sfixed64Kind: + return coderSfixed64PackedSliceValue + case protoreflect.Fixed64Kind: + return coderFixed64PackedSliceValue + case protoreflect.DoubleKind: + return coderDoublePackedSliceValue + } + default: + switch fd.Kind() { + default: + case protoreflect.BoolKind: + return coderBoolValue + case protoreflect.EnumKind: + return coderEnumValue + case protoreflect.Int32Kind: + return coderInt32Value + case protoreflect.Sint32Kind: + return coderSint32Value + case protoreflect.Uint32Kind: + return coderUint32Value + case protoreflect.Int64Kind: + return coderInt64Value + case protoreflect.Sint64Kind: + return coderSint64Value + case protoreflect.Uint64Kind: + return coderUint64Value + case protoreflect.Sfixed32Kind: + return coderSfixed32Value + case protoreflect.Fixed32Kind: + return coderFixed32Value + case protoreflect.FloatKind: + return coderFloatValue + case protoreflect.Sfixed64Kind: + return coderSfixed64Value + case protoreflect.Fixed64Kind: + return coderFixed64Value + case protoreflect.DoubleKind: + return coderDoubleValue + case protoreflect.StringKind: + if strs.EnforceUTF8(fd) { + return coderStringValueValidateUTF8 + } + return coderStringValue + case protoreflect.BytesKind: + return coderBytesValue + case protoreflect.MessageKind: + return coderMessageValue + case protoreflect.GroupKind: + return coderGroupValue + } + } + panic(fmt.Sprintf("invalid field: no encoder for %v %v %v", fd.FullName(), fd.Cardinality(), fd.Kind())) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go new file mode 100644 index 0000000..077712c --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go @@ -0,0 +1,15 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +// When using unsafe pointers, we can just treat enum values as int32s. + +var ( + coderEnumNoZero = coderInt32NoZero + coderEnum = coderInt32 + coderEnumPtr = coderInt32Ptr + coderEnumSlice = coderInt32Slice + coderEnumPackedSlice = coderInt32PackedSlice +) diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/convert.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/convert.go new file mode 100644 index 0000000..f72ddd8 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/convert.go @@ -0,0 +1,495 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + + "google.golang.org/protobuf/reflect/protoreflect" +) + +// unwrapper unwraps the value to the underlying value. +// This is implemented by List and Map. +type unwrapper interface { + protoUnwrap() any +} + +// A Converter coverts to/from Go reflect.Value types and protobuf protoreflect.Value types. +type Converter interface { + // PBValueOf converts a reflect.Value to a protoreflect.Value. + PBValueOf(reflect.Value) protoreflect.Value + + // GoValueOf converts a protoreflect.Value to a reflect.Value. + GoValueOf(protoreflect.Value) reflect.Value + + // IsValidPB returns whether a protoreflect.Value is compatible with this type. + IsValidPB(protoreflect.Value) bool + + // IsValidGo returns whether a reflect.Value is compatible with this type. + IsValidGo(reflect.Value) bool + + // New returns a new field value. + // For scalars, it returns the default value of the field. + // For composite types, it returns a new mutable value. + New() protoreflect.Value + + // Zero returns a new field value. + // For scalars, it returns the default value of the field. + // For composite types, it returns an immutable, empty value. + Zero() protoreflect.Value +} + +// NewConverter matches a Go type with a protobuf field and returns a Converter +// that converts between the two. Enums must be a named int32 kind that +// implements protoreflect.Enum, and messages must be pointer to a named +// struct type that implements protoreflect.ProtoMessage. +// +// This matcher deliberately supports a wider range of Go types than what +// protoc-gen-go historically generated to be able to automatically wrap some +// v1 messages generated by other forks of protoc-gen-go. +func NewConverter(t reflect.Type, fd protoreflect.FieldDescriptor) Converter { + switch { + case fd.IsList(): + return newListConverter(t, fd) + case fd.IsMap(): + return newMapConverter(t, fd) + default: + return newSingularConverter(t, fd) + } +} + +var ( + boolType = reflect.TypeOf(bool(false)) + int32Type = reflect.TypeOf(int32(0)) + int64Type = reflect.TypeOf(int64(0)) + uint32Type = reflect.TypeOf(uint32(0)) + uint64Type = reflect.TypeOf(uint64(0)) + float32Type = reflect.TypeOf(float32(0)) + float64Type = reflect.TypeOf(float64(0)) + stringType = reflect.TypeOf(string("")) + bytesType = reflect.TypeOf([]byte(nil)) + byteType = reflect.TypeOf(byte(0)) +) + +var ( + boolZero = protoreflect.ValueOfBool(false) + int32Zero = protoreflect.ValueOfInt32(0) + int64Zero = protoreflect.ValueOfInt64(0) + uint32Zero = protoreflect.ValueOfUint32(0) + uint64Zero = protoreflect.ValueOfUint64(0) + float32Zero = protoreflect.ValueOfFloat32(0) + float64Zero = protoreflect.ValueOfFloat64(0) + stringZero = protoreflect.ValueOfString("") + bytesZero = protoreflect.ValueOfBytes(nil) +) + +func newSingularConverter(t reflect.Type, fd protoreflect.FieldDescriptor) Converter { + defVal := func(fd protoreflect.FieldDescriptor, zero protoreflect.Value) protoreflect.Value { + if fd.Cardinality() == protoreflect.Repeated { + // Default isn't defined for repeated fields. + return zero + } + return fd.Default() + } + switch fd.Kind() { + case protoreflect.BoolKind: + if t.Kind() == reflect.Bool { + return &boolConverter{t, defVal(fd, boolZero)} + } + case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind: + if t.Kind() == reflect.Int32 { + return &int32Converter{t, defVal(fd, int32Zero)} + } + case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind: + if t.Kind() == reflect.Int64 { + return &int64Converter{t, defVal(fd, int64Zero)} + } + case protoreflect.Uint32Kind, protoreflect.Fixed32Kind: + if t.Kind() == reflect.Uint32 { + return &uint32Converter{t, defVal(fd, uint32Zero)} + } + case protoreflect.Uint64Kind, protoreflect.Fixed64Kind: + if t.Kind() == reflect.Uint64 { + return &uint64Converter{t, defVal(fd, uint64Zero)} + } + case protoreflect.FloatKind: + if t.Kind() == reflect.Float32 { + return &float32Converter{t, defVal(fd, float32Zero)} + } + case protoreflect.DoubleKind: + if t.Kind() == reflect.Float64 { + return &float64Converter{t, defVal(fd, float64Zero)} + } + case protoreflect.StringKind: + if t.Kind() == reflect.String || (t.Kind() == reflect.Slice && t.Elem() == byteType) { + return &stringConverter{t, defVal(fd, stringZero)} + } + case protoreflect.BytesKind: + if t.Kind() == reflect.String || (t.Kind() == reflect.Slice && t.Elem() == byteType) { + return &bytesConverter{t, defVal(fd, bytesZero)} + } + case protoreflect.EnumKind: + // Handle enums, which must be a named int32 type. + if t.Kind() == reflect.Int32 { + return newEnumConverter(t, fd) + } + case protoreflect.MessageKind, protoreflect.GroupKind: + return newMessageConverter(t) + } + panic(fmt.Sprintf("invalid Go type %v for field %v", t, fd.FullName())) +} + +type boolConverter struct { + goType reflect.Type + def protoreflect.Value +} + +func (c *boolConverter) PBValueOf(v reflect.Value) protoreflect.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + return protoreflect.ValueOfBool(v.Bool()) +} +func (c *boolConverter) GoValueOf(v protoreflect.Value) reflect.Value { + return reflect.ValueOf(v.Bool()).Convert(c.goType) +} +func (c *boolConverter) IsValidPB(v protoreflect.Value) bool { + _, ok := v.Interface().(bool) + return ok +} +func (c *boolConverter) IsValidGo(v reflect.Value) bool { + return v.IsValid() && v.Type() == c.goType +} +func (c *boolConverter) New() protoreflect.Value { return c.def } +func (c *boolConverter) Zero() protoreflect.Value { return c.def } + +type int32Converter struct { + goType reflect.Type + def protoreflect.Value +} + +func (c *int32Converter) PBValueOf(v reflect.Value) protoreflect.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + return protoreflect.ValueOfInt32(int32(v.Int())) +} +func (c *int32Converter) GoValueOf(v protoreflect.Value) reflect.Value { + return reflect.ValueOf(int32(v.Int())).Convert(c.goType) +} +func (c *int32Converter) IsValidPB(v protoreflect.Value) bool { + _, ok := v.Interface().(int32) + return ok +} +func (c *int32Converter) IsValidGo(v reflect.Value) bool { + return v.IsValid() && v.Type() == c.goType +} +func (c *int32Converter) New() protoreflect.Value { return c.def } +func (c *int32Converter) Zero() protoreflect.Value { return c.def } + +type int64Converter struct { + goType reflect.Type + def protoreflect.Value +} + +func (c *int64Converter) PBValueOf(v reflect.Value) protoreflect.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + return protoreflect.ValueOfInt64(int64(v.Int())) +} +func (c *int64Converter) GoValueOf(v protoreflect.Value) reflect.Value { + return reflect.ValueOf(int64(v.Int())).Convert(c.goType) +} +func (c *int64Converter) IsValidPB(v protoreflect.Value) bool { + _, ok := v.Interface().(int64) + return ok +} +func (c *int64Converter) IsValidGo(v reflect.Value) bool { + return v.IsValid() && v.Type() == c.goType +} +func (c *int64Converter) New() protoreflect.Value { return c.def } +func (c *int64Converter) Zero() protoreflect.Value { return c.def } + +type uint32Converter struct { + goType reflect.Type + def protoreflect.Value +} + +func (c *uint32Converter) PBValueOf(v reflect.Value) protoreflect.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + return protoreflect.ValueOfUint32(uint32(v.Uint())) +} +func (c *uint32Converter) GoValueOf(v protoreflect.Value) reflect.Value { + return reflect.ValueOf(uint32(v.Uint())).Convert(c.goType) +} +func (c *uint32Converter) IsValidPB(v protoreflect.Value) bool { + _, ok := v.Interface().(uint32) + return ok +} +func (c *uint32Converter) IsValidGo(v reflect.Value) bool { + return v.IsValid() && v.Type() == c.goType +} +func (c *uint32Converter) New() protoreflect.Value { return c.def } +func (c *uint32Converter) Zero() protoreflect.Value { return c.def } + +type uint64Converter struct { + goType reflect.Type + def protoreflect.Value +} + +func (c *uint64Converter) PBValueOf(v reflect.Value) protoreflect.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + return protoreflect.ValueOfUint64(uint64(v.Uint())) +} +func (c *uint64Converter) GoValueOf(v protoreflect.Value) reflect.Value { + return reflect.ValueOf(uint64(v.Uint())).Convert(c.goType) +} +func (c *uint64Converter) IsValidPB(v protoreflect.Value) bool { + _, ok := v.Interface().(uint64) + return ok +} +func (c *uint64Converter) IsValidGo(v reflect.Value) bool { + return v.IsValid() && v.Type() == c.goType +} +func (c *uint64Converter) New() protoreflect.Value { return c.def } +func (c *uint64Converter) Zero() protoreflect.Value { return c.def } + +type float32Converter struct { + goType reflect.Type + def protoreflect.Value +} + +func (c *float32Converter) PBValueOf(v reflect.Value) protoreflect.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + return protoreflect.ValueOfFloat32(float32(v.Float())) +} +func (c *float32Converter) GoValueOf(v protoreflect.Value) reflect.Value { + return reflect.ValueOf(float32(v.Float())).Convert(c.goType) +} +func (c *float32Converter) IsValidPB(v protoreflect.Value) bool { + _, ok := v.Interface().(float32) + return ok +} +func (c *float32Converter) IsValidGo(v reflect.Value) bool { + return v.IsValid() && v.Type() == c.goType +} +func (c *float32Converter) New() protoreflect.Value { return c.def } +func (c *float32Converter) Zero() protoreflect.Value { return c.def } + +type float64Converter struct { + goType reflect.Type + def protoreflect.Value +} + +func (c *float64Converter) PBValueOf(v reflect.Value) protoreflect.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + return protoreflect.ValueOfFloat64(float64(v.Float())) +} +func (c *float64Converter) GoValueOf(v protoreflect.Value) reflect.Value { + return reflect.ValueOf(float64(v.Float())).Convert(c.goType) +} +func (c *float64Converter) IsValidPB(v protoreflect.Value) bool { + _, ok := v.Interface().(float64) + return ok +} +func (c *float64Converter) IsValidGo(v reflect.Value) bool { + return v.IsValid() && v.Type() == c.goType +} +func (c *float64Converter) New() protoreflect.Value { return c.def } +func (c *float64Converter) Zero() protoreflect.Value { return c.def } + +type stringConverter struct { + goType reflect.Type + def protoreflect.Value +} + +func (c *stringConverter) PBValueOf(v reflect.Value) protoreflect.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + return protoreflect.ValueOfString(v.Convert(stringType).String()) +} +func (c *stringConverter) GoValueOf(v protoreflect.Value) reflect.Value { + // protoreflect.Value.String never panics, so we go through an interface + // conversion here to check the type. + s := v.Interface().(string) + if c.goType.Kind() == reflect.Slice && s == "" { + return reflect.Zero(c.goType) // ensure empty string is []byte(nil) + } + return reflect.ValueOf(s).Convert(c.goType) +} +func (c *stringConverter) IsValidPB(v protoreflect.Value) bool { + _, ok := v.Interface().(string) + return ok +} +func (c *stringConverter) IsValidGo(v reflect.Value) bool { + return v.IsValid() && v.Type() == c.goType +} +func (c *stringConverter) New() protoreflect.Value { return c.def } +func (c *stringConverter) Zero() protoreflect.Value { return c.def } + +type bytesConverter struct { + goType reflect.Type + def protoreflect.Value +} + +func (c *bytesConverter) PBValueOf(v reflect.Value) protoreflect.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + if c.goType.Kind() == reflect.String && v.Len() == 0 { + return protoreflect.ValueOfBytes(nil) // ensure empty string is []byte(nil) + } + return protoreflect.ValueOfBytes(v.Convert(bytesType).Bytes()) +} +func (c *bytesConverter) GoValueOf(v protoreflect.Value) reflect.Value { + return reflect.ValueOf(v.Bytes()).Convert(c.goType) +} +func (c *bytesConverter) IsValidPB(v protoreflect.Value) bool { + _, ok := v.Interface().([]byte) + return ok +} +func (c *bytesConverter) IsValidGo(v reflect.Value) bool { + return v.IsValid() && v.Type() == c.goType +} +func (c *bytesConverter) New() protoreflect.Value { return c.def } +func (c *bytesConverter) Zero() protoreflect.Value { return c.def } + +type enumConverter struct { + goType reflect.Type + def protoreflect.Value +} + +func newEnumConverter(goType reflect.Type, fd protoreflect.FieldDescriptor) Converter { + var def protoreflect.Value + if fd.Cardinality() == protoreflect.Repeated { + def = protoreflect.ValueOfEnum(fd.Enum().Values().Get(0).Number()) + } else { + def = fd.Default() + } + return &enumConverter{goType, def} +} + +func (c *enumConverter) PBValueOf(v reflect.Value) protoreflect.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + return protoreflect.ValueOfEnum(protoreflect.EnumNumber(v.Int())) +} + +func (c *enumConverter) GoValueOf(v protoreflect.Value) reflect.Value { + return reflect.ValueOf(v.Enum()).Convert(c.goType) +} + +func (c *enumConverter) IsValidPB(v protoreflect.Value) bool { + _, ok := v.Interface().(protoreflect.EnumNumber) + return ok +} + +func (c *enumConverter) IsValidGo(v reflect.Value) bool { + return v.IsValid() && v.Type() == c.goType +} + +func (c *enumConverter) New() protoreflect.Value { + return c.def +} + +func (c *enumConverter) Zero() protoreflect.Value { + return c.def +} + +type messageConverter struct { + goType reflect.Type +} + +func newMessageConverter(goType reflect.Type) Converter { + return &messageConverter{goType} +} + +func (c *messageConverter) PBValueOf(v reflect.Value) protoreflect.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + if c.isNonPointer() { + if v.CanAddr() { + v = v.Addr() // T => *T + } else { + v = reflect.Zero(reflect.PtrTo(v.Type())) + } + } + if m, ok := v.Interface().(protoreflect.ProtoMessage); ok { + return protoreflect.ValueOfMessage(m.ProtoReflect()) + } + return protoreflect.ValueOfMessage(legacyWrapMessage(v)) +} + +func (c *messageConverter) GoValueOf(v protoreflect.Value) reflect.Value { + m := v.Message() + var rv reflect.Value + if u, ok := m.(unwrapper); ok { + rv = reflect.ValueOf(u.protoUnwrap()) + } else { + rv = reflect.ValueOf(m.Interface()) + } + if c.isNonPointer() { + if rv.Type() != reflect.PtrTo(c.goType) { + panic(fmt.Sprintf("invalid type: got %v, want %v", rv.Type(), reflect.PtrTo(c.goType))) + } + if !rv.IsNil() { + rv = rv.Elem() // *T => T + } else { + rv = reflect.Zero(rv.Type().Elem()) + } + } + if rv.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", rv.Type(), c.goType)) + } + return rv +} + +func (c *messageConverter) IsValidPB(v protoreflect.Value) bool { + m := v.Message() + var rv reflect.Value + if u, ok := m.(unwrapper); ok { + rv = reflect.ValueOf(u.protoUnwrap()) + } else { + rv = reflect.ValueOf(m.Interface()) + } + if c.isNonPointer() { + return rv.Type() == reflect.PtrTo(c.goType) + } + return rv.Type() == c.goType +} + +func (c *messageConverter) IsValidGo(v reflect.Value) bool { + return v.IsValid() && v.Type() == c.goType +} + +func (c *messageConverter) New() protoreflect.Value { + if c.isNonPointer() { + return c.PBValueOf(reflect.New(c.goType).Elem()) + } + return c.PBValueOf(reflect.New(c.goType.Elem())) +} + +func (c *messageConverter) Zero() protoreflect.Value { + return c.PBValueOf(reflect.Zero(c.goType)) +} + +// isNonPointer reports whether the type is a non-pointer type. +// This never occurs for generated message types. +func (c *messageConverter) isNonPointer() bool { + return c.goType.Kind() != reflect.Ptr +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/convert_list.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/convert_list.go new file mode 100644 index 0000000..18cb96f --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/convert_list.go @@ -0,0 +1,141 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + + "google.golang.org/protobuf/reflect/protoreflect" +) + +func newListConverter(t reflect.Type, fd protoreflect.FieldDescriptor) Converter { + switch { + case t.Kind() == reflect.Ptr && t.Elem().Kind() == reflect.Slice: + return &listPtrConverter{t, newSingularConverter(t.Elem().Elem(), fd)} + case t.Kind() == reflect.Slice: + return &listConverter{t, newSingularConverter(t.Elem(), fd)} + } + panic(fmt.Sprintf("invalid Go type %v for field %v", t, fd.FullName())) +} + +type listConverter struct { + goType reflect.Type // []T + c Converter +} + +func (c *listConverter) PBValueOf(v reflect.Value) protoreflect.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + pv := reflect.New(c.goType) + pv.Elem().Set(v) + return protoreflect.ValueOfList(&listReflect{pv, c.c}) +} + +func (c *listConverter) GoValueOf(v protoreflect.Value) reflect.Value { + rv := v.List().(*listReflect).v + if rv.IsNil() { + return reflect.Zero(c.goType) + } + return rv.Elem() +} + +func (c *listConverter) IsValidPB(v protoreflect.Value) bool { + list, ok := v.Interface().(*listReflect) + if !ok { + return false + } + return list.v.Type().Elem() == c.goType +} + +func (c *listConverter) IsValidGo(v reflect.Value) bool { + return v.IsValid() && v.Type() == c.goType +} + +func (c *listConverter) New() protoreflect.Value { + return protoreflect.ValueOfList(&listReflect{reflect.New(c.goType), c.c}) +} + +func (c *listConverter) Zero() protoreflect.Value { + return protoreflect.ValueOfList(&listReflect{reflect.Zero(reflect.PtrTo(c.goType)), c.c}) +} + +type listPtrConverter struct { + goType reflect.Type // *[]T + c Converter +} + +func (c *listPtrConverter) PBValueOf(v reflect.Value) protoreflect.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + return protoreflect.ValueOfList(&listReflect{v, c.c}) +} + +func (c *listPtrConverter) GoValueOf(v protoreflect.Value) reflect.Value { + return v.List().(*listReflect).v +} + +func (c *listPtrConverter) IsValidPB(v protoreflect.Value) bool { + list, ok := v.Interface().(*listReflect) + if !ok { + return false + } + return list.v.Type() == c.goType +} + +func (c *listPtrConverter) IsValidGo(v reflect.Value) bool { + return v.IsValid() && v.Type() == c.goType +} + +func (c *listPtrConverter) New() protoreflect.Value { + return c.PBValueOf(reflect.New(c.goType.Elem())) +} + +func (c *listPtrConverter) Zero() protoreflect.Value { + return c.PBValueOf(reflect.Zero(c.goType)) +} + +type listReflect struct { + v reflect.Value // *[]T + conv Converter +} + +func (ls *listReflect) Len() int { + if ls.v.IsNil() { + return 0 + } + return ls.v.Elem().Len() +} +func (ls *listReflect) Get(i int) protoreflect.Value { + return ls.conv.PBValueOf(ls.v.Elem().Index(i)) +} +func (ls *listReflect) Set(i int, v protoreflect.Value) { + ls.v.Elem().Index(i).Set(ls.conv.GoValueOf(v)) +} +func (ls *listReflect) Append(v protoreflect.Value) { + ls.v.Elem().Set(reflect.Append(ls.v.Elem(), ls.conv.GoValueOf(v))) +} +func (ls *listReflect) AppendMutable() protoreflect.Value { + if _, ok := ls.conv.(*messageConverter); !ok { + panic("invalid AppendMutable on list with non-message type") + } + v := ls.NewElement() + ls.Append(v) + return v +} +func (ls *listReflect) Truncate(i int) { + ls.v.Elem().Set(ls.v.Elem().Slice(0, i)) +} +func (ls *listReflect) NewElement() protoreflect.Value { + return ls.conv.New() +} +func (ls *listReflect) IsValid() bool { + return !ls.v.IsNil() +} +func (ls *listReflect) protoUnwrap() any { + return ls.v.Interface() +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/convert_map.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/convert_map.go new file mode 100644 index 0000000..e4580b3 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/convert_map.go @@ -0,0 +1,121 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + + "google.golang.org/protobuf/reflect/protoreflect" +) + +type mapConverter struct { + goType reflect.Type // map[K]V + keyConv, valConv Converter +} + +func newMapConverter(t reflect.Type, fd protoreflect.FieldDescriptor) *mapConverter { + if t.Kind() != reflect.Map { + panic(fmt.Sprintf("invalid Go type %v for field %v", t, fd.FullName())) + } + return &mapConverter{ + goType: t, + keyConv: newSingularConverter(t.Key(), fd.MapKey()), + valConv: newSingularConverter(t.Elem(), fd.MapValue()), + } +} + +func (c *mapConverter) PBValueOf(v reflect.Value) protoreflect.Value { + if v.Type() != c.goType { + panic(fmt.Sprintf("invalid type: got %v, want %v", v.Type(), c.goType)) + } + return protoreflect.ValueOfMap(&mapReflect{v, c.keyConv, c.valConv}) +} + +func (c *mapConverter) GoValueOf(v protoreflect.Value) reflect.Value { + return v.Map().(*mapReflect).v +} + +func (c *mapConverter) IsValidPB(v protoreflect.Value) bool { + mapv, ok := v.Interface().(*mapReflect) + if !ok { + return false + } + return mapv.v.Type() == c.goType +} + +func (c *mapConverter) IsValidGo(v reflect.Value) bool { + return v.IsValid() && v.Type() == c.goType +} + +func (c *mapConverter) New() protoreflect.Value { + return c.PBValueOf(reflect.MakeMap(c.goType)) +} + +func (c *mapConverter) Zero() protoreflect.Value { + return c.PBValueOf(reflect.Zero(c.goType)) +} + +type mapReflect struct { + v reflect.Value // map[K]V + keyConv Converter + valConv Converter +} + +func (ms *mapReflect) Len() int { + return ms.v.Len() +} +func (ms *mapReflect) Has(k protoreflect.MapKey) bool { + rk := ms.keyConv.GoValueOf(k.Value()) + rv := ms.v.MapIndex(rk) + return rv.IsValid() +} +func (ms *mapReflect) Get(k protoreflect.MapKey) protoreflect.Value { + rk := ms.keyConv.GoValueOf(k.Value()) + rv := ms.v.MapIndex(rk) + if !rv.IsValid() { + return protoreflect.Value{} + } + return ms.valConv.PBValueOf(rv) +} +func (ms *mapReflect) Set(k protoreflect.MapKey, v protoreflect.Value) { + rk := ms.keyConv.GoValueOf(k.Value()) + rv := ms.valConv.GoValueOf(v) + ms.v.SetMapIndex(rk, rv) +} +func (ms *mapReflect) Clear(k protoreflect.MapKey) { + rk := ms.keyConv.GoValueOf(k.Value()) + ms.v.SetMapIndex(rk, reflect.Value{}) +} +func (ms *mapReflect) Mutable(k protoreflect.MapKey) protoreflect.Value { + if _, ok := ms.valConv.(*messageConverter); !ok { + panic("invalid Mutable on map with non-message value type") + } + v := ms.Get(k) + if !v.IsValid() { + v = ms.NewValue() + ms.Set(k, v) + } + return v +} +func (ms *mapReflect) Range(f func(protoreflect.MapKey, protoreflect.Value) bool) { + iter := ms.v.MapRange() + for iter.Next() { + k := ms.keyConv.PBValueOf(iter.Key()).MapKey() + v := ms.valConv.PBValueOf(iter.Value()) + if !f(k, v) { + return + } + } +} +func (ms *mapReflect) NewValue() protoreflect.Value { + return ms.valConv.New() +} +func (ms *mapReflect) IsValid() bool { + return !ms.v.IsNil() +} +func (ms *mapReflect) protoUnwrap() any { + return ms.v.Interface() +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/decode.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/decode.go new file mode 100644 index 0000000..e0dd21f --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/decode.go @@ -0,0 +1,333 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "math/bits" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/flags" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" + "google.golang.org/protobuf/runtime/protoiface" +) + +var errDecode = errors.New("cannot parse invalid wire-format data") +var errRecursionDepth = errors.New("exceeded maximum recursion depth") + +type unmarshalOptions struct { + flags protoiface.UnmarshalInputFlags + resolver interface { + FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) + FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) + } + depth int +} + +func (o unmarshalOptions) Options() proto.UnmarshalOptions { + return proto.UnmarshalOptions{ + Merge: true, + AllowPartial: true, + DiscardUnknown: o.DiscardUnknown(), + Resolver: o.resolver, + + NoLazyDecoding: o.NoLazyDecoding(), + } +} + +func (o unmarshalOptions) DiscardUnknown() bool { + return o.flags&protoiface.UnmarshalDiscardUnknown != 0 +} + +func (o unmarshalOptions) AliasBuffer() bool { return o.flags&protoiface.UnmarshalAliasBuffer != 0 } +func (o unmarshalOptions) Validated() bool { return o.flags&protoiface.UnmarshalValidated != 0 } +func (o unmarshalOptions) NoLazyDecoding() bool { + return o.flags&protoiface.UnmarshalNoLazyDecoding != 0 +} + +func (o unmarshalOptions) CanBeLazy() bool { + if o.resolver != protoregistry.GlobalTypes { + return false + } + // We ignore the UnmarshalInvalidateSizeCache even though it's not in the default set + return (o.flags & ^(protoiface.UnmarshalAliasBuffer | protoiface.UnmarshalValidated | protoiface.UnmarshalCheckRequired)) == 0 +} + +var lazyUnmarshalOptions = unmarshalOptions{ + resolver: protoregistry.GlobalTypes, + + flags: protoiface.UnmarshalAliasBuffer | protoiface.UnmarshalValidated, + + depth: protowire.DefaultRecursionLimit, +} + +type unmarshalOutput struct { + n int // number of bytes consumed + initialized bool +} + +// unmarshal is protoreflect.Methods.Unmarshal. +func (mi *MessageInfo) unmarshal(in protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + var p pointer + if ms, ok := in.Message.(*messageState); ok { + p = ms.pointer() + } else { + p = in.Message.(*messageReflectWrapper).pointer() + } + out, err := mi.unmarshalPointer(in.Buf, p, 0, unmarshalOptions{ + flags: in.Flags, + resolver: in.Resolver, + depth: in.Depth, + }) + var flags protoiface.UnmarshalOutputFlags + if out.initialized { + flags |= protoiface.UnmarshalInitialized + } + return protoiface.UnmarshalOutput{ + Flags: flags, + }, err +} + +// errUnknown is returned during unmarshaling to indicate a parse error that +// should result in a field being placed in the unknown fields section (for example, +// when the wire type doesn't match) as opposed to the entire unmarshal operation +// failing (for example, when a field extends past the available input). +// +// This is a sentinel error which should never be visible to the user. +var errUnknown = errors.New("unknown") + +func (mi *MessageInfo) unmarshalPointer(b []byte, p pointer, groupTag protowire.Number, opts unmarshalOptions) (out unmarshalOutput, err error) { + mi.init() + opts.depth-- + if opts.depth < 0 { + return out, errRecursionDepth + } + if flags.ProtoLegacy && mi.isMessageSet { + return unmarshalMessageSet(mi, b, p, opts) + } + + lazyDecoding := LazyEnabled() // default + if opts.NoLazyDecoding() { + lazyDecoding = false // explicitly disabled + } + if mi.lazyOffset.IsValid() && lazyDecoding { + return mi.unmarshalPointerLazy(b, p, groupTag, opts) + } + return mi.unmarshalPointerEager(b, p, groupTag, opts) +} + +// unmarshalPointerEager is the message unmarshalling function for all messages that are not lazy. +// The corresponding function for Lazy is in google_lazy.go. +func (mi *MessageInfo) unmarshalPointerEager(b []byte, p pointer, groupTag protowire.Number, opts unmarshalOptions) (out unmarshalOutput, err error) { + + initialized := true + var requiredMask uint64 + var exts *map[int32]ExtensionField + + var presence presence + if mi.presenceOffset.IsValid() { + presence = p.Apply(mi.presenceOffset).PresenceInfo() + } + + start := len(b) + for len(b) > 0 { + // Parse the tag (field number and wire type). + var tag uint64 + if b[0] < 0x80 { + tag = uint64(b[0]) + b = b[1:] + } else if len(b) >= 2 && b[1] < 128 { + tag = uint64(b[0]&0x7f) + uint64(b[1])<<7 + b = b[2:] + } else { + var n int + tag, n = protowire.ConsumeVarint(b) + if n < 0 { + return out, errDecode + } + b = b[n:] + } + var num protowire.Number + if n := tag >> 3; n < uint64(protowire.MinValidNumber) || n > uint64(protowire.MaxValidNumber) { + return out, errDecode + } else { + num = protowire.Number(n) + } + wtyp := protowire.Type(tag & 7) + + if wtyp == protowire.EndGroupType { + if num != groupTag { + return out, errDecode + } + groupTag = 0 + break + } + + var f *coderFieldInfo + if int(num) < len(mi.denseCoderFields) { + f = mi.denseCoderFields[num] + } else { + f = mi.coderFields[num] + } + var n int + err := errUnknown + switch { + case f != nil: + if f.funcs.unmarshal == nil { + break + } + var o unmarshalOutput + o, err = f.funcs.unmarshal(b, p.Apply(f.offset), wtyp, f, opts) + n = o.n + if err != nil { + break + } + requiredMask |= f.validation.requiredBit + if f.funcs.isInit != nil && !o.initialized { + initialized = false + } + + if f.presenceIndex != noPresence { + presence.SetPresentUnatomic(f.presenceIndex, mi.presenceSize) + } + + default: + // Possible extension. + if exts == nil && mi.extensionOffset.IsValid() { + exts = p.Apply(mi.extensionOffset).Extensions() + if *exts == nil { + *exts = make(map[int32]ExtensionField) + } + } + if exts == nil { + break + } + var o unmarshalOutput + o, err = mi.unmarshalExtension(b, num, wtyp, *exts, opts) + if err != nil { + break + } + n = o.n + if !o.initialized { + initialized = false + } + } + if err != nil { + if err != errUnknown { + return out, err + } + n = protowire.ConsumeFieldValue(num, wtyp, b) + if n < 0 { + return out, errDecode + } + if !opts.DiscardUnknown() && mi.unknownOffset.IsValid() { + u := mi.mutableUnknownBytes(p) + *u = protowire.AppendTag(*u, num, wtyp) + *u = append(*u, b[:n]...) + } + } + b = b[n:] + } + if groupTag != 0 { + return out, errDecode + } + if mi.numRequiredFields > 0 && bits.OnesCount64(requiredMask) != int(mi.numRequiredFields) { + initialized = false + } + if initialized { + out.initialized = true + } + out.n = start - len(b) + return out, nil +} + +func (mi *MessageInfo) unmarshalExtension(b []byte, num protowire.Number, wtyp protowire.Type, exts map[int32]ExtensionField, opts unmarshalOptions) (out unmarshalOutput, err error) { + x := exts[int32(num)] + xt := x.Type() + if xt == nil { + var err error + xt, err = opts.resolver.FindExtensionByNumber(mi.Desc.FullName(), num) + if err != nil { + if err == protoregistry.NotFound { + return out, errUnknown + } + return out, errors.New("%v: unable to resolve extension %v: %v", mi.Desc.FullName(), num, err) + } + } + xi := getExtensionFieldInfo(xt) + if xi.funcs.unmarshal == nil { + return out, errUnknown + } + if flags.LazyUnmarshalExtensions { + if opts.CanBeLazy() && x.canLazy(xt) { + out, valid := skipExtension(b, xi, num, wtyp, opts) + switch valid { + case ValidationValid: + if out.initialized { + x.appendLazyBytes(xt, xi, num, wtyp, b[:out.n]) + exts[int32(num)] = x + return out, nil + } + case ValidationInvalid: + return out, errDecode + case ValidationUnknown: + } + } + } + ival := x.Value() + if !ival.IsValid() && xi.unmarshalNeedsValue { + // Create a new message, list, or map value to fill in. + // For enums, create a prototype value to let the unmarshal func know the + // concrete type. + ival = xt.New() + } + v, out, err := xi.funcs.unmarshal(b, ival, num, wtyp, opts) + if err != nil { + return out, err + } + if xi.funcs.isInit == nil { + out.initialized = true + } + x.Set(xt, v) + exts[int32(num)] = x + return out, nil +} + +func skipExtension(b []byte, xi *extensionFieldInfo, num protowire.Number, wtyp protowire.Type, opts unmarshalOptions) (out unmarshalOutput, _ ValidationStatus) { + if xi.validation.mi == nil { + return out, ValidationUnknown + } + xi.validation.mi.init() + switch xi.validation.typ { + case validationTypeMessage: + if wtyp != protowire.BytesType { + return out, ValidationUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, ValidationUnknown + } + + if opts.Validated() { + out.initialized = true + out.n = n + return out, ValidationValid + } + + out, st := xi.validation.mi.validate(v, 0, opts) + out.n = n + return out, st + case validationTypeGroup: + if wtyp != protowire.StartGroupType { + return out, ValidationUnknown + } + out, st := xi.validation.mi.validate(b, num, opts) + return out, st + default: + return out, ValidationUnknown + } +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/encode.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/encode.go new file mode 100644 index 0000000..b2e2122 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/encode.go @@ -0,0 +1,315 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "math" + "sort" + "sync/atomic" + + "google.golang.org/protobuf/internal/flags" + "google.golang.org/protobuf/internal/protolazy" + "google.golang.org/protobuf/proto" + piface "google.golang.org/protobuf/runtime/protoiface" +) + +type marshalOptions struct { + flags piface.MarshalInputFlags +} + +func (o marshalOptions) Options() proto.MarshalOptions { + return proto.MarshalOptions{ + AllowPartial: true, + Deterministic: o.Deterministic(), + UseCachedSize: o.UseCachedSize(), + } +} + +func (o marshalOptions) Deterministic() bool { return o.flags&piface.MarshalDeterministic != 0 } +func (o marshalOptions) UseCachedSize() bool { return o.flags&piface.MarshalUseCachedSize != 0 } + +// size is protoreflect.Methods.Size. +func (mi *MessageInfo) size(in piface.SizeInput) piface.SizeOutput { + var p pointer + if ms, ok := in.Message.(*messageState); ok { + p = ms.pointer() + } else { + p = in.Message.(*messageReflectWrapper).pointer() + } + size := mi.sizePointer(p, marshalOptions{ + flags: in.Flags, + }) + return piface.SizeOutput{Size: size} +} + +func (mi *MessageInfo) sizePointer(p pointer, opts marshalOptions) (size int) { + mi.init() + if p.IsNil() { + return 0 + } + if opts.UseCachedSize() && mi.sizecacheOffset.IsValid() { + // The size cache contains the size + 1, to allow the + // zero value to be invalid, while also allowing for a + // 0 size to be cached. + if size := atomic.LoadInt32(p.Apply(mi.sizecacheOffset).Int32()); size > 0 { + return int(size - 1) + } + } + return mi.sizePointerSlow(p, opts) +} + +func (mi *MessageInfo) sizePointerSlow(p pointer, opts marshalOptions) (size int) { + if flags.ProtoLegacy && mi.isMessageSet { + size = sizeMessageSet(mi, p, opts) + if mi.sizecacheOffset.IsValid() { + atomic.StoreInt32(p.Apply(mi.sizecacheOffset).Int32(), int32(size+1)) + } + return size + } + if mi.extensionOffset.IsValid() { + e := p.Apply(mi.extensionOffset).Extensions() + size += mi.sizeExtensions(e, opts) + } + + var lazy **protolazy.XXX_lazyUnmarshalInfo + var presence presence + if mi.presenceOffset.IsValid() { + presence = p.Apply(mi.presenceOffset).PresenceInfo() + if mi.lazyOffset.IsValid() { + lazy = p.Apply(mi.lazyOffset).LazyInfoPtr() + } + } + + for _, f := range mi.orderedCoderFields { + if f.funcs.size == nil { + continue + } + fptr := p.Apply(f.offset) + + if f.presenceIndex != noPresence { + if !presence.Present(f.presenceIndex) { + continue + } + + if f.isLazy && fptr.AtomicGetPointer().IsNil() { + if lazyFields(opts) { + size += (*lazy).SizeField(uint32(f.num)) + continue + } else { + mi.lazyUnmarshal(p, f.num) + } + } + size += f.funcs.size(fptr, f, opts) + continue + } + + if f.isPointer && fptr.Elem().IsNil() { + continue + } + size += f.funcs.size(fptr, f, opts) + } + if mi.unknownOffset.IsValid() { + if u := mi.getUnknownBytes(p); u != nil { + size += len(*u) + } + } + if mi.sizecacheOffset.IsValid() { + if size > (math.MaxInt32 - 1) { + // The size is too large for the int32 sizecache field. + // We will need to recompute the size when encoding; + // unfortunately expensive, but better than invalid output. + atomic.StoreInt32(p.Apply(mi.sizecacheOffset).Int32(), 0) + } else { + // The size cache contains the size + 1, to allow the + // zero value to be invalid, while also allowing for a + // 0 size to be cached. + atomic.StoreInt32(p.Apply(mi.sizecacheOffset).Int32(), int32(size+1)) + } + } + return size +} + +// marshal is protoreflect.Methods.Marshal. +func (mi *MessageInfo) marshal(in piface.MarshalInput) (out piface.MarshalOutput, err error) { + var p pointer + if ms, ok := in.Message.(*messageState); ok { + p = ms.pointer() + } else { + p = in.Message.(*messageReflectWrapper).pointer() + } + b, err := mi.marshalAppendPointer(in.Buf, p, marshalOptions{ + flags: in.Flags, + }) + return piface.MarshalOutput{Buf: b}, err +} + +func (mi *MessageInfo) marshalAppendPointer(b []byte, p pointer, opts marshalOptions) ([]byte, error) { + mi.init() + if p.IsNil() { + return b, nil + } + if flags.ProtoLegacy && mi.isMessageSet { + return marshalMessageSet(mi, b, p, opts) + } + var err error + // The old marshaler encodes extensions at beginning. + if mi.extensionOffset.IsValid() { + e := p.Apply(mi.extensionOffset).Extensions() + // TODO: Special handling for MessageSet? + b, err = mi.appendExtensions(b, e, opts) + if err != nil { + return b, err + } + } + + var lazy **protolazy.XXX_lazyUnmarshalInfo + var presence presence + if mi.presenceOffset.IsValid() { + presence = p.Apply(mi.presenceOffset).PresenceInfo() + if mi.lazyOffset.IsValid() { + lazy = p.Apply(mi.lazyOffset).LazyInfoPtr() + } + } + + for _, f := range mi.orderedCoderFields { + if f.funcs.marshal == nil { + continue + } + fptr := p.Apply(f.offset) + + if f.presenceIndex != noPresence { + if !presence.Present(f.presenceIndex) { + continue + } + if f.isLazy { + // Be careful, this field needs to be read atomically, like for a get + if f.isPointer && fptr.AtomicGetPointer().IsNil() { + if lazyFields(opts) { + b, _ = (*lazy).AppendField(b, uint32(f.num)) + continue + } else { + mi.lazyUnmarshal(p, f.num) + } + } + + b, err = f.funcs.marshal(b, fptr, f, opts) + if err != nil { + return b, err + } + continue + } else if f.isPointer && fptr.Elem().IsNil() { + continue + } + b, err = f.funcs.marshal(b, fptr, f, opts) + if err != nil { + return b, err + } + continue + } + + if f.isPointer && fptr.Elem().IsNil() { + continue + } + b, err = f.funcs.marshal(b, fptr, f, opts) + if err != nil { + return b, err + } + } + if mi.unknownOffset.IsValid() && !mi.isMessageSet { + if u := mi.getUnknownBytes(p); u != nil { + b = append(b, (*u)...) + } + } + return b, nil +} + +// fullyLazyExtensions returns true if we should attempt to keep extensions lazy over size and marshal. +func fullyLazyExtensions(opts marshalOptions) bool { + // When deterministic marshaling is requested, force an unmarshal for lazy + // extensions to produce a deterministic result, instead of passing through + // bytes lazily that may or may not match what Go Protobuf would produce. + return opts.flags&piface.MarshalDeterministic == 0 +} + +// lazyFields returns true if we should attempt to keep fields lazy over size and marshal. +func lazyFields(opts marshalOptions) bool { + // When deterministic marshaling is requested, force an unmarshal for lazy + // fields to produce a deterministic result, instead of passing through + // bytes lazily that may or may not match what Go Protobuf would produce. + return opts.flags&piface.MarshalDeterministic == 0 +} + +func (mi *MessageInfo) sizeExtensions(ext *map[int32]ExtensionField, opts marshalOptions) (n int) { + if ext == nil { + return 0 + } + for _, x := range *ext { + xi := getExtensionFieldInfo(x.Type()) + if xi.funcs.size == nil { + continue + } + if fullyLazyExtensions(opts) { + // Don't expand the extension, instead use the buffer to calculate size + if lb := x.lazyBuffer(); lb != nil { + // We got hold of the buffer, so it's still lazy. + n += len(lb) + continue + } + } + n += xi.funcs.size(x.Value(), xi.tagsize, opts) + } + return n +} + +func (mi *MessageInfo) appendExtensions(b []byte, ext *map[int32]ExtensionField, opts marshalOptions) ([]byte, error) { + if ext == nil { + return b, nil + } + + switch len(*ext) { + case 0: + return b, nil + case 1: + // Fast-path for one extension: Don't bother sorting the keys. + var err error + for _, x := range *ext { + xi := getExtensionFieldInfo(x.Type()) + if fullyLazyExtensions(opts) { + // Don't expand the extension if it's still in wire format, instead use the buffer content. + if lb := x.lazyBuffer(); lb != nil { + b = append(b, lb...) + continue + } + } + b, err = xi.funcs.marshal(b, x.Value(), xi.wiretag, opts) + } + return b, err + default: + // Sort the keys to provide a deterministic encoding. + // Not sure this is required, but the old code does it. + keys := make([]int, 0, len(*ext)) + for k := range *ext { + keys = append(keys, int(k)) + } + sort.Ints(keys) + var err error + for _, k := range keys { + x := (*ext)[int32(k)] + xi := getExtensionFieldInfo(x.Type()) + if fullyLazyExtensions(opts) { + // Don't expand the extension if it's still in wire format, instead use the buffer content. + if lb := x.lazyBuffer(); lb != nil { + b = append(b, lb...) + continue + } + } + b, err = xi.funcs.marshal(b, x.Value(), xi.wiretag, opts) + if err != nil { + return b, err + } + } + return b, nil + } +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/enum.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/enum.go new file mode 100644 index 0000000..5f3ef5a --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/enum.go @@ -0,0 +1,21 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "reflect" + + "google.golang.org/protobuf/reflect/protoreflect" +) + +type EnumInfo struct { + GoReflectType reflect.Type // int32 kind + Desc protoreflect.EnumDescriptor +} + +func (t *EnumInfo) New(n protoreflect.EnumNumber) protoreflect.Enum { + return reflect.ValueOf(n).Convert(t.GoReflectType).Interface().(protoreflect.Enum) +} +func (t *EnumInfo) Descriptor() protoreflect.EnumDescriptor { return t.Desc } diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/equal.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/equal.go new file mode 100644 index 0000000..9f6c32a --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/equal.go @@ -0,0 +1,224 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "bytes" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" +) + +func equal(in protoiface.EqualInput) protoiface.EqualOutput { + return protoiface.EqualOutput{Equal: equalMessage(in.MessageA, in.MessageB)} +} + +// equalMessage is a fast-path variant of protoreflect.equalMessage. +// It takes advantage of the internal messageState type to avoid +// unnecessary allocations, type assertions. +func equalMessage(mx, my protoreflect.Message) bool { + if mx == nil || my == nil { + return mx == my + } + if mx.Descriptor() != my.Descriptor() { + return false + } + + msx, ok := mx.(*messageState) + if !ok { + return protoreflect.ValueOfMessage(mx).Equal(protoreflect.ValueOfMessage(my)) + } + msy, ok := my.(*messageState) + if !ok { + return protoreflect.ValueOfMessage(mx).Equal(protoreflect.ValueOfMessage(my)) + } + + mi := msx.messageInfo() + miy := msy.messageInfo() + if mi != miy { + return protoreflect.ValueOfMessage(mx).Equal(protoreflect.ValueOfMessage(my)) + } + mi.init() + // Compares regular fields + // Modified Message.Range code that compares two messages of the same type + // while going over the fields. + for _, ri := range mi.rangeInfos { + var fd protoreflect.FieldDescriptor + var vx, vy protoreflect.Value + + switch ri := ri.(type) { + case *fieldInfo: + hx := ri.has(msx.pointer()) + hy := ri.has(msy.pointer()) + if hx != hy { + return false + } + if !hx { + continue + } + fd = ri.fieldDesc + vx = ri.get(msx.pointer()) + vy = ri.get(msy.pointer()) + case *oneofInfo: + fnx := ri.which(msx.pointer()) + fny := ri.which(msy.pointer()) + if fnx != fny { + return false + } + if fnx <= 0 { + continue + } + fi := mi.fields[fnx] + fd = fi.fieldDesc + vx = fi.get(msx.pointer()) + vy = fi.get(msy.pointer()) + } + + if !equalValue(fd, vx, vy) { + return false + } + } + + // Compare extensions. + // This is more complicated because mx or my could have empty/nil extension maps, + // however some populated extension map values are equal to nil extension maps. + emx := mi.extensionMap(msx.pointer()) + emy := mi.extensionMap(msy.pointer()) + if emx != nil { + for k, x := range *emx { + xd := x.Type().TypeDescriptor() + xv := x.Value() + var y ExtensionField + ok := false + if emy != nil { + y, ok = (*emy)[k] + } + // We need to treat empty lists as equal to nil values + if emy == nil || !ok { + if xd.IsList() && xv.List().Len() == 0 { + continue + } + return false + } + + if !equalValue(xd, xv, y.Value()) { + return false + } + } + } + if emy != nil { + // emy may have extensions emx does not have, need to check them as well + for k, y := range *emy { + if emx != nil { + // emx has the field, so we already checked it + if _, ok := (*emx)[k]; ok { + continue + } + } + // Empty lists are equal to nil + if y.Type().TypeDescriptor().IsList() && y.Value().List().Len() == 0 { + continue + } + + // Cant be equal if the extension is populated + return false + } + } + + return equalUnknown(mx.GetUnknown(), my.GetUnknown()) +} + +func equalValue(fd protoreflect.FieldDescriptor, vx, vy protoreflect.Value) bool { + // slow path + if fd.Kind() != protoreflect.MessageKind { + return vx.Equal(vy) + } + + // fast path special cases + if fd.IsMap() { + if fd.MapValue().Kind() == protoreflect.MessageKind { + return equalMessageMap(vx.Map(), vy.Map()) + } + return vx.Equal(vy) + } + + if fd.IsList() { + return equalMessageList(vx.List(), vy.List()) + } + + return equalMessage(vx.Message(), vy.Message()) +} + +// Mostly copied from protoreflect.equalMap. +// This variant only works for messages as map types. +// All other map types should be handled via Value.Equal. +func equalMessageMap(mx, my protoreflect.Map) bool { + if mx.Len() != my.Len() { + return false + } + equal := true + mx.Range(func(k protoreflect.MapKey, vx protoreflect.Value) bool { + if !my.Has(k) { + equal = false + return false + } + vy := my.Get(k) + equal = equalMessage(vx.Message(), vy.Message()) + return equal + }) + return equal +} + +// Mostly copied from protoreflect.equalList. +// The only change is the usage of equalImpl instead of protoreflect.equalValue. +func equalMessageList(lx, ly protoreflect.List) bool { + if lx.Len() != ly.Len() { + return false + } + for i := 0; i < lx.Len(); i++ { + // We only operate on messages here since equalImpl will not call us in any other case. + if !equalMessage(lx.Get(i).Message(), ly.Get(i).Message()) { + return false + } + } + return true +} + +// equalUnknown compares unknown fields by direct comparison on the raw bytes +// of each individual field number. +// Copied from protoreflect.equalUnknown. +func equalUnknown(x, y protoreflect.RawFields) bool { + if len(x) != len(y) { + return false + } + if bytes.Equal([]byte(x), []byte(y)) { + return true + } + + mx := make(map[protoreflect.FieldNumber]protoreflect.RawFields) + my := make(map[protoreflect.FieldNumber]protoreflect.RawFields) + for len(x) > 0 { + fnum, _, n := protowire.ConsumeField(x) + mx[fnum] = append(mx[fnum], x[:n]...) + x = x[n:] + } + for len(y) > 0 { + fnum, _, n := protowire.ConsumeField(y) + my[fnum] = append(my[fnum], y[:n]...) + y = y[n:] + } + if len(mx) != len(my) { + return false + } + + for k, v1 := range mx { + if v2, ok := my[k]; !ok || !bytes.Equal([]byte(v1), []byte(v2)) { + return false + } + } + + return true +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/extension.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/extension.go new file mode 100644 index 0000000..e31249f --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/extension.go @@ -0,0 +1,156 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "reflect" + "sync" + "sync/atomic" + + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" +) + +// ExtensionInfo implements ExtensionType. +// +// This type contains a number of exported fields for legacy compatibility. +// The only non-deprecated use of this type is through the methods of the +// ExtensionType interface. +type ExtensionInfo struct { + // An ExtensionInfo may exist in several stages of initialization. + // + // extensionInfoUninitialized: Some or all of the legacy exported + // fields may be set, but none of the unexported fields have been + // initialized. This is the starting state for an ExtensionInfo + // in legacy generated code. + // + // extensionInfoDescInit: The desc field is set, but other unexported fields + // may not be initialized. Legacy exported fields may or may not be set. + // This is the starting state for an ExtensionInfo in newly generated code. + // + // extensionInfoFullInit: The ExtensionInfo is fully initialized. + // This state is only entered after lazy initialization is complete. + init uint32 + mu sync.Mutex + + goType reflect.Type + desc extensionTypeDescriptor + conv Converter + info *extensionFieldInfo // for fast-path method implementations + + // ExtendedType is a typed nil-pointer to the parent message type that + // is being extended. It is possible for this to be unpopulated in v2 + // since the message may no longer implement the MessageV1 interface. + // + // Deprecated: Use the ExtendedType method instead. + ExtendedType protoiface.MessageV1 + + // ExtensionType is the zero value of the extension type. + // + // For historical reasons, reflect.TypeOf(ExtensionType) and the + // type returned by InterfaceOf may not be identical. + // + // Deprecated: Use InterfaceOf(xt.Zero()) instead. + ExtensionType any + + // Field is the field number of the extension. + // + // Deprecated: Use the Descriptor().Number method instead. + Field int32 + + // Name is the fully qualified name of extension. + // + // Deprecated: Use the Descriptor().FullName method instead. + Name string + + // Tag is the protobuf struct tag used in the v1 API. + // + // Deprecated: Do not use. + Tag string + + // Filename is the proto filename in which the extension is defined. + // + // Deprecated: Use Descriptor().ParentFile().Path() instead. + Filename string +} + +// Stages of initialization: See the ExtensionInfo.init field. +const ( + extensionInfoUninitialized = 0 + extensionInfoDescInit = 1 + extensionInfoFullInit = 2 +) + +func InitExtensionInfo(xi *ExtensionInfo, xd protoreflect.ExtensionDescriptor, goType reflect.Type) { + xi.goType = goType + xi.desc = extensionTypeDescriptor{xd, xi} + xi.init = extensionInfoDescInit +} + +func (xi *ExtensionInfo) New() protoreflect.Value { + return xi.lazyInit().New() +} +func (xi *ExtensionInfo) Zero() protoreflect.Value { + return xi.lazyInit().Zero() +} +func (xi *ExtensionInfo) ValueOf(v any) protoreflect.Value { + return xi.lazyInit().PBValueOf(reflect.ValueOf(v)) +} +func (xi *ExtensionInfo) InterfaceOf(v protoreflect.Value) any { + return xi.lazyInit().GoValueOf(v).Interface() +} +func (xi *ExtensionInfo) IsValidValue(v protoreflect.Value) bool { + return xi.lazyInit().IsValidPB(v) +} +func (xi *ExtensionInfo) IsValidInterface(v any) bool { + return xi.lazyInit().IsValidGo(reflect.ValueOf(v)) +} +func (xi *ExtensionInfo) TypeDescriptor() protoreflect.ExtensionTypeDescriptor { + if atomic.LoadUint32(&xi.init) < extensionInfoDescInit { + xi.lazyInitSlow() + } + return &xi.desc +} + +func (xi *ExtensionInfo) lazyInit() Converter { + if atomic.LoadUint32(&xi.init) < extensionInfoFullInit { + xi.lazyInitSlow() + } + return xi.conv +} + +func (xi *ExtensionInfo) lazyInitSlow() { + xi.mu.Lock() + defer xi.mu.Unlock() + + if xi.init == extensionInfoFullInit { + return + } + defer atomic.StoreUint32(&xi.init, extensionInfoFullInit) + + if xi.desc.ExtensionDescriptor == nil { + xi.initFromLegacy() + } + if !xi.desc.ExtensionDescriptor.IsPlaceholder() { + if xi.ExtensionType == nil { + xi.initToLegacy() + } + xi.conv = NewConverter(xi.goType, xi.desc.ExtensionDescriptor) + xi.info = makeExtensionFieldInfo(xi.desc.ExtensionDescriptor) + xi.info.validation = newValidationInfo(xi.desc.ExtensionDescriptor, xi.goType) + } +} + +type extensionTypeDescriptor struct { + protoreflect.ExtensionDescriptor + xi *ExtensionInfo +} + +func (xtd *extensionTypeDescriptor) Type() protoreflect.ExtensionType { + return xtd.xi +} +func (xtd *extensionTypeDescriptor) Descriptor() protoreflect.ExtensionDescriptor { + return xtd.ExtensionDescriptor +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/lazy.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/lazy.go new file mode 100644 index 0000000..c7de31e --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/lazy.go @@ -0,0 +1,433 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "math/bits" + "os" + "reflect" + "sort" + "sync/atomic" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/protolazy" + "google.golang.org/protobuf/reflect/protoreflect" + preg "google.golang.org/protobuf/reflect/protoregistry" + piface "google.golang.org/protobuf/runtime/protoiface" +) + +var enableLazy int32 = func() int32 { + if os.Getenv("GOPROTODEBUG") == "nolazy" { + return 0 + } + return 1 +}() + +// EnableLazyUnmarshal enables lazy unmarshaling. +func EnableLazyUnmarshal(enable bool) { + if enable { + atomic.StoreInt32(&enableLazy, 1) + return + } + atomic.StoreInt32(&enableLazy, 0) +} + +// LazyEnabled reports whether lazy unmarshalling is currently enabled. +func LazyEnabled() bool { + return atomic.LoadInt32(&enableLazy) != 0 +} + +// UnmarshalField unmarshals a field in a message. +func UnmarshalField(m interface{}, num protowire.Number) { + switch m := m.(type) { + case *messageState: + m.messageInfo().lazyUnmarshal(m.pointer(), num) + case *messageReflectWrapper: + m.messageInfo().lazyUnmarshal(m.pointer(), num) + default: + panic(fmt.Sprintf("unsupported wrapper type %T", m)) + } +} + +func (mi *MessageInfo) lazyUnmarshal(p pointer, num protoreflect.FieldNumber) { + var f *coderFieldInfo + if int(num) < len(mi.denseCoderFields) { + f = mi.denseCoderFields[num] + } else { + f = mi.coderFields[num] + } + if f == nil { + panic(fmt.Sprintf("lazyUnmarshal: field info for %v.%v", mi.Desc.FullName(), num)) + } + lazy := *p.Apply(mi.lazyOffset).LazyInfoPtr() + start, end, found, _, multipleEntries := lazy.FindFieldInProto(uint32(num)) + if !found && multipleEntries == nil { + panic(fmt.Sprintf("lazyUnmarshal: can't find field data for %v.%v", mi.Desc.FullName(), num)) + } + // The actual pointer in the message can not be set until the whole struct is filled in, otherwise we will have races. + // Create another pointer and set it atomically, if we won the race and the pointer in the original message is still nil. + fp := pointerOfValue(reflect.New(f.ft)) + if multipleEntries != nil { + for _, entry := range multipleEntries { + mi.unmarshalField(lazy.Buffer()[entry.Start:entry.End], fp, f, lazy, lazy.UnmarshalFlags()) + } + } else { + mi.unmarshalField(lazy.Buffer()[start:end], fp, f, lazy, lazy.UnmarshalFlags()) + } + p.Apply(f.offset).AtomicSetPointerIfNil(fp.Elem()) +} + +func (mi *MessageInfo) unmarshalField(b []byte, p pointer, f *coderFieldInfo, lazyInfo *protolazy.XXX_lazyUnmarshalInfo, flags piface.UnmarshalInputFlags) error { + opts := lazyUnmarshalOptions + opts.flags |= flags + for len(b) > 0 { + // Parse the tag (field number and wire type). + var tag uint64 + if b[0] < 0x80 { + tag = uint64(b[0]) + b = b[1:] + } else if len(b) >= 2 && b[1] < 128 { + tag = uint64(b[0]&0x7f) + uint64(b[1])<<7 + b = b[2:] + } else { + var n int + tag, n = protowire.ConsumeVarint(b) + if n < 0 { + return errors.New("invalid wire data") + } + b = b[n:] + } + var num protowire.Number + if n := tag >> 3; n < uint64(protowire.MinValidNumber) || n > uint64(protowire.MaxValidNumber) { + return errors.New("invalid wire data") + } else { + num = protowire.Number(n) + } + wtyp := protowire.Type(tag & 7) + if num == f.num { + o, err := f.funcs.unmarshal(b, p, wtyp, f, opts) + if err == nil { + b = b[o.n:] + continue + } + if err != errUnknown { + return err + } + } + n := protowire.ConsumeFieldValue(num, wtyp, b) + if n < 0 { + return errors.New("invalid wire data") + } + b = b[n:] + } + return nil +} + +func (mi *MessageInfo) skipField(b []byte, f *coderFieldInfo, wtyp protowire.Type, opts unmarshalOptions) (out unmarshalOutput, _ ValidationStatus) { + fmi := f.validation.mi + if fmi == nil { + fd := mi.Desc.Fields().ByNumber(f.num) + if fd == nil { + return out, ValidationUnknown + } + messageName := fd.Message().FullName() + messageType, err := preg.GlobalTypes.FindMessageByName(messageName) + if err != nil { + return out, ValidationUnknown + } + var ok bool + fmi, ok = messageType.(*MessageInfo) + if !ok { + return out, ValidationUnknown + } + } + fmi.init() + switch f.validation.typ { + case validationTypeMessage: + if wtyp != protowire.BytesType { + return out, ValidationWrongWireType + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, ValidationInvalid + } + out, st := fmi.validate(v, 0, opts) + out.n = n + return out, st + case validationTypeGroup: + if wtyp != protowire.StartGroupType { + return out, ValidationWrongWireType + } + out, st := fmi.validate(b, f.num, opts) + return out, st + default: + return out, ValidationUnknown + } +} + +// unmarshalPointerLazy is similar to unmarshalPointerEager, but it +// specifically handles lazy unmarshalling. it expects lazyOffset and +// presenceOffset to both be valid. +func (mi *MessageInfo) unmarshalPointerLazy(b []byte, p pointer, groupTag protowire.Number, opts unmarshalOptions) (out unmarshalOutput, err error) { + initialized := true + var requiredMask uint64 + var lazy **protolazy.XXX_lazyUnmarshalInfo + var presence presence + var lazyIndex []protolazy.IndexEntry + var lastNum protowire.Number + outOfOrder := false + lazyDecode := false + presence = p.Apply(mi.presenceOffset).PresenceInfo() + lazy = p.Apply(mi.lazyOffset).LazyInfoPtr() + if !presence.AnyPresent(mi.presenceSize) { + if opts.CanBeLazy() { + // If the message contains existing data, we need to merge into it. + // Lazy unmarshaling doesn't merge, so only enable it when the + // message is empty (has no presence bitmap). + lazyDecode = true + if *lazy == nil { + *lazy = &protolazy.XXX_lazyUnmarshalInfo{} + } + (*lazy).SetUnmarshalFlags(opts.flags) + if !opts.AliasBuffer() { + // Make a copy of the buffer for lazy unmarshaling. + // Set the AliasBuffer flag so recursive unmarshal + // operations reuse the copy. + b = append([]byte{}, b...) + opts.flags |= piface.UnmarshalAliasBuffer + } + (*lazy).SetBuffer(b) + } + } + // Track special handling of lazy fields. + // + // In the common case, all fields are lazyValidateOnly (and lazyFields remains nil). + // In the event that validation for a field fails, this map tracks handling of the field. + type lazyAction uint8 + const ( + lazyValidateOnly lazyAction = iota // validate the field only + lazyUnmarshalNow // eagerly unmarshal the field + lazyUnmarshalLater // unmarshal the field after the message is fully processed + ) + var lazyFields map[*coderFieldInfo]lazyAction + var exts *map[int32]ExtensionField + start := len(b) + pos := 0 + for len(b) > 0 { + // Parse the tag (field number and wire type). + var tag uint64 + if b[0] < 0x80 { + tag = uint64(b[0]) + b = b[1:] + } else if len(b) >= 2 && b[1] < 128 { + tag = uint64(b[0]&0x7f) + uint64(b[1])<<7 + b = b[2:] + } else { + var n int + tag, n = protowire.ConsumeVarint(b) + if n < 0 { + return out, errDecode + } + b = b[n:] + } + var num protowire.Number + if n := tag >> 3; n < uint64(protowire.MinValidNumber) || n > uint64(protowire.MaxValidNumber) { + return out, errors.New("invalid field number") + } else { + num = protowire.Number(n) + } + wtyp := protowire.Type(tag & 7) + + if wtyp == protowire.EndGroupType { + if num != groupTag { + return out, errors.New("mismatching end group marker") + } + groupTag = 0 + break + } + + var f *coderFieldInfo + if int(num) < len(mi.denseCoderFields) { + f = mi.denseCoderFields[num] + } else { + f = mi.coderFields[num] + } + var n int + err := errUnknown + discardUnknown := false + Field: + switch { + case f != nil: + if f.funcs.unmarshal == nil { + break + } + if f.isLazy && lazyDecode { + switch { + case lazyFields == nil || lazyFields[f] == lazyValidateOnly: + // Attempt to validate this field and leave it for later lazy unmarshaling. + o, valid := mi.skipField(b, f, wtyp, opts) + switch valid { + case ValidationValid: + // Skip over the valid field and continue. + err = nil + presence.SetPresentUnatomic(f.presenceIndex, mi.presenceSize) + requiredMask |= f.validation.requiredBit + if !o.initialized { + initialized = false + } + n = o.n + break Field + case ValidationInvalid: + return out, errors.New("invalid proto wire format") + case ValidationWrongWireType: + break Field + case ValidationUnknown: + if lazyFields == nil { + lazyFields = make(map[*coderFieldInfo]lazyAction) + } + if presence.Present(f.presenceIndex) { + // We were unable to determine if the field is valid or not, + // and we've already skipped over at least one instance of this + // field. Clear the presence bit (so if we stop decoding early, + // we don't leave a partially-initialized field around) and flag + // the field for unmarshaling before we return. + presence.ClearPresent(f.presenceIndex) + lazyFields[f] = lazyUnmarshalLater + discardUnknown = true + break Field + } else { + // We were unable to determine if the field is valid or not, + // but this is the first time we've seen it. Flag it as needing + // eager unmarshaling and fall through to the eager unmarshal case below. + lazyFields[f] = lazyUnmarshalNow + } + } + case lazyFields[f] == lazyUnmarshalLater: + // This field will be unmarshaled in a separate pass below. + // Skip over it here. + discardUnknown = true + break Field + default: + // Eagerly unmarshal the field. + } + } + if f.isLazy && !lazyDecode && presence.Present(f.presenceIndex) { + if p.Apply(f.offset).AtomicGetPointer().IsNil() { + mi.lazyUnmarshal(p, f.num) + } + } + var o unmarshalOutput + o, err = f.funcs.unmarshal(b, p.Apply(f.offset), wtyp, f, opts) + n = o.n + if err != nil { + break + } + requiredMask |= f.validation.requiredBit + if f.funcs.isInit != nil && !o.initialized { + initialized = false + } + if f.presenceIndex != noPresence { + presence.SetPresentUnatomic(f.presenceIndex, mi.presenceSize) + } + default: + // Possible extension. + if exts == nil && mi.extensionOffset.IsValid() { + exts = p.Apply(mi.extensionOffset).Extensions() + if *exts == nil { + *exts = make(map[int32]ExtensionField) + } + } + if exts == nil { + break + } + var o unmarshalOutput + o, err = mi.unmarshalExtension(b, num, wtyp, *exts, opts) + if err != nil { + break + } + n = o.n + if !o.initialized { + initialized = false + } + } + if err != nil { + if err != errUnknown { + return out, err + } + n = protowire.ConsumeFieldValue(num, wtyp, b) + if n < 0 { + return out, errDecode + } + if !discardUnknown && !opts.DiscardUnknown() && mi.unknownOffset.IsValid() { + u := mi.mutableUnknownBytes(p) + *u = protowire.AppendTag(*u, num, wtyp) + *u = append(*u, b[:n]...) + } + } + b = b[n:] + end := start - len(b) + if lazyDecode && f != nil && f.isLazy { + if num != lastNum { + lazyIndex = append(lazyIndex, protolazy.IndexEntry{ + FieldNum: uint32(num), + Start: uint32(pos), + End: uint32(end), + }) + } else { + i := len(lazyIndex) - 1 + lazyIndex[i].End = uint32(end) + lazyIndex[i].MultipleContiguous = true + } + } + if num < lastNum { + outOfOrder = true + } + pos = end + lastNum = num + } + if groupTag != 0 { + return out, errors.New("missing end group marker") + } + if lazyFields != nil { + // Some fields failed validation, and now need to be unmarshaled. + for f, action := range lazyFields { + if action != lazyUnmarshalLater { + continue + } + initialized = false + if *lazy == nil { + *lazy = &protolazy.XXX_lazyUnmarshalInfo{} + } + if err := mi.unmarshalField((*lazy).Buffer(), p.Apply(f.offset), f, *lazy, opts.flags); err != nil { + return out, err + } + presence.SetPresentUnatomic(f.presenceIndex, mi.presenceSize) + } + } + if lazyDecode { + if outOfOrder { + sort.Slice(lazyIndex, func(i, j int) bool { + return lazyIndex[i].FieldNum < lazyIndex[j].FieldNum || + (lazyIndex[i].FieldNum == lazyIndex[j].FieldNum && + lazyIndex[i].Start < lazyIndex[j].Start) + }) + } + if *lazy == nil { + *lazy = &protolazy.XXX_lazyUnmarshalInfo{} + } + + (*lazy).SetIndex(lazyIndex) + } + if mi.numRequiredFields > 0 && bits.OnesCount64(requiredMask) != int(mi.numRequiredFields) { + initialized = false + } + if initialized { + out.initialized = true + } + out.n = start - len(b) + return out, nil +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go new file mode 100644 index 0000000..81b2b1a --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/legacy_enum.go @@ -0,0 +1,219 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + "strings" + "sync" + + "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/internal/strs" + "google.golang.org/protobuf/reflect/protoreflect" +) + +// legacyEnumName returns the name of enums used in legacy code. +// It is neither the protobuf full name nor the qualified Go name, +// but rather an odd hybrid of both. +func legacyEnumName(ed protoreflect.EnumDescriptor) string { + var protoPkg string + enumName := string(ed.FullName()) + if fd := ed.ParentFile(); fd != nil { + protoPkg = string(fd.Package()) + enumName = strings.TrimPrefix(enumName, protoPkg+".") + } + if protoPkg == "" { + return strs.GoCamelCase(enumName) + } + return protoPkg + "." + strs.GoCamelCase(enumName) +} + +// legacyWrapEnum wraps v as a protoreflect.Enum, +// where v must be a int32 kind and not implement the v2 API already. +func legacyWrapEnum(v reflect.Value) protoreflect.Enum { + et := legacyLoadEnumType(v.Type()) + return et.New(protoreflect.EnumNumber(v.Int())) +} + +var legacyEnumTypeCache sync.Map // map[reflect.Type]protoreflect.EnumType + +// legacyLoadEnumType dynamically loads a protoreflect.EnumType for t, +// where t must be an int32 kind and not implement the v2 API already. +func legacyLoadEnumType(t reflect.Type) protoreflect.EnumType { + // Fast-path: check if a EnumType is cached for this concrete type. + if et, ok := legacyEnumTypeCache.Load(t); ok { + return et.(protoreflect.EnumType) + } + + // Slow-path: derive enum descriptor and initialize EnumType. + var et protoreflect.EnumType + ed := LegacyLoadEnumDesc(t) + et = &legacyEnumType{ + desc: ed, + goType: t, + } + if et, ok := legacyEnumTypeCache.LoadOrStore(t, et); ok { + return et.(protoreflect.EnumType) + } + return et +} + +type legacyEnumType struct { + desc protoreflect.EnumDescriptor + goType reflect.Type + m sync.Map // map[protoreflect.EnumNumber]proto.Enum +} + +func (t *legacyEnumType) New(n protoreflect.EnumNumber) protoreflect.Enum { + if e, ok := t.m.Load(n); ok { + return e.(protoreflect.Enum) + } + e := &legacyEnumWrapper{num: n, pbTyp: t, goTyp: t.goType} + t.m.Store(n, e) + return e +} +func (t *legacyEnumType) Descriptor() protoreflect.EnumDescriptor { + return t.desc +} + +type legacyEnumWrapper struct { + num protoreflect.EnumNumber + pbTyp protoreflect.EnumType + goTyp reflect.Type +} + +func (e *legacyEnumWrapper) Descriptor() protoreflect.EnumDescriptor { + return e.pbTyp.Descriptor() +} +func (e *legacyEnumWrapper) Type() protoreflect.EnumType { + return e.pbTyp +} +func (e *legacyEnumWrapper) Number() protoreflect.EnumNumber { + return e.num +} +func (e *legacyEnumWrapper) ProtoReflect() protoreflect.Enum { + return e +} +func (e *legacyEnumWrapper) protoUnwrap() any { + v := reflect.New(e.goTyp).Elem() + v.SetInt(int64(e.num)) + return v.Interface() +} + +var ( + _ protoreflect.Enum = (*legacyEnumWrapper)(nil) + _ unwrapper = (*legacyEnumWrapper)(nil) +) + +var legacyEnumDescCache sync.Map // map[reflect.Type]protoreflect.EnumDescriptor + +// LegacyLoadEnumDesc returns an EnumDescriptor derived from the Go type, +// which must be an int32 kind and not implement the v2 API already. +// +// This is exported for testing purposes. +func LegacyLoadEnumDesc(t reflect.Type) protoreflect.EnumDescriptor { + // Fast-path: check if an EnumDescriptor is cached for this concrete type. + if ed, ok := legacyEnumDescCache.Load(t); ok { + return ed.(protoreflect.EnumDescriptor) + } + + // Slow-path: initialize EnumDescriptor from the raw descriptor. + ev := reflect.Zero(t).Interface() + if _, ok := ev.(protoreflect.Enum); ok { + panic(fmt.Sprintf("%v already implements proto.Enum", t)) + } + edV1, ok := ev.(enumV1) + if !ok { + return aberrantLoadEnumDesc(t) + } + b, idxs := edV1.EnumDescriptor() + + var ed protoreflect.EnumDescriptor + if len(idxs) == 1 { + ed = legacyLoadFileDesc(b).Enums().Get(idxs[0]) + } else { + md := legacyLoadFileDesc(b).Messages().Get(idxs[0]) + for _, i := range idxs[1 : len(idxs)-1] { + md = md.Messages().Get(i) + } + ed = md.Enums().Get(idxs[len(idxs)-1]) + } + if ed, ok := legacyEnumDescCache.LoadOrStore(t, ed); ok { + return ed.(protoreflect.EnumDescriptor) + } + return ed +} + +var aberrantEnumDescCache sync.Map // map[reflect.Type]protoreflect.EnumDescriptor + +// aberrantLoadEnumDesc returns an EnumDescriptor derived from the Go type, +// which must not implement protoreflect.Enum or enumV1. +// +// If the type does not implement enumV1, then there is no reliable +// way to derive the original protobuf type information. +// We are unable to use the global enum registry since it is +// unfortunately keyed by the protobuf full name, which we also do not know. +// Thus, this produces some bogus enum descriptor based on the Go type name. +func aberrantLoadEnumDesc(t reflect.Type) protoreflect.EnumDescriptor { + // Fast-path: check if an EnumDescriptor is cached for this concrete type. + if ed, ok := aberrantEnumDescCache.Load(t); ok { + return ed.(protoreflect.EnumDescriptor) + } + + // Slow-path: construct a bogus, but unique EnumDescriptor. + ed := &filedesc.Enum{L2: new(filedesc.EnumL2)} + ed.L0.FullName = AberrantDeriveFullName(t) // e.g., github_com.user.repo.MyEnum + ed.L0.ParentFile = filedesc.SurrogateProto3 + ed.L1.EditionFeatures = ed.L0.ParentFile.L1.EditionFeatures + ed.L2.Values.List = append(ed.L2.Values.List, filedesc.EnumValue{}) + + // TODO: Use the presence of a UnmarshalJSON method to determine proto2? + + vd := &ed.L2.Values.List[0] + vd.L0.FullName = ed.L0.FullName + "_UNKNOWN" // e.g., github_com.user.repo.MyEnum_UNKNOWN + vd.L0.ParentFile = ed.L0.ParentFile + vd.L0.Parent = ed + + // TODO: We could use the String method to obtain some enum value names by + // starting at 0 and print the enum until it produces invalid identifiers. + // An exhaustive query is clearly impractical, but can be best-effort. + + if ed, ok := aberrantEnumDescCache.LoadOrStore(t, ed); ok { + return ed.(protoreflect.EnumDescriptor) + } + return ed +} + +// AberrantDeriveFullName derives a fully qualified protobuf name for the given Go type +// The provided name is not guaranteed to be stable nor universally unique. +// It should be sufficiently unique within a program. +// +// This is exported for testing purposes. +func AberrantDeriveFullName(t reflect.Type) protoreflect.FullName { + sanitize := func(r rune) rune { + switch { + case r == '/': + return '.' + case 'a' <= r && r <= 'z', 'A' <= r && r <= 'Z', '0' <= r && r <= '9': + return r + default: + return '_' + } + } + prefix := strings.Map(sanitize, t.PkgPath()) + suffix := strings.Map(sanitize, t.Name()) + if suffix == "" { + suffix = fmt.Sprintf("UnknownX%X", reflect.ValueOf(t).Pointer()) + } + + ss := append(strings.Split(prefix, "."), suffix) + for i, s := range ss { + if s == "" || ('0' <= s[0] && s[0] <= '9') { + ss[i] = "x" + s + } + } + return protoreflect.FullName(strings.Join(ss, ".")) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/legacy_export.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/legacy_export.go new file mode 100644 index 0000000..9b64ad5 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/legacy_export.go @@ -0,0 +1,92 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "encoding/binary" + "encoding/json" + "hash/crc32" + "math" + "reflect" + + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" +) + +// These functions exist to support exported APIs in generated protobufs. +// While these are deprecated, they cannot be removed for compatibility reasons. + +// LegacyEnumName returns the name of enums used in legacy code. +func (Export) LegacyEnumName(ed protoreflect.EnumDescriptor) string { + return legacyEnumName(ed) +} + +// LegacyMessageTypeOf returns the protoreflect.MessageType for m, +// with name used as the message name if necessary. +func (Export) LegacyMessageTypeOf(m protoiface.MessageV1, name protoreflect.FullName) protoreflect.MessageType { + if mv := (Export{}).protoMessageV2Of(m); mv != nil { + return mv.ProtoReflect().Type() + } + return legacyLoadMessageType(reflect.TypeOf(m), name) +} + +// UnmarshalJSONEnum unmarshals an enum from a JSON-encoded input. +// The input can either be a string representing the enum value by name, +// or a number representing the enum number itself. +func (Export) UnmarshalJSONEnum(ed protoreflect.EnumDescriptor, b []byte) (protoreflect.EnumNumber, error) { + if b[0] == '"' { + var name protoreflect.Name + if err := json.Unmarshal(b, &name); err != nil { + return 0, errors.New("invalid input for enum %v: %s", ed.FullName(), b) + } + ev := ed.Values().ByName(name) + if ev == nil { + return 0, errors.New("invalid value for enum %v: %s", ed.FullName(), name) + } + return ev.Number(), nil + } else { + var num protoreflect.EnumNumber + if err := json.Unmarshal(b, &num); err != nil { + return 0, errors.New("invalid input for enum %v: %s", ed.FullName(), b) + } + return num, nil + } +} + +// CompressGZIP compresses the input as a GZIP-encoded file. +// The current implementation does no compression. +func (Export) CompressGZIP(in []byte) (out []byte) { + // RFC 1952, section 2.3.1. + var gzipHeader = [10]byte{0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff} + + // RFC 1951, section 3.2.4. + var blockHeader [5]byte + const maxBlockSize = math.MaxUint16 + numBlocks := 1 + len(in)/maxBlockSize + + // RFC 1952, section 2.3.1. + var gzipFooter [8]byte + binary.LittleEndian.PutUint32(gzipFooter[0:4], crc32.ChecksumIEEE(in)) + binary.LittleEndian.PutUint32(gzipFooter[4:8], uint32(len(in))) + + // Encode the input without compression using raw DEFLATE blocks. + out = make([]byte, 0, len(gzipHeader)+len(blockHeader)*numBlocks+len(in)+len(gzipFooter)) + out = append(out, gzipHeader[:]...) + for blockHeader[0] == 0 { + blockSize := maxBlockSize + if blockSize > len(in) { + blockHeader[0] = 0x01 // final bit per RFC 1951, section 3.2.3. + blockSize = len(in) + } + binary.LittleEndian.PutUint16(blockHeader[1:3], uint16(blockSize)) + binary.LittleEndian.PutUint16(blockHeader[3:5], ^uint16(blockSize)) + out = append(out, blockHeader[:]...) + out = append(out, in[:blockSize]...) + in = in[blockSize:] + } + out = append(out, gzipFooter[:]...) + return out +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go new file mode 100644 index 0000000..b6849d6 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go @@ -0,0 +1,177 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "reflect" + + "google.golang.org/protobuf/internal/descopts" + "google.golang.org/protobuf/internal/encoding/messageset" + ptag "google.golang.org/protobuf/internal/encoding/tag" + "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/internal/pragma" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" + "google.golang.org/protobuf/runtime/protoiface" +) + +func (xi *ExtensionInfo) initToLegacy() { + xd := xi.desc + var parent protoiface.MessageV1 + messageName := xd.ContainingMessage().FullName() + if mt, _ := protoregistry.GlobalTypes.FindMessageByName(messageName); mt != nil { + // Create a new parent message and unwrap it if possible. + mv := mt.New().Interface() + t := reflect.TypeOf(mv) + if mv, ok := mv.(unwrapper); ok { + t = reflect.TypeOf(mv.protoUnwrap()) + } + + // Check whether the message implements the legacy v1 Message interface. + mz := reflect.Zero(t).Interface() + if mz, ok := mz.(protoiface.MessageV1); ok { + parent = mz + } + } + + // Determine the v1 extension type, which is unfortunately not the same as + // the v2 ExtensionType.GoType. + extType := xi.goType + switch extType.Kind() { + case reflect.Bool, reflect.Int32, reflect.Int64, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64, reflect.String: + extType = reflect.PtrTo(extType) // T -> *T for singular scalar fields + } + + // Reconstruct the legacy enum full name. + var enumName string + if xd.Kind() == protoreflect.EnumKind { + enumName = legacyEnumName(xd.Enum()) + } + + // Derive the proto file that the extension was declared within. + var filename string + if fd := xd.ParentFile(); fd != nil { + filename = fd.Path() + } + + // For MessageSet extensions, the name used is the parent message. + name := xd.FullName() + if messageset.IsMessageSetExtension(xd) { + name = name.Parent() + } + + xi.ExtendedType = parent + xi.ExtensionType = reflect.Zero(extType).Interface() + xi.Field = int32(xd.Number()) + xi.Name = string(name) + xi.Tag = ptag.Marshal(xd, enumName) + xi.Filename = filename +} + +// initFromLegacy initializes an ExtensionInfo from +// the contents of the deprecated exported fields of the type. +func (xi *ExtensionInfo) initFromLegacy() { + // The v1 API returns "type incomplete" descriptors where only the + // field number is specified. In such a case, use a placeholder. + if xi.ExtendedType == nil || xi.ExtensionType == nil { + xd := placeholderExtension{ + name: protoreflect.FullName(xi.Name), + number: protoreflect.FieldNumber(xi.Field), + } + xi.desc = extensionTypeDescriptor{xd, xi} + return + } + + // Resolve enum or message dependencies. + var ed protoreflect.EnumDescriptor + var md protoreflect.MessageDescriptor + t := reflect.TypeOf(xi.ExtensionType) + isOptional := t.Kind() == reflect.Ptr && t.Elem().Kind() != reflect.Struct + isRepeated := t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 + if isOptional || isRepeated { + t = t.Elem() + } + switch v := reflect.Zero(t).Interface().(type) { + case protoreflect.Enum: + ed = v.Descriptor() + case enumV1: + ed = LegacyLoadEnumDesc(t) + case protoreflect.ProtoMessage: + md = v.ProtoReflect().Descriptor() + case messageV1: + md = LegacyLoadMessageDesc(t) + } + + // Derive basic field information from the struct tag. + var evs protoreflect.EnumValueDescriptors + if ed != nil { + evs = ed.Values() + } + fd := ptag.Unmarshal(xi.Tag, t, evs).(*filedesc.Field) + + // Construct a v2 ExtensionType. + xd := &filedesc.Extension{L2: new(filedesc.ExtensionL2)} + xd.L0.ParentFile = filedesc.SurrogateProto2 + xd.L0.FullName = protoreflect.FullName(xi.Name) + xd.L1.Number = protoreflect.FieldNumber(xi.Field) + xd.L1.Cardinality = fd.L1.Cardinality + xd.L1.Kind = fd.L1.Kind + xd.L1.EditionFeatures = fd.L1.EditionFeatures + xd.L2.Default = fd.L1.Default + xd.L1.Extendee = Export{}.MessageDescriptorOf(xi.ExtendedType) + xd.L2.Enum = ed + xd.L2.Message = md + + // Derive real extension field name for MessageSets. + if messageset.IsMessageSet(xd.L1.Extendee) && md.FullName() == xd.L0.FullName { + xd.L0.FullName = xd.L0.FullName.Append(messageset.ExtensionName) + } + + tt := reflect.TypeOf(xi.ExtensionType) + if isOptional { + tt = tt.Elem() + } + xi.goType = tt + xi.desc = extensionTypeDescriptor{xd, xi} +} + +type placeholderExtension struct { + name protoreflect.FullName + number protoreflect.FieldNumber +} + +func (x placeholderExtension) ParentFile() protoreflect.FileDescriptor { return nil } +func (x placeholderExtension) Parent() protoreflect.Descriptor { return nil } +func (x placeholderExtension) Index() int { return 0 } +func (x placeholderExtension) Syntax() protoreflect.Syntax { return 0 } +func (x placeholderExtension) Name() protoreflect.Name { return x.name.Name() } +func (x placeholderExtension) FullName() protoreflect.FullName { return x.name } +func (x placeholderExtension) IsPlaceholder() bool { return true } +func (x placeholderExtension) Options() protoreflect.ProtoMessage { return descopts.Field } +func (x placeholderExtension) Number() protoreflect.FieldNumber { return x.number } +func (x placeholderExtension) Cardinality() protoreflect.Cardinality { return 0 } +func (x placeholderExtension) Kind() protoreflect.Kind { return 0 } +func (x placeholderExtension) HasJSONName() bool { return false } +func (x placeholderExtension) JSONName() string { return "[" + string(x.name) + "]" } +func (x placeholderExtension) TextName() string { return "[" + string(x.name) + "]" } +func (x placeholderExtension) HasPresence() bool { return false } +func (x placeholderExtension) HasOptionalKeyword() bool { return false } +func (x placeholderExtension) IsExtension() bool { return true } +func (x placeholderExtension) IsWeak() bool { return false } +func (x placeholderExtension) IsLazy() bool { return false } +func (x placeholderExtension) IsPacked() bool { return false } +func (x placeholderExtension) IsList() bool { return false } +func (x placeholderExtension) IsMap() bool { return false } +func (x placeholderExtension) MapKey() protoreflect.FieldDescriptor { return nil } +func (x placeholderExtension) MapValue() protoreflect.FieldDescriptor { return nil } +func (x placeholderExtension) HasDefault() bool { return false } +func (x placeholderExtension) Default() protoreflect.Value { return protoreflect.Value{} } +func (x placeholderExtension) DefaultEnumValue() protoreflect.EnumValueDescriptor { return nil } +func (x placeholderExtension) ContainingOneof() protoreflect.OneofDescriptor { return nil } +func (x placeholderExtension) ContainingMessage() protoreflect.MessageDescriptor { return nil } +func (x placeholderExtension) Enum() protoreflect.EnumDescriptor { return nil } +func (x placeholderExtension) Message() protoreflect.MessageDescriptor { return nil } +func (x placeholderExtension) ProtoType(protoreflect.FieldDescriptor) { return } +func (x placeholderExtension) ProtoInternal(pragma.DoNotImplement) { return } diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/legacy_file.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/legacy_file.go new file mode 100644 index 0000000..b649f11 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/legacy_file.go @@ -0,0 +1,81 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "bytes" + "compress/gzip" + "io" + "sync" + + "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" +) + +// Every enum and message type generated by protoc-gen-go since commit 2fc053c5 +// on February 25th, 2016 has had a method to get the raw descriptor. +// Types that were not generated by protoc-gen-go or were generated prior +// to that version are not supported. +// +// The []byte returned is the encoded form of a FileDescriptorProto message +// compressed using GZIP. The []int is the path from the top-level file +// to the specific message or enum declaration. +type ( + enumV1 interface { + EnumDescriptor() ([]byte, []int) + } + messageV1 interface { + Descriptor() ([]byte, []int) + } +) + +var legacyFileDescCache sync.Map // map[*byte]protoreflect.FileDescriptor + +// legacyLoadFileDesc unmarshals b as a compressed FileDescriptorProto message. +// +// This assumes that b is immutable and that b does not refer to part of a +// concatenated series of GZIP files (which would require shenanigans that +// rely on the concatenation properties of both protobufs and GZIP). +// File descriptors generated by protoc-gen-go do not rely on that property. +func legacyLoadFileDesc(b []byte) protoreflect.FileDescriptor { + // Fast-path: check whether we already have a cached file descriptor. + if fd, ok := legacyFileDescCache.Load(&b[0]); ok { + return fd.(protoreflect.FileDescriptor) + } + + // Slow-path: decompress and unmarshal the file descriptor proto. + zr, err := gzip.NewReader(bytes.NewReader(b)) + if err != nil { + panic(err) + } + b2, err := io.ReadAll(zr) + if err != nil { + panic(err) + } + + fd := filedesc.Builder{ + RawDescriptor: b2, + FileRegistry: resolverOnly{protoregistry.GlobalFiles}, // do not register back to global registry + }.Build().File + if fd, ok := legacyFileDescCache.LoadOrStore(&b[0], fd); ok { + return fd.(protoreflect.FileDescriptor) + } + return fd +} + +type resolverOnly struct { + reg *protoregistry.Files +} + +func (r resolverOnly) FindFileByPath(path string) (protoreflect.FileDescriptor, error) { + return r.reg.FindFileByPath(path) +} +func (r resolverOnly) FindDescriptorByName(name protoreflect.FullName) (protoreflect.Descriptor, error) { + return r.reg.FindDescriptorByName(name) +} +func (resolverOnly) RegisterFile(protoreflect.FileDescriptor) error { + return nil +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go new file mode 100644 index 0000000..a51dffb --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go @@ -0,0 +1,569 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + "strings" + "sync" + + "google.golang.org/protobuf/internal/descopts" + ptag "google.golang.org/protobuf/internal/encoding/tag" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/internal/strs" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" +) + +// legacyWrapMessage wraps v as a protoreflect.Message, +// where v must be a *struct kind and not implement the v2 API already. +func legacyWrapMessage(v reflect.Value) protoreflect.Message { + t := v.Type() + if t.Kind() != reflect.Ptr || t.Elem().Kind() != reflect.Struct { + return aberrantMessage{v: v} + } + mt := legacyLoadMessageInfo(t, "") + return mt.MessageOf(v.Interface()) +} + +// legacyLoadMessageType dynamically loads a protoreflect.Type for t, +// where t must be not implement the v2 API already. +// The provided name is used if it cannot be determined from the message. +func legacyLoadMessageType(t reflect.Type, name protoreflect.FullName) protoreflect.MessageType { + if t.Kind() != reflect.Ptr || t.Elem().Kind() != reflect.Struct { + return aberrantMessageType{t} + } + return legacyLoadMessageInfo(t, name) +} + +var legacyMessageTypeCache sync.Map // map[reflect.Type]*MessageInfo + +// legacyLoadMessageInfo dynamically loads a *MessageInfo for t, +// where t must be a *struct kind and not implement the v2 API already. +// The provided name is used if it cannot be determined from the message. +func legacyLoadMessageInfo(t reflect.Type, name protoreflect.FullName) *MessageInfo { + // Fast-path: check if a MessageInfo is cached for this concrete type. + if mt, ok := legacyMessageTypeCache.Load(t); ok { + return mt.(*MessageInfo) + } + + // Slow-path: derive message descriptor and initialize MessageInfo. + mi := &MessageInfo{ + Desc: legacyLoadMessageDesc(t, name), + GoReflectType: t, + } + + var hasMarshal, hasUnmarshal bool + v := reflect.Zero(t).Interface() + if _, hasMarshal = v.(legacyMarshaler); hasMarshal { + mi.methods.Marshal = legacyMarshal + + // We have no way to tell whether the type's Marshal method + // supports deterministic serialization or not, but this + // preserves the v1 implementation's behavior of always + // calling Marshal methods when present. + mi.methods.Flags |= protoiface.SupportMarshalDeterministic + } + if _, hasUnmarshal = v.(legacyUnmarshaler); hasUnmarshal { + mi.methods.Unmarshal = legacyUnmarshal + } + if _, hasMerge := v.(legacyMerger); hasMerge || (hasMarshal && hasUnmarshal) { + mi.methods.Merge = legacyMerge + } + + if mi, ok := legacyMessageTypeCache.LoadOrStore(t, mi); ok { + return mi.(*MessageInfo) + } + return mi +} + +var legacyMessageDescCache sync.Map // map[reflect.Type]protoreflect.MessageDescriptor + +// LegacyLoadMessageDesc returns an MessageDescriptor derived from the Go type, +// which should be a *struct kind and must not implement the v2 API already. +// +// This is exported for testing purposes. +func LegacyLoadMessageDesc(t reflect.Type) protoreflect.MessageDescriptor { + return legacyLoadMessageDesc(t, "") +} +func legacyLoadMessageDesc(t reflect.Type, name protoreflect.FullName) protoreflect.MessageDescriptor { + // Fast-path: check if a MessageDescriptor is cached for this concrete type. + if mi, ok := legacyMessageDescCache.Load(t); ok { + return mi.(protoreflect.MessageDescriptor) + } + + // Slow-path: initialize MessageDescriptor from the raw descriptor. + mv := reflect.Zero(t).Interface() + if _, ok := mv.(protoreflect.ProtoMessage); ok { + panic(fmt.Sprintf("%v already implements proto.Message", t)) + } + mdV1, ok := mv.(messageV1) + if !ok { + return aberrantLoadMessageDesc(t, name) + } + + // If this is a dynamic message type where there isn't a 1-1 mapping between + // Go and protobuf types, calling the Descriptor method on the zero value of + // the message type isn't likely to work. If it panics, swallow the panic and + // continue as if the Descriptor method wasn't present. + b, idxs := func() ([]byte, []int) { + defer func() { + recover() + }() + return mdV1.Descriptor() + }() + if b == nil { + return aberrantLoadMessageDesc(t, name) + } + + // If the Go type has no fields, then this might be a proto3 empty message + // from before the size cache was added. If there are any fields, check to + // see that at least one of them looks like something we generated. + if t.Elem().Kind() == reflect.Struct { + if nfield := t.Elem().NumField(); nfield > 0 { + hasProtoField := false + for i := 0; i < nfield; i++ { + f := t.Elem().Field(i) + if f.Tag.Get("protobuf") != "" || f.Tag.Get("protobuf_oneof") != "" || strings.HasPrefix(f.Name, "XXX_") { + hasProtoField = true + break + } + } + if !hasProtoField { + return aberrantLoadMessageDesc(t, name) + } + } + } + + md := legacyLoadFileDesc(b).Messages().Get(idxs[0]) + for _, i := range idxs[1:] { + md = md.Messages().Get(i) + } + if name != "" && md.FullName() != name { + panic(fmt.Sprintf("mismatching message name: got %v, want %v", md.FullName(), name)) + } + if md, ok := legacyMessageDescCache.LoadOrStore(t, md); ok { + return md.(protoreflect.MessageDescriptor) + } + return md +} + +var ( + aberrantMessageDescLock sync.Mutex + aberrantMessageDescCache map[reflect.Type]protoreflect.MessageDescriptor +) + +// aberrantLoadMessageDesc returns an MessageDescriptor derived from the Go type, +// which must not implement protoreflect.ProtoMessage or messageV1. +// +// This is a best-effort derivation of the message descriptor using the protobuf +// tags on the struct fields. +func aberrantLoadMessageDesc(t reflect.Type, name protoreflect.FullName) protoreflect.MessageDescriptor { + aberrantMessageDescLock.Lock() + defer aberrantMessageDescLock.Unlock() + if aberrantMessageDescCache == nil { + aberrantMessageDescCache = make(map[reflect.Type]protoreflect.MessageDescriptor) + } + return aberrantLoadMessageDescReentrant(t, name) +} +func aberrantLoadMessageDescReentrant(t reflect.Type, name protoreflect.FullName) protoreflect.MessageDescriptor { + // Fast-path: check if an MessageDescriptor is cached for this concrete type. + if md, ok := aberrantMessageDescCache[t]; ok { + return md + } + + // Slow-path: construct a descriptor from the Go struct type (best-effort). + // Cache the MessageDescriptor early on so that we can resolve internal + // cyclic references. + md := &filedesc.Message{L2: new(filedesc.MessageL2)} + md.L0.FullName = aberrantDeriveMessageName(t, name) + md.L0.ParentFile = filedesc.SurrogateProto2 + aberrantMessageDescCache[t] = md + + if t.Kind() != reflect.Ptr || t.Elem().Kind() != reflect.Struct { + return md + } + + // Try to determine if the message is using proto3 by checking scalars. + for i := 0; i < t.Elem().NumField(); i++ { + f := t.Elem().Field(i) + if tag := f.Tag.Get("protobuf"); tag != "" { + switch f.Type.Kind() { + case reflect.Bool, reflect.Int32, reflect.Int64, reflect.Uint32, reflect.Uint64, reflect.Float32, reflect.Float64, reflect.String: + md.L0.ParentFile = filedesc.SurrogateProto3 + } + for _, s := range strings.Split(tag, ",") { + if s == "proto3" { + md.L0.ParentFile = filedesc.SurrogateProto3 + } + } + } + } + + md.L1.EditionFeatures = md.L0.ParentFile.L1.EditionFeatures + // Obtain a list of oneof wrapper types. + var oneofWrappers []reflect.Type + methods := make([]reflect.Method, 0, 2) + if m, ok := t.MethodByName("XXX_OneofFuncs"); ok { + methods = append(methods, m) + } + if m, ok := t.MethodByName("XXX_OneofWrappers"); ok { + methods = append(methods, m) + } + for _, fn := range methods { + for _, v := range fn.Func.Call([]reflect.Value{reflect.Zero(fn.Type.In(0))}) { + if vs, ok := v.Interface().([]any); ok { + for _, v := range vs { + oneofWrappers = append(oneofWrappers, reflect.TypeOf(v)) + } + } + } + } + + // Obtain a list of the extension ranges. + if fn, ok := t.MethodByName("ExtensionRangeArray"); ok { + vs := fn.Func.Call([]reflect.Value{reflect.Zero(fn.Type.In(0))})[0] + for i := 0; i < vs.Len(); i++ { + v := vs.Index(i) + md.L2.ExtensionRanges.List = append(md.L2.ExtensionRanges.List, [2]protoreflect.FieldNumber{ + protoreflect.FieldNumber(v.FieldByName("Start").Int()), + protoreflect.FieldNumber(v.FieldByName("End").Int() + 1), + }) + md.L2.ExtensionRangeOptions = append(md.L2.ExtensionRangeOptions, nil) + } + } + + // Derive the message fields by inspecting the struct fields. + for i := 0; i < t.Elem().NumField(); i++ { + f := t.Elem().Field(i) + if tag := f.Tag.Get("protobuf"); tag != "" { + tagKey := f.Tag.Get("protobuf_key") + tagVal := f.Tag.Get("protobuf_val") + aberrantAppendField(md, f.Type, tag, tagKey, tagVal) + } + if tag := f.Tag.Get("protobuf_oneof"); tag != "" { + n := len(md.L2.Oneofs.List) + md.L2.Oneofs.List = append(md.L2.Oneofs.List, filedesc.Oneof{}) + od := &md.L2.Oneofs.List[n] + od.L0.FullName = md.FullName().Append(protoreflect.Name(tag)) + od.L0.ParentFile = md.L0.ParentFile + od.L1.EditionFeatures = md.L1.EditionFeatures + od.L0.Parent = md + od.L0.Index = n + + for _, t := range oneofWrappers { + if t.Implements(f.Type) { + f := t.Elem().Field(0) + if tag := f.Tag.Get("protobuf"); tag != "" { + aberrantAppendField(md, f.Type, tag, "", "") + fd := &md.L2.Fields.List[len(md.L2.Fields.List)-1] + fd.L1.ContainingOneof = od + fd.L1.EditionFeatures = od.L1.EditionFeatures + od.L1.Fields.List = append(od.L1.Fields.List, fd) + } + } + } + } + } + + return md +} + +func aberrantDeriveMessageName(t reflect.Type, name protoreflect.FullName) protoreflect.FullName { + if name.IsValid() { + return name + } + func() { + defer func() { recover() }() // swallow possible nil panics + if m, ok := reflect.Zero(t).Interface().(interface{ XXX_MessageName() string }); ok { + name = protoreflect.FullName(m.XXX_MessageName()) + } + }() + if name.IsValid() { + return name + } + if t.Kind() == reflect.Ptr { + t = t.Elem() + } + return AberrantDeriveFullName(t) +} + +func aberrantAppendField(md *filedesc.Message, goType reflect.Type, tag, tagKey, tagVal string) { + t := goType + isOptional := t.Kind() == reflect.Ptr && t.Elem().Kind() != reflect.Struct + isRepeated := t.Kind() == reflect.Slice && t.Elem().Kind() != reflect.Uint8 + if isOptional || isRepeated { + t = t.Elem() + } + fd := ptag.Unmarshal(tag, t, placeholderEnumValues{}).(*filedesc.Field) + + // Append field descriptor to the message. + n := len(md.L2.Fields.List) + md.L2.Fields.List = append(md.L2.Fields.List, *fd) + fd = &md.L2.Fields.List[n] + fd.L0.FullName = md.FullName().Append(fd.Name()) + fd.L0.ParentFile = md.L0.ParentFile + fd.L0.Parent = md + fd.L0.Index = n + + if fd.L1.EditionFeatures.IsPacked { + fd.L1.Options = func() protoreflect.ProtoMessage { + opts := descopts.Field.ProtoReflect().New() + if fd.L1.EditionFeatures.IsPacked { + opts.Set(opts.Descriptor().Fields().ByName("packed"), protoreflect.ValueOfBool(fd.L1.EditionFeatures.IsPacked)) + } + return opts.Interface() + } + } + + // Populate Enum and Message. + if fd.Enum() == nil && fd.Kind() == protoreflect.EnumKind { + switch v := reflect.Zero(t).Interface().(type) { + case protoreflect.Enum: + fd.L1.Enum = v.Descriptor() + default: + fd.L1.Enum = LegacyLoadEnumDesc(t) + } + } + if fd.Message() == nil && (fd.Kind() == protoreflect.MessageKind || fd.Kind() == protoreflect.GroupKind) { + switch v := reflect.Zero(t).Interface().(type) { + case protoreflect.ProtoMessage: + fd.L1.Message = v.ProtoReflect().Descriptor() + case messageV1: + fd.L1.Message = LegacyLoadMessageDesc(t) + default: + if t.Kind() == reflect.Map { + n := len(md.L1.Messages.List) + md.L1.Messages.List = append(md.L1.Messages.List, filedesc.Message{L2: new(filedesc.MessageL2)}) + md2 := &md.L1.Messages.List[n] + md2.L0.FullName = md.FullName().Append(protoreflect.Name(strs.MapEntryName(string(fd.Name())))) + md2.L0.ParentFile = md.L0.ParentFile + md2.L0.Parent = md + md2.L0.Index = n + md2.L1.EditionFeatures = md.L1.EditionFeatures + + md2.L1.IsMapEntry = true + md2.L2.Options = func() protoreflect.ProtoMessage { + opts := descopts.Message.ProtoReflect().New() + opts.Set(opts.Descriptor().Fields().ByName("map_entry"), protoreflect.ValueOfBool(true)) + return opts.Interface() + } + + aberrantAppendField(md2, t.Key(), tagKey, "", "") + aberrantAppendField(md2, t.Elem(), tagVal, "", "") + + fd.L1.Message = md2 + break + } + fd.L1.Message = aberrantLoadMessageDescReentrant(t, "") + } + } +} + +type placeholderEnumValues struct { + protoreflect.EnumValueDescriptors +} + +func (placeholderEnumValues) ByNumber(n protoreflect.EnumNumber) protoreflect.EnumValueDescriptor { + return filedesc.PlaceholderEnumValue(protoreflect.FullName(fmt.Sprintf("UNKNOWN_%d", n))) +} + +// legacyMarshaler is the proto.Marshaler interface superseded by protoiface.Methoder. +type legacyMarshaler interface { + Marshal() ([]byte, error) +} + +// legacyUnmarshaler is the proto.Unmarshaler interface superseded by protoiface.Methoder. +type legacyUnmarshaler interface { + Unmarshal([]byte) error +} + +// legacyMerger is the proto.Merger interface superseded by protoiface.Methoder. +type legacyMerger interface { + Merge(protoiface.MessageV1) +} + +var aberrantProtoMethods = &protoiface.Methods{ + Marshal: legacyMarshal, + Unmarshal: legacyUnmarshal, + Merge: legacyMerge, + + // We have no way to tell whether the type's Marshal method + // supports deterministic serialization or not, but this + // preserves the v1 implementation's behavior of always + // calling Marshal methods when present. + Flags: protoiface.SupportMarshalDeterministic, +} + +func legacyMarshal(in protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + v := in.Message.(unwrapper).protoUnwrap() + marshaler, ok := v.(legacyMarshaler) + if !ok { + return protoiface.MarshalOutput{}, errors.New("%T does not implement Marshal", v) + } + out, err := marshaler.Marshal() + if in.Buf != nil { + out = append(in.Buf, out...) + } + return protoiface.MarshalOutput{ + Buf: out, + }, err +} + +func legacyUnmarshal(in protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + v := in.Message.(unwrapper).protoUnwrap() + unmarshaler, ok := v.(legacyUnmarshaler) + if !ok { + return protoiface.UnmarshalOutput{}, errors.New("%T does not implement Unmarshal", v) + } + return protoiface.UnmarshalOutput{}, unmarshaler.Unmarshal(in.Buf) +} + +func legacyMerge(in protoiface.MergeInput) protoiface.MergeOutput { + // Check whether this supports the legacy merger. + dstv := in.Destination.(unwrapper).protoUnwrap() + merger, ok := dstv.(legacyMerger) + if ok { + merger.Merge(Export{}.ProtoMessageV1Of(in.Source)) + return protoiface.MergeOutput{Flags: protoiface.MergeComplete} + } + + // If legacy merger is unavailable, implement merge in terms of + // a marshal and unmarshal operation. + srcv := in.Source.(unwrapper).protoUnwrap() + marshaler, ok := srcv.(legacyMarshaler) + if !ok { + return protoiface.MergeOutput{} + } + dstv = in.Destination.(unwrapper).protoUnwrap() + unmarshaler, ok := dstv.(legacyUnmarshaler) + if !ok { + return protoiface.MergeOutput{} + } + if !in.Source.IsValid() { + // Legacy Marshal methods may not function on nil messages. + // Check for a typed nil source only after we confirm that + // legacy Marshal/Unmarshal methods are present, for + // consistency. + return protoiface.MergeOutput{Flags: protoiface.MergeComplete} + } + b, err := marshaler.Marshal() + if err != nil { + return protoiface.MergeOutput{} + } + err = unmarshaler.Unmarshal(b) + if err != nil { + return protoiface.MergeOutput{} + } + return protoiface.MergeOutput{Flags: protoiface.MergeComplete} +} + +// aberrantMessageType implements MessageType for all types other than pointer-to-struct. +type aberrantMessageType struct { + t reflect.Type +} + +func (mt aberrantMessageType) New() protoreflect.Message { + if mt.t.Kind() == reflect.Ptr { + return aberrantMessage{reflect.New(mt.t.Elem())} + } + return aberrantMessage{reflect.Zero(mt.t)} +} +func (mt aberrantMessageType) Zero() protoreflect.Message { + return aberrantMessage{reflect.Zero(mt.t)} +} +func (mt aberrantMessageType) GoType() reflect.Type { + return mt.t +} +func (mt aberrantMessageType) Descriptor() protoreflect.MessageDescriptor { + return LegacyLoadMessageDesc(mt.t) +} + +// aberrantMessage implements Message for all types other than pointer-to-struct. +// +// When the underlying type implements legacyMarshaler or legacyUnmarshaler, +// the aberrant Message can be marshaled or unmarshaled. Otherwise, there is +// not much that can be done with values of this type. +type aberrantMessage struct { + v reflect.Value +} + +// Reset implements the v1 proto.Message.Reset method. +func (m aberrantMessage) Reset() { + if mr, ok := m.v.Interface().(interface{ Reset() }); ok { + mr.Reset() + return + } + if m.v.Kind() == reflect.Ptr && !m.v.IsNil() { + m.v.Elem().Set(reflect.Zero(m.v.Type().Elem())) + } +} + +func (m aberrantMessage) ProtoReflect() protoreflect.Message { + return m +} + +func (m aberrantMessage) Descriptor() protoreflect.MessageDescriptor { + return LegacyLoadMessageDesc(m.v.Type()) +} +func (m aberrantMessage) Type() protoreflect.MessageType { + return aberrantMessageType{m.v.Type()} +} +func (m aberrantMessage) New() protoreflect.Message { + if m.v.Type().Kind() == reflect.Ptr { + return aberrantMessage{reflect.New(m.v.Type().Elem())} + } + return aberrantMessage{reflect.Zero(m.v.Type())} +} +func (m aberrantMessage) Interface() protoreflect.ProtoMessage { + return m +} +func (m aberrantMessage) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + return +} +func (m aberrantMessage) Has(protoreflect.FieldDescriptor) bool { + return false +} +func (m aberrantMessage) Clear(protoreflect.FieldDescriptor) { + panic("invalid Message.Clear on " + string(m.Descriptor().FullName())) +} +func (m aberrantMessage) Get(fd protoreflect.FieldDescriptor) protoreflect.Value { + if fd.Default().IsValid() { + return fd.Default() + } + panic("invalid Message.Get on " + string(m.Descriptor().FullName())) +} +func (m aberrantMessage) Set(protoreflect.FieldDescriptor, protoreflect.Value) { + panic("invalid Message.Set on " + string(m.Descriptor().FullName())) +} +func (m aberrantMessage) Mutable(protoreflect.FieldDescriptor) protoreflect.Value { + panic("invalid Message.Mutable on " + string(m.Descriptor().FullName())) +} +func (m aberrantMessage) NewField(protoreflect.FieldDescriptor) protoreflect.Value { + panic("invalid Message.NewField on " + string(m.Descriptor().FullName())) +} +func (m aberrantMessage) WhichOneof(protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + panic("invalid Message.WhichOneof descriptor on " + string(m.Descriptor().FullName())) +} +func (m aberrantMessage) GetUnknown() protoreflect.RawFields { + return nil +} +func (m aberrantMessage) SetUnknown(protoreflect.RawFields) { + // SetUnknown discards its input on messages which don't support unknown field storage. +} +func (m aberrantMessage) IsValid() bool { + if m.v.Kind() == reflect.Ptr { + return !m.v.IsNil() + } + return false +} +func (m aberrantMessage) ProtoMethods() *protoiface.Methods { + return aberrantProtoMethods +} +func (m aberrantMessage) protoUnwrap() any { + return m.v.Interface() +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/merge.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/merge.go new file mode 100644 index 0000000..8ffdce6 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/merge.go @@ -0,0 +1,203 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" +) + +type mergeOptions struct{} + +func (o mergeOptions) Merge(dst, src proto.Message) { + proto.Merge(dst, src) +} + +// merge is protoreflect.Methods.Merge. +func (mi *MessageInfo) merge(in protoiface.MergeInput) protoiface.MergeOutput { + dp, ok := mi.getPointer(in.Destination) + if !ok { + return protoiface.MergeOutput{} + } + sp, ok := mi.getPointer(in.Source) + if !ok { + return protoiface.MergeOutput{} + } + mi.mergePointer(dp, sp, mergeOptions{}) + return protoiface.MergeOutput{Flags: protoiface.MergeComplete} +} + +func (mi *MessageInfo) mergePointer(dst, src pointer, opts mergeOptions) { + mi.init() + if dst.IsNil() { + panic(fmt.Sprintf("invalid value: merging into nil message")) + } + if src.IsNil() { + return + } + + var presenceSrc presence + var presenceDst presence + if mi.presenceOffset.IsValid() { + presenceSrc = src.Apply(mi.presenceOffset).PresenceInfo() + presenceDst = dst.Apply(mi.presenceOffset).PresenceInfo() + } + + for _, f := range mi.orderedCoderFields { + if f.funcs.merge == nil { + continue + } + sfptr := src.Apply(f.offset) + + if f.presenceIndex != noPresence { + if !presenceSrc.Present(f.presenceIndex) { + continue + } + dfptr := dst.Apply(f.offset) + if f.isLazy { + if sfptr.AtomicGetPointer().IsNil() { + mi.lazyUnmarshal(src, f.num) + } + if presenceDst.Present(f.presenceIndex) && dfptr.AtomicGetPointer().IsNil() { + mi.lazyUnmarshal(dst, f.num) + } + } + f.funcs.merge(dst.Apply(f.offset), sfptr, f, opts) + presenceDst.SetPresentUnatomic(f.presenceIndex, mi.presenceSize) + continue + } + + if f.isPointer && sfptr.Elem().IsNil() { + continue + } + f.funcs.merge(dst.Apply(f.offset), sfptr, f, opts) + } + if mi.extensionOffset.IsValid() { + sext := src.Apply(mi.extensionOffset).Extensions() + dext := dst.Apply(mi.extensionOffset).Extensions() + if *dext == nil { + *dext = make(map[int32]ExtensionField) + } + for num, sx := range *sext { + xt := sx.Type() + xi := getExtensionFieldInfo(xt) + if xi.funcs.merge == nil { + continue + } + dx := (*dext)[num] + var dv protoreflect.Value + if dx.Type() == sx.Type() { + dv = dx.Value() + } + if !dv.IsValid() && xi.unmarshalNeedsValue { + dv = xt.New() + } + dv = xi.funcs.merge(dv, sx.Value(), opts) + dx.Set(sx.Type(), dv) + (*dext)[num] = dx + } + } + if mi.unknownOffset.IsValid() { + su := mi.getUnknownBytes(src) + if su != nil && len(*su) > 0 { + du := mi.mutableUnknownBytes(dst) + *du = append(*du, *su...) + } + } +} + +func mergeScalarValue(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value { + return src +} + +func mergeBytesValue(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value { + return protoreflect.ValueOfBytes(append(emptyBuf[:], src.Bytes()...)) +} + +func mergeListValue(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value { + dstl := dst.List() + srcl := src.List() + for i, llen := 0, srcl.Len(); i < llen; i++ { + dstl.Append(srcl.Get(i)) + } + return dst +} + +func mergeBytesListValue(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value { + dstl := dst.List() + srcl := src.List() + for i, llen := 0, srcl.Len(); i < llen; i++ { + sb := srcl.Get(i).Bytes() + db := append(emptyBuf[:], sb...) + dstl.Append(protoreflect.ValueOfBytes(db)) + } + return dst +} + +func mergeMessageListValue(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value { + dstl := dst.List() + srcl := src.List() + for i, llen := 0, srcl.Len(); i < llen; i++ { + sm := srcl.Get(i).Message() + dm := proto.Clone(sm.Interface()).ProtoReflect() + dstl.Append(protoreflect.ValueOfMessage(dm)) + } + return dst +} + +func mergeMessageValue(dst, src protoreflect.Value, opts mergeOptions) protoreflect.Value { + opts.Merge(dst.Message().Interface(), src.Message().Interface()) + return dst +} + +func mergeMessage(dst, src pointer, f *coderFieldInfo, opts mergeOptions) { + if f.mi != nil { + if dst.Elem().IsNil() { + dst.SetPointer(pointerOfValue(reflect.New(f.mi.GoReflectType.Elem()))) + } + f.mi.mergePointer(dst.Elem(), src.Elem(), opts) + } else { + dm := dst.AsValueOf(f.ft).Elem() + sm := src.AsValueOf(f.ft).Elem() + if dm.IsNil() { + dm.Set(reflect.New(f.ft.Elem())) + } + opts.Merge(asMessage(dm), asMessage(sm)) + } +} + +func mergeMessageSlice(dst, src pointer, f *coderFieldInfo, opts mergeOptions) { + for _, sp := range src.PointerSlice() { + dm := reflect.New(f.ft.Elem().Elem()) + if f.mi != nil { + f.mi.mergePointer(pointerOfValue(dm), sp, opts) + } else { + opts.Merge(asMessage(dm), asMessage(sp.AsValueOf(f.ft.Elem().Elem()))) + } + dst.AppendPointerSlice(pointerOfValue(dm)) + } +} + +func mergeBytes(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + *dst.Bytes() = append(emptyBuf[:], *src.Bytes()...) +} + +func mergeBytesNoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + v := *src.Bytes() + if len(v) > 0 { + *dst.Bytes() = append(emptyBuf[:], v...) + } +} + +func mergeBytesSlice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + ds := dst.BytesSlice() + for _, v := range *src.BytesSlice() { + *ds = append(*ds, append(emptyBuf[:], v...)) + } +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/merge_gen.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/merge_gen.go new file mode 100644 index 0000000..8816c27 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/merge_gen.go @@ -0,0 +1,209 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-types. DO NOT EDIT. + +package impl + +import () + +func mergeBool(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + *dst.Bool() = *src.Bool() +} + +func mergeBoolNoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + v := *src.Bool() + if v != false { + *dst.Bool() = v + } +} + +func mergeBoolPtr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + p := *src.BoolPtr() + if p != nil { + v := *p + *dst.BoolPtr() = &v + } +} + +func mergeBoolSlice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + ds := dst.BoolSlice() + ss := src.BoolSlice() + *ds = append(*ds, *ss...) +} + +func mergeInt32(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + *dst.Int32() = *src.Int32() +} + +func mergeInt32NoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + v := *src.Int32() + if v != 0 { + *dst.Int32() = v + } +} + +func mergeInt32Ptr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + p := *src.Int32Ptr() + if p != nil { + v := *p + *dst.Int32Ptr() = &v + } +} + +func mergeInt32Slice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + ds := dst.Int32Slice() + ss := src.Int32Slice() + *ds = append(*ds, *ss...) +} + +func mergeUint32(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + *dst.Uint32() = *src.Uint32() +} + +func mergeUint32NoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + v := *src.Uint32() + if v != 0 { + *dst.Uint32() = v + } +} + +func mergeUint32Ptr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + p := *src.Uint32Ptr() + if p != nil { + v := *p + *dst.Uint32Ptr() = &v + } +} + +func mergeUint32Slice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + ds := dst.Uint32Slice() + ss := src.Uint32Slice() + *ds = append(*ds, *ss...) +} + +func mergeInt64(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + *dst.Int64() = *src.Int64() +} + +func mergeInt64NoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + v := *src.Int64() + if v != 0 { + *dst.Int64() = v + } +} + +func mergeInt64Ptr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + p := *src.Int64Ptr() + if p != nil { + v := *p + *dst.Int64Ptr() = &v + } +} + +func mergeInt64Slice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + ds := dst.Int64Slice() + ss := src.Int64Slice() + *ds = append(*ds, *ss...) +} + +func mergeUint64(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + *dst.Uint64() = *src.Uint64() +} + +func mergeUint64NoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + v := *src.Uint64() + if v != 0 { + *dst.Uint64() = v + } +} + +func mergeUint64Ptr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + p := *src.Uint64Ptr() + if p != nil { + v := *p + *dst.Uint64Ptr() = &v + } +} + +func mergeUint64Slice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + ds := dst.Uint64Slice() + ss := src.Uint64Slice() + *ds = append(*ds, *ss...) +} + +func mergeFloat32(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + *dst.Float32() = *src.Float32() +} + +func mergeFloat32NoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + v := *src.Float32() + if v != 0 { + *dst.Float32() = v + } +} + +func mergeFloat32Ptr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + p := *src.Float32Ptr() + if p != nil { + v := *p + *dst.Float32Ptr() = &v + } +} + +func mergeFloat32Slice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + ds := dst.Float32Slice() + ss := src.Float32Slice() + *ds = append(*ds, *ss...) +} + +func mergeFloat64(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + *dst.Float64() = *src.Float64() +} + +func mergeFloat64NoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + v := *src.Float64() + if v != 0 { + *dst.Float64() = v + } +} + +func mergeFloat64Ptr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + p := *src.Float64Ptr() + if p != nil { + v := *p + *dst.Float64Ptr() = &v + } +} + +func mergeFloat64Slice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + ds := dst.Float64Slice() + ss := src.Float64Slice() + *ds = append(*ds, *ss...) +} + +func mergeString(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + *dst.String() = *src.String() +} + +func mergeStringNoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + v := *src.String() + if v != "" { + *dst.String() = v + } +} + +func mergeStringPtr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + p := *src.StringPtr() + if p != nil { + v := *p + *dst.StringPtr() = &v + } +} + +func mergeStringSlice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { + ds := dst.StringSlice() + ss := src.StringSlice() + *ds = append(*ds, *ss...) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message.go new file mode 100644 index 0000000..d50423d --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message.go @@ -0,0 +1,283 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + "strconv" + "strings" + "sync" + "sync/atomic" + + "google.golang.org/protobuf/internal/genid" + "google.golang.org/protobuf/reflect/protoreflect" +) + +// MessageInfo provides protobuf related functionality for a given Go type +// that represents a message. A given instance of MessageInfo is tied to +// exactly one Go type, which must be a pointer to a struct type. +// +// The exported fields must be populated before any methods are called +// and cannot be mutated after set. +type MessageInfo struct { + // GoReflectType is the underlying message Go type and must be populated. + GoReflectType reflect.Type // pointer to struct + + // Desc is the underlying message descriptor type and must be populated. + Desc protoreflect.MessageDescriptor + + // Deprecated: Exporter will be removed the next time we bump + // protoimpl.GenVersion. See https://github.com/golang/protobuf/issues/1640 + Exporter exporter + + // OneofWrappers is list of pointers to oneof wrapper struct types. + OneofWrappers []any + + initMu sync.Mutex // protects all unexported fields + initDone uint32 + + reflectMessageInfo // for reflection implementation + coderMessageInfo // for fast-path method implementations +} + +// exporter is a function that returns a reference to the ith field of v, +// where v is a pointer to a struct. It returns nil if it does not support +// exporting the requested field (e.g., already exported). +type exporter func(v any, i int) any + +// getMessageInfo returns the MessageInfo for any message type that +// is generated by our implementation of protoc-gen-go (for v2 and on). +// If it is unable to obtain a MessageInfo, it returns nil. +func getMessageInfo(mt reflect.Type) *MessageInfo { + m, ok := reflect.Zero(mt).Interface().(protoreflect.ProtoMessage) + if !ok { + return nil + } + mr, ok := m.ProtoReflect().(interface{ ProtoMessageInfo() *MessageInfo }) + if !ok { + return nil + } + return mr.ProtoMessageInfo() +} + +func (mi *MessageInfo) init() { + // This function is called in the hot path. Inline the sync.Once logic, + // since allocating a closure for Once.Do is expensive. + // Keep init small to ensure that it can be inlined. + if atomic.LoadUint32(&mi.initDone) == 0 { + mi.initOnce() + } +} + +func (mi *MessageInfo) initOnce() { + mi.initMu.Lock() + defer mi.initMu.Unlock() + if mi.initDone == 1 { + return + } + if opaqueInitHook(mi) { + return + } + + t := mi.GoReflectType + if t.Kind() != reflect.Ptr && t.Elem().Kind() != reflect.Struct { + panic(fmt.Sprintf("got %v, want *struct kind", t)) + } + t = t.Elem() + + si := mi.makeStructInfo(t) + mi.makeReflectFuncs(t, si) + mi.makeCoderMethods(t, si) + + atomic.StoreUint32(&mi.initDone, 1) +} + +// getPointer returns the pointer for a message, which should be of +// the type of the MessageInfo. If the message is of a different type, +// it returns ok==false. +func (mi *MessageInfo) getPointer(m protoreflect.Message) (p pointer, ok bool) { + switch m := m.(type) { + case *messageState: + return m.pointer(), m.messageInfo() == mi + case *messageReflectWrapper: + return m.pointer(), m.messageInfo() == mi + } + return pointer{}, false +} + +type ( + SizeCache = int32 + WeakFields = map[int32]protoreflect.ProtoMessage + UnknownFields = unknownFieldsA // TODO: switch to unknownFieldsB + unknownFieldsA = []byte + unknownFieldsB = *[]byte + ExtensionFields = map[int32]ExtensionField +) + +var ( + sizecacheType = reflect.TypeOf(SizeCache(0)) + unknownFieldsAType = reflect.TypeOf(unknownFieldsA(nil)) + unknownFieldsBType = reflect.TypeOf(unknownFieldsB(nil)) + extensionFieldsType = reflect.TypeOf(ExtensionFields(nil)) +) + +type structInfo struct { + sizecacheOffset offset + sizecacheType reflect.Type + unknownOffset offset + unknownType reflect.Type + extensionOffset offset + extensionType reflect.Type + + lazyOffset offset + presenceOffset offset + + fieldsByNumber map[protoreflect.FieldNumber]reflect.StructField + oneofsByName map[protoreflect.Name]reflect.StructField + oneofWrappersByType map[reflect.Type]protoreflect.FieldNumber + oneofWrappersByNumber map[protoreflect.FieldNumber]reflect.Type +} + +func (mi *MessageInfo) makeStructInfo(t reflect.Type) structInfo { + si := structInfo{ + sizecacheOffset: invalidOffset, + unknownOffset: invalidOffset, + extensionOffset: invalidOffset, + lazyOffset: invalidOffset, + presenceOffset: invalidOffset, + + fieldsByNumber: map[protoreflect.FieldNumber]reflect.StructField{}, + oneofsByName: map[protoreflect.Name]reflect.StructField{}, + oneofWrappersByType: map[reflect.Type]protoreflect.FieldNumber{}, + oneofWrappersByNumber: map[protoreflect.FieldNumber]reflect.Type{}, + } + +fieldLoop: + for i := 0; i < t.NumField(); i++ { + switch f := t.Field(i); f.Name { + case genid.SizeCache_goname, genid.SizeCacheA_goname: + if f.Type == sizecacheType { + si.sizecacheOffset = offsetOf(f) + si.sizecacheType = f.Type + } + case genid.UnknownFields_goname, genid.UnknownFieldsA_goname: + if f.Type == unknownFieldsAType || f.Type == unknownFieldsBType { + si.unknownOffset = offsetOf(f) + si.unknownType = f.Type + } + case genid.ExtensionFields_goname, genid.ExtensionFieldsA_goname, genid.ExtensionFieldsB_goname: + if f.Type == extensionFieldsType { + si.extensionOffset = offsetOf(f) + si.extensionType = f.Type + } + case "lazyFields", "XXX_lazyUnmarshalInfo": + si.lazyOffset = offsetOf(f) + case "XXX_presence": + si.presenceOffset = offsetOf(f) + default: + for _, s := range strings.Split(f.Tag.Get("protobuf"), ",") { + if len(s) > 0 && strings.Trim(s, "0123456789") == "" { + n, _ := strconv.ParseUint(s, 10, 64) + si.fieldsByNumber[protoreflect.FieldNumber(n)] = f + continue fieldLoop + } + } + if s := f.Tag.Get("protobuf_oneof"); len(s) > 0 { + si.oneofsByName[protoreflect.Name(s)] = f + continue fieldLoop + } + } + } + + // Derive a mapping of oneof wrappers to fields. + oneofWrappers := mi.OneofWrappers + methods := make([]reflect.Method, 0, 2) + if m, ok := reflect.PtrTo(t).MethodByName("XXX_OneofFuncs"); ok { + methods = append(methods, m) + } + if m, ok := reflect.PtrTo(t).MethodByName("XXX_OneofWrappers"); ok { + methods = append(methods, m) + } + for _, fn := range methods { + for _, v := range fn.Func.Call([]reflect.Value{reflect.Zero(fn.Type.In(0))}) { + if vs, ok := v.Interface().([]any); ok { + oneofWrappers = vs + } + } + } + for _, v := range oneofWrappers { + tf := reflect.TypeOf(v).Elem() + f := tf.Field(0) + for _, s := range strings.Split(f.Tag.Get("protobuf"), ",") { + if len(s) > 0 && strings.Trim(s, "0123456789") == "" { + n, _ := strconv.ParseUint(s, 10, 64) + si.oneofWrappersByType[tf] = protoreflect.FieldNumber(n) + si.oneofWrappersByNumber[protoreflect.FieldNumber(n)] = tf + break + } + } + } + + return si +} + +func (mi *MessageInfo) New() protoreflect.Message { + m := reflect.New(mi.GoReflectType.Elem()).Interface() + if r, ok := m.(protoreflect.ProtoMessage); ok { + return r.ProtoReflect() + } + return mi.MessageOf(m) +} +func (mi *MessageInfo) Zero() protoreflect.Message { + return mi.MessageOf(reflect.Zero(mi.GoReflectType).Interface()) +} +func (mi *MessageInfo) Descriptor() protoreflect.MessageDescriptor { + return mi.Desc +} +func (mi *MessageInfo) Enum(i int) protoreflect.EnumType { + mi.init() + fd := mi.Desc.Fields().Get(i) + return Export{}.EnumTypeOf(mi.fieldTypes[fd.Number()]) +} +func (mi *MessageInfo) Message(i int) protoreflect.MessageType { + mi.init() + fd := mi.Desc.Fields().Get(i) + switch { + case fd.IsMap(): + return mapEntryType{fd.Message(), mi.fieldTypes[fd.Number()]} + default: + return Export{}.MessageTypeOf(mi.fieldTypes[fd.Number()]) + } +} + +type mapEntryType struct { + desc protoreflect.MessageDescriptor + valType any // zero value of enum or message type +} + +func (mt mapEntryType) New() protoreflect.Message { + return nil +} +func (mt mapEntryType) Zero() protoreflect.Message { + return nil +} +func (mt mapEntryType) Descriptor() protoreflect.MessageDescriptor { + return mt.desc +} +func (mt mapEntryType) Enum(i int) protoreflect.EnumType { + fd := mt.desc.Fields().Get(i) + if fd.Enum() == nil { + return nil + } + return Export{}.EnumTypeOf(mt.valType) +} +func (mt mapEntryType) Message(i int) protoreflect.MessageType { + fd := mt.desc.Fields().Get(i) + if fd.Message() == nil { + return nil + } + return Export{}.MessageTypeOf(mt.valType) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message_opaque.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message_opaque.go new file mode 100644 index 0000000..5a439da --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message_opaque.go @@ -0,0 +1,598 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "math" + "reflect" + "strings" + "sync/atomic" + + "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/reflect/protoreflect" +) + +type opaqueStructInfo struct { + structInfo +} + +// isOpaque determines whether a protobuf message type is on the Opaque API. It +// checks whether the type is a Go struct that protoc-gen-go would generate. +// +// This function only detects newly generated messages from the v2 +// implementation of protoc-gen-go. It is unable to classify generated messages +// that are too old or those that are generated by a different generator +// such as protoc-gen-gogo. +func isOpaque(t reflect.Type) bool { + // The current detection mechanism is to simply check the first field + // for a struct tag with the "protogen" key. + if t.Kind() == reflect.Struct && t.NumField() > 0 { + pgt := t.Field(0).Tag.Get("protogen") + return strings.HasPrefix(pgt, "opaque.") + } + return false +} + +func opaqueInitHook(mi *MessageInfo) bool { + mt := mi.GoReflectType.Elem() + si := opaqueStructInfo{ + structInfo: mi.makeStructInfo(mt), + } + + if !isOpaque(mt) { + return false + } + + defer atomic.StoreUint32(&mi.initDone, 1) + + mi.fields = map[protoreflect.FieldNumber]*fieldInfo{} + fds := mi.Desc.Fields() + for i := 0; i < fds.Len(); i++ { + fd := fds.Get(i) + fs := si.fieldsByNumber[fd.Number()] + var fi fieldInfo + usePresence, _ := filedesc.UsePresenceForField(fd) + + switch { + case fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic(): + // Oneofs are no different for opaque. + fi = fieldInfoForOneof(fd, si.oneofsByName[fd.ContainingOneof().Name()], mi.Exporter, si.oneofWrappersByNumber[fd.Number()]) + case fd.IsMap(): + fi = mi.fieldInfoForMapOpaque(si, fd, fs) + case fd.IsList() && fd.Message() == nil && usePresence: + fi = mi.fieldInfoForScalarListOpaque(si, fd, fs) + case fd.IsList() && fd.Message() == nil: + // Proto3 lists without presence can use same access methods as open + fi = fieldInfoForList(fd, fs, mi.Exporter) + case fd.IsList() && usePresence: + fi = mi.fieldInfoForMessageListOpaque(si, fd, fs) + case fd.IsList(): + // Proto3 opaque messages that does not need presence bitmap. + // Different representation than open struct, but same logic + fi = mi.fieldInfoForMessageListOpaqueNoPresence(si, fd, fs) + case fd.Message() != nil && usePresence: + fi = mi.fieldInfoForMessageOpaque(si, fd, fs) + case fd.Message() != nil: + // Proto3 messages without presence can use same access methods as open + fi = fieldInfoForMessage(fd, fs, mi.Exporter) + default: + fi = mi.fieldInfoForScalarOpaque(si, fd, fs) + } + mi.fields[fd.Number()] = &fi + } + mi.oneofs = map[protoreflect.Name]*oneofInfo{} + for i := 0; i < mi.Desc.Oneofs().Len(); i++ { + od := mi.Desc.Oneofs().Get(i) + mi.oneofs[od.Name()] = makeOneofInfoOpaque(mi, od, si.structInfo, mi.Exporter) + } + + mi.denseFields = make([]*fieldInfo, fds.Len()*2) + for i := 0; i < fds.Len(); i++ { + if fd := fds.Get(i); int(fd.Number()) < len(mi.denseFields) { + mi.denseFields[fd.Number()] = mi.fields[fd.Number()] + } + } + + for i := 0; i < fds.Len(); { + fd := fds.Get(i) + if od := fd.ContainingOneof(); od != nil && !fd.ContainingOneof().IsSynthetic() { + mi.rangeInfos = append(mi.rangeInfos, mi.oneofs[od.Name()]) + i += od.Fields().Len() + } else { + mi.rangeInfos = append(mi.rangeInfos, mi.fields[fd.Number()]) + i++ + } + } + + mi.makeExtensionFieldsFunc(mt, si.structInfo) + mi.makeUnknownFieldsFunc(mt, si.structInfo) + mi.makeOpaqueCoderMethods(mt, si) + mi.makeFieldTypes(si.structInfo) + + return true +} + +func makeOneofInfoOpaque(mi *MessageInfo, od protoreflect.OneofDescriptor, si structInfo, x exporter) *oneofInfo { + oi := &oneofInfo{oneofDesc: od} + if od.IsSynthetic() { + fd := od.Fields().Get(0) + index, _ := presenceIndex(mi.Desc, fd) + oi.which = func(p pointer) protoreflect.FieldNumber { + if p.IsNil() { + return 0 + } + if !mi.present(p, index) { + return 0 + } + return od.Fields().Get(0).Number() + } + return oi + } + // Dispatch to non-opaque oneof implementation for non-synthetic oneofs. + return makeOneofInfo(od, si, x) +} + +func (mi *MessageInfo) fieldInfoForMapOpaque(si opaqueStructInfo, fd protoreflect.FieldDescriptor, fs reflect.StructField) fieldInfo { + ft := fs.Type + if ft.Kind() != reflect.Map { + panic(fmt.Sprintf("invalid type: got %v, want map kind", ft)) + } + fieldOffset := offsetOf(fs) + conv := NewConverter(ft, fd) + return fieldInfo{ + fieldDesc: fd, + has: func(p pointer) bool { + if p.IsNil() { + return false + } + // Don't bother checking presence bits, since we need to + // look at the map length even if the presence bit is set. + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + return rv.Len() > 0 + }, + clear: func(p pointer) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + rv.Set(reflect.Zero(rv.Type())) + }, + get: func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if rv.Len() == 0 { + return conv.Zero() + } + return conv.PBValueOf(rv) + }, + set: func(p pointer, v protoreflect.Value) { + pv := conv.GoValueOf(v) + if pv.IsNil() { + panic(fmt.Sprintf("invalid value: setting map field to read-only value")) + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + rv.Set(pv) + }, + mutable: func(p pointer) protoreflect.Value { + v := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if v.IsNil() { + v.Set(reflect.MakeMap(fs.Type)) + } + return conv.PBValueOf(v) + }, + newField: func() protoreflect.Value { + return conv.New() + }, + } +} + +func (mi *MessageInfo) fieldInfoForScalarListOpaque(si opaqueStructInfo, fd protoreflect.FieldDescriptor, fs reflect.StructField) fieldInfo { + ft := fs.Type + if ft.Kind() != reflect.Slice { + panic(fmt.Sprintf("invalid type: got %v, want slice kind", ft)) + } + conv := NewConverter(reflect.PtrTo(ft), fd) + fieldOffset := offsetOf(fs) + index, _ := presenceIndex(mi.Desc, fd) + return fieldInfo{ + fieldDesc: fd, + has: func(p pointer) bool { + if p.IsNil() { + return false + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + return rv.Len() > 0 + }, + clear: func(p pointer) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + rv.Set(reflect.Zero(rv.Type())) + }, + get: func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type) + if rv.Elem().Len() == 0 { + return conv.Zero() + } + return conv.PBValueOf(rv) + }, + set: func(p pointer, v protoreflect.Value) { + pv := conv.GoValueOf(v) + if pv.IsNil() { + panic(fmt.Sprintf("invalid value: setting repeated field to read-only value")) + } + mi.setPresent(p, index) + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + rv.Set(pv.Elem()) + }, + mutable: func(p pointer) protoreflect.Value { + mi.setPresent(p, index) + return conv.PBValueOf(p.Apply(fieldOffset).AsValueOf(fs.Type)) + }, + newField: func() protoreflect.Value { + return conv.New() + }, + } +} + +func (mi *MessageInfo) fieldInfoForMessageListOpaque(si opaqueStructInfo, fd protoreflect.FieldDescriptor, fs reflect.StructField) fieldInfo { + ft := fs.Type + if ft.Kind() != reflect.Ptr || ft.Elem().Kind() != reflect.Slice { + panic(fmt.Sprintf("invalid type: got %v, want slice kind", ft)) + } + conv := NewConverter(ft, fd) + fieldOffset := offsetOf(fs) + index, _ := presenceIndex(mi.Desc, fd) + fieldNumber := fd.Number() + return fieldInfo{ + fieldDesc: fd, + has: func(p pointer) bool { + if p.IsNil() { + return false + } + if !mi.present(p, index) { + return false + } + sp := p.Apply(fieldOffset).AtomicGetPointer() + if sp.IsNil() { + // Lazily unmarshal this field. + mi.lazyUnmarshal(p, fieldNumber) + sp = p.Apply(fieldOffset).AtomicGetPointer() + } + rv := sp.AsValueOf(fs.Type.Elem()) + return rv.Elem().Len() > 0 + }, + clear: func(p pointer) { + fp := p.Apply(fieldOffset) + sp := fp.AtomicGetPointer() + if sp.IsNil() { + sp = fp.AtomicSetPointerIfNil(pointerOfValue(reflect.New(fs.Type.Elem()))) + mi.setPresent(p, index) + } + rv := sp.AsValueOf(fs.Type.Elem()) + rv.Elem().Set(reflect.Zero(rv.Type().Elem())) + }, + get: func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + if !mi.present(p, index) { + return conv.Zero() + } + sp := p.Apply(fieldOffset).AtomicGetPointer() + if sp.IsNil() { + // Lazily unmarshal this field. + mi.lazyUnmarshal(p, fieldNumber) + sp = p.Apply(fieldOffset).AtomicGetPointer() + } + rv := sp.AsValueOf(fs.Type.Elem()) + if rv.Elem().Len() == 0 { + return conv.Zero() + } + return conv.PBValueOf(rv) + }, + set: func(p pointer, v protoreflect.Value) { + fp := p.Apply(fieldOffset) + sp := fp.AtomicGetPointer() + if sp.IsNil() { + sp = fp.AtomicSetPointerIfNil(pointerOfValue(reflect.New(fs.Type.Elem()))) + mi.setPresent(p, index) + } + rv := sp.AsValueOf(fs.Type.Elem()) + val := conv.GoValueOf(v) + if val.IsNil() { + panic(fmt.Sprintf("invalid value: setting repeated field to read-only value")) + } else { + rv.Elem().Set(val.Elem()) + } + }, + mutable: func(p pointer) protoreflect.Value { + fp := p.Apply(fieldOffset) + sp := fp.AtomicGetPointer() + if sp.IsNil() { + if mi.present(p, index) { + // Lazily unmarshal this field. + mi.lazyUnmarshal(p, fieldNumber) + sp = p.Apply(fieldOffset).AtomicGetPointer() + } else { + sp = fp.AtomicSetPointerIfNil(pointerOfValue(reflect.New(fs.Type.Elem()))) + mi.setPresent(p, index) + } + } + rv := sp.AsValueOf(fs.Type.Elem()) + return conv.PBValueOf(rv) + }, + newField: func() protoreflect.Value { + return conv.New() + }, + } +} + +func (mi *MessageInfo) fieldInfoForMessageListOpaqueNoPresence(si opaqueStructInfo, fd protoreflect.FieldDescriptor, fs reflect.StructField) fieldInfo { + ft := fs.Type + if ft.Kind() != reflect.Ptr || ft.Elem().Kind() != reflect.Slice { + panic(fmt.Sprintf("invalid type: got %v, want slice kind", ft)) + } + conv := NewConverter(ft, fd) + fieldOffset := offsetOf(fs) + return fieldInfo{ + fieldDesc: fd, + has: func(p pointer) bool { + if p.IsNil() { + return false + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if rv.IsNil() { + return false + } + return rv.Elem().Len() > 0 + }, + clear: func(p pointer) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if !rv.IsNil() { + rv.Elem().Set(reflect.Zero(rv.Type().Elem())) + } + }, + get: func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if rv.IsNil() { + return conv.Zero() + } + if rv.Elem().Len() == 0 { + return conv.Zero() + } + return conv.PBValueOf(rv) + }, + set: func(p pointer, v protoreflect.Value) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if rv.IsNil() { + rv.Set(reflect.New(fs.Type.Elem())) + } + val := conv.GoValueOf(v) + if val.IsNil() { + panic(fmt.Sprintf("invalid value: setting repeated field to read-only value")) + } else { + rv.Elem().Set(val.Elem()) + } + }, + mutable: func(p pointer) protoreflect.Value { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if rv.IsNil() { + rv.Set(reflect.New(fs.Type.Elem())) + } + return conv.PBValueOf(rv) + }, + newField: func() protoreflect.Value { + return conv.New() + }, + } +} + +func (mi *MessageInfo) fieldInfoForScalarOpaque(si opaqueStructInfo, fd protoreflect.FieldDescriptor, fs reflect.StructField) fieldInfo { + ft := fs.Type + nullable := fd.HasPresence() + if oneof := fd.ContainingOneof(); oneof != nil && oneof.IsSynthetic() { + nullable = true + } + deref := false + if nullable && ft.Kind() == reflect.Ptr { + ft = ft.Elem() + deref = true + } + conv := NewConverter(ft, fd) + fieldOffset := offsetOf(fs) + index, _ := presenceIndex(mi.Desc, fd) + var getter func(p pointer) protoreflect.Value + if !nullable { + getter = getterForDirectScalar(fd, fs, conv, fieldOffset) + } else { + getter = getterForOpaqueNullableScalar(mi, index, fd, fs, conv, fieldOffset) + } + return fieldInfo{ + fieldDesc: fd, + has: func(p pointer) bool { + if p.IsNil() { + return false + } + if nullable { + return mi.present(p, index) + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + switch rv.Kind() { + case reflect.Bool: + return rv.Bool() + case reflect.Int32, reflect.Int64: + return rv.Int() != 0 + case reflect.Uint32, reflect.Uint64: + return rv.Uint() != 0 + case reflect.Float32, reflect.Float64: + return rv.Float() != 0 || math.Signbit(rv.Float()) + case reflect.String, reflect.Slice: + return rv.Len() > 0 + default: + panic(fmt.Sprintf("invalid type: %v", rv.Type())) // should never happen + } + }, + clear: func(p pointer) { + if nullable { + mi.clearPresent(p, index) + } + // This is only valuable for bytes and strings, but we do it unconditionally. + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + rv.Set(reflect.Zero(rv.Type())) + }, + get: getter, + // TODO: Implement unsafe fast path for set? + set: func(p pointer, v protoreflect.Value) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if deref { + if rv.IsNil() { + rv.Set(reflect.New(ft)) + } + rv = rv.Elem() + } + + rv.Set(conv.GoValueOf(v)) + if nullable && rv.Kind() == reflect.Slice && rv.IsNil() { + rv.Set(emptyBytes) + } + if nullable { + mi.setPresent(p, index) + } + }, + newField: func() protoreflect.Value { + return conv.New() + }, + } +} + +func (mi *MessageInfo) fieldInfoForMessageOpaque(si opaqueStructInfo, fd protoreflect.FieldDescriptor, fs reflect.StructField) fieldInfo { + ft := fs.Type + conv := NewConverter(ft, fd) + fieldOffset := offsetOf(fs) + index, _ := presenceIndex(mi.Desc, fd) + fieldNumber := fd.Number() + elemType := fs.Type.Elem() + return fieldInfo{ + fieldDesc: fd, + has: func(p pointer) bool { + if p.IsNil() { + return false + } + return mi.present(p, index) + }, + clear: func(p pointer) { + mi.clearPresent(p, index) + p.Apply(fieldOffset).AtomicSetNilPointer() + }, + get: func(p pointer) protoreflect.Value { + if p.IsNil() || !mi.present(p, index) { + return conv.Zero() + } + fp := p.Apply(fieldOffset) + mp := fp.AtomicGetPointer() + if mp.IsNil() { + // Lazily unmarshal this field. + mi.lazyUnmarshal(p, fieldNumber) + mp = fp.AtomicGetPointer() + } + rv := mp.AsValueOf(elemType) + return conv.PBValueOf(rv) + }, + set: func(p pointer, v protoreflect.Value) { + val := pointerOfValue(conv.GoValueOf(v)) + if val.IsNil() { + panic("invalid nil pointer") + } + p.Apply(fieldOffset).AtomicSetPointer(val) + mi.setPresent(p, index) + }, + mutable: func(p pointer) protoreflect.Value { + fp := p.Apply(fieldOffset) + mp := fp.AtomicGetPointer() + if mp.IsNil() { + if mi.present(p, index) { + // Lazily unmarshal this field. + mi.lazyUnmarshal(p, fieldNumber) + mp = fp.AtomicGetPointer() + } else { + mp = pointerOfValue(conv.GoValueOf(conv.New())) + fp.AtomicSetPointer(mp) + mi.setPresent(p, index) + } + } + return conv.PBValueOf(mp.AsValueOf(fs.Type.Elem())) + }, + newMessage: func() protoreflect.Message { + return conv.New().Message() + }, + newField: func() protoreflect.Value { + return conv.New() + }, + } +} + +// A presenceList wraps a List, updating presence bits as necessary when the +// list contents change. +type presenceList struct { + pvalueList + setPresence func(bool) +} +type pvalueList interface { + protoreflect.List + //Unwrapper +} + +func (list presenceList) Append(v protoreflect.Value) { + list.pvalueList.Append(v) + list.setPresence(true) +} +func (list presenceList) Truncate(i int) { + list.pvalueList.Truncate(i) + list.setPresence(i > 0) +} + +// presenceIndex returns the index to pass to presence functions. +// +// TODO: field.Desc.Index() would be simpler, and would give space to record the presence of oneof fields. +func presenceIndex(md protoreflect.MessageDescriptor, fd protoreflect.FieldDescriptor) (uint32, presenceSize) { + found := false + var index, numIndices uint32 + for i := 0; i < md.Fields().Len(); i++ { + f := md.Fields().Get(i) + if f == fd { + found = true + index = numIndices + } + if f.ContainingOneof() == nil || isLastOneofField(f) { + numIndices++ + } + } + if !found { + panic(fmt.Sprintf("BUG: %v not in %v", fd.Name(), md.FullName())) + } + return index, presenceSize(numIndices) +} + +func isLastOneofField(fd protoreflect.FieldDescriptor) bool { + fields := fd.ContainingOneof().Fields() + return fields.Get(fields.Len()-1) == fd +} + +func (mi *MessageInfo) setPresent(p pointer, index uint32) { + p.Apply(mi.presenceOffset).PresenceInfo().SetPresent(index, mi.presenceSize) +} + +func (mi *MessageInfo) clearPresent(p pointer, index uint32) { + p.Apply(mi.presenceOffset).PresenceInfo().ClearPresent(index) +} + +func (mi *MessageInfo) present(p pointer, index uint32) bool { + return p.Apply(mi.presenceOffset).PresenceInfo().Present(index) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message_opaque_gen.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message_opaque_gen.go new file mode 100644 index 0000000..a698256 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message_opaque_gen.go @@ -0,0 +1,132 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-types. DO NOT EDIT. + +package impl + +import ( + "reflect" + + "google.golang.org/protobuf/reflect/protoreflect" +) + +func getterForOpaqueNullableScalar(mi *MessageInfo, index uint32, fd protoreflect.FieldDescriptor, fs reflect.StructField, conv Converter, fieldOffset offset) func(p pointer) protoreflect.Value { + ft := fs.Type + if ft.Kind() == reflect.Ptr { + ft = ft.Elem() + } + if fd.Kind() == protoreflect.EnumKind { + // Enums for nullable opaque types. + return func(p pointer) protoreflect.Value { + if p.IsNil() || !mi.present(p, index) { + return conv.Zero() + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + return conv.PBValueOf(rv) + } + } + switch ft.Kind() { + case reflect.Bool: + return func(p pointer) protoreflect.Value { + if p.IsNil() || !mi.present(p, index) { + return conv.Zero() + } + x := p.Apply(fieldOffset).Bool() + return protoreflect.ValueOfBool(*x) + } + case reflect.Int32: + return func(p pointer) protoreflect.Value { + if p.IsNil() || !mi.present(p, index) { + return conv.Zero() + } + x := p.Apply(fieldOffset).Int32() + return protoreflect.ValueOfInt32(*x) + } + case reflect.Uint32: + return func(p pointer) protoreflect.Value { + if p.IsNil() || !mi.present(p, index) { + return conv.Zero() + } + x := p.Apply(fieldOffset).Uint32() + return protoreflect.ValueOfUint32(*x) + } + case reflect.Int64: + return func(p pointer) protoreflect.Value { + if p.IsNil() || !mi.present(p, index) { + return conv.Zero() + } + x := p.Apply(fieldOffset).Int64() + return protoreflect.ValueOfInt64(*x) + } + case reflect.Uint64: + return func(p pointer) protoreflect.Value { + if p.IsNil() || !mi.present(p, index) { + return conv.Zero() + } + x := p.Apply(fieldOffset).Uint64() + return protoreflect.ValueOfUint64(*x) + } + case reflect.Float32: + return func(p pointer) protoreflect.Value { + if p.IsNil() || !mi.present(p, index) { + return conv.Zero() + } + x := p.Apply(fieldOffset).Float32() + return protoreflect.ValueOfFloat32(*x) + } + case reflect.Float64: + return func(p pointer) protoreflect.Value { + if p.IsNil() || !mi.present(p, index) { + return conv.Zero() + } + x := p.Apply(fieldOffset).Float64() + return protoreflect.ValueOfFloat64(*x) + } + case reflect.String: + if fd.Kind() == protoreflect.BytesKind { + return func(p pointer) protoreflect.Value { + if p.IsNil() || !mi.present(p, index) { + return conv.Zero() + } + x := p.Apply(fieldOffset).StringPtr() + if *x == nil { + return conv.Zero() + } + if len(**x) == 0 { + return protoreflect.ValueOfBytes(nil) + } + return protoreflect.ValueOfBytes([]byte(**x)) + } + } + return func(p pointer) protoreflect.Value { + if p.IsNil() || !mi.present(p, index) { + return conv.Zero() + } + x := p.Apply(fieldOffset).StringPtr() + if *x == nil { + return conv.Zero() + } + return protoreflect.ValueOfString(**x) + } + case reflect.Slice: + if fd.Kind() == protoreflect.StringKind { + return func(p pointer) protoreflect.Value { + if p.IsNil() || !mi.present(p, index) { + return conv.Zero() + } + x := p.Apply(fieldOffset).Bytes() + return protoreflect.ValueOfString(string(*x)) + } + } + return func(p pointer) protoreflect.Value { + if p.IsNil() || !mi.present(p, index) { + return conv.Zero() + } + x := p.Apply(fieldOffset).Bytes() + return protoreflect.ValueOfBytes(*x) + } + } + panic("unexpected protobuf kind: " + ft.Kind().String()) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go new file mode 100644 index 0000000..0d20132 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go @@ -0,0 +1,462 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + + "google.golang.org/protobuf/internal/detrand" + "google.golang.org/protobuf/internal/pragma" + "google.golang.org/protobuf/reflect/protoreflect" +) + +type reflectMessageInfo struct { + fields map[protoreflect.FieldNumber]*fieldInfo + oneofs map[protoreflect.Name]*oneofInfo + + // fieldTypes contains the zero value of an enum or message field. + // For lists, it contains the element type. + // For maps, it contains the entry value type. + fieldTypes map[protoreflect.FieldNumber]any + + // denseFields is a subset of fields where: + // 0 < fieldDesc.Number() < len(denseFields) + // It provides faster access to the fieldInfo, but may be incomplete. + denseFields []*fieldInfo + + // rangeInfos is a list of all fields (not belonging to a oneof) and oneofs. + rangeInfos []any // either *fieldInfo or *oneofInfo + + getUnknown func(pointer) protoreflect.RawFields + setUnknown func(pointer, protoreflect.RawFields) + extensionMap func(pointer) *extensionMap + + nilMessage atomicNilMessage +} + +// makeReflectFuncs generates the set of functions to support reflection. +func (mi *MessageInfo) makeReflectFuncs(t reflect.Type, si structInfo) { + mi.makeKnownFieldsFunc(si) + mi.makeUnknownFieldsFunc(t, si) + mi.makeExtensionFieldsFunc(t, si) + mi.makeFieldTypes(si) +} + +// makeKnownFieldsFunc generates functions for operations that can be performed +// on each protobuf message field. It takes in a reflect.Type representing the +// Go struct and matches message fields with struct fields. +// +// This code assumes that the struct is well-formed and panics if there are +// any discrepancies. +func (mi *MessageInfo) makeKnownFieldsFunc(si structInfo) { + mi.fields = map[protoreflect.FieldNumber]*fieldInfo{} + md := mi.Desc + fds := md.Fields() + for i := 0; i < fds.Len(); i++ { + fd := fds.Get(i) + fs := si.fieldsByNumber[fd.Number()] + isOneof := fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic() + if isOneof { + fs = si.oneofsByName[fd.ContainingOneof().Name()] + } + var fi fieldInfo + switch { + case fs.Type == nil: + fi = fieldInfoForMissing(fd) // never occurs for officially generated message types + case isOneof: + fi = fieldInfoForOneof(fd, fs, mi.Exporter, si.oneofWrappersByNumber[fd.Number()]) + case fd.IsMap(): + fi = fieldInfoForMap(fd, fs, mi.Exporter) + case fd.IsList(): + fi = fieldInfoForList(fd, fs, mi.Exporter) + case fd.Message() != nil: + fi = fieldInfoForMessage(fd, fs, mi.Exporter) + default: + fi = fieldInfoForScalar(fd, fs, mi.Exporter) + } + mi.fields[fd.Number()] = &fi + } + + mi.oneofs = map[protoreflect.Name]*oneofInfo{} + for i := 0; i < md.Oneofs().Len(); i++ { + od := md.Oneofs().Get(i) + mi.oneofs[od.Name()] = makeOneofInfo(od, si, mi.Exporter) + } + + mi.denseFields = make([]*fieldInfo, fds.Len()*2) + for i := 0; i < fds.Len(); i++ { + if fd := fds.Get(i); int(fd.Number()) < len(mi.denseFields) { + mi.denseFields[fd.Number()] = mi.fields[fd.Number()] + } + } + + for i := 0; i < fds.Len(); { + fd := fds.Get(i) + if od := fd.ContainingOneof(); od != nil && !od.IsSynthetic() { + mi.rangeInfos = append(mi.rangeInfos, mi.oneofs[od.Name()]) + i += od.Fields().Len() + } else { + mi.rangeInfos = append(mi.rangeInfos, mi.fields[fd.Number()]) + i++ + } + } + + // Introduce instability to iteration order, but keep it deterministic. + if len(mi.rangeInfos) > 1 && detrand.Bool() { + i := detrand.Intn(len(mi.rangeInfos) - 1) + mi.rangeInfos[i], mi.rangeInfos[i+1] = mi.rangeInfos[i+1], mi.rangeInfos[i] + } +} + +func (mi *MessageInfo) makeUnknownFieldsFunc(t reflect.Type, si structInfo) { + switch { + case si.unknownOffset.IsValid() && si.unknownType == unknownFieldsAType: + // Handle as []byte. + mi.getUnknown = func(p pointer) protoreflect.RawFields { + if p.IsNil() { + return nil + } + return *p.Apply(mi.unknownOffset).Bytes() + } + mi.setUnknown = func(p pointer, b protoreflect.RawFields) { + if p.IsNil() { + panic("invalid SetUnknown on nil Message") + } + *p.Apply(mi.unknownOffset).Bytes() = b + } + case si.unknownOffset.IsValid() && si.unknownType == unknownFieldsBType: + // Handle as *[]byte. + mi.getUnknown = func(p pointer) protoreflect.RawFields { + if p.IsNil() { + return nil + } + bp := p.Apply(mi.unknownOffset).BytesPtr() + if *bp == nil { + return nil + } + return **bp + } + mi.setUnknown = func(p pointer, b protoreflect.RawFields) { + if p.IsNil() { + panic("invalid SetUnknown on nil Message") + } + bp := p.Apply(mi.unknownOffset).BytesPtr() + if *bp == nil { + *bp = new([]byte) + } + **bp = b + } + default: + mi.getUnknown = func(pointer) protoreflect.RawFields { + return nil + } + mi.setUnknown = func(p pointer, _ protoreflect.RawFields) { + if p.IsNil() { + panic("invalid SetUnknown on nil Message") + } + } + } +} + +func (mi *MessageInfo) makeExtensionFieldsFunc(t reflect.Type, si structInfo) { + if si.extensionOffset.IsValid() { + mi.extensionMap = func(p pointer) *extensionMap { + if p.IsNil() { + return (*extensionMap)(nil) + } + v := p.Apply(si.extensionOffset).AsValueOf(extensionFieldsType) + return (*extensionMap)(v.Interface().(*map[int32]ExtensionField)) + } + } else { + mi.extensionMap = func(pointer) *extensionMap { + return (*extensionMap)(nil) + } + } +} +func (mi *MessageInfo) makeFieldTypes(si structInfo) { + md := mi.Desc + fds := md.Fields() + for i := 0; i < fds.Len(); i++ { + var ft reflect.Type + fd := fds.Get(i) + fs := si.fieldsByNumber[fd.Number()] + isOneof := fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic() + if isOneof { + fs = si.oneofsByName[fd.ContainingOneof().Name()] + } + var isMessage bool + switch { + case fs.Type == nil: + continue // never occurs for officially generated message types + case isOneof: + if fd.Enum() != nil || fd.Message() != nil { + ft = si.oneofWrappersByNumber[fd.Number()].Field(0).Type + } + case fd.IsMap(): + if fd.MapValue().Enum() != nil || fd.MapValue().Message() != nil { + ft = fs.Type.Elem() + } + isMessage = fd.MapValue().Message() != nil + case fd.IsList(): + if fd.Enum() != nil || fd.Message() != nil { + ft = fs.Type.Elem() + + if ft.Kind() == reflect.Slice { + ft = ft.Elem() + } + + } + isMessage = fd.Message() != nil + case fd.Enum() != nil: + ft = fs.Type + if fd.HasPresence() && ft.Kind() == reflect.Ptr { + ft = ft.Elem() + } + case fd.Message() != nil: + ft = fs.Type + isMessage = true + } + if isMessage && ft != nil && ft.Kind() != reflect.Ptr { + ft = reflect.PtrTo(ft) // never occurs for officially generated message types + } + if ft != nil { + if mi.fieldTypes == nil { + mi.fieldTypes = make(map[protoreflect.FieldNumber]any) + } + mi.fieldTypes[fd.Number()] = reflect.Zero(ft).Interface() + } + } +} + +type extensionMap map[int32]ExtensionField + +func (m *extensionMap) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if m != nil { + for _, x := range *m { + xd := x.Type().TypeDescriptor() + v := x.Value() + if xd.IsList() && v.List().Len() == 0 { + continue + } + if !f(xd, v) { + return + } + } + } +} +func (m *extensionMap) Has(xd protoreflect.ExtensionTypeDescriptor) (ok bool) { + if m == nil { + return false + } + x, ok := (*m)[int32(xd.Number())] + if !ok { + return false + } + if x.isUnexpandedLazy() { + // Avoid calling x.Value(), which triggers a lazy unmarshal. + return true + } + switch { + case xd.IsList(): + return x.Value().List().Len() > 0 + case xd.IsMap(): + return x.Value().Map().Len() > 0 + } + return true +} +func (m *extensionMap) Clear(xd protoreflect.ExtensionTypeDescriptor) { + delete(*m, int32(xd.Number())) +} +func (m *extensionMap) Get(xd protoreflect.ExtensionTypeDescriptor) protoreflect.Value { + if m != nil { + if x, ok := (*m)[int32(xd.Number())]; ok { + return x.Value() + } + } + return xd.Type().Zero() +} +func (m *extensionMap) Set(xd protoreflect.ExtensionTypeDescriptor, v protoreflect.Value) { + xt := xd.Type() + isValid := true + switch { + case !xt.IsValidValue(v): + isValid = false + case xd.IsList(): + isValid = v.List().IsValid() + case xd.IsMap(): + isValid = v.Map().IsValid() + case xd.Message() != nil: + isValid = v.Message().IsValid() + } + if !isValid { + panic(fmt.Sprintf("%v: assigning invalid value", xd.FullName())) + } + + if *m == nil { + *m = make(map[int32]ExtensionField) + } + var x ExtensionField + x.Set(xt, v) + (*m)[int32(xd.Number())] = x +} +func (m *extensionMap) Mutable(xd protoreflect.ExtensionTypeDescriptor) protoreflect.Value { + if xd.Kind() != protoreflect.MessageKind && xd.Kind() != protoreflect.GroupKind && !xd.IsList() && !xd.IsMap() { + panic("invalid Mutable on field with non-composite type") + } + if x, ok := (*m)[int32(xd.Number())]; ok { + return x.Value() + } + v := xd.Type().New() + m.Set(xd, v) + return v +} + +// MessageState is a data structure that is nested as the first field in a +// concrete message. It provides a way to implement the ProtoReflect method +// in an allocation-free way without needing to have a shadow Go type generated +// for every message type. This technique only works using unsafe. +// +// Example generated code: +// +// type M struct { +// state protoimpl.MessageState +// +// Field1 int32 +// Field2 string +// Field3 *BarMessage +// ... +// } +// +// func (m *M) ProtoReflect() protoreflect.Message { +// mi := &file_fizz_buzz_proto_msgInfos[5] +// if protoimpl.UnsafeEnabled && m != nil { +// ms := protoimpl.X.MessageStateOf(Pointer(m)) +// if ms.LoadMessageInfo() == nil { +// ms.StoreMessageInfo(mi) +// } +// return ms +// } +// return mi.MessageOf(m) +// } +// +// The MessageState type holds a *MessageInfo, which must be atomically set to +// the message info associated with a given message instance. +// By unsafely converting a *M into a *MessageState, the MessageState object +// has access to all the information needed to implement protobuf reflection. +// It has access to the message info as its first field, and a pointer to the +// MessageState is identical to a pointer to the concrete message value. +// +// Requirements: +// - The type M must implement protoreflect.ProtoMessage. +// - The address of m must not be nil. +// - The address of m and the address of m.state must be equal, +// even though they are different Go types. +type MessageState struct { + pragma.NoUnkeyedLiterals + pragma.DoNotCompare + pragma.DoNotCopy + + atomicMessageInfo *MessageInfo +} + +type messageState MessageState + +var ( + _ protoreflect.Message = (*messageState)(nil) + _ unwrapper = (*messageState)(nil) +) + +// messageDataType is a tuple of a pointer to the message data and +// a pointer to the message type. It is a generalized way of providing a +// reflective view over a message instance. The disadvantage of this approach +// is the need to allocate this tuple of 16B. +type messageDataType struct { + p pointer + mi *MessageInfo +} + +type ( + messageReflectWrapper messageDataType + messageIfaceWrapper messageDataType +) + +var ( + _ protoreflect.Message = (*messageReflectWrapper)(nil) + _ unwrapper = (*messageReflectWrapper)(nil) + _ protoreflect.ProtoMessage = (*messageIfaceWrapper)(nil) + _ unwrapper = (*messageIfaceWrapper)(nil) +) + +// MessageOf returns a reflective view over a message. The input must be a +// pointer to a named Go struct. If the provided type has a ProtoReflect method, +// it must be implemented by calling this method. +func (mi *MessageInfo) MessageOf(m any) protoreflect.Message { + if reflect.TypeOf(m) != mi.GoReflectType { + panic(fmt.Sprintf("type mismatch: got %T, want %v", m, mi.GoReflectType)) + } + p := pointerOfIface(m) + if p.IsNil() { + return mi.nilMessage.Init(mi) + } + return &messageReflectWrapper{p, mi} +} + +func (m *messageReflectWrapper) pointer() pointer { return m.p } +func (m *messageReflectWrapper) messageInfo() *MessageInfo { return m.mi } + +// Reset implements the v1 proto.Message.Reset method. +func (m *messageIfaceWrapper) Reset() { + if mr, ok := m.protoUnwrap().(interface{ Reset() }); ok { + mr.Reset() + return + } + rv := reflect.ValueOf(m.protoUnwrap()) + if rv.Kind() == reflect.Ptr && !rv.IsNil() { + rv.Elem().Set(reflect.Zero(rv.Type().Elem())) + } +} +func (m *messageIfaceWrapper) ProtoReflect() protoreflect.Message { + return (*messageReflectWrapper)(m) +} +func (m *messageIfaceWrapper) protoUnwrap() any { + return m.p.AsIfaceOf(m.mi.GoReflectType.Elem()) +} + +// checkField verifies that the provided field descriptor is valid. +// Exactly one of the returned values is populated. +func (mi *MessageInfo) checkField(fd protoreflect.FieldDescriptor) (*fieldInfo, protoreflect.ExtensionTypeDescriptor) { + var fi *fieldInfo + if n := fd.Number(); 0 < n && int(n) < len(mi.denseFields) { + fi = mi.denseFields[n] + } else { + fi = mi.fields[n] + } + if fi != nil { + if fi.fieldDesc != fd { + if got, want := fd.FullName(), fi.fieldDesc.FullName(); got != want { + panic(fmt.Sprintf("mismatching field: got %v, want %v", got, want)) + } + panic(fmt.Sprintf("mismatching field: %v", fd.FullName())) + } + return fi, nil + } + + if fd.IsExtension() { + if got, want := fd.ContainingMessage().FullName(), mi.Desc.FullName(); got != want { + // TODO: Should this be exact containing message descriptor match? + panic(fmt.Sprintf("extension %v has mismatching containing message: got %v, want %v", fd.FullName(), got, want)) + } + if !mi.Desc.ExtensionRanges().Has(fd.Number()) { + panic(fmt.Sprintf("extension %v extends %v outside the extension range", fd.FullName(), mi.Desc.FullName())) + } + xtd, ok := fd.(protoreflect.ExtensionTypeDescriptor) + if !ok { + panic(fmt.Sprintf("extension %v does not implement protoreflect.ExtensionTypeDescriptor", fd.FullName())) + } + return nil, xtd + } + panic(fmt.Sprintf("field %v is invalid", fd.FullName())) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go new file mode 100644 index 0000000..68d4ae3 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go @@ -0,0 +1,423 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "math" + "reflect" + + "google.golang.org/protobuf/reflect/protoreflect" +) + +type fieldInfo struct { + fieldDesc protoreflect.FieldDescriptor + + // These fields are used for protobuf reflection support. + has func(pointer) bool + clear func(pointer) + get func(pointer) protoreflect.Value + set func(pointer, protoreflect.Value) + mutable func(pointer) protoreflect.Value + newMessage func() protoreflect.Message + newField func() protoreflect.Value +} + +func fieldInfoForMissing(fd protoreflect.FieldDescriptor) fieldInfo { + // This never occurs for generated message types. + // It implies that a hand-crafted type has missing Go fields + // for specific protobuf message fields. + return fieldInfo{ + fieldDesc: fd, + has: func(p pointer) bool { + return false + }, + clear: func(p pointer) { + panic("missing Go struct field for " + string(fd.FullName())) + }, + get: func(p pointer) protoreflect.Value { + return fd.Default() + }, + set: func(p pointer, v protoreflect.Value) { + panic("missing Go struct field for " + string(fd.FullName())) + }, + mutable: func(p pointer) protoreflect.Value { + panic("missing Go struct field for " + string(fd.FullName())) + }, + newMessage: func() protoreflect.Message { + panic("missing Go struct field for " + string(fd.FullName())) + }, + newField: func() protoreflect.Value { + if v := fd.Default(); v.IsValid() { + return v + } + panic("missing Go struct field for " + string(fd.FullName())) + }, + } +} + +func fieldInfoForOneof(fd protoreflect.FieldDescriptor, fs reflect.StructField, x exporter, ot reflect.Type) fieldInfo { + ft := fs.Type + if ft.Kind() != reflect.Interface { + panic(fmt.Sprintf("field %v has invalid type: got %v, want interface kind", fd.FullName(), ft)) + } + if ot.Kind() != reflect.Struct { + panic(fmt.Sprintf("field %v has invalid type: got %v, want struct kind", fd.FullName(), ot)) + } + if !reflect.PtrTo(ot).Implements(ft) { + panic(fmt.Sprintf("field %v has invalid type: %v does not implement %v", fd.FullName(), ot, ft)) + } + conv := NewConverter(ot.Field(0).Type, fd) + isMessage := fd.Message() != nil + + // TODO: Implement unsafe fast path? + fieldOffset := offsetOf(fs) + return fieldInfo{ + // NOTE: The logic below intentionally assumes that oneof fields are + // well-formatted. That is, the oneof interface never contains a + // typed nil pointer to one of the wrapper structs. + + fieldDesc: fd, + has: func(p pointer) bool { + if p.IsNil() { + return false + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if rv.IsNil() || rv.Elem().Type().Elem() != ot || rv.Elem().IsNil() { + return false + } + return true + }, + clear: func(p pointer) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if rv.IsNil() || rv.Elem().Type().Elem() != ot { + // NOTE: We intentionally don't check for rv.Elem().IsNil() + // so that (*OneofWrapperType)(nil) gets cleared to nil. + return + } + rv.Set(reflect.Zero(rv.Type())) + }, + get: func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if rv.IsNil() || rv.Elem().Type().Elem() != ot || rv.Elem().IsNil() { + return conv.Zero() + } + rv = rv.Elem().Elem().Field(0) + return conv.PBValueOf(rv) + }, + set: func(p pointer, v protoreflect.Value) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if rv.IsNil() || rv.Elem().Type().Elem() != ot || rv.Elem().IsNil() { + rv.Set(reflect.New(ot)) + } + rv = rv.Elem().Elem().Field(0) + rv.Set(conv.GoValueOf(v)) + }, + mutable: func(p pointer) protoreflect.Value { + if !isMessage { + panic(fmt.Sprintf("field %v with invalid Mutable call on field with non-composite type", fd.FullName())) + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if rv.IsNil() || rv.Elem().Type().Elem() != ot || rv.Elem().IsNil() { + rv.Set(reflect.New(ot)) + } + rv = rv.Elem().Elem().Field(0) + if rv.Kind() == reflect.Ptr && rv.IsNil() { + rv.Set(conv.GoValueOf(protoreflect.ValueOfMessage(conv.New().Message()))) + } + return conv.PBValueOf(rv) + }, + newMessage: func() protoreflect.Message { + return conv.New().Message() + }, + newField: func() protoreflect.Value { + return conv.New() + }, + } +} + +func fieldInfoForMap(fd protoreflect.FieldDescriptor, fs reflect.StructField, x exporter) fieldInfo { + ft := fs.Type + if ft.Kind() != reflect.Map { + panic(fmt.Sprintf("field %v has invalid type: got %v, want map kind", fd.FullName(), ft)) + } + conv := NewConverter(ft, fd) + + // TODO: Implement unsafe fast path? + fieldOffset := offsetOf(fs) + return fieldInfo{ + fieldDesc: fd, + has: func(p pointer) bool { + if p.IsNil() { + return false + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + return rv.Len() > 0 + }, + clear: func(p pointer) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + rv.Set(reflect.Zero(rv.Type())) + }, + get: func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if rv.Len() == 0 { + return conv.Zero() + } + return conv.PBValueOf(rv) + }, + set: func(p pointer, v protoreflect.Value) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + pv := conv.GoValueOf(v) + if pv.IsNil() { + panic(fmt.Sprintf("map field %v cannot be set with read-only value", fd.FullName())) + } + rv.Set(pv) + }, + mutable: func(p pointer) protoreflect.Value { + v := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if v.IsNil() { + v.Set(reflect.MakeMap(fs.Type)) + } + return conv.PBValueOf(v) + }, + newField: func() protoreflect.Value { + return conv.New() + }, + } +} + +func fieldInfoForList(fd protoreflect.FieldDescriptor, fs reflect.StructField, x exporter) fieldInfo { + ft := fs.Type + if ft.Kind() != reflect.Slice { + panic(fmt.Sprintf("field %v has invalid type: got %v, want slice kind", fd.FullName(), ft)) + } + conv := NewConverter(reflect.PtrTo(ft), fd) + + // TODO: Implement unsafe fast path? + fieldOffset := offsetOf(fs) + return fieldInfo{ + fieldDesc: fd, + has: func(p pointer) bool { + if p.IsNil() { + return false + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + return rv.Len() > 0 + }, + clear: func(p pointer) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + rv.Set(reflect.Zero(rv.Type())) + }, + get: func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type) + if rv.Elem().Len() == 0 { + return conv.Zero() + } + return conv.PBValueOf(rv) + }, + set: func(p pointer, v protoreflect.Value) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + pv := conv.GoValueOf(v) + if pv.IsNil() { + panic(fmt.Sprintf("list field %v cannot be set with read-only value", fd.FullName())) + } + rv.Set(pv.Elem()) + }, + mutable: func(p pointer) protoreflect.Value { + v := p.Apply(fieldOffset).AsValueOf(fs.Type) + return conv.PBValueOf(v) + }, + newField: func() protoreflect.Value { + return conv.New() + }, + } +} + +var ( + nilBytes = reflect.ValueOf([]byte(nil)) + emptyBytes = reflect.ValueOf([]byte{}) +) + +func fieldInfoForScalar(fd protoreflect.FieldDescriptor, fs reflect.StructField, x exporter) fieldInfo { + ft := fs.Type + nullable := fd.HasPresence() + isBytes := ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 + var getter func(p pointer) protoreflect.Value + if nullable { + if ft.Kind() != reflect.Ptr && ft.Kind() != reflect.Slice { + // This never occurs for generated message types. + // Despite the protobuf type system specifying presence, + // the Go field type cannot represent it. + nullable = false + } + if ft.Kind() == reflect.Ptr { + ft = ft.Elem() + } + } + conv := NewConverter(ft, fd) + fieldOffset := offsetOf(fs) + + // Generate specialized getter functions to avoid going through reflect.Value + if nullable { + getter = getterForNullableScalar(fd, fs, conv, fieldOffset) + } else { + getter = getterForDirectScalar(fd, fs, conv, fieldOffset) + } + + return fieldInfo{ + fieldDesc: fd, + has: func(p pointer) bool { + if p.IsNil() { + return false + } + if nullable { + return !p.Apply(fieldOffset).Elem().IsNil() + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + switch rv.Kind() { + case reflect.Bool: + return rv.Bool() + case reflect.Int32, reflect.Int64: + return rv.Int() != 0 + case reflect.Uint32, reflect.Uint64: + return rv.Uint() != 0 + case reflect.Float32, reflect.Float64: + return rv.Float() != 0 || math.Signbit(rv.Float()) + case reflect.String, reflect.Slice: + return rv.Len() > 0 + default: + panic(fmt.Sprintf("field %v has invalid type: %v", fd.FullName(), rv.Type())) // should never happen + } + }, + clear: func(p pointer) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + rv.Set(reflect.Zero(rv.Type())) + }, + get: getter, + // TODO: Implement unsafe fast path for set? + set: func(p pointer, v protoreflect.Value) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if nullable && rv.Kind() == reflect.Ptr { + if rv.IsNil() { + rv.Set(reflect.New(ft)) + } + rv = rv.Elem() + } + rv.Set(conv.GoValueOf(v)) + if isBytes && rv.Len() == 0 { + if nullable { + rv.Set(emptyBytes) // preserve presence + } else { + rv.Set(nilBytes) // do not preserve presence + } + } + }, + newField: func() protoreflect.Value { + return conv.New() + }, + } +} + +func fieldInfoForMessage(fd protoreflect.FieldDescriptor, fs reflect.StructField, x exporter) fieldInfo { + ft := fs.Type + conv := NewConverter(ft, fd) + + // TODO: Implement unsafe fast path? + fieldOffset := offsetOf(fs) + return fieldInfo{ + fieldDesc: fd, + has: func(p pointer) bool { + if p.IsNil() { + return false + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if fs.Type.Kind() != reflect.Ptr { + return !rv.IsZero() + } + return !rv.IsNil() + }, + clear: func(p pointer) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + rv.Set(reflect.Zero(rv.Type())) + }, + get: func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + return conv.PBValueOf(rv) + }, + set: func(p pointer, v protoreflect.Value) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + rv.Set(conv.GoValueOf(v)) + if fs.Type.Kind() == reflect.Ptr && rv.IsNil() { + panic(fmt.Sprintf("field %v has invalid nil pointer", fd.FullName())) + } + }, + mutable: func(p pointer) protoreflect.Value { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if fs.Type.Kind() == reflect.Ptr && rv.IsNil() { + rv.Set(conv.GoValueOf(conv.New())) + } + return conv.PBValueOf(rv) + }, + newMessage: func() protoreflect.Message { + return conv.New().Message() + }, + newField: func() protoreflect.Value { + return conv.New() + }, + } +} + +type oneofInfo struct { + oneofDesc protoreflect.OneofDescriptor + which func(pointer) protoreflect.FieldNumber +} + +func makeOneofInfo(od protoreflect.OneofDescriptor, si structInfo, x exporter) *oneofInfo { + oi := &oneofInfo{oneofDesc: od} + if od.IsSynthetic() { + fs := si.fieldsByNumber[od.Fields().Get(0).Number()] + fieldOffset := offsetOf(fs) + oi.which = func(p pointer) protoreflect.FieldNumber { + if p.IsNil() { + return 0 + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if rv.IsNil() { // valid on either *T or []byte + return 0 + } + return od.Fields().Get(0).Number() + } + } else { + fs := si.oneofsByName[od.Name()] + fieldOffset := offsetOf(fs) + oi.which = func(p pointer) protoreflect.FieldNumber { + if p.IsNil() { + return 0 + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if rv.IsNil() { + return 0 + } + rv = rv.Elem() + if rv.IsNil() { + return 0 + } + return si.oneofWrappersByType[rv.Type().Elem()] + } + } + return oi +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field_gen.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field_gen.go new file mode 100644 index 0000000..af5e063 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field_gen.go @@ -0,0 +1,273 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-types. DO NOT EDIT. + +package impl + +import ( + "reflect" + + "google.golang.org/protobuf/reflect/protoreflect" +) + +func getterForNullableScalar(fd protoreflect.FieldDescriptor, fs reflect.StructField, conv Converter, fieldOffset offset) func(p pointer) protoreflect.Value { + ft := fs.Type + if ft.Kind() == reflect.Ptr { + ft = ft.Elem() + } + if fd.Kind() == protoreflect.EnumKind { + elemType := fs.Type.Elem() + // Enums for nullable types. + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + rv := p.Apply(fieldOffset).Elem().AsValueOf(elemType) + if rv.IsNil() { + return conv.Zero() + } + return conv.PBValueOf(rv.Elem()) + } + } + switch ft.Kind() { + case reflect.Bool: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).BoolPtr() + if *x == nil { + return conv.Zero() + } + return protoreflect.ValueOfBool(**x) + } + case reflect.Int32: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Int32Ptr() + if *x == nil { + return conv.Zero() + } + return protoreflect.ValueOfInt32(**x) + } + case reflect.Uint32: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Uint32Ptr() + if *x == nil { + return conv.Zero() + } + return protoreflect.ValueOfUint32(**x) + } + case reflect.Int64: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Int64Ptr() + if *x == nil { + return conv.Zero() + } + return protoreflect.ValueOfInt64(**x) + } + case reflect.Uint64: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Uint64Ptr() + if *x == nil { + return conv.Zero() + } + return protoreflect.ValueOfUint64(**x) + } + case reflect.Float32: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Float32Ptr() + if *x == nil { + return conv.Zero() + } + return protoreflect.ValueOfFloat32(**x) + } + case reflect.Float64: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Float64Ptr() + if *x == nil { + return conv.Zero() + } + return protoreflect.ValueOfFloat64(**x) + } + case reflect.String: + if fd.Kind() == protoreflect.BytesKind { + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).StringPtr() + if *x == nil { + return conv.Zero() + } + if len(**x) == 0 { + return protoreflect.ValueOfBytes(nil) + } + return protoreflect.ValueOfBytes([]byte(**x)) + } + } + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).StringPtr() + if *x == nil { + return conv.Zero() + } + return protoreflect.ValueOfString(**x) + } + case reflect.Slice: + if fd.Kind() == protoreflect.StringKind { + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Bytes() + if len(*x) == 0 { + return conv.Zero() + } + return protoreflect.ValueOfString(string(*x)) + } + } + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Bytes() + if *x == nil { + return conv.Zero() + } + return protoreflect.ValueOfBytes(*x) + } + } + panic("unexpected protobuf kind: " + ft.Kind().String()) +} + +func getterForDirectScalar(fd protoreflect.FieldDescriptor, fs reflect.StructField, conv Converter, fieldOffset offset) func(p pointer) protoreflect.Value { + ft := fs.Type + if fd.Kind() == protoreflect.EnumKind { + // Enums for non nullable types. + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + return conv.PBValueOf(rv) + } + } + switch ft.Kind() { + case reflect.Bool: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Bool() + return protoreflect.ValueOfBool(*x) + } + case reflect.Int32: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Int32() + return protoreflect.ValueOfInt32(*x) + } + case reflect.Uint32: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Uint32() + return protoreflect.ValueOfUint32(*x) + } + case reflect.Int64: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Int64() + return protoreflect.ValueOfInt64(*x) + } + case reflect.Uint64: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Uint64() + return protoreflect.ValueOfUint64(*x) + } + case reflect.Float32: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Float32() + return protoreflect.ValueOfFloat32(*x) + } + case reflect.Float64: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Float64() + return protoreflect.ValueOfFloat64(*x) + } + case reflect.String: + if fd.Kind() == protoreflect.BytesKind { + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).String() + if len(*x) == 0 { + return protoreflect.ValueOfBytes(nil) + } + return protoreflect.ValueOfBytes([]byte(*x)) + } + } + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).String() + return protoreflect.ValueOfString(*x) + } + case reflect.Slice: + if fd.Kind() == protoreflect.StringKind { + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Bytes() + return protoreflect.ValueOfString(string(*x)) + } + } + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Bytes() + return protoreflect.ValueOfBytes(*x) + } + } + panic("unexpected protobuf kind: " + ft.Kind().String()) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go new file mode 100644 index 0000000..99dc23c --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/message_reflect_gen.go @@ -0,0 +1,271 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-types. DO NOT EDIT. + +package impl + +import ( + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" +) + +func (m *messageState) Descriptor() protoreflect.MessageDescriptor { + return m.messageInfo().Desc +} +func (m *messageState) Type() protoreflect.MessageType { + return m.messageInfo() +} +func (m *messageState) New() protoreflect.Message { + return m.messageInfo().New() +} +func (m *messageState) Interface() protoreflect.ProtoMessage { + return m.protoUnwrap().(protoreflect.ProtoMessage) +} +func (m *messageState) protoUnwrap() any { + return m.pointer().AsIfaceOf(m.messageInfo().GoReflectType.Elem()) +} +func (m *messageState) ProtoMethods() *protoiface.Methods { + mi := m.messageInfo() + mi.init() + return &mi.methods +} + +// ProtoMessageInfo is a pseudo-internal API for allowing the v1 code +// to be able to retrieve a v2 MessageInfo struct. +// +// WARNING: This method is exempt from the compatibility promise and +// may be removed in the future without warning. +func (m *messageState) ProtoMessageInfo() *MessageInfo { + return m.messageInfo() +} + +func (m *messageState) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + mi := m.messageInfo() + mi.init() + for _, ri := range mi.rangeInfos { + switch ri := ri.(type) { + case *fieldInfo: + if ri.has(m.pointer()) { + if !f(ri.fieldDesc, ri.get(m.pointer())) { + return + } + } + case *oneofInfo: + if n := ri.which(m.pointer()); n > 0 { + fi := mi.fields[n] + if !f(fi.fieldDesc, fi.get(m.pointer())) { + return + } + } + } + } + mi.extensionMap(m.pointer()).Range(f) +} +func (m *messageState) Has(fd protoreflect.FieldDescriptor) bool { + mi := m.messageInfo() + mi.init() + if fi, xd := mi.checkField(fd); fi != nil { + return fi.has(m.pointer()) + } else { + return mi.extensionMap(m.pointer()).Has(xd) + } +} +func (m *messageState) Clear(fd protoreflect.FieldDescriptor) { + mi := m.messageInfo() + mi.init() + if fi, xd := mi.checkField(fd); fi != nil { + fi.clear(m.pointer()) + } else { + mi.extensionMap(m.pointer()).Clear(xd) + } +} +func (m *messageState) Get(fd protoreflect.FieldDescriptor) protoreflect.Value { + mi := m.messageInfo() + mi.init() + if fi, xd := mi.checkField(fd); fi != nil { + return fi.get(m.pointer()) + } else { + return mi.extensionMap(m.pointer()).Get(xd) + } +} +func (m *messageState) Set(fd protoreflect.FieldDescriptor, v protoreflect.Value) { + mi := m.messageInfo() + mi.init() + if fi, xd := mi.checkField(fd); fi != nil { + fi.set(m.pointer(), v) + } else { + mi.extensionMap(m.pointer()).Set(xd, v) + } +} +func (m *messageState) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + mi := m.messageInfo() + mi.init() + if fi, xd := mi.checkField(fd); fi != nil { + return fi.mutable(m.pointer()) + } else { + return mi.extensionMap(m.pointer()).Mutable(xd) + } +} +func (m *messageState) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + mi := m.messageInfo() + mi.init() + if fi, xd := mi.checkField(fd); fi != nil { + return fi.newField() + } else { + return xd.Type().New() + } +} +func (m *messageState) WhichOneof(od protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + mi := m.messageInfo() + mi.init() + if oi := mi.oneofs[od.Name()]; oi != nil && oi.oneofDesc == od { + return od.Fields().ByNumber(oi.which(m.pointer())) + } + panic("invalid oneof descriptor " + string(od.FullName()) + " for message " + string(m.Descriptor().FullName())) +} +func (m *messageState) GetUnknown() protoreflect.RawFields { + mi := m.messageInfo() + mi.init() + return mi.getUnknown(m.pointer()) +} +func (m *messageState) SetUnknown(b protoreflect.RawFields) { + mi := m.messageInfo() + mi.init() + mi.setUnknown(m.pointer(), b) +} +func (m *messageState) IsValid() bool { + return !m.pointer().IsNil() +} + +func (m *messageReflectWrapper) Descriptor() protoreflect.MessageDescriptor { + return m.messageInfo().Desc +} +func (m *messageReflectWrapper) Type() protoreflect.MessageType { + return m.messageInfo() +} +func (m *messageReflectWrapper) New() protoreflect.Message { + return m.messageInfo().New() +} +func (m *messageReflectWrapper) Interface() protoreflect.ProtoMessage { + if m, ok := m.protoUnwrap().(protoreflect.ProtoMessage); ok { + return m + } + return (*messageIfaceWrapper)(m) +} +func (m *messageReflectWrapper) protoUnwrap() any { + return m.pointer().AsIfaceOf(m.messageInfo().GoReflectType.Elem()) +} +func (m *messageReflectWrapper) ProtoMethods() *protoiface.Methods { + mi := m.messageInfo() + mi.init() + return &mi.methods +} + +// ProtoMessageInfo is a pseudo-internal API for allowing the v1 code +// to be able to retrieve a v2 MessageInfo struct. +// +// WARNING: This method is exempt from the compatibility promise and +// may be removed in the future without warning. +func (m *messageReflectWrapper) ProtoMessageInfo() *MessageInfo { + return m.messageInfo() +} + +func (m *messageReflectWrapper) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + mi := m.messageInfo() + mi.init() + for _, ri := range mi.rangeInfos { + switch ri := ri.(type) { + case *fieldInfo: + if ri.has(m.pointer()) { + if !f(ri.fieldDesc, ri.get(m.pointer())) { + return + } + } + case *oneofInfo: + if n := ri.which(m.pointer()); n > 0 { + fi := mi.fields[n] + if !f(fi.fieldDesc, fi.get(m.pointer())) { + return + } + } + } + } + mi.extensionMap(m.pointer()).Range(f) +} +func (m *messageReflectWrapper) Has(fd protoreflect.FieldDescriptor) bool { + mi := m.messageInfo() + mi.init() + if fi, xd := mi.checkField(fd); fi != nil { + return fi.has(m.pointer()) + } else { + return mi.extensionMap(m.pointer()).Has(xd) + } +} +func (m *messageReflectWrapper) Clear(fd protoreflect.FieldDescriptor) { + mi := m.messageInfo() + mi.init() + if fi, xd := mi.checkField(fd); fi != nil { + fi.clear(m.pointer()) + } else { + mi.extensionMap(m.pointer()).Clear(xd) + } +} +func (m *messageReflectWrapper) Get(fd protoreflect.FieldDescriptor) protoreflect.Value { + mi := m.messageInfo() + mi.init() + if fi, xd := mi.checkField(fd); fi != nil { + return fi.get(m.pointer()) + } else { + return mi.extensionMap(m.pointer()).Get(xd) + } +} +func (m *messageReflectWrapper) Set(fd protoreflect.FieldDescriptor, v protoreflect.Value) { + mi := m.messageInfo() + mi.init() + if fi, xd := mi.checkField(fd); fi != nil { + fi.set(m.pointer(), v) + } else { + mi.extensionMap(m.pointer()).Set(xd, v) + } +} +func (m *messageReflectWrapper) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + mi := m.messageInfo() + mi.init() + if fi, xd := mi.checkField(fd); fi != nil { + return fi.mutable(m.pointer()) + } else { + return mi.extensionMap(m.pointer()).Mutable(xd) + } +} +func (m *messageReflectWrapper) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + mi := m.messageInfo() + mi.init() + if fi, xd := mi.checkField(fd); fi != nil { + return fi.newField() + } else { + return xd.Type().New() + } +} +func (m *messageReflectWrapper) WhichOneof(od protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + mi := m.messageInfo() + mi.init() + if oi := mi.oneofs[od.Name()]; oi != nil && oi.oneofDesc == od { + return od.Fields().ByNumber(oi.which(m.pointer())) + } + panic("invalid oneof descriptor " + string(od.FullName()) + " for message " + string(m.Descriptor().FullName())) +} +func (m *messageReflectWrapper) GetUnknown() protoreflect.RawFields { + mi := m.messageInfo() + mi.init() + return mi.getUnknown(m.pointer()) +} +func (m *messageReflectWrapper) SetUnknown(b protoreflect.RawFields) { + mi := m.messageInfo() + mi.init() + mi.setUnknown(m.pointer(), b) +} +func (m *messageReflectWrapper) IsValid() bool { + return !m.pointer().IsNil() +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go new file mode 100644 index 0000000..62f8bf6 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go @@ -0,0 +1,220 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "reflect" + "sync/atomic" + "unsafe" + + "google.golang.org/protobuf/internal/protolazy" +) + +const UnsafeEnabled = true + +// Pointer is an opaque pointer type. +type Pointer unsafe.Pointer + +// offset represents the offset to a struct field, accessible from a pointer. +// The offset is the byte offset to the field from the start of the struct. +type offset uintptr + +// offsetOf returns a field offset for the struct field. +func offsetOf(f reflect.StructField) offset { + return offset(f.Offset) +} + +// IsValid reports whether the offset is valid. +func (f offset) IsValid() bool { return f != invalidOffset } + +// invalidOffset is an invalid field offset. +var invalidOffset = ^offset(0) + +// zeroOffset is a noop when calling pointer.Apply. +var zeroOffset = offset(0) + +// pointer is a pointer to a message struct or field. +type pointer struct{ p unsafe.Pointer } + +// pointerOf returns p as a pointer. +func pointerOf(p Pointer) pointer { + return pointer{p: unsafe.Pointer(p)} +} + +// pointerOfValue returns v as a pointer. +func pointerOfValue(v reflect.Value) pointer { + return pointer{p: unsafe.Pointer(v.Pointer())} +} + +// pointerOfIface returns the pointer portion of an interface. +func pointerOfIface(v any) pointer { + type ifaceHeader struct { + Type unsafe.Pointer + Data unsafe.Pointer + } + return pointer{p: (*ifaceHeader)(unsafe.Pointer(&v)).Data} +} + +// IsNil reports whether the pointer is nil. +func (p pointer) IsNil() bool { + return p.p == nil +} + +// Apply adds an offset to the pointer to derive a new pointer +// to a specified field. The pointer must be valid and pointing at a struct. +func (p pointer) Apply(f offset) pointer { + if p.IsNil() { + panic("invalid nil pointer") + } + return pointer{p: unsafe.Pointer(uintptr(p.p) + uintptr(f))} +} + +// AsValueOf treats p as a pointer to an object of type t and returns the value. +// It is equivalent to reflect.ValueOf(p.AsIfaceOf(t)) +func (p pointer) AsValueOf(t reflect.Type) reflect.Value { + return reflect.NewAt(t, p.p) +} + +// AsIfaceOf treats p as a pointer to an object of type t and returns the value. +// It is equivalent to p.AsValueOf(t).Interface() +func (p pointer) AsIfaceOf(t reflect.Type) any { + // TODO: Use tricky unsafe magic to directly create ifaceHeader. + return p.AsValueOf(t).Interface() +} + +func (p pointer) Bool() *bool { return (*bool)(p.p) } +func (p pointer) BoolPtr() **bool { return (**bool)(p.p) } +func (p pointer) BoolSlice() *[]bool { return (*[]bool)(p.p) } +func (p pointer) Int32() *int32 { return (*int32)(p.p) } +func (p pointer) Int32Ptr() **int32 { return (**int32)(p.p) } +func (p pointer) Int32Slice() *[]int32 { return (*[]int32)(p.p) } +func (p pointer) Int64() *int64 { return (*int64)(p.p) } +func (p pointer) Int64Ptr() **int64 { return (**int64)(p.p) } +func (p pointer) Int64Slice() *[]int64 { return (*[]int64)(p.p) } +func (p pointer) Uint32() *uint32 { return (*uint32)(p.p) } +func (p pointer) Uint32Ptr() **uint32 { return (**uint32)(p.p) } +func (p pointer) Uint32Slice() *[]uint32 { return (*[]uint32)(p.p) } +func (p pointer) Uint64() *uint64 { return (*uint64)(p.p) } +func (p pointer) Uint64Ptr() **uint64 { return (**uint64)(p.p) } +func (p pointer) Uint64Slice() *[]uint64 { return (*[]uint64)(p.p) } +func (p pointer) Float32() *float32 { return (*float32)(p.p) } +func (p pointer) Float32Ptr() **float32 { return (**float32)(p.p) } +func (p pointer) Float32Slice() *[]float32 { return (*[]float32)(p.p) } +func (p pointer) Float64() *float64 { return (*float64)(p.p) } +func (p pointer) Float64Ptr() **float64 { return (**float64)(p.p) } +func (p pointer) Float64Slice() *[]float64 { return (*[]float64)(p.p) } +func (p pointer) String() *string { return (*string)(p.p) } +func (p pointer) StringPtr() **string { return (**string)(p.p) } +func (p pointer) StringSlice() *[]string { return (*[]string)(p.p) } +func (p pointer) Bytes() *[]byte { return (*[]byte)(p.p) } +func (p pointer) BytesPtr() **[]byte { return (**[]byte)(p.p) } +func (p pointer) BytesSlice() *[][]byte { return (*[][]byte)(p.p) } +func (p pointer) Extensions() *map[int32]ExtensionField { return (*map[int32]ExtensionField)(p.p) } +func (p pointer) LazyInfoPtr() **protolazy.XXX_lazyUnmarshalInfo { + return (**protolazy.XXX_lazyUnmarshalInfo)(p.p) +} + +func (p pointer) PresenceInfo() presence { + return presence{P: p.p} +} + +func (p pointer) Elem() pointer { + return pointer{p: *(*unsafe.Pointer)(p.p)} +} + +// PointerSlice loads []*T from p as a []pointer. +// The value returned is aliased with the original slice. +// This behavior differs from the implementation in pointer_reflect.go. +func (p pointer) PointerSlice() []pointer { + // Super-tricky - p should point to a []*T where T is a + // message type. We load it as []pointer. + return *(*[]pointer)(p.p) +} + +// AppendPointerSlice appends v to p, which must be a []*T. +func (p pointer) AppendPointerSlice(v pointer) { + *(*[]pointer)(p.p) = append(*(*[]pointer)(p.p), v) +} + +// SetPointer sets *p to v. +func (p pointer) SetPointer(v pointer) { + *(*unsafe.Pointer)(p.p) = (unsafe.Pointer)(v.p) +} + +func (p pointer) growBoolSlice(addCap int) { + sp := p.BoolSlice() + s := make([]bool, 0, addCap+len(*sp)) + s = s[:len(*sp)] + copy(s, *sp) + *sp = s +} + +func (p pointer) growInt32Slice(addCap int) { + sp := p.Int32Slice() + s := make([]int32, 0, addCap+len(*sp)) + s = s[:len(*sp)] + copy(s, *sp) + *sp = s +} + +func (p pointer) growUint32Slice(addCap int) { + p.growInt32Slice(addCap) +} + +func (p pointer) growFloat32Slice(addCap int) { + p.growInt32Slice(addCap) +} + +func (p pointer) growInt64Slice(addCap int) { + sp := p.Int64Slice() + s := make([]int64, 0, addCap+len(*sp)) + s = s[:len(*sp)] + copy(s, *sp) + *sp = s +} + +func (p pointer) growUint64Slice(addCap int) { + p.growInt64Slice(addCap) +} + +func (p pointer) growFloat64Slice(addCap int) { + p.growInt64Slice(addCap) +} + +// Static check that MessageState does not exceed the size of a pointer. +const _ = uint(unsafe.Sizeof(unsafe.Pointer(nil)) - unsafe.Sizeof(MessageState{})) + +func (Export) MessageStateOf(p Pointer) *messageState { + // Super-tricky - see documentation on MessageState. + return (*messageState)(unsafe.Pointer(p)) +} +func (ms *messageState) pointer() pointer { + // Super-tricky - see documentation on MessageState. + return pointer{p: unsafe.Pointer(ms)} +} +func (ms *messageState) messageInfo() *MessageInfo { + mi := ms.LoadMessageInfo() + if mi == nil { + panic("invalid nil message info; this suggests memory corruption due to a race or shallow copy on the message struct") + } + return mi +} +func (ms *messageState) LoadMessageInfo() *MessageInfo { + return (*MessageInfo)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&ms.atomicMessageInfo)))) +} +func (ms *messageState) StoreMessageInfo(mi *MessageInfo) { + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(&ms.atomicMessageInfo)), unsafe.Pointer(mi)) +} + +type atomicNilMessage struct{ p unsafe.Pointer } // p is a *messageReflectWrapper + +func (m *atomicNilMessage) Init(mi *MessageInfo) *messageReflectWrapper { + if p := atomic.LoadPointer(&m.p); p != nil { + return (*messageReflectWrapper)(p) + } + w := &messageReflectWrapper{mi: mi} + atomic.CompareAndSwapPointer(&m.p, nil, (unsafe.Pointer)(w)) + return (*messageReflectWrapper)(atomic.LoadPointer(&m.p)) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe_opaque.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe_opaque.go new file mode 100644 index 0000000..38aa7b7 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe_opaque.go @@ -0,0 +1,42 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "sync/atomic" + "unsafe" +) + +func (p pointer) AtomicGetPointer() pointer { + return pointer{p: atomic.LoadPointer((*unsafe.Pointer)(p.p))} +} + +func (p pointer) AtomicSetPointer(v pointer) { + atomic.StorePointer((*unsafe.Pointer)(p.p), v.p) +} + +func (p pointer) AtomicSetNilPointer() { + atomic.StorePointer((*unsafe.Pointer)(p.p), unsafe.Pointer(nil)) +} + +func (p pointer) AtomicSetPointerIfNil(v pointer) pointer { + if atomic.CompareAndSwapPointer((*unsafe.Pointer)(p.p), unsafe.Pointer(nil), v.p) { + return v + } + return pointer{p: atomic.LoadPointer((*unsafe.Pointer)(p.p))} +} + +type atomicV1MessageInfo struct{ p Pointer } + +func (mi *atomicV1MessageInfo) Get() Pointer { + return Pointer(atomic.LoadPointer((*unsafe.Pointer)(&mi.p))) +} + +func (mi *atomicV1MessageInfo) SetIfNil(p Pointer) Pointer { + if atomic.CompareAndSwapPointer((*unsafe.Pointer)(&mi.p), nil, unsafe.Pointer(p)) { + return p + } + return mi.Get() +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/presence.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/presence.go new file mode 100644 index 0000000..443afe8 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/presence.go @@ -0,0 +1,139 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "sync/atomic" + "unsafe" +) + +// presenceSize represents the size of a presence set, which should be the largest index of the set+1 +type presenceSize uint32 + +// presence is the internal representation of the bitmap array in a generated protobuf +type presence struct { + // This is a pointer to the beginning of an array of uint32 + P unsafe.Pointer +} + +func (p presence) toElem(num uint32) (ret *uint32) { + const ( + bitsPerByte = 8 + siz = unsafe.Sizeof(*ret) + ) + // p.P points to an array of uint32, num is the bit in this array that the + // caller wants to check/manipulate. Calculate the index in the array that + // contains this specific bit. E.g.: 76 / 32 = 2 (integer division). + offset := uintptr(num) / (siz * bitsPerByte) * siz + return (*uint32)(unsafe.Pointer(uintptr(p.P) + offset)) +} + +// Present checks for the presence of a specific field number in a presence set. +func (p presence) Present(num uint32) bool { + return Export{}.Present(p.toElem(num), num) +} + +// SetPresent adds presence for a specific field number in a presence set. +func (p presence) SetPresent(num uint32, size presenceSize) { + Export{}.SetPresent(p.toElem(num), num, uint32(size)) +} + +// SetPresentUnatomic adds presence for a specific field number in a presence set without using +// atomic operations. Only to be called during unmarshaling. +func (p presence) SetPresentUnatomic(num uint32, size presenceSize) { + Export{}.SetPresentNonAtomic(p.toElem(num), num, uint32(size)) +} + +// ClearPresent removes presence for a specific field number in a presence set. +func (p presence) ClearPresent(num uint32) { + Export{}.ClearPresent(p.toElem(num), num) +} + +// LoadPresenceCache (together with PresentInCache) allows for a +// cached version of checking for presence without re-reading the word +// for every field. It is optimized for efficiency and assumes no +// simltaneous mutation of the presence set (or at least does not have +// a problem with simultaneous mutation giving inconsistent results). +func (p presence) LoadPresenceCache() (current uint32) { + if p.P == nil { + return 0 + } + return atomic.LoadUint32((*uint32)(p.P)) +} + +// PresentInCache reads presence from a cached word in the presence +// bitmap. It caches up a new word if the bit is outside the +// word. This is for really fast iteration through bitmaps in cases +// where we either know that the bitmap will not be altered, or we +// don't care about inconsistencies caused by simultaneous writes. +func (p presence) PresentInCache(num uint32, cachedElement *uint32, current *uint32) bool { + if num/32 != *cachedElement { + o := uintptr(num/32) * unsafe.Sizeof(uint32(0)) + q := (*uint32)(unsafe.Pointer(uintptr(p.P) + o)) + *current = atomic.LoadUint32(q) + *cachedElement = num / 32 + } + return (*current & (1 << (num % 32))) > 0 +} + +// AnyPresent checks if any field is marked as present in the bitmap. +func (p presence) AnyPresent(size presenceSize) bool { + n := uintptr((size + 31) / 32) + for j := uintptr(0); j < n; j++ { + o := j * unsafe.Sizeof(uint32(0)) + q := (*uint32)(unsafe.Pointer(uintptr(p.P) + o)) + b := atomic.LoadUint32(q) + if b > 0 { + return true + } + } + return false +} + +// toRaceDetectData finds the preceding RaceDetectHookData in a +// message by using pointer arithmetic. As the type of the presence +// set (bitmap) varies with the number of fields in the protobuf, we +// can not have a struct type containing the array and the +// RaceDetectHookData. instead the RaceDetectHookData is placed +// immediately before the bitmap array, and we find it by walking +// backwards in the struct. +// +// This method is only called from the race-detect version of the code, +// so RaceDetectHookData is never an empty struct. +func (p presence) toRaceDetectData() *RaceDetectHookData { + var template struct { + d RaceDetectHookData + a [1]uint32 + } + o := (uintptr(unsafe.Pointer(&template.a)) - uintptr(unsafe.Pointer(&template.d))) + return (*RaceDetectHookData)(unsafe.Pointer(uintptr(p.P) - o)) +} + +func atomicLoadShadowPresence(p **[]byte) *[]byte { + return (*[]byte)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) +} +func atomicStoreShadowPresence(p **[]byte, v *[]byte) { + atomic.CompareAndSwapPointer((*unsafe.Pointer)(unsafe.Pointer(p)), nil, unsafe.Pointer(v)) +} + +// findPointerToRaceDetectData finds the preceding RaceDetectHookData +// in a message by using pointer arithmetic. For the methods called +// directy from generated code, we don't have a pointer to the +// beginning of the presence set, but a pointer inside the array. As +// we know the index of the bit we're manipulating (num), we can +// calculate which element of the array ptr is pointing to. With that +// information we find the preceding RaceDetectHookData and can +// manipulate the shadow bitmap. +// +// This method is only called from the race-detect version of the +// code, so RaceDetectHookData is never an empty struct. +func findPointerToRaceDetectData(ptr *uint32, num uint32) *RaceDetectHookData { + var template struct { + d RaceDetectHookData + a [1]uint32 + } + o := (uintptr(unsafe.Pointer(&template.a)) - uintptr(unsafe.Pointer(&template.d))) + uintptr(num/32)*unsafe.Sizeof(uint32(0)) + return (*RaceDetectHookData)(unsafe.Pointer(uintptr(unsafe.Pointer(ptr)) - o)) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/validate.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/validate.go new file mode 100644 index 0000000..7b2995d --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/impl/validate.go @@ -0,0 +1,570 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "math" + "math/bits" + "reflect" + "unicode/utf8" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/encoding/messageset" + "google.golang.org/protobuf/internal/flags" + "google.golang.org/protobuf/internal/genid" + "google.golang.org/protobuf/internal/strs" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" + "google.golang.org/protobuf/runtime/protoiface" +) + +// ValidationStatus is the result of validating the wire-format encoding of a message. +type ValidationStatus int + +const ( + // ValidationUnknown indicates that unmarshaling the message might succeed or fail. + // The validator was unable to render a judgement. + // + // The only causes of this status are an aberrant message type appearing somewhere + // in the message or a failure in the extension resolver. + ValidationUnknown ValidationStatus = iota + 1 + + // ValidationInvalid indicates that unmarshaling the message will fail. + ValidationInvalid + + // ValidationValid indicates that unmarshaling the message will succeed. + ValidationValid + + // ValidationWrongWireType indicates that a validated field does not have + // the expected wire type. + ValidationWrongWireType +) + +func (v ValidationStatus) String() string { + switch v { + case ValidationUnknown: + return "ValidationUnknown" + case ValidationInvalid: + return "ValidationInvalid" + case ValidationValid: + return "ValidationValid" + default: + return fmt.Sprintf("ValidationStatus(%d)", int(v)) + } +} + +// Validate determines whether the contents of the buffer are a valid wire encoding +// of the message type. +// +// This function is exposed for testing. +func Validate(mt protoreflect.MessageType, in protoiface.UnmarshalInput) (out protoiface.UnmarshalOutput, _ ValidationStatus) { + mi, ok := mt.(*MessageInfo) + if !ok { + return out, ValidationUnknown + } + if in.Resolver == nil { + in.Resolver = protoregistry.GlobalTypes + } + o, st := mi.validate(in.Buf, 0, unmarshalOptions{ + flags: in.Flags, + resolver: in.Resolver, + }) + if o.initialized { + out.Flags |= protoiface.UnmarshalInitialized + } + return out, st +} + +type validationInfo struct { + mi *MessageInfo + typ validationType + keyType, valType validationType + + // For non-required fields, requiredBit is 0. + // + // For required fields, requiredBit's nth bit is set, where n is a + // unique index in the range [0, MessageInfo.numRequiredFields). + // + // If there are more than 64 required fields, requiredBit is 0. + requiredBit uint64 +} + +type validationType uint8 + +const ( + validationTypeOther validationType = iota + validationTypeMessage + validationTypeGroup + validationTypeMap + validationTypeRepeatedVarint + validationTypeRepeatedFixed32 + validationTypeRepeatedFixed64 + validationTypeVarint + validationTypeFixed32 + validationTypeFixed64 + validationTypeBytes + validationTypeUTF8String + validationTypeMessageSetItem +) + +func newFieldValidationInfo(mi *MessageInfo, si structInfo, fd protoreflect.FieldDescriptor, ft reflect.Type) validationInfo { + var vi validationInfo + switch { + case fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic(): + switch fd.Kind() { + case protoreflect.MessageKind: + vi.typ = validationTypeMessage + if ot, ok := si.oneofWrappersByNumber[fd.Number()]; ok { + vi.mi = getMessageInfo(ot.Field(0).Type) + } + case protoreflect.GroupKind: + vi.typ = validationTypeGroup + if ot, ok := si.oneofWrappersByNumber[fd.Number()]; ok { + vi.mi = getMessageInfo(ot.Field(0).Type) + } + case protoreflect.StringKind: + if strs.EnforceUTF8(fd) { + vi.typ = validationTypeUTF8String + } + } + default: + vi = newValidationInfo(fd, ft) + } + if fd.Cardinality() == protoreflect.Required { + // Avoid overflow. The required field check is done with a 64-bit mask, with + // any message containing more than 64 required fields always reported as + // potentially uninitialized, so it is not important to get a precise count + // of the required fields past 64. + if mi.numRequiredFields < math.MaxUint8 { + mi.numRequiredFields++ + vi.requiredBit = 1 << (mi.numRequiredFields - 1) + } + } + return vi +} + +func newValidationInfo(fd protoreflect.FieldDescriptor, ft reflect.Type) validationInfo { + var vi validationInfo + switch { + case fd.IsList(): + switch fd.Kind() { + case protoreflect.MessageKind: + vi.typ = validationTypeMessage + + if ft.Kind() == reflect.Ptr { + // Repeated opaque message fields are *[]*T. + ft = ft.Elem() + } + + if ft.Kind() == reflect.Slice { + vi.mi = getMessageInfo(ft.Elem()) + } + case protoreflect.GroupKind: + vi.typ = validationTypeGroup + + if ft.Kind() == reflect.Ptr { + // Repeated opaque message fields are *[]*T. + ft = ft.Elem() + } + + if ft.Kind() == reflect.Slice { + vi.mi = getMessageInfo(ft.Elem()) + } + case protoreflect.StringKind: + vi.typ = validationTypeBytes + if strs.EnforceUTF8(fd) { + vi.typ = validationTypeUTF8String + } + default: + switch wireTypes[fd.Kind()] { + case protowire.VarintType: + vi.typ = validationTypeRepeatedVarint + case protowire.Fixed32Type: + vi.typ = validationTypeRepeatedFixed32 + case protowire.Fixed64Type: + vi.typ = validationTypeRepeatedFixed64 + } + } + case fd.IsMap(): + vi.typ = validationTypeMap + switch fd.MapKey().Kind() { + case protoreflect.StringKind: + if strs.EnforceUTF8(fd) { + vi.keyType = validationTypeUTF8String + } + } + switch fd.MapValue().Kind() { + case protoreflect.MessageKind: + vi.valType = validationTypeMessage + if ft.Kind() == reflect.Map { + vi.mi = getMessageInfo(ft.Elem()) + } + case protoreflect.StringKind: + if strs.EnforceUTF8(fd) { + vi.valType = validationTypeUTF8String + } + } + default: + switch fd.Kind() { + case protoreflect.MessageKind: + vi.typ = validationTypeMessage + vi.mi = getMessageInfo(ft) + case protoreflect.GroupKind: + vi.typ = validationTypeGroup + vi.mi = getMessageInfo(ft) + case protoreflect.StringKind: + vi.typ = validationTypeBytes + if strs.EnforceUTF8(fd) { + vi.typ = validationTypeUTF8String + } + default: + switch wireTypes[fd.Kind()] { + case protowire.VarintType: + vi.typ = validationTypeVarint + case protowire.Fixed32Type: + vi.typ = validationTypeFixed32 + case protowire.Fixed64Type: + vi.typ = validationTypeFixed64 + case protowire.BytesType: + vi.typ = validationTypeBytes + } + } + } + return vi +} + +func (mi *MessageInfo) validate(b []byte, groupTag protowire.Number, opts unmarshalOptions) (out unmarshalOutput, result ValidationStatus) { + mi.init() + type validationState struct { + typ validationType + keyType, valType validationType + endGroup protowire.Number + mi *MessageInfo + tail []byte + requiredMask uint64 + } + + // Pre-allocate some slots to avoid repeated slice reallocation. + states := make([]validationState, 0, 16) + states = append(states, validationState{ + typ: validationTypeMessage, + mi: mi, + }) + if groupTag > 0 { + states[0].typ = validationTypeGroup + states[0].endGroup = groupTag + } + initialized := true + start := len(b) +State: + for len(states) > 0 { + st := &states[len(states)-1] + for len(b) > 0 { + // Parse the tag (field number and wire type). + var tag uint64 + if b[0] < 0x80 { + tag = uint64(b[0]) + b = b[1:] + } else if len(b) >= 2 && b[1] < 128 { + tag = uint64(b[0]&0x7f) + uint64(b[1])<<7 + b = b[2:] + } else { + var n int + tag, n = protowire.ConsumeVarint(b) + if n < 0 { + return out, ValidationInvalid + } + b = b[n:] + } + var num protowire.Number + if n := tag >> 3; n < uint64(protowire.MinValidNumber) || n > uint64(protowire.MaxValidNumber) { + return out, ValidationInvalid + } else { + num = protowire.Number(n) + } + wtyp := protowire.Type(tag & 7) + + if wtyp == protowire.EndGroupType { + if st.endGroup == num { + goto PopState + } + return out, ValidationInvalid + } + var vi validationInfo + switch { + case st.typ == validationTypeMap: + switch num { + case genid.MapEntry_Key_field_number: + vi.typ = st.keyType + case genid.MapEntry_Value_field_number: + vi.typ = st.valType + vi.mi = st.mi + vi.requiredBit = 1 + } + case flags.ProtoLegacy && st.mi.isMessageSet: + switch num { + case messageset.FieldItem: + vi.typ = validationTypeMessageSetItem + } + default: + var f *coderFieldInfo + if int(num) < len(st.mi.denseCoderFields) { + f = st.mi.denseCoderFields[num] + } else { + f = st.mi.coderFields[num] + } + if f != nil { + vi = f.validation + break + } + // Possible extension field. + // + // TODO: We should return ValidationUnknown when: + // 1. The resolver is not frozen. (More extensions may be added to it.) + // 2. The resolver returns preg.NotFound. + // In this case, a type added to the resolver in the future could cause + // unmarshaling to begin failing. Supporting this requires some way to + // determine if the resolver is frozen. + xt, err := opts.resolver.FindExtensionByNumber(st.mi.Desc.FullName(), num) + if err != nil && err != protoregistry.NotFound { + return out, ValidationUnknown + } + if err == nil { + vi = getExtensionFieldInfo(xt).validation + } + } + if vi.requiredBit != 0 { + // Check that the field has a compatible wire type. + // We only need to consider non-repeated field types, + // since repeated fields (and maps) can never be required. + ok := false + switch vi.typ { + case validationTypeVarint: + ok = wtyp == protowire.VarintType + case validationTypeFixed32: + ok = wtyp == protowire.Fixed32Type + case validationTypeFixed64: + ok = wtyp == protowire.Fixed64Type + case validationTypeBytes, validationTypeUTF8String, validationTypeMessage: + ok = wtyp == protowire.BytesType + case validationTypeGroup: + ok = wtyp == protowire.StartGroupType + } + if ok { + st.requiredMask |= vi.requiredBit + } + } + + switch wtyp { + case protowire.VarintType: + if len(b) >= 10 { + switch { + case b[0] < 0x80: + b = b[1:] + case b[1] < 0x80: + b = b[2:] + case b[2] < 0x80: + b = b[3:] + case b[3] < 0x80: + b = b[4:] + case b[4] < 0x80: + b = b[5:] + case b[5] < 0x80: + b = b[6:] + case b[6] < 0x80: + b = b[7:] + case b[7] < 0x80: + b = b[8:] + case b[8] < 0x80: + b = b[9:] + case b[9] < 0x80 && b[9] < 2: + b = b[10:] + default: + return out, ValidationInvalid + } + } else { + switch { + case len(b) > 0 && b[0] < 0x80: + b = b[1:] + case len(b) > 1 && b[1] < 0x80: + b = b[2:] + case len(b) > 2 && b[2] < 0x80: + b = b[3:] + case len(b) > 3 && b[3] < 0x80: + b = b[4:] + case len(b) > 4 && b[4] < 0x80: + b = b[5:] + case len(b) > 5 && b[5] < 0x80: + b = b[6:] + case len(b) > 6 && b[6] < 0x80: + b = b[7:] + case len(b) > 7 && b[7] < 0x80: + b = b[8:] + case len(b) > 8 && b[8] < 0x80: + b = b[9:] + case len(b) > 9 && b[9] < 2: + b = b[10:] + default: + return out, ValidationInvalid + } + } + continue State + case protowire.BytesType: + var size uint64 + if len(b) >= 1 && b[0] < 0x80 { + size = uint64(b[0]) + b = b[1:] + } else if len(b) >= 2 && b[1] < 128 { + size = uint64(b[0]&0x7f) + uint64(b[1])<<7 + b = b[2:] + } else { + var n int + size, n = protowire.ConsumeVarint(b) + if n < 0 { + return out, ValidationInvalid + } + b = b[n:] + } + if size > uint64(len(b)) { + return out, ValidationInvalid + } + v := b[:size] + b = b[size:] + switch vi.typ { + case validationTypeMessage: + if vi.mi == nil { + return out, ValidationUnknown + } + vi.mi.init() + fallthrough + case validationTypeMap: + if vi.mi != nil { + vi.mi.init() + } + states = append(states, validationState{ + typ: vi.typ, + keyType: vi.keyType, + valType: vi.valType, + mi: vi.mi, + tail: b, + }) + b = v + continue State + case validationTypeRepeatedVarint: + // Packed field. + for len(v) > 0 { + _, n := protowire.ConsumeVarint(v) + if n < 0 { + return out, ValidationInvalid + } + v = v[n:] + } + case validationTypeRepeatedFixed32: + // Packed field. + if len(v)%4 != 0 { + return out, ValidationInvalid + } + case validationTypeRepeatedFixed64: + // Packed field. + if len(v)%8 != 0 { + return out, ValidationInvalid + } + case validationTypeUTF8String: + if !utf8.Valid(v) { + return out, ValidationInvalid + } + } + case protowire.Fixed32Type: + if len(b) < 4 { + return out, ValidationInvalid + } + b = b[4:] + case protowire.Fixed64Type: + if len(b) < 8 { + return out, ValidationInvalid + } + b = b[8:] + case protowire.StartGroupType: + switch { + case vi.typ == validationTypeGroup: + if vi.mi == nil { + return out, ValidationUnknown + } + vi.mi.init() + states = append(states, validationState{ + typ: validationTypeGroup, + mi: vi.mi, + endGroup: num, + }) + continue State + case flags.ProtoLegacy && vi.typ == validationTypeMessageSetItem: + typeid, v, n, err := messageset.ConsumeFieldValue(b, false) + if err != nil { + return out, ValidationInvalid + } + xt, err := opts.resolver.FindExtensionByNumber(st.mi.Desc.FullName(), typeid) + switch { + case err == protoregistry.NotFound: + b = b[n:] + case err != nil: + return out, ValidationUnknown + default: + xvi := getExtensionFieldInfo(xt).validation + if xvi.mi != nil { + xvi.mi.init() + } + states = append(states, validationState{ + typ: xvi.typ, + mi: xvi.mi, + tail: b[n:], + }) + b = v + continue State + } + default: + n := protowire.ConsumeFieldValue(num, wtyp, b) + if n < 0 { + return out, ValidationInvalid + } + b = b[n:] + } + default: + return out, ValidationInvalid + } + } + if st.endGroup != 0 { + return out, ValidationInvalid + } + if len(b) != 0 { + return out, ValidationInvalid + } + b = st.tail + PopState: + numRequiredFields := 0 + switch st.typ { + case validationTypeMessage, validationTypeGroup: + numRequiredFields = int(st.mi.numRequiredFields) + case validationTypeMap: + // If this is a map field with a message value that contains + // required fields, require that the value be present. + if st.mi != nil && st.mi.numRequiredFields > 0 { + numRequiredFields = 1 + } + } + // If there are more than 64 required fields, this check will + // always fail and we will report that the message is potentially + // uninitialized. + if numRequiredFields > 0 && bits.OnesCount64(st.requiredMask) != numRequiredFields { + initialized = false + } + states = states[:len(states)-1] + } + out.n = start - len(b) + if initialized { + out.initialized = true + } + return out, ValidationValid +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/msgfmt/format.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/msgfmt/format.go new file mode 100644 index 0000000..17b3f27 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/msgfmt/format.go @@ -0,0 +1,261 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package msgfmt implements a text marshaler combining the desirable features +// of both the JSON and proto text formats. +// It is optimized for human readability and has no associated deserializer. +package msgfmt + +import ( + "bytes" + "fmt" + "reflect" + "sort" + "strconv" + "strings" + "time" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/detrand" + "google.golang.org/protobuf/internal/genid" + "google.golang.org/protobuf/internal/order" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" +) + +// Format returns a formatted string for the message. +func Format(m proto.Message) string { + return string(appendMessage(nil, m.ProtoReflect())) +} + +// FormatValue returns a formatted string for an arbitrary value. +func FormatValue(v protoreflect.Value, fd protoreflect.FieldDescriptor) string { + return string(appendValue(nil, v, fd)) +} + +func appendValue(b []byte, v protoreflect.Value, fd protoreflect.FieldDescriptor) []byte { + switch v := v.Interface().(type) { + case nil: + return append(b, ""...) + case bool, int32, int64, uint32, uint64, float32, float64: + return append(b, fmt.Sprint(v)...) + case string: + return append(b, strconv.Quote(string(v))...) + case []byte: + return append(b, strconv.Quote(string(v))...) + case protoreflect.EnumNumber: + return appendEnum(b, v, fd) + case protoreflect.Message: + return appendMessage(b, v) + case protoreflect.List: + return appendList(b, v, fd) + case protoreflect.Map: + return appendMap(b, v, fd) + default: + panic(fmt.Sprintf("invalid type: %T", v)) + } +} + +func appendEnum(b []byte, v protoreflect.EnumNumber, fd protoreflect.FieldDescriptor) []byte { + if fd != nil { + if ev := fd.Enum().Values().ByNumber(v); ev != nil { + return append(b, ev.Name()...) + } + } + return strconv.AppendInt(b, int64(v), 10) +} + +func appendMessage(b []byte, m protoreflect.Message) []byte { + if b2 := appendKnownMessage(b, m); b2 != nil { + return b2 + } + + b = append(b, '{') + order.RangeFields(m, order.IndexNameFieldOrder, func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + b = append(b, fd.TextName()...) + b = append(b, ':') + b = appendValue(b, v, fd) + b = append(b, delim()...) + return true + }) + b = appendUnknown(b, m.GetUnknown()) + b = bytes.TrimRight(b, delim()) + b = append(b, '}') + return b +} + +var protocmpMessageType = reflect.TypeOf(map[string]any(nil)) + +func appendKnownMessage(b []byte, m protoreflect.Message) []byte { + md := m.Descriptor() + fds := md.Fields() + switch md.FullName() { + case genid.Any_message_fullname: + var msgVal protoreflect.Message + url := m.Get(fds.ByNumber(genid.Any_TypeUrl_field_number)).String() + if v := reflect.ValueOf(m); v.Type().ConvertibleTo(protocmpMessageType) { + // For protocmp.Message, directly obtain the sub-message value + // which is stored in structured form, rather than as raw bytes. + m2 := v.Convert(protocmpMessageType).Interface().(map[string]any) + v, ok := m2[string(genid.Any_Value_field_name)].(proto.Message) + if !ok { + return nil + } + msgVal = v.ProtoReflect() + } else { + val := m.Get(fds.ByNumber(genid.Any_Value_field_number)).Bytes() + mt, err := protoregistry.GlobalTypes.FindMessageByURL(url) + if err != nil { + return nil + } + msgVal = mt.New() + err = proto.UnmarshalOptions{AllowPartial: true}.Unmarshal(val, msgVal.Interface()) + if err != nil { + return nil + } + } + + b = append(b, '{') + b = append(b, "["+url+"]"...) + b = append(b, ':') + b = appendMessage(b, msgVal) + b = append(b, '}') + return b + + case genid.Timestamp_message_fullname: + secs := m.Get(fds.ByNumber(genid.Timestamp_Seconds_field_number)).Int() + nanos := m.Get(fds.ByNumber(genid.Timestamp_Nanos_field_number)).Int() + if nanos < 0 || nanos >= 1e9 { + return nil + } + t := time.Unix(secs, nanos).UTC() + x := t.Format("2006-01-02T15:04:05.000000000") // RFC 3339 + x = strings.TrimSuffix(x, "000") + x = strings.TrimSuffix(x, "000") + x = strings.TrimSuffix(x, ".000") + return append(b, x+"Z"...) + + case genid.Duration_message_fullname: + sign := "" + secs := m.Get(fds.ByNumber(genid.Duration_Seconds_field_number)).Int() + nanos := m.Get(fds.ByNumber(genid.Duration_Nanos_field_number)).Int() + if nanos <= -1e9 || nanos >= 1e9 || (secs > 0 && nanos < 0) || (secs < 0 && nanos > 0) { + return nil + } + if secs < 0 || nanos < 0 { + sign, secs, nanos = "-", -1*secs, -1*nanos + } + x := fmt.Sprintf("%s%d.%09d", sign, secs, nanos) + x = strings.TrimSuffix(x, "000") + x = strings.TrimSuffix(x, "000") + x = strings.TrimSuffix(x, ".000") + return append(b, x+"s"...) + + case genid.BoolValue_message_fullname, + genid.Int32Value_message_fullname, + genid.Int64Value_message_fullname, + genid.UInt32Value_message_fullname, + genid.UInt64Value_message_fullname, + genid.FloatValue_message_fullname, + genid.DoubleValue_message_fullname, + genid.StringValue_message_fullname, + genid.BytesValue_message_fullname: + fd := fds.ByNumber(genid.WrapperValue_Value_field_number) + return appendValue(b, m.Get(fd), fd) + } + + return nil +} + +func appendUnknown(b []byte, raw protoreflect.RawFields) []byte { + rs := make(map[protoreflect.FieldNumber][]protoreflect.RawFields) + for len(raw) > 0 { + num, _, n := protowire.ConsumeField(raw) + rs[num] = append(rs[num], raw[:n]) + raw = raw[n:] + } + + var ns []protoreflect.FieldNumber + for n := range rs { + ns = append(ns, n) + } + sort.Slice(ns, func(i, j int) bool { return ns[i] < ns[j] }) + + for _, n := range ns { + var leftBracket, rightBracket string + if len(rs[n]) > 1 { + leftBracket, rightBracket = "[", "]" + } + + b = strconv.AppendInt(b, int64(n), 10) + b = append(b, ':') + b = append(b, leftBracket...) + for _, r := range rs[n] { + num, typ, n := protowire.ConsumeTag(r) + r = r[n:] + switch typ { + case protowire.VarintType: + v, _ := protowire.ConsumeVarint(r) + b = strconv.AppendInt(b, int64(v), 10) + case protowire.Fixed32Type: + v, _ := protowire.ConsumeFixed32(r) + b = append(b, fmt.Sprintf("0x%08x", v)...) + case protowire.Fixed64Type: + v, _ := protowire.ConsumeFixed64(r) + b = append(b, fmt.Sprintf("0x%016x", v)...) + case protowire.BytesType: + v, _ := protowire.ConsumeBytes(r) + b = strconv.AppendQuote(b, string(v)) + case protowire.StartGroupType: + v, _ := protowire.ConsumeGroup(num, r) + b = append(b, '{') + b = appendUnknown(b, v) + b = bytes.TrimRight(b, delim()) + b = append(b, '}') + default: + panic(fmt.Sprintf("invalid type: %v", typ)) + } + b = append(b, delim()...) + } + b = bytes.TrimRight(b, delim()) + b = append(b, rightBracket...) + b = append(b, delim()...) + } + return b +} + +func appendList(b []byte, v protoreflect.List, fd protoreflect.FieldDescriptor) []byte { + b = append(b, '[') + for i := 0; i < v.Len(); i++ { + b = appendValue(b, v.Get(i), fd) + b = append(b, delim()...) + } + b = bytes.TrimRight(b, delim()) + b = append(b, ']') + return b +} + +func appendMap(b []byte, v protoreflect.Map, fd protoreflect.FieldDescriptor) []byte { + b = append(b, '{') + order.RangeEntries(v, order.GenericKeyOrder, func(k protoreflect.MapKey, v protoreflect.Value) bool { + b = appendValue(b, k.Value(), fd.MapKey()) + b = append(b, ':') + b = appendValue(b, v, fd.MapValue()) + b = append(b, delim()...) + return true + }) + b = bytes.TrimRight(b, delim()) + b = append(b, '}') + return b +} + +func delim() string { + // Deliberately introduce instability into the message string to + // discourage users from depending on it. + if detrand.Bool() { + return " " + } + return ", " +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/order/order.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/order/order.go new file mode 100644 index 0000000..dea522e --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/order/order.go @@ -0,0 +1,89 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package order + +import ( + "google.golang.org/protobuf/reflect/protoreflect" +) + +// FieldOrder specifies the ordering to visit message fields. +// It is a function that reports whether x is ordered before y. +type FieldOrder func(x, y protoreflect.FieldDescriptor) bool + +var ( + // AnyFieldOrder specifies no specific field ordering. + AnyFieldOrder FieldOrder = nil + + // LegacyFieldOrder sorts fields in the same ordering as emitted by + // wire serialization in the github.com/golang/protobuf implementation. + LegacyFieldOrder FieldOrder = func(x, y protoreflect.FieldDescriptor) bool { + ox, oy := x.ContainingOneof(), y.ContainingOneof() + inOneof := func(od protoreflect.OneofDescriptor) bool { + return od != nil && !od.IsSynthetic() + } + + // Extension fields sort before non-extension fields. + if x.IsExtension() != y.IsExtension() { + return x.IsExtension() && !y.IsExtension() + } + // Fields not within a oneof sort before those within a oneof. + if inOneof(ox) != inOneof(oy) { + return !inOneof(ox) && inOneof(oy) + } + // Fields in disjoint oneof sets are sorted by declaration index. + if inOneof(ox) && inOneof(oy) && ox != oy { + return ox.Index() < oy.Index() + } + // Fields sorted by field number. + return x.Number() < y.Number() + } + + // NumberFieldOrder sorts fields by their field number. + NumberFieldOrder FieldOrder = func(x, y protoreflect.FieldDescriptor) bool { + return x.Number() < y.Number() + } + + // IndexNameFieldOrder sorts non-extension fields before extension fields. + // Non-extensions are sorted according to their declaration index. + // Extensions are sorted according to their full name. + IndexNameFieldOrder FieldOrder = func(x, y protoreflect.FieldDescriptor) bool { + // Non-extension fields sort before extension fields. + if x.IsExtension() != y.IsExtension() { + return !x.IsExtension() && y.IsExtension() + } + // Extensions sorted by fullname. + if x.IsExtension() && y.IsExtension() { + return x.FullName() < y.FullName() + } + // Non-extensions sorted by declaration index. + return x.Index() < y.Index() + } +) + +// KeyOrder specifies the ordering to visit map entries. +// It is a function that reports whether x is ordered before y. +type KeyOrder func(x, y protoreflect.MapKey) bool + +var ( + // AnyKeyOrder specifies no specific key ordering. + AnyKeyOrder KeyOrder = nil + + // GenericKeyOrder sorts false before true, numeric keys in ascending order, + // and strings in lexicographical ordering according to UTF-8 codepoints. + GenericKeyOrder KeyOrder = func(x, y protoreflect.MapKey) bool { + switch x.Interface().(type) { + case bool: + return !x.Bool() && y.Bool() + case int32, int64: + return x.Int() < y.Int() + case uint32, uint64: + return x.Uint() < y.Uint() + case string: + return x.String() < y.String() + default: + panic("invalid map key type") + } + } +) diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/order/range.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/order/range.go new file mode 100644 index 0000000..a1f0916 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/order/range.go @@ -0,0 +1,115 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package order provides ordered access to messages and maps. +package order + +import ( + "sort" + "sync" + + "google.golang.org/protobuf/reflect/protoreflect" +) + +type messageField struct { + fd protoreflect.FieldDescriptor + v protoreflect.Value +} + +var messageFieldPool = sync.Pool{ + New: func() any { return new([]messageField) }, +} + +type ( + // FieldRnger is an interface for visiting all fields in a message. + // The protoreflect.Message type implements this interface. + FieldRanger interface{ Range(VisitField) } + // VisitField is called every time a message field is visited. + VisitField = func(protoreflect.FieldDescriptor, protoreflect.Value) bool +) + +// RangeFields iterates over the fields of fs according to the specified order. +func RangeFields(fs FieldRanger, less FieldOrder, fn VisitField) { + if less == nil { + fs.Range(fn) + return + } + + // Obtain a pre-allocated scratch buffer. + p := messageFieldPool.Get().(*[]messageField) + fields := (*p)[:0] + defer func() { + if cap(fields) < 1024 { + *p = fields + messageFieldPool.Put(p) + } + }() + + // Collect all fields in the message and sort them. + fs.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + fields = append(fields, messageField{fd, v}) + return true + }) + sort.Slice(fields, func(i, j int) bool { + return less(fields[i].fd, fields[j].fd) + }) + + // Visit the fields in the specified ordering. + for _, f := range fields { + if !fn(f.fd, f.v) { + return + } + } +} + +type mapEntry struct { + k protoreflect.MapKey + v protoreflect.Value +} + +var mapEntryPool = sync.Pool{ + New: func() any { return new([]mapEntry) }, +} + +type ( + // EntryRanger is an interface for visiting all fields in a message. + // The protoreflect.Map type implements this interface. + EntryRanger interface{ Range(VisitEntry) } + // VisitEntry is called every time a map entry is visited. + VisitEntry = func(protoreflect.MapKey, protoreflect.Value) bool +) + +// RangeEntries iterates over the entries of es according to the specified order. +func RangeEntries(es EntryRanger, less KeyOrder, fn VisitEntry) { + if less == nil { + es.Range(fn) + return + } + + // Obtain a pre-allocated scratch buffer. + p := mapEntryPool.Get().(*[]mapEntry) + entries := (*p)[:0] + defer func() { + if cap(entries) < 1024 { + *p = entries + mapEntryPool.Put(p) + } + }() + + // Collect all entries in the map and sort them. + es.Range(func(k protoreflect.MapKey, v protoreflect.Value) bool { + entries = append(entries, mapEntry{k, v}) + return true + }) + sort.Slice(entries, func(i, j int) bool { + return less(entries[i].k, entries[j].k) + }) + + // Visit the entries in the specified ordering. + for _, e := range entries { + if !fn(e.k, e.v) { + return + } + } +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/pragma/pragma.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/pragma/pragma.go new file mode 100644 index 0000000..49dc4fc --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/pragma/pragma.go @@ -0,0 +1,29 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package pragma provides types that can be embedded into a struct to +// statically enforce or prevent certain language properties. +package pragma + +import "sync" + +// NoUnkeyedLiterals can be embedded in a struct to prevent unkeyed literals. +type NoUnkeyedLiterals struct{} + +// DoNotImplement can be embedded in an interface to prevent trivial +// implementations of the interface. +// +// This is useful to prevent unauthorized implementations of an interface +// so that it can be extended in the future for any protobuf language changes. +type DoNotImplement interface{ ProtoInternal(DoNotImplement) } + +// DoNotCompare can be embedded in a struct to prevent comparability. +type DoNotCompare [0]func() + +// DoNotCopy can be embedded in a struct to help prevent shallow copies. +// This does not rely on a Go language feature, but rather a special case +// within the vet checker. +// +// See https://golang.org/issues/8005. +type DoNotCopy [0]sync.Mutex diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/protolazy/bufferreader.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/protolazy/bufferreader.go new file mode 100644 index 0000000..82e5cab --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/protolazy/bufferreader.go @@ -0,0 +1,364 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Helper code for parsing a protocol buffer + +package protolazy + +import ( + "errors" + "fmt" + "io" + + "google.golang.org/protobuf/encoding/protowire" +) + +// BufferReader is a structure encapsulating a protobuf and a current position +type BufferReader struct { + Buf []byte + Pos int +} + +// NewBufferReader creates a new BufferRead from a protobuf +func NewBufferReader(buf []byte) BufferReader { + return BufferReader{Buf: buf, Pos: 0} +} + +var errOutOfBounds = errors.New("protobuf decoding: out of bounds") +var errOverflow = errors.New("proto: integer overflow") + +func (b *BufferReader) DecodeVarintSlow() (x uint64, err error) { + i := b.Pos + l := len(b.Buf) + + for shift := uint(0); shift < 64; shift += 7 { + if i >= l { + err = io.ErrUnexpectedEOF + return + } + v := b.Buf[i] + i++ + x |= (uint64(v) & 0x7F) << shift + if v < 0x80 { + b.Pos = i + return + } + } + + // The number is too large to represent in a 64-bit value. + err = errOverflow + return +} + +// decodeVarint decodes a varint at the current position +func (b *BufferReader) DecodeVarint() (x uint64, err error) { + i := b.Pos + buf := b.Buf + + if i >= len(buf) { + return 0, io.ErrUnexpectedEOF + } else if buf[i] < 0x80 { + b.Pos++ + return uint64(buf[i]), nil + } else if len(buf)-i < 10 { + return b.DecodeVarintSlow() + } + + var v uint64 + // we already checked the first byte + x = uint64(buf[i]) & 127 + i++ + + v = uint64(buf[i]) + i++ + x |= (v & 127) << 7 + if v < 128 { + goto done + } + + v = uint64(buf[i]) + i++ + x |= (v & 127) << 14 + if v < 128 { + goto done + } + + v = uint64(buf[i]) + i++ + x |= (v & 127) << 21 + if v < 128 { + goto done + } + + v = uint64(buf[i]) + i++ + x |= (v & 127) << 28 + if v < 128 { + goto done + } + + v = uint64(buf[i]) + i++ + x |= (v & 127) << 35 + if v < 128 { + goto done + } + + v = uint64(buf[i]) + i++ + x |= (v & 127) << 42 + if v < 128 { + goto done + } + + v = uint64(buf[i]) + i++ + x |= (v & 127) << 49 + if v < 128 { + goto done + } + + v = uint64(buf[i]) + i++ + x |= (v & 127) << 56 + if v < 128 { + goto done + } + + v = uint64(buf[i]) + i++ + x |= (v & 127) << 63 + if v < 128 { + goto done + } + + return 0, errOverflow + +done: + b.Pos = i + return +} + +// decodeVarint32 decodes a varint32 at the current position +func (b *BufferReader) DecodeVarint32() (x uint32, err error) { + i := b.Pos + buf := b.Buf + + if i >= len(buf) { + return 0, io.ErrUnexpectedEOF + } else if buf[i] < 0x80 { + b.Pos++ + return uint32(buf[i]), nil + } else if len(buf)-i < 5 { + v, err := b.DecodeVarintSlow() + return uint32(v), err + } + + var v uint32 + // we already checked the first byte + x = uint32(buf[i]) & 127 + i++ + + v = uint32(buf[i]) + i++ + x |= (v & 127) << 7 + if v < 128 { + goto done + } + + v = uint32(buf[i]) + i++ + x |= (v & 127) << 14 + if v < 128 { + goto done + } + + v = uint32(buf[i]) + i++ + x |= (v & 127) << 21 + if v < 128 { + goto done + } + + v = uint32(buf[i]) + i++ + x |= (v & 127) << 28 + if v < 128 { + goto done + } + + return 0, errOverflow + +done: + b.Pos = i + return +} + +// skipValue skips a value in the protobuf, based on the specified tag +func (b *BufferReader) SkipValue(tag uint32) (err error) { + wireType := tag & 0x7 + switch protowire.Type(wireType) { + case protowire.VarintType: + err = b.SkipVarint() + case protowire.Fixed64Type: + err = b.SkipFixed64() + case protowire.BytesType: + var n uint32 + n, err = b.DecodeVarint32() + if err == nil { + err = b.Skip(int(n)) + } + case protowire.StartGroupType: + err = b.SkipGroup(tag) + case protowire.Fixed32Type: + err = b.SkipFixed32() + default: + err = fmt.Errorf("Unexpected wire type (%d)", wireType) + } + return +} + +// skipGroup skips a group with the specified tag. It executes efficiently using a tag stack +func (b *BufferReader) SkipGroup(tag uint32) (err error) { + tagStack := make([]uint32, 0, 16) + tagStack = append(tagStack, tag) + var n uint32 + for len(tagStack) > 0 { + tag, err = b.DecodeVarint32() + if err != nil { + return err + } + switch protowire.Type(tag & 0x7) { + case protowire.VarintType: + err = b.SkipVarint() + case protowire.Fixed64Type: + err = b.Skip(8) + case protowire.BytesType: + n, err = b.DecodeVarint32() + if err == nil { + err = b.Skip(int(n)) + } + case protowire.StartGroupType: + tagStack = append(tagStack, tag) + case protowire.Fixed32Type: + err = b.SkipFixed32() + case protowire.EndGroupType: + if protoFieldNumber(tagStack[len(tagStack)-1]) == protoFieldNumber(tag) { + tagStack = tagStack[:len(tagStack)-1] + } else { + err = fmt.Errorf("end group tag %d does not match begin group tag %d at pos %d", + protoFieldNumber(tag), protoFieldNumber(tagStack[len(tagStack)-1]), b.Pos) + } + } + if err != nil { + return err + } + } + return nil +} + +// skipVarint effiently skips a varint +func (b *BufferReader) SkipVarint() (err error) { + i := b.Pos + + if len(b.Buf)-i < 10 { + // Use DecodeVarintSlow() to check for buffer overflow, but ignore result + if _, err := b.DecodeVarintSlow(); err != nil { + return err + } + return nil + } + + if b.Buf[i] < 0x80 { + goto out + } + i++ + + if b.Buf[i] < 0x80 { + goto out + } + i++ + + if b.Buf[i] < 0x80 { + goto out + } + i++ + + if b.Buf[i] < 0x80 { + goto out + } + i++ + + if b.Buf[i] < 0x80 { + goto out + } + i++ + + if b.Buf[i] < 0x80 { + goto out + } + i++ + + if b.Buf[i] < 0x80 { + goto out + } + i++ + + if b.Buf[i] < 0x80 { + goto out + } + i++ + + if b.Buf[i] < 0x80 { + goto out + } + i++ + + if b.Buf[i] < 0x80 { + goto out + } + return errOverflow + +out: + b.Pos = i + 1 + return nil +} + +// skip skips the specified number of bytes +func (b *BufferReader) Skip(n int) (err error) { + if len(b.Buf) < b.Pos+n { + return io.ErrUnexpectedEOF + } + b.Pos += n + return +} + +// skipFixed64 skips a fixed64 +func (b *BufferReader) SkipFixed64() (err error) { + return b.Skip(8) +} + +// skipFixed32 skips a fixed32 +func (b *BufferReader) SkipFixed32() (err error) { + return b.Skip(4) +} + +// skipBytes skips a set of bytes +func (b *BufferReader) SkipBytes() (err error) { + n, err := b.DecodeVarint32() + if err != nil { + return err + } + return b.Skip(int(n)) +} + +// Done returns whether we are at the end of the protobuf +func (b *BufferReader) Done() bool { + return b.Pos == len(b.Buf) +} + +// Remaining returns how many bytes remain +func (b *BufferReader) Remaining() int { + return len(b.Buf) - b.Pos +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/protolazy/lazy.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/protolazy/lazy.go new file mode 100644 index 0000000..ff4d483 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/protolazy/lazy.go @@ -0,0 +1,359 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package protolazy contains internal data structures for lazy message decoding. +package protolazy + +import ( + "fmt" + "sort" + + "google.golang.org/protobuf/encoding/protowire" + piface "google.golang.org/protobuf/runtime/protoiface" +) + +// IndexEntry is the structure for an index of the fields in a message of a +// proto (not descending to sub-messages) +type IndexEntry struct { + FieldNum uint32 + // first byte of this tag/field + Start uint32 + // first byte after a contiguous sequence of bytes for this tag/field, which could + // include a single encoding of the field, or multiple encodings for the field + End uint32 + // True if this protobuf segment includes multiple encodings of the field + MultipleContiguous bool +} + +// XXX_lazyUnmarshalInfo has information about a particular lazily decoded message +// +// Deprecated: Do not use. This will be deleted in the near future. +type XXX_lazyUnmarshalInfo struct { + // Index of fields and their positions in the protobuf for this + // message. Make index be a pointer to a slice so it can be updated + // atomically. The index pointer is only set once (lazily when/if + // the index is first needed), and must always be SET and LOADED + // ATOMICALLY. + index *[]IndexEntry + // The protobuf associated with this lazily decoded message. It is + // only set during proto.Unmarshal(). It doesn't need to be set and + // loaded atomically, since any simultaneous set (Unmarshal) and read + // (during a get) would already be a race in the app code. + Protobuf []byte + // The flags present when Unmarshal was originally called for this particular message + unmarshalFlags piface.UnmarshalInputFlags +} + +// The Buffer and SetBuffer methods let v2/internal/impl interact with +// XXX_lazyUnmarshalInfo via an interface, to avoid an import cycle. + +// Buffer returns the lazy unmarshal buffer. +// +// Deprecated: Do not use. This will be deleted in the near future. +func (lazy *XXX_lazyUnmarshalInfo) Buffer() []byte { + return lazy.Protobuf +} + +// SetBuffer sets the lazy unmarshal buffer. +// +// Deprecated: Do not use. This will be deleted in the near future. +func (lazy *XXX_lazyUnmarshalInfo) SetBuffer(b []byte) { + lazy.Protobuf = b +} + +// SetUnmarshalFlags is called to set a copy of the original unmarshalInputFlags. +// The flags should reflect how Unmarshal was called. +func (lazy *XXX_lazyUnmarshalInfo) SetUnmarshalFlags(f piface.UnmarshalInputFlags) { + lazy.unmarshalFlags = f +} + +// UnmarshalFlags returns the original unmarshalInputFlags. +func (lazy *XXX_lazyUnmarshalInfo) UnmarshalFlags() piface.UnmarshalInputFlags { + return lazy.unmarshalFlags +} + +// AllowedPartial returns true if the user originally unmarshalled this message with +// AllowPartial set to true +func (lazy *XXX_lazyUnmarshalInfo) AllowedPartial() bool { + return (lazy.unmarshalFlags & piface.UnmarshalCheckRequired) == 0 +} + +func protoFieldNumber(tag uint32) uint32 { + return tag >> 3 +} + +// buildIndex builds an index of the specified protobuf, return the index +// array and an error. +func buildIndex(buf []byte) ([]IndexEntry, error) { + index := make([]IndexEntry, 0, 16) + var lastProtoFieldNum uint32 + var outOfOrder bool + + var r BufferReader = NewBufferReader(buf) + + for !r.Done() { + var tag uint32 + var err error + var curPos = r.Pos + // INLINED: tag, err = r.DecodeVarint32() + { + i := r.Pos + buf := r.Buf + + if i >= len(buf) { + return nil, errOutOfBounds + } else if buf[i] < 0x80 { + r.Pos++ + tag = uint32(buf[i]) + } else if r.Remaining() < 5 { + var v uint64 + v, err = r.DecodeVarintSlow() + tag = uint32(v) + } else { + var v uint32 + // we already checked the first byte + tag = uint32(buf[i]) & 127 + i++ + + v = uint32(buf[i]) + i++ + tag |= (v & 127) << 7 + if v < 128 { + goto done + } + + v = uint32(buf[i]) + i++ + tag |= (v & 127) << 14 + if v < 128 { + goto done + } + + v = uint32(buf[i]) + i++ + tag |= (v & 127) << 21 + if v < 128 { + goto done + } + + v = uint32(buf[i]) + i++ + tag |= (v & 127) << 28 + if v < 128 { + goto done + } + + return nil, errOutOfBounds + + done: + r.Pos = i + } + } + // DONE: tag, err = r.DecodeVarint32() + + fieldNum := protoFieldNumber(tag) + if fieldNum < lastProtoFieldNum { + outOfOrder = true + } + + // Skip the current value -- will skip over an entire group as well. + // INLINED: err = r.SkipValue(tag) + wireType := tag & 0x7 + switch protowire.Type(wireType) { + case protowire.VarintType: + // INLINED: err = r.SkipVarint() + i := r.Pos + + if len(r.Buf)-i < 10 { + // Use DecodeVarintSlow() to skip while + // checking for buffer overflow, but ignore result + _, err = r.DecodeVarintSlow() + goto out2 + } + if r.Buf[i] < 0x80 { + goto out + } + i++ + + if r.Buf[i] < 0x80 { + goto out + } + i++ + + if r.Buf[i] < 0x80 { + goto out + } + i++ + + if r.Buf[i] < 0x80 { + goto out + } + i++ + + if r.Buf[i] < 0x80 { + goto out + } + i++ + + if r.Buf[i] < 0x80 { + goto out + } + i++ + + if r.Buf[i] < 0x80 { + goto out + } + i++ + + if r.Buf[i] < 0x80 { + goto out + } + i++ + + if r.Buf[i] < 0x80 { + goto out + } + i++ + + if r.Buf[i] < 0x80 { + goto out + } + return nil, errOverflow + out: + r.Pos = i + 1 + // DONE: err = r.SkipVarint() + case protowire.Fixed64Type: + err = r.SkipFixed64() + case protowire.BytesType: + var n uint32 + n, err = r.DecodeVarint32() + if err == nil { + err = r.Skip(int(n)) + } + case protowire.StartGroupType: + err = r.SkipGroup(tag) + case protowire.Fixed32Type: + err = r.SkipFixed32() + default: + err = fmt.Errorf("Unexpected wire type (%d)", wireType) + } + // DONE: err = r.SkipValue(tag) + + out2: + if err != nil { + return nil, err + } + if fieldNum != lastProtoFieldNum { + index = append(index, IndexEntry{FieldNum: fieldNum, + Start: uint32(curPos), + End: uint32(r.Pos)}, + ) + } else { + index[len(index)-1].End = uint32(r.Pos) + index[len(index)-1].MultipleContiguous = true + } + lastProtoFieldNum = fieldNum + } + if outOfOrder { + sort.Slice(index, func(i, j int) bool { + return index[i].FieldNum < index[j].FieldNum || + (index[i].FieldNum == index[j].FieldNum && + index[i].Start < index[j].Start) + }) + } + return index, nil +} + +func (lazy *XXX_lazyUnmarshalInfo) SizeField(num uint32) (size int) { + start, end, found, _, multipleEntries := lazy.FindFieldInProto(num) + if multipleEntries != nil { + for _, entry := range multipleEntries { + size += int(entry.End - entry.Start) + } + return size + } + if !found { + return 0 + } + return int(end - start) +} + +func (lazy *XXX_lazyUnmarshalInfo) AppendField(b []byte, num uint32) ([]byte, bool) { + start, end, found, _, multipleEntries := lazy.FindFieldInProto(num) + if multipleEntries != nil { + for _, entry := range multipleEntries { + b = append(b, lazy.Protobuf[entry.Start:entry.End]...) + } + return b, true + } + if !found { + return nil, false + } + b = append(b, lazy.Protobuf[start:end]...) + return b, true +} + +func (lazy *XXX_lazyUnmarshalInfo) SetIndex(index []IndexEntry) { + atomicStoreIndex(&lazy.index, &index) +} + +// FindFieldInProto looks for field fieldNum in lazyUnmarshalInfo information +// (including protobuf), returns startOffset/endOffset/found. +func (lazy *XXX_lazyUnmarshalInfo) FindFieldInProto(fieldNum uint32) (start, end uint32, found, multipleContiguous bool, multipleEntries []IndexEntry) { + if lazy.Protobuf == nil { + // There is no backing protobuf for this message -- it was made from a builder + return 0, 0, false, false, nil + } + index := atomicLoadIndex(&lazy.index) + if index == nil { + r, err := buildIndex(lazy.Protobuf) + if err != nil { + panic(fmt.Sprintf("findFieldInfo: error building index when looking for field %d: %v", fieldNum, err)) + } + // lazy.index is a pointer to the slice returned by BuildIndex + index = &r + atomicStoreIndex(&lazy.index, index) + } + return lookupField(index, fieldNum) +} + +// lookupField returns the offset at which the indicated field starts using +// the index, offset immediately after field ends (including all instances of +// a repeated field), and bools indicating if field was found and if there +// are multiple encodings of the field in the byte range. +// +// To hande the uncommon case where there are repeated encodings for the same +// field which are not consecutive in the protobuf (so we need to returns +// multiple start/end offsets), we also return a slice multipleEntries. If +// multipleEntries is non-nil, then multiple entries were found, and the +// values in the slice should be used, rather than start/end/found. +func lookupField(indexp *[]IndexEntry, fieldNum uint32) (start, end uint32, found bool, multipleContiguous bool, multipleEntries []IndexEntry) { + // The pointer indexp to the index was already loaded atomically. + // The slice is uniquely associated with the pointer, so it doesn't + // need to be loaded atomically. + index := *indexp + for i, entry := range index { + if fieldNum == entry.FieldNum { + if i < len(index)-1 && entry.FieldNum == index[i+1].FieldNum { + // Handle the uncommon case where there are + // repeated entries for the same field which + // are not contiguous in the protobuf. + multiple := make([]IndexEntry, 1, 2) + multiple[0] = IndexEntry{fieldNum, entry.Start, entry.End, entry.MultipleContiguous} + i++ + for i < len(index) && index[i].FieldNum == fieldNum { + multiple = append(multiple, IndexEntry{fieldNum, index[i].Start, index[i].End, index[i].MultipleContiguous}) + i++ + } + return 0, 0, false, false, multiple + + } + return entry.Start, entry.End, true, entry.MultipleContiguous, nil + } + if fieldNum < entry.FieldNum { + return 0, 0, false, false, nil + } + } + return 0, 0, false, false, nil +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/protolazy/pointer_unsafe.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/protolazy/pointer_unsafe.go new file mode 100644 index 0000000..dc2a64c --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/protolazy/pointer_unsafe.go @@ -0,0 +1,17 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protolazy + +import ( + "sync/atomic" + "unsafe" +) + +func atomicLoadIndex(p **[]IndexEntry) *[]IndexEntry { + return (*[]IndexEntry)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) +} +func atomicStoreIndex(p **[]IndexEntry, v *[]IndexEntry) { + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/set/ints.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/set/ints.go new file mode 100644 index 0000000..d3d7f89 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/set/ints.go @@ -0,0 +1,58 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package set provides simple set data structures for uint64s. +package set + +import "math/bits" + +// int64s represents a set of integers within the range of 0..63. +type int64s uint64 + +func (bs *int64s) Len() int { + return bits.OnesCount64(uint64(*bs)) +} +func (bs *int64s) Has(n uint64) bool { + return uint64(*bs)&(uint64(1)< 0 +} +func (bs *int64s) Set(n uint64) { + *(*uint64)(bs) |= uint64(1) << n +} +func (bs *int64s) Clear(n uint64) { + *(*uint64)(bs) &^= uint64(1) << n +} + +// Ints represents a set of integers within the range of 0..math.MaxUint64. +type Ints struct { + lo int64s + hi map[uint64]struct{} +} + +func (bs *Ints) Len() int { + return bs.lo.Len() + len(bs.hi) +} +func (bs *Ints) Has(n uint64) bool { + if n < 64 { + return bs.lo.Has(n) + } + _, ok := bs.hi[n] + return ok +} +func (bs *Ints) Set(n uint64) { + if n < 64 { + bs.lo.Set(n) + return + } + if bs.hi == nil { + bs.hi = make(map[uint64]struct{}) + } + bs.hi[n] = struct{}{} +} +func (bs *Ints) Clear(n uint64) { + if n < 64 { + bs.lo.Clear(n) + return + } + delete(bs.hi, n) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/strs/strings.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/strs/strings.go new file mode 100644 index 0000000..a6e7df2 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/strs/strings.go @@ -0,0 +1,196 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package strs provides string manipulation functionality specific to protobuf. +package strs + +import ( + "go/token" + "strings" + "unicode" + "unicode/utf8" + + "google.golang.org/protobuf/internal/flags" + "google.golang.org/protobuf/reflect/protoreflect" +) + +// EnforceUTF8 reports whether to enforce strict UTF-8 validation. +func EnforceUTF8(fd protoreflect.FieldDescriptor) bool { + if flags.ProtoLegacy || fd.Syntax() == protoreflect.Editions { + if fd, ok := fd.(interface{ EnforceUTF8() bool }); ok { + return fd.EnforceUTF8() + } + } + return fd.Syntax() == protoreflect.Proto3 +} + +// GoCamelCase camel-cases a protobuf name for use as a Go identifier. +// +// If there is an interior underscore followed by a lower case letter, +// drop the underscore and convert the letter to upper case. +func GoCamelCase(s string) string { + // Invariant: if the next letter is lower case, it must be converted + // to upper case. + // That is, we process a word at a time, where words are marked by _ or + // upper case letter. Digits are treated as words. + var b []byte + for i := 0; i < len(s); i++ { + c := s[i] + switch { + case c == '.' && i+1 < len(s) && isASCIILower(s[i+1]): + // Skip over '.' in ".{{lowercase}}". + case c == '.': + b = append(b, '_') // convert '.' to '_' + case c == '_' && (i == 0 || s[i-1] == '.'): + // Convert initial '_' to ensure we start with a capital letter. + // Do the same for '_' after '.' to match historic behavior. + b = append(b, 'X') // convert '_' to 'X' + case c == '_' && i+1 < len(s) && isASCIILower(s[i+1]): + // Skip over '_' in "_{{lowercase}}". + case isASCIIDigit(c): + b = append(b, c) + default: + // Assume we have a letter now - if not, it's a bogus identifier. + // The next word is a sequence of characters that must start upper case. + if isASCIILower(c) { + c -= 'a' - 'A' // convert lowercase to uppercase + } + b = append(b, c) + + // Accept lower case sequence that follows. + for ; i+1 < len(s) && isASCIILower(s[i+1]); i++ { + b = append(b, s[i+1]) + } + } + } + return string(b) +} + +// GoSanitized converts a string to a valid Go identifier. +func GoSanitized(s string) string { + // Sanitize the input to the set of valid characters, + // which must be '_' or be in the Unicode L or N categories. + s = strings.Map(func(r rune) rune { + if unicode.IsLetter(r) || unicode.IsDigit(r) { + return r + } + return '_' + }, s) + + // Prepend '_' in the event of a Go keyword conflict or if + // the identifier is invalid (does not start in the Unicode L category). + r, _ := utf8.DecodeRuneInString(s) + if token.Lookup(s).IsKeyword() || !unicode.IsLetter(r) { + return "_" + s + } + return s +} + +// JSONCamelCase converts a snake_case identifier to a camelCase identifier, +// according to the protobuf JSON specification. +func JSONCamelCase(s string) string { + var b []byte + var wasUnderscore bool + for i := 0; i < len(s); i++ { // proto identifiers are always ASCII + c := s[i] + if c != '_' { + if wasUnderscore && isASCIILower(c) { + c -= 'a' - 'A' // convert to uppercase + } + b = append(b, c) + } + wasUnderscore = c == '_' + } + return string(b) +} + +// JSONSnakeCase converts a camelCase identifier to a snake_case identifier, +// according to the protobuf JSON specification. +func JSONSnakeCase(s string) string { + var b []byte + for i := 0; i < len(s); i++ { // proto identifiers are always ASCII + c := s[i] + if isASCIIUpper(c) { + b = append(b, '_') + c += 'a' - 'A' // convert to lowercase + } + b = append(b, c) + } + return string(b) +} + +// MapEntryName derives the name of the map entry message given the field name. +// See protoc v3.8.0: src/google/protobuf/descriptor.cc:254-276,6057 +func MapEntryName(s string) string { + var b []byte + upperNext := true + for _, c := range s { + switch { + case c == '_': + upperNext = true + case upperNext: + b = append(b, byte(unicode.ToUpper(c))) + upperNext = false + default: + b = append(b, byte(c)) + } + } + b = append(b, "Entry"...) + return string(b) +} + +// EnumValueName derives the camel-cased enum value name. +// See protoc v3.8.0: src/google/protobuf/descriptor.cc:297-313 +func EnumValueName(s string) string { + var b []byte + upperNext := true + for _, c := range s { + switch { + case c == '_': + upperNext = true + case upperNext: + b = append(b, byte(unicode.ToUpper(c))) + upperNext = false + default: + b = append(b, byte(unicode.ToLower(c))) + upperNext = false + } + } + return string(b) +} + +// TrimEnumPrefix trims the enum name prefix from an enum value name, +// where the prefix is all lowercase without underscores. +// See protoc v3.8.0: src/google/protobuf/descriptor.cc:330-375 +func TrimEnumPrefix(s, prefix string) string { + s0 := s // original input + for len(s) > 0 && len(prefix) > 0 { + if s[0] == '_' { + s = s[1:] + continue + } + if unicode.ToLower(rune(s[0])) != rune(prefix[0]) { + return s0 // no prefix match + } + s, prefix = s[1:], prefix[1:] + } + if len(prefix) > 0 { + return s0 // no prefix match + } + s = strings.TrimLeft(s, "_") + if len(s) == 0 { + return s0 // avoid returning empty string + } + return s +} + +func isASCIILower(c byte) bool { + return 'a' <= c && c <= 'z' +} +func isASCIIUpper(c byte) bool { + return 'A' <= c && c <= 'Z' +} +func isASCIIDigit(c byte) bool { + return '0' <= c && c <= '9' +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go new file mode 100644 index 0000000..42dd6f7 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go @@ -0,0 +1,71 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package strs + +import ( + "unsafe" + + "google.golang.org/protobuf/reflect/protoreflect" +) + +// UnsafeString returns an unsafe string reference of b. +// The caller must treat the input slice as immutable. +// +// WARNING: Use carefully. The returned result must not leak to the end user +// unless the input slice is provably immutable. +func UnsafeString(b []byte) string { + return unsafe.String(unsafe.SliceData(b), len(b)) +} + +// UnsafeBytes returns an unsafe bytes slice reference of s. +// The caller must treat returned slice as immutable. +// +// WARNING: Use carefully. The returned result must not leak to the end user. +func UnsafeBytes(s string) []byte { + return unsafe.Slice(unsafe.StringData(s), len(s)) +} + +// Builder builds a set of strings with shared lifetime. +// This differs from strings.Builder, which is for building a single string. +type Builder struct { + buf []byte +} + +// AppendFullName is equivalent to protoreflect.FullName.Append, +// but optimized for large batches where each name has a shared lifetime. +func (sb *Builder) AppendFullName(prefix protoreflect.FullName, name protoreflect.Name) protoreflect.FullName { + n := len(prefix) + len(".") + len(name) + if len(prefix) == 0 { + n -= len(".") + } + sb.grow(n) + sb.buf = append(sb.buf, prefix...) + sb.buf = append(sb.buf, '.') + sb.buf = append(sb.buf, name...) + return protoreflect.FullName(sb.last(n)) +} + +// MakeString is equivalent to string(b), but optimized for large batches +// with a shared lifetime. +func (sb *Builder) MakeString(b []byte) string { + sb.grow(len(b)) + sb.buf = append(sb.buf, b...) + return sb.last(len(b)) +} + +func (sb *Builder) grow(n int) { + if cap(sb.buf)-len(sb.buf) >= n { + return + } + + // Unlike strings.Builder, we do not need to copy over the contents + // of the old buffer since our builder provides no API for + // retrieving previously created strings. + sb.buf = make([]byte, 0, 2*(cap(sb.buf)+n)) +} + +func (sb *Builder) last(n int) string { + return UnsafeString(sb.buf[len(sb.buf)-n:]) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/version/version.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/version/version.go new file mode 100644 index 0000000..697d1c1 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/internal/version/version.go @@ -0,0 +1,79 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package version records versioning information about this module. +package version + +import ( + "fmt" + "strings" +) + +// These constants determine the current version of this module. +// +// For our release process, we enforce the following rules: +// - Tagged releases use a tag that is identical to String. +// - Tagged releases never reference a commit where the String +// contains "devel". +// - The set of all commits in this repository where String +// does not contain "devel" must have a unique String. +// +// Steps for tagging a new release: +// +// 1. Create a new CL. +// +// 2. Update Minor, Patch, and/or PreRelease as necessary. +// PreRelease must not contain the string "devel". +// +// 3. Since the last released minor version, have there been any changes to +// generator that relies on new functionality in the runtime? +// If yes, then increment RequiredGenerated. +// +// 4. Since the last released minor version, have there been any changes to +// the runtime that removes support for old .pb.go source code? +// If yes, then increment SupportMinimum. +// +// 5. Send out the CL for review and submit it. +// Note that the next CL in step 8 must be submitted after this CL +// without any other CLs in-between. +// +// 6. Tag a new version, where the tag is is the current String. +// +// 7. Write release notes for all notable changes +// between this release and the last release. +// +// 8. Create a new CL. +// +// 9. Update PreRelease to include the string "devel". +// For example: "" -> "devel" or "rc.1" -> "rc.1.devel" +// +// 10. Send out the CL for review and submit it. +const ( + Major = 1 + Minor = 36 + Patch = 8 + PreRelease = "" +) + +// String formats the version string for this module in semver format. +// +// Examples: +// +// v1.20.1 +// v1.21.0-rc.1 +func String() string { + v := fmt.Sprintf("v%d.%d.%d", Major, Minor, Patch) + if PreRelease != "" { + v += "-" + PreRelease + + // TODO: Add metadata about the commit or build hash. + // See https://golang.org/issue/29814 + // See https://golang.org/issue/33533 + var metadata string + if strings.Contains(PreRelease, "devel") && metadata != "" { + v += "+" + metadata + } + } + return v +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/checkinit.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/checkinit.go new file mode 100644 index 0000000..3e9a6a2 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/checkinit.go @@ -0,0 +1,71 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" +) + +// CheckInitialized returns an error if any required fields in m are not set. +func CheckInitialized(m Message) error { + // Treat a nil message interface as an "untyped" empty message, + // which we assume to have no required fields. + if m == nil { + return nil + } + + return checkInitialized(m.ProtoReflect()) +} + +// CheckInitialized returns an error if any required fields in m are not set. +func checkInitialized(m protoreflect.Message) error { + if methods := protoMethods(m); methods != nil && methods.CheckInitialized != nil { + _, err := methods.CheckInitialized(protoiface.CheckInitializedInput{ + Message: m, + }) + return err + } + return checkInitializedSlow(m) +} + +func checkInitializedSlow(m protoreflect.Message) error { + md := m.Descriptor() + fds := md.Fields() + for i, nums := 0, md.RequiredNumbers(); i < nums.Len(); i++ { + fd := fds.ByNumber(nums.Get(i)) + if !m.Has(fd) { + return errors.RequiredNotSet(string(fd.FullName())) + } + } + var err error + m.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + switch { + case fd.IsList(): + if fd.Message() == nil { + return true + } + for i, list := 0, v.List(); i < list.Len() && err == nil; i++ { + err = checkInitialized(list.Get(i).Message()) + } + case fd.IsMap(): + if fd.MapValue().Message() == nil { + return true + } + v.Map().Range(func(key protoreflect.MapKey, v protoreflect.Value) bool { + err = checkInitialized(v.Message()) + return err == nil + }) + default: + if fd.Message() == nil { + return true + } + err = checkInitialized(v.Message()) + } + return err == nil + }) + return err +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/decode.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/decode.go new file mode 100644 index 0000000..4cbf1ae --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/decode.go @@ -0,0 +1,307 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/encoding/messageset" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/genid" + "google.golang.org/protobuf/internal/pragma" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" + "google.golang.org/protobuf/runtime/protoiface" +) + +// UnmarshalOptions configures the unmarshaler. +// +// Example usage: +// +// err := UnmarshalOptions{DiscardUnknown: true}.Unmarshal(b, m) +type UnmarshalOptions struct { + pragma.NoUnkeyedLiterals + + // Merge merges the input into the destination message. + // The default behavior is to always reset the message before unmarshaling, + // unless Merge is specified. + Merge bool + + // AllowPartial accepts input for messages that will result in missing + // required fields. If AllowPartial is false (the default), Unmarshal will + // return an error if there are any missing required fields. + AllowPartial bool + + // If DiscardUnknown is set, unknown fields are ignored. + DiscardUnknown bool + + // Resolver is used for looking up types when unmarshaling extension fields. + // If nil, this defaults to using protoregistry.GlobalTypes. + Resolver interface { + FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) + FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) + } + + // RecursionLimit limits how deeply messages may be nested. + // If zero, a default limit is applied. + RecursionLimit int + + // + // NoLazyDecoding turns off lazy decoding, which otherwise is enabled by + // default. Lazy decoding only affects submessages (annotated with [lazy = + // true] in the .proto file) within messages that use the Opaque API. + NoLazyDecoding bool +} + +// Unmarshal parses the wire-format message in b and places the result in m. +// The provided message must be mutable (e.g., a non-nil pointer to a message). +// +// See the [UnmarshalOptions] type if you need more control. +func Unmarshal(b []byte, m Message) error { + _, err := UnmarshalOptions{RecursionLimit: protowire.DefaultRecursionLimit}.unmarshal(b, m.ProtoReflect()) + return err +} + +// Unmarshal parses the wire-format message in b and places the result in m. +// The provided message must be mutable (e.g., a non-nil pointer to a message). +func (o UnmarshalOptions) Unmarshal(b []byte, m Message) error { + if o.RecursionLimit == 0 { + o.RecursionLimit = protowire.DefaultRecursionLimit + } + _, err := o.unmarshal(b, m.ProtoReflect()) + return err +} + +// UnmarshalState parses a wire-format message and places the result in m. +// +// This method permits fine-grained control over the unmarshaler. +// Most users should use [Unmarshal] instead. +func (o UnmarshalOptions) UnmarshalState(in protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + if o.RecursionLimit == 0 { + o.RecursionLimit = protowire.DefaultRecursionLimit + } + return o.unmarshal(in.Buf, in.Message) +} + +// unmarshal is a centralized function that all unmarshal operations go through. +// For profiling purposes, avoid changing the name of this function or +// introducing other code paths for unmarshal that do not go through this. +func (o UnmarshalOptions) unmarshal(b []byte, m protoreflect.Message) (out protoiface.UnmarshalOutput, err error) { + if o.Resolver == nil { + o.Resolver = protoregistry.GlobalTypes + } + if !o.Merge { + Reset(m.Interface()) + } + allowPartial := o.AllowPartial + o.Merge = true + o.AllowPartial = true + methods := protoMethods(m) + if methods != nil && methods.Unmarshal != nil && + !(o.DiscardUnknown && methods.Flags&protoiface.SupportUnmarshalDiscardUnknown == 0) { + in := protoiface.UnmarshalInput{ + Message: m, + Buf: b, + Resolver: o.Resolver, + Depth: o.RecursionLimit, + } + if o.DiscardUnknown { + in.Flags |= protoiface.UnmarshalDiscardUnknown + } + + if !allowPartial { + // This does not affect how current unmarshal functions work, it just allows them + // to record this for lazy the decoding case. + in.Flags |= protoiface.UnmarshalCheckRequired + } + if o.NoLazyDecoding { + in.Flags |= protoiface.UnmarshalNoLazyDecoding + } + + out, err = methods.Unmarshal(in) + } else { + o.RecursionLimit-- + if o.RecursionLimit < 0 { + return out, errors.New("exceeded max recursion depth") + } + err = o.unmarshalMessageSlow(b, m) + } + if err != nil { + return out, err + } + if allowPartial || (out.Flags&protoiface.UnmarshalInitialized != 0) { + return out, nil + } + return out, checkInitialized(m) +} + +func (o UnmarshalOptions) unmarshalMessage(b []byte, m protoreflect.Message) error { + _, err := o.unmarshal(b, m) + return err +} + +func (o UnmarshalOptions) unmarshalMessageSlow(b []byte, m protoreflect.Message) error { + md := m.Descriptor() + if messageset.IsMessageSet(md) { + return o.unmarshalMessageSet(b, m) + } + fields := md.Fields() + for len(b) > 0 { + // Parse the tag (field number and wire type). + num, wtyp, tagLen := protowire.ConsumeTag(b) + if tagLen < 0 { + return errDecode + } + if num > protowire.MaxValidNumber { + return errDecode + } + + // Find the field descriptor for this field number. + fd := fields.ByNumber(num) + if fd == nil && md.ExtensionRanges().Has(num) { + extType, err := o.Resolver.FindExtensionByNumber(md.FullName(), num) + if err != nil && err != protoregistry.NotFound { + return errors.New("%v: unable to resolve extension %v: %v", md.FullName(), num, err) + } + if extType != nil { + fd = extType.TypeDescriptor() + } + } + var err error + if fd == nil { + err = errUnknown + } + + // Parse the field value. + var valLen int + switch { + case err != nil: + case fd.IsList(): + valLen, err = o.unmarshalList(b[tagLen:], wtyp, m.Mutable(fd).List(), fd) + case fd.IsMap(): + valLen, err = o.unmarshalMap(b[tagLen:], wtyp, m.Mutable(fd).Map(), fd) + default: + valLen, err = o.unmarshalSingular(b[tagLen:], wtyp, m, fd) + } + if err != nil { + if err != errUnknown { + return err + } + valLen = protowire.ConsumeFieldValue(num, wtyp, b[tagLen:]) + if valLen < 0 { + return errDecode + } + if !o.DiscardUnknown { + m.SetUnknown(append(m.GetUnknown(), b[:tagLen+valLen]...)) + } + } + b = b[tagLen+valLen:] + } + return nil +} + +func (o UnmarshalOptions) unmarshalSingular(b []byte, wtyp protowire.Type, m protoreflect.Message, fd protoreflect.FieldDescriptor) (n int, err error) { + v, n, err := o.unmarshalScalar(b, wtyp, fd) + if err != nil { + return 0, err + } + switch fd.Kind() { + case protoreflect.GroupKind, protoreflect.MessageKind: + m2 := m.Mutable(fd).Message() + if err := o.unmarshalMessage(v.Bytes(), m2); err != nil { + return n, err + } + default: + // Non-message scalars replace the previous value. + m.Set(fd, v) + } + return n, nil +} + +func (o UnmarshalOptions) unmarshalMap(b []byte, wtyp protowire.Type, mapv protoreflect.Map, fd protoreflect.FieldDescriptor) (n int, err error) { + if wtyp != protowire.BytesType { + return 0, errUnknown + } + b, n = protowire.ConsumeBytes(b) + if n < 0 { + return 0, errDecode + } + var ( + keyField = fd.MapKey() + valField = fd.MapValue() + key protoreflect.Value + val protoreflect.Value + haveKey bool + haveVal bool + ) + switch valField.Kind() { + case protoreflect.GroupKind, protoreflect.MessageKind: + val = mapv.NewValue() + } + // Map entries are represented as a two-element message with fields + // containing the key and value. + for len(b) > 0 { + num, wtyp, n := protowire.ConsumeTag(b) + if n < 0 { + return 0, errDecode + } + if num > protowire.MaxValidNumber { + return 0, errDecode + } + b = b[n:] + err = errUnknown + switch num { + case genid.MapEntry_Key_field_number: + key, n, err = o.unmarshalScalar(b, wtyp, keyField) + if err != nil { + break + } + haveKey = true + case genid.MapEntry_Value_field_number: + var v protoreflect.Value + v, n, err = o.unmarshalScalar(b, wtyp, valField) + if err != nil { + break + } + switch valField.Kind() { + case protoreflect.GroupKind, protoreflect.MessageKind: + if err := o.unmarshalMessage(v.Bytes(), val.Message()); err != nil { + return 0, err + } + default: + val = v + } + haveVal = true + } + if err == errUnknown { + n = protowire.ConsumeFieldValue(num, wtyp, b) + if n < 0 { + return 0, errDecode + } + } else if err != nil { + return 0, err + } + b = b[n:] + } + // Every map entry should have entries for key and value, but this is not strictly required. + if !haveKey { + key = keyField.Default() + } + if !haveVal { + switch valField.Kind() { + case protoreflect.GroupKind, protoreflect.MessageKind: + default: + val = valField.Default() + } + } + mapv.Set(key.MapKey(), val) + return n, nil +} + +// errUnknown is used internally to indicate fields which should be added +// to the unknown field set of a message. It is never returned from an exported +// function. +var errUnknown = errors.New("BUG: internal error (unknown)") + +var errDecode = errors.New("cannot parse invalid wire-format data") diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/decode_gen.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/decode_gen.go new file mode 100644 index 0000000..301eeb2 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/decode_gen.go @@ -0,0 +1,603 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-types. DO NOT EDIT. + +package proto + +import ( + "math" + "unicode/utf8" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/strs" + "google.golang.org/protobuf/reflect/protoreflect" +) + +// unmarshalScalar decodes a value of the given kind. +// +// Message values are decoded into a []byte which aliases the input data. +func (o UnmarshalOptions) unmarshalScalar(b []byte, wtyp protowire.Type, fd protoreflect.FieldDescriptor) (val protoreflect.Value, n int, err error) { + switch fd.Kind() { + case protoreflect.BoolKind: + if wtyp != protowire.VarintType { + return val, 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return val, 0, errDecode + } + return protoreflect.ValueOfBool(protowire.DecodeBool(v)), n, nil + case protoreflect.EnumKind: + if wtyp != protowire.VarintType { + return val, 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return val, 0, errDecode + } + return protoreflect.ValueOfEnum(protoreflect.EnumNumber(v)), n, nil + case protoreflect.Int32Kind: + if wtyp != protowire.VarintType { + return val, 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return val, 0, errDecode + } + return protoreflect.ValueOfInt32(int32(v)), n, nil + case protoreflect.Sint32Kind: + if wtyp != protowire.VarintType { + return val, 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return val, 0, errDecode + } + return protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32))), n, nil + case protoreflect.Uint32Kind: + if wtyp != protowire.VarintType { + return val, 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return val, 0, errDecode + } + return protoreflect.ValueOfUint32(uint32(v)), n, nil + case protoreflect.Int64Kind: + if wtyp != protowire.VarintType { + return val, 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return val, 0, errDecode + } + return protoreflect.ValueOfInt64(int64(v)), n, nil + case protoreflect.Sint64Kind: + if wtyp != protowire.VarintType { + return val, 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return val, 0, errDecode + } + return protoreflect.ValueOfInt64(protowire.DecodeZigZag(v)), n, nil + case protoreflect.Uint64Kind: + if wtyp != protowire.VarintType { + return val, 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return val, 0, errDecode + } + return protoreflect.ValueOfUint64(v), n, nil + case protoreflect.Sfixed32Kind: + if wtyp != protowire.Fixed32Type { + return val, 0, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return val, 0, errDecode + } + return protoreflect.ValueOfInt32(int32(v)), n, nil + case protoreflect.Fixed32Kind: + if wtyp != protowire.Fixed32Type { + return val, 0, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return val, 0, errDecode + } + return protoreflect.ValueOfUint32(uint32(v)), n, nil + case protoreflect.FloatKind: + if wtyp != protowire.Fixed32Type { + return val, 0, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return val, 0, errDecode + } + return protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v))), n, nil + case protoreflect.Sfixed64Kind: + if wtyp != protowire.Fixed64Type { + return val, 0, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return val, 0, errDecode + } + return protoreflect.ValueOfInt64(int64(v)), n, nil + case protoreflect.Fixed64Kind: + if wtyp != protowire.Fixed64Type { + return val, 0, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return val, 0, errDecode + } + return protoreflect.ValueOfUint64(v), n, nil + case protoreflect.DoubleKind: + if wtyp != protowire.Fixed64Type { + return val, 0, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return val, 0, errDecode + } + return protoreflect.ValueOfFloat64(math.Float64frombits(v)), n, nil + case protoreflect.StringKind: + if wtyp != protowire.BytesType { + return val, 0, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return val, 0, errDecode + } + if strs.EnforceUTF8(fd) && !utf8.Valid(v) { + return protoreflect.Value{}, 0, errors.InvalidUTF8(string(fd.FullName())) + } + return protoreflect.ValueOfString(string(v)), n, nil + case protoreflect.BytesKind: + if wtyp != protowire.BytesType { + return val, 0, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return val, 0, errDecode + } + return protoreflect.ValueOfBytes(append(emptyBuf[:], v...)), n, nil + case protoreflect.MessageKind: + if wtyp != protowire.BytesType { + return val, 0, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return val, 0, errDecode + } + return protoreflect.ValueOfBytes(v), n, nil + case protoreflect.GroupKind: + if wtyp != protowire.StartGroupType { + return val, 0, errUnknown + } + v, n := protowire.ConsumeGroup(fd.Number(), b) + if n < 0 { + return val, 0, errDecode + } + return protoreflect.ValueOfBytes(v), n, nil + default: + return val, 0, errUnknown + } +} + +func (o UnmarshalOptions) unmarshalList(b []byte, wtyp protowire.Type, list protoreflect.List, fd protoreflect.FieldDescriptor) (n int, err error) { + switch fd.Kind() { + case protoreflect.BoolKind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, errDecode + } + for len(buf) > 0 { + v, n := protowire.ConsumeVarint(buf) + if n < 0 { + return 0, errDecode + } + buf = buf[n:] + list.Append(protoreflect.ValueOfBool(protowire.DecodeBool(v))) + } + return n, nil + } + if wtyp != protowire.VarintType { + return 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return 0, errDecode + } + list.Append(protoreflect.ValueOfBool(protowire.DecodeBool(v))) + return n, nil + case protoreflect.EnumKind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, errDecode + } + for len(buf) > 0 { + v, n := protowire.ConsumeVarint(buf) + if n < 0 { + return 0, errDecode + } + buf = buf[n:] + list.Append(protoreflect.ValueOfEnum(protoreflect.EnumNumber(v))) + } + return n, nil + } + if wtyp != protowire.VarintType { + return 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return 0, errDecode + } + list.Append(protoreflect.ValueOfEnum(protoreflect.EnumNumber(v))) + return n, nil + case protoreflect.Int32Kind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, errDecode + } + for len(buf) > 0 { + v, n := protowire.ConsumeVarint(buf) + if n < 0 { + return 0, errDecode + } + buf = buf[n:] + list.Append(protoreflect.ValueOfInt32(int32(v))) + } + return n, nil + } + if wtyp != protowire.VarintType { + return 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return 0, errDecode + } + list.Append(protoreflect.ValueOfInt32(int32(v))) + return n, nil + case protoreflect.Sint32Kind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, errDecode + } + for len(buf) > 0 { + v, n := protowire.ConsumeVarint(buf) + if n < 0 { + return 0, errDecode + } + buf = buf[n:] + list.Append(protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32)))) + } + return n, nil + } + if wtyp != protowire.VarintType { + return 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return 0, errDecode + } + list.Append(protoreflect.ValueOfInt32(int32(protowire.DecodeZigZag(v & math.MaxUint32)))) + return n, nil + case protoreflect.Uint32Kind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, errDecode + } + for len(buf) > 0 { + v, n := protowire.ConsumeVarint(buf) + if n < 0 { + return 0, errDecode + } + buf = buf[n:] + list.Append(protoreflect.ValueOfUint32(uint32(v))) + } + return n, nil + } + if wtyp != protowire.VarintType { + return 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return 0, errDecode + } + list.Append(protoreflect.ValueOfUint32(uint32(v))) + return n, nil + case protoreflect.Int64Kind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, errDecode + } + for len(buf) > 0 { + v, n := protowire.ConsumeVarint(buf) + if n < 0 { + return 0, errDecode + } + buf = buf[n:] + list.Append(protoreflect.ValueOfInt64(int64(v))) + } + return n, nil + } + if wtyp != protowire.VarintType { + return 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return 0, errDecode + } + list.Append(protoreflect.ValueOfInt64(int64(v))) + return n, nil + case protoreflect.Sint64Kind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, errDecode + } + for len(buf) > 0 { + v, n := protowire.ConsumeVarint(buf) + if n < 0 { + return 0, errDecode + } + buf = buf[n:] + list.Append(protoreflect.ValueOfInt64(protowire.DecodeZigZag(v))) + } + return n, nil + } + if wtyp != protowire.VarintType { + return 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return 0, errDecode + } + list.Append(protoreflect.ValueOfInt64(protowire.DecodeZigZag(v))) + return n, nil + case protoreflect.Uint64Kind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, errDecode + } + for len(buf) > 0 { + v, n := protowire.ConsumeVarint(buf) + if n < 0 { + return 0, errDecode + } + buf = buf[n:] + list.Append(protoreflect.ValueOfUint64(v)) + } + return n, nil + } + if wtyp != protowire.VarintType { + return 0, errUnknown + } + v, n := protowire.ConsumeVarint(b) + if n < 0 { + return 0, errDecode + } + list.Append(protoreflect.ValueOfUint64(v)) + return n, nil + case protoreflect.Sfixed32Kind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, errDecode + } + for len(buf) > 0 { + v, n := protowire.ConsumeFixed32(buf) + if n < 0 { + return 0, errDecode + } + buf = buf[n:] + list.Append(protoreflect.ValueOfInt32(int32(v))) + } + return n, nil + } + if wtyp != protowire.Fixed32Type { + return 0, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return 0, errDecode + } + list.Append(protoreflect.ValueOfInt32(int32(v))) + return n, nil + case protoreflect.Fixed32Kind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, errDecode + } + for len(buf) > 0 { + v, n := protowire.ConsumeFixed32(buf) + if n < 0 { + return 0, errDecode + } + buf = buf[n:] + list.Append(protoreflect.ValueOfUint32(uint32(v))) + } + return n, nil + } + if wtyp != protowire.Fixed32Type { + return 0, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return 0, errDecode + } + list.Append(protoreflect.ValueOfUint32(uint32(v))) + return n, nil + case protoreflect.FloatKind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, errDecode + } + for len(buf) > 0 { + v, n := protowire.ConsumeFixed32(buf) + if n < 0 { + return 0, errDecode + } + buf = buf[n:] + list.Append(protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v)))) + } + return n, nil + } + if wtyp != protowire.Fixed32Type { + return 0, errUnknown + } + v, n := protowire.ConsumeFixed32(b) + if n < 0 { + return 0, errDecode + } + list.Append(protoreflect.ValueOfFloat32(math.Float32frombits(uint32(v)))) + return n, nil + case protoreflect.Sfixed64Kind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, errDecode + } + for len(buf) > 0 { + v, n := protowire.ConsumeFixed64(buf) + if n < 0 { + return 0, errDecode + } + buf = buf[n:] + list.Append(protoreflect.ValueOfInt64(int64(v))) + } + return n, nil + } + if wtyp != protowire.Fixed64Type { + return 0, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return 0, errDecode + } + list.Append(protoreflect.ValueOfInt64(int64(v))) + return n, nil + case protoreflect.Fixed64Kind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, errDecode + } + for len(buf) > 0 { + v, n := protowire.ConsumeFixed64(buf) + if n < 0 { + return 0, errDecode + } + buf = buf[n:] + list.Append(protoreflect.ValueOfUint64(v)) + } + return n, nil + } + if wtyp != protowire.Fixed64Type { + return 0, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return 0, errDecode + } + list.Append(protoreflect.ValueOfUint64(v)) + return n, nil + case protoreflect.DoubleKind: + if wtyp == protowire.BytesType { + buf, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, errDecode + } + for len(buf) > 0 { + v, n := protowire.ConsumeFixed64(buf) + if n < 0 { + return 0, errDecode + } + buf = buf[n:] + list.Append(protoreflect.ValueOfFloat64(math.Float64frombits(v))) + } + return n, nil + } + if wtyp != protowire.Fixed64Type { + return 0, errUnknown + } + v, n := protowire.ConsumeFixed64(b) + if n < 0 { + return 0, errDecode + } + list.Append(protoreflect.ValueOfFloat64(math.Float64frombits(v))) + return n, nil + case protoreflect.StringKind: + if wtyp != protowire.BytesType { + return 0, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, errDecode + } + if strs.EnforceUTF8(fd) && !utf8.Valid(v) { + return 0, errors.InvalidUTF8(string(fd.FullName())) + } + list.Append(protoreflect.ValueOfString(string(v))) + return n, nil + case protoreflect.BytesKind: + if wtyp != protowire.BytesType { + return 0, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, errDecode + } + list.Append(protoreflect.ValueOfBytes(append(emptyBuf[:], v...))) + return n, nil + case protoreflect.MessageKind: + if wtyp != protowire.BytesType { + return 0, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return 0, errDecode + } + m := list.NewElement() + if err := o.unmarshalMessage(v, m.Message()); err != nil { + return 0, err + } + list.Append(m) + return n, nil + case protoreflect.GroupKind: + if wtyp != protowire.StartGroupType { + return 0, errUnknown + } + v, n := protowire.ConsumeGroup(fd.Number(), b) + if n < 0 { + return 0, errDecode + } + m := list.NewElement() + if err := o.unmarshalMessage(v, m.Message()); err != nil { + return 0, err + } + list.Append(m) + return n, nil + default: + return 0, errUnknown + } +} + +// We append to an empty array rather than a nil []byte to get non-nil zero-length byte slices. +var emptyBuf [0]byte diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/doc.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/doc.go new file mode 100644 index 0000000..80ed16a --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/doc.go @@ -0,0 +1,86 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package proto provides functions operating on protocol buffer messages. +// +// For documentation on protocol buffers in general, see: +// https://protobuf.dev. +// +// For a tutorial on using protocol buffers with Go, see: +// https://protobuf.dev/getting-started/gotutorial. +// +// For a guide to generated Go protocol buffer code, see: +// https://protobuf.dev/reference/go/go-generated. +// +// # Binary serialization +// +// This package contains functions to convert to and from the wire format, +// an efficient binary serialization of protocol buffers. +// +// - [Size] reports the size of a message in the wire format. +// +// - [Marshal] converts a message to the wire format. +// The [MarshalOptions] type provides more control over wire marshaling. +// +// - [Unmarshal] converts a message from the wire format. +// The [UnmarshalOptions] type provides more control over wire unmarshaling. +// +// # Basic message operations +// +// - [Clone] makes a deep copy of a message. +// +// - [Merge] merges the content of a message into another. +// +// - [Equal] compares two messages. For more control over comparisons +// and detailed reporting of differences, see package +// [google.golang.org/protobuf/testing/protocmp]. +// +// - [Reset] clears the content of a message. +// +// - [CheckInitialized] reports whether all required fields in a message are set. +// +// # Optional scalar constructors +// +// The API for some generated messages represents optional scalar fields +// as pointers to a value. For example, an optional string field has the +// Go type *string. +// +// - [Bool], [Int32], [Int64], [Uint32], [Uint64], [Float32], [Float64], and [String] +// take a value and return a pointer to a new instance of it, +// to simplify construction of optional field values. +// +// Generated enum types usually have an Enum method which performs the +// same operation. +// +// Optional scalar fields are only supported in proto2. +// +// # Extension accessors +// +// - [HasExtension], [GetExtension], [SetExtension], and [ClearExtension] +// access extension field values in a protocol buffer message. +// +// Extension fields are only supported in proto2. +// +// # Related packages +// +// - Package [google.golang.org/protobuf/encoding/protojson] converts messages to +// and from JSON. +// +// - Package [google.golang.org/protobuf/encoding/prototext] converts messages to +// and from the text format. +// +// - Package [google.golang.org/protobuf/reflect/protoreflect] provides a +// reflection interface for protocol buffer data types. +// +// - Package [google.golang.org/protobuf/testing/protocmp] provides features +// to compare protocol buffer messages with the [github.com/google/go-cmp/cmp] +// package. +// +// - Package [google.golang.org/protobuf/types/dynamicpb] provides a dynamic +// message type, suitable for working with messages where the protocol buffer +// type is only known at runtime. +// +// This module contains additional packages for more specialized use cases. +// Consult the individual package documentation for details. +package proto diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/encode.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/encode.go new file mode 100644 index 0000000..f0473c5 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/encode.go @@ -0,0 +1,355 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + "errors" + "fmt" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/encoding/messageset" + "google.golang.org/protobuf/internal/order" + "google.golang.org/protobuf/internal/pragma" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" + + protoerrors "google.golang.org/protobuf/internal/errors" +) + +// MarshalOptions configures the marshaler. +// +// Example usage: +// +// b, err := MarshalOptions{Deterministic: true}.Marshal(m) +type MarshalOptions struct { + pragma.NoUnkeyedLiterals + + // AllowPartial allows messages that have missing required fields to marshal + // without returning an error. If AllowPartial is false (the default), + // Marshal will return an error if there are any missing required fields. + AllowPartial bool + + // Deterministic controls whether the same message will always be + // serialized to the same bytes within the same binary. + // + // Setting this option guarantees that repeated serialization of + // the same message will return the same bytes, and that different + // processes of the same binary (which may be executing on different + // machines) will serialize equal messages to the same bytes. + // It has no effect on the resulting size of the encoded message compared + // to a non-deterministic marshal. + // + // Note that the deterministic serialization is NOT canonical across + // languages. It is not guaranteed to remain stable over time. It is + // unstable across different builds with schema changes due to unknown + // fields. Users who need canonical serialization (e.g., persistent + // storage in a canonical form, fingerprinting, etc.) must define + // their own canonicalization specification and implement their own + // serializer rather than relying on this API. + // + // If deterministic serialization is requested, map entries will be + // sorted by keys in lexographical order. This is an implementation + // detail and subject to change. + Deterministic bool + + // UseCachedSize indicates that the result of a previous Size call + // may be reused. + // + // Setting this option asserts that: + // + // 1. Size has previously been called on this message with identical + // options (except for UseCachedSize itself). + // + // 2. The message and all its submessages have not changed in any + // way since the Size call. For lazily decoded messages, accessing + // a message results in decoding the message, which is a change. + // + // If either of these invariants is violated, + // the results are undefined and may include panics or corrupted output. + // + // Implementations MAY take this option into account to provide + // better performance, but there is no guarantee that they will do so. + // There is absolutely no guarantee that Size followed by Marshal with + // UseCachedSize set will perform equivalently to Marshal alone. + UseCachedSize bool +} + +// flags turns the specified MarshalOptions (user-facing) into +// protoiface.MarshalInputFlags (used internally by the marshaler). +// +// See impl.marshalOptions.Options for the inverse operation. +func (o MarshalOptions) flags() protoiface.MarshalInputFlags { + var flags protoiface.MarshalInputFlags + + // Note: o.AllowPartial is always forced to true by MarshalOptions.marshal, + // which is why it is not a part of MarshalInputFlags. + + if o.Deterministic { + flags |= protoiface.MarshalDeterministic + } + + if o.UseCachedSize { + flags |= protoiface.MarshalUseCachedSize + } + + return flags +} + +// Marshal returns the wire-format encoding of m. +// +// This is the most common entry point for encoding a Protobuf message. +// +// See the [MarshalOptions] type if you need more control. +func Marshal(m Message) ([]byte, error) { + // Treat nil message interface as an empty message; nothing to output. + if m == nil { + return nil, nil + } + + out, err := MarshalOptions{}.marshal(nil, m.ProtoReflect()) + if len(out.Buf) == 0 && err == nil { + out.Buf = emptyBytesForMessage(m) + } + return out.Buf, err +} + +// Marshal returns the wire-format encoding of m. +func (o MarshalOptions) Marshal(m Message) ([]byte, error) { + // Treat nil message interface as an empty message; nothing to output. + if m == nil { + return nil, nil + } + + out, err := o.marshal(nil, m.ProtoReflect()) + if len(out.Buf) == 0 && err == nil { + out.Buf = emptyBytesForMessage(m) + } + return out.Buf, err +} + +// emptyBytesForMessage returns a nil buffer if and only if m is invalid, +// otherwise it returns a non-nil empty buffer. +// +// This is to assist the edge-case where user-code does the following: +// +// m1.OptionalBytes, _ = proto.Marshal(m2) +// +// where they expect the proto2 "optional_bytes" field to be populated +// if any only if m2 is a valid message. +func emptyBytesForMessage(m Message) []byte { + if m == nil || !m.ProtoReflect().IsValid() { + return nil + } + return emptyBuf[:] +} + +// MarshalAppend appends the wire-format encoding of m to b, +// returning the result. +// +// This is a less common entry point than [Marshal], which is only needed if you +// need to supply your own buffers for performance reasons. +func (o MarshalOptions) MarshalAppend(b []byte, m Message) ([]byte, error) { + // Treat nil message interface as an empty message; nothing to append. + if m == nil { + return b, nil + } + + out, err := o.marshal(b, m.ProtoReflect()) + return out.Buf, err +} + +// MarshalState returns the wire-format encoding of a message. +// +// This method permits fine-grained control over the marshaler. +// Most users should use [Marshal] instead. +func (o MarshalOptions) MarshalState(in protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + return o.marshal(in.Buf, in.Message) +} + +// marshal is a centralized function that all marshal operations go through. +// For profiling purposes, avoid changing the name of this function or +// introducing other code paths for marshal that do not go through this. +func (o MarshalOptions) marshal(b []byte, m protoreflect.Message) (out protoiface.MarshalOutput, err error) { + allowPartial := o.AllowPartial + o.AllowPartial = true + if methods := protoMethods(m); methods != nil && methods.Marshal != nil && + !(o.Deterministic && methods.Flags&protoiface.SupportMarshalDeterministic == 0) { + in := protoiface.MarshalInput{ + Message: m, + Buf: b, + Flags: o.flags(), + } + if methods.Size != nil { + sout := methods.Size(protoiface.SizeInput{ + Message: m, + Flags: in.Flags, + }) + if cap(b) < len(b)+sout.Size { + in.Buf = make([]byte, len(b), growcap(cap(b), len(b)+sout.Size)) + copy(in.Buf, b) + } + in.Flags |= protoiface.MarshalUseCachedSize + } + out, err = methods.Marshal(in) + } else { + out.Buf, err = o.marshalMessageSlow(b, m) + } + if err != nil { + var mismatch *protoerrors.SizeMismatchError + if errors.As(err, &mismatch) { + return out, fmt.Errorf("marshaling %s: %v", string(m.Descriptor().FullName()), err) + } + return out, err + } + if allowPartial { + return out, nil + } + return out, checkInitialized(m) +} + +func (o MarshalOptions) marshalMessage(b []byte, m protoreflect.Message) ([]byte, error) { + out, err := o.marshal(b, m) + return out.Buf, err +} + +// growcap scales up the capacity of a slice. +// +// Given a slice with a current capacity of oldcap and a desired +// capacity of wantcap, growcap returns a new capacity >= wantcap. +// +// The algorithm is mostly identical to the one used by append as of Go 1.14. +func growcap(oldcap, wantcap int) (newcap int) { + if wantcap > oldcap*2 { + newcap = wantcap + } else if oldcap < 1024 { + // The Go 1.14 runtime takes this case when len(s) < 1024, + // not when cap(s) < 1024. The difference doesn't seem + // significant here. + newcap = oldcap * 2 + } else { + newcap = oldcap + for 0 < newcap && newcap < wantcap { + newcap += newcap / 4 + } + if newcap <= 0 { + newcap = wantcap + } + } + return newcap +} + +func (o MarshalOptions) marshalMessageSlow(b []byte, m protoreflect.Message) ([]byte, error) { + if messageset.IsMessageSet(m.Descriptor()) { + return o.marshalMessageSet(b, m) + } + fieldOrder := order.AnyFieldOrder + if o.Deterministic { + // TODO: This should use a more natural ordering like NumberFieldOrder, + // but doing so breaks golden tests that make invalid assumption about + // output stability of this implementation. + fieldOrder = order.LegacyFieldOrder + } + var err error + order.RangeFields(m, fieldOrder, func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + b, err = o.marshalField(b, fd, v) + return err == nil + }) + if err != nil { + return b, err + } + b = append(b, m.GetUnknown()...) + return b, nil +} + +func (o MarshalOptions) marshalField(b []byte, fd protoreflect.FieldDescriptor, value protoreflect.Value) ([]byte, error) { + switch { + case fd.IsList(): + return o.marshalList(b, fd, value.List()) + case fd.IsMap(): + return o.marshalMap(b, fd, value.Map()) + default: + b = protowire.AppendTag(b, fd.Number(), wireTypes[fd.Kind()]) + return o.marshalSingular(b, fd, value) + } +} + +func (o MarshalOptions) marshalList(b []byte, fd protoreflect.FieldDescriptor, list protoreflect.List) ([]byte, error) { + if fd.IsPacked() && list.Len() > 0 { + b = protowire.AppendTag(b, fd.Number(), protowire.BytesType) + b, pos := appendSpeculativeLength(b) + for i, llen := 0, list.Len(); i < llen; i++ { + var err error + b, err = o.marshalSingular(b, fd, list.Get(i)) + if err != nil { + return b, err + } + } + b = finishSpeculativeLength(b, pos) + return b, nil + } + + kind := fd.Kind() + for i, llen := 0, list.Len(); i < llen; i++ { + var err error + b = protowire.AppendTag(b, fd.Number(), wireTypes[kind]) + b, err = o.marshalSingular(b, fd, list.Get(i)) + if err != nil { + return b, err + } + } + return b, nil +} + +func (o MarshalOptions) marshalMap(b []byte, fd protoreflect.FieldDescriptor, mapv protoreflect.Map) ([]byte, error) { + keyf := fd.MapKey() + valf := fd.MapValue() + keyOrder := order.AnyKeyOrder + if o.Deterministic { + keyOrder = order.GenericKeyOrder + } + var err error + order.RangeEntries(mapv, keyOrder, func(key protoreflect.MapKey, value protoreflect.Value) bool { + b = protowire.AppendTag(b, fd.Number(), protowire.BytesType) + var pos int + b, pos = appendSpeculativeLength(b) + + b, err = o.marshalField(b, keyf, key.Value()) + if err != nil { + return false + } + b, err = o.marshalField(b, valf, value) + if err != nil { + return false + } + b = finishSpeculativeLength(b, pos) + return true + }) + return b, err +} + +// When encoding length-prefixed fields, we speculatively set aside some number of bytes +// for the length, encode the data, and then encode the length (shifting the data if necessary +// to make room). +const speculativeLength = 1 + +func appendSpeculativeLength(b []byte) ([]byte, int) { + pos := len(b) + b = append(b, "\x00\x00\x00\x00"[:speculativeLength]...) + return b, pos +} + +func finishSpeculativeLength(b []byte, pos int) []byte { + mlen := len(b) - pos - speculativeLength + msiz := protowire.SizeVarint(uint64(mlen)) + if msiz != speculativeLength { + for i := 0; i < msiz-speculativeLength; i++ { + b = append(b, 0) + } + copy(b[pos+msiz:], b[pos+speculativeLength:]) + b = b[:pos+msiz+mlen] + } + protowire.AppendVarint(b[:pos], uint64(mlen)) + return b +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/encode_gen.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/encode_gen.go new file mode 100644 index 0000000..185dacf --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/encode_gen.go @@ -0,0 +1,97 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-types. DO NOT EDIT. + +package proto + +import ( + "math" + "unicode/utf8" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/strs" + "google.golang.org/protobuf/reflect/protoreflect" +) + +var wireTypes = map[protoreflect.Kind]protowire.Type{ + protoreflect.BoolKind: protowire.VarintType, + protoreflect.EnumKind: protowire.VarintType, + protoreflect.Int32Kind: protowire.VarintType, + protoreflect.Sint32Kind: protowire.VarintType, + protoreflect.Uint32Kind: protowire.VarintType, + protoreflect.Int64Kind: protowire.VarintType, + protoreflect.Sint64Kind: protowire.VarintType, + protoreflect.Uint64Kind: protowire.VarintType, + protoreflect.Sfixed32Kind: protowire.Fixed32Type, + protoreflect.Fixed32Kind: protowire.Fixed32Type, + protoreflect.FloatKind: protowire.Fixed32Type, + protoreflect.Sfixed64Kind: protowire.Fixed64Type, + protoreflect.Fixed64Kind: protowire.Fixed64Type, + protoreflect.DoubleKind: protowire.Fixed64Type, + protoreflect.StringKind: protowire.BytesType, + protoreflect.BytesKind: protowire.BytesType, + protoreflect.MessageKind: protowire.BytesType, + protoreflect.GroupKind: protowire.StartGroupType, +} + +func (o MarshalOptions) marshalSingular(b []byte, fd protoreflect.FieldDescriptor, v protoreflect.Value) ([]byte, error) { + switch fd.Kind() { + case protoreflect.BoolKind: + b = protowire.AppendVarint(b, protowire.EncodeBool(v.Bool())) + case protoreflect.EnumKind: + b = protowire.AppendVarint(b, uint64(v.Enum())) + case protoreflect.Int32Kind: + b = protowire.AppendVarint(b, uint64(int32(v.Int()))) + case protoreflect.Sint32Kind: + b = protowire.AppendVarint(b, protowire.EncodeZigZag(int64(int32(v.Int())))) + case protoreflect.Uint32Kind: + b = protowire.AppendVarint(b, uint64(uint32(v.Uint()))) + case protoreflect.Int64Kind: + b = protowire.AppendVarint(b, uint64(v.Int())) + case protoreflect.Sint64Kind: + b = protowire.AppendVarint(b, protowire.EncodeZigZag(v.Int())) + case protoreflect.Uint64Kind: + b = protowire.AppendVarint(b, v.Uint()) + case protoreflect.Sfixed32Kind: + b = protowire.AppendFixed32(b, uint32(v.Int())) + case protoreflect.Fixed32Kind: + b = protowire.AppendFixed32(b, uint32(v.Uint())) + case protoreflect.FloatKind: + b = protowire.AppendFixed32(b, math.Float32bits(float32(v.Float()))) + case protoreflect.Sfixed64Kind: + b = protowire.AppendFixed64(b, uint64(v.Int())) + case protoreflect.Fixed64Kind: + b = protowire.AppendFixed64(b, v.Uint()) + case protoreflect.DoubleKind: + b = protowire.AppendFixed64(b, math.Float64bits(v.Float())) + case protoreflect.StringKind: + if strs.EnforceUTF8(fd) && !utf8.ValidString(v.String()) { + return b, errors.InvalidUTF8(string(fd.FullName())) + } + b = protowire.AppendString(b, v.String()) + case protoreflect.BytesKind: + b = protowire.AppendBytes(b, v.Bytes()) + case protoreflect.MessageKind: + var pos int + var err error + b, pos = appendSpeculativeLength(b) + b, err = o.marshalMessage(b, v.Message()) + if err != nil { + return b, err + } + b = finishSpeculativeLength(b, pos) + case protoreflect.GroupKind: + var err error + b, err = o.marshalMessage(b, v.Message()) + if err != nil { + return b, err + } + b = protowire.AppendVarint(b, protowire.EncodeTag(fd.Number(), protowire.EndGroupType)) + default: + return b, errors.New("invalid kind %v", fd.Kind()) + } + return b, nil +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/equal.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/equal.go new file mode 100644 index 0000000..c36d4a9 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/equal.go @@ -0,0 +1,66 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + "reflect" + + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" +) + +// Equal reports whether two messages are equal, +// by recursively comparing the fields of the message. +// +// - Bytes fields are equal if they contain identical bytes. +// Empty bytes (regardless of nil-ness) are considered equal. +// +// - Floating-point fields are equal if they contain the same value. +// Unlike the == operator, a NaN is equal to another NaN. +// +// - Other scalar fields are equal if they contain the same value. +// +// - Message fields are equal if they have +// the same set of populated known and extension field values, and +// the same set of unknown fields values. +// +// - Lists are equal if they are the same length and +// each corresponding element is equal. +// +// - Maps are equal if they have the same set of keys and +// the corresponding value for each key is equal. +// +// An invalid message is not equal to a valid message. +// An invalid message is only equal to another invalid message of the +// same type. An invalid message often corresponds to a nil pointer +// of the concrete message type. For example, (*pb.M)(nil) is not equal +// to &pb.M{}. +// If two valid messages marshal to the same bytes under deterministic +// serialization, then Equal is guaranteed to report true. +func Equal(x, y Message) bool { + if x == nil || y == nil { + return x == nil && y == nil + } + if reflect.TypeOf(x).Kind() == reflect.Ptr && x == y { + // Avoid an expensive comparison if both inputs are identical pointers. + return true + } + mx := x.ProtoReflect() + my := y.ProtoReflect() + if mx.IsValid() != my.IsValid() { + return false + } + + // Only one of the messages needs to implement the fast-path for it to work. + pmx := protoMethods(mx) + pmy := protoMethods(my) + if pmx != nil && pmy != nil && pmx.Equal != nil && pmy.Equal != nil { + return pmx.Equal(protoiface.EqualInput{MessageA: mx, MessageB: my}).Equal + } + + vx := protoreflect.ValueOfMessage(mx) + vy := protoreflect.ValueOfMessage(my) + return vx.Equal(vy) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/extension.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/extension.go new file mode 100644 index 0000000..78445d1 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/extension.go @@ -0,0 +1,166 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + "google.golang.org/protobuf/reflect/protoreflect" +) + +// HasExtension reports whether an extension field is populated. +// It returns false if m is invalid or if xt does not extend m. +func HasExtension(m Message, xt protoreflect.ExtensionType) bool { + // Treat nil message interface or descriptor as an empty message; no populated + // fields. + if m == nil || xt == nil { + return false + } + + // As a special-case, we reports invalid or mismatching descriptors + // as always not being populated (since they aren't). + mr := m.ProtoReflect() + xd := xt.TypeDescriptor() + if mr.Descriptor() != xd.ContainingMessage() { + return false + } + + return mr.Has(xd) +} + +// ClearExtension clears an extension field such that subsequent +// [HasExtension] calls return false. +// It panics if m is invalid or if xt does not extend m. +func ClearExtension(m Message, xt protoreflect.ExtensionType) { + m.ProtoReflect().Clear(xt.TypeDescriptor()) +} + +// GetExtension retrieves the value for an extension field. +// If the field is unpopulated, it returns the default value for +// scalars and an immutable, empty value for lists or messages. +// It panics if xt does not extend m. +// +// The type of the value is dependent on the field type of the extension. +// For extensions generated by protoc-gen-go, the Go type is as follows: +// +// ╔═══════════════════╤═════════════════════════╗ +// ║ Go type │ Protobuf kind ║ +// ╠═══════════════════╪═════════════════════════╣ +// ║ bool │ bool ║ +// ║ int32 │ int32, sint32, sfixed32 ║ +// ║ int64 │ int64, sint64, sfixed64 ║ +// ║ uint32 │ uint32, fixed32 ║ +// ║ uint64 │ uint64, fixed64 ║ +// ║ float32 │ float ║ +// ║ float64 │ double ║ +// ║ string │ string ║ +// ║ []byte │ bytes ║ +// ║ protoreflect.Enum │ enum ║ +// ║ proto.Message │ message, group ║ +// ╚═══════════════════╧═════════════════════════╝ +// +// The protoreflect.Enum and proto.Message types are the concrete Go type +// associated with the named enum or message. Repeated fields are represented +// using a Go slice of the base element type. +// +// If a generated extension descriptor variable is directly passed to +// GetExtension, then the call should be followed immediately by a +// type assertion to the expected output value. For example: +// +// mm := proto.GetExtension(m, foopb.E_MyExtension).(*foopb.MyMessage) +// +// This pattern enables static analysis tools to verify that the asserted type +// matches the Go type associated with the extension field and +// also enables a possible future migration to a type-safe extension API. +// +// Since singular messages are the most common extension type, the pattern of +// calling HasExtension followed by GetExtension may be simplified to: +// +// if mm := proto.GetExtension(m, foopb.E_MyExtension).(*foopb.MyMessage); mm != nil { +// ... // make use of mm +// } +// +// The mm variable is non-nil if and only if HasExtension reports true. +func GetExtension(m Message, xt protoreflect.ExtensionType) any { + // Treat nil message interface as an empty message; return the default. + if m == nil { + return xt.InterfaceOf(xt.Zero()) + } + + return xt.InterfaceOf(m.ProtoReflect().Get(xt.TypeDescriptor())) +} + +// SetExtension stores the value of an extension field. +// It panics if m is invalid, xt does not extend m, or if type of v +// is invalid for the specified extension field. +// +// The type of the value is dependent on the field type of the extension. +// For extensions generated by protoc-gen-go, the Go type is as follows: +// +// ╔═══════════════════╤═════════════════════════╗ +// ║ Go type │ Protobuf kind ║ +// ╠═══════════════════╪═════════════════════════╣ +// ║ bool │ bool ║ +// ║ int32 │ int32, sint32, sfixed32 ║ +// ║ int64 │ int64, sint64, sfixed64 ║ +// ║ uint32 │ uint32, fixed32 ║ +// ║ uint64 │ uint64, fixed64 ║ +// ║ float32 │ float ║ +// ║ float64 │ double ║ +// ║ string │ string ║ +// ║ []byte │ bytes ║ +// ║ protoreflect.Enum │ enum ║ +// ║ proto.Message │ message, group ║ +// ╚═══════════════════╧═════════════════════════╝ +// +// The protoreflect.Enum and proto.Message types are the concrete Go type +// associated with the named enum or message. Repeated fields are represented +// using a Go slice of the base element type. +// +// If a generated extension descriptor variable is directly passed to +// SetExtension (e.g., foopb.E_MyExtension), then the value should be a +// concrete type that matches the expected Go type for the extension descriptor +// so that static analysis tools can verify type correctness. +// This also enables a possible future migration to a type-safe extension API. +func SetExtension(m Message, xt protoreflect.ExtensionType, v any) { + xd := xt.TypeDescriptor() + pv := xt.ValueOf(v) + + // Specially treat an invalid list, map, or message as clear. + isValid := true + switch { + case xd.IsList(): + isValid = pv.List().IsValid() + case xd.IsMap(): + isValid = pv.Map().IsValid() + case xd.Message() != nil: + isValid = pv.Message().IsValid() + } + if !isValid { + m.ProtoReflect().Clear(xd) + return + } + + m.ProtoReflect().Set(xd, pv) +} + +// RangeExtensions iterates over every populated extension field in m in an +// undefined order, calling f for each extension type and value encountered. +// It returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current extension field. +func RangeExtensions(m Message, f func(protoreflect.ExtensionType, any) bool) { + // Treat nil message interface as an empty message; nothing to range over. + if m == nil { + return + } + + m.ProtoReflect().Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + if fd.IsExtension() { + xt := fd.(protoreflect.ExtensionTypeDescriptor).Type() + vi := xt.InterfaceOf(v) + return f(xt, vi) + } + return true + }) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/merge.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/merge.go new file mode 100644 index 0000000..ef55b97 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/merge.go @@ -0,0 +1,145 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + "fmt" + + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" +) + +// Merge merges src into dst, which must be a message with the same descriptor. +// +// Populated scalar fields in src are copied to dst, while populated +// singular messages in src are merged into dst by recursively calling Merge. +// The elements of every list field in src is appended to the corresponded +// list fields in dst. The entries of every map field in src is copied into +// the corresponding map field in dst, possibly replacing existing entries. +// The unknown fields of src are appended to the unknown fields of dst. +// +// It is semantically equivalent to unmarshaling the encoded form of src +// into dst with the [UnmarshalOptions.Merge] option specified. +func Merge(dst, src Message) { + // TODO: Should nil src be treated as semantically equivalent to a + // untyped, read-only, empty message? What about a nil dst? + + dstMsg, srcMsg := dst.ProtoReflect(), src.ProtoReflect() + if dstMsg.Descriptor() != srcMsg.Descriptor() { + if got, want := dstMsg.Descriptor().FullName(), srcMsg.Descriptor().FullName(); got != want { + panic(fmt.Sprintf("descriptor mismatch: %v != %v", got, want)) + } + panic("descriptor mismatch") + } + mergeOptions{}.mergeMessage(dstMsg, srcMsg) +} + +// Clone returns a deep copy of m. +// If the top-level message is invalid, it returns an invalid message as well. +func Clone(m Message) Message { + // NOTE: Most usages of Clone assume the following properties: + // t := reflect.TypeOf(m) + // t == reflect.TypeOf(m.ProtoReflect().New().Interface()) + // t == reflect.TypeOf(m.ProtoReflect().Type().Zero().Interface()) + // + // Embedding protobuf messages breaks this since the parent type will have + // a forwarded ProtoReflect method, but the Interface method will return + // the underlying embedded message type. + if m == nil { + return nil + } + src := m.ProtoReflect() + if !src.IsValid() { + return src.Type().Zero().Interface() + } + dst := src.New() + mergeOptions{}.mergeMessage(dst, src) + return dst.Interface() +} + +// CloneOf returns a deep copy of m. If the top-level message is invalid, +// it returns an invalid message as well. +func CloneOf[M Message](m M) M { + return Clone(m).(M) +} + +// mergeOptions provides a namespace for merge functions, and can be +// exported in the future if we add user-visible merge options. +type mergeOptions struct{} + +func (o mergeOptions) mergeMessage(dst, src protoreflect.Message) { + methods := protoMethods(dst) + if methods != nil && methods.Merge != nil { + in := protoiface.MergeInput{ + Destination: dst, + Source: src, + } + out := methods.Merge(in) + if out.Flags&protoiface.MergeComplete != 0 { + return + } + } + + if !dst.IsValid() { + panic(fmt.Sprintf("cannot merge into invalid %v message", dst.Descriptor().FullName())) + } + + src.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + switch { + case fd.IsList(): + o.mergeList(dst.Mutable(fd).List(), v.List(), fd) + case fd.IsMap(): + o.mergeMap(dst.Mutable(fd).Map(), v.Map(), fd.MapValue()) + case fd.Message() != nil: + o.mergeMessage(dst.Mutable(fd).Message(), v.Message()) + case fd.Kind() == protoreflect.BytesKind: + dst.Set(fd, o.cloneBytes(v)) + default: + dst.Set(fd, v) + } + return true + }) + + if len(src.GetUnknown()) > 0 { + dst.SetUnknown(append(dst.GetUnknown(), src.GetUnknown()...)) + } +} + +func (o mergeOptions) mergeList(dst, src protoreflect.List, fd protoreflect.FieldDescriptor) { + // Merge semantics appends to the end of the existing list. + for i, n := 0, src.Len(); i < n; i++ { + switch v := src.Get(i); { + case fd.Message() != nil: + dstv := dst.NewElement() + o.mergeMessage(dstv.Message(), v.Message()) + dst.Append(dstv) + case fd.Kind() == protoreflect.BytesKind: + dst.Append(o.cloneBytes(v)) + default: + dst.Append(v) + } + } +} + +func (o mergeOptions) mergeMap(dst, src protoreflect.Map, fd protoreflect.FieldDescriptor) { + // Merge semantics replaces, rather than merges into existing entries. + src.Range(func(k protoreflect.MapKey, v protoreflect.Value) bool { + switch { + case fd.Message() != nil: + dstv := dst.NewValue() + o.mergeMessage(dstv.Message(), v.Message()) + dst.Set(k, dstv) + case fd.Kind() == protoreflect.BytesKind: + dst.Set(k, o.cloneBytes(v)) + default: + dst.Set(k, v) + } + return true + }) +} + +func (o mergeOptions) cloneBytes(v protoreflect.Value) protoreflect.Value { + return protoreflect.ValueOfBytes(append([]byte{}, v.Bytes()...)) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/messageset.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/messageset.go new file mode 100644 index 0000000..575d148 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/messageset.go @@ -0,0 +1,98 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/encoding/messageset" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/flags" + "google.golang.org/protobuf/internal/order" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" +) + +func (o MarshalOptions) sizeMessageSet(m protoreflect.Message) (size int) { + m.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + size += messageset.SizeField(fd.Number()) + size += protowire.SizeTag(messageset.FieldMessage) + size += protowire.SizeBytes(o.size(v.Message())) + return true + }) + size += messageset.SizeUnknown(m.GetUnknown()) + return size +} + +func (o MarshalOptions) marshalMessageSet(b []byte, m protoreflect.Message) ([]byte, error) { + if !flags.ProtoLegacy { + return b, errors.New("no support for message_set_wire_format") + } + fieldOrder := order.AnyFieldOrder + if o.Deterministic { + fieldOrder = order.NumberFieldOrder + } + var err error + order.RangeFields(m, fieldOrder, func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + b, err = o.marshalMessageSetField(b, fd, v) + return err == nil + }) + if err != nil { + return b, err + } + return messageset.AppendUnknown(b, m.GetUnknown()) +} + +func (o MarshalOptions) marshalMessageSetField(b []byte, fd protoreflect.FieldDescriptor, value protoreflect.Value) ([]byte, error) { + b = messageset.AppendFieldStart(b, fd.Number()) + b = protowire.AppendTag(b, messageset.FieldMessage, protowire.BytesType) + calculatedSize := o.Size(value.Message().Interface()) + b = protowire.AppendVarint(b, uint64(calculatedSize)) + before := len(b) + b, err := o.marshalMessage(b, value.Message()) + if err != nil { + return b, err + } + if measuredSize := len(b) - before; calculatedSize != measuredSize { + return nil, errors.MismatchedSizeCalculation(calculatedSize, measuredSize) + } + b = messageset.AppendFieldEnd(b) + return b, nil +} + +func (o UnmarshalOptions) unmarshalMessageSet(b []byte, m protoreflect.Message) error { + if !flags.ProtoLegacy { + return errors.New("no support for message_set_wire_format") + } + return messageset.Unmarshal(b, false, func(num protowire.Number, v []byte) error { + err := o.unmarshalMessageSetField(m, num, v) + if err == errUnknown { + unknown := m.GetUnknown() + unknown = protowire.AppendTag(unknown, num, protowire.BytesType) + unknown = protowire.AppendBytes(unknown, v) + m.SetUnknown(unknown) + return nil + } + return err + }) +} + +func (o UnmarshalOptions) unmarshalMessageSetField(m protoreflect.Message, num protowire.Number, v []byte) error { + md := m.Descriptor() + if !md.ExtensionRanges().Has(num) { + return errUnknown + } + xt, err := o.Resolver.FindExtensionByNumber(md.FullName(), num) + if err == protoregistry.NotFound { + return errUnknown + } + if err != nil { + return errors.New("%v: unable to resolve extension %v: %v", md.FullName(), num, err) + } + xd := xt.TypeDescriptor() + if err := o.unmarshalMessage(v, m.Mutable(xd).Message()); err != nil { + return err + } + return nil +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/proto.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/proto.go new file mode 100644 index 0000000..7543ee6 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/proto.go @@ -0,0 +1,45 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/reflect/protoreflect" +) + +// Message is the top-level interface that all messages must implement. +// It provides access to a reflective view of a message. +// Any implementation of this interface may be used with all functions in the +// protobuf module that accept a Message, except where otherwise specified. +// +// This is the v2 interface definition for protobuf messages. +// The v1 interface definition is [github.com/golang/protobuf/proto.Message]. +// +// - To convert a v1 message to a v2 message, +// use [google.golang.org/protobuf/protoadapt.MessageV2Of]. +// - To convert a v2 message to a v1 message, +// use [google.golang.org/protobuf/protoadapt.MessageV1Of]. +type Message = protoreflect.ProtoMessage + +// Error matches all errors produced by packages in the protobuf module +// according to [errors.Is]. +// +// Example usage: +// +// if errors.Is(err, proto.Error) { ... } +var Error error + +func init() { + Error = errors.Error +} + +// MessageName returns the full name of m. +// If m is nil, it returns an empty string. +func MessageName(m Message) protoreflect.FullName { + if m == nil { + return "" + } + return m.ProtoReflect().Descriptor().FullName() +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/proto_methods.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/proto_methods.go new file mode 100644 index 0000000..465e057 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/proto_methods.go @@ -0,0 +1,20 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// The protoreflect build tag disables use of fast-path methods. +//go:build !protoreflect +// +build !protoreflect + +package proto + +import ( + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" +) + +const hasProtoMethods = true + +func protoMethods(m protoreflect.Message) *protoiface.Methods { + return m.ProtoMethods() +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/proto_reflect.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/proto_reflect.go new file mode 100644 index 0000000..494d6ce --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/proto_reflect.go @@ -0,0 +1,20 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// The protoreflect build tag disables use of fast-path methods. +//go:build protoreflect +// +build protoreflect + +package proto + +import ( + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" +) + +const hasProtoMethods = false + +func protoMethods(m protoreflect.Message) *protoiface.Methods { + return nil +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/reset.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/reset.go new file mode 100644 index 0000000..3d7f894 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/reset.go @@ -0,0 +1,43 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + "fmt" + + "google.golang.org/protobuf/reflect/protoreflect" +) + +// Reset clears every field in the message. +// The resulting message shares no observable memory with its previous state +// other than the memory for the message itself. +func Reset(m Message) { + if mr, ok := m.(interface{ Reset() }); ok && hasProtoMethods { + mr.Reset() + return + } + resetMessage(m.ProtoReflect()) +} + +func resetMessage(m protoreflect.Message) { + if !m.IsValid() { + panic(fmt.Sprintf("cannot reset invalid %v message", m.Descriptor().FullName())) + } + + // Clear all known fields. + fds := m.Descriptor().Fields() + for i := 0; i < fds.Len(); i++ { + m.Clear(fds.Get(i)) + } + + // Clear extension fields. + m.Range(func(fd protoreflect.FieldDescriptor, _ protoreflect.Value) bool { + m.Clear(fd) + return true + }) + + // Clear unknown fields. + m.SetUnknown(nil) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/size.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/size.go new file mode 100644 index 0000000..c867580 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/size.go @@ -0,0 +1,111 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +import ( + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/encoding/messageset" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" +) + +// Size returns the size in bytes of the wire-format encoding of m. +// +// Note that Size might return more bytes than Marshal will write in the case of +// lazily decoded messages that arrive in non-minimal wire format: see +// https://protobuf.dev/reference/go/size/ for more details. +func Size(m Message) int { + return MarshalOptions{}.Size(m) +} + +// Size returns the size in bytes of the wire-format encoding of m. +// +// Note that Size might return more bytes than Marshal will write in the case of +// lazily decoded messages that arrive in non-minimal wire format: see +// https://protobuf.dev/reference/go/size/ for more details. +func (o MarshalOptions) Size(m Message) int { + // Treat a nil message interface as an empty message; nothing to output. + if m == nil { + return 0 + } + + return o.size(m.ProtoReflect()) +} + +// size is a centralized function that all size operations go through. +// For profiling purposes, avoid changing the name of this function or +// introducing other code paths for size that do not go through this. +func (o MarshalOptions) size(m protoreflect.Message) (size int) { + methods := protoMethods(m) + if methods != nil && methods.Size != nil { + out := methods.Size(protoiface.SizeInput{ + Message: m, + Flags: o.flags(), + }) + return out.Size + } + if methods != nil && methods.Marshal != nil { + // This is not efficient, but we don't have any choice. + // This case is mainly used for legacy types with a Marshal method. + out, _ := methods.Marshal(protoiface.MarshalInput{ + Message: m, + Flags: o.flags(), + }) + return len(out.Buf) + } + return o.sizeMessageSlow(m) +} + +func (o MarshalOptions) sizeMessageSlow(m protoreflect.Message) (size int) { + if messageset.IsMessageSet(m.Descriptor()) { + return o.sizeMessageSet(m) + } + m.Range(func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + size += o.sizeField(fd, v) + return true + }) + size += len(m.GetUnknown()) + return size +} + +func (o MarshalOptions) sizeField(fd protoreflect.FieldDescriptor, value protoreflect.Value) (size int) { + num := fd.Number() + switch { + case fd.IsList(): + return o.sizeList(num, fd, value.List()) + case fd.IsMap(): + return o.sizeMap(num, fd, value.Map()) + default: + return protowire.SizeTag(num) + o.sizeSingular(num, fd.Kind(), value) + } +} + +func (o MarshalOptions) sizeList(num protowire.Number, fd protoreflect.FieldDescriptor, list protoreflect.List) (size int) { + sizeTag := protowire.SizeTag(num) + + if fd.IsPacked() && list.Len() > 0 { + content := 0 + for i, llen := 0, list.Len(); i < llen; i++ { + content += o.sizeSingular(num, fd.Kind(), list.Get(i)) + } + return sizeTag + protowire.SizeBytes(content) + } + + for i, llen := 0, list.Len(); i < llen; i++ { + size += sizeTag + o.sizeSingular(num, fd.Kind(), list.Get(i)) + } + return size +} + +func (o MarshalOptions) sizeMap(num protowire.Number, fd protoreflect.FieldDescriptor, mapv protoreflect.Map) (size int) { + sizeTag := protowire.SizeTag(num) + + mapv.Range(func(key protoreflect.MapKey, value protoreflect.Value) bool { + size += sizeTag + size += protowire.SizeBytes(o.sizeField(fd.MapKey(), key.Value()) + o.sizeField(fd.MapValue(), value)) + return true + }) + return size +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/size_gen.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/size_gen.go new file mode 100644 index 0000000..3cf61a8 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/size_gen.go @@ -0,0 +1,55 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-types. DO NOT EDIT. + +package proto + +import ( + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/reflect/protoreflect" +) + +func (o MarshalOptions) sizeSingular(num protowire.Number, kind protoreflect.Kind, v protoreflect.Value) int { + switch kind { + case protoreflect.BoolKind: + return protowire.SizeVarint(protowire.EncodeBool(v.Bool())) + case protoreflect.EnumKind: + return protowire.SizeVarint(uint64(v.Enum())) + case protoreflect.Int32Kind: + return protowire.SizeVarint(uint64(int32(v.Int()))) + case protoreflect.Sint32Kind: + return protowire.SizeVarint(protowire.EncodeZigZag(int64(int32(v.Int())))) + case protoreflect.Uint32Kind: + return protowire.SizeVarint(uint64(uint32(v.Uint()))) + case protoreflect.Int64Kind: + return protowire.SizeVarint(uint64(v.Int())) + case protoreflect.Sint64Kind: + return protowire.SizeVarint(protowire.EncodeZigZag(v.Int())) + case protoreflect.Uint64Kind: + return protowire.SizeVarint(v.Uint()) + case protoreflect.Sfixed32Kind: + return protowire.SizeFixed32() + case protoreflect.Fixed32Kind: + return protowire.SizeFixed32() + case protoreflect.FloatKind: + return protowire.SizeFixed32() + case protoreflect.Sfixed64Kind: + return protowire.SizeFixed64() + case protoreflect.Fixed64Kind: + return protowire.SizeFixed64() + case protoreflect.DoubleKind: + return protowire.SizeFixed64() + case protoreflect.StringKind: + return protowire.SizeBytes(len(v.String())) + case protoreflect.BytesKind: + return protowire.SizeBytes(len(v.Bytes())) + case protoreflect.MessageKind: + return protowire.SizeBytes(o.size(v.Message())) + case protoreflect.GroupKind: + return protowire.SizeGroup(num, o.size(v.Message())) + default: + return 0 + } +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/wrapperopaque.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/wrapperopaque.go new file mode 100644 index 0000000..267fd0f --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/wrapperopaque.go @@ -0,0 +1,80 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +// ValueOrNil returns nil if has is false, or a pointer to a new variable +// containing the value returned by the specified getter. +// +// This function is similar to the wrappers (proto.Int32(), proto.String(), +// etc.), but is generic (works for any field type) and works with the hasser +// and getter of a field, as opposed to a value. +// +// This is convenient when populating builder fields. +// +// Example: +// +// hop := attr.GetDirectHop() +// injectedRoute := ripb.InjectedRoute_builder{ +// Prefixes: route.GetPrefixes(), +// NextHop: proto.ValueOrNil(hop.HasAddress(), hop.GetAddress), +// } +func ValueOrNil[T any](has bool, getter func() T) *T { + if !has { + return nil + } + v := getter() + return &v +} + +// ValueOrDefault returns the protobuf message val if val is not nil, otherwise +// it returns a pointer to an empty val message. +// +// This function allows for translating code from the old Open Struct API to the +// new Opaque API. +// +// The old Open Struct API represented oneof fields with a wrapper struct: +// +// var signedImg *accountpb.SignedImage +// profile := &accountpb.Profile{ +// // The Avatar oneof will be set, with an empty SignedImage. +// Avatar: &accountpb.Profile_SignedImage{signedImg}, +// } +// +// The new Opaque API treats oneof fields like regular fields, there are no more +// wrapper structs: +// +// var signedImg *accountpb.SignedImage +// profile := &accountpb.Profile{} +// profile.SetSignedImage(signedImg) +// +// For convenience, the Opaque API also offers Builders, which allow for a +// direct translation of struct initialization. However, because Builders use +// nilness to represent field presence (but there is no non-nil wrapper struct +// anymore), Builders cannot distinguish between an unset oneof and a set oneof +// with nil message. The above code would need to be translated with help of the +// ValueOrDefault function to retain the same behavior: +// +// var signedImg *accountpb.SignedImage +// return &accountpb.Profile_builder{ +// SignedImage: proto.ValueOrDefault(signedImg), +// }.Build() +func ValueOrDefault[T interface { + *P + Message +}, P any](val T) T { + if val == nil { + return T(new(P)) + } + return val +} + +// ValueOrDefaultBytes is like ValueOrDefault but for working with fields of +// type []byte. +func ValueOrDefaultBytes(val []byte) []byte { + if val == nil { + return []byte{} + } + return val +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/wrappers.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/wrappers.go new file mode 100644 index 0000000..653b12c --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/proto/wrappers.go @@ -0,0 +1,29 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +// Bool stores v in a new bool value and returns a pointer to it. +func Bool(v bool) *bool { return &v } + +// Int32 stores v in a new int32 value and returns a pointer to it. +func Int32(v int32) *int32 { return &v } + +// Int64 stores v in a new int64 value and returns a pointer to it. +func Int64(v int64) *int64 { return &v } + +// Float32 stores v in a new float32 value and returns a pointer to it. +func Float32(v float32) *float32 { return &v } + +// Float64 stores v in a new float64 value and returns a pointer to it. +func Float64(v float64) *float64 { return &v } + +// Uint32 stores v in a new uint32 value and returns a pointer to it. +func Uint32(v uint32) *uint32 { return &v } + +// Uint64 stores v in a new uint64 value and returns a pointer to it. +func Uint64(v uint64) *uint64 { return &v } + +// String stores v in a new string value and returns a pointer to it. +func String(v string) *string { return &v } diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protodesc/desc.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protodesc/desc.go new file mode 100644 index 0000000..823dbf3 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protodesc/desc.go @@ -0,0 +1,286 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package protodesc provides functionality for converting +// FileDescriptorProto messages to/from [protoreflect.FileDescriptor] values. +// +// The google.protobuf.FileDescriptorProto is a protobuf message that describes +// the type information for a .proto file in a form that is easily serializable. +// The [protoreflect.FileDescriptor] is a more structured representation of +// the FileDescriptorProto message where references and remote dependencies +// can be directly followed. +package protodesc + +import ( + "strings" + + "google.golang.org/protobuf/internal/editionssupport" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/internal/pragma" + "google.golang.org/protobuf/internal/strs" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" + + "google.golang.org/protobuf/types/descriptorpb" +) + +// Resolver is the resolver used by [NewFile] to resolve dependencies. +// The enums and messages provided must belong to some parent file, +// which is also registered. +// +// It is implemented by [protoregistry.Files]. +type Resolver interface { + FindFileByPath(string) (protoreflect.FileDescriptor, error) + FindDescriptorByName(protoreflect.FullName) (protoreflect.Descriptor, error) +} + +// FileOptions configures the construction of file descriptors. +type FileOptions struct { + pragma.NoUnkeyedLiterals + + // AllowUnresolvable configures New to permissively allow unresolvable + // file, enum, or message dependencies. Unresolved dependencies are replaced + // by placeholder equivalents. + // + // The following dependencies may be left unresolved: + // • Resolving an imported file. + // • Resolving the type for a message field or extension field. + // If the kind of the field is unknown, then a placeholder is used for both + // the Enum and Message accessors on the protoreflect.FieldDescriptor. + // • Resolving an enum value set as the default for an optional enum field. + // If unresolvable, the protoreflect.FieldDescriptor.Default is set to the + // first value in the associated enum (or zero if the also enum dependency + // is also unresolvable). The protoreflect.FieldDescriptor.DefaultEnumValue + // is populated with a placeholder. + // • Resolving the extended message type for an extension field. + // • Resolving the input or output message type for a service method. + // + // If the unresolved dependency uses a relative name, + // then the placeholder will contain an invalid FullName with a "*." prefix, + // indicating that the starting prefix of the full name is unknown. + AllowUnresolvable bool +} + +// NewFile creates a new [protoreflect.FileDescriptor] from the provided +// file descriptor message. See [FileOptions.New] for more information. +func NewFile(fd *descriptorpb.FileDescriptorProto, r Resolver) (protoreflect.FileDescriptor, error) { + return FileOptions{}.New(fd, r) +} + +// NewFiles creates a new [protoregistry.Files] from the provided +// FileDescriptorSet message. See [FileOptions.NewFiles] for more information. +func NewFiles(fd *descriptorpb.FileDescriptorSet) (*protoregistry.Files, error) { + return FileOptions{}.NewFiles(fd) +} + +// New creates a new [protoreflect.FileDescriptor] from the provided +// file descriptor message. The file must represent a valid proto file according +// to protobuf semantics. The returned descriptor is a deep copy of the input. +// +// Any imported files, enum types, or message types referenced in the file are +// resolved using the provided registry. When looking up an import file path, +// the path must be unique. The newly created file descriptor is not registered +// back into the provided file registry. +func (o FileOptions) New(fd *descriptorpb.FileDescriptorProto, r Resolver) (protoreflect.FileDescriptor, error) { + if r == nil { + r = (*protoregistry.Files)(nil) // empty resolver + } + + // Handle the file descriptor content. + f := &filedesc.File{L2: &filedesc.FileL2{}} + switch fd.GetSyntax() { + case "proto2", "": + f.L1.Syntax = protoreflect.Proto2 + f.L1.Edition = filedesc.EditionProto2 + case "proto3": + f.L1.Syntax = protoreflect.Proto3 + f.L1.Edition = filedesc.EditionProto3 + case "editions": + f.L1.Syntax = protoreflect.Editions + f.L1.Edition = fromEditionProto(fd.GetEdition()) + default: + return nil, errors.New("invalid syntax: %q", fd.GetSyntax()) + } + f.L1.Path = fd.GetName() + if f.L1.Path == "" { + return nil, errors.New("file path must be populated") + } + if f.L1.Syntax == protoreflect.Editions && (fd.GetEdition() < editionssupport.Minimum || fd.GetEdition() > editionssupport.Maximum) { + // Allow cmd/protoc-gen-go/testdata to use any edition for easier + // testing of upcoming edition features. + if !strings.HasPrefix(fd.GetName(), "cmd/protoc-gen-go/testdata/") { + return nil, errors.New("use of edition %v not yet supported by the Go Protobuf runtime", fd.GetEdition()) + } + } + f.L1.Package = protoreflect.FullName(fd.GetPackage()) + if !f.L1.Package.IsValid() && f.L1.Package != "" { + return nil, errors.New("invalid package: %q", f.L1.Package) + } + if opts := fd.GetOptions(); opts != nil { + opts = proto.Clone(opts).(*descriptorpb.FileOptions) + f.L2.Options = func() protoreflect.ProtoMessage { return opts } + } + initFileDescFromFeatureSet(f, fd.GetOptions().GetFeatures()) + + f.L2.Imports = make(filedesc.FileImports, len(fd.GetDependency())) + for _, i := range fd.GetPublicDependency() { + if !(0 <= i && int(i) < len(f.L2.Imports)) || f.L2.Imports[i].IsPublic { + return nil, errors.New("invalid or duplicate public import index: %d", i) + } + f.L2.Imports[i].IsPublic = true + } + imps := importSet{f.Path(): true} + for i, path := range fd.GetDependency() { + imp := &f.L2.Imports[i] + f, err := r.FindFileByPath(path) + if err == protoregistry.NotFound && o.AllowUnresolvable { + f = filedesc.PlaceholderFile(path) + } else if err != nil { + return nil, errors.New("could not resolve import %q: %v", path, err) + } + imp.FileDescriptor = f + + if imps[imp.Path()] { + return nil, errors.New("already imported %q", path) + } + imps[imp.Path()] = true + } + for i := range fd.GetDependency() { + imp := &f.L2.Imports[i] + imps.importPublic(imp.Imports()) + } + + // Handle source locations. + f.L2.Locations.File = f + for _, loc := range fd.GetSourceCodeInfo().GetLocation() { + var l protoreflect.SourceLocation + // TODO: Validate that the path points to an actual declaration? + l.Path = protoreflect.SourcePath(loc.GetPath()) + s := loc.GetSpan() + switch len(s) { + case 3: + l.StartLine, l.StartColumn, l.EndLine, l.EndColumn = int(s[0]), int(s[1]), int(s[0]), int(s[2]) + case 4: + l.StartLine, l.StartColumn, l.EndLine, l.EndColumn = int(s[0]), int(s[1]), int(s[2]), int(s[3]) + default: + return nil, errors.New("invalid span: %v", s) + } + // TODO: Validate that the span information is sensible? + // See https://github.com/protocolbuffers/protobuf/issues/6378. + if false && (l.EndLine < l.StartLine || l.StartLine < 0 || l.StartColumn < 0 || l.EndColumn < 0 || + (l.StartLine == l.EndLine && l.EndColumn <= l.StartColumn)) { + return nil, errors.New("invalid span: %v", s) + } + l.LeadingDetachedComments = loc.GetLeadingDetachedComments() + l.LeadingComments = loc.GetLeadingComments() + l.TrailingComments = loc.GetTrailingComments() + f.L2.Locations.List = append(f.L2.Locations.List, l) + } + + // Step 1: Allocate and derive the names for all declarations. + // This copies all fields from the descriptor proto except: + // google.protobuf.FieldDescriptorProto.type_name + // google.protobuf.FieldDescriptorProto.default_value + // google.protobuf.FieldDescriptorProto.oneof_index + // google.protobuf.FieldDescriptorProto.extendee + // google.protobuf.MethodDescriptorProto.input + // google.protobuf.MethodDescriptorProto.output + var err error + sb := new(strs.Builder) + r1 := make(descsByName) + if f.L1.Enums.List, err = r1.initEnumDeclarations(fd.GetEnumType(), f, sb); err != nil { + return nil, err + } + if f.L1.Messages.List, err = r1.initMessagesDeclarations(fd.GetMessageType(), f, sb); err != nil { + return nil, err + } + if f.L1.Extensions.List, err = r1.initExtensionDeclarations(fd.GetExtension(), f, sb); err != nil { + return nil, err + } + if f.L1.Services.List, err = r1.initServiceDeclarations(fd.GetService(), f, sb); err != nil { + return nil, err + } + + // Step 2: Resolve every dependency reference not handled by step 1. + r2 := &resolver{local: r1, remote: r, imports: imps, allowUnresolvable: o.AllowUnresolvable} + if err := r2.resolveMessageDependencies(f.L1.Messages.List, fd.GetMessageType()); err != nil { + return nil, err + } + if err := r2.resolveExtensionDependencies(f.L1.Extensions.List, fd.GetExtension()); err != nil { + return nil, err + } + if err := r2.resolveServiceDependencies(f.L1.Services.List, fd.GetService()); err != nil { + return nil, err + } + + // Step 3: Validate every enum, message, and extension declaration. + if err := validateEnumDeclarations(f.L1.Enums.List, fd.GetEnumType()); err != nil { + return nil, err + } + if err := validateMessageDeclarations(f, f.L1.Messages.List, fd.GetMessageType()); err != nil { + return nil, err + } + if err := validateExtensionDeclarations(f, f.L1.Extensions.List, fd.GetExtension()); err != nil { + return nil, err + } + + return f, nil +} + +type importSet map[string]bool + +func (is importSet) importPublic(imps protoreflect.FileImports) { + for i := 0; i < imps.Len(); i++ { + if imp := imps.Get(i); imp.IsPublic { + is[imp.Path()] = true + is.importPublic(imp.Imports()) + } + } +} + +// NewFiles creates a new [protoregistry.Files] from the provided +// FileDescriptorSet message. The descriptor set must include only +// valid files according to protobuf semantics. The returned descriptors +// are a deep copy of the input. +func (o FileOptions) NewFiles(fds *descriptorpb.FileDescriptorSet) (*protoregistry.Files, error) { + files := make(map[string]*descriptorpb.FileDescriptorProto) + for _, fd := range fds.File { + if _, ok := files[fd.GetName()]; ok { + return nil, errors.New("file appears multiple times: %q", fd.GetName()) + } + files[fd.GetName()] = fd + } + r := &protoregistry.Files{} + for _, fd := range files { + if err := o.addFileDeps(r, fd, files); err != nil { + return nil, err + } + } + return r, nil +} +func (o FileOptions) addFileDeps(r *protoregistry.Files, fd *descriptorpb.FileDescriptorProto, files map[string]*descriptorpb.FileDescriptorProto) error { + // Set the entry to nil while descending into a file's dependencies to detect cycles. + files[fd.GetName()] = nil + for _, dep := range fd.Dependency { + depfd, ok := files[dep] + if depfd == nil { + if ok { + return errors.New("import cycle in file: %q", dep) + } + continue + } + if err := o.addFileDeps(r, depfd, files); err != nil { + return err + } + } + // Delete the entry once dependencies are processed. + delete(files, fd.GetName()) + f, err := o.New(fd, r) + if err != nil { + return err + } + return r.RegisterFile(f) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go new file mode 100644 index 0000000..9da3499 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go @@ -0,0 +1,288 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protodesc + +import ( + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/internal/strs" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" + + "google.golang.org/protobuf/types/descriptorpb" +) + +type descsByName map[protoreflect.FullName]protoreflect.Descriptor + +func (r descsByName) initEnumDeclarations(eds []*descriptorpb.EnumDescriptorProto, parent protoreflect.Descriptor, sb *strs.Builder) (es []filedesc.Enum, err error) { + es = make([]filedesc.Enum, len(eds)) // allocate up-front to ensure stable pointers + for i, ed := range eds { + e := &es[i] + e.L2 = new(filedesc.EnumL2) + if e.L0, err = r.makeBase(e, parent, ed.GetName(), i, sb); err != nil { + return nil, err + } + if opts := ed.GetOptions(); opts != nil { + opts = proto.Clone(opts).(*descriptorpb.EnumOptions) + e.L2.Options = func() protoreflect.ProtoMessage { return opts } + } + e.L1.EditionFeatures = mergeEditionFeatures(parent, ed.GetOptions().GetFeatures()) + for _, s := range ed.GetReservedName() { + e.L2.ReservedNames.List = append(e.L2.ReservedNames.List, protoreflect.Name(s)) + } + for _, rr := range ed.GetReservedRange() { + e.L2.ReservedRanges.List = append(e.L2.ReservedRanges.List, [2]protoreflect.EnumNumber{ + protoreflect.EnumNumber(rr.GetStart()), + protoreflect.EnumNumber(rr.GetEnd()), + }) + } + if e.L2.Values.List, err = r.initEnumValuesFromDescriptorProto(ed.GetValue(), e, sb); err != nil { + return nil, err + } + } + return es, nil +} + +func (r descsByName) initEnumValuesFromDescriptorProto(vds []*descriptorpb.EnumValueDescriptorProto, parent protoreflect.Descriptor, sb *strs.Builder) (vs []filedesc.EnumValue, err error) { + vs = make([]filedesc.EnumValue, len(vds)) // allocate up-front to ensure stable pointers + for i, vd := range vds { + v := &vs[i] + if v.L0, err = r.makeBase(v, parent, vd.GetName(), i, sb); err != nil { + return nil, err + } + if opts := vd.GetOptions(); opts != nil { + opts = proto.Clone(opts).(*descriptorpb.EnumValueOptions) + v.L1.Options = func() protoreflect.ProtoMessage { return opts } + } + v.L1.Number = protoreflect.EnumNumber(vd.GetNumber()) + } + return vs, nil +} + +func (r descsByName) initMessagesDeclarations(mds []*descriptorpb.DescriptorProto, parent protoreflect.Descriptor, sb *strs.Builder) (ms []filedesc.Message, err error) { + ms = make([]filedesc.Message, len(mds)) // allocate up-front to ensure stable pointers + for i, md := range mds { + m := &ms[i] + m.L2 = new(filedesc.MessageL2) + if m.L0, err = r.makeBase(m, parent, md.GetName(), i, sb); err != nil { + return nil, err + } + m.L1.EditionFeatures = mergeEditionFeatures(parent, md.GetOptions().GetFeatures()) + if opts := md.GetOptions(); opts != nil { + opts = proto.Clone(opts).(*descriptorpb.MessageOptions) + m.L2.Options = func() protoreflect.ProtoMessage { return opts } + m.L1.IsMapEntry = opts.GetMapEntry() + m.L1.IsMessageSet = opts.GetMessageSetWireFormat() + } + for _, s := range md.GetReservedName() { + m.L2.ReservedNames.List = append(m.L2.ReservedNames.List, protoreflect.Name(s)) + } + for _, rr := range md.GetReservedRange() { + m.L2.ReservedRanges.List = append(m.L2.ReservedRanges.List, [2]protoreflect.FieldNumber{ + protoreflect.FieldNumber(rr.GetStart()), + protoreflect.FieldNumber(rr.GetEnd()), + }) + } + for _, xr := range md.GetExtensionRange() { + m.L2.ExtensionRanges.List = append(m.L2.ExtensionRanges.List, [2]protoreflect.FieldNumber{ + protoreflect.FieldNumber(xr.GetStart()), + protoreflect.FieldNumber(xr.GetEnd()), + }) + var optsFunc func() protoreflect.ProtoMessage + if opts := xr.GetOptions(); opts != nil { + opts = proto.Clone(opts).(*descriptorpb.ExtensionRangeOptions) + optsFunc = func() protoreflect.ProtoMessage { return opts } + } + m.L2.ExtensionRangeOptions = append(m.L2.ExtensionRangeOptions, optsFunc) + } + if m.L2.Fields.List, err = r.initFieldsFromDescriptorProto(md.GetField(), m, sb); err != nil { + return nil, err + } + if m.L2.Oneofs.List, err = r.initOneofsFromDescriptorProto(md.GetOneofDecl(), m, sb); err != nil { + return nil, err + } + if m.L1.Enums.List, err = r.initEnumDeclarations(md.GetEnumType(), m, sb); err != nil { + return nil, err + } + if m.L1.Messages.List, err = r.initMessagesDeclarations(md.GetNestedType(), m, sb); err != nil { + return nil, err + } + if m.L1.Extensions.List, err = r.initExtensionDeclarations(md.GetExtension(), m, sb); err != nil { + return nil, err + } + } + return ms, nil +} + +// canBePacked returns whether the field can use packed encoding: +// https://protobuf.dev/programming-guides/encoding/#packed +func canBePacked(fd *descriptorpb.FieldDescriptorProto) bool { + if fd.GetLabel() != descriptorpb.FieldDescriptorProto_LABEL_REPEATED { + return false // not a repeated field + } + + switch protoreflect.Kind(fd.GetType()) { + case protoreflect.MessageKind, protoreflect.GroupKind: + return false // not a scalar type field + + case protoreflect.StringKind, protoreflect.BytesKind: + // string and bytes can explicitly not be declared as packed, + // see https://protobuf.dev/programming-guides/encoding/#packed + return false + + default: + return true + } +} + +func (r descsByName) initFieldsFromDescriptorProto(fds []*descriptorpb.FieldDescriptorProto, parent protoreflect.Descriptor, sb *strs.Builder) (fs []filedesc.Field, err error) { + fs = make([]filedesc.Field, len(fds)) // allocate up-front to ensure stable pointers + for i, fd := range fds { + f := &fs[i] + if f.L0, err = r.makeBase(f, parent, fd.GetName(), i, sb); err != nil { + return nil, err + } + f.L1.EditionFeatures = mergeEditionFeatures(parent, fd.GetOptions().GetFeatures()) + f.L1.IsProto3Optional = fd.GetProto3Optional() + if opts := fd.GetOptions(); opts != nil { + opts = proto.Clone(opts).(*descriptorpb.FieldOptions) + f.L1.Options = func() protoreflect.ProtoMessage { return opts } + f.L1.IsLazy = opts.GetLazy() + if opts.Packed != nil { + f.L1.EditionFeatures.IsPacked = opts.GetPacked() + } + } + f.L1.Number = protoreflect.FieldNumber(fd.GetNumber()) + f.L1.Cardinality = protoreflect.Cardinality(fd.GetLabel()) + if fd.Type != nil { + f.L1.Kind = protoreflect.Kind(fd.GetType()) + } + if fd.JsonName != nil { + f.L1.StringName.InitJSON(fd.GetJsonName()) + } + + if f.L1.EditionFeatures.IsLegacyRequired { + f.L1.Cardinality = protoreflect.Required + } + + if f.L1.Kind == protoreflect.MessageKind && f.L1.EditionFeatures.IsDelimitedEncoded { + f.L1.Kind = protoreflect.GroupKind + } + } + return fs, nil +} + +func (r descsByName) initOneofsFromDescriptorProto(ods []*descriptorpb.OneofDescriptorProto, parent protoreflect.Descriptor, sb *strs.Builder) (os []filedesc.Oneof, err error) { + os = make([]filedesc.Oneof, len(ods)) // allocate up-front to ensure stable pointers + for i, od := range ods { + o := &os[i] + if o.L0, err = r.makeBase(o, parent, od.GetName(), i, sb); err != nil { + return nil, err + } + o.L1.EditionFeatures = mergeEditionFeatures(parent, od.GetOptions().GetFeatures()) + if opts := od.GetOptions(); opts != nil { + opts = proto.Clone(opts).(*descriptorpb.OneofOptions) + o.L1.Options = func() protoreflect.ProtoMessage { return opts } + } + } + return os, nil +} + +func (r descsByName) initExtensionDeclarations(xds []*descriptorpb.FieldDescriptorProto, parent protoreflect.Descriptor, sb *strs.Builder) (xs []filedesc.Extension, err error) { + xs = make([]filedesc.Extension, len(xds)) // allocate up-front to ensure stable pointers + for i, xd := range xds { + x := &xs[i] + x.L2 = new(filedesc.ExtensionL2) + if x.L0, err = r.makeBase(x, parent, xd.GetName(), i, sb); err != nil { + return nil, err + } + x.L1.EditionFeatures = mergeEditionFeatures(parent, xd.GetOptions().GetFeatures()) + if opts := xd.GetOptions(); opts != nil { + opts = proto.Clone(opts).(*descriptorpb.FieldOptions) + x.L2.Options = func() protoreflect.ProtoMessage { return opts } + if opts.Packed != nil { + x.L1.EditionFeatures.IsPacked = opts.GetPacked() + } + } + x.L1.Number = protoreflect.FieldNumber(xd.GetNumber()) + x.L1.Cardinality = protoreflect.Cardinality(xd.GetLabel()) + if xd.Type != nil { + x.L1.Kind = protoreflect.Kind(xd.GetType()) + } + if xd.JsonName != nil { + x.L2.StringName.InitJSON(xd.GetJsonName()) + } + if x.L1.Kind == protoreflect.MessageKind && x.L1.EditionFeatures.IsDelimitedEncoded { + x.L1.Kind = protoreflect.GroupKind + } + } + return xs, nil +} + +func (r descsByName) initServiceDeclarations(sds []*descriptorpb.ServiceDescriptorProto, parent protoreflect.Descriptor, sb *strs.Builder) (ss []filedesc.Service, err error) { + ss = make([]filedesc.Service, len(sds)) // allocate up-front to ensure stable pointers + for i, sd := range sds { + s := &ss[i] + s.L2 = new(filedesc.ServiceL2) + if s.L0, err = r.makeBase(s, parent, sd.GetName(), i, sb); err != nil { + return nil, err + } + if opts := sd.GetOptions(); opts != nil { + opts = proto.Clone(opts).(*descriptorpb.ServiceOptions) + s.L2.Options = func() protoreflect.ProtoMessage { return opts } + } + if s.L2.Methods.List, err = r.initMethodsFromDescriptorProto(sd.GetMethod(), s, sb); err != nil { + return nil, err + } + } + return ss, nil +} + +func (r descsByName) initMethodsFromDescriptorProto(mds []*descriptorpb.MethodDescriptorProto, parent protoreflect.Descriptor, sb *strs.Builder) (ms []filedesc.Method, err error) { + ms = make([]filedesc.Method, len(mds)) // allocate up-front to ensure stable pointers + for i, md := range mds { + m := &ms[i] + if m.L0, err = r.makeBase(m, parent, md.GetName(), i, sb); err != nil { + return nil, err + } + if opts := md.GetOptions(); opts != nil { + opts = proto.Clone(opts).(*descriptorpb.MethodOptions) + m.L1.Options = func() protoreflect.ProtoMessage { return opts } + } + m.L1.IsStreamingClient = md.GetClientStreaming() + m.L1.IsStreamingServer = md.GetServerStreaming() + } + return ms, nil +} + +func (r descsByName) makeBase(child, parent protoreflect.Descriptor, name string, idx int, sb *strs.Builder) (filedesc.BaseL0, error) { + if !protoreflect.Name(name).IsValid() { + return filedesc.BaseL0{}, errors.New("descriptor %q has an invalid nested name: %q", parent.FullName(), name) + } + + // Derive the full name of the child. + // Note that enum values are a sibling to the enum parent in the namespace. + var fullName protoreflect.FullName + if _, ok := parent.(protoreflect.EnumDescriptor); ok { + fullName = sb.AppendFullName(parent.FullName().Parent(), protoreflect.Name(name)) + } else { + fullName = sb.AppendFullName(parent.FullName(), protoreflect.Name(name)) + } + if _, ok := r[fullName]; ok { + return filedesc.BaseL0{}, errors.New("descriptor %q already declared", fullName) + } + r[fullName] = child + + // TODO: Verify that the full name does not already exist in the resolver? + // This is not as critical since most usages of NewFile will register + // the created file back into the registry, which will perform this check. + + return filedesc.BaseL0{ + FullName: fullName, + ParentFile: parent.ParentFile().(*filedesc.File), + Parent: parent, + Index: idx, + }, nil +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protodesc/desc_resolve.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protodesc/desc_resolve.go new file mode 100644 index 0000000..ff69243 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protodesc/desc_resolve.go @@ -0,0 +1,291 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protodesc + +import ( + "google.golang.org/protobuf/internal/encoding/defval" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" + + "google.golang.org/protobuf/types/descriptorpb" +) + +// resolver is a wrapper around a local registry of declarations within the file +// and the remote resolver. The remote resolver is restricted to only return +// descriptors that have been imported. +type resolver struct { + local descsByName + remote Resolver + imports importSet + + allowUnresolvable bool +} + +func (r *resolver) resolveMessageDependencies(ms []filedesc.Message, mds []*descriptorpb.DescriptorProto) (err error) { + for i, md := range mds { + m := &ms[i] + for j, fd := range md.GetField() { + f := &m.L2.Fields.List[j] + if f.L1.Cardinality == protoreflect.Required { + m.L2.RequiredNumbers.List = append(m.L2.RequiredNumbers.List, f.L1.Number) + } + if fd.OneofIndex != nil { + k := int(fd.GetOneofIndex()) + if !(0 <= k && k < len(md.GetOneofDecl())) { + return errors.New("message field %q has an invalid oneof index: %d", f.FullName(), k) + } + o := &m.L2.Oneofs.List[k] + f.L1.ContainingOneof = o + o.L1.Fields.List = append(o.L1.Fields.List, f) + } + + if f.L1.Kind, f.L1.Enum, f.L1.Message, err = r.findTarget(f.Kind(), f.Parent().FullName(), partialName(fd.GetTypeName())); err != nil { + return errors.New("message field %q cannot resolve type: %v", f.FullName(), err) + } + if f.L1.Kind == protoreflect.GroupKind && (f.IsMap() || f.IsMapEntry()) { + // A map field might inherit delimited encoding from a file-wide default feature. + // But maps never actually use delimited encoding. (At least for now...) + f.L1.Kind = protoreflect.MessageKind + } + if fd.DefaultValue != nil { + v, ev, err := unmarshalDefault(fd.GetDefaultValue(), f, r.allowUnresolvable) + if err != nil { + return errors.New("message field %q has invalid default: %v", f.FullName(), err) + } + f.L1.Default = filedesc.DefaultValue(v, ev) + } + } + + if err := r.resolveMessageDependencies(m.L1.Messages.List, md.GetNestedType()); err != nil { + return err + } + if err := r.resolveExtensionDependencies(m.L1.Extensions.List, md.GetExtension()); err != nil { + return err + } + } + return nil +} + +func (r *resolver) resolveExtensionDependencies(xs []filedesc.Extension, xds []*descriptorpb.FieldDescriptorProto) (err error) { + for i, xd := range xds { + x := &xs[i] + if x.L1.Extendee, err = r.findMessageDescriptor(x.Parent().FullName(), partialName(xd.GetExtendee())); err != nil { + return errors.New("extension field %q cannot resolve extendee: %v", x.FullName(), err) + } + if x.L1.Kind, x.L2.Enum, x.L2.Message, err = r.findTarget(x.Kind(), x.Parent().FullName(), partialName(xd.GetTypeName())); err != nil { + return errors.New("extension field %q cannot resolve type: %v", x.FullName(), err) + } + if xd.DefaultValue != nil { + v, ev, err := unmarshalDefault(xd.GetDefaultValue(), x, r.allowUnresolvable) + if err != nil { + return errors.New("extension field %q has invalid default: %v", x.FullName(), err) + } + x.L2.Default = filedesc.DefaultValue(v, ev) + } + } + return nil +} + +func (r *resolver) resolveServiceDependencies(ss []filedesc.Service, sds []*descriptorpb.ServiceDescriptorProto) (err error) { + for i, sd := range sds { + s := &ss[i] + for j, md := range sd.GetMethod() { + m := &s.L2.Methods.List[j] + m.L1.Input, err = r.findMessageDescriptor(m.Parent().FullName(), partialName(md.GetInputType())) + if err != nil { + return errors.New("service method %q cannot resolve input: %v", m.FullName(), err) + } + m.L1.Output, err = r.findMessageDescriptor(s.FullName(), partialName(md.GetOutputType())) + if err != nil { + return errors.New("service method %q cannot resolve output: %v", m.FullName(), err) + } + } + } + return nil +} + +// findTarget finds an enum or message descriptor if k is an enum, message, +// group, or unknown. If unknown, and the name could be resolved, the kind +// returned kind is set based on the type of the resolved descriptor. +func (r *resolver) findTarget(k protoreflect.Kind, scope protoreflect.FullName, ref partialName) (protoreflect.Kind, protoreflect.EnumDescriptor, protoreflect.MessageDescriptor, error) { + switch k { + case protoreflect.EnumKind: + ed, err := r.findEnumDescriptor(scope, ref) + if err != nil { + return 0, nil, nil, err + } + return k, ed, nil, nil + case protoreflect.MessageKind, protoreflect.GroupKind: + md, err := r.findMessageDescriptor(scope, ref) + if err != nil { + return 0, nil, nil, err + } + return k, nil, md, nil + case 0: + // Handle unspecified kinds (possible with parsers that operate + // on a per-file basis without knowledge of dependencies). + d, err := r.findDescriptor(scope, ref) + if err == protoregistry.NotFound && r.allowUnresolvable { + return k, filedesc.PlaceholderEnum(ref.FullName()), filedesc.PlaceholderMessage(ref.FullName()), nil + } else if err == protoregistry.NotFound { + return 0, nil, nil, errors.New("%q not found", ref.FullName()) + } else if err != nil { + return 0, nil, nil, err + } + switch d := d.(type) { + case protoreflect.EnumDescriptor: + return protoreflect.EnumKind, d, nil, nil + case protoreflect.MessageDescriptor: + return protoreflect.MessageKind, nil, d, nil + default: + return 0, nil, nil, errors.New("unknown kind") + } + default: + if ref != "" { + return 0, nil, nil, errors.New("target name cannot be specified for %v", k) + } + if !k.IsValid() { + return 0, nil, nil, errors.New("invalid kind: %d", k) + } + return k, nil, nil, nil + } +} + +// findDescriptor finds the descriptor by name, +// which may be a relative name within some scope. +// +// Suppose the scope was "fizz.buzz" and the reference was "Foo.Bar", +// then the following full names are searched: +// - fizz.buzz.Foo.Bar +// - fizz.Foo.Bar +// - Foo.Bar +func (r *resolver) findDescriptor(scope protoreflect.FullName, ref partialName) (protoreflect.Descriptor, error) { + if !ref.IsValid() { + return nil, errors.New("invalid name reference: %q", ref) + } + if ref.IsFull() { + scope, ref = "", ref[1:] + } + var foundButNotImported protoreflect.Descriptor + for { + // Derive the full name to search. + s := protoreflect.FullName(ref) + if scope != "" { + s = scope + "." + s + } + + // Check the current file for the descriptor. + if d, ok := r.local[s]; ok { + return d, nil + } + + // Check the remote registry for the descriptor. + d, err := r.remote.FindDescriptorByName(s) + if err == nil { + // Only allow descriptors covered by one of the imports. + if r.imports[d.ParentFile().Path()] { + return d, nil + } + foundButNotImported = d + } else if err != protoregistry.NotFound { + return nil, errors.Wrap(err, "%q", s) + } + + // Continue on at a higher level of scoping. + if scope == "" { + if d := foundButNotImported; d != nil { + return nil, errors.New("resolved %q, but %q is not imported", d.FullName(), d.ParentFile().Path()) + } + return nil, protoregistry.NotFound + } + scope = scope.Parent() + } +} + +func (r *resolver) findEnumDescriptor(scope protoreflect.FullName, ref partialName) (protoreflect.EnumDescriptor, error) { + d, err := r.findDescriptor(scope, ref) + if err == protoregistry.NotFound && r.allowUnresolvable { + return filedesc.PlaceholderEnum(ref.FullName()), nil + } else if err == protoregistry.NotFound { + return nil, errors.New("%q not found", ref.FullName()) + } else if err != nil { + return nil, err + } + ed, ok := d.(protoreflect.EnumDescriptor) + if !ok { + return nil, errors.New("resolved %q, but it is not an enum", d.FullName()) + } + return ed, nil +} + +func (r *resolver) findMessageDescriptor(scope protoreflect.FullName, ref partialName) (protoreflect.MessageDescriptor, error) { + d, err := r.findDescriptor(scope, ref) + if err == protoregistry.NotFound && r.allowUnresolvable { + return filedesc.PlaceholderMessage(ref.FullName()), nil + } else if err == protoregistry.NotFound { + return nil, errors.New("%q not found", ref.FullName()) + } else if err != nil { + return nil, err + } + md, ok := d.(protoreflect.MessageDescriptor) + if !ok { + return nil, errors.New("resolved %q, but it is not an message", d.FullName()) + } + return md, nil +} + +// partialName is the partial name. A leading dot means that the name is full, +// otherwise the name is relative to some current scope. +// See google.protobuf.FieldDescriptorProto.type_name. +type partialName string + +func (s partialName) IsFull() bool { + return len(s) > 0 && s[0] == '.' +} + +func (s partialName) IsValid() bool { + if s.IsFull() { + return protoreflect.FullName(s[1:]).IsValid() + } + return protoreflect.FullName(s).IsValid() +} + +const unknownPrefix = "*." + +// FullName converts the partial name to a full name on a best-effort basis. +// If relative, it creates an invalid full name, using a "*." prefix +// to indicate that the start of the full name is unknown. +func (s partialName) FullName() protoreflect.FullName { + if s.IsFull() { + return protoreflect.FullName(s[1:]) + } + return protoreflect.FullName(unknownPrefix + s) +} + +func unmarshalDefault(s string, fd protoreflect.FieldDescriptor, allowUnresolvable bool) (protoreflect.Value, protoreflect.EnumValueDescriptor, error) { + var evs protoreflect.EnumValueDescriptors + if fd.Enum() != nil { + evs = fd.Enum().Values() + } + v, ev, err := defval.Unmarshal(s, fd.Kind(), evs, defval.Descriptor) + if err != nil && allowUnresolvable && evs != nil && protoreflect.Name(s).IsValid() { + v = protoreflect.ValueOfEnum(0) + if evs.Len() > 0 { + v = protoreflect.ValueOfEnum(evs.Get(0).Number()) + } + ev = filedesc.PlaceholderEnumValue(fd.Enum().FullName().Parent().Append(protoreflect.Name(s))) + } else if err != nil { + return v, ev, err + } + if !fd.HasPresence() { + return v, ev, errors.New("cannot be specified with implicit field presence") + } + if fd.Kind() == protoreflect.MessageKind || fd.Kind() == protoreflect.GroupKind || fd.Cardinality() == protoreflect.Repeated { + return v, ev, errors.New("cannot be specified on composite types") + } + return v, ev, nil +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protodesc/desc_validate.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protodesc/desc_validate.go new file mode 100644 index 0000000..c343d92 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protodesc/desc_validate.go @@ -0,0 +1,359 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protodesc + +import ( + "strings" + "unicode" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/internal/flags" + "google.golang.org/protobuf/internal/genid" + "google.golang.org/protobuf/internal/strs" + "google.golang.org/protobuf/reflect/protoreflect" + + "google.golang.org/protobuf/types/descriptorpb" +) + +func validateEnumDeclarations(es []filedesc.Enum, eds []*descriptorpb.EnumDescriptorProto) error { + for i, ed := range eds { + e := &es[i] + if err := e.L2.ReservedNames.CheckValid(); err != nil { + return errors.New("enum %q reserved names has %v", e.FullName(), err) + } + if err := e.L2.ReservedRanges.CheckValid(); err != nil { + return errors.New("enum %q reserved ranges has %v", e.FullName(), err) + } + if len(ed.GetValue()) == 0 { + return errors.New("enum %q must contain at least one value declaration", e.FullName()) + } + allowAlias := ed.GetOptions().GetAllowAlias() + foundAlias := false + for i := 0; i < e.Values().Len(); i++ { + v1 := e.Values().Get(i) + if v2 := e.Values().ByNumber(v1.Number()); v1 != v2 { + foundAlias = true + if !allowAlias { + return errors.New("enum %q has conflicting non-aliased values on number %d: %q with %q", e.FullName(), v1.Number(), v1.Name(), v2.Name()) + } + } + } + if allowAlias && !foundAlias { + return errors.New("enum %q allows aliases, but none were found", e.FullName()) + } + if !e.IsClosed() { + if v := e.Values().Get(0); v.Number() != 0 { + return errors.New("enum %q using open semantics must have zero number for the first value", v.FullName()) + } + // Verify that value names in open enums do not conflict if the + // case-insensitive prefix is removed. + // See protoc v3.8.0: src/google/protobuf/descriptor.cc:4991-5055 + names := map[string]protoreflect.EnumValueDescriptor{} + prefix := strings.Replace(strings.ToLower(string(e.Name())), "_", "", -1) + for i := 0; i < e.Values().Len(); i++ { + v1 := e.Values().Get(i) + s := strs.EnumValueName(strs.TrimEnumPrefix(string(v1.Name()), prefix)) + if v2, ok := names[s]; ok && v1.Number() != v2.Number() { + return errors.New("enum %q using open semantics has conflict: %q with %q", e.FullName(), v1.Name(), v2.Name()) + } + names[s] = v1 + } + } + + for j, vd := range ed.GetValue() { + v := &e.L2.Values.List[j] + if vd.Number == nil { + return errors.New("enum value %q must have a specified number", v.FullName()) + } + if e.L2.ReservedNames.Has(v.Name()) { + return errors.New("enum value %q must not use reserved name", v.FullName()) + } + if e.L2.ReservedRanges.Has(v.Number()) { + return errors.New("enum value %q must not use reserved number %d", v.FullName(), v.Number()) + } + } + } + return nil +} + +func validateMessageDeclarations(file *filedesc.File, ms []filedesc.Message, mds []*descriptorpb.DescriptorProto) error { + // There are a few limited exceptions only for proto3 + isProto3 := file.L1.Edition == fromEditionProto(descriptorpb.Edition_EDITION_PROTO3) + for i, md := range mds { + m := &ms[i] + + // Handle the message descriptor itself. + isMessageSet := md.GetOptions().GetMessageSetWireFormat() + if err := m.L2.ReservedNames.CheckValid(); err != nil { + return errors.New("message %q reserved names has %v", m.FullName(), err) + } + if err := m.L2.ReservedRanges.CheckValid(isMessageSet); err != nil { + return errors.New("message %q reserved ranges has %v", m.FullName(), err) + } + if err := m.L2.ExtensionRanges.CheckValid(isMessageSet); err != nil { + return errors.New("message %q extension ranges has %v", m.FullName(), err) + } + if err := (*filedesc.FieldRanges).CheckOverlap(&m.L2.ReservedRanges, &m.L2.ExtensionRanges); err != nil { + return errors.New("message %q reserved and extension ranges has %v", m.FullName(), err) + } + for i := 0; i < m.Fields().Len(); i++ { + f1 := m.Fields().Get(i) + if f2 := m.Fields().ByNumber(f1.Number()); f1 != f2 { + return errors.New("message %q has conflicting fields: %q with %q", m.FullName(), f1.Name(), f2.Name()) + } + } + if isMessageSet && !flags.ProtoLegacy { + return errors.New("message %q is a MessageSet, which is a legacy proto1 feature that is no longer supported", m.FullName()) + } + if isMessageSet && (isProto3 || m.Fields().Len() > 0 || m.ExtensionRanges().Len() == 0) { + return errors.New("message %q is an invalid proto1 MessageSet", m.FullName()) + } + if isProto3 { + if m.ExtensionRanges().Len() > 0 { + return errors.New("message %q using proto3 semantics cannot have extension ranges", m.FullName()) + } + } + + for j, fd := range md.GetField() { + f := &m.L2.Fields.List[j] + if m.L2.ReservedNames.Has(f.Name()) { + return errors.New("message field %q must not use reserved name", f.FullName()) + } + if !f.Number().IsValid() { + return errors.New("message field %q has an invalid number: %d", f.FullName(), f.Number()) + } + if !f.Cardinality().IsValid() { + return errors.New("message field %q has an invalid cardinality: %d", f.FullName(), f.Cardinality()) + } + if m.L2.ReservedRanges.Has(f.Number()) { + return errors.New("message field %q must not use reserved number %d", f.FullName(), f.Number()) + } + if m.L2.ExtensionRanges.Has(f.Number()) { + return errors.New("message field %q with number %d in extension range", f.FullName(), f.Number()) + } + if fd.Extendee != nil { + return errors.New("message field %q may not have extendee: %q", f.FullName(), fd.GetExtendee()) + } + if f.L1.IsProto3Optional { + if !isProto3 { + return errors.New("message field %q under proto3 optional semantics must be specified in the proto3 syntax", f.FullName()) + } + if f.Cardinality() != protoreflect.Optional { + return errors.New("message field %q under proto3 optional semantics must have optional cardinality", f.FullName()) + } + if f.ContainingOneof() != nil && f.ContainingOneof().Fields().Len() != 1 { + return errors.New("message field %q under proto3 optional semantics must be within a single element oneof", f.FullName()) + } + } + if f.IsPacked() && !isPackable(f) { + return errors.New("message field %q is not packable", f.FullName()) + } + if err := checkValidGroup(file, f); err != nil { + return errors.New("message field %q is an invalid group: %v", f.FullName(), err) + } + if err := checkValidMap(f); err != nil { + return errors.New("message field %q is an invalid map: %v", f.FullName(), err) + } + if isProto3 { + if f.Cardinality() == protoreflect.Required { + return errors.New("message field %q using proto3 semantics cannot be required", f.FullName()) + } + if f.Enum() != nil && !f.Enum().IsPlaceholder() && f.Enum().IsClosed() { + return errors.New("message field %q using proto3 semantics may only depend on open enums", f.FullName()) + } + } + if f.Cardinality() == protoreflect.Optional && !f.HasPresence() && f.Enum() != nil && !f.Enum().IsPlaceholder() && f.Enum().IsClosed() { + return errors.New("message field %q with implicit presence may only use open enums", f.FullName()) + } + } + seenSynthetic := false // synthetic oneofs for proto3 optional must come after real oneofs + for j := range md.GetOneofDecl() { + o := &m.L2.Oneofs.List[j] + if o.Fields().Len() == 0 { + return errors.New("message oneof %q must contain at least one field declaration", o.FullName()) + } + if n := o.Fields().Len(); n-1 != (o.Fields().Get(n-1).Index() - o.Fields().Get(0).Index()) { + return errors.New("message oneof %q must have consecutively declared fields", o.FullName()) + } + + if o.IsSynthetic() { + seenSynthetic = true + continue + } + if !o.IsSynthetic() && seenSynthetic { + return errors.New("message oneof %q must be declared before synthetic oneofs", o.FullName()) + } + + for i := 0; i < o.Fields().Len(); i++ { + f := o.Fields().Get(i) + if f.Cardinality() != protoreflect.Optional { + return errors.New("message field %q belongs in a oneof and must be optional", f.FullName()) + } + } + } + + if err := validateEnumDeclarations(m.L1.Enums.List, md.GetEnumType()); err != nil { + return err + } + if err := validateMessageDeclarations(file, m.L1.Messages.List, md.GetNestedType()); err != nil { + return err + } + if err := validateExtensionDeclarations(file, m.L1.Extensions.List, md.GetExtension()); err != nil { + return err + } + } + return nil +} + +func validateExtensionDeclarations(f *filedesc.File, xs []filedesc.Extension, xds []*descriptorpb.FieldDescriptorProto) error { + for i, xd := range xds { + x := &xs[i] + // NOTE: Avoid using the IsValid method since extensions to MessageSet + // may have a field number higher than normal. This check only verifies + // that the number is not negative or reserved. We check again later + // if we know that the extendee is definitely not a MessageSet. + if n := x.Number(); n < 0 || (protowire.FirstReservedNumber <= n && n <= protowire.LastReservedNumber) { + return errors.New("extension field %q has an invalid number: %d", x.FullName(), x.Number()) + } + if !x.Cardinality().IsValid() || x.Cardinality() == protoreflect.Required { + return errors.New("extension field %q has an invalid cardinality: %d", x.FullName(), x.Cardinality()) + } + if xd.JsonName != nil { + // A bug in older versions of protoc would always populate the + // "json_name" option for extensions when it is meaningless. + // When it did so, it would always use the camel-cased field name. + if xd.GetJsonName() != strs.JSONCamelCase(string(x.Name())) { + return errors.New("extension field %q may not have an explicitly set JSON name: %q", x.FullName(), xd.GetJsonName()) + } + } + if xd.OneofIndex != nil { + return errors.New("extension field %q may not be part of a oneof", x.FullName()) + } + if md := x.ContainingMessage(); !md.IsPlaceholder() { + if !md.ExtensionRanges().Has(x.Number()) { + return errors.New("extension field %q extends %q with non-extension field number: %d", x.FullName(), md.FullName(), x.Number()) + } + isMessageSet := md.Options().(*descriptorpb.MessageOptions).GetMessageSetWireFormat() + if isMessageSet && !isOptionalMessage(x) { + return errors.New("extension field %q extends MessageSet and must be an optional message", x.FullName()) + } + if !isMessageSet && !x.Number().IsValid() { + return errors.New("extension field %q has an invalid number: %d", x.FullName(), x.Number()) + } + } + if x.IsPacked() && !isPackable(x) { + return errors.New("extension field %q is not packable", x.FullName()) + } + if err := checkValidGroup(f, x); err != nil { + return errors.New("extension field %q is an invalid group: %v", x.FullName(), err) + } + if md := x.Message(); md != nil && md.IsMapEntry() { + return errors.New("extension field %q cannot be a map entry", x.FullName()) + } + if f.L1.Edition == fromEditionProto(descriptorpb.Edition_EDITION_PROTO3) { + switch x.ContainingMessage().FullName() { + case (*descriptorpb.FileOptions)(nil).ProtoReflect().Descriptor().FullName(): + case (*descriptorpb.EnumOptions)(nil).ProtoReflect().Descriptor().FullName(): + case (*descriptorpb.EnumValueOptions)(nil).ProtoReflect().Descriptor().FullName(): + case (*descriptorpb.MessageOptions)(nil).ProtoReflect().Descriptor().FullName(): + case (*descriptorpb.FieldOptions)(nil).ProtoReflect().Descriptor().FullName(): + case (*descriptorpb.OneofOptions)(nil).ProtoReflect().Descriptor().FullName(): + case (*descriptorpb.ExtensionRangeOptions)(nil).ProtoReflect().Descriptor().FullName(): + case (*descriptorpb.ServiceOptions)(nil).ProtoReflect().Descriptor().FullName(): + case (*descriptorpb.MethodOptions)(nil).ProtoReflect().Descriptor().FullName(): + default: + return errors.New("extension field %q cannot be declared in proto3 unless extended descriptor options", x.FullName()) + } + } + } + return nil +} + +// isOptionalMessage reports whether this is an optional message. +// If the kind is unknown, it is assumed to be a message. +func isOptionalMessage(fd protoreflect.FieldDescriptor) bool { + return (fd.Kind() == 0 || fd.Kind() == protoreflect.MessageKind) && fd.Cardinality() == protoreflect.Optional +} + +// isPackable checks whether the pack option can be specified. +func isPackable(fd protoreflect.FieldDescriptor) bool { + switch fd.Kind() { + case protoreflect.StringKind, protoreflect.BytesKind, protoreflect.MessageKind, protoreflect.GroupKind: + return false + } + return fd.IsList() +} + +// checkValidGroup reports whether fd is a valid group according to the same +// rules that protoc imposes. +func checkValidGroup(f *filedesc.File, fd protoreflect.FieldDescriptor) error { + md := fd.Message() + switch { + case fd.Kind() != protoreflect.GroupKind: + return nil + case f.L1.Edition == fromEditionProto(descriptorpb.Edition_EDITION_PROTO3): + return errors.New("invalid under proto3 semantics") + case md == nil || md.IsPlaceholder(): + return errors.New("message must be resolvable") + } + if f.L1.Edition < fromEditionProto(descriptorpb.Edition_EDITION_2023) { + switch { + case fd.FullName().Parent() != md.FullName().Parent(): + return errors.New("message and field must be declared in the same scope") + case !unicode.IsUpper(rune(md.Name()[0])): + return errors.New("message name must start with an uppercase") + case fd.Name() != protoreflect.Name(strings.ToLower(string(md.Name()))): + return errors.New("field name must be lowercased form of the message name") + } + } + return nil +} + +// checkValidMap checks whether the field is a valid map according to the same +// rules that protoc imposes. +// See protoc v3.8.0: src/google/protobuf/descriptor.cc:6045-6115 +func checkValidMap(fd protoreflect.FieldDescriptor) error { + md := fd.Message() + switch { + case md == nil || !md.IsMapEntry(): + return nil + case fd.FullName().Parent() != md.FullName().Parent(): + return errors.New("message and field must be declared in the same scope") + case md.Name() != protoreflect.Name(strs.MapEntryName(string(fd.Name()))): + return errors.New("incorrect implicit map entry name") + case fd.Cardinality() != protoreflect.Repeated: + return errors.New("field must be repeated") + case md.Fields().Len() != 2: + return errors.New("message must have exactly two fields") + case md.ExtensionRanges().Len() > 0: + return errors.New("message must not have any extension ranges") + case md.Enums().Len()+md.Messages().Len()+md.Extensions().Len() > 0: + return errors.New("message must not have any nested declarations") + } + kf := md.Fields().Get(0) + vf := md.Fields().Get(1) + switch { + case kf.Name() != genid.MapEntry_Key_field_name || kf.Number() != genid.MapEntry_Key_field_number || kf.Cardinality() != protoreflect.Optional || kf.ContainingOneof() != nil || kf.HasDefault(): + return errors.New("invalid key field") + case vf.Name() != genid.MapEntry_Value_field_name || vf.Number() != genid.MapEntry_Value_field_number || vf.Cardinality() != protoreflect.Optional || vf.ContainingOneof() != nil || vf.HasDefault(): + return errors.New("invalid value field") + } + switch kf.Kind() { + case protoreflect.BoolKind: // bool + case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind: // int32 + case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind: // int64 + case protoreflect.Uint32Kind, protoreflect.Fixed32Kind: // uint32 + case protoreflect.Uint64Kind, protoreflect.Fixed64Kind: // uint64 + case protoreflect.StringKind: // string + default: + return errors.New("invalid key kind: %v", kf.Kind()) + } + if e := vf.Enum(); e != nil && e.Values().Len() > 0 && e.Values().Get(0).Number() != 0 { + return errors.New("map enum value must have zero number for the first value") + } + return nil +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protodesc/editions.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protodesc/editions.go new file mode 100644 index 0000000..697a61b --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protodesc/editions.go @@ -0,0 +1,181 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protodesc + +import ( + "fmt" + "os" + "sync" + + "google.golang.org/protobuf/internal/editiondefaults" + "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/internal/genid" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/types/descriptorpb" + "google.golang.org/protobuf/types/gofeaturespb" +) + +var defaults = &descriptorpb.FeatureSetDefaults{} +var defaultsCacheMu sync.Mutex +var defaultsCache = make(map[filedesc.Edition]*descriptorpb.FeatureSet) + +func init() { + err := proto.Unmarshal(editiondefaults.Defaults, defaults) + if err != nil { + fmt.Fprintf(os.Stderr, "unmarshal editions defaults: %v\n", err) + os.Exit(1) + } +} + +func fromEditionProto(epb descriptorpb.Edition) filedesc.Edition { + return filedesc.Edition(epb) +} + +func toEditionProto(ed filedesc.Edition) descriptorpb.Edition { + switch ed { + case filedesc.EditionUnknown: + return descriptorpb.Edition_EDITION_UNKNOWN + case filedesc.EditionProto2: + return descriptorpb.Edition_EDITION_PROTO2 + case filedesc.EditionProto3: + return descriptorpb.Edition_EDITION_PROTO3 + case filedesc.Edition2023: + return descriptorpb.Edition_EDITION_2023 + case filedesc.Edition2024: + return descriptorpb.Edition_EDITION_2024 + default: + panic(fmt.Sprintf("unknown value for edition: %v", ed)) + } +} + +func getFeatureSetFor(ed filedesc.Edition) *descriptorpb.FeatureSet { + defaultsCacheMu.Lock() + defer defaultsCacheMu.Unlock() + if def, ok := defaultsCache[ed]; ok { + return def + } + edpb := toEditionProto(ed) + if defaults.GetMinimumEdition() > edpb || defaults.GetMaximumEdition() < edpb { + // This should never happen protodesc.(FileOptions).New would fail when + // initializing the file descriptor. + // This most likely means the embedded defaults were not updated. + fmt.Fprintf(os.Stderr, "internal error: unsupported edition %v (did you forget to update the embedded defaults (i.e. the bootstrap descriptor proto)?)\n", edpb) + os.Exit(1) + } + fsed := defaults.GetDefaults()[0] + // Using a linear search for now. + // Editions are guaranteed to be sorted and thus we could use a binary search. + // Given that there are only a handful of editions (with one more per year) + // there is not much reason to use a binary search. + for _, def := range defaults.GetDefaults() { + if def.GetEdition() <= edpb { + fsed = def + } else { + break + } + } + fs := proto.Clone(fsed.GetFixedFeatures()).(*descriptorpb.FeatureSet) + proto.Merge(fs, fsed.GetOverridableFeatures()) + defaultsCache[ed] = fs + return fs +} + +// mergeEditionFeatures merges the parent and child feature sets. This function +// should be used when initializing Go descriptors from descriptor protos which +// is why the parent is a filedesc.EditionsFeatures (Go representation) while +// the child is a descriptorproto.FeatureSet (protoc representation). +// Any feature set by the child overwrites what is set by the parent. +func mergeEditionFeatures(parentDesc protoreflect.Descriptor, child *descriptorpb.FeatureSet) filedesc.EditionFeatures { + var parentFS filedesc.EditionFeatures + switch p := parentDesc.(type) { + case *filedesc.File: + parentFS = p.L1.EditionFeatures + case *filedesc.Message: + parentFS = p.L1.EditionFeatures + default: + panic(fmt.Sprintf("unknown parent type %T", parentDesc)) + } + if child == nil { + return parentFS + } + if fp := child.FieldPresence; fp != nil { + parentFS.IsFieldPresence = *fp == descriptorpb.FeatureSet_LEGACY_REQUIRED || + *fp == descriptorpb.FeatureSet_EXPLICIT + parentFS.IsLegacyRequired = *fp == descriptorpb.FeatureSet_LEGACY_REQUIRED + } + if et := child.EnumType; et != nil { + parentFS.IsOpenEnum = *et == descriptorpb.FeatureSet_OPEN + } + + if rfe := child.RepeatedFieldEncoding; rfe != nil { + parentFS.IsPacked = *rfe == descriptorpb.FeatureSet_PACKED + } + + if utf8val := child.Utf8Validation; utf8val != nil { + parentFS.IsUTF8Validated = *utf8val == descriptorpb.FeatureSet_VERIFY + } + + if me := child.MessageEncoding; me != nil { + parentFS.IsDelimitedEncoded = *me == descriptorpb.FeatureSet_DELIMITED + } + + if jf := child.JsonFormat; jf != nil { + parentFS.IsJSONCompliant = *jf == descriptorpb.FeatureSet_ALLOW + } + + // We must not use proto.GetExtension(child, gofeaturespb.E_Go) + // because that only works for messages we generated, but not for + // dynamicpb messages. See golang/protobuf#1669. + // + // Further, we harden this code against adversarial inputs: a + // service which accepts descriptors from a possibly malicious + // source shouldn't crash. + goFeatures := child.ProtoReflect().Get(gofeaturespb.E_Go.TypeDescriptor()) + if !goFeatures.IsValid() { + return parentFS + } + gf, ok := goFeatures.Interface().(protoreflect.Message) + if !ok { + return parentFS + } + // gf.Interface() could be *dynamicpb.Message or *gofeaturespb.GoFeatures. + fields := gf.Descriptor().Fields() + + if fd := fields.ByNumber(genid.GoFeatures_LegacyUnmarshalJsonEnum_field_number); fd != nil && + !fd.IsList() && + fd.Kind() == protoreflect.BoolKind && + gf.Has(fd) { + parentFS.GenerateLegacyUnmarshalJSON = gf.Get(fd).Bool() + } + + if fd := fields.ByNumber(genid.GoFeatures_StripEnumPrefix_field_number); fd != nil && + !fd.IsList() && + fd.Kind() == protoreflect.EnumKind && + gf.Has(fd) { + parentFS.StripEnumPrefix = int(gf.Get(fd).Enum()) + } + + if fd := fields.ByNumber(genid.GoFeatures_ApiLevel_field_number); fd != nil && + !fd.IsList() && + fd.Kind() == protoreflect.EnumKind && + gf.Has(fd) { + parentFS.APILevel = int(gf.Get(fd).Enum()) + } + + return parentFS +} + +// initFileDescFromFeatureSet initializes editions related fields in fd based +// on fs. If fs is nil it is assumed to be an empty featureset and all fields +// will be initialized with the appropriate default. fd.L1.Edition must be set +// before calling this function. +func initFileDescFromFeatureSet(fd *filedesc.File, fs *descriptorpb.FeatureSet) { + dfs := getFeatureSetFor(fd.L1.Edition) + // initialize the featureset with the defaults + fd.L1.EditionFeatures = mergeEditionFeatures(fd, dfs) + // overwrite any options explicitly specified + fd.L1.EditionFeatures = mergeEditionFeatures(fd, fs) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protodesc/proto.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protodesc/proto.go new file mode 100644 index 0000000..9b880aa --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protodesc/proto.go @@ -0,0 +1,271 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protodesc + +import ( + "fmt" + "strings" + + "google.golang.org/protobuf/internal/encoding/defval" + "google.golang.org/protobuf/internal/strs" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protoreflect" + + "google.golang.org/protobuf/types/descriptorpb" +) + +// ToFileDescriptorProto copies a [protoreflect.FileDescriptor] into a +// google.protobuf.FileDescriptorProto message. +func ToFileDescriptorProto(file protoreflect.FileDescriptor) *descriptorpb.FileDescriptorProto { + p := &descriptorpb.FileDescriptorProto{ + Name: proto.String(file.Path()), + Options: proto.Clone(file.Options()).(*descriptorpb.FileOptions), + } + if file.Package() != "" { + p.Package = proto.String(string(file.Package())) + } + for i, imports := 0, file.Imports(); i < imports.Len(); i++ { + imp := imports.Get(i) + p.Dependency = append(p.Dependency, imp.Path()) + if imp.IsPublic { + p.PublicDependency = append(p.PublicDependency, int32(i)) + } + } + for i, locs := 0, file.SourceLocations(); i < locs.Len(); i++ { + loc := locs.Get(i) + l := &descriptorpb.SourceCodeInfo_Location{} + l.Path = append(l.Path, loc.Path...) + if loc.StartLine == loc.EndLine { + l.Span = []int32{int32(loc.StartLine), int32(loc.StartColumn), int32(loc.EndColumn)} + } else { + l.Span = []int32{int32(loc.StartLine), int32(loc.StartColumn), int32(loc.EndLine), int32(loc.EndColumn)} + } + l.LeadingDetachedComments = append([]string(nil), loc.LeadingDetachedComments...) + if loc.LeadingComments != "" { + l.LeadingComments = proto.String(loc.LeadingComments) + } + if loc.TrailingComments != "" { + l.TrailingComments = proto.String(loc.TrailingComments) + } + if p.SourceCodeInfo == nil { + p.SourceCodeInfo = &descriptorpb.SourceCodeInfo{} + } + p.SourceCodeInfo.Location = append(p.SourceCodeInfo.Location, l) + + } + for i, messages := 0, file.Messages(); i < messages.Len(); i++ { + p.MessageType = append(p.MessageType, ToDescriptorProto(messages.Get(i))) + } + for i, enums := 0, file.Enums(); i < enums.Len(); i++ { + p.EnumType = append(p.EnumType, ToEnumDescriptorProto(enums.Get(i))) + } + for i, services := 0, file.Services(); i < services.Len(); i++ { + p.Service = append(p.Service, ToServiceDescriptorProto(services.Get(i))) + } + for i, exts := 0, file.Extensions(); i < exts.Len(); i++ { + p.Extension = append(p.Extension, ToFieldDescriptorProto(exts.Get(i))) + } + if syntax := file.Syntax(); syntax != protoreflect.Proto2 && syntax.IsValid() { + p.Syntax = proto.String(file.Syntax().String()) + } + if file.Syntax() == protoreflect.Editions { + desc := file + if fileImportDesc, ok := file.(protoreflect.FileImport); ok { + desc = fileImportDesc.FileDescriptor + } + + if editionsInterface, ok := desc.(interface{ Edition() int32 }); ok { + p.Edition = descriptorpb.Edition(editionsInterface.Edition()).Enum() + } + } + return p +} + +// ToDescriptorProto copies a [protoreflect.MessageDescriptor] into a +// google.protobuf.DescriptorProto message. +func ToDescriptorProto(message protoreflect.MessageDescriptor) *descriptorpb.DescriptorProto { + p := &descriptorpb.DescriptorProto{ + Name: proto.String(string(message.Name())), + Options: proto.Clone(message.Options()).(*descriptorpb.MessageOptions), + } + for i, fields := 0, message.Fields(); i < fields.Len(); i++ { + p.Field = append(p.Field, ToFieldDescriptorProto(fields.Get(i))) + } + for i, exts := 0, message.Extensions(); i < exts.Len(); i++ { + p.Extension = append(p.Extension, ToFieldDescriptorProto(exts.Get(i))) + } + for i, messages := 0, message.Messages(); i < messages.Len(); i++ { + p.NestedType = append(p.NestedType, ToDescriptorProto(messages.Get(i))) + } + for i, enums := 0, message.Enums(); i < enums.Len(); i++ { + p.EnumType = append(p.EnumType, ToEnumDescriptorProto(enums.Get(i))) + } + for i, xranges := 0, message.ExtensionRanges(); i < xranges.Len(); i++ { + xrange := xranges.Get(i) + p.ExtensionRange = append(p.ExtensionRange, &descriptorpb.DescriptorProto_ExtensionRange{ + Start: proto.Int32(int32(xrange[0])), + End: proto.Int32(int32(xrange[1])), + Options: proto.Clone(message.ExtensionRangeOptions(i)).(*descriptorpb.ExtensionRangeOptions), + }) + } + for i, oneofs := 0, message.Oneofs(); i < oneofs.Len(); i++ { + p.OneofDecl = append(p.OneofDecl, ToOneofDescriptorProto(oneofs.Get(i))) + } + for i, ranges := 0, message.ReservedRanges(); i < ranges.Len(); i++ { + rrange := ranges.Get(i) + p.ReservedRange = append(p.ReservedRange, &descriptorpb.DescriptorProto_ReservedRange{ + Start: proto.Int32(int32(rrange[0])), + End: proto.Int32(int32(rrange[1])), + }) + } + for i, names := 0, message.ReservedNames(); i < names.Len(); i++ { + p.ReservedName = append(p.ReservedName, string(names.Get(i))) + } + return p +} + +// ToFieldDescriptorProto copies a [protoreflect.FieldDescriptor] into a +// google.protobuf.FieldDescriptorProto message. +func ToFieldDescriptorProto(field protoreflect.FieldDescriptor) *descriptorpb.FieldDescriptorProto { + p := &descriptorpb.FieldDescriptorProto{ + Name: proto.String(string(field.Name())), + Number: proto.Int32(int32(field.Number())), + Label: descriptorpb.FieldDescriptorProto_Label(field.Cardinality()).Enum(), + Options: proto.Clone(field.Options()).(*descriptorpb.FieldOptions), + } + if field.IsExtension() { + p.Extendee = fullNameOf(field.ContainingMessage()) + } + if field.Kind().IsValid() { + p.Type = descriptorpb.FieldDescriptorProto_Type(field.Kind()).Enum() + } + if field.Enum() != nil { + p.TypeName = fullNameOf(field.Enum()) + } + if field.Message() != nil { + p.TypeName = fullNameOf(field.Message()) + } + if field.HasJSONName() { + // A bug in older versions of protoc would always populate the + // "json_name" option for extensions when it is meaningless. + // When it did so, it would always use the camel-cased field name. + if field.IsExtension() { + p.JsonName = proto.String(strs.JSONCamelCase(string(field.Name()))) + } else { + p.JsonName = proto.String(field.JSONName()) + } + } + if field.Syntax() == protoreflect.Proto3 && field.HasOptionalKeyword() { + p.Proto3Optional = proto.Bool(true) + } + if field.Syntax() == protoreflect.Editions { + // Editions have no group keyword, this type is only set so that downstream users continue + // treating this as delimited encoding. + if p.GetType() == descriptorpb.FieldDescriptorProto_TYPE_GROUP { + p.Type = descriptorpb.FieldDescriptorProto_TYPE_MESSAGE.Enum() + } + // Editions have no required keyword, this label is only set so that downstream users continue + // treating it as required. + if p.GetLabel() == descriptorpb.FieldDescriptorProto_LABEL_REQUIRED { + p.Label = descriptorpb.FieldDescriptorProto_LABEL_OPTIONAL.Enum() + } + } + if field.HasDefault() { + def, err := defval.Marshal(field.Default(), field.DefaultEnumValue(), field.Kind(), defval.Descriptor) + if err != nil && field.DefaultEnumValue() != nil { + def = string(field.DefaultEnumValue().Name()) // occurs for unresolved enum values + } else if err != nil { + panic(fmt.Sprintf("%v: %v", field.FullName(), err)) + } + p.DefaultValue = proto.String(def) + } + if oneof := field.ContainingOneof(); oneof != nil { + p.OneofIndex = proto.Int32(int32(oneof.Index())) + } + return p +} + +// ToOneofDescriptorProto copies a [protoreflect.OneofDescriptor] into a +// google.protobuf.OneofDescriptorProto message. +func ToOneofDescriptorProto(oneof protoreflect.OneofDescriptor) *descriptorpb.OneofDescriptorProto { + return &descriptorpb.OneofDescriptorProto{ + Name: proto.String(string(oneof.Name())), + Options: proto.Clone(oneof.Options()).(*descriptorpb.OneofOptions), + } +} + +// ToEnumDescriptorProto copies a [protoreflect.EnumDescriptor] into a +// google.protobuf.EnumDescriptorProto message. +func ToEnumDescriptorProto(enum protoreflect.EnumDescriptor) *descriptorpb.EnumDescriptorProto { + p := &descriptorpb.EnumDescriptorProto{ + Name: proto.String(string(enum.Name())), + Options: proto.Clone(enum.Options()).(*descriptorpb.EnumOptions), + } + for i, values := 0, enum.Values(); i < values.Len(); i++ { + p.Value = append(p.Value, ToEnumValueDescriptorProto(values.Get(i))) + } + for i, ranges := 0, enum.ReservedRanges(); i < ranges.Len(); i++ { + rrange := ranges.Get(i) + p.ReservedRange = append(p.ReservedRange, &descriptorpb.EnumDescriptorProto_EnumReservedRange{ + Start: proto.Int32(int32(rrange[0])), + End: proto.Int32(int32(rrange[1])), + }) + } + for i, names := 0, enum.ReservedNames(); i < names.Len(); i++ { + p.ReservedName = append(p.ReservedName, string(names.Get(i))) + } + return p +} + +// ToEnumValueDescriptorProto copies a [protoreflect.EnumValueDescriptor] into a +// google.protobuf.EnumValueDescriptorProto message. +func ToEnumValueDescriptorProto(value protoreflect.EnumValueDescriptor) *descriptorpb.EnumValueDescriptorProto { + return &descriptorpb.EnumValueDescriptorProto{ + Name: proto.String(string(value.Name())), + Number: proto.Int32(int32(value.Number())), + Options: proto.Clone(value.Options()).(*descriptorpb.EnumValueOptions), + } +} + +// ToServiceDescriptorProto copies a [protoreflect.ServiceDescriptor] into a +// google.protobuf.ServiceDescriptorProto message. +func ToServiceDescriptorProto(service protoreflect.ServiceDescriptor) *descriptorpb.ServiceDescriptorProto { + p := &descriptorpb.ServiceDescriptorProto{ + Name: proto.String(string(service.Name())), + Options: proto.Clone(service.Options()).(*descriptorpb.ServiceOptions), + } + for i, methods := 0, service.Methods(); i < methods.Len(); i++ { + p.Method = append(p.Method, ToMethodDescriptorProto(methods.Get(i))) + } + return p +} + +// ToMethodDescriptorProto copies a [protoreflect.MethodDescriptor] into a +// google.protobuf.MethodDescriptorProto message. +func ToMethodDescriptorProto(method protoreflect.MethodDescriptor) *descriptorpb.MethodDescriptorProto { + p := &descriptorpb.MethodDescriptorProto{ + Name: proto.String(string(method.Name())), + InputType: fullNameOf(method.Input()), + OutputType: fullNameOf(method.Output()), + Options: proto.Clone(method.Options()).(*descriptorpb.MethodOptions), + } + if method.IsStreamingClient() { + p.ClientStreaming = proto.Bool(true) + } + if method.IsStreamingServer() { + p.ServerStreaming = proto.Bool(true) + } + return p +} + +func fullNameOf(d protoreflect.Descriptor) *string { + if d == nil { + return nil + } + if strings.HasPrefix(string(d.FullName()), unknownPrefix) { + return proto.String(string(d.FullName()[len(unknownPrefix):])) + } + return proto.String("." + string(d.FullName())) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protopath/path.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protopath/path.go new file mode 100644 index 0000000..fffac00 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protopath/path.go @@ -0,0 +1,122 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package protopath provides functionality for +// representing a sequence of protobuf reflection operations on a message. +package protopath + +import ( + "fmt" + + "google.golang.org/protobuf/internal/msgfmt" + "google.golang.org/protobuf/reflect/protoreflect" +) + +// NOTE: The Path and Values are separate types here since there are use cases +// where you would like to "address" some value in a message with just the path +// and don't have the value information available. +// +// This is different from how github.com/google/go-cmp/cmp.Path operates, +// which combines both path and value information together. +// Since the cmp package itself is the only one ever constructing a cmp.Path, +// it will always have the value available. + +// Path is a sequence of protobuf reflection steps applied to some root +// protobuf message value to arrive at the current value. +// The first step must be a [Root] step. +type Path []Step + +// TODO: Provide a Parse function that parses something similar to or +// perhaps identical to the output of Path.String. + +// Index returns the ith step in the path and supports negative indexing. +// A negative index starts counting from the tail of the Path such that -1 +// refers to the last step, -2 refers to the second-to-last step, and so on. +// It returns a zero Step value if the index is out-of-bounds. +func (p Path) Index(i int) Step { + if i < 0 { + i = len(p) + i + } + if i < 0 || i >= len(p) { + return Step{} + } + return p[i] +} + +// String returns a structured representation of the path +// by concatenating the string representation of every path step. +func (p Path) String() string { + var b []byte + for _, s := range p { + b = s.appendString(b) + } + return string(b) +} + +// Values is a Path paired with a sequence of values at each step. +// The lengths of [Values.Path] and [Values.Values] must be identical. +// The first step must be a [Root] step and +// the first value must be a concrete message value. +type Values struct { + Path Path + Values []protoreflect.Value +} + +// Len reports the length of the path and values. +// If the path and values have differing length, it returns the minimum length. +func (p Values) Len() int { + n := len(p.Path) + if n > len(p.Values) { + n = len(p.Values) + } + return n +} + +// Index returns the ith step and value and supports negative indexing. +// A negative index starts counting from the tail of the Values such that -1 +// refers to the last pair, -2 refers to the second-to-last pair, and so on. +func (p Values) Index(i int) (out struct { + Step Step + Value protoreflect.Value +}) { + // NOTE: This returns a single struct instead of two return values so that + // callers can make use of the the value in an expression: + // vs.Index(i).Value.Interface() + n := p.Len() + if i < 0 { + i = n + i + } + if i < 0 || i >= n { + return out + } + out.Step = p.Path[i] + out.Value = p.Values[i] + return out +} + +// String returns a humanly readable representation of the path and last value. +// Do not depend on the output being stable. +// +// For example: +// +// (path.to.MyMessage).list_field[5].map_field["hello"] = {hello: "world"} +func (p Values) String() string { + n := p.Len() + if n == 0 { + return "" + } + + // Determine the field descriptor associated with the last step. + var fd protoreflect.FieldDescriptor + last := p.Index(-1) + switch last.Step.kind { + case FieldAccessStep: + fd = last.Step.FieldDescriptor() + case MapIndexStep, ListIndexStep: + fd = p.Index(-2).Step.FieldDescriptor() + } + + // Format the full path with the last value. + return fmt.Sprintf("%v = %v", p.Path[:n], msgfmt.FormatValue(last.Value, fd)) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protopath/step.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protopath/step.go new file mode 100644 index 0000000..95ae85c --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protopath/step.go @@ -0,0 +1,241 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protopath + +import ( + "fmt" + "strconv" + "strings" + + "google.golang.org/protobuf/internal/encoding/text" + "google.golang.org/protobuf/reflect/protoreflect" +) + +// StepKind identifies the kind of step operation. +// Each kind of step corresponds with some protobuf reflection operation. +type StepKind int + +const ( + invalidStep StepKind = iota + // RootStep identifies a step as the Root step operation. + RootStep + // FieldAccessStep identifies a step as the FieldAccess step operation. + FieldAccessStep + // UnknownAccessStep identifies a step as the UnknownAccess step operation. + UnknownAccessStep + // ListIndexStep identifies a step as the ListIndex step operation. + ListIndexStep + // MapIndexStep identifies a step as the MapIndex step operation. + MapIndexStep + // AnyExpandStep identifies a step as the AnyExpand step operation. + AnyExpandStep +) + +func (k StepKind) String() string { + switch k { + case invalidStep: + return "" + case RootStep: + return "Root" + case FieldAccessStep: + return "FieldAccess" + case UnknownAccessStep: + return "UnknownAccess" + case ListIndexStep: + return "ListIndex" + case MapIndexStep: + return "MapIndex" + case AnyExpandStep: + return "AnyExpand" + default: + return fmt.Sprintf("", k) + } +} + +// Step is a union where only one step operation may be specified at a time. +// The different kinds of steps are specified by the constants defined for +// the StepKind type. +type Step struct { + kind StepKind + desc protoreflect.Descriptor + key protoreflect.Value +} + +// Root indicates the root message that a path is relative to. +// It should always (and only ever) be the first step in a path. +func Root(md protoreflect.MessageDescriptor) Step { + if md == nil { + panic("nil message descriptor") + } + return Step{kind: RootStep, desc: md} +} + +// FieldAccess describes access of a field within a message. +// Extension field accesses are also represented using a FieldAccess and +// must be provided with a protoreflect.FieldDescriptor +// +// Within the context of Values, +// the type of the previous step value is always a message, and +// the type of the current step value is determined by the field descriptor. +func FieldAccess(fd protoreflect.FieldDescriptor) Step { + if fd == nil { + panic("nil field descriptor") + } else if _, ok := fd.(protoreflect.ExtensionTypeDescriptor); !ok && fd.IsExtension() { + panic(fmt.Sprintf("extension field %q must implement protoreflect.ExtensionTypeDescriptor", fd.FullName())) + } + return Step{kind: FieldAccessStep, desc: fd} +} + +// UnknownAccess describes access to the unknown fields within a message. +// +// Within the context of Values, +// the type of the previous step value is always a message, and +// the type of the current step value is always a bytes type. +func UnknownAccess() Step { + return Step{kind: UnknownAccessStep} +} + +// ListIndex describes index of an element within a list. +// +// Within the context of Values, +// the type of the previous, previous step value is always a message, +// the type of the previous step value is always a list, and +// the type of the current step value is determined by the field descriptor. +func ListIndex(i int) Step { + if i < 0 { + panic(fmt.Sprintf("invalid list index: %v", i)) + } + return Step{kind: ListIndexStep, key: protoreflect.ValueOfInt64(int64(i))} +} + +// MapIndex describes index of an entry within a map. +// The key type is determined by field descriptor that the map belongs to. +// +// Within the context of Values, +// the type of the previous previous step value is always a message, +// the type of the previous step value is always a map, and +// the type of the current step value is determined by the field descriptor. +func MapIndex(k protoreflect.MapKey) Step { + if !k.IsValid() { + panic("invalid map index") + } + return Step{kind: MapIndexStep, key: k.Value()} +} + +// AnyExpand describes expansion of a google.protobuf.Any message into +// a structured representation of the underlying message. +// +// Within the context of Values, +// the type of the previous step value is always a google.protobuf.Any message, and +// the type of the current step value is always a message. +func AnyExpand(md protoreflect.MessageDescriptor) Step { + if md == nil { + panic("nil message descriptor") + } + return Step{kind: AnyExpandStep, desc: md} +} + +// MessageDescriptor returns the message descriptor for Root or AnyExpand steps, +// otherwise it returns nil. +func (s Step) MessageDescriptor() protoreflect.MessageDescriptor { + switch s.kind { + case RootStep, AnyExpandStep: + return s.desc.(protoreflect.MessageDescriptor) + default: + return nil + } +} + +// FieldDescriptor returns the field descriptor for FieldAccess steps, +// otherwise it returns nil. +func (s Step) FieldDescriptor() protoreflect.FieldDescriptor { + switch s.kind { + case FieldAccessStep: + return s.desc.(protoreflect.FieldDescriptor) + default: + return nil + } +} + +// ListIndex returns the list index for ListIndex steps, +// otherwise it returns 0. +func (s Step) ListIndex() int { + switch s.kind { + case ListIndexStep: + return int(s.key.Int()) + default: + return 0 + } +} + +// MapIndex returns the map key for MapIndex steps, +// otherwise it returns an invalid map key. +func (s Step) MapIndex() protoreflect.MapKey { + switch s.kind { + case MapIndexStep: + return s.key.MapKey() + default: + return protoreflect.MapKey{} + } +} + +// Kind reports which kind of step this is. +func (s Step) Kind() StepKind { + return s.kind +} + +func (s Step) String() string { + return string(s.appendString(nil)) +} + +func (s Step) appendString(b []byte) []byte { + switch s.kind { + case RootStep: + b = append(b, '(') + b = append(b, s.desc.FullName()...) + b = append(b, ')') + case FieldAccessStep: + b = append(b, '.') + if fd := s.desc.(protoreflect.FieldDescriptor); fd.IsExtension() { + b = append(b, '(') + b = append(b, strings.Trim(fd.TextName(), "[]")...) + b = append(b, ')') + } else { + b = append(b, fd.TextName()...) + } + case UnknownAccessStep: + b = append(b, '.') + b = append(b, '?') + case ListIndexStep: + b = append(b, '[') + b = strconv.AppendInt(b, s.key.Int(), 10) + b = append(b, ']') + case MapIndexStep: + b = append(b, '[') + switch k := s.key.Interface().(type) { + case bool: + b = strconv.AppendBool(b, bool(k)) // e.g., "true" or "false" + case int32: + b = strconv.AppendInt(b, int64(k), 10) // e.g., "-32" + case int64: + b = strconv.AppendInt(b, int64(k), 10) // e.g., "-64" + case uint32: + b = strconv.AppendUint(b, uint64(k), 10) // e.g., "32" + case uint64: + b = strconv.AppendUint(b, uint64(k), 10) // e.g., "64" + case string: + b = text.AppendString(b, k) // e.g., `"hello, world"` + } + b = append(b, ']') + case AnyExpandStep: + b = append(b, '.') + b = append(b, '(') + b = append(b, s.desc.FullName()...) + b = append(b, ')') + default: + b = append(b, ""...) + } + return b +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protorange/range.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protorange/range.go new file mode 100644 index 0000000..7a03275 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protorange/range.go @@ -0,0 +1,316 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package protorange provides functionality to traverse a message value. +package protorange + +import ( + "bytes" + "errors" + + "google.golang.org/protobuf/internal/genid" + "google.golang.org/protobuf/internal/order" + "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/reflect/protopath" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" +) + +var ( + // Break breaks traversal of children in the current value. + // It has no effect when traversing values that are not composite types + // (e.g., messages, lists, and maps). + Break = errors.New("break traversal of children in current value") + + // Terminate terminates the entire range operation. + // All necessary Pop operations continue to be called. + Terminate = errors.New("terminate range operation") +) + +// Range performs a depth-first traversal over reachable values in a message. +// +// See [Options.Range] for details. +func Range(m protoreflect.Message, f func(protopath.Values) error) error { + return Options{}.Range(m, f, nil) +} + +// Options configures traversal of a message value tree. +type Options struct { + // Stable specifies whether to visit message fields and map entries + // in a stable ordering. If false, then the ordering is undefined and + // may be non-deterministic. + // + // Message fields are visited in ascending order by field number. + // Map entries are visited in ascending order, where + // boolean keys are ordered such that false sorts before true, + // numeric keys are ordered based on the numeric value, and + // string keys are lexicographically ordered by Unicode codepoints. + Stable bool + + // Resolver is used for looking up types when expanding google.protobuf.Any + // messages. If nil, this defaults to using protoregistry.GlobalTypes. + // To prevent expansion of Any messages, pass an empty protoregistry.Types: + // + // Options{Resolver: (*protoregistry.Types)(nil)} + // + Resolver interface { + protoregistry.ExtensionTypeResolver + protoregistry.MessageTypeResolver + } +} + +// Range performs a depth-first traversal over reachable values in a message. +// The first push and the last pop are to push/pop a [protopath.Root] step. +// If push or pop return any non-nil error (other than [Break] or [Terminate]), +// it terminates the traversal and is returned by Range. +// +// The rules for traversing a message is as follows: +// +// - For messages, iterate over every populated known and extension field. +// Each field is preceded by a push of a [protopath.FieldAccess] step, +// followed by recursive application of the rules on the field value, +// and succeeded by a pop of that step. +// If the message has unknown fields, then push an [protopath.UnknownAccess] step +// followed immediately by pop of that step. +// +// - As an exception to the above rule, if the current message is a +// google.protobuf.Any message, expand the underlying message (if resolvable). +// The expanded message is preceded by a push of a [protopath.AnyExpand] step, +// followed by recursive application of the rules on the underlying message, +// and succeeded by a pop of that step. Mutations to the expanded message +// are written back to the Any message when popping back out. +// +// - For lists, iterate over every element. Each element is preceded by a push +// of a [protopath.ListIndex] step, followed by recursive application of the rules +// on the list element, and succeeded by a pop of that step. +// +// - For maps, iterate over every entry. Each entry is preceded by a push +// of a [protopath.MapIndex] step, followed by recursive application of the rules +// on the map entry value, and succeeded by a pop of that step. +// +// Mutations should only be made to the last value, otherwise the effects on +// traversal will be undefined. If the mutation is made to the last value +// during to a push, then the effects of the mutation will affect traversal. +// For example, if the last value is currently a message, and the push function +// populates a few fields in that message, then the newly modified fields +// will be traversed. +// +// The [protopath.Values] provided to push functions is only valid until the +// corresponding pop call and the values provided to a pop call is only valid +// for the duration of the pop call itself. +func (o Options) Range(m protoreflect.Message, push, pop func(protopath.Values) error) error { + var err error + p := new(protopath.Values) + if o.Resolver == nil { + o.Resolver = protoregistry.GlobalTypes + } + + pushStep(p, protopath.Root(m.Descriptor()), protoreflect.ValueOfMessage(m)) + if push != nil { + err = amendError(err, push(*p)) + } + if err == nil { + err = o.rangeMessage(p, m, push, pop) + } + if pop != nil { + err = amendError(err, pop(*p)) + } + popStep(p) + + if err == Break || err == Terminate { + err = nil + } + return err +} + +func (o Options) rangeMessage(p *protopath.Values, m protoreflect.Message, push, pop func(protopath.Values) error) (err error) { + if ok, err := o.rangeAnyMessage(p, m, push, pop); ok { + return err + } + + fieldOrder := order.AnyFieldOrder + if o.Stable { + fieldOrder = order.NumberFieldOrder + } + order.RangeFields(m, fieldOrder, func(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + pushStep(p, protopath.FieldAccess(fd), v) + if push != nil { + err = amendError(err, push(*p)) + } + if err == nil { + switch { + case fd.IsMap(): + err = o.rangeMap(p, fd, v.Map(), push, pop) + case fd.IsList(): + err = o.rangeList(p, fd, v.List(), push, pop) + case fd.Message() != nil: + err = o.rangeMessage(p, v.Message(), push, pop) + } + } + if pop != nil { + err = amendError(err, pop(*p)) + } + popStep(p) + return err == nil + }) + + if b := m.GetUnknown(); len(b) > 0 && err == nil { + pushStep(p, protopath.UnknownAccess(), protoreflect.ValueOfBytes(b)) + if push != nil { + err = amendError(err, push(*p)) + } + if pop != nil { + err = amendError(err, pop(*p)) + } + popStep(p) + } + + if err == Break { + err = nil + } + return err +} + +func (o Options) rangeAnyMessage(p *protopath.Values, m protoreflect.Message, push, pop func(protopath.Values) error) (ok bool, err error) { + md := m.Descriptor() + if md.FullName() != "google.protobuf.Any" { + return false, nil + } + + fds := md.Fields() + url := m.Get(fds.ByNumber(genid.Any_TypeUrl_field_number)).String() + val := m.Get(fds.ByNumber(genid.Any_Value_field_number)).Bytes() + mt, errFind := o.Resolver.FindMessageByURL(url) + if errFind != nil { + return false, nil + } + + // Unmarshal the raw encoded message value into a structured message value. + m2 := mt.New() + errUnmarshal := proto.UnmarshalOptions{ + Merge: true, + AllowPartial: true, + Resolver: o.Resolver, + }.Unmarshal(val, m2.Interface()) + if errUnmarshal != nil { + // If the the underlying message cannot be unmarshaled, + // then just treat this as an normal message type. + return false, nil + } + + // Marshal Any before ranging to detect possible mutations. + b1, errMarshal := proto.MarshalOptions{ + AllowPartial: true, + Deterministic: true, + }.Marshal(m2.Interface()) + if errMarshal != nil { + return true, errMarshal + } + + pushStep(p, protopath.AnyExpand(m2.Descriptor()), protoreflect.ValueOfMessage(m2)) + if push != nil { + err = amendError(err, push(*p)) + } + if err == nil { + err = o.rangeMessage(p, m2, push, pop) + } + if pop != nil { + err = amendError(err, pop(*p)) + } + popStep(p) + + // Marshal Any after ranging to detect possible mutations. + b2, errMarshal := proto.MarshalOptions{ + AllowPartial: true, + Deterministic: true, + }.Marshal(m2.Interface()) + if errMarshal != nil { + return true, errMarshal + } + + // Mutations detected, write the new sequence of bytes to the Any message. + if !bytes.Equal(b1, b2) { + m.Set(fds.ByNumber(genid.Any_Value_field_number), protoreflect.ValueOfBytes(b2)) + } + + if err == Break { + err = nil + } + return true, err +} + +func (o Options) rangeList(p *protopath.Values, fd protoreflect.FieldDescriptor, ls protoreflect.List, push, pop func(protopath.Values) error) (err error) { + for i := 0; i < ls.Len() && err == nil; i++ { + v := ls.Get(i) + pushStep(p, protopath.ListIndex(i), v) + if push != nil { + err = amendError(err, push(*p)) + } + if err == nil && fd.Message() != nil { + err = o.rangeMessage(p, v.Message(), push, pop) + } + if pop != nil { + err = amendError(err, pop(*p)) + } + popStep(p) + } + + if err == Break { + err = nil + } + return err +} + +func (o Options) rangeMap(p *protopath.Values, fd protoreflect.FieldDescriptor, ms protoreflect.Map, push, pop func(protopath.Values) error) (err error) { + keyOrder := order.AnyKeyOrder + if o.Stable { + keyOrder = order.GenericKeyOrder + } + order.RangeEntries(ms, keyOrder, func(k protoreflect.MapKey, v protoreflect.Value) bool { + pushStep(p, protopath.MapIndex(k), v) + if push != nil { + err = amendError(err, push(*p)) + } + if err == nil && fd.MapValue().Message() != nil { + err = o.rangeMessage(p, v.Message(), push, pop) + } + if pop != nil { + err = amendError(err, pop(*p)) + } + popStep(p) + return err == nil + }) + + if err == Break { + err = nil + } + return err +} + +func pushStep(p *protopath.Values, s protopath.Step, v protoreflect.Value) { + p.Path = append(p.Path, s) + p.Values = append(p.Values, v) +} + +func popStep(p *protopath.Values) { + p.Path = p.Path[:len(p.Path)-1] + p.Values = p.Values[:len(p.Values)-1] +} + +// amendError amends the previous error with the current error if it is +// considered more serious. The precedence order for errors is: +// +// nil < Break < Terminate < previous non-nil < current non-nil +func amendError(prev, curr error) error { + switch { + case curr == nil: + return prev + case curr == Break && prev != nil: + return prev + case curr == Terminate && prev != nil && prev != Break: + return prev + default: + return curr + } +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go new file mode 100644 index 0000000..742cb51 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go @@ -0,0 +1,88 @@ +// Copyright 2020 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protoreflect + +import ( + "google.golang.org/protobuf/internal/pragma" +) + +// The following types are used by the fast-path Message.ProtoMethods method. +// +// To avoid polluting the public protoreflect API with types used only by +// low-level implementations, the canonical definitions of these types are +// in the runtime/protoiface package. The definitions here and in protoiface +// must be kept in sync. +type ( + methods = struct { + pragma.NoUnkeyedLiterals + Flags supportFlags + Size func(sizeInput) sizeOutput + Marshal func(marshalInput) (marshalOutput, error) + Unmarshal func(unmarshalInput) (unmarshalOutput, error) + Merge func(mergeInput) mergeOutput + CheckInitialized func(checkInitializedInput) (checkInitializedOutput, error) + Equal func(equalInput) equalOutput + } + supportFlags = uint64 + sizeInput = struct { + pragma.NoUnkeyedLiterals + Message Message + Flags uint8 + } + sizeOutput = struct { + pragma.NoUnkeyedLiterals + Size int + } + marshalInput = struct { + pragma.NoUnkeyedLiterals + Message Message + Buf []byte + Flags uint8 + } + marshalOutput = struct { + pragma.NoUnkeyedLiterals + Buf []byte + } + unmarshalInput = struct { + pragma.NoUnkeyedLiterals + Message Message + Buf []byte + Flags uint8 + Resolver interface { + FindExtensionByName(field FullName) (ExtensionType, error) + FindExtensionByNumber(message FullName, field FieldNumber) (ExtensionType, error) + } + Depth int + } + unmarshalOutput = struct { + pragma.NoUnkeyedLiterals + Flags uint8 + } + mergeInput = struct { + pragma.NoUnkeyedLiterals + Source Message + Destination Message + } + mergeOutput = struct { + pragma.NoUnkeyedLiterals + Flags uint8 + } + checkInitializedInput = struct { + pragma.NoUnkeyedLiterals + Message Message + } + checkInitializedOutput = struct { + pragma.NoUnkeyedLiterals + } + equalInput = struct { + pragma.NoUnkeyedLiterals + MessageA Message + MessageB Message + } + equalOutput = struct { + pragma.NoUnkeyedLiterals + Equal bool + } +) diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go new file mode 100644 index 0000000..c85bfaa --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/proto.go @@ -0,0 +1,513 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package protoreflect provides interfaces to dynamically manipulate messages. +// +// This package includes type descriptors which describe the structure of types +// defined in proto source files and value interfaces which provide the +// ability to examine and manipulate the contents of messages. +// +// # Protocol Buffer Descriptors +// +// Protobuf descriptors (e.g., [EnumDescriptor] or [MessageDescriptor]) +// are immutable objects that represent protobuf type information. +// They are wrappers around the messages declared in descriptor.proto. +// Protobuf descriptors alone lack any information regarding Go types. +// +// Enums and messages generated by this module implement [Enum] and [ProtoMessage], +// where the Descriptor and ProtoReflect.Descriptor accessors respectively +// return the protobuf descriptor for the values. +// +// The protobuf descriptor interfaces are not meant to be implemented by +// user code since they might need to be extended in the future to support +// additions to the protobuf language. +// The [google.golang.org/protobuf/reflect/protodesc] package converts between +// google.protobuf.DescriptorProto messages and protobuf descriptors. +// +// # Go Type Descriptors +// +// A type descriptor (e.g., [EnumType] or [MessageType]) is a constructor for +// a concrete Go type that represents the associated protobuf descriptor. +// There is commonly a one-to-one relationship between protobuf descriptors and +// Go type descriptors, but it can potentially be a one-to-many relationship. +// +// Enums and messages generated by this module implement [Enum] and [ProtoMessage], +// where the Type and ProtoReflect.Type accessors respectively +// return the protobuf descriptor for the values. +// +// The [google.golang.org/protobuf/types/dynamicpb] package can be used to +// create Go type descriptors from protobuf descriptors. +// +// # Value Interfaces +// +// The [Enum] and [Message] interfaces provide a reflective view over an +// enum or message instance. For enums, it provides the ability to retrieve +// the enum value number for any concrete enum type. For messages, it provides +// the ability to access or manipulate fields of the message. +// +// To convert a [google.golang.org/protobuf/proto.Message] to a [protoreflect.Message], use the +// former's ProtoReflect method. Since the ProtoReflect method is new to the +// v2 message interface, it may not be present on older message implementations. +// The [github.com/golang/protobuf/proto.MessageReflect] function can be used +// to obtain a reflective view on older messages. +// +// # Relationships +// +// The following diagrams demonstrate the relationships between +// various types declared in this package. +// +// ┌───────────────────────────────────┐ +// V │ +// ┌────────────── New(n) ─────────────┐ │ +// │ │ │ +// │ ┌──── Descriptor() ──┐ │ ┌── Number() ──┐ │ +// │ │ V V │ V │ +// ╔════════════╗ ╔════════════════╗ ╔════════╗ ╔════════════╗ +// ║ EnumType ║ ║ EnumDescriptor ║ ║ Enum ║ ║ EnumNumber ║ +// ╚════════════╝ ╚════════════════╝ ╚════════╝ ╚════════════╝ +// Λ Λ │ │ +// │ └─── Descriptor() ──┘ │ +// │ │ +// └────────────────── Type() ───────┘ +// +// • An [EnumType] describes a concrete Go enum type. +// It has an EnumDescriptor and can construct an Enum instance. +// +// • An [EnumDescriptor] describes an abstract protobuf enum type. +// +// • An [Enum] is a concrete enum instance. Generated enums implement Enum. +// +// ┌──────────────── New() ─────────────────┐ +// │ │ +// │ ┌─── Descriptor() ─────┐ │ ┌── Interface() ───┐ +// │ │ V V │ V +// ╔═════════════╗ ╔═══════════════════╗ ╔═════════╗ ╔══════════════╗ +// ║ MessageType ║ ║ MessageDescriptor ║ ║ Message ║ ║ ProtoMessage ║ +// ╚═════════════╝ ╚═══════════════════╝ ╚═════════╝ ╚══════════════╝ +// Λ Λ │ │ Λ │ +// │ └──── Descriptor() ────┘ │ └─ ProtoReflect() ─┘ +// │ │ +// └─────────────────── Type() ─────────┘ +// +// • A [MessageType] describes a concrete Go message type. +// It has a [MessageDescriptor] and can construct a [Message] instance. +// Just as how Go's [reflect.Type] is a reflective description of a Go type, +// a [MessageType] is a reflective description of a Go type for a protobuf message. +// +// • A [MessageDescriptor] describes an abstract protobuf message type. +// It has no understanding of Go types. In order to construct a [MessageType] +// from just a [MessageDescriptor], you can consider looking up the message type +// in the global registry using the FindMessageByName method on +// [google.golang.org/protobuf/reflect/protoregistry.GlobalTypes] +// or constructing a dynamic [MessageType] using +// [google.golang.org/protobuf/types/dynamicpb.NewMessageType]. +// +// • A [Message] is a reflective view over a concrete message instance. +// Generated messages implement [ProtoMessage], which can convert to a [Message]. +// Just as how Go's [reflect.Value] is a reflective view over a Go value, +// a [Message] is a reflective view over a concrete protobuf message instance. +// Using Go reflection as an analogy, the [ProtoMessage.ProtoReflect] method is similar to +// calling [reflect.ValueOf], and the [Message.Interface] method is similar to +// calling [reflect.Value.Interface]. +// +// ┌── TypeDescriptor() ──┐ ┌───── Descriptor() ─────┐ +// │ V │ V +// ╔═══════════════╗ ╔═════════════════════════╗ ╔═════════════════════╗ +// ║ ExtensionType ║ ║ ExtensionTypeDescriptor ║ ║ ExtensionDescriptor ║ +// ╚═══════════════╝ ╚═════════════════════════╝ ╚═════════════════════╝ +// Λ │ │ Λ │ Λ +// └─────── Type() ───────┘ │ └─── may implement ────┘ │ +// │ │ +// └────── implements ────────┘ +// +// • An [ExtensionType] describes a concrete Go implementation of an extension. +// It has an [ExtensionTypeDescriptor] and can convert to/from +// an abstract [Value] and a Go value. +// +// • An [ExtensionTypeDescriptor] is an [ExtensionDescriptor] +// which also has an [ExtensionType]. +// +// • An [ExtensionDescriptor] describes an abstract protobuf extension field and +// may not always be an [ExtensionTypeDescriptor]. +package protoreflect + +import ( + "fmt" + "strings" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/pragma" +) + +type doNotImplement pragma.DoNotImplement + +// ProtoMessage is the top-level interface that all proto messages implement. +// This is declared in the protoreflect package to avoid a cyclic dependency; +// use the [google.golang.org/protobuf/proto.Message] type instead, which aliases this type. +type ProtoMessage interface{ ProtoReflect() Message } + +// Syntax is the language version of the proto file. +type Syntax syntax + +type syntax int8 // keep exact type opaque as the int type may change + +const ( + Proto2 Syntax = 2 + Proto3 Syntax = 3 + Editions Syntax = 4 +) + +// IsValid reports whether the syntax is valid. +func (s Syntax) IsValid() bool { + switch s { + case Proto2, Proto3, Editions: + return true + default: + return false + } +} + +// String returns s as a proto source identifier (e.g., "proto2"). +func (s Syntax) String() string { + switch s { + case Proto2: + return "proto2" + case Proto3: + return "proto3" + case Editions: + return "editions" + default: + return fmt.Sprintf("", s) + } +} + +// GoString returns s as a Go source identifier (e.g., "Proto2"). +func (s Syntax) GoString() string { + switch s { + case Proto2: + return "Proto2" + case Proto3: + return "Proto3" + default: + return fmt.Sprintf("Syntax(%d)", s) + } +} + +// Cardinality determines whether a field is optional, required, or repeated. +type Cardinality cardinality + +type cardinality int8 // keep exact type opaque as the int type may change + +// Constants as defined by the google.protobuf.Cardinality enumeration. +const ( + Optional Cardinality = 1 // appears zero or one times + Required Cardinality = 2 // appears exactly one time; invalid with Proto3 + Repeated Cardinality = 3 // appears zero or more times +) + +// IsValid reports whether the cardinality is valid. +func (c Cardinality) IsValid() bool { + switch c { + case Optional, Required, Repeated: + return true + default: + return false + } +} + +// String returns c as a proto source identifier (e.g., "optional"). +func (c Cardinality) String() string { + switch c { + case Optional: + return "optional" + case Required: + return "required" + case Repeated: + return "repeated" + default: + return fmt.Sprintf("", c) + } +} + +// GoString returns c as a Go source identifier (e.g., "Optional"). +func (c Cardinality) GoString() string { + switch c { + case Optional: + return "Optional" + case Required: + return "Required" + case Repeated: + return "Repeated" + default: + return fmt.Sprintf("Cardinality(%d)", c) + } +} + +// Kind indicates the basic proto kind of a field. +type Kind kind + +type kind int8 // keep exact type opaque as the int type may change + +// Constants as defined by the google.protobuf.Field.Kind enumeration. +const ( + BoolKind Kind = 8 + EnumKind Kind = 14 + Int32Kind Kind = 5 + Sint32Kind Kind = 17 + Uint32Kind Kind = 13 + Int64Kind Kind = 3 + Sint64Kind Kind = 18 + Uint64Kind Kind = 4 + Sfixed32Kind Kind = 15 + Fixed32Kind Kind = 7 + FloatKind Kind = 2 + Sfixed64Kind Kind = 16 + Fixed64Kind Kind = 6 + DoubleKind Kind = 1 + StringKind Kind = 9 + BytesKind Kind = 12 + MessageKind Kind = 11 + GroupKind Kind = 10 +) + +// IsValid reports whether the kind is valid. +func (k Kind) IsValid() bool { + switch k { + case BoolKind, EnumKind, + Int32Kind, Sint32Kind, Uint32Kind, + Int64Kind, Sint64Kind, Uint64Kind, + Sfixed32Kind, Fixed32Kind, FloatKind, + Sfixed64Kind, Fixed64Kind, DoubleKind, + StringKind, BytesKind, MessageKind, GroupKind: + return true + default: + return false + } +} + +// String returns k as a proto source identifier (e.g., "bool"). +func (k Kind) String() string { + switch k { + case BoolKind: + return "bool" + case EnumKind: + return "enum" + case Int32Kind: + return "int32" + case Sint32Kind: + return "sint32" + case Uint32Kind: + return "uint32" + case Int64Kind: + return "int64" + case Sint64Kind: + return "sint64" + case Uint64Kind: + return "uint64" + case Sfixed32Kind: + return "sfixed32" + case Fixed32Kind: + return "fixed32" + case FloatKind: + return "float" + case Sfixed64Kind: + return "sfixed64" + case Fixed64Kind: + return "fixed64" + case DoubleKind: + return "double" + case StringKind: + return "string" + case BytesKind: + return "bytes" + case MessageKind: + return "message" + case GroupKind: + return "group" + default: + return fmt.Sprintf("", k) + } +} + +// GoString returns k as a Go source identifier (e.g., "BoolKind"). +func (k Kind) GoString() string { + switch k { + case BoolKind: + return "BoolKind" + case EnumKind: + return "EnumKind" + case Int32Kind: + return "Int32Kind" + case Sint32Kind: + return "Sint32Kind" + case Uint32Kind: + return "Uint32Kind" + case Int64Kind: + return "Int64Kind" + case Sint64Kind: + return "Sint64Kind" + case Uint64Kind: + return "Uint64Kind" + case Sfixed32Kind: + return "Sfixed32Kind" + case Fixed32Kind: + return "Fixed32Kind" + case FloatKind: + return "FloatKind" + case Sfixed64Kind: + return "Sfixed64Kind" + case Fixed64Kind: + return "Fixed64Kind" + case DoubleKind: + return "DoubleKind" + case StringKind: + return "StringKind" + case BytesKind: + return "BytesKind" + case MessageKind: + return "MessageKind" + case GroupKind: + return "GroupKind" + default: + return fmt.Sprintf("Kind(%d)", k) + } +} + +// FieldNumber is the field number in a message. +type FieldNumber = protowire.Number + +// FieldNumbers represent a list of field numbers. +type FieldNumbers interface { + // Len reports the number of fields in the list. + Len() int + // Get returns the ith field number. It panics if out of bounds. + Get(i int) FieldNumber + // Has reports whether n is within the list of fields. + Has(n FieldNumber) bool + + doNotImplement +} + +// FieldRanges represent a list of field number ranges. +type FieldRanges interface { + // Len reports the number of ranges in the list. + Len() int + // Get returns the ith range. It panics if out of bounds. + Get(i int) [2]FieldNumber // start inclusive; end exclusive + // Has reports whether n is within any of the ranges. + Has(n FieldNumber) bool + + doNotImplement +} + +// EnumNumber is the numeric value for an enum. +type EnumNumber int32 + +// EnumRanges represent a list of enum number ranges. +type EnumRanges interface { + // Len reports the number of ranges in the list. + Len() int + // Get returns the ith range. It panics if out of bounds. + Get(i int) [2]EnumNumber // start inclusive; end inclusive + // Has reports whether n is within any of the ranges. + Has(n EnumNumber) bool + + doNotImplement +} + +// Name is the short name for a proto declaration. This is not the name +// as used in Go source code, which might not be identical to the proto name. +type Name string // e.g., "Kind" + +// IsValid reports whether s is a syntactically valid name. +// An empty name is invalid. +func (s Name) IsValid() bool { + return consumeIdent(string(s)) == len(s) +} + +// Names represent a list of names. +type Names interface { + // Len reports the number of names in the list. + Len() int + // Get returns the ith name. It panics if out of bounds. + Get(i int) Name + // Has reports whether s matches any names in the list. + Has(s Name) bool + + doNotImplement +} + +// FullName is a qualified name that uniquely identifies a proto declaration. +// A qualified name is the concatenation of the proto package along with the +// fully-declared name (i.e., name of parent preceding the name of the child), +// with a '.' delimiter placed between each [Name]. +// +// This should not have any leading or trailing dots. +type FullName string // e.g., "google.protobuf.Field.Kind" + +// IsValid reports whether s is a syntactically valid full name. +// An empty full name is invalid. +func (s FullName) IsValid() bool { + i := consumeIdent(string(s)) + if i < 0 { + return false + } + for len(s) > i { + if s[i] != '.' { + return false + } + i++ + n := consumeIdent(string(s[i:])) + if n < 0 { + return false + } + i += n + } + return true +} + +func consumeIdent(s string) (i int) { + if len(s) == 0 || !isLetter(s[i]) { + return -1 + } + i++ + for len(s) > i && isLetterDigit(s[i]) { + i++ + } + return i +} +func isLetter(c byte) bool { + return c == '_' || ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') +} +func isLetterDigit(c byte) bool { + return isLetter(c) || ('0' <= c && c <= '9') +} + +// Name returns the short name, which is the last identifier segment. +// A single segment FullName is the [Name] itself. +func (n FullName) Name() Name { + if i := strings.LastIndexByte(string(n), '.'); i >= 0 { + return Name(n[i+1:]) + } + return Name(n) +} + +// Parent returns the full name with the trailing identifier removed. +// A single segment FullName has no parent. +func (n FullName) Parent() FullName { + if i := strings.LastIndexByte(string(n), '.'); i >= 0 { + return n[:i] + } + return "" +} + +// Append returns the qualified name appended with the provided short name. +// +// Invariant: n == n.Parent().Append(n.Name()) // assuming n is valid +func (n FullName) Append(s Name) FullName { + if n == "" { + return FullName(s) + } + return n + "." + FullName(s) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/source.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/source.go new file mode 100644 index 0000000..0b99428 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/source.go @@ -0,0 +1,129 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protoreflect + +import ( + "strconv" +) + +// SourceLocations is a list of source locations. +type SourceLocations interface { + // Len reports the number of source locations in the proto file. + Len() int + // Get returns the ith SourceLocation. It panics if out of bounds. + Get(int) SourceLocation + + // ByPath returns the SourceLocation for the given path, + // returning the first location if multiple exist for the same path. + // If multiple locations exist for the same path, + // then SourceLocation.Next index can be used to identify the + // index of the next SourceLocation. + // If no location exists for this path, it returns the zero value. + ByPath(path SourcePath) SourceLocation + + // ByDescriptor returns the SourceLocation for the given descriptor, + // returning the first location if multiple exist for the same path. + // If no location exists for this descriptor, it returns the zero value. + ByDescriptor(desc Descriptor) SourceLocation + + doNotImplement +} + +// SourceLocation describes a source location and +// corresponds with the google.protobuf.SourceCodeInfo.Location message. +type SourceLocation struct { + // Path is the path to the declaration from the root file descriptor. + // The contents of this slice must not be mutated. + Path SourcePath + + // StartLine and StartColumn are the zero-indexed starting location + // in the source file for the declaration. + StartLine, StartColumn int + // EndLine and EndColumn are the zero-indexed ending location + // in the source file for the declaration. + // In the descriptor.proto, the end line may be omitted if it is identical + // to the start line. Here, it is always populated. + EndLine, EndColumn int + + // LeadingDetachedComments are the leading detached comments + // for the declaration. The contents of this slice must not be mutated. + LeadingDetachedComments []string + // LeadingComments is the leading attached comment for the declaration. + LeadingComments string + // TrailingComments is the trailing attached comment for the declaration. + TrailingComments string + + // Next is an index into SourceLocations for the next source location that + // has the same Path. It is zero if there is no next location. + Next int +} + +// SourcePath identifies part of a file descriptor for a source location. +// The SourcePath is a sequence of either field numbers or indexes into +// a repeated field that form a path starting from the root file descriptor. +// +// See google.protobuf.SourceCodeInfo.Location.path. +type SourcePath []int32 + +// Equal reports whether p1 equals p2. +func (p1 SourcePath) Equal(p2 SourcePath) bool { + if len(p1) != len(p2) { + return false + } + for i := range p1 { + if p1[i] != p2[i] { + return false + } + } + return true +} + +// String formats the path in a humanly readable manner. +// The output is guaranteed to be deterministic, +// making it suitable for use as a key into a Go map. +// It is not guaranteed to be stable as the exact output could change +// in a future version of this module. +// +// Example output: +// +// .message_type[6].nested_type[15].field[3] +func (p SourcePath) String() string { + b := p.appendFileDescriptorProto(nil) + for _, i := range p { + b = append(b, '.') + b = strconv.AppendInt(b, int64(i), 10) + } + return string(b) +} + +type appendFunc func(*SourcePath, []byte) []byte + +func (p *SourcePath) appendSingularField(b []byte, name string, f appendFunc) []byte { + if len(*p) == 0 { + return b + } + b = append(b, '.') + b = append(b, name...) + *p = (*p)[1:] + if f != nil { + b = f(p, b) + } + return b +} + +func (p *SourcePath) appendRepeatedField(b []byte, name string, f appendFunc) []byte { + b = p.appendSingularField(b, name, nil) + if len(*p) == 0 || (*p)[0] < 0 { + return b + } + b = append(b, '[') + b = strconv.AppendUint(b, uint64((*p)[0]), 10) + b = append(b, ']') + *p = (*p)[1:] + if f != nil { + b = f(p, b) + } + return b +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go new file mode 100644 index 0000000..730331e --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go @@ -0,0 +1,583 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-protos. DO NOT EDIT. + +package protoreflect + +func (p *SourcePath) appendFileDescriptorProto(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 1: + b = p.appendSingularField(b, "name", nil) + case 2: + b = p.appendSingularField(b, "package", nil) + case 3: + b = p.appendRepeatedField(b, "dependency", nil) + case 10: + b = p.appendRepeatedField(b, "public_dependency", nil) + case 11: + b = p.appendRepeatedField(b, "weak_dependency", nil) + case 15: + b = p.appendRepeatedField(b, "option_dependency", nil) + case 4: + b = p.appendRepeatedField(b, "message_type", (*SourcePath).appendDescriptorProto) + case 5: + b = p.appendRepeatedField(b, "enum_type", (*SourcePath).appendEnumDescriptorProto) + case 6: + b = p.appendRepeatedField(b, "service", (*SourcePath).appendServiceDescriptorProto) + case 7: + b = p.appendRepeatedField(b, "extension", (*SourcePath).appendFieldDescriptorProto) + case 8: + b = p.appendSingularField(b, "options", (*SourcePath).appendFileOptions) + case 9: + b = p.appendSingularField(b, "source_code_info", (*SourcePath).appendSourceCodeInfo) + case 12: + b = p.appendSingularField(b, "syntax", nil) + case 14: + b = p.appendSingularField(b, "edition", nil) + } + return b +} + +func (p *SourcePath) appendDescriptorProto(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 1: + b = p.appendSingularField(b, "name", nil) + case 2: + b = p.appendRepeatedField(b, "field", (*SourcePath).appendFieldDescriptorProto) + case 6: + b = p.appendRepeatedField(b, "extension", (*SourcePath).appendFieldDescriptorProto) + case 3: + b = p.appendRepeatedField(b, "nested_type", (*SourcePath).appendDescriptorProto) + case 4: + b = p.appendRepeatedField(b, "enum_type", (*SourcePath).appendEnumDescriptorProto) + case 5: + b = p.appendRepeatedField(b, "extension_range", (*SourcePath).appendDescriptorProto_ExtensionRange) + case 8: + b = p.appendRepeatedField(b, "oneof_decl", (*SourcePath).appendOneofDescriptorProto) + case 7: + b = p.appendSingularField(b, "options", (*SourcePath).appendMessageOptions) + case 9: + b = p.appendRepeatedField(b, "reserved_range", (*SourcePath).appendDescriptorProto_ReservedRange) + case 10: + b = p.appendRepeatedField(b, "reserved_name", nil) + case 11: + b = p.appendSingularField(b, "visibility", nil) + } + return b +} + +func (p *SourcePath) appendEnumDescriptorProto(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 1: + b = p.appendSingularField(b, "name", nil) + case 2: + b = p.appendRepeatedField(b, "value", (*SourcePath).appendEnumValueDescriptorProto) + case 3: + b = p.appendSingularField(b, "options", (*SourcePath).appendEnumOptions) + case 4: + b = p.appendRepeatedField(b, "reserved_range", (*SourcePath).appendEnumDescriptorProto_EnumReservedRange) + case 5: + b = p.appendRepeatedField(b, "reserved_name", nil) + case 6: + b = p.appendSingularField(b, "visibility", nil) + } + return b +} + +func (p *SourcePath) appendServiceDescriptorProto(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 1: + b = p.appendSingularField(b, "name", nil) + case 2: + b = p.appendRepeatedField(b, "method", (*SourcePath).appendMethodDescriptorProto) + case 3: + b = p.appendSingularField(b, "options", (*SourcePath).appendServiceOptions) + } + return b +} + +func (p *SourcePath) appendFieldDescriptorProto(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 1: + b = p.appendSingularField(b, "name", nil) + case 3: + b = p.appendSingularField(b, "number", nil) + case 4: + b = p.appendSingularField(b, "label", nil) + case 5: + b = p.appendSingularField(b, "type", nil) + case 6: + b = p.appendSingularField(b, "type_name", nil) + case 2: + b = p.appendSingularField(b, "extendee", nil) + case 7: + b = p.appendSingularField(b, "default_value", nil) + case 9: + b = p.appendSingularField(b, "oneof_index", nil) + case 10: + b = p.appendSingularField(b, "json_name", nil) + case 8: + b = p.appendSingularField(b, "options", (*SourcePath).appendFieldOptions) + case 17: + b = p.appendSingularField(b, "proto3_optional", nil) + } + return b +} + +func (p *SourcePath) appendFileOptions(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 1: + b = p.appendSingularField(b, "java_package", nil) + case 8: + b = p.appendSingularField(b, "java_outer_classname", nil) + case 10: + b = p.appendSingularField(b, "java_multiple_files", nil) + case 20: + b = p.appendSingularField(b, "java_generate_equals_and_hash", nil) + case 27: + b = p.appendSingularField(b, "java_string_check_utf8", nil) + case 9: + b = p.appendSingularField(b, "optimize_for", nil) + case 11: + b = p.appendSingularField(b, "go_package", nil) + case 16: + b = p.appendSingularField(b, "cc_generic_services", nil) + case 17: + b = p.appendSingularField(b, "java_generic_services", nil) + case 18: + b = p.appendSingularField(b, "py_generic_services", nil) + case 23: + b = p.appendSingularField(b, "deprecated", nil) + case 31: + b = p.appendSingularField(b, "cc_enable_arenas", nil) + case 36: + b = p.appendSingularField(b, "objc_class_prefix", nil) + case 37: + b = p.appendSingularField(b, "csharp_namespace", nil) + case 39: + b = p.appendSingularField(b, "swift_prefix", nil) + case 40: + b = p.appendSingularField(b, "php_class_prefix", nil) + case 41: + b = p.appendSingularField(b, "php_namespace", nil) + case 44: + b = p.appendSingularField(b, "php_metadata_namespace", nil) + case 45: + b = p.appendSingularField(b, "ruby_package", nil) + case 50: + b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet) + case 999: + b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption) + } + return b +} + +func (p *SourcePath) appendSourceCodeInfo(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 1: + b = p.appendRepeatedField(b, "location", (*SourcePath).appendSourceCodeInfo_Location) + } + return b +} + +func (p *SourcePath) appendDescriptorProto_ExtensionRange(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 1: + b = p.appendSingularField(b, "start", nil) + case 2: + b = p.appendSingularField(b, "end", nil) + case 3: + b = p.appendSingularField(b, "options", (*SourcePath).appendExtensionRangeOptions) + } + return b +} + +func (p *SourcePath) appendOneofDescriptorProto(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 1: + b = p.appendSingularField(b, "name", nil) + case 2: + b = p.appendSingularField(b, "options", (*SourcePath).appendOneofOptions) + } + return b +} + +func (p *SourcePath) appendMessageOptions(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 1: + b = p.appendSingularField(b, "message_set_wire_format", nil) + case 2: + b = p.appendSingularField(b, "no_standard_descriptor_accessor", nil) + case 3: + b = p.appendSingularField(b, "deprecated", nil) + case 7: + b = p.appendSingularField(b, "map_entry", nil) + case 11: + b = p.appendSingularField(b, "deprecated_legacy_json_field_conflicts", nil) + case 12: + b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet) + case 999: + b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption) + } + return b +} + +func (p *SourcePath) appendDescriptorProto_ReservedRange(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 1: + b = p.appendSingularField(b, "start", nil) + case 2: + b = p.appendSingularField(b, "end", nil) + } + return b +} + +func (p *SourcePath) appendEnumValueDescriptorProto(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 1: + b = p.appendSingularField(b, "name", nil) + case 2: + b = p.appendSingularField(b, "number", nil) + case 3: + b = p.appendSingularField(b, "options", (*SourcePath).appendEnumValueOptions) + } + return b +} + +func (p *SourcePath) appendEnumOptions(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 2: + b = p.appendSingularField(b, "allow_alias", nil) + case 3: + b = p.appendSingularField(b, "deprecated", nil) + case 6: + b = p.appendSingularField(b, "deprecated_legacy_json_field_conflicts", nil) + case 7: + b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet) + case 999: + b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption) + } + return b +} + +func (p *SourcePath) appendEnumDescriptorProto_EnumReservedRange(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 1: + b = p.appendSingularField(b, "start", nil) + case 2: + b = p.appendSingularField(b, "end", nil) + } + return b +} + +func (p *SourcePath) appendMethodDescriptorProto(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 1: + b = p.appendSingularField(b, "name", nil) + case 2: + b = p.appendSingularField(b, "input_type", nil) + case 3: + b = p.appendSingularField(b, "output_type", nil) + case 4: + b = p.appendSingularField(b, "options", (*SourcePath).appendMethodOptions) + case 5: + b = p.appendSingularField(b, "client_streaming", nil) + case 6: + b = p.appendSingularField(b, "server_streaming", nil) + } + return b +} + +func (p *SourcePath) appendServiceOptions(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 34: + b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet) + case 33: + b = p.appendSingularField(b, "deprecated", nil) + case 999: + b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption) + } + return b +} + +func (p *SourcePath) appendFieldOptions(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 1: + b = p.appendSingularField(b, "ctype", nil) + case 2: + b = p.appendSingularField(b, "packed", nil) + case 6: + b = p.appendSingularField(b, "jstype", nil) + case 5: + b = p.appendSingularField(b, "lazy", nil) + case 15: + b = p.appendSingularField(b, "unverified_lazy", nil) + case 3: + b = p.appendSingularField(b, "deprecated", nil) + case 10: + b = p.appendSingularField(b, "weak", nil) + case 16: + b = p.appendSingularField(b, "debug_redact", nil) + case 17: + b = p.appendSingularField(b, "retention", nil) + case 19: + b = p.appendRepeatedField(b, "targets", nil) + case 20: + b = p.appendRepeatedField(b, "edition_defaults", (*SourcePath).appendFieldOptions_EditionDefault) + case 21: + b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet) + case 22: + b = p.appendSingularField(b, "feature_support", (*SourcePath).appendFieldOptions_FeatureSupport) + case 999: + b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption) + } + return b +} + +func (p *SourcePath) appendFeatureSet(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 1: + b = p.appendSingularField(b, "field_presence", nil) + case 2: + b = p.appendSingularField(b, "enum_type", nil) + case 3: + b = p.appendSingularField(b, "repeated_field_encoding", nil) + case 4: + b = p.appendSingularField(b, "utf8_validation", nil) + case 5: + b = p.appendSingularField(b, "message_encoding", nil) + case 6: + b = p.appendSingularField(b, "json_format", nil) + case 7: + b = p.appendSingularField(b, "enforce_naming_style", nil) + case 8: + b = p.appendSingularField(b, "default_symbol_visibility", nil) + } + return b +} + +func (p *SourcePath) appendUninterpretedOption(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 2: + b = p.appendRepeatedField(b, "name", (*SourcePath).appendUninterpretedOption_NamePart) + case 3: + b = p.appendSingularField(b, "identifier_value", nil) + case 4: + b = p.appendSingularField(b, "positive_int_value", nil) + case 5: + b = p.appendSingularField(b, "negative_int_value", nil) + case 6: + b = p.appendSingularField(b, "double_value", nil) + case 7: + b = p.appendSingularField(b, "string_value", nil) + case 8: + b = p.appendSingularField(b, "aggregate_value", nil) + } + return b +} + +func (p *SourcePath) appendSourceCodeInfo_Location(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 1: + b = p.appendRepeatedField(b, "path", nil) + case 2: + b = p.appendRepeatedField(b, "span", nil) + case 3: + b = p.appendSingularField(b, "leading_comments", nil) + case 4: + b = p.appendSingularField(b, "trailing_comments", nil) + case 6: + b = p.appendRepeatedField(b, "leading_detached_comments", nil) + } + return b +} + +func (p *SourcePath) appendExtensionRangeOptions(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 999: + b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption) + case 2: + b = p.appendRepeatedField(b, "declaration", (*SourcePath).appendExtensionRangeOptions_Declaration) + case 50: + b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet) + case 3: + b = p.appendSingularField(b, "verification", nil) + } + return b +} + +func (p *SourcePath) appendOneofOptions(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 1: + b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet) + case 999: + b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption) + } + return b +} + +func (p *SourcePath) appendEnumValueOptions(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 1: + b = p.appendSingularField(b, "deprecated", nil) + case 2: + b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet) + case 3: + b = p.appendSingularField(b, "debug_redact", nil) + case 4: + b = p.appendSingularField(b, "feature_support", (*SourcePath).appendFieldOptions_FeatureSupport) + case 999: + b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption) + } + return b +} + +func (p *SourcePath) appendMethodOptions(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 33: + b = p.appendSingularField(b, "deprecated", nil) + case 34: + b = p.appendSingularField(b, "idempotency_level", nil) + case 35: + b = p.appendSingularField(b, "features", (*SourcePath).appendFeatureSet) + case 999: + b = p.appendRepeatedField(b, "uninterpreted_option", (*SourcePath).appendUninterpretedOption) + } + return b +} + +func (p *SourcePath) appendFieldOptions_EditionDefault(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 3: + b = p.appendSingularField(b, "edition", nil) + case 2: + b = p.appendSingularField(b, "value", nil) + } + return b +} + +func (p *SourcePath) appendFieldOptions_FeatureSupport(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 1: + b = p.appendSingularField(b, "edition_introduced", nil) + case 2: + b = p.appendSingularField(b, "edition_deprecated", nil) + case 3: + b = p.appendSingularField(b, "deprecation_warning", nil) + case 4: + b = p.appendSingularField(b, "edition_removed", nil) + } + return b +} + +func (p *SourcePath) appendUninterpretedOption_NamePart(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 1: + b = p.appendSingularField(b, "name_part", nil) + case 2: + b = p.appendSingularField(b, "is_extension", nil) + } + return b +} + +func (p *SourcePath) appendExtensionRangeOptions_Declaration(b []byte) []byte { + if len(*p) == 0 { + return b + } + switch (*p)[0] { + case 1: + b = p.appendSingularField(b, "number", nil) + case 2: + b = p.appendSingularField(b, "full_name", nil) + case 3: + b = p.appendSingularField(b, "type", nil) + case 5: + b = p.appendSingularField(b, "reserved", nil) + case 6: + b = p.appendSingularField(b, "repeated", nil) + } + return b +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/type.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/type.go new file mode 100644 index 0000000..cd7fbc8 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/type.go @@ -0,0 +1,666 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protoreflect + +// Descriptor provides a set of accessors that are common to every descriptor. +// Each descriptor type wraps the equivalent google.protobuf.XXXDescriptorProto, +// but provides efficient lookup and immutability. +// +// Each descriptor is comparable. Equality implies that the two types are +// exactly identical. However, it is possible for the same semantically +// identical proto type to be represented by multiple type descriptors. +// +// For example, suppose we have t1 and t2 which are both an [MessageDescriptor]. +// If t1 == t2, then the types are definitely equal and all accessors return +// the same information. However, if t1 != t2, then it is still possible that +// they still represent the same proto type (e.g., t1.FullName == t2.FullName). +// This can occur if a descriptor type is created dynamically, or multiple +// versions of the same proto type are accidentally linked into the Go binary. +type Descriptor interface { + // ParentFile returns the parent file descriptor that this descriptor + // is declared within. The parent file for the file descriptor is itself. + // + // Support for this functionality is optional and may return nil. + ParentFile() FileDescriptor + + // Parent returns the parent containing this descriptor declaration. + // The following shows the mapping from child type to possible parent types: + // + // ╔═════════════════════╤═══════════════════════════════════╗ + // ║ Child type │ Possible parent types ║ + // ╠═════════════════════╪═══════════════════════════════════╣ + // ║ FileDescriptor │ nil ║ + // ║ MessageDescriptor │ FileDescriptor, MessageDescriptor ║ + // ║ FieldDescriptor │ FileDescriptor, MessageDescriptor ║ + // ║ OneofDescriptor │ MessageDescriptor ║ + // ║ EnumDescriptor │ FileDescriptor, MessageDescriptor ║ + // ║ EnumValueDescriptor │ EnumDescriptor ║ + // ║ ServiceDescriptor │ FileDescriptor ║ + // ║ MethodDescriptor │ ServiceDescriptor ║ + // ╚═════════════════════╧═══════════════════════════════════╝ + // + // Support for this functionality is optional and may return nil. + Parent() Descriptor + + // Index returns the index of this descriptor within its parent. + // It returns 0 if the descriptor does not have a parent or if the parent + // is unknown. + Index() int + + // Syntax is the protobuf syntax. + Syntax() Syntax // e.g., Proto2 or Proto3 + + // Name is the short name of the declaration (i.e., FullName.Name). + Name() Name // e.g., "Any" + + // FullName is the fully-qualified name of the declaration. + // + // The FullName is a concatenation of the full name of the type that this + // type is declared within and the declaration name. For example, + // field "foo_field" in message "proto.package.MyMessage" is + // uniquely identified as "proto.package.MyMessage.foo_field". + // Enum values are an exception to the rule (see EnumValueDescriptor). + FullName() FullName // e.g., "google.protobuf.Any" + + // IsPlaceholder reports whether type information is missing since a + // dependency is not resolved, in which case only name information is known. + // + // Placeholder types may only be returned by the following accessors + // as a result of unresolved dependencies: + // + // ╔═══════════════════════════════════╤═════════════════════╗ + // ║ Accessor │ Descriptor ║ + // ╠═══════════════════════════════════╪═════════════════════╣ + // ║ FileImports.FileDescriptor │ FileDescriptor ║ + // ║ FieldDescriptor.Enum │ EnumDescriptor ║ + // ║ FieldDescriptor.Message │ MessageDescriptor ║ + // ║ FieldDescriptor.DefaultEnumValue │ EnumValueDescriptor ║ + // ║ FieldDescriptor.ContainingMessage │ MessageDescriptor ║ + // ║ MethodDescriptor.Input │ MessageDescriptor ║ + // ║ MethodDescriptor.Output │ MessageDescriptor ║ + // ╚═══════════════════════════════════╧═════════════════════╝ + // + // If true, only Name and FullName are valid. + // For FileDescriptor, the Path is also valid. + IsPlaceholder() bool + + // Options returns the descriptor options. The caller must not modify + // the returned value. + // + // To avoid a dependency cycle, this function returns a proto.Message value. + // The proto message type returned for each descriptor type is as follows: + // ╔═════════════════════╤══════════════════════════════════════════╗ + // ║ Go type │ Protobuf message type ║ + // ╠═════════════════════╪══════════════════════════════════════════╣ + // ║ FileDescriptor │ google.protobuf.FileOptions ║ + // ║ EnumDescriptor │ google.protobuf.EnumOptions ║ + // ║ EnumValueDescriptor │ google.protobuf.EnumValueOptions ║ + // ║ MessageDescriptor │ google.protobuf.MessageOptions ║ + // ║ FieldDescriptor │ google.protobuf.FieldOptions ║ + // ║ OneofDescriptor │ google.protobuf.OneofOptions ║ + // ║ ServiceDescriptor │ google.protobuf.ServiceOptions ║ + // ║ MethodDescriptor │ google.protobuf.MethodOptions ║ + // ╚═════════════════════╧══════════════════════════════════════════╝ + // + // This method returns a typed nil-pointer if no options are present. + // The caller must import the descriptorpb package to use this. + Options() ProtoMessage + + doNotImplement +} + +// FileDescriptor describes the types in a complete proto file and +// corresponds with the google.protobuf.FileDescriptorProto message. +// +// Top-level declarations: +// [EnumDescriptor], [MessageDescriptor], [FieldDescriptor], and/or [ServiceDescriptor]. +type FileDescriptor interface { + Descriptor // Descriptor.FullName is identical to Package + + // Path returns the file name, relative to the source tree root. + Path() string // e.g., "path/to/file.proto" + // Package returns the protobuf package namespace. + Package() FullName // e.g., "google.protobuf" + + // Imports is a list of imported proto files. + Imports() FileImports + + // Enums is a list of the top-level enum declarations. + Enums() EnumDescriptors + // Messages is a list of the top-level message declarations. + Messages() MessageDescriptors + // Extensions is a list of the top-level extension declarations. + Extensions() ExtensionDescriptors + // Services is a list of the top-level service declarations. + Services() ServiceDescriptors + + // SourceLocations is a list of source locations. + SourceLocations() SourceLocations + + isFileDescriptor +} +type isFileDescriptor interface{ ProtoType(FileDescriptor) } + +// FileImports is a list of file imports. +type FileImports interface { + // Len reports the number of files imported by this proto file. + Len() int + // Get returns the ith FileImport. It panics if out of bounds. + Get(i int) FileImport + + doNotImplement +} + +// FileImport is the declaration for a proto file import. +type FileImport struct { + // FileDescriptor is the file type for the given import. + // It is a placeholder descriptor if IsWeak is set or if a dependency has + // not been regenerated to implement the new reflection APIs. + FileDescriptor + + // IsPublic reports whether this is a public import, which causes this file + // to alias declarations within the imported file. The intended use cases + // for this feature is the ability to move proto files without breaking + // existing dependencies. + // + // The current file and the imported file must be within proto package. + IsPublic bool + + // Deprecated: support for weak fields has been removed. + IsWeak bool +} + +// MessageDescriptor describes a message and +// corresponds with the google.protobuf.DescriptorProto message. +// +// Nested declarations: +// [FieldDescriptor], [OneofDescriptor], [FieldDescriptor], [EnumDescriptor], +// and/or [MessageDescriptor]. +type MessageDescriptor interface { + Descriptor + + // IsMapEntry indicates that this is an auto-generated message type to + // represent the entry type for a map field. + // + // Map entry messages have only two fields: + // • a "key" field with a field number of 1 + // • a "value" field with a field number of 2 + // The key and value types are determined by these two fields. + // + // If IsMapEntry is true, it implies that FieldDescriptor.IsMap is true + // for some field with this message type. + IsMapEntry() bool + + // Fields is a list of nested field declarations. + Fields() FieldDescriptors + // Oneofs is a list of nested oneof declarations. + Oneofs() OneofDescriptors + + // ReservedNames is a list of reserved field names. + ReservedNames() Names + // ReservedRanges is a list of reserved ranges of field numbers. + ReservedRanges() FieldRanges + // RequiredNumbers is a list of required field numbers. + // In Proto3, it is always an empty list. + RequiredNumbers() FieldNumbers + // ExtensionRanges is the field ranges used for extension fields. + // In Proto3, it is always an empty ranges. + ExtensionRanges() FieldRanges + // ExtensionRangeOptions returns the ith extension range options. + // + // To avoid a dependency cycle, this method returns a proto.Message] value, + // which always contains a google.protobuf.ExtensionRangeOptions message. + // This method returns a typed nil-pointer if no options are present. + // The caller must import the descriptorpb package to use this. + ExtensionRangeOptions(i int) ProtoMessage + + // Enums is a list of nested enum declarations. + Enums() EnumDescriptors + // Messages is a list of nested message declarations. + Messages() MessageDescriptors + // Extensions is a list of nested extension declarations. + Extensions() ExtensionDescriptors + + isMessageDescriptor +} +type isMessageDescriptor interface{ ProtoType(MessageDescriptor) } + +// MessageType encapsulates a [MessageDescriptor] with a concrete Go implementation. +// It is recommended that implementations of this interface also implement the +// [MessageFieldTypes] interface. +type MessageType interface { + // New returns a newly allocated empty message. + // It may return nil for synthetic messages representing a map entry. + New() Message + + // Zero returns an empty, read-only message. + // It may return nil for synthetic messages representing a map entry. + Zero() Message + + // Descriptor returns the message descriptor. + // + // Invariant: t.Descriptor() == t.New().Descriptor() + Descriptor() MessageDescriptor +} + +// MessageFieldTypes extends a [MessageType] by providing type information +// regarding enums and messages referenced by the message fields. +type MessageFieldTypes interface { + MessageType + + // Enum returns the EnumType for the ith field in MessageDescriptor.Fields. + // It returns nil if the ith field is not an enum kind. + // It panics if out of bounds. + // + // Invariant: mt.Enum(i).Descriptor() == mt.Descriptor().Fields(i).Enum() + Enum(i int) EnumType + + // Message returns the MessageType for the ith field in MessageDescriptor.Fields. + // It returns nil if the ith field is not a message or group kind. + // It panics if out of bounds. + // + // Invariant: mt.Message(i).Descriptor() == mt.Descriptor().Fields(i).Message() + Message(i int) MessageType +} + +// MessageDescriptors is a list of message declarations. +type MessageDescriptors interface { + // Len reports the number of messages. + Len() int + // Get returns the ith MessageDescriptor. It panics if out of bounds. + Get(i int) MessageDescriptor + // ByName returns the MessageDescriptor for a message named s. + // It returns nil if not found. + ByName(s Name) MessageDescriptor + + doNotImplement +} + +// FieldDescriptor describes a field within a message and +// corresponds with the google.protobuf.FieldDescriptorProto message. +// +// It is used for both normal fields defined within the parent message +// (e.g., [MessageDescriptor.Fields]) and fields that extend some remote message +// (e.g., [FileDescriptor.Extensions] or [MessageDescriptor.Extensions]). +type FieldDescriptor interface { + Descriptor + + // Number reports the unique number for this field. + Number() FieldNumber + // Cardinality reports the cardinality for this field. + Cardinality() Cardinality + // Kind reports the basic kind for this field. + Kind() Kind + + // HasJSONName reports whether this field has an explicitly set JSON name. + HasJSONName() bool + + // JSONName reports the name used for JSON serialization. + // It is usually the camel-cased form of the field name. + // Extension fields are represented by the full name surrounded by brackets. + JSONName() string + + // TextName reports the name used for text serialization. + // It is usually the name of the field, except that groups use the name + // of the inlined message, and extension fields are represented by the + // full name surrounded by brackets. + TextName() string + + // HasPresence reports whether the field distinguishes between unpopulated + // and default values. + HasPresence() bool + + // IsExtension reports whether this is an extension field. If false, + // then Parent and ContainingMessage refer to the same message. + // Otherwise, ContainingMessage and Parent likely differ. + IsExtension() bool + + // HasOptionalKeyword reports whether the "optional" keyword was explicitly + // specified in the source .proto file. + HasOptionalKeyword() bool + + // Deprecated: support for weak fields has been removed. + IsWeak() bool + + // IsPacked reports whether repeated primitive numeric kinds should be + // serialized using a packed encoding. + // If true, then it implies Cardinality is Repeated. + IsPacked() bool + + // IsList reports whether this field represents a list, + // where the value type for the associated field is a List. + // It is equivalent to checking whether Cardinality is Repeated and + // that IsMap reports false. + IsList() bool + + // IsMap reports whether this field represents a map, + // where the value type for the associated field is a Map. + // It is equivalent to checking whether Cardinality is Repeated, + // that the Kind is MessageKind, and that MessageDescriptor.IsMapEntry reports true. + IsMap() bool + + // MapKey returns the field descriptor for the key in the map entry. + // It returns nil if IsMap reports false. + MapKey() FieldDescriptor + + // MapValue returns the field descriptor for the value in the map entry. + // It returns nil if IsMap reports false. + MapValue() FieldDescriptor + + // HasDefault reports whether this field has a default value. + HasDefault() bool + + // Default returns the default value for scalar fields. + // For proto2, it is the default value as specified in the proto file, + // or the zero value if unspecified. + // For proto3, it is always the zero value of the scalar. + // The Value type is determined by the Kind. + Default() Value + + // DefaultEnumValue returns the enum value descriptor for the default value + // of an enum field, and is nil for any other kind of field. + DefaultEnumValue() EnumValueDescriptor + + // ContainingOneof is the containing oneof that this field belongs to, + // and is nil if this field is not part of a oneof. + ContainingOneof() OneofDescriptor + + // ContainingMessage is the containing message that this field belongs to. + // For extension fields, this may not necessarily be the parent message + // that the field is declared within. + ContainingMessage() MessageDescriptor + + // Enum is the enum descriptor if Kind is EnumKind. + // It returns nil for any other Kind. + Enum() EnumDescriptor + + // Message is the message descriptor if Kind is + // MessageKind or GroupKind. It returns nil for any other Kind. + Message() MessageDescriptor + + isFieldDescriptor +} +type isFieldDescriptor interface{ ProtoType(FieldDescriptor) } + +// FieldDescriptors is a list of field declarations. +type FieldDescriptors interface { + // Len reports the number of fields. + Len() int + // Get returns the ith FieldDescriptor. It panics if out of bounds. + Get(i int) FieldDescriptor + // ByName returns the FieldDescriptor for a field named s. + // It returns nil if not found. + ByName(s Name) FieldDescriptor + // ByJSONName returns the FieldDescriptor for a field with s as the JSON name. + // It returns nil if not found. + ByJSONName(s string) FieldDescriptor + // ByTextName returns the FieldDescriptor for a field with s as the text name. + // It returns nil if not found. + ByTextName(s string) FieldDescriptor + // ByNumber returns the FieldDescriptor for a field numbered n. + // It returns nil if not found. + ByNumber(n FieldNumber) FieldDescriptor + + doNotImplement +} + +// OneofDescriptor describes a oneof field set within a given message and +// corresponds with the google.protobuf.OneofDescriptorProto message. +type OneofDescriptor interface { + Descriptor + + // IsSynthetic reports whether this is a synthetic oneof created to support + // proto3 optional semantics. If true, Fields contains exactly one field + // with FieldDescriptor.HasOptionalKeyword specified. + IsSynthetic() bool + + // Fields is a list of fields belonging to this oneof. + Fields() FieldDescriptors + + isOneofDescriptor +} +type isOneofDescriptor interface{ ProtoType(OneofDescriptor) } + +// OneofDescriptors is a list of oneof declarations. +type OneofDescriptors interface { + // Len reports the number of oneof fields. + Len() int + // Get returns the ith OneofDescriptor. It panics if out of bounds. + Get(i int) OneofDescriptor + // ByName returns the OneofDescriptor for a oneof named s. + // It returns nil if not found. + ByName(s Name) OneofDescriptor + + doNotImplement +} + +// ExtensionDescriptor is an alias of [FieldDescriptor] for documentation. +type ExtensionDescriptor = FieldDescriptor + +// ExtensionTypeDescriptor is an [ExtensionDescriptor] with an associated [ExtensionType]. +type ExtensionTypeDescriptor interface { + ExtensionDescriptor + + // Type returns the associated ExtensionType. + Type() ExtensionType + + // Descriptor returns the plain ExtensionDescriptor without the + // associated ExtensionType. + Descriptor() ExtensionDescriptor +} + +// ExtensionDescriptors is a list of field declarations. +type ExtensionDescriptors interface { + // Len reports the number of fields. + Len() int + // Get returns the ith ExtensionDescriptor. It panics if out of bounds. + Get(i int) ExtensionDescriptor + // ByName returns the ExtensionDescriptor for a field named s. + // It returns nil if not found. + ByName(s Name) ExtensionDescriptor + + doNotImplement +} + +// ExtensionType encapsulates an [ExtensionDescriptor] with a concrete +// Go implementation. The nested field descriptor must be for a extension field. +// +// While a normal field is a member of the parent message that it is declared +// within (see [Descriptor.Parent]), an extension field is a member of some other +// target message (see [FieldDescriptor.ContainingMessage]) and may have no +// relationship with the parent. However, the full name of an extension field is +// relative to the parent that it is declared within. +// +// For example: +// +// syntax = "proto2"; +// package example; +// message FooMessage { +// extensions 100 to max; +// } +// message BarMessage { +// extends FooMessage { optional BarMessage bar_field = 100; } +// } +// +// Field "bar_field" is an extension of FooMessage, but its full name is +// "example.BarMessage.bar_field" instead of "example.FooMessage.bar_field". +type ExtensionType interface { + // New returns a new value for the field. + // For scalars, this returns the default value in native Go form. + New() Value + + // Zero returns a new value for the field. + // For scalars, this returns the default value in native Go form. + // For composite types, this returns an empty, read-only message, list, or map. + Zero() Value + + // TypeDescriptor returns the extension type descriptor. + TypeDescriptor() ExtensionTypeDescriptor + + // ValueOf wraps the input and returns it as a Value. + // ValueOf panics if the input value is invalid or not the appropriate type. + // + // ValueOf is more extensive than protoreflect.ValueOf for a given field's + // value as it has more type information available. + ValueOf(any) Value + + // InterfaceOf completely unwraps the Value to the underlying Go type. + // InterfaceOf panics if the input is nil or does not represent the + // appropriate underlying Go type. For composite types, it panics if the + // value is not mutable. + // + // InterfaceOf is able to unwrap the Value further than Value.Interface + // as it has more type information available. + InterfaceOf(Value) any + + // IsValidValue reports whether the Value is valid to assign to the field. + IsValidValue(Value) bool + + // IsValidInterface reports whether the input is valid to assign to the field. + IsValidInterface(any) bool +} + +// EnumDescriptor describes an enum and +// corresponds with the google.protobuf.EnumDescriptorProto message. +// +// Nested declarations: +// [EnumValueDescriptor]. +type EnumDescriptor interface { + Descriptor + + // Values is a list of nested enum value declarations. + Values() EnumValueDescriptors + + // ReservedNames is a list of reserved enum names. + ReservedNames() Names + // ReservedRanges is a list of reserved ranges of enum numbers. + ReservedRanges() EnumRanges + + // IsClosed reports whether this enum uses closed semantics. + // See https://protobuf.dev/programming-guides/enum/#definitions. + // Note: the Go protobuf implementation is not spec compliant and treats + // all enums as open enums. + IsClosed() bool + + isEnumDescriptor +} +type isEnumDescriptor interface{ ProtoType(EnumDescriptor) } + +// EnumType encapsulates an [EnumDescriptor] with a concrete Go implementation. +type EnumType interface { + // New returns an instance of this enum type with its value set to n. + New(n EnumNumber) Enum + + // Descriptor returns the enum descriptor. + // + // Invariant: t.Descriptor() == t.New(0).Descriptor() + Descriptor() EnumDescriptor +} + +// EnumDescriptors is a list of enum declarations. +type EnumDescriptors interface { + // Len reports the number of enum types. + Len() int + // Get returns the ith EnumDescriptor. It panics if out of bounds. + Get(i int) EnumDescriptor + // ByName returns the EnumDescriptor for an enum named s. + // It returns nil if not found. + ByName(s Name) EnumDescriptor + + doNotImplement +} + +// EnumValueDescriptor describes an enum value and +// corresponds with the google.protobuf.EnumValueDescriptorProto message. +// +// All other proto declarations are in the namespace of the parent. +// However, enum values do not follow this rule and are within the namespace +// of the parent's parent (i.e., they are a sibling of the containing enum). +// Thus, a value named "FOO_VALUE" declared within an enum uniquely identified +// as "proto.package.MyEnum" has a full name of "proto.package.FOO_VALUE". +type EnumValueDescriptor interface { + Descriptor + + // Number returns the enum value as an integer. + Number() EnumNumber + + isEnumValueDescriptor +} +type isEnumValueDescriptor interface{ ProtoType(EnumValueDescriptor) } + +// EnumValueDescriptors is a list of enum value declarations. +type EnumValueDescriptors interface { + // Len reports the number of enum values. + Len() int + // Get returns the ith EnumValueDescriptor. It panics if out of bounds. + Get(i int) EnumValueDescriptor + // ByName returns the EnumValueDescriptor for the enum value named s. + // It returns nil if not found. + ByName(s Name) EnumValueDescriptor + // ByNumber returns the EnumValueDescriptor for the enum value numbered n. + // If multiple have the same number, the first one defined is returned + // It returns nil if not found. + ByNumber(n EnumNumber) EnumValueDescriptor + + doNotImplement +} + +// ServiceDescriptor describes a service and +// corresponds with the google.protobuf.ServiceDescriptorProto message. +// +// Nested declarations: [MethodDescriptor]. +type ServiceDescriptor interface { + Descriptor + + // Methods is a list of nested message declarations. + Methods() MethodDescriptors + + isServiceDescriptor +} +type isServiceDescriptor interface{ ProtoType(ServiceDescriptor) } + +// ServiceDescriptors is a list of service declarations. +type ServiceDescriptors interface { + // Len reports the number of services. + Len() int + // Get returns the ith ServiceDescriptor. It panics if out of bounds. + Get(i int) ServiceDescriptor + // ByName returns the ServiceDescriptor for a service named s. + // It returns nil if not found. + ByName(s Name) ServiceDescriptor + + doNotImplement +} + +// MethodDescriptor describes a method and +// corresponds with the google.protobuf.MethodDescriptorProto message. +type MethodDescriptor interface { + Descriptor + + // Input is the input message descriptor. + Input() MessageDescriptor + // Output is the output message descriptor. + Output() MessageDescriptor + // IsStreamingClient reports whether the client streams multiple messages. + IsStreamingClient() bool + // IsStreamingServer reports whether the server streams multiple messages. + IsStreamingServer() bool + + isMethodDescriptor +} +type isMethodDescriptor interface{ ProtoType(MethodDescriptor) } + +// MethodDescriptors is a list of method declarations. +type MethodDescriptors interface { + // Len reports the number of methods. + Len() int + // Get returns the ith MethodDescriptor. It panics if out of bounds. + Get(i int) MethodDescriptor + // ByName returns the MethodDescriptor for a service method named s. + // It returns nil if not found. + ByName(s Name) MethodDescriptor + + doNotImplement +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go new file mode 100644 index 0000000..a4b78ac --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go @@ -0,0 +1,285 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protoreflect + +import "google.golang.org/protobuf/encoding/protowire" + +// Enum is a reflection interface for a concrete enum value, +// which provides type information and a getter for the enum number. +// Enum does not provide a mutable API since enums are commonly backed by +// Go constants, which are not addressable. +type Enum interface { + // Descriptor returns enum descriptor, which contains only the protobuf + // type information for the enum. + Descriptor() EnumDescriptor + + // Type returns the enum type, which encapsulates both Go and protobuf + // type information. If the Go type information is not needed, + // it is recommended that the enum descriptor be used instead. + Type() EnumType + + // Number returns the enum value as an integer. + Number() EnumNumber +} + +// Message is a reflective interface for a concrete message value, +// encapsulating both type and value information for the message. +// +// Accessor/mutators for individual fields are keyed by [FieldDescriptor]. +// For non-extension fields, the descriptor must exactly match the +// field known by the parent message. +// For extension fields, the descriptor must implement [ExtensionTypeDescriptor], +// extend the parent message (i.e., have the same message [FullName]), and +// be within the parent's extension range. +// +// Each field [Value] can be a scalar or a composite type ([Message], [List], or [Map]). +// See [Value] for the Go types associated with a [FieldDescriptor]. +// Providing a [Value] that is invalid or of an incorrect type panics. +type Message interface { + // Descriptor returns message descriptor, which contains only the protobuf + // type information for the message. + Descriptor() MessageDescriptor + + // Type returns the message type, which encapsulates both Go and protobuf + // type information. If the Go type information is not needed, + // it is recommended that the message descriptor be used instead. + Type() MessageType + + // New returns a newly allocated and mutable empty message. + New() Message + + // Interface unwraps the message reflection interface and + // returns the underlying ProtoMessage interface. + Interface() ProtoMessage + + // Range iterates over every populated field in an undefined order, + // calling f for each field descriptor and value encountered. + // Range returns immediately if f returns false. + // While iterating, mutating operations may only be performed + // on the current field descriptor. + Range(f func(FieldDescriptor, Value) bool) + + // Has reports whether a field is populated. + // + // Some fields have the property of nullability where it is possible to + // distinguish between the default value of a field and whether the field + // was explicitly populated with the default value. Singular message fields, + // member fields of a oneof, and proto2 scalar fields are nullable. Such + // fields are populated only if explicitly set. + // + // In other cases (aside from the nullable cases above), + // a proto3 scalar field is populated if it contains a non-zero value, and + // a repeated field is populated if it is non-empty. + Has(FieldDescriptor) bool + + // Clear clears the field such that a subsequent Has call reports false. + // + // Clearing an extension field clears both the extension type and value + // associated with the given field number. + // + // Clear is a mutating operation and unsafe for concurrent use. + Clear(FieldDescriptor) + + // Get retrieves the value for a field. + // + // For unpopulated scalars, it returns the default value, where + // the default value of a bytes scalar is guaranteed to be a copy. + // For unpopulated composite types, it returns an empty, read-only view + // of the value; to obtain a mutable reference, use Mutable. + Get(FieldDescriptor) Value + + // Set stores the value for a field. + // + // For a field belonging to a oneof, it implicitly clears any other field + // that may be currently set within the same oneof. + // For extension fields, it implicitly stores the provided ExtensionType. + // When setting a composite type, it is unspecified whether the stored value + // aliases the source's memory in any way. If the composite value is an + // empty, read-only value, then it panics. + // + // Set is a mutating operation and unsafe for concurrent use. + Set(FieldDescriptor, Value) + + // Mutable returns a mutable reference to a composite type. + // + // If the field is unpopulated, it may allocate a composite value. + // For a field belonging to a oneof, it implicitly clears any other field + // that may be currently set within the same oneof. + // For extension fields, it implicitly stores the provided ExtensionType + // if not already stored. + // It panics if the field does not contain a composite type. + // + // Mutable is a mutating operation and unsafe for concurrent use. + Mutable(FieldDescriptor) Value + + // NewField returns a new value that is assignable to the field + // for the given descriptor. For scalars, this returns the default value. + // For lists, maps, and messages, this returns a new, empty, mutable value. + NewField(FieldDescriptor) Value + + // WhichOneof reports which field within the oneof is populated, + // returning nil if none are populated. + // It panics if the oneof descriptor does not belong to this message. + WhichOneof(OneofDescriptor) FieldDescriptor + + // GetUnknown retrieves the entire list of unknown fields. + // The caller may only mutate the contents of the RawFields + // if the mutated bytes are stored back into the message with SetUnknown. + GetUnknown() RawFields + + // SetUnknown stores an entire list of unknown fields. + // The raw fields must be syntactically valid according to the wire format. + // An implementation may panic if this is not the case. + // Once stored, the caller must not mutate the content of the RawFields. + // An empty RawFields may be passed to clear the fields. + // + // SetUnknown is a mutating operation and unsafe for concurrent use. + SetUnknown(RawFields) + + // IsValid reports whether the message is valid. + // + // An invalid message is an empty, read-only value. + // + // An invalid message often corresponds to a nil pointer of the concrete + // message type, but the details are implementation dependent. + // Validity is not part of the protobuf data model, and may not + // be preserved in marshaling or other operations. + IsValid() bool + + // ProtoMethods returns optional fast-path implementations of various operations. + // This method may return nil. + // + // The returned methods type is identical to + // [google.golang.org/protobuf/runtime/protoiface.Methods]. + // Consult the protoiface package documentation for details. + ProtoMethods() *methods +} + +// RawFields is the raw bytes for an ordered sequence of fields. +// Each field contains both the tag (representing field number and wire type), +// and also the wire data itself. +type RawFields []byte + +// IsValid reports whether b is syntactically correct wire format. +func (b RawFields) IsValid() bool { + for len(b) > 0 { + _, _, n := protowire.ConsumeField(b) + if n < 0 { + return false + } + b = b[n:] + } + return true +} + +// List is a zero-indexed, ordered list. +// The element [Value] type is determined by [FieldDescriptor.Kind]. +// Providing a [Value] that is invalid or of an incorrect type panics. +type List interface { + // Len reports the number of entries in the List. + // Get, Set, and Truncate panic with out of bound indexes. + Len() int + + // Get retrieves the value at the given index. + // It never returns an invalid value. + Get(int) Value + + // Set stores a value for the given index. + // When setting a composite type, it is unspecified whether the set + // value aliases the source's memory in any way. + // + // Set is a mutating operation and unsafe for concurrent use. + Set(int, Value) + + // Append appends the provided value to the end of the list. + // When appending a composite type, it is unspecified whether the appended + // value aliases the source's memory in any way. + // + // Append is a mutating operation and unsafe for concurrent use. + Append(Value) + + // AppendMutable appends a new, empty, mutable message value to the end + // of the list and returns it. + // It panics if the list does not contain a message type. + AppendMutable() Value + + // Truncate truncates the list to a smaller length. + // + // Truncate is a mutating operation and unsafe for concurrent use. + Truncate(int) + + // NewElement returns a new value for a list element. + // For enums, this returns the first enum value. + // For other scalars, this returns the zero value. + // For messages, this returns a new, empty, mutable value. + NewElement() Value + + // IsValid reports whether the list is valid. + // + // An invalid list is an empty, read-only value. + // + // Validity is not part of the protobuf data model, and may not + // be preserved in marshaling or other operations. + IsValid() bool +} + +// Map is an unordered, associative map. +// The entry [MapKey] type is determined by [FieldDescriptor.MapKey].Kind. +// The entry [Value] type is determined by [FieldDescriptor.MapValue].Kind. +// Providing a [MapKey] or [Value] that is invalid or of an incorrect type panics. +type Map interface { + // Len reports the number of elements in the map. + Len() int + + // Range iterates over every map entry in an undefined order, + // calling f for each key and value encountered. + // Range calls f Len times unless f returns false, which stops iteration. + // While iterating, mutating operations may only be performed + // on the current map key. + Range(f func(MapKey, Value) bool) + + // Has reports whether an entry with the given key is in the map. + Has(MapKey) bool + + // Clear clears the entry associated with they given key. + // The operation does nothing if there is no entry associated with the key. + // + // Clear is a mutating operation and unsafe for concurrent use. + Clear(MapKey) + + // Get retrieves the value for an entry with the given key. + // It returns an invalid value for non-existent entries. + Get(MapKey) Value + + // Set stores the value for an entry with the given key. + // It panics when given a key or value that is invalid or the wrong type. + // When setting a composite type, it is unspecified whether the set + // value aliases the source's memory in any way. + // + // Set is a mutating operation and unsafe for concurrent use. + Set(MapKey, Value) + + // Mutable retrieves a mutable reference to the entry for the given key. + // If no entry exists for the key, it creates a new, empty, mutable value + // and stores it as the entry for the key. + // It panics if the map value is not a message. + Mutable(MapKey) Value + + // NewValue returns a new value assignable as a map value. + // For enums, this returns the first enum value. + // For other scalars, this returns the zero value. + // For messages, this returns a new, empty, mutable value. + NewValue() Value + + // IsValid reports whether the map is valid. + // + // An invalid map is an empty, read-only value. + // + // An invalid message often corresponds to a nil Go map value, + // but the details are implementation dependent. + // Validity is not part of the protobuf data model, and may not + // be preserved in marshaling or other operations. + IsValid() bool +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/value_equal.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/value_equal.go new file mode 100644 index 0000000..654599d --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/value_equal.go @@ -0,0 +1,168 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protoreflect + +import ( + "bytes" + "fmt" + "math" + "reflect" + + "google.golang.org/protobuf/encoding/protowire" +) + +// Equal reports whether v1 and v2 are recursively equal. +// +// - Values of different types are always unequal. +// +// - Bytes values are equal if they contain identical bytes. +// Empty bytes (regardless of nil-ness) are considered equal. +// +// - Floating point values are equal if they contain the same value. +// Unlike the == operator, a NaN is equal to another NaN. +// +// - Enums are equal if they contain the same number. +// Since [Value] does not contain an enum descriptor, +// enum values do not consider the type of the enum. +// +// - Other scalar values are equal if they contain the same value. +// +// - [Message] values are equal if they belong to the same message descriptor, +// have the same set of populated known and extension field values, +// and the same set of unknown fields values. +// +// - [List] values are equal if they are the same length and +// each corresponding element is equal. +// +// - [Map] values are equal if they have the same set of keys and +// the corresponding value for each key is equal. +func (v1 Value) Equal(v2 Value) bool { + return equalValue(v1, v2) +} + +func equalValue(x, y Value) bool { + eqType := x.typ == y.typ + switch x.typ { + case nilType: + return eqType + case boolType: + return eqType && x.Bool() == y.Bool() + case int32Type, int64Type: + return eqType && x.Int() == y.Int() + case uint32Type, uint64Type: + return eqType && x.Uint() == y.Uint() + case float32Type, float64Type: + return eqType && equalFloat(x.Float(), y.Float()) + case stringType: + return eqType && x.String() == y.String() + case bytesType: + return eqType && bytes.Equal(x.Bytes(), y.Bytes()) + case enumType: + return eqType && x.Enum() == y.Enum() + default: + switch x := x.Interface().(type) { + case Message: + y, ok := y.Interface().(Message) + return ok && equalMessage(x, y) + case List: + y, ok := y.Interface().(List) + return ok && equalList(x, y) + case Map: + y, ok := y.Interface().(Map) + return ok && equalMap(x, y) + default: + panic(fmt.Sprintf("unknown type: %T", x)) + } + } +} + +// equalFloat compares two floats, where NaNs are treated as equal. +func equalFloat(x, y float64) bool { + if math.IsNaN(x) || math.IsNaN(y) { + return math.IsNaN(x) && math.IsNaN(y) + } + return x == y +} + +// equalMessage compares two messages. +func equalMessage(mx, my Message) bool { + if mx.Descriptor() != my.Descriptor() { + return false + } + + nx := 0 + equal := true + mx.Range(func(fd FieldDescriptor, vx Value) bool { + nx++ + vy := my.Get(fd) + equal = my.Has(fd) && equalValue(vx, vy) + return equal + }) + if !equal { + return false + } + ny := 0 + my.Range(func(fd FieldDescriptor, vx Value) bool { + ny++ + return true + }) + if nx != ny { + return false + } + + return equalUnknown(mx.GetUnknown(), my.GetUnknown()) +} + +// equalList compares two lists. +func equalList(x, y List) bool { + if x.Len() != y.Len() { + return false + } + for i := x.Len() - 1; i >= 0; i-- { + if !equalValue(x.Get(i), y.Get(i)) { + return false + } + } + return true +} + +// equalMap compares two maps. +func equalMap(x, y Map) bool { + if x.Len() != y.Len() { + return false + } + equal := true + x.Range(func(k MapKey, vx Value) bool { + vy := y.Get(k) + equal = y.Has(k) && equalValue(vx, vy) + return equal + }) + return equal +} + +// equalUnknown compares unknown fields by direct comparison on the raw bytes +// of each individual field number. +func equalUnknown(x, y RawFields) bool { + if len(x) != len(y) { + return false + } + if bytes.Equal([]byte(x), []byte(y)) { + return true + } + + mx := make(map[FieldNumber]RawFields) + my := make(map[FieldNumber]RawFields) + for len(x) > 0 { + fnum, _, n := protowire.ConsumeField(x) + mx[fnum] = append(mx[fnum], x[:n]...) + x = x[n:] + } + for len(y) > 0 { + fnum, _, n := protowire.ConsumeField(y) + my[fnum] = append(my[fnum], y[:n]...) + y = y[n:] + } + return reflect.DeepEqual(mx, my) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go new file mode 100644 index 0000000..9fe83ce --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/value_union.go @@ -0,0 +1,438 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protoreflect + +import ( + "fmt" + "math" +) + +// Value is a union where only one Go type may be set at a time. +// The Value is used to represent all possible values a field may take. +// The following shows which Go type is used to represent each proto [Kind]: +// +// ╔════════════╤═════════════════════════════════════╗ +// ║ Go type │ Protobuf kind ║ +// ╠════════════╪═════════════════════════════════════╣ +// ║ bool │ BoolKind ║ +// ║ int32 │ Int32Kind, Sint32Kind, Sfixed32Kind ║ +// ║ int64 │ Int64Kind, Sint64Kind, Sfixed64Kind ║ +// ║ uint32 │ Uint32Kind, Fixed32Kind ║ +// ║ uint64 │ Uint64Kind, Fixed64Kind ║ +// ║ float32 │ FloatKind ║ +// ║ float64 │ DoubleKind ║ +// ║ string │ StringKind ║ +// ║ []byte │ BytesKind ║ +// ║ EnumNumber │ EnumKind ║ +// ║ Message │ MessageKind, GroupKind ║ +// ╚════════════╧═════════════════════════════════════╝ +// +// Multiple protobuf Kinds may be represented by a single Go type if the type +// can losslessly represent the information for the proto kind. For example, +// [Int64Kind], [Sint64Kind], and [Sfixed64Kind] are all represented by int64, +// but use different integer encoding methods. +// +// The [List] or [Map] types are used if the field cardinality is repeated. +// A field is a [List] if [FieldDescriptor.IsList] reports true. +// A field is a [Map] if [FieldDescriptor.IsMap] reports true. +// +// Converting to/from a Value and a concrete Go value panics on type mismatch. +// For example, [ValueOf]("hello").Int() panics because this attempts to +// retrieve an int64 from a string. +// +// [List], [Map], and [Message] Values are called "composite" values. +// +// A composite Value may alias (reference) memory at some location, +// such that changes to the Value updates the that location. +// A composite value acquired with a Mutable method, such as [Message.Mutable], +// always references the source object. +// +// For example: +// +// // Append a 0 to a "repeated int32" field. +// // Since the Value returned by Mutable is guaranteed to alias +// // the source message, modifying the Value modifies the message. +// message.Mutable(fieldDesc).List().Append(protoreflect.ValueOfInt32(0)) +// +// // Assign [0] to a "repeated int32" field by creating a new Value, +// // modifying it, and assigning it. +// list := message.NewField(fieldDesc).List() +// list.Append(protoreflect.ValueOfInt32(0)) +// message.Set(fieldDesc, list) +// // ERROR: Since it is not defined whether Set aliases the source, +// // appending to the List here may or may not modify the message. +// list.Append(protoreflect.ValueOfInt32(0)) +// +// Some operations, such as [Message.Get], may return an "empty, read-only" +// composite Value. Modifying an empty, read-only value panics. +type Value value + +// The protoreflect API uses a custom Value union type instead of any +// to keep the future open for performance optimizations. Using an any +// always incurs an allocation for primitives (e.g., int64) since it needs to +// be boxed on the heap (as interfaces can only contain pointers natively). +// Instead, we represent the Value union as a flat struct that internally keeps +// track of which type is set. Using unsafe, the Value union can be reduced +// down to 24B, which is identical in size to a slice. +// +// The latest compiler (Go1.11) currently suffers from some limitations: +// • With inlining, the compiler should be able to statically prove that +// only one of these switch cases are taken and inline one specific case. +// See https://golang.org/issue/22310. + +// ValueOf returns a Value initialized with the concrete value stored in v. +// This panics if the type does not match one of the allowed types in the +// Value union. +func ValueOf(v any) Value { + switch v := v.(type) { + case nil: + return Value{} + case bool: + return ValueOfBool(v) + case int32: + return ValueOfInt32(v) + case int64: + return ValueOfInt64(v) + case uint32: + return ValueOfUint32(v) + case uint64: + return ValueOfUint64(v) + case float32: + return ValueOfFloat32(v) + case float64: + return ValueOfFloat64(v) + case string: + return ValueOfString(v) + case []byte: + return ValueOfBytes(v) + case EnumNumber: + return ValueOfEnum(v) + case Message, List, Map: + return valueOfIface(v) + case ProtoMessage: + panic(fmt.Sprintf("invalid proto.Message(%T) type, expected a protoreflect.Message type", v)) + default: + panic(fmt.Sprintf("invalid type: %T", v)) + } +} + +// ValueOfBool returns a new boolean value. +func ValueOfBool(v bool) Value { + if v { + return Value{typ: boolType, num: 1} + } else { + return Value{typ: boolType, num: 0} + } +} + +// ValueOfInt32 returns a new int32 value. +func ValueOfInt32(v int32) Value { + return Value{typ: int32Type, num: uint64(v)} +} + +// ValueOfInt64 returns a new int64 value. +func ValueOfInt64(v int64) Value { + return Value{typ: int64Type, num: uint64(v)} +} + +// ValueOfUint32 returns a new uint32 value. +func ValueOfUint32(v uint32) Value { + return Value{typ: uint32Type, num: uint64(v)} +} + +// ValueOfUint64 returns a new uint64 value. +func ValueOfUint64(v uint64) Value { + return Value{typ: uint64Type, num: v} +} + +// ValueOfFloat32 returns a new float32 value. +func ValueOfFloat32(v float32) Value { + return Value{typ: float32Type, num: uint64(math.Float64bits(float64(v)))} +} + +// ValueOfFloat64 returns a new float64 value. +func ValueOfFloat64(v float64) Value { + return Value{typ: float64Type, num: uint64(math.Float64bits(float64(v)))} +} + +// ValueOfString returns a new string value. +func ValueOfString(v string) Value { + return valueOfString(v) +} + +// ValueOfBytes returns a new bytes value. +func ValueOfBytes(v []byte) Value { + return valueOfBytes(v[:len(v):len(v)]) +} + +// ValueOfEnum returns a new enum value. +func ValueOfEnum(v EnumNumber) Value { + return Value{typ: enumType, num: uint64(v)} +} + +// ValueOfMessage returns a new Message value. +func ValueOfMessage(v Message) Value { + return valueOfIface(v) +} + +// ValueOfList returns a new List value. +func ValueOfList(v List) Value { + return valueOfIface(v) +} + +// ValueOfMap returns a new Map value. +func ValueOfMap(v Map) Value { + return valueOfIface(v) +} + +// IsValid reports whether v is populated with a value. +func (v Value) IsValid() bool { + return v.typ != nilType +} + +// Interface returns v as an any. +// +// Invariant: v == ValueOf(v).Interface() +func (v Value) Interface() any { + switch v.typ { + case nilType: + return nil + case boolType: + return v.Bool() + case int32Type: + return int32(v.Int()) + case int64Type: + return int64(v.Int()) + case uint32Type: + return uint32(v.Uint()) + case uint64Type: + return uint64(v.Uint()) + case float32Type: + return float32(v.Float()) + case float64Type: + return float64(v.Float()) + case stringType: + return v.String() + case bytesType: + return v.Bytes() + case enumType: + return v.Enum() + default: + return v.getIface() + } +} + +func (v Value) typeName() string { + switch v.typ { + case nilType: + return "nil" + case boolType: + return "bool" + case int32Type: + return "int32" + case int64Type: + return "int64" + case uint32Type: + return "uint32" + case uint64Type: + return "uint64" + case float32Type: + return "float32" + case float64Type: + return "float64" + case stringType: + return "string" + case bytesType: + return "bytes" + case enumType: + return "enum" + default: + switch v := v.getIface().(type) { + case Message: + return "message" + case List: + return "list" + case Map: + return "map" + default: + return fmt.Sprintf("", v) + } + } +} + +func (v Value) panicMessage(what string) string { + return fmt.Sprintf("type mismatch: cannot convert %v to %s", v.typeName(), what) +} + +// Bool returns v as a bool and panics if the type is not a bool. +func (v Value) Bool() bool { + switch v.typ { + case boolType: + return v.num > 0 + default: + panic(v.panicMessage("bool")) + } +} + +// Int returns v as a int64 and panics if the type is not a int32 or int64. +func (v Value) Int() int64 { + switch v.typ { + case int32Type, int64Type: + return int64(v.num) + default: + panic(v.panicMessage("int")) + } +} + +// Uint returns v as a uint64 and panics if the type is not a uint32 or uint64. +func (v Value) Uint() uint64 { + switch v.typ { + case uint32Type, uint64Type: + return uint64(v.num) + default: + panic(v.panicMessage("uint")) + } +} + +// Float returns v as a float64 and panics if the type is not a float32 or float64. +func (v Value) Float() float64 { + switch v.typ { + case float32Type, float64Type: + return math.Float64frombits(uint64(v.num)) + default: + panic(v.panicMessage("float")) + } +} + +// String returns v as a string. Since this method implements [fmt.Stringer], +// this returns the formatted string value for any non-string type. +func (v Value) String() string { + switch v.typ { + case stringType: + return v.getString() + default: + return fmt.Sprint(v.Interface()) + } +} + +// Bytes returns v as a []byte and panics if the type is not a []byte. +func (v Value) Bytes() []byte { + switch v.typ { + case bytesType: + return v.getBytes() + default: + panic(v.panicMessage("bytes")) + } +} + +// Enum returns v as a [EnumNumber] and panics if the type is not a [EnumNumber]. +func (v Value) Enum() EnumNumber { + switch v.typ { + case enumType: + return EnumNumber(v.num) + default: + panic(v.panicMessage("enum")) + } +} + +// Message returns v as a [Message] and panics if the type is not a [Message]. +func (v Value) Message() Message { + switch vi := v.getIface().(type) { + case Message: + return vi + default: + panic(v.panicMessage("message")) + } +} + +// List returns v as a [List] and panics if the type is not a [List]. +func (v Value) List() List { + switch vi := v.getIface().(type) { + case List: + return vi + default: + panic(v.panicMessage("list")) + } +} + +// Map returns v as a [Map] and panics if the type is not a [Map]. +func (v Value) Map() Map { + switch vi := v.getIface().(type) { + case Map: + return vi + default: + panic(v.panicMessage("map")) + } +} + +// MapKey returns v as a [MapKey] and panics for invalid [MapKey] types. +func (v Value) MapKey() MapKey { + switch v.typ { + case boolType, int32Type, int64Type, uint32Type, uint64Type, stringType: + return MapKey(v) + default: + panic(v.panicMessage("map key")) + } +} + +// MapKey is used to index maps, where the Go type of the MapKey must match +// the specified key [Kind] (see [MessageDescriptor.IsMapEntry]). +// The following shows what Go type is used to represent each proto [Kind]: +// +// ╔═════════╤═════════════════════════════════════╗ +// ║ Go type │ Protobuf kind ║ +// ╠═════════╪═════════════════════════════════════╣ +// ║ bool │ BoolKind ║ +// ║ int32 │ Int32Kind, Sint32Kind, Sfixed32Kind ║ +// ║ int64 │ Int64Kind, Sint64Kind, Sfixed64Kind ║ +// ║ uint32 │ Uint32Kind, Fixed32Kind ║ +// ║ uint64 │ Uint64Kind, Fixed64Kind ║ +// ║ string │ StringKind ║ +// ╚═════════╧═════════════════════════════════════╝ +// +// A MapKey is constructed and accessed through a [Value]: +// +// k := ValueOf("hash").MapKey() // convert string to MapKey +// s := k.String() // convert MapKey to string +// +// The MapKey is a strict subset of valid types used in [Value]; +// converting a [Value] to a MapKey with an invalid type panics. +type MapKey value + +// IsValid reports whether k is populated with a value. +func (k MapKey) IsValid() bool { + return Value(k).IsValid() +} + +// Interface returns k as an any. +func (k MapKey) Interface() any { + return Value(k).Interface() +} + +// Bool returns k as a bool and panics if the type is not a bool. +func (k MapKey) Bool() bool { + return Value(k).Bool() +} + +// Int returns k as a int64 and panics if the type is not a int32 or int64. +func (k MapKey) Int() int64 { + return Value(k).Int() +} + +// Uint returns k as a uint64 and panics if the type is not a uint32 or uint64. +func (k MapKey) Uint() uint64 { + return Value(k).Uint() +} + +// String returns k as a string. Since this method implements [fmt.Stringer], +// this returns the formatted string value for any non-string type. +func (k MapKey) String() string { + return Value(k).String() +} + +// Value returns k as a [Value]. +func (k MapKey) Value() Value { + return Value(k) +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go new file mode 100644 index 0000000..fe17f37 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go @@ -0,0 +1,84 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protoreflect + +import ( + "unsafe" + + "google.golang.org/protobuf/internal/pragma" +) + +type ( + ifaceHeader struct { + _ [0]any // if interfaces have greater alignment than unsafe.Pointer, this will enforce it. + Type unsafe.Pointer + Data unsafe.Pointer + } +) + +var ( + nilType = typeOf(nil) + boolType = typeOf(*new(bool)) + int32Type = typeOf(*new(int32)) + int64Type = typeOf(*new(int64)) + uint32Type = typeOf(*new(uint32)) + uint64Type = typeOf(*new(uint64)) + float32Type = typeOf(*new(float32)) + float64Type = typeOf(*new(float64)) + stringType = typeOf(*new(string)) + bytesType = typeOf(*new([]byte)) + enumType = typeOf(*new(EnumNumber)) +) + +// typeOf returns a pointer to the Go type information. +// The pointer is comparable and equal if and only if the types are identical. +func typeOf(t any) unsafe.Pointer { + return (*ifaceHeader)(unsafe.Pointer(&t)).Type +} + +// value is a union where only one type can be represented at a time. +// The struct is 24B large on 64-bit systems and requires the minimum storage +// necessary to represent each possible type. +// +// The Go GC needs to be able to scan variables containing pointers. +// As such, pointers and non-pointers cannot be intermixed. +type value struct { + pragma.DoNotCompare // 0B + + // typ stores the type of the value as a pointer to the Go type. + typ unsafe.Pointer // 8B + + // ptr stores the data pointer for a String, Bytes, or interface value. + ptr unsafe.Pointer // 8B + + // num stores a Bool, Int32, Int64, Uint32, Uint64, Float32, Float64, or + // Enum value as a raw uint64. + // + // It is also used to store the length of a String or Bytes value; + // the capacity is ignored. + num uint64 // 8B +} + +func valueOfString(v string) Value { + return Value{typ: stringType, ptr: unsafe.Pointer(unsafe.StringData(v)), num: uint64(len(v))} +} +func valueOfBytes(v []byte) Value { + return Value{typ: bytesType, ptr: unsafe.Pointer(unsafe.SliceData(v)), num: uint64(len(v))} +} +func valueOfIface(v any) Value { + p := (*ifaceHeader)(unsafe.Pointer(&v)) + return Value{typ: p.Type, ptr: p.Data} +} + +func (v Value) getString() string { + return unsafe.String((*byte)(v.ptr), v.num) +} +func (v Value) getBytes() []byte { + return unsafe.Slice((*byte)(v.ptr), v.num) +} +func (v Value) getIface() (x any) { + *(*ifaceHeader)(unsafe.Pointer(&x)) = ifaceHeader{Type: v.typ, Data: v.ptr} + return x +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go new file mode 100644 index 0000000..de17773 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/reflect/protoregistry/registry.go @@ -0,0 +1,882 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package protoregistry provides data structures to register and lookup +// protobuf descriptor types. +// +// The [Files] registry contains file descriptors and provides the ability +// to iterate over the files or lookup a specific descriptor within the files. +// [Files] only contains protobuf descriptors and has no understanding of Go +// type information that may be associated with each descriptor. +// +// The [Types] registry contains descriptor types for which there is a known +// Go type associated with that descriptor. It provides the ability to iterate +// over the registered types or lookup a type by name. +package protoregistry + +import ( + "fmt" + "os" + "strings" + "sync" + + "google.golang.org/protobuf/internal/encoding/messageset" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/flags" + "google.golang.org/protobuf/reflect/protoreflect" +) + +// conflictPolicy configures the policy for handling registration conflicts. +// +// It can be over-written at compile time with a linker-initialized variable: +// +// go build -ldflags "-X google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn" +// +// It can be over-written at program execution with an environment variable: +// +// GOLANG_PROTOBUF_REGISTRATION_CONFLICT=warn ./main +// +// Neither of the above are covered by the compatibility promise and +// may be removed in a future release of this module. +var conflictPolicy = "panic" // "panic" | "warn" | "ignore" + +// ignoreConflict reports whether to ignore a registration conflict +// given the descriptor being registered and the error. +// It is a variable so that the behavior is easily overridden in another file. +var ignoreConflict = func(d protoreflect.Descriptor, err error) bool { + const env = "GOLANG_PROTOBUF_REGISTRATION_CONFLICT" + const faq = "https://protobuf.dev/reference/go/faq#namespace-conflict" + policy := conflictPolicy + if v := os.Getenv(env); v != "" { + policy = v + } + switch policy { + case "panic": + panic(fmt.Sprintf("%v\nSee %v\n", err, faq)) + case "warn": + fmt.Fprintf(os.Stderr, "WARNING: %v\nSee %v\n\n", err, faq) + return true + case "ignore": + return true + default: + panic("invalid " + env + " value: " + os.Getenv(env)) + } +} + +var globalMutex sync.RWMutex + +// GlobalFiles is a global registry of file descriptors. +var GlobalFiles *Files = new(Files) + +// GlobalTypes is the registry used by default for type lookups +// unless a local registry is provided by the user. +var GlobalTypes *Types = new(Types) + +// NotFound is a sentinel error value to indicate that the type was not found. +// +// Since registry lookup can happen in the critical performance path, resolvers +// must return this exact error value, not an error wrapping it. +var NotFound = errors.New("not found") + +// Files is a registry for looking up or iterating over files and the +// descriptors contained within them. +// The Find and Range methods are safe for concurrent use. +type Files struct { + // The map of descsByName contains: + // EnumDescriptor + // EnumValueDescriptor + // MessageDescriptor + // ExtensionDescriptor + // ServiceDescriptor + // *packageDescriptor + // + // Note that files are stored as a slice, since a package may contain + // multiple files. Only top-level declarations are registered. + // Note that enum values are in the top-level since that are in the same + // scope as the parent enum. + descsByName map[protoreflect.FullName]any + filesByPath map[string][]protoreflect.FileDescriptor + numFiles int +} + +type packageDescriptor struct { + files []protoreflect.FileDescriptor +} + +// RegisterFile registers the provided file descriptor. +// +// If any descriptor within the file conflicts with the descriptor of any +// previously registered file (e.g., two enums with the same full name), +// then the file is not registered and an error is returned. +// +// It is permitted for multiple files to have the same file path. +func (r *Files) RegisterFile(file protoreflect.FileDescriptor) error { + if r == GlobalFiles { + globalMutex.Lock() + defer globalMutex.Unlock() + } + if r.descsByName == nil { + r.descsByName = map[protoreflect.FullName]any{ + "": &packageDescriptor{}, + } + r.filesByPath = make(map[string][]protoreflect.FileDescriptor) + } + path := file.Path() + if prev := r.filesByPath[path]; len(prev) > 0 { + r.checkGenProtoConflict(path) + err := errors.New("file %q is already registered", file.Path()) + err = amendErrorWithCaller(err, prev[0], file) + if !(r == GlobalFiles && ignoreConflict(file, err)) { + return err + } + } + + for name := file.Package(); name != ""; name = name.Parent() { + switch prev := r.descsByName[name]; prev.(type) { + case nil, *packageDescriptor: + default: + err := errors.New("file %q has a package name conflict over %v", file.Path(), name) + err = amendErrorWithCaller(err, prev, file) + if r == GlobalFiles && ignoreConflict(file, err) { + err = nil + } + return err + } + } + var err error + var hasConflict bool + rangeTopLevelDescriptors(file, func(d protoreflect.Descriptor) { + if prev := r.descsByName[d.FullName()]; prev != nil { + hasConflict = true + err = errors.New("file %q has a name conflict over %v", file.Path(), d.FullName()) + err = amendErrorWithCaller(err, prev, file) + if r == GlobalFiles && ignoreConflict(d, err) { + err = nil + } + } + }) + if hasConflict { + return err + } + + for name := file.Package(); name != ""; name = name.Parent() { + if r.descsByName[name] == nil { + r.descsByName[name] = &packageDescriptor{} + } + } + p := r.descsByName[file.Package()].(*packageDescriptor) + p.files = append(p.files, file) + rangeTopLevelDescriptors(file, func(d protoreflect.Descriptor) { + r.descsByName[d.FullName()] = d + }) + r.filesByPath[path] = append(r.filesByPath[path], file) + r.numFiles++ + return nil +} + +// Several well-known types were hosted in the google.golang.org/genproto module +// but were later moved to this module. To avoid a weak dependency on the +// genproto module (and its relatively large set of transitive dependencies), +// we rely on a registration conflict to determine whether the genproto version +// is too old (i.e., does not contain aliases to the new type declarations). +func (r *Files) checkGenProtoConflict(path string) { + if r != GlobalFiles { + return + } + var prevPath string + const prevModule = "google.golang.org/genproto" + const prevVersion = "cb27e3aa (May 26th, 2020)" + switch path { + case "google/protobuf/field_mask.proto": + prevPath = prevModule + "/protobuf/field_mask" + case "google/protobuf/api.proto": + prevPath = prevModule + "/protobuf/api" + case "google/protobuf/type.proto": + prevPath = prevModule + "/protobuf/ptype" + case "google/protobuf/source_context.proto": + prevPath = prevModule + "/protobuf/source_context" + default: + return + } + pkgName := strings.TrimSuffix(strings.TrimPrefix(path, "google/protobuf/"), ".proto") + pkgName = strings.Replace(pkgName, "_", "", -1) + "pb" // e.g., "field_mask" => "fieldmaskpb" + currPath := "google.golang.org/protobuf/types/known/" + pkgName + panic(fmt.Sprintf(""+ + "duplicate registration of %q\n"+ + "\n"+ + "The generated definition for this file has moved:\n"+ + "\tfrom: %q\n"+ + "\tto: %q\n"+ + "A dependency on the %q module must\n"+ + "be at version %v or higher.\n"+ + "\n"+ + "Upgrade the dependency by running:\n"+ + "\tgo get -u %v\n", + path, prevPath, currPath, prevModule, prevVersion, prevPath)) +} + +// FindDescriptorByName looks up a descriptor by the full name. +// +// This returns (nil, [NotFound]) if not found. +func (r *Files) FindDescriptorByName(name protoreflect.FullName) (protoreflect.Descriptor, error) { + if r == nil { + return nil, NotFound + } + if r == GlobalFiles { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + prefix := name + suffix := nameSuffix("") + for prefix != "" { + if d, ok := r.descsByName[prefix]; ok { + switch d := d.(type) { + case protoreflect.EnumDescriptor: + if d.FullName() == name { + return d, nil + } + case protoreflect.EnumValueDescriptor: + if d.FullName() == name { + return d, nil + } + case protoreflect.MessageDescriptor: + if d.FullName() == name { + return d, nil + } + if d := findDescriptorInMessage(d, suffix); d != nil && d.FullName() == name { + return d, nil + } + case protoreflect.ExtensionDescriptor: + if d.FullName() == name { + return d, nil + } + case protoreflect.ServiceDescriptor: + if d.FullName() == name { + return d, nil + } + if d := d.Methods().ByName(suffix.Pop()); d != nil && d.FullName() == name { + return d, nil + } + } + return nil, NotFound + } + prefix = prefix.Parent() + suffix = nameSuffix(name[len(prefix)+len("."):]) + } + return nil, NotFound +} + +func findDescriptorInMessage(md protoreflect.MessageDescriptor, suffix nameSuffix) protoreflect.Descriptor { + name := suffix.Pop() + if suffix == "" { + if ed := md.Enums().ByName(name); ed != nil { + return ed + } + for i := md.Enums().Len() - 1; i >= 0; i-- { + if vd := md.Enums().Get(i).Values().ByName(name); vd != nil { + return vd + } + } + if xd := md.Extensions().ByName(name); xd != nil { + return xd + } + if fd := md.Fields().ByName(name); fd != nil { + return fd + } + if od := md.Oneofs().ByName(name); od != nil { + return od + } + } + if md := md.Messages().ByName(name); md != nil { + if suffix == "" { + return md + } + return findDescriptorInMessage(md, suffix) + } + return nil +} + +type nameSuffix string + +func (s *nameSuffix) Pop() (name protoreflect.Name) { + if i := strings.IndexByte(string(*s), '.'); i >= 0 { + name, *s = protoreflect.Name((*s)[:i]), (*s)[i+1:] + } else { + name, *s = protoreflect.Name((*s)), "" + } + return name +} + +// FindFileByPath looks up a file by the path. +// +// This returns (nil, [NotFound]) if not found. +// This returns an error if multiple files have the same path. +func (r *Files) FindFileByPath(path string) (protoreflect.FileDescriptor, error) { + if r == nil { + return nil, NotFound + } + if r == GlobalFiles { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + fds := r.filesByPath[path] + switch len(fds) { + case 0: + return nil, NotFound + case 1: + return fds[0], nil + default: + return nil, errors.New("multiple files named %q", path) + } +} + +// NumFiles reports the number of registered files, +// including duplicate files with the same name. +func (r *Files) NumFiles() int { + if r == nil { + return 0 + } + if r == GlobalFiles { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + return r.numFiles +} + +// RangeFiles iterates over all registered files while f returns true. +// If multiple files have the same name, RangeFiles iterates over all of them. +// The iteration order is undefined. +func (r *Files) RangeFiles(f func(protoreflect.FileDescriptor) bool) { + if r == nil { + return + } + if r == GlobalFiles { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + for _, files := range r.filesByPath { + for _, file := range files { + if !f(file) { + return + } + } + } +} + +// NumFilesByPackage reports the number of registered files in a proto package. +func (r *Files) NumFilesByPackage(name protoreflect.FullName) int { + if r == nil { + return 0 + } + if r == GlobalFiles { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + p, ok := r.descsByName[name].(*packageDescriptor) + if !ok { + return 0 + } + return len(p.files) +} + +// RangeFilesByPackage iterates over all registered files in a given proto package +// while f returns true. The iteration order is undefined. +func (r *Files) RangeFilesByPackage(name protoreflect.FullName, f func(protoreflect.FileDescriptor) bool) { + if r == nil { + return + } + if r == GlobalFiles { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + p, ok := r.descsByName[name].(*packageDescriptor) + if !ok { + return + } + for _, file := range p.files { + if !f(file) { + return + } + } +} + +// rangeTopLevelDescriptors iterates over all top-level descriptors in a file +// which will be directly entered into the registry. +func rangeTopLevelDescriptors(fd protoreflect.FileDescriptor, f func(protoreflect.Descriptor)) { + eds := fd.Enums() + for i := eds.Len() - 1; i >= 0; i-- { + f(eds.Get(i)) + vds := eds.Get(i).Values() + for i := vds.Len() - 1; i >= 0; i-- { + f(vds.Get(i)) + } + } + mds := fd.Messages() + for i := mds.Len() - 1; i >= 0; i-- { + f(mds.Get(i)) + } + xds := fd.Extensions() + for i := xds.Len() - 1; i >= 0; i-- { + f(xds.Get(i)) + } + sds := fd.Services() + for i := sds.Len() - 1; i >= 0; i-- { + f(sds.Get(i)) + } +} + +// MessageTypeResolver is an interface for looking up messages. +// +// A compliant implementation must deterministically return the same type +// if no error is encountered. +// +// The [Types] type implements this interface. +type MessageTypeResolver interface { + // FindMessageByName looks up a message by its full name. + // E.g., "google.protobuf.Any" + // + // This return (nil, NotFound) if not found. + FindMessageByName(message protoreflect.FullName) (protoreflect.MessageType, error) + + // FindMessageByURL looks up a message by a URL identifier. + // See documentation on google.protobuf.Any.type_url for the URL format. + // + // This returns (nil, NotFound) if not found. + FindMessageByURL(url string) (protoreflect.MessageType, error) +} + +// ExtensionTypeResolver is an interface for looking up extensions. +// +// A compliant implementation must deterministically return the same type +// if no error is encountered. +// +// The [Types] type implements this interface. +type ExtensionTypeResolver interface { + // FindExtensionByName looks up a extension field by the field's full name. + // Note that this is the full name of the field as determined by + // where the extension is declared and is unrelated to the full name of the + // message being extended. + // + // This returns (nil, NotFound) if not found. + FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) + + // FindExtensionByNumber looks up a extension field by the field number + // within some parent message, identified by full name. + // + // This returns (nil, NotFound) if not found. + FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) +} + +var ( + _ MessageTypeResolver = (*Types)(nil) + _ ExtensionTypeResolver = (*Types)(nil) +) + +// Types is a registry for looking up or iterating over descriptor types. +// The Find and Range methods are safe for concurrent use. +type Types struct { + typesByName typesByName + extensionsByMessage extensionsByMessage + + numEnums int + numMessages int + numExtensions int +} + +type ( + typesByName map[protoreflect.FullName]any + extensionsByMessage map[protoreflect.FullName]extensionsByNumber + extensionsByNumber map[protoreflect.FieldNumber]protoreflect.ExtensionType +) + +// RegisterMessage registers the provided message type. +// +// If a naming conflict occurs, the type is not registered and an error is returned. +func (r *Types) RegisterMessage(mt protoreflect.MessageType) error { + // Under rare circumstances getting the descriptor might recursively + // examine the registry, so fetch it before locking. + md := mt.Descriptor() + + if r == GlobalTypes { + globalMutex.Lock() + defer globalMutex.Unlock() + } + + if err := r.register("message", md, mt); err != nil { + return err + } + r.numMessages++ + return nil +} + +// RegisterEnum registers the provided enum type. +// +// If a naming conflict occurs, the type is not registered and an error is returned. +func (r *Types) RegisterEnum(et protoreflect.EnumType) error { + // Under rare circumstances getting the descriptor might recursively + // examine the registry, so fetch it before locking. + ed := et.Descriptor() + + if r == GlobalTypes { + globalMutex.Lock() + defer globalMutex.Unlock() + } + + if err := r.register("enum", ed, et); err != nil { + return err + } + r.numEnums++ + return nil +} + +// RegisterExtension registers the provided extension type. +// +// If a naming conflict occurs, the type is not registered and an error is returned. +func (r *Types) RegisterExtension(xt protoreflect.ExtensionType) error { + // Under rare circumstances getting the descriptor might recursively + // examine the registry, so fetch it before locking. + // + // A known case where this can happen: Fetching the TypeDescriptor for a + // legacy ExtensionDesc can consult the global registry. + xd := xt.TypeDescriptor() + + if r == GlobalTypes { + globalMutex.Lock() + defer globalMutex.Unlock() + } + + field := xd.Number() + message := xd.ContainingMessage().FullName() + if prev := r.extensionsByMessage[message][field]; prev != nil { + err := errors.New("extension number %d is already registered on message %v", field, message) + err = amendErrorWithCaller(err, prev, xt) + if !(r == GlobalTypes && ignoreConflict(xd, err)) { + return err + } + } + + if err := r.register("extension", xd, xt); err != nil { + return err + } + if r.extensionsByMessage == nil { + r.extensionsByMessage = make(extensionsByMessage) + } + if r.extensionsByMessage[message] == nil { + r.extensionsByMessage[message] = make(extensionsByNumber) + } + r.extensionsByMessage[message][field] = xt + r.numExtensions++ + return nil +} + +func (r *Types) register(kind string, desc protoreflect.Descriptor, typ any) error { + name := desc.FullName() + prev := r.typesByName[name] + if prev != nil { + err := errors.New("%v %v is already registered", kind, name) + err = amendErrorWithCaller(err, prev, typ) + if !(r == GlobalTypes && ignoreConflict(desc, err)) { + return err + } + } + if r.typesByName == nil { + r.typesByName = make(typesByName) + } + r.typesByName[name] = typ + return nil +} + +// FindEnumByName looks up an enum by its full name. +// E.g., "google.protobuf.Field.Kind". +// +// This returns (nil, [NotFound]) if not found. +func (r *Types) FindEnumByName(enum protoreflect.FullName) (protoreflect.EnumType, error) { + if r == nil { + return nil, NotFound + } + if r == GlobalTypes { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + if v := r.typesByName[enum]; v != nil { + if et, _ := v.(protoreflect.EnumType); et != nil { + return et, nil + } + return nil, errors.New("found wrong type: got %v, want enum", typeName(v)) + } + return nil, NotFound +} + +// FindMessageByName looks up a message by its full name, +// e.g. "google.protobuf.Any". +// +// This returns (nil, [NotFound]) if not found. +func (r *Types) FindMessageByName(message protoreflect.FullName) (protoreflect.MessageType, error) { + if r == nil { + return nil, NotFound + } + if r == GlobalTypes { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + if v := r.typesByName[message]; v != nil { + if mt, _ := v.(protoreflect.MessageType); mt != nil { + return mt, nil + } + return nil, errors.New("found wrong type: got %v, want message", typeName(v)) + } + return nil, NotFound +} + +// FindMessageByURL looks up a message by a URL identifier. +// See documentation on google.protobuf.Any.type_url for the URL format. +// +// This returns (nil, [NotFound]) if not found. +func (r *Types) FindMessageByURL(url string) (protoreflect.MessageType, error) { + // This function is similar to FindMessageByName but + // truncates anything before and including '/' in the URL. + if r == nil { + return nil, NotFound + } + if r == GlobalTypes { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + message := protoreflect.FullName(url) + if i := strings.LastIndexByte(url, '/'); i >= 0 { + message = message[i+len("/"):] + } + + if v := r.typesByName[message]; v != nil { + if mt, _ := v.(protoreflect.MessageType); mt != nil { + return mt, nil + } + return nil, errors.New("found wrong type: got %v, want message", typeName(v)) + } + return nil, NotFound +} + +// FindExtensionByName looks up a extension field by the field's full name. +// Note that this is the full name of the field as determined by +// where the extension is declared and is unrelated to the full name of the +// message being extended. +// +// This returns (nil, [NotFound]) if not found. +func (r *Types) FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) { + if r == nil { + return nil, NotFound + } + if r == GlobalTypes { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + if v := r.typesByName[field]; v != nil { + if xt, _ := v.(protoreflect.ExtensionType); xt != nil { + return xt, nil + } + + // MessageSet extensions are special in that the name of the extension + // is the name of the message type used to extend the MessageSet. + // This naming scheme is used by text and JSON serialization. + // + // This feature is protected by the ProtoLegacy flag since MessageSets + // are a proto1 feature that is long deprecated. + if flags.ProtoLegacy { + if _, ok := v.(protoreflect.MessageType); ok { + field := field.Append(messageset.ExtensionName) + if v := r.typesByName[field]; v != nil { + if xt, _ := v.(protoreflect.ExtensionType); xt != nil { + if messageset.IsMessageSetExtension(xt.TypeDescriptor()) { + return xt, nil + } + } + } + } + } + + return nil, errors.New("found wrong type: got %v, want extension", typeName(v)) + } + return nil, NotFound +} + +// FindExtensionByNumber looks up a extension field by the field number +// within some parent message, identified by full name. +// +// This returns (nil, [NotFound]) if not found. +func (r *Types) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) { + if r == nil { + return nil, NotFound + } + if r == GlobalTypes { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + if xt, ok := r.extensionsByMessage[message][field]; ok { + return xt, nil + } + return nil, NotFound +} + +// NumEnums reports the number of registered enums. +func (r *Types) NumEnums() int { + if r == nil { + return 0 + } + if r == GlobalTypes { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + return r.numEnums +} + +// RangeEnums iterates over all registered enums while f returns true. +// Iteration order is undefined. +func (r *Types) RangeEnums(f func(protoreflect.EnumType) bool) { + if r == nil { + return + } + if r == GlobalTypes { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + for _, typ := range r.typesByName { + if et, ok := typ.(protoreflect.EnumType); ok { + if !f(et) { + return + } + } + } +} + +// NumMessages reports the number of registered messages. +func (r *Types) NumMessages() int { + if r == nil { + return 0 + } + if r == GlobalTypes { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + return r.numMessages +} + +// RangeMessages iterates over all registered messages while f returns true. +// Iteration order is undefined. +func (r *Types) RangeMessages(f func(protoreflect.MessageType) bool) { + if r == nil { + return + } + if r == GlobalTypes { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + for _, typ := range r.typesByName { + if mt, ok := typ.(protoreflect.MessageType); ok { + if !f(mt) { + return + } + } + } +} + +// NumExtensions reports the number of registered extensions. +func (r *Types) NumExtensions() int { + if r == nil { + return 0 + } + if r == GlobalTypes { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + return r.numExtensions +} + +// RangeExtensions iterates over all registered extensions while f returns true. +// Iteration order is undefined. +func (r *Types) RangeExtensions(f func(protoreflect.ExtensionType) bool) { + if r == nil { + return + } + if r == GlobalTypes { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + for _, typ := range r.typesByName { + if xt, ok := typ.(protoreflect.ExtensionType); ok { + if !f(xt) { + return + } + } + } +} + +// NumExtensionsByMessage reports the number of registered extensions for +// a given message type. +func (r *Types) NumExtensionsByMessage(message protoreflect.FullName) int { + if r == nil { + return 0 + } + if r == GlobalTypes { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + return len(r.extensionsByMessage[message]) +} + +// RangeExtensionsByMessage iterates over all registered extensions filtered +// by a given message type while f returns true. Iteration order is undefined. +func (r *Types) RangeExtensionsByMessage(message protoreflect.FullName, f func(protoreflect.ExtensionType) bool) { + if r == nil { + return + } + if r == GlobalTypes { + globalMutex.RLock() + defer globalMutex.RUnlock() + } + for _, xt := range r.extensionsByMessage[message] { + if !f(xt) { + return + } + } +} + +func typeName(t any) string { + switch t.(type) { + case protoreflect.EnumType: + return "enum" + case protoreflect.MessageType: + return "message" + case protoreflect.ExtensionType: + return "extension" + default: + return fmt.Sprintf("%T", t) + } +} + +func amendErrorWithCaller(err error, prev, curr any) error { + prevPkg := goPackage(prev) + currPkg := goPackage(curr) + if prevPkg == "" || currPkg == "" || prevPkg == currPkg { + return err + } + return errors.New("%s\n\tpreviously from: %q\n\tcurrently from: %q", err, prevPkg, currPkg) +} + +func goPackage(v any) string { + switch d := v.(type) { + case protoreflect.EnumType: + v = d.Descriptor() + case protoreflect.MessageType: + v = d.Descriptor() + case protoreflect.ExtensionType: + v = d.TypeDescriptor() + } + if d, ok := v.(protoreflect.Descriptor); ok { + v = d.ParentFile() + } + if d, ok := v.(interface{ GoPackagePath() string }); ok { + return d.GoPackagePath() + } + return "" +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/runtime/protoiface/legacy.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/runtime/protoiface/legacy.go new file mode 100644 index 0000000..c587276 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/runtime/protoiface/legacy.go @@ -0,0 +1,15 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protoiface + +type MessageV1 interface { + Reset() + String() string + ProtoMessage() +} + +type ExtensionRangeV1 struct { + Start, End int32 // both inclusive +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go new file mode 100644 index 0000000..28e9e9f --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go @@ -0,0 +1,202 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package protoiface contains types referenced or implemented by messages. +// +// WARNING: This package should only be imported by message implementations. +// The functionality found in this package should be accessed through +// higher-level abstractions provided by the proto package. +package protoiface + +import ( + "google.golang.org/protobuf/internal/pragma" + "google.golang.org/protobuf/reflect/protoreflect" +) + +// Methods is a set of optional fast-path implementations of various operations. +type Methods = struct { + pragma.NoUnkeyedLiterals + + // Flags indicate support for optional features. + Flags SupportFlags + + // Size returns the size in bytes of the wire-format encoding of a message. + // Marshal must be provided if a custom Size is provided. + Size func(SizeInput) SizeOutput + + // Marshal formats a message in the wire-format encoding to the provided buffer. + // Size should be provided if a custom Marshal is provided. + // It must not return an error for a partial message. + Marshal func(MarshalInput) (MarshalOutput, error) + + // Unmarshal parses the wire-format encoding and merges the result into a message. + // It must not reset the target message or return an error for a partial message. + Unmarshal func(UnmarshalInput) (UnmarshalOutput, error) + + // Merge merges the contents of a source message into a destination message. + Merge func(MergeInput) MergeOutput + + // CheckInitialized returns an error if any required fields in the message are not set. + CheckInitialized func(CheckInitializedInput) (CheckInitializedOutput, error) + + // Equal compares two messages and returns EqualOutput.Equal == true if they are equal. + Equal func(EqualInput) EqualOutput +} + +// SupportFlags indicate support for optional features. +type SupportFlags = uint64 + +const ( + // SupportMarshalDeterministic reports whether MarshalOptions.Deterministic is supported. + SupportMarshalDeterministic SupportFlags = 1 << iota + + // SupportUnmarshalDiscardUnknown reports whether UnmarshalOptions.DiscardUnknown is supported. + SupportUnmarshalDiscardUnknown +) + +// SizeInput is input to the Size method. +type SizeInput = struct { + pragma.NoUnkeyedLiterals + + Message protoreflect.Message + Flags MarshalInputFlags +} + +// SizeOutput is output from the Size method. +type SizeOutput = struct { + pragma.NoUnkeyedLiterals + + Size int +} + +// MarshalInput is input to the Marshal method. +type MarshalInput = struct { + pragma.NoUnkeyedLiterals + + Message protoreflect.Message + Buf []byte // output is appended to this buffer + Flags MarshalInputFlags +} + +// MarshalOutput is output from the Marshal method. +type MarshalOutput = struct { + pragma.NoUnkeyedLiterals + + Buf []byte // contains marshaled message +} + +// MarshalInputFlags configure the marshaler. +// Most flags correspond to fields in proto.MarshalOptions. +type MarshalInputFlags = uint8 + +const ( + MarshalDeterministic MarshalInputFlags = 1 << iota + MarshalUseCachedSize +) + +// UnmarshalInput is input to the Unmarshal method. +type UnmarshalInput = struct { + pragma.NoUnkeyedLiterals + + Message protoreflect.Message + Buf []byte // input buffer + Flags UnmarshalInputFlags + Resolver interface { + FindExtensionByName(field protoreflect.FullName) (protoreflect.ExtensionType, error) + FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) + } + Depth int +} + +// UnmarshalOutput is output from the Unmarshal method. +type UnmarshalOutput = struct { + pragma.NoUnkeyedLiterals + + Flags UnmarshalOutputFlags +} + +// UnmarshalInputFlags configure the unmarshaler. +// Most flags correspond to fields in proto.UnmarshalOptions. +type UnmarshalInputFlags = uint8 + +const ( + UnmarshalDiscardUnknown UnmarshalInputFlags = 1 << iota + + // UnmarshalAliasBuffer permits unmarshal operations to alias the input buffer. + // The unmarshaller must not modify the contents of the buffer. + UnmarshalAliasBuffer + + // UnmarshalValidated indicates that validation has already been + // performed on the input buffer. + UnmarshalValidated + + // UnmarshalCheckRequired is set if this unmarshal operation ultimately will care if required fields are + // initialized. + UnmarshalCheckRequired + + // UnmarshalNoLazyDecoding is set if this unmarshal operation should not use + // lazy decoding, even when otherwise available. + UnmarshalNoLazyDecoding +) + +// UnmarshalOutputFlags are output from the Unmarshal method. +type UnmarshalOutputFlags = uint8 + +const ( + // UnmarshalInitialized may be set on return if all required fields are known to be set. + // If unset, then it does not necessarily indicate that the message is uninitialized, + // only that its status could not be confirmed. + UnmarshalInitialized UnmarshalOutputFlags = 1 << iota +) + +// MergeInput is input to the Merge method. +type MergeInput = struct { + pragma.NoUnkeyedLiterals + + Source protoreflect.Message + Destination protoreflect.Message +} + +// MergeOutput is output from the Merge method. +type MergeOutput = struct { + pragma.NoUnkeyedLiterals + + Flags MergeOutputFlags +} + +// MergeOutputFlags are output from the Merge method. +type MergeOutputFlags = uint8 + +const ( + // MergeComplete reports whether the merge was performed. + // If unset, the merger must have made no changes to the destination. + MergeComplete MergeOutputFlags = 1 << iota +) + +// CheckInitializedInput is input to the CheckInitialized method. +type CheckInitializedInput = struct { + pragma.NoUnkeyedLiterals + + Message protoreflect.Message +} + +// CheckInitializedOutput is output from the CheckInitialized method. +type CheckInitializedOutput = struct { + pragma.NoUnkeyedLiterals +} + +// EqualInput is input to the Equal method. +type EqualInput = struct { + pragma.NoUnkeyedLiterals + + MessageA protoreflect.Message + MessageB protoreflect.Message +} + +// EqualOutput is output from the Equal method. +type EqualOutput = struct { + pragma.NoUnkeyedLiterals + + Equal bool +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go new file mode 100644 index 0000000..93df1b5 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go @@ -0,0 +1,48 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package protoimpl contains the default implementation for messages +// generated by protoc-gen-go. +// +// WARNING: This package should only ever be imported by generated messages. +// The compatibility agreement covers nothing except for functionality needed +// to keep existing generated messages operational. Breakages that occur due +// to unauthorized usages of this package are not the author's responsibility. +package protoimpl + +import ( + "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/internal/filetype" + "google.golang.org/protobuf/internal/impl" + "google.golang.org/protobuf/internal/protolazy" +) + +// UnsafeEnabled specifies whether package unsafe can be used. +const UnsafeEnabled = impl.UnsafeEnabled + +type ( + // Types used by generated code in init functions. + DescBuilder = filedesc.Builder + TypeBuilder = filetype.Builder + + // Types used by generated code to implement EnumType, MessageType, and ExtensionType. + EnumInfo = impl.EnumInfo + MessageInfo = impl.MessageInfo + ExtensionInfo = impl.ExtensionInfo + + // Types embedded in generated messages. + MessageState = impl.MessageState + SizeCache = impl.SizeCache + WeakFields = impl.WeakFields + UnknownFields = impl.UnknownFields + ExtensionFields = impl.ExtensionFields + ExtensionFieldV1 = impl.ExtensionField + + Pointer = impl.Pointer + + LazyUnmarshalInfo = *protolazy.XXX_lazyUnmarshalInfo + RaceDetectHookData = impl.RaceDetectHookData +) + +var X impl.Export diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/runtime/protoimpl/version.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/runtime/protoimpl/version.go new file mode 100644 index 0000000..a105cb2 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/runtime/protoimpl/version.go @@ -0,0 +1,60 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protoimpl + +import ( + "google.golang.org/protobuf/internal/version" +) + +const ( + // MaxVersion is the maximum supported version for generated .pb.go files. + // It is always the current version of the module. + MaxVersion = version.Minor + + // GenVersion is the runtime version required by generated .pb.go files. + // This is incremented when generated code relies on new functionality + // in the runtime. + GenVersion = 20 + + // MinVersion is the minimum supported version for generated .pb.go files. + // This is incremented when the runtime drops support for old code. + MinVersion = 0 +) + +// EnforceVersion is used by code generated by protoc-gen-go +// to statically enforce minimum and maximum versions of this package. +// A compilation failure implies either that: +// - the runtime package is too old and needs to be updated OR +// - the generated code is too old and needs to be regenerated. +// +// The runtime package can be upgraded by running: +// +// go get google.golang.org/protobuf +// +// The generated code can be regenerated by running: +// +// protoc --go_out=${PROTOC_GEN_GO_ARGS} ${PROTO_FILES} +// +// Example usage by generated code: +// +// const ( +// // Verify that this generated code is sufficiently up-to-date. +// _ = protoimpl.EnforceVersion(genVersion - protoimpl.MinVersion) +// // Verify that runtime/protoimpl is sufficiently up-to-date. +// _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - genVersion) +// ) +// +// The genVersion is the current minor version used to generated the code. +// This compile-time check relies on negative integer overflow of a uint +// being a compilation failure (guaranteed by the Go specification). +type EnforceVersion uint + +// This enforces the following invariant: +// +// MinVersion ≤ GenVersion ≤ MaxVersion +const ( + _ = EnforceVersion(GenVersion - MinVersion) + _ = EnforceVersion(MaxVersion - GenVersion) +) diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go new file mode 100644 index 0000000..4eacb52 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go @@ -0,0 +1,5238 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// The messages in this file describe the definitions found in .proto files. +// A valid .proto file can be translated directly to a FileDescriptorProto +// without any other information (e.g. without reading its imports). + +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/protobuf/descriptor.proto + +package descriptorpb + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" + unsafe "unsafe" +) + +// The full set of known editions. +type Edition int32 + +const ( + // A placeholder for an unknown edition value. + Edition_EDITION_UNKNOWN Edition = 0 + // A placeholder edition for specifying default behaviors *before* a feature + // was first introduced. This is effectively an "infinite past". + Edition_EDITION_LEGACY Edition = 900 + // Legacy syntax "editions". These pre-date editions, but behave much like + // distinct editions. These can't be used to specify the edition of proto + // files, but feature definitions must supply proto2/proto3 defaults for + // backwards compatibility. + Edition_EDITION_PROTO2 Edition = 998 + Edition_EDITION_PROTO3 Edition = 999 + // Editions that have been released. The specific values are arbitrary and + // should not be depended on, but they will always be time-ordered for easy + // comparison. + Edition_EDITION_2023 Edition = 1000 + Edition_EDITION_2024 Edition = 1001 + // Placeholder editions for testing feature resolution. These should not be + // used or relied on outside of tests. + Edition_EDITION_1_TEST_ONLY Edition = 1 + Edition_EDITION_2_TEST_ONLY Edition = 2 + Edition_EDITION_99997_TEST_ONLY Edition = 99997 + Edition_EDITION_99998_TEST_ONLY Edition = 99998 + Edition_EDITION_99999_TEST_ONLY Edition = 99999 + // Placeholder for specifying unbounded edition support. This should only + // ever be used by plugins that can expect to never require any changes to + // support a new edition. + Edition_EDITION_MAX Edition = 2147483647 +) + +// Enum value maps for Edition. +var ( + Edition_name = map[int32]string{ + 0: "EDITION_UNKNOWN", + 900: "EDITION_LEGACY", + 998: "EDITION_PROTO2", + 999: "EDITION_PROTO3", + 1000: "EDITION_2023", + 1001: "EDITION_2024", + 1: "EDITION_1_TEST_ONLY", + 2: "EDITION_2_TEST_ONLY", + 99997: "EDITION_99997_TEST_ONLY", + 99998: "EDITION_99998_TEST_ONLY", + 99999: "EDITION_99999_TEST_ONLY", + 2147483647: "EDITION_MAX", + } + Edition_value = map[string]int32{ + "EDITION_UNKNOWN": 0, + "EDITION_LEGACY": 900, + "EDITION_PROTO2": 998, + "EDITION_PROTO3": 999, + "EDITION_2023": 1000, + "EDITION_2024": 1001, + "EDITION_1_TEST_ONLY": 1, + "EDITION_2_TEST_ONLY": 2, + "EDITION_99997_TEST_ONLY": 99997, + "EDITION_99998_TEST_ONLY": 99998, + "EDITION_99999_TEST_ONLY": 99999, + "EDITION_MAX": 2147483647, + } +) + +func (x Edition) Enum() *Edition { + p := new(Edition) + *p = x + return p +} + +func (x Edition) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Edition) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[0].Descriptor() +} + +func (Edition) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[0] +} + +func (x Edition) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *Edition) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = Edition(num) + return nil +} + +// Deprecated: Use Edition.Descriptor instead. +func (Edition) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{0} +} + +// Describes the 'visibility' of a symbol with respect to the proto import +// system. Symbols can only be imported when the visibility rules do not prevent +// it (ex: local symbols cannot be imported). Visibility modifiers can only set +// on `message` and `enum` as they are the only types available to be referenced +// from other files. +type SymbolVisibility int32 + +const ( + SymbolVisibility_VISIBILITY_UNSET SymbolVisibility = 0 + SymbolVisibility_VISIBILITY_LOCAL SymbolVisibility = 1 + SymbolVisibility_VISIBILITY_EXPORT SymbolVisibility = 2 +) + +// Enum value maps for SymbolVisibility. +var ( + SymbolVisibility_name = map[int32]string{ + 0: "VISIBILITY_UNSET", + 1: "VISIBILITY_LOCAL", + 2: "VISIBILITY_EXPORT", + } + SymbolVisibility_value = map[string]int32{ + "VISIBILITY_UNSET": 0, + "VISIBILITY_LOCAL": 1, + "VISIBILITY_EXPORT": 2, + } +) + +func (x SymbolVisibility) Enum() *SymbolVisibility { + p := new(SymbolVisibility) + *p = x + return p +} + +func (x SymbolVisibility) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SymbolVisibility) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[1].Descriptor() +} + +func (SymbolVisibility) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[1] +} + +func (x SymbolVisibility) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *SymbolVisibility) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = SymbolVisibility(num) + return nil +} + +// Deprecated: Use SymbolVisibility.Descriptor instead. +func (SymbolVisibility) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{1} +} + +// The verification state of the extension range. +type ExtensionRangeOptions_VerificationState int32 + +const ( + // All the extensions of the range must be declared. + ExtensionRangeOptions_DECLARATION ExtensionRangeOptions_VerificationState = 0 + ExtensionRangeOptions_UNVERIFIED ExtensionRangeOptions_VerificationState = 1 +) + +// Enum value maps for ExtensionRangeOptions_VerificationState. +var ( + ExtensionRangeOptions_VerificationState_name = map[int32]string{ + 0: "DECLARATION", + 1: "UNVERIFIED", + } + ExtensionRangeOptions_VerificationState_value = map[string]int32{ + "DECLARATION": 0, + "UNVERIFIED": 1, + } +) + +func (x ExtensionRangeOptions_VerificationState) Enum() *ExtensionRangeOptions_VerificationState { + p := new(ExtensionRangeOptions_VerificationState) + *p = x + return p +} + +func (x ExtensionRangeOptions_VerificationState) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ExtensionRangeOptions_VerificationState) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[2].Descriptor() +} + +func (ExtensionRangeOptions_VerificationState) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[2] +} + +func (x ExtensionRangeOptions_VerificationState) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *ExtensionRangeOptions_VerificationState) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = ExtensionRangeOptions_VerificationState(num) + return nil +} + +// Deprecated: Use ExtensionRangeOptions_VerificationState.Descriptor instead. +func (ExtensionRangeOptions_VerificationState) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{3, 0} +} + +type FieldDescriptorProto_Type int32 + +const ( + // 0 is reserved for errors. + // Order is weird for historical reasons. + FieldDescriptorProto_TYPE_DOUBLE FieldDescriptorProto_Type = 1 + FieldDescriptorProto_TYPE_FLOAT FieldDescriptorProto_Type = 2 + // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if + // negative values are likely. + FieldDescriptorProto_TYPE_INT64 FieldDescriptorProto_Type = 3 + FieldDescriptorProto_TYPE_UINT64 FieldDescriptorProto_Type = 4 + // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if + // negative values are likely. + FieldDescriptorProto_TYPE_INT32 FieldDescriptorProto_Type = 5 + FieldDescriptorProto_TYPE_FIXED64 FieldDescriptorProto_Type = 6 + FieldDescriptorProto_TYPE_FIXED32 FieldDescriptorProto_Type = 7 + FieldDescriptorProto_TYPE_BOOL FieldDescriptorProto_Type = 8 + FieldDescriptorProto_TYPE_STRING FieldDescriptorProto_Type = 9 + // Tag-delimited aggregate. + // Group type is deprecated and not supported after google.protobuf. However, Proto3 + // implementations should still be able to parse the group wire format and + // treat group fields as unknown fields. In Editions, the group wire format + // can be enabled via the `message_encoding` feature. + FieldDescriptorProto_TYPE_GROUP FieldDescriptorProto_Type = 10 + FieldDescriptorProto_TYPE_MESSAGE FieldDescriptorProto_Type = 11 // Length-delimited aggregate. + // New in version 2. + FieldDescriptorProto_TYPE_BYTES FieldDescriptorProto_Type = 12 + FieldDescriptorProto_TYPE_UINT32 FieldDescriptorProto_Type = 13 + FieldDescriptorProto_TYPE_ENUM FieldDescriptorProto_Type = 14 + FieldDescriptorProto_TYPE_SFIXED32 FieldDescriptorProto_Type = 15 + FieldDescriptorProto_TYPE_SFIXED64 FieldDescriptorProto_Type = 16 + FieldDescriptorProto_TYPE_SINT32 FieldDescriptorProto_Type = 17 // Uses ZigZag encoding. + FieldDescriptorProto_TYPE_SINT64 FieldDescriptorProto_Type = 18 // Uses ZigZag encoding. +) + +// Enum value maps for FieldDescriptorProto_Type. +var ( + FieldDescriptorProto_Type_name = map[int32]string{ + 1: "TYPE_DOUBLE", + 2: "TYPE_FLOAT", + 3: "TYPE_INT64", + 4: "TYPE_UINT64", + 5: "TYPE_INT32", + 6: "TYPE_FIXED64", + 7: "TYPE_FIXED32", + 8: "TYPE_BOOL", + 9: "TYPE_STRING", + 10: "TYPE_GROUP", + 11: "TYPE_MESSAGE", + 12: "TYPE_BYTES", + 13: "TYPE_UINT32", + 14: "TYPE_ENUM", + 15: "TYPE_SFIXED32", + 16: "TYPE_SFIXED64", + 17: "TYPE_SINT32", + 18: "TYPE_SINT64", + } + FieldDescriptorProto_Type_value = map[string]int32{ + "TYPE_DOUBLE": 1, + "TYPE_FLOAT": 2, + "TYPE_INT64": 3, + "TYPE_UINT64": 4, + "TYPE_INT32": 5, + "TYPE_FIXED64": 6, + "TYPE_FIXED32": 7, + "TYPE_BOOL": 8, + "TYPE_STRING": 9, + "TYPE_GROUP": 10, + "TYPE_MESSAGE": 11, + "TYPE_BYTES": 12, + "TYPE_UINT32": 13, + "TYPE_ENUM": 14, + "TYPE_SFIXED32": 15, + "TYPE_SFIXED64": 16, + "TYPE_SINT32": 17, + "TYPE_SINT64": 18, + } +) + +func (x FieldDescriptorProto_Type) Enum() *FieldDescriptorProto_Type { + p := new(FieldDescriptorProto_Type) + *p = x + return p +} + +func (x FieldDescriptorProto_Type) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FieldDescriptorProto_Type) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[3].Descriptor() +} + +func (FieldDescriptorProto_Type) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[3] +} + +func (x FieldDescriptorProto_Type) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *FieldDescriptorProto_Type) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = FieldDescriptorProto_Type(num) + return nil +} + +// Deprecated: Use FieldDescriptorProto_Type.Descriptor instead. +func (FieldDescriptorProto_Type) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{4, 0} +} + +type FieldDescriptorProto_Label int32 + +const ( + // 0 is reserved for errors + FieldDescriptorProto_LABEL_OPTIONAL FieldDescriptorProto_Label = 1 + FieldDescriptorProto_LABEL_REPEATED FieldDescriptorProto_Label = 3 + // The required label is only allowed in google.protobuf. In proto3 and Editions + // it's explicitly prohibited. In Editions, the `field_presence` feature + // can be used to get this behavior. + FieldDescriptorProto_LABEL_REQUIRED FieldDescriptorProto_Label = 2 +) + +// Enum value maps for FieldDescriptorProto_Label. +var ( + FieldDescriptorProto_Label_name = map[int32]string{ + 1: "LABEL_OPTIONAL", + 3: "LABEL_REPEATED", + 2: "LABEL_REQUIRED", + } + FieldDescriptorProto_Label_value = map[string]int32{ + "LABEL_OPTIONAL": 1, + "LABEL_REPEATED": 3, + "LABEL_REQUIRED": 2, + } +) + +func (x FieldDescriptorProto_Label) Enum() *FieldDescriptorProto_Label { + p := new(FieldDescriptorProto_Label) + *p = x + return p +} + +func (x FieldDescriptorProto_Label) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FieldDescriptorProto_Label) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[4].Descriptor() +} + +func (FieldDescriptorProto_Label) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[4] +} + +func (x FieldDescriptorProto_Label) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *FieldDescriptorProto_Label) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = FieldDescriptorProto_Label(num) + return nil +} + +// Deprecated: Use FieldDescriptorProto_Label.Descriptor instead. +func (FieldDescriptorProto_Label) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{4, 1} +} + +// Generated classes can be optimized for speed or code size. +type FileOptions_OptimizeMode int32 + +const ( + FileOptions_SPEED FileOptions_OptimizeMode = 1 // Generate complete code for parsing, serialization, + // etc. + FileOptions_CODE_SIZE FileOptions_OptimizeMode = 2 // Use ReflectionOps to implement these methods. + FileOptions_LITE_RUNTIME FileOptions_OptimizeMode = 3 // Generate code using MessageLite and the lite runtime. +) + +// Enum value maps for FileOptions_OptimizeMode. +var ( + FileOptions_OptimizeMode_name = map[int32]string{ + 1: "SPEED", + 2: "CODE_SIZE", + 3: "LITE_RUNTIME", + } + FileOptions_OptimizeMode_value = map[string]int32{ + "SPEED": 1, + "CODE_SIZE": 2, + "LITE_RUNTIME": 3, + } +) + +func (x FileOptions_OptimizeMode) Enum() *FileOptions_OptimizeMode { + p := new(FileOptions_OptimizeMode) + *p = x + return p +} + +func (x FileOptions_OptimizeMode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FileOptions_OptimizeMode) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[5].Descriptor() +} + +func (FileOptions_OptimizeMode) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[5] +} + +func (x FileOptions_OptimizeMode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *FileOptions_OptimizeMode) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = FileOptions_OptimizeMode(num) + return nil +} + +// Deprecated: Use FileOptions_OptimizeMode.Descriptor instead. +func (FileOptions_OptimizeMode) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{10, 0} +} + +type FieldOptions_CType int32 + +const ( + // Default mode. + FieldOptions_STRING FieldOptions_CType = 0 + // The option [ctype=CORD] may be applied to a non-repeated field of type + // "bytes". It indicates that in C++, the data should be stored in a Cord + // instead of a string. For very large strings, this may reduce memory + // fragmentation. It may also allow better performance when parsing from a + // Cord, or when parsing with aliasing enabled, as the parsed Cord may then + // alias the original buffer. + FieldOptions_CORD FieldOptions_CType = 1 + FieldOptions_STRING_PIECE FieldOptions_CType = 2 +) + +// Enum value maps for FieldOptions_CType. +var ( + FieldOptions_CType_name = map[int32]string{ + 0: "STRING", + 1: "CORD", + 2: "STRING_PIECE", + } + FieldOptions_CType_value = map[string]int32{ + "STRING": 0, + "CORD": 1, + "STRING_PIECE": 2, + } +) + +func (x FieldOptions_CType) Enum() *FieldOptions_CType { + p := new(FieldOptions_CType) + *p = x + return p +} + +func (x FieldOptions_CType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FieldOptions_CType) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[6].Descriptor() +} + +func (FieldOptions_CType) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[6] +} + +func (x FieldOptions_CType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *FieldOptions_CType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = FieldOptions_CType(num) + return nil +} + +// Deprecated: Use FieldOptions_CType.Descriptor instead. +func (FieldOptions_CType) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{12, 0} +} + +type FieldOptions_JSType int32 + +const ( + // Use the default type. + FieldOptions_JS_NORMAL FieldOptions_JSType = 0 + // Use JavaScript strings. + FieldOptions_JS_STRING FieldOptions_JSType = 1 + // Use JavaScript numbers. + FieldOptions_JS_NUMBER FieldOptions_JSType = 2 +) + +// Enum value maps for FieldOptions_JSType. +var ( + FieldOptions_JSType_name = map[int32]string{ + 0: "JS_NORMAL", + 1: "JS_STRING", + 2: "JS_NUMBER", + } + FieldOptions_JSType_value = map[string]int32{ + "JS_NORMAL": 0, + "JS_STRING": 1, + "JS_NUMBER": 2, + } +) + +func (x FieldOptions_JSType) Enum() *FieldOptions_JSType { + p := new(FieldOptions_JSType) + *p = x + return p +} + +func (x FieldOptions_JSType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FieldOptions_JSType) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[7].Descriptor() +} + +func (FieldOptions_JSType) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[7] +} + +func (x FieldOptions_JSType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *FieldOptions_JSType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = FieldOptions_JSType(num) + return nil +} + +// Deprecated: Use FieldOptions_JSType.Descriptor instead. +func (FieldOptions_JSType) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{12, 1} +} + +// If set to RETENTION_SOURCE, the option will be omitted from the binary. +type FieldOptions_OptionRetention int32 + +const ( + FieldOptions_RETENTION_UNKNOWN FieldOptions_OptionRetention = 0 + FieldOptions_RETENTION_RUNTIME FieldOptions_OptionRetention = 1 + FieldOptions_RETENTION_SOURCE FieldOptions_OptionRetention = 2 +) + +// Enum value maps for FieldOptions_OptionRetention. +var ( + FieldOptions_OptionRetention_name = map[int32]string{ + 0: "RETENTION_UNKNOWN", + 1: "RETENTION_RUNTIME", + 2: "RETENTION_SOURCE", + } + FieldOptions_OptionRetention_value = map[string]int32{ + "RETENTION_UNKNOWN": 0, + "RETENTION_RUNTIME": 1, + "RETENTION_SOURCE": 2, + } +) + +func (x FieldOptions_OptionRetention) Enum() *FieldOptions_OptionRetention { + p := new(FieldOptions_OptionRetention) + *p = x + return p +} + +func (x FieldOptions_OptionRetention) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FieldOptions_OptionRetention) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[8].Descriptor() +} + +func (FieldOptions_OptionRetention) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[8] +} + +func (x FieldOptions_OptionRetention) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *FieldOptions_OptionRetention) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = FieldOptions_OptionRetention(num) + return nil +} + +// Deprecated: Use FieldOptions_OptionRetention.Descriptor instead. +func (FieldOptions_OptionRetention) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{12, 2} +} + +// This indicates the types of entities that the field may apply to when used +// as an option. If it is unset, then the field may be freely used as an +// option on any kind of entity. +type FieldOptions_OptionTargetType int32 + +const ( + FieldOptions_TARGET_TYPE_UNKNOWN FieldOptions_OptionTargetType = 0 + FieldOptions_TARGET_TYPE_FILE FieldOptions_OptionTargetType = 1 + FieldOptions_TARGET_TYPE_EXTENSION_RANGE FieldOptions_OptionTargetType = 2 + FieldOptions_TARGET_TYPE_MESSAGE FieldOptions_OptionTargetType = 3 + FieldOptions_TARGET_TYPE_FIELD FieldOptions_OptionTargetType = 4 + FieldOptions_TARGET_TYPE_ONEOF FieldOptions_OptionTargetType = 5 + FieldOptions_TARGET_TYPE_ENUM FieldOptions_OptionTargetType = 6 + FieldOptions_TARGET_TYPE_ENUM_ENTRY FieldOptions_OptionTargetType = 7 + FieldOptions_TARGET_TYPE_SERVICE FieldOptions_OptionTargetType = 8 + FieldOptions_TARGET_TYPE_METHOD FieldOptions_OptionTargetType = 9 +) + +// Enum value maps for FieldOptions_OptionTargetType. +var ( + FieldOptions_OptionTargetType_name = map[int32]string{ + 0: "TARGET_TYPE_UNKNOWN", + 1: "TARGET_TYPE_FILE", + 2: "TARGET_TYPE_EXTENSION_RANGE", + 3: "TARGET_TYPE_MESSAGE", + 4: "TARGET_TYPE_FIELD", + 5: "TARGET_TYPE_ONEOF", + 6: "TARGET_TYPE_ENUM", + 7: "TARGET_TYPE_ENUM_ENTRY", + 8: "TARGET_TYPE_SERVICE", + 9: "TARGET_TYPE_METHOD", + } + FieldOptions_OptionTargetType_value = map[string]int32{ + "TARGET_TYPE_UNKNOWN": 0, + "TARGET_TYPE_FILE": 1, + "TARGET_TYPE_EXTENSION_RANGE": 2, + "TARGET_TYPE_MESSAGE": 3, + "TARGET_TYPE_FIELD": 4, + "TARGET_TYPE_ONEOF": 5, + "TARGET_TYPE_ENUM": 6, + "TARGET_TYPE_ENUM_ENTRY": 7, + "TARGET_TYPE_SERVICE": 8, + "TARGET_TYPE_METHOD": 9, + } +) + +func (x FieldOptions_OptionTargetType) Enum() *FieldOptions_OptionTargetType { + p := new(FieldOptions_OptionTargetType) + *p = x + return p +} + +func (x FieldOptions_OptionTargetType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FieldOptions_OptionTargetType) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[9].Descriptor() +} + +func (FieldOptions_OptionTargetType) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[9] +} + +func (x FieldOptions_OptionTargetType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *FieldOptions_OptionTargetType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = FieldOptions_OptionTargetType(num) + return nil +} + +// Deprecated: Use FieldOptions_OptionTargetType.Descriptor instead. +func (FieldOptions_OptionTargetType) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{12, 3} +} + +// Is this method side-effect-free (or safe in HTTP parlance), or idempotent, +// or neither? HTTP based RPC implementation may choose GET verb for safe +// methods, and PUT verb for idempotent methods instead of the default POST. +type MethodOptions_IdempotencyLevel int32 + +const ( + MethodOptions_IDEMPOTENCY_UNKNOWN MethodOptions_IdempotencyLevel = 0 + MethodOptions_NO_SIDE_EFFECTS MethodOptions_IdempotencyLevel = 1 // implies idempotent + MethodOptions_IDEMPOTENT MethodOptions_IdempotencyLevel = 2 // idempotent, but may have side effects +) + +// Enum value maps for MethodOptions_IdempotencyLevel. +var ( + MethodOptions_IdempotencyLevel_name = map[int32]string{ + 0: "IDEMPOTENCY_UNKNOWN", + 1: "NO_SIDE_EFFECTS", + 2: "IDEMPOTENT", + } + MethodOptions_IdempotencyLevel_value = map[string]int32{ + "IDEMPOTENCY_UNKNOWN": 0, + "NO_SIDE_EFFECTS": 1, + "IDEMPOTENT": 2, + } +) + +func (x MethodOptions_IdempotencyLevel) Enum() *MethodOptions_IdempotencyLevel { + p := new(MethodOptions_IdempotencyLevel) + *p = x + return p +} + +func (x MethodOptions_IdempotencyLevel) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (MethodOptions_IdempotencyLevel) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[10].Descriptor() +} + +func (MethodOptions_IdempotencyLevel) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[10] +} + +func (x MethodOptions_IdempotencyLevel) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *MethodOptions_IdempotencyLevel) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = MethodOptions_IdempotencyLevel(num) + return nil +} + +// Deprecated: Use MethodOptions_IdempotencyLevel.Descriptor instead. +func (MethodOptions_IdempotencyLevel) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{17, 0} +} + +type FeatureSet_FieldPresence int32 + +const ( + FeatureSet_FIELD_PRESENCE_UNKNOWN FeatureSet_FieldPresence = 0 + FeatureSet_EXPLICIT FeatureSet_FieldPresence = 1 + FeatureSet_IMPLICIT FeatureSet_FieldPresence = 2 + FeatureSet_LEGACY_REQUIRED FeatureSet_FieldPresence = 3 +) + +// Enum value maps for FeatureSet_FieldPresence. +var ( + FeatureSet_FieldPresence_name = map[int32]string{ + 0: "FIELD_PRESENCE_UNKNOWN", + 1: "EXPLICIT", + 2: "IMPLICIT", + 3: "LEGACY_REQUIRED", + } + FeatureSet_FieldPresence_value = map[string]int32{ + "FIELD_PRESENCE_UNKNOWN": 0, + "EXPLICIT": 1, + "IMPLICIT": 2, + "LEGACY_REQUIRED": 3, + } +) + +func (x FeatureSet_FieldPresence) Enum() *FeatureSet_FieldPresence { + p := new(FeatureSet_FieldPresence) + *p = x + return p +} + +func (x FeatureSet_FieldPresence) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FeatureSet_FieldPresence) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[11].Descriptor() +} + +func (FeatureSet_FieldPresence) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[11] +} + +func (x FeatureSet_FieldPresence) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *FeatureSet_FieldPresence) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = FeatureSet_FieldPresence(num) + return nil +} + +// Deprecated: Use FeatureSet_FieldPresence.Descriptor instead. +func (FeatureSet_FieldPresence) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{19, 0} +} + +type FeatureSet_EnumType int32 + +const ( + FeatureSet_ENUM_TYPE_UNKNOWN FeatureSet_EnumType = 0 + FeatureSet_OPEN FeatureSet_EnumType = 1 + FeatureSet_CLOSED FeatureSet_EnumType = 2 +) + +// Enum value maps for FeatureSet_EnumType. +var ( + FeatureSet_EnumType_name = map[int32]string{ + 0: "ENUM_TYPE_UNKNOWN", + 1: "OPEN", + 2: "CLOSED", + } + FeatureSet_EnumType_value = map[string]int32{ + "ENUM_TYPE_UNKNOWN": 0, + "OPEN": 1, + "CLOSED": 2, + } +) + +func (x FeatureSet_EnumType) Enum() *FeatureSet_EnumType { + p := new(FeatureSet_EnumType) + *p = x + return p +} + +func (x FeatureSet_EnumType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FeatureSet_EnumType) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[12].Descriptor() +} + +func (FeatureSet_EnumType) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[12] +} + +func (x FeatureSet_EnumType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *FeatureSet_EnumType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = FeatureSet_EnumType(num) + return nil +} + +// Deprecated: Use FeatureSet_EnumType.Descriptor instead. +func (FeatureSet_EnumType) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{19, 1} +} + +type FeatureSet_RepeatedFieldEncoding int32 + +const ( + FeatureSet_REPEATED_FIELD_ENCODING_UNKNOWN FeatureSet_RepeatedFieldEncoding = 0 + FeatureSet_PACKED FeatureSet_RepeatedFieldEncoding = 1 + FeatureSet_EXPANDED FeatureSet_RepeatedFieldEncoding = 2 +) + +// Enum value maps for FeatureSet_RepeatedFieldEncoding. +var ( + FeatureSet_RepeatedFieldEncoding_name = map[int32]string{ + 0: "REPEATED_FIELD_ENCODING_UNKNOWN", + 1: "PACKED", + 2: "EXPANDED", + } + FeatureSet_RepeatedFieldEncoding_value = map[string]int32{ + "REPEATED_FIELD_ENCODING_UNKNOWN": 0, + "PACKED": 1, + "EXPANDED": 2, + } +) + +func (x FeatureSet_RepeatedFieldEncoding) Enum() *FeatureSet_RepeatedFieldEncoding { + p := new(FeatureSet_RepeatedFieldEncoding) + *p = x + return p +} + +func (x FeatureSet_RepeatedFieldEncoding) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FeatureSet_RepeatedFieldEncoding) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[13].Descriptor() +} + +func (FeatureSet_RepeatedFieldEncoding) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[13] +} + +func (x FeatureSet_RepeatedFieldEncoding) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *FeatureSet_RepeatedFieldEncoding) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = FeatureSet_RepeatedFieldEncoding(num) + return nil +} + +// Deprecated: Use FeatureSet_RepeatedFieldEncoding.Descriptor instead. +func (FeatureSet_RepeatedFieldEncoding) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{19, 2} +} + +type FeatureSet_Utf8Validation int32 + +const ( + FeatureSet_UTF8_VALIDATION_UNKNOWN FeatureSet_Utf8Validation = 0 + FeatureSet_VERIFY FeatureSet_Utf8Validation = 2 + FeatureSet_NONE FeatureSet_Utf8Validation = 3 +) + +// Enum value maps for FeatureSet_Utf8Validation. +var ( + FeatureSet_Utf8Validation_name = map[int32]string{ + 0: "UTF8_VALIDATION_UNKNOWN", + 2: "VERIFY", + 3: "NONE", + } + FeatureSet_Utf8Validation_value = map[string]int32{ + "UTF8_VALIDATION_UNKNOWN": 0, + "VERIFY": 2, + "NONE": 3, + } +) + +func (x FeatureSet_Utf8Validation) Enum() *FeatureSet_Utf8Validation { + p := new(FeatureSet_Utf8Validation) + *p = x + return p +} + +func (x FeatureSet_Utf8Validation) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FeatureSet_Utf8Validation) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[14].Descriptor() +} + +func (FeatureSet_Utf8Validation) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[14] +} + +func (x FeatureSet_Utf8Validation) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *FeatureSet_Utf8Validation) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = FeatureSet_Utf8Validation(num) + return nil +} + +// Deprecated: Use FeatureSet_Utf8Validation.Descriptor instead. +func (FeatureSet_Utf8Validation) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{19, 3} +} + +type FeatureSet_MessageEncoding int32 + +const ( + FeatureSet_MESSAGE_ENCODING_UNKNOWN FeatureSet_MessageEncoding = 0 + FeatureSet_LENGTH_PREFIXED FeatureSet_MessageEncoding = 1 + FeatureSet_DELIMITED FeatureSet_MessageEncoding = 2 +) + +// Enum value maps for FeatureSet_MessageEncoding. +var ( + FeatureSet_MessageEncoding_name = map[int32]string{ + 0: "MESSAGE_ENCODING_UNKNOWN", + 1: "LENGTH_PREFIXED", + 2: "DELIMITED", + } + FeatureSet_MessageEncoding_value = map[string]int32{ + "MESSAGE_ENCODING_UNKNOWN": 0, + "LENGTH_PREFIXED": 1, + "DELIMITED": 2, + } +) + +func (x FeatureSet_MessageEncoding) Enum() *FeatureSet_MessageEncoding { + p := new(FeatureSet_MessageEncoding) + *p = x + return p +} + +func (x FeatureSet_MessageEncoding) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FeatureSet_MessageEncoding) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[15].Descriptor() +} + +func (FeatureSet_MessageEncoding) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[15] +} + +func (x FeatureSet_MessageEncoding) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *FeatureSet_MessageEncoding) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = FeatureSet_MessageEncoding(num) + return nil +} + +// Deprecated: Use FeatureSet_MessageEncoding.Descriptor instead. +func (FeatureSet_MessageEncoding) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{19, 4} +} + +type FeatureSet_JsonFormat int32 + +const ( + FeatureSet_JSON_FORMAT_UNKNOWN FeatureSet_JsonFormat = 0 + FeatureSet_ALLOW FeatureSet_JsonFormat = 1 + FeatureSet_LEGACY_BEST_EFFORT FeatureSet_JsonFormat = 2 +) + +// Enum value maps for FeatureSet_JsonFormat. +var ( + FeatureSet_JsonFormat_name = map[int32]string{ + 0: "JSON_FORMAT_UNKNOWN", + 1: "ALLOW", + 2: "LEGACY_BEST_EFFORT", + } + FeatureSet_JsonFormat_value = map[string]int32{ + "JSON_FORMAT_UNKNOWN": 0, + "ALLOW": 1, + "LEGACY_BEST_EFFORT": 2, + } +) + +func (x FeatureSet_JsonFormat) Enum() *FeatureSet_JsonFormat { + p := new(FeatureSet_JsonFormat) + *p = x + return p +} + +func (x FeatureSet_JsonFormat) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FeatureSet_JsonFormat) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[16].Descriptor() +} + +func (FeatureSet_JsonFormat) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[16] +} + +func (x FeatureSet_JsonFormat) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *FeatureSet_JsonFormat) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = FeatureSet_JsonFormat(num) + return nil +} + +// Deprecated: Use FeatureSet_JsonFormat.Descriptor instead. +func (FeatureSet_JsonFormat) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{19, 5} +} + +type FeatureSet_EnforceNamingStyle int32 + +const ( + FeatureSet_ENFORCE_NAMING_STYLE_UNKNOWN FeatureSet_EnforceNamingStyle = 0 + FeatureSet_STYLE2024 FeatureSet_EnforceNamingStyle = 1 + FeatureSet_STYLE_LEGACY FeatureSet_EnforceNamingStyle = 2 +) + +// Enum value maps for FeatureSet_EnforceNamingStyle. +var ( + FeatureSet_EnforceNamingStyle_name = map[int32]string{ + 0: "ENFORCE_NAMING_STYLE_UNKNOWN", + 1: "STYLE2024", + 2: "STYLE_LEGACY", + } + FeatureSet_EnforceNamingStyle_value = map[string]int32{ + "ENFORCE_NAMING_STYLE_UNKNOWN": 0, + "STYLE2024": 1, + "STYLE_LEGACY": 2, + } +) + +func (x FeatureSet_EnforceNamingStyle) Enum() *FeatureSet_EnforceNamingStyle { + p := new(FeatureSet_EnforceNamingStyle) + *p = x + return p +} + +func (x FeatureSet_EnforceNamingStyle) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FeatureSet_EnforceNamingStyle) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[17].Descriptor() +} + +func (FeatureSet_EnforceNamingStyle) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[17] +} + +func (x FeatureSet_EnforceNamingStyle) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *FeatureSet_EnforceNamingStyle) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = FeatureSet_EnforceNamingStyle(num) + return nil +} + +// Deprecated: Use FeatureSet_EnforceNamingStyle.Descriptor instead. +func (FeatureSet_EnforceNamingStyle) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{19, 6} +} + +type FeatureSet_VisibilityFeature_DefaultSymbolVisibility int32 + +const ( + FeatureSet_VisibilityFeature_DEFAULT_SYMBOL_VISIBILITY_UNKNOWN FeatureSet_VisibilityFeature_DefaultSymbolVisibility = 0 + // Default pre-EDITION_2024, all UNSET visibility are export. + FeatureSet_VisibilityFeature_EXPORT_ALL FeatureSet_VisibilityFeature_DefaultSymbolVisibility = 1 + // All top-level symbols default to export, nested default to local. + FeatureSet_VisibilityFeature_EXPORT_TOP_LEVEL FeatureSet_VisibilityFeature_DefaultSymbolVisibility = 2 + // All symbols default to local. + FeatureSet_VisibilityFeature_LOCAL_ALL FeatureSet_VisibilityFeature_DefaultSymbolVisibility = 3 + // All symbols local by default. Nested types cannot be exported. + // With special case caveat for message { enum {} reserved 1 to max; } + // This is the recommended setting for new protos. + FeatureSet_VisibilityFeature_STRICT FeatureSet_VisibilityFeature_DefaultSymbolVisibility = 4 +) + +// Enum value maps for FeatureSet_VisibilityFeature_DefaultSymbolVisibility. +var ( + FeatureSet_VisibilityFeature_DefaultSymbolVisibility_name = map[int32]string{ + 0: "DEFAULT_SYMBOL_VISIBILITY_UNKNOWN", + 1: "EXPORT_ALL", + 2: "EXPORT_TOP_LEVEL", + 3: "LOCAL_ALL", + 4: "STRICT", + } + FeatureSet_VisibilityFeature_DefaultSymbolVisibility_value = map[string]int32{ + "DEFAULT_SYMBOL_VISIBILITY_UNKNOWN": 0, + "EXPORT_ALL": 1, + "EXPORT_TOP_LEVEL": 2, + "LOCAL_ALL": 3, + "STRICT": 4, + } +) + +func (x FeatureSet_VisibilityFeature_DefaultSymbolVisibility) Enum() *FeatureSet_VisibilityFeature_DefaultSymbolVisibility { + p := new(FeatureSet_VisibilityFeature_DefaultSymbolVisibility) + *p = x + return p +} + +func (x FeatureSet_VisibilityFeature_DefaultSymbolVisibility) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FeatureSet_VisibilityFeature_DefaultSymbolVisibility) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[18].Descriptor() +} + +func (FeatureSet_VisibilityFeature_DefaultSymbolVisibility) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[18] +} + +func (x FeatureSet_VisibilityFeature_DefaultSymbolVisibility) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *FeatureSet_VisibilityFeature_DefaultSymbolVisibility) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = FeatureSet_VisibilityFeature_DefaultSymbolVisibility(num) + return nil +} + +// Deprecated: Use FeatureSet_VisibilityFeature_DefaultSymbolVisibility.Descriptor instead. +func (FeatureSet_VisibilityFeature_DefaultSymbolVisibility) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{19, 0, 0} +} + +// Represents the identified object's effect on the element in the original +// .proto file. +type GeneratedCodeInfo_Annotation_Semantic int32 + +const ( + // There is no effect or the effect is indescribable. + GeneratedCodeInfo_Annotation_NONE GeneratedCodeInfo_Annotation_Semantic = 0 + // The element is set or otherwise mutated. + GeneratedCodeInfo_Annotation_SET GeneratedCodeInfo_Annotation_Semantic = 1 + // An alias to the element is returned. + GeneratedCodeInfo_Annotation_ALIAS GeneratedCodeInfo_Annotation_Semantic = 2 +) + +// Enum value maps for GeneratedCodeInfo_Annotation_Semantic. +var ( + GeneratedCodeInfo_Annotation_Semantic_name = map[int32]string{ + 0: "NONE", + 1: "SET", + 2: "ALIAS", + } + GeneratedCodeInfo_Annotation_Semantic_value = map[string]int32{ + "NONE": 0, + "SET": 1, + "ALIAS": 2, + } +) + +func (x GeneratedCodeInfo_Annotation_Semantic) Enum() *GeneratedCodeInfo_Annotation_Semantic { + p := new(GeneratedCodeInfo_Annotation_Semantic) + *p = x + return p +} + +func (x GeneratedCodeInfo_Annotation_Semantic) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GeneratedCodeInfo_Annotation_Semantic) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[19].Descriptor() +} + +func (GeneratedCodeInfo_Annotation_Semantic) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[19] +} + +func (x GeneratedCodeInfo_Annotation_Semantic) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *GeneratedCodeInfo_Annotation_Semantic) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = GeneratedCodeInfo_Annotation_Semantic(num) + return nil +} + +// Deprecated: Use GeneratedCodeInfo_Annotation_Semantic.Descriptor instead. +func (GeneratedCodeInfo_Annotation_Semantic) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{22, 0, 0} +} + +// The protocol compiler can output a FileDescriptorSet containing the .proto +// files it parses. +type FileDescriptorSet struct { + state protoimpl.MessageState `protogen:"open.v1"` + File []*FileDescriptorProto `protobuf:"bytes,1,rep,name=file" json:"file,omitempty"` + extensionFields protoimpl.ExtensionFields + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *FileDescriptorSet) Reset() { + *x = FileDescriptorSet{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *FileDescriptorSet) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FileDescriptorSet) ProtoMessage() {} + +func (x *FileDescriptorSet) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FileDescriptorSet.ProtoReflect.Descriptor instead. +func (*FileDescriptorSet) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{0} +} + +func (x *FileDescriptorSet) GetFile() []*FileDescriptorProto { + if x != nil { + return x.File + } + return nil +} + +// Describes a complete .proto file. +type FileDescriptorProto struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` // file name, relative to root of source tree + Package *string `protobuf:"bytes,2,opt,name=package" json:"package,omitempty"` // e.g. "foo", "foo.bar", etc. + // Names of files imported by this file. + Dependency []string `protobuf:"bytes,3,rep,name=dependency" json:"dependency,omitempty"` + // Indexes of the public imported files in the dependency list above. + PublicDependency []int32 `protobuf:"varint,10,rep,name=public_dependency,json=publicDependency" json:"public_dependency,omitempty"` + // Indexes of the weak imported files in the dependency list. + // For Google-internal migration only. Do not use. + WeakDependency []int32 `protobuf:"varint,11,rep,name=weak_dependency,json=weakDependency" json:"weak_dependency,omitempty"` + // Names of files imported by this file purely for the purpose of providing + // option extensions. These are excluded from the dependency list above. + OptionDependency []string `protobuf:"bytes,15,rep,name=option_dependency,json=optionDependency" json:"option_dependency,omitempty"` + // All top-level definitions in this file. + MessageType []*DescriptorProto `protobuf:"bytes,4,rep,name=message_type,json=messageType" json:"message_type,omitempty"` + EnumType []*EnumDescriptorProto `protobuf:"bytes,5,rep,name=enum_type,json=enumType" json:"enum_type,omitempty"` + Service []*ServiceDescriptorProto `protobuf:"bytes,6,rep,name=service" json:"service,omitempty"` + Extension []*FieldDescriptorProto `protobuf:"bytes,7,rep,name=extension" json:"extension,omitempty"` + Options *FileOptions `protobuf:"bytes,8,opt,name=options" json:"options,omitempty"` + // This field contains optional information about the original source code. + // You may safely remove this entire field without harming runtime + // functionality of the descriptors -- the information is needed only by + // development tools. + SourceCodeInfo *SourceCodeInfo `protobuf:"bytes,9,opt,name=source_code_info,json=sourceCodeInfo" json:"source_code_info,omitempty"` + // The syntax of the proto file. + // The supported values are "proto2", "proto3", and "editions". + // + // If `edition` is present, this value must be "editions". + // WARNING: This field should only be used by protobuf plugins or special + // cases like the proto compiler. Other uses are discouraged and + // developers should rely on the protoreflect APIs for their client language. + Syntax *string `protobuf:"bytes,12,opt,name=syntax" json:"syntax,omitempty"` + // The edition of the proto file. + // WARNING: This field should only be used by protobuf plugins or special + // cases like the proto compiler. Other uses are discouraged and + // developers should rely on the protoreflect APIs for their client language. + Edition *Edition `protobuf:"varint,14,opt,name=edition,enum=google.protobuf.Edition" json:"edition,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *FileDescriptorProto) Reset() { + *x = FileDescriptorProto{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *FileDescriptorProto) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FileDescriptorProto) ProtoMessage() {} + +func (x *FileDescriptorProto) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FileDescriptorProto.ProtoReflect.Descriptor instead. +func (*FileDescriptorProto) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{1} +} + +func (x *FileDescriptorProto) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *FileDescriptorProto) GetPackage() string { + if x != nil && x.Package != nil { + return *x.Package + } + return "" +} + +func (x *FileDescriptorProto) GetDependency() []string { + if x != nil { + return x.Dependency + } + return nil +} + +func (x *FileDescriptorProto) GetPublicDependency() []int32 { + if x != nil { + return x.PublicDependency + } + return nil +} + +func (x *FileDescriptorProto) GetWeakDependency() []int32 { + if x != nil { + return x.WeakDependency + } + return nil +} + +func (x *FileDescriptorProto) GetOptionDependency() []string { + if x != nil { + return x.OptionDependency + } + return nil +} + +func (x *FileDescriptorProto) GetMessageType() []*DescriptorProto { + if x != nil { + return x.MessageType + } + return nil +} + +func (x *FileDescriptorProto) GetEnumType() []*EnumDescriptorProto { + if x != nil { + return x.EnumType + } + return nil +} + +func (x *FileDescriptorProto) GetService() []*ServiceDescriptorProto { + if x != nil { + return x.Service + } + return nil +} + +func (x *FileDescriptorProto) GetExtension() []*FieldDescriptorProto { + if x != nil { + return x.Extension + } + return nil +} + +func (x *FileDescriptorProto) GetOptions() *FileOptions { + if x != nil { + return x.Options + } + return nil +} + +func (x *FileDescriptorProto) GetSourceCodeInfo() *SourceCodeInfo { + if x != nil { + return x.SourceCodeInfo + } + return nil +} + +func (x *FileDescriptorProto) GetSyntax() string { + if x != nil && x.Syntax != nil { + return *x.Syntax + } + return "" +} + +func (x *FileDescriptorProto) GetEdition() Edition { + if x != nil && x.Edition != nil { + return *x.Edition + } + return Edition_EDITION_UNKNOWN +} + +// Describes a message type. +type DescriptorProto struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Field []*FieldDescriptorProto `protobuf:"bytes,2,rep,name=field" json:"field,omitempty"` + Extension []*FieldDescriptorProto `protobuf:"bytes,6,rep,name=extension" json:"extension,omitempty"` + NestedType []*DescriptorProto `protobuf:"bytes,3,rep,name=nested_type,json=nestedType" json:"nested_type,omitempty"` + EnumType []*EnumDescriptorProto `protobuf:"bytes,4,rep,name=enum_type,json=enumType" json:"enum_type,omitempty"` + ExtensionRange []*DescriptorProto_ExtensionRange `protobuf:"bytes,5,rep,name=extension_range,json=extensionRange" json:"extension_range,omitempty"` + OneofDecl []*OneofDescriptorProto `protobuf:"bytes,8,rep,name=oneof_decl,json=oneofDecl" json:"oneof_decl,omitempty"` + Options *MessageOptions `protobuf:"bytes,7,opt,name=options" json:"options,omitempty"` + ReservedRange []*DescriptorProto_ReservedRange `protobuf:"bytes,9,rep,name=reserved_range,json=reservedRange" json:"reserved_range,omitempty"` + // Reserved field names, which may not be used by fields in the same message. + // A given name may only be reserved once. + ReservedName []string `protobuf:"bytes,10,rep,name=reserved_name,json=reservedName" json:"reserved_name,omitempty"` + // Support for `export` and `local` keywords on enums. + Visibility *SymbolVisibility `protobuf:"varint,11,opt,name=visibility,enum=google.protobuf.SymbolVisibility" json:"visibility,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DescriptorProto) Reset() { + *x = DescriptorProto{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DescriptorProto) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DescriptorProto) ProtoMessage() {} + +func (x *DescriptorProto) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DescriptorProto.ProtoReflect.Descriptor instead. +func (*DescriptorProto) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{2} +} + +func (x *DescriptorProto) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *DescriptorProto) GetField() []*FieldDescriptorProto { + if x != nil { + return x.Field + } + return nil +} + +func (x *DescriptorProto) GetExtension() []*FieldDescriptorProto { + if x != nil { + return x.Extension + } + return nil +} + +func (x *DescriptorProto) GetNestedType() []*DescriptorProto { + if x != nil { + return x.NestedType + } + return nil +} + +func (x *DescriptorProto) GetEnumType() []*EnumDescriptorProto { + if x != nil { + return x.EnumType + } + return nil +} + +func (x *DescriptorProto) GetExtensionRange() []*DescriptorProto_ExtensionRange { + if x != nil { + return x.ExtensionRange + } + return nil +} + +func (x *DescriptorProto) GetOneofDecl() []*OneofDescriptorProto { + if x != nil { + return x.OneofDecl + } + return nil +} + +func (x *DescriptorProto) GetOptions() *MessageOptions { + if x != nil { + return x.Options + } + return nil +} + +func (x *DescriptorProto) GetReservedRange() []*DescriptorProto_ReservedRange { + if x != nil { + return x.ReservedRange + } + return nil +} + +func (x *DescriptorProto) GetReservedName() []string { + if x != nil { + return x.ReservedName + } + return nil +} + +func (x *DescriptorProto) GetVisibility() SymbolVisibility { + if x != nil && x.Visibility != nil { + return *x.Visibility + } + return SymbolVisibility_VISIBILITY_UNSET +} + +type ExtensionRangeOptions struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + // For external users: DO NOT USE. We are in the process of open sourcing + // extension declaration and executing internal cleanups before it can be + // used externally. + Declaration []*ExtensionRangeOptions_Declaration `protobuf:"bytes,2,rep,name=declaration" json:"declaration,omitempty"` + // Any features defined in the specific edition. + Features *FeatureSet `protobuf:"bytes,50,opt,name=features" json:"features,omitempty"` + // The verification state of the range. + // TODO: flip the default to DECLARATION once all empty ranges + // are marked as UNVERIFIED. + Verification *ExtensionRangeOptions_VerificationState `protobuf:"varint,3,opt,name=verification,enum=google.protobuf.ExtensionRangeOptions_VerificationState,def=1" json:"verification,omitempty"` + extensionFields protoimpl.ExtensionFields + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +// Default values for ExtensionRangeOptions fields. +const ( + Default_ExtensionRangeOptions_Verification = ExtensionRangeOptions_UNVERIFIED +) + +func (x *ExtensionRangeOptions) Reset() { + *x = ExtensionRangeOptions{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ExtensionRangeOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExtensionRangeOptions) ProtoMessage() {} + +func (x *ExtensionRangeOptions) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExtensionRangeOptions.ProtoReflect.Descriptor instead. +func (*ExtensionRangeOptions) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{3} +} + +func (x *ExtensionRangeOptions) GetUninterpretedOption() []*UninterpretedOption { + if x != nil { + return x.UninterpretedOption + } + return nil +} + +func (x *ExtensionRangeOptions) GetDeclaration() []*ExtensionRangeOptions_Declaration { + if x != nil { + return x.Declaration + } + return nil +} + +func (x *ExtensionRangeOptions) GetFeatures() *FeatureSet { + if x != nil { + return x.Features + } + return nil +} + +func (x *ExtensionRangeOptions) GetVerification() ExtensionRangeOptions_VerificationState { + if x != nil && x.Verification != nil { + return *x.Verification + } + return Default_ExtensionRangeOptions_Verification +} + +// Describes a field within a message. +type FieldDescriptorProto struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Number *int32 `protobuf:"varint,3,opt,name=number" json:"number,omitempty"` + Label *FieldDescriptorProto_Label `protobuf:"varint,4,opt,name=label,enum=google.protobuf.FieldDescriptorProto_Label" json:"label,omitempty"` + // If type_name is set, this need not be set. If both this and type_name + // are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. + Type *FieldDescriptorProto_Type `protobuf:"varint,5,opt,name=type,enum=google.protobuf.FieldDescriptorProto_Type" json:"type,omitempty"` + // For message and enum types, this is the name of the type. If the name + // starts with a '.', it is fully-qualified. Otherwise, C++-like scoping + // rules are used to find the type (i.e. first the nested types within this + // message are searched, then within the parent, on up to the root + // namespace). + TypeName *string `protobuf:"bytes,6,opt,name=type_name,json=typeName" json:"type_name,omitempty"` + // For extensions, this is the name of the type being extended. It is + // resolved in the same manner as type_name. + Extendee *string `protobuf:"bytes,2,opt,name=extendee" json:"extendee,omitempty"` + // For numeric types, contains the original text representation of the value. + // For booleans, "true" or "false". + // For strings, contains the default text contents (not escaped in any way). + // For bytes, contains the C escaped value. All bytes >= 128 are escaped. + DefaultValue *string `protobuf:"bytes,7,opt,name=default_value,json=defaultValue" json:"default_value,omitempty"` + // If set, gives the index of a oneof in the containing type's oneof_decl + // list. This field is a member of that oneof. + OneofIndex *int32 `protobuf:"varint,9,opt,name=oneof_index,json=oneofIndex" json:"oneof_index,omitempty"` + // JSON name of this field. The value is set by protocol compiler. If the + // user has set a "json_name" option on this field, that option's value + // will be used. Otherwise, it's deduced from the field's name by converting + // it to camelCase. + JsonName *string `protobuf:"bytes,10,opt,name=json_name,json=jsonName" json:"json_name,omitempty"` + Options *FieldOptions `protobuf:"bytes,8,opt,name=options" json:"options,omitempty"` + // If true, this is a proto3 "optional". When a proto3 field is optional, it + // tracks presence regardless of field type. + // + // When proto3_optional is true, this field must belong to a oneof to signal + // to old proto3 clients that presence is tracked for this field. This oneof + // is known as a "synthetic" oneof, and this field must be its sole member + // (each proto3 optional field gets its own synthetic oneof). Synthetic oneofs + // exist in the descriptor only, and do not generate any API. Synthetic oneofs + // must be ordered after all "real" oneofs. + // + // For message fields, proto3_optional doesn't create any semantic change, + // since non-repeated message fields always track presence. However it still + // indicates the semantic detail of whether the user wrote "optional" or not. + // This can be useful for round-tripping the .proto file. For consistency we + // give message fields a synthetic oneof also, even though it is not required + // to track presence. This is especially important because the parser can't + // tell if a field is a message or an enum, so it must always create a + // synthetic oneof. + // + // Proto2 optional fields do not set this flag, because they already indicate + // optional with `LABEL_OPTIONAL`. + Proto3Optional *bool `protobuf:"varint,17,opt,name=proto3_optional,json=proto3Optional" json:"proto3_optional,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *FieldDescriptorProto) Reset() { + *x = FieldDescriptorProto{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *FieldDescriptorProto) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FieldDescriptorProto) ProtoMessage() {} + +func (x *FieldDescriptorProto) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FieldDescriptorProto.ProtoReflect.Descriptor instead. +func (*FieldDescriptorProto) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{4} +} + +func (x *FieldDescriptorProto) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *FieldDescriptorProto) GetNumber() int32 { + if x != nil && x.Number != nil { + return *x.Number + } + return 0 +} + +func (x *FieldDescriptorProto) GetLabel() FieldDescriptorProto_Label { + if x != nil && x.Label != nil { + return *x.Label + } + return FieldDescriptorProto_LABEL_OPTIONAL +} + +func (x *FieldDescriptorProto) GetType() FieldDescriptorProto_Type { + if x != nil && x.Type != nil { + return *x.Type + } + return FieldDescriptorProto_TYPE_DOUBLE +} + +func (x *FieldDescriptorProto) GetTypeName() string { + if x != nil && x.TypeName != nil { + return *x.TypeName + } + return "" +} + +func (x *FieldDescriptorProto) GetExtendee() string { + if x != nil && x.Extendee != nil { + return *x.Extendee + } + return "" +} + +func (x *FieldDescriptorProto) GetDefaultValue() string { + if x != nil && x.DefaultValue != nil { + return *x.DefaultValue + } + return "" +} + +func (x *FieldDescriptorProto) GetOneofIndex() int32 { + if x != nil && x.OneofIndex != nil { + return *x.OneofIndex + } + return 0 +} + +func (x *FieldDescriptorProto) GetJsonName() string { + if x != nil && x.JsonName != nil { + return *x.JsonName + } + return "" +} + +func (x *FieldDescriptorProto) GetOptions() *FieldOptions { + if x != nil { + return x.Options + } + return nil +} + +func (x *FieldDescriptorProto) GetProto3Optional() bool { + if x != nil && x.Proto3Optional != nil { + return *x.Proto3Optional + } + return false +} + +// Describes a oneof. +type OneofDescriptorProto struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Options *OneofOptions `protobuf:"bytes,2,opt,name=options" json:"options,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *OneofDescriptorProto) Reset() { + *x = OneofDescriptorProto{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *OneofDescriptorProto) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OneofDescriptorProto) ProtoMessage() {} + +func (x *OneofDescriptorProto) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OneofDescriptorProto.ProtoReflect.Descriptor instead. +func (*OneofDescriptorProto) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{5} +} + +func (x *OneofDescriptorProto) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *OneofDescriptorProto) GetOptions() *OneofOptions { + if x != nil { + return x.Options + } + return nil +} + +// Describes an enum type. +type EnumDescriptorProto struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Value []*EnumValueDescriptorProto `protobuf:"bytes,2,rep,name=value" json:"value,omitempty"` + Options *EnumOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` + // Range of reserved numeric values. Reserved numeric values may not be used + // by enum values in the same enum declaration. Reserved ranges may not + // overlap. + ReservedRange []*EnumDescriptorProto_EnumReservedRange `protobuf:"bytes,4,rep,name=reserved_range,json=reservedRange" json:"reserved_range,omitempty"` + // Reserved enum value names, which may not be reused. A given name may only + // be reserved once. + ReservedName []string `protobuf:"bytes,5,rep,name=reserved_name,json=reservedName" json:"reserved_name,omitempty"` + // Support for `export` and `local` keywords on enums. + Visibility *SymbolVisibility `protobuf:"varint,6,opt,name=visibility,enum=google.protobuf.SymbolVisibility" json:"visibility,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EnumDescriptorProto) Reset() { + *x = EnumDescriptorProto{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EnumDescriptorProto) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EnumDescriptorProto) ProtoMessage() {} + +func (x *EnumDescriptorProto) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EnumDescriptorProto.ProtoReflect.Descriptor instead. +func (*EnumDescriptorProto) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{6} +} + +func (x *EnumDescriptorProto) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *EnumDescriptorProto) GetValue() []*EnumValueDescriptorProto { + if x != nil { + return x.Value + } + return nil +} + +func (x *EnumDescriptorProto) GetOptions() *EnumOptions { + if x != nil { + return x.Options + } + return nil +} + +func (x *EnumDescriptorProto) GetReservedRange() []*EnumDescriptorProto_EnumReservedRange { + if x != nil { + return x.ReservedRange + } + return nil +} + +func (x *EnumDescriptorProto) GetReservedName() []string { + if x != nil { + return x.ReservedName + } + return nil +} + +func (x *EnumDescriptorProto) GetVisibility() SymbolVisibility { + if x != nil && x.Visibility != nil { + return *x.Visibility + } + return SymbolVisibility_VISIBILITY_UNSET +} + +// Describes a value within an enum. +type EnumValueDescriptorProto struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Number *int32 `protobuf:"varint,2,opt,name=number" json:"number,omitempty"` + Options *EnumValueOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EnumValueDescriptorProto) Reset() { + *x = EnumValueDescriptorProto{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EnumValueDescriptorProto) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EnumValueDescriptorProto) ProtoMessage() {} + +func (x *EnumValueDescriptorProto) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EnumValueDescriptorProto.ProtoReflect.Descriptor instead. +func (*EnumValueDescriptorProto) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{7} +} + +func (x *EnumValueDescriptorProto) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *EnumValueDescriptorProto) GetNumber() int32 { + if x != nil && x.Number != nil { + return *x.Number + } + return 0 +} + +func (x *EnumValueDescriptorProto) GetOptions() *EnumValueOptions { + if x != nil { + return x.Options + } + return nil +} + +// Describes a service. +type ServiceDescriptorProto struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Method []*MethodDescriptorProto `protobuf:"bytes,2,rep,name=method" json:"method,omitempty"` + Options *ServiceOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ServiceDescriptorProto) Reset() { + *x = ServiceDescriptorProto{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ServiceDescriptorProto) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServiceDescriptorProto) ProtoMessage() {} + +func (x *ServiceDescriptorProto) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServiceDescriptorProto.ProtoReflect.Descriptor instead. +func (*ServiceDescriptorProto) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{8} +} + +func (x *ServiceDescriptorProto) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *ServiceDescriptorProto) GetMethod() []*MethodDescriptorProto { + if x != nil { + return x.Method + } + return nil +} + +func (x *ServiceDescriptorProto) GetOptions() *ServiceOptions { + if x != nil { + return x.Options + } + return nil +} + +// Describes a method of a service. +type MethodDescriptorProto struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Input and output type names. These are resolved in the same way as + // FieldDescriptorProto.type_name, but must refer to a message type. + InputType *string `protobuf:"bytes,2,opt,name=input_type,json=inputType" json:"input_type,omitempty"` + OutputType *string `protobuf:"bytes,3,opt,name=output_type,json=outputType" json:"output_type,omitempty"` + Options *MethodOptions `protobuf:"bytes,4,opt,name=options" json:"options,omitempty"` + // Identifies if client streams multiple client messages + ClientStreaming *bool `protobuf:"varint,5,opt,name=client_streaming,json=clientStreaming,def=0" json:"client_streaming,omitempty"` + // Identifies if server streams multiple server messages + ServerStreaming *bool `protobuf:"varint,6,opt,name=server_streaming,json=serverStreaming,def=0" json:"server_streaming,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +// Default values for MethodDescriptorProto fields. +const ( + Default_MethodDescriptorProto_ClientStreaming = bool(false) + Default_MethodDescriptorProto_ServerStreaming = bool(false) +) + +func (x *MethodDescriptorProto) Reset() { + *x = MethodDescriptorProto{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MethodDescriptorProto) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MethodDescriptorProto) ProtoMessage() {} + +func (x *MethodDescriptorProto) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MethodDescriptorProto.ProtoReflect.Descriptor instead. +func (*MethodDescriptorProto) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{9} +} + +func (x *MethodDescriptorProto) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *MethodDescriptorProto) GetInputType() string { + if x != nil && x.InputType != nil { + return *x.InputType + } + return "" +} + +func (x *MethodDescriptorProto) GetOutputType() string { + if x != nil && x.OutputType != nil { + return *x.OutputType + } + return "" +} + +func (x *MethodDescriptorProto) GetOptions() *MethodOptions { + if x != nil { + return x.Options + } + return nil +} + +func (x *MethodDescriptorProto) GetClientStreaming() bool { + if x != nil && x.ClientStreaming != nil { + return *x.ClientStreaming + } + return Default_MethodDescriptorProto_ClientStreaming +} + +func (x *MethodDescriptorProto) GetServerStreaming() bool { + if x != nil && x.ServerStreaming != nil { + return *x.ServerStreaming + } + return Default_MethodDescriptorProto_ServerStreaming +} + +type FileOptions struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Sets the Java package where classes generated from this .proto will be + // placed. By default, the proto package is used, but this is often + // inappropriate because proto packages do not normally start with backwards + // domain names. + JavaPackage *string `protobuf:"bytes,1,opt,name=java_package,json=javaPackage" json:"java_package,omitempty"` + // Controls the name of the wrapper Java class generated for the .proto file. + // That class will always contain the .proto file's getDescriptor() method as + // well as any top-level extensions defined in the .proto file. + // If java_multiple_files is disabled, then all the other classes from the + // .proto file will be nested inside the single wrapper outer class. + JavaOuterClassname *string `protobuf:"bytes,8,opt,name=java_outer_classname,json=javaOuterClassname" json:"java_outer_classname,omitempty"` + // If enabled, then the Java code generator will generate a separate .java + // file for each top-level message, enum, and service defined in the .proto + // file. Thus, these types will *not* be nested inside the wrapper class + // named by java_outer_classname. However, the wrapper class will still be + // generated to contain the file's getDescriptor() method as well as any + // top-level extensions defined in the file. + JavaMultipleFiles *bool `protobuf:"varint,10,opt,name=java_multiple_files,json=javaMultipleFiles,def=0" json:"java_multiple_files,omitempty"` + // This option does nothing. + // + // Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. + JavaGenerateEqualsAndHash *bool `protobuf:"varint,20,opt,name=java_generate_equals_and_hash,json=javaGenerateEqualsAndHash" json:"java_generate_equals_and_hash,omitempty"` + // A proto2 file can set this to true to opt in to UTF-8 checking for Java, + // which will throw an exception if invalid UTF-8 is parsed from the wire or + // assigned to a string field. + // + // TODO: clarify exactly what kinds of field types this option + // applies to, and update these docs accordingly. + // + // Proto3 files already perform these checks. Setting the option explicitly to + // false has no effect: it cannot be used to opt proto3 files out of UTF-8 + // checks. + JavaStringCheckUtf8 *bool `protobuf:"varint,27,opt,name=java_string_check_utf8,json=javaStringCheckUtf8,def=0" json:"java_string_check_utf8,omitempty"` + OptimizeFor *FileOptions_OptimizeMode `protobuf:"varint,9,opt,name=optimize_for,json=optimizeFor,enum=google.protobuf.FileOptions_OptimizeMode,def=1" json:"optimize_for,omitempty"` + // Sets the Go package where structs generated from this .proto will be + // placed. If omitted, the Go package will be derived from the following: + // - The basename of the package import path, if provided. + // - Otherwise, the package statement in the .proto file, if present. + // - Otherwise, the basename of the .proto file, without extension. + GoPackage *string `protobuf:"bytes,11,opt,name=go_package,json=goPackage" json:"go_package,omitempty"` + // Should generic services be generated in each language? "Generic" services + // are not specific to any particular RPC system. They are generated by the + // main code generators in each language (without additional plugins). + // Generic services were the only kind of service generation supported by + // early versions of google.protobuf. + // + // Generic services are now considered deprecated in favor of using plugins + // that generate code specific to your particular RPC system. Therefore, + // these default to false. Old code which depends on generic services should + // explicitly set them to true. + CcGenericServices *bool `protobuf:"varint,16,opt,name=cc_generic_services,json=ccGenericServices,def=0" json:"cc_generic_services,omitempty"` + JavaGenericServices *bool `protobuf:"varint,17,opt,name=java_generic_services,json=javaGenericServices,def=0" json:"java_generic_services,omitempty"` + PyGenericServices *bool `protobuf:"varint,18,opt,name=py_generic_services,json=pyGenericServices,def=0" json:"py_generic_services,omitempty"` + // Is this file deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for everything in the file, or it will be completely ignored; in the very + // least, this is a formalization for deprecating files. + Deprecated *bool `protobuf:"varint,23,opt,name=deprecated,def=0" json:"deprecated,omitempty"` + // Enables the use of arenas for the proto messages in this file. This applies + // only to generated classes for C++. + CcEnableArenas *bool `protobuf:"varint,31,opt,name=cc_enable_arenas,json=ccEnableArenas,def=1" json:"cc_enable_arenas,omitempty"` + // Sets the objective c class prefix which is prepended to all objective c + // generated classes from this .proto. There is no default. + ObjcClassPrefix *string `protobuf:"bytes,36,opt,name=objc_class_prefix,json=objcClassPrefix" json:"objc_class_prefix,omitempty"` + // Namespace for generated classes; defaults to the package. + CsharpNamespace *string `protobuf:"bytes,37,opt,name=csharp_namespace,json=csharpNamespace" json:"csharp_namespace,omitempty"` + // By default Swift generators will take the proto package and CamelCase it + // replacing '.' with underscore and use that to prefix the types/symbols + // defined. When this options is provided, they will use this value instead + // to prefix the types/symbols defined. + SwiftPrefix *string `protobuf:"bytes,39,opt,name=swift_prefix,json=swiftPrefix" json:"swift_prefix,omitempty"` + // Sets the php class prefix which is prepended to all php generated classes + // from this .proto. Default is empty. + PhpClassPrefix *string `protobuf:"bytes,40,opt,name=php_class_prefix,json=phpClassPrefix" json:"php_class_prefix,omitempty"` + // Use this option to change the namespace of php generated classes. Default + // is empty. When this option is empty, the package name will be used for + // determining the namespace. + PhpNamespace *string `protobuf:"bytes,41,opt,name=php_namespace,json=phpNamespace" json:"php_namespace,omitempty"` + // Use this option to change the namespace of php generated metadata classes. + // Default is empty. When this option is empty, the proto file name will be + // used for determining the namespace. + PhpMetadataNamespace *string `protobuf:"bytes,44,opt,name=php_metadata_namespace,json=phpMetadataNamespace" json:"php_metadata_namespace,omitempty"` + // Use this option to change the package of ruby generated classes. Default + // is empty. When this option is not set, the package name will be used for + // determining the ruby package. + RubyPackage *string `protobuf:"bytes,45,opt,name=ruby_package,json=rubyPackage" json:"ruby_package,omitempty"` + // Any features defined in the specific edition. + // WARNING: This field should only be used by protobuf plugins or special + // cases like the proto compiler. Other uses are discouraged and + // developers should rely on the protoreflect APIs for their client language. + Features *FeatureSet `protobuf:"bytes,50,opt,name=features" json:"features,omitempty"` + // The parser stores options it doesn't recognize here. + // See the documentation for the "Options" section above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + extensionFields protoimpl.ExtensionFields + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +// Default values for FileOptions fields. +const ( + Default_FileOptions_JavaMultipleFiles = bool(false) + Default_FileOptions_JavaStringCheckUtf8 = bool(false) + Default_FileOptions_OptimizeFor = FileOptions_SPEED + Default_FileOptions_CcGenericServices = bool(false) + Default_FileOptions_JavaGenericServices = bool(false) + Default_FileOptions_PyGenericServices = bool(false) + Default_FileOptions_Deprecated = bool(false) + Default_FileOptions_CcEnableArenas = bool(true) +) + +func (x *FileOptions) Reset() { + *x = FileOptions{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *FileOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FileOptions) ProtoMessage() {} + +func (x *FileOptions) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FileOptions.ProtoReflect.Descriptor instead. +func (*FileOptions) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{10} +} + +func (x *FileOptions) GetJavaPackage() string { + if x != nil && x.JavaPackage != nil { + return *x.JavaPackage + } + return "" +} + +func (x *FileOptions) GetJavaOuterClassname() string { + if x != nil && x.JavaOuterClassname != nil { + return *x.JavaOuterClassname + } + return "" +} + +func (x *FileOptions) GetJavaMultipleFiles() bool { + if x != nil && x.JavaMultipleFiles != nil { + return *x.JavaMultipleFiles + } + return Default_FileOptions_JavaMultipleFiles +} + +// Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. +func (x *FileOptions) GetJavaGenerateEqualsAndHash() bool { + if x != nil && x.JavaGenerateEqualsAndHash != nil { + return *x.JavaGenerateEqualsAndHash + } + return false +} + +func (x *FileOptions) GetJavaStringCheckUtf8() bool { + if x != nil && x.JavaStringCheckUtf8 != nil { + return *x.JavaStringCheckUtf8 + } + return Default_FileOptions_JavaStringCheckUtf8 +} + +func (x *FileOptions) GetOptimizeFor() FileOptions_OptimizeMode { + if x != nil && x.OptimizeFor != nil { + return *x.OptimizeFor + } + return Default_FileOptions_OptimizeFor +} + +func (x *FileOptions) GetGoPackage() string { + if x != nil && x.GoPackage != nil { + return *x.GoPackage + } + return "" +} + +func (x *FileOptions) GetCcGenericServices() bool { + if x != nil && x.CcGenericServices != nil { + return *x.CcGenericServices + } + return Default_FileOptions_CcGenericServices +} + +func (x *FileOptions) GetJavaGenericServices() bool { + if x != nil && x.JavaGenericServices != nil { + return *x.JavaGenericServices + } + return Default_FileOptions_JavaGenericServices +} + +func (x *FileOptions) GetPyGenericServices() bool { + if x != nil && x.PyGenericServices != nil { + return *x.PyGenericServices + } + return Default_FileOptions_PyGenericServices +} + +func (x *FileOptions) GetDeprecated() bool { + if x != nil && x.Deprecated != nil { + return *x.Deprecated + } + return Default_FileOptions_Deprecated +} + +func (x *FileOptions) GetCcEnableArenas() bool { + if x != nil && x.CcEnableArenas != nil { + return *x.CcEnableArenas + } + return Default_FileOptions_CcEnableArenas +} + +func (x *FileOptions) GetObjcClassPrefix() string { + if x != nil && x.ObjcClassPrefix != nil { + return *x.ObjcClassPrefix + } + return "" +} + +func (x *FileOptions) GetCsharpNamespace() string { + if x != nil && x.CsharpNamespace != nil { + return *x.CsharpNamespace + } + return "" +} + +func (x *FileOptions) GetSwiftPrefix() string { + if x != nil && x.SwiftPrefix != nil { + return *x.SwiftPrefix + } + return "" +} + +func (x *FileOptions) GetPhpClassPrefix() string { + if x != nil && x.PhpClassPrefix != nil { + return *x.PhpClassPrefix + } + return "" +} + +func (x *FileOptions) GetPhpNamespace() string { + if x != nil && x.PhpNamespace != nil { + return *x.PhpNamespace + } + return "" +} + +func (x *FileOptions) GetPhpMetadataNamespace() string { + if x != nil && x.PhpMetadataNamespace != nil { + return *x.PhpMetadataNamespace + } + return "" +} + +func (x *FileOptions) GetRubyPackage() string { + if x != nil && x.RubyPackage != nil { + return *x.RubyPackage + } + return "" +} + +func (x *FileOptions) GetFeatures() *FeatureSet { + if x != nil { + return x.Features + } + return nil +} + +func (x *FileOptions) GetUninterpretedOption() []*UninterpretedOption { + if x != nil { + return x.UninterpretedOption + } + return nil +} + +type MessageOptions struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Set true to use the old proto1 MessageSet wire format for extensions. + // This is provided for backwards-compatibility with the MessageSet wire + // format. You should not use this for any other reason: It's less + // efficient, has fewer features, and is more complicated. + // + // The message must be defined exactly as follows: + // + // message Foo { + // option message_set_wire_format = true; + // extensions 4 to max; + // } + // + // Note that the message cannot have any defined fields; MessageSets only + // have extensions. + // + // All extensions of your type must be singular messages; e.g. they cannot + // be int32s, enums, or repeated messages. + // + // Because this is an option, the above two restrictions are not enforced by + // the protocol compiler. + MessageSetWireFormat *bool `protobuf:"varint,1,opt,name=message_set_wire_format,json=messageSetWireFormat,def=0" json:"message_set_wire_format,omitempty"` + // Disables the generation of the standard "descriptor()" accessor, which can + // conflict with a field of the same name. This is meant to make migration + // from proto1 easier; new code should avoid fields named "descriptor". + NoStandardDescriptorAccessor *bool `protobuf:"varint,2,opt,name=no_standard_descriptor_accessor,json=noStandardDescriptorAccessor,def=0" json:"no_standard_descriptor_accessor,omitempty"` + // Is this message deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the message, or it will be completely ignored; in the very least, + // this is a formalization for deprecating messages. + Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"` + // Whether the message is an automatically generated map entry type for the + // maps field. + // + // For maps fields: + // + // map map_field = 1; + // + // The parsed descriptor looks like: + // + // message MapFieldEntry { + // option map_entry = true; + // optional KeyType key = 1; + // optional ValueType value = 2; + // } + // repeated MapFieldEntry map_field = 1; + // + // Implementations may choose not to generate the map_entry=true message, but + // use a native map in the target language to hold the keys and values. + // The reflection APIs in such implementations still need to work as + // if the field is a repeated message field. + // + // NOTE: Do not set the option in .proto files. Always use the maps syntax + // instead. The option should only be implicitly set by the proto compiler + // parser. + MapEntry *bool `protobuf:"varint,7,opt,name=map_entry,json=mapEntry" json:"map_entry,omitempty"` + // Enable the legacy handling of JSON field name conflicts. This lowercases + // and strips underscored from the fields before comparison in proto3 only. + // The new behavior takes `json_name` into account and applies to proto2 as + // well. + // + // This should only be used as a temporary measure against broken builds due + // to the change in behavior for JSON field name conflicts. + // + // TODO This is legacy behavior we plan to remove once downstream + // teams have had time to migrate. + // + // Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. + DeprecatedLegacyJsonFieldConflicts *bool `protobuf:"varint,11,opt,name=deprecated_legacy_json_field_conflicts,json=deprecatedLegacyJsonFieldConflicts" json:"deprecated_legacy_json_field_conflicts,omitempty"` + // Any features defined in the specific edition. + // WARNING: This field should only be used by protobuf plugins or special + // cases like the proto compiler. Other uses are discouraged and + // developers should rely on the protoreflect APIs for their client language. + Features *FeatureSet `protobuf:"bytes,12,opt,name=features" json:"features,omitempty"` + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + extensionFields protoimpl.ExtensionFields + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +// Default values for MessageOptions fields. +const ( + Default_MessageOptions_MessageSetWireFormat = bool(false) + Default_MessageOptions_NoStandardDescriptorAccessor = bool(false) + Default_MessageOptions_Deprecated = bool(false) +) + +func (x *MessageOptions) Reset() { + *x = MessageOptions{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MessageOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MessageOptions) ProtoMessage() {} + +func (x *MessageOptions) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MessageOptions.ProtoReflect.Descriptor instead. +func (*MessageOptions) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{11} +} + +func (x *MessageOptions) GetMessageSetWireFormat() bool { + if x != nil && x.MessageSetWireFormat != nil { + return *x.MessageSetWireFormat + } + return Default_MessageOptions_MessageSetWireFormat +} + +func (x *MessageOptions) GetNoStandardDescriptorAccessor() bool { + if x != nil && x.NoStandardDescriptorAccessor != nil { + return *x.NoStandardDescriptorAccessor + } + return Default_MessageOptions_NoStandardDescriptorAccessor +} + +func (x *MessageOptions) GetDeprecated() bool { + if x != nil && x.Deprecated != nil { + return *x.Deprecated + } + return Default_MessageOptions_Deprecated +} + +func (x *MessageOptions) GetMapEntry() bool { + if x != nil && x.MapEntry != nil { + return *x.MapEntry + } + return false +} + +// Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. +func (x *MessageOptions) GetDeprecatedLegacyJsonFieldConflicts() bool { + if x != nil && x.DeprecatedLegacyJsonFieldConflicts != nil { + return *x.DeprecatedLegacyJsonFieldConflicts + } + return false +} + +func (x *MessageOptions) GetFeatures() *FeatureSet { + if x != nil { + return x.Features + } + return nil +} + +func (x *MessageOptions) GetUninterpretedOption() []*UninterpretedOption { + if x != nil { + return x.UninterpretedOption + } + return nil +} + +type FieldOptions struct { + state protoimpl.MessageState `protogen:"open.v1"` + // NOTE: ctype is deprecated. Use `features.(pb.cpp).string_type` instead. + // The ctype option instructs the C++ code generator to use a different + // representation of the field than it normally would. See the specific + // options below. This option is only implemented to support use of + // [ctype=CORD] and [ctype=STRING] (the default) on non-repeated fields of + // type "bytes" in the open source release. + // TODO: make ctype actually deprecated. + Ctype *FieldOptions_CType `protobuf:"varint,1,opt,name=ctype,enum=google.protobuf.FieldOptions_CType,def=0" json:"ctype,omitempty"` + // The packed option can be enabled for repeated primitive fields to enable + // a more efficient representation on the wire. Rather than repeatedly + // writing the tag and type for each element, the entire array is encoded as + // a single length-delimited blob. In proto3, only explicit setting it to + // false will avoid using packed encoding. This option is prohibited in + // Editions, but the `repeated_field_encoding` feature can be used to control + // the behavior. + Packed *bool `protobuf:"varint,2,opt,name=packed" json:"packed,omitempty"` + // The jstype option determines the JavaScript type used for values of the + // field. The option is permitted only for 64 bit integral and fixed types + // (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING + // is represented as JavaScript string, which avoids loss of precision that + // can happen when a large value is converted to a floating point JavaScript. + // Specifying JS_NUMBER for the jstype causes the generated JavaScript code to + // use the JavaScript "number" type. The behavior of the default option + // JS_NORMAL is implementation dependent. + // + // This option is an enum to permit additional types to be added, e.g. + // goog.math.Integer. + Jstype *FieldOptions_JSType `protobuf:"varint,6,opt,name=jstype,enum=google.protobuf.FieldOptions_JSType,def=0" json:"jstype,omitempty"` + // Should this field be parsed lazily? Lazy applies only to message-type + // fields. It means that when the outer message is initially parsed, the + // inner message's contents will not be parsed but instead stored in encoded + // form. The inner message will actually be parsed when it is first accessed. + // + // This is only a hint. Implementations are free to choose whether to use + // eager or lazy parsing regardless of the value of this option. However, + // setting this option true suggests that the protocol author believes that + // using lazy parsing on this field is worth the additional bookkeeping + // overhead typically needed to implement it. + // + // This option does not affect the public interface of any generated code; + // all method signatures remain the same. Furthermore, thread-safety of the + // interface is not affected by this option; const methods remain safe to + // call from multiple threads concurrently, while non-const methods continue + // to require exclusive access. + // + // Note that lazy message fields are still eagerly verified to check + // ill-formed wireformat or missing required fields. Calling IsInitialized() + // on the outer message would fail if the inner message has missing required + // fields. Failed verification would result in parsing failure (except when + // uninitialized messages are acceptable). + Lazy *bool `protobuf:"varint,5,opt,name=lazy,def=0" json:"lazy,omitempty"` + // unverified_lazy does no correctness checks on the byte stream. This should + // only be used where lazy with verification is prohibitive for performance + // reasons. + UnverifiedLazy *bool `protobuf:"varint,15,opt,name=unverified_lazy,json=unverifiedLazy,def=0" json:"unverified_lazy,omitempty"` + // Is this field deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for accessors, or it will be completely ignored; in the very least, this + // is a formalization for deprecating fields. + Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"` + // DEPRECATED. DO NOT USE! + // For Google-internal migration only. Do not use. + // + // Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. + Weak *bool `protobuf:"varint,10,opt,name=weak,def=0" json:"weak,omitempty"` + // Indicate that the field value should not be printed out when using debug + // formats, e.g. when the field contains sensitive credentials. + DebugRedact *bool `protobuf:"varint,16,opt,name=debug_redact,json=debugRedact,def=0" json:"debug_redact,omitempty"` + Retention *FieldOptions_OptionRetention `protobuf:"varint,17,opt,name=retention,enum=google.protobuf.FieldOptions_OptionRetention" json:"retention,omitempty"` + Targets []FieldOptions_OptionTargetType `protobuf:"varint,19,rep,name=targets,enum=google.protobuf.FieldOptions_OptionTargetType" json:"targets,omitempty"` + EditionDefaults []*FieldOptions_EditionDefault `protobuf:"bytes,20,rep,name=edition_defaults,json=editionDefaults" json:"edition_defaults,omitempty"` + // Any features defined in the specific edition. + // WARNING: This field should only be used by protobuf plugins or special + // cases like the proto compiler. Other uses are discouraged and + // developers should rely on the protoreflect APIs for their client language. + Features *FeatureSet `protobuf:"bytes,21,opt,name=features" json:"features,omitempty"` + FeatureSupport *FieldOptions_FeatureSupport `protobuf:"bytes,22,opt,name=feature_support,json=featureSupport" json:"feature_support,omitempty"` + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + extensionFields protoimpl.ExtensionFields + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +// Default values for FieldOptions fields. +const ( + Default_FieldOptions_Ctype = FieldOptions_STRING + Default_FieldOptions_Jstype = FieldOptions_JS_NORMAL + Default_FieldOptions_Lazy = bool(false) + Default_FieldOptions_UnverifiedLazy = bool(false) + Default_FieldOptions_Deprecated = bool(false) + Default_FieldOptions_Weak = bool(false) + Default_FieldOptions_DebugRedact = bool(false) +) + +func (x *FieldOptions) Reset() { + *x = FieldOptions{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *FieldOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FieldOptions) ProtoMessage() {} + +func (x *FieldOptions) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FieldOptions.ProtoReflect.Descriptor instead. +func (*FieldOptions) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{12} +} + +func (x *FieldOptions) GetCtype() FieldOptions_CType { + if x != nil && x.Ctype != nil { + return *x.Ctype + } + return Default_FieldOptions_Ctype +} + +func (x *FieldOptions) GetPacked() bool { + if x != nil && x.Packed != nil { + return *x.Packed + } + return false +} + +func (x *FieldOptions) GetJstype() FieldOptions_JSType { + if x != nil && x.Jstype != nil { + return *x.Jstype + } + return Default_FieldOptions_Jstype +} + +func (x *FieldOptions) GetLazy() bool { + if x != nil && x.Lazy != nil { + return *x.Lazy + } + return Default_FieldOptions_Lazy +} + +func (x *FieldOptions) GetUnverifiedLazy() bool { + if x != nil && x.UnverifiedLazy != nil { + return *x.UnverifiedLazy + } + return Default_FieldOptions_UnverifiedLazy +} + +func (x *FieldOptions) GetDeprecated() bool { + if x != nil && x.Deprecated != nil { + return *x.Deprecated + } + return Default_FieldOptions_Deprecated +} + +// Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. +func (x *FieldOptions) GetWeak() bool { + if x != nil && x.Weak != nil { + return *x.Weak + } + return Default_FieldOptions_Weak +} + +func (x *FieldOptions) GetDebugRedact() bool { + if x != nil && x.DebugRedact != nil { + return *x.DebugRedact + } + return Default_FieldOptions_DebugRedact +} + +func (x *FieldOptions) GetRetention() FieldOptions_OptionRetention { + if x != nil && x.Retention != nil { + return *x.Retention + } + return FieldOptions_RETENTION_UNKNOWN +} + +func (x *FieldOptions) GetTargets() []FieldOptions_OptionTargetType { + if x != nil { + return x.Targets + } + return nil +} + +func (x *FieldOptions) GetEditionDefaults() []*FieldOptions_EditionDefault { + if x != nil { + return x.EditionDefaults + } + return nil +} + +func (x *FieldOptions) GetFeatures() *FeatureSet { + if x != nil { + return x.Features + } + return nil +} + +func (x *FieldOptions) GetFeatureSupport() *FieldOptions_FeatureSupport { + if x != nil { + return x.FeatureSupport + } + return nil +} + +func (x *FieldOptions) GetUninterpretedOption() []*UninterpretedOption { + if x != nil { + return x.UninterpretedOption + } + return nil +} + +type OneofOptions struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Any features defined in the specific edition. + // WARNING: This field should only be used by protobuf plugins or special + // cases like the proto compiler. Other uses are discouraged and + // developers should rely on the protoreflect APIs for their client language. + Features *FeatureSet `protobuf:"bytes,1,opt,name=features" json:"features,omitempty"` + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + extensionFields protoimpl.ExtensionFields + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *OneofOptions) Reset() { + *x = OneofOptions{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *OneofOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OneofOptions) ProtoMessage() {} + +func (x *OneofOptions) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OneofOptions.ProtoReflect.Descriptor instead. +func (*OneofOptions) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{13} +} + +func (x *OneofOptions) GetFeatures() *FeatureSet { + if x != nil { + return x.Features + } + return nil +} + +func (x *OneofOptions) GetUninterpretedOption() []*UninterpretedOption { + if x != nil { + return x.UninterpretedOption + } + return nil +} + +type EnumOptions struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Set this option to true to allow mapping different tag names to the same + // value. + AllowAlias *bool `protobuf:"varint,2,opt,name=allow_alias,json=allowAlias" json:"allow_alias,omitempty"` + // Is this enum deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the enum, or it will be completely ignored; in the very least, this + // is a formalization for deprecating enums. + Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"` + // Enable the legacy handling of JSON field name conflicts. This lowercases + // and strips underscored from the fields before comparison in proto3 only. + // The new behavior takes `json_name` into account and applies to proto2 as + // well. + // TODO Remove this legacy behavior once downstream teams have + // had time to migrate. + // + // Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. + DeprecatedLegacyJsonFieldConflicts *bool `protobuf:"varint,6,opt,name=deprecated_legacy_json_field_conflicts,json=deprecatedLegacyJsonFieldConflicts" json:"deprecated_legacy_json_field_conflicts,omitempty"` + // Any features defined in the specific edition. + // WARNING: This field should only be used by protobuf plugins or special + // cases like the proto compiler. Other uses are discouraged and + // developers should rely on the protoreflect APIs for their client language. + Features *FeatureSet `protobuf:"bytes,7,opt,name=features" json:"features,omitempty"` + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + extensionFields protoimpl.ExtensionFields + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +// Default values for EnumOptions fields. +const ( + Default_EnumOptions_Deprecated = bool(false) +) + +func (x *EnumOptions) Reset() { + *x = EnumOptions{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EnumOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EnumOptions) ProtoMessage() {} + +func (x *EnumOptions) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[14] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EnumOptions.ProtoReflect.Descriptor instead. +func (*EnumOptions) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{14} +} + +func (x *EnumOptions) GetAllowAlias() bool { + if x != nil && x.AllowAlias != nil { + return *x.AllowAlias + } + return false +} + +func (x *EnumOptions) GetDeprecated() bool { + if x != nil && x.Deprecated != nil { + return *x.Deprecated + } + return Default_EnumOptions_Deprecated +} + +// Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. +func (x *EnumOptions) GetDeprecatedLegacyJsonFieldConflicts() bool { + if x != nil && x.DeprecatedLegacyJsonFieldConflicts != nil { + return *x.DeprecatedLegacyJsonFieldConflicts + } + return false +} + +func (x *EnumOptions) GetFeatures() *FeatureSet { + if x != nil { + return x.Features + } + return nil +} + +func (x *EnumOptions) GetUninterpretedOption() []*UninterpretedOption { + if x != nil { + return x.UninterpretedOption + } + return nil +} + +type EnumValueOptions struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Is this enum value deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the enum value, or it will be completely ignored; in the very least, + // this is a formalization for deprecating enum values. + Deprecated *bool `protobuf:"varint,1,opt,name=deprecated,def=0" json:"deprecated,omitempty"` + // Any features defined in the specific edition. + // WARNING: This field should only be used by protobuf plugins or special + // cases like the proto compiler. Other uses are discouraged and + // developers should rely on the protoreflect APIs for their client language. + Features *FeatureSet `protobuf:"bytes,2,opt,name=features" json:"features,omitempty"` + // Indicate that fields annotated with this enum value should not be printed + // out when using debug formats, e.g. when the field contains sensitive + // credentials. + DebugRedact *bool `protobuf:"varint,3,opt,name=debug_redact,json=debugRedact,def=0" json:"debug_redact,omitempty"` + // Information about the support window of a feature value. + FeatureSupport *FieldOptions_FeatureSupport `protobuf:"bytes,4,opt,name=feature_support,json=featureSupport" json:"feature_support,omitempty"` + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + extensionFields protoimpl.ExtensionFields + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +// Default values for EnumValueOptions fields. +const ( + Default_EnumValueOptions_Deprecated = bool(false) + Default_EnumValueOptions_DebugRedact = bool(false) +) + +func (x *EnumValueOptions) Reset() { + *x = EnumValueOptions{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EnumValueOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EnumValueOptions) ProtoMessage() {} + +func (x *EnumValueOptions) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[15] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EnumValueOptions.ProtoReflect.Descriptor instead. +func (*EnumValueOptions) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{15} +} + +func (x *EnumValueOptions) GetDeprecated() bool { + if x != nil && x.Deprecated != nil { + return *x.Deprecated + } + return Default_EnumValueOptions_Deprecated +} + +func (x *EnumValueOptions) GetFeatures() *FeatureSet { + if x != nil { + return x.Features + } + return nil +} + +func (x *EnumValueOptions) GetDebugRedact() bool { + if x != nil && x.DebugRedact != nil { + return *x.DebugRedact + } + return Default_EnumValueOptions_DebugRedact +} + +func (x *EnumValueOptions) GetFeatureSupport() *FieldOptions_FeatureSupport { + if x != nil { + return x.FeatureSupport + } + return nil +} + +func (x *EnumValueOptions) GetUninterpretedOption() []*UninterpretedOption { + if x != nil { + return x.UninterpretedOption + } + return nil +} + +type ServiceOptions struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Any features defined in the specific edition. + // WARNING: This field should only be used by protobuf plugins or special + // cases like the proto compiler. Other uses are discouraged and + // developers should rely on the protoreflect APIs for their client language. + Features *FeatureSet `protobuf:"bytes,34,opt,name=features" json:"features,omitempty"` + // Is this service deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the service, or it will be completely ignored; in the very least, + // this is a formalization for deprecating services. + Deprecated *bool `protobuf:"varint,33,opt,name=deprecated,def=0" json:"deprecated,omitempty"` + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + extensionFields protoimpl.ExtensionFields + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +// Default values for ServiceOptions fields. +const ( + Default_ServiceOptions_Deprecated = bool(false) +) + +func (x *ServiceOptions) Reset() { + *x = ServiceOptions{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ServiceOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServiceOptions) ProtoMessage() {} + +func (x *ServiceOptions) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[16] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ServiceOptions.ProtoReflect.Descriptor instead. +func (*ServiceOptions) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{16} +} + +func (x *ServiceOptions) GetFeatures() *FeatureSet { + if x != nil { + return x.Features + } + return nil +} + +func (x *ServiceOptions) GetDeprecated() bool { + if x != nil && x.Deprecated != nil { + return *x.Deprecated + } + return Default_ServiceOptions_Deprecated +} + +func (x *ServiceOptions) GetUninterpretedOption() []*UninterpretedOption { + if x != nil { + return x.UninterpretedOption + } + return nil +} + +type MethodOptions struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Is this method deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the method, or it will be completely ignored; in the very least, + // this is a formalization for deprecating methods. + Deprecated *bool `protobuf:"varint,33,opt,name=deprecated,def=0" json:"deprecated,omitempty"` + IdempotencyLevel *MethodOptions_IdempotencyLevel `protobuf:"varint,34,opt,name=idempotency_level,json=idempotencyLevel,enum=google.protobuf.MethodOptions_IdempotencyLevel,def=0" json:"idempotency_level,omitempty"` + // Any features defined in the specific edition. + // WARNING: This field should only be used by protobuf plugins or special + // cases like the proto compiler. Other uses are discouraged and + // developers should rely on the protoreflect APIs for their client language. + Features *FeatureSet `protobuf:"bytes,35,opt,name=features" json:"features,omitempty"` + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + extensionFields protoimpl.ExtensionFields + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +// Default values for MethodOptions fields. +const ( + Default_MethodOptions_Deprecated = bool(false) + Default_MethodOptions_IdempotencyLevel = MethodOptions_IDEMPOTENCY_UNKNOWN +) + +func (x *MethodOptions) Reset() { + *x = MethodOptions{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MethodOptions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MethodOptions) ProtoMessage() {} + +func (x *MethodOptions) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[17] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MethodOptions.ProtoReflect.Descriptor instead. +func (*MethodOptions) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{17} +} + +func (x *MethodOptions) GetDeprecated() bool { + if x != nil && x.Deprecated != nil { + return *x.Deprecated + } + return Default_MethodOptions_Deprecated +} + +func (x *MethodOptions) GetIdempotencyLevel() MethodOptions_IdempotencyLevel { + if x != nil && x.IdempotencyLevel != nil { + return *x.IdempotencyLevel + } + return Default_MethodOptions_IdempotencyLevel +} + +func (x *MethodOptions) GetFeatures() *FeatureSet { + if x != nil { + return x.Features + } + return nil +} + +func (x *MethodOptions) GetUninterpretedOption() []*UninterpretedOption { + if x != nil { + return x.UninterpretedOption + } + return nil +} + +// A message representing a option the parser does not recognize. This only +// appears in options protos created by the compiler::Parser class. +// DescriptorPool resolves these when building Descriptor objects. Therefore, +// options protos in descriptor objects (e.g. returned by Descriptor::options(), +// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions +// in them. +type UninterpretedOption struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name []*UninterpretedOption_NamePart `protobuf:"bytes,2,rep,name=name" json:"name,omitempty"` + // The value of the uninterpreted option, in whatever type the tokenizer + // identified it as during parsing. Exactly one of these should be set. + IdentifierValue *string `protobuf:"bytes,3,opt,name=identifier_value,json=identifierValue" json:"identifier_value,omitempty"` + PositiveIntValue *uint64 `protobuf:"varint,4,opt,name=positive_int_value,json=positiveIntValue" json:"positive_int_value,omitempty"` + NegativeIntValue *int64 `protobuf:"varint,5,opt,name=negative_int_value,json=negativeIntValue" json:"negative_int_value,omitempty"` + DoubleValue *float64 `protobuf:"fixed64,6,opt,name=double_value,json=doubleValue" json:"double_value,omitempty"` + StringValue []byte `protobuf:"bytes,7,opt,name=string_value,json=stringValue" json:"string_value,omitempty"` + AggregateValue *string `protobuf:"bytes,8,opt,name=aggregate_value,json=aggregateValue" json:"aggregate_value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UninterpretedOption) Reset() { + *x = UninterpretedOption{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UninterpretedOption) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UninterpretedOption) ProtoMessage() {} + +func (x *UninterpretedOption) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[18] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UninterpretedOption.ProtoReflect.Descriptor instead. +func (*UninterpretedOption) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{18} +} + +func (x *UninterpretedOption) GetName() []*UninterpretedOption_NamePart { + if x != nil { + return x.Name + } + return nil +} + +func (x *UninterpretedOption) GetIdentifierValue() string { + if x != nil && x.IdentifierValue != nil { + return *x.IdentifierValue + } + return "" +} + +func (x *UninterpretedOption) GetPositiveIntValue() uint64 { + if x != nil && x.PositiveIntValue != nil { + return *x.PositiveIntValue + } + return 0 +} + +func (x *UninterpretedOption) GetNegativeIntValue() int64 { + if x != nil && x.NegativeIntValue != nil { + return *x.NegativeIntValue + } + return 0 +} + +func (x *UninterpretedOption) GetDoubleValue() float64 { + if x != nil && x.DoubleValue != nil { + return *x.DoubleValue + } + return 0 +} + +func (x *UninterpretedOption) GetStringValue() []byte { + if x != nil { + return x.StringValue + } + return nil +} + +func (x *UninterpretedOption) GetAggregateValue() string { + if x != nil && x.AggregateValue != nil { + return *x.AggregateValue + } + return "" +} + +// TODO Enums in C++ gencode (and potentially other languages) are +// not well scoped. This means that each of the feature enums below can clash +// with each other. The short names we've chosen maximize call-site +// readability, but leave us very open to this scenario. A future feature will +// be designed and implemented to handle this, hopefully before we ever hit a +// conflict here. +type FeatureSet struct { + state protoimpl.MessageState `protogen:"open.v1"` + FieldPresence *FeatureSet_FieldPresence `protobuf:"varint,1,opt,name=field_presence,json=fieldPresence,enum=google.protobuf.FeatureSet_FieldPresence" json:"field_presence,omitempty"` + EnumType *FeatureSet_EnumType `protobuf:"varint,2,opt,name=enum_type,json=enumType,enum=google.protobuf.FeatureSet_EnumType" json:"enum_type,omitempty"` + RepeatedFieldEncoding *FeatureSet_RepeatedFieldEncoding `protobuf:"varint,3,opt,name=repeated_field_encoding,json=repeatedFieldEncoding,enum=google.protobuf.FeatureSet_RepeatedFieldEncoding" json:"repeated_field_encoding,omitempty"` + Utf8Validation *FeatureSet_Utf8Validation `protobuf:"varint,4,opt,name=utf8_validation,json=utf8Validation,enum=google.protobuf.FeatureSet_Utf8Validation" json:"utf8_validation,omitempty"` + MessageEncoding *FeatureSet_MessageEncoding `protobuf:"varint,5,opt,name=message_encoding,json=messageEncoding,enum=google.protobuf.FeatureSet_MessageEncoding" json:"message_encoding,omitempty"` + JsonFormat *FeatureSet_JsonFormat `protobuf:"varint,6,opt,name=json_format,json=jsonFormat,enum=google.protobuf.FeatureSet_JsonFormat" json:"json_format,omitempty"` + EnforceNamingStyle *FeatureSet_EnforceNamingStyle `protobuf:"varint,7,opt,name=enforce_naming_style,json=enforceNamingStyle,enum=google.protobuf.FeatureSet_EnforceNamingStyle" json:"enforce_naming_style,omitempty"` + DefaultSymbolVisibility *FeatureSet_VisibilityFeature_DefaultSymbolVisibility `protobuf:"varint,8,opt,name=default_symbol_visibility,json=defaultSymbolVisibility,enum=google.protobuf.FeatureSet_VisibilityFeature_DefaultSymbolVisibility" json:"default_symbol_visibility,omitempty"` + extensionFields protoimpl.ExtensionFields + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *FeatureSet) Reset() { + *x = FeatureSet{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *FeatureSet) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FeatureSet) ProtoMessage() {} + +func (x *FeatureSet) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[19] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FeatureSet.ProtoReflect.Descriptor instead. +func (*FeatureSet) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{19} +} + +func (x *FeatureSet) GetFieldPresence() FeatureSet_FieldPresence { + if x != nil && x.FieldPresence != nil { + return *x.FieldPresence + } + return FeatureSet_FIELD_PRESENCE_UNKNOWN +} + +func (x *FeatureSet) GetEnumType() FeatureSet_EnumType { + if x != nil && x.EnumType != nil { + return *x.EnumType + } + return FeatureSet_ENUM_TYPE_UNKNOWN +} + +func (x *FeatureSet) GetRepeatedFieldEncoding() FeatureSet_RepeatedFieldEncoding { + if x != nil && x.RepeatedFieldEncoding != nil { + return *x.RepeatedFieldEncoding + } + return FeatureSet_REPEATED_FIELD_ENCODING_UNKNOWN +} + +func (x *FeatureSet) GetUtf8Validation() FeatureSet_Utf8Validation { + if x != nil && x.Utf8Validation != nil { + return *x.Utf8Validation + } + return FeatureSet_UTF8_VALIDATION_UNKNOWN +} + +func (x *FeatureSet) GetMessageEncoding() FeatureSet_MessageEncoding { + if x != nil && x.MessageEncoding != nil { + return *x.MessageEncoding + } + return FeatureSet_MESSAGE_ENCODING_UNKNOWN +} + +func (x *FeatureSet) GetJsonFormat() FeatureSet_JsonFormat { + if x != nil && x.JsonFormat != nil { + return *x.JsonFormat + } + return FeatureSet_JSON_FORMAT_UNKNOWN +} + +func (x *FeatureSet) GetEnforceNamingStyle() FeatureSet_EnforceNamingStyle { + if x != nil && x.EnforceNamingStyle != nil { + return *x.EnforceNamingStyle + } + return FeatureSet_ENFORCE_NAMING_STYLE_UNKNOWN +} + +func (x *FeatureSet) GetDefaultSymbolVisibility() FeatureSet_VisibilityFeature_DefaultSymbolVisibility { + if x != nil && x.DefaultSymbolVisibility != nil { + return *x.DefaultSymbolVisibility + } + return FeatureSet_VisibilityFeature_DEFAULT_SYMBOL_VISIBILITY_UNKNOWN +} + +// A compiled specification for the defaults of a set of features. These +// messages are generated from FeatureSet extensions and can be used to seed +// feature resolution. The resolution with this object becomes a simple search +// for the closest matching edition, followed by proto merges. +type FeatureSetDefaults struct { + state protoimpl.MessageState `protogen:"open.v1"` + Defaults []*FeatureSetDefaults_FeatureSetEditionDefault `protobuf:"bytes,1,rep,name=defaults" json:"defaults,omitempty"` + // The minimum supported edition (inclusive) when this was constructed. + // Editions before this will not have defaults. + MinimumEdition *Edition `protobuf:"varint,4,opt,name=minimum_edition,json=minimumEdition,enum=google.protobuf.Edition" json:"minimum_edition,omitempty"` + // The maximum known edition (inclusive) when this was constructed. Editions + // after this will not have reliable defaults. + MaximumEdition *Edition `protobuf:"varint,5,opt,name=maximum_edition,json=maximumEdition,enum=google.protobuf.Edition" json:"maximum_edition,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *FeatureSetDefaults) Reset() { + *x = FeatureSetDefaults{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *FeatureSetDefaults) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FeatureSetDefaults) ProtoMessage() {} + +func (x *FeatureSetDefaults) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[20] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FeatureSetDefaults.ProtoReflect.Descriptor instead. +func (*FeatureSetDefaults) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{20} +} + +func (x *FeatureSetDefaults) GetDefaults() []*FeatureSetDefaults_FeatureSetEditionDefault { + if x != nil { + return x.Defaults + } + return nil +} + +func (x *FeatureSetDefaults) GetMinimumEdition() Edition { + if x != nil && x.MinimumEdition != nil { + return *x.MinimumEdition + } + return Edition_EDITION_UNKNOWN +} + +func (x *FeatureSetDefaults) GetMaximumEdition() Edition { + if x != nil && x.MaximumEdition != nil { + return *x.MaximumEdition + } + return Edition_EDITION_UNKNOWN +} + +// Encapsulates information about the original source file from which a +// FileDescriptorProto was generated. +type SourceCodeInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + // A Location identifies a piece of source code in a .proto file which + // corresponds to a particular definition. This information is intended + // to be useful to IDEs, code indexers, documentation generators, and similar + // tools. + // + // For example, say we have a file like: + // + // message Foo { + // optional string foo = 1; + // } + // + // Let's look at just the field definition: + // + // optional string foo = 1; + // ^ ^^ ^^ ^ ^^^ + // a bc de f ghi + // + // We have the following locations: + // + // span path represents + // [a,i) [ 4, 0, 2, 0 ] The whole field definition. + // [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). + // [c,d) [ 4, 0, 2, 0, 5 ] The type (string). + // [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). + // [g,h) [ 4, 0, 2, 0, 3 ] The number (1). + // + // Notes: + // - A location may refer to a repeated field itself (i.e. not to any + // particular index within it). This is used whenever a set of elements are + // logically enclosed in a single code segment. For example, an entire + // extend block (possibly containing multiple extension definitions) will + // have an outer location whose path refers to the "extensions" repeated + // field without an index. + // - Multiple locations may have the same path. This happens when a single + // logical declaration is spread out across multiple places. The most + // obvious example is the "extend" block again -- there may be multiple + // extend blocks in the same scope, each of which will have the same path. + // - A location's span is not always a subset of its parent's span. For + // example, the "extendee" of an extension declaration appears at the + // beginning of the "extend" block and is shared by all extensions within + // the block. + // - Just because a location's span is a subset of some other location's span + // does not mean that it is a descendant. For example, a "group" defines + // both a type and a field in a single declaration. Thus, the locations + // corresponding to the type and field and their components will overlap. + // - Code which tries to interpret locations should probably be designed to + // ignore those that it doesn't understand, as more types of locations could + // be recorded in the future. + Location []*SourceCodeInfo_Location `protobuf:"bytes,1,rep,name=location" json:"location,omitempty"` + extensionFields protoimpl.ExtensionFields + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SourceCodeInfo) Reset() { + *x = SourceCodeInfo{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SourceCodeInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SourceCodeInfo) ProtoMessage() {} + +func (x *SourceCodeInfo) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[21] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SourceCodeInfo.ProtoReflect.Descriptor instead. +func (*SourceCodeInfo) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{21} +} + +func (x *SourceCodeInfo) GetLocation() []*SourceCodeInfo_Location { + if x != nil { + return x.Location + } + return nil +} + +// Describes the relationship between generated code and its original source +// file. A GeneratedCodeInfo message is associated with only one generated +// source file, but may contain references to different source .proto files. +type GeneratedCodeInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + // An Annotation connects some span of text in generated code to an element + // of its generating .proto file. + Annotation []*GeneratedCodeInfo_Annotation `protobuf:"bytes,1,rep,name=annotation" json:"annotation,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GeneratedCodeInfo) Reset() { + *x = GeneratedCodeInfo{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GeneratedCodeInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GeneratedCodeInfo) ProtoMessage() {} + +func (x *GeneratedCodeInfo) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[22] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GeneratedCodeInfo.ProtoReflect.Descriptor instead. +func (*GeneratedCodeInfo) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{22} +} + +func (x *GeneratedCodeInfo) GetAnnotation() []*GeneratedCodeInfo_Annotation { + if x != nil { + return x.Annotation + } + return nil +} + +type DescriptorProto_ExtensionRange struct { + state protoimpl.MessageState `protogen:"open.v1"` + Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` // Inclusive. + End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` // Exclusive. + Options *ExtensionRangeOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DescriptorProto_ExtensionRange) Reset() { + *x = DescriptorProto_ExtensionRange{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DescriptorProto_ExtensionRange) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DescriptorProto_ExtensionRange) ProtoMessage() {} + +func (x *DescriptorProto_ExtensionRange) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[23] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DescriptorProto_ExtensionRange.ProtoReflect.Descriptor instead. +func (*DescriptorProto_ExtensionRange) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{2, 0} +} + +func (x *DescriptorProto_ExtensionRange) GetStart() int32 { + if x != nil && x.Start != nil { + return *x.Start + } + return 0 +} + +func (x *DescriptorProto_ExtensionRange) GetEnd() int32 { + if x != nil && x.End != nil { + return *x.End + } + return 0 +} + +func (x *DescriptorProto_ExtensionRange) GetOptions() *ExtensionRangeOptions { + if x != nil { + return x.Options + } + return nil +} + +// Range of reserved tag numbers. Reserved tag numbers may not be used by +// fields or extension ranges in the same message. Reserved ranges may +// not overlap. +type DescriptorProto_ReservedRange struct { + state protoimpl.MessageState `protogen:"open.v1"` + Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` // Inclusive. + End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` // Exclusive. + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DescriptorProto_ReservedRange) Reset() { + *x = DescriptorProto_ReservedRange{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DescriptorProto_ReservedRange) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DescriptorProto_ReservedRange) ProtoMessage() {} + +func (x *DescriptorProto_ReservedRange) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[24] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DescriptorProto_ReservedRange.ProtoReflect.Descriptor instead. +func (*DescriptorProto_ReservedRange) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{2, 1} +} + +func (x *DescriptorProto_ReservedRange) GetStart() int32 { + if x != nil && x.Start != nil { + return *x.Start + } + return 0 +} + +func (x *DescriptorProto_ReservedRange) GetEnd() int32 { + if x != nil && x.End != nil { + return *x.End + } + return 0 +} + +type ExtensionRangeOptions_Declaration struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The extension number declared within the extension range. + Number *int32 `protobuf:"varint,1,opt,name=number" json:"number,omitempty"` + // The fully-qualified name of the extension field. There must be a leading + // dot in front of the full name. + FullName *string `protobuf:"bytes,2,opt,name=full_name,json=fullName" json:"full_name,omitempty"` + // The fully-qualified type name of the extension field. Unlike + // Metadata.type, Declaration.type must have a leading dot for messages + // and enums. + Type *string `protobuf:"bytes,3,opt,name=type" json:"type,omitempty"` + // If true, indicates that the number is reserved in the extension range, + // and any extension field with the number will fail to compile. Set this + // when a declared extension field is deleted. + Reserved *bool `protobuf:"varint,5,opt,name=reserved" json:"reserved,omitempty"` + // If true, indicates that the extension must be defined as repeated. + // Otherwise the extension must be defined as optional. + Repeated *bool `protobuf:"varint,6,opt,name=repeated" json:"repeated,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ExtensionRangeOptions_Declaration) Reset() { + *x = ExtensionRangeOptions_Declaration{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ExtensionRangeOptions_Declaration) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExtensionRangeOptions_Declaration) ProtoMessage() {} + +func (x *ExtensionRangeOptions_Declaration) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[25] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExtensionRangeOptions_Declaration.ProtoReflect.Descriptor instead. +func (*ExtensionRangeOptions_Declaration) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{3, 0} +} + +func (x *ExtensionRangeOptions_Declaration) GetNumber() int32 { + if x != nil && x.Number != nil { + return *x.Number + } + return 0 +} + +func (x *ExtensionRangeOptions_Declaration) GetFullName() string { + if x != nil && x.FullName != nil { + return *x.FullName + } + return "" +} + +func (x *ExtensionRangeOptions_Declaration) GetType() string { + if x != nil && x.Type != nil { + return *x.Type + } + return "" +} + +func (x *ExtensionRangeOptions_Declaration) GetReserved() bool { + if x != nil && x.Reserved != nil { + return *x.Reserved + } + return false +} + +func (x *ExtensionRangeOptions_Declaration) GetRepeated() bool { + if x != nil && x.Repeated != nil { + return *x.Repeated + } + return false +} + +// Range of reserved numeric values. Reserved values may not be used by +// entries in the same enum. Reserved ranges may not overlap. +// +// Note that this is distinct from DescriptorProto.ReservedRange in that it +// is inclusive such that it can appropriately represent the entire int32 +// domain. +type EnumDescriptorProto_EnumReservedRange struct { + state protoimpl.MessageState `protogen:"open.v1"` + Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` // Inclusive. + End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` // Inclusive. + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EnumDescriptorProto_EnumReservedRange) Reset() { + *x = EnumDescriptorProto_EnumReservedRange{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EnumDescriptorProto_EnumReservedRange) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EnumDescriptorProto_EnumReservedRange) ProtoMessage() {} + +func (x *EnumDescriptorProto_EnumReservedRange) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[26] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EnumDescriptorProto_EnumReservedRange.ProtoReflect.Descriptor instead. +func (*EnumDescriptorProto_EnumReservedRange) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{6, 0} +} + +func (x *EnumDescriptorProto_EnumReservedRange) GetStart() int32 { + if x != nil && x.Start != nil { + return *x.Start + } + return 0 +} + +func (x *EnumDescriptorProto_EnumReservedRange) GetEnd() int32 { + if x != nil && x.End != nil { + return *x.End + } + return 0 +} + +type FieldOptions_EditionDefault struct { + state protoimpl.MessageState `protogen:"open.v1"` + Edition *Edition `protobuf:"varint,3,opt,name=edition,enum=google.protobuf.Edition" json:"edition,omitempty"` + Value *string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` // Textproto value. + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *FieldOptions_EditionDefault) Reset() { + *x = FieldOptions_EditionDefault{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *FieldOptions_EditionDefault) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FieldOptions_EditionDefault) ProtoMessage() {} + +func (x *FieldOptions_EditionDefault) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[27] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FieldOptions_EditionDefault.ProtoReflect.Descriptor instead. +func (*FieldOptions_EditionDefault) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{12, 0} +} + +func (x *FieldOptions_EditionDefault) GetEdition() Edition { + if x != nil && x.Edition != nil { + return *x.Edition + } + return Edition_EDITION_UNKNOWN +} + +func (x *FieldOptions_EditionDefault) GetValue() string { + if x != nil && x.Value != nil { + return *x.Value + } + return "" +} + +// Information about the support window of a feature. +type FieldOptions_FeatureSupport struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The edition that this feature was first available in. In editions + // earlier than this one, the default assigned to EDITION_LEGACY will be + // used, and proto files will not be able to override it. + EditionIntroduced *Edition `protobuf:"varint,1,opt,name=edition_introduced,json=editionIntroduced,enum=google.protobuf.Edition" json:"edition_introduced,omitempty"` + // The edition this feature becomes deprecated in. Using this after this + // edition may trigger warnings. + EditionDeprecated *Edition `protobuf:"varint,2,opt,name=edition_deprecated,json=editionDeprecated,enum=google.protobuf.Edition" json:"edition_deprecated,omitempty"` + // The deprecation warning text if this feature is used after the edition it + // was marked deprecated in. + DeprecationWarning *string `protobuf:"bytes,3,opt,name=deprecation_warning,json=deprecationWarning" json:"deprecation_warning,omitempty"` + // The edition this feature is no longer available in. In editions after + // this one, the last default assigned will be used, and proto files will + // not be able to override it. + EditionRemoved *Edition `protobuf:"varint,4,opt,name=edition_removed,json=editionRemoved,enum=google.protobuf.Edition" json:"edition_removed,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *FieldOptions_FeatureSupport) Reset() { + *x = FieldOptions_FeatureSupport{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *FieldOptions_FeatureSupport) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FieldOptions_FeatureSupport) ProtoMessage() {} + +func (x *FieldOptions_FeatureSupport) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[28] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FieldOptions_FeatureSupport.ProtoReflect.Descriptor instead. +func (*FieldOptions_FeatureSupport) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{12, 1} +} + +func (x *FieldOptions_FeatureSupport) GetEditionIntroduced() Edition { + if x != nil && x.EditionIntroduced != nil { + return *x.EditionIntroduced + } + return Edition_EDITION_UNKNOWN +} + +func (x *FieldOptions_FeatureSupport) GetEditionDeprecated() Edition { + if x != nil && x.EditionDeprecated != nil { + return *x.EditionDeprecated + } + return Edition_EDITION_UNKNOWN +} + +func (x *FieldOptions_FeatureSupport) GetDeprecationWarning() string { + if x != nil && x.DeprecationWarning != nil { + return *x.DeprecationWarning + } + return "" +} + +func (x *FieldOptions_FeatureSupport) GetEditionRemoved() Edition { + if x != nil && x.EditionRemoved != nil { + return *x.EditionRemoved + } + return Edition_EDITION_UNKNOWN +} + +// The name of the uninterpreted option. Each string represents a segment in +// a dot-separated name. is_extension is true iff a segment represents an +// extension (denoted with parentheses in options specs in .proto files). +// E.g.,{ ["foo", false], ["bar.baz", true], ["moo", false] } represents +// "foo.(bar.baz).moo". +type UninterpretedOption_NamePart struct { + state protoimpl.MessageState `protogen:"open.v1"` + NamePart *string `protobuf:"bytes,1,req,name=name_part,json=namePart" json:"name_part,omitempty"` + IsExtension *bool `protobuf:"varint,2,req,name=is_extension,json=isExtension" json:"is_extension,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UninterpretedOption_NamePart) Reset() { + *x = UninterpretedOption_NamePart{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UninterpretedOption_NamePart) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UninterpretedOption_NamePart) ProtoMessage() {} + +func (x *UninterpretedOption_NamePart) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[29] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UninterpretedOption_NamePart.ProtoReflect.Descriptor instead. +func (*UninterpretedOption_NamePart) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{18, 0} +} + +func (x *UninterpretedOption_NamePart) GetNamePart() string { + if x != nil && x.NamePart != nil { + return *x.NamePart + } + return "" +} + +func (x *UninterpretedOption_NamePart) GetIsExtension() bool { + if x != nil && x.IsExtension != nil { + return *x.IsExtension + } + return false +} + +type FeatureSet_VisibilityFeature struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *FeatureSet_VisibilityFeature) Reset() { + *x = FeatureSet_VisibilityFeature{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *FeatureSet_VisibilityFeature) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FeatureSet_VisibilityFeature) ProtoMessage() {} + +func (x *FeatureSet_VisibilityFeature) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[30] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FeatureSet_VisibilityFeature.ProtoReflect.Descriptor instead. +func (*FeatureSet_VisibilityFeature) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{19, 0} +} + +// A map from every known edition with a unique set of defaults to its +// defaults. Not all editions may be contained here. For a given edition, +// the defaults at the closest matching edition ordered at or before it should +// be used. This field must be in strict ascending order by edition. +type FeatureSetDefaults_FeatureSetEditionDefault struct { + state protoimpl.MessageState `protogen:"open.v1"` + Edition *Edition `protobuf:"varint,3,opt,name=edition,enum=google.protobuf.Edition" json:"edition,omitempty"` + // Defaults of features that can be overridden in this edition. + OverridableFeatures *FeatureSet `protobuf:"bytes,4,opt,name=overridable_features,json=overridableFeatures" json:"overridable_features,omitempty"` + // Defaults of features that can't be overridden in this edition. + FixedFeatures *FeatureSet `protobuf:"bytes,5,opt,name=fixed_features,json=fixedFeatures" json:"fixed_features,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *FeatureSetDefaults_FeatureSetEditionDefault) Reset() { + *x = FeatureSetDefaults_FeatureSetEditionDefault{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *FeatureSetDefaults_FeatureSetEditionDefault) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FeatureSetDefaults_FeatureSetEditionDefault) ProtoMessage() {} + +func (x *FeatureSetDefaults_FeatureSetEditionDefault) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[31] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FeatureSetDefaults_FeatureSetEditionDefault.ProtoReflect.Descriptor instead. +func (*FeatureSetDefaults_FeatureSetEditionDefault) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{20, 0} +} + +func (x *FeatureSetDefaults_FeatureSetEditionDefault) GetEdition() Edition { + if x != nil && x.Edition != nil { + return *x.Edition + } + return Edition_EDITION_UNKNOWN +} + +func (x *FeatureSetDefaults_FeatureSetEditionDefault) GetOverridableFeatures() *FeatureSet { + if x != nil { + return x.OverridableFeatures + } + return nil +} + +func (x *FeatureSetDefaults_FeatureSetEditionDefault) GetFixedFeatures() *FeatureSet { + if x != nil { + return x.FixedFeatures + } + return nil +} + +type SourceCodeInfo_Location struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Identifies which part of the FileDescriptorProto was defined at this + // location. + // + // Each element is a field number or an index. They form a path from + // the root FileDescriptorProto to the place where the definition appears. + // For example, this path: + // + // [ 4, 3, 2, 7, 1 ] + // + // refers to: + // + // file.message_type(3) // 4, 3 + // .field(7) // 2, 7 + // .name() // 1 + // + // This is because FileDescriptorProto.message_type has field number 4: + // + // repeated DescriptorProto message_type = 4; + // + // and DescriptorProto.field has field number 2: + // + // repeated FieldDescriptorProto field = 2; + // + // and FieldDescriptorProto.name has field number 1: + // + // optional string name = 1; + // + // Thus, the above path gives the location of a field name. If we removed + // the last element: + // + // [ 4, 3, 2, 7 ] + // + // this path refers to the whole field declaration (from the beginning + // of the label to the terminating semicolon). + Path []int32 `protobuf:"varint,1,rep,packed,name=path" json:"path,omitempty"` + // Always has exactly three or four elements: start line, start column, + // end line (optional, otherwise assumed same as start line), end column. + // These are packed into a single field for efficiency. Note that line + // and column numbers are zero-based -- typically you will want to add + // 1 to each before displaying to a user. + Span []int32 `protobuf:"varint,2,rep,packed,name=span" json:"span,omitempty"` + // If this SourceCodeInfo represents a complete declaration, these are any + // comments appearing before and after the declaration which appear to be + // attached to the declaration. + // + // A series of line comments appearing on consecutive lines, with no other + // tokens appearing on those lines, will be treated as a single comment. + // + // leading_detached_comments will keep paragraphs of comments that appear + // before (but not connected to) the current element. Each paragraph, + // separated by empty lines, will be one comment element in the repeated + // field. + // + // Only the comment content is provided; comment markers (e.g. //) are + // stripped out. For block comments, leading whitespace and an asterisk + // will be stripped from the beginning of each line other than the first. + // Newlines are included in the output. + // + // Examples: + // + // optional int32 foo = 1; // Comment attached to foo. + // // Comment attached to bar. + // optional int32 bar = 2; + // + // optional string baz = 3; + // // Comment attached to baz. + // // Another line attached to baz. + // + // // Comment attached to moo. + // // + // // Another line attached to moo. + // optional double moo = 4; + // + // // Detached comment for corge. This is not leading or trailing comments + // // to moo or corge because there are blank lines separating it from + // // both. + // + // // Detached comment for corge paragraph 2. + // + // optional string corge = 5; + // /* Block comment attached + // * to corge. Leading asterisks + // * will be removed. */ + // /* Block comment attached to + // * grault. */ + // optional int32 grault = 6; + // + // // ignored detached comments. + LeadingComments *string `protobuf:"bytes,3,opt,name=leading_comments,json=leadingComments" json:"leading_comments,omitempty"` + TrailingComments *string `protobuf:"bytes,4,opt,name=trailing_comments,json=trailingComments" json:"trailing_comments,omitempty"` + LeadingDetachedComments []string `protobuf:"bytes,6,rep,name=leading_detached_comments,json=leadingDetachedComments" json:"leading_detached_comments,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SourceCodeInfo_Location) Reset() { + *x = SourceCodeInfo_Location{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SourceCodeInfo_Location) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SourceCodeInfo_Location) ProtoMessage() {} + +func (x *SourceCodeInfo_Location) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[32] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SourceCodeInfo_Location.ProtoReflect.Descriptor instead. +func (*SourceCodeInfo_Location) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{21, 0} +} + +func (x *SourceCodeInfo_Location) GetPath() []int32 { + if x != nil { + return x.Path + } + return nil +} + +func (x *SourceCodeInfo_Location) GetSpan() []int32 { + if x != nil { + return x.Span + } + return nil +} + +func (x *SourceCodeInfo_Location) GetLeadingComments() string { + if x != nil && x.LeadingComments != nil { + return *x.LeadingComments + } + return "" +} + +func (x *SourceCodeInfo_Location) GetTrailingComments() string { + if x != nil && x.TrailingComments != nil { + return *x.TrailingComments + } + return "" +} + +func (x *SourceCodeInfo_Location) GetLeadingDetachedComments() []string { + if x != nil { + return x.LeadingDetachedComments + } + return nil +} + +type GeneratedCodeInfo_Annotation struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Identifies the element in the original source .proto file. This field + // is formatted the same as SourceCodeInfo.Location.path. + Path []int32 `protobuf:"varint,1,rep,packed,name=path" json:"path,omitempty"` + // Identifies the filesystem path to the original source .proto. + SourceFile *string `protobuf:"bytes,2,opt,name=source_file,json=sourceFile" json:"source_file,omitempty"` + // Identifies the starting offset in bytes in the generated code + // that relates to the identified object. + Begin *int32 `protobuf:"varint,3,opt,name=begin" json:"begin,omitempty"` + // Identifies the ending offset in bytes in the generated code that + // relates to the identified object. The end offset should be one past + // the last relevant byte (so the length of the text = end - begin). + End *int32 `protobuf:"varint,4,opt,name=end" json:"end,omitempty"` + Semantic *GeneratedCodeInfo_Annotation_Semantic `protobuf:"varint,5,opt,name=semantic,enum=google.protobuf.GeneratedCodeInfo_Annotation_Semantic" json:"semantic,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GeneratedCodeInfo_Annotation) Reset() { + *x = GeneratedCodeInfo_Annotation{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GeneratedCodeInfo_Annotation) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GeneratedCodeInfo_Annotation) ProtoMessage() {} + +func (x *GeneratedCodeInfo_Annotation) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[33] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GeneratedCodeInfo_Annotation.ProtoReflect.Descriptor instead. +func (*GeneratedCodeInfo_Annotation) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{22, 0} +} + +func (x *GeneratedCodeInfo_Annotation) GetPath() []int32 { + if x != nil { + return x.Path + } + return nil +} + +func (x *GeneratedCodeInfo_Annotation) GetSourceFile() string { + if x != nil && x.SourceFile != nil { + return *x.SourceFile + } + return "" +} + +func (x *GeneratedCodeInfo_Annotation) GetBegin() int32 { + if x != nil && x.Begin != nil { + return *x.Begin + } + return 0 +} + +func (x *GeneratedCodeInfo_Annotation) GetEnd() int32 { + if x != nil && x.End != nil { + return *x.End + } + return 0 +} + +func (x *GeneratedCodeInfo_Annotation) GetSemantic() GeneratedCodeInfo_Annotation_Semantic { + if x != nil && x.Semantic != nil { + return *x.Semantic + } + return GeneratedCodeInfo_Annotation_NONE +} + +var File_google_protobuf_descriptor_proto protoreflect.FileDescriptor + +const file_google_protobuf_descriptor_proto_rawDesc = "" + + "\n" + + " google/protobuf/descriptor.proto\x12\x0fgoogle.protobuf\"[\n" + + "\x11FileDescriptorSet\x128\n" + + "\x04file\x18\x01 \x03(\v2$.google.protobuf.FileDescriptorProtoR\x04file*\f\b\x80\xec\xca\xff\x01\x10\x81\xec\xca\xff\x01\"\xc5\x05\n" + + "\x13FileDescriptorProto\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n" + + "\apackage\x18\x02 \x01(\tR\apackage\x12\x1e\n" + + "\n" + + "dependency\x18\x03 \x03(\tR\n" + + "dependency\x12+\n" + + "\x11public_dependency\x18\n" + + " \x03(\x05R\x10publicDependency\x12'\n" + + "\x0fweak_dependency\x18\v \x03(\x05R\x0eweakDependency\x12+\n" + + "\x11option_dependency\x18\x0f \x03(\tR\x10optionDependency\x12C\n" + + "\fmessage_type\x18\x04 \x03(\v2 .google.protobuf.DescriptorProtoR\vmessageType\x12A\n" + + "\tenum_type\x18\x05 \x03(\v2$.google.protobuf.EnumDescriptorProtoR\benumType\x12A\n" + + "\aservice\x18\x06 \x03(\v2'.google.protobuf.ServiceDescriptorProtoR\aservice\x12C\n" + + "\textension\x18\a \x03(\v2%.google.protobuf.FieldDescriptorProtoR\textension\x126\n" + + "\aoptions\x18\b \x01(\v2\x1c.google.protobuf.FileOptionsR\aoptions\x12I\n" + + "\x10source_code_info\x18\t \x01(\v2\x1f.google.protobuf.SourceCodeInfoR\x0esourceCodeInfo\x12\x16\n" + + "\x06syntax\x18\f \x01(\tR\x06syntax\x122\n" + + "\aedition\x18\x0e \x01(\x0e2\x18.google.protobuf.EditionR\aedition\"\xfc\x06\n" + + "\x0fDescriptorProto\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12;\n" + + "\x05field\x18\x02 \x03(\v2%.google.protobuf.FieldDescriptorProtoR\x05field\x12C\n" + + "\textension\x18\x06 \x03(\v2%.google.protobuf.FieldDescriptorProtoR\textension\x12A\n" + + "\vnested_type\x18\x03 \x03(\v2 .google.protobuf.DescriptorProtoR\n" + + "nestedType\x12A\n" + + "\tenum_type\x18\x04 \x03(\v2$.google.protobuf.EnumDescriptorProtoR\benumType\x12X\n" + + "\x0fextension_range\x18\x05 \x03(\v2/.google.protobuf.DescriptorProto.ExtensionRangeR\x0eextensionRange\x12D\n" + + "\n" + + "oneof_decl\x18\b \x03(\v2%.google.protobuf.OneofDescriptorProtoR\toneofDecl\x129\n" + + "\aoptions\x18\a \x01(\v2\x1f.google.protobuf.MessageOptionsR\aoptions\x12U\n" + + "\x0ereserved_range\x18\t \x03(\v2..google.protobuf.DescriptorProto.ReservedRangeR\rreservedRange\x12#\n" + + "\rreserved_name\x18\n" + + " \x03(\tR\freservedName\x12A\n" + + "\n" + + "visibility\x18\v \x01(\x0e2!.google.protobuf.SymbolVisibilityR\n" + + "visibility\x1az\n" + + "\x0eExtensionRange\x12\x14\n" + + "\x05start\x18\x01 \x01(\x05R\x05start\x12\x10\n" + + "\x03end\x18\x02 \x01(\x05R\x03end\x12@\n" + + "\aoptions\x18\x03 \x01(\v2&.google.protobuf.ExtensionRangeOptionsR\aoptions\x1a7\n" + + "\rReservedRange\x12\x14\n" + + "\x05start\x18\x01 \x01(\x05R\x05start\x12\x10\n" + + "\x03end\x18\x02 \x01(\x05R\x03end\"\xcc\x04\n" + + "\x15ExtensionRangeOptions\x12X\n" + + "\x14uninterpreted_option\x18\xe7\a \x03(\v2$.google.protobuf.UninterpretedOptionR\x13uninterpretedOption\x12Y\n" + + "\vdeclaration\x18\x02 \x03(\v22.google.protobuf.ExtensionRangeOptions.DeclarationB\x03\x88\x01\x02R\vdeclaration\x127\n" + + "\bfeatures\x182 \x01(\v2\x1b.google.protobuf.FeatureSetR\bfeatures\x12m\n" + + "\fverification\x18\x03 \x01(\x0e28.google.protobuf.ExtensionRangeOptions.VerificationState:\n" + + "UNVERIFIEDB\x03\x88\x01\x02R\fverification\x1a\x94\x01\n" + + "\vDeclaration\x12\x16\n" + + "\x06number\x18\x01 \x01(\x05R\x06number\x12\x1b\n" + + "\tfull_name\x18\x02 \x01(\tR\bfullName\x12\x12\n" + + "\x04type\x18\x03 \x01(\tR\x04type\x12\x1a\n" + + "\breserved\x18\x05 \x01(\bR\breserved\x12\x1a\n" + + "\brepeated\x18\x06 \x01(\bR\brepeatedJ\x04\b\x04\x10\x05\"4\n" + + "\x11VerificationState\x12\x0f\n" + + "\vDECLARATION\x10\x00\x12\x0e\n" + + "\n" + + "UNVERIFIED\x10\x01*\t\b\xe8\a\x10\x80\x80\x80\x80\x02\"\xc1\x06\n" + + "\x14FieldDescriptorProto\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x16\n" + + "\x06number\x18\x03 \x01(\x05R\x06number\x12A\n" + + "\x05label\x18\x04 \x01(\x0e2+.google.protobuf.FieldDescriptorProto.LabelR\x05label\x12>\n" + + "\x04type\x18\x05 \x01(\x0e2*.google.protobuf.FieldDescriptorProto.TypeR\x04type\x12\x1b\n" + + "\ttype_name\x18\x06 \x01(\tR\btypeName\x12\x1a\n" + + "\bextendee\x18\x02 \x01(\tR\bextendee\x12#\n" + + "\rdefault_value\x18\a \x01(\tR\fdefaultValue\x12\x1f\n" + + "\voneof_index\x18\t \x01(\x05R\n" + + "oneofIndex\x12\x1b\n" + + "\tjson_name\x18\n" + + " \x01(\tR\bjsonName\x127\n" + + "\aoptions\x18\b \x01(\v2\x1d.google.protobuf.FieldOptionsR\aoptions\x12'\n" + + "\x0fproto3_optional\x18\x11 \x01(\bR\x0eproto3Optional\"\xb6\x02\n" + + "\x04Type\x12\x0f\n" + + "\vTYPE_DOUBLE\x10\x01\x12\x0e\n" + + "\n" + + "TYPE_FLOAT\x10\x02\x12\x0e\n" + + "\n" + + "TYPE_INT64\x10\x03\x12\x0f\n" + + "\vTYPE_UINT64\x10\x04\x12\x0e\n" + + "\n" + + "TYPE_INT32\x10\x05\x12\x10\n" + + "\fTYPE_FIXED64\x10\x06\x12\x10\n" + + "\fTYPE_FIXED32\x10\a\x12\r\n" + + "\tTYPE_BOOL\x10\b\x12\x0f\n" + + "\vTYPE_STRING\x10\t\x12\x0e\n" + + "\n" + + "TYPE_GROUP\x10\n" + + "\x12\x10\n" + + "\fTYPE_MESSAGE\x10\v\x12\x0e\n" + + "\n" + + "TYPE_BYTES\x10\f\x12\x0f\n" + + "\vTYPE_UINT32\x10\r\x12\r\n" + + "\tTYPE_ENUM\x10\x0e\x12\x11\n" + + "\rTYPE_SFIXED32\x10\x0f\x12\x11\n" + + "\rTYPE_SFIXED64\x10\x10\x12\x0f\n" + + "\vTYPE_SINT32\x10\x11\x12\x0f\n" + + "\vTYPE_SINT64\x10\x12\"C\n" + + "\x05Label\x12\x12\n" + + "\x0eLABEL_OPTIONAL\x10\x01\x12\x12\n" + + "\x0eLABEL_REPEATED\x10\x03\x12\x12\n" + + "\x0eLABEL_REQUIRED\x10\x02\"c\n" + + "\x14OneofDescriptorProto\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x127\n" + + "\aoptions\x18\x02 \x01(\v2\x1d.google.protobuf.OneofOptionsR\aoptions\"\xa6\x03\n" + + "\x13EnumDescriptorProto\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12?\n" + + "\x05value\x18\x02 \x03(\v2).google.protobuf.EnumValueDescriptorProtoR\x05value\x126\n" + + "\aoptions\x18\x03 \x01(\v2\x1c.google.protobuf.EnumOptionsR\aoptions\x12]\n" + + "\x0ereserved_range\x18\x04 \x03(\v26.google.protobuf.EnumDescriptorProto.EnumReservedRangeR\rreservedRange\x12#\n" + + "\rreserved_name\x18\x05 \x03(\tR\freservedName\x12A\n" + + "\n" + + "visibility\x18\x06 \x01(\x0e2!.google.protobuf.SymbolVisibilityR\n" + + "visibility\x1a;\n" + + "\x11EnumReservedRange\x12\x14\n" + + "\x05start\x18\x01 \x01(\x05R\x05start\x12\x10\n" + + "\x03end\x18\x02 \x01(\x05R\x03end\"\x83\x01\n" + + "\x18EnumValueDescriptorProto\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x16\n" + + "\x06number\x18\x02 \x01(\x05R\x06number\x12;\n" + + "\aoptions\x18\x03 \x01(\v2!.google.protobuf.EnumValueOptionsR\aoptions\"\xa7\x01\n" + + "\x16ServiceDescriptorProto\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12>\n" + + "\x06method\x18\x02 \x03(\v2&.google.protobuf.MethodDescriptorProtoR\x06method\x129\n" + + "\aoptions\x18\x03 \x01(\v2\x1f.google.protobuf.ServiceOptionsR\aoptions\"\x89\x02\n" + + "\x15MethodDescriptorProto\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x1d\n" + + "\n" + + "input_type\x18\x02 \x01(\tR\tinputType\x12\x1f\n" + + "\voutput_type\x18\x03 \x01(\tR\n" + + "outputType\x128\n" + + "\aoptions\x18\x04 \x01(\v2\x1e.google.protobuf.MethodOptionsR\aoptions\x120\n" + + "\x10client_streaming\x18\x05 \x01(\b:\x05falseR\x0fclientStreaming\x120\n" + + "\x10server_streaming\x18\x06 \x01(\b:\x05falseR\x0fserverStreaming\"\xad\t\n" + + "\vFileOptions\x12!\n" + + "\fjava_package\x18\x01 \x01(\tR\vjavaPackage\x120\n" + + "\x14java_outer_classname\x18\b \x01(\tR\x12javaOuterClassname\x125\n" + + "\x13java_multiple_files\x18\n" + + " \x01(\b:\x05falseR\x11javaMultipleFiles\x12D\n" + + "\x1djava_generate_equals_and_hash\x18\x14 \x01(\bB\x02\x18\x01R\x19javaGenerateEqualsAndHash\x12:\n" + + "\x16java_string_check_utf8\x18\x1b \x01(\b:\x05falseR\x13javaStringCheckUtf8\x12S\n" + + "\foptimize_for\x18\t \x01(\x0e2).google.protobuf.FileOptions.OptimizeMode:\x05SPEEDR\voptimizeFor\x12\x1d\n" + + "\n" + + "go_package\x18\v \x01(\tR\tgoPackage\x125\n" + + "\x13cc_generic_services\x18\x10 \x01(\b:\x05falseR\x11ccGenericServices\x129\n" + + "\x15java_generic_services\x18\x11 \x01(\b:\x05falseR\x13javaGenericServices\x125\n" + + "\x13py_generic_services\x18\x12 \x01(\b:\x05falseR\x11pyGenericServices\x12%\n" + + "\n" + + "deprecated\x18\x17 \x01(\b:\x05falseR\n" + + "deprecated\x12.\n" + + "\x10cc_enable_arenas\x18\x1f \x01(\b:\x04trueR\x0eccEnableArenas\x12*\n" + + "\x11objc_class_prefix\x18$ \x01(\tR\x0fobjcClassPrefix\x12)\n" + + "\x10csharp_namespace\x18% \x01(\tR\x0fcsharpNamespace\x12!\n" + + "\fswift_prefix\x18' \x01(\tR\vswiftPrefix\x12(\n" + + "\x10php_class_prefix\x18( \x01(\tR\x0ephpClassPrefix\x12#\n" + + "\rphp_namespace\x18) \x01(\tR\fphpNamespace\x124\n" + + "\x16php_metadata_namespace\x18, \x01(\tR\x14phpMetadataNamespace\x12!\n" + + "\fruby_package\x18- \x01(\tR\vrubyPackage\x127\n" + + "\bfeatures\x182 \x01(\v2\x1b.google.protobuf.FeatureSetR\bfeatures\x12X\n" + + "\x14uninterpreted_option\x18\xe7\a \x03(\v2$.google.protobuf.UninterpretedOptionR\x13uninterpretedOption\":\n" + + "\fOptimizeMode\x12\t\n" + + "\x05SPEED\x10\x01\x12\r\n" + + "\tCODE_SIZE\x10\x02\x12\x10\n" + + "\fLITE_RUNTIME\x10\x03*\t\b\xe8\a\x10\x80\x80\x80\x80\x02J\x04\b*\x10+J\x04\b&\x10'R\x14php_generic_services\"\xf4\x03\n" + + "\x0eMessageOptions\x12<\n" + + "\x17message_set_wire_format\x18\x01 \x01(\b:\x05falseR\x14messageSetWireFormat\x12L\n" + + "\x1fno_standard_descriptor_accessor\x18\x02 \x01(\b:\x05falseR\x1cnoStandardDescriptorAccessor\x12%\n" + + "\n" + + "deprecated\x18\x03 \x01(\b:\x05falseR\n" + + "deprecated\x12\x1b\n" + + "\tmap_entry\x18\a \x01(\bR\bmapEntry\x12V\n" + + "&deprecated_legacy_json_field_conflicts\x18\v \x01(\bB\x02\x18\x01R\"deprecatedLegacyJsonFieldConflicts\x127\n" + + "\bfeatures\x18\f \x01(\v2\x1b.google.protobuf.FeatureSetR\bfeatures\x12X\n" + + "\x14uninterpreted_option\x18\xe7\a \x03(\v2$.google.protobuf.UninterpretedOptionR\x13uninterpretedOption*\t\b\xe8\a\x10\x80\x80\x80\x80\x02J\x04\b\x04\x10\x05J\x04\b\x05\x10\x06J\x04\b\x06\x10\aJ\x04\b\b\x10\tJ\x04\b\t\x10\n" + + "\"\xa1\r\n" + + "\fFieldOptions\x12A\n" + + "\x05ctype\x18\x01 \x01(\x0e2#.google.protobuf.FieldOptions.CType:\x06STRINGR\x05ctype\x12\x16\n" + + "\x06packed\x18\x02 \x01(\bR\x06packed\x12G\n" + + "\x06jstype\x18\x06 \x01(\x0e2$.google.protobuf.FieldOptions.JSType:\tJS_NORMALR\x06jstype\x12\x19\n" + + "\x04lazy\x18\x05 \x01(\b:\x05falseR\x04lazy\x12.\n" + + "\x0funverified_lazy\x18\x0f \x01(\b:\x05falseR\x0eunverifiedLazy\x12%\n" + + "\n" + + "deprecated\x18\x03 \x01(\b:\x05falseR\n" + + "deprecated\x12\x1d\n" + + "\x04weak\x18\n" + + " \x01(\b:\x05falseB\x02\x18\x01R\x04weak\x12(\n" + + "\fdebug_redact\x18\x10 \x01(\b:\x05falseR\vdebugRedact\x12K\n" + + "\tretention\x18\x11 \x01(\x0e2-.google.protobuf.FieldOptions.OptionRetentionR\tretention\x12H\n" + + "\atargets\x18\x13 \x03(\x0e2..google.protobuf.FieldOptions.OptionTargetTypeR\atargets\x12W\n" + + "\x10edition_defaults\x18\x14 \x03(\v2,.google.protobuf.FieldOptions.EditionDefaultR\x0feditionDefaults\x127\n" + + "\bfeatures\x18\x15 \x01(\v2\x1b.google.protobuf.FeatureSetR\bfeatures\x12U\n" + + "\x0ffeature_support\x18\x16 \x01(\v2,.google.protobuf.FieldOptions.FeatureSupportR\x0efeatureSupport\x12X\n" + + "\x14uninterpreted_option\x18\xe7\a \x03(\v2$.google.protobuf.UninterpretedOptionR\x13uninterpretedOption\x1aZ\n" + + "\x0eEditionDefault\x122\n" + + "\aedition\x18\x03 \x01(\x0e2\x18.google.protobuf.EditionR\aedition\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value\x1a\x96\x02\n" + + "\x0eFeatureSupport\x12G\n" + + "\x12edition_introduced\x18\x01 \x01(\x0e2\x18.google.protobuf.EditionR\x11editionIntroduced\x12G\n" + + "\x12edition_deprecated\x18\x02 \x01(\x0e2\x18.google.protobuf.EditionR\x11editionDeprecated\x12/\n" + + "\x13deprecation_warning\x18\x03 \x01(\tR\x12deprecationWarning\x12A\n" + + "\x0fedition_removed\x18\x04 \x01(\x0e2\x18.google.protobuf.EditionR\x0eeditionRemoved\"/\n" + + "\x05CType\x12\n" + + "\n" + + "\x06STRING\x10\x00\x12\b\n" + + "\x04CORD\x10\x01\x12\x10\n" + + "\fSTRING_PIECE\x10\x02\"5\n" + + "\x06JSType\x12\r\n" + + "\tJS_NORMAL\x10\x00\x12\r\n" + + "\tJS_STRING\x10\x01\x12\r\n" + + "\tJS_NUMBER\x10\x02\"U\n" + + "\x0fOptionRetention\x12\x15\n" + + "\x11RETENTION_UNKNOWN\x10\x00\x12\x15\n" + + "\x11RETENTION_RUNTIME\x10\x01\x12\x14\n" + + "\x10RETENTION_SOURCE\x10\x02\"\x8c\x02\n" + + "\x10OptionTargetType\x12\x17\n" + + "\x13TARGET_TYPE_UNKNOWN\x10\x00\x12\x14\n" + + "\x10TARGET_TYPE_FILE\x10\x01\x12\x1f\n" + + "\x1bTARGET_TYPE_EXTENSION_RANGE\x10\x02\x12\x17\n" + + "\x13TARGET_TYPE_MESSAGE\x10\x03\x12\x15\n" + + "\x11TARGET_TYPE_FIELD\x10\x04\x12\x15\n" + + "\x11TARGET_TYPE_ONEOF\x10\x05\x12\x14\n" + + "\x10TARGET_TYPE_ENUM\x10\x06\x12\x1a\n" + + "\x16TARGET_TYPE_ENUM_ENTRY\x10\a\x12\x17\n" + + "\x13TARGET_TYPE_SERVICE\x10\b\x12\x16\n" + + "\x12TARGET_TYPE_METHOD\x10\t*\t\b\xe8\a\x10\x80\x80\x80\x80\x02J\x04\b\x04\x10\x05J\x04\b\x12\x10\x13\"\xac\x01\n" + + "\fOneofOptions\x127\n" + + "\bfeatures\x18\x01 \x01(\v2\x1b.google.protobuf.FeatureSetR\bfeatures\x12X\n" + + "\x14uninterpreted_option\x18\xe7\a \x03(\v2$.google.protobuf.UninterpretedOptionR\x13uninterpretedOption*\t\b\xe8\a\x10\x80\x80\x80\x80\x02\"\xd1\x02\n" + + "\vEnumOptions\x12\x1f\n" + + "\vallow_alias\x18\x02 \x01(\bR\n" + + "allowAlias\x12%\n" + + "\n" + + "deprecated\x18\x03 \x01(\b:\x05falseR\n" + + "deprecated\x12V\n" + + "&deprecated_legacy_json_field_conflicts\x18\x06 \x01(\bB\x02\x18\x01R\"deprecatedLegacyJsonFieldConflicts\x127\n" + + "\bfeatures\x18\a \x01(\v2\x1b.google.protobuf.FeatureSetR\bfeatures\x12X\n" + + "\x14uninterpreted_option\x18\xe7\a \x03(\v2$.google.protobuf.UninterpretedOptionR\x13uninterpretedOption*\t\b\xe8\a\x10\x80\x80\x80\x80\x02J\x04\b\x05\x10\x06\"\xd8\x02\n" + + "\x10EnumValueOptions\x12%\n" + + "\n" + + "deprecated\x18\x01 \x01(\b:\x05falseR\n" + + "deprecated\x127\n" + + "\bfeatures\x18\x02 \x01(\v2\x1b.google.protobuf.FeatureSetR\bfeatures\x12(\n" + + "\fdebug_redact\x18\x03 \x01(\b:\x05falseR\vdebugRedact\x12U\n" + + "\x0ffeature_support\x18\x04 \x01(\v2,.google.protobuf.FieldOptions.FeatureSupportR\x0efeatureSupport\x12X\n" + + "\x14uninterpreted_option\x18\xe7\a \x03(\v2$.google.protobuf.UninterpretedOptionR\x13uninterpretedOption*\t\b\xe8\a\x10\x80\x80\x80\x80\x02\"\xd5\x01\n" + + "\x0eServiceOptions\x127\n" + + "\bfeatures\x18\" \x01(\v2\x1b.google.protobuf.FeatureSetR\bfeatures\x12%\n" + + "\n" + + "deprecated\x18! \x01(\b:\x05falseR\n" + + "deprecated\x12X\n" + + "\x14uninterpreted_option\x18\xe7\a \x03(\v2$.google.protobuf.UninterpretedOptionR\x13uninterpretedOption*\t\b\xe8\a\x10\x80\x80\x80\x80\x02\"\x99\x03\n" + + "\rMethodOptions\x12%\n" + + "\n" + + "deprecated\x18! \x01(\b:\x05falseR\n" + + "deprecated\x12q\n" + + "\x11idempotency_level\x18\" \x01(\x0e2/.google.protobuf.MethodOptions.IdempotencyLevel:\x13IDEMPOTENCY_UNKNOWNR\x10idempotencyLevel\x127\n" + + "\bfeatures\x18# \x01(\v2\x1b.google.protobuf.FeatureSetR\bfeatures\x12X\n" + + "\x14uninterpreted_option\x18\xe7\a \x03(\v2$.google.protobuf.UninterpretedOptionR\x13uninterpretedOption\"P\n" + + "\x10IdempotencyLevel\x12\x17\n" + + "\x13IDEMPOTENCY_UNKNOWN\x10\x00\x12\x13\n" + + "\x0fNO_SIDE_EFFECTS\x10\x01\x12\x0e\n" + + "\n" + + "IDEMPOTENT\x10\x02*\t\b\xe8\a\x10\x80\x80\x80\x80\x02\"\x9a\x03\n" + + "\x13UninterpretedOption\x12A\n" + + "\x04name\x18\x02 \x03(\v2-.google.protobuf.UninterpretedOption.NamePartR\x04name\x12)\n" + + "\x10identifier_value\x18\x03 \x01(\tR\x0fidentifierValue\x12,\n" + + "\x12positive_int_value\x18\x04 \x01(\x04R\x10positiveIntValue\x12,\n" + + "\x12negative_int_value\x18\x05 \x01(\x03R\x10negativeIntValue\x12!\n" + + "\fdouble_value\x18\x06 \x01(\x01R\vdoubleValue\x12!\n" + + "\fstring_value\x18\a \x01(\fR\vstringValue\x12'\n" + + "\x0faggregate_value\x18\b \x01(\tR\x0eaggregateValue\x1aJ\n" + + "\bNamePart\x12\x1b\n" + + "\tname_part\x18\x01 \x02(\tR\bnamePart\x12!\n" + + "\fis_extension\x18\x02 \x02(\bR\visExtension\"\x8e\x0f\n" + + "\n" + + "FeatureSet\x12\x91\x01\n" + + "\x0efield_presence\x18\x01 \x01(\x0e2).google.protobuf.FeatureSet.FieldPresenceB?\x88\x01\x01\x98\x01\x04\x98\x01\x01\xa2\x01\r\x12\bEXPLICIT\x18\x84\a\xa2\x01\r\x12\bIMPLICIT\x18\xe7\a\xa2\x01\r\x12\bEXPLICIT\x18\xe8\a\xb2\x01\x03\b\xe8\aR\rfieldPresence\x12l\n" + + "\tenum_type\x18\x02 \x01(\x0e2$.google.protobuf.FeatureSet.EnumTypeB)\x88\x01\x01\x98\x01\x06\x98\x01\x01\xa2\x01\v\x12\x06CLOSED\x18\x84\a\xa2\x01\t\x12\x04OPEN\x18\xe7\a\xb2\x01\x03\b\xe8\aR\benumType\x12\x98\x01\n" + + "\x17repeated_field_encoding\x18\x03 \x01(\x0e21.google.protobuf.FeatureSet.RepeatedFieldEncodingB-\x88\x01\x01\x98\x01\x04\x98\x01\x01\xa2\x01\r\x12\bEXPANDED\x18\x84\a\xa2\x01\v\x12\x06PACKED\x18\xe7\a\xb2\x01\x03\b\xe8\aR\x15repeatedFieldEncoding\x12~\n" + + "\x0futf8_validation\x18\x04 \x01(\x0e2*.google.protobuf.FeatureSet.Utf8ValidationB)\x88\x01\x01\x98\x01\x04\x98\x01\x01\xa2\x01\t\x12\x04NONE\x18\x84\a\xa2\x01\v\x12\x06VERIFY\x18\xe7\a\xb2\x01\x03\b\xe8\aR\x0eutf8Validation\x12~\n" + + "\x10message_encoding\x18\x05 \x01(\x0e2+.google.protobuf.FeatureSet.MessageEncodingB&\x88\x01\x01\x98\x01\x04\x98\x01\x01\xa2\x01\x14\x12\x0fLENGTH_PREFIXED\x18\x84\a\xb2\x01\x03\b\xe8\aR\x0fmessageEncoding\x12\x82\x01\n" + + "\vjson_format\x18\x06 \x01(\x0e2&.google.protobuf.FeatureSet.JsonFormatB9\x88\x01\x01\x98\x01\x03\x98\x01\x06\x98\x01\x01\xa2\x01\x17\x12\x12LEGACY_BEST_EFFORT\x18\x84\a\xa2\x01\n" + + "\x12\x05ALLOW\x18\xe7\a\xb2\x01\x03\b\xe8\aR\n" + + "jsonFormat\x12\xab\x01\n" + + "\x14enforce_naming_style\x18\a \x01(\x0e2..google.protobuf.FeatureSet.EnforceNamingStyleBI\x88\x01\x02\x98\x01\x01\x98\x01\x02\x98\x01\x03\x98\x01\x04\x98\x01\x05\x98\x01\x06\x98\x01\a\x98\x01\b\x98\x01\t\xa2\x01\x11\x12\fSTYLE_LEGACY\x18\x84\a\xa2\x01\x0e\x12\tSTYLE2024\x18\xe9\a\xb2\x01\x03\b\xe9\aR\x12enforceNamingStyle\x12\xb9\x01\n" + + "\x19default_symbol_visibility\x18\b \x01(\x0e2E.google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibilityB6\x88\x01\x02\x98\x01\x01\xa2\x01\x0f\x12\n" + + "EXPORT_ALL\x18\x84\a\xa2\x01\x15\x12\x10EXPORT_TOP_LEVEL\x18\xe9\a\xb2\x01\x03\b\xe9\aR\x17defaultSymbolVisibility\x1a\xa1\x01\n" + + "\x11VisibilityFeature\"\x81\x01\n" + + "\x17DefaultSymbolVisibility\x12%\n" + + "!DEFAULT_SYMBOL_VISIBILITY_UNKNOWN\x10\x00\x12\x0e\n" + + "\n" + + "EXPORT_ALL\x10\x01\x12\x14\n" + + "\x10EXPORT_TOP_LEVEL\x10\x02\x12\r\n" + + "\tLOCAL_ALL\x10\x03\x12\n" + + "\n" + + "\x06STRICT\x10\x04J\b\b\x01\x10\x80\x80\x80\x80\x02\"\\\n" + + "\rFieldPresence\x12\x1a\n" + + "\x16FIELD_PRESENCE_UNKNOWN\x10\x00\x12\f\n" + + "\bEXPLICIT\x10\x01\x12\f\n" + + "\bIMPLICIT\x10\x02\x12\x13\n" + + "\x0fLEGACY_REQUIRED\x10\x03\"7\n" + + "\bEnumType\x12\x15\n" + + "\x11ENUM_TYPE_UNKNOWN\x10\x00\x12\b\n" + + "\x04OPEN\x10\x01\x12\n" + + "\n" + + "\x06CLOSED\x10\x02\"V\n" + + "\x15RepeatedFieldEncoding\x12#\n" + + "\x1fREPEATED_FIELD_ENCODING_UNKNOWN\x10\x00\x12\n" + + "\n" + + "\x06PACKED\x10\x01\x12\f\n" + + "\bEXPANDED\x10\x02\"I\n" + + "\x0eUtf8Validation\x12\x1b\n" + + "\x17UTF8_VALIDATION_UNKNOWN\x10\x00\x12\n" + + "\n" + + "\x06VERIFY\x10\x02\x12\b\n" + + "\x04NONE\x10\x03\"\x04\b\x01\x10\x01\"S\n" + + "\x0fMessageEncoding\x12\x1c\n" + + "\x18MESSAGE_ENCODING_UNKNOWN\x10\x00\x12\x13\n" + + "\x0fLENGTH_PREFIXED\x10\x01\x12\r\n" + + "\tDELIMITED\x10\x02\"H\n" + + "\n" + + "JsonFormat\x12\x17\n" + + "\x13JSON_FORMAT_UNKNOWN\x10\x00\x12\t\n" + + "\x05ALLOW\x10\x01\x12\x16\n" + + "\x12LEGACY_BEST_EFFORT\x10\x02\"W\n" + + "\x12EnforceNamingStyle\x12 \n" + + "\x1cENFORCE_NAMING_STYLE_UNKNOWN\x10\x00\x12\r\n" + + "\tSTYLE2024\x10\x01\x12\x10\n" + + "\fSTYLE_LEGACY\x10\x02*\x06\b\xe8\a\x10\x8bN*\x06\b\x8bN\x10\x90N*\x06\b\x90N\x10\x91NJ\x06\b\xe7\a\x10\xe8\a\"\xef\x03\n" + + "\x12FeatureSetDefaults\x12X\n" + + "\bdefaults\x18\x01 \x03(\v2<.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefaultR\bdefaults\x12A\n" + + "\x0fminimum_edition\x18\x04 \x01(\x0e2\x18.google.protobuf.EditionR\x0eminimumEdition\x12A\n" + + "\x0fmaximum_edition\x18\x05 \x01(\x0e2\x18.google.protobuf.EditionR\x0emaximumEdition\x1a\xf8\x01\n" + + "\x18FeatureSetEditionDefault\x122\n" + + "\aedition\x18\x03 \x01(\x0e2\x18.google.protobuf.EditionR\aedition\x12N\n" + + "\x14overridable_features\x18\x04 \x01(\v2\x1b.google.protobuf.FeatureSetR\x13overridableFeatures\x12B\n" + + "\x0efixed_features\x18\x05 \x01(\v2\x1b.google.protobuf.FeatureSetR\rfixedFeaturesJ\x04\b\x01\x10\x02J\x04\b\x02\x10\x03R\bfeatures\"\xb5\x02\n" + + "\x0eSourceCodeInfo\x12D\n" + + "\blocation\x18\x01 \x03(\v2(.google.protobuf.SourceCodeInfo.LocationR\blocation\x1a\xce\x01\n" + + "\bLocation\x12\x16\n" + + "\x04path\x18\x01 \x03(\x05B\x02\x10\x01R\x04path\x12\x16\n" + + "\x04span\x18\x02 \x03(\x05B\x02\x10\x01R\x04span\x12)\n" + + "\x10leading_comments\x18\x03 \x01(\tR\x0fleadingComments\x12+\n" + + "\x11trailing_comments\x18\x04 \x01(\tR\x10trailingComments\x12:\n" + + "\x19leading_detached_comments\x18\x06 \x03(\tR\x17leadingDetachedComments*\f\b\x80\xec\xca\xff\x01\x10\x81\xec\xca\xff\x01\"\xd0\x02\n" + + "\x11GeneratedCodeInfo\x12M\n" + + "\n" + + "annotation\x18\x01 \x03(\v2-.google.protobuf.GeneratedCodeInfo.AnnotationR\n" + + "annotation\x1a\xeb\x01\n" + + "\n" + + "Annotation\x12\x16\n" + + "\x04path\x18\x01 \x03(\x05B\x02\x10\x01R\x04path\x12\x1f\n" + + "\vsource_file\x18\x02 \x01(\tR\n" + + "sourceFile\x12\x14\n" + + "\x05begin\x18\x03 \x01(\x05R\x05begin\x12\x10\n" + + "\x03end\x18\x04 \x01(\x05R\x03end\x12R\n" + + "\bsemantic\x18\x05 \x01(\x0e26.google.protobuf.GeneratedCodeInfo.Annotation.SemanticR\bsemantic\"(\n" + + "\bSemantic\x12\b\n" + + "\x04NONE\x10\x00\x12\a\n" + + "\x03SET\x10\x01\x12\t\n" + + "\x05ALIAS\x10\x02*\xa7\x02\n" + + "\aEdition\x12\x13\n" + + "\x0fEDITION_UNKNOWN\x10\x00\x12\x13\n" + + "\x0eEDITION_LEGACY\x10\x84\a\x12\x13\n" + + "\x0eEDITION_PROTO2\x10\xe6\a\x12\x13\n" + + "\x0eEDITION_PROTO3\x10\xe7\a\x12\x11\n" + + "\fEDITION_2023\x10\xe8\a\x12\x11\n" + + "\fEDITION_2024\x10\xe9\a\x12\x17\n" + + "\x13EDITION_1_TEST_ONLY\x10\x01\x12\x17\n" + + "\x13EDITION_2_TEST_ONLY\x10\x02\x12\x1d\n" + + "\x17EDITION_99997_TEST_ONLY\x10\x9d\x8d\x06\x12\x1d\n" + + "\x17EDITION_99998_TEST_ONLY\x10\x9e\x8d\x06\x12\x1d\n" + + "\x17EDITION_99999_TEST_ONLY\x10\x9f\x8d\x06\x12\x13\n" + + "\vEDITION_MAX\x10\xff\xff\xff\xff\a*U\n" + + "\x10SymbolVisibility\x12\x14\n" + + "\x10VISIBILITY_UNSET\x10\x00\x12\x14\n" + + "\x10VISIBILITY_LOCAL\x10\x01\x12\x15\n" + + "\x11VISIBILITY_EXPORT\x10\x02B~\n" + + "\x13com.google.protobufB\x10DescriptorProtosH\x01Z-google.golang.org/protobuf/types/descriptorpb\xf8\x01\x01\xa2\x02\x03GPB\xaa\x02\x1aGoogle.Protobuf.Reflection" + +var ( + file_google_protobuf_descriptor_proto_rawDescOnce sync.Once + file_google_protobuf_descriptor_proto_rawDescData []byte +) + +func file_google_protobuf_descriptor_proto_rawDescGZIP() []byte { + file_google_protobuf_descriptor_proto_rawDescOnce.Do(func() { + file_google_protobuf_descriptor_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_google_protobuf_descriptor_proto_rawDesc), len(file_google_protobuf_descriptor_proto_rawDesc))) + }) + return file_google_protobuf_descriptor_proto_rawDescData +} + +var file_google_protobuf_descriptor_proto_enumTypes = make([]protoimpl.EnumInfo, 20) +var file_google_protobuf_descriptor_proto_msgTypes = make([]protoimpl.MessageInfo, 34) +var file_google_protobuf_descriptor_proto_goTypes = []any{ + (Edition)(0), // 0: google.protobuf.Edition + (SymbolVisibility)(0), // 1: google.protobuf.SymbolVisibility + (ExtensionRangeOptions_VerificationState)(0), // 2: google.protobuf.ExtensionRangeOptions.VerificationState + (FieldDescriptorProto_Type)(0), // 3: google.protobuf.FieldDescriptorProto.Type + (FieldDescriptorProto_Label)(0), // 4: google.protobuf.FieldDescriptorProto.Label + (FileOptions_OptimizeMode)(0), // 5: google.protobuf.FileOptions.OptimizeMode + (FieldOptions_CType)(0), // 6: google.protobuf.FieldOptions.CType + (FieldOptions_JSType)(0), // 7: google.protobuf.FieldOptions.JSType + (FieldOptions_OptionRetention)(0), // 8: google.protobuf.FieldOptions.OptionRetention + (FieldOptions_OptionTargetType)(0), // 9: google.protobuf.FieldOptions.OptionTargetType + (MethodOptions_IdempotencyLevel)(0), // 10: google.protobuf.MethodOptions.IdempotencyLevel + (FeatureSet_FieldPresence)(0), // 11: google.protobuf.FeatureSet.FieldPresence + (FeatureSet_EnumType)(0), // 12: google.protobuf.FeatureSet.EnumType + (FeatureSet_RepeatedFieldEncoding)(0), // 13: google.protobuf.FeatureSet.RepeatedFieldEncoding + (FeatureSet_Utf8Validation)(0), // 14: google.protobuf.FeatureSet.Utf8Validation + (FeatureSet_MessageEncoding)(0), // 15: google.protobuf.FeatureSet.MessageEncoding + (FeatureSet_JsonFormat)(0), // 16: google.protobuf.FeatureSet.JsonFormat + (FeatureSet_EnforceNamingStyle)(0), // 17: google.protobuf.FeatureSet.EnforceNamingStyle + (FeatureSet_VisibilityFeature_DefaultSymbolVisibility)(0), // 18: google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility + (GeneratedCodeInfo_Annotation_Semantic)(0), // 19: google.protobuf.GeneratedCodeInfo.Annotation.Semantic + (*FileDescriptorSet)(nil), // 20: google.protobuf.FileDescriptorSet + (*FileDescriptorProto)(nil), // 21: google.protobuf.FileDescriptorProto + (*DescriptorProto)(nil), // 22: google.protobuf.DescriptorProto + (*ExtensionRangeOptions)(nil), // 23: google.protobuf.ExtensionRangeOptions + (*FieldDescriptorProto)(nil), // 24: google.protobuf.FieldDescriptorProto + (*OneofDescriptorProto)(nil), // 25: google.protobuf.OneofDescriptorProto + (*EnumDescriptorProto)(nil), // 26: google.protobuf.EnumDescriptorProto + (*EnumValueDescriptorProto)(nil), // 27: google.protobuf.EnumValueDescriptorProto + (*ServiceDescriptorProto)(nil), // 28: google.protobuf.ServiceDescriptorProto + (*MethodDescriptorProto)(nil), // 29: google.protobuf.MethodDescriptorProto + (*FileOptions)(nil), // 30: google.protobuf.FileOptions + (*MessageOptions)(nil), // 31: google.protobuf.MessageOptions + (*FieldOptions)(nil), // 32: google.protobuf.FieldOptions + (*OneofOptions)(nil), // 33: google.protobuf.OneofOptions + (*EnumOptions)(nil), // 34: google.protobuf.EnumOptions + (*EnumValueOptions)(nil), // 35: google.protobuf.EnumValueOptions + (*ServiceOptions)(nil), // 36: google.protobuf.ServiceOptions + (*MethodOptions)(nil), // 37: google.protobuf.MethodOptions + (*UninterpretedOption)(nil), // 38: google.protobuf.UninterpretedOption + (*FeatureSet)(nil), // 39: google.protobuf.FeatureSet + (*FeatureSetDefaults)(nil), // 40: google.protobuf.FeatureSetDefaults + (*SourceCodeInfo)(nil), // 41: google.protobuf.SourceCodeInfo + (*GeneratedCodeInfo)(nil), // 42: google.protobuf.GeneratedCodeInfo + (*DescriptorProto_ExtensionRange)(nil), // 43: google.protobuf.DescriptorProto.ExtensionRange + (*DescriptorProto_ReservedRange)(nil), // 44: google.protobuf.DescriptorProto.ReservedRange + (*ExtensionRangeOptions_Declaration)(nil), // 45: google.protobuf.ExtensionRangeOptions.Declaration + (*EnumDescriptorProto_EnumReservedRange)(nil), // 46: google.protobuf.EnumDescriptorProto.EnumReservedRange + (*FieldOptions_EditionDefault)(nil), // 47: google.protobuf.FieldOptions.EditionDefault + (*FieldOptions_FeatureSupport)(nil), // 48: google.protobuf.FieldOptions.FeatureSupport + (*UninterpretedOption_NamePart)(nil), // 49: google.protobuf.UninterpretedOption.NamePart + (*FeatureSet_VisibilityFeature)(nil), // 50: google.protobuf.FeatureSet.VisibilityFeature + (*FeatureSetDefaults_FeatureSetEditionDefault)(nil), // 51: google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault + (*SourceCodeInfo_Location)(nil), // 52: google.protobuf.SourceCodeInfo.Location + (*GeneratedCodeInfo_Annotation)(nil), // 53: google.protobuf.GeneratedCodeInfo.Annotation +} +var file_google_protobuf_descriptor_proto_depIdxs = []int32{ + 21, // 0: google.protobuf.FileDescriptorSet.file:type_name -> google.protobuf.FileDescriptorProto + 22, // 1: google.protobuf.FileDescriptorProto.message_type:type_name -> google.protobuf.DescriptorProto + 26, // 2: google.protobuf.FileDescriptorProto.enum_type:type_name -> google.protobuf.EnumDescriptorProto + 28, // 3: google.protobuf.FileDescriptorProto.service:type_name -> google.protobuf.ServiceDescriptorProto + 24, // 4: google.protobuf.FileDescriptorProto.extension:type_name -> google.protobuf.FieldDescriptorProto + 30, // 5: google.protobuf.FileDescriptorProto.options:type_name -> google.protobuf.FileOptions + 41, // 6: google.protobuf.FileDescriptorProto.source_code_info:type_name -> google.protobuf.SourceCodeInfo + 0, // 7: google.protobuf.FileDescriptorProto.edition:type_name -> google.protobuf.Edition + 24, // 8: google.protobuf.DescriptorProto.field:type_name -> google.protobuf.FieldDescriptorProto + 24, // 9: google.protobuf.DescriptorProto.extension:type_name -> google.protobuf.FieldDescriptorProto + 22, // 10: google.protobuf.DescriptorProto.nested_type:type_name -> google.protobuf.DescriptorProto + 26, // 11: google.protobuf.DescriptorProto.enum_type:type_name -> google.protobuf.EnumDescriptorProto + 43, // 12: google.protobuf.DescriptorProto.extension_range:type_name -> google.protobuf.DescriptorProto.ExtensionRange + 25, // 13: google.protobuf.DescriptorProto.oneof_decl:type_name -> google.protobuf.OneofDescriptorProto + 31, // 14: google.protobuf.DescriptorProto.options:type_name -> google.protobuf.MessageOptions + 44, // 15: google.protobuf.DescriptorProto.reserved_range:type_name -> google.protobuf.DescriptorProto.ReservedRange + 1, // 16: google.protobuf.DescriptorProto.visibility:type_name -> google.protobuf.SymbolVisibility + 38, // 17: google.protobuf.ExtensionRangeOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 45, // 18: google.protobuf.ExtensionRangeOptions.declaration:type_name -> google.protobuf.ExtensionRangeOptions.Declaration + 39, // 19: google.protobuf.ExtensionRangeOptions.features:type_name -> google.protobuf.FeatureSet + 2, // 20: google.protobuf.ExtensionRangeOptions.verification:type_name -> google.protobuf.ExtensionRangeOptions.VerificationState + 4, // 21: google.protobuf.FieldDescriptorProto.label:type_name -> google.protobuf.FieldDescriptorProto.Label + 3, // 22: google.protobuf.FieldDescriptorProto.type:type_name -> google.protobuf.FieldDescriptorProto.Type + 32, // 23: google.protobuf.FieldDescriptorProto.options:type_name -> google.protobuf.FieldOptions + 33, // 24: google.protobuf.OneofDescriptorProto.options:type_name -> google.protobuf.OneofOptions + 27, // 25: google.protobuf.EnumDescriptorProto.value:type_name -> google.protobuf.EnumValueDescriptorProto + 34, // 26: google.protobuf.EnumDescriptorProto.options:type_name -> google.protobuf.EnumOptions + 46, // 27: google.protobuf.EnumDescriptorProto.reserved_range:type_name -> google.protobuf.EnumDescriptorProto.EnumReservedRange + 1, // 28: google.protobuf.EnumDescriptorProto.visibility:type_name -> google.protobuf.SymbolVisibility + 35, // 29: google.protobuf.EnumValueDescriptorProto.options:type_name -> google.protobuf.EnumValueOptions + 29, // 30: google.protobuf.ServiceDescriptorProto.method:type_name -> google.protobuf.MethodDescriptorProto + 36, // 31: google.protobuf.ServiceDescriptorProto.options:type_name -> google.protobuf.ServiceOptions + 37, // 32: google.protobuf.MethodDescriptorProto.options:type_name -> google.protobuf.MethodOptions + 5, // 33: google.protobuf.FileOptions.optimize_for:type_name -> google.protobuf.FileOptions.OptimizeMode + 39, // 34: google.protobuf.FileOptions.features:type_name -> google.protobuf.FeatureSet + 38, // 35: google.protobuf.FileOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 39, // 36: google.protobuf.MessageOptions.features:type_name -> google.protobuf.FeatureSet + 38, // 37: google.protobuf.MessageOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 6, // 38: google.protobuf.FieldOptions.ctype:type_name -> google.protobuf.FieldOptions.CType + 7, // 39: google.protobuf.FieldOptions.jstype:type_name -> google.protobuf.FieldOptions.JSType + 8, // 40: google.protobuf.FieldOptions.retention:type_name -> google.protobuf.FieldOptions.OptionRetention + 9, // 41: google.protobuf.FieldOptions.targets:type_name -> google.protobuf.FieldOptions.OptionTargetType + 47, // 42: google.protobuf.FieldOptions.edition_defaults:type_name -> google.protobuf.FieldOptions.EditionDefault + 39, // 43: google.protobuf.FieldOptions.features:type_name -> google.protobuf.FeatureSet + 48, // 44: google.protobuf.FieldOptions.feature_support:type_name -> google.protobuf.FieldOptions.FeatureSupport + 38, // 45: google.protobuf.FieldOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 39, // 46: google.protobuf.OneofOptions.features:type_name -> google.protobuf.FeatureSet + 38, // 47: google.protobuf.OneofOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 39, // 48: google.protobuf.EnumOptions.features:type_name -> google.protobuf.FeatureSet + 38, // 49: google.protobuf.EnumOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 39, // 50: google.protobuf.EnumValueOptions.features:type_name -> google.protobuf.FeatureSet + 48, // 51: google.protobuf.EnumValueOptions.feature_support:type_name -> google.protobuf.FieldOptions.FeatureSupport + 38, // 52: google.protobuf.EnumValueOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 39, // 53: google.protobuf.ServiceOptions.features:type_name -> google.protobuf.FeatureSet + 38, // 54: google.protobuf.ServiceOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 10, // 55: google.protobuf.MethodOptions.idempotency_level:type_name -> google.protobuf.MethodOptions.IdempotencyLevel + 39, // 56: google.protobuf.MethodOptions.features:type_name -> google.protobuf.FeatureSet + 38, // 57: google.protobuf.MethodOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 49, // 58: google.protobuf.UninterpretedOption.name:type_name -> google.protobuf.UninterpretedOption.NamePart + 11, // 59: google.protobuf.FeatureSet.field_presence:type_name -> google.protobuf.FeatureSet.FieldPresence + 12, // 60: google.protobuf.FeatureSet.enum_type:type_name -> google.protobuf.FeatureSet.EnumType + 13, // 61: google.protobuf.FeatureSet.repeated_field_encoding:type_name -> google.protobuf.FeatureSet.RepeatedFieldEncoding + 14, // 62: google.protobuf.FeatureSet.utf8_validation:type_name -> google.protobuf.FeatureSet.Utf8Validation + 15, // 63: google.protobuf.FeatureSet.message_encoding:type_name -> google.protobuf.FeatureSet.MessageEncoding + 16, // 64: google.protobuf.FeatureSet.json_format:type_name -> google.protobuf.FeatureSet.JsonFormat + 17, // 65: google.protobuf.FeatureSet.enforce_naming_style:type_name -> google.protobuf.FeatureSet.EnforceNamingStyle + 18, // 66: google.protobuf.FeatureSet.default_symbol_visibility:type_name -> google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility + 51, // 67: google.protobuf.FeatureSetDefaults.defaults:type_name -> google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault + 0, // 68: google.protobuf.FeatureSetDefaults.minimum_edition:type_name -> google.protobuf.Edition + 0, // 69: google.protobuf.FeatureSetDefaults.maximum_edition:type_name -> google.protobuf.Edition + 52, // 70: google.protobuf.SourceCodeInfo.location:type_name -> google.protobuf.SourceCodeInfo.Location + 53, // 71: google.protobuf.GeneratedCodeInfo.annotation:type_name -> google.protobuf.GeneratedCodeInfo.Annotation + 23, // 72: google.protobuf.DescriptorProto.ExtensionRange.options:type_name -> google.protobuf.ExtensionRangeOptions + 0, // 73: google.protobuf.FieldOptions.EditionDefault.edition:type_name -> google.protobuf.Edition + 0, // 74: google.protobuf.FieldOptions.FeatureSupport.edition_introduced:type_name -> google.protobuf.Edition + 0, // 75: google.protobuf.FieldOptions.FeatureSupport.edition_deprecated:type_name -> google.protobuf.Edition + 0, // 76: google.protobuf.FieldOptions.FeatureSupport.edition_removed:type_name -> google.protobuf.Edition + 0, // 77: google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.edition:type_name -> google.protobuf.Edition + 39, // 78: google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.overridable_features:type_name -> google.protobuf.FeatureSet + 39, // 79: google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.fixed_features:type_name -> google.protobuf.FeatureSet + 19, // 80: google.protobuf.GeneratedCodeInfo.Annotation.semantic:type_name -> google.protobuf.GeneratedCodeInfo.Annotation.Semantic + 81, // [81:81] is the sub-list for method output_type + 81, // [81:81] is the sub-list for method input_type + 81, // [81:81] is the sub-list for extension type_name + 81, // [81:81] is the sub-list for extension extendee + 0, // [0:81] is the sub-list for field type_name +} + +func init() { file_google_protobuf_descriptor_proto_init() } +func file_google_protobuf_descriptor_proto_init() { + if File_google_protobuf_descriptor_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_google_protobuf_descriptor_proto_rawDesc), len(file_google_protobuf_descriptor_proto_rawDesc)), + NumEnums: 20, + NumMessages: 34, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_google_protobuf_descriptor_proto_goTypes, + DependencyIndexes: file_google_protobuf_descriptor_proto_depIdxs, + EnumInfos: file_google_protobuf_descriptor_proto_enumTypes, + MessageInfos: file_google_protobuf_descriptor_proto_msgTypes, + }.Build() + File_google_protobuf_descriptor_proto = out.File + file_google_protobuf_descriptor_proto_goTypes = nil + file_google_protobuf_descriptor_proto_depIdxs = nil +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/types/dynamicpb/dynamic.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/types/dynamicpb/dynamic.go new file mode 100644 index 0000000..1ba1dfa --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/types/dynamicpb/dynamic.go @@ -0,0 +1,718 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package dynamicpb creates protocol buffer messages using runtime type information. +package dynamicpb + +import ( + "math" + + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" + "google.golang.org/protobuf/runtime/protoimpl" +) + +// enum is a dynamic protoreflect.Enum. +type enum struct { + num protoreflect.EnumNumber + typ protoreflect.EnumType +} + +func (e enum) Descriptor() protoreflect.EnumDescriptor { return e.typ.Descriptor() } +func (e enum) Type() protoreflect.EnumType { return e.typ } +func (e enum) Number() protoreflect.EnumNumber { return e.num } + +// enumType is a dynamic protoreflect.EnumType. +type enumType struct { + desc protoreflect.EnumDescriptor +} + +// NewEnumType creates a new EnumType with the provided descriptor. +// +// EnumTypes created by this package are equal if their descriptors are equal. +// That is, if ed1 == ed2, then NewEnumType(ed1) == NewEnumType(ed2). +// +// Enum values created by the EnumType are equal if their numbers are equal. +func NewEnumType(desc protoreflect.EnumDescriptor) protoreflect.EnumType { + return enumType{desc} +} + +func (et enumType) New(n protoreflect.EnumNumber) protoreflect.Enum { return enum{n, et} } +func (et enumType) Descriptor() protoreflect.EnumDescriptor { return et.desc } + +// extensionType is a dynamic protoreflect.ExtensionType. +type extensionType struct { + desc extensionTypeDescriptor +} + +// A Message is a dynamically constructed protocol buffer message. +// +// Message implements the [google.golang.org/protobuf/proto.Message] interface, +// and may be used with all standard proto package functions +// such as Marshal, Unmarshal, and so forth. +// +// Message also implements the [protoreflect.Message] interface. +// See the [protoreflect] package documentation for that interface for how to +// get and set fields and otherwise interact with the contents of a Message. +// +// Reflection API functions which construct messages, such as NewField, +// return new dynamic messages of the appropriate type. Functions which take +// messages, such as Set for a message-value field, will accept any message +// with a compatible type. +// +// Operations which modify a Message are not safe for concurrent use. +type Message struct { + typ messageType + known map[protoreflect.FieldNumber]protoreflect.Value + ext map[protoreflect.FieldNumber]protoreflect.FieldDescriptor + unknown protoreflect.RawFields +} + +var ( + _ protoreflect.Message = (*Message)(nil) + _ protoreflect.ProtoMessage = (*Message)(nil) + _ protoiface.MessageV1 = (*Message)(nil) +) + +// NewMessage creates a new message with the provided descriptor. +func NewMessage(desc protoreflect.MessageDescriptor) *Message { + return &Message{ + typ: messageType{desc}, + known: make(map[protoreflect.FieldNumber]protoreflect.Value), + ext: make(map[protoreflect.FieldNumber]protoreflect.FieldDescriptor), + } +} + +// ProtoMessage implements the legacy message interface. +func (m *Message) ProtoMessage() {} + +// ProtoReflect implements the [protoreflect.ProtoMessage] interface. +func (m *Message) ProtoReflect() protoreflect.Message { + return m +} + +// String returns a string representation of a message. +func (m *Message) String() string { + return protoimpl.X.MessageStringOf(m) +} + +// Reset clears the message to be empty, but preserves the dynamic message type. +func (m *Message) Reset() { + m.known = make(map[protoreflect.FieldNumber]protoreflect.Value) + m.ext = make(map[protoreflect.FieldNumber]protoreflect.FieldDescriptor) + m.unknown = nil +} + +// Descriptor returns the message descriptor. +func (m *Message) Descriptor() protoreflect.MessageDescriptor { + return m.typ.desc +} + +// Type returns the message type. +func (m *Message) Type() protoreflect.MessageType { + return m.typ +} + +// New returns a newly allocated empty message with the same descriptor. +// See [protoreflect.Message] for details. +func (m *Message) New() protoreflect.Message { + return m.Type().New() +} + +// Interface returns the message. +// See [protoreflect.Message] for details. +func (m *Message) Interface() protoreflect.ProtoMessage { + return m +} + +// ProtoMethods is an internal detail of the [protoreflect.Message] interface. +// Users should never call this directly. +func (m *Message) ProtoMethods() *protoiface.Methods { + return nil +} + +// Range visits every populated field in undefined order. +// See [protoreflect.Message] for details. +func (m *Message) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + for num, v := range m.known { + fd := m.ext[num] + if fd == nil { + fd = m.Descriptor().Fields().ByNumber(num) + } + if !isSet(fd, v) { + continue + } + if !f(fd, v) { + return + } + } +} + +// Has reports whether a field is populated. +// See [protoreflect.Message] for details. +func (m *Message) Has(fd protoreflect.FieldDescriptor) bool { + m.checkField(fd) + if fd.IsExtension() && m.ext[fd.Number()] != fd { + return false + } + v, ok := m.known[fd.Number()] + if !ok { + return false + } + return isSet(fd, v) +} + +// Clear clears a field. +// See [protoreflect.Message] for details. +func (m *Message) Clear(fd protoreflect.FieldDescriptor) { + m.checkField(fd) + num := fd.Number() + delete(m.known, num) + delete(m.ext, num) +} + +// Get returns the value of a field. +// See [protoreflect.Message] for details. +func (m *Message) Get(fd protoreflect.FieldDescriptor) protoreflect.Value { + m.checkField(fd) + num := fd.Number() + if fd.IsExtension() { + if fd != m.ext[num] { + return fd.(protoreflect.ExtensionTypeDescriptor).Type().Zero() + } + return m.known[num] + } + if v, ok := m.known[num]; ok { + switch { + case fd.IsMap(): + if v.Map().Len() > 0 { + return v + } + case fd.IsList(): + if v.List().Len() > 0 { + return v + } + default: + return v + } + } + switch { + case fd.IsMap(): + return protoreflect.ValueOfMap(&dynamicMap{desc: fd}) + case fd.IsList(): + return protoreflect.ValueOfList(emptyList{desc: fd}) + case fd.Message() != nil: + return protoreflect.ValueOfMessage(&Message{typ: messageType{fd.Message()}}) + case fd.Kind() == protoreflect.BytesKind: + return protoreflect.ValueOfBytes(append([]byte(nil), fd.Default().Bytes()...)) + default: + return fd.Default() + } +} + +// Mutable returns a mutable reference to a repeated, map, or message field. +// See [protoreflect.Message] for details. +func (m *Message) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + m.checkField(fd) + if !fd.IsMap() && !fd.IsList() && fd.Message() == nil { + panic(errors.New("%v: getting mutable reference to non-composite type", fd.FullName())) + } + if m.known == nil { + panic(errors.New("%v: modification of read-only message", fd.FullName())) + } + num := fd.Number() + if fd.IsExtension() { + if fd != m.ext[num] { + m.ext[num] = fd + m.known[num] = fd.(protoreflect.ExtensionTypeDescriptor).Type().New() + } + return m.known[num] + } + if v, ok := m.known[num]; ok { + return v + } + m.clearOtherOneofFields(fd) + m.known[num] = m.NewField(fd) + if fd.IsExtension() { + m.ext[num] = fd + } + return m.known[num] +} + +// Set stores a value in a field. +// See [protoreflect.Message] for details. +func (m *Message) Set(fd protoreflect.FieldDescriptor, v protoreflect.Value) { + m.checkField(fd) + if m.known == nil { + panic(errors.New("%v: modification of read-only message", fd.FullName())) + } + if fd.IsExtension() { + isValid := true + switch { + case !fd.(protoreflect.ExtensionTypeDescriptor).Type().IsValidValue(v): + isValid = false + case fd.IsList(): + isValid = v.List().IsValid() + case fd.IsMap(): + isValid = v.Map().IsValid() + case fd.Message() != nil: + isValid = v.Message().IsValid() + } + if !isValid { + panic(errors.New("%v: assigning invalid type %T", fd.FullName(), v.Interface())) + } + m.ext[fd.Number()] = fd + } else { + typecheck(fd, v) + } + m.clearOtherOneofFields(fd) + m.known[fd.Number()] = v +} + +func (m *Message) clearOtherOneofFields(fd protoreflect.FieldDescriptor) { + od := fd.ContainingOneof() + if od == nil { + return + } + num := fd.Number() + for i := 0; i < od.Fields().Len(); i++ { + if n := od.Fields().Get(i).Number(); n != num { + delete(m.known, n) + } + } +} + +// NewField returns a new value for assignable to the field of a given descriptor. +// See [protoreflect.Message] for details. +func (m *Message) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + m.checkField(fd) + switch { + case fd.IsExtension(): + return fd.(protoreflect.ExtensionTypeDescriptor).Type().New() + case fd.IsMap(): + return protoreflect.ValueOfMap(&dynamicMap{ + desc: fd, + mapv: make(map[any]protoreflect.Value), + }) + case fd.IsList(): + return protoreflect.ValueOfList(&dynamicList{desc: fd}) + case fd.Message() != nil: + return protoreflect.ValueOfMessage(NewMessage(fd.Message()).ProtoReflect()) + default: + return fd.Default() + } +} + +// WhichOneof reports which field in a oneof is populated, returning nil if none are populated. +// See [protoreflect.Message] for details. +func (m *Message) WhichOneof(od protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + for i := 0; i < od.Fields().Len(); i++ { + fd := od.Fields().Get(i) + if m.Has(fd) { + return fd + } + } + return nil +} + +// GetUnknown returns the raw unknown fields. +// See [protoreflect.Message] for details. +func (m *Message) GetUnknown() protoreflect.RawFields { + return m.unknown +} + +// SetUnknown sets the raw unknown fields. +// See [protoreflect.Message] for details. +func (m *Message) SetUnknown(r protoreflect.RawFields) { + if m.known == nil { + panic(errors.New("%v: modification of read-only message", m.typ.desc.FullName())) + } + m.unknown = r +} + +// IsValid reports whether the message is valid. +// See [protoreflect.Message] for details. +func (m *Message) IsValid() bool { + return m.known != nil +} + +func (m *Message) checkField(fd protoreflect.FieldDescriptor) { + if fd.IsExtension() && fd.ContainingMessage().FullName() == m.Descriptor().FullName() { + if _, ok := fd.(protoreflect.ExtensionTypeDescriptor); !ok { + panic(errors.New("%v: extension field descriptor does not implement ExtensionTypeDescriptor", fd.FullName())) + } + return + } + if fd.Parent() == m.Descriptor() { + return + } + fields := m.Descriptor().Fields() + index := fd.Index() + if index >= fields.Len() || fields.Get(index) != fd { + panic(errors.New("%v: field descriptor does not belong to this message", fd.FullName())) + } +} + +type messageType struct { + desc protoreflect.MessageDescriptor +} + +// NewMessageType creates a new MessageType with the provided descriptor. +// +// MessageTypes created by this package are equal if their descriptors are equal. +// That is, if md1 == md2, then NewMessageType(md1) == NewMessageType(md2). +func NewMessageType(desc protoreflect.MessageDescriptor) protoreflect.MessageType { + return messageType{desc} +} + +func (mt messageType) New() protoreflect.Message { return NewMessage(mt.desc) } +func (mt messageType) Zero() protoreflect.Message { return &Message{typ: messageType{mt.desc}} } +func (mt messageType) Descriptor() protoreflect.MessageDescriptor { return mt.desc } +func (mt messageType) Enum(i int) protoreflect.EnumType { + if ed := mt.desc.Fields().Get(i).Enum(); ed != nil { + return NewEnumType(ed) + } + return nil +} +func (mt messageType) Message(i int) protoreflect.MessageType { + if md := mt.desc.Fields().Get(i).Message(); md != nil { + return NewMessageType(md) + } + return nil +} + +type emptyList struct { + desc protoreflect.FieldDescriptor +} + +func (x emptyList) Len() int { return 0 } +func (x emptyList) Get(n int) protoreflect.Value { panic(errors.New("out of range")) } +func (x emptyList) Set(n int, v protoreflect.Value) { + panic(errors.New("modification of immutable list")) +} +func (x emptyList) Append(v protoreflect.Value) { panic(errors.New("modification of immutable list")) } +func (x emptyList) AppendMutable() protoreflect.Value { + panic(errors.New("modification of immutable list")) +} +func (x emptyList) Truncate(n int) { panic(errors.New("modification of immutable list")) } +func (x emptyList) NewElement() protoreflect.Value { return newListEntry(x.desc) } +func (x emptyList) IsValid() bool { return false } + +type dynamicList struct { + desc protoreflect.FieldDescriptor + list []protoreflect.Value +} + +func (x *dynamicList) Len() int { + return len(x.list) +} + +func (x *dynamicList) Get(n int) protoreflect.Value { + return x.list[n] +} + +func (x *dynamicList) Set(n int, v protoreflect.Value) { + typecheckSingular(x.desc, v) + x.list[n] = v +} + +func (x *dynamicList) Append(v protoreflect.Value) { + typecheckSingular(x.desc, v) + x.list = append(x.list, v) +} + +func (x *dynamicList) AppendMutable() protoreflect.Value { + if x.desc.Message() == nil { + panic(errors.New("%v: invalid AppendMutable on list with non-message type", x.desc.FullName())) + } + v := x.NewElement() + x.Append(v) + return v +} + +func (x *dynamicList) Truncate(n int) { + // Zero truncated elements to avoid keeping data live. + for i := n; i < len(x.list); i++ { + x.list[i] = protoreflect.Value{} + } + x.list = x.list[:n] +} + +func (x *dynamicList) NewElement() protoreflect.Value { + return newListEntry(x.desc) +} + +func (x *dynamicList) IsValid() bool { + return true +} + +type dynamicMap struct { + desc protoreflect.FieldDescriptor + mapv map[any]protoreflect.Value +} + +func (x *dynamicMap) Get(k protoreflect.MapKey) protoreflect.Value { return x.mapv[k.Interface()] } +func (x *dynamicMap) Set(k protoreflect.MapKey, v protoreflect.Value) { + typecheckSingular(x.desc.MapKey(), k.Value()) + typecheckSingular(x.desc.MapValue(), v) + x.mapv[k.Interface()] = v +} +func (x *dynamicMap) Has(k protoreflect.MapKey) bool { return x.Get(k).IsValid() } +func (x *dynamicMap) Clear(k protoreflect.MapKey) { delete(x.mapv, k.Interface()) } +func (x *dynamicMap) Mutable(k protoreflect.MapKey) protoreflect.Value { + if x.desc.MapValue().Message() == nil { + panic(errors.New("%v: invalid Mutable on map with non-message value type", x.desc.FullName())) + } + v := x.Get(k) + if !v.IsValid() { + v = x.NewValue() + x.Set(k, v) + } + return v +} +func (x *dynamicMap) Len() int { return len(x.mapv) } +func (x *dynamicMap) NewValue() protoreflect.Value { + if md := x.desc.MapValue().Message(); md != nil { + return protoreflect.ValueOfMessage(NewMessage(md).ProtoReflect()) + } + return x.desc.MapValue().Default() +} +func (x *dynamicMap) IsValid() bool { + return x.mapv != nil +} + +func (x *dynamicMap) Range(f func(protoreflect.MapKey, protoreflect.Value) bool) { + for k, v := range x.mapv { + if !f(protoreflect.ValueOf(k).MapKey(), v) { + return + } + } +} + +func isSet(fd protoreflect.FieldDescriptor, v protoreflect.Value) bool { + switch { + case fd.IsMap(): + return v.Map().Len() > 0 + case fd.IsList(): + return v.List().Len() > 0 + case fd.ContainingOneof() != nil: + return true + case !fd.HasPresence() && !fd.IsExtension(): + switch fd.Kind() { + case protoreflect.BoolKind: + return v.Bool() + case protoreflect.EnumKind: + return v.Enum() != 0 + case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed32Kind, protoreflect.Sfixed64Kind: + return v.Int() != 0 + case protoreflect.Uint32Kind, protoreflect.Uint64Kind, protoreflect.Fixed32Kind, protoreflect.Fixed64Kind: + return v.Uint() != 0 + case protoreflect.FloatKind, protoreflect.DoubleKind: + return v.Float() != 0 || math.Signbit(v.Float()) + case protoreflect.StringKind: + return v.String() != "" + case protoreflect.BytesKind: + return len(v.Bytes()) > 0 + } + } + return true +} + +func typecheck(fd protoreflect.FieldDescriptor, v protoreflect.Value) { + if err := typeIsValid(fd, v); err != nil { + panic(err) + } +} + +func typeIsValid(fd protoreflect.FieldDescriptor, v protoreflect.Value) error { + switch { + case !v.IsValid(): + return errors.New("%v: assigning invalid value", fd.FullName()) + case fd.IsMap(): + if mapv, ok := v.Interface().(*dynamicMap); !ok || mapv.desc != fd || !mapv.IsValid() { + return errors.New("%v: assigning invalid type %T", fd.FullName(), v.Interface()) + } + return nil + case fd.IsList(): + switch list := v.Interface().(type) { + case *dynamicList: + if list.desc == fd && list.IsValid() { + return nil + } + case emptyList: + if list.desc == fd && list.IsValid() { + return nil + } + } + return errors.New("%v: assigning invalid type %T", fd.FullName(), v.Interface()) + default: + return singularTypeIsValid(fd, v) + } +} + +func typecheckSingular(fd protoreflect.FieldDescriptor, v protoreflect.Value) { + if err := singularTypeIsValid(fd, v); err != nil { + panic(err) + } +} + +func singularTypeIsValid(fd protoreflect.FieldDescriptor, v protoreflect.Value) error { + vi := v.Interface() + var ok bool + switch fd.Kind() { + case protoreflect.BoolKind: + _, ok = vi.(bool) + case protoreflect.EnumKind: + // We could check against the valid set of enum values, but do not. + _, ok = vi.(protoreflect.EnumNumber) + case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind: + _, ok = vi.(int32) + case protoreflect.Uint32Kind, protoreflect.Fixed32Kind: + _, ok = vi.(uint32) + case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind: + _, ok = vi.(int64) + case protoreflect.Uint64Kind, protoreflect.Fixed64Kind: + _, ok = vi.(uint64) + case protoreflect.FloatKind: + _, ok = vi.(float32) + case protoreflect.DoubleKind: + _, ok = vi.(float64) + case protoreflect.StringKind: + _, ok = vi.(string) + case protoreflect.BytesKind: + _, ok = vi.([]byte) + case protoreflect.MessageKind, protoreflect.GroupKind: + var m protoreflect.Message + m, ok = vi.(protoreflect.Message) + if ok && m.Descriptor().FullName() != fd.Message().FullName() { + return errors.New("%v: assigning invalid message type %v", fd.FullName(), m.Descriptor().FullName()) + } + if dm, ok := vi.(*Message); ok && dm.known == nil { + return errors.New("%v: assigning invalid zero-value message", fd.FullName()) + } + } + if !ok { + return errors.New("%v: assigning invalid type %T", fd.FullName(), v.Interface()) + } + return nil +} + +func newListEntry(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.Kind() { + case protoreflect.BoolKind: + return protoreflect.ValueOfBool(false) + case protoreflect.EnumKind: + return protoreflect.ValueOfEnum(fd.Enum().Values().Get(0).Number()) + case protoreflect.Int32Kind, protoreflect.Sint32Kind, protoreflect.Sfixed32Kind: + return protoreflect.ValueOfInt32(0) + case protoreflect.Uint32Kind, protoreflect.Fixed32Kind: + return protoreflect.ValueOfUint32(0) + case protoreflect.Int64Kind, protoreflect.Sint64Kind, protoreflect.Sfixed64Kind: + return protoreflect.ValueOfInt64(0) + case protoreflect.Uint64Kind, protoreflect.Fixed64Kind: + return protoreflect.ValueOfUint64(0) + case protoreflect.FloatKind: + return protoreflect.ValueOfFloat32(0) + case protoreflect.DoubleKind: + return protoreflect.ValueOfFloat64(0) + case protoreflect.StringKind: + return protoreflect.ValueOfString("") + case protoreflect.BytesKind: + return protoreflect.ValueOfBytes(nil) + case protoreflect.MessageKind, protoreflect.GroupKind: + return protoreflect.ValueOfMessage(NewMessage(fd.Message()).ProtoReflect()) + } + panic(errors.New("%v: unknown kind %v", fd.FullName(), fd.Kind())) +} + +// NewExtensionType creates a new ExtensionType with the provided descriptor. +// +// Dynamic ExtensionTypes with the same descriptor compare as equal. That is, +// if xd1 == xd2, then NewExtensionType(xd1) == NewExtensionType(xd2). +// +// The InterfaceOf and ValueOf methods of the extension type are defined as: +// +// func (xt extensionType) ValueOf(iv any) protoreflect.Value { +// return protoreflect.ValueOf(iv) +// } +// +// func (xt extensionType) InterfaceOf(v protoreflect.Value) any { +// return v.Interface() +// } +// +// The Go type used by the proto.GetExtension and proto.SetExtension functions +// is determined by these methods, and is therefore equivalent to the Go type +// used to represent a protoreflect.Value. See the protoreflect.Value +// documentation for more details. +func NewExtensionType(desc protoreflect.ExtensionDescriptor) protoreflect.ExtensionType { + if xt, ok := desc.(protoreflect.ExtensionTypeDescriptor); ok { + desc = xt.Descriptor() + } + return extensionType{extensionTypeDescriptor{desc}} +} + +func (xt extensionType) New() protoreflect.Value { + switch { + case xt.desc.IsMap(): + return protoreflect.ValueOfMap(&dynamicMap{ + desc: xt.desc, + mapv: make(map[any]protoreflect.Value), + }) + case xt.desc.IsList(): + return protoreflect.ValueOfList(&dynamicList{desc: xt.desc}) + case xt.desc.Message() != nil: + return protoreflect.ValueOfMessage(NewMessage(xt.desc.Message())) + default: + return xt.desc.Default() + } +} + +func (xt extensionType) Zero() protoreflect.Value { + switch { + case xt.desc.IsMap(): + return protoreflect.ValueOfMap(&dynamicMap{desc: xt.desc}) + case xt.desc.Cardinality() == protoreflect.Repeated: + return protoreflect.ValueOfList(emptyList{desc: xt.desc}) + case xt.desc.Message() != nil: + return protoreflect.ValueOfMessage(&Message{typ: messageType{xt.desc.Message()}}) + default: + return xt.desc.Default() + } +} + +func (xt extensionType) TypeDescriptor() protoreflect.ExtensionTypeDescriptor { + return xt.desc +} + +func (xt extensionType) ValueOf(iv any) protoreflect.Value { + v := protoreflect.ValueOf(iv) + typecheck(xt.desc, v) + return v +} + +func (xt extensionType) InterfaceOf(v protoreflect.Value) any { + typecheck(xt.desc, v) + return v.Interface() +} + +func (xt extensionType) IsValidInterface(iv any) bool { + return typeIsValid(xt.desc, protoreflect.ValueOf(iv)) == nil +} + +func (xt extensionType) IsValidValue(v protoreflect.Value) bool { + return typeIsValid(xt.desc, v) == nil +} + +type extensionTypeDescriptor struct { + protoreflect.ExtensionDescriptor +} + +func (xt extensionTypeDescriptor) Type() protoreflect.ExtensionType { + return extensionType{xt} +} + +func (xt extensionTypeDescriptor) Descriptor() protoreflect.ExtensionDescriptor { + return xt.ExtensionDescriptor +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/types/dynamicpb/types.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/types/dynamicpb/types.go new file mode 100644 index 0000000..8e759fc --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/types/dynamicpb/types.go @@ -0,0 +1,180 @@ +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package dynamicpb + +import ( + "fmt" + "strings" + "sync" + "sync/atomic" + + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/reflect/protoregistry" +) + +type extField struct { + name protoreflect.FullName + number protoreflect.FieldNumber +} + +// A Types is a collection of dynamically constructed descriptors. +// Its methods are safe for concurrent use. +// +// Types implements [protoregistry.MessageTypeResolver] and [protoregistry.ExtensionTypeResolver]. +// A Types may be used as a [google.golang.org/protobuf/proto.UnmarshalOptions.Resolver]. +type Types struct { + // atomicExtFiles is used with sync/atomic and hence must be the first word + // of the struct to guarantee 64-bit alignment. + atomicExtFiles atomic.Uint64 + extMu sync.Mutex + + files *protoregistry.Files + + extensionsByMessage map[extField]protoreflect.ExtensionDescriptor +} + +// NewTypes creates a new Types registry with the provided files. +// The Files registry is retained, and changes to Files will be reflected in Types. +// It is not safe to concurrently change the Files while calling Types methods. +func NewTypes(f *protoregistry.Files) *Types { + return &Types{ + files: f, + } +} + +// FindEnumByName looks up an enum by its full name; +// e.g., "google.protobuf.Field.Kind". +// +// This returns (nil, [protoregistry.NotFound]) if not found. +func (t *Types) FindEnumByName(name protoreflect.FullName) (protoreflect.EnumType, error) { + d, err := t.files.FindDescriptorByName(name) + if err != nil { + return nil, err + } + ed, ok := d.(protoreflect.EnumDescriptor) + if !ok { + return nil, errors.New("found wrong type: got %v, want enum", descName(d)) + } + return NewEnumType(ed), nil +} + +// FindExtensionByName looks up an extension field by the field's full name. +// Note that this is the full name of the field as determined by +// where the extension is declared and is unrelated to the full name of the +// message being extended. +// +// This returns (nil, [protoregistry.NotFound]) if not found. +func (t *Types) FindExtensionByName(name protoreflect.FullName) (protoreflect.ExtensionType, error) { + d, err := t.files.FindDescriptorByName(name) + if err != nil { + return nil, err + } + xd, ok := d.(protoreflect.ExtensionDescriptor) + if !ok { + return nil, errors.New("found wrong type: got %v, want extension", descName(d)) + } + return NewExtensionType(xd), nil +} + +// FindExtensionByNumber looks up an extension field by the field number +// within some parent message, identified by full name. +// +// This returns (nil, [protoregistry.NotFound]) if not found. +func (t *Types) FindExtensionByNumber(message protoreflect.FullName, field protoreflect.FieldNumber) (protoreflect.ExtensionType, error) { + // Construct the extension number map lazily, since not every user will need it. + // Update the map if new files are added to the registry. + if t.atomicExtFiles.Load() != uint64(t.files.NumFiles()) { + t.updateExtensions() + } + xd := t.extensionsByMessage[extField{message, field}] + if xd == nil { + return nil, protoregistry.NotFound + } + return NewExtensionType(xd), nil +} + +// FindMessageByName looks up a message by its full name; +// e.g. "google.protobuf.Any". +// +// This returns (nil, [protoregistry.NotFound]) if not found. +func (t *Types) FindMessageByName(name protoreflect.FullName) (protoreflect.MessageType, error) { + d, err := t.files.FindDescriptorByName(name) + if err != nil { + return nil, err + } + md, ok := d.(protoreflect.MessageDescriptor) + if !ok { + return nil, errors.New("found wrong type: got %v, want message", descName(d)) + } + return NewMessageType(md), nil +} + +// FindMessageByURL looks up a message by a URL identifier. +// See documentation on google.protobuf.Any.type_url for the URL format. +// +// This returns (nil, [protoregistry.NotFound]) if not found. +func (t *Types) FindMessageByURL(url string) (protoreflect.MessageType, error) { + // This function is similar to FindMessageByName but + // truncates anything before and including '/' in the URL. + message := protoreflect.FullName(url) + if i := strings.LastIndexByte(url, '/'); i >= 0 { + message = message[i+len("/"):] + } + return t.FindMessageByName(message) +} + +func (t *Types) updateExtensions() { + t.extMu.Lock() + defer t.extMu.Unlock() + if t.atomicExtFiles.Load() == uint64(t.files.NumFiles()) { + return + } + defer t.atomicExtFiles.Store(uint64(t.files.NumFiles())) + t.files.RangeFiles(func(fd protoreflect.FileDescriptor) bool { + t.registerExtensions(fd.Extensions()) + t.registerExtensionsInMessages(fd.Messages()) + return true + }) +} + +func (t *Types) registerExtensionsInMessages(mds protoreflect.MessageDescriptors) { + count := mds.Len() + for i := 0; i < count; i++ { + md := mds.Get(i) + t.registerExtensions(md.Extensions()) + t.registerExtensionsInMessages(md.Messages()) + } +} + +func (t *Types) registerExtensions(xds protoreflect.ExtensionDescriptors) { + count := xds.Len() + for i := 0; i < count; i++ { + xd := xds.Get(i) + field := xd.Number() + message := xd.ContainingMessage().FullName() + if t.extensionsByMessage == nil { + t.extensionsByMessage = make(map[extField]protoreflect.ExtensionDescriptor) + } + t.extensionsByMessage[extField{message, field}] = xd + } +} + +func descName(d protoreflect.Descriptor) string { + switch d.(type) { + case protoreflect.EnumDescriptor: + return "enum" + case protoreflect.EnumValueDescriptor: + return "enum value" + case protoreflect.MessageDescriptor: + return "message" + case protoreflect.ExtensionDescriptor: + return "extension" + case protoreflect.ServiceDescriptor: + return "service" + default: + return fmt.Sprintf("%T", d) + } +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/types/gofeaturespb/go_features.pb.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/types/gofeaturespb/go_features.pb.go new file mode 100644 index 0000000..37e712b --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/types/gofeaturespb/go_features.pb.go @@ -0,0 +1,311 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2023 Google Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file or at +// https://developers.google.com/open-source/licenses/bsd + +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/protobuf/go_features.proto + +package gofeaturespb + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + descriptorpb "google.golang.org/protobuf/types/descriptorpb" + reflect "reflect" + sync "sync" + unsafe "unsafe" +) + +type GoFeatures_APILevel int32 + +const ( + // API_LEVEL_UNSPECIFIED results in selecting the OPEN API, + // but needs to be a separate value to distinguish between + // an explicitly set api level or a missing api level. + GoFeatures_API_LEVEL_UNSPECIFIED GoFeatures_APILevel = 0 + GoFeatures_API_OPEN GoFeatures_APILevel = 1 + GoFeatures_API_HYBRID GoFeatures_APILevel = 2 + GoFeatures_API_OPAQUE GoFeatures_APILevel = 3 +) + +// Enum value maps for GoFeatures_APILevel. +var ( + GoFeatures_APILevel_name = map[int32]string{ + 0: "API_LEVEL_UNSPECIFIED", + 1: "API_OPEN", + 2: "API_HYBRID", + 3: "API_OPAQUE", + } + GoFeatures_APILevel_value = map[string]int32{ + "API_LEVEL_UNSPECIFIED": 0, + "API_OPEN": 1, + "API_HYBRID": 2, + "API_OPAQUE": 3, + } +) + +func (x GoFeatures_APILevel) Enum() *GoFeatures_APILevel { + p := new(GoFeatures_APILevel) + *p = x + return p +} + +func (x GoFeatures_APILevel) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GoFeatures_APILevel) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_go_features_proto_enumTypes[0].Descriptor() +} + +func (GoFeatures_APILevel) Type() protoreflect.EnumType { + return &file_google_protobuf_go_features_proto_enumTypes[0] +} + +func (x GoFeatures_APILevel) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *GoFeatures_APILevel) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = GoFeatures_APILevel(num) + return nil +} + +// Deprecated: Use GoFeatures_APILevel.Descriptor instead. +func (GoFeatures_APILevel) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_go_features_proto_rawDescGZIP(), []int{0, 0} +} + +type GoFeatures_StripEnumPrefix int32 + +const ( + GoFeatures_STRIP_ENUM_PREFIX_UNSPECIFIED GoFeatures_StripEnumPrefix = 0 + GoFeatures_STRIP_ENUM_PREFIX_KEEP GoFeatures_StripEnumPrefix = 1 + GoFeatures_STRIP_ENUM_PREFIX_GENERATE_BOTH GoFeatures_StripEnumPrefix = 2 + GoFeatures_STRIP_ENUM_PREFIX_STRIP GoFeatures_StripEnumPrefix = 3 +) + +// Enum value maps for GoFeatures_StripEnumPrefix. +var ( + GoFeatures_StripEnumPrefix_name = map[int32]string{ + 0: "STRIP_ENUM_PREFIX_UNSPECIFIED", + 1: "STRIP_ENUM_PREFIX_KEEP", + 2: "STRIP_ENUM_PREFIX_GENERATE_BOTH", + 3: "STRIP_ENUM_PREFIX_STRIP", + } + GoFeatures_StripEnumPrefix_value = map[string]int32{ + "STRIP_ENUM_PREFIX_UNSPECIFIED": 0, + "STRIP_ENUM_PREFIX_KEEP": 1, + "STRIP_ENUM_PREFIX_GENERATE_BOTH": 2, + "STRIP_ENUM_PREFIX_STRIP": 3, + } +) + +func (x GoFeatures_StripEnumPrefix) Enum() *GoFeatures_StripEnumPrefix { + p := new(GoFeatures_StripEnumPrefix) + *p = x + return p +} + +func (x GoFeatures_StripEnumPrefix) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GoFeatures_StripEnumPrefix) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_go_features_proto_enumTypes[1].Descriptor() +} + +func (GoFeatures_StripEnumPrefix) Type() protoreflect.EnumType { + return &file_google_protobuf_go_features_proto_enumTypes[1] +} + +func (x GoFeatures_StripEnumPrefix) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *GoFeatures_StripEnumPrefix) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = GoFeatures_StripEnumPrefix(num) + return nil +} + +// Deprecated: Use GoFeatures_StripEnumPrefix.Descriptor instead. +func (GoFeatures_StripEnumPrefix) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_go_features_proto_rawDescGZIP(), []int{0, 1} +} + +type GoFeatures struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Whether or not to generate the deprecated UnmarshalJSON method for enums. + // Can only be true for proto using the Open Struct api. + LegacyUnmarshalJsonEnum *bool `protobuf:"varint,1,opt,name=legacy_unmarshal_json_enum,json=legacyUnmarshalJsonEnum" json:"legacy_unmarshal_json_enum,omitempty"` + // One of OPEN, HYBRID or OPAQUE. + ApiLevel *GoFeatures_APILevel `protobuf:"varint,2,opt,name=api_level,json=apiLevel,enum=pb.GoFeatures_APILevel" json:"api_level,omitempty"` + StripEnumPrefix *GoFeatures_StripEnumPrefix `protobuf:"varint,3,opt,name=strip_enum_prefix,json=stripEnumPrefix,enum=pb.GoFeatures_StripEnumPrefix" json:"strip_enum_prefix,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GoFeatures) Reset() { + *x = GoFeatures{} + mi := &file_google_protobuf_go_features_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GoFeatures) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GoFeatures) ProtoMessage() {} + +func (x *GoFeatures) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_go_features_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GoFeatures.ProtoReflect.Descriptor instead. +func (*GoFeatures) Descriptor() ([]byte, []int) { + return file_google_protobuf_go_features_proto_rawDescGZIP(), []int{0} +} + +func (x *GoFeatures) GetLegacyUnmarshalJsonEnum() bool { + if x != nil && x.LegacyUnmarshalJsonEnum != nil { + return *x.LegacyUnmarshalJsonEnum + } + return false +} + +func (x *GoFeatures) GetApiLevel() GoFeatures_APILevel { + if x != nil && x.ApiLevel != nil { + return *x.ApiLevel + } + return GoFeatures_API_LEVEL_UNSPECIFIED +} + +func (x *GoFeatures) GetStripEnumPrefix() GoFeatures_StripEnumPrefix { + if x != nil && x.StripEnumPrefix != nil { + return *x.StripEnumPrefix + } + return GoFeatures_STRIP_ENUM_PREFIX_UNSPECIFIED +} + +var file_google_protobuf_go_features_proto_extTypes = []protoimpl.ExtensionInfo{ + { + ExtendedType: (*descriptorpb.FeatureSet)(nil), + ExtensionType: (*GoFeatures)(nil), + Field: 1002, + Name: "pb.go", + Tag: "bytes,1002,opt,name=go", + Filename: "google/protobuf/go_features.proto", + }, +} + +// Extension fields to descriptorpb.FeatureSet. +var ( + // optional pb.GoFeatures go = 1002; + E_Go = &file_google_protobuf_go_features_proto_extTypes[0] +) + +var File_google_protobuf_go_features_proto protoreflect.FileDescriptor + +const file_google_protobuf_go_features_proto_rawDesc = "" + + "\n" + + "!google/protobuf/go_features.proto\x12\x02pb\x1a google/protobuf/descriptor.proto\"\xab\x05\n" + + "\n" + + "GoFeatures\x12\xbe\x01\n" + + "\x1alegacy_unmarshal_json_enum\x18\x01 \x01(\bB\x80\x01\x88\x01\x01\x98\x01\x06\x98\x01\x01\xa2\x01\t\x12\x04true\x18\x84\a\xa2\x01\n" + + "\x12\x05false\x18\xe7\a\xb2\x01[\b\xe8\a\x10\xe8\a\x1aSThe legacy UnmarshalJSON API is deprecated and will be removed in a future edition.R\x17legacyUnmarshalJsonEnum\x12t\n" + + "\tapi_level\x18\x02 \x01(\x0e2\x17.pb.GoFeatures.APILevelB>\x88\x01\x01\x98\x01\x03\x98\x01\x01\xa2\x01\x1a\x12\x15API_LEVEL_UNSPECIFIED\x18\x84\a\xa2\x01\x0f\x12\n" + + "API_OPAQUE\x18\xe9\a\xb2\x01\x03\b\xe8\aR\bapiLevel\x12|\n" + + "\x11strip_enum_prefix\x18\x03 \x01(\x0e2\x1e.pb.GoFeatures.StripEnumPrefixB0\x88\x01\x01\x98\x01\x06\x98\x01\a\x98\x01\x01\xa2\x01\x1b\x12\x16STRIP_ENUM_PREFIX_KEEP\x18\x84\a\xb2\x01\x03\b\xe9\aR\x0fstripEnumPrefix\"S\n" + + "\bAPILevel\x12\x19\n" + + "\x15API_LEVEL_UNSPECIFIED\x10\x00\x12\f\n" + + "\bAPI_OPEN\x10\x01\x12\x0e\n" + + "\n" + + "API_HYBRID\x10\x02\x12\x0e\n" + + "\n" + + "API_OPAQUE\x10\x03\"\x92\x01\n" + + "\x0fStripEnumPrefix\x12!\n" + + "\x1dSTRIP_ENUM_PREFIX_UNSPECIFIED\x10\x00\x12\x1a\n" + + "\x16STRIP_ENUM_PREFIX_KEEP\x10\x01\x12#\n" + + "\x1fSTRIP_ENUM_PREFIX_GENERATE_BOTH\x10\x02\x12\x1b\n" + + "\x17STRIP_ENUM_PREFIX_STRIP\x10\x03:<\n" + + "\x02go\x12\x1b.google.protobuf.FeatureSet\x18\xea\a \x01(\v2\x0e.pb.GoFeaturesR\x02goB/Z-google.golang.org/protobuf/types/gofeaturespb" + +var ( + file_google_protobuf_go_features_proto_rawDescOnce sync.Once + file_google_protobuf_go_features_proto_rawDescData []byte +) + +func file_google_protobuf_go_features_proto_rawDescGZIP() []byte { + file_google_protobuf_go_features_proto_rawDescOnce.Do(func() { + file_google_protobuf_go_features_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_google_protobuf_go_features_proto_rawDesc), len(file_google_protobuf_go_features_proto_rawDesc))) + }) + return file_google_protobuf_go_features_proto_rawDescData +} + +var file_google_protobuf_go_features_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_google_protobuf_go_features_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_google_protobuf_go_features_proto_goTypes = []any{ + (GoFeatures_APILevel)(0), // 0: pb.GoFeatures.APILevel + (GoFeatures_StripEnumPrefix)(0), // 1: pb.GoFeatures.StripEnumPrefix + (*GoFeatures)(nil), // 2: pb.GoFeatures + (*descriptorpb.FeatureSet)(nil), // 3: google.protobuf.FeatureSet +} +var file_google_protobuf_go_features_proto_depIdxs = []int32{ + 0, // 0: pb.GoFeatures.api_level:type_name -> pb.GoFeatures.APILevel + 1, // 1: pb.GoFeatures.strip_enum_prefix:type_name -> pb.GoFeatures.StripEnumPrefix + 3, // 2: pb.go:extendee -> google.protobuf.FeatureSet + 2, // 3: pb.go:type_name -> pb.GoFeatures + 4, // [4:4] is the sub-list for method output_type + 4, // [4:4] is the sub-list for method input_type + 3, // [3:4] is the sub-list for extension type_name + 2, // [2:3] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_google_protobuf_go_features_proto_init() } +func file_google_protobuf_go_features_proto_init() { + if File_google_protobuf_go_features_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_google_protobuf_go_features_proto_rawDesc), len(file_google_protobuf_go_features_proto_rawDesc)), + NumEnums: 2, + NumMessages: 1, + NumExtensions: 1, + NumServices: 0, + }, + GoTypes: file_google_protobuf_go_features_proto_goTypes, + DependencyIndexes: file_google_protobuf_go_features_proto_depIdxs, + EnumInfos: file_google_protobuf_go_features_proto_enumTypes, + MessageInfos: file_google_protobuf_go_features_proto_msgTypes, + ExtensionInfos: file_google_protobuf_go_features_proto_extTypes, + }.Build() + File_google_protobuf_go_features_proto = out.File + file_google_protobuf_go_features_proto_goTypes = nil + file_google_protobuf_go_features_proto_depIdxs = nil +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/types/known/structpb/struct.pb.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/types/known/structpb/struct.pb.go new file mode 100644 index 0000000..30411b7 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/types/known/structpb/struct.pb.go @@ -0,0 +1,767 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/protobuf/struct.proto + +// Package structpb contains generated types for google/protobuf/struct.proto. +// +// The messages (i.e., Value, Struct, and ListValue) defined in struct.proto are +// used to represent arbitrary JSON. The Value message represents a JSON value, +// the Struct message represents a JSON object, and the ListValue message +// represents a JSON array. See https://json.org for more information. +// +// The Value, Struct, and ListValue types have generated MarshalJSON and +// UnmarshalJSON methods such that they serialize JSON equivalent to what the +// messages themselves represent. Use of these types with the +// "google.golang.org/protobuf/encoding/protojson" package +// ensures that they will be serialized as their JSON equivalent. +// +// # Conversion to and from a Go interface +// +// The standard Go "encoding/json" package has functionality to serialize +// arbitrary types to a large degree. The Value.AsInterface, Struct.AsMap, and +// ListValue.AsSlice methods can convert the protobuf message representation into +// a form represented by any, map[string]any, and []any. +// This form can be used with other packages that operate on such data structures +// and also directly with the standard json package. +// +// In order to convert the any, map[string]any, and []any +// forms back as Value, Struct, and ListValue messages, use the NewStruct, +// NewList, and NewValue constructor functions. +// +// # Example usage +// +// Consider the following example JSON object: +// +// { +// "firstName": "John", +// "lastName": "Smith", +// "isAlive": true, +// "age": 27, +// "address": { +// "streetAddress": "21 2nd Street", +// "city": "New York", +// "state": "NY", +// "postalCode": "10021-3100" +// }, +// "phoneNumbers": [ +// { +// "type": "home", +// "number": "212 555-1234" +// }, +// { +// "type": "office", +// "number": "646 555-4567" +// } +// ], +// "children": [], +// "spouse": null +// } +// +// To construct a Value message representing the above JSON object: +// +// m, err := structpb.NewValue(map[string]any{ +// "firstName": "John", +// "lastName": "Smith", +// "isAlive": true, +// "age": 27, +// "address": map[string]any{ +// "streetAddress": "21 2nd Street", +// "city": "New York", +// "state": "NY", +// "postalCode": "10021-3100", +// }, +// "phoneNumbers": []any{ +// map[string]any{ +// "type": "home", +// "number": "212 555-1234", +// }, +// map[string]any{ +// "type": "office", +// "number": "646 555-4567", +// }, +// }, +// "children": []any{}, +// "spouse": nil, +// }) +// if err != nil { +// ... // handle error +// } +// ... // make use of m as a *structpb.Value +package structpb + +import ( + base64 "encoding/base64" + json "encoding/json" + protojson "google.golang.org/protobuf/encoding/protojson" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + math "math" + reflect "reflect" + sync "sync" + utf8 "unicode/utf8" + unsafe "unsafe" +) + +// `NullValue` is a singleton enumeration to represent the null value for the +// `Value` type union. +// +// The JSON representation for `NullValue` is JSON `null`. +type NullValue int32 + +const ( + // Null value. + NullValue_NULL_VALUE NullValue = 0 +) + +// Enum value maps for NullValue. +var ( + NullValue_name = map[int32]string{ + 0: "NULL_VALUE", + } + NullValue_value = map[string]int32{ + "NULL_VALUE": 0, + } +) + +func (x NullValue) Enum() *NullValue { + p := new(NullValue) + *p = x + return p +} + +func (x NullValue) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NullValue) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_struct_proto_enumTypes[0].Descriptor() +} + +func (NullValue) Type() protoreflect.EnumType { + return &file_google_protobuf_struct_proto_enumTypes[0] +} + +func (x NullValue) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use NullValue.Descriptor instead. +func (NullValue) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_struct_proto_rawDescGZIP(), []int{0} +} + +// `Struct` represents a structured data value, consisting of fields +// which map to dynamically typed values. In some languages, `Struct` +// might be supported by a native representation. For example, in +// scripting languages like JS a struct is represented as an +// object. The details of that representation are described together +// with the proto support for the language. +// +// The JSON representation for `Struct` is JSON object. +type Struct struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Unordered map of dynamically typed values. + Fields map[string]*Value `protobuf:"bytes,1,rep,name=fields,proto3" json:"fields,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +// NewStruct constructs a Struct from a general-purpose Go map. +// The map keys must be valid UTF-8. +// The map values are converted using NewValue. +func NewStruct(v map[string]any) (*Struct, error) { + x := &Struct{Fields: make(map[string]*Value, len(v))} + for k, v := range v { + if !utf8.ValidString(k) { + return nil, protoimpl.X.NewError("invalid UTF-8 in string: %q", k) + } + var err error + x.Fields[k], err = NewValue(v) + if err != nil { + return nil, err + } + } + return x, nil +} + +// AsMap converts x to a general-purpose Go map. +// The map values are converted by calling Value.AsInterface. +func (x *Struct) AsMap() map[string]any { + f := x.GetFields() + vs := make(map[string]any, len(f)) + for k, v := range f { + vs[k] = v.AsInterface() + } + return vs +} + +func (x *Struct) MarshalJSON() ([]byte, error) { + return protojson.Marshal(x) +} + +func (x *Struct) UnmarshalJSON(b []byte) error { + return protojson.Unmarshal(b, x) +} + +func (x *Struct) Reset() { + *x = Struct{} + mi := &file_google_protobuf_struct_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Struct) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Struct) ProtoMessage() {} + +func (x *Struct) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_struct_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Struct.ProtoReflect.Descriptor instead. +func (*Struct) Descriptor() ([]byte, []int) { + return file_google_protobuf_struct_proto_rawDescGZIP(), []int{0} +} + +func (x *Struct) GetFields() map[string]*Value { + if x != nil { + return x.Fields + } + return nil +} + +// `Value` represents a dynamically typed value which can be either +// null, a number, a string, a boolean, a recursive struct value, or a +// list of values. A producer of value is expected to set one of these +// variants. Absence of any variant indicates an error. +// +// The JSON representation for `Value` is JSON value. +type Value struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The kind of value. + // + // Types that are valid to be assigned to Kind: + // + // *Value_NullValue + // *Value_NumberValue + // *Value_StringValue + // *Value_BoolValue + // *Value_StructValue + // *Value_ListValue + Kind isValue_Kind `protobuf_oneof:"kind"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +// NewValue constructs a Value from a general-purpose Go interface. +// +// ╔═══════════════════════════════════════╤════════════════════════════════════════════╗ +// ║ Go type │ Conversion ║ +// ╠═══════════════════════════════════════╪════════════════════════════════════════════╣ +// ║ nil │ stored as NullValue ║ +// ║ bool │ stored as BoolValue ║ +// ║ int, int8, int16, int32, int64 │ stored as NumberValue ║ +// ║ uint, uint8, uint16, uint32, uint64 │ stored as NumberValue ║ +// ║ float32, float64 │ stored as NumberValue ║ +// ║ json.Number │ stored as NumberValue ║ +// ║ string │ stored as StringValue; must be valid UTF-8 ║ +// ║ []byte │ stored as StringValue; base64-encoded ║ +// ║ map[string]any │ stored as StructValue ║ +// ║ []any │ stored as ListValue ║ +// ╚═══════════════════════════════════════╧════════════════════════════════════════════╝ +// +// When converting an int64 or uint64 to a NumberValue, numeric precision loss +// is possible since they are stored as a float64. +func NewValue(v any) (*Value, error) { + switch v := v.(type) { + case nil: + return NewNullValue(), nil + case bool: + return NewBoolValue(v), nil + case int: + return NewNumberValue(float64(v)), nil + case int8: + return NewNumberValue(float64(v)), nil + case int16: + return NewNumberValue(float64(v)), nil + case int32: + return NewNumberValue(float64(v)), nil + case int64: + return NewNumberValue(float64(v)), nil + case uint: + return NewNumberValue(float64(v)), nil + case uint8: + return NewNumberValue(float64(v)), nil + case uint16: + return NewNumberValue(float64(v)), nil + case uint32: + return NewNumberValue(float64(v)), nil + case uint64: + return NewNumberValue(float64(v)), nil + case float32: + return NewNumberValue(float64(v)), nil + case float64: + return NewNumberValue(float64(v)), nil + case json.Number: + n, err := v.Float64() + if err != nil { + return nil, protoimpl.X.NewError("invalid number format %q, expected a float64: %v", v, err) + } + return NewNumberValue(n), nil + case string: + if !utf8.ValidString(v) { + return nil, protoimpl.X.NewError("invalid UTF-8 in string: %q", v) + } + return NewStringValue(v), nil + case []byte: + s := base64.StdEncoding.EncodeToString(v) + return NewStringValue(s), nil + case map[string]any: + v2, err := NewStruct(v) + if err != nil { + return nil, err + } + return NewStructValue(v2), nil + case []any: + v2, err := NewList(v) + if err != nil { + return nil, err + } + return NewListValue(v2), nil + default: + return nil, protoimpl.X.NewError("invalid type: %T", v) + } +} + +// NewNullValue constructs a new null Value. +func NewNullValue() *Value { + return &Value{Kind: &Value_NullValue{NullValue: NullValue_NULL_VALUE}} +} + +// NewBoolValue constructs a new boolean Value. +func NewBoolValue(v bool) *Value { + return &Value{Kind: &Value_BoolValue{BoolValue: v}} +} + +// NewNumberValue constructs a new number Value. +func NewNumberValue(v float64) *Value { + return &Value{Kind: &Value_NumberValue{NumberValue: v}} +} + +// NewStringValue constructs a new string Value. +func NewStringValue(v string) *Value { + return &Value{Kind: &Value_StringValue{StringValue: v}} +} + +// NewStructValue constructs a new struct Value. +func NewStructValue(v *Struct) *Value { + return &Value{Kind: &Value_StructValue{StructValue: v}} +} + +// NewListValue constructs a new list Value. +func NewListValue(v *ListValue) *Value { + return &Value{Kind: &Value_ListValue{ListValue: v}} +} + +// AsInterface converts x to a general-purpose Go interface. +// +// Calling Value.MarshalJSON and "encoding/json".Marshal on this output produce +// semantically equivalent JSON (assuming no errors occur). +// +// Floating-point values (i.e., "NaN", "Infinity", and "-Infinity") are +// converted as strings to remain compatible with MarshalJSON. +func (x *Value) AsInterface() any { + switch v := x.GetKind().(type) { + case *Value_NumberValue: + if v != nil { + switch { + case math.IsNaN(v.NumberValue): + return "NaN" + case math.IsInf(v.NumberValue, +1): + return "Infinity" + case math.IsInf(v.NumberValue, -1): + return "-Infinity" + default: + return v.NumberValue + } + } + case *Value_StringValue: + if v != nil { + return v.StringValue + } + case *Value_BoolValue: + if v != nil { + return v.BoolValue + } + case *Value_StructValue: + if v != nil { + return v.StructValue.AsMap() + } + case *Value_ListValue: + if v != nil { + return v.ListValue.AsSlice() + } + } + return nil +} + +func (x *Value) MarshalJSON() ([]byte, error) { + return protojson.Marshal(x) +} + +func (x *Value) UnmarshalJSON(b []byte) error { + return protojson.Unmarshal(b, x) +} + +func (x *Value) Reset() { + *x = Value{} + mi := &file_google_protobuf_struct_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Value) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Value) ProtoMessage() {} + +func (x *Value) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_struct_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Value.ProtoReflect.Descriptor instead. +func (*Value) Descriptor() ([]byte, []int) { + return file_google_protobuf_struct_proto_rawDescGZIP(), []int{1} +} + +func (x *Value) GetKind() isValue_Kind { + if x != nil { + return x.Kind + } + return nil +} + +func (x *Value) GetNullValue() NullValue { + if x != nil { + if x, ok := x.Kind.(*Value_NullValue); ok { + return x.NullValue + } + } + return NullValue_NULL_VALUE +} + +func (x *Value) GetNumberValue() float64 { + if x != nil { + if x, ok := x.Kind.(*Value_NumberValue); ok { + return x.NumberValue + } + } + return 0 +} + +func (x *Value) GetStringValue() string { + if x != nil { + if x, ok := x.Kind.(*Value_StringValue); ok { + return x.StringValue + } + } + return "" +} + +func (x *Value) GetBoolValue() bool { + if x != nil { + if x, ok := x.Kind.(*Value_BoolValue); ok { + return x.BoolValue + } + } + return false +} + +func (x *Value) GetStructValue() *Struct { + if x != nil { + if x, ok := x.Kind.(*Value_StructValue); ok { + return x.StructValue + } + } + return nil +} + +func (x *Value) GetListValue() *ListValue { + if x != nil { + if x, ok := x.Kind.(*Value_ListValue); ok { + return x.ListValue + } + } + return nil +} + +type isValue_Kind interface { + isValue_Kind() +} + +type Value_NullValue struct { + // Represents a null value. + NullValue NullValue `protobuf:"varint,1,opt,name=null_value,json=nullValue,proto3,enum=google.protobuf.NullValue,oneof"` +} + +type Value_NumberValue struct { + // Represents a double value. + NumberValue float64 `protobuf:"fixed64,2,opt,name=number_value,json=numberValue,proto3,oneof"` +} + +type Value_StringValue struct { + // Represents a string value. + StringValue string `protobuf:"bytes,3,opt,name=string_value,json=stringValue,proto3,oneof"` +} + +type Value_BoolValue struct { + // Represents a boolean value. + BoolValue bool `protobuf:"varint,4,opt,name=bool_value,json=boolValue,proto3,oneof"` +} + +type Value_StructValue struct { + // Represents a structured value. + StructValue *Struct `protobuf:"bytes,5,opt,name=struct_value,json=structValue,proto3,oneof"` +} + +type Value_ListValue struct { + // Represents a repeated `Value`. + ListValue *ListValue `protobuf:"bytes,6,opt,name=list_value,json=listValue,proto3,oneof"` +} + +func (*Value_NullValue) isValue_Kind() {} + +func (*Value_NumberValue) isValue_Kind() {} + +func (*Value_StringValue) isValue_Kind() {} + +func (*Value_BoolValue) isValue_Kind() {} + +func (*Value_StructValue) isValue_Kind() {} + +func (*Value_ListValue) isValue_Kind() {} + +// `ListValue` is a wrapper around a repeated field of values. +// +// The JSON representation for `ListValue` is JSON array. +type ListValue struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Repeated field of dynamically typed values. + Values []*Value `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +// NewList constructs a ListValue from a general-purpose Go slice. +// The slice elements are converted using NewValue. +func NewList(v []any) (*ListValue, error) { + x := &ListValue{Values: make([]*Value, len(v))} + for i, v := range v { + var err error + x.Values[i], err = NewValue(v) + if err != nil { + return nil, err + } + } + return x, nil +} + +// AsSlice converts x to a general-purpose Go slice. +// The slice elements are converted by calling Value.AsInterface. +func (x *ListValue) AsSlice() []any { + vals := x.GetValues() + vs := make([]any, len(vals)) + for i, v := range vals { + vs[i] = v.AsInterface() + } + return vs +} + +func (x *ListValue) MarshalJSON() ([]byte, error) { + return protojson.Marshal(x) +} + +func (x *ListValue) UnmarshalJSON(b []byte) error { + return protojson.Unmarshal(b, x) +} + +func (x *ListValue) Reset() { + *x = ListValue{} + mi := &file_google_protobuf_struct_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListValue) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListValue) ProtoMessage() {} + +func (x *ListValue) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_struct_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListValue.ProtoReflect.Descriptor instead. +func (*ListValue) Descriptor() ([]byte, []int) { + return file_google_protobuf_struct_proto_rawDescGZIP(), []int{2} +} + +func (x *ListValue) GetValues() []*Value { + if x != nil { + return x.Values + } + return nil +} + +var File_google_protobuf_struct_proto protoreflect.FileDescriptor + +const file_google_protobuf_struct_proto_rawDesc = "" + + "\n" + + "\x1cgoogle/protobuf/struct.proto\x12\x0fgoogle.protobuf\"\x98\x01\n" + + "\x06Struct\x12;\n" + + "\x06fields\x18\x01 \x03(\v2#.google.protobuf.Struct.FieldsEntryR\x06fields\x1aQ\n" + + "\vFieldsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12,\n" + + "\x05value\x18\x02 \x01(\v2\x16.google.protobuf.ValueR\x05value:\x028\x01\"\xb2\x02\n" + + "\x05Value\x12;\n" + + "\n" + + "null_value\x18\x01 \x01(\x0e2\x1a.google.protobuf.NullValueH\x00R\tnullValue\x12#\n" + + "\fnumber_value\x18\x02 \x01(\x01H\x00R\vnumberValue\x12#\n" + + "\fstring_value\x18\x03 \x01(\tH\x00R\vstringValue\x12\x1f\n" + + "\n" + + "bool_value\x18\x04 \x01(\bH\x00R\tboolValue\x12<\n" + + "\fstruct_value\x18\x05 \x01(\v2\x17.google.protobuf.StructH\x00R\vstructValue\x12;\n" + + "\n" + + "list_value\x18\x06 \x01(\v2\x1a.google.protobuf.ListValueH\x00R\tlistValueB\x06\n" + + "\x04kind\";\n" + + "\tListValue\x12.\n" + + "\x06values\x18\x01 \x03(\v2\x16.google.protobuf.ValueR\x06values*\x1b\n" + + "\tNullValue\x12\x0e\n" + + "\n" + + "NULL_VALUE\x10\x00B\x7f\n" + + "\x13com.google.protobufB\vStructProtoP\x01Z/google.golang.org/protobuf/types/known/structpb\xf8\x01\x01\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypesb\x06proto3" + +var ( + file_google_protobuf_struct_proto_rawDescOnce sync.Once + file_google_protobuf_struct_proto_rawDescData []byte +) + +func file_google_protobuf_struct_proto_rawDescGZIP() []byte { + file_google_protobuf_struct_proto_rawDescOnce.Do(func() { + file_google_protobuf_struct_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_google_protobuf_struct_proto_rawDesc), len(file_google_protobuf_struct_proto_rawDesc))) + }) + return file_google_protobuf_struct_proto_rawDescData +} + +var file_google_protobuf_struct_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_google_protobuf_struct_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_google_protobuf_struct_proto_goTypes = []any{ + (NullValue)(0), // 0: google.protobuf.NullValue + (*Struct)(nil), // 1: google.protobuf.Struct + (*Value)(nil), // 2: google.protobuf.Value + (*ListValue)(nil), // 3: google.protobuf.ListValue + nil, // 4: google.protobuf.Struct.FieldsEntry +} +var file_google_protobuf_struct_proto_depIdxs = []int32{ + 4, // 0: google.protobuf.Struct.fields:type_name -> google.protobuf.Struct.FieldsEntry + 0, // 1: google.protobuf.Value.null_value:type_name -> google.protobuf.NullValue + 1, // 2: google.protobuf.Value.struct_value:type_name -> google.protobuf.Struct + 3, // 3: google.protobuf.Value.list_value:type_name -> google.protobuf.ListValue + 2, // 4: google.protobuf.ListValue.values:type_name -> google.protobuf.Value + 2, // 5: google.protobuf.Struct.FieldsEntry.value:type_name -> google.protobuf.Value + 6, // [6:6] is the sub-list for method output_type + 6, // [6:6] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name +} + +func init() { file_google_protobuf_struct_proto_init() } +func file_google_protobuf_struct_proto_init() { + if File_google_protobuf_struct_proto != nil { + return + } + file_google_protobuf_struct_proto_msgTypes[1].OneofWrappers = []any{ + (*Value_NullValue)(nil), + (*Value_NumberValue)(nil), + (*Value_StringValue)(nil), + (*Value_BoolValue)(nil), + (*Value_StructValue)(nil), + (*Value_ListValue)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_google_protobuf_struct_proto_rawDesc), len(file_google_protobuf_struct_proto_rawDesc)), + NumEnums: 1, + NumMessages: 4, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_google_protobuf_struct_proto_goTypes, + DependencyIndexes: file_google_protobuf_struct_proto_depIdxs, + EnumInfos: file_google_protobuf_struct_proto_enumTypes, + MessageInfos: file_google_protobuf_struct_proto_msgTypes, + }.Build() + File_google_protobuf_struct_proto = out.File + file_google_protobuf_struct_proto_goTypes = nil + file_google_protobuf_struct_proto_depIdxs = nil +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go new file mode 100644 index 0000000..06d584c --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go @@ -0,0 +1,355 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/protobuf/timestamp.proto + +// Package timestamppb contains generated types for google/protobuf/timestamp.proto. +// +// The Timestamp message represents a timestamp, +// an instant in time since the Unix epoch (January 1st, 1970). +// +// # Conversion to a Go Time +// +// The AsTime method can be used to convert a Timestamp message to a +// standard Go time.Time value in UTC: +// +// t := ts.AsTime() +// ... // make use of t as a time.Time +// +// Converting to a time.Time is a common operation so that the extensive +// set of time-based operations provided by the time package can be leveraged. +// See https://golang.org/pkg/time for more information. +// +// The AsTime method performs the conversion on a best-effort basis. Timestamps +// with denormal values (e.g., nanoseconds beyond 0 and 99999999, inclusive) +// are normalized during the conversion to a time.Time. To manually check for +// invalid Timestamps per the documented limitations in timestamp.proto, +// additionally call the CheckValid method: +// +// if err := ts.CheckValid(); err != nil { +// ... // handle error +// } +// +// # Conversion from a Go Time +// +// The timestamppb.New function can be used to construct a Timestamp message +// from a standard Go time.Time value: +// +// ts := timestamppb.New(t) +// ... // make use of ts as a *timestamppb.Timestamp +// +// In order to construct a Timestamp representing the current time, use Now: +// +// ts := timestamppb.Now() +// ... // make use of ts as a *timestamppb.Timestamp +package timestamppb + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" + time "time" + unsafe "unsafe" +) + +// A Timestamp represents a point in time independent of any time zone or local +// calendar, encoded as a count of seconds and fractions of seconds at +// nanosecond resolution. The count is relative to an epoch at UTC midnight on +// January 1, 1970, in the proleptic Gregorian calendar which extends the +// Gregorian calendar backwards to year one. +// +// All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap +// second table is needed for interpretation, using a [24-hour linear +// smear](https://developers.google.com/time/smear). +// +// The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By +// restricting to that range, we ensure that we can convert to and from [RFC +// 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings. +// +// # Examples +// +// Example 1: Compute Timestamp from POSIX `time()`. +// +// Timestamp timestamp; +// timestamp.set_seconds(time(NULL)); +// timestamp.set_nanos(0); +// +// Example 2: Compute Timestamp from POSIX `gettimeofday()`. +// +// struct timeval tv; +// gettimeofday(&tv, NULL); +// +// Timestamp timestamp; +// timestamp.set_seconds(tv.tv_sec); +// timestamp.set_nanos(tv.tv_usec * 1000); +// +// Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. +// +// FILETIME ft; +// GetSystemTimeAsFileTime(&ft); +// UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; +// +// // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z +// // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. +// Timestamp timestamp; +// timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); +// timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); +// +// Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. +// +// long millis = System.currentTimeMillis(); +// +// Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) +// .setNanos((int) ((millis % 1000) * 1000000)).build(); +// +// Example 5: Compute Timestamp from Java `Instant.now()`. +// +// Instant now = Instant.now(); +// +// Timestamp timestamp = +// Timestamp.newBuilder().setSeconds(now.getEpochSecond()) +// .setNanos(now.getNano()).build(); +// +// Example 6: Compute Timestamp from current time in Python. +// +// timestamp = Timestamp() +// timestamp.GetCurrentTime() +// +// # JSON Mapping +// +// In JSON format, the Timestamp type is encoded as a string in the +// [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the +// format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" +// where {year} is always expressed using four digits while {month}, {day}, +// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional +// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), +// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone +// is required. A proto3 JSON serializer should always use UTC (as indicated by +// "Z") when printing the Timestamp type and a proto3 JSON parser should be +// able to accept both UTC and other timezones (as indicated by an offset). +// +// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past +// 01:30 UTC on January 15, 2017. +// +// In JavaScript, one can convert a Date object to this format using the +// standard +// [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) +// method. In Python, a standard `datetime.datetime` object can be converted +// to this format using +// [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with +// the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use +// the Joda Time's [`ISODateTimeFormat.dateTime()`]( +// http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime() +// ) to obtain a formatter capable of generating timestamps in this format. +type Timestamp struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Represents seconds of UTC time since Unix epoch + // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to + // 9999-12-31T23:59:59Z inclusive. + Seconds int64 `protobuf:"varint,1,opt,name=seconds,proto3" json:"seconds,omitempty"` + // Non-negative fractions of a second at nanosecond resolution. Negative + // second values with fractions must still have non-negative nanos values + // that count forward in time. Must be from 0 to 999,999,999 + // inclusive. + Nanos int32 `protobuf:"varint,2,opt,name=nanos,proto3" json:"nanos,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +// Now constructs a new Timestamp from the current time. +func Now() *Timestamp { + return New(time.Now()) +} + +// New constructs a new Timestamp from the provided time.Time. +func New(t time.Time) *Timestamp { + return &Timestamp{Seconds: int64(t.Unix()), Nanos: int32(t.Nanosecond())} +} + +// AsTime converts x to a time.Time. +func (x *Timestamp) AsTime() time.Time { + return time.Unix(int64(x.GetSeconds()), int64(x.GetNanos())).UTC() +} + +// IsValid reports whether the timestamp is valid. +// It is equivalent to CheckValid == nil. +func (x *Timestamp) IsValid() bool { + return x.check() == 0 +} + +// CheckValid returns an error if the timestamp is invalid. +// In particular, it checks whether the value represents a date that is +// in the range of 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive. +// An error is reported for a nil Timestamp. +func (x *Timestamp) CheckValid() error { + switch x.check() { + case invalidNil: + return protoimpl.X.NewError("invalid nil Timestamp") + case invalidUnderflow: + return protoimpl.X.NewError("timestamp (%v) before 0001-01-01", x) + case invalidOverflow: + return protoimpl.X.NewError("timestamp (%v) after 9999-12-31", x) + case invalidNanos: + return protoimpl.X.NewError("timestamp (%v) has out-of-range nanos", x) + default: + return nil + } +} + +const ( + _ = iota + invalidNil + invalidUnderflow + invalidOverflow + invalidNanos +) + +func (x *Timestamp) check() uint { + const minTimestamp = -62135596800 // Seconds between 1970-01-01T00:00:00Z and 0001-01-01T00:00:00Z, inclusive + const maxTimestamp = +253402300799 // Seconds between 1970-01-01T00:00:00Z and 9999-12-31T23:59:59Z, inclusive + secs := x.GetSeconds() + nanos := x.GetNanos() + switch { + case x == nil: + return invalidNil + case secs < minTimestamp: + return invalidUnderflow + case secs > maxTimestamp: + return invalidOverflow + case nanos < 0 || nanos >= 1e9: + return invalidNanos + default: + return 0 + } +} + +func (x *Timestamp) Reset() { + *x = Timestamp{} + mi := &file_google_protobuf_timestamp_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Timestamp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Timestamp) ProtoMessage() {} + +func (x *Timestamp) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_timestamp_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Timestamp.ProtoReflect.Descriptor instead. +func (*Timestamp) Descriptor() ([]byte, []int) { + return file_google_protobuf_timestamp_proto_rawDescGZIP(), []int{0} +} + +func (x *Timestamp) GetSeconds() int64 { + if x != nil { + return x.Seconds + } + return 0 +} + +func (x *Timestamp) GetNanos() int32 { + if x != nil { + return x.Nanos + } + return 0 +} + +var File_google_protobuf_timestamp_proto protoreflect.FileDescriptor + +const file_google_protobuf_timestamp_proto_rawDesc = "" + + "\n" + + "\x1fgoogle/protobuf/timestamp.proto\x12\x0fgoogle.protobuf\";\n" + + "\tTimestamp\x12\x18\n" + + "\aseconds\x18\x01 \x01(\x03R\aseconds\x12\x14\n" + + "\x05nanos\x18\x02 \x01(\x05R\x05nanosB\x85\x01\n" + + "\x13com.google.protobufB\x0eTimestampProtoP\x01Z2google.golang.org/protobuf/types/known/timestamppb\xf8\x01\x01\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypesb\x06proto3" + +var ( + file_google_protobuf_timestamp_proto_rawDescOnce sync.Once + file_google_protobuf_timestamp_proto_rawDescData []byte +) + +func file_google_protobuf_timestamp_proto_rawDescGZIP() []byte { + file_google_protobuf_timestamp_proto_rawDescOnce.Do(func() { + file_google_protobuf_timestamp_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_google_protobuf_timestamp_proto_rawDesc), len(file_google_protobuf_timestamp_proto_rawDesc))) + }) + return file_google_protobuf_timestamp_proto_rawDescData +} + +var file_google_protobuf_timestamp_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_google_protobuf_timestamp_proto_goTypes = []any{ + (*Timestamp)(nil), // 0: google.protobuf.Timestamp +} +var file_google_protobuf_timestamp_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_google_protobuf_timestamp_proto_init() } +func file_google_protobuf_timestamp_proto_init() { + if File_google_protobuf_timestamp_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_google_protobuf_timestamp_proto_rawDesc), len(file_google_protobuf_timestamp_proto_rawDesc)), + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_google_protobuf_timestamp_proto_goTypes, + DependencyIndexes: file_google_protobuf_timestamp_proto_depIdxs, + MessageInfos: file_google_protobuf_timestamp_proto_msgTypes, + }.Build() + File_google_protobuf_timestamp_proto = out.File + file_google_protobuf_timestamp_proto_goTypes = nil + file_google_protobuf_timestamp_proto_depIdxs = nil +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/types/known/wrapperspb/wrappers.pb.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/types/known/wrapperspb/wrappers.pb.go new file mode 100644 index 0000000..b7c2d06 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/types/known/wrapperspb/wrappers.pb.go @@ -0,0 +1,648 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Wrappers for primitive (non-message) types. These types were needed +// for legacy reasons and are not recommended for use in new APIs. +// +// Historically these wrappers were useful to have presence on proto3 primitive +// fields, but proto3 syntax has been updated to support the `optional` keyword. +// Using that keyword is now the strongly preferred way to add presence to +// proto3 primitive fields. +// +// A secondary usecase was to embed primitives in the `google.protobuf.Any` +// type: it is now recommended that you embed your value in your own wrapper +// message which can be specifically documented. +// +// These wrappers have no meaningful use within repeated fields as they lack +// the ability to detect presence on individual elements. +// These wrappers have no meaningful use within a map or a oneof since +// individual entries of a map or fields of a oneof can already detect presence. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/protobuf/wrappers.proto + +package wrapperspb + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" + unsafe "unsafe" +) + +// Wrapper message for `double`. +// +// The JSON representation for `DoubleValue` is JSON number. +// +// Not recommended for use in new APIs, but still useful for legacy APIs and +// has no plan to be removed. +type DoubleValue struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The double value. + Value float64 `protobuf:"fixed64,1,opt,name=value,proto3" json:"value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +// Double stores v in a new DoubleValue and returns a pointer to it. +func Double(v float64) *DoubleValue { + return &DoubleValue{Value: v} +} + +func (x *DoubleValue) Reset() { + *x = DoubleValue{} + mi := &file_google_protobuf_wrappers_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DoubleValue) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DoubleValue) ProtoMessage() {} + +func (x *DoubleValue) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_wrappers_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DoubleValue.ProtoReflect.Descriptor instead. +func (*DoubleValue) Descriptor() ([]byte, []int) { + return file_google_protobuf_wrappers_proto_rawDescGZIP(), []int{0} +} + +func (x *DoubleValue) GetValue() float64 { + if x != nil { + return x.Value + } + return 0 +} + +// Wrapper message for `float`. +// +// The JSON representation for `FloatValue` is JSON number. +// +// Not recommended for use in new APIs, but still useful for legacy APIs and +// has no plan to be removed. +type FloatValue struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The float value. + Value float32 `protobuf:"fixed32,1,opt,name=value,proto3" json:"value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +// Float stores v in a new FloatValue and returns a pointer to it. +func Float(v float32) *FloatValue { + return &FloatValue{Value: v} +} + +func (x *FloatValue) Reset() { + *x = FloatValue{} + mi := &file_google_protobuf_wrappers_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *FloatValue) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FloatValue) ProtoMessage() {} + +func (x *FloatValue) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_wrappers_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FloatValue.ProtoReflect.Descriptor instead. +func (*FloatValue) Descriptor() ([]byte, []int) { + return file_google_protobuf_wrappers_proto_rawDescGZIP(), []int{1} +} + +func (x *FloatValue) GetValue() float32 { + if x != nil { + return x.Value + } + return 0 +} + +// Wrapper message for `int64`. +// +// The JSON representation for `Int64Value` is JSON string. +// +// Not recommended for use in new APIs, but still useful for legacy APIs and +// has no plan to be removed. +type Int64Value struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The int64 value. + Value int64 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +// Int64 stores v in a new Int64Value and returns a pointer to it. +func Int64(v int64) *Int64Value { + return &Int64Value{Value: v} +} + +func (x *Int64Value) Reset() { + *x = Int64Value{} + mi := &file_google_protobuf_wrappers_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Int64Value) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Int64Value) ProtoMessage() {} + +func (x *Int64Value) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_wrappers_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Int64Value.ProtoReflect.Descriptor instead. +func (*Int64Value) Descriptor() ([]byte, []int) { + return file_google_protobuf_wrappers_proto_rawDescGZIP(), []int{2} +} + +func (x *Int64Value) GetValue() int64 { + if x != nil { + return x.Value + } + return 0 +} + +// Wrapper message for `uint64`. +// +// The JSON representation for `UInt64Value` is JSON string. +// +// Not recommended for use in new APIs, but still useful for legacy APIs and +// has no plan to be removed. +type UInt64Value struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The uint64 value. + Value uint64 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +// UInt64 stores v in a new UInt64Value and returns a pointer to it. +func UInt64(v uint64) *UInt64Value { + return &UInt64Value{Value: v} +} + +func (x *UInt64Value) Reset() { + *x = UInt64Value{} + mi := &file_google_protobuf_wrappers_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UInt64Value) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UInt64Value) ProtoMessage() {} + +func (x *UInt64Value) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_wrappers_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UInt64Value.ProtoReflect.Descriptor instead. +func (*UInt64Value) Descriptor() ([]byte, []int) { + return file_google_protobuf_wrappers_proto_rawDescGZIP(), []int{3} +} + +func (x *UInt64Value) GetValue() uint64 { + if x != nil { + return x.Value + } + return 0 +} + +// Wrapper message for `int32`. +// +// The JSON representation for `Int32Value` is JSON number. +// +// Not recommended for use in new APIs, but still useful for legacy APIs and +// has no plan to be removed. +type Int32Value struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The int32 value. + Value int32 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +// Int32 stores v in a new Int32Value and returns a pointer to it. +func Int32(v int32) *Int32Value { + return &Int32Value{Value: v} +} + +func (x *Int32Value) Reset() { + *x = Int32Value{} + mi := &file_google_protobuf_wrappers_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Int32Value) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Int32Value) ProtoMessage() {} + +func (x *Int32Value) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_wrappers_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Int32Value.ProtoReflect.Descriptor instead. +func (*Int32Value) Descriptor() ([]byte, []int) { + return file_google_protobuf_wrappers_proto_rawDescGZIP(), []int{4} +} + +func (x *Int32Value) GetValue() int32 { + if x != nil { + return x.Value + } + return 0 +} + +// Wrapper message for `uint32`. +// +// The JSON representation for `UInt32Value` is JSON number. +// +// Not recommended for use in new APIs, but still useful for legacy APIs and +// has no plan to be removed. +type UInt32Value struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The uint32 value. + Value uint32 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +// UInt32 stores v in a new UInt32Value and returns a pointer to it. +func UInt32(v uint32) *UInt32Value { + return &UInt32Value{Value: v} +} + +func (x *UInt32Value) Reset() { + *x = UInt32Value{} + mi := &file_google_protobuf_wrappers_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UInt32Value) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UInt32Value) ProtoMessage() {} + +func (x *UInt32Value) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_wrappers_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UInt32Value.ProtoReflect.Descriptor instead. +func (*UInt32Value) Descriptor() ([]byte, []int) { + return file_google_protobuf_wrappers_proto_rawDescGZIP(), []int{5} +} + +func (x *UInt32Value) GetValue() uint32 { + if x != nil { + return x.Value + } + return 0 +} + +// Wrapper message for `bool`. +// +// The JSON representation for `BoolValue` is JSON `true` and `false`. +// +// Not recommended for use in new APIs, but still useful for legacy APIs and +// has no plan to be removed. +type BoolValue struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The bool value. + Value bool `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +// Bool stores v in a new BoolValue and returns a pointer to it. +func Bool(v bool) *BoolValue { + return &BoolValue{Value: v} +} + +func (x *BoolValue) Reset() { + *x = BoolValue{} + mi := &file_google_protobuf_wrappers_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BoolValue) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BoolValue) ProtoMessage() {} + +func (x *BoolValue) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_wrappers_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BoolValue.ProtoReflect.Descriptor instead. +func (*BoolValue) Descriptor() ([]byte, []int) { + return file_google_protobuf_wrappers_proto_rawDescGZIP(), []int{6} +} + +func (x *BoolValue) GetValue() bool { + if x != nil { + return x.Value + } + return false +} + +// Wrapper message for `string`. +// +// The JSON representation for `StringValue` is JSON string. +// +// Not recommended for use in new APIs, but still useful for legacy APIs and +// has no plan to be removed. +type StringValue struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The string value. + Value string `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +// String stores v in a new StringValue and returns a pointer to it. +func String(v string) *StringValue { + return &StringValue{Value: v} +} + +func (x *StringValue) Reset() { + *x = StringValue{} + mi := &file_google_protobuf_wrappers_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StringValue) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StringValue) ProtoMessage() {} + +func (x *StringValue) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_wrappers_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StringValue.ProtoReflect.Descriptor instead. +func (*StringValue) Descriptor() ([]byte, []int) { + return file_google_protobuf_wrappers_proto_rawDescGZIP(), []int{7} +} + +func (x *StringValue) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +// Wrapper message for `bytes`. +// +// The JSON representation for `BytesValue` is JSON string. +// +// Not recommended for use in new APIs, but still useful for legacy APIs and +// has no plan to be removed. +type BytesValue struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The bytes value. + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +// Bytes stores v in a new BytesValue and returns a pointer to it. +func Bytes(v []byte) *BytesValue { + return &BytesValue{Value: v} +} + +func (x *BytesValue) Reset() { + *x = BytesValue{} + mi := &file_google_protobuf_wrappers_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BytesValue) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BytesValue) ProtoMessage() {} + +func (x *BytesValue) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_wrappers_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BytesValue.ProtoReflect.Descriptor instead. +func (*BytesValue) Descriptor() ([]byte, []int) { + return file_google_protobuf_wrappers_proto_rawDescGZIP(), []int{8} +} + +func (x *BytesValue) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +var File_google_protobuf_wrappers_proto protoreflect.FileDescriptor + +const file_google_protobuf_wrappers_proto_rawDesc = "" + + "\n" + + "\x1egoogle/protobuf/wrappers.proto\x12\x0fgoogle.protobuf\"#\n" + + "\vDoubleValue\x12\x14\n" + + "\x05value\x18\x01 \x01(\x01R\x05value\"\"\n" + + "\n" + + "FloatValue\x12\x14\n" + + "\x05value\x18\x01 \x01(\x02R\x05value\"\"\n" + + "\n" + + "Int64Value\x12\x14\n" + + "\x05value\x18\x01 \x01(\x03R\x05value\"#\n" + + "\vUInt64Value\x12\x14\n" + + "\x05value\x18\x01 \x01(\x04R\x05value\"\"\n" + + "\n" + + "Int32Value\x12\x14\n" + + "\x05value\x18\x01 \x01(\x05R\x05value\"#\n" + + "\vUInt32Value\x12\x14\n" + + "\x05value\x18\x01 \x01(\rR\x05value\"!\n" + + "\tBoolValue\x12\x14\n" + + "\x05value\x18\x01 \x01(\bR\x05value\"#\n" + + "\vStringValue\x12\x14\n" + + "\x05value\x18\x01 \x01(\tR\x05value\"\"\n" + + "\n" + + "BytesValue\x12\x14\n" + + "\x05value\x18\x01 \x01(\fR\x05valueB\x83\x01\n" + + "\x13com.google.protobufB\rWrappersProtoP\x01Z1google.golang.org/protobuf/types/known/wrapperspb\xf8\x01\x01\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypesb\x06proto3" + +var ( + file_google_protobuf_wrappers_proto_rawDescOnce sync.Once + file_google_protobuf_wrappers_proto_rawDescData []byte +) + +func file_google_protobuf_wrappers_proto_rawDescGZIP() []byte { + file_google_protobuf_wrappers_proto_rawDescOnce.Do(func() { + file_google_protobuf_wrappers_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_google_protobuf_wrappers_proto_rawDesc), len(file_google_protobuf_wrappers_proto_rawDesc))) + }) + return file_google_protobuf_wrappers_proto_rawDescData +} + +var file_google_protobuf_wrappers_proto_msgTypes = make([]protoimpl.MessageInfo, 9) +var file_google_protobuf_wrappers_proto_goTypes = []any{ + (*DoubleValue)(nil), // 0: google.protobuf.DoubleValue + (*FloatValue)(nil), // 1: google.protobuf.FloatValue + (*Int64Value)(nil), // 2: google.protobuf.Int64Value + (*UInt64Value)(nil), // 3: google.protobuf.UInt64Value + (*Int32Value)(nil), // 4: google.protobuf.Int32Value + (*UInt32Value)(nil), // 5: google.protobuf.UInt32Value + (*BoolValue)(nil), // 6: google.protobuf.BoolValue + (*StringValue)(nil), // 7: google.protobuf.StringValue + (*BytesValue)(nil), // 8: google.protobuf.BytesValue +} +var file_google_protobuf_wrappers_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_google_protobuf_wrappers_proto_init() } +func file_google_protobuf_wrappers_proto_init() { + if File_google_protobuf_wrappers_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_google_protobuf_wrappers_proto_rawDesc), len(file_google_protobuf_wrappers_proto_rawDesc)), + NumEnums: 0, + NumMessages: 9, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_google_protobuf_wrappers_proto_goTypes, + DependencyIndexes: file_google_protobuf_wrappers_proto_depIdxs, + MessageInfos: file_google_protobuf_wrappers_proto_msgTypes, + }.Build() + File_google_protobuf_wrappers_proto = out.File + file_google_protobuf_wrappers_proto_goTypes = nil + file_google_protobuf_wrappers_proto_depIdxs = nil +} diff --git a/Nakama+Hiro/vendor/google.golang.org/protobuf/types/pluginpb/plugin.pb.go b/Nakama+Hiro/vendor/google.golang.org/protobuf/types/pluginpb/plugin.pb.go new file mode 100644 index 0000000..6998aa4 --- /dev/null +++ b/Nakama+Hiro/vendor/google.golang.org/protobuf/types/pluginpb/plugin.pb.go @@ -0,0 +1,583 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file or at +// https://developers.google.com/open-source/licenses/bsd + +// Author: kenton@google.com (Kenton Varda) +// +// protoc (aka the Protocol Compiler) can be extended via plugins. A plugin is +// just a program that reads a CodeGeneratorRequest from stdin and writes a +// CodeGeneratorResponse to stdout. +// +// Plugins written using C++ can use google/protobuf/compiler/plugin.h instead +// of dealing with the raw protocol defined here. +// +// A plugin executable needs only to be placed somewhere in the path. The +// plugin should be named "protoc-gen-$NAME", and will then be used when the +// flag "--${NAME}_out" is passed to protoc. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/protobuf/compiler/plugin.proto + +package pluginpb + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + descriptorpb "google.golang.org/protobuf/types/descriptorpb" + reflect "reflect" + sync "sync" + unsafe "unsafe" +) + +// Sync with code_generator.h. +type CodeGeneratorResponse_Feature int32 + +const ( + CodeGeneratorResponse_FEATURE_NONE CodeGeneratorResponse_Feature = 0 + CodeGeneratorResponse_FEATURE_PROTO3_OPTIONAL CodeGeneratorResponse_Feature = 1 + CodeGeneratorResponse_FEATURE_SUPPORTS_EDITIONS CodeGeneratorResponse_Feature = 2 +) + +// Enum value maps for CodeGeneratorResponse_Feature. +var ( + CodeGeneratorResponse_Feature_name = map[int32]string{ + 0: "FEATURE_NONE", + 1: "FEATURE_PROTO3_OPTIONAL", + 2: "FEATURE_SUPPORTS_EDITIONS", + } + CodeGeneratorResponse_Feature_value = map[string]int32{ + "FEATURE_NONE": 0, + "FEATURE_PROTO3_OPTIONAL": 1, + "FEATURE_SUPPORTS_EDITIONS": 2, + } +) + +func (x CodeGeneratorResponse_Feature) Enum() *CodeGeneratorResponse_Feature { + p := new(CodeGeneratorResponse_Feature) + *p = x + return p +} + +func (x CodeGeneratorResponse_Feature) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (CodeGeneratorResponse_Feature) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_compiler_plugin_proto_enumTypes[0].Descriptor() +} + +func (CodeGeneratorResponse_Feature) Type() protoreflect.EnumType { + return &file_google_protobuf_compiler_plugin_proto_enumTypes[0] +} + +func (x CodeGeneratorResponse_Feature) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *CodeGeneratorResponse_Feature) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = CodeGeneratorResponse_Feature(num) + return nil +} + +// Deprecated: Use CodeGeneratorResponse_Feature.Descriptor instead. +func (CodeGeneratorResponse_Feature) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_compiler_plugin_proto_rawDescGZIP(), []int{2, 0} +} + +// The version number of protocol compiler. +type Version struct { + state protoimpl.MessageState `protogen:"open.v1"` + Major *int32 `protobuf:"varint,1,opt,name=major" json:"major,omitempty"` + Minor *int32 `protobuf:"varint,2,opt,name=minor" json:"minor,omitempty"` + Patch *int32 `protobuf:"varint,3,opt,name=patch" json:"patch,omitempty"` + // A suffix for alpha, beta or rc release, e.g., "alpha-1", "rc2". It should + // be empty for mainline stable releases. + Suffix *string `protobuf:"bytes,4,opt,name=suffix" json:"suffix,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Version) Reset() { + *x = Version{} + mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Version) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Version) ProtoMessage() {} + +func (x *Version) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Version.ProtoReflect.Descriptor instead. +func (*Version) Descriptor() ([]byte, []int) { + return file_google_protobuf_compiler_plugin_proto_rawDescGZIP(), []int{0} +} + +func (x *Version) GetMajor() int32 { + if x != nil && x.Major != nil { + return *x.Major + } + return 0 +} + +func (x *Version) GetMinor() int32 { + if x != nil && x.Minor != nil { + return *x.Minor + } + return 0 +} + +func (x *Version) GetPatch() int32 { + if x != nil && x.Patch != nil { + return *x.Patch + } + return 0 +} + +func (x *Version) GetSuffix() string { + if x != nil && x.Suffix != nil { + return *x.Suffix + } + return "" +} + +// An encoded CodeGeneratorRequest is written to the plugin's stdin. +type CodeGeneratorRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The .proto files that were explicitly listed on the command-line. The + // code generator should generate code only for these files. Each file's + // descriptor will be included in proto_file, below. + FileToGenerate []string `protobuf:"bytes,1,rep,name=file_to_generate,json=fileToGenerate" json:"file_to_generate,omitempty"` + // The generator parameter passed on the command-line. + Parameter *string `protobuf:"bytes,2,opt,name=parameter" json:"parameter,omitempty"` + // FileDescriptorProtos for all files in files_to_generate and everything + // they import. The files will appear in topological order, so each file + // appears before any file that imports it. + // + // Note: the files listed in files_to_generate will include runtime-retention + // options only, but all other files will include source-retention options. + // The source_file_descriptors field below is available in case you need + // source-retention options for files_to_generate. + // + // protoc guarantees that all proto_files will be written after + // the fields above, even though this is not technically guaranteed by the + // protobuf wire format. This theoretically could allow a plugin to stream + // in the FileDescriptorProtos and handle them one by one rather than read + // the entire set into memory at once. However, as of this writing, this + // is not similarly optimized on protoc's end -- it will store all fields in + // memory at once before sending them to the plugin. + // + // Type names of fields and extensions in the FileDescriptorProto are always + // fully qualified. + ProtoFile []*descriptorpb.FileDescriptorProto `protobuf:"bytes,15,rep,name=proto_file,json=protoFile" json:"proto_file,omitempty"` + // File descriptors with all options, including source-retention options. + // These descriptors are only provided for the files listed in + // files_to_generate. + SourceFileDescriptors []*descriptorpb.FileDescriptorProto `protobuf:"bytes,17,rep,name=source_file_descriptors,json=sourceFileDescriptors" json:"source_file_descriptors,omitempty"` + // The version number of protocol compiler. + CompilerVersion *Version `protobuf:"bytes,3,opt,name=compiler_version,json=compilerVersion" json:"compiler_version,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CodeGeneratorRequest) Reset() { + *x = CodeGeneratorRequest{} + mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CodeGeneratorRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CodeGeneratorRequest) ProtoMessage() {} + +func (x *CodeGeneratorRequest) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CodeGeneratorRequest.ProtoReflect.Descriptor instead. +func (*CodeGeneratorRequest) Descriptor() ([]byte, []int) { + return file_google_protobuf_compiler_plugin_proto_rawDescGZIP(), []int{1} +} + +func (x *CodeGeneratorRequest) GetFileToGenerate() []string { + if x != nil { + return x.FileToGenerate + } + return nil +} + +func (x *CodeGeneratorRequest) GetParameter() string { + if x != nil && x.Parameter != nil { + return *x.Parameter + } + return "" +} + +func (x *CodeGeneratorRequest) GetProtoFile() []*descriptorpb.FileDescriptorProto { + if x != nil { + return x.ProtoFile + } + return nil +} + +func (x *CodeGeneratorRequest) GetSourceFileDescriptors() []*descriptorpb.FileDescriptorProto { + if x != nil { + return x.SourceFileDescriptors + } + return nil +} + +func (x *CodeGeneratorRequest) GetCompilerVersion() *Version { + if x != nil { + return x.CompilerVersion + } + return nil +} + +// The plugin writes an encoded CodeGeneratorResponse to stdout. +type CodeGeneratorResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Error message. If non-empty, code generation failed. The plugin process + // should exit with status code zero even if it reports an error in this way. + // + // This should be used to indicate errors in .proto files which prevent the + // code generator from generating correct code. Errors which indicate a + // problem in protoc itself -- such as the input CodeGeneratorRequest being + // unparseable -- should be reported by writing a message to stderr and + // exiting with a non-zero status code. + Error *string `protobuf:"bytes,1,opt,name=error" json:"error,omitempty"` + // A bitmask of supported features that the code generator supports. + // This is a bitwise "or" of values from the Feature enum. + SupportedFeatures *uint64 `protobuf:"varint,2,opt,name=supported_features,json=supportedFeatures" json:"supported_features,omitempty"` + // The minimum edition this plugin supports. This will be treated as an + // Edition enum, but we want to allow unknown values. It should be specified + // according the edition enum value, *not* the edition number. Only takes + // effect for plugins that have FEATURE_SUPPORTS_EDITIONS set. + MinimumEdition *int32 `protobuf:"varint,3,opt,name=minimum_edition,json=minimumEdition" json:"minimum_edition,omitempty"` + // The maximum edition this plugin supports. This will be treated as an + // Edition enum, but we want to allow unknown values. It should be specified + // according the edition enum value, *not* the edition number. Only takes + // effect for plugins that have FEATURE_SUPPORTS_EDITIONS set. + MaximumEdition *int32 `protobuf:"varint,4,opt,name=maximum_edition,json=maximumEdition" json:"maximum_edition,omitempty"` + File []*CodeGeneratorResponse_File `protobuf:"bytes,15,rep,name=file" json:"file,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CodeGeneratorResponse) Reset() { + *x = CodeGeneratorResponse{} + mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CodeGeneratorResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CodeGeneratorResponse) ProtoMessage() {} + +func (x *CodeGeneratorResponse) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CodeGeneratorResponse.ProtoReflect.Descriptor instead. +func (*CodeGeneratorResponse) Descriptor() ([]byte, []int) { + return file_google_protobuf_compiler_plugin_proto_rawDescGZIP(), []int{2} +} + +func (x *CodeGeneratorResponse) GetError() string { + if x != nil && x.Error != nil { + return *x.Error + } + return "" +} + +func (x *CodeGeneratorResponse) GetSupportedFeatures() uint64 { + if x != nil && x.SupportedFeatures != nil { + return *x.SupportedFeatures + } + return 0 +} + +func (x *CodeGeneratorResponse) GetMinimumEdition() int32 { + if x != nil && x.MinimumEdition != nil { + return *x.MinimumEdition + } + return 0 +} + +func (x *CodeGeneratorResponse) GetMaximumEdition() int32 { + if x != nil && x.MaximumEdition != nil { + return *x.MaximumEdition + } + return 0 +} + +func (x *CodeGeneratorResponse) GetFile() []*CodeGeneratorResponse_File { + if x != nil { + return x.File + } + return nil +} + +// Represents a single generated file. +type CodeGeneratorResponse_File struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The file name, relative to the output directory. The name must not + // contain "." or ".." components and must be relative, not be absolute (so, + // the file cannot lie outside the output directory). "/" must be used as + // the path separator, not "\". + // + // If the name is omitted, the content will be appended to the previous + // file. This allows the generator to break large files into small chunks, + // and allows the generated text to be streamed back to protoc so that large + // files need not reside completely in memory at one time. Note that as of + // this writing protoc does not optimize for this -- it will read the entire + // CodeGeneratorResponse before writing files to disk. + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // If non-empty, indicates that the named file should already exist, and the + // content here is to be inserted into that file at a defined insertion + // point. This feature allows a code generator to extend the output + // produced by another code generator. The original generator may provide + // insertion points by placing special annotations in the file that look + // like: + // + // @@protoc_insertion_point(NAME) + // + // The annotation can have arbitrary text before and after it on the line, + // which allows it to be placed in a comment. NAME should be replaced with + // an identifier naming the point -- this is what other generators will use + // as the insertion_point. Code inserted at this point will be placed + // immediately above the line containing the insertion point (thus multiple + // insertions to the same point will come out in the order they were added). + // The double-@ is intended to make it unlikely that the generated code + // could contain things that look like insertion points by accident. + // + // For example, the C++ code generator places the following line in the + // .pb.h files that it generates: + // + // // @@protoc_insertion_point(namespace_scope) + // + // This line appears within the scope of the file's package namespace, but + // outside of any particular class. Another plugin can then specify the + // insertion_point "namespace_scope" to generate additional classes or + // other declarations that should be placed in this scope. + // + // Note that if the line containing the insertion point begins with + // whitespace, the same whitespace will be added to every line of the + // inserted text. This is useful for languages like Python, where + // indentation matters. In these languages, the insertion point comment + // should be indented the same amount as any inserted code will need to be + // in order to work correctly in that context. + // + // The code generator that generates the initial file and the one which + // inserts into it must both run as part of a single invocation of protoc. + // Code generators are executed in the order in which they appear on the + // command line. + // + // If |insertion_point| is present, |name| must also be present. + InsertionPoint *string `protobuf:"bytes,2,opt,name=insertion_point,json=insertionPoint" json:"insertion_point,omitempty"` + // The file contents. + Content *string `protobuf:"bytes,15,opt,name=content" json:"content,omitempty"` + // Information describing the file content being inserted. If an insertion + // point is used, this information will be appropriately offset and inserted + // into the code generation metadata for the generated files. + GeneratedCodeInfo *descriptorpb.GeneratedCodeInfo `protobuf:"bytes,16,opt,name=generated_code_info,json=generatedCodeInfo" json:"generated_code_info,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CodeGeneratorResponse_File) Reset() { + *x = CodeGeneratorResponse_File{} + mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CodeGeneratorResponse_File) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CodeGeneratorResponse_File) ProtoMessage() {} + +func (x *CodeGeneratorResponse_File) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_compiler_plugin_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CodeGeneratorResponse_File.ProtoReflect.Descriptor instead. +func (*CodeGeneratorResponse_File) Descriptor() ([]byte, []int) { + return file_google_protobuf_compiler_plugin_proto_rawDescGZIP(), []int{2, 0} +} + +func (x *CodeGeneratorResponse_File) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *CodeGeneratorResponse_File) GetInsertionPoint() string { + if x != nil && x.InsertionPoint != nil { + return *x.InsertionPoint + } + return "" +} + +func (x *CodeGeneratorResponse_File) GetContent() string { + if x != nil && x.Content != nil { + return *x.Content + } + return "" +} + +func (x *CodeGeneratorResponse_File) GetGeneratedCodeInfo() *descriptorpb.GeneratedCodeInfo { + if x != nil { + return x.GeneratedCodeInfo + } + return nil +} + +var File_google_protobuf_compiler_plugin_proto protoreflect.FileDescriptor + +const file_google_protobuf_compiler_plugin_proto_rawDesc = "" + + "\n" + + "%google/protobuf/compiler/plugin.proto\x12\x18google.protobuf.compiler\x1a google/protobuf/descriptor.proto\"c\n" + + "\aVersion\x12\x14\n" + + "\x05major\x18\x01 \x01(\x05R\x05major\x12\x14\n" + + "\x05minor\x18\x02 \x01(\x05R\x05minor\x12\x14\n" + + "\x05patch\x18\x03 \x01(\x05R\x05patch\x12\x16\n" + + "\x06suffix\x18\x04 \x01(\tR\x06suffix\"\xcf\x02\n" + + "\x14CodeGeneratorRequest\x12(\n" + + "\x10file_to_generate\x18\x01 \x03(\tR\x0efileToGenerate\x12\x1c\n" + + "\tparameter\x18\x02 \x01(\tR\tparameter\x12C\n" + + "\n" + + "proto_file\x18\x0f \x03(\v2$.google.protobuf.FileDescriptorProtoR\tprotoFile\x12\\\n" + + "\x17source_file_descriptors\x18\x11 \x03(\v2$.google.protobuf.FileDescriptorProtoR\x15sourceFileDescriptors\x12L\n" + + "\x10compiler_version\x18\x03 \x01(\v2!.google.protobuf.compiler.VersionR\x0fcompilerVersion\"\x85\x04\n" + + "\x15CodeGeneratorResponse\x12\x14\n" + + "\x05error\x18\x01 \x01(\tR\x05error\x12-\n" + + "\x12supported_features\x18\x02 \x01(\x04R\x11supportedFeatures\x12'\n" + + "\x0fminimum_edition\x18\x03 \x01(\x05R\x0eminimumEdition\x12'\n" + + "\x0fmaximum_edition\x18\x04 \x01(\x05R\x0emaximumEdition\x12H\n" + + "\x04file\x18\x0f \x03(\v24.google.protobuf.compiler.CodeGeneratorResponse.FileR\x04file\x1a\xb1\x01\n" + + "\x04File\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12'\n" + + "\x0finsertion_point\x18\x02 \x01(\tR\x0einsertionPoint\x12\x18\n" + + "\acontent\x18\x0f \x01(\tR\acontent\x12R\n" + + "\x13generated_code_info\x18\x10 \x01(\v2\".google.protobuf.GeneratedCodeInfoR\x11generatedCodeInfo\"W\n" + + "\aFeature\x12\x10\n" + + "\fFEATURE_NONE\x10\x00\x12\x1b\n" + + "\x17FEATURE_PROTO3_OPTIONAL\x10\x01\x12\x1d\n" + + "\x19FEATURE_SUPPORTS_EDITIONS\x10\x02Br\n" + + "\x1ccom.google.protobuf.compilerB\fPluginProtosZ)google.golang.org/protobuf/types/pluginpb\xaa\x02\x18Google.Protobuf.Compiler" + +var ( + file_google_protobuf_compiler_plugin_proto_rawDescOnce sync.Once + file_google_protobuf_compiler_plugin_proto_rawDescData []byte +) + +func file_google_protobuf_compiler_plugin_proto_rawDescGZIP() []byte { + file_google_protobuf_compiler_plugin_proto_rawDescOnce.Do(func() { + file_google_protobuf_compiler_plugin_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_google_protobuf_compiler_plugin_proto_rawDesc), len(file_google_protobuf_compiler_plugin_proto_rawDesc))) + }) + return file_google_protobuf_compiler_plugin_proto_rawDescData +} + +var file_google_protobuf_compiler_plugin_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_google_protobuf_compiler_plugin_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_google_protobuf_compiler_plugin_proto_goTypes = []any{ + (CodeGeneratorResponse_Feature)(0), // 0: google.protobuf.compiler.CodeGeneratorResponse.Feature + (*Version)(nil), // 1: google.protobuf.compiler.Version + (*CodeGeneratorRequest)(nil), // 2: google.protobuf.compiler.CodeGeneratorRequest + (*CodeGeneratorResponse)(nil), // 3: google.protobuf.compiler.CodeGeneratorResponse + (*CodeGeneratorResponse_File)(nil), // 4: google.protobuf.compiler.CodeGeneratorResponse.File + (*descriptorpb.FileDescriptorProto)(nil), // 5: google.protobuf.FileDescriptorProto + (*descriptorpb.GeneratedCodeInfo)(nil), // 6: google.protobuf.GeneratedCodeInfo +} +var file_google_protobuf_compiler_plugin_proto_depIdxs = []int32{ + 5, // 0: google.protobuf.compiler.CodeGeneratorRequest.proto_file:type_name -> google.protobuf.FileDescriptorProto + 5, // 1: google.protobuf.compiler.CodeGeneratorRequest.source_file_descriptors:type_name -> google.protobuf.FileDescriptorProto + 1, // 2: google.protobuf.compiler.CodeGeneratorRequest.compiler_version:type_name -> google.protobuf.compiler.Version + 4, // 3: google.protobuf.compiler.CodeGeneratorResponse.file:type_name -> google.protobuf.compiler.CodeGeneratorResponse.File + 6, // 4: google.protobuf.compiler.CodeGeneratorResponse.File.generated_code_info:type_name -> google.protobuf.GeneratedCodeInfo + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name +} + +func init() { file_google_protobuf_compiler_plugin_proto_init() } +func file_google_protobuf_compiler_plugin_proto_init() { + if File_google_protobuf_compiler_plugin_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_google_protobuf_compiler_plugin_proto_rawDesc), len(file_google_protobuf_compiler_plugin_proto_rawDesc)), + NumEnums: 1, + NumMessages: 4, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_google_protobuf_compiler_plugin_proto_goTypes, + DependencyIndexes: file_google_protobuf_compiler_plugin_proto_depIdxs, + EnumInfos: file_google_protobuf_compiler_plugin_proto_enumTypes, + MessageInfos: file_google_protobuf_compiler_plugin_proto_msgTypes, + }.Build() + File_google_protobuf_compiler_plugin_proto = out.File + file_google_protobuf_compiler_plugin_proto_goTypes = nil + file_google_protobuf_compiler_plugin_proto_depIdxs = nil +} diff --git a/Nakama+Hiro/vendor/modules.txt b/Nakama+Hiro/vendor/modules.txt new file mode 100644 index 0000000..76f3d3c --- /dev/null +++ b/Nakama+Hiro/vendor/modules.txt @@ -0,0 +1,54 @@ +# github.com/heroiclabs/hiro v1.28.0 +## explicit; go 1.25.0 +github.com/heroiclabs/hiro +# github.com/heroiclabs/nakama-common v1.42.0 +## explicit; go 1.25.0 +github.com/heroiclabs/nakama-common/api +github.com/heroiclabs/nakama-common/rtapi +github.com/heroiclabs/nakama-common/runtime +# google.golang.org/protobuf v1.36.8 +## explicit; go 1.23 +google.golang.org/protobuf/cmd/protoc-gen-go +google.golang.org/protobuf/cmd/protoc-gen-go/internal_gengo +google.golang.org/protobuf/compiler/protogen +google.golang.org/protobuf/encoding/protojson +google.golang.org/protobuf/encoding/prototext +google.golang.org/protobuf/encoding/protowire +google.golang.org/protobuf/internal/descfmt +google.golang.org/protobuf/internal/descopts +google.golang.org/protobuf/internal/detrand +google.golang.org/protobuf/internal/editiondefaults +google.golang.org/protobuf/internal/editionssupport +google.golang.org/protobuf/internal/encoding/defval +google.golang.org/protobuf/internal/encoding/json +google.golang.org/protobuf/internal/encoding/messageset +google.golang.org/protobuf/internal/encoding/tag +google.golang.org/protobuf/internal/encoding/text +google.golang.org/protobuf/internal/errors +google.golang.org/protobuf/internal/filedesc +google.golang.org/protobuf/internal/filetype +google.golang.org/protobuf/internal/flags +google.golang.org/protobuf/internal/genid +google.golang.org/protobuf/internal/impl +google.golang.org/protobuf/internal/msgfmt +google.golang.org/protobuf/internal/order +google.golang.org/protobuf/internal/pragma +google.golang.org/protobuf/internal/protolazy +google.golang.org/protobuf/internal/set +google.golang.org/protobuf/internal/strs +google.golang.org/protobuf/internal/version +google.golang.org/protobuf/proto +google.golang.org/protobuf/reflect/protodesc +google.golang.org/protobuf/reflect/protopath +google.golang.org/protobuf/reflect/protorange +google.golang.org/protobuf/reflect/protoreflect +google.golang.org/protobuf/reflect/protoregistry +google.golang.org/protobuf/runtime/protoiface +google.golang.org/protobuf/runtime/protoimpl +google.golang.org/protobuf/types/descriptorpb +google.golang.org/protobuf/types/dynamicpb +google.golang.org/protobuf/types/gofeaturespb +google.golang.org/protobuf/types/known/structpb +google.golang.org/protobuf/types/known/timestamppb +google.golang.org/protobuf/types/known/wrapperspb +google.golang.org/protobuf/types/pluginpb diff --git a/UnityHiroInventory/.gitignore b/UnityHiroInventory/.gitignore new file mode 100644 index 0000000..ccf423b --- /dev/null +++ b/UnityHiroInventory/.gitignore @@ -0,0 +1,56 @@ + +# Created by https://www.gitignore.io/api/unity +# Edit at https://www.gitignore.io/?templates=unity + +# Jetbrain Rider Cache +.idea/ +Assets/Plugins/Editor/JetBrains* + +# Visual Studio Code +.vscode/ + + +### Unity ### +/[Ll]ibrary/ +/[Tt]emp/ +/[Oo]bj/ +/[Bb]uild/ +/[Bb]uilds/ +/[Ll]ogs/ +/[Uu]ser[Ss]ettings/ +Assets/AssetStoreTools* +# Unity local user project setting +UserSettings/ + +# Visual Studio cache directory +.vs/ + +# Autogenerated VS/MD/Consulo solution and project files +ExportedObj/ +.consulo/ +*.csproj +*.unityproj +*.sln +*.suo +*.tmp +*.user +*.userprefs +*.pidb +*.booproj +*.svd +*.pdb +*.opendb +*.VC.db + +# Unity3D generated meta files +*.pidb.meta +*.pdb.meta + +# Unity3D Generated File On Crash Reports +sysinfo.txt + +# Builds +*.apk +*.unitypackage + +# End of https://www.gitignore.io/api/unity \ No newline at end of file diff --git a/UnityHiroInventory/Assets/UnityHiroInventory.meta b/UnityHiroInventory/Assets/UnityHiroInventory.meta new file mode 100644 index 0000000..6daece2 --- /dev/null +++ b/UnityHiroInventory/Assets/UnityHiroInventory.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 051a355ed4cf14deb84f9c89447ad30e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityHiroInventory/Assets/UnityHiroInventory/Editor.meta b/UnityHiroInventory/Assets/UnityHiroInventory/Editor.meta new file mode 100644 index 0000000..8504a2c --- /dev/null +++ b/UnityHiroInventory/Assets/UnityHiroInventory/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dd78068405c264cd6beb0ee55cfa0eda +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityHiroInventory/Assets/UnityHiroInventory/Editor/AccountSwitcher.cs b/UnityHiroInventory/Assets/UnityHiroInventory/Editor/AccountSwitcher.cs new file mode 100644 index 0000000..5b80a37 --- /dev/null +++ b/UnityHiroInventory/Assets/UnityHiroInventory/Editor/AccountSwitcher.cs @@ -0,0 +1,205 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Nakama; +using Hiro; +using Hiro.Unity; +using UnityEditor; +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEngine.UIElements; + +namespace HiroInventory.Editor +{ + public class AccountSwitcherEditor : EditorWindow + { + [SerializeField] private VisualTreeAsset tree; + + private DropdownField accountDropdown; + private Label usernamesLabel; + + private readonly SortedDictionary accountUsernames = new(); + + private const string AccountUsernamesKey = "AccountSwitcher_Usernames"; + + [MenuItem("Tools/Nakama/Account Switcher")] + public static void ShowWindow() + { + var inspectorType = typeof(UnityEditor.Editor).Assembly.GetType("UnityEditor.InspectorWindow"); + var window = GetWindow("Account Switcher", inspectorType); + + window.Focus(); + } + + [MenuItem("Tools/Nakama/Clear Test Accounts")] + public static void ClearSavedAccounts() + { + EditorPrefs.DeleteKey(AccountUsernamesKey); + Debug.Log("Cleared all saved account usernames"); + + // Refresh any open Account Switcher windows + var windows = Resources.FindObjectsOfTypeAll(); + foreach (var window in windows) + { + window.accountUsernames.Clear(); + window.UpdateUsernameLabels(); + } + } + + private void CreateGUI() + { + tree.CloneTree(rootVisualElement); + + accountDropdown = rootVisualElement.Q("account-dropdown"); + accountDropdown.RegisterValueChangedCallback(SwitchAccount); + + usernamesLabel = rootVisualElement.Q