# Generated by the protocol buffer compiler.  DO NOT EDIT!
# sources: cstrike15_gcmessages.proto
# plugin: python-betterproto

from dataclasses import dataclass
from typing import TYPE_CHECKING, Union

import betterproto

from ....protobufs.msg import GCProtobufMessage
from ..enums import EMsg

if TYPE_CHECKING:
    from .engine import GotvSyncPacket


class ECsgoSteamUserStat(betterproto.Enum):
    XPEarnedGames = 1
    MatchWinsCompetitive = 2
    SurvivedDangerZone = 3


class EClientReportingVersion(betterproto.Enum):
    OldVersion = 0
    BetaVersion = 1
    SupportsTrustedMode = 2


@dataclass(eq=False, repr=False)
class GameServerPing(betterproto.Message):
    ping: int = betterproto.int32_field(2)
    ip: int = betterproto.uint32_field(3)
    instances: int = betterproto.uint32_field(5)


@dataclass(eq=False, repr=False)
class DataCenterPing(betterproto.Message):
    data_center_id: int = betterproto.fixed32_field(1)
    ping: int = betterproto.sint32_field(2)


@dataclass(eq=False, repr=False)
class DetailedSearchStatistic(betterproto.Message):
    game_type: int = betterproto.uint32_field(1)
    search_time_avg: int = betterproto.uint32_field(2)
    players_searching: int = betterproto.uint32_field(4)


@dataclass(eq=False, repr=False)
class TournamentPlayer(betterproto.Message):
    account_id: int = betterproto.uint32_field(1)
    player_nick: str = betterproto.string_field(2)
    player_name: str = betterproto.string_field(3)
    player_dob: int = betterproto.uint32_field(4)
    player_flag: str = betterproto.string_field(5)
    player_location: str = betterproto.string_field(6)
    player_desc: str = betterproto.string_field(7)


@dataclass(eq=False, repr=False)
class TournamentTeam(betterproto.Message):
    team_id: int = betterproto.int32_field(1)
    team_tag: str = betterproto.string_field(2)
    team_flag: str = betterproto.string_field(3)
    team_name: str = betterproto.string_field(4)
    players: "list[TournamentPlayer]" = betterproto.message_field(5)


@dataclass(eq=False, repr=False)
class TournamentEvent(betterproto.Message):
    event_id: int = betterproto.int32_field(1)
    event_tag: str = betterproto.string_field(2)
    event_name: str = betterproto.string_field(3)
    event_time_start: int = betterproto.uint32_field(4)
    event_time_end: int = betterproto.uint32_field(5)
    event_public: int = betterproto.int32_field(6)
    event_stage_id: int = betterproto.int32_field(7)
    event_stage_name: str = betterproto.string_field(8)
    active_section_id: int = betterproto.uint32_field(9)


@dataclass(eq=False, repr=False)
class GlobalStatistics(betterproto.Message):
    players_online: int = betterproto.uint32_field(1)
    servers_online: int = betterproto.uint32_field(2)
    players_searching: int = betterproto.uint32_field(3)
    servers_available: int = betterproto.uint32_field(4)
    ongoing_matches: int = betterproto.uint32_field(5)
    search_time_avg: int = betterproto.uint32_field(6)
    search_statistics: "list[DetailedSearchStatistic]" = betterproto.message_field(7)
    main_post_url: str = betterproto.string_field(8)
    required_appid_version: int = betterproto.uint32_field(9)
    pricesheet_version: int = betterproto.uint32_field(10)
    twitch_streams_version: int = betterproto.uint32_field(11)
    active_tournament_eventid: int = betterproto.uint32_field(12)
    active_survey_id: int = betterproto.uint32_field(13)
    rtime32_cur: int = betterproto.uint32_field(14)
    rtime32_event_start: int = betterproto.uint32_field(15)


@dataclass(eq=False, repr=False)
class OperationalStatisticDescription(betterproto.Message):
    name: str = betterproto.string_field(1)
    idkey: int = betterproto.uint32_field(2)


@dataclass(eq=False, repr=False)
class OperationalStatisticElement(betterproto.Message):
    idkey: int = betterproto.uint32_field(1)
    values: list[int] = betterproto.int32_field(2)


@dataclass(eq=False, repr=False)
class OperationalStatisticsPacket(betterproto.Message):
    packetid: int = betterproto.int32_field(1)
    mstimestamp: int = betterproto.int32_field(2)
    values: "list[OperationalStatisticElement]" = betterproto.message_field(3)


@dataclass(eq=False, repr=False)
class PlayerRankingInfo(betterproto.Message):
    account_id: int = betterproto.uint32_field(1)
    rank_id: int = betterproto.uint32_field(2)
    wins: int = betterproto.uint32_field(3)
    rank_change: float = betterproto.float_field(4)
    rank_type_id: int = betterproto.uint32_field(6)
    tv_control: int = betterproto.uint32_field(7)


@dataclass(eq=False, repr=False)
class PlayerCommendationInfo(betterproto.Message):
    cmd_friendly: int = betterproto.uint32_field(1)
    cmd_teaching: int = betterproto.uint32_field(2)
    cmd_leader: int = betterproto.uint32_field(4)


@dataclass(eq=False, repr=False)
class PlayerMedalsInfo(betterproto.Message):
    display_items_defidx: list[int] = betterproto.uint32_field(7)
    featured_display_item_defidx: int = betterproto.uint32_field(8)


@dataclass(eq=False, repr=False)
class AccountActivity(betterproto.Message):
    activity: int = betterproto.uint32_field(1)
    mode: int = betterproto.uint32_field(2)
    map: int = betterproto.uint32_field(3)
    matchid: int = betterproto.uint64_field(4)


@dataclass(eq=False, repr=False)
class TournamentMatchSetup(betterproto.Message):
    event_id: int = betterproto.int32_field(1)
    team_id_ct: int = betterproto.int32_field(2)
    team_id_t: int = betterproto.int32_field(3)
    event_stage_id: int = betterproto.int32_field(4)


@dataclass(eq=False, repr=False)
class ServerHltvInfo(betterproto.Message):
    tv_udp_port: int = betterproto.uint32_field(1)
    tv_watch_key: int = betterproto.uint64_field(2)
    tv_slots: int = betterproto.uint32_field(3)
    tv_clients: int = betterproto.uint32_field(4)
    tv_proxies: int = betterproto.uint32_field(5)
    tv_time: int = betterproto.uint32_field(6)
    game_type: int = betterproto.uint32_field(8)
    game_mapgroup: str = betterproto.string_field(9)
    game_map: str = betterproto.string_field(10)
    tv_master_steamid: int = betterproto.uint64_field(11)
    tv_local_slots: int = betterproto.uint32_field(12)
    tv_local_clients: int = betterproto.uint32_field(13)
    tv_local_proxies: int = betterproto.uint32_field(14)
    tv_relay_slots: int = betterproto.uint32_field(15)
    tv_relay_clients: int = betterproto.uint32_field(16)
    tv_relay_proxies: int = betterproto.uint32_field(17)
    tv_relay_address: int = betterproto.uint32_field(18)
    tv_relay_port: int = betterproto.uint32_field(19)
    tv_relay_steamid: int = betterproto.uint64_field(20)
    flags: int = betterproto.uint32_field(21)


@dataclass(eq=False, repr=False)
class IpAddressMask(betterproto.Message):
    a: int = betterproto.uint32_field(1)
    b: int = betterproto.uint32_field(2)
    c: int = betterproto.uint32_field(3)
    d: int = betterproto.uint32_field(4)
    bits: int = betterproto.uint32_field(5)
    token: int = betterproto.uint32_field(6)


@dataclass(eq=False, repr=False)
class CsgoSteamUserStatChange(betterproto.Message):
    ecsgosteamuserstat: "ECsgoSteamUserStat" = betterproto.enum_field(1)
    delta: int = betterproto.int32_field(2)
    absolute: bool = betterproto.bool_field(3)


@dataclass(eq=False, repr=False)
class XpProgressData(betterproto.Message):
    xp_points: int = betterproto.uint32_field(1)
    xp_category: int = betterproto.int32_field(2)


@dataclass(eq=False, repr=False)
class MatchEndItemUpdates(betterproto.Message):
    item_id: int = betterproto.uint64_field(1)
    item_attr_defidx: int = betterproto.uint32_field(2)
    item_attr_delta_value: int = betterproto.uint32_field(3)


@dataclass(eq=False, repr=False)
class ScoreLeaderboardData(betterproto.Message):
    quest_id: int = betterproto.uint64_field(1)
    score: int = betterproto.uint32_field(2)
    accountentries: "list[ScoreLeaderboardDataAccountEntries]" = betterproto.message_field(3)
    matchentries: "list[ScoreLeaderboardDataEntry]" = betterproto.message_field(5)


@dataclass(eq=False, repr=False)
class ScoreLeaderboardDataEntry(betterproto.Message):
    tag: int = betterproto.uint32_field(1)
    val: int = betterproto.uint32_field(2)


@dataclass(eq=False, repr=False)
class ScoreLeaderboardDataAccountEntries(betterproto.Message):
    accountid: int = betterproto.uint32_field(1)
    entries: "list[ScoreLeaderboardDataEntry]" = betterproto.message_field(2)


@dataclass(eq=False, repr=False)
class PlayerQuestData(betterproto.Message):
    quester_account_id: int = betterproto.uint32_field(1)
    quest_item_data: "list[PlayerQuestDataQuestItemData]" = betterproto.message_field(2)
    xp_progress_data: "list[XpProgressData]" = betterproto.message_field(3)
    time_played: int = betterproto.uint32_field(4)
    mm_game_mode: int = betterproto.uint32_field(5)
    item_updates: "list[MatchEndItemUpdates]" = betterproto.message_field(6)
    operation_points_eligible: bool = betterproto.bool_field(7)
    userstatchanges: "list[CsgoSteamUserStatChange]" = betterproto.message_field(8)


@dataclass(eq=False, repr=False)
class PlayerQuestDataQuestItemData(betterproto.Message):
    quest_id: int = betterproto.uint64_field(1)
    quest_normal_points_earned: int = betterproto.int32_field(2)
    quest_bonus_points_earned: int = betterproto.int32_field(3)


@dataclass(eq=False, repr=False)
class DeepPlayerStatsEntry(betterproto.Message):
    accountid: int = betterproto.uint32_field(1)
    match_id: int = betterproto.uint64_field(2)
    mm_game_mode: int = betterproto.uint32_field(3)
    mapid: int = betterproto.uint32_field(4)
    b_starting_ct: bool = betterproto.bool_field(5)
    match_outcome: int = betterproto.uint32_field(6)
    rounds_won: int = betterproto.uint32_field(7)
    rounds_lost: int = betterproto.uint32_field(8)
    stat_score: int = betterproto.uint32_field(9)
    stat_deaths: int = betterproto.uint32_field(12)
    stat_mvps: int = betterproto.uint32_field(13)
    enemy_kills: int = betterproto.uint32_field(14)
    enemy_headshots: int = betterproto.uint32_field(15)
    enemy_2_ks: int = betterproto.uint32_field(16)
    enemy_3_ks: int = betterproto.uint32_field(17)
    enemy_4_ks: int = betterproto.uint32_field(18)
    total_damage: int = betterproto.uint32_field(19)
    engagements_entry_count: int = betterproto.uint32_field(23)
    engagements_entry_wins: int = betterproto.uint32_field(24)
    engagements_1_v1_count: int = betterproto.uint32_field(25)
    engagements_1_v1_wins: int = betterproto.uint32_field(26)
    engagements_1_v2_count: int = betterproto.uint32_field(27)
    engagements_1_v2_wins: int = betterproto.uint32_field(28)
    utility_count: int = betterproto.uint32_field(29)
    utility_success: int = betterproto.uint32_field(30)
    flash_count: int = betterproto.uint32_field(32)
    flash_success: int = betterproto.uint32_field(33)
    mates: list[int] = betterproto.uint32_field(34)


@dataclass(eq=False, repr=False)
class DeepPlayerMatchEvent(betterproto.Message):
    accountid: int = betterproto.uint32_field(1)
    match_id: int = betterproto.uint64_field(2)
    event_id: int = betterproto.uint32_field(3)
    event_type: int = betterproto.uint32_field(4)
    b_playing_ct: bool = betterproto.bool_field(5)
    user_pos_x: int = betterproto.int32_field(6)
    user_pos_y: int = betterproto.int32_field(7)
    user_pos_z: int = betterproto.int32_field(12)
    user_defidx: int = betterproto.uint32_field(8)
    other_pos_x: int = betterproto.int32_field(9)
    other_pos_y: int = betterproto.int32_field(10)
    other_pos_z: int = betterproto.int32_field(13)
    other_defidx: int = betterproto.uint32_field(11)
    event_data: int = betterproto.int32_field(14)


@dataclass(eq=False, repr=False)
class GcServerQuestUpdateData(betterproto.Message):
    player_quest_data: "list[PlayerQuestData]" = betterproto.message_field(1)
    binary_data: bytes = betterproto.bytes_field(2)
    mm_game_mode: int = betterproto.uint32_field(3)
    missionlbsdata: "ScoreLeaderboardData" = betterproto.message_field(4)


@dataclass(eq=False, repr=False)
class MatchmakingGcOperationalStats(betterproto.Message):
    packetid: int = betterproto.int32_field(1)
    namekeys: "list[OperationalStatisticDescription]" = betterproto.message_field(2)
    packets: "list[OperationalStatisticsPacket]" = betterproto.message_field(3)


@dataclass(eq=False, repr=False)
class MatchmakingServerConfirm(betterproto.Message):
    token: int = betterproto.uint32_field(1)
    stamp: int = betterproto.uint32_field(2)
    exchange: int = betterproto.uint64_field(3)


@dataclass(eq=False, repr=False)
class ServerReservationUpdate(betterproto.Message):
    viewers_external_total: int = betterproto.uint32_field(1)
    viewers_external_steam: int = betterproto.uint32_field(2)


@dataclass(eq=False, repr=False)
class MatchmakingStart(betterproto.Message):
    account_ids: list[int] = betterproto.uint32_field(1)
    game_type: int = betterproto.uint32_field(2)
    ticket_data: str = betterproto.string_field(3)
    client_version: int = betterproto.uint32_field(4)
    tournament_match: "TournamentMatchSetup" = betterproto.message_field(5)
    prime_only: bool = betterproto.bool_field(6)


@dataclass(eq=False, repr=False)
class MatchmakingStop(betterproto.Message):
    abandon: int = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class MatchmakingClient2ServerPing(betterproto.Message):
    gameserverpings: "list[GameServerPing]" = betterproto.message_field(1)
    offset_index: int = betterproto.int32_field(2)
    final_batch: int = betterproto.int32_field(3)
    data_center_pings: "list[DataCenterPing]" = betterproto.message_field(4)
    max_ping: int = betterproto.uint32_field(5)
    test_token: int = betterproto.fixed32_field(6)


@dataclass(eq=False, repr=False)
class MatchmakingClientUpdate(betterproto.Message):
    matchmaking: int = betterproto.int32_field(1)
    waiting_account_id_sessions: list[int] = betterproto.uint32_field(2)
    error: str = betterproto.string_field(3)
    ongoingmatch_account_id_sessions: list[int] = betterproto.uint32_field(6)
    global_stats: "GlobalStatistics" = betterproto.message_field(7)
    failping_account_id_sessions: list[int] = betterproto.uint32_field(8)
    penalty_account_id_sessions: list[int] = betterproto.uint32_field(9)
    failready_account_id_sessions: list[int] = betterproto.uint32_field(10)
    vacbanned_account_id_sessions: list[int] = betterproto.uint32_field(11)
    server_ipaddress_mask: "IpAddressMask" = betterproto.message_field(12)
    notes: "list[MatchmakingClientUpdateNote]" = betterproto.message_field(13)
    penalty_account_id_sessions_green: list[int] = betterproto.uint32_field(14)
    insufficientlevel_sessions: list[int] = betterproto.uint32_field(15)
    vsncheck_account_id_sessions: list[int] = betterproto.uint32_field(16)
    launcher_mismatch_sessions: list[int] = betterproto.uint32_field(17)
    insecure_account_id_sessions: list[int] = betterproto.uint32_field(18)


@dataclass(eq=False, repr=False)
class MatchmakingClientUpdateNote(betterproto.Message):
    type: int = betterproto.int32_field(1)
    region_id: int = betterproto.int32_field(2)
    region_r: float = betterproto.float_field(3)
    distance: float = betterproto.float_field(4)


@dataclass(eq=False, repr=False)
class TournamentMatchDraft(betterproto.Message):
    event_id: int = betterproto.int32_field(1)
    event_stage_id: int = betterproto.int32_field(2)
    team_id_0: int = betterproto.int32_field(3)
    team_id_1: int = betterproto.int32_field(4)
    maps_count: int = betterproto.int32_field(5)
    maps_current: int = betterproto.int32_field(6)
    team_id_start: int = betterproto.int32_field(7)
    team_id_veto1: int = betterproto.int32_field(8)
    team_id_pickn: int = betterproto.int32_field(9)
    drafts: "list[TournamentMatchDraftEntry]" = betterproto.message_field(10)


@dataclass(eq=False, repr=False)
class TournamentMatchDraftEntry(betterproto.Message):
    mapid: int = betterproto.int32_field(1)
    team_id_ct: int = betterproto.int32_field(2)


@dataclass(eq=False, repr=False)
class CPreMatchInfoData(betterproto.Message):
    predictions_pct: int = betterproto.int32_field(1)
    draft: "TournamentMatchDraft" = betterproto.message_field(4)
    stats: "list[CPreMatchInfoDataTeamStats]" = betterproto.message_field(5)
    wins: list[int] = betterproto.int32_field(6)


@dataclass(eq=False, repr=False)
class CPreMatchInfoDataTeamStats(betterproto.Message):
    match_info_idxtxt: int = betterproto.int32_field(1)
    match_info_txt: str = betterproto.string_field(2)
    match_info_teams: list[str] = betterproto.string_field(3)


@dataclass(eq=False, repr=False)
class MatchmakingServerReserve(betterproto.Message):
    account_ids: list[int] = betterproto.uint32_field(1)
    game_type: int = betterproto.uint32_field(2)
    match_id: int = betterproto.uint64_field(3)
    server_version: int = betterproto.uint32_field(4)
    flags: int = betterproto.uint32_field(18)
    rankings: "list[PlayerRankingInfo]" = betterproto.message_field(5)
    encryption_key: int = betterproto.uint64_field(6)
    encryption_key_pub: int = betterproto.uint64_field(7)
    party_ids: list[int] = betterproto.uint32_field(8)
    whitelist: "list[IpAddressMask]" = betterproto.message_field(9)
    tv_master_steamid: int = betterproto.uint64_field(10)
    tournament_event: "TournamentEvent" = betterproto.message_field(11)
    tournament_teams: "list[TournamentTeam]" = betterproto.message_field(12)
    tournament_casters_account_ids: list[int] = betterproto.uint32_field(13)
    tv_relay_steamid: int = betterproto.uint64_field(14)
    pre_match_data: "CPreMatchInfoData" = betterproto.message_field(15)
    rtime32_event_start: int = betterproto.uint32_field(16)
    tv_control: int = betterproto.uint32_field(17)


@dataclass(eq=False, repr=False)
class MatchmakingServerReservationResponse(betterproto.Message):
    reservationid: int = betterproto.uint64_field(1)
    reservation: "MatchmakingServerReserve" = betterproto.message_field(2)
    map: str = betterproto.string_field(3)
    gc_reservation_sent: int = betterproto.uint64_field(4)
    server_version: int = betterproto.uint32_field(5)
    tv_info: "ServerHltvInfo" = betterproto.message_field(6)
    reward_player_accounts: list[int] = betterproto.uint32_field(7)
    idle_player_accounts: list[int] = betterproto.uint32_field(8)
    reward_item_attr_def_idx: int = betterproto.uint32_field(9)
    reward_item_attr_value: int = betterproto.uint32_field(10)
    reward_item_attr_reward_idx: int = betterproto.uint32_field(11)
    reward_drop_list: int = betterproto.uint32_field(12)
    tournament_tag: str = betterproto.string_field(13)
    legacy_steamdatagram_port: int = betterproto.uint32_field(14)
    steamdatagram_routing: int = betterproto.uint32_field(17)
    test_token: int = betterproto.fixed32_field(15)
    flags: int = betterproto.uint32_field(16)


@dataclass(eq=False, repr=False)
class MatchmakingClientReserve(betterproto.Message):
    serverid: int = betterproto.uint64_field(1)
    direct_udp_ip: int = betterproto.uint32_field(2)
    direct_udp_port: int = betterproto.uint32_field(3)
    reservationid: int = betterproto.uint64_field(4)
    reservation: "MatchmakingServerReserve" = betterproto.message_field(5)
    map: str = betterproto.string_field(6)
    server_address: str = betterproto.string_field(7)


@dataclass(eq=False, repr=False)
class MatchmakingServerRoundStats(betterproto.Message):
    reservationid: int = betterproto.uint64_field(1)
    reservation: "MatchmakingServerReserve" = betterproto.message_field(2)
    map: str = betterproto.string_field(3)
    round: int = betterproto.int32_field(4)
    kills: list[int] = betterproto.int32_field(5)
    assists: list[int] = betterproto.int32_field(6)
    deaths: list[int] = betterproto.int32_field(7)
    scores: list[int] = betterproto.int32_field(8)
    pings: list[int] = betterproto.int32_field(9)
    round_result: int = betterproto.int32_field(10)
    match_result: int = betterproto.int32_field(11)
    team_scores: list[int] = betterproto.int32_field(12)
    confirm: "MatchmakingServerConfirm" = betterproto.message_field(13)
    reservation_stage: int = betterproto.int32_field(14)
    match_duration: int = betterproto.int32_field(15)
    enemy_kills: list[int] = betterproto.int32_field(16)
    enemy_headshots: list[int] = betterproto.int32_field(17)
    enemy_3_ks: list[int] = betterproto.int32_field(18)
    enemy_4_ks: list[int] = betterproto.int32_field(19)
    enemy_5_ks: list[int] = betterproto.int32_field(20)
    mvps: list[int] = betterproto.int32_field(21)
    spectators_count: int = betterproto.uint32_field(22)
    spectators_count_tv: int = betterproto.uint32_field(23)
    spectators_count_lnk: int = betterproto.uint32_field(24)
    enemy_kills_agg: list[int] = betterproto.int32_field(25)
    drop_info: "MatchmakingServerRoundStatsDropInfo" = betterproto.message_field(26)
    b_switched_teams: bool = betterproto.bool_field(27)
    enemy_2_ks: list[int] = betterproto.int32_field(28)
    player_spawned: list[int] = betterproto.int32_field(29)
    team_spawn_count: list[int] = betterproto.int32_field(30)


@dataclass(eq=False, repr=False)
class MatchmakingServerRoundStatsDropInfo(betterproto.Message):
    account_mvp: int = betterproto.uint32_field(1)


@dataclass(eq=False, repr=False)
class MatchmakingClient2GcHello(betterproto.Message):
    pass


class MatchmakingClientHello(GCProtobufMessage, msg=EMsg.MatchmakingGC2ClientHello):
    account_id: int = betterproto.uint32_field(1)
    ongoingmatch: "MatchmakingClientReserve" = betterproto.message_field(2)
    global_stats: "GlobalStatistics" = betterproto.message_field(3)
    penalty_seconds: int = betterproto.uint32_field(4)
    penalty_reason: int = betterproto.uint32_field(5)
    vac_banned: int = betterproto.int32_field(6)
    ranking: "PlayerRankingInfo" = betterproto.message_field(7)
    commendation: "PlayerCommendationInfo" = betterproto.message_field(8)
    medals: "PlayerMedalsInfo" = betterproto.message_field(9)
    my_current_event: "TournamentEvent" = betterproto.message_field(10)
    my_current_event_teams: "list[TournamentTeam]" = betterproto.message_field(11)
    my_current_team: "TournamentTeam" = betterproto.message_field(12)
    my_current_event_stages: "list[TournamentEvent]" = betterproto.message_field(13)
    survey_vote: int = betterproto.uint32_field(14)
    activity: "AccountActivity" = betterproto.message_field(15)
    player_level: int = betterproto.int32_field(17)
    player_cur_xp: int = betterproto.int32_field(18)
    player_xp_bonus_flags: int = betterproto.int32_field(19)
    rankings: "list[PlayerRankingInfo]" = betterproto.message_field(20)


@dataclass(eq=False, repr=False)
class AccountPrivacySettings(betterproto.Message):
    settings: "list[AccountPrivacySettingsSetting]" = betterproto.message_field(1)


@dataclass(eq=False, repr=False)
class AccountPrivacySettingsSetting(betterproto.Message):
    setting_type: int = betterproto.uint32_field(1)
    setting_value: int = betterproto.uint32_field(2)


@dataclass(eq=False, repr=False)
class MatchmakingClientAbandon(betterproto.Message):
    account_id: int = betterproto.uint32_field(1)
    abandoned_match: "MatchmakingClientReserve" = betterproto.message_field(2)
    penalty_seconds: int = betterproto.uint32_field(3)
    penalty_reason: int = betterproto.uint32_field(4)


@dataclass(eq=False, repr=False)
class ClientGcRankUpdate(betterproto.Message):
    rankings: "list[PlayerRankingInfo]" = betterproto.message_field(1)


@dataclass(eq=False, repr=False)
class MatchmakingOperator2GcBlogUpdate(betterproto.Message):
    main_post_url: str = betterproto.string_field(1)


@dataclass(eq=False, repr=False)
class ServerNotificationForUserPenalty(betterproto.Message):
    account_id: int = betterproto.uint32_field(1)
    reason: int = betterproto.uint32_field(2)
    seconds: int = betterproto.uint32_field(3)
    communication_cooldown: bool = betterproto.bool_field(4)


@dataclass(eq=False, repr=False)
class ClientReportPlayer(betterproto.Message):
    account_id: int = betterproto.uint32_field(1)
    rpt_aimbot: int = betterproto.uint32_field(2)
    rpt_wallhack: int = betterproto.uint32_field(3)
    rpt_speedhack: int = betterproto.uint32_field(4)
    rpt_teamharm: int = betterproto.uint32_field(5)
    rpt_textabuse: int = betterproto.uint32_field(6)
    rpt_voiceabuse: int = betterproto.uint32_field(7)
    match_id: int = betterproto.uint64_field(8)
    report_from_demo: bool = betterproto.bool_field(9)


@dataclass(eq=False, repr=False)
class ClientCommendPlayer(betterproto.Message):
    account_id: int = betterproto.uint32_field(1)
    match_id: int = betterproto.uint64_field(8)
    commendation: "PlayerCommendationInfo" = betterproto.message_field(9)
    tokens: int = betterproto.uint32_field(10)


@dataclass(eq=False, repr=False)
class ClientReportServer(betterproto.Message):
    rpt_poorperf: int = betterproto.uint32_field(1)
    rpt_abusivemodels: int = betterproto.uint32_field(2)
    rpt_badmotd: int = betterproto.uint32_field(3)
    rpt_listingabuse: int = betterproto.uint32_field(4)
    rpt_inventoryabuse: int = betterproto.uint32_field(5)
    match_id: int = betterproto.uint64_field(8)


@dataclass(eq=False, repr=False)
class ClientReportResponse(betterproto.Message):
    confirmation_id: int = betterproto.uint64_field(1)
    account_id: int = betterproto.uint32_field(2)
    server_ip: int = betterproto.uint32_field(3)
    response_type: int = betterproto.uint32_field(4)
    response_result: int = betterproto.uint32_field(5)
    tokens: int = betterproto.uint32_field(6)


class ClientRequestWatchInfoFriends(GCProtobufMessage, msg=EMsg.ClientRequestWatchInfoFriends2):
    request_id: int = betterproto.uint32_field(1)
    account_ids: list[int] = betterproto.uint32_field(2)
    serverid: int = betterproto.uint64_field(3)
    matchid: int = betterproto.uint64_field(4)
    client_launcher: int = betterproto.uint32_field(5)
    data_center_pings: "list[DataCenterPing]" = betterproto.message_field(6)


@dataclass(eq=False, repr=False)
class WatchableMatchInfo(betterproto.Message):
    server_ip: int = betterproto.uint32_field(1)
    tv_port: int = betterproto.uint32_field(2)
    tv_spectators: int = betterproto.uint32_field(3)
    tv_time: int = betterproto.uint32_field(4)
    tv_watch_password: bytes = betterproto.bytes_field(5)
    cl_decryptdata_key: int = betterproto.uint64_field(6)
    cl_decryptdata_key_pub: int = betterproto.uint64_field(7)
    game_type: int = betterproto.uint32_field(8)
    game_mapgroup: str = betterproto.string_field(9)
    game_map: str = betterproto.string_field(10)
    server_id: int = betterproto.uint64_field(11)
    match_id: int = betterproto.uint64_field(12)
    reservation_id: int = betterproto.uint64_field(13)


@dataclass(eq=False, repr=False)
class ClientRequestJoinFriendData(betterproto.Message):
    version: int = betterproto.uint32_field(1)
    account_id: int = betterproto.uint32_field(2)
    join_token: int = betterproto.uint32_field(3)
    join_ipp: int = betterproto.uint32_field(4)
    res: "MatchmakingClientReserve" = betterproto.message_field(5)
    errormsg: str = betterproto.string_field(6)


@dataclass(eq=False, repr=False)
class ClientRequestJoinServerData(betterproto.Message):
    version: int = betterproto.uint32_field(1)
    account_id: int = betterproto.uint32_field(2)
    serverid: int = betterproto.uint64_field(3)
    server_ip: int = betterproto.uint32_field(4)
    server_port: int = betterproto.uint32_field(5)
    res: "MatchmakingClientReserve" = betterproto.message_field(6)
    errormsg: str = betterproto.string_field(7)


@dataclass(eq=False, repr=False)
class ClientRequestNewMission(betterproto.Message):
    mission_id: int = betterproto.uint32_field(2)
    campaign_id: int = betterproto.uint32_field(3)


@dataclass(eq=False, repr=False)
class ClientRedeemMissionReward(betterproto.Message):
    campaign_id: int = betterproto.uint32_field(1)
    redeem_id: int = betterproto.uint32_field(2)
    redeemable_balance: int = betterproto.uint32_field(3)
    expected_cost: int = betterproto.uint32_field(4)


@dataclass(eq=False, repr=False)
class ServerNotifyXpRewarded(betterproto.Message):
    xp_progress_data: "list[XpProgressData]" = betterproto.message_field(1)
    account_id: int = betterproto.uint32_field(2)
    current_xp: int = betterproto.uint32_field(3)
    current_level: int = betterproto.uint32_field(4)
    upgraded_defidx: int = betterproto.uint32_field(5)
    operation_points_awarded: int = betterproto.uint32_field(6)


@dataclass(eq=False, repr=False)
class ClientDeepStats(betterproto.Message):
    account_id: int = betterproto.uint32_field(1)
    range: "ClientDeepStatsDeepStatsRange" = betterproto.message_field(2)
    matches: "list[ClientDeepStatsDeepStatsMatch]" = betterproto.message_field(3)


@dataclass(eq=False, repr=False)
class ClientDeepStatsDeepStatsRange(betterproto.Message):
    begin: int = betterproto.uint32_field(1)
    end: int = betterproto.uint32_field(2)
    frozen: bool = betterproto.bool_field(3)


@dataclass(eq=False, repr=False)
class ClientDeepStatsDeepStatsMatch(betterproto.Message):
    player: "DeepPlayerStatsEntry" = betterproto.message_field(1)
    events: "list[DeepPlayerMatchEvent]" = betterproto.message_field(2)


class WatchInfoUsers(GCProtobufMessage, msg=EMsg.WatchInfoUsers):
    request_id: int = betterproto.uint32_field(1)
    account_ids: list[int] = betterproto.uint32_field(2)
    watchable_match_infos: "list[WatchableMatchInfo]" = betterproto.message_field(3)
    extended_timeout: int = betterproto.uint32_field(5)


class ClientRequestPlayersProfile(GCProtobufMessage, msg=EMsg.ClientRequestPlayersProfile):
    request_id_deprecated: int = betterproto.uint32_field(1)
    account_ids_deprecated: list[int] = betterproto.uint32_field(2)
    account_id: int = betterproto.uint32_field(3)
    request_level: int = betterproto.uint32_field(4)


@dataclass(eq=False, repr=False)
class PlayersProfileProfile(betterproto.Message):
    account_id: int = betterproto.uint32_field(1)
    ongoingmatch: "MatchmakingClientReserve" = betterproto.message_field(2)
    global_stats: "GlobalStatistics" = betterproto.message_field(3)
    penalty_seconds: int = betterproto.uint32_field(4)
    penalty_reason: int = betterproto.uint32_field(5)
    vac_banned: int = betterproto.int32_field(6)
    ranking: "PlayerRankingInfo" = betterproto.message_field(7)
    commendation: "PlayerCommendationInfo" = betterproto.message_field(8)
    medals: "PlayerMedalsInfo" = betterproto.message_field(9)
    my_current_event: "TournamentEvent" = betterproto.message_field(10)
    my_current_event_teams: "list[TournamentTeam]" = betterproto.message_field(11)
    my_current_team: "TournamentTeam" = betterproto.message_field(12)
    my_current_event_stages: "list[TournamentEvent]" = betterproto.message_field(13)
    survey_vote: int = betterproto.uint32_field(14)
    activity: "AccountActivity" = betterproto.message_field(15)
    player_level: int = betterproto.int32_field(17)
    player_cur_xp: int = betterproto.int32_field(18)
    player_xp_bonus_flags: int = betterproto.int32_field(19)
    rankings: "list[PlayerRankingInfo]" = betterproto.message_field(20)


class PlayersProfile(GCProtobufMessage, msg=EMsg.PlayersProfile):
    request_id: int = betterproto.uint32_field(1)
    account_profiles: "list[PlayersProfileProfile]" = betterproto.message_field(2)


@dataclass(eq=False, repr=False)
class PlayerOverwatchCaseUpdate(betterproto.Message):
    caseid: int = betterproto.uint64_field(1)
    suspectid: int = betterproto.uint32_field(3)
    fractionid: int = betterproto.uint32_field(4)
    rpt_aimbot: int = betterproto.uint32_field(5)
    rpt_wallhack: int = betterproto.uint32_field(6)
    rpt_speedhack: int = betterproto.uint32_field(7)
    rpt_teamharm: int = betterproto.uint32_field(8)
    reason: int = betterproto.uint32_field(9)


@dataclass(eq=False, repr=False)
class PlayerOverwatchCaseAssignment(betterproto.Message):
    caseid: int = betterproto.uint64_field(1)
    caseurl: str = betterproto.string_field(2)
    verdict: int = betterproto.uint32_field(3)
    timestamp: int = betterproto.uint32_field(4)
    throttleseconds: int = betterproto.uint32_field(5)
    suspectid: int = betterproto.uint32_field(6)
    fractionid: int = betterproto.uint32_field(7)
    numrounds: int = betterproto.uint32_field(8)
    fractionrounds: int = betterproto.uint32_field(9)
    streakconvictions: int = betterproto.int32_field(10)
    reason: int = betterproto.uint32_field(11)


@dataclass(eq=False, repr=False)
class PlayerOverwatchCaseStatus(betterproto.Message):
    caseid: int = betterproto.uint64_field(1)
    statusid: int = betterproto.uint32_field(2)


@dataclass(eq=False, repr=False)
class CClientHeaderOverwatchEvidence(betterproto.Message):
    accountid: int = betterproto.uint32_field(1)
    caseid: int = betterproto.uint64_field(2)


@dataclass(eq=False, repr=False)
class ClientTextMsg(betterproto.Message):
    id: int = betterproto.uint32_field(1)
    type: int = betterproto.uint32_field(2)
    payload: bytes = betterproto.bytes_field(3)


@dataclass(eq=False, repr=False)
class Client2GcTextMsg(betterproto.Message):
    id: int = betterproto.uint32_field(1)
    args: list[bytes] = betterproto.bytes_field(2)


@dataclass(eq=False, repr=False)
class MatchEndRunRewardDrops(betterproto.Message):
    serverinfo: "MatchmakingServerReservationResponse" = betterproto.message_field(3)
    match_end_quest_data: "GcServerQuestUpdateData" = betterproto.message_field(4)


@dataclass(eq=False, repr=False)
class PreviewDataBlock(betterproto.Message):
    accountid: int = betterproto.uint32_field(1)
    itemid: int = betterproto.uint64_field(2)
    defindex: int = betterproto.uint32_field(3)
    paintindex: int = betterproto.uint32_field(4)
    rarity: int = betterproto.uint32_field(5)
    quality: int = betterproto.uint32_field(6)
    paintwear: int = betterproto.uint32_field(7)
    paintseed: int = betterproto.uint32_field(8)
    killeaterscoretype: Union[int, None] = betterproto.uint32_field(9, optional=True, group="_killeaterscoretype")
    killeatervalue: Union[int, None] = betterproto.uint32_field(10, optional=True, group="_killeatervalue")
    customname: str = betterproto.string_field(11)
    stickers: "list[PreviewDataBlockSticker]" = betterproto.message_field(12)
    inventory: int = betterproto.uint32_field(13)
    origin: int = betterproto.uint32_field(14)
    questid: int = betterproto.uint32_field(15)
    dropreason: int = betterproto.uint32_field(16)
    musicindex: int = betterproto.uint32_field(17)
    entindex: int = betterproto.int32_field(18)


@dataclass(eq=False, repr=False)
class PreviewDataBlockSticker(betterproto.Message):
    slot: int = betterproto.uint32_field(1)
    sticker_id: int = betterproto.uint32_field(2)
    wear: float = betterproto.float_field(3)
    scale: float = betterproto.float_field(4)
    rotation: float = betterproto.float_field(5)
    tint_id: int = betterproto.uint32_field(6)
    offset_x: float = betterproto.float_field(7)
    offset_y: float = betterproto.float_field(8)


@dataclass(eq=False, repr=False)
class MatchEndRewardDropsNotification(betterproto.Message):
    iteminfo: "PreviewDataBlock" = betterproto.message_field(6)


@dataclass(eq=False, repr=False)
class ItemAcknowledged(betterproto.Message):
    iteminfo: "PreviewDataBlock" = betterproto.message_field(1)


class Client2GcEconPreviewDataBlockRequest(GCProtobufMessage, msg=EMsg.Client2GCEconPreviewDataBlockRequest):
    param_s: int = betterproto.uint64_field(1)
    param_a: int = betterproto.uint64_field(2)
    param_d: int = betterproto.uint64_field(3)
    param_m: int = betterproto.uint64_field(4)


class Client2GcEconPreviewDataBlockResponse(GCProtobufMessage, msg=EMsg.Client2GCEconPreviewDataBlockResponse):
    iteminfo: "PreviewDataBlock" = betterproto.message_field(1)


@dataclass(eq=False, repr=False)
class MatchListRequestCurrentLiveGames(betterproto.Message):
    pass


class MatchListRequestLiveGameForUser(GCProtobufMessage, msg=EMsg.MatchListRequestLiveGameForUser):
    accountid: int = betterproto.uint32_field(1)


class MatchListRequestRecentUserGames(GCProtobufMessage, msg=EMsg.MatchListRequestRecentUserGames):
    accountid: int = betterproto.uint32_field(1)


class MatchListRequestTournamentGames(GCProtobufMessage, msg=EMsg.MatchListRequestTournamentGames):
    eventid: int = betterproto.int32_field(1)


class MatchListRequestFullGameInfo(GCProtobufMessage, msg=EMsg.MatchListRequestFullGameInfo):
    matchid: int = betterproto.uint64_field(1)
    outcomeid: int = betterproto.uint64_field(2)
    token: int = betterproto.uint32_field(3)


@dataclass(eq=False, repr=False)
class MatchInfo(betterproto.Message):
    matchid: int = betterproto.uint64_field(1)
    matchtime: int = betterproto.uint32_field(2)
    watchablematchinfo: "WatchableMatchInfo" = betterproto.message_field(3)
    roundstats_legacy: "MatchmakingServerRoundStats" = betterproto.message_field(4)
    roundstatsall: "list[MatchmakingServerRoundStats]" = betterproto.message_field(5)


@dataclass(eq=False, repr=False)
class TournamentGroupTeam(betterproto.Message):
    team_id: int = betterproto.int32_field(1)
    score: int = betterproto.int32_field(2)
    correctpick: bool = betterproto.bool_field(3)


@dataclass(eq=False, repr=False)
class TournamentGroup(betterproto.Message):
    groupid: int = betterproto.uint32_field(1)
    name: str = betterproto.string_field(2)
    desc: str = betterproto.string_field(3)
    picks_deprecated: int = betterproto.uint32_field(4)
    teams: "list[TournamentGroupTeam]" = betterproto.message_field(5)
    stage_ids: list[int] = betterproto.int32_field(6)
    picklockuntiltime: int = betterproto.uint32_field(7)
    pickableteams: int = betterproto.uint32_field(8)
    points_per_pick: int = betterproto.uint32_field(9)
    picks: "list[TournamentGroupPicks]" = betterproto.message_field(10)


@dataclass(eq=False, repr=False)
class TournamentGroupPicks(betterproto.Message):
    pickids: list[int] = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class TournamentSection(betterproto.Message):
    sectionid: int = betterproto.uint32_field(1)
    name: str = betterproto.string_field(2)
    desc: str = betterproto.string_field(3)
    groups: "list[TournamentGroup]" = betterproto.message_field(4)


@dataclass(eq=False, repr=False)
class TournamentInfo(betterproto.Message):
    sections: "list[TournamentSection]" = betterproto.message_field(1)
    tournament_event: "TournamentEvent" = betterproto.message_field(2)
    tournament_teams: "list[TournamentTeam]" = betterproto.message_field(3)


class MatchList(GCProtobufMessage, msg=EMsg.MatchList):
    msgrequestid: int = betterproto.uint32_field(1)
    accountid: int = betterproto.uint32_field(2)
    servertime: int = betterproto.uint32_field(3)
    matches: "list[MatchInfo]" = betterproto.message_field(4)
    streams: "list[TournamentTeam]" = betterproto.message_field(5)
    tournamentinfo: "TournamentInfo" = betterproto.message_field(6)


@dataclass(eq=False, repr=False)
class Predictions(betterproto.Message):
    event_id: int = betterproto.uint32_field(1)
    group_match_team_picks: "list[PredictionsGroupMatchTeamPick]" = betterproto.message_field(2)


@dataclass(eq=False, repr=False)
class PredictionsGroupMatchTeamPick(betterproto.Message):
    sectionid: int = betterproto.int32_field(1)
    groupid: int = betterproto.int32_field(2)
    index: int = betterproto.int32_field(3)
    teamid: int = betterproto.int32_field(4)
    itemid: int = betterproto.uint64_field(5)


@dataclass(eq=False, repr=False)
class Fantasy(betterproto.Message):
    event_id: int = betterproto.uint32_field(1)
    teams: "list[FantasyFantasyTeam]" = betterproto.message_field(2)


@dataclass(eq=False, repr=False)
class FantasyFantasySlot(betterproto.Message):
    type: int = betterproto.int32_field(1)
    pick: int = betterproto.int32_field(2)
    itemid: int = betterproto.uint64_field(3)


@dataclass(eq=False, repr=False)
class FantasyFantasyTeam(betterproto.Message):
    sectionid: int = betterproto.int32_field(1)
    slots: "list[FantasyFantasySlot]" = betterproto.message_field(2)


@dataclass(eq=False, repr=False)
class CAttributeString(betterproto.Message):
    value: str = betterproto.string_field(1)


@dataclass(eq=False, repr=False)
class CStrike15Welcome(betterproto.Message):
    store_item_hash: int = betterproto.uint32_field(5)
    timeplayedconsecutively: int = betterproto.uint32_field(6)
    time_first_played: int = betterproto.uint32_field(10)
    last_time_played: int = betterproto.uint32_field(12)
    last_ip_address: int = betterproto.uint32_field(13)
    gscookieid: int = betterproto.uint64_field(18)
    uniqueid: int = betterproto.uint64_field(19)


@dataclass(eq=False, repr=False)
class ClientVarValueNotificationInfo(betterproto.Message):
    value_name: str = betterproto.string_field(1)
    value_int: int = betterproto.int32_field(2)
    server_addr: int = betterproto.uint32_field(3)
    server_port: int = betterproto.uint32_field(4)
    choked_blocks: list[str] = betterproto.string_field(5)


@dataclass(eq=False, repr=False)
class ServerVarValueNotificationInfo(betterproto.Message):
    accountid: int = betterproto.uint32_field(1)
    viewangles: list[int] = betterproto.uint32_field(2)
    type: int = betterproto.uint32_field(3)


@dataclass(eq=False, repr=False)
class GiftsLeaderboardRequest(betterproto.Message):
    pass


@dataclass(eq=False, repr=False)
class GiftsLeaderboardResponse(betterproto.Message):
    servertime: int = betterproto.uint32_field(1)
    time_period_seconds: int = betterproto.uint32_field(2)
    total_gifts_given: int = betterproto.uint32_field(3)
    total_givers: int = betterproto.uint32_field(4)
    entries: "list[GiftsLeaderboardResponseGiftLeaderboardEntry]" = betterproto.message_field(5)


@dataclass(eq=False, repr=False)
class GiftsLeaderboardResponseGiftLeaderboardEntry(betterproto.Message):
    accountid: int = betterproto.uint32_field(1)
    gifts: int = betterproto.uint32_field(2)


@dataclass(eq=False, repr=False)
class ClientSubmitSurveyVote(betterproto.Message):
    survey_id: int = betterproto.uint32_field(1)
    vote: int = betterproto.uint32_field(2)


@dataclass(eq=False, repr=False)
class Server2GcClientValidate(betterproto.Message):
    accountid: int = betterproto.uint32_field(1)


@dataclass(eq=False, repr=False)
class ClientTournamentInfo(betterproto.Message):
    eventid: int = betterproto.uint32_field(1)
    stageid: int = betterproto.uint32_field(2)
    game_type: int = betterproto.uint32_field(3)
    teamids: list[int] = betterproto.uint32_field(4)


@dataclass(eq=False, repr=False)
class EconCoupon(betterproto.Message):
    entryid: int = betterproto.uint32_field(1)
    defidx: int = betterproto.uint32_field(2)
    expiration_date: int = betterproto.fixed32_field(3)


@dataclass(eq=False, repr=False)
class QuestProgress(betterproto.Message):
    questid: int = betterproto.uint32_field(1)
    points_remaining: int = betterproto.uint32_field(2)
    bonus_points: int = betterproto.uint32_field(3)


@dataclass(eq=False, repr=False)
class AccountSeasonalOperation(betterproto.Message):
    season_value: int = betterproto.uint32_field(1)
    tier_unlocked: int = betterproto.uint32_field(2)
    premium_tiers: int = betterproto.uint32_field(3)
    mission_id: int = betterproto.uint32_field(4)
    missions_completed: int = betterproto.uint32_field(5)
    redeemable_balance: int = betterproto.uint32_field(6)
    season_pass_time: int = betterproto.uint32_field(7)


@dataclass(eq=False, repr=False)
class PersonaDataPublic(betterproto.Message):
    player_level: int = betterproto.int32_field(1)
    commendation: "PlayerCommendationInfo" = betterproto.message_field(2)
    elevated_state: bool = betterproto.bool_field(3)


@dataclass(eq=False, repr=False)
class GcGlobalGameSubscribe(betterproto.Message):
    ticket: int = betterproto.uint64_field(1)


@dataclass(eq=False, repr=False)
class GcGlobalGameUnsubscribe(betterproto.Message):
    timeleft: int = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class GcGlobalGamePlay(betterproto.Message):
    ticket: int = betterproto.uint64_field(1)
    gametimems: int = betterproto.uint32_field(2)
    msperpoint: int = betterproto.uint32_field(3)


@dataclass(eq=False, repr=False)
class AcknowledgePenalty(betterproto.Message):
    acknowledged: int = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class Client2GcRequestPrestigeCoin(betterproto.Message):
    defindex: int = betterproto.uint32_field(1)
    upgradeid: int = betterproto.uint64_field(2)
    hours: int = betterproto.uint32_field(3)
    prestigetime: int = betterproto.uint32_field(4)


@dataclass(eq=False, repr=False)
class Client2GcStreamUnlock(betterproto.Message):
    ticket: int = betterproto.uint64_field(1)
    os: int = betterproto.int32_field(2)


@dataclass(eq=False, repr=False)
class ClientToGcRequestElevate(betterproto.Message):
    stage: int = betterproto.uint32_field(1)


@dataclass(eq=False, repr=False)
class ClientToGcChat(betterproto.Message):
    match_id: int = betterproto.uint64_field(1)
    text: str = betterproto.string_field(2)


@dataclass(eq=False, repr=False)
class GcToClientChat(betterproto.Message):
    account_id: int = betterproto.uint32_field(1)
    text: str = betterproto.string_field(2)


@dataclass(eq=False, repr=False)
class ClientAuthKeyCode(betterproto.Message):
    eventid: int = betterproto.uint32_field(1)
    code: str = betterproto.string_field(2)


@dataclass(eq=False, repr=False)
class StrikeGotvSyncPacket(betterproto.Message):
    data: "GotvSyncPacket" = betterproto.message_field(1)


@dataclass(eq=False, repr=False)
class PlayerDecalDigitalSignature(betterproto.Message):
    signature: bytes = betterproto.bytes_field(1)
    accountid: int = betterproto.uint32_field(2)
    rtime: int = betterproto.uint32_field(3)
    endpos: list[float] = betterproto.float_field(4)
    startpos: list[float] = betterproto.float_field(5)
    right: list[float] = betterproto.float_field(6)
    tx_defidx: int = betterproto.uint32_field(7)
    entindex: int = betterproto.int32_field(8)
    hitbox: int = betterproto.uint32_field(9)
    creationtime: float = betterproto.float_field(10)
    equipslot: int = betterproto.uint32_field(11)
    trace_id: int = betterproto.uint32_field(12)
    normal: list[float] = betterproto.float_field(13)
    tint_id: int = betterproto.uint32_field(14)


@dataclass(eq=False, repr=False)
class ClientPlayerDecalSign(betterproto.Message):
    data: "PlayerDecalDigitalSignature" = betterproto.message_field(1)
    itemid: int = betterproto.uint64_field(2)


@dataclass(eq=False, repr=False)
class ClientLogonFatalError(betterproto.Message):
    errorcode: int = betterproto.uint32_field(1)
    message: str = betterproto.string_field(2)
    country: str = betterproto.string_field(3)


@dataclass(eq=False, repr=False)
class ClientPollState(betterproto.Message):
    pollid: int = betterproto.uint32_field(1)
    names: list[str] = betterproto.string_field(2)
    values: list[int] = betterproto.int32_field(3)


@dataclass(eq=False, repr=False)
class PartyRegister(betterproto.Message):
    id: int = betterproto.uint32_field(1)
    ver: int = betterproto.uint32_field(2)
    apr: int = betterproto.uint32_field(3)
    ark: int = betterproto.uint32_field(4)
    nby: int = betterproto.uint32_field(5)
    grp: int = betterproto.uint32_field(6)
    slots: int = betterproto.uint32_field(7)
    launcher: int = betterproto.uint32_field(8)
    game_type: int = betterproto.uint32_field(9)


@dataclass(eq=False, repr=False)
class PartySearch(betterproto.Message):
    ver: int = betterproto.uint32_field(1)
    apr: int = betterproto.uint32_field(2)
    ark: int = betterproto.uint32_field(3)
    grps: list[int] = betterproto.uint32_field(4)
    launcher: int = betterproto.uint32_field(5)
    game_type: int = betterproto.uint32_field(6)


@dataclass(eq=False, repr=False)
class PartySearchResults(betterproto.Message):
    entries: "list[PartySearchResultsEntry]" = betterproto.message_field(1)


@dataclass(eq=False, repr=False)
class PartySearchResultsEntry(betterproto.Message):
    id: int = betterproto.uint32_field(1)
    grp: int = betterproto.uint32_field(2)
    game_type: int = betterproto.uint32_field(3)
    apr: int = betterproto.uint32_field(4)
    ark: int = betterproto.uint32_field(5)
    loc: int = betterproto.uint32_field(6)


@dataclass(eq=False, repr=False)
class PartyInvite(betterproto.Message):
    accountid: int = betterproto.uint32_field(1)
    lobbyid: int = betterproto.uint32_field(2)


@dataclass(eq=False, repr=False)
class AccountRequestCoPlays(betterproto.Message):
    players: "list[AccountRequestCoPlaysPlayer]" = betterproto.message_field(1)
    servertime: int = betterproto.uint32_field(2)


@dataclass(eq=False, repr=False)
class AccountRequestCoPlaysPlayer(betterproto.Message):
    accountid: int = betterproto.uint32_field(1)
    rtcoplay: int = betterproto.uint32_field(2)
    online: bool = betterproto.bool_field(3)


@dataclass(eq=False, repr=False)
class ClientToGcRequestTicket(betterproto.Message):
    authorized_steam_id: int = betterproto.fixed64_field(1)
    authorized_public_ip: int = betterproto.fixed32_field(2)
    gameserver_steam_id: int = betterproto.fixed64_field(3)
    gameserver_sdr_routing: str = betterproto.string_field(5)


@dataclass(eq=False, repr=False)
class GcToClientSteamDatagramTicket(betterproto.Message):
    serialized_ticket: bytes = betterproto.bytes_field(16)


@dataclass(eq=False, repr=False)
class ClientRequestOffers(betterproto.Message):
    pass


@dataclass(eq=False, repr=False)
class ClientRequestSouvenir(betterproto.Message):
    itemid: int = betterproto.uint64_field(1)
    matchid: int = betterproto.uint64_field(2)
    eventid: int = betterproto.int32_field(3)


@dataclass(eq=False, repr=False)
class ClientAccountBalance(betterproto.Message):
    amount: int = betterproto.uint64_field(1)
    url: str = betterproto.string_field(2)


@dataclass(eq=False, repr=False)
class ClientPartyJoinRelay(betterproto.Message):
    accountid: int = betterproto.uint32_field(1)
    lobbyid: int = betterproto.uint64_field(2)


@dataclass(eq=False, repr=False)
class ClientPartyWarning(betterproto.Message):
    entries: "list[ClientPartyWarningEntry]" = betterproto.message_field(1)


@dataclass(eq=False, repr=False)
class ClientPartyWarningEntry(betterproto.Message):
    accountid: int = betterproto.uint32_field(1)
    warntype: int = betterproto.uint32_field(2)


@dataclass(eq=False, repr=False)
class SetEventFavorite(betterproto.Message):
    eventid: int = betterproto.uint64_field(1)
    is_favorite: bool = betterproto.bool_field(2)


@dataclass(eq=False, repr=False)
class GetEventFavoritesRequest(betterproto.Message):
    all_events: bool = betterproto.bool_field(1)


@dataclass(eq=False, repr=False)
class GetEventFavoritesResponse(betterproto.Message):
    all_events: bool = betterproto.bool_field(1)
    json_favorites: str = betterproto.string_field(2)
    json_featured: str = betterproto.string_field(3)


@dataclass(eq=False, repr=False)
class ClientPerfReport(betterproto.Message):
    entries: "list[ClientPerfReportEntry]" = betterproto.message_field(1)


@dataclass(eq=False, repr=False)
class ClientPerfReportEntry(betterproto.Message):
    perfcounter: int = betterproto.uint32_field(1)
    length: int = betterproto.uint32_field(2)
    reference: bytes = betterproto.bytes_field(3)
    actual: bytes = betterproto.bytes_field(4)
    sourceid: int = betterproto.uint32_field(5)
    status: int = betterproto.uint32_field(6)


@dataclass(eq=False, repr=False)
class CvDiagnostic(betterproto.Message):
    id: int = betterproto.uint32_field(1)
    extended: int = betterproto.uint32_field(2)
    value: int = betterproto.uint64_field(3)
    string_value: str = betterproto.string_field(4)


@dataclass(eq=False, repr=False)
class ClientReportValidation(betterproto.Message):
    file_report: str = betterproto.string_field(1)
    command_line: str = betterproto.string_field(2)
    total_files: int = betterproto.uint32_field(3)
    internal_error: int = betterproto.uint32_field(4)
    trust_time: int = betterproto.uint32_field(5)
    count_pending: int = betterproto.uint32_field(6)
    count_completed: int = betterproto.uint32_field(7)
    process_id: int = betterproto.uint32_field(8)
    osversion: int = betterproto.int32_field(9)
    clientreportversion: int = betterproto.uint32_field(10)
    status_id: int = betterproto.uint32_field(11)
    diagnostic1: int = betterproto.uint32_field(12)
    diagnostic2: int = betterproto.uint64_field(13)
    diagnostic3: int = betterproto.uint64_field(14)
    last_launch_data: str = betterproto.string_field(15)
    report_count: int = betterproto.uint32_field(16)
    client_time: int = betterproto.uint64_field(17)
    diagnostic4: int = betterproto.uint64_field(18)
    diagnostic5: int = betterproto.uint64_field(19)
    diagnostics: "list[CvDiagnostic]" = betterproto.message_field(20)


@dataclass(eq=False, repr=False)
class ClientRefuseSecureMode(betterproto.Message):
    file_report: str = betterproto.string_field(1)
    offer_insecure_mode: bool = betterproto.bool_field(2)
    offer_secure_mode: bool = betterproto.bool_field(3)
    show_unsigned_ui: bool = betterproto.bool_field(4)
    kick_user: bool = betterproto.bool_field(5)
    show_trusted_ui: bool = betterproto.bool_field(6)
    show_warning_not_trusted: bool = betterproto.bool_field(7)


@dataclass(eq=False, repr=False)
class ClientRequestValidation(betterproto.Message):
    full_report: bool = betterproto.bool_field(1)
    module: str = betterproto.string_field(2)


class PremierSeasonSummary(GCProtobufMessage, msg=EMsg.PremierSeasonSummary):  # request
    account_id: int = betterproto.uint32_field(1)
    season_id: int = betterproto.uint32_field(2)


class PremierSeasonSummarySummary(GCProtobufMessage, msg=EMsg.PremierSeasonSummary):  # response
    account_id: int = betterproto.uint32_field(1)
    season_id: int = betterproto.uint32_field(2)
    data_per_week: "list[PremierSeasonSummaryDataPerWeek]" = betterproto.message_field(3)


@dataclass(eq=False, repr=False)
class PremierSeasonSummaryDataPerWeek(betterproto.Message):
    week_id: int = betterproto.uint64_field(1)
    rank_id: int = betterproto.uint32_field(2)
    matches_played: int = betterproto.uint32_field(3)


@dataclass(eq=False, repr=False)
class PremierSeasonSummaryDataPerMap(betterproto.Message):
    map_id: int = betterproto.uint32_field(1)
    wins: int = betterproto.uint32_field(2)
    ties: int = betterproto.uint32_field(3)
    losses: int = betterproto.uint32_field(4)
    rounds: int = betterproto.uint32_field(5)
    kills: int = betterproto.uint32_field(6)
    headshots: int = betterproto.uint32_field(7)
    assists: int = betterproto.uint32_field(8)
    deaths: int = betterproto.uint32_field(9)
    mvps: int = betterproto.uint32_field(10)
    rounds_3k: int = betterproto.uint32_field(11)
    rounds_4k: int = betterproto.uint32_field(12)
    rounds_5k: int = betterproto.uint32_field(13)
