import "steammessages_base.proto";

option optimize_for = SPEED;
option cc_generic_services = false;

message CMsgClientUCMAddScreenshot {
	message Tag {
		optional string tag_name = 1;
		optional string tag_value = 2;
	}

	optional uint32 appid = 1;
	optional string filename = 2;
	optional string thumbname = 3;
	optional string vr_filename = 14;
	optional fixed32 rtime32_created = 4;
	optional uint32 width = 5;
	optional uint32 height = 6;
	optional uint32 permissions = 7;
	optional string caption = 8;
	optional string shortcut_name = 9;
	repeated .CMsgClientUCMAddScreenshot.Tag tag = 10;
	repeated fixed64 tagged_steamid = 11;
	optional bool spoiler_tag = 12;
	repeated uint64 tagged_publishedfileid = 13;
}

message CMsgClientUCMAddScreenshotResponse {
	optional int32 eresult = 1 [default = 2];
	optional fixed64 screenshotid = 2 [default = 18446744073709551615];
}

message CMsgClientUCMDeleteScreenshot {
	optional fixed64 screenshotid = 1 [default = 18446744073709551615];
}

message CMsgClientUCMDeleteScreenshotResponse {
	optional int32 eresult = 1 [default = 2];
}

message CMsgClientUCMPublishFile {
	optional uint32 app_id = 1;
	optional string file_name = 2;
	optional string preview_file_name = 3;
	optional uint32 consumer_app_id = 4;
	optional string title = 5;
	optional string description = 6;
	repeated string tags = 8;
	optional bool workshop_file = 9;
	optional int32 visibility = 10;
	optional uint32 file_type = 11;
	optional string url = 12;
	optional uint32 video_provider = 13;
	optional string video_account_name = 14;
	optional string video_identifier = 15;
	optional bool in_progress = 16;
}

message CMsgClientUCMPublishFileResponse {
	optional int32 eresult = 1 [default = 2];
	optional fixed64 published_file_id = 2 [default = 18446744073709551615];
	optional bool needs_workshop_legal_agreement_acceptance = 3 [default = false];
}

message CMsgClientUCMUpdatePublishedFile {
	message KeyValueTag {
		optional string key = 1;
		optional string value = 2;
	}

	message AdditionalPreview {
		optional string original_file_name = 1;
		optional string internal_file_name = 2;
		optional string videoid = 3;
		optional uint32 preview_type = 4;
		optional int32 update_index = 5 [default = -1];
	}

	optional uint32 app_id = 1;
	optional fixed64 published_file_id = 2;
	optional string file_name = 3;
	optional string preview_file_name = 4;
	optional string title = 5;
	optional string description = 6;
	repeated string tags = 7;
	optional int32 visibility = 8;
	optional bool update_file = 9;
	optional bool update_preview_file = 10;
	optional bool update_title = 11;
	optional bool update_description = 12;
	optional bool update_tags = 13;
	optional bool update_visibility = 14;
	optional string change_description = 15;
	optional bool update_url = 16;
	optional string url = 17;
	optional bool update_content_manifest = 18;
	optional fixed64 content_manifest = 19;
	optional string metadata = 20;
	optional bool update_metadata = 21;
	optional int32 language = 22 [default = 0];
	repeated string removed_kvtags = 23;
	repeated .CMsgClientUCMUpdatePublishedFile.KeyValueTag kvtags = 24;
	repeated .CMsgClientUCMUpdatePublishedFile.AdditionalPreview previews = 25;
	repeated int32 previews_to_remove = 26;
	optional bool clear_in_progress = 27;
	optional bool remove_all_kvtags = 28;
}

message CMsgClientUCMUpdatePublishedFileResponse {
	optional int32 eresult = 1 [default = 2];
	optional bool needs_workshop_legal_agreement_acceptance = 2 [default = false];
}

message CMsgClientUCMDeletePublishedFile {
	optional fixed64 published_file_id = 1;
	optional uint32 app_id = 2;
}

message CMsgClientUCMDeletePublishedFileResponse {
	optional int32 eresult = 1 [default = 2];
}

message CMsgClientUCMEnumerateUserPublishedFiles {
	optional uint32 app_id = 1;
	optional uint32 start_index = 2;
	optional uint32 sort_order = 3;
}

message CMsgClientUCMEnumerateUserPublishedFilesResponse {
	message PublishedFileId {
		optional fixed64 published_file_id = 1;
	}

	optional int32 eresult = 1 [default = 2];
	repeated .CMsgClientUCMEnumerateUserPublishedFilesResponse.PublishedFileId published_files = 2;
	optional uint32 total_results = 3;
}

message CMsgClientUCMEnumerateUserSubscribedFiles {
	optional uint32 app_id = 1;
	optional uint32 start_index = 2;
	optional uint32 list_type = 3 [default = 1];
	optional uint32 matching_file_type = 4 [default = 0];
	optional uint32 count = 5 [default = 50];
}

message CMsgClientUCMEnumerateUserSubscribedFilesResponse {
	message PublishedFileId {
		optional fixed64 published_file_id = 1;
		optional fixed32 rtime32_subscribed = 2 [default = 0];
	}

	optional int32 eresult = 1 [default = 2];
	repeated .CMsgClientUCMEnumerateUserSubscribedFilesResponse.PublishedFileId subscribed_files = 2;
	optional uint32 total_results = 3;
}

message CMsgClientUCMEnumerateUserSubscribedFilesWithUpdates {
	optional uint32 app_id = 1;
	optional uint32 start_index = 2;
	optional fixed32 start_time = 3;
	optional uint32 desired_revision = 4 [default = 0];
}

message CMsgClientUCMEnumerateUserSubscribedFilesWithUpdatesResponse {
	message PublishedFileId {
		optional fixed64 published_file_id = 1;
		optional fixed32 rtime32_subscribed = 2 [default = 0];
		optional uint32 appid = 3;
		optional fixed64 file_hcontent = 4;
		optional uint32 file_size = 5;
		optional fixed32 rtime32_last_updated = 6;
		optional bool is_depot_content = 7;
	}

	optional int32 eresult = 1 [default = 2];
	repeated .CMsgClientUCMEnumerateUserSubscribedFilesWithUpdatesResponse.PublishedFileId subscribed_files = 2;
	optional uint32 total_results = 3;
}

message CMsgClientUCMPublishedFileUpdated {
	optional fixed64 published_file_id = 1;
	optional uint32 app_id = 2;
	optional uint32 time_updated = 3;
	optional fixed64 hcontent = 4;
	optional fixed32 file_size = 5;
	optional bool is_depot_content = 6;
	optional uint32 revision = 7;
}

message CMsgClientWorkshopItemChangesRequest {
	optional uint32 app_id = 1;
	optional uint32 last_time_updated = 2;
	optional uint32 num_items_needed = 3;
}

message CMsgClientWorkshopItemChangesResponse {
	message WorkshopItemInfo {
		optional fixed64 published_file_id = 1;
		optional uint32 time_updated = 2;
		optional fixed64 manifest_id = 3;
	}

	optional int32 eresult = 1 [default = 2];
	optional uint32 update_time = 2;
	repeated .CMsgClientWorkshopItemChangesResponse.WorkshopItemInfo workshop_items = 5;
}

message CMsgClientWorkshopItemInfoRequest {
	message WorkshopItem {
		optional fixed64 published_file_id = 1;
		optional uint32 time_updated = 2;
	}

	optional uint32 app_id = 1;
	optional uint32 last_time_updated = 2;
	repeated .CMsgClientWorkshopItemInfoRequest.WorkshopItem workshop_items = 3;
}

message CMsgClientWorkshopItemInfoResponse {
	message WorkshopItemInfo {
		optional fixed64 published_file_id = 1;
		optional uint32 time_updated = 2;
		optional fixed64 manifest_id = 3;
		optional bool is_legacy = 4;
	}

	optional int32 eresult = 1 [default = 2];
	optional uint32 update_time = 2;
	repeated .CMsgClientWorkshopItemInfoResponse.WorkshopItemInfo workshop_items = 3;
	repeated fixed64 private_items = 4;
}

message CMsgClientUCMGetPublishedFilesForUser {
	optional uint32 app_id = 1;
	optional fixed64 creator_steam_id = 2;
	repeated string required_tags = 3;
	repeated string excluded_tags = 4;
	optional uint32 start_index = 5;
}

message CMsgClientUCMGetPublishedFilesForUserResponse {
	message PublishedFileId {
		optional fixed64 published_file_id = 1;
	}

	optional int32 eresult = 1 [default = 2];
	repeated .CMsgClientUCMGetPublishedFilesForUserResponse.PublishedFileId published_files = 2;
	optional uint32 total_results = 3;
}

message CMsgClientUCMSetUserPublishedFileAction {
	optional fixed64 published_file_id = 1;
	optional uint32 app_id = 2;
	optional int32 action = 3;
}

message CMsgClientUCMSetUserPublishedFileActionResponse {
	optional int32 eresult = 1 [default = 2];
}

message CMsgClientUCMEnumeratePublishedFilesByUserAction {
	optional uint32 app_id = 1;
	optional uint32 start_index = 2;
	optional int32 action = 3;
}

message CMsgClientUCMEnumeratePublishedFilesByUserActionResponse {
	message PublishedFileId {
		optional fixed64 published_file_id = 1;
		optional fixed32 rtime_time_stamp = 2 [default = 0];
	}

	optional int32 eresult = 1 [default = 2];
	repeated .CMsgClientUCMEnumeratePublishedFilesByUserActionResponse.PublishedFileId published_files = 2;
	optional uint32 total_results = 3;
}

message CMsgClientScreenshotsChanged {
}

message CMsgClientUpdateUserGameInfo {
	optional fixed64 steamid_idgs = 1;
	optional fixed64 gameid = 2;
	optional uint32 game_ip = 3;
	optional uint32 game_port = 4;
	optional bytes token = 5;
}

message CMsgClientRichPresenceUpload {
	optional bytes rich_presence_kv = 1;
	repeated fixed64 steamid_broadcast = 2;
}

message CMsgClientRichPresenceRequest {
	repeated fixed64 steamid_request = 1;
}

message CMsgClientRichPresenceInfo {
	message RichPresence {
		optional fixed64 steamid_user = 1;
		optional bytes rich_presence_kv = 2;
	}

	repeated .CMsgClientRichPresenceInfo.RichPresence rich_presence = 1;
}

message CMsgClientCheckFileSignature {
	optional uint32 app_id = 1;
}

message CMsgClientCheckFileSignatureResponse {
	optional uint32 app_id = 1;
	optional uint32 pid = 2;
	optional uint32 eresult = 3;
	optional string filename = 4;
	optional uint32 esignatureresult = 5;
	optional bytes sha_file = 6;
	optional bytes signatureheader = 7;
	optional uint32 filesize = 8;
	optional uint32 getlasterror = 9;
	optional uint32 evalvesignaturecheckdetail = 10;
}

message CMsgClientReadMachineAuth {
	optional string filename = 1;
	optional uint32 offset = 2;
	optional uint32 cubtoread = 3;
}

message CMsgClientReadMachineAuthResponse {
	optional string filename = 1;
	optional uint32 eresult = 2;
	optional uint32 filesize = 3;
	optional bytes sha_file = 4;
	optional uint32 getlasterror = 5;
	optional uint32 offset = 6;
	optional uint32 cubread = 7;
	optional bytes bytes_read = 8;
	optional string filename_sentry = 9;
}

message CMsgClientUpdateMachineAuth {
	optional string filename = 1;
	optional uint32 offset = 2;
	optional uint32 cubtowrite = 3;
	optional bytes bytes = 4;
	optional uint32 otp_type = 5;
	optional string otp_identifier = 6;
	optional bytes otp_sharedsecret = 7;
	optional uint32 otp_timedrift = 8;
}

message CMsgClientUpdateMachineAuthResponse {
	optional string filename = 1;
	optional uint32 eresult = 2;
	optional uint32 filesize = 3;
	optional bytes sha_file = 4;
	optional uint32 getlasterror = 5;
	optional uint32 offset = 6;
	optional uint32 cubwrote = 7;
	optional int32 otp_type = 8;
	optional uint32 otp_value = 9;
	optional string otp_identifier = 10;
}

message CMsgClientRequestMachineAuth {
	optional string filename = 1;
	optional uint32 eresult_sentryfile = 2;
	optional uint32 filesize = 3;
	optional bytes sha_sentryfile = 4;
	optional int32 lock_account_action = 6;
	optional uint32 otp_type = 7;
	optional string otp_identifier = 8;
	optional bytes otp_sharedsecret = 9;
	optional uint32 otp_value = 10;
	optional string machine_name = 11;
	optional string machine_name_userchosen = 12;
}

message CMsgClientRequestMachineAuthResponse {
	optional uint32 eresult = 1;
}

message CMsgClientRegisterKey {
	optional string key = 1;
}

message CMsgClientPurchaseResponse {
	optional int32 eresult = 1 [default = 2];
	optional int32 purchase_result_details = 2;
	optional bytes purchase_receipt_info = 3;
}

message CMsgClientActivateOEMLicense {
	optional string bios_manufacturer = 1;
	optional string bios_serialnumber = 2;
	optional bytes license_file = 3;
	optional string mainboard_manufacturer = 4;
	optional string mainboard_product = 5;
	optional string mainboard_serialnumber = 6;
}

message CMsgClientRegisterOEMMachine {
	optional bytes oem_register_file = 1;
}

message CMsgClientRegisterOEMMachineResponse {
	optional uint32 eresult = 1;
}

message CMsgClientPurchaseWithMachineID {
	optional uint32 package_id = 1;
	optional bytes machine_info = 2;
}

message CMsgTrading_InitiateTradeRequest {
	optional uint32 trade_request_id = 1;
	optional uint64 other_steamid = 2;
	optional string other_name = 3;
}

message CMsgTrading_InitiateTradeResponse {
	optional uint32 response = 1;
	optional uint32 trade_request_id = 2;
	optional uint64 other_steamid = 3;
	optional uint32 steamguard_required_days = 4;
	optional uint32 new_device_cooldown_days = 5;
	optional uint32 default_password_reset_probation_days = 6;
	optional uint32 password_reset_probation_days = 7;
	optional uint32 default_email_change_probation_days = 8;
	optional uint32 email_change_probation_days = 9;
}

message CMsgTrading_CancelTradeRequest {
	optional uint64 other_steamid = 1;
}

message CMsgTrading_StartSession {
	optional uint64 other_steamid = 1;
}

message CMsgClientGetCDNAuthToken {
	optional uint32 depot_id = 1;
	optional string host_name = 2;
	optional uint32 app_id = 3;
}

message CMsgClientGetDepotDecryptionKey {
	optional uint32 depot_id = 1;
	optional uint32 app_id = 2;
}

message CMsgClientGetDepotDecryptionKeyResponse {
	optional int32 eresult = 1 [default = 2];
	optional uint32 depot_id = 2;
	optional bytes depot_encryption_key = 3;
}

message CMsgClientCheckAppBetaPassword {
	optional uint32 app_id = 1;
	optional string betapassword = 2;
}

message CMsgClientCheckAppBetaPasswordResponse {
	message BetaPassword {
		optional string betaname = 1;
		optional string betapassword = 2;
	}

	optional int32 eresult = 1 [default = 2];
	repeated .CMsgClientCheckAppBetaPasswordResponse.BetaPassword betapasswords = 4;
}

message CMsgClientUpdateAppJobReport {
	optional uint32 app_id = 1;
	repeated uint32 depot_ids = 2;
	optional uint32 app_state = 3;
	optional uint32 job_app_error = 4;
	optional string error_details = 5;
	optional uint32 job_duration = 6;
	optional uint32 files_validation_failed = 7;
	optional uint64 job_bytes_downloaded = 8;
	optional uint64 job_bytes_staged = 9;
	optional uint64 bytes_comitted = 10;
	optional uint32 start_app_state = 11;
	optional fixed64 stats_machine_id = 12;
	optional string branch_name = 13;
	optional uint64 total_bytes_downloaded = 14;
	optional uint64 total_bytes_staged = 15;
	optional uint64 total_bytes_restored = 16;
	optional bool is_borrowed = 17;
	optional bool is_free_weekend = 18;
	optional uint64 total_bytes_legacy = 19;
	optional uint64 total_bytes_patched = 20;
	optional uint64 total_bytes_saved = 21;
	optional uint32 cell_id = 22;
}

message CMsgClientDPContentStatsReport {
	optional fixed64 stats_machine_id = 1;
	optional string country_code = 2;
	optional int32 os_type = 3;
	optional int32 language = 4;
	optional uint32 num_install_folders = 5;
	optional uint32 num_installed_games = 6;
	optional uint64 size_installed_games = 7;
}

message CMsgClientGetCDNAuthTokenResponse {
	optional uint32 eresult = 1 [default = 2];
	optional string token = 2;
	optional uint32 expiration_time = 3;
}

message CMsgDownloadRateStatistics {
	message StatsInfo {
		optional uint32 source_type = 1;
		optional uint32 source_id = 2;
		optional uint32 seconds = 3;
		optional uint64 bytes = 4;
		optional string host_name = 5;
		optional uint64 microseconds = 6;
		optional bool used_ipv6 = 7;
		optional bool proxied = 8;
	}

	optional uint32 cell_id = 1;
	repeated .CMsgDownloadRateStatistics.StatsInfo stats = 2;
	optional uint32 throttling_kbps = 3;
}

message CMsgClientRequestAccountData {
	optional string account_or_email = 1;
	optional uint32 action = 2;
}

message CMsgClientRequestAccountDataResponse {
	optional uint32 action = 1;
	optional uint32 eresult = 2;
	optional string account_name = 3;
	optional uint32 ct_matches = 4;
	optional string account_name_suggestion1 = 5;
	optional string account_name_suggestion2 = 6;
	optional string account_name_suggestion3 = 7;
}

message CMsgClientUGSGetGlobalStats {
	optional uint64 gameid = 1;
	optional uint32 history_days_requested = 2;
	optional fixed32 time_last_requested = 3;
	optional uint32 first_day_cached = 4;
	optional uint32 days_cached = 5;
}

message CMsgClientUGSGetGlobalStatsResponse {
	message Day {
		message Stat {
			optional int32 stat_id = 1;
			optional int64 data = 2;
		}

		optional uint32 day_id = 1;
		repeated .CMsgClientUGSGetGlobalStatsResponse.Day.Stat stats = 2;
	}

	optional int32 eresult = 1 [default = 2];
	optional fixed32 timestamp = 2;
	optional int32 day_current = 3;
	repeated .CMsgClientUGSGetGlobalStatsResponse.Day days = 4;
}

message CMsgGameServerData {
	message Player {
		optional fixed64 steam_id = 1;
	}

	optional fixed64 steam_id_gs = 1;
	optional uint32 deprecated_ip = 2;
	optional uint32 query_port = 3;
	optional uint32 game_port = 4;
	optional uint32 sourcetv_port = 5;
	optional string name = 22;
	optional .CMsgIPAddress game_ip_address = 23;
	optional uint32 app_id = 6;
	optional string gamedir = 7;
	optional string version = 8;
	optional string product = 9;
	optional string region = 10;
	repeated .CMsgGameServerData.Player players = 11;
	optional uint32 max_players = 12;
	optional uint32 bot_count = 13;
	optional bool password = 14;
	optional bool secure = 15;
	optional bool dedicated = 16;
	optional string os = 17;
	optional string game_data = 18;
	optional uint32 game_data_version = 19;
	optional string game_type = 20;
	optional string map = 21;
}

message CMsgGameServerRemove {
	optional fixed64 steam_id = 1;
	optional uint32 deprecated_ip = 2;
	optional uint32 query_port = 3;
	optional .CMsgIPAddress ip = 4;
}

message CMsgClientGMSServerQuery {
	optional uint32 app_id = 1;
	optional uint32 geo_location_ip = 2;
	optional uint32 region_code = 3;
	optional string filter_text = 4;
	optional uint32 max_servers = 5;
}

message CMsgGMSClientServerQueryResponse {
	message Server {
		optional uint32 deprecated_server_ip = 1;
		optional uint32 server_port = 2;
		optional uint32 auth_players = 3;
		optional .CMsgIPAddress server_ip = 4;
	}

	repeated .CMsgGMSClientServerQueryResponse.Server servers = 1;
	optional string error = 2;
}

message CMsgGameServerOutOfDate {
	optional fixed64 steam_id_gs = 1;
	optional bool reject = 2;
	optional string message = 3;
}

message CMsgClientRedeemGuestPass {
	optional fixed64 guest_pass_id = 1;
}

message CMsgClientRedeemGuestPassResponse {
	optional uint32 eresult = 1 [default = 2];
	optional uint32 package_id = 2;
	optional uint32 must_own_appid = 3;
}

message CMsgClientGetClanActivityCounts {
	repeated uint64 steamid_clans = 1;
}

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

message CMsgClientOGSReportString {
	optional bool accumulated = 1;
	optional uint64 sessionid = 2;
	optional int32 severity = 3;
	optional string formatter = 4;
	optional bytes varargs = 5;
}

message CMsgClientOGSReportBug {
	optional uint64 sessionid = 1;
	optional string bugtext = 2;
	optional bytes screenshot = 3;
}

message CMsgGSAssociateWithClan {
	optional fixed64 steam_id_clan = 1;
}

message CMsgGSAssociateWithClanResponse {
	optional fixed64 steam_id_clan = 1;
	optional uint32 eresult = 2 [default = 2];
}

message CMsgGSComputeNewPlayerCompatibility {
	optional fixed64 steam_id_candidate = 1;
}

message CMsgGSComputeNewPlayerCompatibilityResponse {
	optional fixed64 steam_id_candidate = 1;
	optional uint32 eresult = 2 [default = 2];
	optional bool is_clan_member = 3;
	optional int32 ct_dont_like_you = 4;
	optional int32 ct_you_dont_like = 5;
	optional int32 ct_clanmembers_dont_like_you = 6;
}

message CMsgClientSentLogs {
}

message CMsgGCClient {
	optional uint32 appid = 1;
	optional uint32 msgtype = 2;
	optional bytes payload = 3;
	optional fixed64 steamid = 4;
	optional string gcname = 5;
	optional uint32 ip = 6;
}

message CMsgClientRequestFreeLicense {
	repeated uint32 appids = 2;
}

message CMsgClientRequestFreeLicenseResponse {
	optional uint32 eresult = 1 [default = 2];
	repeated uint32 granted_packageids = 2;
	repeated uint32 granted_appids = 3;
}

message CMsgDRMDownloadRequestWithCrashData {
	optional uint32 download_flags = 1;
	optional uint32 download_types_known = 2;
	optional bytes guid_drm = 3;
	optional bytes guid_split = 4;
	optional bytes guid_merge = 5;
	optional string module_name = 6;
	optional string module_path = 7;
	optional bytes crash_data = 8;
}

message CMsgDRMDownloadResponse {
	optional uint32 eresult = 1 [default = 2];
	optional uint32 app_id = 2;
	optional uint32 blob_download_type = 3;
	optional bytes merge_guid = 4;
	optional uint32 download_file_dfs_ip = 5;
	optional uint32 download_file_dfs_port = 6;
	optional string download_file_url = 7;
	optional string module_path = 8;
}

message CMsgDRMFinalResult {
	optional uint32 eResult = 1 [default = 2];
	optional uint32 app_id = 2;
	optional uint32 blob_download_type = 3;
	optional uint32 error_detail = 4;
	optional bytes merge_guid = 5;
	optional uint32 download_file_dfs_ip = 6;
	optional uint32 download_file_dfs_port = 7;
	optional string download_file_url = 8;
}

message CMsgClientDPCheckSpecialSurvey {
	optional uint32 survey_id = 1;
}

message CMsgClientDPCheckSpecialSurveyResponse {
	optional uint32 eResult = 1 [default = 2];
	optional uint32 state = 2;
	optional string name = 3;
	optional string custom_url = 4;
	optional bool include_software = 5;
	optional bytes token = 6;
}

message CMsgClientDPSendSpecialSurveyResponse {
	optional uint32 survey_id = 1;
	optional bytes data = 2;
}

message CMsgClientDPSendSpecialSurveyResponseReply {
	optional uint32 eResult = 1 [default = 2];
	optional bytes token = 2;
}

message CMsgClientRequestForgottenPasswordEmail {
	optional string account_name = 1;
	optional string password_tried = 2;
}

message CMsgClientRequestForgottenPasswordEmailResponse {
	optional uint32 eResult = 1;
	optional bool use_secret_question = 2;
}

message CMsgClientItemAnnouncements {
	message UnseenItem {
		optional uint32 appid = 1;
		optional uint64 context_id = 2;
		optional uint64 asset_id = 3;
		optional uint64 amount = 4;
		optional fixed32 rtime32_gained = 5;
		optional uint32 source_appid = 6;
	}

	optional uint32 count_new_items = 1;
	repeated .CMsgClientItemAnnouncements.UnseenItem unseen_items = 2;
}

message CMsgClientRequestItemAnnouncements {
}

message CMsgClientUserNotifications {
	message Notification {
		optional uint32 user_notification_type = 1;
		optional uint32 count = 2;
	}

	repeated .CMsgClientUserNotifications.Notification notifications = 1;
}

message CMsgClientCommentNotifications {
	optional uint32 count_new_comments = 1;
	optional uint32 count_new_comments_owner = 2;
	optional uint32 count_new_comments_subscriptions = 3;
}

message CMsgClientRequestCommentNotifications {
}

message CMsgClientOfflineMessageNotification {
	optional uint32 offline_messages = 1;
	repeated uint32 friends_with_offline_messages = 2;
}

message CMsgClientRequestOfflineMessageCount {
}

message CMsgClientChatGetFriendMessageHistory {
	optional fixed64 steamid = 1;
}

message CMsgClientChatGetFriendMessageHistoryResponse {
	message FriendMessage {
		optional uint32 accountid = 1;
		optional uint32 timestamp = 2;
		optional string message = 3;
		optional bool unread = 4;
	}

	optional fixed64 steamid = 1;
	optional uint32 success = 2;
	repeated .CMsgClientChatGetFriendMessageHistoryResponse.FriendMessage messages = 3;
}

message CMsgClientChatGetFriendMessageHistoryForOfflineMessages {
}

message CMsgClientFSGetFriendsSteamLevels {
	repeated uint32 accountids = 1;
}

message CMsgClientFSGetFriendsSteamLevelsResponse {
	message Friend {
		optional uint32 accountid = 1;
		optional uint32 level = 2;
	}

	repeated .CMsgClientFSGetFriendsSteamLevelsResponse.Friend friends = 1;
}

message CMsgClientEmailAddrInfo {
	optional string email_address = 1;
	optional bool email_is_validated = 2;
	optional bool email_validation_changed = 3;
	optional bool credential_change_requires_code = 4;
	optional bool password_or_secretqa_change_requires_code = 5;
	optional bool remind_user_about_email = 6;
}

message CMsgCREItemVoteSummary {
	message PublishedFileId {
		optional fixed64 published_file_id = 1;
	}

	repeated .CMsgCREItemVoteSummary.PublishedFileId published_file_ids = 1;
}

message CMsgCREItemVoteSummaryResponse {
	message ItemVoteSummary {
		optional fixed64 published_file_id = 1;
		optional int32 votes_for = 2;
		optional int32 votes_against = 3;
		optional int32 reports = 4;
		optional float score = 5;
	}

	optional int32 eresult = 1 [default = 2];
	repeated .CMsgCREItemVoteSummaryResponse.ItemVoteSummary item_vote_summaries = 2;
}

message CMsgCREUpdateUserPublishedItemVote {
	optional fixed64 published_file_id = 1;
	optional bool vote_up = 2;
}

message CMsgCREUpdateUserPublishedItemVoteResponse {
	optional int32 eresult = 1 [default = 2];
}

message CMsgCREGetUserPublishedItemVoteDetails {
	message PublishedFileId {
		optional fixed64 published_file_id = 1;
	}

	repeated .CMsgCREGetUserPublishedItemVoteDetails.PublishedFileId published_file_ids = 1;
}

message CMsgCREGetUserPublishedItemVoteDetailsResponse {
	message UserItemVoteDetail {
		optional fixed64 published_file_id = 1;
		optional int32 vote = 2 [default = 0];
	}

	optional int32 eresult = 1 [default = 2];
	repeated .CMsgCREGetUserPublishedItemVoteDetailsResponse.UserItemVoteDetail user_item_vote_details = 2;
}

message CMsgGameServerPingSample {
	message Sample {
		optional fixed32 ip = 1;
		optional uint32 avg_ping_ms = 2;
		optional uint32 stddev_ping_ms_x10 = 3;
	}

	optional fixed32 my_ip = 1;
	optional int32 gs_app_id = 2;
	repeated .CMsgGameServerPingSample.Sample gs_samples = 3;
}

message CMsgFSGetFollowerCount {
	optional fixed64 steam_id = 1;
}

message CMsgFSGetFollowerCountResponse {
	optional int32 eresult = 1 [default = 2];
	optional int32 count = 2 [default = 0];
}

message CMsgFSGetIsFollowing {
	optional fixed64 steam_id = 1;
}

message CMsgFSGetIsFollowingResponse {
	optional int32 eresult = 1 [default = 2];
	optional bool is_following = 2 [default = false];
}

message CMsgFSEnumerateFollowingList {
	optional uint32 start_index = 1;
}

message CMsgFSEnumerateFollowingListResponse {
	optional int32 eresult = 1 [default = 2];
	optional int32 total_results = 2;
	repeated fixed64 steam_ids = 3;
}

message CMsgDPGetNumberOfCurrentPlayers {
	optional uint32 appid = 1;
}

message CMsgDPGetNumberOfCurrentPlayersResponse {
	optional int32 eresult = 1 [default = 2];
	optional int32 player_count = 2;
}

message CMsgClientFriendUserStatusPublished {
	optional fixed64 friend_steamid = 1;
	optional uint32 appid = 2;
	optional string status_text = 3;
}

message CMsgClientServiceMethodLegacy {
	optional string method_name = 1;
	optional bytes serialized_method = 2;
	optional bool is_notification = 3;
}

message CMsgClientServiceMethodLegacyResponse {
	optional string method_name = 1;
	optional bytes serialized_method_response = 2;
}

message CMsgClientUIMode {
	optional uint32 uimode = 1;
	optional uint32 chat_mode = 2;
}

message CMsgClientVanityURLChangedNotification {
	optional string vanity_url = 1;
}

message CMsgClientAuthorizeLocalDeviceRequest {
	optional string device_description = 1;
	optional uint32 owner_account_id = 2;
	optional uint64 local_device_token = 3;
}

message CMsgClientAuthorizeLocalDevice {
	optional int32 eresult = 1 [default = 2];
	optional uint32 owner_account_id = 2;
	optional uint64 authed_device_token = 3;
}

message CMsgClientAuthorizeLocalDeviceNotification {
	optional int32 eresult = 1 [default = 2];
	optional uint32 owner_account_id = 2;
	optional uint64 local_device_token = 3;
}

message CMsgClientDeauthorizeDeviceRequest {
	optional uint32 deauthorization_account_id = 1;
	optional uint64 deauthorization_device_token = 2;
}

message CMsgClientDeauthorizeDevice {
	optional int32 eresult = 1 [default = 2];
	optional uint32 deauthorization_account_id = 2;
}

message CMsgClientUseLocalDeviceAuthorizations {
	message DeviceToken {
		optional uint32 owner_account_id = 1;
		optional uint64 token_id = 2;
	}

	repeated uint32 authorization_account_id = 1;
	repeated .CMsgClientUseLocalDeviceAuthorizations.DeviceToken device_tokens = 2;
}

message CMsgClientGetAuthorizedDevices {
}

message CMsgClientGetAuthorizedDevicesResponse {
	message AuthorizedDevice {
		optional uint64 auth_device_token = 1;
		optional string device_name = 2;
		optional uint32 last_access_time = 3;
		optional uint32 borrower_id = 4;
		optional bool is_pending = 5;
		optional uint32 app_played = 6;
	}

	optional int32 eresult = 1 [default = 2];
	repeated .CMsgClientGetAuthorizedDevicesResponse.AuthorizedDevice authorized_device = 2;
}

message CMsgClientSharedLibraryLockStatus {
	message LockedLibrary {
		optional uint32 owner_id = 1;
		optional uint32 locked_by = 2;
	}

	repeated .CMsgClientSharedLibraryLockStatus.LockedLibrary locked_library = 1;
	optional uint32 own_library_locked_by = 2;
}

message CMsgClientSharedLibraryStopPlaying {
	message StopApp {
		optional uint32 app_id = 1;
		optional uint32 owner_id = 2;
	}

	optional int32 seconds_left = 1;
	repeated .CMsgClientSharedLibraryStopPlaying.StopApp stop_apps = 2;
}

message CMsgClientServiceCall {
	optional bytes sysid_routing = 1;
	optional uint32 call_handle = 2;
	optional uint32 module_crc = 3;
	optional bytes module_hash = 4;
	optional uint32 function_id = 5;
	optional uint32 cub_output_max = 6;
	optional uint32 flags = 7;
	optional bytes callparameter = 8;
	optional bool ping_only = 9;
	optional uint32 max_outstanding_calls = 10;
}

message CMsgClientServiceModule {
	optional uint32 module_crc = 1;
	optional bytes module_hash = 2;
	optional bytes module_content = 3;
}

message CMsgClientServiceCallResponse {
	optional bytes sysid_routing = 1;
	optional uint32 call_handle = 2;
	optional uint32 module_crc = 3;
	optional bytes module_hash = 4;
	optional uint32 ecallresult = 5;
	optional bytes result_content = 6;
	optional bytes os_version_info = 7;
	optional bytes system_info = 8;
	optional fixed64 load_address = 9;
	optional bytes exception_record = 10;
	optional bytes portable_os_version_info = 11;
	optional bytes portable_system_info = 12;
	optional bool was_converted = 13;
	optional uint32 internal_result = 14;
	optional uint32 current_count = 15;
	optional uint32 last_call_handle = 16;
	optional uint32 last_call_module_crc = 17;
	optional bytes last_call_sysid_routing = 18;
	optional uint32 last_ecallresult = 19;
	optional uint32 last_callissue_delta = 20;
	optional uint32 last_callcomplete_delta = 21;
}

message CMsgAMUnlockStreaming {
}

message CMsgAMUnlockStreamingResponse {
	optional int32 eresult = 1 [default = 2];
	optional bytes encryption_key = 2;
}

message CMsgAMUnlockHEVC {
}

message CMsgAMUnlockHEVCResponse {
	optional int32 eresult = 1 [default = 2];
}

message CMsgClientPlayingSessionState {
	optional bool playing_blocked = 2;
	optional uint32 playing_app = 3;
}

message CMsgClientKickPlayingSession {
	optional bool only_stop_game = 1;
}

message CMsgClientVoiceCallPreAuthorize {
	optional fixed64 caller_steamid = 1;
	optional fixed64 receiver_steamid = 2;
	optional int32 caller_id = 3;
	optional bool hangup = 4;
}

message CMsgClientVoiceCallPreAuthorizeResponse {
	optional fixed64 caller_steamid = 1;
	optional fixed64 receiver_steamid = 2;
	optional int32 eresult = 3 [default = 2];
	optional int32 caller_id = 4;
}

message CMsgBadgeCraftedNotification {
	optional uint32 appid = 1;
	optional uint32 badge_level = 2;
}
