Changes

Jump to navigation Jump to search
2,445 bytes added ,  05:06, 7 May 2019
8.0.0
Line 47: Line 47:  
| 9 || [[#Refresh]]
 
| 9 || [[#Refresh]]
 
|-
 
|-
| 10 || [5.0.0+] [[#SetProgramNcaPath2]]
+
| 10 || [5.0.0+] [[#RedirectProgramPath2]]
 
|-
 
|-
| 11 || [5.0.0+] [[#ClearLocationResolver2]]
+
| 11 || [5.0.0+] [[#Refresh2]]
 
|-
 
|-
| 12 || [5.0.0+] [[#DeleteProgramNcaPath]]
+
| 12 || [5.0.0+] [[#DeleteProgramPath]]
 
|-
 
|-
| 13 || [5.0.0+] [[#DeleteControlNcaPath]]
+
| 13 || [5.0.0+] [[#DeleteApplicationControlPath]]
 
|-
 
|-
| 14 || [5.0.0+] [[#DeleteDocHtmlNcaPath]]
+
| 14 || [5.0.0+] [[#DeleteApplicationHtmlDocumentPath]]
 
|-
 
|-
| 15 || [5.0.0+] [[#DeleteInfoHtmlNcaPath]]
+
| 15 || [5.0.0+] [[#DeleteApplicationLegalInformationPath]]
 +
|-
 +
| 16 || [7.0.0+] [[#ResolveProgramPathForDebug]]
 +
|-
 +
| 17 || [7.0.0+] [[#RedirectProgramPathForDebug]]
 +
|-
 +
| 18 || [7.0.0+] [[#RedirectProgramPath2ForDebug]]
 +
|-
 +
| 19 || [7.0.0+] [[#DeleteProgramPathForDebug]]
 
|}
 
|}
   Line 104: Line 112:  
Takes no input. Frees all linked-lists' entries that have '''flag''' set to 0.
 
Takes no input. Frees all linked-lists' entries that have '''flag''' set to 0.
   −
==== SetProgramNcaPath2 ====
+
==== RedirectProgramPath2 ====
Same as [[#SetProgramNcaPath|SetProgramNcaPath]], but inserts a new [[#Location_List_Entry|entry]] with '''flag''' set to 1.
+
Same as [[#RedirectProgramPath|RedirectProgramPath]], but inserts a new [[#Location_List_Entry|entry]] with '''flag''' set to 1.
   −
==== ClearLocationResolver2 ====
+
==== Refresh2 ====
 
Takes no input. Frees all linked-lists' entries that have '''flag''' set to 1.
 
Takes no input. Frees all linked-lists' entries that have '''flag''' set to 1.
   −
==== DeleteProgramNcaPath ====
+
==== DeleteProgramPath ====
 
Takes an u64 '''TitleID'''. Used for [[NCA_Content_FS#NCA-type1|NCA-type1]].
 
Takes an u64 '''TitleID'''. Used for [[NCA_Content_FS#NCA-type1|NCA-type1]].
    
Removes the [[#Location_List_Entry|entry]] that matches the input TitleID.
 
Removes the [[#Location_List_Entry|entry]] that matches the input TitleID.
   −
==== DeleteControlNcaPath ====
+
==== DeleteApplicationControlPath ====
 
Takes an u64 '''TitleID'''. Used for [[NCA_Content_FS#NCA-type3|NCA-type3]].
 
Takes an u64 '''TitleID'''. Used for [[NCA_Content_FS#NCA-type3|NCA-type3]].
    
Removes the [[#Location_List_Entry|entry]] that matches the input TitleID.
 
Removes the [[#Location_List_Entry|entry]] that matches the input TitleID.
   −
==== DeleteDocHtmlNcaPath ====
+
==== DeleteApplicationHtmlDocumentPath ====
 
Takes an u64 '''TitleID'''. Used for [[NCA_Content_FS#NCA-type4|NCA-type4]].
 
Takes an u64 '''TitleID'''. Used for [[NCA_Content_FS#NCA-type4|NCA-type4]].
    
Removes the [[#Location_List_Entry|entry]] that matches the input TitleID.
 
Removes the [[#Location_List_Entry|entry]] that matches the input TitleID.
   −
==== DeleteInfoHtmlNcaPath ====
+
==== DeleteApplicationLegalInformationPath ====
 
Takes an u64 '''TitleID'''. Used for [[NCA_Content_FS#NCA-type5|NCA-type5]].
 
Takes an u64 '''TitleID'''. Used for [[NCA_Content_FS#NCA-type5|NCA-type5]].
    
Removes the [[#Location_List_Entry|entry]] that matches the input TitleID.
 
Removes the [[#Location_List_Entry|entry]] that matches the input TitleID.
 +
 +
==== ResolveProgramPathForDebug ====
 +
Same as [[#ResolveProgramPath|ResolveProgramPath]], but uses a redirection shim on top of the real program path.
 +
 +
[[NS_Services|NS]] uses this command if [[System_Settings#ns.application|ns.application!redirected_rom_storage_id_for_debug]] is different than 0x00.
 +
 +
==== RedirectProgramPathForDebug ====
 +
Same as [[#RedirectProgramPath|RedirectProgramPath]], but uses a redirection shim on top of the real program path.
 +
 +
[[NS_Services|NS]] uses this command if [[System_Settings#ns.application|ns.application!redirected_rom_storage_id_for_debug]] is different than 0x00.
 +
 +
==== RedirectProgramPath2ForDebug ====
 +
Same as [[#RedirectProgramPath2|RedirectProgramPath2]], but uses a redirection shim on top of the real program path.
 +
 +
[[NS_Services|NS]] uses this command if [[System_Settings#ns.application|ns.application!redirected_rom_storage_id_for_debug]] is different than 0x00.
 +
 +
==== DeleteProgramPathForDebug ====
 +
Same as [[#DeleteProgramPath|DeleteProgramPath]], but uses a redirection shim on top of the real program path.
 +
 +
[[NS_Services|NS]] uses this command if [[System_Settings#ns.application|ns.application!redirected_rom_storage_id_for_debug]] is different than 0x00.
    
=== IRegisteredLocationResolver ===
 
=== IRegisteredLocationResolver ===
Line 154: Line 182:  
|-
 
|-
 
| 7 || [2.0.0+] RedirectHtmlDocumentPath || u64 TitleID + X descriptor [[Filesystem_services#ContentPath|ContentPath]] ||
 
| 7 || [2.0.0+] RedirectHtmlDocumentPath || u64 TitleID + X descriptor [[Filesystem_services#ContentPath|ContentPath]] ||
 +
|-
 +
| 8 || [7.0.0+] Refresh || No input/output. ||
 
|}
 
|}
   Line 216: Line 246:  
| 8 || CleanupContentMetaDatabase || Takes a [[Filesystem_services#StorageId|StorageID]], and deletes the associated savedata.
 
| 8 || CleanupContentMetaDatabase || Takes a [[Filesystem_services#StorageId|StorageID]], and deletes the associated savedata.
 
|-
 
|-
| 9 || [2.0.0+] OpenContentStorage2 || Takes a [[Filesystem_services#StorageId|StorageID]], and opens an IContentStorage for the StorageID to be gotten with GetIContentStorage. Note: Name is not official.
+
| 9 || [2.0.0+] ActivateContentStorage || Takes a [[Filesystem_services#StorageId|StorageID]], and opens an IContentStorage for the StorageID to be gotten with GetIContentStorage. Note: Name is not official.
 
|-
 
|-
| 10 || [2.0.0+] CloseContentStorage || Takes a [[Filesystem_services#StorageId|StorageID]], and closes the associated IContentStorage. Note: Name is not official.
+
| 10 || [2.0.0+] InactivateContentStorage || Takes a [[Filesystem_services#StorageId|StorageID]], and closes the associated IContentStorage. Note: Name is not official.
 
|-
 
|-
| 11 || [2.0.0+] OpenContentMetaDatabase2 || Takes a [[Filesystem_services#StorageId|StorageID]], and opens an IContentMetaDatabase for the StorageID to be gotten with GetIContentMetaDatabase. Note: Name is not official.
+
| 11 || [2.0.0+] ActivateContentMetaDatabase || Takes a [[Filesystem_services#StorageId|StorageID]], and opens an IContentMetaDatabase for the StorageID to be gotten with GetIContentMetaDatabase. Note: Name is not official.
 
|-
 
|-
| 12 || [2.0.0+] CloseContentMetaDatabase || Takes a [[Filesystem_services#StorageId|StorageID]], and closes the associated IContentMetaDatabase. Note: Name is not official.
+
| 12 || [2.0.0+] InactivateContentMetaDatabase || Takes a [[Filesystem_services#StorageId|StorageID]], and closes the associated IContentMetaDatabase. Note: Name is not official.
 
|}
 
|}
   Line 260: Line 290:  
| 13 || [[#ListContentId]] ||
 
| 13 || [[#ListContentId]] ||
 
|-
 
|-
| 14 || [[#GetSize]] ||  
+
| 14 || [[#GetSizeFromContentId]] ||  
 
|-
 
|-
 
| 15 || DisableForcibly || Closes/Flushes all resources for the storage, and causes all future IPC commands to the current session to return error 0xC805.
 
| 15 || DisableForcibly || Closes/Flushes all resources for the storage, and causes all future IPC commands to the current session to return error 0xC805.
Line 270: Line 300:  
| 18 || [2.0.0+] [[#ReadContentIdFile]] ||
 
| 18 || [2.0.0+] [[#ReadContentIdFile]] ||
 
|-
 
|-
| 19 || [2.0.0+] GetRightsIdFromPlaceHolderId || Gets the Rights ID for the [[#NcaID]]'s placeholder path.
+
| 19 || [2.0.0+] [[#GetRightsIdFromPlaceHolderId]] ||
 
|-
 
|-
| 20 || [2.0.0+] GetRightsIdFromContentId || Gets the Rights ID for the [[#NcaID]]'s registered path
+
| 20 || [2.0.0+] [[#GetRightsIdFromContentId]] ||
 
|-
 
|-
 
| 21 || [2.0.0+] WriteContentForDebug || Takes a [[#NcaID]], a u64 offset, and a type 5 buffer. On debug units, writes the buffer to the NCA's registered path. On retail units, this just aborts.
 
| 21 || [2.0.0+] WriteContentForDebug || Takes a [[#NcaID]], a u64 offset, and a type 5 buffer. On debug units, writes the buffer to the NCA's registered path. On retail units, this just aborts.
Line 280: Line 310:  
| 23 || [2.0.0+] GetTotalSpaceSize || Gets total space for the storage.
 
| 23 || [2.0.0+] GetTotalSpaceSize || Gets total space for the storage.
 
|-
 
|-
| 24 || [3.0.0+] FlushStorage || Flushes resources for the storage without closing it.
+
| 24 || [3.0.0+] FlushPlaceHolder || Flushes resources for the storage without closing it.
 
|-
 
|-
| 25 || [4.0.0+] ||  
+
| 25 || [4.0.0+] GetSizeFromPlaceHolderId ||  
 
|-
 
|-
| 26 || [4.0.0+] ||  
+
| 26 || [4.0.0+] RepairInvalidFileAttribute ||
 +
|-
 +
| 27 || [8.0.0+] GetRightsIdFromPlaceHolderIdWithCache ||  
 
|}
 
|}
   Line 303: Line 335:  
The total read entries is exactly the same as the number of "<hex>.nca" directories in the storage FS(or at least under the "registered" directory?).
 
The total read entries is exactly the same as the number of "<hex>.nca" directories in the storage FS(or at least under the "registered" directory?).
   −
==== GetSize ====
+
==== GetSizeFromContentId ====
 
Takes a [[#NcaID]] as input.
 
Takes a [[#NcaID]] as input.
   −
Returns the total size readable by ReadEntryRaw. This is the same as the size-field in the [[NAX0]] "<NcaID>.nca/00" file.
+
Returns the total size readable by [[#ReadContentIdFile]]. This is the same as the size-field in the [[NAX0]] "<NcaID>.nca/00" file.
    
==== ReadContentIdFile ====
 
==== ReadContentIdFile ====
Line 312: Line 344:     
Reads plaintext NCA file contents from the Registered path for the NcaID.
 
Reads plaintext NCA file contents from the Registered path for the NcaID.
 +
 +
==== GetRightsIdFromPlaceHolderId ====
 +
Takes a total of 0x10-bytes of input, returns a total of 0x10-bytes of output.
 +
 +
[3.0.0+] Returns an additional 8-bytes of output.
 +
 +
Gets the Rights ID for the [[#NcaID]]'s placeholder path.
 +
 +
==== GetRightsIdFromContentId ====
 +
Takes a total of 0x10-bytes of input, returns a total of 0x10-bytes of output.
 +
 +
[3.0.0+] Returns an additional 8-bytes of output.
 +
 +
Gets the Rights ID for the [[#NcaID]]'s registered path
    
=== IContentMetaDatabase ===
 
=== IContentMetaDatabase ===
Line 322: Line 368:  
! Cmd || Name || Notes
 
! Cmd || Name || Notes
 
|-
 
|-
| 0 || InsertEntryContentRecords || Takes a [[NCA#Meta_records|Meta Record]], a type-5 [[NCA#Content_records|Content Records]] buffer and a u64 size.
+
| 0 || Set || Takes a [[CNMT#Meta_records|Meta Record]], a type-5 [[CNMT#Content_records|Content Records]] buffer and a u64 size.
 
|-
 
|-
| 1 || ReadEntryContentRecords || Takes a [[NCA#Meta_records|Meta Record]], a type-6 buffer to write [[NCA#Content_records|Content Records]] to and a u64 size. Returns the actual Content Records size read.
+
| 1 || Get || Takes a [[CNMT#Meta_records|Meta Record]], a type-6 buffer to write [[CNMT#Content_records|Content Records]] to and a u64 size. Returns the actual number of bytes read into the buffer. First 8 bytes of the data is header (u16 numExtraDataBytes, numContentRecords, numMetaRecords, padding). After the header is numExtraDataBytes of additional data, after which follow content records and meta records. Set takes this same data as input.
 
|-
 
|-
| 2 || RemoveEntryContentRecords || Takes a [[NCA#Meta_records|Meta Record]], and removes the associated record.
+
| 2 || Remove || Takes a [[CNMT#Meta_records|Meta Record]], and removes the associated record.
 
|-
 
|-
| 3 || GetEntryContentNcaId || Takes a [[NCA#Meta_records|Meta Record]] and a u8 [[#Title_Types|Title Type]]. Returns a [[#NcaID]].
+
| 3 || GetContentIdByType || Takes a [[CNMT#Meta_records|Meta Record]] and a u8 [[#Title_Types|Title Type]]. Returns a [[#NcaID]].
 
|-
 
|-
| 4 || ReadEntryContentRecordEntries || Takes a type-6 buffer to write [[NCA#Content_records|Content Record]] entries to, a [[NCA#Meta_records|Meta Record]], and a u32 index into the Content Record entries to start copying from. Returns a u32 entries_read.
+
| 4 || ListContentInfo || Takes a type-6 buffer to write [[CNMT#Content_records|Content Record]] entries to, a [[CNMT#Meta_records|Meta Record]], and a u32 index into the Content Record entries to start copying from. Returns a u32 entries_read.
 
|-
 
|-
| 5 || List || Takes a type-6 buffer to write [[NCA#Meta_records|Meta Record]]s to, a u32 [[#Title_Types|Title Type]], a u64 TID, a u64 TID_LOW, and u64 TID_HIGH. Writes into the buffer all Meta Records with low <= record->title_id <= high, and record->type == type. Additionally requires record->title_id == TID, if record->type is Application, Patch, Add-On, or Delta.
+
| 5 || List || Takes a type-6 buffer to write [[CNMT#Meta_records|Meta Record]]s to, a u32 [[#Title_Types|Title Type]], a u64 TID, a u64 TID_LOW, and u64 TID_HIGH. Writes into the buffer all Meta Records with low <= record->title_id <= high, and record->type == type. Returns u32 numEntriesTotal, numEntriesWritten. Additionally requires record->title_id == TID, if record->type is Application, Patch, Add-On, or Delta, otherwise, you can pass 0 for type to ignore the type and list them all in the range.
 
|-
 
|-
| 6 || GetMetaRecord || Takes a u64 title id, and returns the [[NCA#Meta_records|Meta Record]] with the highest version field for that title id.
+
| 6 || GetLatestContentMetaKey || Takes a u64 title id, and returns the [[CNMT#Meta_records|Meta Record]] with the highest version field for that title id.
 
|-
 
|-
 
| 7 || [[#ListApplication]] ||
 
| 7 || [[#ListApplication]] ||
 
|-
 
|-
| 8 || IsEntryPresent || Takes a [[NCA#Meta_records|Meta Record]] and returns whether that record is present in the database.
+
| 8 || Has || Takes a [[CNMT#Meta_records|Meta Record]] and returns whether that record is present in the database.
 
|-
 
|-
| 9 || AreEntriesPresent || Takes a type-5 buffer containing [[NCA#Meta_records|Meta Records]] (code assumes there are size/sizeof(meta_record) records in the buffer), and returns whether all of those records are present in the database.
+
| 9 || HasAll || Takes a type-5 buffer containing [[CNMT#Meta_records|Meta Records]] (code assumes there are size/sizeof(meta_record) records in the buffer), and returns whether all of those records are present in the database.
 
|-
 
|-
| 10 || GetEntryContentRecordsSize || Takes a [[NCA#Meta_records|Meta Record]], and returns the size of the associated [[NCA#Content_records|Content Records]].
+
| 10 || GetSize || Takes a [[CNMT#Meta_records|Meta Record]], and returns the size of the associated [[CNMT#Content_records|Content Records]].
 
|-
 
|-
| 11 || GetEntryUnknownRecordSize || Takes a [[NCA#Meta_records|Meta Record]], and returns u32 from ContentRecords + 16 (only if the Meta record has type Application or Patch).
+
| 11 || GetRequiredSystemVersion || Takes a [[CNMT#Meta_records|Meta Record]], and returns u32 from ContentRecords + 16 (only if the Meta record has type Application or Patch).
 
|-
 
|-
| 12 || GetEntryUpdateTitleId || Takes a [[NCA#Meta_records|Meta Record]], and returns the update title id for that record.
+
| 12 || GetPatchId || Takes a [[CNMT#Meta_records|Meta Record]], and returns the update title id for that record.
 
|-
 
|-
| 13 || CloseMetaDatabase ||  Closes the meta database, and causes all future IPC commands to the current session to return error 0xDC05.
+
| 13 || DisableForcibly ||  Closes the meta database, and causes all future IPC commands to the current session to return error 0xDC05.
 
|-
 
|-
| 14 || [[#CheckNcaIDsPresent]] || Takes a type-6 byte buffer, and a type-5 buffer of [[#NcaID]]s.
+
| 14 || [[#LookupOrphanContent]] || Takes a type-6 byte buffer, and a type-5 buffer of [[#NcaID]]s.
 
|-
 
|-
| 15 || SaveMetaDatabase || Flushes the in-memory database to savedata.
+
| 15 || Commit || Flushes the in-memory database to savedata.
 
|-
 
|-
| 16 || CheckEntryHasNcaId || Takes a [[NCA#Meta_records|Meta Record]] and an [[#NcaID]]. Returns whether the content records for that meta record contain the NcaID.
+
| 16 || HasContent || Takes a [[CNMT#Meta_records|Meta Record]] and an [[#NcaID]]. Returns whether the content records for that meta record contain the NcaID.
 
|-
 
|-
| 17 || ReadEntryMetaRecords || Takes a type-6 [[NCA#Meta_records|Meta Record]] output buffer, a u32 eoffset into that buffer, and an input [[NCA#Meta_records|Meta Record]].
+
| 17 || ListContentMetaInfo || Takes a type-6 [[CNMT#Meta_records|Meta Record]] output buffer, a u32 offset into that buffer, and an input [[CNMT#Meta_records|Meta Record]].
 
|-
 
|-
| 18 || GetEntryUnknown6 || Takes a [[NCA#Meta_records|Meta Record]], and returns u8 from ContentRecords + 6.
+
| 18 || GetAttributes || Takes a [[CNMT#Meta_records|Meta Record]], and returns u8 from ContentRecords + 6.
 
|-
 
|-
| 19 || [2.0.0+] GetAddOnContentEntryUnknownRecordSize || Does the same thing as GetEntryUnknownRecordSize, but for AddOnContents.
+
| 19 || [2.0.0+] GetRequiredApplicationVersion || Does the same thing as GetEntryUnknownRecordSize, but for AddOnContents.
 
|-
 
|-
| 20 || [5.0.0+] ||
+
| 20 || [5.0.0+] GetContentIdByTypeAndIdOffset ||
 
|}
 
|}
    
==== ListApplication ====
 
==== ListApplication ====
 
Each 24-byte entry (officially "ApplicationContentMetaKey") is as follows:
 
Each 24-byte entry (officially "ApplicationContentMetaKey") is as follows:
   [[NCA#Meta_records|meta_record]] meta_record;
+
   [[CNMT#Meta_records|meta_record]] meta_record;
 
   u64    base_title_id;
 
   u64    base_title_id;
    
This function takes in a type 6 buffer to write entries to, and a u8 "filter" [[#Title_Types|type]]. If filter is zero, all update records will be copied to to the output buffer (space permitting). Otherwise, only titles with type == filter_type will be copied to the output buffer.
 
This function takes in a type 6 buffer to write entries to, and a u8 "filter" [[#Title_Types|type]]. If filter is zero, all update records will be copied to to the output buffer (space permitting). Otherwise, only titles with type == filter_type will be copied to the output buffer.
   −
This func returns a u32 num_entries_written, and a u32 num_entries_total.
+
This func returns a u32 num_entries_total, and a u32 num_entries_written.
    
==== ReadEntryMetaRecords ====
 
==== ReadEntryMetaRecords ====
Takes a type-6 [[NCA#Meta_records|Meta Record]] output buffer, a u32 eoffset into that buffer, and an input [[NCA#Meta_records|Meta Record]] entry. Returns a u32 for total_read_entries.
+
Takes a type-6 [[CNMT#Meta_records|Meta Record]] output buffer, a u32 offset into that buffer, and an input [[CNMT#Meta_records|Meta Record]] entry. Returns a u32 for total_read_entries.
    
Reads the meta records stored in the entry's content records into the output buffer.
 
Reads the meta records stored in the entry's content records into the output buffer.
Line 381: Line 427:  
This is used, for example, with System Update title 0100000000000816, which contains Meta Records for all other systitles in its Content Records.
 
This is used, for example, with System Update title 0100000000000816, which contains Meta Records for all other systitles in its Content Records.
   −
==== CheckEntryNcaIDsPresent ====
+
==== LookupOrphanContent ====
 
Takes a type-6 byte buffer, and a type-5 buffer containing [[#NcaID]]s.
 
Takes a type-6 byte buffer, and a type-5 buffer containing [[#NcaID]]s.
   Line 398: Line 444:     
=== NcaID ===
 
=== NcaID ===
This is a 0x10-byte entry. This is originally from the hex portion of "<hex>.nca" directory-names from this storage FS(like [[SD_Filesystem|SD]]).
+
This is a 0x10-byte entry. This is originally from the hex portion of "<hex>.nca" directory-names from this storage FS(like [[SD_Filesystem|SD]]). This is also referred to as "ContentId" in the official SDK.
   −
The NcaID is the same as the first 0x10-bytes from the calculated SHA256 hash, from hashing the entire output from ReadEntryRaw.
+
The NcaID is the same as the first 0x10-bytes from the calculated SHA256 hash, from hashing the entire output from [[#ReadContentIdFile]].
    
=== Enums ===
 
=== Enums ===
Line 411: Line 457:  
|-
 
|-
 
| 0x01
 
| 0x01
| System Programs ([[Title_list#System_Modules|System Modules]] or [[Title_list#System_Applets|System Applets]])
+
| SystemProgram ([[Title_list#System_Modules|System Modules]] or [[Title_list#System_Applets|System Applets]])
 
|-
 
|-
 
| 0x02
 
| 0x02
| [[Title_list#System_Data_Archives|System Data Archives]]
+
| SystemData ([[Title_list#System_Data_Archives|System Data Archives]])
 
|-
 
|-
 
| 0x03
 
| 0x03
| System Update
+
| SystemUpdate
 
|-
 
|-
 
| 0x04
 
| 0x04
| [[Title_list|Firmware package A]]
+
| BootImagePackage ([[Title_list|Firmware package A or C]])
 
|-
 
|-
 
| 0x05
 
| 0x05
| [[Title_list|Firmware package B]]
+
| BootImagePackageSafe ([[Title_list|Firmware package B or D]])
 
|-
 
|-
 
| 0x80
 
| 0x80
| Regular application
+
| Application
 
|-
 
|-
 
| 0x81
 
| 0x81
| Update title
+
| Patch
 
|-
 
|-
 
| 0x82
 
| 0x82
| Add-on content
+
| AddOnContent
 
|-
 
|-
 
| 0x83
 
| 0x83
| Delta title
+
| Delta
 
|}
 
|}
  
48

edits

Navigation menu