import "steammessages.proto";
import "dota_shared_enums.proto";
import "dota_gcmessages_common.proto";
import "dota_gcmessages_webapi.proto";
import "gcsdk_gcmessages.proto";
import "dota_gcmessages_common_lobby.proto";
import "dota_gcmessages_common_match_management.proto";
import "base_gcmessages.proto";
import "econ_gcmessages.proto";
import "valveextensions.proto";

option optimize_for = SPEED;
option cc_generic_services = false;

enum CMsgDOTARequestMatches_SkillLevel {
	CMsgDOTARequestMatches_SkillLevel_Any = 0;
	CMsgDOTARequestMatches_SkillLevel_Normal = 1;
	CMsgDOTARequestMatches_SkillLevel_High = 2;
	CMsgDOTARequestMatches_SkillLevel_VeryHigh = 3;
}

enum DOTA_WatchReplayType {
	DOTA_WATCH_REPLAY_NORMAL = 0;
	DOTA_WATCH_REPLAY_HIGHLIGHTS = 1;
}

enum EItemEditorReservationResult {
	k_EItemEditorReservationResult_OK = 1;
	k_EItemEditorReservationResult_AlreadyExists = 2;
	k_EItemEditorReservationResult_Reserved = 3;
	k_EItemEditorReservationResult_TimedOut = 4;
}

enum EWeekendTourneyRichPresenceEvent {
	k_EWeekendTourneyRichPresenceEvent_None = 0;
	k_EWeekendTourneyRichPresenceEvent_StartedMatch = 1;
	k_EWeekendTourneyRichPresenceEvent_WonMatch = 2;
	k_EWeekendTourneyRichPresenceEvent_Eliminated = 3;
}

enum EDOTATriviaAnswerResult {
	k_EDOTATriviaAnswerResult_Success = 0;
	k_EDOTATriviaAnswerResult_InvalidQuestion = 1;
	k_EDOTATriviaAnswerResult_InvalidAnswer = 2;
	k_EDOTATriviaAnswerResult_QuestionLocked = 3;
	k_EDOTATriviaAnswerResult_AlreadyAnswered = 4;
	k_EDOTATriviaAnswerResult_TriviaDisabled = 5;
}

enum EPurchaseHeroRelicResult {
	k_EPurchaseHeroRelicResult_Success = 0;
	k_EPurchaseHeroRelicResult_FailedToSend = 1;
	k_EPurchaseHeroRelicResult_NotEnoughPoints = 2;
	k_EPurchaseHeroRelicResult_InternalServerError = 3;
	k_EPurchaseHeroRelicResult_PurchaseNotAllowed = 4;
	k_EPurchaseHeroRelicResult_InvalidRelic = 5;
	k_EPurchaseHeroRelicResult_AlreadyOwned = 6;
	k_EPurchaseHeroRelicResult_InvalidRarity = 7;
}

enum EDevEventRequestResult {
	k_EDevEventRequestResult_Success = 0;
	k_EDevEventRequestResult_NotAllowed = 1;
	k_EDevEventRequestResult_InvalidEvent = 2;
	k_EDevEventRequestResult_SqlFailure = 3;
	k_EDevEventRequestResult_Timeout = 4;
	k_EDevEventRequestResult_LockFailure = 5;
	k_EDevEventRequestResult_SDOLoadFailure = 6;
}

enum ESupportEventRequestResult {
	k_ESupportEventRequestResult_Success = 0;
	k_ESupportEventRequestResult_Timeout = 1;
	k_ESupportEventRequestResult_CantLockSOCache = 2;
	k_ESupportEventRequestResult_ItemNotInInventory = 3;
	k_ESupportEventRequestResult_InvalidItemDef = 4;
	k_ESupportEventRequestResult_InvalidEvent = 5;
	k_ESupportEventRequestResult_EventExpired = 6;
	k_ESupportEventRequestResult_InvalidSupportAccount = 7;
	k_ESupportEventRequestResult_InvalidSupportMessage = 8;
	k_ESupportEventRequestResult_InvalidEventPoints = 9;
	k_ESupportEventRequestResult_InvalidPremiumPoints = 10;
	k_ESupportEventRequestResult_InvalidActionID = 11;
	k_ESupportEventRequestResult_InvalidActionScore = 12;
	k_ESupportEventRequestResult_TransactionFailed = 13;
}

enum EUnderDraftResponse {
	k_eInternalError = 0;
	k_eSuccess = 1;
	k_eNoGold = 2;
	k_eInvalidSlot = 3;
	k_eNoBenchSpace = 4;
	k_eNoTickets = 5;
	k_eEventNotOwned = 6;
	k_eInvalidReward = 7;
	k_eHasBigReward = 8;
	k_eNoGCConnection = 9;
	k_eTooBusy = 10;
	k_eCantRollBack = 11;
}

enum EDOTADraftTriviaAnswerResult {
	k_EDOTADraftTriviaAnswerResult_Success = 0;
	k_EDOTADraftTriviaAnswerResult_InvalidMatchID = 1;
	k_EDOTADraftTriviaAnswerResult_AlreadyAnswered = 2;
	k_EDOTADraftTriviaAnswerResult_InternalError = 3;
	k_EDOTADraftTriviaAnswerResult_TriviaDisabled = 4;
	k_EDOTADraftTriviaAnswerResult_GCDown = 5;
}

message CMsgClientSuspended {
	optional uint32 time_end = 1;
}

message CMsgBalancedShuffleLobby {
}

message CMsgInitialQuestionnaireResponse {
	optional uint32 initial_skill = 1;
}

message CMsgDOTARequestMatchesResponse {
	message Series {
		repeated .CMsgDOTAMatch matches = 1;
		optional uint32 series_id = 2;
		optional uint32 series_type = 3;
	}

	repeated .CMsgDOTAMatch matches = 1;
	repeated .CMsgDOTARequestMatchesResponse.Series series = 2;
	optional uint32 request_id = 3;
	optional uint32 total_results = 4;
	optional uint32 results_remaining = 5;
}

message CMsgDOTAPopup {
	enum PopupID {
		NONE = -1;
		KICKED_FROM_LOBBY = 0;
		KICKED_FROM_PARTY = 1;
		KICKED_FROM_TEAM = 2;
		TEAM_WAS_DISBANDED = 3;
		TEAM_MATCHMAKE_ALREADY_MATCH = 4;
		TEAM_MATCHMAKE_ALREADY_FINDING = 5;
		TEAM_MATCHMAKE_FULL = 6;
		TEAM_MATCHMAKE_FAIL_ADD = 7;
		TEAM_MATCHMAKE_FAIL_ADD_CURRENT = 8;
		TEAM_MATCHMAKE_FAILED_TEAM_MEMBER = 9;
		TEAM_MATCHMAKE_ALREADY_GAME = 10;
		TEAM_MATCHMAKE_FAIL_GET_PARTY = 11;
		MATCHMAKING_DISABLED = 12;
		INVITE_DENIED = 13;
		PARTY_FULL = 14;
		MADE_ADMIN = 15;
		NEED_TO_PURCHASE = 16;
		SIGNON_MESSAGE = 17;
		MATCHMAKING_REGION_OFFLINE = 19;
		TOURNAMENT_GAME_NOT_FOUND = 21;
		TOURNAMENT_GAME_HAS_LOBBY_ID = 22;
		TOURNAMENT_GAME_HAS_MATCH_ID = 23;
		TOURNAMENT_GAME_HAS_NO_RADIANT_TEAM = 24;
		TOURNAMENT_GAME_HAS_NO_DIRE_TEAM = 25;
		TOURNAMENT_GAME_SQL_UPDATE_FAILED = 26;
		NOT_LEAGUE_ADMIN = 27;
		IN_ANOTHER_GAME = 29;
		PARTY_MEMBER_IN_ANOTHER_GAME = 30;
		PARTY_MEMBER_IN_LOW_PRIORITY = 31;
		CLIENT_OUT_OF_DATE = 32;
		SAVE_GAME_CORRUPT = 38;
		INSUFFICIENT_INGOTS = 39;
		COMPETITIVE_MM_NOT_ENOUGH_PLAY_TIME_PLAY_MORE_CASUAL = 42;
		PARTY_LEADER_JOINED_LOBBY = 44;
		WEEKEND_TOURNEY_UNMATCHED = 48;
		POST_MATCH_SURVEY = 49;
		TROPHY_AWARDED = 50;
		TROPHY_LEVEL_UP = 51;
		ALL_HERO_CHALLENGE_PROGRESS = 52;
		NEED_INITIAL_SKILL = 53;
		NEED_INITIAL_SKILL_IN_PARTY = 54;
		TARGET_ENGINE_MISMATCH = 55;
		VAC_NOT_VERIFIED = 56;
		KICKED_FROM_QUEUE_EVENT_STARTING = 57;
		KICKED_FROM_QUEUE_EVENT_ENDING = 58;
		LOBBY_FULL = 62;
		EVENT_POINTS_EARNED = 63;
		CUSTOM_GAME_INCORRECT_VERSION = 64;
		LIMITED_USER_CHAT = 66;
		EVENT_PREMIUM_POINTS_EARNED = 67;
		LOBBY_MVP_AWARDED = 68;
		LOW_BADGE_LEVEL_CHAT = 71;
		LOW_WINS_CHAT = 72;
		UNVERIFIED_USER_CHAT = 73;
		PARTY_STARTED_FINDING_EVENT_MATCH = 74;
		GENERIC_INFO = 69;
		GENERIC_ERROR = 70;
		RANK_TIER_UPDATED = 75;
		CUSTOM_GAME_COOLDOWN_RESTRICTED = 76;
		CREATE_LOBBY_FAILED_TOO_MUCH_PLAYTIME = 77;
		CUSTOM_GAME_TOO_FEW_GAMES = 78;
	}

	optional .CMsgDOTAPopup.PopupID id = 1 [default = NONE];
	optional string custom_text = 2;
	optional sint32 int_data = 3;
	optional bytes popup_data = 4;
	optional string loc_token_header = 5;
	optional string loc_token_msg = 6;
	repeated string var_names = 7;
	repeated string var_values = 8;
	optional string debug_text = 9;
}

message CMsgDOTAReportsRemainingRequest {
}

message CMsgDOTAReportsRemainingResponse {
	optional uint32 num_positive_reports_remaining = 1;
	optional uint32 num_negative_reports_remaining = 2;
	optional uint32 num_positive_reports_total = 3;
	optional uint32 num_negative_reports_total = 4;
	optional uint32 num_comms_reports_remaining = 5;
	optional uint32 num_comms_reports_total = 6;
}

message CMsgDOTASubmitPlayerReport {
	optional uint32 target_account_id = 1;
	optional uint32 report_flags = 2;
	optional uint64 lobby_id = 4;
	optional string comment = 5;
}

message CMsgDOTASubmitPlayerReportResponse {
	enum EResult {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eDuplicateReport = 2;
		k_eMixedReportFlags = 3;
		k_eTooLate = 4;
		k_eInvalidPregameReport = 5;
		k_eHasntChatted = 6;
		k_eInvalid = 7;
		k_eOwnership = 8;
		k_eMissingRequirements = 9;
		k_eInvalidRoleReport = 10;
		k_eInvalidCoachReport = 11;
		k_eNoRemainingReports = 12;
		k_eInvalidMember = 13;
	}

	optional uint32 target_account_id = 1;
	optional uint32 report_flags = 2;
	optional string debug_message = 4;
	optional .CMsgDOTASubmitPlayerReportResponse.EResult enum_result = 5 [default = k_eInternalError];
}

message CMsgDOTASubmitPlayerAvoidRequest {
	optional uint32 target_account_id = 1;
	optional uint64 lobby_id = 4;
	optional string user_note = 5;
}

message CMsgDOTASubmitPlayerAvoidRequestResponse {
	optional uint32 target_account_id = 1;
	optional uint32 result = 2;
	optional string debug_message = 3;
}

message CMsgDOTASubmitLobbyMVPVote {
	optional uint32 target_account_id = 1;
}

message CMsgDOTASubmitLobbyMVPVoteResponse {
	optional uint32 target_account_id = 1;
	optional uint32 eresult = 2;
}

message CMsgDOTALobbyMVPAwarded {
	optional uint64 match_id = 1;
	repeated uint32 mvp_account_id = 2;
}

message CMsgDOTAKickedFromMatchmakingQueue {
	optional .MatchType match_type = 1 [default = MATCH_TYPE_CASUAL];
}

message CMsgGCMatchDetailsRequest {
	optional uint64 match_id = 1;
}

message CMsgGCMatchDetailsResponse {
	optional uint32 result = 1;
	optional .CMsgDOTAMatch match = 2;
	optional .DOTAMatchVote vote = 3 [default = DOTAMatchVote_INVALID];
}

message CMsgDOTAProfileTickets {
	message LeaguePass {
		optional uint32 league_id = 1;
		optional uint32 item_def = 2;
	}

	optional uint32 result = 1;
	optional uint32 account_id = 2;
	repeated .CMsgDOTAProfileTickets.LeaguePass league_passes = 3;
}

message CMsgClientToGCGetProfileTickets {
	optional uint32 account_id = 1;
}

message CMsgGCToClientPartySearchInvites {
	repeated .CMsgGCToClientPartySearchInvite invites = 1;
}

message CMsgDOTAWelcome {
	message CExtraMsg {
		optional uint32 id = 1;
		optional bytes contents = 2;
	}

	optional uint32 store_item_hash = 5;
	optional uint32 timeplayedconsecutively = 6;
	optional bool allow_3rd_party_match_history = 7;
	optional uint32 last_ip_address = 13;
	optional bool profile_private = 17;
	optional uint32 currency = 18;
	optional bool should_request_player_origin = 20;
	optional uint32 gc_socache_file_version = 22;
	optional bool is_perfect_world_test_account = 24;
	repeated .CMsgDOTAWelcome.CExtraMsg extra_messages = 26;
	optional uint64 minimum_recent_item_id = 27;
	optional .EEvent active_event = 28 [default = EVENT_ID_NONE];
	optional uint32 additional_user_message = 29;
	optional uint32 custom_game_whitelist_version = 30;
	optional .CMsgGCToClientPartySearchInvites party_search_friend_invites = 31;
	optional int32 remaining_playtime = 32 [default = -1];
	optional bool disable_guild_persona_info = 33;
	repeated .CExtraMsgBlock extra_message_blocks = 34;
}

message CSODOTAGameHeroFavorites {
	optional uint32 account_id = 1 [(key_field) = true];
	optional uint32 hero_id = 2 [(key_field) = true];
}

message CMsgDOTAMatchVotes {
	message PlayerVote {
		optional uint32 account_id = 1;
		optional uint32 vote = 2;
	}

	optional uint64 match_id = 1;
	repeated .CMsgDOTAMatchVotes.PlayerVote votes = 2;
}

message CMsgMatchmakingMatchGroupInfo {
	optional uint32 players_searching = 1;
	optional sint32 auto_region_select_ping_penalty = 2;
	optional sint32 auto_region_select_ping_penalty_custom = 4;
	optional .EMatchGroupServerStatus status = 3 [default = k_EMatchGroupServerStatus_OK];
}

message CMsgDOTAMatchmakingStatsRequest {
}

message CMsgDOTAMatchmakingStatsResponse {
	optional uint32 matchgroups_version = 1;
	repeated uint32 legacy_searching_players_by_group_source2 = 7;
	repeated .CMsgMatchmakingMatchGroupInfo match_groups = 8;
}

message CMsgDOTAUpdateMatchmakingStats {
	optional .CMsgDOTAMatchmakingStatsResponse stats = 1;
}

message CMsgDOTAUpdateMatchManagementStats {
	optional .CMsgDOTAMatchmakingStatsResponse stats = 1;
}

message CMsgDOTASetMatchHistoryAccess {
	optional bool allow_3rd_party_match_history = 1;
}

message CMsgDOTASetMatchHistoryAccessResponse {
	optional uint32 eresult = 1 [default = 2];
}

message CMsgDOTANotifyAccountFlagsChange {
	optional uint32 accountid = 1;
	optional uint32 account_flags = 2;
}

message CMsgDOTASetProfilePrivacy {
	optional bool profile_private = 1;
}

message CMsgDOTASetProfilePrivacyResponse {
	optional uint32 eresult = 1;
}

message CMsgUpgradeLeagueItem {
	optional uint64 match_id = 1;
	optional uint32 league_id = 2;
}

message CMsgUpgradeLeagueItemResponse {
}

message CMsgGCWatchDownloadedReplay {
	optional uint64 match_id = 1;
	optional .DOTA_WatchReplayType watch_type = 2 [default = DOTA_WATCH_REPLAY_NORMAL];
}

message CMsgClientsRejoinChatChannels {
}

message CMsgGCGetHeroStandings {
}

message CMsgGCGetHeroStandingsResponse {
	message Hero {
		optional uint32 hero_id = 1;
		optional uint32 wins = 2;
		optional uint32 losses = 3;
		optional uint32 win_streak = 4;
		optional uint32 best_win_streak = 5;
		optional float avg_kills = 6;
		optional float avg_deaths = 7;
		optional float avg_assists = 8;
		optional float avg_gpm = 9;
		optional float avg_xpm = 10;
		optional uint32 best_kills = 11;
		optional uint32 best_assists = 12;
		optional uint32 best_gpm = 13;
		optional uint32 best_xpm = 14;
		optional float performance = 15;
		optional uint32 wins_with_ally = 16;
		optional uint32 losses_with_ally = 17;
		optional uint32 wins_against_enemy = 18;
		optional uint32 losses_against_enemy = 19;
		optional uint32 networth_peak = 20;
		optional uint32 lasthit_peak = 21;
		optional uint32 deny_peak = 22;
		optional uint32 damage_peak = 23;
		optional uint32 longest_game_peak = 24;
		optional uint32 healing_peak = 25;
		optional float avg_lasthits = 26;
		optional float avg_denies = 27;
	}

	repeated .CMsgGCGetHeroStandingsResponse.Hero standings = 1;
}

message CMatchPlayerTimedStatAverages {
	optional float kills = 2;
	optional float deaths = 3;
	optional float assists = 4;
	optional float net_worth = 5;
	optional float last_hits = 6;
	optional float denies = 7;
	optional float item_value = 8;
	optional float support_gold_spent = 9;
	optional float camps_stacked = 10;
	optional float wards_placed = 11;
	optional float dewards = 12;
	optional float triple_kills = 13;
	optional float rampages = 14;
}

message CMatchPlayerTimedStatStdDeviations {
	optional float kills = 2 [default = 1];
	optional float deaths = 3 [default = 1];
	optional float assists = 4 [default = 1];
	optional float net_worth = 5 [default = 1];
	optional float last_hits = 6 [default = 1];
	optional float denies = 7 [default = 1];
	optional float item_value = 8 [default = 1];
	optional float support_gold_spent = 9 [default = 1];
	optional float camps_stacked = 10 [default = 1];
	optional float wards_placed = 11 [default = 1];
	optional float dewards = 12 [default = 1];
	optional float triple_kills = 13 [default = 1];
	optional float rampages = 14 [default = 1];
}

message CMsgGCGetHeroTimedStatsResponse {
	message TimedStatsContainer {
		optional uint32 time = 1;
		optional .CMatchPlayerTimedStatAverages all_stats = 2;
		optional .CMatchPlayerTimedStatAverages winning_stats = 3;
		optional .CMatchPlayerTimedStatAverages losing_stats = 4;
		optional .CMatchPlayerTimedStatStdDeviations winning_stddevs = 5;
		optional .CMatchPlayerTimedStatStdDeviations losing_stddevs = 6;
	}

	message RankChunkedStats {
		optional uint32 rank_chunk = 1;
		repeated .CMsgGCGetHeroTimedStatsResponse.TimedStatsContainer timed_stats = 2;
	}

	optional uint32 hero_id = 1;
	repeated .CMsgGCGetHeroTimedStatsResponse.RankChunkedStats rank_chunked_stats = 2;
}

message CMsgHeroRoleStats {
	optional uint32 lane_selection_flags = 1;
	optional uint32 match_count = 2;
	optional uint32 win_count = 3;
}

message CMsgHeroRoleHeroStats {
	optional uint32 hero_id = 1;
	repeated .CMsgHeroRoleStats role_stats = 2;
}

message CMsgHeroRoleRankStats {
	optional uint32 rank_tier = 1;
	repeated .CMsgHeroRoleHeroStats hero_stats = 2;
}

message CMsgHeroRoleAllRanksStats {
	optional uint32 start_timestamp = 1;
	optional uint32 end_timestamp = 2;
	repeated .CMsgHeroRoleRankStats rank_stats = 3;
}

message CMsgGCItemEditorReservationsRequest {
}

message CMsgGCItemEditorReservation {
	optional uint32 def_index = 1;
	optional string name = 2;
}

message CMsgGCItemEditorReservationsResponse {
	repeated .CMsgGCItemEditorReservation reservations = 1;
}

message CMsgGCItemEditorReserveItemDef {
	optional uint32 def_index = 1;
	optional string username = 2;
}

message CMsgGCItemEditorReserveItemDefResponse {
	optional uint32 def_index = 1;
	optional string username = 2;
	optional uint32 result = 3;
}

message CMsgGCItemEditorReleaseReservation {
	optional uint32 def_index = 1;
	optional string username = 2;
}

message CMsgGCItemEditorReleaseReservationResponse {
	optional uint32 def_index = 1;
	optional bool released = 2;
}

message CMsgDOTARewardTutorialPrizes {
	optional uint32 location_id = 1;
	optional bool tracking_only = 2;
}

message CMsgFlipLobbyTeams {
}

message CMsgGCLobbyUpdateBroadcastChannelInfo {
	optional uint32 channel_id = 1;
	optional string country_code = 2;
	optional string description = 3;
	optional string language_code = 4;
}

message CMsgDOTAClaimEventActionData {
	message GrantItemGiftData {
		optional uint32 give_to_account_id = 1;
		optional string gift_message = 2;
	}

	optional .CMsgDOTAClaimEventActionData.GrantItemGiftData grant_item_gift_data = 4;
}

message CMsgDOTAClaimEventAction {
	optional uint32 event_id = 1;
	optional uint32 action_id = 2;
	optional uint32 quantity = 3;
	optional .CMsgDOTAClaimEventActionData data = 4;
}

message CMsgDOTAClaimEventActionResponse {
	message MysteryItemRewardData {
		optional uint32 item_def = 1;
		optional uint32 item_category = 2;
	}

	message LootListRewardData {
		repeated uint32 item_def = 1;
	}

	message ActionListRewardData {
		optional uint32 action_id = 1;
		optional bytes result_reward_data = 2;
	}

	message GrantedRewardData {
		optional uint32 grant_index = 1;
		optional uint32 score_index = 2;
		optional uint32 reward_index = 3;
		optional bytes reward_data = 4;
	}

	enum ResultCode {
		Success = 0;
		InvalidEvent = 1;
		EventNotActive = 2;
		InvalidAction = 3;
		ServerError = 4;
		InsufficientPoints = 5;
		InsufficentLevel = 6;
		AlreadyClaimed = 7;
		SDOLockFailure = 8;
		SDOLoadFailure = 9;
		EventNotOwned = 10;
		Timeout = 11;
		RequiresPlusSubscription = 12;
		InvalidItem = 13;
		AsyncRewards = 14;
	}

	optional .CMsgDOTAClaimEventActionResponse.ResultCode result = 1 [default = Success];
	repeated .CMsgDOTAClaimEventActionResponse.GrantedRewardData reward_results = 2;
}

message CMsgClientToGCClaimEventActionUsingItem {
	optional uint32 event_id = 1;
	optional uint32 action_id = 2;
	optional uint64 item_id = 3;
	optional uint32 quantity = 4;
}

message CMsgClientToGCClaimEventActionUsingItemResponse {
	optional .CMsgDOTAClaimEventActionResponse action_results = 1;
}

message CMsgGCToClientClaimEventActionUsingItemCompleted {
	optional uint64 item_id = 1;
	optional .CMsgDOTAClaimEventActionResponse action_results = 2;
}

message CMsgDOTAGetEventPoints {
	optional uint32 event_id = 1;
	optional uint32 account_id = 2;
}

message CMsgDOTAGetEventPointsResponse {
	message Action {
		optional uint32 action_id = 1;
		optional uint32 times_completed = 2 [default = 1];
	}

	optional uint32 total_points = 1;
	optional uint32 total_premium_points = 2;
	optional uint32 event_id = 3;
	optional uint32 points = 4;
	optional uint32 premium_points = 5;
	repeated .CMsgDOTAGetEventPointsResponse.Action completed_actions = 6;
	optional uint32 account_id = 7;
	optional bool owned = 8;
	optional uint32 audit_action = 9;
	optional uint32 active_season_id = 10;
}

message CMsgDOTAGetPeriodicResource {
	optional uint32 account_id = 1;
	optional uint32 periodic_resource_id = 2;
	optional uint32 timestamp = 3;
}

message CMsgDOTAGetPeriodicResourceResponse {
	optional uint32 periodic_resource_max = 1;
	optional uint32 periodic_resource_used = 2;
}

message CMsgDOTAPeriodicResourceUpdated {
	optional .CMsgDOTAGetPeriodicResource periodic_resource_key = 1;
	optional .CMsgDOTAGetPeriodicResourceResponse periodic_resource_value = 2;
}

message CMsgDOTACompendiumSelection {
	optional uint32 selection_index = 1;
	optional uint32 selection = 2;
	optional uint32 leagueid = 3;
}

message CMsgDOTACompendiumSelectionResponse {
	optional uint32 eresult = 1 [default = 2];
}

message CMsgDOTACompendiumData {
	repeated .CMsgDOTACompendiumSelection selections = 1;
}

message CMsgDOTACompendiumDataRequest {
	optional uint32 account_id = 1;
	optional uint32 leagueid = 2;
}

message CMsgDOTACompendiumDataResponse {
	optional uint32 account_id = 1;
	optional uint32 leagueid = 2;
	optional uint32 result = 3 [default = 2];
	optional .CMsgDOTACompendiumData compendium_data = 4;
}

message CMsgDOTAGetPlayerMatchHistory {
	optional uint32 account_id = 1;
	optional uint64 start_at_match_id = 2;
	optional uint32 matches_requested = 3;
	optional uint32 hero_id = 4;
	optional uint32 request_id = 5;
	optional bool include_practice_matches = 7;
	optional bool include_custom_games = 8;
	optional bool include_event_games = 9;
}

message CMsgDOTAGetPlayerMatchHistoryResponse {
	message Match {
		optional uint64 match_id = 1;
		optional uint32 start_time = 2;
		optional uint32 hero_id = 3;
		optional bool winner = 4;
		optional uint32 game_mode = 5;
		optional int32 rank_change = 6;
		optional uint32 previous_rank = 7;
		optional uint32 lobby_type = 8;
		optional bool solo_rank = 9;
		optional bool abandon = 10;
		optional uint32 duration = 11;
		optional uint32 engine = 12;
		optional bool active_plus_subscription = 13;
		optional bool seasonal_rank = 14;
		optional uint32 tourney_id = 15;
		optional uint32 tourney_round = 16;
		optional uint32 tourney_tier = 17;
		optional uint32 tourney_division = 18;
		optional uint32 team_id = 19;
		optional string team_name = 20;
		optional uint64 ugc_team_ui_logo = 21;
	}

	repeated .CMsgDOTAGetPlayerMatchHistoryResponse.Match matches = 1;
	optional uint32 request_id = 2;
}

message CMsgGCNotificationsRequest {
}

message CMsgGCNotifications_Notification {
	optional uint64 id = 1;
	optional uint32 type = 2;
	optional uint32 timestamp = 3;
	optional uint32 reference_a = 4;
	optional uint32 reference_b = 5;
	optional uint32 reference_c = 6;
	optional string message = 7;
	optional bool unread = 8;
}

message CMsgGCNotificationsUpdate {
	enum EResult {
		SUCCESS = 0;
		ERROR_UNSPECIFIED = 1;
	}

	optional .CMsgGCNotificationsUpdate.EResult result = 1 [default = SUCCESS];
	repeated .CMsgGCNotifications_Notification notifications = 2;
}

message CMsgGCNotificationsResponse {
	optional .CMsgGCNotificationsUpdate update = 1;
}

message CMsgGCNotificationsMarkReadRequest {
}

message CMsgGCPlayerInfoSubmit {
	optional string name = 1;
	optional string country_code = 2;
	optional uint32 fantasy_role = 3;
	optional uint32 team_id = 4;
	optional string sponsor = 5;
}

message CMsgGCPlayerInfoSubmitResponse {
	enum EResult {
		SUCCESS = 0;
		ERROR_UNSPECIFIED = 1;
		ERROR_INFO_LOCKED = 2;
		ERROR_NOT_MEMBER_OF_TEAM = 3;
	}

	optional .CMsgGCPlayerInfoSubmitResponse.EResult result = 1 [default = SUCCESS];
}

message CMsgDOTAEmoticonAccessSDO {
	optional uint32 account_id = 1;
	optional bytes unlocked_emoticons = 2;
}

message CMsgClientToGCEmoticonDataRequest {
}

message CMsgGCToClientEmoticonData {
	optional .CMsgDOTAEmoticonAccessSDO emoticon_access = 1;
}

message CMsgGCToClientTournamentItemDrop {
	optional uint32 item_def = 1;
	optional uint32 event_type = 2;
}

message CMsgClientToGCGetAllHeroOrder {
}

message CMsgClientToGCGetAllHeroOrderResponse {
	repeated uint32 hero_ids = 1;
}

message CMsgClientToGCGetAllHeroProgress {
	optional uint32 account_id = 1;
}

message CMsgClientToGCGetAllHeroProgressResponse {
	optional uint32 account_id = 1;
	optional uint32 curr_hero_id = 2;
	optional uint32 laps_completed = 3;
	optional uint32 curr_hero_games = 4;
	optional uint32 curr_lap_time_started = 5;
	optional uint32 curr_lap_games = 6;
	optional uint32 best_lap_games = 7;
	optional uint32 best_lap_time = 8;
	optional uint32 lap_heroes_completed = 9;
	optional uint32 lap_heroes_remaining = 10;
	optional uint32 next_hero_id = 11;
	optional uint32 prev_hero_id = 12;
	optional uint32 prev_hero_games = 13;
	optional float prev_avg_tries = 14;
	optional float curr_avg_tries = 15;
	optional float next_avg_tries = 16;
	optional float full_lap_avg_tries = 17;
	optional float curr_lap_avg_tries = 18;
	optional string profile_name = 19;
	optional uint32 start_hero_id = 20;
}

message CMsgClientToGCGetTrophyList {
	optional uint32 account_id = 1;
}

message CMsgClientToGCGetTrophyListResponse {
	message Trophy {
		optional uint32 trophy_id = 1;
		optional uint32 trophy_score = 2;
		optional uint32 last_updated = 3;
	}

	repeated .CMsgClientToGCGetTrophyListResponse.Trophy trophies = 2;
}

message CMsgGCToClientTrophyAwarded {
	optional uint32 trophy_id = 1;
	optional uint32 trophy_score = 2;
	optional uint32 trophy_old_score = 3;
	optional uint32 last_updated = 4;
}

message CMsgClientToGCGetProfileCard {
	optional uint32 account_id = 1;
}

message CMsgClientToGCSetProfileCardSlots {
	message CardSlot {
		optional uint32 slot_id = 1;
		optional .EProfileCardSlotType slot_type = 2 [default = k_EProfileCardSlotType_Empty];
		optional uint64 slot_value = 3;
	}

	repeated .CMsgClientToGCSetProfileCardSlots.CardSlot slots = 1;
}

message CMsgClientToGCGetProfileCardStats {
}

message CMsgClientToGCCreateHeroStatue {
	optional uint64 source_item_id = 1;
	optional uint32 hero_id = 3;
	optional string sequence_name = 4;
	optional float cycle = 5;
	repeated uint32 wearables = 6;
	optional string inscription = 7;
	repeated uint32 styles = 8;
	optional uint64 reforger_item_id = 9;
	optional bool tournament_drop = 10;
}

message CMsgGCToClientHeroStatueCreateResult {
	optional uint64 resulting_item_id = 1;
}

message CMsgClientToGCPlayerStatsRequest {
	optional uint32 account_id = 1;
}

message CMsgGCToClientPlayerStatsResponse {
	optional uint32 account_id = 1;
	repeated float player_stats = 2;
	optional uint32 match_count = 3;
	optional float mean_gpm = 4;
	optional float mean_xppm = 5;
	optional float mean_lasthits = 6;
	optional uint32 rampages = 7;
	optional uint32 triple_kills = 8;
	optional uint32 first_blood_claimed = 9;
	optional uint32 first_blood_given = 10;
	optional uint32 couriers_killed = 11;
	optional uint32 aegises_snatched = 12;
	optional uint32 cheeses_eaten = 13;
	optional uint32 creeps_stacked = 14;
	optional float fight_score = 15;
	optional float farm_score = 16;
	optional float support_score = 17;
	optional float push_score = 18;
	optional float versatility_score = 19;
	optional float mean_networth = 20;
	optional float mean_damage = 21;
	optional float mean_heals = 22;
	optional uint32 rapiers_purchased = 23;
}

message CMsgClientToGCCustomGamesFriendsPlayedRequest {
}

message CMsgGCToClientCustomGamesFriendsPlayedResponse {
	message CustomGame {
		optional uint64 custom_game_id = 1;
		repeated uint32 account_ids = 2;
	}

	optional uint32 account_id = 1;
	repeated .CMsgGCToClientCustomGamesFriendsPlayedResponse.CustomGame games = 2;
}

message CMsgClientToGCSocialFeedPostCommentRequest {
	optional uint64 event_id = 1;
	optional string comment = 2;
}

message CMsgGCToClientSocialFeedPostCommentResponse {
	optional bool success = 1;
}

message CMsgClientToGCSocialFeedPostMessageRequest {
	optional string message = 1;
	optional uint64 match_id = 2;
	optional uint32 match_timestamp = 3;
}

message CMsgGCToClientSocialFeedPostMessageResponse {
	optional bool success = 1;
}

message CMsgClientToGCFriendsPlayedCustomGameRequest {
	optional uint64 custom_game_id = 1;
}

message CMsgGCToClientFriendsPlayedCustomGameResponse {
	optional uint64 custom_game_id = 1;
	repeated uint32 account_ids = 2;
}

message CMsgDOTAPartyRichPresence {
	message Member {
		optional fixed64 steam_id = 1;
		optional bool coach = 2;
	}

	message WeekendTourney {
		optional uint32 division = 1;
		optional uint32 skill_level = 2;
		optional uint32 round = 3;
		optional uint32 tournament_id = 4;
		optional uint32 state_seq_num = 5;
		optional .EWeekendTourneyRichPresenceEvent event = 6 [default = k_EWeekendTourneyRichPresenceEvent_None];
		optional uint32 event_round = 7;
	}

	optional fixed64 party_id = 1;
	optional .CSODOTAParty.State party_state = 2 [default = UI];
	optional bool open = 3;
	optional bool low_priority = 5;
	optional uint32 team_id = 7;
	optional string team_name = 8;
	optional uint64 ugc_team_ui_logo = 9;
	repeated .CMsgDOTAPartyRichPresence.Member members = 4;
	optional .CMsgDOTAPartyRichPresence.WeekendTourney weekend_tourney = 6;
}

message CMsgDOTALobbyRichPresence {
	optional fixed64 lobby_id = 1;
	optional .CSODOTALobby.State lobby_state = 2 [default = UI];
	optional bool password = 3;
	optional .DOTA_GameMode game_mode = 4 [default = DOTA_GAMEMODE_NONE];
	optional uint32 member_count = 5;
	optional uint32 max_member_count = 6;
	optional fixed64 custom_game_id = 7;
	optional string name = 8;
	optional uint32 lobby_type = 9;
}

message CMsgDOTACustomGameListenServerStartedLoading {
	optional fixed64 lobby_id = 1;
	optional uint64 custom_game_id = 2;
	repeated uint32 lobby_members = 3;
	optional uint32 start_time = 4;
}

message CMsgDOTACustomGameClientFinishedLoading {
	optional fixed64 lobby_id = 1;
	optional uint32 loading_duration = 2;
	optional sint32 result_code = 3;
	optional string result_string = 4;
	optional uint32 signon_states = 5;
	optional string comment = 6;
}

message CMsgClientToGCApplyGemCombiner {
	optional uint64 item_id_1 = 1;
	optional uint64 item_id_2 = 2;
}

message CMsgClientToGCH264Unsupported {
}

message CMsgClientToGCGetQuestProgress {
	repeated uint32 quest_ids = 1;
}

message CMsgClientToGCGetQuestProgressResponse {
	message Challenge {
		optional uint32 challenge_id = 1;
		optional uint32 time_completed = 2;
		optional uint32 attempts = 3;
		optional uint32 hero_id = 4;
		optional uint32 template_id = 5;
		optional uint32 quest_rank = 6;
	}

	message Quest {
		optional uint32 quest_id = 1;
		repeated .CMsgClientToGCGetQuestProgressResponse.Challenge completed_challenges = 2;
	}

	optional bool success = 1;
	repeated .CMsgClientToGCGetQuestProgressResponse.Quest quests = 2;
}

message CMsgGCToClientMatchSignedOut {
	optional uint64 match_id = 1;
}

message CMsgGCGetHeroStatsHistory {
	optional uint32 hero_id = 1;
}

message CMsgGCGetHeroStatsHistoryResponse {
	optional uint32 hero_id = 1;
	repeated .CMsgDOTASDOHeroStatsHistory records = 2;
}

message CMsgPlayerConductScorecardRequest {
}

message CMsgPlayerConductScorecard {
	enum EBehaviorRating {
		k_eBehaviorGood = 0;
		k_eBehaviorWarning = 1;
		k_eBehaviorBad = 2;
	}

	optional uint32 account_id = 1;
	optional uint64 match_id = 2;
	optional uint32 seq_num = 3;
	optional uint32 reasons = 4;
	optional uint32 matches_in_report = 5;
	optional uint32 matches_clean = 6;
	optional uint32 matches_reported = 7;
	optional uint32 matches_abandoned = 8;
	optional uint32 reports_count = 9;
	optional uint32 reports_parties = 10;
	optional uint32 commend_count = 11;
	optional uint32 date = 14;
	optional uint32 raw_behavior_score = 17;
	optional uint32 old_raw_behavior_score = 18;
	optional uint32 comms_reports = 19;
	optional uint32 comms_parties = 20;
	optional .CMsgPlayerConductScorecard.EBehaviorRating behavior_rating = 21 [default = k_eBehaviorGood];
}

message CMsgClientToGCWageringRequest {
	optional uint32 event_id = 1;
}

message CMsgGCToClientWageringResponse {
	optional uint32 coins_remaining = 1;
	optional uint32 total_points_won = 2;
	optional uint32 total_points_wagered = 3;
	optional uint32 total_points_tipped = 4;
	optional uint32 success_rate = 5;
	optional uint32 total_games_wagered = 6;
	optional uint32 coins_max = 7;
	optional uint32 rank_wagers_remaining = 8;
	optional uint32 rank_wagers_max = 9;
	optional uint32 prediction_tokens_remaining = 10;
	optional uint32 prediction_tokens_max = 11;
	optional uint32 bounties_remaining = 12;
	optional uint32 bounties_max = 13;
}

message CMsgGCToClientWageringUpdate {
	optional uint32 event_id = 1;
	optional .CMsgGCToClientWageringResponse wagering_info = 2;
}

message CMsgGCToClientArcanaVotesUpdate {
	optional uint32 event_id = 1;
	optional .CMsgClientToGCRequestArcanaVotesRemainingResponse arcana_votes = 2;
}

message CMsgClientToGCGetEventGoals {
	repeated .EEvent event_ids = 1;
}

message CMsgEventGoals {
	message EventGoal {
		optional .EEvent event_id = 1 [default = EVENT_ID_NONE];
		optional uint32 goal_id = 2;
		optional uint64 value = 3;
	}

	repeated .CMsgEventGoals.EventGoal event_goals = 1;
}

message CMsgGCToGCLeaguePredictions {
	optional uint32 league_id = 1;
}

message CMsgPredictionRankings {
	message PredictionLine {
		optional uint32 answer_id = 1;
		optional string answer_name = 2;
		optional uint64 answer_logo = 3;
		optional float answer_value = 4;
	}

	message Prediction {
		optional uint32 selection_id = 1;
		repeated .CMsgPredictionRankings.PredictionLine prediction_lines = 2;
	}

	repeated .CMsgPredictionRankings.Prediction predictions = 1;
}

message CMsgPredictionResults {
	message ResultBreakdown {
		optional uint32 answer_selection = 2;
		optional float answer_value = 3;
	}

	message Result {
		optional uint32 selection_id = 1;
		repeated .CMsgPredictionResults.ResultBreakdown result_breakdown = 2;
	}

	repeated .CMsgPredictionResults.Result results = 1;
}

message CMsgClientToGCHasPlayerVotedForMVP {
	optional uint64 match_id = 1;
}

message CMsgClientToGCHasPlayerVotedForMVPResponse {
	optional bool result = 1;
}

message CMsgClientToGCVoteForMVP {
	optional uint64 match_id = 1;
	optional uint32 account_id = 3;
}

message CMsgClientToGCVoteForMVPResponse {
	optional bool result = 1;
}

message CMsgClientToGCMVPVoteTimeout {
	optional uint64 match_id = 1;
}

message CMsgClientToGCMVPVoteTimeoutResponse {
	optional bool result = 1;
}

message CMsgClientToGCTeammateStatsRequest {
}

message CMsgClientToGCTeammateStatsResponse {
	message TeammateStat {
		optional uint32 account_id = 1;
		optional uint32 games = 2;
		optional uint32 wins = 3;
		optional uint32 most_recent_game_timestamp = 4;
		optional uint64 most_recent_game_match_id = 5;
		optional float performance = 100;
	}

	optional bool success = 1;
	repeated .CMsgClientToGCTeammateStatsResponse.TeammateStat teammate_stats = 2;
}

message CMsgClientToGCVoteForArcana {
	repeated .CMsgArcanaVoteMatchVotes matches = 1;
}

message CMsgClientToGCVoteForArcanaResponse {
	enum Result {
		SUCCEEDED = 0;
		VOTING_NOT_ENABLED_FOR_ROUND = 1;
		UNKNOWN_FAILURE = 2;
	}

	optional .CMsgClientToGCVoteForArcanaResponse.Result result = 1 [default = SUCCEEDED];
}

message CMsgClientToGCRequestArcanaVotesRemaining {
}

message CMsgClientToGCRequestArcanaVotesRemainingResponse {
	optional bool result = 1;
	optional uint32 votes_remaining = 2;
	optional uint32 votes_total = 3;
	repeated .CMsgArcanaVoteMatchVotes matches_previously_voted_for = 4;
}

message CMsgClientToGCRequestEventPointLogV2 {
	optional uint32 event_id = 1;
}

message CMsgClientToGCRequestEventPointLogResponseV2 {
	message LogEntry {
		optional uint32 timestamp = 1;
		optional uint32 audit_action = 2;
		optional int32 event_points = 3;
		optional uint64 audit_data = 4;
	}

	optional bool result = 1;
	optional .EEvent event_id = 2 [default = EVENT_ID_NONE];
	repeated .CMsgClientToGCRequestEventPointLogResponseV2.LogEntry log_entries = 3;
}

message CMsgClientToGCPublishUserStat {
	optional uint32 user_stats_event = 1;
	optional uint64 reference_data = 2;
}

message CMsgClientToGCRequestSlarkGameResult {
	optional .EEvent event_id = 1 [default = EVENT_ID_NONE];
	optional uint32 slot_chosen = 2;
	optional uint32 week = 3;
}

message CMsgClientToGCRequestSlarkGameResultResponse {
	optional uint32 points_won = 1;
	optional bool aura_won = 2;
}

message CMsgGCToClientQuestProgressUpdated {
	message Challenge {
		optional uint32 challenge_id = 1;
		optional uint32 time_completed = 2;
		optional uint32 attempts = 3;
		optional uint32 hero_id = 4;
		optional uint32 template_id = 5;
		optional uint32 quest_rank = 6;
		optional uint32 max_quest_rank = 7;
	}

	optional uint32 quest_id = 1;
	repeated .CMsgGCToClientQuestProgressUpdated.Challenge completed_challenges = 2;
}

message CMsgDOTARedeemItem {
	optional uint64 currency_id = 1;
	optional uint32 purchase_def = 2;
}

message CMsgDOTARedeemItemResponse {
	enum EResultCode {
		k_Succeeded = 0;
		k_Failed = 1;
	}

	optional .CMsgDOTARedeemItemResponse.EResultCode response = 1 [default = k_Succeeded];
}

message CMsgClientToGCSelectCompendiumInGamePrediction {
	message Prediction {
		optional uint32 prediction_id = 1;
		optional uint32 prediction_value = 2;
	}

	optional uint64 match_id = 1;
	repeated .CMsgClientToGCSelectCompendiumInGamePrediction.Prediction predictions = 2;
	optional uint32 league_id = 3;
}

message CMsgClientToGCSelectCompendiumInGamePredictionResponse {
	enum EResult {
		SUCCESS = 0;
		INVALID_MATCH = 1;
		PREDICTIONS_ARE_CLOSED = 2;
		OTHER_ERROR = 3;
	}

	optional .CMsgClientToGCSelectCompendiumInGamePredictionResponse.EResult result = 1 [default = SUCCESS];
}

message CMsgClientToGCOpenPlayerCardPack {
	optional uint64 player_card_pack_item_id = 1;
	optional uint32 team_id = 2;
	optional uint32 deprecated_league_id = 3;
	optional .ELeagueRegion region = 4 [default = LEAGUE_REGION_UNSET];
}

message CMsgClientToGCOpenPlayerCardPackResponse {
	enum Result {
		SUCCESS = 1;
		ERROR_INTERNAL = 2;
		ERROR_FAILED_TO_FIND_PACK = 3;
		ERROR_ITEM_NOT_CARD_PACK = 4;
		ERROR_FAILED_CARD_CREATE = 5;
		ERROR_INVALID_TEAM_ID_ATTRIBUTE = 6;
		ERROR_INVALID_TEAM_ID = 7;
	}

	optional .CMsgClientToGCOpenPlayerCardPackResponse.Result result = 1 [default = SUCCESS];
	repeated uint64 player_card_item_ids = 2;
}

message CMsgClientToGCRecyclePlayerCard {
	repeated uint64 player_card_item_ids = 3;
	optional uint32 event_id = 2;
}

message CMsgClientToGCRecyclePlayerCardResponse {
	enum Result {
		SUCCESS = 1;
		ERROR_INTERNAL = 2;
		ERROR_FAILED_TO_FIND_PLAYER_CARD = 3;
		ERROR_ITEM_NOT_PLAYER_CARD = 4;
		ERROR_FAILED_DUST_CARD_CREATE = 5;
		ERROR_CARD_LOCKED = 6;
		ERROR_NO_CARDS_SPECIFIED = 7;
	}

	optional .CMsgClientToGCRecyclePlayerCardResponse.Result result = 1 [default = SUCCESS];
	optional uint32 dust_amount = 2;
}

message CMsgClientToGCCreatePlayerCardPack {
	optional uint64 card_dust_item_id = 1;
	optional uint32 event_id = 2;
	optional bool premium_pack = 3;
}

message CMsgClientToGCCreatePlayerCardPackResponse {
	enum Result {
		SUCCESS = 1;
		ERROR_INTERNAL = 2;
		ERROR_INSUFFICIENT_DUST = 3;
		ERROR_ITEM_NOT_DUST_ITEM = 4;
		ERROR_FAILED_CARD_PACK_CREATE = 5;
		ERROR_NO_CARD_PACK = 6;
		ERROR_NOT_AVAILABLE = 7;
	}

	optional .CMsgClientToGCCreatePlayerCardPackResponse.Result result = 1 [default = SUCCESS];
}

message CMsgClientToGCCreateTeamPlayerCardPack {
	optional uint64 card_dust_item_id = 1;
	optional uint32 event_id = 2;
	optional bool premium_pack = 3;
	optional uint32 team_id = 4;
}

message CMsgClientToGCCreateTeamPlayerCardPackResponse {
	enum Result {
		SUCCESS = 1;
		ERROR_INTERNAL = 2;
		ERROR_INSUFFICIENT_DUST = 3;
		ERROR_ITEM_NOT_DUST_ITEM = 4;
		ERROR_FAILED_CARD_PACK_CREATE = 5;
		ERROR_NO_CARD_PACK = 6;
		ERROR_NOT_AVAILABLE = 7;
	}

	optional .CMsgClientToGCCreateTeamPlayerCardPackResponse.Result result = 1 [default = SUCCESS];
}

message CMsgGCToClientBattlePassRollup_International2016 {
	message Questlines {
		optional string name = 1;
		optional uint32 onestar = 2;
		optional uint32 twostar = 3;
		optional uint32 threestar = 4;
		optional uint32 total = 5;
	}

	message Wagering {
		optional uint32 total_wagered = 1;
		optional uint32 total_won = 2;
		optional uint32 average_won = 3;
		optional uint32 success_rate = 4;
		optional uint32 total_tips = 5;
	}

	message Achievements {
		optional uint32 completed = 1;
		optional uint32 total = 2;
		optional uint32 points = 3;
	}

	message BattleCup {
		optional uint32 wins = 1;
		optional uint32 score = 2;
	}

	message Predictions {
		optional uint32 correct = 1;
		optional uint32 total = 2;
		optional uint32 points = 3;
	}

	message Bracket {
		optional uint32 correct = 1;
		optional uint32 points = 2;
	}

	message PlayerCard {
		optional uint32 account_id = 1;
		optional uint32 quality = 2;
	}

	message FantasyChallenge {
		optional float total_score = 1;
		optional float percentile = 2;
	}

	optional uint32 battle_pass_level = 1;
	repeated .CMsgGCToClientBattlePassRollup_International2016.Questlines questlines = 2;
	optional .CMsgGCToClientBattlePassRollup_International2016.Wagering wagering = 3;
	optional .CMsgGCToClientBattlePassRollup_International2016.Achievements achievements = 4;
	optional .CMsgGCToClientBattlePassRollup_International2016.BattleCup battle_cup = 5;
	optional .CMsgGCToClientBattlePassRollup_International2016.Predictions predictions = 6;
	optional .CMsgGCToClientBattlePassRollup_International2016.Bracket bracket = 7;
	repeated .CMsgGCToClientBattlePassRollup_International2016.PlayerCard player_cards = 8;
	optional .CMsgGCToClientBattlePassRollup_International2016.FantasyChallenge fantasy_challenge = 9;
}

message CMsgGCToClientBattlePassRollup_Fall2016 {
	message Questlines {
		optional string name = 1;
		optional uint32 onestar = 2;
		optional uint32 twostar = 3;
		optional uint32 threestar = 4;
		optional uint32 total = 5;
	}

	message Wagering {
		optional uint32 total_wagered = 1;
		optional uint32 total_won = 2;
		optional uint32 average_won = 3;
		optional uint32 success_rate = 4;
		optional uint32 total_tips = 5;
	}

	message Achievements {
		optional uint32 completed = 1;
		optional uint32 total = 2;
		optional uint32 points = 3;
	}

	message BattleCup {
		optional uint32 wins = 1;
		optional uint32 score = 2;
	}

	message Predictions {
		optional uint32 correct = 1;
		optional uint32 total = 2;
		optional uint32 points = 3;
	}

	message Bracket {
		optional uint32 correct = 1;
		optional uint32 points = 2;
	}

	message PlayerCard {
		optional uint32 account_id = 1;
		optional uint32 quality = 2;
	}

	message FantasyChallenge {
		optional float total_score = 1;
		optional float percentile = 2;
	}

	optional uint32 battle_pass_level = 1;
	repeated .CMsgGCToClientBattlePassRollup_Fall2016.Questlines questlines = 2;
	optional .CMsgGCToClientBattlePassRollup_Fall2016.Wagering wagering = 3;
	optional .CMsgGCToClientBattlePassRollup_Fall2016.Achievements achievements = 4;
	optional .CMsgGCToClientBattlePassRollup_Fall2016.BattleCup battle_cup = 5;
	optional .CMsgGCToClientBattlePassRollup_Fall2016.Predictions predictions = 6;
	optional .CMsgGCToClientBattlePassRollup_Fall2016.Bracket bracket = 7;
	repeated .CMsgGCToClientBattlePassRollup_Fall2016.PlayerCard player_cards = 8;
	optional .CMsgGCToClientBattlePassRollup_Fall2016.FantasyChallenge fantasy_challenge = 9;
}

message CMsgGCToClientBattlePassRollup_Winter2017 {
	message Questlines {
		optional string name = 1;
		optional uint32 onestar = 2;
		optional uint32 twostar = 3;
		optional uint32 threestar = 4;
		optional uint32 total = 5;
	}

	message Wagering {
		optional uint32 total_wagered = 1;
		optional uint32 total_won = 2;
		optional uint32 average_won = 3;
		optional uint32 success_rate = 4;
		optional uint32 total_tips = 5;
	}

	message Achievements {
		optional uint32 completed = 1;
		optional uint32 total = 2;
		optional uint32 points = 3;
	}

	message BattleCup {
		optional uint32 wins = 1;
		optional uint32 score = 2;
	}

	message Predictions {
		optional uint32 correct = 1;
		optional uint32 total = 2;
		optional uint32 points = 3;
	}

	message Bracket {
		optional uint32 correct = 1;
		optional uint32 points = 2;
	}

	message PlayerCard {
		optional uint32 account_id = 1;
		optional uint32 quality = 2;
	}

	message FantasyChallenge {
		optional float total_score = 1;
		optional float percentile = 2;
	}

	optional uint32 battle_pass_level = 1;
	repeated .CMsgGCToClientBattlePassRollup_Winter2017.Questlines questlines = 2;
	optional .CMsgGCToClientBattlePassRollup_Winter2017.Wagering wagering = 3;
	optional .CMsgGCToClientBattlePassRollup_Winter2017.Achievements achievements = 4;
	optional .CMsgGCToClientBattlePassRollup_Winter2017.BattleCup battle_cup = 5;
	optional .CMsgGCToClientBattlePassRollup_Winter2017.Predictions predictions = 6;
	optional .CMsgGCToClientBattlePassRollup_Winter2017.Bracket bracket = 7;
	repeated .CMsgGCToClientBattlePassRollup_Winter2017.PlayerCard player_cards = 8;
	optional .CMsgGCToClientBattlePassRollup_Winter2017.FantasyChallenge fantasy_challenge = 9;
}

message CMsgGCToClientBattlePassRollup_TI7 {
	message Questlines {
		optional string name = 1;
		optional uint32 onestar = 2;
		optional uint32 twostar = 3;
		optional uint32 threestar = 4;
		optional uint32 total = 5;
	}

	message Wagering {
		optional uint32 total_wagered = 1;
		optional uint32 total_won = 2;
		optional uint32 average_won = 3;
		optional uint32 success_rate = 4;
		optional uint32 total_tips = 5;
	}

	message Achievements {
		optional uint32 completed = 1;
		optional uint32 total = 2;
		optional uint32 points = 3;
	}

	message BattleCup {
		optional uint32 wins = 1;
		optional uint32 score = 2;
	}

	message Predictions {
		optional uint32 correct = 1;
		optional uint32 total = 2;
		optional uint32 points = 3;
	}

	message Bracket {
		optional uint32 correct = 1;
		optional uint32 points = 2;
	}

	message PlayerCard {
		optional uint32 account_id = 1;
		optional uint32 quality = 2;
	}

	message FantasyChallenge {
		optional float total_score = 1;
		optional float percentile = 2;
	}

	optional uint32 battle_pass_level = 1;
	repeated .CMsgGCToClientBattlePassRollup_TI7.Questlines questlines = 2;
	optional .CMsgGCToClientBattlePassRollup_TI7.Wagering wagering = 3;
	optional .CMsgGCToClientBattlePassRollup_TI7.Achievements achievements = 4;
	optional .CMsgGCToClientBattlePassRollup_TI7.BattleCup battle_cup = 5;
	optional .CMsgGCToClientBattlePassRollup_TI7.Predictions predictions = 6;
	optional .CMsgGCToClientBattlePassRollup_TI7.Bracket bracket = 7;
	repeated .CMsgGCToClientBattlePassRollup_TI7.PlayerCard player_cards = 8;
	optional .CMsgGCToClientBattlePassRollup_TI7.FantasyChallenge fantasy_challenge = 9;
}

message CMsgGCToClientBattlePassRollup_TI8 {
	message CavernCrawl {
		optional uint32 rooms_cleared = 1;
		optional bool carry_completed = 2;
		optional bool support_completed = 3;
		optional bool utility_completed = 4;
	}

	message Wagering {
		optional uint32 total_wagered = 1;
		optional uint32 total_won = 2;
		optional uint32 average_won = 3;
		optional uint32 success_rate = 4;
		optional uint32 total_tips = 5;
	}

	message Achievements {
		optional uint32 completed = 1;
		optional uint32 total = 2;
		optional uint32 points = 3;
	}

	message Predictions {
		optional uint32 correct = 1;
		optional uint32 total = 2;
		optional uint32 points = 3;
	}

	message Bracket {
		optional uint32 correct = 1;
		optional uint32 points = 2;
	}

	message PlayerCard {
		optional uint32 account_id = 1;
		optional uint32 quality = 2;
	}

	message FantasyChallenge {
		optional float total_score = 1;
		optional float percentile = 2;
	}

	optional uint32 battle_pass_level = 1;
	optional .CMsgGCToClientBattlePassRollup_TI8.CavernCrawl cavern_crawl = 2;
	optional .CMsgGCToClientBattlePassRollup_TI8.Wagering wagering = 3;
	optional .CMsgGCToClientBattlePassRollup_TI8.Achievements achievements = 4;
	optional .CMsgGCToClientBattlePassRollup_TI8.Predictions predictions = 6;
	optional .CMsgGCToClientBattlePassRollup_TI8.Bracket bracket = 7;
	repeated .CMsgGCToClientBattlePassRollup_TI8.PlayerCard player_cards = 8;
	optional .CMsgGCToClientBattlePassRollup_TI8.FantasyChallenge fantasy_challenge = 9;
}

message CMsgGCToClientBattlePassRollup_TI9 {
	optional uint32 battle_pass_level = 1;
}

message CMsgGCToClientBattlePassRollup_TI10 {
	optional uint32 battle_pass_level = 1;
}

message CMsgGCToClientBattlePassRollupRequest {
	optional uint32 event_id = 1;
	optional uint32 account_id = 2;
}

message CMsgGCToClientBattlePassRollupResponse {
	optional .CMsgGCToClientBattlePassRollup_International2016 event_ti6 = 1;
	optional .CMsgGCToClientBattlePassRollup_Fall2016 event_fall2016 = 2;
	optional .CMsgGCToClientBattlePassRollup_Winter2017 event_winter2017 = 3;
	optional .CMsgGCToClientBattlePassRollup_TI7 event_ti7 = 4;
	optional .CMsgGCToClientBattlePassRollup_TI8 event_ti8 = 5;
	optional .CMsgGCToClientBattlePassRollup_TI9 event_ti9 = 6;
	optional .CMsgGCToClientBattlePassRollup_TI10 event_ti10 = 7;
}

message CMsgGCToClientBattlePassRollupListRequest {
	optional uint32 account_id = 1;
}

message CMsgGCToClientBattlePassRollupListResponse {
	message EventInfo {
		optional uint32 event_id = 1;
		optional uint32 level = 2;
	}

	repeated .CMsgGCToClientBattlePassRollupListResponse.EventInfo event_info = 1;
}

message CMsgClientToGCTransferSeasonalMMRRequest {
	optional bool is_party = 1;
}

message CMsgClientToGCTransferSeasonalMMRResponse {
	optional bool success = 1;
}

message CMsgGCToClientPlaytestStatus {
	optional bool active = 1;
}

message CMsgClientToGCJoinPlaytest {
	optional uint32 client_version = 1;
}

message CMsgClientToGCJoinPlaytestResponse {
	optional string error = 1;
}

message CMsgDOTASetFavoriteTeam {
	optional uint32 team_id = 1;
	optional uint32 event_id = 2;
}

message CMsgDOTATriviaCurrentQuestions {
	repeated .CMsgDOTATriviaQuestion questions = 1;
	optional bool trivia_enabled = 2;
}

message CMsgDOTASubmitTriviaQuestionAnswer {
	optional uint32 question_id = 1;
	optional uint32 answer_index = 2;
}

message CMsgDOTASubmitTriviaQuestionAnswerResponse {
	optional .EDOTATriviaAnswerResult result = 1 [default = k_EDOTATriviaAnswerResult_Success];
}

message CMsgDOTAStartTriviaSession {
}

message CMsgDOTAStartTriviaSessionResponse {
	optional bool trivia_enabled = 1;
	optional uint32 current_timestamp = 2;
}

message CMsgDOTAAnchorPhoneNumberRequest {
}

message CMsgDOTAAnchorPhoneNumberResponse {
	enum Result {
		SUCCESS = 0;
		ERROR_UNKNOWN = 1;
		ERROR_NO_STEAM_PHONE = 2;
		ERROR_ALREADY_IN_USE = 3;
		ERROR_COOLDOWN_ACTIVE = 4;
		ERROR_GAC_ISSUE = 5;
	}

	optional .CMsgDOTAAnchorPhoneNumberResponse.Result result = 1 [default = SUCCESS];
}

message CMsgDOTAUnanchorPhoneNumberRequest {
}

message CMsgDOTAUnanchorPhoneNumberResponse {
	enum Result {
		SUCCESS = 0;
		ERROR_UNKNOWN = 1;
	}

	optional .CMsgDOTAUnanchorPhoneNumberResponse.Result result = 1 [default = SUCCESS];
}

message CMsgGCToClientCommendNotification {
	optional uint32 commender_account_id = 1;
	optional string commender_name = 2;
	optional uint32 flags = 3;
}

message CMsgDOTAClientToGCQuickStatsRequest {
	optional uint32 player_account_id = 1;
	optional uint32 hero_id = 2;
	optional uint32 item_id = 3;
	optional uint32 league_id = 4;
}

message CMsgDOTAClientToGCQuickStatsResponse {
	message SimpleStats {
		optional float win_percent = 1;
		optional float pick_percent = 2;
		optional uint32 win_count = 3;
		optional uint32 pick_count = 4;
	}

	optional .CMsgDOTAClientToGCQuickStatsRequest original_request = 1;
	optional .CMsgDOTAClientToGCQuickStatsResponse.SimpleStats hero_stats = 2;
	optional .CMsgDOTAClientToGCQuickStatsResponse.SimpleStats item_stats = 3;
	optional .CMsgDOTAClientToGCQuickStatsResponse.SimpleStats item_hero_stats = 4;
	optional .CMsgDOTAClientToGCQuickStatsResponse.SimpleStats item_player_stats = 5;
	optional .CMsgDOTAClientToGCQuickStatsResponse.SimpleStats hero_player_stats = 6;
	optional .CMsgDOTAClientToGCQuickStatsResponse.SimpleStats full_set_stats = 7;
}

message CMsgDOTASelectionPriorityChoiceRequest {
	optional .DOTASelectionPriorityChoice choice = 1 [default = k_DOTASelectionPriorityChoice_Invalid];
}

message CMsgDOTASelectionPriorityChoiceResponse {
	enum Result {
		SUCCESS = 0;
		ERROR_UNKNOWN = 1;
	}

	optional .CMsgDOTASelectionPriorityChoiceResponse.Result result = 1 [default = SUCCESS];
}

message CMsgDOTAGameAutographReward {
	optional string badge_id = 1;
}

message CMsgDOTAGameAutographRewardResponse {
	enum Result {
		SUCCESS = 0;
		ERROR_UNKNOWN = 1;
	}

	optional .CMsgDOTAGameAutographRewardResponse.Result result = 1 [default = SUCCESS];
}

message CMsgDOTADestroyLobbyRequest {
}

message CMsgDOTADestroyLobbyResponse {
	enum Result {
		SUCCESS = 0;
		ERROR_UNKNOWN = 1;
	}

	optional .CMsgDOTADestroyLobbyResponse.Result result = 1 [default = SUCCESS];
}

message CMsgDOTAGetRecentPlayTimeFriendsRequest {
}

message CMsgDOTAGetRecentPlayTimeFriendsResponse {
	repeated fixed32 account_ids = 1;
}

message CMsgPurchaseItemWithEventPoints {
	optional uint32 item_def = 1;
	optional uint32 quantity = 2;
	optional .EEvent event_id = 3 [default = EVENT_ID_NONE];
	optional bool use_premium_points = 4;
}

message CMsgPurchaseItemWithEventPointsResponse {
	enum Result {
		SUCCESS = 0;
		UNKNOWN_EVENT = 1;
		UNKNOWN_ITEM = 2;
		BAD_QUANTITY = 3;
		NOT_PURCHASEABLE = 4;
		SDO_LOAD_FAILED = 5;
		NOT_ENOUGH_POINTS = 6;
		SQL_ERROR = 7;
		FAILED_TO_SEND = 8;
		SERVER_ERROR = 9;
		NOT_ALLOWED = 10;
		CANCELLED = 11;
		CLIENT_ERROR = 12;
		SUBSCRIPTION_REQUIRED = 13;
	}

	optional .CMsgPurchaseItemWithEventPointsResponse.Result result = 1 [default = SUCCESS];
}

message CMsgPurchaseHeroRandomRelic {
	optional uint32 hero_id = 1;
	optional .EHeroRelicRarity relic_rarity = 2 [default = HERO_RELIC_RARITY_INVALID];
}

message CMsgPurchaseHeroRandomRelicResponse {
	optional .EPurchaseHeroRelicResult result = 1 [default = k_EPurchaseHeroRelicResult_Success];
	optional uint32 kill_eater_type = 2;
}

message CMsgClientToGCRequestPlusWeeklyChallengeResult {
	optional .EEvent event_id = 1 [default = EVENT_ID_NONE];
	optional uint32 week = 2;
}

message CMsgClientToGCRequestPlusWeeklyChallengeResultResponse {
}

message CMsgProfileRequest {
	optional uint32 account_id = 1;
}

message CMsgProfileResponse {
	message FeaturedHero {
		optional uint32 hero_id = 1;
		repeated .CSOEconItem equipped_econ_items = 2;
		optional bool manually_set = 3;
		optional uint32 plus_hero_xp = 4;
		optional .CSOEconItem plus_hero_relics_item = 5;
	}

	message MatchInfo {
		optional uint64 match_id = 1;
		optional uint32 match_timestamp = 2;
		optional sint32 performance_rating = 3;
		optional uint32 hero_id = 4;
		optional bool won_match = 5;
	}

	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
	}

	optional .CSOEconItem background_item = 1;
	repeated .CMsgProfileResponse.FeaturedHero featured_heroes = 2;
	repeated .CMsgProfileResponse.MatchInfo recent_matches = 3;
	repeated .CMsgSuccessfulHero successful_heroes = 4;
	optional .CMsgRecentMatchInfo recent_match_details = 5;
	optional .CMsgProfileResponse.EResponse result = 6 [default = k_eInternalError];
	optional .CMsgStickerbookPage stickerbook_page = 7;
}

message CMsgProfileUpdate {
	optional uint64 background_item_id = 1;
	repeated uint32 featured_hero_ids = 2;
}

message CMsgProfileUpdateResponse {
	enum Result {
		SUCCESS = 0;
		FAILURE = 1;
		FAILURE_BAD_HERO1 = 2;
		FAILURE_BAD_HERO2 = 3;
		FAILURE_BAD_HERO3 = 4;
	}

	optional .CMsgProfileUpdateResponse.Result result = 1 [default = SUCCESS];
}

message CMsgTalentWinRates {
	optional uint32 last_run = 1;
	optional uint32 ability_id = 2;
	optional uint32 game_count = 3;
	optional uint32 win_count = 4;
}

message CMsgGlobalHeroAverages {
	optional uint32 last_run = 1;
	optional uint32 avg_gold_per_min = 3;
	optional uint32 avg_xp_per_min = 4;
	optional uint32 avg_kills = 5;
	optional uint32 avg_deaths = 6;
	optional uint32 avg_assists = 7;
	optional uint32 avg_last_hits = 8;
	optional uint32 avg_denies = 9;
	optional uint32 avg_net_worth = 10;
}

message CMsgHeroGlobalDataRequest {
	optional uint32 hero_id = 1;
}

message CMsgHeroGlobalDataResponse {
	message GraphData {
		optional uint32 day = 1;
		optional float win_percent = 2;
		optional float pick_percent = 3;
		optional float ban_percent = 4;
	}

	message WeekData {
		optional uint32 week = 1;
		optional float win_percent = 2;
		optional float pick_percent = 3;
		optional float ban_percent = 4;
	}

	message HeroDataPerRankChunk {
		optional uint32 rank_chunk = 1;
		repeated .CMsgTalentWinRates talent_win_rates = 2;
		optional .CMsgGlobalHeroAverages hero_averages = 3;
		repeated .CMsgHeroGlobalDataResponse.GraphData graph_data = 4;
		repeated .CMsgHeroGlobalDataResponse.WeekData week_data = 5;
	}

	optional uint32 hero_id = 1;
	repeated .CMsgHeroGlobalDataResponse.HeroDataPerRankChunk hero_data_per_chunk = 2;
}

message CMsgHeroGlobalDataAllHeroes {
	repeated .CMsgHeroGlobalDataResponse heroes = 1;
}

message CMsgHeroGlobalDataHeroesAlliesAndEnemies {
	message HeroData {
		optional uint32 hero_id = 1;
		optional uint32 win_rate = 2;
		optional uint32 first_other_hero_id = 3;
		repeated uint32 ally_win_rate = 5;
		repeated uint32 enemy_win_rate = 6;
	}

	message RankedHeroData {
		optional uint32 rank = 1;
		repeated .CMsgHeroGlobalDataHeroesAlliesAndEnemies.HeroData hero_data = 2;
	}

	repeated .CMsgHeroGlobalDataHeroesAlliesAndEnemies.RankedHeroData ranked_hero_data = 1;
}

message CMsgPrivateMetadataKeyRequest {
	optional uint64 match_id = 1;
}

message CMsgPrivateMetadataKeyResponse {
	optional uint32 private_key = 1;
}

message CMsgActivatePlusFreeTrialResponse {
	enum Result {
		SUCCESS = 0;
		ERROR_GENERIC = 1;
		ERROR_ALREADY_IN_FREE_TRIAL = 2;
		ERROR_ALREADY_USED_FREE_TRIAL = 3;
		ERROR_OFFER_NOT_VALID = 4;
	}

	optional .CMsgActivatePlusFreeTrialResponse.Result result = 1 [default = SUCCESS];
}

message CMsgGCToClientCavernCrawlMapPathCompleted {
	message CompletedPathInfo {
		optional uint32 path_id_completed = 1;
		optional bool received_ultra_rare_reward = 2;
		optional bool half_completed = 3;
	}

	optional uint32 event_id = 1;
	optional uint32 hero_id_completed = 2;
	repeated .CMsgGCToClientCavernCrawlMapPathCompleted.CompletedPathInfo completed_paths = 3;
	optional uint32 map_variant = 4;
}

message CMsgGCToClientCavernCrawlMapUpdated {
	optional uint32 event_id = 1;
}

message CMsgClientToGCCavernCrawlClaimRoom {
	optional uint32 event_id = 1;
	optional uint32 room_id = 2;
	optional uint32 map_variant = 3;
}

message CMsgClientToGCCavernCrawlClaimRoomResponse {
	enum Result {
		SUCCESS = 0;
		ERROR_UNKNOWN = 1;
		RECEIVED_ULTRA_RARE_REWARD = 2;
	}

	optional .CMsgClientToGCCavernCrawlClaimRoomResponse.Result result = 1 [default = SUCCESS];
}

message CMsgClientToGCCavernCrawlUseItemOnRoom {
	optional uint32 event_id = 1;
	optional uint32 room_id = 2;
	optional uint32 item_type = 3;
	optional uint32 map_variant = 4;
}

message CMsgClientToGCCavernCrawlUseItemOnRoomResponse {
	enum Result {
		SUCCESS = 0;
		ERROR_UNKNOWN = 1;
		RECEIVED_ULTRA_RARE_REWARD = 2;
	}

	optional .CMsgClientToGCCavernCrawlUseItemOnRoomResponse.Result result = 1 [default = SUCCESS];
}

message CMsgClientToGCCavernCrawlUseItemOnPath {
	optional uint32 event_id = 1;
	optional uint32 path_id = 2;
	optional uint32 item_type = 3;
	optional uint32 map_variant = 4;
}

message CMsgClientToGCCavernCrawlUseItemOnPathResponse {
	enum Result {
		SUCCESS = 0;
		ERROR_UNKNOWN = 1;
		RECEIVED_ULTRA_RARE_REWARD = 2;
	}

	optional .CMsgClientToGCCavernCrawlUseItemOnPathResponse.Result result = 1 [default = SUCCESS];
}

message CMsgClientToGCCavernCrawlRequestMapState {
	optional uint32 event_id = 1;
}

message CMsgClientToGCCavernCrawlRequestMapStateResponse {
	message SwappedChallenge {
		optional uint32 path_id_1 = 1;
		optional uint32 path_id_2 = 2;
	}

	message InventoryItem {
		optional uint32 item_type = 1;
		optional uint32 count = 2;
	}

	message TreasureMap {
		optional uint32 map_room_id = 1;
		optional uint32 revealed_room_id = 2;
	}

	message MapVariant {
		optional uint32 map_variant = 1;
		optional fixed64 claimed_rooms_1 = 2;
		optional fixed64 claimed_rooms_2 = 3;
		optional fixed64 revealed_rooms_1 = 4;
		optional fixed64 revealed_rooms_2 = 5;
		optional fixed64 completed_paths_1 = 6;
		optional fixed64 completed_paths_2 = 7;
		optional fixed64 completed_paths_3 = 8;
		optional fixed64 completed_paths_4 = 9;
		optional fixed64 half_completed_paths_1 = 10;
		optional fixed64 half_completed_paths_2 = 11;
		optional fixed64 half_completed_paths_3 = 12;
		optional fixed64 half_completed_paths_4 = 13;
		repeated .CMsgClientToGCCavernCrawlRequestMapStateResponse.SwappedChallenge swapped_challenge = 14;
		optional uint32 ultra_rare_reward_room_number = 15;
		repeated .CMsgClientToGCCavernCrawlRequestMapStateResponse.TreasureMap treasure_map = 16;
	}

	enum Result {
		SUCCESS = 0;
		ERROR_UNKNOWN = 1;
		EVENT_NOT_OWNED = 2;
	}

	optional .CMsgClientToGCCavernCrawlRequestMapStateResponse.Result result = 1 [default = SUCCESS];
	optional uint32 available_map_variants_mask = 2;
	repeated .CMsgClientToGCCavernCrawlRequestMapStateResponse.InventoryItem inventory_item = 3;
	repeated .CMsgClientToGCCavernCrawlRequestMapStateResponse.MapVariant map_variants = 4;
}

message CMsgClientToGCCavernCrawlGetClaimedRoomCount {
	optional uint32 event_id = 1;
}

message CMsgClientToGCCavernCrawlGetClaimedRoomCountResponse {
	message MapVariant {
		optional uint32 map_variant = 1;
		optional uint32 count = 2;
	}

	enum Result {
		SUCCESS = 0;
		ERROR_UNKNOWN = 1;
		EVENT_NOT_OWNED = 2;
	}

	optional .CMsgClientToGCCavernCrawlGetClaimedRoomCountResponse.Result result = 1 [default = SUCCESS];
	repeated .CMsgClientToGCCavernCrawlGetClaimedRoomCountResponse.MapVariant map_variants = 2;
	optional uint32 available_map_variants_mask = 3;
}

message CMsgDOTAMutationList {
	message Mutation {
		optional uint32 id = 1;
		optional string name = 2;
		optional string description = 3;
	}

	repeated .CMsgDOTAMutationList.Mutation mutations = 1;
}

message CMsgEventTipsSummaryRequest {
	optional .EEvent event_id = 1 [default = EVENT_ID_NONE];
	optional uint32 account_id = 2;
}

message CMsgEventTipsSummaryResponse {
	message Tipper {
		optional uint32 tipper_account_id = 1;
		optional uint32 tip_count = 2 [default = 1];
	}

	optional bool result = 1;
	repeated .CMsgEventTipsSummaryResponse.Tipper tips_received = 2;
}

message CMsgSocialFeedRequest {
	optional uint32 account_id = 1;
	optional bool self_only = 2;
}

message CMsgSocialFeedResponse {
	message FeedEvent {
		optional uint64 feed_event_id = 1;
		optional uint32 account_id = 2;
		optional uint32 timestamp = 3;
		optional uint32 comment_count = 4;
		optional uint32 event_type = 5;
		optional uint32 event_sub_type = 6;
		optional uint64 param_big_int_1 = 7;
		optional uint32 param_int_1 = 8;
		optional uint32 param_int_2 = 9;
		optional uint32 param_int_3 = 10;
		optional string param_string = 11;
	}

	enum Result {
		SUCCESS = 0;
		FAILED_TO_LOAD_FRIENDS = 1;
		FAILED_TO_LOAD_FEED_DATA = 2;
		FAILED_TO_LOAD_FEED_ENTRY = 3;
		FAILED_TO_LOAD_COMMENTS = 4;
		FAILED_TOO_MANY_REQUESTS = 5;
	}

	optional .CMsgSocialFeedResponse.Result result = 1 [default = SUCCESS];
	repeated .CMsgSocialFeedResponse.FeedEvent feed_events = 2;
}

message CMsgSocialFeedCommentsRequest {
	optional uint64 feed_event_id = 1;
}

message CMsgSocialFeedCommentsResponse {
	message FeedComment {
		optional uint32 commenter_account_id = 1;
		optional uint32 timestamp = 2;
		optional string comment_text = 3;
	}

	enum Result {
		SUCCESS = 0;
		FAILED_TOO_MANY_REQUESTS = 1;
		FAILED_TO_LOAD_COMMENTS = 2;
	}

	optional .CMsgSocialFeedCommentsResponse.Result result = 1 [default = SUCCESS];
	repeated .CMsgSocialFeedCommentsResponse.FeedComment feed_comments = 3;
}

message CMsgClientToGCPlayerCardSpecificPurchaseRequest {
	optional uint32 player_account_id = 1;
	optional uint32 event_id = 2;
	optional uint64 card_dust_item_id = 3;
}

message CMsgClientToGCPlayerCardSpecificPurchaseResponse {
	enum Result {
		SUCCESS = 1;
		ERROR_INTERNAL = 2;
		ERROR_INSUFFICIENT_DUST = 3;
		ERROR_ITEM_NOT_DUST_ITEM = 4;
		ERROR_FAILED_CARD_PACK_CREATE = 5;
		ERROR_NOT_AVAILABLE = 6;
	}

	optional .CMsgClientToGCPlayerCardSpecificPurchaseResponse.Result result = 1 [default = SUCCESS];
	optional uint64 item_id = 2;
}

message CMsgClientToGCRequestContestVotes {
	optional uint32 contest_id = 1;
}

message CMsgClientToGCRequestContestVotesResponse {
	message ItemVote {
		optional uint64 contest_item_id = 1;
		optional int32 vote = 2;
	}

	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
	}

	optional .CMsgClientToGCRequestContestVotesResponse.EResponse result = 1 [default = k_eInternalError];
	repeated .CMsgClientToGCRequestContestVotesResponse.ItemVote votes = 2;
}

message CMsgClientToGCRecordContestVote {
	optional uint32 contest_id = 1;
	optional uint64 contest_item_id = 2;
	optional int32 vote = 3;
}

message CMsgGCToClientRecordContestVoteResponse {
	enum EResult {
		SUCCESS = 0;
		FAILED_EVENT_NOT_OWNED = 1;
		FAILED_SQL_INSERT_FAILED = 2;
		FAILED_INVALID_CONTEST = 3;
		FAILED_CONTEST_NOT_ACTIVE = 4;
		FAILED_TIMEOUT = 5;
	}

	optional .CMsgGCToClientRecordContestVoteResponse.EResult eresult = 1 [default = SUCCESS];
}

message CMsgDevGrantEventPoints {
	optional .EEvent event_id = 1 [default = EVENT_ID_NONE];
	optional uint32 event_points = 2;
	optional uint32 premium_points = 3;
}

message CMsgDevGrantEventPointsResponse {
	optional .EDevEventRequestResult result = 1 [default = k_EDevEventRequestResult_Success];
}

message CMsgDevGrantEventAction {
	optional .EEvent event_id = 1 [default = EVENT_ID_NONE];
	optional uint32 action_id = 2;
	optional uint32 action_score = 3;
}

message CMsgDevGrantEventActionResponse {
	optional .EDevEventRequestResult result = 1 [default = k_EDevEventRequestResult_Success];
}

message CMsgDevDeleteEventActions {
	optional .EEvent event_id = 1 [default = EVENT_ID_NONE];
	optional uint32 start_action_id = 2;
	optional uint32 end_action_id = 3;
	optional bool remove_audit = 4;
}

message CMsgDevDeleteEventActionsResponse {
	optional .EDevEventRequestResult result = 1 [default = k_EDevEventRequestResult_Success];
}

message CMsgDevResetEventState {
	optional .EEvent event_id = 1 [default = EVENT_ID_NONE];
	optional bool remove_audit = 2;
}

message CMsgDevResetEventStateResponse {
	optional .EDevEventRequestResult result = 1 [default = k_EDevEventRequestResult_Success];
}

message CMsgConsumeEventSupportGrantItem {
	optional uint64 item_id = 1;
}

message CMsgConsumeEventSupportGrantItemResponse {
	optional .ESupportEventRequestResult result = 1 [default = k_ESupportEventRequestResult_Success];
}

message CMsgClientToGCGetFilteredPlayers {
}

message CMsgGCToClientGetFilteredPlayersResponse {
	message CFilterEntry {
		optional fixed32 account_id = 1;
		optional fixed32 time_added = 2;
		optional fixed32 time_expires = 3;
		optional string note = 4;
	}

	enum Result {
		SUCCESS = 0;
		FAILURE = 1;
	}

	optional .CMsgGCToClientGetFilteredPlayersResponse.Result result = 1 [default = SUCCESS];
	repeated .CMsgGCToClientGetFilteredPlayersResponse.CFilterEntry filtered_players = 2;
	optional int32 base_slots = 3;
	optional int32 additional_slots = 4;
	optional int32 next_slot_cost = 5;
}

message CMsgClientToGCRemoveFilteredPlayer {
	optional fixed32 account_id_to_remove = 1;
}

message CMsgGCToClientRemoveFilteredPlayerResponse {
	enum Result {
		SUCCESS = 0;
		FAILURE = 1;
	}

	optional .CMsgGCToClientRemoveFilteredPlayerResponse.Result result = 1 [default = SUCCESS];
}

message CMsgClientToGCPurchaseFilteredPlayerSlot {
	optional int32 additional_slots_current = 1;
}

message CMsgGCToClientPurchaseFilteredPlayerSlotResponse {
	enum Result {
		SUCCESS = 0;
		FAILURE = 1;
		CURRENT_SLOTCOUNT_DOESNT_MATCH = 2;
		CANT_AFFORD = 3;
	}

	optional .CMsgGCToClientPurchaseFilteredPlayerSlotResponse.Result result = 1 [default = SUCCESS];
	optional int32 additional_slots = 2;
	optional int32 next_slot_cost = 3;
}

message CMsgClientToGCUpdateFilteredPlayerNote {
	optional fixed32 target_account_id = 1;
	optional string new_note = 2;
}

message CMsgGCToClientUpdateFilteredPlayerNoteResponse {
	enum Result {
		SUCCESS = 0;
		FAILURE = 1;
		NOT_FOUND = 2;
	}

	optional .CMsgGCToClientUpdateFilteredPlayerNoteResponse.Result result = 1 [default = SUCCESS];
}

message CMsgPartySearchPlayer {
	optional fixed32 account_id = 1;
	optional fixed64 match_id = 2;
	optional fixed32 creation_time = 3;
}

message CMsgGCToClientPlayerBeaconState {
	repeated int32 num_active_beacons = 1;
}

message CMsgGCToClientPartyBeaconUpdate {
	optional bool beacon_added = 1;
	optional int32 beacon_type = 2;
	optional fixed32 account_id = 3;
}

message CMsgClientToGCUpdatePartyBeacon {
	enum Action {
		ON = 0;
		OFF = 1;
	}

	optional .CMsgClientToGCUpdatePartyBeacon.Action action = 1 [default = ON];
}

message CMsgClientToGCRequestActiveBeaconParties {
}

message CMsgGCToClientRequestActiveBeaconPartiesResponse {
	enum EResponse {
		SUCCESS = 0;
		FAILURE = 1;
		BUSY = 2;
	}

	optional .CMsgGCToClientRequestActiveBeaconPartiesResponse.EResponse response = 1 [default = SUCCESS];
	repeated .CPartySearchClientParty active_parties = 2;
}

message CMsgClientToGCJoinPartyFromBeacon {
	optional fixed64 party_id = 1;
	optional fixed32 account_id = 2;
	optional int32 beacon_type = 3;
}

message CMsgGCToClientJoinPartyFromBeaconResponse {
	enum EResponse {
		SUCCESS = 0;
		FAILURE = 1;
		BUSY = 2;
		NOT_LEADER = 3;
	}

	optional .CMsgGCToClientJoinPartyFromBeaconResponse.EResponse response = 1 [default = SUCCESS];
}

message CMsgClientToGCManageFavorites {
	enum Action {
		ADD = 0;
		REMOVE = 1;
	}

	optional .CMsgClientToGCManageFavorites.Action action = 1 [default = ADD];
	optional fixed32 account_id = 2;
	optional string favorite_name = 3;
	optional bool invite_response = 4;
	optional bool from_friendlist = 5;
	optional fixed64 lobby_id = 6;
}

message CMsgGCToClientManageFavoritesResponse {
	enum EResponse {
		SUCCESS = 0;
		FAILURE = 1;
		NO_INVITE_PRESENT = 2;
		INVITE_SENT = 3;
		EXPIRED = 4;
		BUSY = 5;
	}

	optional .CMsgGCToClientManageFavoritesResponse.EResponse response = 1 [default = SUCCESS];
	optional string debug_message = 2;
	optional .CMsgPartySearchPlayer player = 3;
}

message CMsgClientToGCGetFavoritePlayers {
	optional uint64 pagination_key = 1;
	optional int32 pagination_count = 2;
}

message CMsgGCToClientGetFavoritePlayersResponse {
	enum EResponse {
		SUCCESS = 0;
		FAILURE = 1;
	}

	optional .CMsgGCToClientGetFavoritePlayersResponse.EResponse response = 1 [default = SUCCESS];
	repeated .CMsgPartySearchPlayer players = 2;
	optional uint64 next_pagination_key = 3;
}

message CMsgGCToClientPartySearchInvite {
	optional fixed32 account_id = 1;
}

message CMsgClientToGCVerifyFavoritePlayers {
	repeated fixed32 account_ids = 1;
}

message CMsgGCToClientVerifyFavoritePlayersResponse {
	message Result {
		optional .CMsgPartySearchPlayer player = 1;
		optional bool is_favorite = 2;
	}

	repeated .CMsgGCToClientVerifyFavoritePlayersResponse.Result results = 1;
}

message CMsgClientToGCRequestPlayerRecentAccomplishments {
	optional uint32 account_id = 1;
}

message CMsgClientToGCRequestPlayerRecentAccomplishmentsResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
	}

	optional .CMsgClientToGCRequestPlayerRecentAccomplishmentsResponse.EResponse result = 1 [default = k_eInternalError];
	optional .CMsgPlayerRecentAccomplishments player_accomplishments = 2;
}

message CMsgClientToGCRequestPlayerHeroRecentAccomplishments {
	optional uint32 account_id = 1;
	optional uint32 hero_id = 2;
}

message CMsgClientToGCRequestPlayerHeroRecentAccomplishmentsResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
	}

	optional .CMsgClientToGCRequestPlayerHeroRecentAccomplishmentsResponse.EResponse result = 1 [default = k_eInternalError];
	optional .CMsgPlayerHeroRecentAccomplishments hero_accomplishments = 2;
}

message CMsgClientToGCSubmitPlayerMatchSurvey {
	optional uint64 match_id = 1;
	optional sint32 rating = 3;
	optional uint32 flags = 4;
}

message CMsgClientToGCSubmitPlayerMatchSurveyResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eAlreadySubmitted = 4;
		k_ePlayerNotValid = 5;
	}

	optional .CMsgClientToGCSubmitPlayerMatchSurveyResponse.EResponse eresult = 1 [default = k_eInternalError];
	optional uint32 account_id = 2;
}

message CMsgGCToClientVACReminder {
}

message CMsgClientToGCUnderDraftRequest {
	optional uint32 account_id = 1;
	optional uint32 event_id = 2;
}

message CMsgClientToGCUnderDraftResponse {
	optional .EUnderDraftResponse result = 1 [default = k_eInternalError];
	optional uint32 account_id = 2;
	optional uint32 event_id = 3;
	optional .CMsgUnderDraftData draft_data = 4;
}

message CMsgClientToGCUnderDraftReroll {
	optional uint32 event_id = 1;
}

message CMsgClientToGCUnderDraftRerollResponse {
	optional .EUnderDraftResponse result = 1 [default = k_eInternalError];
	optional uint32 event_id = 2;
	optional .CMsgUnderDraftData draft_data = 3;
}

message CMsgClientToGCUnderDraftBuy {
	optional uint32 event_id = 1;
	optional uint32 slot_id = 2;
}

message CMsgGCToClientGuildUnderDraftGoldUpdated {
	optional uint32 event_id = 1;
}

message CMsgClientToGCUnderDraftBuyResponse {
	optional .EUnderDraftResponse result = 1 [default = k_eInternalError];
	optional uint32 event_id = 2;
	optional uint32 slot_id = 3;
	optional .CMsgUnderDraftData draft_data = 4;
}

message CMsgClientToGCUnderDraftRollBackBench {
	optional uint32 event_id = 1;
}

message CMsgClientToGCUnderDraftRollBackBenchResponse {
	optional .EUnderDraftResponse result = 1 [default = k_eInternalError];
	optional uint32 event_id = 2;
	optional .CMsgUnderDraftData draft_data = 3;
}

message CMsgClientToGCUnderDraftSell {
	optional uint32 event_id = 1;
	optional uint32 slot_id = 2;
}

message CMsgClientToGCUnderDraftSellResponse {
	optional .EUnderDraftResponse result = 1 [default = k_eInternalError];
	optional uint32 event_id = 2;
	optional uint32 slot_id = 3;
	optional .CMsgUnderDraftData draft_data = 4;
}

message CMsgClientToGCUnderDraftRedeemReward {
	optional uint32 event_id = 1;
	optional uint32 action_id = 2;
}

message CMsgClientToGCUnderDraftRedeemRewardResponse {
	optional .EUnderDraftResponse result = 1 [default = k_eInternalError];
}

message CMsgClientToGCSubmitDraftTriviaMatchAnswer {
	optional bool chose_radiant_as_winner = 1;
	optional uint32 event_id = 2;
	optional uint32 end_time = 3;
}

message CMsgClientToGCSubmitDraftTriviaMatchAnswerResponse {
	optional .EDOTADraftTriviaAnswerResult result = 1 [default = k_EDOTADraftTriviaAnswerResult_Success];
}

message CMsgDraftTriviaVoteCount {
	optional uint32 total_votes = 1;
	optional uint32 radiant_votes = 2;
	optional uint32 dire_votes = 3;
}

message CMsgClientToGCApplyGauntletTicket {
}

message CMsgClientToGCRecalibrateMMR {
}

message CMsgClientToGCRecalibrateMMRResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTimeout = 2;
		k_eTooBusy = 3;
		k_eNotPermitted = 4;
		k_eNotToSoon = 5;
		k_eNotValid = 6;
	}

	optional .CMsgClientToGCRecalibrateMMRResponse.EResponse result = 1 [default = k_eInternalError];
}

message CMsgDOTAPostGameItemAwardNotification {
	optional uint32 receiver_account_id = 1;
	repeated uint32 item_def_index = 2;
	optional uint32 action_id = 3;
}

message CMsgClientToGCGetOWMatchDetails {
}

message CMsgClientToGCGetOWMatchDetailsResponse {
	message Marker {
		optional uint32 start_game_time_s = 1;
		optional uint32 end_game_time_s = 2;
	}

	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTimeout = 2;
		k_eTooBusy = 3;
		k_eNotPermitted = 4;
		k_eNoCaseAvailable = 5;
	}

	optional .CMsgClientToGCGetOWMatchDetailsResponse.EResponse result = 1 [default = k_eInternalError];
	optional uint64 overwatch_replay_id = 2;
	optional uint64 decryption_key = 3;
	optional uint32 cluster = 4;
	optional uint32 overwatch_salt = 5;
	optional uint32 target_player_slot = 6;
	repeated .CMsgClientToGCGetOWMatchDetailsResponse.Marker markers = 7;
	optional .EOverwatchReportReason report_reason = 8 [default = k_EOverwatchReportReason_Unknown];
	optional uint32 target_hero_id = 9;
	optional uint32 rank_tier = 10;
	optional uint32 lane_selection_flags = 11;
}

message CMsgClientToGCSubmitOWConviction {
	optional uint64 overwatch_replay_id = 1;
	optional uint32 target_player_slot = 2;
	optional .EOverwatchConviction cheating_conviction = 3 [default = k_EOverwatchConviction_None];
	optional .EOverwatchConviction griefing_conviction = 4 [default = k_EOverwatchConviction_None];
}

message CMsgClientToGCSubmitOWConvictionResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTimeout = 2;
		k_eTooBusy = 3;
		k_eNotPermitted = 4;
		k_eInvalidReplayID = 5;
		k_eInvalidConviction = 6;
		k_eInvalidPlayerSlot = 7;
	}

	optional .CMsgClientToGCSubmitOWConvictionResponse.EResponse result = 1 [default = k_eInternalError];
	optional uint64 overwatch_replay_id = 2;
}

message CMsgClientToGCChinaSSAURLRequest {
}

message CMsgClientToGCChinaSSAURLResponse {
	optional string agreement_url = 1;
}

message CMsgClientToGCChinaSSAAcceptedRequest {
}

message CMsgClientToGCChinaSSAAcceptedResponse {
	optional bool agreement_accepted = 1;
}

message CMsgGCToClientOverwatchCasesAvailable {
	optional fixed32 expire_time = 1;
}

message CMsgClientToGCStartWatchingOverwatch {
	optional uint64 overwatch_replay_id = 1;
	optional uint32 target_player_slot = 2;
}

message CMsgClientToGCStopWatchingOverwatch {
	optional uint64 overwatch_replay_id = 1;
	optional uint32 target_player_slot = 2;
}

message CMsgClientToGCOverwatchReplayError {
	optional uint64 overwatch_replay_id = 1;
}

message CMsgClientToGCGetDPCFavorites {
}

message CMsgClientToGCGetDPCFavoritesResponse {
	message Favorite {
		optional .EDPCFavoriteType favorite_type = 1 [default = FAVORITE_TYPE_ALL];
		optional uint32 favorite_id = 2;
	}

	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTooBusy = 2;
		k_eDisabled = 3;
		k_eTimeout = 4;
		k_eInvalidRequest = 5;
	}

	optional .CMsgClientToGCGetDPCFavoritesResponse.EResponse result = 1 [default = k_eInternalError];
	repeated .CMsgClientToGCGetDPCFavoritesResponse.Favorite favorites = 2;
}

message CMsgClientToGCSetDPCFavoriteState {
	optional .EDPCFavoriteType favorite_type = 1 [default = FAVORITE_TYPE_ALL];
	optional uint32 favorite_id = 2;
	optional bool enabled = 3;
}

message CMsgClientToGCSetDPCFavoriteStateResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eFavoriteTypeOutOfRange = 2;
		k_eLockFailed = 3;
		k_eAlreadyFavorited = 4;
		k_eAlreadyUnfavorited = 5;
		k_eInsertRecordFailed = 6;
		k_eRemoveRecordFailed = 7;
		k_eTimeout = 8;
	}

	optional .CMsgClientToGCSetDPCFavoriteStateResponse.EResponse result = 1 [default = k_eInternalError];
}

message CMsgClientToGCSetEventActiveSeasonID {
	optional uint32 event_id = 1;
	optional uint32 active_season_id = 2;
}

message CMsgClientToGCSetEventActiveSeasonIDResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eDisabled = 2;
		k_eTooBusy = 3;
		k_eNotAllowed = 4;
		k_eTimeout = 5;
		k_eInternalSuccessNoChange = 6;
	}

	optional .CMsgClientToGCSetEventActiveSeasonIDResponse.EResponse result = 1 [default = k_eInternalError];
}

message CMsgClientToGCPurchaseLabyrinthBlessings {
	optional .EEvent event_id = 1 [default = EVENT_ID_NONE];
	repeated int32 blessing_ids = 2;
	optional bool debug = 3;
	optional bool debug_remove = 4;
}

message CMsgClientToGCPurchaseLabyrinthBlessingsResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eNoSuchBlessing = 2;
		k_eNotEnoughShards = 3;
		k_eNoPath = 4;
		k_eTimeout = 5;
	}

	optional .CMsgClientToGCPurchaseLabyrinthBlessingsResponse.EResponse result = 1 [default = k_eInternalError];
}

message CMsgClientToGCGetStickerbookRequest {
	optional uint32 account_id = 1;
}

message CMsgClientToGCGetStickerbookResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTimeout = 2;
		k_eNotAllowed = 3;
		k_eTooBusy = 4;
	}

	optional .CMsgClientToGCGetStickerbookResponse.EResponse response = 1 [default = k_eInternalError];
	optional .CMsgStickerbook stickerbook = 2;
}

message CMsgClientToGCCreateStickerbookPageRequest {
	optional uint32 team_id = 1;
	optional .EEvent event_id = 2 [default = EVENT_ID_NONE];
	optional .EStickerbookPageType page_type = 3 [default = STICKER_PAGE_GENERIC];
}

message CMsgClientToGCCreateStickerbookPageResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTimeout = 2;
		k_eTooManyPages = 3;
		k_eTooBusy = 4;
	}

	optional .CMsgClientToGCCreateStickerbookPageResponse.EResponse response = 1 [default = k_eInternalError];
	optional uint32 page_number = 2;
}

message CMsgClientToGCDeleteStickerbookPageRequest {
	optional uint32 page_num = 1;
	optional uint32 sticker_count = 2;
	optional uint32 sticker_max = 3;
}

message CMsgClientToGCDeleteStickerbookPageResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTimeout = 2;
		k_eInvalidStickerCount = 3;
		k_eTooBusy = 4;
		k_eInvalidStickerMax = 5;
		k_eInvalidPage = 6;
	}

	optional .CMsgClientToGCDeleteStickerbookPageResponse.EResponse response = 1 [default = k_eInternalError];
}

message CMsgClientToGCPlaceStickersRequest {
	message StickerItem {
		optional uint32 page_num = 2;
		optional .CMsgStickerbookSticker sticker = 3;
	}

	repeated .CMsgClientToGCPlaceStickersRequest.StickerItem sticker_items = 1;
}

message CMsgClientToGCPlaceStickersResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTimeout = 2;
		k_eMissingItem = 3;
		k_eTooBusy = 4;
		k_eDuplicateItem = 5;
		k_eInvalidPage = 6;
		k_ePageTypeMismatch = 7;
		k_eTooManyStickers = 8;
	}

	optional .CMsgClientToGCPlaceStickersResponse.EResponse response = 1 [default = k_eInternalError];
}

message CMsgClientToGCPlaceCollectionStickersRequest {
	message Slot {
		optional uint32 page_num = 1;
		optional uint32 slot = 2;
		optional uint64 new_item_id = 3;
		optional uint32 old_item_def_id = 4;
		optional uint32 old_quality = 5;
	}

	repeated .CMsgClientToGCPlaceCollectionStickersRequest.Slot slots = 1;
}

message CMsgClientToGCPlaceCollectionStickersResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTimeout = 2;
		k_eMissingItem = 3;
		k_eTooBusy = 4;
		k_eDuplicateItem = 5;
		k_eInvalidPage = 6;
		k_ePageTypeMismatch = 7;
		k_eOldItemMismatch = 8;
		k_eInvalidSlot = 9;
		k_eSlotTypeMismatch = 10;
	}

	optional .CMsgClientToGCPlaceCollectionStickersResponse.EResponse response = 1 [default = k_eInternalError];
}

message CMsgClientToGCOrderStickerbookTeamPageRequest {
	optional .CMsgStickerbookTeamPageOrderSequence page_order_sequence = 1;
}

message CMsgClientToGCOrderStickerbookTeamPageResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTimeout = 2;
		k_eTooManyPages = 3;
		k_eTooBusy = 4;
		k_eInvalidPage = 5;
	}

	optional .CMsgClientToGCOrderStickerbookTeamPageResponse.EResponse response = 1 [default = k_eInternalError];
}

message CMsgClientToGCSetHeroSticker {
	optional uint32 hero_id = 1;
	optional uint64 new_item_id = 2;
	optional uint64 old_item_id = 3;
}

message CMsgClientToGCSetHeroStickerResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTimeout = 2;
		k_eMissingItem = 3;
		k_eTooBusy = 4;
		k_eOldItemMismatch = 5;
		k_eInvalidHero = 6;
	}

	optional .CMsgClientToGCSetHeroStickerResponse.EResponse response = 1 [default = k_eInternalError];
}

message CMsgClientToGCGetHeroStickers {
}

message CMsgClientToGCGetHeroStickersResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTimeout = 2;
		k_eTooBusy = 4;
	}

	optional .CMsgClientToGCGetHeroStickersResponse.EResponse response = 1 [default = k_eInternalError];
	optional .CMsgStickerHeroes sticker_heroes = 2;
}

message CMsgClientToGCSetFavoritePage {
	optional uint32 page_num = 1;
	optional bool clear = 2;
}

message CMsgClientToGCSetFavoritePageResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTimeout = 2;
		k_eTooBusy = 4;
		k_eInvalidPage = 5;
	}

	optional .CMsgClientToGCSetFavoritePageResponse.EResponse response = 1 [default = k_eInternalError];
}

message CMsgClientToGCClaimSwag {
	optional .EEvent event_id = 1 [default = EVENT_ID_NONE];
	optional uint32 action_id = 2;
	optional uint32 data = 3;
}

message CMsgClientToGCClaimSwagResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTimeout = 2;
		k_eTooBusy = 4;
		k_eAlreadyClaimed = 5;
		k_eDisabled = 6;
		k_eInvalidRequest = 7;
		k_eUserNotEligible = 8;
		k_eStorageError = 9;
		k_eRewardDisabled = 10;
	}

	optional .CMsgClientToGCClaimSwagResponse.EResponse response = 1 [default = k_eInternalError];
}

message CMsgClientToGCCollectorsCacheAvailableDataRequest {
	optional uint32 contest_id = 1;
}

message CMsgGCToClientCollectorsCacheAvailableDataResponse {
	message Vote {
		enum EVoteType {
			k_eUp = 0;
			k_eDown = 1;
		}

		optional uint32 item_def = 1;
		optional .CMsgGCToClientCollectorsCacheAvailableDataResponse.Vote.EVoteType vote_type = 2 [default = k_eUp];
	}

	repeated .CMsgGCToClientCollectorsCacheAvailableDataResponse.Vote votes = 1;
}

message CMsgClientToGCUploadMatchClip {
	optional .CMatchClip match_clip = 1;
}

message CMsgGCToClientUploadMatchClipResponse {
	enum EResponse {
		k_eInternalError = 0;
		k_eSuccess = 1;
		k_eTimeout = 2;
		k_eTooBusy = 4;
	}

	optional .CMsgGCToClientUploadMatchClipResponse.EResponse response = 1 [default = k_eInternalError];
}
