001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.commons.codec.digest; 018 019import java.util.zip.Checksum; 020 021/** 022 * A pure-Java implementation of the CRC32 checksum that uses 023 * the same polynomial as the built-in native CRC32. 024 * <p> 025 * This is to avoid the JNI overhead for certain uses of checksumming 026 * where many small pieces of data are checksummed in succession. 027 * </p> 028 * <p> 029 * The current version is ~10x to 1.8x as fast as Sun's native 030 * java.util.zip.CRC32 in Java 1.6 031 * </p> 032 * <p> 033 * Copied from Apache Hadoop 2.6.3. 034 * The code agrees with the following file in the 2.6.3 tag: 035 * https://gitbox.apache.org/repos/asf?p=hadoop.git;a=blob_plain; 036 * f=hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/PureJavaCrc32.java; 037 * hb=2120de588b92b9f22b1cc4188761d6a8c61aa778 038 * </p> 039 * <p> 040 * This class is Not ThreadSafe 041 * </p> 042 * 043 * @see java.util.zip.CRC32 044 * @since 1.11 045 */ 046public class PureJavaCrc32 implements Checksum { 047 048 /** 049 * CRC-32 lookup tables generated by the polynomial 0xEDB88320. 050 * See also TestPureJavaCrc32.Table. 051 */ 052 // @formatter:off 053 private static final int[] T = { 054 /* T8_0 */ 055 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 056 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 057 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 058 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 059 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 060 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 061 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 062 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 063 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 064 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 065 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 066 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 067 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 068 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, 069 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 070 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 071 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 072 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, 073 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 074 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 075 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 076 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 077 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 078 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 079 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 080 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 081 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 082 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 083 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 084 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, 085 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 086 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, 087 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 088 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 089 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 090 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 091 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 092 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 093 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 094 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 095 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 096 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 097 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 098 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 099 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 100 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 101 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 102 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 103 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 104 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, 105 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 106 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 107 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 108 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, 109 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 110 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 111 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 112 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 113 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 114 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 115 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 116 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 117 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 118 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D, 119 /* T8_1 */ 120 0x00000000, 0x191B3141, 0x32366282, 0x2B2D53C3, 121 0x646CC504, 0x7D77F445, 0x565AA786, 0x4F4196C7, 122 0xC8D98A08, 0xD1C2BB49, 0xFAEFE88A, 0xE3F4D9CB, 123 0xACB54F0C, 0xB5AE7E4D, 0x9E832D8E, 0x87981CCF, 124 0x4AC21251, 0x53D92310, 0x78F470D3, 0x61EF4192, 125 0x2EAED755, 0x37B5E614, 0x1C98B5D7, 0x05838496, 126 0x821B9859, 0x9B00A918, 0xB02DFADB, 0xA936CB9A, 127 0xE6775D5D, 0xFF6C6C1C, 0xD4413FDF, 0xCD5A0E9E, 128 0x958424A2, 0x8C9F15E3, 0xA7B24620, 0xBEA97761, 129 0xF1E8E1A6, 0xE8F3D0E7, 0xC3DE8324, 0xDAC5B265, 130 0x5D5DAEAA, 0x44469FEB, 0x6F6BCC28, 0x7670FD69, 131 0x39316BAE, 0x202A5AEF, 0x0B07092C, 0x121C386D, 132 0xDF4636F3, 0xC65D07B2, 0xED705471, 0xF46B6530, 133 0xBB2AF3F7, 0xA231C2B6, 0x891C9175, 0x9007A034, 134 0x179FBCFB, 0x0E848DBA, 0x25A9DE79, 0x3CB2EF38, 135 0x73F379FF, 0x6AE848BE, 0x41C51B7D, 0x58DE2A3C, 136 0xF0794F05, 0xE9627E44, 0xC24F2D87, 0xDB541CC6, 137 0x94158A01, 0x8D0EBB40, 0xA623E883, 0xBF38D9C2, 138 0x38A0C50D, 0x21BBF44C, 0x0A96A78F, 0x138D96CE, 139 0x5CCC0009, 0x45D73148, 0x6EFA628B, 0x77E153CA, 140 0xBABB5D54, 0xA3A06C15, 0x888D3FD6, 0x91960E97, 141 0xDED79850, 0xC7CCA911, 0xECE1FAD2, 0xF5FACB93, 142 0x7262D75C, 0x6B79E61D, 0x4054B5DE, 0x594F849F, 143 0x160E1258, 0x0F152319, 0x243870DA, 0x3D23419B, 144 0x65FD6BA7, 0x7CE65AE6, 0x57CB0925, 0x4ED03864, 145 0x0191AEA3, 0x188A9FE2, 0x33A7CC21, 0x2ABCFD60, 146 0xAD24E1AF, 0xB43FD0EE, 0x9F12832D, 0x8609B26C, 147 0xC94824AB, 0xD05315EA, 0xFB7E4629, 0xE2657768, 148 0x2F3F79F6, 0x362448B7, 0x1D091B74, 0x04122A35, 149 0x4B53BCF2, 0x52488DB3, 0x7965DE70, 0x607EEF31, 150 0xE7E6F3FE, 0xFEFDC2BF, 0xD5D0917C, 0xCCCBA03D, 151 0x838A36FA, 0x9A9107BB, 0xB1BC5478, 0xA8A76539, 152 0x3B83984B, 0x2298A90A, 0x09B5FAC9, 0x10AECB88, 153 0x5FEF5D4F, 0x46F46C0E, 0x6DD93FCD, 0x74C20E8C, 154 0xF35A1243, 0xEA412302, 0xC16C70C1, 0xD8774180, 155 0x9736D747, 0x8E2DE606, 0xA500B5C5, 0xBC1B8484, 156 0x71418A1A, 0x685ABB5B, 0x4377E898, 0x5A6CD9D9, 157 0x152D4F1E, 0x0C367E5F, 0x271B2D9C, 0x3E001CDD, 158 0xB9980012, 0xA0833153, 0x8BAE6290, 0x92B553D1, 159 0xDDF4C516, 0xC4EFF457, 0xEFC2A794, 0xF6D996D5, 160 0xAE07BCE9, 0xB71C8DA8, 0x9C31DE6B, 0x852AEF2A, 161 0xCA6B79ED, 0xD37048AC, 0xF85D1B6F, 0xE1462A2E, 162 0x66DE36E1, 0x7FC507A0, 0x54E85463, 0x4DF36522, 163 0x02B2F3E5, 0x1BA9C2A4, 0x30849167, 0x299FA026, 164 0xE4C5AEB8, 0xFDDE9FF9, 0xD6F3CC3A, 0xCFE8FD7B, 165 0x80A96BBC, 0x99B25AFD, 0xB29F093E, 0xAB84387F, 166 0x2C1C24B0, 0x350715F1, 0x1E2A4632, 0x07317773, 167 0x4870E1B4, 0x516BD0F5, 0x7A468336, 0x635DB277, 168 0xCBFAD74E, 0xD2E1E60F, 0xF9CCB5CC, 0xE0D7848D, 169 0xAF96124A, 0xB68D230B, 0x9DA070C8, 0x84BB4189, 170 0x03235D46, 0x1A386C07, 0x31153FC4, 0x280E0E85, 171 0x674F9842, 0x7E54A903, 0x5579FAC0, 0x4C62CB81, 172 0x8138C51F, 0x9823F45E, 0xB30EA79D, 0xAA1596DC, 173 0xE554001B, 0xFC4F315A, 0xD7626299, 0xCE7953D8, 174 0x49E14F17, 0x50FA7E56, 0x7BD72D95, 0x62CC1CD4, 175 0x2D8D8A13, 0x3496BB52, 0x1FBBE891, 0x06A0D9D0, 176 0x5E7EF3EC, 0x4765C2AD, 0x6C48916E, 0x7553A02F, 177 0x3A1236E8, 0x230907A9, 0x0824546A, 0x113F652B, 178 0x96A779E4, 0x8FBC48A5, 0xA4911B66, 0xBD8A2A27, 179 0xF2CBBCE0, 0xEBD08DA1, 0xC0FDDE62, 0xD9E6EF23, 180 0x14BCE1BD, 0x0DA7D0FC, 0x268A833F, 0x3F91B27E, 181 0x70D024B9, 0x69CB15F8, 0x42E6463B, 0x5BFD777A, 182 0xDC656BB5, 0xC57E5AF4, 0xEE530937, 0xF7483876, 183 0xB809AEB1, 0xA1129FF0, 0x8A3FCC33, 0x9324FD72, 184 /* T8_2 */ 185 0x00000000, 0x01C26A37, 0x0384D46E, 0x0246BE59, 186 0x0709A8DC, 0x06CBC2EB, 0x048D7CB2, 0x054F1685, 187 0x0E1351B8, 0x0FD13B8F, 0x0D9785D6, 0x0C55EFE1, 188 0x091AF964, 0x08D89353, 0x0A9E2D0A, 0x0B5C473D, 189 0x1C26A370, 0x1DE4C947, 0x1FA2771E, 0x1E601D29, 190 0x1B2F0BAC, 0x1AED619B, 0x18ABDFC2, 0x1969B5F5, 191 0x1235F2C8, 0x13F798FF, 0x11B126A6, 0x10734C91, 192 0x153C5A14, 0x14FE3023, 0x16B88E7A, 0x177AE44D, 193 0x384D46E0, 0x398F2CD7, 0x3BC9928E, 0x3A0BF8B9, 194 0x3F44EE3C, 0x3E86840B, 0x3CC03A52, 0x3D025065, 195 0x365E1758, 0x379C7D6F, 0x35DAC336, 0x3418A901, 196 0x3157BF84, 0x3095D5B3, 0x32D36BEA, 0x331101DD, 197 0x246BE590, 0x25A98FA7, 0x27EF31FE, 0x262D5BC9, 198 0x23624D4C, 0x22A0277B, 0x20E69922, 0x2124F315, 199 0x2A78B428, 0x2BBADE1F, 0x29FC6046, 0x283E0A71, 200 0x2D711CF4, 0x2CB376C3, 0x2EF5C89A, 0x2F37A2AD, 201 0x709A8DC0, 0x7158E7F7, 0x731E59AE, 0x72DC3399, 202 0x7793251C, 0x76514F2B, 0x7417F172, 0x75D59B45, 203 0x7E89DC78, 0x7F4BB64F, 0x7D0D0816, 0x7CCF6221, 204 0x798074A4, 0x78421E93, 0x7A04A0CA, 0x7BC6CAFD, 205 0x6CBC2EB0, 0x6D7E4487, 0x6F38FADE, 0x6EFA90E9, 206 0x6BB5866C, 0x6A77EC5B, 0x68315202, 0x69F33835, 207 0x62AF7F08, 0x636D153F, 0x612BAB66, 0x60E9C151, 208 0x65A6D7D4, 0x6464BDE3, 0x662203BA, 0x67E0698D, 209 0x48D7CB20, 0x4915A117, 0x4B531F4E, 0x4A917579, 210 0x4FDE63FC, 0x4E1C09CB, 0x4C5AB792, 0x4D98DDA5, 211 0x46C49A98, 0x4706F0AF, 0x45404EF6, 0x448224C1, 212 0x41CD3244, 0x400F5873, 0x4249E62A, 0x438B8C1D, 213 0x54F16850, 0x55330267, 0x5775BC3E, 0x56B7D609, 214 0x53F8C08C, 0x523AAABB, 0x507C14E2, 0x51BE7ED5, 215 0x5AE239E8, 0x5B2053DF, 0x5966ED86, 0x58A487B1, 216 0x5DEB9134, 0x5C29FB03, 0x5E6F455A, 0x5FAD2F6D, 217 0xE1351B80, 0xE0F771B7, 0xE2B1CFEE, 0xE373A5D9, 218 0xE63CB35C, 0xE7FED96B, 0xE5B86732, 0xE47A0D05, 219 0xEF264A38, 0xEEE4200F, 0xECA29E56, 0xED60F461, 220 0xE82FE2E4, 0xE9ED88D3, 0xEBAB368A, 0xEA695CBD, 221 0xFD13B8F0, 0xFCD1D2C7, 0xFE976C9E, 0xFF5506A9, 222 0xFA1A102C, 0xFBD87A1B, 0xF99EC442, 0xF85CAE75, 223 0xF300E948, 0xF2C2837F, 0xF0843D26, 0xF1465711, 224 0xF4094194, 0xF5CB2BA3, 0xF78D95FA, 0xF64FFFCD, 225 0xD9785D60, 0xD8BA3757, 0xDAFC890E, 0xDB3EE339, 226 0xDE71F5BC, 0xDFB39F8B, 0xDDF521D2, 0xDC374BE5, 227 0xD76B0CD8, 0xD6A966EF, 0xD4EFD8B6, 0xD52DB281, 228 0xD062A404, 0xD1A0CE33, 0xD3E6706A, 0xD2241A5D, 229 0xC55EFE10, 0xC49C9427, 0xC6DA2A7E, 0xC7184049, 230 0xC25756CC, 0xC3953CFB, 0xC1D382A2, 0xC011E895, 231 0xCB4DAFA8, 0xCA8FC59F, 0xC8C97BC6, 0xC90B11F1, 232 0xCC440774, 0xCD866D43, 0xCFC0D31A, 0xCE02B92D, 233 0x91AF9640, 0x906DFC77, 0x922B422E, 0x93E92819, 234 0x96A63E9C, 0x976454AB, 0x9522EAF2, 0x94E080C5, 235 0x9FBCC7F8, 0x9E7EADCF, 0x9C381396, 0x9DFA79A1, 236 0x98B56F24, 0x99770513, 0x9B31BB4A, 0x9AF3D17D, 237 0x8D893530, 0x8C4B5F07, 0x8E0DE15E, 0x8FCF8B69, 238 0x8A809DEC, 0x8B42F7DB, 0x89044982, 0x88C623B5, 239 0x839A6488, 0x82580EBF, 0x801EB0E6, 0x81DCDAD1, 240 0x8493CC54, 0x8551A663, 0x8717183A, 0x86D5720D, 241 0xA9E2D0A0, 0xA820BA97, 0xAA6604CE, 0xABA46EF9, 242 0xAEEB787C, 0xAF29124B, 0xAD6FAC12, 0xACADC625, 243 0xA7F18118, 0xA633EB2F, 0xA4755576, 0xA5B73F41, 244 0xA0F829C4, 0xA13A43F3, 0xA37CFDAA, 0xA2BE979D, 245 0xB5C473D0, 0xB40619E7, 0xB640A7BE, 0xB782CD89, 246 0xB2CDDB0C, 0xB30FB13B, 0xB1490F62, 0xB08B6555, 247 0xBBD72268, 0xBA15485F, 0xB853F606, 0xB9919C31, 248 0xBCDE8AB4, 0xBD1CE083, 0xBF5A5EDA, 0xBE9834ED, 249 /* T8_3 */ 250 0x00000000, 0xB8BC6765, 0xAA09C88B, 0x12B5AFEE, 251 0x8F629757, 0x37DEF032, 0x256B5FDC, 0x9DD738B9, 252 0xC5B428EF, 0x7D084F8A, 0x6FBDE064, 0xD7018701, 253 0x4AD6BFB8, 0xF26AD8DD, 0xE0DF7733, 0x58631056, 254 0x5019579F, 0xE8A530FA, 0xFA109F14, 0x42ACF871, 255 0xDF7BC0C8, 0x67C7A7AD, 0x75720843, 0xCDCE6F26, 256 0x95AD7F70, 0x2D111815, 0x3FA4B7FB, 0x8718D09E, 257 0x1ACFE827, 0xA2738F42, 0xB0C620AC, 0x087A47C9, 258 0xA032AF3E, 0x188EC85B, 0x0A3B67B5, 0xB28700D0, 259 0x2F503869, 0x97EC5F0C, 0x8559F0E2, 0x3DE59787, 260 0x658687D1, 0xDD3AE0B4, 0xCF8F4F5A, 0x7733283F, 261 0xEAE41086, 0x525877E3, 0x40EDD80D, 0xF851BF68, 262 0xF02BF8A1, 0x48979FC4, 0x5A22302A, 0xE29E574F, 263 0x7F496FF6, 0xC7F50893, 0xD540A77D, 0x6DFCC018, 264 0x359FD04E, 0x8D23B72B, 0x9F9618C5, 0x272A7FA0, 265 0xBAFD4719, 0x0241207C, 0x10F48F92, 0xA848E8F7, 266 0x9B14583D, 0x23A83F58, 0x311D90B6, 0x89A1F7D3, 267 0x1476CF6A, 0xACCAA80F, 0xBE7F07E1, 0x06C36084, 268 0x5EA070D2, 0xE61C17B7, 0xF4A9B859, 0x4C15DF3C, 269 0xD1C2E785, 0x697E80E0, 0x7BCB2F0E, 0xC377486B, 270 0xCB0D0FA2, 0x73B168C7, 0x6104C729, 0xD9B8A04C, 271 0x446F98F5, 0xFCD3FF90, 0xEE66507E, 0x56DA371B, 272 0x0EB9274D, 0xB6054028, 0xA4B0EFC6, 0x1C0C88A3, 273 0x81DBB01A, 0x3967D77F, 0x2BD27891, 0x936E1FF4, 274 0x3B26F703, 0x839A9066, 0x912F3F88, 0x299358ED, 275 0xB4446054, 0x0CF80731, 0x1E4DA8DF, 0xA6F1CFBA, 276 0xFE92DFEC, 0x462EB889, 0x549B1767, 0xEC277002, 277 0x71F048BB, 0xC94C2FDE, 0xDBF98030, 0x6345E755, 278 0x6B3FA09C, 0xD383C7F9, 0xC1366817, 0x798A0F72, 279 0xE45D37CB, 0x5CE150AE, 0x4E54FF40, 0xF6E89825, 280 0xAE8B8873, 0x1637EF16, 0x048240F8, 0xBC3E279D, 281 0x21E91F24, 0x99557841, 0x8BE0D7AF, 0x335CB0CA, 282 0xED59B63B, 0x55E5D15E, 0x47507EB0, 0xFFEC19D5, 283 0x623B216C, 0xDA874609, 0xC832E9E7, 0x708E8E82, 284 0x28ED9ED4, 0x9051F9B1, 0x82E4565F, 0x3A58313A, 285 0xA78F0983, 0x1F336EE6, 0x0D86C108, 0xB53AA66D, 286 0xBD40E1A4, 0x05FC86C1, 0x1749292F, 0xAFF54E4A, 287 0x322276F3, 0x8A9E1196, 0x982BBE78, 0x2097D91D, 288 0x78F4C94B, 0xC048AE2E, 0xD2FD01C0, 0x6A4166A5, 289 0xF7965E1C, 0x4F2A3979, 0x5D9F9697, 0xE523F1F2, 290 0x4D6B1905, 0xF5D77E60, 0xE762D18E, 0x5FDEB6EB, 291 0xC2098E52, 0x7AB5E937, 0x680046D9, 0xD0BC21BC, 292 0x88DF31EA, 0x3063568F, 0x22D6F961, 0x9A6A9E04, 293 0x07BDA6BD, 0xBF01C1D8, 0xADB46E36, 0x15080953, 294 0x1D724E9A, 0xA5CE29FF, 0xB77B8611, 0x0FC7E174, 295 0x9210D9CD, 0x2AACBEA8, 0x38191146, 0x80A57623, 296 0xD8C66675, 0x607A0110, 0x72CFAEFE, 0xCA73C99B, 297 0x57A4F122, 0xEF189647, 0xFDAD39A9, 0x45115ECC, 298 0x764DEE06, 0xCEF18963, 0xDC44268D, 0x64F841E8, 299 0xF92F7951, 0x41931E34, 0x5326B1DA, 0xEB9AD6BF, 300 0xB3F9C6E9, 0x0B45A18C, 0x19F00E62, 0xA14C6907, 301 0x3C9B51BE, 0x842736DB, 0x96929935, 0x2E2EFE50, 302 0x2654B999, 0x9EE8DEFC, 0x8C5D7112, 0x34E11677, 303 0xA9362ECE, 0x118A49AB, 0x033FE645, 0xBB838120, 304 0xE3E09176, 0x5B5CF613, 0x49E959FD, 0xF1553E98, 305 0x6C820621, 0xD43E6144, 0xC68BCEAA, 0x7E37A9CF, 306 0xD67F4138, 0x6EC3265D, 0x7C7689B3, 0xC4CAEED6, 307 0x591DD66F, 0xE1A1B10A, 0xF3141EE4, 0x4BA87981, 308 0x13CB69D7, 0xAB770EB2, 0xB9C2A15C, 0x017EC639, 309 0x9CA9FE80, 0x241599E5, 0x36A0360B, 0x8E1C516E, 310 0x866616A7, 0x3EDA71C2, 0x2C6FDE2C, 0x94D3B949, 311 0x090481F0, 0xB1B8E695, 0xA30D497B, 0x1BB12E1E, 312 0x43D23E48, 0xFB6E592D, 0xE9DBF6C3, 0x516791A6, 313 0xCCB0A91F, 0x740CCE7A, 0x66B96194, 0xDE0506F1, 314 /* T8_4 */ 315 0x00000000, 0x3D6029B0, 0x7AC05360, 0x47A07AD0, 316 0xF580A6C0, 0xC8E08F70, 0x8F40F5A0, 0xB220DC10, 317 0x30704BC1, 0x0D106271, 0x4AB018A1, 0x77D03111, 318 0xC5F0ED01, 0xF890C4B1, 0xBF30BE61, 0x825097D1, 319 0x60E09782, 0x5D80BE32, 0x1A20C4E2, 0x2740ED52, 320 0x95603142, 0xA80018F2, 0xEFA06222, 0xD2C04B92, 321 0x5090DC43, 0x6DF0F5F3, 0x2A508F23, 0x1730A693, 322 0xA5107A83, 0x98705333, 0xDFD029E3, 0xE2B00053, 323 0xC1C12F04, 0xFCA106B4, 0xBB017C64, 0x866155D4, 324 0x344189C4, 0x0921A074, 0x4E81DAA4, 0x73E1F314, 325 0xF1B164C5, 0xCCD14D75, 0x8B7137A5, 0xB6111E15, 326 0x0431C205, 0x3951EBB5, 0x7EF19165, 0x4391B8D5, 327 0xA121B886, 0x9C419136, 0xDBE1EBE6, 0xE681C256, 328 0x54A11E46, 0x69C137F6, 0x2E614D26, 0x13016496, 329 0x9151F347, 0xAC31DAF7, 0xEB91A027, 0xD6F18997, 330 0x64D15587, 0x59B17C37, 0x1E1106E7, 0x23712F57, 331 0x58F35849, 0x659371F9, 0x22330B29, 0x1F532299, 332 0xAD73FE89, 0x9013D739, 0xD7B3ADE9, 0xEAD38459, 333 0x68831388, 0x55E33A38, 0x124340E8, 0x2F236958, 334 0x9D03B548, 0xA0639CF8, 0xE7C3E628, 0xDAA3CF98, 335 0x3813CFCB, 0x0573E67B, 0x42D39CAB, 0x7FB3B51B, 336 0xCD93690B, 0xF0F340BB, 0xB7533A6B, 0x8A3313DB, 337 0x0863840A, 0x3503ADBA, 0x72A3D76A, 0x4FC3FEDA, 338 0xFDE322CA, 0xC0830B7A, 0x872371AA, 0xBA43581A, 339 0x9932774D, 0xA4525EFD, 0xE3F2242D, 0xDE920D9D, 340 0x6CB2D18D, 0x51D2F83D, 0x167282ED, 0x2B12AB5D, 341 0xA9423C8C, 0x9422153C, 0xD3826FEC, 0xEEE2465C, 342 0x5CC29A4C, 0x61A2B3FC, 0x2602C92C, 0x1B62E09C, 343 0xF9D2E0CF, 0xC4B2C97F, 0x8312B3AF, 0xBE729A1F, 344 0x0C52460F, 0x31326FBF, 0x7692156F, 0x4BF23CDF, 345 0xC9A2AB0E, 0xF4C282BE, 0xB362F86E, 0x8E02D1DE, 346 0x3C220DCE, 0x0142247E, 0x46E25EAE, 0x7B82771E, 347 0xB1E6B092, 0x8C869922, 0xCB26E3F2, 0xF646CA42, 348 0x44661652, 0x79063FE2, 0x3EA64532, 0x03C66C82, 349 0x8196FB53, 0xBCF6D2E3, 0xFB56A833, 0xC6368183, 350 0x74165D93, 0x49767423, 0x0ED60EF3, 0x33B62743, 351 0xD1062710, 0xEC660EA0, 0xABC67470, 0x96A65DC0, 352 0x248681D0, 0x19E6A860, 0x5E46D2B0, 0x6326FB00, 353 0xE1766CD1, 0xDC164561, 0x9BB63FB1, 0xA6D61601, 354 0x14F6CA11, 0x2996E3A1, 0x6E369971, 0x5356B0C1, 355 0x70279F96, 0x4D47B626, 0x0AE7CCF6, 0x3787E546, 356 0x85A73956, 0xB8C710E6, 0xFF676A36, 0xC2074386, 357 0x4057D457, 0x7D37FDE7, 0x3A978737, 0x07F7AE87, 358 0xB5D77297, 0x88B75B27, 0xCF1721F7, 0xF2770847, 359 0x10C70814, 0x2DA721A4, 0x6A075B74, 0x576772C4, 360 0xE547AED4, 0xD8278764, 0x9F87FDB4, 0xA2E7D404, 361 0x20B743D5, 0x1DD76A65, 0x5A7710B5, 0x67173905, 362 0xD537E515, 0xE857CCA5, 0xAFF7B675, 0x92979FC5, 363 0xE915E8DB, 0xD475C16B, 0x93D5BBBB, 0xAEB5920B, 364 0x1C954E1B, 0x21F567AB, 0x66551D7B, 0x5B3534CB, 365 0xD965A31A, 0xE4058AAA, 0xA3A5F07A, 0x9EC5D9CA, 366 0x2CE505DA, 0x11852C6A, 0x562556BA, 0x6B457F0A, 367 0x89F57F59, 0xB49556E9, 0xF3352C39, 0xCE550589, 368 0x7C75D999, 0x4115F029, 0x06B58AF9, 0x3BD5A349, 369 0xB9853498, 0x84E51D28, 0xC34567F8, 0xFE254E48, 370 0x4C059258, 0x7165BBE8, 0x36C5C138, 0x0BA5E888, 371 0x28D4C7DF, 0x15B4EE6F, 0x521494BF, 0x6F74BD0F, 372 0xDD54611F, 0xE03448AF, 0xA794327F, 0x9AF41BCF, 373 0x18A48C1E, 0x25C4A5AE, 0x6264DF7E, 0x5F04F6CE, 374 0xED242ADE, 0xD044036E, 0x97E479BE, 0xAA84500E, 375 0x4834505D, 0x755479ED, 0x32F4033D, 0x0F942A8D, 376 0xBDB4F69D, 0x80D4DF2D, 0xC774A5FD, 0xFA148C4D, 377 0x78441B9C, 0x4524322C, 0x028448FC, 0x3FE4614C, 378 0x8DC4BD5C, 0xB0A494EC, 0xF704EE3C, 0xCA64C78C, 379 /* T8_5 */ 380 0x00000000, 0xCB5CD3A5, 0x4DC8A10B, 0x869472AE, 381 0x9B914216, 0x50CD91B3, 0xD659E31D, 0x1D0530B8, 382 0xEC53826D, 0x270F51C8, 0xA19B2366, 0x6AC7F0C3, 383 0x77C2C07B, 0xBC9E13DE, 0x3A0A6170, 0xF156B2D5, 384 0x03D6029B, 0xC88AD13E, 0x4E1EA390, 0x85427035, 385 0x9847408D, 0x531B9328, 0xD58FE186, 0x1ED33223, 386 0xEF8580F6, 0x24D95353, 0xA24D21FD, 0x6911F258, 387 0x7414C2E0, 0xBF481145, 0x39DC63EB, 0xF280B04E, 388 0x07AC0536, 0xCCF0D693, 0x4A64A43D, 0x81387798, 389 0x9C3D4720, 0x57619485, 0xD1F5E62B, 0x1AA9358E, 390 0xEBFF875B, 0x20A354FE, 0xA6372650, 0x6D6BF5F5, 391 0x706EC54D, 0xBB3216E8, 0x3DA66446, 0xF6FAB7E3, 392 0x047A07AD, 0xCF26D408, 0x49B2A6A6, 0x82EE7503, 393 0x9FEB45BB, 0x54B7961E, 0xD223E4B0, 0x197F3715, 394 0xE82985C0, 0x23755665, 0xA5E124CB, 0x6EBDF76E, 395 0x73B8C7D6, 0xB8E41473, 0x3E7066DD, 0xF52CB578, 396 0x0F580A6C, 0xC404D9C9, 0x4290AB67, 0x89CC78C2, 397 0x94C9487A, 0x5F959BDF, 0xD901E971, 0x125D3AD4, 398 0xE30B8801, 0x28575BA4, 0xAEC3290A, 0x659FFAAF, 399 0x789ACA17, 0xB3C619B2, 0x35526B1C, 0xFE0EB8B9, 400 0x0C8E08F7, 0xC7D2DB52, 0x4146A9FC, 0x8A1A7A59, 401 0x971F4AE1, 0x5C439944, 0xDAD7EBEA, 0x118B384F, 402 0xE0DD8A9A, 0x2B81593F, 0xAD152B91, 0x6649F834, 403 0x7B4CC88C, 0xB0101B29, 0x36846987, 0xFDD8BA22, 404 0x08F40F5A, 0xC3A8DCFF, 0x453CAE51, 0x8E607DF4, 405 0x93654D4C, 0x58399EE9, 0xDEADEC47, 0x15F13FE2, 406 0xE4A78D37, 0x2FFB5E92, 0xA96F2C3C, 0x6233FF99, 407 0x7F36CF21, 0xB46A1C84, 0x32FE6E2A, 0xF9A2BD8F, 408 0x0B220DC1, 0xC07EDE64, 0x46EAACCA, 0x8DB67F6F, 409 0x90B34FD7, 0x5BEF9C72, 0xDD7BEEDC, 0x16273D79, 410 0xE7718FAC, 0x2C2D5C09, 0xAAB92EA7, 0x61E5FD02, 411 0x7CE0CDBA, 0xB7BC1E1F, 0x31286CB1, 0xFA74BF14, 412 0x1EB014D8, 0xD5ECC77D, 0x5378B5D3, 0x98246676, 413 0x852156CE, 0x4E7D856B, 0xC8E9F7C5, 0x03B52460, 414 0xF2E396B5, 0x39BF4510, 0xBF2B37BE, 0x7477E41B, 415 0x6972D4A3, 0xA22E0706, 0x24BA75A8, 0xEFE6A60D, 416 0x1D661643, 0xD63AC5E6, 0x50AEB748, 0x9BF264ED, 417 0x86F75455, 0x4DAB87F0, 0xCB3FF55E, 0x006326FB, 418 0xF135942E, 0x3A69478B, 0xBCFD3525, 0x77A1E680, 419 0x6AA4D638, 0xA1F8059D, 0x276C7733, 0xEC30A496, 420 0x191C11EE, 0xD240C24B, 0x54D4B0E5, 0x9F886340, 421 0x828D53F8, 0x49D1805D, 0xCF45F2F3, 0x04192156, 422 0xF54F9383, 0x3E134026, 0xB8873288, 0x73DBE12D, 423 0x6EDED195, 0xA5820230, 0x2316709E, 0xE84AA33B, 424 0x1ACA1375, 0xD196C0D0, 0x5702B27E, 0x9C5E61DB, 425 0x815B5163, 0x4A0782C6, 0xCC93F068, 0x07CF23CD, 426 0xF6999118, 0x3DC542BD, 0xBB513013, 0x700DE3B6, 427 0x6D08D30E, 0xA65400AB, 0x20C07205, 0xEB9CA1A0, 428 0x11E81EB4, 0xDAB4CD11, 0x5C20BFBF, 0x977C6C1A, 429 0x8A795CA2, 0x41258F07, 0xC7B1FDA9, 0x0CED2E0C, 430 0xFDBB9CD9, 0x36E74F7C, 0xB0733DD2, 0x7B2FEE77, 431 0x662ADECF, 0xAD760D6A, 0x2BE27FC4, 0xE0BEAC61, 432 0x123E1C2F, 0xD962CF8A, 0x5FF6BD24, 0x94AA6E81, 433 0x89AF5E39, 0x42F38D9C, 0xC467FF32, 0x0F3B2C97, 434 0xFE6D9E42, 0x35314DE7, 0xB3A53F49, 0x78F9ECEC, 435 0x65FCDC54, 0xAEA00FF1, 0x28347D5F, 0xE368AEFA, 436 0x16441B82, 0xDD18C827, 0x5B8CBA89, 0x90D0692C, 437 0x8DD55994, 0x46898A31, 0xC01DF89F, 0x0B412B3A, 438 0xFA1799EF, 0x314B4A4A, 0xB7DF38E4, 0x7C83EB41, 439 0x6186DBF9, 0xAADA085C, 0x2C4E7AF2, 0xE712A957, 440 0x15921919, 0xDECECABC, 0x585AB812, 0x93066BB7, 441 0x8E035B0F, 0x455F88AA, 0xC3CBFA04, 0x089729A1, 442 0xF9C19B74, 0x329D48D1, 0xB4093A7F, 0x7F55E9DA, 443 0x6250D962, 0xA90C0AC7, 0x2F987869, 0xE4C4ABCC, 444 /* T8_6 */ 445 0x00000000, 0xA6770BB4, 0x979F1129, 0x31E81A9D, 446 0xF44F2413, 0x52382FA7, 0x63D0353A, 0xC5A73E8E, 447 0x33EF4E67, 0x959845D3, 0xA4705F4E, 0x020754FA, 448 0xC7A06A74, 0x61D761C0, 0x503F7B5D, 0xF64870E9, 449 0x67DE9CCE, 0xC1A9977A, 0xF0418DE7, 0x56368653, 450 0x9391B8DD, 0x35E6B369, 0x040EA9F4, 0xA279A240, 451 0x5431D2A9, 0xF246D91D, 0xC3AEC380, 0x65D9C834, 452 0xA07EF6BA, 0x0609FD0E, 0x37E1E793, 0x9196EC27, 453 0xCFBD399C, 0x69CA3228, 0x582228B5, 0xFE552301, 454 0x3BF21D8F, 0x9D85163B, 0xAC6D0CA6, 0x0A1A0712, 455 0xFC5277FB, 0x5A257C4F, 0x6BCD66D2, 0xCDBA6D66, 456 0x081D53E8, 0xAE6A585C, 0x9F8242C1, 0x39F54975, 457 0xA863A552, 0x0E14AEE6, 0x3FFCB47B, 0x998BBFCF, 458 0x5C2C8141, 0xFA5B8AF5, 0xCBB39068, 0x6DC49BDC, 459 0x9B8CEB35, 0x3DFBE081, 0x0C13FA1C, 0xAA64F1A8, 460 0x6FC3CF26, 0xC9B4C492, 0xF85CDE0F, 0x5E2BD5BB, 461 0x440B7579, 0xE27C7ECD, 0xD3946450, 0x75E36FE4, 462 0xB044516A, 0x16335ADE, 0x27DB4043, 0x81AC4BF7, 463 0x77E43B1E, 0xD19330AA, 0xE07B2A37, 0x460C2183, 464 0x83AB1F0D, 0x25DC14B9, 0x14340E24, 0xB2430590, 465 0x23D5E9B7, 0x85A2E203, 0xB44AF89E, 0x123DF32A, 466 0xD79ACDA4, 0x71EDC610, 0x4005DC8D, 0xE672D739, 467 0x103AA7D0, 0xB64DAC64, 0x87A5B6F9, 0x21D2BD4D, 468 0xE47583C3, 0x42028877, 0x73EA92EA, 0xD59D995E, 469 0x8BB64CE5, 0x2DC14751, 0x1C295DCC, 0xBA5E5678, 470 0x7FF968F6, 0xD98E6342, 0xE86679DF, 0x4E11726B, 471 0xB8590282, 0x1E2E0936, 0x2FC613AB, 0x89B1181F, 472 0x4C162691, 0xEA612D25, 0xDB8937B8, 0x7DFE3C0C, 473 0xEC68D02B, 0x4A1FDB9F, 0x7BF7C102, 0xDD80CAB6, 474 0x1827F438, 0xBE50FF8C, 0x8FB8E511, 0x29CFEEA5, 475 0xDF879E4C, 0x79F095F8, 0x48188F65, 0xEE6F84D1, 476 0x2BC8BA5F, 0x8DBFB1EB, 0xBC57AB76, 0x1A20A0C2, 477 0x8816EAF2, 0x2E61E146, 0x1F89FBDB, 0xB9FEF06F, 478 0x7C59CEE1, 0xDA2EC555, 0xEBC6DFC8, 0x4DB1D47C, 479 0xBBF9A495, 0x1D8EAF21, 0x2C66B5BC, 0x8A11BE08, 480 0x4FB68086, 0xE9C18B32, 0xD82991AF, 0x7E5E9A1B, 481 0xEFC8763C, 0x49BF7D88, 0x78576715, 0xDE206CA1, 482 0x1B87522F, 0xBDF0599B, 0x8C184306, 0x2A6F48B2, 483 0xDC27385B, 0x7A5033EF, 0x4BB82972, 0xEDCF22C6, 484 0x28681C48, 0x8E1F17FC, 0xBFF70D61, 0x198006D5, 485 0x47ABD36E, 0xE1DCD8DA, 0xD034C247, 0x7643C9F3, 486 0xB3E4F77D, 0x1593FCC9, 0x247BE654, 0x820CEDE0, 487 0x74449D09, 0xD23396BD, 0xE3DB8C20, 0x45AC8794, 488 0x800BB91A, 0x267CB2AE, 0x1794A833, 0xB1E3A387, 489 0x20754FA0, 0x86024414, 0xB7EA5E89, 0x119D553D, 490 0xD43A6BB3, 0x724D6007, 0x43A57A9A, 0xE5D2712E, 491 0x139A01C7, 0xB5ED0A73, 0x840510EE, 0x22721B5A, 492 0xE7D525D4, 0x41A22E60, 0x704A34FD, 0xD63D3F49, 493 0xCC1D9F8B, 0x6A6A943F, 0x5B828EA2, 0xFDF58516, 494 0x3852BB98, 0x9E25B02C, 0xAFCDAAB1, 0x09BAA105, 495 0xFFF2D1EC, 0x5985DA58, 0x686DC0C5, 0xCE1ACB71, 496 0x0BBDF5FF, 0xADCAFE4B, 0x9C22E4D6, 0x3A55EF62, 497 0xABC30345, 0x0DB408F1, 0x3C5C126C, 0x9A2B19D8, 498 0x5F8C2756, 0xF9FB2CE2, 0xC813367F, 0x6E643DCB, 499 0x982C4D22, 0x3E5B4696, 0x0FB35C0B, 0xA9C457BF, 500 0x6C636931, 0xCA146285, 0xFBFC7818, 0x5D8B73AC, 501 0x03A0A617, 0xA5D7ADA3, 0x943FB73E, 0x3248BC8A, 502 0xF7EF8204, 0x519889B0, 0x6070932D, 0xC6079899, 503 0x304FE870, 0x9638E3C4, 0xA7D0F959, 0x01A7F2ED, 504 0xC400CC63, 0x6277C7D7, 0x539FDD4A, 0xF5E8D6FE, 505 0x647E3AD9, 0xC209316D, 0xF3E12BF0, 0x55962044, 506 0x90311ECA, 0x3646157E, 0x07AE0FE3, 0xA1D90457, 507 0x579174BE, 0xF1E67F0A, 0xC00E6597, 0x66796E23, 508 0xA3DE50AD, 0x05A95B19, 0x34414184, 0x92364A30, 509 /* T8_7 */ 510 0x00000000, 0xCCAA009E, 0x4225077D, 0x8E8F07E3, 511 0x844A0EFA, 0x48E00E64, 0xC66F0987, 0x0AC50919, 512 0xD3E51BB5, 0x1F4F1B2B, 0x91C01CC8, 0x5D6A1C56, 513 0x57AF154F, 0x9B0515D1, 0x158A1232, 0xD92012AC, 514 0x7CBB312B, 0xB01131B5, 0x3E9E3656, 0xF23436C8, 515 0xF8F13FD1, 0x345B3F4F, 0xBAD438AC, 0x767E3832, 516 0xAF5E2A9E, 0x63F42A00, 0xED7B2DE3, 0x21D12D7D, 517 0x2B142464, 0xE7BE24FA, 0x69312319, 0xA59B2387, 518 0xF9766256, 0x35DC62C8, 0xBB53652B, 0x77F965B5, 519 0x7D3C6CAC, 0xB1966C32, 0x3F196BD1, 0xF3B36B4F, 520 0x2A9379E3, 0xE639797D, 0x68B67E9E, 0xA41C7E00, 521 0xAED97719, 0x62737787, 0xECFC7064, 0x205670FA, 522 0x85CD537D, 0x496753E3, 0xC7E85400, 0x0B42549E, 523 0x01875D87, 0xCD2D5D19, 0x43A25AFA, 0x8F085A64, 524 0x562848C8, 0x9A824856, 0x140D4FB5, 0xD8A74F2B, 525 0xD2624632, 0x1EC846AC, 0x9047414F, 0x5CED41D1, 526 0x299DC2ED, 0xE537C273, 0x6BB8C590, 0xA712C50E, 527 0xADD7CC17, 0x617DCC89, 0xEFF2CB6A, 0x2358CBF4, 528 0xFA78D958, 0x36D2D9C6, 0xB85DDE25, 0x74F7DEBB, 529 0x7E32D7A2, 0xB298D73C, 0x3C17D0DF, 0xF0BDD041, 530 0x5526F3C6, 0x998CF358, 0x1703F4BB, 0xDBA9F425, 531 0xD16CFD3C, 0x1DC6FDA2, 0x9349FA41, 0x5FE3FADF, 532 0x86C3E873, 0x4A69E8ED, 0xC4E6EF0E, 0x084CEF90, 533 0x0289E689, 0xCE23E617, 0x40ACE1F4, 0x8C06E16A, 534 0xD0EBA0BB, 0x1C41A025, 0x92CEA7C6, 0x5E64A758, 535 0x54A1AE41, 0x980BAEDF, 0x1684A93C, 0xDA2EA9A2, 536 0x030EBB0E, 0xCFA4BB90, 0x412BBC73, 0x8D81BCED, 537 0x8744B5F4, 0x4BEEB56A, 0xC561B289, 0x09CBB217, 538 0xAC509190, 0x60FA910E, 0xEE7596ED, 0x22DF9673, 539 0x281A9F6A, 0xE4B09FF4, 0x6A3F9817, 0xA6959889, 540 0x7FB58A25, 0xB31F8ABB, 0x3D908D58, 0xF13A8DC6, 541 0xFBFF84DF, 0x37558441, 0xB9DA83A2, 0x7570833C, 542 0x533B85DA, 0x9F918544, 0x111E82A7, 0xDDB48239, 543 0xD7718B20, 0x1BDB8BBE, 0x95548C5D, 0x59FE8CC3, 544 0x80DE9E6F, 0x4C749EF1, 0xC2FB9912, 0x0E51998C, 545 0x04949095, 0xC83E900B, 0x46B197E8, 0x8A1B9776, 546 0x2F80B4F1, 0xE32AB46F, 0x6DA5B38C, 0xA10FB312, 547 0xABCABA0B, 0x6760BA95, 0xE9EFBD76, 0x2545BDE8, 548 0xFC65AF44, 0x30CFAFDA, 0xBE40A839, 0x72EAA8A7, 549 0x782FA1BE, 0xB485A120, 0x3A0AA6C3, 0xF6A0A65D, 550 0xAA4DE78C, 0x66E7E712, 0xE868E0F1, 0x24C2E06F, 551 0x2E07E976, 0xE2ADE9E8, 0x6C22EE0B, 0xA088EE95, 552 0x79A8FC39, 0xB502FCA7, 0x3B8DFB44, 0xF727FBDA, 553 0xFDE2F2C3, 0x3148F25D, 0xBFC7F5BE, 0x736DF520, 554 0xD6F6D6A7, 0x1A5CD639, 0x94D3D1DA, 0x5879D144, 555 0x52BCD85D, 0x9E16D8C3, 0x1099DF20, 0xDC33DFBE, 556 0x0513CD12, 0xC9B9CD8C, 0x4736CA6F, 0x8B9CCAF1, 557 0x8159C3E8, 0x4DF3C376, 0xC37CC495, 0x0FD6C40B, 558 0x7AA64737, 0xB60C47A9, 0x3883404A, 0xF42940D4, 559 0xFEEC49CD, 0x32464953, 0xBCC94EB0, 0x70634E2E, 560 0xA9435C82, 0x65E95C1C, 0xEB665BFF, 0x27CC5B61, 561 0x2D095278, 0xE1A352E6, 0x6F2C5505, 0xA386559B, 562 0x061D761C, 0xCAB77682, 0x44387161, 0x889271FF, 563 0x825778E6, 0x4EFD7878, 0xC0727F9B, 0x0CD87F05, 564 0xD5F86DA9, 0x19526D37, 0x97DD6AD4, 0x5B776A4A, 565 0x51B26353, 0x9D1863CD, 0x1397642E, 0xDF3D64B0, 566 0x83D02561, 0x4F7A25FF, 0xC1F5221C, 0x0D5F2282, 567 0x079A2B9B, 0xCB302B05, 0x45BF2CE6, 0x89152C78, 568 0x50353ED4, 0x9C9F3E4A, 0x121039A9, 0xDEBA3937, 569 0xD47F302E, 0x18D530B0, 0x965A3753, 0x5AF037CD, 570 0xFF6B144A, 0x33C114D4, 0xBD4E1337, 0x71E413A9, 571 0x7B211AB0, 0xB78B1A2E, 0x39041DCD, 0xF5AE1D53, 572 0x2C8E0FFF, 0xE0240F61, 0x6EAB0882, 0xA201081C, 573 0xA8C40105, 0x646E019B, 0xEAE10678, 0x264B06E6 574 }; 575 // @formatter:on 576 577 /** The current CRC value, bit-flipped */ 578 private int crc; 579 580 /** Create a new PureJavaCrc32 object. */ 581 public PureJavaCrc32() { 582 resetCrc(); 583 } 584 585 @Override 586 public long getValue() { 587 return ~crc & 0xffffffffL; 588 } 589 590 @Override 591 public void reset() { 592 resetCrc(); 593 } 594 595 // called by ctor, so must not be overrideable 596 private void resetCrc() { 597 crc = 0xffffffff; 598 } 599 600 @Override 601 public void update(final byte[] b, final int offset, final int len) { 602 int localCrc = crc; 603 604 final int remainder = len & 0x7; 605 int i = offset; 606 for (final int end = offset + len - remainder; i < end; i += 8) { 607 final int x = localCrc ^ 608 (b[i] << 24 >>> 24) + (b[i + 1] << 24 >>> 16) + 609 (b[i + 2] << 24 >>> 8) + (b[i + 3] << 24); 610 611 localCrc = T[(x << 24 >>> 24) + 0x700] ^ T[(x << 16 >>> 24) + 0x600] ^ 612 T[(x << 8 >>> 24) + 0x500] ^ T[ (x >>> 24) + 0x400] ^ 613 T[(b[i + 4] << 24 >>> 24) + 0x300] ^ T[(b[i + 5] << 24 >>> 24) + 0x200] ^ 614 T[(b[i + 6] << 24 >>> 24) + 0x100] ^ T[b[i + 7] << 24 >>> 24]; 615 } 616 617 /* loop unroll - duff's device style */ 618 switch (remainder) { 619 case 7: 620 localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24]; 621 case 6: 622 localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24]; 623 case 5: 624 localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24]; 625 case 4: 626 localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24]; 627 case 3: 628 localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24]; 629 case 2: 630 localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24]; 631 case 1: 632 localCrc = localCrc >>> 8 ^ T[(localCrc ^ b[i++]) << 24 >>> 24]; 633 default: 634 /* nothing */ 635 } 636 637 // Publish crc out to object 638 crc = localCrc; 639 } 640 641 @Override 642 final public void update(final int b) { 643 crc = crc >>> 8 ^ T[(crc ^ b) << 24 >>> 24]; 644 } 645 646}