From 25bfbfe93d2e176dd72ea909fe63c75cda112416 Mon Sep 17 00:00:00 2001 From: Hash Borgir Date: Sun, 15 May 2022 23:15:17 -0600 Subject: [PATCH] d2s checksum working, no more bad generic file --- src/D2Config.php | 2 +- src/D2Functions.php | 4 + src/D2SaveFile.php | 30 +- src/D2SaveFileStructureData.php | 331 +++++++++++++++++--- src/tabs/Chars.php | 28 +- test.php | 47 +-- testData.php | 519 ++++++++++++++++++++++++++++++++ x | 2 +- 8 files changed, 872 insertions(+), 91 deletions(-) create mode 100644 testData.php diff --git a/src/D2Config.php b/src/D2Config.php index 656e8c0..82408ff 100755 --- a/src/D2Config.php +++ b/src/D2Config.php @@ -57,7 +57,7 @@ if (!empty($_POST)) { $path = rtrim($_POST['path'], "\\"); $path = str_replace("\\", "\\\\", $path); - $savePath .= $path . '\\\\save\\\\'; + $savePath = $path . '\\\\save\\\\'; $tbl = $path.'\\\\data\\\\local\\\\lng\\\\eng\\\\'; $path .= '\\\\data\\\\global\\\\excel\\\\'; diff --git a/src/D2Functions.php b/src/D2Functions.php index c57152c..a555044 100755 --- a/src/D2Functions.php +++ b/src/D2Functions.php @@ -73,4 +73,8 @@ function strtobits(string $str): string { } } return $ret; +} + +function swapEndianness($hex) { + return implode('', array_reverse(str_split($hex, 2))); } \ No newline at end of file diff --git a/src/D2SaveFile.php b/src/D2SaveFile.php index 00f0c75..63f87c9 100644 --- a/src/D2SaveFile.php +++ b/src/D2SaveFile.php @@ -118,21 +118,21 @@ class D2SaveFile { foreach ($questsNorm as $k => $v) { $x = (str_split(strtobits($v), 8)); - //if ($x[0][0]) { - $quests['Norm'][$this->sData->qNorm[$k]] = $x[0][0]; - //} + if ($x[0][0]) { + $quests['Norm'][$this->sData->qNorm[$k]] = $x[0][0]; + } } foreach ($questsNM as $k => $v) { $x = array_filter(str_split(strtobits($v), 8)); - //if ($x[0][0]) { - $quests['NM'][$this->sData->qNM[$k]] = $x[0][0]; - //} + if ($x[0][0]) { + $quests['NM'][$this->sData->qNM[$k]] = $x[0][0]; + } } foreach ($questsHell as $k => $v) { $x = array_filter(str_split(strtobits($v), 8)); - //if ($x[0][0]) { - $quests['Hell'][$this->sData->qHell[$k]] = $x[0][0]; - //} + if ($x[0][0]) { + $quests['Hell'][$this->sData->qHell[$k]] = $x[0][0]; + } } return $quests; @@ -188,15 +188,21 @@ class D2SaveFile { // ddump(str_split($wp['Norm'])); foreach ($wp['Norm'] as $k => $v) { - $waypoints['Norm'][$this->sData->wpNames[$k]] = $v; + if ($v == 1) { + $waypoints['Norm'][$this->sData->wpNames[$k]] = $v; + } } foreach ($wp['NM'] as $k => $v) { - $waypoints['NM'][$this->sData->wpNames[$k]] = $v; + if ($v == 1) { + $waypoints['NM'][$this->sData->wpNames[$k]] = $v; + } } foreach ($wp['Hell'] as $k => $v) { - $waypoints['Hell'][$this->sData->wpNames[$k]] = $v; + if ($v == 1) { + $waypoints['Hell'][$this->sData->wpNames[$k]] = $v; + } } diff --git a/src/D2SaveFileStructureData.php b/src/D2SaveFileStructureData.php index 6683826..2bd95cc 100644 --- a/src/D2SaveFileStructureData.php +++ b/src/D2SaveFileStructureData.php @@ -71,39 +71,39 @@ class D2SaveFileStructureData { 714 => 51, // NPC Introductions ]; public $qNorm = [ - 345 => 'introWarriv', + //345 => 'introWarriv', 347 => 'DenOfEvil', 349 => 'SistersBurialGrounds', 351 => 'ToolsOfTheTrade', 353 => 'TheSearchForCain', 355 => 'TheForgottenTower', 357 => 'SistersToTheSlaughter', - 359 => 'traveledToAct2', - 361 => 'introJerhyn', + //359 => 'traveledToAct2', + //361 => 'introJerhyn', 363 => 'RadamentsLair', 365 => 'TheHoradricStaff', 367 => 'TaintedSun', 369 => 'ArcaneSanctuary', 371 => 'TheSummoner', 373 => 'TheSevenTombs', - 375 => 'traveledToAct3', - 377 => 'introHratli', + //375 => 'traveledToAct3', + //377 => 'introHratli', 379 => 'LamEsensTome', 381 => 'KhalimsWill', 383 => 'BladeOfTheOldReligion', 385 => 'TheGoldenBird', 387 => 'TheBlackenedTemple', 389 => 'TheGuardian', - 391 => 'traveledtoAct4', - 393 => 'introToAct4', + //391 => 'traveledtoAct4', + //393 => 'introToAct4', 395 => 'TheFallenAngel', 397 => 'TerrorsEnd', 399 => 'HellForge', - 401 => 'empty1', - 403 => 'empty2', - 405 => 'empty3', - 407 => 'traveledToAct5', - 409 => 'completedTerrorsEnd', + //401 => 'empty1', + //403 => 'empty2', + //405 => 'empty3', + //407 => 'traveledToAct5', + //409 => 'completedTerrorsEnd', 414 => 'SiegeOnHarrogath', 416 => 'RescueOnMountArreat', 418 => 'PrisonOfIce', @@ -112,39 +112,39 @@ class D2SaveFileStructureData { 424 => 'EveOfDestruction', ]; public $qNM = [ - 438 => 'introWarrivNM', + //438 => 'introWarrivNM', 440 => 'DenOfEvilNM', 442 => 'SistersBurialGroundsNM', 444 => 'ToolsOfTheTradeNM', 446 => 'TheSearchForCainNM', 448 => 'TheForgottenTowerNM', 450 => 'SistersToTheSlaughterNM', - 452 => 'traveledToAct2NM', - 454 => 'introJerhynNM', + //452 => 'traveledToAct2NM', + //454 => 'introJerhynNM', 456 => 'RadamentsLairNM', 458 => 'TheHoradricStaffNM', 460 => 'TaintedSunNM', 462 => 'ArcaneSanctuaryNM', 464 => 'TheSummonerNM', 466 => 'TheSevenTombsNM', - 468 => 'traveledToAct3NM', - 470 => 'introHratliNM', + //468 => 'traveledToAct3NM', + //470 => 'introHratliNM', 472 => 'LamEsensTomeNM', 474 => 'KhalimsWillNM', 476 => 'BladeOfTheOldReligionNM', 478 => 'TheGoldenBirdNM', 480 => 'TheBlackenedTempleNM', 482 => 'TheGuardianNM', - 484 => 'traveledtoAct4NM', - 486 => 'introToAct4NM', + //484 => 'traveledtoAct4NM', + //486 => 'introToAct4NM', 488 => 'TheFallenAngelNM', 490 => 'TerrorsEndNM', 492 => 'HellForgeNM', - 494 => 'emptyNM1', - 496 => 'emptyNM2', - 498 => 'emptyNM3', - 500 => 'traveledToAct5NM', - 502 => 'completedTerrorsEndNM', + //494 => 'emptyNM1', + //496 => 'emptyNM2', + //498 => 'emptyNM3', + //500 => 'traveledToAct5NM', + //502 => 'completedTerrorsEndNM', 504 => 'SiegeOnHarrogathNM', 506 => 'RescueOnMountArreatNM', 508 => 'PrisonOfIceNM', @@ -153,39 +153,39 @@ class D2SaveFileStructureData { 514 => 'EveOfDestructionNM', ]; public $qHell = [ - 528 => 'introWarrivHell', + //528 => 'introWarrivHell', 530 => 'DenOfEvilHell', 532 => 'SistersBurialGroundsHell', 534 => 'ToolsOfTheTradeHell', 536 => 'TheSearchForCainHell', 538 => 'TheForgottenTowerHell', 540 => 'SistersToTheSlaughterHell', - 542 => 'traveledToAct2Hell', - 544 => 'introJerhynHell', + //542 => 'traveledToAct2Hell', + //544 => 'introJerhynHell', 546 => 'RadamentsLairHell', 548 => 'TheHoradricStaffHell', 550 => 'TaintedSunHell', 552 => 'ArcaneSanctuaryHell', 554 => 'TheSummonerHell', 556 => 'TheSevenTombsHell', - 558 => 'traveledToAct3Hell', - 560 => 'introHratliHell', + //558 => 'traveledToAct3Hell', + //560 => 'introHratliHell', 562 => 'LamEsensTomeHell', 564 => 'KhalimsWillHell', 566 => 'BladeOfTheOldReligionHell', 568 => 'TheGoldenBirdHell', 570 => 'TheBlackenedTempleHell', 572 => 'TheGuardianHell', - 574 => 'traveledtoAct4Hell', - 576 => 'introToAct4Hell', + //574 => 'traveledtoAct4Hell', + //576 => 'introToAct4Hell', 578 => 'TheFallenAngelHell', 580 => 'TerrorsEndHell', 582 => 'HellForgeHell', - 584 => 'emptyHell1', - 586 => 'emptyHell2', - 588 => 'emptyHell3', - 590 => 'traveledToAct5Hell', - 592 => 'completedTerrorsEndHell', + //584 => 'emptyHell1', + //586 => 'emptyHell2', + //588 => 'emptyHell3', + //590 => 'traveledToAct5Hell', + //592 => 'completedTerrorsEndHell', 594 => 'SiegeOnHarrogathHell', 596 => 'RescueOnMountArreatHell', 598 => 'PrisonOfIceHell', @@ -293,6 +293,265 @@ class D2SaveFileStructureData { ]; + public $xorTable = [ + "00" => 0x0, + "01" => 0x77073096, + "02" => 0xEE0E612C, + "03" => 0x990951BA, + "04" => 0x076DC419, + "05" => 0x706AF48F, + "06" => 0xE963A535, + "07" => 0x9E6495A3, + "08" => 0x0EDB8832, + "09" => 0x79DCB8A4, + "0A" => 0xE0D5E91E, + "0B" => 0x97D2D988, + "0C" => 0x09B64C2B, + "0D" => 0x7EB17CBD, + "0E" => 0xE7B82D07, + "0F" => 0x90BF1D91, + "10" => 0x1DB71064, + "11" => 0x6AB020F2, + "12" => 0xF3B97148, + "13" => 0x84BE41DE, + "14" => 0x1ADAD47D, + "15" => 0x6DDDE4EB, + "16" => 0xF4D4B551, + "17" => 0x83D385C7, + "18" => 0x136C9856, + "19" => 0x646BA8C0, + "1A" => 0xFD62F97A, + "1B" => 0x8A65C9EC, + "1C" => 0x14015C4F, + "1D" => 0x63066CD9, + "1E" => 0xFA0F3D63, + "1F" => 0x8D080DF5, + "20" => 0x3B6E20C8, + "21" => 0x4C69105E, + "22" => 0xD56041E4, + "23" => 0xA2677172, + "24" => 0x3C03E4D1, + "25" => 0x4B04D447, + "26" => 0xD20D85FD, + "27" => 0xA50AB56B, + "28" => 0x35B5A8FA, + "29" => 0x42B2986C, + "2A" => 0xDBBBC9D6, + "2B" => 0xACBCF940, + "2C" => 0x32D86CE3, + "2D" => 0x45DF5C75, + "2E" => 0xDCD60DCF, + "2F" => 0xABD13D59, + "30" => 0x26D930AC, + "31" => 0x51DE003A, + "32" => 0xC8D75180, + "33" => 0xBFD06116, + "34" => 0x21B4F4B5, + "35" => 0x56B3C423, + "36" => 0xCFBA9599, + "37" => 0xB8BDA50F, + "38" => 0x2802B89E, + "39" => 0x5F058808, + "3A" => 0xC60CD9B2, + "3B" => 0xB10BE924, + "3C" => 0x2F6F7C87, + "3D" => 0x58684C11, + "3E" => 0xC1611DAB, + "3F" => 0xB6662D3D, + "40" => 0x76DC4190, + "41" => 0x01DB7106, + "42" => 0x98D220BC, + "43" => 0xEFD5102A, + "44" => 0x71B18589, + "45" => 0x06B6B51F, + "46" => 0x9FBFE4A5, + "47" => 0xE8B8D433, + "48" => 0x7807C9A2, + "49" => 0x0F00F934, + "4A" => 0x9609A88E, + "4B" => 0xE10E9818, + "4C" => 0x7F6A0DBB, + "4D" => 0x086D3D2D, + "4E" => 0x91646C97, + "4F" => 0xE6635C01, + "50" => 0x6B6B51F4, + "51" => 0x1C6C6162, + "52" => 0x856530D8, + "53" => 0xF262004E, + "54" => 0x6C0695ED, + "55" => 0x1B01A57B, + "56" => 0x8208F4C1, + "57" => 0xF50FC457, + "58" => 0x65B0D9C6, + "59" => 0x12B7E950, + "5A" => 0x8BBEB8EA, + "5B" => 0xFCB9887C, + "5C" => 0x62DD1DDF, + "5D" => 0x15DA2D49, + "5E" => 0x8CD37CF3, + "5F" => 0xFBD44C65, + "60" => 0x4DB26158, + "61" => 0x3AB551CE, + "62" => 0xA3BC0074, + "63" => 0xD4BB30E2, + "64" => 0x4ADFA541, + "65" => 0x3DD895D7, + "66" => 0xA4D1C46D, + "67" => 0xD3D6F4FB, + "68" => 0x4369E96A, + "69" => 0x346ED9FC, + "6A" => 0xAD678846, + "6B" => 0xDA60B8D0, + "6C" => 0x44042D73, + "6D" => 0x33031DE5, + "6E" => 0xAA0A4C5F, + "6F" => 0xDD0D7CC9, + "70" => 0x5005713C, + "71" => 0x270241AA, + "72" => 0xBE0B1010, + "73" => 0xC90C2086, + "74" => 0x5768B525, + "75" => 0x206F85B3, + "76" => 0xB966D409, + "77" => 0xCE61E49F, + "78" => 0x5EDEF90E, + "79" => 0x29D9C998, + "7A" => 0xB0D09822, + "7B" => 0xC7D7A8B4, + "7C" => 0x59B33D17, + "7D" => 0x2EB40D81, + "7E" => 0xB7BD5C3B, + "7F" => 0xC0BA6CAD, + "80" => 0xEDB88320, + "81" => 0x9ABFB3B6, + "82" => 0x03B6E20C, + "83" => 0x74B1D29A, + "84" => 0xEAD54739, + "85" => 0x9DD277AF, + "86" => 0x04DB2615, + "87" => 0x73DC1683, + "88" => 0xE3630B12, + "89" => 0x94643B84, + "8A" => 0x0D6D6A3E, + "8B" => 0x7A6A5AA8, + "8C" => 0xE40ECF0B, + "8D" => 0x9309FF9D, + "8E" => 0x0A00AE27, + "8F" => 0x7D079EB1, + "90" => 0xF00F9344, + "91" => 0x8708A3D2, + "92" => 0x1E01F268, + "93" => 0x6906C2FE, + "94" => 0xF762575D, + "95" => 0x806567CB, + "96" => 0x196C3671, + "97" => 0x6E6B06E7, + "98" => 0xFED41B76, + "99" => 0x89D32BE0, + "9A" => 0x10DA7A5A, + "9B" => 0x67DD4ACC, + "9C" => 0xF9B9DF6F, + "9D" => 0x8EBEEFF9, + "9E" => 0x17B7BE43, + "9F" => 0x60B08ED5, + "A0" => 0xD6D6A3E8, + "A1" => 0xA1D1937E, + "A2" => 0x38D8C2C4, + "A3" => 0x4FDFF252, + "A4" => 0xD1BB67F1, + "A5" => 0xA6BC5767, + "A6" => 0x3FB506DD, + "A7" => 0x48B2364B, + "A8" => 0xD80D2BDA, + "A9" => 0xAF0A1B4C, + "AA" => 0x36034AF6, + "AB" => 0x41047A60, + "AC" => 0xDF60EFC3, + "AD" => 0xA867DF55, + "AE" => 0x316E8EEF, + "AF" => 0x4669BE79, + "B0" => 0xCB61B38C, + "B1" => 0xBC66831A, + "B2" => 0x256FD2A0, + "B3" => 0x5268E236, + "B4" => 0xCC0C7795, + "B5" => 0xBB0B4703, + "B6" => 0x220216B9, + "B7" => 0x5505262F, + "B8" => 0xC5BA3BBE, + "B9" => 0xB2BD0B28, + "BA" => 0x2BB45A92, + "BB" => 0x5CB36A04, + "BC" => 0xC2D7FFA7, + "BD" => 0xB5D0CF31, + "BE" => 0x2CD99E8B, + "BF" => 0x5BDEAE1D, + "C0" => 0x9B64C2B0, + "C1" => 0xEC63F226, + "C2" => 0x756AA39C, + "C3" => 0x026D930A, + "C4" => 0x9C0906A9, + "C5" => 0xEB0E363F, + "C6" => 0x72076785, + "C7" => 0x05005713, + "C8" => 0x95BF4A82, + "C9" => 0xE2B87A14, + "CA" => 0x7BB12BAE, + "CB" => 0x0CB61B38, + "CC" => 0x92D28E9B, + "CD" => 0xE5D5BE0D, + "CE" => 0x7CDCEFB7, + "CF" => 0x0BDBDF21, + "D0" => 0x86D3D2D4, + "D1" => 0xF1D4E242, + "D2" => 0x68DDB3F8, + "D3" => 0x1FDA836E, + "D4" => 0x81BE16CD, + "D5" => 0xF6B9265B, + "D6" => 0x6FB077E1, + "D7" => 0x18B74777, + "D8" => 0x88085AE6, + "D9" => 0xFF0F6A70, + "DA" => 0x66063BCA, + "DB" => 0x11010B5C, + "DC" => 0x8F659EFF, + "DD" => 0xF862AE69, + "DE" => 0x616BFFD3, + "DF" => 0x166CCF45, + "E0" => 0xA00AE278, + "E1" => 0xD70DD2EE, + "E2" => 0x4E048354, + "E3" => 0x3903B3C2, + "E4" => 0xA7672661, + "E5" => 0xD06016F7, + "E6" => 0x4969474D, + "E7" => 0x3E6E77DB, + "E8" => 0xAED16A4A, + "E9" => 0xD9D65ADC, + "EA" => 0x40DF0B66, + "EB" => 0x37D83BF0, + "EC" => 0xA9BCAE53, + "ED" => 0xDEBB9EC5, + "EE" => 0x47B2CF7F, + "EF" => 0x30B5FFE9, + "F0" => 0xBDBDF21C, + "F1" => 0xCABAC28A, + "F2" => 0x53B39330, + "F3" => 0x24B4A3A6, + "F4" => 0xBAD03605, + "F5" => 0xCDD70693, + "F6" => 0x54DE5729, + "F7" => 0x23D967BF, + "F8" => 0xB3667A2E, + "F9" => 0xC4614AB8, + "FA" => 0x5D681B02, + "FB" => 0x2A6F2B94, + "FC" => 0xB40BBE37, + "FD" => 0xC30C8EA1, + "FE" => 0x5A05DF1B, + "FF" => 0x2D02EF8D + ]; + /* Initialize Skills From Skills.txt diff --git a/src/tabs/Chars.php b/src/tabs/Chars.php index 71801d5..07e53be 100644 --- a/src/tabs/Chars.php +++ b/src/tabs/Chars.php @@ -1,5 +1,5 @@ charData['Quests'] as $quest) { - foreach ($quest as $q) { + $quests = null; + foreach ($c->charData['Quests'] as $quest) { + foreach ($quest as $difficulty => $q) { foreach ($q as $k => $v) { - $quest .= "$k = $v
"; + if ($v == 1) { + $quests .= "$k
"; + } else { + $quests .= "$k
"; + } } } } $wps = null; foreach ($c->charData['Waypoints'] as $waypoints) { - foreach ($waypoints as $k => $v) { - $wps .= "$k = $v
"; + foreach ($waypoints as $k => $v) { + if ($v == 1 && $k != ''){ + $wps .= "$k
"; + } else { + $wps .= "$k
"; + } + } } @@ -180,12 +190,10 @@ EOT; -
- : Char Lvl
+
$radio -
-

Quests

$quest
+

Quests

$quests

Waypoints

$wps
diff --git a/test.php b/test.php index 1b53b47..ef74bcd 100644 --- a/test.php +++ b/test.php @@ -7,6 +7,8 @@ ini_set('max_execution_time', '0'); session_start(); ob_start(); +require_once './testData.php'; + require_once './config.php'; require_once './_pdo.php'; require_once "./src/D2Functions.php"; @@ -18,43 +20,26 @@ define('DB_FILE', "ironman-dev.db"); PDO_Connect("sqlite:" . DB_FILE); $filename = "D:\Diablo II\MODS\ironman-dev\save\Test.d2s"; +$filename = str_replace("\\", "\\\\", $filename); $fp = fopen($filename, "rb+"); -$filesize = filesize($filename); -$pucData = unpack("C*",file_get_contents($filename)); - - // ddump($pucData); - - -// ddump(fseek($fp, 1)); - -// pucData - pointer to the byte stream of the .d2s file -// iSize - number of bytes in the stream ( filesize ) -function checksum($fp, $pucData, $iSize){ - // delete old checksum at offset 0x0C - byte 12 - fseek($fp, 12); - // (I) unsigned integer (machine dependent size and byte order) - fwrite($fp, pack('I', 0)); // produces 4 bytes - - $uiCS = 0b00000000000000000000000000000000; - - // this is the whole checksum calculation - for ($j = 1; $j <= $iSize; ++$j ){ - $uiCS = (($uiCS << 1)|( $uiCS >> 31)) + decbin($pucData[$j]); - // dump(decbin($pucData[$j])); - } - - - dump(decbin($uiCS)); - - //fseek($fp, 12); - //fwrite($fp, pack('I', $uiCS)); -} +// delete old checksum at offset 0x0C - byte 12 +fseek($fp, 12); +// (I) unsigned integer (machine dependent size and byte order) +fwrite($fp, pack('I', 0)); // produces 4 bytes + +// edit quest test, den of evil fseek($fp, 347); fwrite($fp, pack('C', 0xFD)); fseek($fp, 348); fwrite($fp, pack('C', 0x9F)); -checksum($fp, $pucData, $filesize); +$checksum = swapEndianness(shell_exec("bin\d2scs.exe \"$filename\"")); + +// write NEW checksum at offset 0x0C - byte 12 +fseek($fp, 12); +// (I) unsigned integer (machine dependent size and byte order) +fwrite($fp, pack('H*', $checksum)); // produces 4 bytes + fclose($fp); diff --git a/testData.php b/testData.php new file mode 100644 index 0000000..c26bf98 --- /dev/null +++ b/testData.php @@ -0,0 +1,519 @@ + 0x0, + 2 => 0x77073096, + 3 => 0xEE0E612C, + 4 => 0x990951BA, + 5 => 0x076DC419, + 6 => 0x706AF48F, + 7 => 0xE963A535, + 8 => 0x9E6495A3, + 9 => 0x0EDB8832, + 10 => 0x79DCB8A4, + 11 => 0xE0D5E91E, + 12 => 0x97D2D988, + 13 => 0x09B64C2B, + 14 => 0x7EB17CBD, + 15 => 0xE7B82D07, + 16 => 0x90BF1D91, + 17 => 0x1DB71064, + 18 => 0x6AB020F2, + 19 => 0xF3B97148, + 20 => 0x84BE41DE, + 21 => 0x1ADAD47D, + 22 => 0x6DDDE4EB, + 23 => 0xF4D4B551, + 24 => 0x83D385C7, + 25 => 0x136C9856, + 26 => 0x646BA8C0, + 27 => 0xFD62F97A, + 28 => 0x8A65C9EC, + 29 => 0x14015C4F, + 30 => 0x63066CD9, + 31 => 0xFA0F3D63, + 32 => 0x8D080DF5, + 33 => 0x3B6E20C8, + 34 => 0x4C69105E, + 35 => 0xD56041E4, + 36 => 0xA2677172, + 37 => 0x3C03E4D1, + 38 => 0x4B04D447, + 39 => 0xD20D85FD, + 40 => 0xA50AB56B, + 41 => 0x35B5A8FA, + 42 => 0x42B2986C, + 43 => 0xDBBBC9D6, + 44 => 0xACBCF940, + 45 => 0x32D86CE3, + 46 => 0x45DF5C75, + 47 => 0xDCD60DCF, + 48 => 0xABD13D59, + 49 => 0x26D930AC, + 50 => 0x51DE003A, + 51 => 0xC8D75180, + 52 => 0xBFD06116, + 53 => 0x21B4F4B5, + 54 => 0x56B3C423, + 55 => 0xCFBA9599, + 56 => 0xB8BDA50F, + 57 => 0x2802B89E, + 58 => 0x5F058808, + 59 => 0xC60CD9B2, + 60 => 0xB10BE924, + 61 => 0x2F6F7C87, + 62 => 0x58684C11, + 63 => 0xC1611DAB, + 64 => 0xB6662D3D, + 65 => 0x76DC4190, + 66 => 0x01DB7106, + 67 => 0x98D220BC, + 68 => 0xEFD5102A, + 69 => 0x71B18589, + 70 => 0x06B6B51F, + 71 => 0x9FBFE4A5, + 72 => 0xE8B8D433, + 73 => 0x7807C9A2, + 74 => 0x0F00F934, + 75 => 0x9609A88E, + 76 => 0xE10E9818, + 77 => 0x7F6A0DBB, + 78 => 0x086D3D2D, + 79 => 0x91646C97, + 80 => 0xE6635C01, + 81 => 0x6B6B51F4, + 82 => 0x1C6C6162, + 83 => 0x856530D8, + 84 => 0xF262004E, + 85 => 0x6C0695ED, + 86 => 0x1B01A57B, + 87 => 0x8208F4C1, + 88 => 0xF50FC457, + 89 => 0x65B0D9C6, + 90 => 0x12B7E950, + 91 => 0x8BBEB8EA, + 92 => 0xFCB9887C, + 93 => 0x62DD1DDF, + 94 => 0x15DA2D49, + 95 => 0x8CD37CF3, + 96 => 0xFBD44C65, + 97 => 0x4DB26158, + 98 => 0x3AB551CE, + 99 => 0xA3BC0074, + 100 => 0xD4BB30E2, + 101 => 0x4ADFA541, + 102 => 0x3DD895D7, + 103 => 0xA4D1C46D, + 104 => 0xD3D6F4FB, + 105 => 0x4369E96A, + 106 => 0x346ED9FC, + 107 => 0xAD678846, + 108 => 0xDA60B8D0, + 109 => 0x44042D73, + 110 => 0x33031DE5, + 111 => 0xAA0A4C5F, + 112 => 0xDD0D7CC9, + 113 => 0x5005713C, + 114 => 0x270241AA, + 115 => 0xBE0B1010, + 116 => 0xC90C2086, + 117 => 0x5768B525, + 118 => 0x206F85B3, + 119 => 0xB966D409, + 120 => 0xCE61E49F, + 121 => 0x5EDEF90E, + 122 => 0x29D9C998, + 123 => 0xB0D09822, + 124 => 0xC7D7A8B4, + 125 => 0x59B33D17, + 126 => 0x2EB40D81, + 127 => 0xB7BD5C3B, + 128 => 0xC0BA6CAD, + 129 => 0xEDB88320, + 130 => 0x9ABFB3B6, + 131 => 0x03B6E20C, + 132 => 0x74B1D29A, + 133 => 0xEAD54739, + 134 => 0x9DD277AF, + 135 => 0x04DB2615, + 136 => 0x73DC1683, + 137 => 0xE3630B12, + 138 => 0x94643B84, + 139 => 0x0D6D6A3E, + 140 => 0x7A6A5AA8, + 141 => 0xE40ECF0B, + 142 => 0x9309FF9D, + 143 => 0x0A00AE27, + 144 => 0x7D079EB1, + 145 => 0xF00F9344, + 146 => 0x8708A3D2, + 147 => 0x1E01F268, + 148 => 0x6906C2FE, + 149 => 0xF762575D, + 150 => 0x806567CB, + 151 => 0x196C3671, + 152 => 0x6E6B06E7, + 153 => 0xFED41B76, + 154 => 0x89D32BE0, + 155 => 0x10DA7A5A, + 156 => 0x67DD4ACC, + 157 => 0xF9B9DF6F, + 158 => 0x8EBEEFF9, + 159 => 0x17B7BE43, + 160 => 0x60B08ED5, + 161 => 0xD6D6A3E8, + 162 => 0xA1D1937E, + 163 => 0x38D8C2C4, + 164 => 0x4FDFF252, + 165 => 0xD1BB67F1, + 166 => 0xA6BC5767, + 167 => 0x3FB506DD, + 168 => 0x48B2364B, + 169 => 0xD80D2BDA, + 170 => 0xAF0A1B4C, + 171 => 0x36034AF6, + 172 => 0x41047A60, + 173 => 0xDF60EFC3, + 174 => 0xA867DF55, + 175 => 0x316E8EEF, + 176 => 0x4669BE79, + 177 => 0xCB61B38C, + 178 => 0xBC66831A, + 179 => 0x256FD2A0, + 180 => 0x5268E236, + 181 => 0xCC0C7795, + 182 => 0xBB0B4703, + 183 => 0x220216B9, + 184 => 0x5505262F, + 185 => 0xC5BA3BBE, + 186 => 0xB2BD0B28, + 187 => 0x2BB45A92, + 188 => 0x5CB36A04, + 189 => 0xC2D7FFA7, + 190 => 0xB5D0CF31, + 191 => 0x2CD99E8B, + 192 => 0x5BDEAE1D, + 193 => 0x9B64C2B0, + 194 => 0xEC63F226, + 195 => 0x756AA39C, + 196 => 0x026D930A, + 197 => 0x9C0906A9, + 198 => 0xEB0E363F, + 199 => 0x72076785, + 200 => 0x05005713, + 201 => 0x95BF4A82, + 202 => 0xE2B87A14, + 203 => 0x7BB12BAE, + 204 => 0x0CB61B38, + 205 => 0x92D28E9B, + 206 => 0xE5D5BE0D, + 207 => 0x7CDCEFB7, + 208 => 0x0BDBDF21, + 209 => 0x86D3D2D4, + 210 => 0xF1D4E242, + 211 => 0x68DDB3F8, + 212 => 0x1FDA836E, + 213 => 0x81BE16CD, + 214 => 0xF6B9265B, + 215 => 0x6FB077E1, + 216 => 0x18B74777, + 217 => 0x88085AE6, + 218 => 0xFF0F6A70, + 219 => 0x66063BCA, + 220 => 0x11010B5C, + 221 => 0x8F659EFF, + 222 => 0xF862AE69, + 223 => 0x616BFFD3, + 224 => 0x166CCF45, + 225 => 0xA00AE278, + 226 => 0xD70DD2EE, + 227 => 0x4E048354, + 228 => 0x3903B3C2, + 229 => 0xA7672661, + 230 => 0xD06016F7, + 231 => 0x4969474D, + 232 => 0x3E6E77DB, + 233 => 0xAED16A4A, + 234 => 0xD9D65ADC, + 235 => 0x40DF0B66, + 236 => 0x37D83BF0, + 237 => 0xA9BCAE53, + 238 => 0xDEBB9EC5, + 239 => 0x47B2CF7F, + 240 => 0x30B5FFE9, + 241 => 0xBDBDF21C, + 242 => 0xCABAC28A, + 243 => 0x53B39330, + 244 => 0x24B4A3A6, + 245 => 0xBAD03605, + 246 => 0xCDD70693, + 247 => 0x54DE5729, + 248 => 0x23D967BF, + 249 => 0xB3667A2E, + 250 => 0xC4614AB8, + 251 => 0x5D681B02, + 252 => 0x2A6F2B94, + 253 => 0xB40BBE37, + 254 => 0xC30C8EA1, + 255 => 0x5A05DF1B, + 256 => 0x2D02EF8D, +]; + +$xorTableHex = [ + "00" => 0x0, + "01" => 0x77073096, + "02" => 0xEE0E612C, + "03" => 0x990951BA, + "04" => 0x076DC419, + "05" => 0x706AF48F, + "06" => 0xE963A535, + "07" => 0x9E6495A3, + "08" => 0x0EDB8832, + "09" => 0x79DCB8A4, + "0A" => 0xE0D5E91E, + "0B" => 0x97D2D988, + "0C" => 0x09B64C2B, + "0D" => 0x7EB17CBD, + "0E" => 0xE7B82D07, + "0F" => 0x90BF1D91, + "10" => 0x1DB71064, + "11" => 0x6AB020F2, + "12" => 0xF3B97148, + "13" => 0x84BE41DE, + "14" => 0x1ADAD47D, + "15" => 0x6DDDE4EB, + "16" => 0xF4D4B551, + "17" => 0x83D385C7, + "18" => 0x136C9856, + "19" => 0x646BA8C0, + "1A" => 0xFD62F97A, + "1B" => 0x8A65C9EC, + "1C" => 0x14015C4F, + "1D" => 0x63066CD9, + "1E" => 0xFA0F3D63, + "1F" => 0x8D080DF5, + "20" => 0x3B6E20C8, + "21" => 0x4C69105E, + "22" => 0xD56041E4, + "23" => 0xA2677172, + "24" => 0x3C03E4D1, + "25" => 0x4B04D447, + "26" => 0xD20D85FD, + "27" => 0xA50AB56B, + "28" => 0x35B5A8FA, + "29" => 0x42B2986C, + "2A" => 0xDBBBC9D6, + "2B" => 0xACBCF940, + "2C" => 0x32D86CE3, + "2D" => 0x45DF5C75, + "2E" => 0xDCD60DCF, + "2F" => 0xABD13D59, + "30" => 0x26D930AC, + "31" => 0x51DE003A, + "32" => 0xC8D75180, + "33" => 0xBFD06116, + "34" => 0x21B4F4B5, + "35" => 0x56B3C423, + "36" => 0xCFBA9599, + "37" => 0xB8BDA50F, + "38" => 0x2802B89E, + "39" => 0x5F058808, + "3A" => 0xC60CD9B2, + "3B" => 0xB10BE924, + "3C" => 0x2F6F7C87, + "3D" => 0x58684C11, + "3E" => 0xC1611DAB, + "3F" => 0xB6662D3D, + "40" => 0x76DC4190, + "41" => 0x01DB7106, + "42" => 0x98D220BC, + "43" => 0xEFD5102A, + "44" => 0x71B18589, + "45" => 0x06B6B51F, + "46" => 0x9FBFE4A5, + "47" => 0xE8B8D433, + "48" => 0x7807C9A2, + "49" => 0x0F00F934, + "4A" => 0x9609A88E, + "4B" => 0xE10E9818, + "4C" => 0x7F6A0DBB, + "4D" => 0x086D3D2D, + "4E" => 0x91646C97, + "4F" => 0xE6635C01, + "50" => 0x6B6B51F4, + "51" => 0x1C6C6162, + "52" => 0x856530D8, + "53" => 0xF262004E, + "54" => 0x6C0695ED, + "55" => 0x1B01A57B, + "56" => 0x8208F4C1, + "57" => 0xF50FC457, + "58" => 0x65B0D9C6, + "59" => 0x12B7E950, + "5A" => 0x8BBEB8EA, + "5B" => 0xFCB9887C, + "5C" => 0x62DD1DDF, + "5D" => 0x15DA2D49, + "5E" => 0x8CD37CF3, + "5F" => 0xFBD44C65, + "60" => 0x4DB26158, + "61" => 0x3AB551CE, + "62" => 0xA3BC0074, + "63" => 0xD4BB30E2, + "64" => 0x4ADFA541, + "65" => 0x3DD895D7, + "66" => 0xA4D1C46D, + "67" => 0xD3D6F4FB, + "68" => 0x4369E96A, + "69" => 0x346ED9FC, + "6A" => 0xAD678846, + "6B" => 0xDA60B8D0, + "6C" => 0x44042D73, + "6D" => 0x33031DE5, + "6E" => 0xAA0A4C5F, + "6F" => 0xDD0D7CC9, + "70" => 0x5005713C, + "71" => 0x270241AA, + "72" => 0xBE0B1010, + "73" => 0xC90C2086, + "74" => 0x5768B525, + "75" => 0x206F85B3, + "76" => 0xB966D409, + "77" => 0xCE61E49F, + "78" => 0x5EDEF90E, + "79" => 0x29D9C998, + "7A" => 0xB0D09822, + "7B" => 0xC7D7A8B4, + "7C" => 0x59B33D17, + "7D" => 0x2EB40D81, + "7E" => 0xB7BD5C3B, + "7F" => 0xC0BA6CAD, + "80" => 0xEDB88320, + "81" => 0x9ABFB3B6, + "82" => 0x03B6E20C, + "83" => 0x74B1D29A, + "84" => 0xEAD54739, + "85" => 0x9DD277AF, + "86" => 0x04DB2615, + "87" => 0x73DC1683, + "88" => 0xE3630B12, + "89" => 0x94643B84, + "8A" => 0x0D6D6A3E, + "8B" => 0x7A6A5AA8, + "8C" => 0xE40ECF0B, + "8D" => 0x9309FF9D, + "8E" => 0x0A00AE27, + "8F" => 0x7D079EB1, + "90" => 0xF00F9344, + "91" => 0x8708A3D2, + "92" => 0x1E01F268, + "93" => 0x6906C2FE, + "94" => 0xF762575D, + "95" => 0x806567CB, + "96" => 0x196C3671, + "97" => 0x6E6B06E7, + "98" => 0xFED41B76, + "99" => 0x89D32BE0, + "9A" => 0x10DA7A5A, + "9B" => 0x67DD4ACC, + "9C" => 0xF9B9DF6F, + "9D" => 0x8EBEEFF9, + "9E" => 0x17B7BE43, + "9F" => 0x60B08ED5, + "A0" => 0xD6D6A3E8, + "A1" => 0xA1D1937E, + "A2" => 0x38D8C2C4, + "A3" => 0x4FDFF252, + "A4" => 0xD1BB67F1, + "A5" => 0xA6BC5767, + "A6" => 0x3FB506DD, + "A7" => 0x48B2364B, + "A8" => 0xD80D2BDA, + "A9" => 0xAF0A1B4C, + "AA" => 0x36034AF6, + "AB" => 0x41047A60, + "AC" => 0xDF60EFC3, + "AD" => 0xA867DF55, + "AE" => 0x316E8EEF, + "AF" => 0x4669BE79, + "B0" => 0xCB61B38C, + "B1" => 0xBC66831A, + "B2" => 0x256FD2A0, + "B3" => 0x5268E236, + "B4" => 0xCC0C7795, + "B5" => 0xBB0B4703, + "B6" => 0x220216B9, + "B7" => 0x5505262F, + "B8" => 0xC5BA3BBE, + "B9" => 0xB2BD0B28, + "BA" => 0x2BB45A92, + "BB" => 0x5CB36A04, + "BC" => 0xC2D7FFA7, + "BD" => 0xB5D0CF31, + "BE" => 0x2CD99E8B, + "BF" => 0x5BDEAE1D, + "C0" => 0x9B64C2B0, + "C1" => 0xEC63F226, + "C2" => 0x756AA39C, + "C3" => 0x026D930A, + "C4" => 0x9C0906A9, + "C5" => 0xEB0E363F, + "C6" => 0x72076785, + "C7" => 0x05005713, + "C8" => 0x95BF4A82, + "C9" => 0xE2B87A14, + "CA" => 0x7BB12BAE, + "CB" => 0x0CB61B38, + "CC" => 0x92D28E9B, + "CD" => 0xE5D5BE0D, + "CE" => 0x7CDCEFB7, + "CF" => 0x0BDBDF21, + "D0" => 0x86D3D2D4, + "D1" => 0xF1D4E242, + "D2" => 0x68DDB3F8, + "D3" => 0x1FDA836E, + "D4" => 0x81BE16CD, + "D5" => 0xF6B9265B, + "D6" => 0x6FB077E1, + "D7" => 0x18B74777, + "D8" => 0x88085AE6, + "D9" => 0xFF0F6A70, + "DA" => 0x66063BCA, + "DB" => 0x11010B5C, + "DC" => 0x8F659EFF, + "DD" => 0xF862AE69, + "DE" => 0x616BFFD3, + "DF" => 0x166CCF45, + "E0" => 0xA00AE278, + "E1" => 0xD70DD2EE, + "E2" => 0x4E048354, + "E3" => 0x3903B3C2, + "E4" => 0xA7672661, + "E5" => 0xD06016F7, + "E6" => 0x4969474D, + "E7" => 0x3E6E77DB, + "E8" => 0xAED16A4A, + "E9" => 0xD9D65ADC, + "EA" => 0x40DF0B66, + "EB" => 0x37D83BF0, + "EC" => 0xA9BCAE53, + "ED" => 0xDEBB9EC5, + "EE" => 0x47B2CF7F, + "EF" => 0x30B5FFE9, + "F0" => 0xBDBDF21C, + "F1" => 0xCABAC28A, + "F2" => 0x53B39330, + "F3" => 0x24B4A3A6, + "F4" => 0xBAD03605, + "F5" => 0xCDD70693, + "F6" => 0x54DE5729, + "F7" => 0x23D967BF, + "F8" => 0xB3667A2E, + "F9" => 0xC4614AB8, + "FA" => 0x5D681B02, + "FB" => 0x2A6F2B94, + "FC" => 0xB40BBE37, + "FD" => 0xC30C8EA1, + "FE" => 0x5A05DF1B, + "FF" => 0x2D02EF8D +]; diff --git a/x b/x index bc045f2..bd5523c 100644 --- a/x +++ b/x @@ -1 +1 @@ -ABCD__G123456789 \ No newline at end of file +255D__G123456789 \ No newline at end of file