Skip to content

Protocol for r/21_u9 NetworkProtocolVersion 818 #21

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@
We share our Network Protocol with server partners so they can write their own Minecraft servers with their own code. This documentation compiles a series of tree diagrams that define the structure of the packets used by the Protocol, as well as related classes and enums.
Protocol is subject to change release over release.

Current Release - r/21_u8
Current Release - r/21_u9
128 changes: 128 additions & 0 deletions changelog_818_5_21_25.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
# Minecraft Network Protocol Docs 5/21/25
For r21_u9, Network Protocol Version 818


## New Packets

ServerScriptDebugDrawerPacket:
* Added mShapes (std::vector<PacketShapeData>) [PacketShapeData type definition in New Types]


## Packet Changes

ResourcePacksInfoPacket:
* Added mData.mForceDisableVibrantVisuals (bool)


## Removed Packets

* SetMovementAuthorityMode (now SetMovementAuthorityMode_DEPRECATED)


## New Types

PacketShapeData:
* Added mNetworkId (uint64_t)
* Added mShapeType (brstd::optional<ScriptModuleDebugUtilities::ScriptDebugShapeType>) [ScriptModuleDebugUtilities::ScriptDebugShapeType enum definition in New Enums]
* Added mLocation (brstd::optional<Vec3>)
* Added mRotation (brstd::optional<Vec3>)
* Added mScale (brstd::optional<float>)
* Added mColor (brstd::optional<mce::Color>)
* Added mTimeLeftTotalSec (brstd::optional<float>)
* Added mText (brstd::optional<std::string>)
* Added mBoxBound (brstd::optional<Vec3>)
* Added mEndLocation (brstd::optional<Vec3>)
* Added mArrowHeadLength (brstd::optional<float>)
* Added mArrowHeadRadius (brstd::optional<float>)
* Added mNumSegments (brstd::optional<byte>)


## Other Changes to Types

CameraInstruction::SetInstruction:
* Added mRemoveIgnoreStartingValuesComponent (bool)

LevelSettings:
* Added mOwnerId (std::string)

SharedTypes::v1_21_80::CameraPreset:
* Removed mAlignTargetAndCameraForward

SubChunkPacket::HeightmapData:
* Added mRenderHeightMapType (enum SubChunkPacket::HeightMapDataType)
* Added mSubchunkRenderHeightMap (std::array<std::array<int8_t, LevelConstants::CHUNK_WIDTH>, LevelConstants::CHUNK_WIDTH>)

SyncedPlayerMovementSettings:
* Removed mAuthorityMode


## New Enums

ScriptModuleDebugUtilities::ScriptDebugShapeType:
* Added Line (0) []
* Added Box (1) []
* Added Sphere (2) []
* Added Circle (3) []
* Added Text (4) []
* Added Arrow (5) []
* Added NumShapeTypes (6) []


## Enum Changes

ActorFlags:
* Added BODY_ROTATION_ALWAYS_FOLLOWS_HEAD (124) []
* Displaced Count

Connection::DisconnectFailReason:
* Added RealmsTimelineRequired (119) []
* Added GuestWithoutHost (120) []
* Added FailedToJoinExperience (121) []

MinecraftPacketIds:
* Added SetMovementAuthorityMode_DEPRECATED (319) []
* Added ServerScriptDebugDrawerPacket (328) []
* Changed EndId from 328 to 329
* Removed SetMovementAuthorityMode

PlayerActionType:
* Added DEPRECATED_ClientAckServerData (36) [Corresponds to Player Auth Input InputData::ClientAckServerData bit 44
Not sent when using server authoritative movement as specified in StartGamePacket
This is now deprecated because only server authoritative movement exist ]
* Removed ClientAckServerData

SharedTypes::Legacy::LevelSoundEvent:
* Added ImitateDrowned (531) []
* Added ImitateCreaking (532) []
* Added BundleInsertFail (533) []
* Added SpongeAbsorb (534) []
* Added CreakingHeartTrail (536) []
* Added CreakingHeartSpawn (537) []
* Added Activate (538) []
* Added Deactivate (539) []
* Added Freeze (540) []
* Added Unfreeze (541) []
* Added Open (542) []
* Added OpenLong (543) []
* Added Close (544) []
* Added CloseLong (545) []
* Added ImitatePhantom (546) []
* Added ImitateZoglin (547) []
* Added ImitateGuardian (548) []
* Added ImitateRavager (549) []
* Added ImitatePillager (550) []
* Added PlaceInWater (551) []
* Added StateChange (552) []
* Added ImitateHappyGhast (553) []
* Added UnequipGeneric (554) []
* Added RecordTears (555) []
* Added TheEndLightFlash (556) []
* Added LeadLeash (557) []
* Added LeadUnleash (558) []
* Added LeadBreak (559) []
* Added Unsaddle (560) []
* Changed Undefined from 531 to 561
* Removed ImitateIllusionIllager

SubChunkPacket::HeightMapDataType:
* Added AllCopied (4) []
4 changes: 2 additions & 2 deletions dot/ActorDataFlagComponent.dot
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ rankdir = LR
3 -> 7

2 [label="ActorDataFlagComponent",comment="name: \"ActorDataFlagComponent\", typeName: \"\", id: 2, branchId: 0, recurseId: -1, attributes: 0, notes: \"\""];
3 [label="Actor Flag Bitset Data",comment="name: \"Actor Flag Bitset Data\", typeName: \"std::bitset<124>\", id: 3, branchId: 0, recurseId: -1, attributes: 256, notes: \"Bitset where the bits are indexed by ActorFlags, see ActorFlagsBitset\""];
7 [label="std::bitset<124>",comment="name: \"std::bitset<124>\", typeName: \"\", id: 7, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
3 [label="Actor Flag Bitset Data",comment="name: \"Actor Flag Bitset Data\", typeName: \"std::bitset<125>\", id: 3, branchId: 0, recurseId: -1, attributes: 256, notes: \"Bitset where the bits are indexed by ActorFlags, see ActorFlagsBitset\""];
7 [label="std::bitset<125>",comment="name: \"std::bitset<125>\", typeName: \"\", id: 7, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
{ rank = max;7}

}
14 changes: 7 additions & 7 deletions dot/CameraAimAssist__TargetMode.dot
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
digraph "CameraAimAssist::TargetMode" {
rankdir = LR
84
84 -> 85
85 -> 86
82
82 -> 83
83 -> 84

84 [label="CameraAimAssist::TargetMode",comment="name: \"CameraAimAssist::TargetMode\", typeName: \"\", id: 84, branchId: 0, recurseId: -1, attributes: 0, notes: \"\""];
85 [label="Target Mode",comment="name: \"Target Mode\", typeName: \"\", id: 85, branchId: 0, recurseId: -1, attributes: 0, notes: \"\""];
86 [label="byte",comment="name: \"byte\", typeName: \"\", id: 86, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
{ rank = max;86}
82 [label="CameraAimAssist::TargetMode",comment="name: \"CameraAimAssist::TargetMode\", typeName: \"\", id: 82, branchId: 0, recurseId: -1, attributes: 0, notes: \"\""];
83 [label="Target Mode",comment="name: \"Target Mode\", typeName: \"\", id: 83, branchId: 0, recurseId: -1, attributes: 0, notes: \"\""];
84 [label="byte",comment="name: \"byte\", typeName: \"\", id: 84, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
{ rank = max;84}

}
38 changes: 19 additions & 19 deletions dot/CameraInstruction.dot
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,27 @@ digraph "CameraInstruction" {
rankdir = LR
2
2 -> 3
3 -> 87
2 -> 88
88 -> 89
2 -> 90
90 -> 125
2 -> 126
126 -> 137
2 -> 138
138 -> 139
3 -> 92
2 -> 93
93 -> 94
2 -> 95
95 -> 130
2 -> 131
131 -> 142
2 -> 143
143 -> 144

2 [label="CameraInstruction",comment="name: \"CameraInstruction\", typeName: \"\", id: 2, branchId: 0, recurseId: -1, attributes: 0, notes: \"\""];
3 [label="Set",comment="name: \"Set\", typeName: \"std::optional<struct CameraInstruction::SetInstruction>\", id: 3, branchId: 0, recurseId: -1, attributes: 256, notes: \"\""];
87 [label="std::optional<struct CameraInstruction::SetInstruction>",comment="name: \"std::optional<struct CameraInstruction::SetInstruction>\", typeName: \"\", id: 87, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
88 [label="Clear",comment="name: \"Clear\", typeName: \"std::optional<bool>\", id: 88, branchId: 0, recurseId: -1, attributes: 256, notes: \"\""];
89 [label="std::optional<bool>",comment="name: \"std::optional<bool>\", typeName: \"\", id: 89, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
90 [label="Fade",comment="name: \"Fade\", typeName: \"std::optional<struct CameraInstruction::FadeInstruction>\", id: 90, branchId: 0, recurseId: -1, attributes: 256, notes: \"\""];
125 [label="std::optional<struct CameraInstruction::FadeInstruction>",comment="name: \"std::optional<struct CameraInstruction::FadeInstruction>\", typeName: \"\", id: 125, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
126 [label="Target",comment="name: \"Target\", typeName: \"std::optional<struct CameraInstruction::TargetInstruction>\", id: 126, branchId: 0, recurseId: -1, attributes: 256, notes: \"\""];
137 [label="std::optional<struct CameraInstruction::TargetInstruction>",comment="name: \"std::optional<struct CameraInstruction::TargetInstruction>\", typeName: \"\", id: 137, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
138 [label="RemoveTarget",comment="name: \"RemoveTarget\", typeName: \"std::optional<bool>\", id: 138, branchId: 0, recurseId: -1, attributes: 256, notes: \"\""];
139 [label="std::optional<bool>",comment="name: \"std::optional<bool>\", typeName: \"\", id: 139, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
{ rank = max;87;89;125;137;139}
92 [label="std::optional<struct CameraInstruction::SetInstruction>",comment="name: \"std::optional<struct CameraInstruction::SetInstruction>\", typeName: \"\", id: 92, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
93 [label="Clear",comment="name: \"Clear\", typeName: \"std::optional<bool>\", id: 93, branchId: 0, recurseId: -1, attributes: 256, notes: \"\""];
94 [label="std::optional<bool>",comment="name: \"std::optional<bool>\", typeName: \"\", id: 94, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
95 [label="Fade",comment="name: \"Fade\", typeName: \"std::optional<struct CameraInstruction::FadeInstruction>\", id: 95, branchId: 0, recurseId: -1, attributes: 256, notes: \"\""];
130 [label="std::optional<struct CameraInstruction::FadeInstruction>",comment="name: \"std::optional<struct CameraInstruction::FadeInstruction>\", typeName: \"\", id: 130, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
131 [label="Target",comment="name: \"Target\", typeName: \"std::optional<struct CameraInstruction::TargetInstruction>\", id: 131, branchId: 0, recurseId: -1, attributes: 256, notes: \"\""];
142 [label="std::optional<struct CameraInstruction::TargetInstruction>",comment="name: \"std::optional<struct CameraInstruction::TargetInstruction>\", typeName: \"\", id: 142, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
143 [label="RemoveTarget",comment="name: \"RemoveTarget\", typeName: \"std::optional<bool>\", id: 143, branchId: 0, recurseId: -1, attributes: 256, notes: \"\""];
144 [label="std::optional<bool>",comment="name: \"std::optional<bool>\", typeName: \"\", id: 144, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
{ rank = max;92;94;130;142;144}

}
6 changes: 3 additions & 3 deletions dot/CameraInstructionPacket.dot
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ digraph "CameraInstructionPacket" {
rankdir = LR
0
0 -> 1
1 -> 140
1 -> 145

0 [label="CameraInstructionPacket",comment="name: \"CameraInstructionPacket\", typeName: \"\", id: 0, branchId: 300, recurseId: -1, attributes: 0, notes: \"\""];
1 [label="Camera Instruction",comment="name: \"Camera Instruction\", typeName: \"CameraInstruction\", id: 1, branchId: 0, recurseId: -1, attributes: 256, notes: \"\""];
140 [label="CameraInstruction",comment="name: \"CameraInstruction\", typeName: \"\", id: 140, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
{ rank = max;140}
145 [label="CameraInstruction",comment="name: \"CameraInstruction\", typeName: \"\", id: 145, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
{ rank = max;145}

}
22 changes: 11 additions & 11 deletions dot/CameraInstruction__FadeInstruction.dot
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
digraph "CameraInstruction::FadeInstruction" {
rankdir = LR
95
95 -> 96
96 -> 109
95 -> 110
110 -> 123
100
100 -> 101
101 -> 114
100 -> 115
115 -> 128

95 [label="CameraInstruction::FadeInstruction",comment="name: \"CameraInstruction::FadeInstruction\", typeName: \"\", id: 95, branchId: 0, recurseId: -1, attributes: 0, notes: \"\""];
96 [label="Time",comment="name: \"Time\", typeName: \"std::optional<struct CameraInstruction::FadeInstruction::TimeOption>\", id: 96, branchId: 0, recurseId: -1, attributes: 256, notes: \"\""];
109 [label="std::optional<struct CameraInstruction::FadeInstruction::TimeOption>",comment="name: \"std::optional<struct CameraInstruction::FadeInstruction::TimeOption>\", typeName: \"\", id: 109, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
110 [label="Color",comment="name: \"Color\", typeName: \"std::optional<struct CameraInstruction::FadeInstruction::ColorOption>\", id: 110, branchId: 0, recurseId: -1, attributes: 256, notes: \"\""];
123 [label="std::optional<struct CameraInstruction::FadeInstruction::ColorOption>",comment="name: \"std::optional<struct CameraInstruction::FadeInstruction::ColorOption>\", typeName: \"\", id: 123, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
{ rank = max;109;123}
100 [label="CameraInstruction::FadeInstruction",comment="name: \"CameraInstruction::FadeInstruction\", typeName: \"\", id: 100, branchId: 0, recurseId: -1, attributes: 0, notes: \"\""];
101 [label="Time",comment="name: \"Time\", typeName: \"std::optional<struct CameraInstruction::FadeInstruction::TimeOption>\", id: 101, branchId: 0, recurseId: -1, attributes: 256, notes: \"\""];
114 [label="std::optional<struct CameraInstruction::FadeInstruction::TimeOption>",comment="name: \"std::optional<struct CameraInstruction::FadeInstruction::TimeOption>\", typeName: \"\", id: 114, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
115 [label="Color",comment="name: \"Color\", typeName: \"std::optional<struct CameraInstruction::FadeInstruction::ColorOption>\", id: 115, branchId: 0, recurseId: -1, attributes: 256, notes: \"\""];
128 [label="std::optional<struct CameraInstruction::FadeInstruction::ColorOption>",comment="name: \"std::optional<struct CameraInstruction::FadeInstruction::ColorOption>\", typeName: \"\", id: 128, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
{ rank = max;114;128}

}
28 changes: 14 additions & 14 deletions dot/CameraInstruction__FadeInstruction__ColorOption.dot
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
digraph "CameraInstruction::FadeInstruction::ColorOption" {
rankdir = LR
115
115 -> 116
116 -> 117
115 -> 118
118 -> 119
115 -> 120
120
120 -> 121
121 -> 122
120 -> 123
123 -> 124
120 -> 125
125 -> 126

115 [label="CameraInstruction::FadeInstruction::ColorOption",comment="name: \"CameraInstruction::FadeInstruction::ColorOption\", typeName: \"\", id: 115, branchId: 0, recurseId: -1, attributes: 0, notes: \"\""];
116 [label="Red",comment="name: \"Red\", typeName: \"\", id: 116, branchId: 0, recurseId: -1, attributes: 0, notes: \"\""];
117 [label="float",comment="name: \"float\", typeName: \"\", id: 117, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
118 [label="Green",comment="name: \"Green\", typeName: \"\", id: 118, branchId: 0, recurseId: -1, attributes: 0, notes: \"\""];
119 [label="float",comment="name: \"float\", typeName: \"\", id: 119, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
120 [label="Blue",comment="name: \"Blue\", typeName: \"\", id: 120, branchId: 0, recurseId: -1, attributes: 0, notes: \"\""];
121 [label="float",comment="name: \"float\", typeName: \"\", id: 121, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
{ rank = max;117;119;121}
120 [label="CameraInstruction::FadeInstruction::ColorOption",comment="name: \"CameraInstruction::FadeInstruction::ColorOption\", typeName: \"\", id: 120, branchId: 0, recurseId: -1, attributes: 0, notes: \"\""];
121 [label="Red",comment="name: \"Red\", typeName: \"\", id: 121, branchId: 0, recurseId: -1, attributes: 0, notes: \"\""];
122 [label="float",comment="name: \"float\", typeName: \"\", id: 122, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
123 [label="Green",comment="name: \"Green\", typeName: \"\", id: 123, branchId: 0, recurseId: -1, attributes: 0, notes: \"\""];
124 [label="float",comment="name: \"float\", typeName: \"\", id: 124, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
125 [label="Blue",comment="name: \"Blue\", typeName: \"\", id: 125, branchId: 0, recurseId: -1, attributes: 0, notes: \"\""];
126 [label="float",comment="name: \"float\", typeName: \"\", id: 126, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
{ rank = max;122;124;126}

}
28 changes: 14 additions & 14 deletions dot/CameraInstruction__FadeInstruction__TimeOption.dot
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
digraph "CameraInstruction::FadeInstruction::TimeOption" {
rankdir = LR
101
101 -> 102
102 -> 103
101 -> 104
104 -> 105
101 -> 106
106
106 -> 107
107 -> 108
106 -> 109
109 -> 110
106 -> 111
111 -> 112

101 [label="CameraInstruction::FadeInstruction::TimeOption",comment="name: \"CameraInstruction::FadeInstruction::TimeOption\", typeName: \"\", id: 101, branchId: 0, recurseId: -1, attributes: 0, notes: \"\""];
102 [label="Fade In Time",comment="name: \"Fade In Time\", typeName: \"\", id: 102, branchId: 0, recurseId: -1, attributes: 0, notes: \"\""];
103 [label="float",comment="name: \"float\", typeName: \"\", id: 103, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
104 [label="Hold Time",comment="name: \"Hold Time\", typeName: \"\", id: 104, branchId: 0, recurseId: -1, attributes: 0, notes: \"\""];
105 [label="float",comment="name: \"float\", typeName: \"\", id: 105, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
106 [label="Fade Out Time",comment="name: \"Fade Out Time\", typeName: \"\", id: 106, branchId: 0, recurseId: -1, attributes: 0, notes: \"\""];
107 [label="float",comment="name: \"float\", typeName: \"\", id: 107, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
{ rank = max;103;105;107}
106 [label="CameraInstruction::FadeInstruction::TimeOption",comment="name: \"CameraInstruction::FadeInstruction::TimeOption\", typeName: \"\", id: 106, branchId: 0, recurseId: -1, attributes: 0, notes: \"\""];
107 [label="Fade In Time",comment="name: \"Fade In Time\", typeName: \"\", id: 107, branchId: 0, recurseId: -1, attributes: 0, notes: \"\""];
108 [label="float",comment="name: \"float\", typeName: \"\", id: 108, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
109 [label="Hold Time",comment="name: \"Hold Time\", typeName: \"\", id: 109, branchId: 0, recurseId: -1, attributes: 0, notes: \"\""];
110 [label="float",comment="name: \"float\", typeName: \"\", id: 110, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
111 [label="Fade Out Time",comment="name: \"Fade Out Time\", typeName: \"\", id: 111, branchId: 0, recurseId: -1, attributes: 0, notes: \"\""];
112 [label="float",comment="name: \"float\", typeName: \"\", id: 112, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
{ rank = max;108;110;112}

}
6 changes: 5 additions & 1 deletion dot/CameraInstruction__SetInstruction.dot
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ rankdir = LR
67 -> 83
8 -> 84
84 -> 85
8 -> 86
86 -> 90

8 [label="CameraInstruction::SetInstruction",comment="name: \"CameraInstruction::SetInstruction\", typeName: \"\", id: 8, branchId: 0, recurseId: -1, attributes: 0, notes: \"\""];
9 [label="Preset Index",comment="name: \"Preset Index\", typeName: \"\", id: 9, branchId: 0, recurseId: -1, attributes: 0, notes: \"\""];
Expand All @@ -35,6 +37,8 @@ rankdir = LR
83 [label="std::optional<struct CameraInstruction::SetInstruction::EntityOffsetOption>",comment="name: \"std::optional<struct CameraInstruction::SetInstruction::EntityOffsetOption>\", typeName: \"\", id: 83, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
84 [label="Default",comment="name: \"Default\", typeName: \"std::optional<bool>\", id: 84, branchId: 0, recurseId: -1, attributes: 256, notes: \"\""];
85 [label="std::optional<bool>",comment="name: \"std::optional<bool>\", typeName: \"\", id: 85, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
{ rank = max;10;22;32;44;54;66;83;85}
86 [label="Remove IgnoreStartingValuesComponent",comment="name: \"Remove IgnoreStartingValuesComponent\", typeName: \"bool\", id: 86, branchId: 0, recurseId: -1, attributes: 256, notes: \"\""];
90 [label="bool",comment="name: \"bool\", typeName: \"\", id: 90, branchId: 0, recurseId: -1, attributes: 512, notes: \"\""];
{ rank = max;10;22;32;44;54;66;83;85;90}

}
Loading