Furtif/POGOProtos

View on GitHub
base/v0.115.x.proto

Summary

Maintainability
Test Coverage
syntax = "proto3";
//----- Begin token -----

// ref: Niantic.Platform.Auth.Token.FbTokenProto
message FbTokenProto {
    string token = 1;
}

// ref: Niantic.Platform.Auth.Token.SuperAwesomeTokenProto
message SuperAwesomeTokenProto {
    string token = 1;
}


//----- End token -----
//------------------------------
//----- Begin protos -----

// ref: Niantic.Platform.Protos.NotificationState
enum NotificationState {
    UNSET_STATE = 0;
    VIEWED = 1;
}

// ref: Niantic.Platform.Protos.AcceptFriendInviteOutProto
message AcceptFriendInviteOutProto {
    // ref: Niantic.Platform.Protos.AcceptFriendInviteOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_UNKNOWN = 2;
        ERROR_INVITE_DOES_NOT_EXIST = 3;
        ERROR_MAX_FRIENDS_LIMIT_REACHED_DELETED = 4;
        ERROR_INVITE_HAS_BEEN_CANCELLED = 5;
        ERROR_SENDER_HAS_MAX_FRIENDS = 6;
        ERROR_RECEIVER_HAS_MAX_FRIENDS = 7;
    }

    Result result = 1;
    PlayerSummaryProto friend = 2;
}

// ref: Niantic.Platform.Protos.AcceptFriendInviteProto
message AcceptFriendInviteProto {
    string player_id = 1;
}

// ref: Niantic.Platform.Protos.AddLoginActionOutProto
message AddLoginActionOutProto {
    // ref: Niantic.Platform.Protos.AddLoginActionOutProto/Types/Status
    enum Status {
        UNSET = 0;
        AUTH_FAILURE = 1;
        LOGIN_TAKEN = 2;
    }

    bool success = 1;
    repeated LoginDetail login_detail = 2 [packed=false];
    Status status = 3;
}

// ref: Niantic.Platform.Protos.AddLoginActionProto
message AddLoginActionProto {
    IdentityProvider identity_provider = 1;
    bytes inner_message = 2;
}

// ref: Niantic.Platform.Protos.ApnToken
message ApnToken {
    string registration_id = 1;
    string bundle_identifier = 2;
    int32 payload_byte_size = 3;
}

// ref: Niantic.Platform.Protos.CancelFriendInviteOutProto
message CancelFriendInviteOutProto {
    // ref: Niantic.Platform.Protos.CancelFriendInviteOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_UNKNOWN = 2;
        ERROR_INVITE_DOES_NOT_EXIST = 3;
        ERROR_ALREADY_CANCELLED = 4;
    }

    Result result = 1;
}

// ref: Niantic.Platform.Protos.CancelFriendInviteProto
message CancelFriendInviteProto {
    string player_id = 1;
}

// ref: Niantic.Platform.Protos.ClientInbox
message ClientInbox {
    // ref: Niantic.Platform.Protos.ClientInbox/Types/Label
    enum Label {
        UNSET_LABEL = 0;
        UNREAD = 1;
        NEW = 2;
        IMMEDIATE = 3;
    }

    // ref: Niantic.Platform.Protos.ClientInbox/Types/Notification
    message Notification {
        string notification_id = 1;
        string title_key = 2;
        string category = 3;
        int64 create_timestamp_ms = 4;
        repeated TemplateVariable variables = 5 [packed=false];
        repeated ClientInbox.Label labels = 6 [packed=false];
        int64 expire_time_ms = 7;
    }

    repeated Notification notifications = 1 [packed=false];
    repeated TemplateVariable builtin_variables = 2 [packed=false];
}

// ref: Niantic.Platform.Protos.DebugInfoProto
message DebugInfoProto {
    double latitude = 1;
    double longitude = 2;
}

// ref: Niantic.Platform.Protos.DeclineFriendInviteOutProto
message DeclineFriendInviteOutProto {
    // ref: Niantic.Platform.Protos.DeclineFriendInviteOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_UNKNOWN = 2;
        ERROR_INVITE_DOES_NOT_EXIST = 3;
        ERROR_INVITE_ALREADY_DECLINED = 4;
    }

    Result result = 1;
}

// ref: Niantic.Platform.Protos.DeclineFriendInviteProto
message DeclineFriendInviteProto {
    string player_id = 1;
}

// ref: Niantic.Platform.Protos.DownloadSettingsActionProto
message DownloadSettingsActionProto {
    string sha1 = 1;
}

// ref: Niantic.Platform.Protos.DownloadSettingsResponseProto
message DownloadSettingsResponseProto {
    string error = 1;
    string sha1 = 2;
    bytes values = 3;
}

// ref: Niantic.Platform.Protos.FriendDetailsProto
message FriendDetailsProto {
    PlayerSummaryProto player = 1;
    bytes friend_visible_data = 2;
    int32 score = 3;
    bytes data_with_me = 4;
}

// ref: Niantic.Platform.Protos.GcmToken
message GcmToken {
    string registration_id = 1;
}

// ref: Niantic.Platform.Protos.GetAvailableSubmissionsOutProto
message GetAvailableSubmissionsOutProto {
    int32 submissions_left = 1;
    int32 min_player_level = 2;
    bool has_valid_email = 3;
}

// ref: Niantic.Platform.Protos.GetAvailableSubmissionsProto
message GetAvailableSubmissionsProto {
}

// ref: Niantic.Platform.Protos.GetFriendCodeOutProto
message GetFriendCodeOutProto {
    // ref: Niantic.Platform.Protos.GetFriendCodeOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
    }

    Result result = 1;
    string friend_code = 2;
}

// ref: Niantic.Platform.Protos.GetFriendCodeProto
message GetFriendCodeProto {
    bool force_generate_code = 1;
}

// ref: Niantic.Platform.Protos.GetFriendDetailsOutProto
message GetFriendDetailsOutProto {
    // ref: Niantic.Platform.Protos.GetFriendDetailsOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_UNKNOWN = 2;
        EXCEEDS_MAX_PLAYERS_PER_QUERY = 3;
    }

    // ref: Niantic.Platform.Protos.GetFriendDetailsOutProto/Types/DebugProto/Types/Callee
    message Callee {
        repeated int32 callee_id = 1 [packed=false];
        string player_id = 2;
    }

    // ref: Niantic.Platform.Protos.GetFriendDetailsOutProto/Types/DebugProto
    message DebugProto {
        // ref: Niantic.Platform.Protos.GetFriendDetailsOutProto/Types/DebugProto/Types/Callee
        message Callee {
            repeated int32 callee_id = 1 [packed=false];
            string player_id = 2;
        }

        int32 fetched_from_db = 1;
        int32 fetched_from_fanout = 2;
        int32 fetched_from_player_mapper = 3;
        int32 fetched_from_status_cache = 4;
        int32 failed_to_fetch = 5;
        repeated GetFriendDetailsOutProto.Callee callee_list = 6 [packed=false];
    }

    Result result = 1;
    repeated FriendDetailsProto friend = 2 [packed=false];
    DebugProto friend_details_debug_info = 3;
}

// ref: Niantic.Platform.Protos.GetFriendDetailsProto
message GetFriendDetailsProto {
    repeated string player_id = 1 [packed=false];
}

// ref: Niantic.Platform.Protos.GetFriendsListOutProto
message GetFriendsListOutProto {
    // ref: Niantic.Platform.Protos.GetFriendsListOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_UNKNOWN = 2;
    }

    // ref: Niantic.Platform.Protos.GetFriendsListOutProto/Types/FriendProto
    message FriendProto {
        string player_id = 1;
        string codename = 2;
        string team = 3;
        int32 score = 4;
        bytes data_with_me = 5;
        int64 version = 6;
        int64 created_ms = 7;
    }

    Result result = 1;
    repeated FriendProto friend = 2 [packed=false];
}

// ref: Niantic.Platform.Protos.GetFriendsListProto
message GetFriendsListProto {
}

// ref: Niantic.Platform.Protos.GetInboxV2Proto
message GetInboxV2Proto {
    bool is_history = 1;
    bool is_reverse = 2;
    int64 not_before_ms = 3;
}

// ref: Niantic.Platform.Protos.GetIncomingFriendInvitesOutProto
message GetIncomingFriendInvitesOutProto {
    // ref: Niantic.Platform.Protos.GetIncomingFriendInvitesOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_UNKNOWN = 2;
    }

    Result result = 1;
    repeated IncomingFriendInviteDisplayProto invites = 2 [packed=false];
}

// ref: Niantic.Platform.Protos.GetIncomingFriendInvitesProto
message GetIncomingFriendInvitesProto {
}

// ref: Niantic.Platform.Protos.GetNotificationInboxOutProto
message GetNotificationInboxOutProto {
    // ref: Niantic.Platform.Protos.GetNotificationInboxOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        FAILURE = 2;
    }

    Result result = 1;
    ClientInbox inbox = 2;
}

// ref: Niantic.Platform.Protos.GetOutgoingFriendInvitesOutProto
message GetOutgoingFriendInvitesOutProto {
    // ref: Niantic.Platform.Protos.GetOutgoingFriendInvitesOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_UNKNOWN = 2;
    }

    Result result = 1;
    repeated OutgoingFriendInviteDisplayProto invites = 2 [packed=false];
}

// ref: Niantic.Platform.Protos.GetOutgoingFriendInvitesProto
message GetOutgoingFriendInvitesProto {
}

// ref: Niantic.Platform.Protos.GetUploadUrlOutProto
message GetUploadUrlOutProto {
    // ref: Niantic.Platform.Protos.GetUploadUrlOutProto/Types/Status
    enum Status {
        UNSET = 0;
        FAILURES = 1;
        SUCCESS = 2;
    }

    Status status = 1;
    string signed_url = 2;
    string supporting_image_signed_url = 3;
}

// ref: Niantic.Platform.Protos.GetUploadUrlProto
message GetUploadUrlProto {
    string user_id = 1;
    string game_unique_id = 2;
}

// ref: Niantic.Platform.Protos.IncomingFriendInviteDisplayProto
message IncomingFriendInviteDisplayProto {
    IncomingFriendInviteProto invite = 1;
    PlayerSummaryProto player = 2;
}

// ref: Niantic.Platform.Protos.IncomingFriendInviteProto
message IncomingFriendInviteProto {
    // ref: Niantic.Platform.Protos.IncomingFriendInviteProto/Types/Status
    enum Status {
        UNSET = 0;
        PENDING = 1;
        DECLINED = 2;
        CANCELLED = 3;
    }

    Status status = 1;
    string player_id = 2;
    int64 created_ms = 3;
}

// ref: Niantic.Platform.Protos.InviteFacebookFriendOutProto
message InviteFacebookFriendOutProto {
    // ref: Niantic.Platform.Protos.InviteFacebookFriendOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_UNKNOWN = 2;
        ERROR_ALREADY_A_FRIEND = 3;
        ERROR_PLAYER_DOES_NOT_EXIST = 4;
        ERROR_PLAYER_INBOX_FULL = 5;
        ERROR_PLAYER_OUTBOX_FULL = 6;
    }

    Result result = 1;
}

// ref: Niantic.Platform.Protos.InviteFacebookFriendProto
message InviteFacebookFriendProto {
    string business_token = 1;
}

// ref: Niantic.Platform.Protos.IsMyFriendOutProto
message IsMyFriendOutProto {
    // ref: Niantic.Platform.Protos.IsMyFriendOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_UNKNOWN = 2;
        ERROR_PLAYER_NOT_FOUND_DELETED = 3;
    }

    Result result = 1;
    bool is_friend = 2;
}

// ref: Niantic.Platform.Protos.IsMyFriendProto
message IsMyFriendProto {
    string player_id = 1;
}

// ref: Niantic.Platform.Protos.ListLoginActionOutProto
message ListLoginActionOutProto {
    bool success = 1;
    repeated LoginDetail login_detail = 2 [packed=false];
}

// ref: Niantic.Platform.Protos.LoginDetail
message LoginDetail {
    IdentityProvider identity_provider = 1;
    string email = 2;
}

// ref: Niantic.Platform.Protos.OptOutProto
message OptOutProto {
    repeated string categories = 1 [packed=false];
}

// ref: Niantic.Platform.Protos.OutgoingFriendInviteDisplayProto
message OutgoingFriendInviteDisplayProto {
    OutgoingFriendInviteProto invite = 1;
    PlayerSummaryProto player = 2;
}

// ref: Niantic.Platform.Protos.OutgoingFriendInviteProto
message OutgoingFriendInviteProto {
    // ref: Niantic.Platform.Protos.OutgoingFriendInviteProto/Types/Status
    enum Status {
        UNSET = 0;
        PENDING = 1;
        CANCELLED = 2;
        DECLINED = 3;
    }

    Status status = 1;
    string player_id = 2;
    int64 created_ms = 3;
}

// ref: Niantic.Platform.Protos.PingRequestProto
message PingRequestProto {
    int32 response_size_bytes = 1;
    string random_request_bytes = 2;
    bool use_cache_for_random_request_bytes = 3;
}

// ref: Niantic.Platform.Protos.PingResponseProto
message PingResponseProto {
    string user_info = 1;
    string server_info = 2;
    string random_response_bytes = 3;
}

// ref: Niantic.Platform.Protos.PlayerReputationProto
message PlayerReputationProto {
    // ref: Niantic.Platform.Protos.PlayerReputationProto/Types/CheatReputation
    enum CheatReputation {
        UNSET = 0;
        BOT = 1;
        SPOOFER = 2;
    }

    int64 account_age_ms = 1;
    int64 player_level = 2;
    repeated CheatReputation cheat_reputation = 3 [packed=false];
    bool is_minor = 4;
}

// ref: Niantic.Platform.Protos.PlayerSummaryProto
message PlayerSummaryProto {
    string player_id = 1;
    string codename = 2;
    bytes public_data = 3;
    string team = 4;
}

// ref: Niantic.Platform.Protos.PortalCurationImageResult
message PortalCurationImageResult {
    // ref: Niantic.Platform.Protos.PortalCurationImageResult/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        FEATURE_DISABLED = 2;
        ALREADY_UPLOADED = 3;
        IMAGE_NOT_FOUND = 4;
        IMAGE_TOO_BIG = 5;
        IMAGE_NOT_SERVABLE = 6;
        PORTAL_NOT_FOUND = 7;
    }

}

// ref: Niantic.Platform.Protos.PushNotificationRegistryOutProto
message PushNotificationRegistryOutProto {
    // ref: Niantic.Platform.Protos.PushNotificationRegistryOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        NO_CHANGE = 2;
    }

    Result result = 1;
}

// ref: Niantic.Platform.Protos.PushNotificationRegistryProto
message PushNotificationRegistryProto {
    ApnToken apn_token = 1;
    GcmToken gcm_token = 2;
}

// ref: Niantic.Platform.Protos.RemoveFriendOutProto
message RemoveFriendOutProto {
    // ref: Niantic.Platform.Protos.RemoveFriendOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_PLAYER_DOES_NOT_EXIST_DELETED = 2;
        ERROR_PLAYER_NOT_A_FRIEND = 3;
    }

    Result result = 1;
}

// ref: Niantic.Platform.Protos.RemoveFriendProto
message RemoveFriendProto {
    string player_id = 1;
}

// ref: Niantic.Platform.Protos.RemoveLoginActionOutProto
message RemoveLoginActionOutProto {
    // ref: Niantic.Platform.Protos.RemoveLoginActionOutProto/Types/Status
    enum Status {
        UNSET = 0;
        LOGIN_NOT_REMOVABLE = 1;
    }

    bool success = 1;
    repeated LoginDetail login_detail = 2 [packed=false];
    Status status = 3;
}

// ref: Niantic.Platform.Protos.RemoveLoginActionProto
message RemoveLoginActionProto {
    IdentityProvider identity_provider = 1;
}

// ref: Niantic.Platform.Protos.ReplaceLoginActionOutProto
message ReplaceLoginActionOutProto {
    // ref: Niantic.Platform.Protos.ReplaceLoginActionOutProto/Types/Status
    enum Status {
        UNSET = 0;
        AUTH_FAILURE = 1;
        LOGIN_TAKEN = 2;
        LOGIN_ALREADY_HAVE = 3;
        LOGIN_NOT_REPLACEABLE = 4;
    }

    bool success = 1;
    repeated LoginDetail login_detail = 2 [packed=false];
    Status status = 3;
}

// ref: Niantic.Platform.Protos.ReplaceLoginActionProto
message ReplaceLoginActionProto {
    IdentityProvider existing_identity_provider = 1;
    AddLoginActionProto new_login = 2;
}

// ref: Niantic.Platform.Protos.SearchPlayerOutProto
message SearchPlayerOutProto {
    // ref: Niantic.Platform.Protos.SearchPlayerOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_UNKNOWN = 2;
        ERROR_PLAYER_NOT_FOUND = 3;
    }

    Result result = 1;
    PlayerSummaryProto player = 2;
}

// ref: Niantic.Platform.Protos.SearchPlayerProto
message SearchPlayerProto {
    string friend_code = 1;
}

// ref: Niantic.Platform.Protos.SendFriendInviteOutProto
message SendFriendInviteOutProto {
    // ref: Niantic.Platform.Protos.SendFriendInviteOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_UNKNOWN = 2;
        ERROR_ALREADY_A_FRIEND = 3;
        ERROR_PLAYER_DOES_NOT_EXIST_DELETED = 4;
        ERROR_PLAYER_INBOX_FULL = 5;
        ERROR_PLAYER_OUTBOX_FULL = 6;
        ERROR_SENDER_HAS_MAX_FRIENDS = 7;
        ERROR_INVITE_ALREADY_SENT = 8;
        ERROR_CANNOT_SEND_INVITES_TO_YOURSELF = 9;
        ERROR_INVITE_ALREADY_RECEIVED = 10;
        ERROR_RECEIVER_HAS_MAX_FRIENDS = 11;
    }

    Result result = 1;
}

// ref: Niantic.Platform.Protos.SendFriendInviteProto
message SendFriendInviteProto {
    string player_id = 1;
    string friend_code = 2;
}

// ref: Niantic.Platform.Protos.SubmitNewPoiOutProto
message SubmitNewPoiOutProto {
    // ref: Niantic.Platform.Protos.SubmitNewPoiOutProto/Types/Status
    enum Status {
        UNSET = 0;
        SUCCESS = 1;
        FAILURE = 2;
        INTERNAL_ERROR = 3;
        TOO_MANY_RECENT_SUBMISSIONS = 4;
        INVALID_INPUT = 5;
        MINOR = 6;
    }

    Status status = 1;
    repeated string message = 2 [packed=false];
}

// ref: Niantic.Platform.Protos.SubmitNewPoiProto
message SubmitNewPoiProto {
    string title = 1;
    string long_description = 2;
    int32 lat_e6 = 4;
    int32 lng_e6 = 5;
    string supporting_statement = 14;
    bool has_supporting_image = 15;
}

// ref: Niantic.Platform.Protos.TemplateVariable
message TemplateVariable {
    string name = 1;
    string literal = 2;
    string key = 3;
    string lookup_table = 4;
    bytes byte_value = 5;
}

// ref: Niantic.Platform.Protos.UpdateNotificationOutProto
message UpdateNotificationOutProto {
    repeated string notification_ids = 1 [packed=false];
    repeated int64 create_timestamp_ms = 2 [packed=false];
    NotificationState state = 3;
}

// ref: Niantic.Platform.Protos.UpdateNotificationProto
message UpdateNotificationProto {
    repeated string notification_ids = 1 [packed=false];
    repeated int64 create_timestamp_ms = 2 [packed=false];
    NotificationState state = 3;
}

// ref: Niantic.Platform.Protos.UploadPoiPhotoByUrlOutProto
message UploadPoiPhotoByUrlOutProto {
    PortalCurationImageResult.Result status = 1;
}

// ref: Niantic.Platform.Protos.UploadPoiPhotoByUrlProto
message UploadPoiPhotoByUrlProto {
    string request_id = 1;
    string image_url = 2;
}


//----- End protos -----
//------------------------------
//----- Begin rpc -----

// ref: Holoholo.Rpc.AvatarCustomizationTelemetryIds
enum AvatarCustomizationTelemetryIds {
    UNDEFINED_AVATAR_CUSTOMIZATION = 0;
    EQUIP_ITEM = 1;
    OPEN_FEATURES = 2;
    OPEN_STORE = 3;
    PURCHASE_ITEM = 4;
    PURCHASE_ERROR = 5;
    SELECT_ITEM_GROUP = 6;
    SELECT_SLOT = 7;
    SELECT_COLOR = 8;
    SHOW_QUICK_SHOP = 9;
}

// ref: Holoholo.Rpc.BattlePartyTelemetryIds
enum BattlePartyTelemetryIds {
    UNDEFINED_BATTLE_PARTY_EVENT = 0;
    ADD = 1;
    REMOVE = 2;
    GYM_BATTLE = 3;
    RAID_BATTLE = 4;
    BATTLE_POKEMON_CHANGED = 5;
}

// ref: Holoholo.Rpc.CameraInterpolation
enum CameraInterpolation {
    CAM_INTERP_CUT = 0;
    CAM_INTERP_LINEAR = 1;
    CAM_INTERP_SMOOTH = 2;
    CAM_INTERP_SMOOTH_ROT_LINEAR_MOVE = 3;
    CAM_INTERP_DEPENDS = 4;
}

// ref: Holoholo.Rpc.CameraTarget
enum CameraTarget {
    CAM_TARGET_ATTACKER = 0;
    CAM_TARGET_ATTACKER_EDGE = 1;
    CAM_TARGET_ATTACKER_GROUND = 2;
    CAM_TARGET_DEFENDER = 3;
    CAM_TARGET_DEFENDER_EDGE = 4;
    CAM_TARGET_DEFENDER_GROUND = 5;
    CAM_TARGET_ATTACKER_DEFENDER = 6;
    CAM_TARGET_ATTACKER_DEFENDER_EDGE = 7;
    CAM_TARGET_DEFENDER_ATTACKER = 8;
    CAM_TARGET_DEFENDER_ATTACKER_EDGE = 9;
    CAM_TARGET_ATTACKER_DEFENDER_MIRROR = 11;
    CAM_TARGET_SHOULDER_ATTACKER_DEFENDER = 12;
    CAM_TARGET_SHOULDER_ATTACKER_DEFENDER_MIRROR = 13;
    CAM_TARGET_ATTACKER_DEFENDER_WORLD = 14;
}

// ref: Holoholo.Rpc.EggIncubatorType
enum EggIncubatorType {
    INCUBATOR_UNSET = 0;
    INCUBATOR_DISTANCE = 1;
}

// ref: Holoholo.Rpc.EncounterType
enum EncounterType {
    SPAWN_POINT = 0;
    INCENSE = 1;
    DISK = 2;
    POST_RAID = 3;
    STORY_QUEST = 4;
    QUEST_STAMP_CARD = 5;
    CHALLENGE_QUEST = 6;
}

// ref: Holoholo.Rpc.FortType
enum FortType {
    GYM_a51f = 0;
    CHECKPOINT = 1;
}

// ref: Holoholo.Rpc.FriendshipLevelMilestone
enum FriendshipLevelMilestone {
    FRIENDSHIP_LEVEL_UNSET = 0;
    FRIENDSHIP_LEVEL_0 = 1;
    FRIENDSHIP_LEVEL_1 = 2;
    FRIENDSHIP_LEVEL_2 = 3;
    FRIENDSHIP_LEVEL_3 = 4;
    FRIENDSHIP_LEVEL_4 = 5;
}

// ref: Holoholo.Rpc.GenericClickTelemetryIds
enum GenericClickTelemetryIds {
    UNDEFINED_GENERIC_EVENT = 0;
    SPEED_WARNING_SHOW = 1;
    SPEED_WARNING_PASSENGER = 2;
}

// ref: Holoholo.Rpc.GymBadgeType
enum GymBadgeType {
    GYM_BADGE_UNSET = 0;
    GYM_BADGE_VANILLA = 1;
    GYM_BADGE_BRONZE = 2;
    GYM_BADGE_SILVER = 3;
    GYM_BADGE_GOLD = 4;
}

// ref: Holoholo.Rpc.HoloActivityType
enum HoloActivityType {
    ACTIVITY_UNKNOWN = 0;
    ACTIVITY_CATCH_POKEMON = 1;
    ACTIVITY_CATCH_LEGEND_POKEMON = 2;
    ACTIVITY_FLEE_POKEMON = 3;
    ACTIVITY_DEFEAT_FORT = 4;
    ACTIVITY_EVOLVE_POKEMON = 5;
    ACTIVITY_HATCH_EGG = 6;
    ACTIVITY_WALK_KM = 7;
    ACTIVITY_POKEDEX_ENTRY_NEW = 8;
    ACTIVITY_CATCH_FIRST_THROW = 9;
    ACTIVITY_CATCH_NICE_THROW = 10;
    ACTIVITY_CATCH_GREAT_THROW = 11;
    ACTIVITY_CATCH_EXCELLENT_THROW = 12;
    ACTIVITY_CATCH_CURVEBALL = 13;
    ACTIVITY_CATCH_FIRST_CATCH_OF_DAY = 14;
    ACTIVITY_CATCH_MILESTONE = 15;
    ACTIVITY_TRAIN_POKEMON = 16;
    ACTIVITY_SEARCH_FORT = 17;
    ACTIVITY_RELEASE_POKEMON = 18;
    ACTIVITY_HATCH_EGG_SMALL_BONUS = 19;
    ACTIVITY_HATCH_EGG_MEDIUM_BONUS = 20;
    ACTIVITY_HATCH_EGG_LARGE_BONUS = 21;
    ACTIVITY_DEFEAT_GYM_DEFENDER = 22;
    ACTIVITY_DEFEAT_GYM_LEADER = 23;
    ACTIVITY_CATCH_FIRST_CATCH_STREAK_BONUS = 24;
    ACTIVITY_SEARCH_FORT_FIRST_OF_THE_DAY = 25;
    ACTIVITY_SEARCH_FORT_STREAK_BONUS = 26;
    ACTIVITY_DEFEAT_RAID_POKEMON = 27;
    ACTIVITY_FEED_BERRY = 28;
    ACTIVITY_SEARCH_GYM = 29;
    ACTIVITY_NEW_POKESTOP = 30;
    ACTIVITY_GYM_BATTLE_LOSS = 31;
    ACTIVITY_CATCH_AR_PLUS_BONUS = 32;
    ACTIVITY_CATCH_QUEST_POKEMON_ENCOUNTER = 33;
    ACTIVITY_FRIENDSHIP_LEVEL_UP_0 = 35;
    ACTIVITY_FRIENDSHIP_LEVEL_UP_1 = 36;
    ACTIVITY_FRIENDSHIP_LEVEL_UP_2 = 37;
    ACTIVITY_FRIENDSHIP_LEVEL_UP_3 = 38;
    ACTIVITY_FRIENDSHIP_LEVEL_UP_4 = 39;
    ACTIVITY_SEND_GIFT = 40;
    ACTIVITY_SHARE_EX_RAID_PASS = 41;
}

// ref: Holoholo.Rpc.HoloBadgeType
enum HoloBadgeType {
    BADGE_UNSET = 0;
    BADGE_TRAVEL_KM = 1;
    BADGE_POKEDEX_ENTRIES = 2;
    BADGE_CAPTURE_TOTAL = 3;
    BADGE_DEFEATED_FORT = 4;
    BADGE_EVOLVED_TOTAL = 5;
    BADGE_HATCHED_TOTAL = 6;
    BADGE_ENCOUNTERED_TOTAL = 7;
    BADGE_POKESTOPS_VISITED = 8;
    BADGE_UNIQUE_POKESTOPS = 9;
    BADGE_POKEBALL_THROWN = 10;
    BADGE_BIG_MAGIKARP = 11;
    BADGE_DEPLOYED_TOTAL = 12;
    BADGE_BATTLE_ATTACK_WON = 13;
    BADGE_BATTLE_TRAINING_WON = 14;
    BADGE_BATTLE_DEFEND_WON = 15;
    BADGE_PRESTIGE_RAISED = 16;
    BADGE_PRESTIGE_DROPPED = 17;
    BADGE_TYPE_NORMAL = 18;
    BADGE_TYPE_FIGHTING = 19;
    BADGE_TYPE_FLYING = 20;
    BADGE_TYPE_POISON = 21;
    BADGE_TYPE_GROUND = 22;
    BADGE_TYPE_ROCK = 23;
    BADGE_TYPE_BUG = 24;
    BADGE_TYPE_GHOST = 25;
    BADGE_TYPE_STEEL = 26;
    BADGE_TYPE_FIRE = 27;
    BADGE_TYPE_WATER = 28;
    BADGE_TYPE_GRASS = 29;
    BADGE_TYPE_ELECTRIC = 30;
    BADGE_TYPE_PSYCHIC = 31;
    BADGE_TYPE_ICE = 32;
    BADGE_TYPE_DRAGON = 33;
    BADGE_TYPE_DARK = 34;
    BADGE_TYPE_FAIRY = 35;
    BADGE_SMALL_RATTATA = 36;
    BADGE_PIKACHU = 37;
    BADGE_UNOWN = 38;
    BADGE_POKEDEX_ENTRIES_GEN2 = 39;
    BADGE_RAID_BATTLE_WON = 40;
    BADGE_LEGENDARY_BATTLE_WON = 41;
    BADGE_BERRIES_FED = 42;
    BADGE_HOURS_DEFENDED = 43;
    BADGE_PLACE_HOLDER = 44;
    BADGE_POKEDEX_ENTRIES_GEN3 = 45;
    BADGE_CHALLENGE_QUESTS = 46;
    BADGE_MEW_ENCOUNTER = 47;
    BADGE_MAX_LEVEL_FRIENDS = 48;
    BADGE_TRADING = 49;
    BADGE_TRADING_DISTANCE = 50;
    BADGE_EVENT_MIN = 2000;
    BADGE_CHICAGO_FEST_JULY_2017 = 2001;
    BADGE_PIKACHU_OUTBREAK_YOKOHAMA_2017 = 2002;
    BADGE_SAFARI_ZONE_EUROPE_2017 = 2003;
    BADGE_SAFARI_ZONE_EUROPE_2017_10_07 = 2004;
    BADGE_SAFARI_ZONE_EUROPE_2017_10_14 = 2005;
    BADGE_CHICAGO_FEST_JULY_2018_SAT_NORTH = 2006;
    BADGE_CHICAGO_FEST_JULY_2018_SAT_SOUTH = 2007;
    BADGE_CHICAGO_FEST_JULY_2018_SUN_NORTH = 2008;
    BADGE_CHICAGO_FEST_JULY_2018_SUN_SOUTH = 2009;
    BADGE_APAC_PARTNER_JULY_2018_0 = 2010;
    BADGE_APAC_PARTNER_JULY_2018_1 = 2011;
    BADGE_APAC_PARTNER_JULY_2018_2 = 2012;
    BADGE_APAC_PARTNER_JULY_2018_3 = 2013;
    BADGE_APAC_PARTNER_JULY_2018_4 = 2014;
    BADGE_APAC_PARTNER_JULY_2018_5 = 2015;
    BADGE_APAC_PARTNER_JULY_2018_6 = 2016;
    BADGE_APAC_PARTNER_JULY_2018_7 = 2017;
    BADGE_APAC_PARTNER_JULY_2018_8 = 2018;
    BADGE_APAC_PARTNER_JULY_2018_9 = 2019;
    BADGE_YOKOSUKA_29_AUG_2018_MIKASA = 2020;
    BADGE_YOKOSUKA_29_AUG_2018_VERNY = 2021;
    BADGE_YOKOSUKA_29_AUG_2018_KURIHAMA = 2022;
    BADGE_YOKOSUKA_30_AUG_2018_MIKASA = 2023;
    BADGE_YOKOSUKA_30_AUG_2018_VERNY = 2024;
    BADGE_YOKOSUKA_30_AUG_2018_KURIHAMA = 2025;
    BADGE_YOKOSUKA_31_AUG_2018_MIKASA = 2026;
    BADGE_YOKOSUKA_31_AUG_2018_VERNY = 2027;
    BADGE_YOKOSUKA_31_AUG_2018_KURIHAMA = 2028;
    BADGE_YOKOSUKA_1_SEP_2018_MIKASA = 2029;
    BADGE_YOKOSUKA_1_SEP_2018_VERNY = 2030;
    BADGE_YOKOSUKA_1_SEP_2018_KURIHAMA = 2031;
    BADGE_YOKOSUKA_2_SEP_2018_MIKASA = 2032;
    BADGE_YOKOSUKA_2_SEP_2018_VERNY = 2033;
    BADGE_YOKOSUKA_2_SEP_2018_KURIHAMA = 2034;
}

// ref: Holoholo.Rpc.HoloIapItemCategory
enum HoloIapItemCategory {
    IAP_CATEGORY_NONE = 0;
    IAP_CATEGORY_BUNDLE = 1;
    IAP_CATEGORY_ITEMS = 2;
    IAP_CATEGORY_UPGRADES = 3;
    IAP_CATEGORY_POKECOINS = 4;
    IAP_CATEGORY_AVATAR = 5;
    IAP_CATEGORY_AVATAR_STORE_LINK = 6;
}

// ref: Holoholo.Rpc.HoloItemCategory
enum HoloItemCategory {
    ITEM_CATEGORY_NONE = 0;
    ITEM_CATEGORY_POKEBALL = 1;
    ITEM_CATEGORY_FOOD = 2;
    ITEM_CATEGORY_MEDICINE = 3;
    ITEM_CATEGORY_BOOST = 4;
    ITEM_CATEGORY_UTILITES = 5;
    ITEM_CATEGORY_CAMERA = 6;
    ITEM_CATEGORY_DISK = 7;
    ITEM_CATEGORY_INCUBATOR = 8;
    ITEM_CATEGORY_INCENSE = 9;
    ITEM_CATEGORY_XP_BOOST = 10;
    ITEM_CATEGORY_INVENTORY_UPGRADE = 11;
    ITEM_CATEGORY_EVOLUTION_REQUIREMENT = 12;
    ITEM_CATEGORY_MOVE_REROLL = 13;
    ITEM_CATEGORY_CANDY = 14;
    ITEM_CATEGORY_RAID_TICKET = 15;
    ITEM_CATEGORY_STARDUST_BOOST = 16;
    ITEM_CATEGORY_FRIEND_GIFT_BOX = 17;
}

// ref: Holoholo.Rpc.HoloItemEffect
enum HoloItemEffect {
    ITEM_EFFECT_NONE = 0;
    ITEM_EFFECT_CAP_NO_FLEE = 1000;
    ITEM_EFFECT_CAP_NO_MOVEMENT = 1002;
    ITEM_EFFECT_CAP_NO_THREAT = 1003;
    ITEM_EFFECT_CAP_TARGET_MAX = 1004;
    ITEM_EFFECT_CAP_TARGET_SLOW = 1005;
    ITEM_EFFECT_CAP_CHANCE_NIGHT = 1006;
    ITEM_EFFECT_CAP_CHANCE_TRAINER = 1007;
    ITEM_EFFECT_CAP_CHANCE_FIRST_THROW = 1008;
    ITEM_EFFECT_CAP_CHANCE_LEGEND = 1009;
    ITEM_EFFECT_CAP_CHANCE_HEAVY = 1010;
    ITEM_EFFECT_CAP_CHANCE_REPEAT = 1011;
    ITEM_EFFECT_CAP_CHANCE_MULTI_THROW = 1012;
    ITEM_EFFECT_CAP_CHANCE_ALWAYS = 1013;
    ITEM_EFFECT_CAP_CHANCE_SINGLE_THROW = 1014;
    ITEM_EFFECT_CANDY_AWARD = 1015;
    ITEM_EFFECT_FULL_MOTIVATION = 1016;
}

// ref: Holoholo.Rpc.HoloItemType
enum HoloItemType {
    ITEM_TYPE_NONE = 0;
    ITEM_TYPE_POKEBALL = 1;
    ITEM_TYPE_POTION = 2;
    ITEM_TYPE_REVIVE = 3;
    ITEM_TYPE_MAP = 4;
    ITEM_TYPE_BATTLE = 5;
    ITEM_TYPE_FOOD = 6;
    ITEM_TYPE_CAMERA = 7;
    ITEM_TYPE_DISK = 8;
    ITEM_TYPE_INCUBATOR = 9;
    ITEM_TYPE_INCENSE = 10;
    ITEM_TYPE_XP_BOOST = 11;
    ITEM_TYPE_INVENTORY_UPGRADE = 12;
    ITEM_TYPE_EVOLUTION_REQUIREMENT = 13;
    ITEM_TYPE_MOVE_REROLL = 14;
    ITEM_TYPE_CANDY = 15;
    ITEM_TYPE_RAID_TICKET = 16;
    ITEM_TYPE_STARDUST_BOOST = 17;
    ITEM_TYPE_FRIEND_GIFT_BOX = 18;
}

// ref: Holoholo.Rpc.HoloPokemonClass
enum HoloPokemonClass {
    POKEMON_CLASS_NORMAL = 0;
    POKEMON_CLASS_LEGENDARY = 1;
    POKEMON_CLASS_MYTHIC = 2;
}

// ref: Holoholo.Rpc.HoloPokemonFamilyId
enum HoloPokemonFamilyId {
    FAMILY_UNSET = 0;
    V0001_FAMILY_BULBASAUR = 1;
    V0004_FAMILY_CHARMANDER = 4;
    V0007_FAMILY_SQUIRTLE = 7;
    V0010_FAMILY_CATERPIE = 10;
    V0013_FAMILY_WEEDLE = 13;
    V0016_FAMILY_PIDGEY = 16;
    V0019_FAMILY_RATTATA = 19;
    V0021_FAMILY_SPEAROW = 21;
    V0023_FAMILY_EKANS = 23;
    V0025_FAMILY_PIKACHU = 25;
    V0027_FAMILY_SANDSHREW = 27;
    V0029_FAMILY_NIDORAN = 29;
    V0032_FAMILY_NIDORAN = 32;
    V0035_FAMILY_CLEFAIRY = 35;
    V0037_FAMILY_VULPIX = 37;
    V0039_FAMILY_JIGGLYPUFF = 39;
    V0041_FAMILY_ZUBAT = 41;
    V0043_FAMILY_ODDISH = 43;
    V0046_FAMILY_PARAS = 46;
    V0048_FAMILY_VENONAT = 48;
    V0050_FAMILY_DIGLETT = 50;
    V0052_FAMILY_MEOWTH = 52;
    V0054_FAMILY_PSYDUCK = 54;
    V0056_FAMILY_MANKEY = 56;
    V0058_FAMILY_GROWLITHE = 58;
    V0060_FAMILY_POLIWAG = 60;
    V0063_FAMILY_ABRA = 63;
    V0066_FAMILY_MACHOP = 66;
    V0069_FAMILY_BELLSPROUT = 69;
    V0072_FAMILY_TENTACOOL = 72;
    V0074_FAMILY_GEODUDE = 74;
    V0077_FAMILY_PONYTA = 77;
    V0079_FAMILY_SLOWPOKE = 79;
    V0081_FAMILY_MAGNEMITE = 81;
    V0083_FAMILY_FARFETCHD = 83;
    V0084_FAMILY_DODUO = 84;
    V0086_FAMILY_SEEL = 86;
    V0088_FAMILY_GRIMER = 88;
    V0090_FAMILY_SHELLDER = 90;
    V0092_FAMILY_GASTLY = 92;
    V0095_FAMILY_ONIX = 95;
    V0096_FAMILY_DROWZEE = 96;
    V0098_FAMILY_KRABBY = 98;
    V0100_FAMILY_VOLTORB = 100;
    V0102_FAMILY_EXEGGCUTE = 102;
    V0104_FAMILY_CUBONE = 104;
    V0106_FAMILY_HITMONLEE = 106;
    V0107_FAMILY_HITMONCHAN = 107;
    V0108_FAMILY_LICKITUNG = 108;
    V0109_FAMILY_KOFFING = 109;
    V0111_FAMILY_RHYHORN = 111;
    V0113_FAMILY_CHANSEY = 113;
    V0114_FAMILY_TANGELA = 114;
    V0115_FAMILY_KANGASKHAN = 115;
    V0116_FAMILY_HORSEA = 116;
    V0118_FAMILY_GOLDEEN = 118;
    V0120_FAMILY_STARYU = 120;
    V0122_FAMILY_MR_MIME = 122;
    V0123_FAMILY_SCYTHER = 123;
    V0124_FAMILY_JYNX = 124;
    V0125_FAMILY_ELECTABUZZ = 125;
    V0126_FAMILY_MAGMAR = 126;
    V0127_FAMILY_PINSIR = 127;
    V0128_FAMILY_TAUROS = 128;
    V0129_FAMILY_MAGIKARP = 129;
    V0131_FAMILY_LAPRAS = 131;
    V0132_FAMILY_DITTO = 132;
    V0133_FAMILY_EEVEE = 133;
    V0137_FAMILY_PORYGON = 137;
    V0138_FAMILY_OMANYTE = 138;
    V0140_FAMILY_KABUTO = 140;
    V0142_FAMILY_AERODACTYL = 142;
    V0143_FAMILY_SNORLAX = 143;
    V0144_FAMILY_ARTICUNO = 144;
    V0145_FAMILY_ZAPDOS = 145;
    V0146_FAMILY_MOLTRES = 146;
    V0147_FAMILY_DRATINI = 147;
    V0150_FAMILY_MEWTWO = 150;
    V0151_FAMILY_MEW = 151;
    V0152_FAMILY_CHIKORITA = 152;
    V0155_FAMILY_CYNDAQUIL = 155;
    V0158_FAMILY_TOTODILE = 158;
    V0161_FAMILY_SENTRET = 161;
    V0163_FAMILY_HOOTHOOT = 163;
    V0165_FAMILY_LEDYBA = 165;
    V0167_FAMILY_SPINARAK = 167;
    V0170_FAMILY_CHINCHOU = 170;
    V0175_FAMILY_TOGEPI = 175;
    V0177_FAMILY_NATU = 177;
    V0179_FAMILY_MAREEP = 179;
    V0183_FAMILY_MARILL = 183;
    V0185_FAMILY_SUDOWOODO = 185;
    V0187_FAMILY_HOPPIP = 187;
    V0190_FAMILY_AIPOM = 190;
    V0191_FAMILY_SUNKERN = 191;
    V0193_FAMILY_YANMA = 193;
    V0194_FAMILY_WOOPER = 194;
    V0198_FAMILY_MURKROW = 198;
    V0200_FAMILY_MISDREAVUS = 200;
    V0201_FAMILY_UNOWN = 201;
    V0202_FAMILY_WOBBUFFET = 202;
    V0203_FAMILY_GIRAFARIG = 203;
    V0204_FAMILY_PINECO = 204;
    V0206_FAMILY_DUNSPARCE = 206;
    V0207_FAMILY_GLIGAR = 207;
    V0209_FAMILY_SNUBBULL = 209;
    V0211_FAMILY_QWILFISH = 211;
    V0213_FAMILY_SHUCKLE = 213;
    V0214_FAMILY_HERACROSS = 214;
    V0215_FAMILY_SNEASEL = 215;
    V0216_FAMILY_TEDDIURSA = 216;
    V0218_FAMILY_SLUGMA = 218;
    V0220_FAMILY_SWINUB = 220;
    V0222_FAMILY_CORSOLA = 222;
    V0223_FAMILY_REMORAID = 223;
    V0225_FAMILY_DELIBIRD = 225;
    V0226_FAMILY_MANTINE = 226;
    V0227_FAMILY_SKARMORY = 227;
    V0228_FAMILY_HOUNDOUR = 228;
    V0231_FAMILY_PHANPY = 231;
    V0234_FAMILY_STANTLER = 234;
    V0235_FAMILY_SMEARGLE = 235;
    V0236_FAMILY_TYROGUE = 236;
    V0241_FAMILY_MILTANK = 241;
    V0243_FAMILY_RAIKOU = 243;
    V0244_FAMILY_ENTEI = 244;
    V0245_FAMILY_SUICUNE = 245;
    V0246_FAMILY_LARVITAR = 246;
    V0249_FAMILY_LUGIA = 249;
    V0250_FAMILY_HO_OH = 250;
    V0251_FAMILY_CELEBI = 251;
    V0252_FAMILY_TREECKO = 252;
    V0255_FAMILY_TORCHIC = 255;
    V0258_FAMILY_MUDKIP = 258;
    V0261_FAMILY_POOCHYENA = 261;
    V0263_FAMILY_ZIGZAGOON = 263;
    V0265_FAMILY_WURMPLE = 265;
    V0270_FAMILY_LOTAD = 270;
    V0273_FAMILY_SEEDOT = 273;
    V0276_FAMILY_TAILLOW = 276;
    V0278_FAMILY_WINGULL = 278;
    V0280_FAMILY_RALTS = 280;
    V0283_FAMILY_SURSKIT = 283;
    V0285_FAMILY_SHROOMISH = 285;
    V0287_FAMILY_SLAKOTH = 287;
    V0290_FAMILY_NINCADA = 290;
    V0293_FAMILY_WHISMUR = 293;
    V0296_FAMILY_MAKUHITA = 296;
    V0299_FAMILY_NOSEPASS = 299;
    V0300_FAMILY_SKITTY = 300;
    V0302_FAMILY_SABLEYE = 302;
    V0303_FAMILY_MAWILE = 303;
    V0304_FAMILY_ARON = 304;
    V0307_FAMILY_MEDITITE = 307;
    V0309_FAMILY_ELECTRIKE = 309;
    V0311_FAMILY_PLUSLE = 311;
    V0312_FAMILY_MINUN = 312;
    V0313_FAMILY_VOLBEAT = 313;
    V0314_FAMILY_ILLUMISE = 314;
    V0315_FAMILY_ROSELIA = 315;
    V0316_FAMILY_GULPIN = 316;
    V0318_FAMILY_CARVANHA = 318;
    V0320_FAMILY_WAILMER = 320;
    V0322_FAMILY_NUMEL = 322;
    V0324_FAMILY_TORKOAL = 324;
    V0325_FAMILY_SPOINK = 325;
    V0327_FAMILY_SPINDA = 327;
    V0328_FAMILY_TRAPINCH = 328;
    V0331_FAMILY_CACNEA = 331;
    V0333_FAMILY_SWABLU = 333;
    V0335_FAMILY_ZANGOOSE = 335;
    V0336_FAMILY_SEVIPER = 336;
    V0337_FAMILY_LUNATONE = 337;
    V0338_FAMILY_SOLROCK = 338;
    V0339_FAMILY_BARBOACH = 339;
    V0341_FAMILY_CORPHISH = 341;
    V0343_FAMILY_BALTOY = 343;
    V0345_FAMILY_LILEEP = 345;
    V0347_FAMILY_ANORITH = 347;
    V0349_FAMILY_FEEBAS = 349;
    V0351_FAMILY_CASTFORM = 351;
    V0352_FAMILY_KECLEON = 352;
    V0353_FAMILY_SHUPPET = 353;
    V0355_FAMILY_DUSKULL = 355;
    V0357_FAMILY_TROPIUS = 357;
    V0358_FAMILY_CHIMECHO = 358;
    V0359_FAMILY_ABSOL = 359;
    V0361_FAMILY_SNORUNT = 361;
    V0363_FAMILY_SPHEAL = 363;
    V0366_FAMILY_CLAMPERL = 366;
    V0369_FAMILY_RELICANTH = 369;
    V0370_FAMILY_LUVDISC = 370;
    V0371_FAMILY_BAGON = 371;
    V0374_FAMILY_BELDUM = 374;
    V0377_FAMILY_REGIROCK = 377;
    V0378_FAMILY_REGICE = 378;
    V0379_FAMILY_REGISTEEL = 379;
    V0380_FAMILY_LATIAS = 380;
    V0381_FAMILY_LATIOS = 381;
    V0382_FAMILY_KYOGRE = 382;
    V0383_FAMILY_GROUDON = 383;
    V0384_FAMILY_RAYQUAZA = 384;
    V0385_FAMILY_JIRACHI = 385;
    V0386_FAMILY_DEOXYS = 386;
}

// ref: Holoholo.Rpc.HoloPokemonId
enum HoloPokemonId {
    POKEMON_UNSET = 0;
    V0001_POKEMON_BULBASAUR = 1;
    V0002_POKEMON_IVYSAUR = 2;
    V0003_POKEMON_VENUSAUR = 3;
    V0004_POKEMON_CHARMANDER = 4;
    V0005_POKEMON_CHARMELEON = 5;
    V0006_POKEMON_CHARIZARD = 6;
    V0007_POKEMON_SQUIRTLE = 7;
    V0008_POKEMON_WARTORTLE = 8;
    V0009_POKEMON_BLASTOISE = 9;
    V0010_POKEMON_CATERPIE = 10;
    V0011_POKEMON_METAPOD = 11;
    V0012_POKEMON_BUTTERFREE = 12;
    V0013_POKEMON_WEEDLE = 13;
    V0014_POKEMON_KAKUNA = 14;
    V0015_POKEMON_BEEDRILL = 15;
    V0016_POKEMON_PIDGEY = 16;
    V0017_POKEMON_PIDGEOTTO = 17;
    V0018_POKEMON_PIDGEOT = 18;
    V0019_POKEMON_RATTATA = 19;
    V0020_POKEMON_RATICATE = 20;
    V0021_POKEMON_SPEAROW = 21;
    V0022_POKEMON_FEAROW = 22;
    V0023_POKEMON_EKANS = 23;
    V0024_POKEMON_ARBOK = 24;
    V0025_POKEMON_PIKACHU = 25;
    V0026_POKEMON_RAICHU = 26;
    V0027_POKEMON_SANDSHREW = 27;
    V0028_POKEMON_SANDSLASH = 28;
    V0029_POKEMON_NIDORAN = 29;
    V0030_POKEMON_NIDORINA = 30;
    V0031_POKEMON_NIDOQUEEN = 31;
    V0032_POKEMON_NIDORAN = 32;
    V0033_POKEMON_NIDORINO = 33;
    V0034_POKEMON_NIDOKING = 34;
    V0035_POKEMON_CLEFAIRY = 35;
    V0036_POKEMON_CLEFABLE = 36;
    V0037_POKEMON_VULPIX = 37;
    V0038_POKEMON_NINETALES = 38;
    V0039_POKEMON_JIGGLYPUFF = 39;
    V0040_POKEMON_WIGGLYTUFF = 40;
    V0041_POKEMON_ZUBAT = 41;
    V0042_POKEMON_GOLBAT = 42;
    V0043_POKEMON_ODDISH = 43;
    V0044_POKEMON_GLOOM = 44;
    V0045_POKEMON_VILEPLUME = 45;
    V0046_POKEMON_PARAS = 46;
    V0047_POKEMON_PARASECT = 47;
    V0048_POKEMON_VENONAT = 48;
    V0049_POKEMON_VENOMOTH = 49;
    V0050_POKEMON_DIGLETT = 50;
    V0051_POKEMON_DUGTRIO = 51;
    V0052_POKEMON_MEOWTH = 52;
    V0053_POKEMON_PERSIAN = 53;
    V0054_POKEMON_PSYDUCK = 54;
    V0055_POKEMON_GOLDUCK = 55;
    V0056_POKEMON_MANKEY = 56;
    V0057_POKEMON_PRIMEAPE = 57;
    V0058_POKEMON_GROWLITHE = 58;
    V0059_POKEMON_ARCANINE = 59;
    V0060_POKEMON_POLIWAG = 60;
    V0061_POKEMON_POLIWHIRL = 61;
    V0062_POKEMON_POLIWRATH = 62;
    V0063_POKEMON_ABRA = 63;
    V0064_POKEMON_KADABRA = 64;
    V0065_POKEMON_ALAKAZAM = 65;
    V0066_POKEMON_MACHOP = 66;
    V0067_POKEMON_MACHOKE = 67;
    V0068_POKEMON_MACHAMP = 68;
    V0069_POKEMON_BELLSPROUT = 69;
    V0070_POKEMON_WEEPINBELL = 70;
    V0071_POKEMON_VICTREEBEL = 71;
    V0072_POKEMON_TENTACOOL = 72;
    V0073_POKEMON_TENTACRUEL = 73;
    V0074_POKEMON_GEODUDE = 74;
    V0075_POKEMON_GRAVELER = 75;
    V0076_POKEMON_GOLEM = 76;
    V0077_POKEMON_PONYTA = 77;
    V0078_POKEMON_RAPIDASH = 78;
    V0079_POKEMON_SLOWPOKE = 79;
    V0080_POKEMON_SLOWBRO = 80;
    V0081_POKEMON_MAGNEMITE = 81;
    V0082_POKEMON_MAGNETON = 82;
    V0083_POKEMON_FARFETCHD = 83;
    V0084_POKEMON_DODUO = 84;
    V0085_POKEMON_DODRIO = 85;
    V0086_POKEMON_SEEL = 86;
    V0087_POKEMON_DEWGONG = 87;
    V0088_POKEMON_GRIMER = 88;
    V0089_POKEMON_MUK = 89;
    V0090_POKEMON_SHELLDER = 90;
    V0091_POKEMON_CLOYSTER = 91;
    V0092_POKEMON_GASTLY = 92;
    V0093_POKEMON_HAUNTER = 93;
    V0094_POKEMON_GENGAR = 94;
    V0095_POKEMON_ONIX = 95;
    V0096_POKEMON_DROWZEE = 96;
    V0097_POKEMON_HYPNO = 97;
    V0098_POKEMON_KRABBY = 98;
    V0099_POKEMON_KINGLER = 99;
    V0100_POKEMON_VOLTORB = 100;
    V0101_POKEMON_ELECTRODE = 101;
    V0102_POKEMON_EXEGGCUTE = 102;
    V0103_POKEMON_EXEGGUTOR = 103;
    V0104_POKEMON_CUBONE = 104;
    V0105_POKEMON_MAROWAK = 105;
    V0106_POKEMON_HITMONLEE = 106;
    V0107_POKEMON_HITMONCHAN = 107;
    V0108_POKEMON_LICKITUNG = 108;
    V0109_POKEMON_KOFFING = 109;
    V0110_POKEMON_WEEZING = 110;
    V0111_POKEMON_RHYHORN = 111;
    V0112_POKEMON_RHYDON = 112;
    V0113_POKEMON_CHANSEY = 113;
    V0114_POKEMON_TANGELA = 114;
    V0115_POKEMON_KANGASKHAN = 115;
    V0116_POKEMON_HORSEA = 116;
    V0117_POKEMON_SEADRA = 117;
    V0118_POKEMON_GOLDEEN = 118;
    V0119_POKEMON_SEAKING = 119;
    V0120_POKEMON_STARYU = 120;
    V0121_POKEMON_STARMIE = 121;
    V0122_POKEMON_MR_MIME = 122;
    V0123_POKEMON_SCYTHER = 123;
    V0124_POKEMON_JYNX = 124;
    V0125_POKEMON_ELECTABUZZ = 125;
    V0126_POKEMON_MAGMAR = 126;
    V0127_POKEMON_PINSIR = 127;
    V0128_POKEMON_TAUROS = 128;
    V0129_POKEMON_MAGIKARP = 129;
    V0130_POKEMON_GYARADOS = 130;
    V0131_POKEMON_LAPRAS = 131;
    V0132_POKEMON_DITTO = 132;
    V0133_POKEMON_EEVEE = 133;
    V0134_POKEMON_VAPOREON = 134;
    V0135_POKEMON_JOLTEON = 135;
    V0136_POKEMON_FLAREON = 136;
    V0137_POKEMON_PORYGON = 137;
    V0138_POKEMON_OMANYTE = 138;
    V0139_POKEMON_OMASTAR = 139;
    V0140_POKEMON_KABUTO = 140;
    V0141_POKEMON_KABUTOPS = 141;
    V0142_POKEMON_AERODACTYL = 142;
    V0143_POKEMON_SNORLAX = 143;
    V0144_POKEMON_ARTICUNO = 144;
    V0145_POKEMON_ZAPDOS = 145;
    V0146_POKEMON_MOLTRES = 146;
    V0147_POKEMON_DRATINI = 147;
    V0148_POKEMON_DRAGONAIR = 148;
    V0149_POKEMON_DRAGONITE = 149;
    V0150_POKEMON_MEWTWO = 150;
    V0151_POKEMON_MEW = 151;
    V0152_POKEMON_CHIKORITA = 152;
    V0153_POKEMON_BAYLEEF = 153;
    V0154_POKEMON_MEGANIUM = 154;
    V0155_POKEMON_CYNDAQUIL = 155;
    V0156_POKEMON_QUILAVA = 156;
    V0157_POKEMON_TYPHLOSION = 157;
    V0158_POKEMON_TOTODILE = 158;
    V0159_POKEMON_CROCONAW = 159;
    V0160_POKEMON_FERALIGATR = 160;
    V0161_POKEMON_SENTRET = 161;
    V0162_POKEMON_FURRET = 162;
    V0163_POKEMON_HOOTHOOT = 163;
    V0164_POKEMON_NOCTOWL = 164;
    V0165_POKEMON_LEDYBA = 165;
    V0166_POKEMON_LEDIAN = 166;
    V0167_POKEMON_SPINARAK = 167;
    V0168_POKEMON_ARIADOS = 168;
    V0169_POKEMON_CROBAT = 169;
    V0170_POKEMON_CHINCHOU = 170;
    V0171_POKEMON_LANTURN = 171;
    V0172_POKEMON_PICHU = 172;
    V0173_POKEMON_CLEFFA = 173;
    V0174_POKEMON_IGGLYBUFF = 174;
    V0175_POKEMON_TOGEPI = 175;
    V0176_POKEMON_TOGETIC = 176;
    V0177_POKEMON_NATU = 177;
    V0178_POKEMON_XATU = 178;
    V0179_POKEMON_MAREEP = 179;
    V0180_POKEMON_FLAAFFY = 180;
    V0181_POKEMON_AMPHAROS = 181;
    V0182_POKEMON_BELLOSSOM = 182;
    V0183_POKEMON_MARILL = 183;
    V0184_POKEMON_AZUMARILL = 184;
    V0185_POKEMON_SUDOWOODO = 185;
    V0186_POKEMON_POLITOED = 186;
    V0187_POKEMON_HOPPIP = 187;
    V0188_POKEMON_SKIPLOOM = 188;
    V0189_POKEMON_JUMPLUFF = 189;
    V0190_POKEMON_AIPOM = 190;
    V0191_POKEMON_SUNKERN = 191;
    V0192_POKEMON_SUNFLORA = 192;
    V0193_POKEMON_YANMA = 193;
    V0194_POKEMON_WOOPER = 194;
    V0195_POKEMON_QUAGSIRE = 195;
    V0196_POKEMON_ESPEON = 196;
    V0197_POKEMON_UMBREON = 197;
    V0198_POKEMON_MURKROW = 198;
    V0199_POKEMON_SLOWKING = 199;
    V0200_POKEMON_MISDREAVUS = 200;
    V0201_POKEMON_UNOWN = 201;
    V0202_POKEMON_WOBBUFFET = 202;
    V0203_POKEMON_GIRAFARIG = 203;
    V0204_POKEMON_PINECO = 204;
    V0205_POKEMON_FORRETRESS = 205;
    V0206_POKEMON_DUNSPARCE = 206;
    V0207_POKEMON_GLIGAR = 207;
    V0208_POKEMON_STEELIX = 208;
    V0209_POKEMON_SNUBBULL = 209;
    V0210_POKEMON_GRANBULL = 210;
    V0211_POKEMON_QWILFISH = 211;
    V0212_POKEMON_SCIZOR = 212;
    V0213_POKEMON_SHUCKLE = 213;
    V0214_POKEMON_HERACROSS = 214;
    V0215_POKEMON_SNEASEL = 215;
    V0216_POKEMON_TEDDIURSA = 216;
    V0217_POKEMON_URSARING = 217;
    V0218_POKEMON_SLUGMA = 218;
    V0219_POKEMON_MAGCARGO = 219;
    V0220_POKEMON_SWINUB = 220;
    V0221_POKEMON_PILOSWINE = 221;
    V0222_POKEMON_CORSOLA = 222;
    V0223_POKEMON_REMORAID = 223;
    V0224_POKEMON_OCTILLERY = 224;
    V0225_POKEMON_DELIBIRD = 225;
    V0226_POKEMON_MANTINE = 226;
    V0227_POKEMON_SKARMORY = 227;
    V0228_POKEMON_HOUNDOUR = 228;
    V0229_POKEMON_HOUNDOOM = 229;
    V0230_POKEMON_KINGDRA = 230;
    V0231_POKEMON_PHANPY = 231;
    V0232_POKEMON_DONPHAN = 232;
    V0233_POKEMON_PORYGON2 = 233;
    V0234_POKEMON_STANTLER = 234;
    V0235_POKEMON_SMEARGLE = 235;
    V0236_POKEMON_TYROGUE = 236;
    V0237_POKEMON_HITMONTOP = 237;
    V0238_POKEMON_SMOOCHUM = 238;
    V0239_POKEMON_ELEKID = 239;
    V0240_POKEMON_MAGBY = 240;
    V0241_POKEMON_MILTANK = 241;
    V0242_POKEMON_BLISSEY = 242;
    V0243_POKEMON_RAIKOU = 243;
    V0244_POKEMON_ENTEI = 244;
    V0245_POKEMON_SUICUNE = 245;
    V0246_POKEMON_LARVITAR = 246;
    V0247_POKEMON_PUPITAR = 247;
    V0248_POKEMON_TYRANITAR = 248;
    V0249_POKEMON_LUGIA = 249;
    V0250_POKEMON_HO_OH = 250;
    V0251_POKEMON_CELEBI = 251;
    V0252_POKEMON_TREECKO = 252;
    V0253_POKEMON_GROVYLE = 253;
    V0254_POKEMON_SCEPTILE = 254;
    V0255_POKEMON_TORCHIC = 255;
    V0256_POKEMON_COMBUSKEN = 256;
    V0257_POKEMON_BLAZIKEN = 257;
    V0258_POKEMON_MUDKIP = 258;
    V0259_POKEMON_MARSHTOMP = 259;
    V0260_POKEMON_SWAMPERT = 260;
    V0261_POKEMON_POOCHYENA = 261;
    V0262_POKEMON_MIGHTYENA = 262;
    V0263_POKEMON_ZIGZAGOON = 263;
    V0264_POKEMON_LINOONE = 264;
    V0265_POKEMON_WURMPLE = 265;
    V0266_POKEMON_SILCOON = 266;
    V0267_POKEMON_BEAUTIFLY = 267;
    V0268_POKEMON_CASCOON = 268;
    V0269_POKEMON_DUSTOX = 269;
    V0270_POKEMON_LOTAD = 270;
    V0271_POKEMON_LOMBRE = 271;
    V0272_POKEMON_LUDICOLO = 272;
    V0273_POKEMON_SEEDOT = 273;
    V0274_POKEMON_NUZLEAF = 274;
    V0275_POKEMON_SHIFTRY = 275;
    V0276_POKEMON_TAILLOW = 276;
    V0277_POKEMON_SWELLOW = 277;
    V0278_POKEMON_WINGULL = 278;
    V0279_POKEMON_PELIPPER = 279;
    V0280_POKEMON_RALTS = 280;
    V0281_POKEMON_KIRLIA = 281;
    V0282_POKEMON_GARDEVOIR = 282;
    V0283_POKEMON_SURSKIT = 283;
    V0284_POKEMON_MASQUERAIN = 284;
    V0285_POKEMON_SHROOMISH = 285;
    V0286_POKEMON_BRELOOM = 286;
    V0287_POKEMON_SLAKOTH = 287;
    V0288_POKEMON_VIGOROTH = 288;
    V0289_POKEMON_SLAKING = 289;
    V0290_POKEMON_NINCADA = 290;
    V0291_POKEMON_NINJASK = 291;
    V0292_POKEMON_SHEDINJA = 292;
    V0293_POKEMON_WHISMUR = 293;
    V0294_POKEMON_LOUDRED = 294;
    V0295_POKEMON_EXPLOUD = 295;
    V0296_POKEMON_MAKUHITA = 296;
    V0297_POKEMON_HARIYAMA = 297;
    V0298_POKEMON_AZURILL = 298;
    V0299_POKEMON_NOSEPASS = 299;
    V0300_POKEMON_SKITTY = 300;
    V0301_POKEMON_DELCATTY = 301;
    V0302_POKEMON_SABLEYE = 302;
    V0303_POKEMON_MAWILE = 303;
    V0304_POKEMON_ARON = 304;
    V0305_POKEMON_LAIRON = 305;
    V0306_POKEMON_AGGRON = 306;
    V0307_POKEMON_MEDITITE = 307;
    V0308_POKEMON_MEDICHAM = 308;
    V0309_POKEMON_ELECTRIKE = 309;
    V0310_POKEMON_MANECTRIC = 310;
    V0311_POKEMON_PLUSLE = 311;
    V0312_POKEMON_MINUN = 312;
    V0313_POKEMON_VOLBEAT = 313;
    V0314_POKEMON_ILLUMISE = 314;
    V0315_POKEMON_ROSELIA = 315;
    V0316_POKEMON_GULPIN = 316;
    V0317_POKEMON_SWALOT = 317;
    V0318_POKEMON_CARVANHA = 318;
    V0319_POKEMON_SHARPEDO = 319;
    V0320_POKEMON_WAILMER = 320;
    V0321_POKEMON_WAILORD = 321;
    V0322_POKEMON_NUMEL = 322;
    V0323_POKEMON_CAMERUPT = 323;
    V0324_POKEMON_TORKOAL = 324;
    V0325_POKEMON_SPOINK = 325;
    V0326_POKEMON_GRUMPIG = 326;
    V0327_POKEMON_SPINDA = 327;
    V0328_POKEMON_TRAPINCH = 328;
    V0329_POKEMON_VIBRAVA = 329;
    V0330_POKEMON_FLYGON = 330;
    V0331_POKEMON_CACNEA = 331;
    V0332_POKEMON_CACTURNE = 332;
    V0333_POKEMON_SWABLU = 333;
    V0334_POKEMON_ALTARIA = 334;
    V0335_POKEMON_ZANGOOSE = 335;
    V0336_POKEMON_SEVIPER = 336;
    V0337_POKEMON_LUNATONE = 337;
    V0338_POKEMON_SOLROCK = 338;
    V0339_POKEMON_BARBOACH = 339;
    V0340_POKEMON_WHISCASH = 340;
    V0341_POKEMON_CORPHISH = 341;
    V0342_POKEMON_CRAWDAUNT = 342;
    V0343_POKEMON_BALTOY = 343;
    V0344_POKEMON_CLAYDOL = 344;
    V0345_POKEMON_LILEEP = 345;
    V0346_POKEMON_CRADILY = 346;
    V0347_POKEMON_ANORITH = 347;
    V0348_POKEMON_ARMALDO = 348;
    V0349_POKEMON_FEEBAS = 349;
    V0350_POKEMON_MILOTIC = 350;
    V0351_POKEMON_CASTFORM = 351;
    V0352_POKEMON_KECLEON = 352;
    V0353_POKEMON_SHUPPET = 353;
    V0354_POKEMON_BANETTE = 354;
    V0355_POKEMON_DUSKULL = 355;
    V0356_POKEMON_DUSCLOPS = 356;
    V0357_POKEMON_TROPIUS = 357;
    V0358_POKEMON_CHIMECHO = 358;
    V0359_POKEMON_ABSOL = 359;
    V0360_POKEMON_WYNAUT = 360;
    V0361_POKEMON_SNORUNT = 361;
    V0362_POKEMON_GLALIE = 362;
    V0363_POKEMON_SPHEAL = 363;
    V0364_POKEMON_SEALEO = 364;
    V0365_POKEMON_WALREIN = 365;
    V0366_POKEMON_CLAMPERL = 366;
    V0367_POKEMON_HUNTAIL = 367;
    V0368_POKEMON_GOREBYSS = 368;
    V0369_POKEMON_RELICANTH = 369;
    V0370_POKEMON_LUVDISC = 370;
    V0371_POKEMON_BAGON = 371;
    V0372_POKEMON_SHELGON = 372;
    V0373_POKEMON_SALAMENCE = 373;
    V0374_POKEMON_BELDUM = 374;
    V0375_POKEMON_METANG = 375;
    V0376_POKEMON_METAGROSS = 376;
    V0377_POKEMON_REGIROCK = 377;
    V0378_POKEMON_REGICE = 378;
    V0379_POKEMON_REGISTEEL = 379;
    V0380_POKEMON_LATIAS = 380;
    V0381_POKEMON_LATIOS = 381;
    V0382_POKEMON_KYOGRE = 382;
    V0383_POKEMON_GROUDON = 383;
    V0384_POKEMON_RAYQUAZA = 384;
    V0385_POKEMON_JIRACHI = 385;
    V0386_POKEMON_DEOXYS = 386;
}

// ref: Holoholo.Rpc.HoloPokemonMove
enum HoloPokemonMove {
    MOVE_UNSET = 0;
    V0001_MOVE_THUNDER_SHOCK = 1;
    V0002_MOVE_QUICK_ATTACK = 2;
    V0003_MOVE_SCRATCH = 3;
    V0004_MOVE_EMBER = 4;
    V0005_MOVE_VINE_WHIP = 5;
    V0006_MOVE_TACKLE = 6;
    V0007_MOVE_RAZOR_LEAF = 7;
    V0008_MOVE_TAKE_DOWN = 8;
    V0009_MOVE_WATER_GUN = 9;
    V0010_MOVE_BITE = 10;
    V0011_MOVE_POUND = 11;
    V0012_MOVE_DOUBLE_SLAP = 12;
    V0013_MOVE_WRAP = 13;
    V0014_MOVE_HYPER_BEAM = 14;
    V0015_MOVE_LICK = 15;
    V0016_MOVE_DARK_PULSE = 16;
    V0017_MOVE_SMOG = 17;
    V0018_MOVE_SLUDGE = 18;
    V0019_MOVE_METAL_CLAW = 19;
    V0020_MOVE_VICE_GRIP = 20;
    V0021_MOVE_FLAME_WHEEL = 21;
    V0022_MOVE_MEGAHORN = 22;
    V0023_MOVE_WING_ATTACK = 23;
    V0024_MOVE_FLAMETHROWER = 24;
    V0025_MOVE_SUCKER_PUNCH = 25;
    V0026_MOVE_DIG = 26;
    V0027_MOVE_LOW_KICK = 27;
    V0028_MOVE_CROSS_CHOP = 28;
    V0029_MOVE_PSYCHO_CUT = 29;
    V0030_MOVE_PSYBEAM = 30;
    V0031_MOVE_EARTHQUAKE = 31;
    V0032_MOVE_STONE_EDGE = 32;
    V0033_MOVE_ICE_PUNCH = 33;
    V0034_MOVE_HEART_STAMP = 34;
    V0035_MOVE_DISCHARGE = 35;
    V0036_MOVE_FLASH_CANNON = 36;
    V0037_MOVE_PECK = 37;
    V0038_MOVE_DRILL_PECK = 38;
    V0039_MOVE_ICE_BEAM = 39;
    V0040_MOVE_BLIZZARD = 40;
    V0041_MOVE_AIR_SLASH = 41;
    V0042_MOVE_HEAT_WAVE = 42;
    V0043_MOVE_TWINEEDLE = 43;
    V0044_MOVE_POISON_JAB = 44;
    V0045_MOVE_AERIAL_ACE = 45;
    V0046_MOVE_DRILL_RUN = 46;
    V0047_MOVE_PETAL_BLIZZARD = 47;
    V0048_MOVE_MEGA_DRAIN = 48;
    V0049_MOVE_BUG_BUZZ = 49;
    V0050_MOVE_POISON_FANG = 50;
    V0051_MOVE_NIGHT_SLASH = 51;
    V0052_MOVE_SLASH = 52;
    V0053_MOVE_BUBBLE_BEAM = 53;
    V0054_MOVE_SUBMISSION = 54;
    V0055_MOVE_KARATE_CHOP = 55;
    V0056_MOVE_LOW_SWEEP = 56;
    V0057_MOVE_AQUA_JET = 57;
    V0058_MOVE_AQUA_TAIL = 58;
    V0059_MOVE_SEED_BOMB = 59;
    V0060_MOVE_PSYSHOCK = 60;
    V0061_MOVE_ROCK_THROW = 61;
    V0062_MOVE_ANCIENT_POWER = 62;
    V0063_MOVE_ROCK_TOMB = 63;
    V0064_MOVE_ROCK_SLIDE = 64;
    V0065_MOVE_POWER_GEM = 65;
    V0066_MOVE_SHADOW_SNEAK = 66;
    V0067_MOVE_SHADOW_PUNCH = 67;
    V0068_MOVE_SHADOW_CLAW = 68;
    V0069_MOVE_OMINOUS_WIND = 69;
    V0070_MOVE_SHADOW_BALL = 70;
    V0071_MOVE_BULLET_PUNCH = 71;
    V0072_MOVE_MAGNET_BOMB = 72;
    V0073_MOVE_STEEL_WING = 73;
    V0074_MOVE_IRON_HEAD = 74;
    V0075_MOVE_PARABOLIC_CHARGE = 75;
    V0076_MOVE_SPARK = 76;
    V0077_MOVE_THUNDER_PUNCH = 77;
    V0078_MOVE_THUNDER = 78;
    V0079_MOVE_THUNDERBOLT = 79;
    V0080_MOVE_TWISTER = 80;
    V0081_MOVE_DRAGON_BREATH = 81;
    V0082_MOVE_DRAGON_PULSE = 82;
    V0083_MOVE_DRAGON_CLAW = 83;
    V0084_MOVE_DISARMING_VOICE = 84;
    V0085_MOVE_DRAINING_KISS = 85;
    V0086_MOVE_DAZZLING_GLEAM = 86;
    V0087_MOVE_MOONBLAST = 87;
    V0088_MOVE_PLAY_ROUGH = 88;
    V0089_MOVE_CROSS_POISON = 89;
    V0090_MOVE_SLUDGE_BOMB = 90;
    V0091_MOVE_SLUDGE_WAVE = 91;
    V0092_MOVE_GUNK_SHOT = 92;
    V0093_MOVE_MUD_SHOT = 93;
    V0094_MOVE_BONE_CLUB = 94;
    V0095_MOVE_BULLDOZE = 95;
    V0096_MOVE_MUD_BOMB = 96;
    V0097_MOVE_FURY_CUTTER = 97;
    V0098_MOVE_BUG_BITE = 98;
    V0099_MOVE_SIGNAL_BEAM = 99;
    V0100_MOVE_X_SCISSOR = 100;
    V0101_MOVE_FLAME_CHARGE = 101;
    V0102_MOVE_FLAME_BURST = 102;
    V0103_MOVE_FIRE_BLAST = 103;
    V0104_MOVE_BRINE = 104;
    V0105_MOVE_WATER_PULSE = 105;
    V0106_MOVE_SCALD = 106;
    V0107_MOVE_HYDRO_PUMP = 107;
    V0108_MOVE_PSYCHIC = 108;
    V0109_MOVE_PSYSTRIKE = 109;
    V0110_MOVE_ICE_SHARD = 110;
    V0111_MOVE_ICY_WIND = 111;
    V0112_MOVE_FROST_BREATH = 112;
    V0113_MOVE_ABSORB = 113;
    V0114_MOVE_GIGA_DRAIN = 114;
    V0115_MOVE_FIRE_PUNCH = 115;
    V0116_MOVE_SOLAR_BEAM = 116;
    V0117_MOVE_LEAF_BLADE = 117;
    V0118_MOVE_POWER_WHIP = 118;
    V0119_MOVE_SPLASH = 119;
    V0120_MOVE_ACID = 120;
    V0121_MOVE_AIR_CUTTER = 121;
    V0122_MOVE_HURRICANE = 122;
    V0123_MOVE_BRICK_BREAK = 123;
    V0124_MOVE_CUT = 124;
    V0125_MOVE_SWIFT = 125;
    V0126_MOVE_HORN_ATTACK = 126;
    V0127_MOVE_STOMP = 127;
    V0128_MOVE_HEADBUTT = 128;
    V0129_MOVE_HYPER_FANG = 129;
    V0130_MOVE_SLAM = 130;
    V0131_MOVE_BODY_SLAM = 131;
    V0132_MOVE_REST = 132;
    V0133_MOVE_STRUGGLE = 133;
    V0134_MOVE_SCALD_BLASTOISE = 134;
    V0135_MOVE_HYDRO_PUMP_BLASTOISE = 135;
    V0136_MOVE_WRAP_GREEN = 136;
    V0137_MOVE_WRAP_PINK = 137;
    V0200_MOVE_FURY_CUTTER_FAST = 200;
    V0201_MOVE_BUG_BITE_FAST = 201;
    V0202_MOVE_BITE_FAST = 202;
    V0203_MOVE_SUCKER_PUNCH_FAST = 203;
    V0204_MOVE_DRAGON_BREATH_FAST = 204;
    V0205_MOVE_THUNDER_SHOCK_FAST = 205;
    V0206_MOVE_SPARK_FAST = 206;
    V0207_MOVE_LOW_KICK_FAST = 207;
    V0208_MOVE_KARATE_CHOP_FAST = 208;
    V0209_MOVE_EMBER_FAST = 209;
    V0210_MOVE_WING_ATTACK_FAST = 210;
    V0211_MOVE_PECK_FAST = 211;
    V0212_MOVE_LICK_FAST = 212;
    V0213_MOVE_SHADOW_CLAW_FAST = 213;
    V0214_MOVE_VINE_WHIP_FAST = 214;
    V0215_MOVE_RAZOR_LEAF_FAST = 215;
    V0216_MOVE_MUD_SHOT_FAST = 216;
    V0217_MOVE_ICE_SHARD_FAST = 217;
    V0218_MOVE_FROST_BREATH_FAST = 218;
    V0219_MOVE_QUICK_ATTACK_FAST = 219;
    V0220_MOVE_SCRATCH_FAST = 220;
    V0221_MOVE_TACKLE_FAST = 221;
    V0222_MOVE_POUND_FAST = 222;
    V0223_MOVE_CUT_FAST = 223;
    V0224_MOVE_POISON_JAB_FAST = 224;
    V0225_MOVE_ACID_FAST = 225;
    V0226_MOVE_PSYCHO_CUT_FAST = 226;
    V0227_MOVE_ROCK_THROW_FAST = 227;
    V0228_MOVE_METAL_CLAW_FAST = 228;
    V0229_MOVE_BULLET_PUNCH_FAST = 229;
    V0230_MOVE_WATER_GUN_FAST = 230;
    V0231_MOVE_SPLASH_FAST = 231;
    V0232_MOVE_WATER_GUN_FAST_BLASTOISE = 232;
    V0233_MOVE_MUD_SLAP_FAST = 233;
    V0234_MOVE_ZEN_HEADBUTT_FAST = 234;
    V0235_MOVE_CONFUSION_FAST = 235;
    V0236_MOVE_POISON_STING_FAST = 236;
    V0237_MOVE_BUBBLE_FAST = 237;
    V0238_MOVE_FEINT_ATTACK_FAST = 238;
    V0239_MOVE_STEEL_WING_FAST = 239;
    V0240_MOVE_FIRE_FANG_FAST = 240;
    V0241_MOVE_ROCK_SMASH_FAST = 241;
    V0242_MOVE_TRANSFORM_FAST = 242;
    V0243_MOVE_COUNTER_FAST = 243;
    V0244_MOVE_POWDER_SNOW_FAST = 244;
    V0245_MOVE_CLOSE_COMBAT = 245;
    V0246_MOVE_DYNAMIC_PUNCH = 246;
    V0247_MOVE_FOCUS_BLAST = 247;
    V0248_MOVE_AURORA_BEAM = 248;
    V0249_MOVE_CHARGE_BEAM_FAST = 249;
    V0250_MOVE_VOLT_SWITCH_FAST = 250;
    V0251_MOVE_WILD_CHARGE = 251;
    V0252_MOVE_ZAP_CANNON = 252;
    V0253_MOVE_DRAGON_TAIL_FAST = 253;
    V0254_MOVE_AVALANCHE = 254;
    V0255_MOVE_AIR_SLASH_FAST = 255;
    V0256_MOVE_BRAVE_BIRD = 256;
    V0257_MOVE_SKY_ATTACK = 257;
    V0258_MOVE_SAND_TOMB = 258;
    V0259_MOVE_ROCK_BLAST = 259;
    V0260_MOVE_INFESTATION_FAST = 260;
    V0261_MOVE_STRUGGLE_BUG_FAST = 261;
    V0262_MOVE_SILVER_WIND = 262;
    V0263_MOVE_ASTONISH_FAST = 263;
    V0264_MOVE_HEX_FAST = 264;
    V0265_MOVE_NIGHT_SHADE = 265;
    V0266_MOVE_IRON_TAIL_FAST = 266;
    V0267_MOVE_GYRO_BALL = 267;
    V0268_MOVE_HEAVY_SLAM = 268;
    V0269_MOVE_FIRE_SPIN_FAST = 269;
    V0270_MOVE_OVERHEAT = 270;
    V0271_MOVE_BULLET_SEED_FAST = 271;
    V0272_MOVE_GRASS_KNOT = 272;
    V0273_MOVE_ENERGY_BALL = 273;
    V0274_MOVE_EXTRASENSORY_FAST = 274;
    V0275_MOVE_FUTURESIGHT = 275;
    V0276_MOVE_MIRROR_COAT = 276;
    V0277_MOVE_OUTRAGE = 277;
    V0278_MOVE_SNARL_FAST = 278;
    V0279_MOVE_CRUNCH = 279;
    V0280_MOVE_FOUL_PLAY = 280;
    V0281_MOVE_HIDDEN_POWER_FAST = 281;
    V0282_MOVE_TAKE_DOWN_FAST = 282;
    V0283_MOVE_WATERFALL_FAST = 283;
    V0284_MOVE_SURF = 284;
    V0285_MOVE_DRACO_METEOR = 285;
    V0286_MOVE_DOOM_DESIRE = 286;
    V0287_MOVE_YAWN_FAST = 287;
    V0288_MOVE_PSYCHO_BOOST = 288;
    V0289_MOVE_ORIGIN_PULSE = 289;
    V0290_MOVE_PRECIPICE_BLADES = 290;
    V0291_MOVE_PRESENT_FAST = 291;
    V0292_MOVE_WEATHER_BALL_FIRE = 292;
    V0293_MOVE_WEATHER_BALL_ICE = 293;
    V0294_MOVE_WEATHER_BALL_ROCK = 294;
    V0295_MOVE_WEATHER_BALL_WATER = 295;
    V0296_MOVE_FRENZY_PLANT = 296;
    V0297_MOVE_SMACK_DOWN_FAST = 297;
    V0298_MOVE_BLAST_BURN = 298;
    V0299_MOVE_HYDRO_CANNON = 299;
    V0300_MOVE_LAST_RESORT = 300;
}

// ref: Holoholo.Rpc.HoloPokemonMovementType
enum HoloPokemonMovementType {
    POKEMON_ENC_MOVEMENT_STATIC = 0;
    POKEMON_ENC_MOVEMENT_JUMP = 1;
    POKEMON_ENC_MOVEMENT_VERTICAL = 2;
    POKEMON_ENC_MOVEMENT_PSYCHIC = 3;
    POKEMON_ENC_MOVEMENT_ELECTRIC = 4;
    POKEMON_ENC_MOVEMENT_FLYING = 5;
    POKEMON_ENC_MOVEMENT_HOVERING = 6;
}

// ref: Holoholo.Rpc.HoloPokemonType
enum HoloPokemonType {
    POKEMON_TYPE_NONE = 0;
    POKEMON_TYPE_NORMAL = 1;
    POKEMON_TYPE_FIGHTING = 2;
    POKEMON_TYPE_FLYING = 3;
    POKEMON_TYPE_POISON = 4;
    POKEMON_TYPE_GROUND = 5;
    POKEMON_TYPE_ROCK = 6;
    POKEMON_TYPE_BUG = 7;
    POKEMON_TYPE_GHOST = 8;
    POKEMON_TYPE_STEEL = 9;
    POKEMON_TYPE_FIRE = 10;
    POKEMON_TYPE_WATER = 11;
    POKEMON_TYPE_GRASS = 12;
    POKEMON_TYPE_ELECTRIC = 13;
    POKEMON_TYPE_PSYCHIC = 14;
    POKEMON_TYPE_ICE = 15;
    POKEMON_TYPE_DRAGON = 16;
    POKEMON_TYPE_DARK = 17;
    POKEMON_TYPE_FAIRY = 18;
}

// ref: Holoholo.Rpc.InventoryUpgradeType
enum InventoryUpgradeType {
    UPGRADE_UNSET = 0;
    INCREASE_ITEM_STORAGE = 1;
    INCREASE_POKEMON_STORAGE = 2;
}

// ref: Holoholo.Rpc.Item
enum Item {
    ITEM_UNKNOWN = 0;
    ITEM_POKE_BALL = 1;
    ITEM_GREAT_BALL = 2;
    ITEM_ULTRA_BALL = 3;
    ITEM_MASTER_BALL = 4;
    ITEM_PREMIER_BALL = 5;
    ITEM_POTION = 101;
    ITEM_SUPER_POTION = 102;
    ITEM_HYPER_POTION = 103;
    ITEM_MAX_POTION = 104;
    ITEM_REVIVE = 201;
    ITEM_MAX_REVIVE = 202;
    ITEM_LUCKY_EGG = 301;
    ITEM_INCENSE_ORDINARY = 401;
    ITEM_INCENSE_SPICY = 402;
    ITEM_INCENSE_COOL = 403;
    ITEM_INCENSE_FLORAL = 404;
    ITEM_TROY_DISK = 501;
    ITEM_X_ATTACK = 602;
    ITEM_X_DEFENSE = 603;
    ITEM_X_MIRACLE = 604;
    ITEM_RAZZ_BERRY = 701;
    ITEM_BLUK_BERRY = 702;
    ITEM_NANAB_BERRY = 703;
    ITEM_WEPAR_BERRY = 704;
    ITEM_PINAP_BERRY = 705;
    ITEM_GOLDEN_RAZZ_BERRY = 706;
    ITEM_GOLDEN_NANAB_BERRY = 707;
    ITEM_GOLDEN_PINAP_BERRY = 708;
    ITEM_SPECIAL_CAMERA = 801;
    ITEM_INCUBATOR_BASIC_UNLIMITED = 901;
    ITEM_INCUBATOR_BASIC = 902;
    ITEM_INCUBATOR_SUPER = 903;
    ITEM_POKEMON_STORAGE_UPGRADE = 1001;
    ITEM_ITEM_STORAGE_UPGRADE = 1002;
    ITEM_SUN_STONE = 1101;
    ITEM_KINGS_ROCK = 1102;
    ITEM_METAL_COAT = 1103;
    ITEM_DRAGON_SCALE = 1104;
    ITEM_UP_GRADE = 1105;
    ITEM_MOVE_REROLL_FAST_ATTACK = 1201;
    ITEM_MOVE_REROLL_SPECIAL_ATTACK = 1202;
    ITEM_RARE_CANDY = 1301;
    ITEM_FREE_RAID_TICKET = 1401;
    ITEM_PAID_RAID_TICKET = 1402;
    ITEM_LEGENDARY_RAID_TICKET = 1403;
    ITEM_STAR_PIECE = 1404;
    ITEM_FRIEND_GIFT_BOX = 1405;
}

// ref: Holoholo.Rpc.ItemUseTelemetryIds
enum ItemUseTelemetryIds {
    UNDEFINED_ITEM_EVENT = 0;
    USE_ITEM_a2f7 = 1;
    RECYCLE_ITEM = 2;
}

// ref: Holoholo.Rpc.LoginActionTelemetryIds
enum LoginActionTelemetryIds {
    UNDEFINED_LOGIN_ACTION = 0;
    CLICK_AGE_GATE = 1;
    CLICK_NEW_PLAYER = 2;
    CLICK_EXISTING_PLAYER = 3;
    CLICK_GOOGLE = 4;
    COMPLETE_GOOGLE = 5;
    CANCEL_GOOGLE = 6;
    CLICK_FACEBOOK = 7;
    COMPLETE_FACEBOOK = 8;
    CANCEL_FACEBOOK = 9;
    CLICK_PTC = 10;
    EXIT_PTC = 11;
    CLICK_PTC_REGISTER = 12;
    CLICK_PTC_SIGN_IN = 13;
    CANCEL_PTC_SIGN_IN = 14;
    COMPLETE_PTC_SIGN_IN = 15;
    CLICK_SUPERAWESOME = 16;
    EXIT_SUPERAWESOME = 17;
    CLICK_SUPERAWESOME_REGISTER = 18;
    CLICK_SUPERAWESOME_FORGOT_PASSWORD = 19;
    CLICK_SUPERAWESOME_SIGN_IN = 20;
    CANCEL_SUPERAWESOME_SIGN_IN = 21;
    COMPLETE_SUPERAWESOME_SIGN_IN = 22;
    EXIT_NEW_PLAYER = 23;
    EXIT_EXISTING_PLAYER = 24;
}

// ref: Holoholo.Rpc.MapEventsTelemetryIds
enum MapEventsTelemetryIds {
    UNDEFINED_MAP_EVENT = 0;
    ITEM_BAG = 1;
    MAIN_MENU = 2;
    POKEDEX = 3;
    PROFILE = 4;
    SETTINGS = 5;
    SHOP_FROM_MAP = 6;
    GYM_a809 = 7;
    POKESTOP = 8;
    RESEARCH = 9;
    COMPASS = 10;
    NEARBY = 11;
}

// ref: Holoholo.Rpc.Method
enum Method {
    METHOD_UNSET = 0;
    GET_PLAYER = 2;
    GET_HOLOHOLO_INVENTORY = 4;
    DOWNLOAD_SETTINGS = 5;
    DOWNLOAD_ITEM_TEMPLATES = 6;
    DOWNLOAD_REMOTE_CONFIG_VERSION = 7;
    REGISTER_BACKGROUND_DEVICE = 8;
    GET_PLAYER_DAY = 9;
    FORT_SEARCH = 101;
    ENCOUNTER = 102;
    CATCH_POKEMON = 103;
    FORT_DETAILS = 104;
    GET_MAP_OBJECTS = 106;
    FORT_DEPLOY_POKEMON = 110;
    FORT_RECALL_POKEMON = 111;
    RELEASE_POKEMON = 112;
    USE_ITEM_POTION = 113;
    USE_ITEM_CAPTURE = 114;
    USE_ITEM_FLEE = 115;
    USE_ITEM_REVIVE = 116;
    GET_PLAYER_PROFILE = 121;
    EVOLVE_POKEMON = 125;
    GET_HATCHED_EGGS = 126;
    ENCOUNTER_TUTORIAL_COMPLETE = 127;
    LEVEL_UP_REWARDS = 128;
    CHECK_AWARDED_BADGES = 129;
    RECYCLE_INVENTORY_ITEM = 137;
    COLLECT_DAILY_BONUS = 138;
    USE_ITEM_XP_BOOST = 139;
    USE_ITEM_EGG_INCUBATOR = 140;
    USE_INCENSE = 141;
    GET_INCENSE_POKEMON = 142;
    INCENSE_ENCOUNTER = 143;
    ADD_FORT_MODIFIER = 144;
    DISK_ENCOUNTER = 145;
    UPGRADE_POKEMON = 147;
    SET_FAVORITE_POKEMON = 148;
    NICKNAME_POKEMON = 149;
    EQUIP_BADGE = 150;
    SET_CONTACT_SETTINGS = 151;
    SET_BUDDY_POKEMON = 152;
    GET_BUDDY_WALKED = 153;
    USE_ITEM_ENCOUNTER = 154;
    GYM_DEPLOY = 155;
    GYM_GET_INFO = 156;
    GYM_START_SESSION = 157;
    GYM_BATTLE_ATTACK = 158;
    JOIN_LOBBY = 159;
    LEAVE_LOBBY = 160;
    SET_LOBBY_VISIBILITY = 161;
    SET_LOBBY_POKEMON = 162;
    GET_RAID_DETAILS = 163;
    GYM_FEED_POKEMON = 164;
    START_RAID_BATTLE = 165;
    ATTACK_RAID = 166;
    AWARD_POKECOIN = 167;
    USE_ITEM_STARDUST_BOOST = 168;
    GET_ASSET_DIGEST = 300;
    GET_DOWNLOAD_URLS = 301;
    CLAIM_CODENAME = 403;
    SET_AVATAR = 404;
    SET_PLAYER_TEAM = 405;
    MARK_TUTORIAL_COMPLETE = 406;
    UPDATE_PERFORMANCE_METRICS = 407;
    CHECK_CHALLENGE = 600;
    VERIFY_CHALLENGE = 601;
    ECHO = 666;
    SFIDA_REGISTRATION = 800;
    SFIDA_ACTION_LOG = 801;
    SFIDA_CERTIFICATION = 802;
    SFIDA_UPDATE = 803;
    SFIDA_ACTION = 804;
    SFIDA_DOWSER = 805;
    SFIDA_CAPTURE = 806;
    LIST_AVATAR_CUSTOMIZATIONS = 807;
    SET_AVATAR_ITEM_AS_VIEWED = 808;
    GET_INBOX = 809;
    LIST_GYM_BADGES = 811;
    GET_GYM_BADGE_DETAILS = 812;
    USE_ITEM_MOVE_REROLL = 813;
    USE_ITEM_RARE_CANDY = 814;
    AWARD_FREE_RAID_TICKET = 815;
    FETCH_ALL_NEWS = 816;
    MARK_READ_NEWS_ARTICLE = 817;
    GET_PLAYER_DISPLAY_INFO = 818;
    GET_NEW_QUESTS = 900;
    GET_QUEST_DETAILS = 901;
    COMPLETE_QUEST = 902;
    REMOVE_QUEST = 903;
    QUEST_ENCOUNTER = 904;
    COMPLETE_QUEST_STAMP_CARD = 905;
    SEND_GIFT = 950;
    OPEN_GIFT = 951;
    GIFT_DETAILS = 952;
    DELETE_GIFT = 953;
    SAVE_PLAYER_SNAPSHOT = 954;
    GET_FRIENDSHIP_MILESTONE_REWARDS = 955;
    CHECK_SEND_GIFT = 956;
    SET_FRIEND_NICKNAME = 957;
    DELETE_GIFT_FROM_INVENTORY = 958;
    SAVE_SOCIAL_PLAYER_SETTINGS = 959;
    SHARE_EX_RAID_PASS = 960;
    ACCEPT_SHARED_EX_RAID_PASS = 961;
    DECLINE_SHARED_EX_RAID_PASS = 962;
    OPEN_TRADING = 970;
    UPDATE_TRADING = 971;
    CONFIRM_TRADING = 972;
    CANCEL_TRADING = 973;
    GET_TRADING = 974;
}

// ref: Holoholo.Rpc.NewsPageTelemetryIds
enum NewsPageTelemetryIds {
    UNDEFINED_NEWS_EVENT = 0;
    NEWS_VIEWED = 1;
    NEWS_DISMISSED = 2;
    NEWS_LINK_CLICKED = 3;
    NEWS_UPDATED_APP = 4;
}

// ref: Holoholo.Rpc.Platform
enum Platform {
    PLATFORM_UNSET = 0;
    PLATFORM_IOS = 1;
    PLATFORM_ANDROID = 2;
    PLATFORM_OSX = 3;
    PLATFORM_WINDOWS = 4;
    PLATFORM_APPLE_WATCH = 5;
}

// ref: Holoholo.Rpc.PlayerAvatarType
enum PlayerAvatarType {
    PLAYER_AVATAR_MALE = 0;
    PLAYER_AVATAR_FEMALE = 1;
}

// ref: Holoholo.Rpc.PokemonCreateContext
enum PokemonCreateContext {
    CREATE_CONTEXT_WILD = 0;
    CREATE_CONTEXT_EGG = 1;
    CREATE_CONTEXT_EVOLVE = 2;
}

// ref: Holoholo.Rpc.PokemonGoPlusIds
enum PokemonGoPlusIds {
    UNDEFINED_POKEMON_GO_PLUS_EVENT = 0;
    CANNOT_CONNECT_TO_PGP = 1;
    REGISTERING_PGP_FAILED = 2;
    REGISTERING_RETRY = 3;
    CONNECTION_SUCCESS = 4;
    PGP_DISCONNECTED_BY_USER = 5;
    PGP_DISCONNECTED_BY_TIMEOUT = 6;
    PGP_DISCONNECTED_BY_ERROR = 7;
    PGP_LOW_BATTERY = 8;
    BLUETOOTH_SENT_ERROR = 9;
    PGP_SEEN_BY_DEVICE = 10;
    POKEMON_CAUGHT = 11;
    POKEMON_NOT_CAUGHT = 12;
    POKEMON_NOT_CAUGHT_DUE_ERROR = 13;
    POKESTOP_SPUN = 14;
    POKESTOP_NOT_SPUN_DUE_ERROR = 15;
}

// ref: Holoholo.Rpc.PokemonInventoryTelemetryIds
enum PokemonInventoryTelemetryIds {
    UNDEFINED_POKEMON_INVENTORY_EVENT = 0;
    OPEN = 1;
    SORTING_CHANGE = 2;
    FILTER = 3;
}

// ref: Holoholo.Rpc.ProfilePageTelemetryIds
enum ProfilePageTelemetryIds {
    UNDEFINED_PROFILE_PAGE = 0;
    SHOP_FROM_PROFILE = 1;
    LOG = 2;
    SET_BUDDY = 3;
    CUSTOMIZE_AVATAR = 4;
}

// ref: Holoholo.Rpc.PushNotificationTelemetryIds
enum PushNotificationTelemetryIds {
    UNDEFINED_PUSH_NOTIFICATION_EVENT = 0;
    OPEN_APP = 1;
}

// ref: Holoholo.Rpc.QuestType
enum QuestType {
    QUEST_UNSET = 0;
    QUEST_FIRST_CATCH_OF_THE_DAY = 1;
    QUEST_FIRST_POKESTOP_OF_THE_DAY = 2;
    QUEST_MULTI_PART = 3;
    QUEST_CATCH_POKEMON = 4;
    QUEST_SPIN_POKESTOP = 5;
    QUEST_HATCH_EGG = 6;
    QUEST_COMPLETE_GYM_BATTLE = 7;
    QUEST_COMPLETE_RAID_BATTLE = 8;
    QUEST_COMPLETE_QUEST = 9;
    QUEST_TRANSFER_POKEMON = 10;
    QUEST_FAVORITE_POKEMON = 11;
    QUEST_AUTOCOMPLETE = 12;
    QUEST_USE_BERRY_IN_ENCOUNTER = 13;
    QUEST_UPGRADE_POKEMON = 14;
    QUEST_EVOLVE_POKEMON = 15;
    QUEST_LAND_THROW = 16;
    QUEST_GET_BUDDY_CANDY = 17;
    QUEST_BADGE_RANK = 18;
    QUEST_PLAYER_LEVEL = 19;
    QUEST_JOIN_RAID = 20;
    QUEST_COMPLETE_BATTLE = 21;
    QUEST_ADD_FRIEND = 22;
    QUEST_TRADE_POKEMON = 23;
    QUEST_SEND_GIFT = 24;
    QUEST_EVOLVE_INTO_POKEMON = 25;
}

// ref: Holoholo.Rpc.RaidLevel
enum RaidLevel {
    RAID_LEVEL_UNSET = 0;
    RAID_LEVEL_1 = 1;
    RAID_LEVEL_2 = 2;
    RAID_LEVEL_3 = 3;
    RAID_LEVEL_4 = 4;
    RAID_LEVEL_5 = 5;
}

// ref: Holoholo.Rpc.RaidTelemetryIds
enum RaidTelemetryIds {
    UNDEFINED_RAID_EVENT = 0;
    APPROACH_ENTER = 1;
    APPROACH_CLICK_SPINNER = 2;
    APPROACH_JOIN = 3;
    APPROACH_TICKET_CONFIRMATION = 4;
    APPROACH_CLICK_TUTORIAL = 5;
    APPROACH_CLICK_SHOP = 6;
    APPROACH_CLICK_INSPECT = 7;
    LOBBY_ENTER = 8;
    LOBBY_CLICK_INVENTORY = 9;
    LOBBY_CLICK_EXIT = 10;
    LOBBY_TAP_AVATAR = 11;
    LOBBY_CLICK_REJOIN_BATTLE = 12;
    LOBBY_CLICK_LOBBY_PUBLIC = 13;
}

// ref: Holoholo.Rpc.ShoppingPageTelemetryIds
enum ShoppingPageTelemetryIds {
    UNDEFINED_SHOPPING_PAGE_EVENT = 0;
    CLICK_CUSTOMIZE_AVATAR = 1;
    QUICK_SHOP_MORE = 2;
    QUICK_SHOP_EXCHANGE = 3;
}

// ref: Holoholo.Rpc.SocialTelemetryIds
enum SocialTelemetryIds {
    UNDEFINED_SOCIAL = 0;
    FRIEND_TAB = 1;
    NOTIFICATION_TAB = 2;
    FRIEND_PROFILE = 3;
    OPEN_FRIEND_SHIP_LEVEL_DETAIL = 4;
    CLOSE_OPEN_GIFT_CONFIRMATION = 5;
    FRIEND_LIST_SORT_CHANGED = 6;
    FRIEND_LIST_CLOSED = 7;
}

// ref: Holoholo.Rpc.Team
enum Team {
    UNSET = 0;
    TEAM_BLUE = 1;
    TEAM_RED = 2;
    TEAM_YELLOW = 3;
}

// ref: Holoholo.Rpc.TutorialCompletion
enum TutorialCompletion {
    LEGAL_SCREEN = 0;
    AVATAR_SELECTION = 1;
    ACCOUNT_CREATION = 2;
    POKEMON_CAPTURE = 3;
    NAME_SELECTION = 4;
    POKEMON_BERRY = 5;
    USE_ITEM_aa4c = 6;
    FIRST_TIME_EXPERIENCE_COMPLETE = 7;
    POKESTOP_TUTORIAL = 8;
    GYM_TUTORIAL = 9;
    CHALLENGE_QUEST_TUTORIAL = 10;
    PRIVACY_POLICY_CONFIRMATION = 11;
    TRADING_TUTORIAL = 12;
    POI_SUBMISSION_TUTORIAL = 13;
}

// ref: Holoholo.Rpc.WebTelemetryIds
enum WebTelemetryIds {
    UNDEFINED_WEB_EVENT = 0;
    POINT_OF_INTEREST_DESCRIPTION_WEB_CLICK = 1;
}

// ref: Holoholo.Rpc.ActionLogEntry
message ActionLogEntry {
    // ref: Holoholo.Rpc.ActionLogEntry/ActionOneofCase
    enum ActionOneofCase {
        none = 0;
        catch_pokemon = 3;
        fort_search = 4;
        buddy_pokemon = 5;
        raid_rewards = 6;
        passcode_rewards = 7;
        complete_quest = 8;
        complete_quest_stamp_card = 9;
        complete_quest_pokemon_encounter = 10;
        open_gift = 12;
        send_gift = 13;
        trading = 14;
    }

    int64 timestamp_ms = 1;
    bool sfida = 2;
    CatchPokemonLogEntry catch_pokemon = 3;
    FortSearchLogEntry fort_search = 4;
    BuddyPokemonLogEntry buddy_pokemon = 5;
    RaidRewardsLogEntry raid_rewards = 6;
    PasscodeRewardsLogEntry passcode_rewards = 7;
    CompleteQuestLogEntry complete_quest = 8;
    CompleteQuestStampCardLogEntry complete_quest_stamp_card = 9;
    CompleteQuestPokemonEncounterLogEntry complete_quest_pokemon_encounter = 10;
    OpenGiftLogEntry open_gift = 12;
    SendGiftLogEntry send_gift = 13;
    TradingLogEntry trading = 14;
}

// ref: Holoholo.Rpc.AddFortModifierOutProto
message AddFortModifierOutProto {
    // ref: Holoholo.Rpc.AddFortModifierOutProto/Types/Result
    enum Result {
        NO_RESULT_SET = 0;
        SUCCESS = 1;
        FORT_ALREADY_HAS_MODIFIER = 2;
        TOO_FAR_AWAY = 3;
        NO_ITEM_IN_INVENTORY = 4;
        POI_INACCESSIBLE = 5;
    }

    Result result = 1;
    FortDetailsOutProto fort_details_out_proto = 2;
}

// ref: Holoholo.Rpc.AddFortModifierProto
message AddFortModifierProto {
    Item modifier_type = 1;
    string fort_id = 2;
    double player_lat_degrees = 3;
    double player_lng_degrees = 4;
}

// ref: Holoholo.Rpc.AddFriendQuestProto
message AddFriendQuestProto {
    repeated string added_friend_ids = 1 [packed=false];
}

// ref: Holoholo.Rpc.AppliedItemProto
message AppliedItemProto {
    Item item = 1;
    HoloItemType item_type = 2;
    int64 expiration_ms = 3;
    int64 applied_ms = 4;
}

// ref: Holoholo.Rpc.AppliedItemsProto
message AppliedItemsProto {
    repeated AppliedItemProto item = 4 [packed=false];
}

// ref: Holoholo.Rpc.ARPlusEncounterValuesProto
message ARPlusEncounterValuesProto {
    float proximity = 1;
    float awareness = 2;
    bool pokemon_frightened = 3;
}

// ref: Holoholo.Rpc.AssetDigestEntryProto
message AssetDigestEntryProto {
    string asset_id = 1;
    string bundle_name = 2;
    int64 version = 3;
    uint32 checksum = 4;
    int32 size = 5;
    bytes key = 6;
}

// ref: Holoholo.Rpc.AssetDigestOutProto
message AssetDigestOutProto {
    // ref: Holoholo.Rpc.AssetDigestOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        PAGE = 2;
        RETRY = 3;
    }

    repeated AssetDigestEntryProto digest = 1 [packed=false];
    uint64 timestamp = 2;
    Result result = 3;
    int32 page_offset = 4;
}

// ref: Holoholo.Rpc.AssetDigestRequestProto
message AssetDigestRequestProto {
    Platform platform = 1;
    string device_manufacturer = 2;
    string device_model = 3;
    string locale = 4;
    uint32 app_version = 5;
    bool paginate = 6;
    int32 page_offset = 7;
    uint64 page_timestamp = 8;
}

// ref: Holoholo.Rpc.AttackGymOutProto
message AttackGymOutProto {
    // ref: Holoholo.Rpc.AttackGymOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_INVALID_ATTACK_ACTIONS = 2;
        ERROR_NOT_IN_RANGE = 3;
    }

    Result result = 1;
    BattleLogProto battle_log = 2;
    string battle_id = 3;
    PokemonInfo active_defender = 4;
    PokemonInfo active_attacker = 5;
    BattleUpdateProto battle_update = 6;
}

// ref: Holoholo.Rpc.AttackGymProto
message AttackGymProto {
    string gym_id = 1;
    string battle_id = 2;
    repeated BattleActionProto attacker_actions = 3 [packed=false];
    BattleActionProto last_retrieved_action = 4;
    double player_lat_degrees = 5;
    double player_lng_degrees = 6;
}

// ref: Holoholo.Rpc.AttackRaidBattleOutProto
message AttackRaidBattleOutProto {
    // ref: Holoholo.Rpc.AttackRaidBattleOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_GYM_NOT_FOUND = 2;
        ERROR_BATTLE_NOT_FOUND = 3;
        ERROR_INVALID_ATTACK_ACTIONS = 4;
        ERROR_NOT_PART_OF_BATTLE = 5;
        ERROR_BATTLE_ID_NOT_RAID = 6;
    }

    Result result = 1;
    BattleUpdateProto battle_update = 2;
}

// ref: Holoholo.Rpc.AttackRaidBattleProto
message AttackRaidBattleProto {
    string gym_id = 1;
    string battle_id = 2;
    repeated BattleActionProto attacker_actions = 3 [packed=false];
    BattleActionProto last_retrieved_action = 4;
    int64 timestamp_ms = 5;
}

// ref: Holoholo.Rpc.AvatarCustomizationProto
message AvatarCustomizationProto {
    // ref: Holoholo.Rpc.AvatarCustomizationProto/Types/AvatarCustomizationPromoType
    enum AvatarCustomizationPromoType {
        UNSET_PROMO_TYPE = 0;
        SALE = 1;
        FEATURED = 2;
    }

    // ref: Holoholo.Rpc.AvatarCustomizationProto/Types/AvatarCustomizationUnlockType
    enum AvatarCustomizationUnlockType {
        UNSET_UNLOCK_TYPE = 0;
        DEFAULT = 1;
        MEDAL_REWARD = 2;
        IAP_CLOTHING = 3;
        LEVEL_REWARD = 4;
    }

    // ref: Holoholo.Rpc.AvatarCustomizationProto/Types/Slot
    enum Slot {
        UNSET_SLOT = 0;
        HAIR = 1;
        SHIRT = 2;
        PANTS = 3;
        HAT = 4;
        SHOES = 5;
        EYES = 6;
        BACKPACK = 7;
        GLOVES = 8;
        SOCKS = 9;
        BELT = 10;
        GLASSES = 11;
        NECKLACE = 12;
    }

    bool enabled = 1;
    PlayerAvatarType avatar_type = 2;
    repeated Slot slot = 3 [packed=false];
    string bundle_name = 4;
    string asset_name = 5;
    string group_name = 6;
    int32 sort_order = 7;
    AvatarCustomizationUnlockType unlock_type = 8;
    repeated AvatarCustomizationPromoType promo_type = 9 [packed=false];
    HoloBadgeType unlock_badge_type = 10;
    string iap_sku = 11;
    int32 unlock_badge_level = 12;
    string icon_name = 13;
    int32 unlock_player_level = 14;
}

// ref: Holoholo.Rpc.AvatarCustomizationTelemetry
message AvatarCustomizationTelemetry {
    AvatarCustomizationTelemetryIds avatar_customization_click_id = 1;
    string asset_name = 2;
    string sku = 3;
    bool has_enough_coins = 4;
    string group_name = 5;
    string color_choice_id = 6;
}

// ref: Holoholo.Rpc.AvatarItemProto
message AvatarItemProto {
    string avatar_template_id = 1;
    int64 new_timestamp_ms = 2;
    bool viewed = 3;
}

// ref: Holoholo.Rpc.AwardedGymBadge
message AwardedGymBadge {
    string fort_id = 1;
    GymBadgeType gym_badge_type = 2;
    uint32 score = 3;
    GymBadgeStats gym_badge_stats = 4;
    uint64 last_update_timestamp_ms = 5;
    string name = 6;
    string image_url = 7;
    string description = 8;
    double latitude = 9;
    double longitude = 10;
    uint64 last_check_timestamp_ms = 11;
    uint32 earned_points = 12;
    float progress = 13;
    bool level_up = 14;
    PlayerRaidInfoProto raids = 15;
}

// ref: Holoholo.Rpc.AwardFreeRaidTicketOutProto
message AwardFreeRaidTicketOutProto {
    // ref: Holoholo.Rpc.AwardFreeRaidTicketOutProto/Types/Result
    enum Result {
        NO_RESULT_SET = 0;
        SUCCESS = 1;
        ERROR_PLAYER_DOES_NOT_MEET_MIN_LEVEL = 2;
        ERROR_DAILY_TICKET_ALREADY_AWARDED = 3;
        ERROR_PLAYER_OUT_OF_RANGE = 4;
    }

    Result result = 1;
}

// ref: Holoholo.Rpc.AwardFreeRaidTicketProto
message AwardFreeRaidTicketProto {
    string gym_id = 1;
    double player_lat_degrees = 2;
    double player_lng_degrees = 3;
}

// ref: Holoholo.Rpc.AwardItemProto
message AwardItemProto {
    Item item = 1;
    int32 item_count = 2;
    int32 bonus_count = 3;
}

// ref: Holoholo.Rpc.BackgroundToken
message BackgroundToken {
    bytes token = 1;
    int64 expiration_time = 2;
    bytes iv = 3;
}

// ref: Holoholo.Rpc.BadgeCaptureReward
message BadgeCaptureReward {
    float capture_reward_multiplier = 1;
    repeated string avatar_template_ids = 2 [packed=false];
}

// ref: Holoholo.Rpc.BadgeSettingsProto
message BadgeSettingsProto {
    HoloBadgeType badge_type = 1;
    int32 badge_ranks = 2;
    repeated int32 targets = 3 [packed=false];
    repeated BadgeCaptureReward capture_reward = 4 [packed=false];
    bool event_badge = 5;
    EventBadgeSettingsProto event_badge_settings = 6;
}

// ref: Holoholo.Rpc.BattleActionProto
message BattleActionProto {
    // ref: Holoholo.Rpc.BattleActionProto/Types/ActionType
    enum ActionType {
        UNSET = 0;
        ATTACK = 1;
        DODGE = 2;
        SPECIAL_ATTACK = 3;
        SWAP_POKEMON = 4;
        FAINT = 5;
        PLAYER_JOIN = 6;
        PLAYER_QUIT = 7;
        VICTORY = 8;
        DEFEAT = 9;
        TIMED_OUT = 10;
    }

    ActionType type = 1;
    int64 action_start_ms = 2;
    int32 duration_ms = 3;
    int32 energy_delta = 5;
    int32 attacker_index = 6;
    int32 target_index = 7;
    uint64 active_pokemon_id = 8;
    BattleParticipantProto joined_player = 9;
    BattleResultsProto battle_results = 10;
    int64 damage_window_start_ms = 11;
    int64 damage_window_end_ms = 12;
    BattleParticipantProto quit_player = 13;
    uint64 target_pokemon_id = 14;
    LeveledUpFriendsProto leveled_up_friends = 15;
}

// ref: Holoholo.Rpc.BattleAttributesProto
message BattleAttributesProto {
    float sta_percent = 1;
    float atk_percent = 2;
    float def_percent = 3;
    float duration_s = 4;
}

// ref: Holoholo.Rpc.BattleLogProto
message BattleLogProto {
    // ref: Holoholo.Rpc.BattleLogProto/Types/BattleType
    enum BattleType {
        BATTLE_TYPE_UNSET = 0;
        NORMAL = 1;
        TRAINING = 2;
        RAID = 3;
    }

    // ref: Holoholo.Rpc.BattleLogProto/Types/State
    enum State {
        STATE_UNSET = 0;
        ACTIVE = 1;
        VICTORY = 2;
        DEFEATED = 3;
        TIMED_OUT = 4;
    }

    State state = 1;
    BattleType battle_type = 2;
    int64 server_ms = 3;
    repeated BattleActionProto battle_actions = 4 [packed=false];
    int64 battle_start_ms = 5;
    int64 battle_end_ms = 6;
}

// ref: Holoholo.Rpc.BattleParticipantProto
message BattleParticipantProto {
    PokemonInfo active_pokemon = 1;
    PlayerPublicProfileProto trainer_public_profile = 2;
    repeated PokemonInfo reserve_pokemon = 3 [packed=false];
    repeated PokemonInfo defeated_pokemon = 4 [packed=false];
    repeated LobbyPokemonProto lobby_pokemon = 5 [packed=false];
    int32 damage_dealt = 6;
    bool super_effective_charge_move = 7;
    bool weather_boosted = 8;
    FriendshipLevelMilestone highest_friendship_milestone = 9;
    repeated string friend_codename = 10 [packed=false];
}

// ref: Holoholo.Rpc.BattlePartyTelemetry
message BattlePartyTelemetry {
    BattlePartyTelemetryIds battle_party_click_id = 1;
    int32 battle_party_count = 2;
    int32 battle_party_number = 3;
}

// ref: Holoholo.Rpc.BattleProto
message BattleProto {
    int64 battle_start_ms = 1;
    int64 battle_end_ms = 2;
    string battle_id = 3;
    BattleParticipantProto defender = 4;
    BattleLogProto battle_log = 5;
    BattleParticipantProto attacker = 6;
    GameplayWeatherProto.WeatherCondition weather_condition = 7;
    FriendshipLevelMilestone highest_friendship_milestone = 8;
}

// ref: Holoholo.Rpc.BattleResultsProto
message BattleResultsProto {
    GymStateProto gym_state = 1;
    repeated BattleParticipantProto attackers = 2 [packed=false];
    repeated int32 player_xp_awarded = 3 [packed=false];
    int64 next_defender_pokemon_id = 4;
    int32 gym_points_delta = 5;
    GymStatusAndDefendersProto gym_status = 6;
    repeated ParticipationProto participation = 7 [packed=false];
    repeated LootProto raid_item_rewards = 8 [packed=false];
    repeated RaidEncounterProto post_raid_encounter = 9 [packed=false];
    repeated AwardedGymBadge gym_badge = 10 [packed=false];
    repeated LootProto default_raid_item_rewards = 11 [packed=false];
}

// ref: Holoholo.Rpc.BattleUpdateProto
message BattleUpdateProto {
    BattleLogProto battle_log = 1;
    string battle_id = 2;
    PokemonInfo active_defender = 3;
    PokemonInfo active_attacker = 4;
    FriendshipLevelMilestone highest_friendship_milestone = 5;
}

// ref: Holoholo.Rpc.BootTime
message BootTime {
    // ref: Holoholo.Rpc.BootTime/Types/BootPhase
    enum BootPhase {
        UNDEFINED = 0;
        TIME_TO_MAP = 1;
        LOGO_SCREEN_TIME = 2;
        MAIN_SCENE_LOAD_TIME = 3;
        WAIT_FOR_AUTH = 4;
        INIT_REMOTE_CONFIG_VERSIONS = 5;
        INIT_BUNDLE_DIGEST = 6;
        INIT_GMT = 7;
        DOWNLOAD_I18N = 8;
        DOWNLOAD_GLOBAL_ASSETS = 9;
        REGISTER_PUSH_NOTIFICATION = 10;
        INITIALIZE_UPSIGHT = 11;
        INITIALIZE_CRITTERCISM = 12;
    }

    PlatformMetricData duration = 1;
    BootPhase boot_phase = 2;
}

// ref: Holoholo.Rpc.BuddyPokemonLogEntry
message BuddyPokemonLogEntry {
    // ref: Holoholo.Rpc.BuddyPokemonLogEntry/Types/Result
    enum Result {
        UNSET = 0;
        CANDY_FOUND = 1;
    }

    Result result = 1;
    HoloPokemonId pokemon_type = 2;
    int32 amount = 3;
    PokemonDisplayProto pokemon_display = 4;
    uint64 pokemon_id = 5;
}

// ref: Holoholo.Rpc.BuddyPokemonProto
message BuddyPokemonProto {
    uint64 buddy_pokemon_id = 1;
    double start_km_walked = 2;
    double last_km_awarded = 3;
}

// ref: Holoholo.Rpc.CameraSettingsProto
message CameraSettingsProto {
    string next_camera = 1;
    repeated CameraInterpolation interpolation = 2 [packed=false];
    repeated CameraTarget target_type = 3 [packed=false];
    repeated float ease_in_speed = 4 [packed=false];
    repeated float ease_out_speed = 5 [packed=false];
    repeated float duration_s = 6 [packed=false];
    repeated float wait_s = 7 [packed=false];
    repeated float transition_s = 8 [packed=false];
    repeated float angle_deg = 9 [packed=false];
    repeated float angle_offset_deg = 10 [packed=false];
    repeated float pitch_deg = 11 [packed=false];
    repeated float pitch_offset_deg = 12 [packed=false];
    repeated float roll_deg = 13 [packed=false];
    repeated float distance_m = 14 [packed=false];
    repeated float height_percent = 15 [packed=false];
    repeated float vert_ctr_ratio = 16 [packed=false];
}

// ref: Holoholo.Rpc.CancelTradingOutProto
message CancelTradingOutProto {
    // ref: Holoholo.Rpc.CancelTradingOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_UNKNOWN = 2;
        ERROR_FRIEND_NOT_FOUND = 3;
        ERROR_INVALID_PLAYER_ID = 4;
        ERROR_INVALID_STATE = 5;
        ERROR_STATE_HANDLER = 6;
    }

    Result result = 1;
    TradingProto trading = 2;
}

// ref: Holoholo.Rpc.CancelTradingProto
message CancelTradingProto {
    string player_id = 1;
}

// ref: Holoholo.Rpc.CaptureProbabilityProto
message CaptureProbabilityProto {
    repeated Item pokeball_type = 1 [packed=false];
    repeated float capture_probability = 2 [packed=false];
    double reticle_difficulty_scale = 12;
}

// ref: Holoholo.Rpc.CaptureScoreProto
message CaptureScoreProto {
    repeated HoloActivityType activity_type = 1 [packed=false];
    repeated int32 exp = 2 [packed=false];
    repeated int32 candy = 3 [packed=false];
    repeated int32 stardust = 4 [packed=false];
}

// ref: Holoholo.Rpc.CatchPokemonLogEntry
message CatchPokemonLogEntry {
    // ref: Holoholo.Rpc.CatchPokemonLogEntry/Types/Result
    enum Result {
        UNSET = 0;
        POKEMON_CAPTURED = 1;
        POKEMON_FLED = 2;
        POKEMON_HATCHED = 3;
    }

    Result result = 1;
    int32 pokedex_number = 2;
    int32 combat_points = 3;
    uint64 pokemon_id = 4;
    PokemonDisplayProto pokemon_display = 5;
}

// ref: Holoholo.Rpc.CatchPokemonOutProto
message CatchPokemonOutProto {
    // ref: Holoholo.Rpc.CatchPokemonOutProto/Types/CaptureReason
    enum CaptureReason {
        UNSET = 0;
        DEFAULT = 1;
        ELEMENTAL_BADGE = 2;
        CRITICAL_CATCH = 3;
    }

    // ref: Holoholo.Rpc.CatchPokemonOutProto/Types/Status
    enum Status {
        CATCH_ERROR = 0;
        CATCH_SUCCESS = 1;
        CATCH_ESCAPE = 2;
        CATCH_FLEE = 3;
        CATCH_MISSED = 4;
    }

    Status status = 1;
    double miss_percent = 2;
    uint64 captured_pokemon_id = 3;
    CaptureScoreProto scores = 4;
    CaptureReason capture_reason = 5;
    int32 display_pokedex_id = 6;
    int32 throws_remaining = 7;
    PokemonDisplayProto pokemon_display = 8;
}

// ref: Holoholo.Rpc.CatchPokemonProto
message CatchPokemonProto {
    uint64 encounter_id = 1;
    int32 pokeball = 2;
    double normalized_reticle_size = 3;
    string spawn_point_guid = 4;
    bool hit_pokemon = 5;
    double spin_modifier = 6;
    double normalized_hit_position = 7;
    ARPlusEncounterValuesProto ar_plus_values = 8;
}

// ref: Holoholo.Rpc.CatchPokemonQuestProto
message CatchPokemonQuestProto {
}

// ref: Holoholo.Rpc.CatchPokemonTelemetry
message CatchPokemonTelemetry {
    string status = 1;
    EncounterPokemonTelemetry encounter_pokemon_telemetry = 2;
    int32 balltype = 3;
    int32 hit_grade = 4;
    bool curve_ball = 5;
    double miss_percent = 6;
}

// ref: Holoholo.Rpc.ChangeArTelemetry
message ChangeArTelemetry {
    bool ar_enabled = 1;
    bool ar_plus_enabled = 2;
}

// ref: Holoholo.Rpc.CheckAwardedBadgesOutProto
message CheckAwardedBadgesOutProto {
    bool success = 1;
    repeated HoloBadgeType awarded_badges = 2 [packed=false];
    repeated int32 awarded_badge_levels = 3 [packed=false];
    repeated string avatar_template_ids = 4 [packed=false];
}

// ref: Holoholo.Rpc.CheckAwardedBadgesProto
message CheckAwardedBadgesProto {
}

// ref: Holoholo.Rpc.CheckChallengeOutProto
message CheckChallengeOutProto {
    bool show_challenge = 1;
    string challenge_url = 2;
}

// ref: Holoholo.Rpc.CheckChallengeProto
message CheckChallengeProto {
    bool debug_request = 1;
}

// ref: Holoholo.Rpc.CheckEncounterTrayInfoTelemetry
message CheckEncounterTrayInfoTelemetry {
    bool berry_tray_info = 1;
    bool ball_tray_info = 2;
}

// ref: Holoholo.Rpc.CheckSendGiftOutProto
message CheckSendGiftOutProto {
    // ref: Holoholo.Rpc.CheckSendGiftOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_UNKNOWN = 2;
        ERROR_PLAYER_DOES_NOT_EXIST = 3;
        ERROR_GIFT_NOT_AVAILABLE = 4;
        ERROR_GIFT_ALREADY_SENT_TODAY = 5;
        ERROR_PLAYER_HAS_UNOPENED_GIFT = 6;
    }

    Result result = 1;
}

// ref: Holoholo.Rpc.CheckSendGiftProto
message CheckSendGiftProto {
    string player_id = 1;
}

// ref: Holoholo.Rpc.ClaimCodenameRequestProto
message ClaimCodenameRequestProto {
    string codename = 1;
    bool force = 2;
    bool generate_suggested_codenames = 3;
}

// ref: Holoholo.Rpc.ClientFortModifierProto
message ClientFortModifierProto {
    Item modifier_type = 1;
    int64 expiration_time_ms = 2;
    string deploying_player_codename = 3;
}

// ref: Holoholo.Rpc.ClientGenderProto
message ClientGenderProto {
    float male_percent = 1;
    float female_percent = 2;
    float genderless_percent = 3;
}

// ref: Holoholo.Rpc.ClientGenderSettingsProto
message ClientGenderSettingsProto {
    HoloPokemonId pokemon = 1;
    ClientGenderProto gender = 2;
}

// ref: Holoholo.Rpc.ClientMapCellProto
message ClientMapCellProto {
    uint64 s2_cell_id = 1;
    int64 as_of_time_ms = 2;
    repeated PokemonFortProto fort = 3 [packed=false];
    repeated ClientSpawnPointProto spawn_point = 4 [packed=false];
    repeated WildPokemonProto wild_pokemon = 5 [packed=false];
    repeated string deleted_object = 6 [packed=false];
    bool is_truncated_list = 7;
    repeated PokemonSummaryFortProto fort_summary = 8 [packed=false];
    repeated ClientSpawnPointProto decimated_spawn_point = 9 [packed=false];
    repeated MapPokemonProto catchable_pokemon = 10 [packed=false];
    repeated NearbyPokemonProto nearby_pokemon = 11 [packed=false];
}

// ref: Holoholo.Rpc.ClientPerformanceSettingsProto
message ClientPerformanceSettingsProto {
    bool enable_local_disk_caching = 1;
    int32 max_number_local_battle_parties = 2;
}

// ref: Holoholo.Rpc.ClientPlayerProto
message ClientPlayerProto {
    int64 creation_time_ms = 1;
    string name = 2;
    int32 team = 5;
    repeated TutorialCompletion tutorial_complete = 7 [packed=false];
    PlayerAvatarProto player_avatar_proto = 8;
    int32 max_pokemon_storage = 9;
    int32 max_item_storage = 10;
    DailyBonusProto daily_bonus_proto = 11;
    EquippedBadgeProto equipped_badge_proto = 12;
    ContactSettingsProto contact_settings_proto = 13;
    repeated CurrencyQuantityProto currency_balance = 14 [packed=false];
    int32 remaining_codename_claims = 15;
    BuddyPokemonProto buddy_pokemon_proto = 16;
    int64 battle_lockout_end_ms = 17;
    PlayerAvatarProto secondary_player_avatar_proto = 18;
    bool name_is_blacklisted = 19;
    SocialPlayerSettingsProto social_player_settings = 20;
}

// ref: Holoholo.Rpc.ClientQuestProto
message ClientQuestProto {
    QuestProto quest = 1;
    QuestDisplayProto quest_display = 2;
}

// ref: Holoholo.Rpc.ClientSpawnPointProto
message ClientSpawnPointProto {
    double latitude = 2;
    double longitude = 3;
}

// ref: Holoholo.Rpc.ClientVersionProto
message ClientVersionProto {
    string min_version = 1;
}

// ref: Holoholo.Rpc.CodenameResultProto
message CodenameResultProto {
    // ref: Holoholo.Rpc.CodenameResultProto/Types/Status
    enum Status {
        UNSET = 0;
        SUCCESS = 1;
        CODENAME_NOT_AVAILABLE = 2;
        CODENAME_NOT_VALID = 3;
        CURRENT_OWNER = 4;
        CODENAME_CHANGE_NOT_ALLOWED = 5;
    }

    string codename = 1;
    string user_message = 2;
    bool is_assignable = 3;
    Status status = 4;
    ClientPlayerProto updated_player = 5;
    repeated string suggested_codenames = 6 [packed=false];
}

// ref: Holoholo.Rpc.CollectDailyBonusOutProto
message CollectDailyBonusOutProto {
    // ref: Holoholo.Rpc.CollectDailyBonusOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        FAILURE = 2;
        TOO_SOON = 3;
    }

    Result result = 1;
}

// ref: Holoholo.Rpc.CollectDailyBonusProto
message CollectDailyBonusProto {
}

// ref: Holoholo.Rpc.CollectDailyDefenderBonusOutProto
message CollectDailyDefenderBonusOutProto {
    // ref: Holoholo.Rpc.CollectDailyDefenderBonusOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        FAILURE = 2;
        TOO_SOON = 3;
        NO_DEFENDERS = 4;
    }

    Result result = 1;
    repeated string currency_type = 2 [packed=false];
    repeated int32 currency_awarded = 3 [packed=false];
    int32 num_defenders = 4;
}

// ref: Holoholo.Rpc.CollectDailyDefenderBonusProto
message CollectDailyDefenderBonusProto {
}

// ref: Holoholo.Rpc.CompleteQuestLogEntry
message CompleteQuestLogEntry {
    // ref: Holoholo.Rpc.CompleteQuestLogEntry/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
    }

    Result result = 1;
    ClientQuestProto quest = 2;
    repeated QuestStampProto stamp = 3 [packed=false];
}

// ref: Holoholo.Rpc.CompleteQuestOutProto
message CompleteQuestOutProto {
    // ref: Holoholo.Rpc.CompleteQuestOutProto/Types/Status
    enum Status {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_QUEST_NOT_FOUND = 2;
        ERROR_QUEST_STILL_IN_PROGRESS = 3;
        ERROR_QUEST_ALREADY_COMPLETED = 4;
        ERROR_SUBQUEST_NOT_FOUND = 5;
        ERROR_SUBQUEST_STILL_IN_PROGRESS = 6;
        ERROR_SUBQUEST_ALREADY_COMPLETED = 7;
        ERROR_MULTIPART_STILL_IN_PROGRESS = 8;
        ERROR_MULTIPART_ALREADY_COMPLETED = 9;
        ERROR_REDEEM_COMPLETED_QUEST_STAMP_CARD_FIRST = 10;
        ERROR_INVENTORY_FULL = 11;
    }

    Status status = 1;
    ClientQuestProto quest = 2;
    repeated QuestStampProto stamp = 3 [packed=false];
}

// ref: Holoholo.Rpc.CompleteQuestPokemonEncounterLogEntry
message CompleteQuestPokemonEncounterLogEntry {
    // ref: Holoholo.Rpc.CompleteQuestPokemonEncounterLogEntry/Types/Result
    enum Result {
        UNSET = 0;
        POKEMON_CAPTURED = 1;
        POKEMON_FLED = 2;
    }

    Result result = 1;
    int32 pokedex_number = 2;
    int32 combat_points = 3;
    uint64 pokemon_id = 4;
    PokemonDisplayProto pokemon_display = 5;
    EncounterType encounter_type = 6;
}

// ref: Holoholo.Rpc.CompleteQuestProto
message CompleteQuestProto {
    string quest_id = 1;
    string sub_quest_id = 2;
}

// ref: Holoholo.Rpc.CompleteQuestStampCardLogEntry
message CompleteQuestStampCardLogEntry {
    // ref: Holoholo.Rpc.CompleteQuestStampCardLogEntry/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
    }

    Result result = 1;
    repeated QuestRewardProto reward = 2 [packed=false];
}

// ref: Holoholo.Rpc.CompleteQuestStampCardOutProto
message CompleteQuestStampCardOutProto {
    // ref: Holoholo.Rpc.CompleteQuestStampCardOutProto/Types/Status
    enum Status {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_STILL_IN_PROGRESS = 2;
    }

    Status status = 1;
    repeated QuestRewardProto reward = 2 [packed=false];
}

// ref: Holoholo.Rpc.CompleteQuestStampCardProto
message CompleteQuestStampCardProto {
}

// ref: Holoholo.Rpc.ConfirmTradingOutProto
message ConfirmTradingOutProto {
    // ref: Holoholo.Rpc.ConfirmTradingOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_UNKNOWN = 2;
        ERROR_FRIEND_NOT_FOUND = 3;
        ERROR_INVALID_PLAYER_ID = 4;
        ERROR_INVALID_STATE = 5;
        ERROR_STATE_HANDLER = 6;
        ERROR_INVALID_POKEMON = 7;
        ERROR_INSUFFICIENT_PAYMENT = 8;
        ERROR_NO_PLAYER_POKEMON = 9;
        ERROR_NO_FRIEND_POKEMON = 10;
        ERROR_PLAYER_ALREADY_CONFIRMED = 11;
        ERROR_TRANSACTION_LOG_NOT_MATCH = 12;
        ERROR_TRADING_EXPIRED = 13;
        ERROR_TRANSACTION = 14;
        ERROR_DAILY_LIMIT_REACHED = 15;
    }

    Result result = 1;
    TradingProto trading = 2;
}

// ref: Holoholo.Rpc.ConfirmTradingProto
message ConfirmTradingProto {
    string player_id = 1;
    string transaction_log = 2;
}

// ref: Holoholo.Rpc.ContactSettingsProto
message ContactSettingsProto {
    bool send_marketing_emails = 1;
    bool send_push_notifications = 2;
}

// ref: Holoholo.Rpc.CurrencyQuantityProto
message CurrencyQuantityProto {
    string currency_type = 1;
    int32 quantity = 2;
}

// ref: Holoholo.Rpc.CurrentNewsProto
message CurrentNewsProto {
    repeated NewsArticleProto news_articles = 1 [packed=false];
    string news_strings_url = 2;
    int64 last_updated_timestamp = 3;
}

// ref: Holoholo.Rpc.DailyBonusProto
message DailyBonusProto {
    int64 next_collect_timestamp_ms = 1;
    int64 next_defender_bonus_collect_timestamp_ms = 2;
}

// ref: Holoholo.Rpc.DailyCounterProto
message DailyCounterProto {
    int64 window = 1;
    int32 count = 2;
}

// ref: Holoholo.Rpc.DailyQuestProto
message DailyQuestProto {
    int32 current_period_bucket = 1;
    int32 current_streak_count = 2;
}

// ref: Holoholo.Rpc.DailyQuestSettings
message DailyQuestSettings {
    int32 buckets_per_day = 1;
    int32 streak_length = 2;
    float bonus_multiplier = 3;
    float streak_bonus_multiplier = 4;
}

// ref: Holoholo.Rpc.DamagePropertyProto
message DamagePropertyProto {
    bool super_effective_charge_move = 1;
    bool weather_boosted = 2;
}

// ref: Holoholo.Rpc.DeleteGiftFromInventoryOutProto
message DeleteGiftFromInventoryOutProto {
    // ref: Holoholo.Rpc.DeleteGiftFromInventoryOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_UNKNOWN = 2;
        ERROR_GIFT_DOES_NOT_EXIST = 3;
    }

    Result result = 1;
}

// ref: Holoholo.Rpc.DeleteGiftFromInventoryProto
message DeleteGiftFromInventoryProto {
    repeated uint64 giftbox_id = 1 [packed=false];
}

// ref: Holoholo.Rpc.DeleteGiftOutProto
message DeleteGiftOutProto {
    // ref: Holoholo.Rpc.DeleteGiftOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_UNKNOWN = 2;
        ERROR_INVALID_PLAYER_ID = 3;
        ERROR_FRIEND_NOT_FOUND = 4;
        ERROR_GIFT_DOES_NOT_EXIST = 5;
        ERROR_FRIEND_UPDATE = 6;
    }

    Result result = 1;
}

// ref: Holoholo.Rpc.DeleteGiftProto
message DeleteGiftProto {
    string player_id = 1;
    uint64 giftbox_id = 2;
}

// ref: Holoholo.Rpc.DeploymentTotalsProto
message DeploymentTotalsProto {
    int32 times_fed = 1;
    int32 battles_won = 2;
    int32 battles_lost = 3;
    int64 deployment_duration_ms = 4;
}

// ref: Holoholo.Rpc.DeployPokemonTelemetry
message DeployPokemonTelemetry {
    int32 status = 1;
    PokemonTelemetry pokemon = 2;
    string gym_id = 3;
    int32 team = 4;
    int32 defender_count = 5;
}

// ref: Holoholo.Rpc.DiskEncounterOutProto
message DiskEncounterOutProto {
    // ref: Holoholo.Rpc.DiskEncounterOutProto/Types/Result
    enum Result {
        UNKNOWN = 0;
        SUCCESS = 1;
        NOT_AVAILABLE = 2;
        NOT_IN_RANGE = 3;
        ENCOUNTER_ALREADY_FINISHED = 4;
        POKEMON_INVENTORY_FULL = 5;
    }

    Result result = 1;
    PokemonProto pokemon = 2;
    CaptureProbabilityProto capture_probability = 3;
    Item active_item = 4;
    int32 arplus_attempts_until_flee = 5;
}

// ref: Holoholo.Rpc.DiskEncounterProto
message DiskEncounterProto {
    int64 encounter_id = 1;
    string fort_id = 2;
    double player_lat_degrees = 3;
    double player_lng_degrees = 4;
    double gym_lat_degrees = 5;
    double gym_lng_degrees = 6;
}

// ref: Holoholo.Rpc.DownloadUrlEntryProto
message DownloadUrlEntryProto {
    string asset_id = 1;
    string url = 2;
    int32 size = 3;
    uint32 checksum = 4;
}

// ref: Holoholo.Rpc.DownloadUrlOutProto
message DownloadUrlOutProto {
    repeated DownloadUrlEntryProto download_urls = 1 [packed=false];
}

// ref: Holoholo.Rpc.DownloadUrlRequestProto
message DownloadUrlRequestProto {
    repeated string asset_id = 1 [packed=false];
}

// ref: Holoholo.Rpc.EchoOutProto
message EchoOutProto {
    string context = 1;
}

// ref: Holoholo.Rpc.EchoProto
message EchoProto {
}

// ref: Holoholo.Rpc.EggIncubatorAttributesProto
message EggIncubatorAttributesProto {
    EggIncubatorType incubator_type = 1;
    int32 uses = 2;
    float distance_multiplier = 3;
}

// ref: Holoholo.Rpc.EggIncubatorProto
message EggIncubatorProto {
    string item_id = 1;
    Item item = 2;
    EggIncubatorType incubator_type = 3;
    int32 uses_remaining = 4;
    int64 pokemon_id = 5;
    double start_km_walked = 6;
    double target_km_walked = 7;
}

// ref: Holoholo.Rpc.EggIncubatorsProto
message EggIncubatorsProto {
    repeated EggIncubatorProto egg_incubator = 1 [packed=false];
}

// ref: Holoholo.Rpc.EncounterOutProto
message EncounterOutProto {
    // ref: Holoholo.Rpc.EncounterOutProto/Types/Background
    enum Background {
        PARK = 0;
        DESERT = 1;
    }

    // ref: Holoholo.Rpc.EncounterOutProto/Types/Status
    enum Status {
        ENCOUNTER_ERROR = 0;
        ENCOUNTER_SUCCESS = 1;
        ENCOUNTER_NOT_FOUND = 2;
        ENCOUNTER_CLOSED = 3;
        ENCOUNTER_POKEMON_FLED = 4;
        ENCOUNTER_NOT_IN_RANGE = 5;
        ENCOUNTER_ALREADY_HAPPENED = 6;
        POKEMON_INVENTORY_FULL = 7;
    }

    WildPokemonProto pokemon = 1;
    Background background = 2;
    Status status = 3;
    CaptureProbabilityProto capture_probability = 4;
    Item active_item = 5;
    int32 arplus_attempts_until_flee = 6;
}

// ref: Holoholo.Rpc.EncounterPokemonTelemetry
message EncounterPokemonTelemetry {
    PokemonTelemetry pokemon = 1;
    string map_pokemon_type = 2;
    bool ar_enabled = 3;
    bool ar_plus_enabled = 4;
}

// ref: Holoholo.Rpc.EncounterProto
message EncounterProto {
    uint64 encounter_id = 1;
    string spawnpoint_id = 2;
    double player_lat_degrees = 3;
    double player_lng_degrees = 4;
}

// ref: Holoholo.Rpc.EncounterSettingsProto
message EncounterSettingsProto {
    float spin_bonus_threshold = 1;
    float excellent_throw_threshold = 2;
    float great_throw_threshold = 3;
    float nice_throw_threshold = 4;
    int32 milestone_threshold = 5;
    bool ar_plus_mode_enabled = 6;
    float ar_close_proximity_threshold = 7;
    float ar_low_awareness_threshold = 8;
    float ar_close_proximity_multiplier = 9;
    float ar_awareness_penalty_threshold = 10;
    float ar_low_awareness_max_multiplier = 11;
    float ar_high_awareness_min_penalty_multiplier = 12;
    int32 ar_plus_attempts_until_flee_max = 13;
    int32 ar_plus_attempts_until_flee_infinite = 14;
    float escaped_bonus_multiplier_max = 15;
    float escaped_bonus_multiplier_by_excellent_throw = 16;
    float escaped_bonus_multiplier_by_great_throw = 17;
    float escaped_bonus_multiplier_by_nice_throw = 18;
}

// ref: Holoholo.Rpc.EncounterTutorialCompleteOutProto
message EncounterTutorialCompleteOutProto {
    // ref: Holoholo.Rpc.EncounterTutorialCompleteOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_INVALID_POKEMON = 2;
    }

    Result result = 1;
    PokemonProto pokemon = 2;
    CaptureScoreProto scores = 3;
}

// ref: Holoholo.Rpc.EncounterTutorialCompleteProto
message EncounterTutorialCompleteProto {
    int32 pokedex_id = 1;
}

// ref: Holoholo.Rpc.EquipBadgeOutProto
message EquipBadgeOutProto {
    // ref: Holoholo.Rpc.EquipBadgeOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        COOLDOWN_ACTIVE = 2;
        NOT_QUALIFIED = 3;
    }

    Result result = 1;
    EquippedBadgeProto equipped = 2;
}

// ref: Holoholo.Rpc.EquipBadgeProto
message EquipBadgeProto {
    HoloBadgeType badge = 1;
}

// ref: Holoholo.Rpc.EquippedBadgeProto
message EquippedBadgeProto {
    HoloBadgeType equipped_badge = 1;
    int32 level = 2;
    int64 next_equip_change_allowed_timestamp_ms = 3;
}

// ref: Holoholo.Rpc.EquippedBadgeSettingsProto
message EquippedBadgeSettingsProto {
    int64 equip_badge_cooldown_ms = 1;
    repeated float catch_probability_bonus = 2 [packed=false];
    repeated float flee_probability_bonus = 3 [packed=false];
}

// ref: Holoholo.Rpc.EventBadgeSettingsProto
message EventBadgeSettingsProto {
    int64 valid_from_ms = 1;
    int64 valid_to_ms = 2;
    repeated HoloBadgeType mutually_exclusive_badges = 3 [packed=false];
}

// ref: Holoholo.Rpc.EventInfoProto
message EventInfoProto {
    string image_url = 1;
    string icon_url = 2;
    string name_key = 3;
}

// ref: Holoholo.Rpc.EventSettingsProto
message EventSettingsProto {
    repeated string condolence_ribbon_country = 1 [packed=false];
}

// ref: Holoholo.Rpc.EvolutionBranchProto
message EvolutionBranchProto {
    HoloPokemonId evolution = 1;
    Item evolution_item_requirement = 2;
    int32 candy_cost = 3;
    float km_buddy_distance_requirement = 4;
    PokemonDisplayProto.Form form = 5;
}

// ref: Holoholo.Rpc.EvolvePokemonOutProto
message EvolvePokemonOutProto {
    // ref: Holoholo.Rpc.EvolvePokemonOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        FAILED_POKEMON_MISSING = 2;
        FAILED_INSUFFICIENT_RESOURCES = 3;
        FAILED_POKEMON_CANNOT_EVOLVE = 4;
        FAILED_POKEMON_IS_DEPLOYED = 5;
        FAILED_INVALID_ITEM_REQUIREMENT = 6;
    }

    Result result = 1;
    PokemonProto evolved_pokemon = 2;
    int32 exp_awarded = 3;
    int32 candy_awarded = 4;
}

// ref: Holoholo.Rpc.EvolvePokemonProto
message EvolvePokemonProto {
    uint64 pokemon_id = 1;
    Item evolution_item_requirement = 2;
}

// ref: Holoholo.Rpc.EvolvePokemonTelemetry
message EvolvePokemonTelemetry {
    PokemonTelemetry pokemon = 1;
    PokemonTelemetry evolved_pokemon = 2;
}

// ref: Holoholo.Rpc.ExclusiveRaidCancellationProto
message ExclusiveRaidCancellationProto {
    string fort_id = 1;
    int64 start_time_ms = 2;
    int64 end_time_ms = 3;
    string image_url = 4;
    double latitude = 5;
    double longitude = 6;
    string gym_name = 7;
    repeated LootItemProto rewards = 8 [packed=false];
}

// ref: Holoholo.Rpc.ExclusiveTicketInfoProto
message ExclusiveTicketInfoProto {
    int64 raid_seed = 1;
    string fort_id = 2;
    int64 start_time_ms = 4;
    int64 end_time_ms = 5;
    string image_url = 6;
    double latitude = 7;
    double longitude = 8;
    string gym_name = 9;
    int64 spawn_time_ms = 10;
    bool is_cancelled = 11;
    PokemonProto raid_pokemon = 12;
}

// ref: Holoholo.Rpc.ExperienceBoostAttributesProto
message ExperienceBoostAttributesProto {
    float xp_multiplier = 1;
    int32 boost_duration_ms = 2;
}

// ref: Holoholo.Rpc.FavoritePokemonTelemetry
message FavoritePokemonTelemetry {
    PokemonTelemetry pokemon = 1;
    bool favored = 2;
}

// ref: Holoholo.Rpc.FeedPokemonTelemetry
message FeedPokemonTelemetry {
    int32 status = 1;
    PokemonTelemetry pokemon = 2;
    string gym_id = 3;
    int32 team = 4;
    int32 defender_count = 5;
    int32 motivation = 6;
    int32 cp_now = 7;
}

// ref: Holoholo.Rpc.FestivalSettingsProto
message FestivalSettingsProto {
    // ref: Holoholo.Rpc.FestivalSettingsProto/Types/FestivalType
    enum FestivalType {
        NONE = 0;
        HALLOWEEN = 1;
        HOLIDAY = 2;
    }

    FestivalType festival_type = 1;
    string key = 2;
    string vector = 3;
}

// ref: Holoholo.Rpc.FetchAllNewsOutProto
message FetchAllNewsOutProto {
    // ref: Holoholo.Rpc.FetchAllNewsOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        NO_NEWS_FOUND = 2;
    }

    Result result = 1;
    CurrentNewsProto current_news = 2;
}

// ref: Holoholo.Rpc.FetchAllNewsProto
message FetchAllNewsProto {
}

// ref: Holoholo.Rpc.FoodAttributesProto
message FoodAttributesProto {
    repeated HoloItemEffect item_effect = 1 [packed=false];
    repeated float item_effect_percent = 2 [packed=false];
    float growth_percent = 3;
    float berry_multiplier = 4;
    float remote_berry_multiplier = 5;
}

// ref: Holoholo.Rpc.FoodValue
message FoodValue {
    float motivation_increase = 1;
    int32 cp_increase = 2;
    Item food_item = 3;
}

// ref: Holoholo.Rpc.FormProto
message FormProto {
    PokemonDisplayProto.Form form = 1;
    int32 asset_bundle_value = 2;
}

// ref: Holoholo.Rpc.FormSettingsProto
message FormSettingsProto {
    HoloPokemonId pokemon = 1;
    repeated FormProto forms = 2 [packed=false];
}

// ref: Holoholo.Rpc.FortDeployOutProto
message FortDeployOutProto {
    // ref: Holoholo.Rpc.FortDeployOutProto/Types/Result
    enum Result {
        NO_RESULT_SET = 0;
        SUCCESS = 1;
        ERROR_ALREADY_HAS_POKEMON_ON_FORT = 2;
        ERROR_OPPOSING_TEAM_OWNS_FORT = 3;
        ERROR_FORT_IS_FULL = 4;
        ERROR_NOT_IN_RANGE = 5;
        ERROR_PLAYER_HAS_NO_TEAM = 6;
        ERROR_POKEMON_NOT_FULL_HP = 7;
        ERROR_PLAYER_BELOW_MINIMUM_LEVEL = 8;
        ERROR_POKEMON_IS_BUDDY = 9;
        ERROR_FORT_DEPLOY_LOCKOUT = 10;
        ERROR_PLAYER_HAS_NO_NICKNAME = 11;
        ERROR_POI_INACCESSIBLE = 12;
        ERROR_LEGENDARY_POKEMON = 13;
        ERROR_INVALID_POKEMON = 14;
    }

    Result result = 1;
    FortDetailsOutProto fort_details_out_proto = 2;
    PokemonProto egg_pokemon = 3;
    GymStateProto gym_state_proto = 4;
}

// ref: Holoholo.Rpc.FortDeployProto
message FortDeployProto {
    string fort_id = 1;
    uint64 pokemon_id = 2;
    double player_lat_degrees = 3;
    double player_lng_degrees = 4;
}

// ref: Holoholo.Rpc.FortDetailsOutProto
message FortDetailsOutProto {
    string id = 1;
    int32 team = 2;
    repeated PokemonProto pokemon = 3 [packed=false];
    string name = 4;
    repeated string image_url = 5 [packed=false];
    int32 fp = 6;
    int32 stamina = 7;
    int32 max_stamina = 8;
    FortType fort_type = 9;
    double latitude = 10;
    double longitude = 11;
    string description = 12;
    repeated ClientFortModifierProto modifier = 13 [packed=false];
    bool close_soon = 14;
    string checkin_image_url = 15;
    EventInfoProto event_info = 16;
}

// ref: Holoholo.Rpc.FortDetailsProto
message FortDetailsProto {
    string id = 1;
    double latitude = 2;
    double longitude = 3;
}

// ref: Holoholo.Rpc.FortModifierAttributesProto
message FortModifierAttributesProto {
    int32 modifier_lifetime_seconds = 1;
    int32 troy_disk_num_pokemon_spawned = 2;
}

// ref: Holoholo.Rpc.FortRecallOutProto
message FortRecallOutProto {
    // ref: Holoholo.Rpc.FortRecallOutProto/Types/Result
    enum Result {
        NO_RESULT_SET = 0;
        SUCCESS = 1;
        ERROR_NOT_IN_RANGE = 2;
        ERROR_POKEMON_NOT_ON_FORT = 3;
        ERROR_NO_PLAYER = 4;
    }

    Result result = 1;
    FortDetailsOutProto fort_details_out_proto = 2;
}

// ref: Holoholo.Rpc.FortRecallProto
message FortRecallProto {
    string fort_id = 1;
    uint64 pokemon_id = 2;
    double player_lat_degrees = 3;
    double player_lng_degrees = 4;
}

// ref: Holoholo.Rpc.FortRenderingType
message FortRenderingType {
    // ref: Holoholo.Rpc.FortRenderingType/Types/RenderingType
    enum RenderingType {
        DEFAULT = 0;
        INTERNAL_TEST = 1;
    }

}

// ref: Holoholo.Rpc.FortSearchLogEntry
message FortSearchLogEntry {
    // ref: Holoholo.Rpc.FortSearchLogEntry/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
    }

    Result result = 1;
    string fort_id = 2;
    repeated ItemProto items = 3 [packed=false];
    int32 eggs = 4;
    repeated PokemonProto pokemon_eggs = 5 [packed=false];
    FortType fort_type = 6;
    repeated ItemProto awarded_items = 7 [packed=false];
    repeated ItemProto bonus_items = 8 [packed=false];
    repeated ItemProto team_bonus_items = 9 [packed=false];
    repeated GiftBoxProto gift_boxes = 10 [packed=false];
}

// ref: Holoholo.Rpc.FortSearchOutProto
message FortSearchOutProto {
    // ref: Holoholo.Rpc.FortSearchOutProto/Types/Result
    enum Result {
        NO_RESULT_SET = 0;
        SUCCESS = 1;
        OUT_OF_RANGE = 2;
        IN_COOLDOWN_PERIOD = 3;
        INVENTORY_FULL = 4;
        EXCEEDED_DAILY_LIMIT = 5;
        POI_INACCESSIBLE = 6;
    }

    Result result = 1;
    repeated AwardItemProto items = 2 [packed=false];
    int32 gems_awarded = 3;
    PokemonProto egg_pokemon = 4;
    int32 xp_awarded = 5;
    int64 cooldown_complete = 6;
    int32 chain_hack_sequence_number = 7;
    AwardedGymBadge awarded_gym_badge = 8;
    LootProto loot = 9;
    LootProto bonus_loot = 10;
    int32 raid_tickets = 11;
    LootProto team_bonus_loot = 12;
    string fort_id = 13;
    ClientQuestProto challenge_quest = 14;
    GiftBoxProto gift_box = 15;
}

// ref: Holoholo.Rpc.FortSearchProto
message FortSearchProto {
    string id = 1;
    double player_lat_degrees = 2;
    double player_lng_degrees = 3;
    double fort_lat_degrees = 4;
    double fort_lng_degrees = 5;
}

// ref: Holoholo.Rpc.FortSettingsProto
message FortSettingsProto {
    double interaction_range_meters = 1;
    int32 max_total_deployed_pokemon = 2;
    int32 max_player_deployed_pokemon = 3;
    double deploy_stamina_multiplier = 4;
    double deploy_attack_multiplier = 5;
    double far_interaction_range_meters = 6;
    bool disable_gyms = 7;
    int32 max_same_pokemon_at_fort = 8;
    int32 max_player_total_deployed_pokemon = 9;
    bool enable_hyperlinks_in_poi_descriptions = 10;
    bool enable_right_to_left_text_display = 11;
}

// ref: Holoholo.Rpc.FortSponsor
message FortSponsor {
    // ref: Holoholo.Rpc.FortSponsor/Types/Sponsor
    enum Sponsor {
        UNSET = 0;
        MCDONALDS = 1;
        POKEMON_STORE = 2;
        TOHO = 3;
        SOFTBANK = 4;
        GLOBE = 5;
        SPATULA = 6;
        THERMOMETER = 7;
        KNIFE = 8;
        GRILL = 9;
        SMOKER = 10;
        PAN = 11;
        BBQ = 12;
        FRYER = 13;
        STEAMER = 14;
        HOOD = 15;
        SLOWCOOKER = 16;
        MIXER = 17;
        SCOOPER = 18;
        MUFFINTIN = 19;
        SALAMANDER = 20;
        PLANCHA = 21;
        NIA_OPS = 22;
        WHISK = 23;
    }

}

// ref: Holoholo.Rpc.FrameRate
message FrameRate {
    niantic.platform.telemetry.PlatformMetricData sampled_frame_rate = 1;
}

// ref: Holoholo.Rpc.FriendshipDataProto
message FriendshipDataProto {
    FriendshipLevelDataProto friendship_level_data = 1;
    repeated GiftBoxDetailsProto giftbox_details = 2 [packed=false];
    string codename = 3;
    string nickname = 4;
    int64 open_trade_expire_ms = 5;
}

// ref: Holoholo.Rpc.FriendshipLevelDataProto
message FriendshipLevelDataProto {
    int64 bucket = 1;
    int32 points_earned_today = 2;
    FriendshipLevelMilestone awarded_friendship_milestone = 3;
    FriendshipLevelMilestone current_friendship_milestone = 4;
    double next_friendship_milestone_progress_percentage = 5;
    int32 points_toward_next_milestone = 6;
}

// ref: Holoholo.Rpc.FriendshipLevelMilestoneSettingsProto
message FriendshipLevelMilestoneSettingsProto {
    // ref: Holoholo.Rpc.FriendshipLevelMilestoneSettingsProto/Types/PokemonTradingType
    enum PokemonTradingType {
        UNSET = 0;
        REGULAR_IN_POKEDEX = 1;
        SPECIAL_IN_POKEDEX = 2;
        REGULAR_NON_POKEDEX = 3;
        REGIONAL_NON_POKEDEX = 4;
        FORM_NON_POKEDEX = 5;
        LEGENDARY_NON_POKEDEX = 6;
        SHINY_NON_POKEDEX = 7;
    }

    int32 min_points_to_reach = 1;
    int32 milestone_xp_reward = 2;
    float attack_bonus_percentage = 3;
    int32 raid_ball_bonus = 4;
    repeated PokemonTradingType unlocked_trading = 5 [packed=false];
    float trading_discount = 6;
}

// ref: Holoholo.Rpc.FriendshipMilestoneRewardNotificationProto
message FriendshipMilestoneRewardNotificationProto {
    string friend_id = 1;
    string friend_codename = 2;
    int32 friendship_milestone_level = 3;
    int64 xp_reward = 4;
}

// ref: Holoholo.Rpc.FriendshipMilestoneRewardProto
message FriendshipMilestoneRewardProto {
    string friend_id = 1;
    FriendshipLevelMilestone friendship_milestone = 2;
}

// ref: Holoholo.Rpc.GameMasterClientTemplateProto
message GameMasterClientTemplateProto {
    string template_id = 1;
    PokemonSettingsProto pokemon = 2;
    ItemSettingsProto item = 3;
    MoveSettingsProto move = 4;
    MoveSequenceSettingsProto move_sequence = 5;
    TypeEffectiveSettingsProto type_effective = 8;
    BadgeSettingsProto badge = 10;
    CameraSettingsProto camera = 11;
    PlayerLevelSettingsProto player_level = 12;
    GymLevelSettingsProto gym_level = 13;
    GymBattleSettingsProto battle_settings = 14;
    EncounterSettingsProto encounter_settings = 15;
    IapItemDisplayProto iap_item_display = 16;
    IapSettingsProto iap_settings = 17;
    PokemonUpgradeSettingsProto pokemon_upgrades = 18;
    EquippedBadgeSettingsProto equipped_badges = 19;
    QuestSettingsProto quest_settings = 20;
    AvatarCustomizationProto avatar_customization = 21;
    FormSettingsProto form_settings = 22;
    ClientGenderSettingsProto gender_settings = 23;
    GymBadgeGmtSettingsProto gym_badge_settings = 24;
    WeatherAffinityProto weather_affinities = 25;
    WeatherBonusProto weather_bonus_settings = 26;
    PokemonScaleSettingProto pokemon_scale_settings = 27;
    IapItemCategoryDisplayProto iap_category_display = 28;
    OnboardingSettingsProto onboarding_settings = 30;
    FriendshipLevelMilestoneSettingsProto friendship_milestone_settings = 31;
    LuckyPokemonSettingsProto lucky_pokemon_settings = 32;
}

// ref: Holoholo.Rpc.GenericClickTelemetry
message GenericClickTelemetry {
    GenericClickTelemetryIds generic_click_id = 1;
}

// ref: Holoholo.Rpc.GetActionLogRequest
message GetActionLogRequest {
}

// ref: Holoholo.Rpc.GetActionLogResponse
message GetActionLogResponse {
    // ref: Holoholo.Rpc.GetActionLogResponse/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
    }

    Result result = 1;
    repeated ActionLogEntry log = 2 [packed=false];
}

// ref: Holoholo.Rpc.GetBuddyWalkedOutProto
message GetBuddyWalkedOutProto {
    bool success = 1;
    HoloPokemonFamilyId family_candy_id = 2;
    int32 candy_earned_count = 3;
}

// ref: Holoholo.Rpc.GetBuddyWalkedProto
message GetBuddyWalkedProto {
}

// ref: Holoholo.Rpc.GetFriendshipRewardsOutProto
message GetFriendshipRewardsOutProto {
    // ref: Holoholo.Rpc.GetFriendshipRewardsOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_UNKNOWN = 2;
        ERROR_NOT_FRIENDS = 3;
        ERROR_MILESTONE_ALREADY_AWARDED = 4;
        ERROR_FAILED_TO_UPDATE = 5;
    }

    Result result = 1;
    int64 xp_reward = 2;
    string friend_id = 3;
}

// ref: Holoholo.Rpc.GetFriendshipRewardsProto
message GetFriendshipRewardsProto {
    string friend_id = 1;
}

// ref: Holoholo.Rpc.GetGameMasterClientTemplatesOutProto
message GetGameMasterClientTemplatesOutProto {
    // ref: Holoholo.Rpc.GetGameMasterClientTemplatesOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        PAGE = 2;
        RETRY = 3;
    }

    Result result = 1;
    repeated GameMasterClientTemplateProto items = 2 [packed=false];
    uint64 timestamp = 3;
    int32 page_offset = 4;
}

// ref: Holoholo.Rpc.GetGameMasterClientTemplatesProto
message GetGameMasterClientTemplatesProto {
    bool paginate = 1;
    int32 page_offset = 2;
    uint64 page_timestamp = 3;
}

// ref: Holoholo.Rpc.GetGiftBoxDetailsOutProto
message GetGiftBoxDetailsOutProto {
    // ref: Holoholo.Rpc.GetGiftBoxDetailsOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_UNKNOWN = 2;
        ERROR_GIFT_DOES_NOT_EXIST = 3;
        ERROR_INVALID_PLAYER_ID = 4;
        ERROR_FRIEND_NOT_FOUND = 5;
        ERROR_FORT_SEARCH = 6;
    }

    Result result = 1;
    repeated GiftBoxDetailsProto gift_boxes = 2 [packed=false];
}

// ref: Holoholo.Rpc.GetGiftBoxDetailsProto
message GetGiftBoxDetailsProto {
    repeated uint64 giftbox_id = 1 [packed=false];
    string player_id = 2;
}

// ref: Holoholo.Rpc.GetGymBadgeDetailsOutProto
message GetGymBadgeDetailsOutProto {
    AwardedGymBadge gym_badge = 1;
    GymDefenderProto gym_defender = 2;
    bool success = 3;
}

// ref: Holoholo.Rpc.GetGymBadgeDetailsProto
message GetGymBadgeDetailsProto {
    string fort_id = 1;
    double latitude = 2;
    double longitude = 3;
}

// ref: Holoholo.Rpc.GetGymDetailsOutProto
message GetGymDetailsOutProto {
    // ref: Holoholo.Rpc.GetGymDetailsOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_NOT_IN_RANGE = 2;
    }

    GymStateProto gym_state = 1;
    string name = 2;
    repeated string url = 3 [packed=false];
    Result result = 4;
    string description = 5;
    repeated string secondary_url = 6 [packed=false];
    string checkin_image_url = 7;
    EventInfoProto event_info = 8;
}

// ref: Holoholo.Rpc.GetGymDetailsProto
message GetGymDetailsProto {
    string gym_id = 1;
    double player_lat_degrees = 2;
    double player_lng_degrees = 3;
    double gym_lat_degrees = 4;
    double gym_lng_degrees = 5;
    string client_version = 6;
}

// ref: Holoholo.Rpc.GetHatchedEggsOutProto
message GetHatchedEggsOutProto {
    bool success = 1;
    repeated uint64 pokemon_id = 2 [packed=false];
    repeated int32 exp_awarded = 3 [packed=false];
    repeated int32 candy_awarded = 4 [packed=false];
    repeated int32 stardust_awarded = 5 [packed=false];
    repeated float egg_km_walked = 6 [packed=false];
    repeated PokemonProto hatched_pokemon = 7 [packed=false];
}

// ref: Holoholo.Rpc.GetHatchedEggsProto
message GetHatchedEggsProto {
}

// ref: Holoholo.Rpc.GetHoloholoInventoryOutProto
message GetHoloholoInventoryOutProto {
    bool success = 1;
    niantic.platform.inventory.InventoryDeltaProto inventory_delta = 2;
}

// ref: Holoholo.Rpc.GetHoloholoInventoryProto
message GetHoloholoInventoryProto {
    int64 timestamp_millis = 1;
    repeated Item item_been_seen = 2 [packed=false];
}

// ref: Holoholo.Rpc.GetInboxOutProto
message GetInboxOutProto {
    // ref: Holoholo.Rpc.GetInboxOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        FAILURE = 2;
        TIMED_OUT = 3;
    }

    Result result = 1;
    niantic.platform.protos.ClientInbox inbox = 2;
}

// ref: Holoholo.Rpc.GetInboxProto
message GetInboxProto {
    bool is_history = 1;
    bool is_reverse = 2;
    int64 not_before_ms = 3;
}

// ref: Holoholo.Rpc.GetIncensePokemonOutProto
message GetIncensePokemonOutProto {
    // ref: Holoholo.Rpc.GetIncensePokemonOutProto/Types/Result
    enum Result {
        INCENSE_ENCOUNTER_UNKNOWN = 0;
        INCENSE_ENCOUNTER_AVAILABLE = 1;
        INCENSE_ENCOUNTER_NOT_AVAILABLE = 2;
    }

    Result result = 1;
    int32 pokemon_type_id = 2;
    double lat = 3;
    double lng = 4;
    string encounter_location = 5;
    uint64 encounter_id = 6;
    int64 disappear_time_ms = 7;
    PokemonDisplayProto pokemon_display = 8;
}

// ref: Holoholo.Rpc.GetIncensePokemonProto
message GetIncensePokemonProto {
    double player_lat_degrees = 1;
    double player_lng_degrees = 2;
}

// ref: Holoholo.Rpc.GetMapObjectsOutProto
message GetMapObjectsOutProto {
    // ref: Holoholo.Rpc.GetMapObjectsOutProto/Types/Status
    enum Status {
        UNSET = 0;
        SUCCESS = 1;
        LOCATION_UNSET = 2;
    }

    // ref: Holoholo.Rpc.GetMapObjectsOutProto/Types/TimeOfDay
    enum TimeOfDay {
        NONE = 0;
        DAY = 1;
        NIGHT = 2;
    }

    repeated ClientMapCellProto map_cell = 1 [packed=false];
    Status status = 2;
    TimeOfDay time_of_day = 3;
    repeated niantic.rpc.ClientWeatherProto client_weather = 4 [packed=false];
}

// ref: Holoholo.Rpc.GetMapObjectsProto
message GetMapObjectsProto {
    repeated uint64 cell_id = 1 [packed=false];
    repeated int64 since_time_ms = 2 [packed=false];
    double player_lat = 3;
    double player_lng = 4;
}

// ref: Holoholo.Rpc.GetNewQuestsOutProto
message GetNewQuestsOutProto {
    // ref: Holoholo.Rpc.GetNewQuestsOutProto/Types/Status
    enum Status {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_INVALID_DISPLAY = 2;
    }

    Status status = 1;
    repeated ClientQuestProto quests = 2 [packed=false];
    repeated ClientQuestProto version_changed_quests = 3 [packed=false];
}

// ref: Holoholo.Rpc.GetNewQuestsProto
message GetNewQuestsProto {
}

// ref: Holoholo.Rpc.GetPlayerDayOutProto
message GetPlayerDayOutProto {
    // ref: Holoholo.Rpc.GetPlayerDayOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_UNKNOWN = 2;
    }

    Result result = 1;
    int64 day = 2;
}

// ref: Holoholo.Rpc.GetPlayerDayProto
message GetPlayerDayProto {
}

// ref: Holoholo.Rpc.GetPlayerOutProto
message GetPlayerOutProto {
    bool success = 1;
    ClientPlayerProto player = 2;
    bool banned = 3;
    bool warn = 4;
    bool was_created = 5;
}

// ref: Holoholo.Rpc.GetPlayerProto
message GetPlayerProto {
    PlayerLocaleProto player_locale = 1;
    bool prevent_creation = 2;
}

// ref: Holoholo.Rpc.GetQuestDetailsOutProto
message GetQuestDetailsOutProto {
    // ref: Holoholo.Rpc.GetQuestDetailsOutProto/Types/Status
    enum Status {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_QUEST_NOT_FOUND = 2;
        ERROR_INVALID_DISPLAY = 3;
    }

    Status status = 1;
    repeated ClientQuestProto quests = 2 [packed=false];
}

// ref: Holoholo.Rpc.GetQuestDetailsProto
message GetQuestDetailsProto {
    repeated string quest_id = 1 [packed=false];
}

// ref: Holoholo.Rpc.GetRaidDetailsOutProto
message GetRaidDetailsOutProto {
    // ref: Holoholo.Rpc.GetRaidDetailsOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_NOT_IN_RANGE = 2;
        ERROR_RAID_COMPLETED = 3;
        ERROR_RAID_UNAVAILABLE = 4;
        ERROR_PLAYER_BELOW_MINIMUM_LEVEL = 5;
        ERROR_POI_INACCESSIBLE = 6;
    }

    LobbyProto lobby = 1;
    BattleProto raid_battle = 2;
    bool player_can_join_lobby = 3;
    Result result = 4;
    RaidInfoProto raid_info = 5;
    bool ticket_used = 6;
    bool free_ticket_available = 7;
    int32 throws_remaining = 8;
    bool received_rewards = 9;
    int32 num_players_in_lobby = 10;
    int64 server_ms = 11;
}

// ref: Holoholo.Rpc.GetRaidDetailsProto
message GetRaidDetailsProto {
    int64 raid_seed = 1;
    string gym_id = 2;
    repeated int32 lobby_id = 3 [packed=false];
    double player_lat_degrees = 4;
    double player_lng_degrees = 5;
}

// ref: Holoholo.Rpc.GetRemoteConfigVersionsOutProto
message GetRemoteConfigVersionsOutProto {
    // ref: Holoholo.Rpc.GetRemoteConfigVersionsOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
    }

    Result result = 1;
    uint64 game_master_timestamp = 2;
    uint64 asset_digest_timestamp = 3;
    repeated uint32 experiment_id = 4 [packed=false];
}

// ref: Holoholo.Rpc.GetRemoteConfigVersionsProto
message GetRemoteConfigVersionsProto {
    Platform platform = 1;
    string device_manufacturer = 2;
    string device_model = 3;
    string locale = 4;
    uint32 app_version = 5;
}

// ref: Holoholo.Rpc.GetTradingOutProto
message GetTradingOutProto {
    // ref: Holoholo.Rpc.GetTradingOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_UNKNOWN = 2;
        ERROR_FRIEND_NOT_FOUND = 3;
        ERROR_INVALID_PLAYER_ID = 4;
        ERROR_INVALID_STATE = 5;
        ERROR_STATE_HANDLER = 6;
    }

    Result result = 1;
    TradingProto trading = 2;
}

// ref: Holoholo.Rpc.GetTradingProto
message GetTradingProto {
    string player_id = 1;
}

// ref: Holoholo.Rpc.GiftBoxDetailsProto
message GiftBoxDetailsProto {
    uint64 giftbox_id = 1;
    string sender_id = 2;
    string sender_codename = 3;
    string receiver_id = 4;
    string receiver_codename = 5;
    string fort_id = 6;
    string fort_name = 7;
    double fort_lat = 8;
    double fort_lng = 9;
    string fort_image_url = 10;
    int64 creation_timestamp = 11;
    int64 sent_timestamp = 12;
    uint64 delivery_pokemon_id = 13;
    bool is_sponsored = 14;
}

// ref: Holoholo.Rpc.GiftBoxesProto
message GiftBoxesProto {
    repeated GiftBoxProto gifts = 1 [packed=false];
}

// ref: Holoholo.Rpc.GiftBoxProto
message GiftBoxProto {
    uint64 giftbox_id = 1;
    string sender_id = 2;
    string receiver_id = 3;
    string fort_id = 4;
    double fort_lat = 5;
    double fort_lng = 6;
    int64 creation_timestamp = 7;
    int64 sent_timestamp = 8;
    int64 sent_bucket = 9;
}

// ref: Holoholo.Rpc.GiftReceivedNotificationProto
message GiftReceivedNotificationProto {
    uint64 giftbox_id = 1;
    string sender_id = 2;
    string sender_codename = 3;
}

// ref: Holoholo.Rpc.GlobalSettingsProto
message GlobalSettingsProto {
    FortSettingsProto fort_settings = 2;
    MapSettingsProto map_settings = 3;
    LevelSettingsProto level_settings = 4;
    InventorySettingsProto inventory_settings = 5;
    string minimum_client_version = 6;
    GpsSettingsProto gps_settings = 7;
    FestivalSettingsProto festival_settings = 8;
    EventSettingsProto event_settings = 9;
    int32 max_pokemon_types = 10;
    SfidaGlobalSettingsProto sfida_settings = 11;
    NewsSettingProto news_settings = 12;
    TranslationSettingsProto translation_settings = 13;
    PasscodeSettingsProto passcode_settings = 14;
    NotificationSettingsProto notification_settings = 15;
    repeated string client_app_blacklist = 16 [packed=false];
    ClientPerformanceSettingsProto client_perf_settings = 17;
    NewsGlobalSettingsProto news_global_settings = 18;
    QuestGlobalSettingsProto quest_global_settings = 19;
    TelemetryGlobalSettingsProto telemetry_global_settings = 21;
    LoginSettingsProto login_settings = 22;
    SocialClientSettingsProto social_settings = 23;
    TradingGlobalSettingsProto trading_global_settings = 24;
    repeated HoloPokemonId additional_allowed_pokemon_ids = 25 [packed=false];
}

// ref: Holoholo.Rpc.GpsSettingsProto
message GpsSettingsProto {
    float driving_warning_speed_meters_per_second = 1;
    float driving_warning_cooldown_minutes = 2;
    float driving_speed_sample_interval_seconds = 3;
    int32 driving_speed_sample_count = 4;
}

// ref: Holoholo.Rpc.GymBadgeGmtSettingsProto
message GymBadgeGmtSettingsProto {
    repeated int32 target = 1 [packed=false];
    float battle_winning_score_per_defender_cp = 2;
    float gym_defending_score_per_minute = 3;
    int32 berry_feeding_score = 4;
    int32 pokemon_deploy_score = 5;
    int32 raid_battle_winning_score = 6;
    int32 lose_all_battles_score = 7;
}

// ref: Holoholo.Rpc.GymBadgeStats
message GymBadgeStats {
    uint64 total_time_defended_ms = 1;
    uint32 num_battles_won = 2;
    uint32 num_berries_fed = 3;
    uint32 num_deploys = 4;
    uint32 num_battles_lost = 5;
    repeated GymBattleProto gym_battles = 15 [packed=false];
}

// ref: Holoholo.Rpc.GymBattleAttackOutProto
message GymBattleAttackOutProto {
    // ref: Holoholo.Rpc.GymBattleAttackOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_INVALID_ATTACK_ACTIONS = 2;
        ERROR_NOT_IN_RANGE = 3;
        ERROR_WRONG_BATTLE_TYPE = 4;
        ERROR_RAID_ACTIVE = 5;
    }

    Result result = 1;
    BattleUpdateProto battle_update = 2;
    AwardedGymBadge gym_badge = 3;
}

// ref: Holoholo.Rpc.GymBattleAttackProto
message GymBattleAttackProto {
    string gym_id = 1;
    string battle_id = 2;
    repeated BattleActionProto attacker_actions = 3 [packed=false];
    BattleActionProto last_retrieved_action = 4;
    double player_lat_degrees = 5;
    double player_lng_degrees = 6;
    int64 timestamp_ms = 7;
}

// ref: Holoholo.Rpc.GymBattleProto
message GymBattleProto {
    string battle_id = 1;
    int64 completed_ms = 2;
    bool incremented_gym_battle_friends = 3;
}

// ref: Holoholo.Rpc.GymBattleSettingsProto
message GymBattleSettingsProto {
    float energy_per_sec = 1;
    float dodge_energy_cost = 2;
    float retarget_seconds = 3;
    float enemy_attack_interval = 4;
    float attack_server_interval = 5;
    float round_duration_seconds = 6;
    float bonus_time_per_ally_seconds = 7;
    int32 maximum_attackers_per_battle = 8;
    float same_type_attack_bonus_multiplier = 9;
    int32 maximum_energy = 10;
    float energy_delta_per_health_lost = 11;
    int32 dodge_duration_ms = 12;
    int32 minimum_player_level = 13;
    int32 swap_duration_ms = 14;
    float dodge_damage_reduction_percent = 15;
    int32 minimum_raid_player_level = 16;
}

// ref: Holoholo.Rpc.GymDefenderProto
message GymDefenderProto {
    MotivatedPokemonProto motivated_pokemon = 1;
    DeploymentTotalsProto deployment_totals = 2;
    PlayerPublicProfileProto trainer_public_profile = 3;
}

// ref: Holoholo.Rpc.GymDeployOutProto
message GymDeployOutProto {
    // ref: Holoholo.Rpc.GymDeployOutProto/Types/Result
    enum Result {
        NO_RESULT_SET = 0;
        SUCCESS = 1;
        ERROR_ALREADY_HAS_POKEMON_ON_FORT = 2;
        ERROR_OPPOSING_TEAM_OWNS_FORT = 3;
        ERROR_FORT_IS_FULL = 4;
        ERROR_NOT_IN_RANGE = 5;
        ERROR_PLAYER_HAS_NO_TEAM = 6;
        ERROR_POKEMON_NOT_FULL_HP = 7;
        ERROR_PLAYER_BELOW_MINIMUM_LEVEL = 8;
        ERROR_POKEMON_IS_BUDDY = 9;
        ERROR_FORT_DEPLOY_LOCKOUT = 10;
        ERROR_PLAYER_HAS_NO_NICKNAME = 11;
        ERROR_POI_INACCESSIBLE = 12;
        ERROR_NOT_A_POKEMON = 13;
        ERROR_TOO_MANY_OF_SAME_KIND = 14;
        ERROR_TOO_MANY_DEPLOYED = 15;
        ERROR_TEAM_DEPLOY_LOCKOUT = 16;
        ERROR_LEGENDARY_POKEMON = 17;
        ERROR_INVALID_POKEMON = 18;
        ERROR_RAID_ACTIVE = 19;
    }

    Result result = 1;
    GymStatusAndDefendersProto gym_status_and_defenders = 2;
    AwardedGymBadge awarded_gym_badge = 3;
    int64 cooldown_duration_millis = 4;
}

// ref: Holoholo.Rpc.GymDeployProto
message GymDeployProto {
    string fort_id = 1;
    uint64 pokemon_id = 2;
    double player_lat_degrees = 3;
    double player_lng_degrees = 4;
}

// ref: Holoholo.Rpc.GymDisplayProto
message GymDisplayProto {
    repeated GymEventProto gym_event = 1 [packed=false];
    int32 total_gym_cp = 2;
    double lowest_pokemon_motivation = 3;
    int32 slots_available = 4;
    int64 occupied_millis = 5;
}

// ref: Holoholo.Rpc.GymEventProto
message GymEventProto {
    // ref: Holoholo.Rpc.GymEventProto/Types/Event
    enum Event {
        UNKNOWN = 0;
        POKEMON_FED = 1;
        POKEMON_DEPLOYED = 2;
        POKEMON_RETURNED = 3;
        BATTLE_WON = 4;
        BATTLE_LOSS = 5;
        RAID_STARTED = 6;
        RAID_ENDED = 7;
        GYM_NEUTRALIZED = 8;
    }

    string trainer = 1;
    int64 timestamp_ms = 2;
    Event event = 3;
    int32 pokedex_id = 4;
    uint64 pokemon_id = 5;
}

// ref: Holoholo.Rpc.GymFeedPokemonOutProto
message GymFeedPokemonOutProto {
    // ref: Holoholo.Rpc.GymFeedPokemonOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_CANNOT_USE = 2;
        ERROR_NOT_IN_RANGE = 3;
        ERROR_POKEMON_NOT_THERE = 4;
        ERROR_POKEMON_FULL = 5;
        ERROR_NO_BERRIES_LEFT = 6;
        ERROR_WRONG_TEAM = 7;
        ERROR_WRONG_COUNT = 8;
        ERROR_TOO_FAST = 9;
        ERROR_TOO_FREQUENT = 10;
        ERROR_GYM_BUSY = 11;
        ERROR_RAID_ACTIVE = 12;
        ERROR_GYM_CLOSED = 13;
    }

    Result result = 1;
    GymStatusAndDefendersProto gym_status_and_defenders = 2;
    AwardedGymBadge gym_badge = 3;
    int32 stardust_awarded = 4;
    int32 xp_awarded = 5;
    int32 num_candy_awarded = 6;
    HoloPokemonFamilyId candy_family_id = 7;
    int64 cooldown_complete = 8;
}

// ref: Holoholo.Rpc.GymFeedPokemonProto
message GymFeedPokemonProto {
    Item item = 1;
    int32 starting_quantity = 2;
    string gym_id = 3;
    uint64 pokemon_id = 4;
    double player_lat_degrees = 5;
    double player_lng_degrees = 6;
}

// ref: Holoholo.Rpc.GymGetInfoOutProto
message GymGetInfoOutProto {
    // ref: Holoholo.Rpc.GymGetInfoOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_NOT_IN_RANGE = 2;
        ERROR_GYM_DISABLED = 3;
    }

    GymStatusAndDefendersProto gym_status_and_defenders = 1;
    string name = 2;
    string url = 3;
    Result result = 4;
    string description = 5;
    string secondary_url = 6;
    AwardedGymBadge awarded_gym_badge = 7;
    string checkin_image_url = 8;
    EventInfoProto event_info = 9;
    niantic.rpc.DisplayWeatherProto display_weather = 10;
}

// ref: Holoholo.Rpc.GymGetInfoProto
message GymGetInfoProto {
    string gym_id = 1;
    double player_lat_degrees = 2;
    double player_lng_degrees = 3;
    double gym_lat_degrees = 4;
    double gym_lng_degrees = 5;
}

// ref: Holoholo.Rpc.GymLevelSettingsProto
message GymLevelSettingsProto {
    repeated int32 required_exp = 1 [packed=false];
    repeated int32 leader_slots = 2 [packed=false];
    repeated int32 trainer_slots = 3 [packed=false];
    repeated int32 search_roll_bonus = 4 [packed=false];
}

// ref: Holoholo.Rpc.GymMembershipProto
message GymMembershipProto {
    PokemonProto pokemon = 1;
    PlayerPublicProfileProto trainer_public_profile = 2;
    PokemonProto training_pokemon = 3;
}

// ref: Holoholo.Rpc.GymStartSessionOutProto
message GymStartSessionOutProto {
    // ref: Holoholo.Rpc.GymStartSessionOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_GYM_NOT_FOUND = 2;
        ERROR_GYM_NEUTRAL = 3;
        ERROR_GYM_WRONG_TEAM = 4;
        ERROR_GYM_EMPTY = 5;
        ERROR_INVALID_DEFENDER = 6;
        ERROR_TRAINING_INVALID_ATTACKER_COUNT = 7;
        ERROR_ALL_POKEMON_FAINTED = 8;
        ERROR_TOO_MANY_BATTLES = 9;
        ERROR_TOO_MANY_PLAYERS = 10;
        ERROR_GYM_BATTLE_LOCKOUT = 11;
        ERROR_PLAYER_BELOW_MINIMUM_LEVEL = 12;
        ERROR_NOT_IN_RANGE = 13;
        ERROR_POI_INACCESSIBLE = 14;
        ERROR_RAID_ACTIVE = 15;
    }

    Result result = 1;
    BattleProto battle = 2;
}

// ref: Holoholo.Rpc.GymStartSessionProto
message GymStartSessionProto {
    string gym_id = 1;
    repeated uint64 attacking_pokemon_id = 2 [packed=false];
    uint64 defending_pokemon_id = 3;
    double player_lat_degrees = 4;
    double player_lng_degrees = 5;
}

// ref: Holoholo.Rpc.GymStateProto
message GymStateProto {
    PokemonFortProto fort_map_data = 1;
    repeated GymMembershipProto gym_membership = 2 [packed=false];
    bool deploy_lockout = 3;
}

// ref: Holoholo.Rpc.GymStatusAndDefendersProto
message GymStatusAndDefendersProto {
    PokemonFortProto pokemon_fort_proto = 1;
    repeated GymDefenderProto gym_defender = 2 [packed=false];
}

// ref: Holoholo.Rpc.HoloholoClientTelemetryOmniProto
message HoloholoClientTelemetryOmniProto {
    // ref: Holoholo.Rpc.HoloholoClientTelemetryOmniProto/TelemetryDataOneofCase
    enum TelemetryDataOneofCase {
        none = 0;
        boot_time = 1;
        frame_rate = 2;
        generic_click_telemetry = 3;
        map_events_telemetry = 4;
        spin_pokestop_telemetry = 5;
        profile_page_telemetry = 6;
        shopping_page_telemetry = 7;
        encounter_pokemon_telemetry = 8;
        catch_pokemon_telemetry = 9;
        deploy_pokemon_telemetry = 10;
        feed_pokemon_telemetry = 11;
        evolve_pokemon_telemetry = 12;
        release_pokemon_telemetry = 13;
        nickname_pokemon_telemetry = 14;
        news_page_telemetry = 15;
        item_telemetry = 16;
        battle_party_telemetry = 17;
        passcode_redeem_telemetry = 18;
        link_login_telemetry = 19;
        raid_telemetry = 20;
        push_notification_telemetry = 21;
        avatar_customization_telemetry = 22;
        read_point_of_interest_description_telemetry = 23;
        web_telemetry = 24;
        change_ar_telemetry = 25;
        weather_detail_click_telemetry = 26;
        user_issue_weather_report = 27;
        pokemon_inventory_telemetry = 28;
        social_telemetry = 29;
        check_encounter_info_telemetry = 30;
        pokemon_go_plus_telemetry = 31;
        rpc_timing_telemetry = 32;
        social_gift_count_telemetry = 33;
    }

    BootTime boot_time = 1;
    FrameRate frame_rate = 2;
    GenericClickTelemetry generic_click_telemetry = 3;
    MapEventsTelemetry map_events_telemetry = 4;
    SpinPokestopTelemetry spin_pokestop_telemetry = 5;
    ProfilePageTelemetry profile_page_telemetry = 6;
    ShoppingPageTelemetry shopping_page_telemetry = 7;
    EncounterPokemonTelemetry encounter_pokemon_telemetry = 8;
    CatchPokemonTelemetry catch_pokemon_telemetry = 9;
    DeployPokemonTelemetry deploy_pokemon_telemetry = 10;
    FeedPokemonTelemetry feed_pokemon_telemetry = 11;
    EvolvePokemonTelemetry evolve_pokemon_telemetry = 12;
    ReleasePokemonTelemetry release_pokemon_telemetry = 13;
    NicknamePokemonTelemetry nickname_pokemon_telemetry = 14;
    NewsPageTelemetry news_page_telemetry = 15;
    ItemTelemetry item_telemetry = 16;
    BattlePartyTelemetry battle_party_telemetry = 17;
    PasscodeRedeemTelemetry passcode_redeem_telemetry = 18;
    LinkLoginTelemetry link_login_telemetry = 19;
    RaidTelemetry raid_telemetry = 20;
    PushNotificationTelemetry push_notification_telemetry = 21;
    AvatarCustomizationTelemetry avatar_customization_telemetry = 22;
    ReadPointOfInterestDescriptionTelemetry read_point_of_interest_description_telemetry = 23;
    WebTelemetry web_telemetry = 24;
    ChangeArTelemetry change_ar_telemetry = 25;
    WeatherDetailClickTelemetry weather_detail_click_telemetry = 26;
    UserIssueWeatherReport user_issue_weather_report = 27;
    PokemonInventoryTelemetry pokemon_inventory_telemetry = 28;
    SocialTelemetry social_telemetry = 29;
    CheckEncounterTrayInfoTelemetry check_encounter_info_telemetry = 30;
    PokemonGoPlusTelemetry pokemon_go_plus_telemetry = 31;
    RpcResponseTelemetry rpc_timing_telemetry = 32;
    SocialGiftCountTelemetry social_gift_count_telemetry = 33;
    niantic.platform.telemetry.PlatformServerData server_data = 1001;
}

// ref: Holoholo.Rpc.HoloInventoryItemProto
message HoloInventoryItemProto {
    // ref: Holoholo.Rpc.HoloInventoryItemProto/TypeOneofCase
    enum TypeOneofCase {
        none = 0;
        pokemon = 1;
        item = 2;
        pokedex_entry = 3;
        player_stats = 4;
        player_currency = 5;
        player_camera = 6;
        inventory_upgrades = 7;
        applied_items = 8;
        egg_incubators = 9;
        pokemon_family = 10;
        quest = 11;
        avatar_item = 12;
        raid_tickets = 13;
        quests = 14;
        gift_boxes = 15;
    }

    PokemonProto pokemon = 1;
    ItemProto item = 2;
    PokedexEntryProto pokedex_entry = 3;
    PlayerStatsProto player_stats = 4;
    PlayerCurrencyProto player_currency = 5;
    PlayerCameraProto player_camera = 6;
    InventoryUpgradesProto inventory_upgrades = 7;
    AppliedItemsProto applied_items = 8;
    EggIncubatorsProto egg_incubators = 9;
    PokemonFamilyProto pokemon_family = 10;
    QuestProto quest = 11;
    AvatarItemProto avatar_item = 12;
    RaidTicketsProto raid_tickets = 13;
    QuestsProto quests = 14;
    GiftBoxesProto gift_boxes = 15;
}

// ref: Holoholo.Rpc.HoloInventoryKeyProto
message HoloInventoryKeyProto {
    // ref: Holoholo.Rpc.HoloInventoryKeyProto/TypeOneofCase
    enum TypeOneofCase {
        none = 0;
        pokemon_id = 1;
        item = 2;
        pokedex_entry_id = 3;
        player_stats = 4;
        player_currency = 5;
        player_camera = 6;
        inventory_upgrades = 7;
        applied_items = 8;
        egg_incubators = 9;
        pokemon_family_id = 10;
        quest_type = 11;
        avatar_template_id = 12;
        raid_tickets = 13;
        quests = 14;
        gift_boxes = 15;
    }

    uint64 pokemon_id = 1;
    Item item = 2;
    int32 pokedex_entry_id = 3;
    bool player_stats = 4;
    bool player_currency = 5;
    bool player_camera = 6;
    bool inventory_upgrades = 7;
    bool applied_items = 8;
    bool egg_incubators = 9;
    int32 pokemon_family_id = 10;
    QuestType quest_type = 11;
    string avatar_template_id = 12;
    bool raid_tickets = 13;
    bool quests = 14;
    bool gift_boxes = 15;
}

// ref: Holoholo.Rpc.IapItemCategoryDisplayProto
message IapItemCategoryDisplayProto {
    HoloIapItemCategory category = 1;
    string name = 2;
    bool hidden = 3;
    int32 sort_order = 4;
    bool banner_enabled = 5;
    string banner_title = 6;
    string image_url = 7;
    string description = 8;
}

// ref: Holoholo.Rpc.IapItemDisplayProto
message IapItemDisplayProto {
    string sku = 1;
    HoloIapItemCategory category = 2;
    int32 sort_order = 3;
    bool hidden = 6;
    bool sale = 7;
    string sprite_id = 8;
    string title = 9;
    string description = 10;
}

// ref: Holoholo.Rpc.IapSettingsProto
message IapSettingsProto {
    int32 daily_bonus_coins = 1;
    repeated int32 daily_defender_bonus_per_pokemon = 2 [packed=false];
    int32 daily_defender_bonus_max_defenders = 3;
    repeated string daily_defender_bonus_currency = 4 [packed=false];
    int64 min_time_between_claims_ms = 5;
    bool daily_bonus_enabled = 6;
    bool daily_defender_bonus_enabled = 7;
}

// ref: Holoholo.Rpc.IncenseAttributesProto
message IncenseAttributesProto {
    int32 incense_lifetime_seconds = 1;
    repeated HoloPokemonType pokemon_type = 2 [packed=false];
    float pokemon_incense_type_probability = 3;
    int32 standing_time_between_encounters_sec = 4;
    int32 moving_time_between_encounter_sec = 5;
    int32 distance_required_for_shorter_interval_meters = 6;
    int32 pokemon_attracted_length_sec = 7;
}

// ref: Holoholo.Rpc.IncenseEncounterOutProto
message IncenseEncounterOutProto {
    // ref: Holoholo.Rpc.IncenseEncounterOutProto/Types/Result
    enum Result {
        INCENSE_ENCOUNTER_UNKNOWN = 0;
        INCENSE_ENCOUNTER_SUCCESS = 1;
        INCENSE_ENCOUNTER_NOT_AVAILABLE = 2;
        POKEMON_INVENTORY_FULL = 3;
    }

    Result result = 1;
    PokemonProto pokemon = 2;
    CaptureProbabilityProto capture_probability = 3;
    Item active_item = 4;
    int32 arplus_attempts_until_flee = 5;
}

// ref: Holoholo.Rpc.IncenseEncounterProto
message IncenseEncounterProto {
    int64 encounter_id = 1;
    string encounter_location = 2;
}

// ref: Holoholo.Rpc.InventorySettingsProto
message InventorySettingsProto {
    int32 max_pokemon = 1;
    int32 max_bag_items = 2;
    int32 base_pokemon = 3;
    int32 base_bag_items = 4;
    int32 base_eggs = 5;
}

// ref: Holoholo.Rpc.InventoryUpgradeAttributesProto
message InventoryUpgradeAttributesProto {
    int32 additional_storage = 1;
    InventoryUpgradeType upgrade_type = 2;
}

// ref: Holoholo.Rpc.InventoryUpgradeProto
message InventoryUpgradeProto {
    Item item = 1;
    InventoryUpgradeType upgrade_type = 2;
    int32 additional_storage = 3;
}

// ref: Holoholo.Rpc.InventoryUpgradesProto
message InventoryUpgradesProto {
    repeated InventoryUpgradeProto inventory_upgrade = 1 [packed=false];
}

// ref: Holoholo.Rpc.ItemProto
message ItemProto {
    Item item = 1;
    int32 count = 2;
    bool unseen = 3;
}

// ref: Holoholo.Rpc.ItemRewardProto
message ItemRewardProto {
    Item item = 1;
    int32 amount = 2;
}

// ref: Holoholo.Rpc.ItemSettingsProto
message ItemSettingsProto {
    Item unique_id = 1;
    HoloItemType item_type = 2;
    HoloItemCategory category = 3;
    float drop_freq = 4;
    int32 drop_trainer_level = 5;
    PokeBallAttributesProto pokeball = 6;
    PotionAttributesProto potion = 7;
    ReviveAttributesProto revive = 8;
    BattleAttributesProto battle = 9;
    FoodAttributesProto food = 10;
    InventoryUpgradeAttributesProto inventory_upgrade = 11;
    ExperienceBoostAttributesProto xp_boost = 12;
    IncenseAttributesProto incense = 13;
    EggIncubatorAttributesProto egg_incubator = 14;
    FortModifierAttributesProto fort_modifier = 15;
    StardustBoostAttributesProto stardust_boost = 16;
}

// ref: Holoholo.Rpc.ItemTelemetry
message ItemTelemetry {
    ItemUseTelemetryIds item_use_click_id = 1;
    int32 item_id = 2;
}

// ref: Holoholo.Rpc.JoinLobbyOutProto
message JoinLobbyOutProto {
    // ref: Holoholo.Rpc.JoinLobbyOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_NOT_IN_RANGE = 2;
        ERROR_RAID_UNAVAILABLE = 3;
        ERROR_RAID_COMPLETED = 4;
        ERROR_NO_AVAILABLE_LOBBIES = 5;
        ERROR_PLAYER_BELOW_MINIMUM_LEVEL = 6;
        ERROR_POI_INACCESSIBLE = 7;
        ERROR_GYM_LOCKOUT = 8;
        ERROR_NO_TICKET = 9;
    }

    Result result = 1;
    LobbyProto lobby = 2;
}

// ref: Holoholo.Rpc.JoinLobbyProto
message JoinLobbyProto {
    int64 raid_seed = 1;
    string gym_id = 2;
    repeated int32 lobby_id = 3 [packed=false];
    bool private = 4;
    double player_lat_degrees = 5;
    double player_lng_degrees = 6;
    double gym_lat_degrees = 7;
    double gym_lng_degrees = 8;
}

// ref: Holoholo.Rpc.LeaveLobbyOutProto
message LeaveLobbyOutProto {
    // ref: Holoholo.Rpc.LeaveLobbyOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_RAID_UNAVAILABLE = 2;
        ERROR_LOBBY_NOT_FOUND = 3;
    }

    Result result = 1;
    LobbyProto lobby = 2;
}

// ref: Holoholo.Rpc.LeaveLobbyProto
message LeaveLobbyProto {
    int64 raid_seed = 1;
    string gym_id = 2;
    repeated int32 lobby_id = 3 [packed=false];
}

// ref: Holoholo.Rpc.LeveledUpFriendsProto
message LeveledUpFriendsProto {
    repeated PlayerPublicProfileProto friend_profiles = 1 [packed=false];
    repeated FriendshipLevelDataProto friend_milestone_levels = 2 [packed=false];
}

// ref: Holoholo.Rpc.LevelSettingsProto
message LevelSettingsProto {
    double trainer_cp_modifier = 2;
    double trainer_difficulty_modifier = 3;
}

// ref: Holoholo.Rpc.LevelUpRewardsOutProto
message LevelUpRewardsOutProto {
    // ref: Holoholo.Rpc.LevelUpRewardsOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        AWARDED_ALREADY = 2;
    }

    Result result = 1;
    repeated AwardItemProto items = 2 [packed=false];
    repeated Item items_unlocked = 4 [packed=false];
    repeated string avatar_template_ids = 5 [packed=false];
}

// ref: Holoholo.Rpc.LevelUpRewardsProto
message LevelUpRewardsProto {
    int32 level = 1;
}

// ref: Holoholo.Rpc.LinkLoginTelemetry
message LinkLoginTelemetry {
    bool linked = 1;
    string success = 2;
    string error = 3;
    string active_auth_provider_id = 4;
    string provider = 5;
}

// ref: Holoholo.Rpc.ListAvatarCustomizationsOutProto
message ListAvatarCustomizationsOutProto {
    // ref: Holoholo.Rpc.ListAvatarCustomizationsOutProto/Types/Label
    enum Label {
        UNSET_LABEL = 0;
        DEFAULT = 1;
        OWNED = 2;
        FEATURED = 3;
        NEW = 4;
        SALE = 5;
        PURCHASABLE = 6;
        UNLOCKABLE = 7;
        VIEWED = 8;
        LOCKED_PURCHASABLE = 9;
    }

    // ref: Holoholo.Rpc.ListAvatarCustomizationsOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        FAILURE = 2;
    }

    // ref: Holoholo.Rpc.ListAvatarCustomizationsOutProto/Types/AvatarCustomization
    message AvatarCustomization {
        string avatar_template_id = 1;
        repeated ListAvatarCustomizationsOutProto.Label labels = 2 [packed=false];
    }

    Result result = 1;
    repeated AvatarCustomization avatar_customizations = 2 [packed=false];
}

// ref: Holoholo.Rpc.ListAvatarCustomizationsProto
message ListAvatarCustomizationsProto {
    // ref: Holoholo.Rpc.ListAvatarCustomizationsProto/Types/Filter
    enum Filter {
        UNSET = 0;
        ALL = 1;
        DEFAULT = 2;
        OWNED = 3;
        FEATURED = 4;
        PURCHASABLE = 5;
        UNLOCKABLE = 6;
    }

    PlayerAvatarType avatar_type = 1;
    repeated AvatarCustomizationProto.Slot slot = 2 [packed=false];
    repeated Filter filters = 3 [packed=false];
    int32 start = 4;
    int32 limit = 5;
}

// ref: Holoholo.Rpc.ListGymBadgesOutProto
message ListGymBadgesOutProto {
    repeated AwardedGymBadge gym_badge = 1 [packed=false];
}

// ref: Holoholo.Rpc.ListGymBadgesProto
message ListGymBadgesProto {
}

// ref: Holoholo.Rpc.LobbyPokemonProto
message LobbyPokemonProto {
    int64 id = 1;
    HoloPokemonId pokedex_id = 2;
    int32 cp = 3;
    float percent_health = 4;
}

// ref: Holoholo.Rpc.LobbyProto
message LobbyProto {
    repeated int32 lobby_id = 1 [packed=false];
    repeated BattleParticipantProto players = 2 [packed=false];
    int64 player_join_end_ms = 3;
    int64 pokemon_selection_end_ms = 4;
    int64 raid_battle_start_ms = 5;
    int64 raid_battle_end_ms = 6;
    string raid_battle_id = 8;
    string owner_nickname = 9;
    bool private = 10;
    int64 creation_ms = 11;
    int32 battle_plfe_instance = 12;
    niantic.rpc.GameplayWeatherProto.WeatherCondition weather_condition = 13;
}

// ref: Holoholo.Rpc.LoginActionTelemetry
message LoginActionTelemetry {
    LoginActionTelemetryIds login_action_id = 1;
    bool first_time = 2;
    string success = 3;
    string error = 4;
    string intent_existing = 5;
    string auth_status = 6;
}

// ref: Holoholo.Rpc.LoginSettingsProto
message LoginSettingsProto {
    bool enable_multi_login_linking = 1;
}

// ref: Holoholo.Rpc.LootItemProto
message LootItemProto {
    // ref: Holoholo.Rpc.LootItemProto/TypeOneofCase
    enum TypeOneofCase {
        none = 0;
        item = 1;
        stardust = 2;
        pokecoin = 3;
        pokemon_candy = 4;
        experience = 6;
        pokemon_egg = 7;
    }

    Item item = 1;
    bool stardust = 2;
    bool pokecoin = 3;
    HoloPokemonId pokemon_candy = 4;
    int32 count = 5;
    bool experience = 6;
    PokemonProto pokemon_egg = 7;
}

// ref: Holoholo.Rpc.LootProto
message LootProto {
    repeated LootItemProto loot_item = 1 [packed=false];
}

// ref: Holoholo.Rpc.LuckyPokemonSettingsProto
message LuckyPokemonSettingsProto {
    float power_up_stardust_discount_percent = 1;
}

// ref: Holoholo.Rpc.MapEventsTelemetry
message MapEventsTelemetry {
    MapEventsTelemetryIds map_event_click_id = 1;
    string fort_id = 2;
    repeated int32 guard_pokemon_level = 3 [packed=false];
    int32 team = 4;
    bool is_player_in_range = 5;
}

// ref: Holoholo.Rpc.MapPokemonProto
message MapPokemonProto {
    string spawnpoint_id = 1;
    uint64 encounter_id = 2;
    int32 pokedex_type_id = 3;
    int64 expiration_time_ms = 4;
    double latitude = 5;
    double longitude = 6;
    PokemonDisplayProto pokemon_display = 7;
}

// ref: Holoholo.Rpc.MapSettingsProto
message MapSettingsProto {
    double pokemon_visible_range = 1;
    double poke_nav_range_meters = 2;
    double encounter_range_meters = 3;
    float get_map_objects_min_refresh_seconds = 4;
    float get_map_objects_max_refresh_seconds = 5;
    float get_map_objects_min_distance_meters = 6;
    string google_maps_api_key = 7;
    int32 min_nearby_hide_sightings = 8;
    bool enable_special_weather = 9;
    float special_weather_probability = 10;
}

// ref: Holoholo.Rpc.MarkReadNewsArticleOutProto
message MarkReadNewsArticleOutProto {
    // ref: Holoholo.Rpc.MarkReadNewsArticleOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        NO_NEWS_FOUND = 2;
    }

    Result result = 1;
}

// ref: Holoholo.Rpc.MarkReadNewsArticleProto
message MarkReadNewsArticleProto {
    repeated string news_ids = 1 [packed=false];
}

// ref: Holoholo.Rpc.MarkTutorialCompleteOutProto
message MarkTutorialCompleteOutProto {
    bool success = 1;
    ClientPlayerProto player = 2;
}

// ref: Holoholo.Rpc.MarkTutorialCompleteProto
message MarkTutorialCompleteProto {
    repeated TutorialCompletion tutorial_complete = 1 [packed=false];
    bool send_marketing_emails = 2;
    bool send_push_notifications = 3;
}

// ref: Holoholo.Rpc.MotivatedPokemonProto
message MotivatedPokemonProto {
    PokemonProto pokemon = 1;
    int64 deploy_ms = 2;
    int32 cp_when_deployed = 3;
    double motivation_now = 4;
    int32 cp_now = 5;
    float berry_value = 6;
    int64 feed_cooldown_duration_millis = 7;
    repeated FoodValue food_value = 8 [packed=false];
}

// ref: Holoholo.Rpc.MoveSequenceSettingsProto
message MoveSequenceSettingsProto {
    repeated string sequence = 1 [packed=false];
}

// ref: Holoholo.Rpc.MoveSettingsProto
message MoveSettingsProto {
    HoloPokemonMove unique_id = 1;
    int32 animation_id = 2;
    HoloPokemonType type = 3;
    float power = 4;
    float accuracy_chance = 5;
    float critical_chance = 6;
    float heal_scalar = 7;
    float stamina_loss_scalar = 8;
    int32 trainer_level_min = 9;
    int32 trainer_level_max = 10;
    string vfx_name = 11;
    int32 duration_ms = 12;
    int32 damage_window_start_ms = 13;
    int32 damage_window_end_ms = 14;
    int32 energy_delta = 15;
}

// ref: Holoholo.Rpc.MultiPartQuestProto
message MultiPartQuestProto {
    repeated QuestProto sub_quests = 1 [packed=false];
}

// ref: Holoholo.Rpc.NearbyPokemonProto
message NearbyPokemonProto {
    int32 pokedex_number = 1;
    float distance_meters = 2;
    uint64 encounter_id = 3;
    string fort_id = 4;
    string fort_image_url = 5;
    PokemonDisplayProto pokemon_display = 6;
}

// ref: Holoholo.Rpc.NewsArticleProto
message NewsArticleProto {
    // ref: Holoholo.Rpc.NewsArticleProto/Types/NewsTemplate
    enum NewsTemplate {
        UNSET = 0;
        DEFAULT_TEMPLATE = 1;
    }

    string id = 1;
    repeated string image_url = 2 [packed=false];
    string header_key = 3;
    string subheader_key = 4;
    string main_text_key = 5;
    int64 timestamp = 6;
    NewsTemplate template = 7;
    bool enabled = 8;
    bool article_read = 9;
}

// ref: Holoholo.Rpc.NewsGlobalSettingsProto
message NewsGlobalSettingsProto {
    bool enable_news = 1;
}

// ref: Holoholo.Rpc.NewsPageTelemetry
message NewsPageTelemetry {
    NewsPageTelemetryIds news_page_click_id = 1;
}

// ref: Holoholo.Rpc.NewsProto
message NewsProto {
    string news_bundle_id = 1;
    repeated string exclusive_countries = 2 [packed=false];
}

// ref: Holoholo.Rpc.NewsSettingProto
message NewsSettingProto {
    repeated NewsProto news_protos = 1 [packed=false];
}

// ref: Holoholo.Rpc.NicknamePokemonOutProto
message NicknamePokemonOutProto {
    // ref: Holoholo.Rpc.NicknamePokemonOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_INVALID_NICKNAME = 2;
        ERROR_POKEMON_NOT_FOUND = 3;
        ERROR_POKEMON_IS_EGG = 4;
        ERROR_FILTERED_NICKNAME = 5;
        ERROR_EXCEEDED_CHANGE_LIMIT = 6;
    }

    Result result = 1;
}

// ref: Holoholo.Rpc.NicknamePokemonProto
message NicknamePokemonProto {
    uint64 pokemon_id = 1;
    string nickname = 2;
}

// ref: Holoholo.Rpc.NicknamePokemonTelemetry
message NicknamePokemonTelemetry {
    PokemonTelemetry pokemon = 1;
    string nickname = 2;
}

// ref: Holoholo.Rpc.NotificationSettingsProto
message NotificationSettingsProto {
    bool pull_notifications = 1;
    bool show_notifications = 2;
}

// ref: Holoholo.Rpc.OnboardingSettingsProto
message OnboardingSettingsProto {
    bool skip_avatar_customization = 1;
    bool disable_initial_ar_prompt = 2;
    uint32 ar_prompt_player_level = 3;
}

// ref: Holoholo.Rpc.OpenGiftLogEntry
message OpenGiftLogEntry {
    // ref: Holoholo.Rpc.OpenGiftLogEntry/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
    }

    Result result = 1;
    string friend_codename = 2;
    LootProto items = 3;
    repeated PokemonProto pokemon_eggs = 4 [packed=false];
}

// ref: Holoholo.Rpc.OpenGiftOutProto
message OpenGiftOutProto {
    // ref: Holoholo.Rpc.OpenGiftOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_UNKNOWN = 2;
        ERROR_PLAYER_BAG_FULL = 3;
        ERROR_PLAYER_LIMIT_REACHED = 4;
        ERROR_GIFT_DOES_NOT_EXIST = 5;
        ERROR_FRIEND_NOT_FOUND = 6;
        ERROR_INVALID_PLAYER_ID = 7;
        ERROR_FRIEND_UPDATE = 8;
    }

    Result result = 1;
    LootProto items = 2;
    PokemonProto egg_pokemon = 3;
    FriendshipLevelDataProto updated_friendship_data = 4;
    PlayerPublicProfileProto friend_profile = 5;
}

// ref: Holoholo.Rpc.OpenGiftProto
message OpenGiftProto {
    string player_id = 1;
    uint64 giftbox_id = 2;
}

// ref: Holoholo.Rpc.OpenTradingOutProto
message OpenTradingOutProto {
    // ref: Holoholo.Rpc.OpenTradingOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_UNKNOWN = 2;
        ERROR_FRIEND_NOT_FOUND = 3;
        ERROR_INVALID_PLAYER_ID = 4;
        ERROR_INVALID_STATE = 5;
        ERROR_STATE_HANDLER = 6;
        ERROR_TRADING_EXPIRED = 7;
        ERROR_TRADING_COOLDOWN = 8;
        ERROR_PLAYER_ALREADY_OPENED = 9;
        ERROR_FRIEND_OUT_OF_RANGE = 10;
        ERROR_PLAYER_BELOW_MINIMUM_LEVEL = 11;
        ERROR_PLAYER_REACHED_DAILY_LIMIT = 12;
        ERROR_FRIEND_REACHED_DAILY_LIMIT = 13;
        ERROR_PLAYER_NOT_ENOUGH_STARDUST = 14;
        ERROR_FRIEND_NOT_ENOUGH_STARDUST = 15;
        ERROR_FRIEND_BELOW_MINIMUM_LEVEL = 16;
    }

    Result result = 1;
    TradingProto trading = 2;
}

// ref: Holoholo.Rpc.OpenTradingProto
message OpenTradingProto {
    string player_id = 1;
}

// ref: Holoholo.Rpc.ParticipationProto
message ParticipationProto {
    int32 individual_damage_pokeballs = 1;
    int32 team_damage_pokeballs = 2;
    int32 gym_ownership_pokeballs = 3;
    int32 base_pokeballs = 4;
    double blue_percentage = 5;
    double red_percentage = 6;
    double yellow_percentage = 7;
    float bonus_item_multiplier = 8;
    FriendshipLevelMilestone highest_friendship_milestone = 9;
    int32 highest_friendship_pokeballs = 10;
}

// ref: Holoholo.Rpc.PasscodeRedeemTelemetry
message PasscodeRedeemTelemetry {
    string result = 1;
    string passcode = 2;
    string country_code = 3;
    string language_code = 4;
    string bundle_version = 5;
}

// ref: Holoholo.Rpc.PasscodeRewardsLogEntry
message PasscodeRewardsLogEntry {
    // ref: Holoholo.Rpc.PasscodeRewardsLogEntry/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
    }

    Result result = 1;
    string passcode = 2;
    RedeemPasscodeRewardProto rewards = 3;
}

// ref: Holoholo.Rpc.PasscodeSettingsProto
message PasscodeSettingsProto {
    bool show_passcode_in_store = 1;
}

// ref: Holoholo.Rpc.PlayerAvatarProto
message PlayerAvatarProto {
    int32 skin = 2;
    int32 hair = 3;
    int32 shirt = 4;
    int32 pants = 5;
    int32 hat = 6;
    int32 shoes = 7;
    int32 avatar = 8;
    int32 eyes = 9;
    int32 backpack = 10;
    string avatar_hair = 11;
    string avatar_shirt = 12;
    string avatar_pants = 13;
    string avatar_hat = 14;
    string avatar_shoes = 15;
    string avatar_eyes = 16;
    string avatar_backpack = 17;
    string avatar_gloves = 18;
    string avatar_socks = 19;
    string avatar_belt = 20;
    string avatar_glasses = 21;
    string avatar_necklace = 22;
}

// ref: Holoholo.Rpc.PlayerBadgeProto
message PlayerBadgeProto {
    HoloBadgeType badge_type = 1;
    int32 rank = 2;
    int32 start_value = 3;
    int32 end_value = 4;
    double current_value = 5;
}

// ref: Holoholo.Rpc.PlayerCameraProto
message PlayerCameraProto {
    bool default_camera = 1;
}

// ref: Holoholo.Rpc.PlayerCurrencyProto
message PlayerCurrencyProto {
    int32 gems = 1;
}

// ref: Holoholo.Rpc.PlayerFriendDisplayProto
message PlayerFriendDisplayProto {
    PokemonDisplayProto buddy = 1;
    int32 buddy_display_pokemon_id = 2;
    string buddy_pokemon_nickname = 3;
    PokemonDisplayProto last_pokemon_caught = 4;
    int32 last_pokemon_caught_display_id = 5;
    int64 last_pokemon_caught_timestamp = 6;
    int32 buddy_candy_awarded = 7;
}

// ref: Holoholo.Rpc.PlayerLevelSettingsProto
message PlayerLevelSettingsProto {
    repeated int32 rank_num = 1 [packed=false];
    repeated int32 required_exp = 2 [packed=false];
    repeated float cp_multiplier = 3 [packed=false];
    int32 max_egg_player_level = 4;
    int32 max_encounter_player_level = 5;
    int32 max_raid_encounter_player_level = 6;
    int32 max_quest_encounter_player_level = 7;
}

// ref: Holoholo.Rpc.PlayerLocaleProto
message PlayerLocaleProto {
    string country = 1;
    string language = 2;
    string timezone = 3;
}

// ref: Holoholo.Rpc.PlayerProfileOutProto
message PlayerProfileOutProto {
    // ref: Holoholo.Rpc.PlayerProfileOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
    }

    // ref: Holoholo.Rpc.PlayerProfileOutProto/Types/GymBadges
    message GymBadges {
        repeated AwardedGymBadge gym_badge = 1 [packed=false];
        int32 total = 2;
    }

    Result result = 1;
    int64 start_time = 2;
    repeated PlayerBadgeProto badges = 3 [packed=false];
    GymBadges gym_badges = 4;
}

// ref: Holoholo.Rpc.PlayerProfileProto
message PlayerProfileProto {
    string player_name = 1;
}

// ref: Holoholo.Rpc.PlayerPublicProfileProto
message PlayerPublicProfileProto {
    string name = 1;
    int32 level = 2;
    PlayerAvatarProto avatar = 3;
    Team team = 4;
    int32 battles_won = 5;
    float km_walked = 6;
    int32 caught_pokemon = 7;
    GymBadgeType gym_badge_type = 8;
    repeated PlayerBadgeProto badges = 9 [packed=false];
    int64 experience = 10;
    bool has_shared_ex_pass = 11;
}

// ref: Holoholo.Rpc.PlayerRaidInfoProto
message PlayerRaidInfoProto {
    int32 total_completed_raids = 3;
    int32 total_completed_legendary_raids = 4;
    repeated RaidProto raids = 5 [packed=false];
}

// ref: Holoholo.Rpc.PlayerStatsProto
message PlayerStatsProto {
    int32 level = 1;
    int64 experience = 2;
    int64 prev_level_exp = 3;
    int64 next_level_exp = 4;
    float km_walked = 5;
    int32 num_pokemon_encountered = 6;
    int32 num_unique_pokedex_entries = 7;
    int32 num_pokemon_captured = 8;
    int32 num_evolutions = 9;
    int32 poke_stop_visits = 10;
    int32 number_of_pokeball_thrown = 11;
    int32 num_eggs_hatched = 12;
    int32 big_magikarp_caught = 13;
    int32 num_battle_attack_won = 14;
    int32 num_battle_attack_total = 15;
    int32 num_battle_defended_won = 16;
    int32 num_battle_training_won = 17;
    int32 num_battle_training_total = 18;
    int32 prestige_raised_total = 19;
    int32 prestige_dropped_total = 20;
    int32 num_pokemon_deployed = 21;
    repeated int32 num_pokemon_caught_by_type = 22 [packed=false];
    int32 small_rattata_caught = 23;
    double used_km_pool = 24;
    int64 last_km_refill_ms = 25;
    int32 num_raid_battle_won = 26;
    int32 num_raid_battle_total = 27;
    int32 num_legendary_battle_won = 28;
    int32 num_legendary_battle_total = 29;
    int32 num_berries_fed = 30;
    int64 total_defended_ms = 31;
    repeated HoloBadgeType event_badges = 32 [packed=false];
    float km_walked_past_active_day = 33;
    int32 num_challenge_quests_completed = 34;
    int32 num_trades = 35;
    int32 num_max_level_friends = 36;
    int64 trade_accumulated_distance_km = 37;
}

// ref: Holoholo.Rpc.PokeBallAttributesProto
message PokeBallAttributesProto {
    HoloItemEffect item_effect = 1;
    float capture_multi = 2;
    float capture_multi_effect = 3;
    float item_effect_mod = 4;
}

// ref: Holoholo.Rpc.PokeCandyProto
message PokeCandyProto {
    uint64 pokemon_id = 1;
    int32 candy_count = 2;
}

// ref: Holoholo.Rpc.PokedexEntryProto
message PokedexEntryProto {
    int32 pokedex_entry_number = 1;
    int32 times_encountered = 2;
    int32 times_captured = 3;
    int32 evolution_stone_pieces = 4;
    int32 evolution_stones = 5;
    repeated PokemonDisplayProto.Costume captured_costumes = 6 [packed=false];
    repeated PokemonDisplayProto.Form captured_forms = 7 [packed=false];
    repeated PokemonDisplayProto.Gender captured_genders = 8 [packed=false];
    bool captured_shiny = 9;
    repeated PokemonDisplayProto.Costume encountered_costumes = 10 [packed=false];
    repeated PokemonDisplayProto.Form encountered_forms = 11 [packed=false];
    repeated PokemonDisplayProto.Gender encountered_genders = 12 [packed=false];
    bool encountered_shiny = 13;
    int32 times_lucky_received = 14;
}

// ref: Holoholo.Rpc.PokemonCameraAttributesProto
message PokemonCameraAttributesProto {
    float disk_radius_m = 1;
    float cyl_radius_m = 2;
    float cyl_height_m = 3;
    float cyl_ground_m = 4;
    float shoulder_mode_scale = 5;
}

// ref: Holoholo.Rpc.PokemonCandyRewardProto
message PokemonCandyRewardProto {
    HoloPokemonId pokemon_id = 1;
    int32 amount = 2;
}

// ref: Holoholo.Rpc.PokemonDisplayProto
message PokemonDisplayProto {
    // ref: Holoholo.Rpc.PokemonDisplayProto/Types/Costume
    enum Costume {
        UNSET = 0;
        HOLIDAY_2016 = 1;
        ANNIVERSARY = 2;
        ONE_YEAR_ANNIVERSARY = 3;
        HALLOWEEN_2017 = 4;
        SUMMER_2018 = 5;
    }

    // ref: Holoholo.Rpc.PokemonDisplayProto/Types/Form
    enum Form {
        FORM_UNSET = 0;
        UNOWN_A = 1;
        UNOWN_B = 2;
        UNOWN_C = 3;
        UNOWN_D = 4;
        UNOWN_E = 5;
        UNOWN_F = 6;
        UNOWN_G = 7;
        UNOWN_H = 8;
        UNOWN_I = 9;
        UNOWN_J = 10;
        UNOWN_K = 11;
        UNOWN_L = 12;
        UNOWN_M = 13;
        UNOWN_N = 14;
        UNOWN_O = 15;
        UNOWN_P = 16;
        UNOWN_Q = 17;
        UNOWN_R = 18;
        UNOWN_S = 19;
        UNOWN_T = 20;
        UNOWN_U = 21;
        UNOWN_V = 22;
        UNOWN_W = 23;
        UNOWN_X = 24;
        UNOWN_Y = 25;
        UNOWN_Z = 26;
        UNOWN_EXCLAMATION_POINT = 27;
        UNOWN_QUESTION_MARK = 28;
        CASTFORM_NORMAL = 29;
        CASTFORM_SUNNY = 30;
        CASTFORM_RAINY = 31;
        CASTFORM_SNOWY = 32;
        DEOXYS_NORMAL = 33;
        DEOXYS_ATTACK = 34;
        DEOXYS_DEFENSE = 35;
        DEOXYS_SPEED = 36;
        SPINDA_00 = 37;
        SPINDA_01 = 38;
        SPINDA_02 = 39;
        SPINDA_03 = 40;
        SPINDA_04 = 41;
        SPINDA_05 = 42;
        SPINDA_06 = 43;
        SPINDA_07 = 44;
        RATTATA_NORMAL = 45;
        RATTATA_ALOLA = 46;
        RATICATE_NORMAL = 47;
        RATICATE_ALOLA = 48;
        RAICHU_NORMAL = 49;
        RAICHU_ALOLA = 50;
        SANDSHREW_NORMAL = 51;
        SANDSHREW_ALOLA = 52;
        SANDSLASH_NORMAL = 53;
        SANDSLASH_ALOLA = 54;
        VULPIX_NORMAL = 55;
        VULPIX_ALOLA = 56;
        NINETALES_NORMAL = 57;
        NINETALES_ALOLA = 58;
        DIGLETT_NORMAL = 59;
        DIGLETT_ALOLA = 60;
        DUGTRIO_NORMAL = 61;
        DUGTRIO_ALOLA = 62;
        MEOWTH_NORMAL = 63;
        MEOWTH_ALOLA = 64;
        PERSIAN_NORMAL = 65;
        PERSIAN_ALOLA = 66;
        GEODUDE_NORMAL = 67;
        GEODUDE_ALOLA = 68;
        GRAVELER_NORMAL = 69;
        GRAVELER_ALOLA = 70;
        GOLEM_NORMAL = 71;
        GOLEM_ALOLA = 72;
        GRIMER_NORMAL = 73;
        GRIMER_ALOLA = 74;
        MUK_NORMAL = 75;
        MUK_ALOLA = 76;
        EXEGGUTOR_NORMAL = 77;
        EXEGGUTOR_ALOLA = 78;
        MAROWAK_NORMAL = 79;
        MAROWAK_ALOLA = 80;
    }

    // ref: Holoholo.Rpc.PokemonDisplayProto/Types/Gender
    enum Gender {
        GENDER_UNSET = 0;
        MALE = 1;
        FEMALE = 2;
        GENDERLESS = 3;
    }

    Costume costume = 1;
    Gender gender = 2;
    bool shiny = 3;
    Form form = 4;
    niantic.rpc.GameplayWeatherProto.WeatherCondition weather_boosted_condition = 5;
}

// ref: Holoholo.Rpc.PokemonEncounterAttributesProto
message PokemonEncounterAttributesProto {
    float base_capture_rate = 1;
    float base_flee_rate = 2;
    float collision_radius_m = 3;
    float collision_height_m = 4;
    float collision_head_radius_m = 5;
    HoloPokemonMovementType movement_type = 6;
    float movement_timer_s = 7;
    float jump_time_s = 8;
    float attack_timer_s = 9;
    int32 bonus_candy_capture_reward = 10;
    int32 bonus_stardust_capture_reward = 11;
    float attack_probability = 12;
    float dodge_probability = 13;
    float dodge_duration_s = 14;
    float dodge_distance = 15;
    float camera_distance = 16;
    float min_pokemon_action_frequency_s = 17;
    float max_pokemon_action_frequency_s = 18;
}

// ref: Holoholo.Rpc.PokemonEncounterRewardProto
message PokemonEncounterRewardProto {
    // ref: Holoholo.Rpc.PokemonEncounterRewardProto/TypeOneofCase
    enum TypeOneofCase {
        none = 0;
        pokemon_id = 1;
        use_quest_pokemon_encounter_distribuition = 2;
    }

    HoloPokemonId pokemon_id = 1;
    bool use_quest_pokemon_encounter_distribuition = 2;
    PokemonDisplayProto pokemon_display = 3;
    bool is_hidden_ditto = 4;
    PokemonDisplayProto ditto_display = 5;
}

// ref: Holoholo.Rpc.PokemonFamilyProto
message PokemonFamilyProto {
    HoloPokemonFamilyId family_id = 1;
    int32 candy = 2;
}

// ref: Holoholo.Rpc.PokemonFortProto
message PokemonFortProto {
    string fort_id = 1;
    int64 last_modified_ms = 2;
    double latitude = 3;
    double longitude = 4;
    int32 team = 5;
    int32 guard_pokemon_id = 6;
    int32 guard_pokemon_level = 7;
    bool enabled = 8;
    FortType fort_type = 9;
    int64 gym_points = 10;
    bool is_in_battle = 11;
    repeated Item active_fort_modifier = 12 [packed=false];
    MapPokemonProto active_pokemon = 13;
    int64 cooldown_complete_ms = 14;
    FortSponsor.Sponsor sponsor = 15;
    FortRenderingType.RenderingType rendering_type = 16;
    int64 deploy_lockout_end_ms = 17;
    PokemonDisplayProto guard_pokemon_display = 18;
    bool closed = 19;
    RaidInfoProto raid_info = 20;
    GymDisplayProto gym_display = 21;
    bool visited = 22;
    int64 same_team_deploy_lockout_end_ms = 23;
    bool allow_checkin = 24;
    string image_url = 25;
    bool in_event = 26;
    string banner_url = 27;
    string partner_id = 28;
    bool challenge_quest_completed = 30;
}

// ref: Holoholo.Rpc.PokemonGoPlusTelemetry
message PokemonGoPlusTelemetry {
    PokemonGoPlusIds pgp_event_ids = 1;
    int32 count = 2;
    int32 version = 3;
}

// ref: Holoholo.Rpc.PokemonInfo
message PokemonInfo {
    PokemonProto pokemon = 1;
    int32 current_health = 2;
    int32 current_energy = 3;
}

// ref: Holoholo.Rpc.PokemonInventoryTelemetry
message PokemonInventoryTelemetry {
    PokemonInventoryTelemetryIds pokemon_inventory_click_ids = 1;
    string sort_id = 2;
}

// ref: Holoholo.Rpc.PokemonProto
message PokemonProto {
    uint64 id = 1;
    int32 pokemon_id = 2;
    int32 cp = 3;
    int32 stamina = 4;
    int32 max_stamina = 5;
    int32 move1 = 6;
    int32 move2 = 7;
    string deployed_fort_id = 8;
    string owner_name = 9;
    bool is_egg = 10;
    double egg_km_walked_target = 11;
    double egg_km_walked_start = 12;
    PokemonCreateContext origin = 14;
    float height_m = 15;
    float weight_kg = 16;
    int32 individual_attack = 17;
    int32 individual_defense = 18;
    int32 individual_stamina = 19;
    float cp_multiplier = 20;
    Item pokeball = 21;
    int64 captured_s2_cell_id = 22;
    int32 battles_attacked = 23;
    int32 battles_defended = 24;
    string egg_incubator_id = 25;
    int64 creation_time_ms = 26;
    int32 num_upgrades = 27;
    float additional_cp_multiplier = 28;
    bool favorite = 29;
    string nickname = 30;
    bool from_fort = 31;
    int32 buddy_candy_awarded = 32;
    float buddy_km_walked = 33;
    int32 display_pokemon_id = 34;
    int32 display_cp = 35;
    PokemonDisplayProto pokemon_display = 36;
    bool is_bad = 37;
    bool hatched_from_egg = 38;
    int32 coins_returned = 39;
    int64 deployed_duration_ms = 40;
    int64 deployed_returned_timestamp_ms = 41;
    float cp_multiplier_before_trading = 42;
    int32 trading_original_owner_hash = 43;
    string original_owner_nickname = 44;
    int64 traded_time_ms = 45;
    bool is_lucky = 46;
}

// ref: Holoholo.Rpc.PokemonScaleSettingProto
message PokemonScaleSettingProto {
    // ref: Holoholo.Rpc.PokemonScaleSettingProto/Types/PokemonScaleMode
    enum PokemonScaleMode {
        natural_scale = 0;
        gui_scale = 1;
        battle_pokemon_scale = 2;
        raid_boss_scale = 3;
        gym_topper_scale = 4;
        map_pokemon_scale = 5;
    }

    PokemonScaleMode pokemon_scale_mode = 1;
    float min_height = 2;
    float max_height = 3;
}

// ref: Holoholo.Rpc.PokemonSettingsProto
message PokemonSettingsProto {
    // ref: Holoholo.Rpc.PokemonSettingsProto/Types/BuddySize
    enum BuddySize {
        BUDDY_MEDIUM = 0;
        BUDDY_SHOULDER = 1;
        BUDDY_BIG = 2;
        BUDDY_FLYING = 3;
        BUDDY_BABY = 4;
    }

    HoloPokemonId unique_id = 1;
    float model_scale = 3;
    HoloPokemonType type1 = 4;
    HoloPokemonType type2 = 5;
    PokemonCameraAttributesProto camera = 6;
    PokemonEncounterAttributesProto encounter = 7;
    PokemonStatsAttributesProto stats = 8;
    repeated HoloPokemonMove quick_moves = 9 [packed=false];
    repeated HoloPokemonMove cinematic_moves = 10 [packed=false];
    repeated float anim_time = 11 [packed=false];
    repeated HoloPokemonId evolution = 12 [packed=false];
    int32 evolution_pips = 13;
    HoloPokemonClass pokemon_class = 14;
    float pokedex_height_m = 15;
    float pokedex_weight_kg = 16;
    HoloPokemonId parent_id = 17;
    float height_std_dev = 18;
    float weight_std_dev = 19;
    float km_distance_to_hatch = 20;
    HoloPokemonFamilyId family_id = 21;
    int32 candy_to_evolve = 22;
    float km_buddy_distance = 23;
    BuddySize buddy_size = 24;
    float model_height = 25;
    repeated EvolutionBranchProto evolution_branch = 26 [packed=false];
    float model_scale_v2 = 27;
    PokemonDisplayProto.Form form = 28;
    HoloPokemonMove event_quick_move = 29;
    HoloPokemonMove event_cinematic_move = 30;
    repeated float buddy_offset_male = 31 [packed=false];
    repeated float buddy_offset_female = 32 [packed=false];
    float buddy_scale = 33;
    repeated float buddy_portrait_offset = 34 [packed=false];
    PokemonDisplayProto.Form parent_form = 35;
}

// ref: Holoholo.Rpc.PokemonStatsAttributesProto
message PokemonStatsAttributesProto {
    int32 base_stamina = 1;
    int32 base_attack = 2;
    int32 base_defense = 3;
    int32 dodge_energy_delta = 8;
}

// ref: Holoholo.Rpc.PokemonSummaryFortProto
message PokemonSummaryFortProto {
    string fort_summary_id = 1;
    int64 last_modified_ms = 2;
    double latitude = 3;
    double longitude = 4;
}

// ref: Holoholo.Rpc.PokemonTelemetry
message PokemonTelemetry {
    int32 pokemon_id = 1;
    int32 cp = 2;
    float weight_kg = 3;
    float height_m = 4;
    int32 pokemon_level = 5;
}

// ref: Holoholo.Rpc.PokemonUpgradeSettingsProto
message PokemonUpgradeSettingsProto {
    int32 upgrades_per_level = 1;
    int32 allowed_levels_above_player = 2;
    repeated int32 candy_cost = 3 [packed=false];
    repeated int32 stardust_cost = 4 [packed=false];
}

// ref: Holoholo.Rpc.PokestopReward
message PokestopReward {
    int32 item_id = 1;
    int32 item_count = 2;
}

// ref: Holoholo.Rpc.PotionAttributesProto
message PotionAttributesProto {
    float sta_percent = 1;
    int32 sta_amount = 2;
}

// ref: Holoholo.Rpc.ProfilePageTelemetry
message ProfilePageTelemetry {
    ProfilePageTelemetryIds profile_page_click_id = 1;
}

// ref: Holoholo.Rpc.PtcToken
message PtcToken {
    string token = 1;
    int32 expiration = 2;
}

// ref: Holoholo.Rpc.PushNotificationTelemetry
message PushNotificationTelemetry {
    PushNotificationTelemetryIds notification_id = 1;
    string category = 2;
}

// ref: Holoholo.Rpc.QuestConditionProto
message QuestConditionProto {
    // ref: Holoholo.Rpc.QuestConditionProto/ConditionOneofCase
    enum ConditionOneofCase {
        none = 0;
        with_pokemon_type = 2;
        with_pokemon_category = 3;
        with_weather_boost = 4;
        with_daily_capture_bonus = 5;
        with_daily_spin_bonus = 6;
        with_win_raid_status = 7;
        with_raid_level = 8;
        with_throw_type = 9;
        with_win_gym_battle_status = 10;
        with_super_effective_charge_move = 11;
        with_item = 12;
        with_unique_pokestop = 13;
        with_quest_context = 14;
        with_badge_type = 15;
        with_player_level = 16;
        with_win_battle_status = 17;
    }

    // ref: Holoholo.Rpc.QuestConditionProto/Types/ConditionType
    enum ConditionType {
        UNSET = 0;
        WITH_POKEMON_TYPE = 1;
        WITH_POKEMON_CATEGORY = 2;
        WITH_WEATHER_BOOST = 3;
        WITH_DAILY_CAPTURE_BONUS = 4;
        WITH_DAILY_SPIN_BONUS = 5;
        WITH_WIN_RAID_STATUS = 6;
        WITH_RAID_LEVEL = 7;
        WITH_THROW_TYPE = 8;
        WITH_WIN_GYM_BATTLE_STATUS = 9;
        WITH_SUPER_EFFECTIVE_CHARGE = 10;
        WITH_ITEM = 11;
        WITH_UNIQUE_POKESTOP = 12;
        WITH_QUEST_CONTEXT = 13;
        WITH_THROW_TYPE_IN_A_ROW = 14;
        WITH_CURVE_BALL = 15;
        WITH_BADGE_TYPE = 16;
        WITH_PLAYER_LEVEL = 17;
        WITH_WIN_BATTLE_STATUS = 18;
        WITH_NEW_FRIEND = 19;
        WITH_DAYS_IN_A_ROW = 20;
    }

    ConditionType type = 1;
    WithPokemonTypeProto with_pokemon_type = 2;
    WithPokemonCategoryProto with_pokemon_category = 3;
    WithWeatherBoostProto with_weather_boost = 4;
    WithDailyCaptureBonusProto with_daily_capture_bonus = 5;
    WithDailySpinBonusProto with_daily_spin_bonus = 6;
    WithWinRaidStatusProto with_win_raid_status = 7;
    WithRaidLevelProto with_raid_level = 8;
    WithThrowTypeProto with_throw_type = 9;
    WithWinGymBattleStatusProto with_win_gym_battle_status = 10;
    WithSuperEffectiveChargeMoveProto with_super_effective_charge_move = 11;
    WithItemProto with_item = 12;
    WithUniquePokestopProto with_unique_pokestop = 13;
    WithQuestContextProto with_quest_context = 14;
    WithBadgeTypeProto with_badge_type = 15;
    WithPlayerLevelProto with_player_level = 16;
    WithWinBattleStatusProto with_win_battle_status = 17;
}

// ref: Holoholo.Rpc.QuestDialogProto
message QuestDialogProto {
    // ref: Holoholo.Rpc.QuestDialogProto/Types/Character
    enum Character {
        CHARACTER_UNSET = 0;
        PROFESSOR_WILLOW = 1;
    }

    // ref: Holoholo.Rpc.QuestDialogProto/Types/CharacterExpression
    enum CharacterExpression {
        EXPRESSION_UNSET = 0;
        HAPPY = 1;
        SYMPATHETIC = 2;
        ENERGETIC = 3;
        PUSHY = 4;
        IMPATIENT = 5;
        ADMIRATION = 6;
    }

    string text = 1;
    CharacterExpression expression = 2;
    string image_uri = 3;
    Character character = 4;
}

// ref: Holoholo.Rpc.QuestDisplayProto
message QuestDisplayProto {
    string quest_id = 1;
    repeated QuestDialogProto dialog = 2 [packed=false];
    string description = 3;
    string title = 4;
    int32 slot = 5;
    repeated QuestDisplayProto subquest_displays = 6 [packed=false];
    bool story_ending_quest = 7;
    string story_ending_description = 8;
}

// ref: Holoholo.Rpc.QuestEncounterOutProto
message QuestEncounterOutProto {
    // ref: Holoholo.Rpc.QuestEncounterOutProto/Types/Result
    enum Result {
        QUEST_ENCOUNTER_UNKNOWN = 0;
        QUEST_ENCOUNTER_SUCCESS = 1;
        QUEST_ENCOUNTER_NOT_AVAILABLE = 2;
        QUEST_ENCOUNTER_ALREADY_FINISHED = 3;
        POKEMON_INVENTORY_FULL = 4;
    }

    Result result = 1;
    PokemonProto pokemon = 2;
    CaptureProbabilityProto capture_probability = 3;
    Item active_item = 4;
}

// ref: Holoholo.Rpc.QuestEncounterProto
message QuestEncounterProto {
    uint64 pokemon_id = 1;
    string quest_id = 2;
}

// ref: Holoholo.Rpc.QuestGlobalSettingsProto
message QuestGlobalSettingsProto {
    bool enable_quests = 1;
    int32 max_challenge_quests = 2;
}

// ref: Holoholo.Rpc.QuestGoalProto
message QuestGoalProto {
    repeated QuestConditionProto condition = 1 [packed=false];
    int32 target = 2;
}

// ref: Holoholo.Rpc.QuestPokemonEncounterProto
message QuestPokemonEncounterProto {
    string quest_id = 1;
    PokemonProto pokemon = 2;
    EncounterType encounter_type = 3;
    bool is_hidden_ditto = 4;
    PokemonProto ditto = 5;
}

// ref: Holoholo.Rpc.QuestPreconditionProto
message QuestPreconditionProto {
    // ref: Holoholo.Rpc.QuestPreconditionProto/ConditionOneofCase
    enum ConditionOneofCase {
        none = 0;
        quest_template_id = 2;
        level = 3;
        medal = 4;
        quests = 5;
    }

    // ref: Holoholo.Rpc.QuestPreconditionProto/Types/Operator
    enum Operator {
        UNSET = 0;
        EQUALS = 1;
        GREATER_THAN = 2;
        LESS_THAN = 3;
    }

    // ref: Holoholo.Rpc.QuestPreconditionProto/Types/QuestPreconditionType
    enum QuestPreconditionType {
        QUEST_PRECONDITION_UNSET = 0;
        QUEST_PRECONDITION_QUEST = 1;
        QUEST_PRECONDITION_LEVEL = 2;
        QUEST_PRECONDITION_MEDAL = 3;
        QUEST_PRECONDITION_IS_MINOR = 4;
        QUEST_PRECONDITION_EXCLUSIVE_QUESTS = 5;
    }

    // ref: Holoholo.Rpc.QuestPreconditionProto/Types/Level
    message Level {
        QuestPreconditionProto.Operator operator = 1;
        int32 level = 2;
    }

    // ref: Holoholo.Rpc.QuestPreconditionProto/Types/Medal
    message Medal {
        HoloBadgeType type = 1;
        QuestPreconditionProto.Operator operator = 2;
        int32 badge_rank = 3;
    }

    // ref: Holoholo.Rpc.QuestPreconditionProto/Types/Quests
    message Quests {
        repeated string quest_template_ids = 1 [packed=false];
    }

    QuestPreconditionType type = 1;
    string quest_template_id = 2;
    Level level = 3;
    Medal medal = 4;
    Quests quests = 5;
}

// ref: Holoholo.Rpc.QuestProto
message QuestProto {
    // ref: Holoholo.Rpc.QuestProto/Types/Context
    enum Context {
        UNSET = 0;
        STORY_QUEST = 1;
        CHALLENGE_QUEST = 2;
    }

    // ref: Holoholo.Rpc.QuestProto/QuestOneofCase
    enum QuestOneofCase {
        none = 0;
        daily_quest = 2;
        multi_part = 3;
        catch_pokemon = 4;
        add_friend = 5;
        trade_pokemon = 6;
    }

    // ref: Holoholo.Rpc.QuestProto/Types/Status
    enum Status {
        STATUS_UNDEFINED = 0;
        STATUS_ACTIVE = 1;
        STATUS_COMPLETED = 2;
    }

    QuestType quest_type = 1;
    DailyQuestProto daily_quest = 2;
    MultiPartQuestProto multi_part = 3;
    CatchPokemonQuestProto catch_pokemon = 4;
    AddFriendQuestProto add_friend = 5;
    TradePokemonQuestProto trade_pokemon = 6;
    string quest_id = 100;
    int64 quest_seed = 101;
    Context quest_context = 102;
    string template_id = 103;
    int32 progress = 104;
    QuestGoalProto goal = 105;
    Status status = 106;
    repeated QuestRewardProto quest_rewards = 107 [packed=false];
    int64 creation_timestamp_ms = 108;
    int64 last_update_timestamp_ms = 109;
    int64 compeletion_timestamp_ms = 110;
    string fort_id = 111;
    bool admin_generated = 112;
    bool stamp_count_override_enabled = 113;
    int32 stamp_count_override = 114;
    int64 s2_cell_id = 115;
    int32 story_quest_template_version = 116;
    DailyCounterProto daily_counter = 117;
    string reward_pokemon_icon_url = 118;
}

// ref: Holoholo.Rpc.QuestRewardProto
message QuestRewardProto {
    // ref: Holoholo.Rpc.QuestRewardProto/RewardOneofCase
    enum RewardOneofCase {
        none = 0;
        exp = 2;
        item = 3;
        stardust = 4;
        candy = 5;
        avatar_template_id = 6;
        quest_template_id = 7;
        pokemon_encounter = 8;
    }

    // ref: Holoholo.Rpc.QuestRewardProto/Types/Type
    enum Type {
        UNSET = 0;
        EXPERIENCE = 1;
        ITEM = 2;
        STARDUST = 3;
        CANDY = 4;
        AVATAR_CLOTHING = 5;
        QUEST = 6;
        POKEMON_ENCOUNTER = 7;
    }

    Type type = 1;
    int32 exp = 2;
    ItemRewardProto item = 3;
    int32 stardust = 4;
    PokemonCandyRewardProto candy = 5;
    string avatar_template_id = 6;
    string quest_template_id = 7;
    PokemonEncounterRewardProto pokemon_encounter = 8;
}

// ref: Holoholo.Rpc.QuestSettingsProto
message QuestSettingsProto {
    QuestType quest_type = 1;
    DailyQuestSettings daily_quest = 2;
}

// ref: Holoholo.Rpc.QuestsProto
message QuestsProto {
    repeated QuestProto quest = 1 [packed=false];
    repeated string completed_story_quest = 2 [packed=false];
    repeated QuestPokemonEncounterProto quest_pokemon_encounter = 3 [packed=false];
    QuestStampCardProto stamp_card = 4;
}

// ref: Holoholo.Rpc.QuestStampCardProto
message QuestStampCardProto {
    repeated QuestStampProto stamp = 1 [packed=false];
    int32 target = 2;
    int32 remaining_daily_stamps = 3;
    string id = 4;
    string icon_url = 5;
}

// ref: Holoholo.Rpc.QuestStampProto
message QuestStampProto {
    QuestProto.Context context = 1;
    uint64 timestamp_ms = 2;
}

// ref: Holoholo.Rpc.RaidEncounterProto
message RaidEncounterProto {
    PokemonProto pokemon = 1;
    int64 encounter_id = 2;
    string spawnpoint_id = 3;
    CaptureProbabilityProto capture_probabilities = 4;
    int32 throws_remaining = 5;
    RaidLevel raid_level = 6;
    string fort_id = 7;
    bool is_exclusive = 8;
    bool is_event_legendary = 9;
}

// ref: Holoholo.Rpc.RaidInfoProto
message RaidInfoProto {
    int64 raid_seed = 1;
    int64 raid_spawn_ms = 2;
    int64 raid_battle_ms = 3;
    int64 raid_end_ms = 4;
    PokemonProto raid_pokemon = 5;
    RaidLevel raid_level = 6;
    bool complete = 7;
    bool is_exclusive = 8;
    bool is_raid_hidden = 9;
}

// ref: Holoholo.Rpc.RaidProto
message RaidProto {
    int64 raid_seed = 1;
    int64 started_ms = 2;
    int64 completed_ms = 3;
    HoloPokemonId encounter_pokemon_id = 4;
    bool completed_battle = 5;
    bool received_rewards = 6;
    bool finished_encounter = 7;
    bool received_default_rewards = 8;
    bool incremented_raid_friends = 9;
}

// ref: Holoholo.Rpc.RaidRewardsLogEntry
message RaidRewardsLogEntry {
    // ref: Holoholo.Rpc.RaidRewardsLogEntry/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
    }

    Result result = 1;
    bool is_exclusive = 2;
    repeated ItemProto items = 3 [packed=false];
    repeated ItemProto default_rewards = 4 [packed=false];
    int32 stardust = 5;
}

// ref: Holoholo.Rpc.RaidTelemetry
message RaidTelemetry {
    RaidTelemetryIds raid_telemetry_id = 1;
    string bundle_version = 2;
    float time_since_enter_raid = 3;
    float time_since_last_raid_telemetry = 4;
    int32 raid_level = 5;
    bool private_lobby = 6;
    string ticket_item = 7;
    int32 num_players_in_lobby = 8;
    int32 battle_party_number = 9;
}

// ref: Holoholo.Rpc.RaidTicketProto
message RaidTicketProto {
    string ticket_id = 1;
    Item item = 2;
    ExclusiveTicketInfoProto exclusive_info = 4;
}

// ref: Holoholo.Rpc.RaidTicketsProto
message RaidTicketsProto {
    repeated RaidTicketProto raid_ticket = 1 [packed=false];
}

// ref: Holoholo.Rpc.ReadPointOfInterestDescriptionTelemetry
message ReadPointOfInterestDescriptionTelemetry {
    string result = 1;
    string fort_id = 2;
    int32 fort_type = 3;
}

// ref: Holoholo.Rpc.RecycleItemOutProto
message RecycleItemOutProto {
    // ref: Holoholo.Rpc.RecycleItemOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_NOT_ENOUGH_COPIES = 2;
        ERROR_CANNOT_RECYCLE_INCUBATORS = 3;
    }

    Result result = 1;
    int32 new_count = 2;
}

// ref: Holoholo.Rpc.RecycleItemProto
message RecycleItemProto {
    Item item = 1;
    int32 count = 2;
}

// ref: Holoholo.Rpc.RedeemedAvatarItemProto
message RedeemedAvatarItemProto {
    string avatar_template_id = 1;
    int32 item_count = 2;
}

// ref: Holoholo.Rpc.RedeemedItemProto
message RedeemedItemProto {
    Item item = 1;
    int32 item_count = 2;
}

// ref: Holoholo.Rpc.RedeemPasscodeRewardProto
message RedeemPasscodeRewardProto {
    repeated RedeemedItemProto items = 1 [packed=false];
    repeated RedeemedAvatarItemProto avatar_items = 2 [packed=false];
    repeated PokemonProto egg_pokemon = 3 [packed=false];
    repeated PokemonProto pokemon = 4 [packed=false];
    repeated PokeCandyProto poke_candy = 5 [packed=false];
    int32 stardust = 6;
    int32 pokecoins = 7;
    repeated HoloBadgeType badges = 8 [packed=false];
}

// ref: Holoholo.Rpc.RegisterBackgroundDeviceActionProto
message RegisterBackgroundDeviceActionProto {
    string device_type = 1;
    string device_id = 2;
}

// ref: Holoholo.Rpc.RegisterBackgroundDeviceResponseProto
message RegisterBackgroundDeviceResponseProto {
    // ref: Holoholo.Rpc.RegisterBackgroundDeviceResponseProto/Types/Status
    enum Status {
        UNSET = 0;
        SUCCESS = 1;
        ERROR = 2;
    }

    Status status = 1;
    BackgroundToken token = 2;
}

// ref: Holoholo.Rpc.RegisterSfidaRequest
message RegisterSfidaRequest {
    string sfida_id = 1;
}

// ref: Holoholo.Rpc.RegisterSfidaResponse
message RegisterSfidaResponse {
    bytes access_token = 1;
}

// ref: Holoholo.Rpc.ReleasePokemonOutProto
message ReleasePokemonOutProto {
    // ref: Holoholo.Rpc.ReleasePokemonOutProto/Types/Status
    enum Status {
        UNSET = 0;
        SUCCESS = 1;
        POKEMON_DEPLOYED = 2;
        FAILED = 3;
        ERROR_POKEMON_IS_EGG = 4;
        ERROR_POKEMON_IS_BUDDY = 5;
    }

    Status status = 1;
    int32 candy_awarded = 2;
}

// ref: Holoholo.Rpc.ReleasePokemonProto
message ReleasePokemonProto {
    uint64 pokemon_id = 1;
    repeated uint64 pokemon_ids = 2 [packed=false];
}

// ref: Holoholo.Rpc.ReleasePokemonTelemetry
message ReleasePokemonTelemetry {
    PokemonTelemetry pokemon = 1;
}

// ref: Holoholo.Rpc.RemoveQuestOutProto
message RemoveQuestOutProto {
    // ref: Holoholo.Rpc.RemoveQuestOutProto/Types/Status
    enum Status {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_QUEST_NOT_FOUND = 2;
        ERROR_STORY_QUEST_NOT_REMOVABLE = 3;
    }

    Status status = 1;
}

// ref: Holoholo.Rpc.RemoveQuestProto
message RemoveQuestProto {
    string quest_id = 1;
}

// ref: Holoholo.Rpc.ReviveAttributesProto
message ReviveAttributesProto {
    float sta_percent = 1;
}

// ref: Holoholo.Rpc.RpcResponseTelemetry
message RpcResponseTelemetry {
    float window_duration = 1;
    repeated RpcResponseTime response_timings = 2 [packed=false];
}

// ref: Holoholo.Rpc.RpcResponseTime
message RpcResponseTime {
    Method rpc_id = 1;
    int32 count_call = 2;
    float average_response_time = 3;
}

// ref: Holoholo.Rpc.SavePlayerSnapshotOutProto
message SavePlayerSnapshotOutProto {
    // ref: Holoholo.Rpc.SavePlayerSnapshotOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        TOO_SOON_TO_UPDATE = 2;
        ERROR_FAILED_TO_UPDATE = 3;
        ERROR_REQUEST_TIMED_OUT = 4;
    }

    Result result = 1;
}

// ref: Holoholo.Rpc.SavePlayerSnapshotProto
message SavePlayerSnapshotProto {
}

// ref: Holoholo.Rpc.SaveSocialPlayerSettingsOutProto
message SaveSocialPlayerSettingsOutProto {
    // ref: Holoholo.Rpc.SaveSocialPlayerSettingsOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_UNKNOWN = 2;
    }

    Result result = 1;
}

// ref: Holoholo.Rpc.SaveSocialPlayerSettingsProto
message SaveSocialPlayerSettingsProto {
    SocialPlayerSettingsProto settings = 1;
}

// ref: Holoholo.Rpc.SendGiftLogEntry
message SendGiftLogEntry {
    // ref: Holoholo.Rpc.SendGiftLogEntry/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
    }

    Result result = 1;
    string friend_codename = 2;
}

// ref: Holoholo.Rpc.SendGiftOutProto
message SendGiftOutProto {
    // ref: Holoholo.Rpc.SendGiftOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_UNKNOWN = 2;
        ERROR_PLAYER_DOES_NOT_EXIST = 3;
        ERROR_GIFT_DOES_NOT_EXIST = 4;
        ERROR_GIFT_ALREADY_SENT_TODAY = 5;
        ERROR_PLAYER_HAS_UNOPENED_GIFT = 6;
        ERROR_FRIEND_UPDATE = 7;
    }

    Result result = 1;
    int32 awarded_xp = 2;
}

// ref: Holoholo.Rpc.SendGiftProto
message SendGiftProto {
    uint64 giftbox_id = 1;
    string player_id = 2;
}

// ref: Holoholo.Rpc.SetAvatarItemAsViewedOutProto
message SetAvatarItemAsViewedOutProto {
    // ref: Holoholo.Rpc.SetAvatarItemAsViewedOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        FAILURE = 2;
    }

    Result result = 1;
}

// ref: Holoholo.Rpc.SetAvatarItemAsViewedProto
message SetAvatarItemAsViewedProto {
    repeated string avatar_template_id = 1 [packed=false];
}

// ref: Holoholo.Rpc.SetAvatarOutProto
message SetAvatarOutProto {
    // ref: Holoholo.Rpc.SetAvatarOutProto/Types/Status
    enum Status {
        UNSET = 0;
        SUCCESS = 1;
        AVATAR_ALREADY_SET = 2;
        FAILURE = 3;
        SLOT_NOT_ALLOWED = 4;
        ITEM_NOT_OWNED = 5;
        INVALID_AVATAR_TYPE = 6;
    }

    Status status = 1;
    ClientPlayerProto player = 2;
}

// ref: Holoholo.Rpc.SetAvatarProto
message SetAvatarProto {
    PlayerAvatarProto player_avatar_proto = 2;
}

// ref: Holoholo.Rpc.SetBuddyPokemonOutProto
message SetBuddyPokemonOutProto {
    // ref: Holoholo.Rpc.SetBuddyPokemonOutProto/Types/Result
    enum Result {
        UNEST = 0;
        SUCCESS = 1;
        ERROR_POKEMON_DEPLOYED = 2;
        ERROR_POKEMON_NOT_OWNED = 3;
        ERROR_POKEMON_IS_EGG = 4;
        ERROR_INVALID_POKEMON = 5;
    }

    Result result = 1;
    BuddyPokemonProto updated_buddy = 2;
}

// ref: Holoholo.Rpc.SetBuddyPokemonProto
message SetBuddyPokemonProto {
    uint64 pokemon_id = 1;
}

// ref: Holoholo.Rpc.SetContactSettingsOutProto
message SetContactSettingsOutProto {
    // ref: Holoholo.Rpc.SetContactSettingsOutProto/Types/Status
    enum Status {
        UNSET = 0;
        SUCCESS = 1;
        FAILURE = 2;
    }

    Status status = 1;
    ClientPlayerProto player = 2;
}

// ref: Holoholo.Rpc.SetContactSettingsProto
message SetContactSettingsProto {
    ContactSettingsProto contact_settings_proto = 1;
}

// ref: Holoholo.Rpc.SetFavoritePokemonOutProto
message SetFavoritePokemonOutProto {
    // ref: Holoholo.Rpc.SetFavoritePokemonOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_POKEMON_NOT_FOUND = 2;
        ERROR_POKEMON_IS_EGG = 3;
    }

    Result result = 1;
}

// ref: Holoholo.Rpc.SetFavoritePokemonProto
message SetFavoritePokemonProto {
    int64 pokemon_id = 1;
    bool is_favorite = 2;
}

// ref: Holoholo.Rpc.SetFriendNicknameOutProto
message SetFriendNicknameOutProto {
    // ref: Holoholo.Rpc.SetFriendNicknameOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_UNKNOWN = 2;
        ERROR_NOT_FRIENDS = 3;
        ERROR_EXCEEDED_NICKNAME_LENGTH = 4;
        ERROR_SOCIAL_UPDATE = 5;
        ERROR_FILTERED_NICKNAME = 6;
        ERROR_EXCEEDED_CHANGE_LIMIT = 7;
    }

    Result result = 1;
}

// ref: Holoholo.Rpc.SetFriendNicknameProto
message SetFriendNicknameProto {
    string friend_id = 1;
    string friend_nickname = 2;
}

// ref: Holoholo.Rpc.SetLobbyPokemonOutProto
message SetLobbyPokemonOutProto {
    // ref: Holoholo.Rpc.SetLobbyPokemonOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_LOBBY_NOT_FOUND = 2;
        ERROR_RAID_UNAVAILABLE = 3;
        ERROR_INVALID_POKEMON = 4;
    }

    Result result = 1;
    LobbyProto lobby = 2;
}

// ref: Holoholo.Rpc.SetLobbyPokemonProto
message SetLobbyPokemonProto {
    int64 raid_seed = 1;
    string gym_id = 2;
    repeated int32 lobby_id = 3 [packed=false];
    repeated uint64 pokemon_id = 4 [packed=false];
}

// ref: Holoholo.Rpc.SetLobbyVisibilityOutProto
message SetLobbyVisibilityOutProto {
    // ref: Holoholo.Rpc.SetLobbyVisibilityOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_NOT_LOBBY_CREATOR = 2;
        ERROR_LOBBY_NOT_FOUND = 3;
        ERROR_RAID_UNAVAILABLE = 4;
    }

    Result result = 1;
    LobbyProto lobby = 2;
}

// ref: Holoholo.Rpc.SetLobbyVisibilityProto
message SetLobbyVisibilityProto {
    int64 raid_seed = 1;
    string gym_id = 2;
    repeated int32 lobby_id = 3 [packed=false];
}

// ref: Holoholo.Rpc.SetPlayerTeamOutProto
message SetPlayerTeamOutProto {
    // ref: Holoholo.Rpc.SetPlayerTeamOutProto/Types/Status
    enum Status {
        UNSET = 0;
        SUCCESS = 1;
        TEAM_ALREADY_SET = 2;
        FAILURE = 3;
    }

    Status status = 1;
    ClientPlayerProto player = 2;
}

// ref: Holoholo.Rpc.SetPlayerTeamProto
message SetPlayerTeamProto {
    Team team = 1;
}

// ref: Holoholo.Rpc.SfidaGlobalSettingsProto
message SfidaGlobalSettingsProto {
    float low_battery_threshold = 1;
}

// ref: Holoholo.Rpc.ShoppingPageTelemetry
message ShoppingPageTelemetry {
    ShoppingPageTelemetryIds shopping_page_click_id = 1;
}

// ref: Holoholo.Rpc.SocialClientSettingsProto
message SocialClientSettingsProto {
    bool enable_social = 1;
    int32 max_friend_details = 2;
    int32 player_level_gate = 3;
    int32 max_friend_nickname_length = 4;
    bool enable_add_friend_via_qr_code = 5;
}

// ref: Holoholo.Rpc.SocialGiftCountTelemetry
message SocialGiftCountTelemetry {
    int32 unopened_gift_count = 1;
    int32 unsent_gift_count = 2;
}

// ref: Holoholo.Rpc.SocialPlayerSettingsProto
message SocialPlayerSettingsProto {
    bool disable_last_pokemon_caught = 1;
}

// ref: Holoholo.Rpc.SocialTelemetry
message SocialTelemetry {
    SocialTelemetryIds social_click_id = 1;
    int32 pages_scrolled_in_friends_list = 2;
}

// ref: Holoholo.Rpc.SpinPokestopTelemetry
message SpinPokestopTelemetry {
    string result = 1;
    string fort_id = 2;
    int32 fort_type = 3;
    repeated PokestopReward pokestop_rewards = 4 [packed=false];
    int32 total_rewards = 5;
}

// ref: Holoholo.Rpc.StardustBoostAttributesProto
message StardustBoostAttributesProto {
    float stardust_multiplier = 1;
    int32 boost_duration_ms = 2;
}

// ref: Holoholo.Rpc.StartGymBattleOutProto
message StartGymBattleOutProto {
    // ref: Holoholo.Rpc.StartGymBattleOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_GYM_NOT_FOUND = 2;
        ERROR_GYM_NEUTRAL = 3;
        ERROR_GYM_WRONG_TEAM = 4;
        ERROR_GYM_EMPTY = 5;
        ERROR_INVALID_DEFENDER = 6;
        ERROR_TRAINING_INVALID_ATTACKER_COUNT = 7;
        ERROR_ALL_POKEMON_FAINTED = 8;
        ERROR_TOO_MANY_BATTLES = 9;
        ERROR_TOO_MANY_PLAYERS = 10;
        ERROR_GYM_BATTLE_LOCKOUT = 11;
        ERROR_PLAYER_BELOW_MINIMUM_LEVEL = 12;
        ERROR_NOT_IN_RANGE = 13;
        ERROR_POI_INACCESSIBLE = 14;
    }

    Result result = 1;
    int64 battle_start_ms = 2;
    int64 battle_end_ms = 3;
    string battle_id = 4;
    BattleParticipantProto defender = 5;
    BattleLogProto battle_log = 6;
    BattleParticipantProto attacker = 7;
    BattleProto battle = 8;
}

// ref: Holoholo.Rpc.StartGymBattleProto
message StartGymBattleProto {
    string gym_id = 1;
    repeated uint64 attacking_pokemon_id = 2 [packed=false];
    uint64 defending_pokemon_id = 3;
    double player_lat_degrees = 4;
    double player_lng_degrees = 5;
}

// ref: Holoholo.Rpc.StartRaidBattleOutProto
message StartRaidBattleOutProto {
    // ref: Holoholo.Rpc.StartRaidBattleOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_GYM_NOT_FOUND = 2;
        ERROR_RAID_UNAVAILABLE = 3;
        ERROR_RAID_COMPLETED = 4;
        ERROR_INVALID_ATTACKERS = 5;
        ERROR_PLAYER_BELOW_MINIMUM_LEVEL = 6;
        ERROR_NOT_IN_RANGE = 7;
        ERROR_POI_INACCESSIBLE = 8;
        ERROR_LOBBY_NOT_FOUND = 9;
        ERROR_NO_TICKET = 10;
        ERROR_INVALID_SERVER = 11;
        ERROR_NEVER_JOINED_BATTLE = 12;
    }

    Result result = 1;
    BattleProto battle = 2;
}

// ref: Holoholo.Rpc.StartRaidBattleProto
message StartRaidBattleProto {
    string gym_id = 1;
    int64 raid_seed = 2;
    repeated int32 lobby_id = 4 [packed=false];
    repeated uint64 attacking_pokemon_id = 5 [packed=false];
    double player_lat_degrees = 6;
    double player_lng_degrees = 7;
    double gym_lat_degrees = 8;
    double gym_lng_degrees = 9;
}

// ref: Holoholo.Rpc.TelemetryGlobalSettingsProto
message TelemetryGlobalSettingsProto {
    bool enabled = 1;
    double session_sampling_fraction = 2;
    int32 max_buffer_size_kb = 3;
    int32 batch_size = 4;
    int64 update_interval_ms = 5;
    int64 frame_rate_sample_interval_ms = 6;
    int64 frame_rate_sample_period_ms = 7;
}

// ref: Holoholo.Rpc.TradePokemonQuestProto
message TradePokemonQuestProto {
    repeated string friend_id = 1 [packed=false];
}

// ref: Holoholo.Rpc.TradingGlobalSettingsProto
message TradingGlobalSettingsProto {
    bool enable_trading = 1;
    uint32 min_player_level = 2;
}

// ref: Holoholo.Rpc.TradingLogEntry
message TradingLogEntry {
    // ref: Holoholo.Rpc.TradingLogEntry/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
    }

    Result result = 1;
    string friend_codename = 2;
    PokemonProto trade_out_pokemon = 3;
    PokemonProto trade_in_pokemon = 4;
    LootProto rewards = 5;
    LootProto price = 6;
}

// ref: Holoholo.Rpc.TradingProto
message TradingProto {
    // ref: Holoholo.Rpc.TradingProto/Types/TradingPlayerProto/Types/ExcludedPokemon/Types/ExclusionReason
    enum ExclusionReason {
        UNSET_a152 = 0;
        MYTHICAL_POKEMON = 1;
        SLASHED = 2;
        GYM_DEPLOYED = 3;
        BUDDY = 4;
        STAMINA_NOT_FULL = 5;
        EGG_NOT_HATCHED = 6;
        FRIENDSHIP_LEVEL_LOW = 7;
        FRIEND_CANNOT_AFFORD = 8;
        FRIEND_REACHED_DAILY_LIMIT = 9;
        ALREADY_TRADED = 10;
        PLAYER_CANNOT_AFFORD = 11;
        PLAYER_REACHED_DAILY_LIMIT = 12;
        FAVORITE = 13;
    }

    // ref: Holoholo.Rpc.TradingProto/Types/TradingState
    enum TradingState {
        UNSET_add9 = 0;
        PRIMORDIAL = 1;
        WAIT = 2;
        ACTIVE = 3;
        CONFIRMED = 4;
        FINISHED = 5;
    }

    // ref: Holoholo.Rpc.TradingProto/Types/TradingPlayerProto/Types/ExcludedPokemon
    message ExcludedPokemon {
        // ref: Holoholo.Rpc.TradingProto/Types/TradingPlayerProto/Types/ExcludedPokemon/Types/ExclusionReason
        enum ExclusionReason {
            UNSET_a152 = 0;
            MYTHICAL_POKEMON = 1;
            SLASHED = 2;
            GYM_DEPLOYED = 3;
            BUDDY = 4;
            STAMINA_NOT_FULL = 5;
            EGG_NOT_HATCHED = 6;
            FRIENDSHIP_LEVEL_LOW = 7;
            FRIEND_CANNOT_AFFORD = 8;
            FRIEND_REACHED_DAILY_LIMIT = 9;
            ALREADY_TRADED = 10;
            PLAYER_CANNOT_AFFORD = 11;
            PLAYER_REACHED_DAILY_LIMIT = 12;
            FAVORITE = 13;
        }

        uint64 pokemon_id = 1;
        TradingProto.ExclusionReason exclusion_reason = 2;
    }

    // ref: Holoholo.Rpc.TradingProto/Types/TradingPlayerProto
    message TradingPlayerProto {
        // ref: Holoholo.Rpc.TradingProto/Types/TradingPlayerProto/Types/ExcludedPokemon/Types/ExclusionReason
        enum ExclusionReason {
            UNSET_a152 = 0;
            MYTHICAL_POKEMON = 1;
            SLASHED = 2;
            GYM_DEPLOYED = 3;
            BUDDY = 4;
            STAMINA_NOT_FULL = 5;
            EGG_NOT_HATCHED = 6;
            FRIENDSHIP_LEVEL_LOW = 7;
            FRIEND_CANNOT_AFFORD = 8;
            FRIEND_REACHED_DAILY_LIMIT = 9;
            ALREADY_TRADED = 10;
            PLAYER_CANNOT_AFFORD = 11;
            PLAYER_REACHED_DAILY_LIMIT = 12;
            FAVORITE = 13;
        }

        // ref: Holoholo.Rpc.TradingProto/Types/TradingPlayerProto/Types/ExcludedPokemon
        message ExcludedPokemon {
            // ref: Holoholo.Rpc.TradingProto/Types/TradingPlayerProto/Types/ExcludedPokemon/Types/ExclusionReason
            enum ExclusionReason {
                UNSET_a152 = 0;
                MYTHICAL_POKEMON = 1;
                SLASHED = 2;
                GYM_DEPLOYED = 3;
                BUDDY = 4;
                STAMINA_NOT_FULL = 5;
                EGG_NOT_HATCHED = 6;
                FRIENDSHIP_LEVEL_LOW = 7;
                FRIEND_CANNOT_AFFORD = 8;
                FRIEND_REACHED_DAILY_LIMIT = 9;
                ALREADY_TRADED = 10;
                PLAYER_CANNOT_AFFORD = 11;
                PLAYER_REACHED_DAILY_LIMIT = 12;
                FAVORITE = 13;
            }

            uint64 pokemon_id = 1;
            TradingProto.ExclusionReason exclusion_reason = 2;
        }

        string player_id = 1;
        PlayerPublicProfileProto public_profile = 2;
        repeated TradingProto.ExcludedPokemon excluded_pokemon = 3 [packed=false];
        TradingProto.TradingPokemonProto trading_pokemon = 4;
        LootProto bonus = 5;
        LootProto price = 6;
        bool can_afford_trading = 7;
        bool has_confirmed = 8;
    }

    // ref: Holoholo.Rpc.TradingProto/Types/TradingPokemonProto
    message TradingPokemonProto {
        uint64 pokemon_id = 1;
        int32 pokedex_entry_number = 2;
        int32 original_cp = 3;
        int32 adjusted_cp_min = 4;
        int32 adjusted_cp_max = 5;
        int32 original_stamina = 6;
        int32 adjusted_stamina_min = 7;
        int32 adjusted_stamina_max = 8;
        bool friend_level_cap = 9;
        int32 move1 = 10;
        int32 move2 = 11;
        PokemonDisplayProto pokemon_display = 12;
        int64 captured_s2_cell_id = 13;
        PokemonProto traded_pokemon = 14;
        Item pokeball = 15;
        int32 individual_attack = 16;
        int32 individual_defense = 17;
        int32 individual_stamina = 18;
        string nickname = 19;
    }

    TradingState state = 1;
    uint64 expiration_ms = 2;
    TradingPlayerProto player = 3;
    TradingPlayerProto friend = 4;
    int64 trading_s2_cell_id = 5;
    string transaction_log = 6;
    FriendshipLevelDataProto friendship_level_data = 7;
    bool is_special_trading = 8;
    FriendshipLevelDataProto pre_trading_friendship_level = 9;
}

// ref: Holoholo.Rpc.TranslationSettingsProto
message TranslationSettingsProto {
    repeated string translation_bundle_ids = 1 [packed=false];
}

// ref: Holoholo.Rpc.TypeEffectiveSettingsProto
message TypeEffectiveSettingsProto {
    repeated float attack_scalar = 1 [packed=false];
    HoloPokemonType attack_type = 2;
}

// ref: Holoholo.Rpc.UncommentAnnotationTestProto
message UncommentAnnotationTestProto {
    string string_property = 1;
    int64 long_property = 2;
}

// ref: Holoholo.Rpc.UpdateTradingOutProto
message UpdateTradingOutProto {
    // ref: Holoholo.Rpc.UpdateTradingOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_UNKNOWN = 2;
        ERROR_FRIEND_NOT_FOUND = 3;
        ERROR_INVALID_PLAYER_ID = 4;
        ERROR_INVALID_STATE = 5;
        ERROR_STATE_HANDLER = 6;
        ERROR_INVALID_POKEMON = 7;
        ERROR_INSUFFICIENT_PAYMENT = 8;
        ERROR_TRADING_EXPIRED = 9;
        ERROR_TRADING_FINISHED = 10;
    }

    Result result = 1;
    TradingProto trading = 2;
}

// ref: Holoholo.Rpc.UpdateTradingProto
message UpdateTradingProto {
    string player_id = 1;
    uint64 pokemon_id = 2;
}

// ref: Holoholo.Rpc.UpgradePokemonOutProto
message UpgradePokemonOutProto {
    // ref: Holoholo.Rpc.UpgradePokemonOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_POKEMON_NOT_FOUND = 2;
        ERROR_INSUFFICIENT_RESOURCES = 3;
        ERROR_UPGRADE_NOT_AVAILABLE = 4;
        ERROR_POKEMON_IS_DEPLOYED = 5;
    }

    Result result = 1;
    PokemonProto upgraded_pokemon = 2;
}

// ref: Holoholo.Rpc.UpgradePokemonProto
message UpgradePokemonProto {
    uint64 pokemon_id = 1;
}

// ref: Holoholo.Rpc.UpsightLoggingSettingsProto
message UpsightLoggingSettingsProto {
    bool use_verbose_logging = 1;
    int32 logging_percentage = 2;
}

// ref: Holoholo.Rpc.UseIncenseActionOutProto
message UseIncenseActionOutProto {
    // ref: Holoholo.Rpc.UseIncenseActionOutProto/Types/Result
    enum Result {
        UNKNOWN = 0;
        SUCCESS = 1;
        INCENSE_ALREADY_ACTIVE = 2;
        NONE_IN_INVENTORY = 3;
        LOCATION_UNSET = 4;
    }

    Result result = 1;
    AppliedItemProto applied_incense = 2;
}

// ref: Holoholo.Rpc.UseIncenseActionProto
message UseIncenseActionProto {
    Item incense_type = 1;
}

// ref: Holoholo.Rpc.UseItemCaptureOutProto
message UseItemCaptureOutProto {
    bool success = 1;
    double item_capture_mult = 2;
    double item_flee_mult = 3;
    bool stop_movement = 4;
    bool stop_attack = 5;
    bool target_max = 6;
    bool target_slow = 7;
}

// ref: Holoholo.Rpc.UseItemCaptureProto
message UseItemCaptureProto {
    Item item = 1;
    uint64 encounter_id = 2;
    string spawn_point_guid = 3;
}

// ref: Holoholo.Rpc.UseItemEggIncubatorOutProto
message UseItemEggIncubatorOutProto {
    // ref: Holoholo.Rpc.UseItemEggIncubatorOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_INCUBATOR_NOT_FOUND = 2;
        ERROR_POKEMON_EGG_NOT_FOUND = 3;
        ERROR_POKEMON_ID_NOT_EGG = 4;
        ERROR_INCUBATOR_ALREADY_IN_USE = 5;
        ERROR_POKEMON_ALREADY_INCUBATING = 6;
        ERROR_INCUBATOR_NO_USES_REMAINING = 7;
    }

    Result result = 1;
    EggIncubatorProto egg_incubator = 2;
}

// ref: Holoholo.Rpc.UseItemEggIncubatorProto
message UseItemEggIncubatorProto {
    string item_id = 1;
    int64 pokemond_id = 2;
}

// ref: Holoholo.Rpc.UseItemEncounterOutProto
message UseItemEncounterOutProto {
    // ref: Holoholo.Rpc.UseItemEncounterOutProto/Types/Status
    enum Status {
        SUCCESS = 0;
        ALREADY_COMPLETED = 1;
        ACTIVE_ITEM_EXISTS = 2;
        NO_ITEM_IN_INVENTORY = 3;
        INVALID_ITEM_CATEGORY = 4;
    }

    Status status = 1;
    CaptureProbabilityProto capture_probability = 2;
    Item active_item = 3;
}

// ref: Holoholo.Rpc.UseItemEncounterProto
message UseItemEncounterProto {
    Item item = 1;
    uint64 encounter_id = 2;
    string spawn_point_guid = 3;
}

// ref: Holoholo.Rpc.UseItemMoveRerollOutProto
message UseItemMoveRerollOutProto {
    // ref: Holoholo.Rpc.UseItemMoveRerollOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        NO_POKEMON = 2;
        NO_OTHER_MOVES = 3;
        NO_PLAYER = 4;
        WRONG_ITEM_TYPE = 5;
        ITEM_NOT_IN_INVENTORY = 6;
        INVALID_POKEMON = 7;
    }

    Result result = 1;
    PokemonProto updated_pokemon = 2;
}

// ref: Holoholo.Rpc.UseItemMoveRerollProto
message UseItemMoveRerollProto {
    Item item = 1;
    uint64 pokemon_id = 2;
}

// ref: Holoholo.Rpc.UseItemPotionOutProto
message UseItemPotionOutProto {
    // ref: Holoholo.Rpc.UseItemPotionOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_NO_POKEMON = 2;
        ERROR_CANNOT_USE = 3;
        ERROR_DEPLOYED_TO_FORT = 4;
    }

    Result result = 1;
    int32 stamina = 2;
}

// ref: Holoholo.Rpc.UseItemPotionProto
message UseItemPotionProto {
    Item item = 1;
    uint64 pokemon_id = 2;
}

// ref: Holoholo.Rpc.UseItemRareCandyOutProto
message UseItemRareCandyOutProto {
    // ref: Holoholo.Rpc.UseItemRareCandyOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        INVALID_POKEMON_ID = 2;
        NO_PLAYER = 3;
        WRONG_ITEM_TYPE = 4;
        ITEM_NOT_IN_INVENTORY = 5;
        NOT_ENOUGH_ITEMS = 6;
    }

    Result result = 1;
    HoloPokemonId pokemon_id = 2;
    int32 updated_candy_count = 3;
}

// ref: Holoholo.Rpc.UseItemRareCandyProto
message UseItemRareCandyProto {
    Item item = 1;
    HoloPokemonId pokemon_id = 2;
    int32 candy_count = 3;
}

// ref: Holoholo.Rpc.UseItemReviveOutProto
message UseItemReviveOutProto {
    // ref: Holoholo.Rpc.UseItemReviveOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_NO_POKEMON = 2;
        ERROR_CANNOT_USE = 3;
        ERROR_DEPLOYED_TO_FORT = 4;
    }

    Result result = 1;
    int32 stamina = 2;
}

// ref: Holoholo.Rpc.UseItemReviveProto
message UseItemReviveProto {
    Item item = 1;
    uint64 pokemon_id = 2;
}

// ref: Holoholo.Rpc.UseItemStardustBoostOutProto
message UseItemStardustBoostOutProto {
    // ref: Holoholo.Rpc.UseItemStardustBoostOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_INVALID_ITEM_TYPE = 2;
        ERROR_STARDUST_BOOST_ALREADY_ACTIVE = 3;
        ERROR_NO_ITEMS_REMAINING = 4;
        ERROR_LOCATION_UNSET = 5;
    }

    Result result = 1;
    AppliedItemsProto applied_items = 2;
}

// ref: Holoholo.Rpc.UseItemStardustBoostProto
message UseItemStardustBoostProto {
    Item item = 1;
}

// ref: Holoholo.Rpc.UseItemXpBoostOutProto
message UseItemXpBoostOutProto {
    // ref: Holoholo.Rpc.UseItemXpBoostOutProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        ERROR_INVALID_ITEM_TYPE = 2;
        ERROR_XP_BOOST_ALREADY_ACTIVE = 3;
        ERROR_NO_ITEMS_REMAINING = 4;
        ERROR_LOCATION_UNSET = 5;
    }

    Result result = 1;
    AppliedItemsProto applied_items = 2;
}

// ref: Holoholo.Rpc.UseItemXpBoostProto
message UseItemXpBoostProto {
    Item item = 1;
}

// ref: Holoholo.Rpc.UserAttributesProto
message UserAttributesProto {
    int32 level = 1;
    int64 xp = 2;
    int32 avatar = 3;
    int64 item_count = 4;
    int64 pokemon_count = 5;
    int64 pokecoin_count = 6;
    int32 team = 7;
    int32 catch_streak = 8;
    int32 spin_streak = 9;
}

// ref: Holoholo.Rpc.UserIssueWeatherReport
message UserIssueWeatherReport {
    string gameplayer_weather = 1;
    bool alert_active = 2;
    int32 severity = 3;
    int32 user_report = 4;
}

// ref: Holoholo.Rpc.VerifyChallengeOutProto
message VerifyChallengeOutProto {
    bool success = 1;
}

// ref: Holoholo.Rpc.VerifyChallengeProto
message VerifyChallengeProto {
    string token = 1;
}

// ref: Holoholo.Rpc.WeatherAffinityProto
message WeatherAffinityProto {
    niantic.rpc.GameplayWeatherProto.WeatherCondition weather_condition = 1;
    repeated HoloPokemonType pokemon_type = 2 [packed=false];
}

// ref: Holoholo.Rpc.WeatherBonusProto
message WeatherBonusProto {
    int32 cp_base_level_bonus = 1;
    int32 guaranteed_individual_values = 2;
    double stardust_bonus_multiplier = 3;
    double attack_bonus_multiplier = 4;
    int32 raid_encounter_cp_base_level_bonus = 5;
    int32 raid_encounter_guaranteed_individual_values = 6;
}

// ref: Holoholo.Rpc.WeatherDetailClickTelemetry
message WeatherDetailClickTelemetry {
    string gameplay_weather_type = 1;
    bool alert_active = 2;
    int32 severity = 3;
}

// ref: Holoholo.Rpc.WebTelemetry
message WebTelemetry {
    WebTelemetryIds web_click_ids = 1;
    string url = 2;
}

// ref: Holoholo.Rpc.WildPokemonProto
message WildPokemonProto {
    uint64 encounter_id = 1;
    int64 last_modified_ms = 2;
    double latitude = 3;
    double longitude = 4;
    string spawn_point_id = 5;
    PokemonProto pokemon = 7;
    int32 time_till_hidden_ms = 11;
}

// ref: Holoholo.Rpc.WithBadgeTypeProto
message WithBadgeTypeProto {
    repeated HoloBadgeType badge_type = 1 [packed=false];
    int32 badge_rank = 2;
    int32 amount = 3;
}

// ref: Holoholo.Rpc.WithCurveBallProto
message WithCurveBallProto {
}

// ref: Holoholo.Rpc.WithDailyCaptureBonusProto
message WithDailyCaptureBonusProto {
}

// ref: Holoholo.Rpc.WithDailySpinBonusProto
message WithDailySpinBonusProto {
}

// ref: Holoholo.Rpc.WithItemProto
message WithItemProto {
    Item item = 1;
}

// ref: Holoholo.Rpc.WithPlayerLevelProto
message WithPlayerLevelProto {
    int32 level = 1;
}

// ref: Holoholo.Rpc.WithPokemonCategoryProto
message WithPokemonCategoryProto {
    string category_name = 1;
    repeated HoloPokemonId pokemon_ids = 2 [packed=false];
}

// ref: Holoholo.Rpc.WithPokemonTypeProto
message WithPokemonTypeProto {
    repeated HoloPokemonType pokemon_type = 1 [packed=false];
}

// ref: Holoholo.Rpc.WithQuestContextProto
message WithQuestContextProto {
    QuestProto.Context context = 1;
}

// ref: Holoholo.Rpc.WithRaidLevelProto
message WithRaidLevelProto {
    repeated RaidLevel raid_level = 1 [packed=false];
}

// ref: Holoholo.Rpc.WithSuperEffectiveChargeMoveProto
message WithSuperEffectiveChargeMoveProto {
}

// ref: Holoholo.Rpc.WithThrowTypeProto
message WithThrowTypeProto {
    // ref: Holoholo.Rpc.WithThrowTypeProto/ThrowOneofCase
    enum ThrowOneofCase {
        none = 0;
        throw_type = 1;
        hit = 2;
    }

    HoloActivityType throw_type = 1;
    bool hit = 2;
}

// ref: Holoholo.Rpc.WithUniquePokestopProto
message WithUniquePokestopProto {
}

// ref: Holoholo.Rpc.WithWeatherBoostProto
message WithWeatherBoostProto {
}

// ref: Holoholo.Rpc.WithWinBattleStatusProto
message WithWinBattleStatusProto {
}

// ref: Holoholo.Rpc.WithWinGymBattleStatusProto
message WithWinGymBattleStatusProto {
}

// ref: Holoholo.Rpc.WithWinRaidStatusProto
message WithWinRaidStatusProto {
}


//----- End rpc -----
//------------------------------
//----- Begin battle -----

// ref: Niantic.Holoholo.Battle.BattlePartiesProto
message BattlePartiesProto {
    repeated BattlePartyProto battle_parties = 1 [packed=false];
}

// ref: Niantic.Holoholo.Battle.BattlePartyProto
message BattlePartyProto {
    string name = 1;
    int32 team_number = 2;
    repeated uint64 ids = 3 [packed=false];
}


//----- End battle -----
//------------------------------
//----- Begin telemetry -----

// ref: Niantic.Platform.Telemetry.TelemetryDomainId
enum TelemetryDomainId {
    TELEMETRY_NO_DOMAIN_ID = 0;
    TELEMETRY_DITTO = 1;
    TELEMETRY_GAME = 2;
}

// ref: Niantic.Platform.Telemetry.ClientTelemetryOutProto
message ClientTelemetryOutProto {
    // ref: Niantic.Platform.Telemetry.ClientTelemetryOutProto/Types/Status
    enum Status {
        UNSET = 0;
        SUCCESS = 1;
        FAILURE = 2;
        ERROR_INVALID_REQUEST = 3;
        ERROR_INVALID_PROTO = 4;
        ERROR_UNSET_TELEMETRY_ID = 5;
    }

    Status status = 1;
    int32 rows_written = 2;
}

// ref: Niantic.Platform.Telemetry.ClientTelemetryProto
message ClientTelemetryProto {
    repeated PlatformDataId data_id = 1 [packed=false];
    repeated bytes application_data = 2 [packed=false];
}

// ref: Niantic.Platform.Telemetry.Distribution
message Distribution {
    // ref: Niantic.Platform.Telemetry.Distribution/Types/BucketOptions/BucketTypeOneofCase
    enum BucketTypeOneofCase {
        none = 0;
        linear_buckets = 1;
        exponential_buckets = 2;
        explicit_buckets = 3;
    }

    // ref: Niantic.Platform.Telemetry.Distribution/Types/BucketOptions
    message BucketOptions {
        // ref: Niantic.Platform.Telemetry.Distribution/Types/BucketOptions/BucketTypeOneofCase
        enum BucketTypeOneofCase {
            none = 0;
            linear_buckets = 1;
            exponential_buckets = 2;
            explicit_buckets = 3;
        }

        // ref: Niantic.Platform.Telemetry.Distribution/Types/BucketOptions/Types/ExplicitBuckets
        message ExplicitBuckets {
            repeated int64 bounds = 1 [packed=false];
        }

        // ref: Niantic.Platform.Telemetry.Distribution/Types/BucketOptions/Types/ExponentialBuckets
        message ExponentialBuckets {
            int64 num_finite_buckets = 1;
            float growth_factor = 2;
            float scale = 3;
        }

        // ref: Niantic.Platform.Telemetry.Distribution/Types/BucketOptions/Types/LinearBuckets
        message LinearBuckets {
            int64 num_finite_buckets = 1;
            int64 width = 2;
            int64 offset = 3;
        }

        Distribution.LinearBuckets linear_buckets = 1;
        Distribution.ExponentialBuckets exponential_buckets = 2;
        Distribution.ExplicitBuckets explicit_buckets = 3;
    }

    // ref: Niantic.Platform.Telemetry.Distribution/Types/BucketOptions/Types/ExplicitBuckets
    message ExplicitBuckets {
        repeated int64 bounds = 1 [packed=false];
    }

    // ref: Niantic.Platform.Telemetry.Distribution/Types/BucketOptions/Types/ExponentialBuckets
    message ExponentialBuckets {
        int64 num_finite_buckets = 1;
        float growth_factor = 2;
        float scale = 3;
    }

    // ref: Niantic.Platform.Telemetry.Distribution/Types/BucketOptions/Types/LinearBuckets
    message LinearBuckets {
        int64 num_finite_buckets = 1;
        int64 width = 2;
        int64 offset = 3;
    }

    // ref: Niantic.Platform.Telemetry.Distribution/Types/Range
    message Range {
        int64 min = 1;
        int64 max = 2;
    }

    int64 count = 1;
    float mean = 2;
    double sum_of_squared_deviation = 3;
    Range range = 4;
    BucketOptions bucket_options = 5;
    repeated int64 bucket_counts = 6 [packed=false];
}

// ref: Niantic.Platform.Telemetry.PlatformDataId
message PlatformDataId {
    int32 telemetry_id = 1;
    TelemetryDomainId telemetry_domain_id = 2;
}

// ref: Niantic.Platform.Telemetry.PlatformEventData
message PlatformEventData {
    TelemetryCommon common_telemetry = 1;
}

// ref: Niantic.Platform.Telemetry.PlatformMetricData
message PlatformMetricData {
    // ref: Niantic.Platform.Telemetry.PlatformMetricData/DatapointValueOneofCase
    enum DatapointValueOneofCase {
        none = 0;
        long_value = 2;
        double_value = 3;
        boolean_value = 4;
        distribution = 5;
    }

    // ref: Niantic.Platform.Telemetry.PlatformMetricData/Types/Kind
    enum Kind {
        UNSPECIFIED = 0;
        GAUGE = 1;
        DELTA = 2;
        CUMULATIVE = 3;
    }

    TelemetryCommon common_telemetry = 1;
    int64 long_value = 2;
    double double_value = 3;
    bool boolean_value = 4;
    Distribution distribution = 5;
    Kind metric_kind = 6;
}

// ref: Niantic.Platform.Telemetry.PlatformServerData
message PlatformServerData {
    string user_id = 1;
    string telemetry_id = 2;
    string session_id = 3;
    repeated int32 experiment_ids = 4 [packed=false];
}

// ref: Niantic.Platform.Telemetry.TelemetryCommon
message TelemetryCommon {
    int64 timestamp = 1;
    string correlation_vector = 2;
}


//----- End telemetry -----
//------------------------------
//----- Begin assetcache -----

// ref: Niantic.Ingress.Core.AssetCache.HashedKeyProto
message HashedKeyProto {
    string hashed_key_raw = 1;
}

// ref: Niantic.Ingress.Core.AssetCache.JournalAddEntryProto
message JournalAddEntryProto {
    HashedKeyProto hashed_key = 1;
    int64 entry_size = 2;
}

// ref: Niantic.Ingress.Core.AssetCache.JournalEntryProto
message JournalEntryProto {
    // ref: Niantic.Ingress.Core.AssetCache.JournalEntryProto/SubentryOneofCase
    enum SubentryOneofCase {
        none = 0;
        add_entry = 1;
        read_entry = 2;
        remove_entry = 3;
    }

    JournalAddEntryProto add_entry = 1;
    JournalReadEntryProto read_entry = 2;
    JournalRemoveEntryProto remove_entry = 3;
}

// ref: Niantic.Ingress.Core.AssetCache.JournalReadEntryProto
message JournalReadEntryProto {
    HashedKeyProto hashed_key = 1;
}

// ref: Niantic.Ingress.Core.AssetCache.JournalRemoveEntryProto
message JournalRemoveEntryProto {
    HashedKeyProto hashed_key = 1;
}

// ref: Niantic.Ingress.Core.AssetCache.JournalVersionProto
message JournalVersionProto {
    int32 version = 1;
}


//----- End assetcache -----
//------------------------------
//----- Begin gamemaster -----

// ref: Niantic.Platform.GameMaster.ClientGameMasterTemplateProto
message ClientGameMasterTemplateProto {
    string template_id = 1;
    bytes data = 2;
}

// ref: Niantic.Platform.GameMaster.DownloadGmTemplatesRequestProto
message DownloadGmTemplatesRequestProto {
    int64 basis_batch_id = 1;
    int64 batch_id = 2;
    int32 page_offset = 3;
}

// ref: Niantic.Platform.GameMaster.DownloadGmTemplatesResponseProto
message DownloadGmTemplatesResponseProto {
    // ref: Niantic.Platform.GameMaster.DownloadGmTemplatesResponseProto/Types/Result
    enum Result {
        UNSET = 0;
        COMPLETE = 1;
        MORE_RESULTS = 2;
        BATCH_ID_NOT_LIVE = 3;
        INVALID_BASIS_BATCH_ID = 4;
    }

    Result result = 1;
    repeated ClientGameMasterTemplateProto template = 2 [packed=false];
    repeated string deleted_template = 3 [packed=false];
    uint64 batch_id = 4;
    int32 page_offset = 5;
}


//----- End gamemaster -----
//------------------------------
//----- Begin internal -----

// ref: Niantic.Platform.Auth.Plugins.Internal.InternalAuthProto
message InternalAuthProto {
    string email = 1;
    string player_id = 2;
    string app_id = 3;
    string key = 4;
}


//----- End internal -----
//------------------------------
//----- Begin inventory -----

// ref: Niantic.Platform.Inventory.GetInventoryProto
message GetInventoryProto {
    int64 timestamp_millis = 1;
}

// ref: Niantic.Platform.Inventory.GetInventoryResponseProto
message GetInventoryResponseProto {
    bool success = 1;
    InventoryDeltaProto inventory_delta = 2;
}

// ref: Niantic.Platform.Inventory.InventoryDeltaProto
message InventoryDeltaProto {
    int64 original_timestamp = 1;
    int64 new_timestamp = 2;
    repeated InventoryItemProto inventory_item = 3 [packed=false];
}

// ref: Niantic.Platform.Inventory.InventoryItemProto
message InventoryItemProto {
    // ref: Niantic.Platform.Inventory.InventoryItemProto/InventoryItemOneofCase
    enum InventoryItemOneofCase {
        none = 0;
        deleted_item_key = 2;
        item = 3;
    }

    int64 modified_timestamp = 1;
    bytes deleted_item_key = 2;
    bytes item = 3;
}

// ref: Niantic.Platform.Inventory.InventoryProto
message InventoryProto {
    repeated InventoryItemProto inventory_item = 1 [packed=false];
}


//----- End inventory -----
//------------------------------
//----- Begin proto -----

// ref: RedeemPasscodeRequestProto
message RedeemPasscodeRequestProto {
    string passcode = 1;
}

// ref: RedeemPasscodeResponseProto
message RedeemPasscodeResponseProto {
    // ref: RedeemPasscodeResponseProto/Types/Result
    enum Result {
        UNSET = 0;
        SUCCESS = 1;
        NOT_AVAILABLE = 2;
        OVER_INVENTORY_LIMIT = 3;
        ALREADY_REDEEMED = 4;
    }

    // ref: RedeemPasscodeResponseProto/Types/AcquiredItem
    message AcquiredItem {
        string item = 1;
        int64 count = 2;
    }

    Result result = 1;
    repeated AcquiredItem acquired_item = 2 [packed=false];
    bytes acquired_items_proto = 3;
    string passcode = 4;
}


//----- End proto -----
//------------------------------
//----- Begin platform -----

// ref: Com.Nianticproject.Platform.ProxyRequestProto
message ProxyRequestProto {
    uint32 action = 1;
    string host = 2;
    bytes payload = 3;
}

// ref: Com.Nianticproject.Platform.ProxyResponseProto
message ProxyResponseProto {
    // ref: Com.Nianticproject.Platform.ProxyResponseProto/Types/Status
    enum Status {
        UNSET = 0;
        COMPLETED = 1;
        COMPLETED_AND_REASSIGNED = 2;
        ACTION_NOT_FOUND = 3;
        ASSIGNMENT_ERROR = 4;
        PROXY_UNAUTHORIZED_ERROR = 5;
        INTERNAL_ERROR = 6;
        BAD_REQUEST = 7;
        ACCESS_DENIED = 8;
        TIMEOUT_ERROR = 9;
    }

    Status status = 1;
    string assigned_host = 2;
    bytes payload = 3;
}


//----- End platform -----
//------------------------------
//----- Begin rpc -----

// ref: Niantic.Rpc.ClientWeatherProto
message ClientWeatherProto {
    int64 s2_cell_id = 1;
    DisplayWeatherProto display_weather = 2;
    GameplayWeatherProto gameplay_weather = 3;
    repeated WeatherAlertProto alerts = 4 [packed=false];
}

// ref: Niantic.Rpc.DisplayWeatherProto
message DisplayWeatherProto {
    // ref: Niantic.Rpc.DisplayWeatherProto/Types/DisplayLevel
    enum DisplayLevel {
        LEVEL_0 = 0;
        LEVEL_1 = 1;
        LEVEL_2 = 2;
        LEVEL_3 = 3;
    }

    DisplayLevel cloud_level = 1;
    DisplayLevel rain_level = 2;
    DisplayLevel wind_level = 3;
    DisplayLevel snow_level = 4;
    DisplayLevel fog_level = 5;
    int32 wind_direction = 6;
    DisplayLevel special_effect_level = 7;
}

// ref: Niantic.Rpc.GameplayWeatherProto
message GameplayWeatherProto {
    // ref: Niantic.Rpc.GameplayWeatherProto/Types/WeatherCondition
    enum WeatherCondition {
        NONE = 0;
        CLEAR = 1;
        RAINY = 2;
        PARTLY_CLOUDY = 3;
        OVERCAST = 4;
        WINDY = 5;
        SNOW = 6;
        FOG = 7;
    }

    WeatherCondition gameplay_condition = 1;
}

// ref: Niantic.Rpc.WeatherAlertProto
message WeatherAlertProto {
    // ref: Niantic.Rpc.WeatherAlertProto/Types/Severity
    enum Severity {
        NONE = 0;
        MODERATE = 1;
        EXTREME = 2;
    }

    Severity severity = 1;
    bool warn_weather = 2;
}


//----- End rpc -----
//------------------------------
//----- Begin google -----

// ref: Niantic.Platform.Auth.Plugins.Google.GoogleToken
message GoogleToken {
    string id_token = 1;
}


//----- End google -----
//------------------------------
//----- Begin events -----

// ref: Niantic.Platform.Ditto.Events.ChannelAuthEventParams
message ChannelAuthEventParams {
    uint32 status = 1;
}

// ref: Niantic.Platform.Ditto.Events.GoogleAuthEventParams
message GoogleAuthEventParams {
    string payload = 1;
    string account_name = 2;
}

// ref: Niantic.Platform.Ditto.Events.LocationUpdateEventParams
message LocationUpdateEventParams {
    double latitude_deg = 1;
    double longitude_deg = 2;
    double altitude_m = 3;
    double accuracy_m = 4;
    double timestamp_s = 5;
    uint32 provider_status = 6;
    uint32 location_type = 7;
}

// ref: Niantic.Platform.Ditto.Events.RpcResponseEventParams
message RpcResponseEventParams {
    uint32 rpc_id = 1;
    uint32 status = 2;
    repeated bytes payloads = 3 [packed=false];
}

// ref: Niantic.Platform.Ditto.Events.SyncRequestedEventParams
message SyncRequestedEventParams {
}


//----- End events -----
//------------------------------
//----- Begin auth -----

// ref: Com.Nianticproject.Platform.Auth.IdentityProvider
enum IdentityProvider {
    UNSET_IDENTITY_PROVIDER = 0;
    GOOGLE = 1;
    PTC = 2;
    FACEBOOK = 3;
    BACKGROUND = 4;
    INTERNAL = 5;
    SFIDA = 6;
    SUPER_AWESOME = 7;
}


//----- End auth -----
//------------------------------