Every undoable edit of a table is a TST command message, the same set
Numbers uses. Apple has not published them; the definitions below are those
iWorkFileFormat recovered from Keynote 6.0 (2013), so later versions may add fields. This
page lists every message of TSTCommandArchives.proto. The messages they
refer to (cells, selections, cell maps, filters, style networks) are on the
tables page; the
TSCE formula messages on the
formulas page; the shared
TSK.CommandArchive base on
undo commands. Notation:
req required, rep repeated, the rest optional; each field is
number name : type; a bracketed number is the message type from
message type numbers. A message
without a number has none in the registry that was read. The source gives only the
shape of each command; the descriptions are read from the names and are not confirmed
by Apple.
In this page Map means TST.CellMapArchive: the cells a
command changed. A command stores two of them, undo_map (the cells before)
and redo_map (after), so that undo and redo need no recomputation.
TableCmd means TST.TableCommandArchive, the base that almost
every command has as super.
Base and enumerations
enum CommandDirectionArchive { directionRow = 0; directionColumn = 1 }
enum CommandRegionArchive { bodyRegion = 0; headerRowRegion = 1; headerColumnRegion = 2;
footerRowRegion = 3 }
message TableCommandArchive { // type 6100
req TSP.Reference tableInfo = 1; 2 string commandname; req TSK.CommandArchive super = 3;
4 uint32 editing_mode_at_start
}
editing_mode_at_start is an unnamed code (unknown). A few commands
(CommandReplaceAllText, CommandSetFormulaTokenization,
TableInfoGeometry) have a TSK.CommandArchive or no base
instead, as shown.
Cell content and formats
message CommandSetCellArchive { // type 6105
req CellID cellID = 1; 2 Cell newcell; 3 Cell oldcell; req TableCmd super = 5;
6 bool post_undo_redo_selection
}
message CommandTextPreflightInsertCellArchive { // type 6226
req CellID editing_cellID = 1; req TableCmd super = 3; 6 Ref coalesced_textcommand;
8 Ref postflightcommand; 9 bool grouped_with_postflight; req Cell editing_cell = 10;
req Ref editing_storage = 11; 12 uint32 last_column_hit_by_tap
}
message CommandPostflightSetCellArchive { // type 6229
req CellID cellID = 1; req TableCmd super = 3; 4 Ref childcommandundo;
req Cell editing_cell = 6; req Cell new_cell = 7; req Ref editing_storage = 8;
9 uint32 last_column_hit_by_tap
}
message CommandReplaceTextArchive { // type 6112
req CellID cellID = 1; req Cell newcell = 2; req Cell oldcell = 3; req TableCmd super = 4;
5 Ref child_command_undo
}
message CommandReplaceAllTextArchive { // type 6110
req Ref tableInfo = 1; req Map undo_cell_map = 2; req Map redo_cell_map = 3
}
message CommandDeleteCellsArchive { // type 6101
req SelectionArchive selection = 1; req Map undo_map = 2; req TableCmd super = 3;
req Map redo_map = 4; req bool invalidate_comments = 5
}
message CommandDeleteCellContentsArchive { // type 6228
req SelectionArchive selection = 1; req Map undo_map = 2; req TableCmd super = 3;
req Map redo_map = 4; req bool invalidate_comments = 5
}
message CommandSetMultipleCellsArchive { // no number
req SelectionArchive selection = 1; req Map undo_map = 2; req Map redo_map = 3;
4 Cell source_cell; 6 bool only_if_format_differs; req TableCmd super = 7
}
message CommandSetMultipleCellsCustomArchive { // type 6203
req SelectionArchive selection = 1; req Map undo_map = 2; req Map redo_map = 3;
req TSK.FormatStructArchive cell_format = 4; req TableCmd super = 7
}
message CommandSetMultipleCellsMultipleChoiceListArchive { // type 6211
req SelectionArchive selection = 1; req Map undo_map = 2; req Map redo_map = 3;
req TableCmd super = 5
}
message CommandCoerceMultipleCellsArchive { // type 6202
req SelectionArchive selection = 1; req Map undo_map = 2; req Map redo_map = 3;
req int32 desired_format = 4; req TableCmd super = 6
}
message CommandMutateCellsArchive { // type 6252
req TableCmd super = 1; req Map undo_cell_map = 2; req Map redo_cell_map = 3;
4 SelectionArchive selection
}
message CommandPasteArchive { // type 6113
req SelectionArchive user_selection = 1; req SelectionArchive final_selection = 2;
req Map undo_cell_map = 3; req Map redo_cell_map = 4; 6 Ref command_undo;
req bool invalidate_comments = 7; req TableCmd super = 11;
rep Ref formula_rewrite_commands = 15
}
message CommandFillCellsArchive { // type 6109
req TableCmd super = 1; req SelectionArchive sourceselection = 2;
req CellRange sourcecellrange = 3; req CellRange targetcellrange = 4;
req Map undo_cell_map = 5; req FillDirectionArchive fillDirection = 6;
req SelectionArchive targetselection = 7; req Map redo_cell_map = 8
}
message CommandApplyCellCommentArchive { // type 6244
req TableCmd super = 1; req CellID cell_id = 2; 3 Ref old_comment_storage;
4 Ref new_comment_storage
}
message CommandSetStorageLanguageArchive { // no number
req TSK.CommandArchive super = 1; req Ref storage = 2; req string language = 3;
req uint32 range_location = 4; req uint32 range_length = 5;
6 TSWP.UndoTransaction undo_transaction
}
The enumeration FillDirectionArchive is on the
tables page. The value
of desired_format is an unnamed integer code (unknown).
Rows, columns, headers and merging
message CommandInsertColumnsOrRowsArchive { // type 6102
message StyleIndexPair { req Ref style = 1; req uint32 index = 2 }
req CommandDirectionArchive direction = 1; req uint32 index = 2; req uint32 count = 3;
req float size = 4; req bool before = 5; req uint32 header_count = 11;
req uint32 headers_added = 12; req uint32 footer_count = 13; req uint32 footers_added = 14;
8 Ref row_column_style; 9 Map cell_style_redo; req TableCmd super = 10;
15 Ref formula_rewrite_command; req float width_factor = 16; req float height_factor = 17;
18 bool allow_horizontal_autosize; 19 bool inherit_styles; 20 bool inherit_formats;
24 bool inherit_formulas; rep StyleIndexPair cell_style_index_pairs = 21;
rep StyleIndexPair text_style_index_pairs = 22; rep double sizes = 23
}
message CommandRemoveColumnsOrRowsArchive { // type 6103
req TableCmd super = 1; req CommandDirectionArchive direction = 2;
req TSP.IndexSet indices_to_remove = 3; 4 Map cellMap; req TSD.GeometryArchive oldgeom = 5;
req TSD.GeometryArchive newgeom = 6; rep float subsizes = 7; 8 Ref formula_rewrite_command;
req float width_factor = 9; req float height_factor = 10; 11 bool allow_horizontal_autosize;
12 Ref undo_merge_map; 13 Ref redo_merge_map; rep uint32 hiding_actions = 14;
15 Ref orig_filter_set; rep Ref undo_command_collector = 16
}
message CommandResizeColumnOrRowArchive { // type 6104
req CommandDirectionArchive direction = 1; req uint32 index = 2; req uint32 count = 3;
req float newsize = 4; 5 TSD.GeometryArchive oldgeom; 6 TSD.GeometryArchive newgeom;
rep float subsizes = 7; 8 float old_default; 9 bool uniformsizes; 10 uint32 resizemode;
req TableCmd super = 11
}
message CommandMoveRowsArchive { // type 6115
req TableCmd super = 1; 2 SelectionArchive selection; req uint32 start_row_index = 3;
req uint32 dest_row_index = 4; req uint32 number_of_rows = 5;
7 Ref formula_rewrite_command; 8 Ref show_command; 9 Ref unmerge_invalid_ranges_command
}
message CommandMoveColumnsArchive { // type 6116
req TableCmd super = 1; 2 SelectionArchive selection; req uint32 start_column_index = 3;
req uint32 dest_column_index = 4; req uint32 number_of_columns = 5;
7 Ref formula_rewrite_command; 8 Ref show_command
}
message CommandHideShowArchive { // type 6145
req TableCmd super = 1; req CommandDirectionArchive direction = 2;
req HideShowActionArchive hide_show_action = 3; req uint32 hiding_action = 4;
req TSP.IndexSet elements_affected = 5; rep uint32 old_hiding_states = 7
}
message CommandMergeUnmergeArchive { // type 6143
req TableCmd super = 1; req MergeActionArchive merge_action = 2;
req SelectionArchive selection = 3; req Map undo_cell_map = 4; req Map redo_cell_map = 5;
8 Ref old_merge_ranges; 9 Ref undo_formula_rewrite_command
}
message CommandSetNumberOfHeadersOrFootersArchive { // type 6106
req CommandRegionArchive region = 1; req uint32 count = 2; req uint32 oldcount = 3;
req TableCmd super = 6
}
message CommandChangeFreezeHeaderStateArchive { // type 6111
req CommandDirectionArchive direction = 1; req bool new_freeze_state = 2; req TableCmd super = 3
}
message CommandSetRepeatingHeaderEnabledArchive { // type 6120
req bool repeating_header_enabled = 1; req CommandDirectionArchive direction = 2;
req TableCmd super = 3
}
message CommandFixWPStylesInRowsOrColumnsArchive { // no number
req CommandDirectionArchive direction = 1; req uint32 index = 2;
req Map undo_cell_map = 3; req Map redo_cell_map = 4; req TableCmd super = 6;
req uint32 reference_index = 7; req bool inherit_styles = 8; 9 uint32 count
}
message CommandFixStylesInHeadersOrFootersArchive { // type 6139
req CommandRegionArchive region = 1; req uint32 old_number = 2; req uint32 new_number = 3;
req Map redo_cell_map = 4; req Map undo_cell_map = 5; req TableCmd super = 6;
7 Ref textundo
}
message TableInfoGeometryCommandArchive { // type 6217
req TSK.CommandArchive super = 1; req TSP.Size scale_factor = 2; 3 Ref table_info;
4 TSD.GeometryArchive new_geometry; 5 TSD.GeometryArchive old_geometry;
6 bool turn_off_auto_resize; 7 bool should_clear_object_placeholder_flag;
8 bool did_match_object_placeholder_geometry
}
hiding_action and old_hiding_states are integer codes for
hide, show and user-hidden states; the source does not list their values (unknown), and
neither does it for resizemode. HideShowActionArchive and
MergeActionArchive are on the
tables page. The
prefix WP in names such as WPTableInfoArchive and
FixWPStyles… probably means word processing; the source does not explain
it.
Table name, font and size
message CommandSetTableNameArchive { // type 6107
req string newtablename = 1; req string oldtablename = 2; 3 Ref newstyle; 4 Ref oldstyle;
req TableCmd super = 5; 6 Ref old_shape_style; 7 Ref new_shape_style;
8 bool old_table_name_border_enabled; 9 bool new_table_name_border_enabled
}
message CommandSetTableNameEnabledArchive { // type 6114
req bool table_name_enabled = 1; req TableCmd super = 3
}
message CommandSetTableNameHeightArchive { // type 6142
req TableCmd super = 1; req double old_table_name_height = 2;
req double new_table_name_height = 3
}
message CommandSetTableFontSizeArchive { // type 6137
req TableCmd super = 1; req float scale_factor = 9; 5 Map undo_cell_map;
6 Map redo_cell_map; 7 bool resize_default_cells; 8 Ref text_undo
}
message CommandSetTableFontNameArchive { // type 6136
req TableCmd super = 1; req string font_name = 2; req string old_font_name = 3;
5 bool preserve_face; 6 Map undo_cell_map; 7 Map redo_cell_map; 8 Ref text_undo
}
Styles
message CommandStyleCellsArchive { // type 6108
req TableCmd super = 1; 2 TSP.ReferenceDictionary format_properties;
req SelectionArchive selection = 3; req Map undo_cell_map = 4; req Map redo_cell_map = 5;
6 Ref text_undo
}
message CommandStyleTableArchive { // type 6125
req TableCmd super = 1; 2 TSP.ReferenceDictionary format_properties; 3 Ref old_style;
4 Ref new_style
}
message CommandSetTextStyleArchive { // type 6255
req TableCmd super = 1; req CellRegion region = 2; 3 Map undo_cell_map;
4 Map redo_cell_map; 5 Ref subcommands
}
message CommandToggleTextPropertyArchive { // type 6124
req TableCmd super = 1; req SelectionArchive selection = 2; req uint32 property = 3;
req Map undo_cell_map = 4; req Map redo_cell_map = 5; req Cell default_body_cell = 6;
req Cell default_hr_cell = 7; req Cell default_hc_cell = 8; req Cell default_fr_cell = 9;
10 Ref text_undo
}
message CommandResetFillPropertyToDefault { // type 6141
req TableCmd super = 1; req SelectionArchive selection = 2; req Map undo_cell_map = 4;
req Map redo_cell_map = 5
}
message CommandApplyStrokePresetArchive { // type 6118
req TableCmd super = 1; req Map undo_cell_map = 2; req Map redo_cell_map = 4;
req SelectionArchive selection = 3; 6 SelectionArchive expanded_selection;
req int32 preset_index = 5
}
message CommandApplyTableStylePresetArchive { // type 6117
message StyleIndexTuple { req uint32 index = 1; 5 Ref cell_style; 6 Ref text_style }
req TableCmd super = 1; req Map undo_cell_map = 2; req Map redo_cell_map = 4;
req int32 preset_index = 5; req TableStyleNetworkArchive old_table_styles = 7;
req TableStyleNetworkArchive new_table_styles = 8; 10 bool apply_clears_all;
11 Ref font_size_command; 12 Ref set_style_apply_clears_all_flag_command;
rep StyleIndexTuple row_style_index_tuples = 13; rep StyleIndexTuple col_style_index_tuples = 14
}
message CommandSetStyleApplyClearsAllFlagArchive { // type 6237
req TableCmd super = 1; req bool apply_clears_all = 2
}
message CommandApplyThemeToTableArchive { // type 6121
req TableCmd super = 1; req Map undo_cell_map = 2; req Map redo_cell_map = 4;
req TableStyleNetworkArchive old_table_styles = 7;
req TableStyleNetworkArchive new_table_styles = 8
}
message CommandApplyThemeChildForTableArchive { // type 6122
req TSS.ApplyThemeChildCommandArchive super = 1; req Ref apply_command = 2
}
message CommandSetStyleNetworkArchive { // type 6251
req TableCmd super = 1; req TableStyleNetworkArchive old_style_network = 2;
req TableStyleNetworkArchive new_style_network = 3
}
message CommandApplyConditionalStyleSetArchive { // type 6245
req TableCmd super = 1; req SelectionArchive selection = 2; req Map undo_cell_map = 3;
req Map redo_cell_map = 4
}
CommandToggleTextProperty.property is an unnamed integer code (which
property to toggle); the values are not in the source (unknown).
Number formats
All of these extend CommandSetSingleNumberFormatParameterArchive, which
holds the selection and the two cell maps, and each adds one value. The explicit
format that is set is a TSK.FormatStructArchive (see
document messages).
message CommandSetSingleNumberFormatParameterArchive { // type 6130
req TableCmd super = 1; req SelectionArchive selection = 2; req Map undo_cell_map = 3;
req Map redo_cell_map = 4
}
message CommandSetExplicitFormatArchive { // type 6119
req TableCmd super = 1; req SelectionArchive selection = 2;
req TSK.FormatStructArchive cell_format = 3; req Map undo_cell_map = 4;
req Map redo_cell_map = 5
}
message CommandSetAutomaticFormatArchive { // type 6225
req SelectionArchive selection = 1; req Map undo_map = 2; req Map redo_map = 3;
req TableCmd super = 6
}
message CommandSetAutomaticDurationUnitsArchive { // type 6205
req SelectionArchive selection = 1; req Map undo_map = 2; req Map redo_map = 3;
4 bool automatic_units; req TableCmd super = 6
}
message CommandSetControlCellsDisplayNumberFormatArchive { // type 6210
req SelectionArchive selection = 1; req Map undo_map = 2; req Map redo_map = 3;
req TableCmd super = 6
}
// each of the following has req CommandSetSingleNumberFormatParameterArchive super = 1
message CommandSetBaseArchive { req uint32 base = 2 } // type 6146
message CommandSetBasePlacesArchive { req uint32 base_places = 2 } // type 6147
message CommandSetBaseUseMinusSignArchive { req bool base_use_minus_sign = 2 } // type 6148
message CommandSetControlMinimumArchive { req double minimum = 2; req uint32 format_type = 3 } // type 6207
message CommandSetControlMaximumArchive { req double maximum = 2; req uint32 format_type = 3 } // type 6208
message CommandSetControlIncrementArchive { req double increment = 2; req uint32 format_type = 3 } // type 6209
message CommandSetCurrencyCodeArchive { req string currency_code = 2 } // type 6131
message CommandSetFractionAccuracyArchive { req uint32 fraction_accuracy = 2 } // type 6129
message CommandSetNegativeNumberStyleArchive { req uint32 negative_number_style = 2 } // type 6128
message CommandSetNumberOfDecimalPlacesArchive { req uint32 decimal_places = 2 } // type 6126
message CommandSetShowThousandsSeparatorArchive { req bool show_thousands_separator = 2 } // type 6127
message CommandSetUseAccountingStyleArchive { req bool use_accounting_style = 2 } // type 6132
message CommandSetDateTimeFormatArchive { } // type 6238
message CommandSetMultipleChoiceListFormatForEditedItemArchive { } // type 6212
message CommandSetMultipleChoiceListFormatForDeleteItemArchive { } // type 6213
message CommandSetMultipleChoiceListFormatForReorderItemArchive { } // type 6214
message CommandSetMultipleChoiceListFormatForInitialValueArchive { } // type 6215
The last five add no fields: the new value is in the cell maps. format_type
and negative_number_style are unnamed integer codes (unknown).
Sorting and filtering
message CommandSortArchive { // type 6123
req TableCmd super = 1; req TSK.ShuffleMappingArchive mapping = 5;
7 Ref formula_rewrite_command
}
message CommandSetFiltersEnabledArchive { // type 6221
req bool enable_filters = 1; req TableCmd super = 2
}
message CommandSetFilterEnabledArchive { // type 6248
req TableCmd super = 1; req uint32 filter_index = 2; req bool enabled = 4
}
message CommandSetFilterRuleEnabledArchive { // type 6249
req TableCmd super = 1; req uint32 filter_index = 2; req uint32 rule_index = 3;
req bool enabled = 4
}
message CommandSetFilterSetTypeArchive { // type 6250
req TableCmd super = 1; req FilterSetArchive.FilterSetType old_filter_set_type = 2;
req FilterSetArchive.FilterSetType new_filter_set_type = 3
}
message CommandAddQuickFilterRulesArchive { // type 6240
req TableCmd super = 1; rep FilterRuleArchive rules = 2; req uint32 filter_index = 3;
rep uint32 rule_indices = 4; req bool filter_set_enabled = 5
}
message CommandDeleteFilterRulesArchive { // type 6242
req TableCmd super = 1; rep FilterRuleArchive undo_rules = 2; rep uint32 rule_indices = 3;
req bool filter_removed = 4; req uint32 filter_index = 5; req bool filter_set_enabled = 6
}
message CommandModifyFilterRuleArchive { // type 6241
req TableCmd super = 1; req FilterRuleArchive undo_rule = 2;
req FilterRuleArchive redo_rule = 3; req uint32 rule_index = 4; req uint32 filter_index = 5
}
message CommandDisableFilterRulesForColumnArchive { // type 6254
req TableCmd super = 1; req uint32 column_index = 2; rep uint32 rule_indices = 3
}
Formula and conditional style rewrites
When rows move, sort or merge, the formulas and conditional styles that point at them
must change. Each change is its own command, stored with the command that caused it
(the formula_rewrite_command fields above). The
TSCE.… messages are on the
formulas page.
message CommandRewriteFormulasForSortArchive { // type 6134
req TableCmd super = 1; req TSCE.OwnerFormulaMapArchive formula_map = 2;
req TSK.ShuffleMappingArchive sort_mapping = 3; req TSCE.CFUUIDArchive sorted_table_id = 4;
req bool explode_ranges = 5
}
message CommandRewriteFormulasForTectonicShiftArchive { // type 6135
req TableCmd super = 1; req TSCE.OwnerFormulaMapArchive formula_map = 2;
req TSCE.TectonicShiftArchive tectonic_shift = 3
}
message CommandRewriteFormulasForMoveArchive { // type 6138
req TableCmd super = 1; req TSCE.OwnerFormulaMapArchive formula_map = 2;
req TSCE.RangeReferenceArchive from_reference = 6;
req TSCE.RangeReferenceArchive to_reference = 7
}
message CommandRewriteFormulasForCellMergeArchive { // type 6216
req TableCmd super = 1; req TSCE.OwnerFormulaMapArchive formula_map = 2;
req TSCE.RangeCoordinateArchive merged_range = 3; req TSCE.CFUUIDArchive table_id = 4
}
message CommandRewriteFilterFormulasForTableResizeArchive { // type 6224
req TableCmd super = 1
}
message CommandRewriteFilterFormulasForTectonicShiftArchive { // type 6222
req TableCmd super = 1; req Ref filter_set = 2;
req TSCE.TectonicShiftArchive tectonic_shift = 3
}
message CommandRewriteFilterFormulasForSortArchive { // type 6223
req TableCmd super = 1; req Ref filter_set = 2; req TSK.ShuffleMappingArchive sort_mapping = 3;
req TSCE.CFUUIDArchive sorted_table_id = 4
}
message CommandRewriteConditionalStylesForTectonicShiftArchive { // type 6231
req TableCmd super = 1; req TSCE.TectonicShiftArchive tectonic_shift = 2;
3 TSCE.CellCoordinateVectorArchive cells_to_rewrite;
4 TSCE.CellCoordinateObjectMapArchive conditional_style_sets
}
message CommandRewriteConditionalStylesForSortArchive { // type 6232
req TableCmd super = 1; req TSK.ShuffleMappingArchive sort_mapping = 2;
req TSCE.CFUUIDArchive sorted_table_id = 3; 4 TSCE.CellCoordinateVectorArchive cells_to_rewrite;
5 TSCE.CellCoordinateObjectMapArchive conditional_style_sets
}
message CommandRewriteConditionalStylesForRangeMoveArchive { // type 6233
req TableCmd super = 1; 7 TSCE.RangeReferenceArchive from_range_reference;
8 TSCE.RangeReferenceArchive to_range_reference;
5 TSCE.CellCoordinateVectorArchive cells_to_rewrite;
6 TSCE.CellCoordinateObjectMapArchive conditional_style_sets
}
message CommandRewriteConditionalStylesForCellMergeArchive { // type 6234
req TableCmd super = 1; req TSCE.CFUUIDArchive merged_table_id = 2;
req TSCE.RangeCoordinateArchive merged_range = 3;
4 TSCE.CellCoordinateVectorArchive cells_to_rewrite;
5 TSCE.CellCoordinateObjectMapArchive conditional_style_sets
}
message CommandSetFormulaTokenizationArchive { // type 6246
req TSK.CommandArchive super = 1; req bool tokenization = 2
}
message CommandNotifyForTransformingArchive { // type 6256
req TableCmd super = 1
}
Formula editing and selection behaviour
message FormulaEditingCommandGroupArchive { // type 6200
req TSK.ProgressiveCommandGroupArchive super = 1;
req bool undoSelectionValid = 2; req uint32 undoSelectionStart = 3;
req uint32 undoSelectionLength = 4; req uint32 undoActiveToken = 5;
req bool redoSelectionValid = 6; req uint32 redoSelectionStart = 7;
req uint32 redoSelectionLength = 8; req uint32 redoActiveToken = 9
}
message FormulaEditingCommandSelectionBehaviorArchive { // type 6227
2 bool undoSelectionValid; 3 uint32 undoSelectionStart; 4 uint32 undoSelectionLength;
5 uint32 undoActiveToken; 6 bool redoSelectionValid; 7 uint32 redoSelectionStart;
8 uint32 redoSelectionLength; 9 uint32 redoActiveToken; 10 Ref storage
}
message UndoRedoStateCommandSelectionBehaviorArchive { // type 6236
1 Ref before_undo_redo_state [deprecated]; 2 Ref after_undo_redo_state [deprecated];
3 Ref table_info; 4 SelectionArchive before_table_selection;
6 SelectionArchive after_table_selection
}
message TableCommandSelectionBehaviorArchive { // type 6239
1 SelectionArchive before_table_selection; 2 SelectionArchive after_table_selection;
3 Ref table_info; 4 uint32 last_column_hit_by_tap
}
message DisableTableNameSelectionBehaviorArchive { // type 6253
req TableCommandSelectionBehaviorArchive super = 1
}
A selection behaviour message records where the selection should be after an undo or
redo. TSK.ProgressiveCommandGroupArchive (type 206) is on
document messages. In this page
Ref is TSP.Reference.