Validate independent packed addons and complete physical mortar salvos
This commit is contained in:
@@ -0,0 +1,259 @@
|
||||
{
|
||||
"archive": "/tmp/erri-native-package-all-20260919-1115/packages/ai/data.pak",
|
||||
"archive_bytes": 65724,
|
||||
"archive_sha256": "c37670234ac68d0ea71265365a29a5b0727685adc8db5423b132c96138ba8b98",
|
||||
"entries": [
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 536,
|
||||
"offset": 56,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Prefabs/ERR/MortarCrew.et",
|
||||
"sha256": "05d3e7353ff9fe5523218a1487b31b7b742b0be8adbcb060c7099978cf008bce",
|
||||
"stored_bytes": 536
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 13996,
|
||||
"offset": 1521,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_HQ.c",
|
||||
"sha256": "7ee8e7a3282fd566ec330c94854b353b2c6178e9b964f7b4d5e197e4d0b7dee9",
|
||||
"stored_bytes": 3699
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 2841,
|
||||
"offset": 5220,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_HQJournal.c",
|
||||
"sha256": "b3e402cfe92d415f37f666045afb062e6e11670ba03a0ca6f2d9fd4fc3520ac1",
|
||||
"stored_bytes": 1256
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 6352,
|
||||
"offset": 6476,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_HQNetwork.c",
|
||||
"sha256": "92ff2caca52e94c2cc9642dfc8509ce6e9349b257012bade8650bace9231128c",
|
||||
"stored_bytes": 2196
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 6464,
|
||||
"offset": 8672,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_HQObservation.c",
|
||||
"sha256": "36c978ec5f052213ac1236e1398d85063efbfd7ef60fe04f1fc11447fefe1d68",
|
||||
"stored_bytes": 2092
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 4172,
|
||||
"offset": 10764,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_HQReport.c",
|
||||
"sha256": "c4d16ccb571db4d9444c0a8d2be7318845d25ff90238b6d304e96a9ea19f1a08",
|
||||
"stored_bytes": 1569
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 929,
|
||||
"offset": 592,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_HelicopterAvailability.c",
|
||||
"sha256": "60eaef2f6d4b2fd44861c5a4434ef97e732e40a5ff7401e2da451ed2dd9c2762",
|
||||
"stored_bytes": 929
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 1486,
|
||||
"offset": 12333,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_MortarAimSolution.c",
|
||||
"sha256": "59e8343d09f7a44871d8d3335d6ad1d02216abb5deed30d38b5ec9ba3f2c0649",
|
||||
"stored_bytes": 648
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 18824,
|
||||
"offset": 12981,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_MortarBattery.c",
|
||||
"sha256": "be55cd9e7dc2b6246fbd4282aa454d06a2ab219e86130b7d76c8a62b15d98e70",
|
||||
"stored_bytes": 5763
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 3310,
|
||||
"offset": 18744,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_MortarCourierTransfer.c",
|
||||
"sha256": "968e58ca700b4a11e5e04a5c159696f514a0b1bce531210172b913e495f7e2b7",
|
||||
"stored_bytes": 1067
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 15305,
|
||||
"offset": 19811,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_MortarFiring.c",
|
||||
"sha256": "9fc08476df104d32ff7a39979181d6c21554cf2c222b4463bb321f2bebafb979",
|
||||
"stored_bytes": 4479
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 19265,
|
||||
"offset": 24290,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_MortarLogistics.c",
|
||||
"sha256": "e1ffb25fba384b449de576a5502a93d875c3f52e8da1941bbf590ad9845f9730",
|
||||
"stored_bytes": 5228
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 4862,
|
||||
"offset": 29518,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_MortarPrediction.c",
|
||||
"sha256": "470dd196ed64800c697d24c09d1344bacd2502587fac76af4ee0edae2563092d",
|
||||
"stored_bytes": 1799
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 8684,
|
||||
"offset": 31317,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_MortarReadiness.c",
|
||||
"sha256": "1a7282d9bd53dcd115d53c9b460ca62d3218931a74635cc516eac1a13b7d9347",
|
||||
"stored_bytes": 2716
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 1182,
|
||||
"offset": 34033,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_MortarRefresh.c",
|
||||
"sha256": "52ae8d9d6cad92f42d68c634091b80a474d2666b6c06d63a8c30a3fab71494c4",
|
||||
"stored_bytes": 479
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 880,
|
||||
"offset": 34512,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_MortarReportLedger.c",
|
||||
"sha256": "42a96040b63e56677353e55164ae23031c90f70b4d6673a9f412ad7b19e636ae",
|
||||
"stored_bytes": 880
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 634,
|
||||
"offset": 35392,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_MortarSalvo.c",
|
||||
"sha256": "697c01f479df6c505a41d984a29c02002e3052114dafa2ec6252ae55e2979a2b",
|
||||
"stored_bytes": 634
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 5161,
|
||||
"offset": 36026,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_MortarSupplyTransfer.c",
|
||||
"sha256": "34f7eaa01dc68e97aae8c1177b7f8fd6c15d5a41c6dc86de377f00b3613a8e77",
|
||||
"stored_bytes": 1606
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 13244,
|
||||
"offset": 37632,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_MortarSystem.c",
|
||||
"sha256": "757fc2d7427b397764aa5668402341ef2f6fcf55d256934371305b5a285ad70e",
|
||||
"stored_bytes": 3848
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 12603,
|
||||
"offset": 41480,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeMortarCourierProbe.c",
|
||||
"sha256": "740c8bebbd4128a9311b1167d1058549475d6b46f81c9b6c0d19650f4b50616f",
|
||||
"stored_bytes": 4071
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 19308,
|
||||
"offset": 45551,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeMortarFiringProbe.c",
|
||||
"sha256": "ee570d21bede8baebefc799399712d9582b3e30ebda7299f6c941777f02ad2a2",
|
||||
"stored_bytes": 5812
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 18190,
|
||||
"offset": 51363,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeMortarSalvoProbe.c",
|
||||
"sha256": "12a92181200a68db4c2908b9c4c09f9947b73192efa95861a8b564d404b01cfb",
|
||||
"stored_bytes": 5630
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 18504,
|
||||
"offset": 56993,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeMortarTransferProbe.c",
|
||||
"sha256": "399c21940ef10777b46fdb3e905430ce43404ce1de2f4a6bb62f9c61c1a0689c",
|
||||
"stored_bytes": 5056
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 3221,
|
||||
"offset": 62049,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativePatrolHQProbe.c",
|
||||
"sha256": "4c04aa3e1b6b000747da8e2a919a6501107880fd041134c019f516665bb6f758",
|
||||
"stored_bytes": 1174
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 2621,
|
||||
"offset": 63223,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_SettlementSafety.c",
|
||||
"sha256": "e5c0ebc95521a9a33a3f7d9cca6c551dda862a08b7af20b017877aba9584795b",
|
||||
"stored_bytes": 990
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 214,
|
||||
"offset": 64213,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_SupportScenario.c",
|
||||
"sha256": "71757018ec9716c4dc24f62a292a214919d3fd5daed3c16e03e56abd208e9f03",
|
||||
"stored_bytes": 214
|
||||
}
|
||||
],
|
||||
"entry_count": 26,
|
||||
"expanded_bytes": 202788,
|
||||
"format": "FORM/PAC1 observed HEAD 03000100",
|
||||
"head_hex": "0300010040932f72757b61124c575d5f060b025f0b03050200000000",
|
||||
"limits": {
|
||||
"archive_bytes": 4294967296,
|
||||
"depth": 64,
|
||||
"entries": 250000,
|
||||
"entry_bytes": 1073741824,
|
||||
"expansion_ratio": 1024,
|
||||
"total_bytes": 8589934592,
|
||||
"tree_bytes": 33554432
|
||||
},
|
||||
"platform_or_resource_semantics_verified": false,
|
||||
"release_qualified": false,
|
||||
"scope": "Bounded structural/content-hash inspection only; no extraction, native load or gameplay proof",
|
||||
"structural_inventory_verified": true,
|
||||
"tree_node_count": 31
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
{
|
||||
"archive": "/tmp/erri-native-package-all-20260919-1115/packages/chat/data.pak",
|
||||
"archive_bytes": 14469,
|
||||
"archive_sha256": "19989c1f41a5c53696b46b99f021070ed71b12168b64bd164b6b595456b3b506",
|
||||
"entries": [
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 415,
|
||||
"offset": 56,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Missions/ERR_Everon.conf",
|
||||
"sha256": "76f3ac0d21b585654beac7ddd68e3c8cbdd66dbfe909b17b04838fa813a7c29b",
|
||||
"stored_bytes": 415
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 1277,
|
||||
"offset": 471,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_AdminCommands.c",
|
||||
"sha256": "d7b4ed95fc32767911936cb0fcc60763233f2c31afd34a6a0fa998b39cec9f5c",
|
||||
"stored_bytes": 572
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 15477,
|
||||
"offset": 1043,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeHQResponseProof.c",
|
||||
"sha256": "0f8b09fd8753234c91fd6baaca0e2f812e409ae1c4be8f340b648ae59b69c2f3",
|
||||
"stored_bytes": 4350
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 172,
|
||||
"offset": 5393,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeMortarProbe.c",
|
||||
"sha256": "ddb892141500c192c0787b011d57dd8c07dd8c9a3ca5fdc407f6c271897bde0a",
|
||||
"stored_bytes": 172
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 3764,
|
||||
"offset": 5565,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeRadioProbe.c",
|
||||
"sha256": "84524163c63402755b4f834f74dfe6d8e5c397dc26031f532593c6f79f5a93b1",
|
||||
"stored_bytes": 1359
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 24467,
|
||||
"offset": 6924,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeSmoke.c",
|
||||
"sha256": "e5a5ab42fc79ab37ceea8f161d8c1879661cc188662c1a67032667d55244bfda",
|
||||
"stored_bytes": 5734
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 430,
|
||||
"offset": 12658,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERRChat/ERR_OrdinaryScenarioLaunchChat.c",
|
||||
"sha256": "dda715c9691d366e35fa2ad5e390dee1971651f137a5a9f9aeb23dcbe53ec87e",
|
||||
"stored_bytes": 430
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 2050,
|
||||
"offset": 13088,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/WorkbenchGame/ERR/ERR_ValidateWorldPlugin.c",
|
||||
"sha256": "81c92d408ce88cc9f98d6053f1d0c863427693ba748f00df9f1bf8079015ef94",
|
||||
"stored_bytes": 892
|
||||
}
|
||||
],
|
||||
"entry_count": 8,
|
||||
"expanded_bytes": 48052,
|
||||
"format": "FORM/PAC1 observed HEAD 03000100",
|
||||
"head_hex": "03000100968a4dba202867104d0550595358045d0a51080400000000",
|
||||
"limits": {
|
||||
"archive_bytes": 4294967296,
|
||||
"depth": 64,
|
||||
"entries": 250000,
|
||||
"entry_bytes": 1073741824,
|
||||
"expansion_ratio": 1024,
|
||||
"total_bytes": 8589934592,
|
||||
"tree_bytes": 33554432
|
||||
},
|
||||
"platform_or_resource_semantics_verified": false,
|
||||
"release_qualified": false,
|
||||
"scope": "Bounded structural/content-hash inspection only; no extraction, native load or gameplay proof",
|
||||
"structural_inventory_verified": true,
|
||||
"tree_node_count": 15
|
||||
}
|
||||
@@ -0,0 +1,988 @@
|
||||
{
|
||||
"archive": "/tmp/erri-native-package-all-20260919-1115/packages/core/data.pak",
|
||||
"archive_bytes": 194081,
|
||||
"archive_sha256": "68b0f6888bee3fc97585fd663e265e12da934369ce835454995ef92a31eeb065",
|
||||
"entries": [
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 5144,
|
||||
"offset": 56,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Configs/ERR/EveronSites.conf",
|
||||
"sha256": "ade92cc8d2b14a84ac378bbbb52608b351dca65d359dd7a315d64a145fa4b46f",
|
||||
"stored_bytes": 1167
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 743,
|
||||
"offset": 1223,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Configs/ERR/Factions/MissionVehicles.conf",
|
||||
"sha256": "5f74f4a7089c7e7b54ad62463159ce8f0bab25a6b85268dc3872ea6001e048fb",
|
||||
"stored_bytes": 743
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 11387,
|
||||
"offset": 1966,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Configs/ERR/Factions/US.conf",
|
||||
"sha256": "4c3da063abb6e3ee39a6e4e0c5a9ffd5eae9d209d58470ea18b45dba5528db1b",
|
||||
"stored_bytes": 1869
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 11186,
|
||||
"offset": 3835,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Configs/ERR/Factions/USSR.conf",
|
||||
"sha256": "407ea27f80a64c5184c089d43cdd0bdabfc5974c84f1d2a245081fdf2afa3f30",
|
||||
"stored_bytes": 1820
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 944,
|
||||
"offset": 5655,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Configs/ERR/GameOverScreens.conf",
|
||||
"sha256": "45231061911a1462d45fb6db0fecc2b0793f17b5ae71017174954ff4fbd20236",
|
||||
"stored_bytes": 944
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 290,
|
||||
"offset": 6599,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Configs/ERR/VanillaFactions.conf",
|
||||
"sha256": "db890b61b48ee15484041fd2245a862d9fa9e7ba21b1229c281ff37c448a35b1",
|
||||
"stored_bytes": 290
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 441,
|
||||
"offset": 6889,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Missions/ERR_Everon_Base.conf",
|
||||
"sha256": "1e6a0e9a756d15495201f71121626890f01efe6b00154c561672d4ec157960bd",
|
||||
"stored_bytes": 441
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 153,
|
||||
"offset": 7330,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Prefabs/ERR/Extraction.et",
|
||||
"sha256": "1aa286ef253c5410f09fa641e4be91a7be8ec834487a7fbb74cfb45cab60ee1e",
|
||||
"stored_bytes": 153
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 460,
|
||||
"offset": 7483,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Prefabs/ERR/FactionManager.et",
|
||||
"sha256": "425f916b890019c537f6b2f72b1af9e7be54b0a476320da969e1f313a7ac5ea5",
|
||||
"stored_bytes": 460
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 650,
|
||||
"offset": 7943,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Prefabs/ERR/FieldCover.et",
|
||||
"sha256": "20f8095e69dbfe3db74ff19078e528ea75405362b335e03560ccd61f8df2e7f3",
|
||||
"stored_bytes": 650
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 533,
|
||||
"offset": 8593,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Prefabs/ERR/GameMode.et",
|
||||
"sha256": "385c97a5b8067091d92aa60c2d4fcf02002cf606b95523866ead65c96b8c0029",
|
||||
"stored_bytes": 533
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 175,
|
||||
"offset": 9126,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Prefabs/ERR/ObjectiveDocument.et",
|
||||
"sha256": "2e72270bf186654af12d2c3ff9bf940690b03fb17fca44f873c1fde5d11384c0",
|
||||
"stored_bytes": 175
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 633,
|
||||
"offset": 9301,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Prefabs/ERR/Patrol.et",
|
||||
"sha256": "c5685a8bc311cc5563fb3334beec9408d3d7a1069152fddeeb7df4f1b7f9e6ce",
|
||||
"stored_bytes": 633
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 2254,
|
||||
"offset": 9934,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Prefabs/ERR/Prison.et",
|
||||
"sha256": "1503db1441d8cd7a4f0b45c27ba9623b9fa39f0f81016e180bd2aa1379e1f42a",
|
||||
"stored_bytes": 2254
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 676,
|
||||
"offset": 12188,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Prefabs/ERR/PrisonDoor.et",
|
||||
"sha256": "fc66be9d36f1f01084de59f1b0a1e8817f9e46547ead33d4fafaac0107446c40",
|
||||
"stored_bytes": 676
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 293,
|
||||
"offset": 15120,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Prefabs/ERR/PrisonWall.et",
|
||||
"sha256": "8009d19365ae72a4749d7ad4fa04662575b06c65c6bf06507d380d57258b5eed",
|
||||
"stored_bytes": 293
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 2256,
|
||||
"offset": 12864,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Prefabs/ERR/Prisoner.et",
|
||||
"sha256": "198b5badabb12f218f86df7eb4dc268fd830769dc3de7eef6362cfaee4d6fc8d",
|
||||
"stored_bytes": 2256
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 705,
|
||||
"offset": 15413,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Prefabs/ERR/Radio.et",
|
||||
"sha256": "b4b5cfe125b39019855816c9a1c508ca4d65d435b5546fdaa6c1fa3c8c9b1165",
|
||||
"stored_bytes": 705
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 140,
|
||||
"offset": 16118,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Prefabs/ERR/SpectatorCamera.et",
|
||||
"sha256": "b5b87d5b7b707f3745741aebe7c923067c8a74f8fbb2a4711834bab03bb5a812",
|
||||
"stored_bytes": 140
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 1062,
|
||||
"offset": 16258,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Prefabs/ERR/SupplyCache.et",
|
||||
"sha256": "bccf7afbaae97cfcdd78dd6dbbf4be5b2c045d348f50fe4581962e556c0044d7",
|
||||
"stored_bytes": 1062
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 153,
|
||||
"offset": 17320,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Prefabs/ERR/SupplySite.et",
|
||||
"sha256": "dc5decce5cabf39b6116e8794ec3960cb1e35761854fdbe69740da118787ded4",
|
||||
"stored_bytes": 153
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 1832,
|
||||
"offset": 17473,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_Actions.c",
|
||||
"sha256": "544429dcccc92097e07a4426289adf6effc37072f80de12d568879bcf98fbcdb",
|
||||
"stored_bytes": 569
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 2564,
|
||||
"offset": 18042,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_Actors.c",
|
||||
"sha256": "b3c5aabb05f7cf35167bc09b5db51a4ffd89a46658805d6eedbfb80eee30273d",
|
||||
"stored_bytes": 957
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 5197,
|
||||
"offset": 18999,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_AdminService.c",
|
||||
"sha256": "9985747d5ddaeb91bf27937836a6c369f8dcb353263b77a49212ec28c10ba4eb",
|
||||
"stored_bytes": 1737
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 4152,
|
||||
"offset": 20736,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_CasualtyGroundSupport.c",
|
||||
"sha256": "26f0c7ebe8563bb022f7c383674e7d8997b0cc35c7ea321d39d74f2493c1ed9d",
|
||||
"stored_bytes": 1593
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 1783,
|
||||
"offset": 22329,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_CasualtyLoadingGameMode.c",
|
||||
"sha256": "f4cf19440583ac24346831a2d5f1d7f734c031e46dc266c499972329dd0533cf",
|
||||
"stored_bytes": 583
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 4564,
|
||||
"offset": 22912,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_CasualtyLoadingOwner.c",
|
||||
"sha256": "6346a05ddda030f7d9b6f026f977d5f018ee16002fa519e8c49dcd700c323dc7",
|
||||
"stored_bytes": 1211
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 17277,
|
||||
"offset": 24123,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_CasualtyLoadingService.c",
|
||||
"sha256": "93fe23d9e1da596886c33cf76bad92b0906ff5cdd8b5b21d58906e9270246201",
|
||||
"stored_bytes": 4457
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 4594,
|
||||
"offset": 28580,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_DiscoveryMap.c",
|
||||
"sha256": "7553c8cc1388cca3404994e36f96946c6abd1fefb08cef2fbb3ea1a62b22861b",
|
||||
"stored_bytes": 1758
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 2981,
|
||||
"offset": 30338,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_DiscoveryService.c",
|
||||
"sha256": "2793bb888566dd975e5bbf93fdb47a22e3b0f33a68d04992191cf6428ae942a0",
|
||||
"stored_bytes": 1082
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 377,
|
||||
"offset": 31420,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_DocumentComponent.c",
|
||||
"sha256": "17bb76b80ebd3357e46d553c44674f602c7bd6901c92aec53ac8214194aa4ff2",
|
||||
"stored_bytes": 377
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 7174,
|
||||
"offset": 31797,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_EnvironmentService.c",
|
||||
"sha256": "867e9f47adfb7a9819a8b58498688ff86127282cb89cf2529ae81f73e529e1c5",
|
||||
"stored_bytes": 2142
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 3058,
|
||||
"offset": 33939,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_EscapeGameOverScreenInfo.c",
|
||||
"sha256": "b1e1afb7795cb77c0bad94c85abf705b26b9dc2a9400905d80eafd56bdd009d3",
|
||||
"stored_bytes": 991
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 6227,
|
||||
"offset": 34930,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_ExtractionPlacement.c",
|
||||
"sha256": "c30222ca25cc0e91dec4077e6b82b37a9edafcf2cbebd0be5b6bd8656b53adfe",
|
||||
"stored_bytes": 2065
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 3964,
|
||||
"offset": 36995,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_ExtractionService.c",
|
||||
"sha256": "91357099b4e0401196b67d48963be54be30e56bdba57cdac67dc20b8ebb883e9",
|
||||
"stored_bytes": 1304
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 1560,
|
||||
"offset": 38299,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_FactionCatalog.c",
|
||||
"sha256": "a5a8c53acf21259e14f59cb919535910f30dabff5a9179c664bc6a7a4d744d6e",
|
||||
"stored_bytes": 544
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 17150,
|
||||
"offset": 38843,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_GameMode.c",
|
||||
"sha256": "41f2247a45252eaacb580aa5ebb5a85ecfa41e0f940eb0d2c8ea5a3f6c35058e",
|
||||
"stored_bytes": 4348
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 608,
|
||||
"offset": 43191,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_InitialGuardRules.c",
|
||||
"sha256": "8c9d6b1dc4c2af96284e34f487eebb5a221091016ef108006dec60b4e3836558",
|
||||
"stored_bytes": 608
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 650,
|
||||
"offset": 43799,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_Inventory.c",
|
||||
"sha256": "b63e679d5b650b63a7a91dfc3f42a62f4be58b0338f6df3313e66d29a93bebf6",
|
||||
"stored_bytes": 650
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 2716,
|
||||
"offset": 44449,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_ItemStationTeardown.c",
|
||||
"sha256": "102e61216e86e47ad243cc19f6f66da1fcd8cc77f8799354ceaeb4a6dc74622e",
|
||||
"stored_bytes": 1050
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 997,
|
||||
"offset": 45499,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_LoadCasualtyAction.c",
|
||||
"sha256": "5d868fb065a1a0fea7d5abfc81d1d8be96823815535f2ffd0dc4ff60d8eae794",
|
||||
"stored_bytes": 997
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 4453,
|
||||
"offset": 46496,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_LocalAdmission.c",
|
||||
"sha256": "b0e824c6880cbf9b1f368dc7ada9907bde78b22b948d419b6c861323f32258be",
|
||||
"stored_bytes": 1530
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 2236,
|
||||
"offset": 48026,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_Location.c",
|
||||
"sha256": "d2035f56ded35743312ec6ca91a67f8623a466c91255e1893c570edf0954ff24",
|
||||
"stored_bytes": 829
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 1323,
|
||||
"offset": 48855,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_MissionRules.c",
|
||||
"sha256": "f7abc38ad8fdc375ce7fa63a65f0bade027d22b37e09de5e3f94ba8c3c63cc41",
|
||||
"stored_bytes": 523
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 5026,
|
||||
"offset": 49378,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeAdminSettingsProbe.c",
|
||||
"sha256": "6a4df33a2b0e6b6aeed944c6895961e658d4f0db9aed9b8433a43a451fa35cae",
|
||||
"stored_bytes": 1575
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 43596,
|
||||
"offset": 50953,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeBaseSmoke.c",
|
||||
"sha256": "1e827bb2fd7f33758b59850e718f5cebf55fcdd4515776456f6046df61a28900",
|
||||
"stored_bytes": 8507
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 4635,
|
||||
"offset": 59460,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeCasualtyGroundProbe.c",
|
||||
"sha256": "41f40db3735f8aa535c0061458d9892dcfe972222b8a17238e67b65633c46bc3",
|
||||
"stored_bytes": 1653
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 13657,
|
||||
"offset": 61113,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeCasualtyLoadProbe.c",
|
||||
"sha256": "94c533deea654ec546df3f1ebb7cd213e6cd79b1125d99bab5303ef8e87b018b",
|
||||
"stored_bytes": 4094
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 8987,
|
||||
"offset": 65207,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeCasualtyRemoveProbe.c",
|
||||
"sha256": "4cfc06f6d43b709b63caae714155ffc562502e884f49a9825623c6f46972ad36",
|
||||
"stored_bytes": 2969
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 18190,
|
||||
"offset": 68176,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeCasualtyServiceProbe.c",
|
||||
"sha256": "02a9d70d1f4ba20326df199ba41489cfbae12b7bb0aab441361421cee38ad9ea",
|
||||
"stored_bytes": 5043
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 3898,
|
||||
"offset": 73219,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeContractsProbe.c",
|
||||
"sha256": "d1556df885171cf967e96eef5d8981a2e9ee4e3938b7d32fdd0426f647bbabc0",
|
||||
"stored_bytes": 1272
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 2897,
|
||||
"offset": 74491,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeDefinitionProbe.c",
|
||||
"sha256": "c07048341396443ddf5307e340e2087254d65f0bddf8f7d93e6b6bd7f03ca360",
|
||||
"stored_bytes": 929
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 8229,
|
||||
"offset": 75420,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeDiscoveryMapProbe.c",
|
||||
"sha256": "9ed32d391d08d937ff4f9f33bd11c3a204ce9a2230c2d72b6761e0320b31f24f",
|
||||
"stored_bytes": 2068
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 9497,
|
||||
"offset": 77488,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeEnvironmentProbe.c",
|
||||
"sha256": "8b1d110717aa5f07bfb8fe633847eab519109e3a8a4100970a487be05c053418",
|
||||
"stored_bytes": 2679
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 6798,
|
||||
"offset": 80167,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeEnvironmentRestartProbe.c",
|
||||
"sha256": "7a836a206381b8e8de24c92baf141beb30575723675dd6948d738169ed26b507",
|
||||
"stored_bytes": 2149
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 9054,
|
||||
"offset": 82316,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeExtractionProbe.c",
|
||||
"sha256": "4b09385f73206de004f4f3c38a6192fd658a0d2012482dc5a84dff1599ceb972",
|
||||
"stored_bytes": 2625
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 6188,
|
||||
"offset": 84941,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeFactionCatalogProbe.c",
|
||||
"sha256": "ee11486cf77da9070506ccc0cfd6e94240c5387c8be455bf864934a8fef65f78",
|
||||
"stored_bytes": 2136
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 7665,
|
||||
"offset": 87077,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeFlightFootprint.c",
|
||||
"sha256": "a8862a04ac784426f431e2e9cd3f1f19f820b38a081674d29549b8b00277c72d",
|
||||
"stored_bytes": 2709
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 5608,
|
||||
"offset": 89786,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeFlightInputDiagnostics.c",
|
||||
"sha256": "e231dcbdaefe81beb3bd587cb73be8fb3d3184bc86d18dbaa30a43ca4ba5dcc4",
|
||||
"stored_bytes": 1597
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 12434,
|
||||
"offset": 91383,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeGuardCancelProbe.c",
|
||||
"sha256": "bfa1c65cb039e19c3d1891e4a3fd33469e974c97cc7f42128efc31a8f587d514",
|
||||
"stored_bytes": 3498
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 7407,
|
||||
"offset": 94881,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeItemStationTeardownProbe.c",
|
||||
"sha256": "028588a49fa9207087cd27ec9396979cd932daa071e2490bd0262cd71dae30d9",
|
||||
"stored_bytes": 2254
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 10808,
|
||||
"offset": 97135,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeLifecycleProbe.c",
|
||||
"sha256": "b613a5dbe81c2032fd02d31070ae5631166d14d0b02cdbec3b63b782f0bbc115",
|
||||
"stored_bytes": 3107
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 7963,
|
||||
"offset": 100242,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeLocalAdmissionProbe.c",
|
||||
"sha256": "29c860ca3e51cdaa463f3c23a98ff45ee0499ce9bbc322046e0efbed587f1e09",
|
||||
"stored_bytes": 2588
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 12044,
|
||||
"offset": 102830,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeMedicalProbe.c",
|
||||
"sha256": "43fa51ffbcf9dd0cd8e905a1135bcf0756651da3af34677f3c92e7d264ed70b6",
|
||||
"stored_bytes": 3462
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 8826,
|
||||
"offset": 106292,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeObjectiveLossProbe.c",
|
||||
"sha256": "6b80fd317a8c6e8583bd4337870838a86251e3b8a681d0aa07e8b52e22abfc48",
|
||||
"stored_bytes": 2735
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 12327,
|
||||
"offset": 109027,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeObjectiveProbe.c",
|
||||
"sha256": "71fbd2479a70048f83d8b262ad1452f427be2c0afc8b071ef13bff477b9dc29b",
|
||||
"stored_bytes": 3270
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 10195,
|
||||
"offset": 112297,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativePatrolProbe.c",
|
||||
"sha256": "02bd9fdf5454db7dd4c82240efe0d947bf8d6488ace42809c3aef6505cb6266d",
|
||||
"stored_bytes": 3203
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 37280,
|
||||
"offset": 115500,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativePoweredFlightProbe.c",
|
||||
"sha256": "d826a9de7b7f565aa21b791a387db26a3aea1514e437b910eaf77d9263f6f82c",
|
||||
"stored_bytes": 10490
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 8024,
|
||||
"offset": 125990,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativePrisonBreachProbe.c",
|
||||
"sha256": "22d0923cd69ba591e783011d424c97c86520272b70da9aa6a6d15558464c264c",
|
||||
"stored_bytes": 2601
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 10407,
|
||||
"offset": 128591,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativePrisonerProbe.c",
|
||||
"sha256": "e2d1ffe5d269add55124601ff0d1dc032a398c7d51010736e6f0e4cbeb38ae86",
|
||||
"stored_bytes": 3162
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 6855,
|
||||
"offset": 131753,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeProgressionIdentityProbe.c",
|
||||
"sha256": "1d3fe20bce761a1082964bca9bad9ce79d1fa8b04db9b5053bae98da380ae560",
|
||||
"stored_bytes": 2103
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 17296,
|
||||
"offset": 133856,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeRadioDefenceProbe.c",
|
||||
"sha256": "cad54f0b43cefd72df74697dfc7e93725ff0acac6d311e963ce4f817428c272c",
|
||||
"stored_bytes": 4307
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 4427,
|
||||
"offset": 138163,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeRecoveryProbe.c",
|
||||
"sha256": "4de6868cd3e76afb80cf0ae5dac1e35d2c417838f640c2f18aa3343217eea2f2",
|
||||
"stored_bytes": 1367
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 5329,
|
||||
"offset": 139530,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeResultProbe.c",
|
||||
"sha256": "b9a117eef2d5f65fbd792041a2b3e59e38e201bda8e0df8c503e1a1242cfc415",
|
||||
"stored_bytes": 1623
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 1967,
|
||||
"offset": 141153,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeSiteSurvey.c",
|
||||
"sha256": "ac0203753ade0cdff6d483132797a80e4520f14546c3f9dea288281cd4cd9c4f",
|
||||
"stored_bytes": 892
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 5170,
|
||||
"offset": 142045,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeStationTeardownDiagnostic.c",
|
||||
"sha256": "172248540932174341882861bb78a9720a6cf89981fcdf9dffe63f7fd4023f2c",
|
||||
"stored_bytes": 1514
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 8450,
|
||||
"offset": 143559,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeTimeProbe.c",
|
||||
"sha256": "c93d049785971e51246fcc07cf24804270a752a655505f2c38e48c80df5255ae",
|
||||
"stored_bytes": 2396
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 7877,
|
||||
"offset": 145955,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeTransportProbe.c",
|
||||
"sha256": "63ec0c5ce698114daa6314b2a6e3c3e98e76094117c477f9d0d072260686d193",
|
||||
"stored_bytes": 2319
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 1546,
|
||||
"offset": 148274,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_NativeTransportSurvey.c",
|
||||
"sha256": "3e94493bf54d15be2bceb106ad18873e14e6755af09c05f07db7fb26fb7adff5",
|
||||
"stored_bytes": 796
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 2611,
|
||||
"offset": 149070,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_ObjectiveDetails.c",
|
||||
"sha256": "628ebd166dcb5544c2d18dce489619984887ee18296cf2446fc6d894f89dd5bf",
|
||||
"stored_bytes": 946
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 3833,
|
||||
"offset": 150982,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_ObjectiveText.c",
|
||||
"sha256": "815fa44350798229784efffe0d4ec16d3382dd62df149215e49d527cc2961553",
|
||||
"stored_bytes": 1445
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 2338,
|
||||
"offset": 150016,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_Objectives.c",
|
||||
"sha256": "88d95a52fcba103483ea751571e1afeae0e6fc82115ed50d6fc195424726960f",
|
||||
"stored_bytes": 966
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 9716,
|
||||
"offset": 152427,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_Observer.c",
|
||||
"sha256": "8646b486bdbed7984bfe643a5c86d53359a444cd4b5c73ddedaf4fae863313e7",
|
||||
"stored_bytes": 2892
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 4791,
|
||||
"offset": 155319,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_OrdinaryScenarioLaunch.c",
|
||||
"sha256": "e2803ff9198e6213bfcbaefad64a35ae3ffe06846c410cf6da6de7653adbf28d",
|
||||
"stored_bytes": 1629
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 2160,
|
||||
"offset": 156948,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_PlayerAdminCommands.c",
|
||||
"sha256": "a084d7dc097dfcde3d6cd9c2e326b9e2f8f2a519f77b30c4f56ab7a1429aa721",
|
||||
"stored_bytes": 825
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 2276,
|
||||
"offset": 157773,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_PlayerEscapeResult.c",
|
||||
"sha256": "3124ab4d2d6d471409a47aba0af528790734df53243c03fe0cdac3e407047c14",
|
||||
"stored_bytes": 729
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 1400,
|
||||
"offset": 158502,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_PlayerGuide.c",
|
||||
"sha256": "2c9c365b88651f8b12618443638bf52c04e497221592bd483c33447e30468f36",
|
||||
"stored_bytes": 569
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 4093,
|
||||
"offset": 159071,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_PlayerRoster.c",
|
||||
"sha256": "c038dac0f749bd29ebc35a4e952904b41a34417ba738904d5efcd1833a263e0b",
|
||||
"stored_bytes": 1387
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 9369,
|
||||
"offset": 160458,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_PrisonEscapeService.c",
|
||||
"sha256": "ed6286342ed12cc9a3df618474f5647c7ac36bc65336be7a5bec908dee04421d",
|
||||
"stored_bytes": 3106
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 5842,
|
||||
"offset": 163564,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_RadioDefenceService.c",
|
||||
"sha256": "5d347cf1a3b021074d560aad8db774828b797e685b63ddff3d28f55781e33ea8",
|
||||
"stored_bytes": 1655
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 561,
|
||||
"offset": 165219,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_RadioFeedback.c",
|
||||
"sha256": "545262e65e9b3645d9e514a0521e442fe08f0c2e4e7c83ba638c5105d09818db",
|
||||
"stored_bytes": 561
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 2512,
|
||||
"offset": 165780,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_RecoveryService.c",
|
||||
"sha256": "ba9ffb93679012c20a665636ef6b201cbe7d8d14fdf53e8cd3eb12ac7248943f",
|
||||
"stored_bytes": 978
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 789,
|
||||
"offset": 166758,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_Resources.c",
|
||||
"sha256": "d0169aac6fd0c38928c47a9002ded0fd8ba558ea3314a600e792d307ac1ca3ee",
|
||||
"stored_bytes": 789
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 2150,
|
||||
"offset": 167547,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_ScenarioComponent.c",
|
||||
"sha256": "abba03af68323d5715ba1e2497fc66f3c706e6a6a983c3a386228abdfddeec89",
|
||||
"stored_bytes": 812
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 4910,
|
||||
"offset": 168359,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_Settings.c",
|
||||
"sha256": "b9390548936b386e0211d487c1b76b65410fdd2e339cd8ecd9585ef4f4ffed31",
|
||||
"stored_bytes": 1515
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 6886,
|
||||
"offset": 169874,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_SiteDefinition.c",
|
||||
"sha256": "b422feeaca90084ea2bee5cde94dc9c6fcae542749b55d95f7226f922a6a68ac",
|
||||
"stored_bytes": 2020
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 819,
|
||||
"offset": 171894,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_SiteDiscoveryRules.c",
|
||||
"sha256": "50f7b3ff4f32bde37ce5ae2be7f598fc4dd8cc08f45914f6e3260d31c84baef2",
|
||||
"stored_bytes": 819
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 21531,
|
||||
"offset": 172713,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_SiteService.c",
|
||||
"sha256": "6bc9a0b5aed326822807f05e17459d0fc2da10b709e8168972b4e40fd09f87cb",
|
||||
"stored_bytes": 5824
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 3491,
|
||||
"offset": 178537,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_SpawnFinalization.c",
|
||||
"sha256": "2e295b0f225208c5414728ba83333e5e0ab6eef3a708ce39eb1dfce5400c94c9",
|
||||
"stored_bytes": 1109
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 17955,
|
||||
"offset": 179646,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_SpawnLogic.c",
|
||||
"sha256": "bbbf35110259cacdac63779604ce22149d1a2198ec4c4cf43f7f3bf57e3241e8",
|
||||
"stored_bytes": 4058
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 3379,
|
||||
"offset": 183704,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_SpawnPlacement.c",
|
||||
"sha256": "55323dcb330c23d49dc8fa3fde86a3ae3958c0b6563d6c3cd0960da88333f93d",
|
||||
"stored_bytes": 1305
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 472,
|
||||
"offset": 185009,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_Supplies.c",
|
||||
"sha256": "752e8a56b0b8cde33cf532032cb0a203553017b686faac2e19bee06f7a9c0713",
|
||||
"stored_bytes": 472
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 3033,
|
||||
"offset": 185481,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_TimeService.c",
|
||||
"sha256": "d9f481b7da01e08d2c982a948c18ba6bde76889d7cc9d26d510708f4ba479453",
|
||||
"stored_bytes": 1021
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 806,
|
||||
"offset": 186502,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/GameLib/ERR/ERR_DiagnosticNoSplash.c",
|
||||
"sha256": "0ea1b402f8927b6d68bf6f7e5caa2967f7e3a39147634faab147796b791933b5",
|
||||
"stored_bytes": 806
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 824,
|
||||
"offset": 187308,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/WorkbenchGame/ERR/ERR_ValidateBaseWorldPlugin.c",
|
||||
"sha256": "7f44aa64ea7b4f8b3640a37a4b781c43bf6adb80e4a3a702d9491131698056f6",
|
||||
"stored_bytes": 824
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 62,
|
||||
"offset": 188132,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Worlds/ERR_Everon.ent",
|
||||
"sha256": "22324bc7eb0d80dec8a1f3bd61a9df9201b72f749f4e751766b0c9d0b7d46b87",
|
||||
"stored_bytes": 62
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 1397,
|
||||
"offset": 188194,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Worlds/ERR_Everon_Layers/default.layer",
|
||||
"sha256": "17105538007199bfc419aa04a64debaf2da0a7b77a1dc3ba983e92bf747c862e",
|
||||
"stored_bytes": 569
|
||||
}
|
||||
],
|
||||
"entry_count": 107,
|
||||
"expanded_bytes": 608278,
|
||||
"format": "FORM/PAC1 observed HEAD 03000100",
|
||||
"head_hex": "030001002894d65c772a37424c505b57045a540f0b04030a00000000",
|
||||
"limits": {
|
||||
"archive_bytes": 4294967296,
|
||||
"depth": 64,
|
||||
"entries": 250000,
|
||||
"entry_bytes": 1073741824,
|
||||
"expansion_ratio": 1024,
|
||||
"total_bytes": 8589934592,
|
||||
"tree_bytes": 33554432
|
||||
},
|
||||
"platform_or_resource_semantics_verified": false,
|
||||
"release_qualified": false,
|
||||
"scope": "Bounded structural/content-hash inspection only; no extraction, native load or gameplay proof",
|
||||
"structural_inventory_verified": true,
|
||||
"tree_node_count": 122
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"archive": "/tmp/erri-native-package-all-20260919-1115/packages/intel/data.pak",
|
||||
"archive_bytes": 1141,
|
||||
"archive_sha256": "362b381f7ec0825613ca985d124c988072bcbf52af1c98b27d2bcaf9f755f404",
|
||||
"entries": [
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 2459,
|
||||
"offset": 56,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_IntelService.c",
|
||||
"sha256": "482839434b94e7f8c345d5fd96490aeebb765f3dd0c1bb25fceea2f435c0e722",
|
||||
"stored_bytes": 995
|
||||
}
|
||||
],
|
||||
"entry_count": 1,
|
||||
"expanded_bytes": 2459,
|
||||
"format": "FORM/PAC1 observed HEAD 03000100",
|
||||
"head_hex": "03000100d48f2373757a61474d020d5b060a020a0a56550600000000",
|
||||
"limits": {
|
||||
"archive_bytes": 4294967296,
|
||||
"depth": 64,
|
||||
"entries": 250000,
|
||||
"entry_bytes": 1073741824,
|
||||
"expansion_ratio": 1024,
|
||||
"total_bytes": 8589934592,
|
||||
"tree_bytes": 33554432
|
||||
},
|
||||
"platform_or_resource_semantics_verified": false,
|
||||
"release_qualified": false,
|
||||
"scope": "Bounded structural/content-hash inspection only; no extraction, native load or gameplay proof",
|
||||
"structural_inventory_verified": true,
|
||||
"tree_node_count": 4
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"archive": "/tmp/erri-native-package-all-20260919-1115/packages/map/data.pak",
|
||||
"archive_bytes": 5751,
|
||||
"archive_sha256": "be5b2966e695a6b144b57dec520e8d418eb93994d87c105c0f7d8e0034a3be67",
|
||||
"entries": [
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 226,
|
||||
"offset": 56,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Materials/ERRM_MapRenderTarget.emat",
|
||||
"sha256": "9877c5b175c5f30dd80bea36c711b21ab38219aa7075adf9ae79932e1d4c76bc",
|
||||
"stored_bytes": 226
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 2410,
|
||||
"offset": 282,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Prefabs/Items/Equipment/ERRM_SharedFieldMap.et",
|
||||
"sha256": "30dee8e9eab459ea32a7d835a9fb89d43df47708057cab829f067b25a24cd581",
|
||||
"stored_bytes": 2410
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 166,
|
||||
"offset": 2692,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERR/ERR_ScenarioMap.c",
|
||||
"sha256": "75fa1d742129ef7f33c005cd48f56db7f49ee7bde3c5428532b0b501b032b0a3",
|
||||
"stored_bytes": 166
|
||||
},
|
||||
{
|
||||
"compression": "zlib",
|
||||
"content_bytes": 5812,
|
||||
"offset": 2858,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "Scripts/Game/ERRMap/ERRM_SharedMapComponent.c",
|
||||
"sha256": "fc1a0c7df4fc96da446d7542a45a10fbec1eda1e543ba2f0581cb772277a47c5",
|
||||
"stored_bytes": 1867
|
||||
},
|
||||
{
|
||||
"compression": "raw",
|
||||
"content_bytes": 634,
|
||||
"offset": 4725,
|
||||
"opaque_tail_hex": "5d94666a",
|
||||
"path": "UI/layouts/ERRMap/SharedMapRenderTarget.layout",
|
||||
"sha256": "49a2da4181b94d42174f58c7f9b6bf2207116c99427d61ff1c212092ac7db4d2",
|
||||
"stored_bytes": 634
|
||||
}
|
||||
],
|
||||
"entry_count": 5,
|
||||
"expanded_bytes": 9248,
|
||||
"format": "FORM/PAC1 observed HEAD 03000100",
|
||||
"head_hex": "030001004b2853ee272c6647475c5d0d545c050a0008055000000000",
|
||||
"limits": {
|
||||
"archive_bytes": 4294967296,
|
||||
"depth": 64,
|
||||
"entries": 250000,
|
||||
"entry_bytes": 1073741824,
|
||||
"expansion_ratio": 1024,
|
||||
"total_bytes": 8589934592,
|
||||
"tree_bytes": 33554432
|
||||
},
|
||||
"platform_or_resource_semantics_verified": false,
|
||||
"release_qualified": false,
|
||||
"scope": "Bounded structural/content-hash inspection only; no extraction, native load or gameplay proof",
|
||||
"structural_inventory_verified": true,
|
||||
"tree_node_count": 16
|
||||
}
|
||||
@@ -0,0 +1,256 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Read-only strict inventory of the observed Enfusion FORM/PAC1 PAK format.
|
||||
Names, declared sizes and verified content hashes only; never extract payloads.
|
||||
"""
|
||||
import argparse
|
||||
from dataclasses import dataclass
|
||||
import hashlib
|
||||
import json
|
||||
import os
|
||||
from pathlib import Path
|
||||
import re
|
||||
import stat
|
||||
import struct
|
||||
import unicodedata
|
||||
import zlib
|
||||
|
||||
BLOCK = 1024 * 1024
|
||||
|
||||
|
||||
class PakError(ValueError):
|
||||
pass
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class Limits:
|
||||
archive_bytes: int = 4 * 1024**3
|
||||
tree_bytes: int = 32 * 1024**2
|
||||
entries: int = 250000 # files plus directories
|
||||
depth: int = 64
|
||||
entry_bytes: int = 1024**3
|
||||
total_bytes: int = 8 * 1024**3
|
||||
expansion_ratio: int = 1024
|
||||
|
||||
def validate(self):
|
||||
if any(type(value) is not int or value <= 0 for value in vars(self).values()):
|
||||
raise PakError('All limits must be positive integers')
|
||||
if self.depth > 128:
|
||||
raise PakError('Maximum supported tree depth is 128')
|
||||
|
||||
|
||||
def exact(stream, count):
|
||||
data = stream.read(count)
|
||||
if len(data) != count:
|
||||
raise PakError('Truncated archive')
|
||||
return data
|
||||
|
||||
|
||||
def component(raw):
|
||||
try:
|
||||
name = raw.decode('utf-8')
|
||||
except UnicodeDecodeError as error:
|
||||
raise PakError('Non-UTF-8 entry name') from error
|
||||
if (not name or name in {'.', '..'} or any(char in name for char in '/\\:')
|
||||
or any(ord(char) < 32 or ord(char) == 127 for char in name)
|
||||
or name.endswith((' ', '.')) or unicodedata.normalize('NFC', name) != name
|
||||
or re.fullmatch(r'(?:CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])(?:\..*)?', name, re.I)):
|
||||
raise PakError('Unsafe or noncanonical entry name')
|
||||
return name
|
||||
|
||||
|
||||
def parse_tree(tree, data_start, data_end, limits):
|
||||
if len(tree) < 6 or tree[:2] != b'\0\0':
|
||||
raise PakError('Unsupported FILE root header')
|
||||
offset = 6
|
||||
seen = set()
|
||||
entries = []
|
||||
count_seen = 0
|
||||
total = 0
|
||||
|
||||
def take(size):
|
||||
nonlocal offset
|
||||
if offset + size > len(tree):
|
||||
raise PakError('Truncated FILE entry')
|
||||
result = tree[offset:offset+size]
|
||||
offset += size
|
||||
return result
|
||||
|
||||
def walk(parent, count, depth):
|
||||
nonlocal count_seen, total
|
||||
if depth > limits.depth or count > limits.entries - count_seen:
|
||||
raise PakError('Directory depth/count limit exceeded')
|
||||
for _ in range(count):
|
||||
count_seen += 1
|
||||
if count_seen > limits.entries:
|
||||
raise PakError('Entry count limit exceeded')
|
||||
kind, length = take(2)
|
||||
name = component(take(length))
|
||||
path = parent + name
|
||||
key = path.casefold()
|
||||
if key in seen:
|
||||
raise PakError('Duplicate or case-colliding file/directory path: '+path)
|
||||
seen.add(key)
|
||||
if kind == 0:
|
||||
children = struct.unpack('<I', take(4))[0]
|
||||
walk(path+'/', children, depth+1)
|
||||
elif kind == 1:
|
||||
raw = take(24)
|
||||
start, stored, size = struct.unpack_from('<III', raw)
|
||||
flags = (raw[18], raw[19])
|
||||
if raw[12:18] != b'\0'*6 or flags not in {(0, 0), (1, 6)}:
|
||||
raise PakError('Unsupported FILE descriptor flags/reserved bytes: '+path)
|
||||
if start < data_start or start > data_end or stored > data_end-start:
|
||||
raise PakError('Payload outside DATA bounds: '+path)
|
||||
if flags == (0, 0) and stored != size:
|
||||
raise PakError('Raw payload stored/expanded size mismatch: '+path)
|
||||
if flags == (1, 6) and stored == 0:
|
||||
raise PakError('Empty compressed stream: '+path)
|
||||
if size > limits.entry_bytes or size > max(1, stored)*limits.expansion_ratio:
|
||||
raise PakError('Entry expansion/size limit exceeded: '+path)
|
||||
total += size
|
||||
if total > limits.total_bytes:
|
||||
raise PakError('Aggregate expanded-data limit exceeded')
|
||||
entries.append({'path': path, 'offset': start, 'stored_bytes': stored,
|
||||
'content_bytes': size, 'compression': 'zlib' if flags[0] else 'raw',
|
||||
'opaque_tail_hex': raw[20:24].hex()})
|
||||
else:
|
||||
raise PakError('Unsupported FILE node kind')
|
||||
|
||||
walk('', struct.unpack_from('<I', tree, 2)[0], 0)
|
||||
if offset != len(tree):
|
||||
raise PakError('Unparsed trailing FILE bytes')
|
||||
# Observed archives have contiguous, non-overlapping, completely indexed DATA.
|
||||
# Refuse sparse/unindexed/deduplicated variants instead of guessing semantics.
|
||||
cursor = data_start
|
||||
for entry in sorted(entries, key=lambda row: (row['offset'], row['stored_bytes'])):
|
||||
if entry['offset'] != cursor:
|
||||
raise PakError('Overlapping or unindexed DATA extent')
|
||||
cursor += entry['stored_bytes']
|
||||
if cursor != data_end:
|
||||
raise PakError('Unindexed trailing DATA bytes')
|
||||
return entries, total, count_seen
|
||||
|
||||
|
||||
def content_hash(stream, entry):
|
||||
stream.seek(entry['offset'])
|
||||
remaining = entry['stored_bytes']
|
||||
expected = entry['content_bytes']
|
||||
produced = 0
|
||||
hasher = hashlib.sha256()
|
||||
decoder = zlib.decompressobj() if entry['compression'] == 'zlib' else None
|
||||
|
||||
def accept(data):
|
||||
nonlocal produced
|
||||
produced += len(data)
|
||||
if produced > expected:
|
||||
raise PakError('Expanded data exceeds declared size: '+entry['path'])
|
||||
hasher.update(data)
|
||||
|
||||
try:
|
||||
while remaining:
|
||||
data = exact(stream, min(BLOCK, remaining))
|
||||
remaining -= len(data)
|
||||
if decoder is None:
|
||||
accept(data)
|
||||
continue
|
||||
while data:
|
||||
previous = data
|
||||
output = decoder.decompress(data, min(BLOCK, expected-produced+1))
|
||||
accept(output)
|
||||
if decoder.unused_data or (decoder.eof and remaining):
|
||||
raise PakError('Trailing/concatenated compressed payload: '+entry['path'])
|
||||
data = decoder.unconsumed_tail
|
||||
if data == previous and not output:
|
||||
raise PakError('Compressed decoder made no progress')
|
||||
if decoder is not None:
|
||||
while not decoder.eof:
|
||||
output = decoder.decompress(b'', min(BLOCK, expected-produced+1))
|
||||
if not output:
|
||||
break
|
||||
accept(output)
|
||||
if not decoder.eof or decoder.unused_data or decoder.unconsumed_tail:
|
||||
raise PakError('Incomplete/extra compressed payload: '+entry['path'])
|
||||
except zlib.error as error:
|
||||
raise PakError('Invalid zlib stream: '+entry['path']) from error
|
||||
if produced != expected:
|
||||
raise PakError('Expanded size mismatch: '+entry['path'])
|
||||
return hasher.hexdigest()
|
||||
|
||||
|
||||
def inventory(path, limits=Limits()):
|
||||
limits.validate()
|
||||
path = Path(path)
|
||||
descriptor = os.open(path, os.O_RDONLY | os.O_NONBLOCK | os.O_NOFOLLOW)
|
||||
with os.fdopen(descriptor, 'rb') as stream:
|
||||
before = os.fstat(stream.fileno())
|
||||
if not stat.S_ISREG(before.st_mode) or before.st_size > limits.archive_bytes:
|
||||
raise PakError('Input must be a regular archive within its size limit')
|
||||
header = exact(stream, 12)
|
||||
if header[:4] != b'FORM' or header[8:] != b'PAC1' or struct.unpack_from('>I', header, 4)[0] != before.st_size-8:
|
||||
raise PakError('Unsupported or inconsistent FORM/PAC1 header')
|
||||
offset = 12
|
||||
chunks = {}
|
||||
for expected in (b'HEAD', b'DATA', b'FILE'):
|
||||
stream.seek(offset)
|
||||
tag, size = struct.unpack('>4sI', exact(stream, 8))
|
||||
if tag != expected or size > before.st_size-offset-8:
|
||||
raise PakError('Unsupported chunk order or out-of-bounds chunk')
|
||||
chunks[tag] = (offset+8, size)
|
||||
offset += 8+size
|
||||
if offset != before.st_size:
|
||||
raise PakError('Unknown trailing archive chunks/bytes')
|
||||
start, size = chunks[b'HEAD']
|
||||
if size != 28:
|
||||
raise PakError('Unsupported HEAD size')
|
||||
stream.seek(start)
|
||||
head = exact(stream, size)
|
||||
if head[:4] != b'\x03\x00\x01\x00' or head[24:] != b'\0'*4:
|
||||
raise PakError('Unsupported HEAD version/flags')
|
||||
start, size = chunks[b'FILE']
|
||||
if size > limits.tree_bytes:
|
||||
raise PakError('FILE metadata exceeds size limit')
|
||||
stream.seek(start)
|
||||
tree = exact(stream, size)
|
||||
data_start, data_size = chunks[b'DATA']
|
||||
entries, expanded, nodes = parse_tree(tree, data_start, data_start+data_size, limits)
|
||||
for entry in entries:
|
||||
entry['sha256'] = content_hash(stream, entry)
|
||||
stream.seek(0)
|
||||
archive_hash = hashlib.sha256()
|
||||
for block in iter(lambda: stream.read(BLOCK), b''):
|
||||
archive_hash.update(block)
|
||||
after = os.fstat(stream.fileno())
|
||||
if (before.st_size, before.st_mtime_ns, before.st_ctime_ns) != (after.st_size, after.st_mtime_ns, after.st_ctime_ns):
|
||||
raise PakError('Archive changed during inspection')
|
||||
return {'format': 'FORM/PAC1 observed HEAD 03000100', 'archive': str(path),
|
||||
'archive_bytes': before.st_size, 'archive_sha256': archive_hash.hexdigest(),
|
||||
'head_hex': head.hex(), 'entry_count': len(entries), 'tree_node_count': nodes,
|
||||
'expanded_bytes': expanded, 'entries': sorted(entries, key=lambda row: row['path']),
|
||||
'limits': vars(limits), 'structural_inventory_verified': True,
|
||||
'platform_or_resource_semantics_verified': False, 'release_qualified': False,
|
||||
'scope': 'Bounded structural/content-hash inspection only; no extraction, native load or gameplay proof'}
|
||||
|
||||
|
||||
def main(argv=None):
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument('archive', type=Path)
|
||||
parser.add_argument('--output', type=Path, help='New JSON report only; never overwritten')
|
||||
args = parser.parse_args(argv)
|
||||
try:
|
||||
if args.output and (args.output.exists() or args.output.is_symlink()):
|
||||
raise PakError('Output already exists; refusing overwrite')
|
||||
report = inventory(args.archive)
|
||||
text = json.dumps(report, indent=2, sort_keys=True)+'\n'
|
||||
if args.output:
|
||||
with args.output.open('x') as output:
|
||||
output.write(text)
|
||||
else:
|
||||
print(text, end='')
|
||||
return 0
|
||||
except (OSError, ValueError, struct.error) as error:
|
||||
print(json.dumps({'structural_inventory_verified': False, 'error': str(error), 'release_qualified': False}))
|
||||
return 1
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
raise SystemExit(main())
|
||||
Reference in New Issue
Block a user