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 */ 017/* 018 * Some portions of this file Copyright (c) 2004-2006 Intel Corporation 019 * and licensed under the BSD license. 020 */ 021package org.apache.commons.codec.digest; 022 023import java.util.zip.Checksum; 024 025/** 026 * A pure-Java implementation of the CRC32 checksum that uses the CRC32-C polynomial, the same polynomial used by iSCSI and implemented on many Intel chipsets 027 * supporting SSE 4.2. 028 * 029 * <p> 030 * Copied from Apache Hadoop 2.3.6: https://gitbox.apache.org/repos/asf?p=hadoop.git;a=blob_plain; 031 * f=hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/PureJavaCrc32C.java; hb=2120de588b92b9f22b1cc4188761d6a8c61aa778 032 * </p> 033 * <p> 034 * This class is Not ThreadSafe 035 * </p> 036 * 037 * @since 1.11 038 */ 039public class PureJavaCrc32C implements Checksum { 040 041 // CRC polynomial tables generated by: 042 // java -cp build/test/classes/:build/classes/ \ 043 // org.apache.hadoop.util.TestPureJavaCrc32\$Table 82F63B78 044 045 private static final int T8_0_START = 0 * 256; 046 private static final int T8_1_START = 1 * 256; 047 private static final int T8_2_START = 2 * 256; 048 private static final int T8_3_START = 3 * 256; 049 private static final int T8_4_START = 4 * 256; 050 private static final int T8_5_START = 5 * 256; 051 private static final int T8_6_START = 6 * 256; 052 private static final int T8_7_START = 7 * 256; 053 054 // @formatter:off 055 private static final int[] T = { 056 /* T8_0 */ 057 0x00000000, 0xF26B8303, 0xE13B70F7, 0x1350F3F4, 058 0xC79A971F, 0x35F1141C, 0x26A1E7E8, 0xD4CA64EB, 059 0x8AD958CF, 0x78B2DBCC, 0x6BE22838, 0x9989AB3B, 060 0x4D43CFD0, 0xBF284CD3, 0xAC78BF27, 0x5E133C24, 061 0x105EC76F, 0xE235446C, 0xF165B798, 0x030E349B, 062 0xD7C45070, 0x25AFD373, 0x36FF2087, 0xC494A384, 063 0x9A879FA0, 0x68EC1CA3, 0x7BBCEF57, 0x89D76C54, 064 0x5D1D08BF, 0xAF768BBC, 0xBC267848, 0x4E4DFB4B, 065 0x20BD8EDE, 0xD2D60DDD, 0xC186FE29, 0x33ED7D2A, 066 0xE72719C1, 0x154C9AC2, 0x061C6936, 0xF477EA35, 067 0xAA64D611, 0x580F5512, 0x4B5FA6E6, 0xB93425E5, 068 0x6DFE410E, 0x9F95C20D, 0x8CC531F9, 0x7EAEB2FA, 069 0x30E349B1, 0xC288CAB2, 0xD1D83946, 0x23B3BA45, 070 0xF779DEAE, 0x05125DAD, 0x1642AE59, 0xE4292D5A, 071 0xBA3A117E, 0x4851927D, 0x5B016189, 0xA96AE28A, 072 0x7DA08661, 0x8FCB0562, 0x9C9BF696, 0x6EF07595, 073 0x417B1DBC, 0xB3109EBF, 0xA0406D4B, 0x522BEE48, 074 0x86E18AA3, 0x748A09A0, 0x67DAFA54, 0x95B17957, 075 0xCBA24573, 0x39C9C670, 0x2A993584, 0xD8F2B687, 076 0x0C38D26C, 0xFE53516F, 0xED03A29B, 0x1F682198, 077 0x5125DAD3, 0xA34E59D0, 0xB01EAA24, 0x42752927, 078 0x96BF4DCC, 0x64D4CECF, 0x77843D3B, 0x85EFBE38, 079 0xDBFC821C, 0x2997011F, 0x3AC7F2EB, 0xC8AC71E8, 080 0x1C661503, 0xEE0D9600, 0xFD5D65F4, 0x0F36E6F7, 081 0x61C69362, 0x93AD1061, 0x80FDE395, 0x72966096, 082 0xA65C047D, 0x5437877E, 0x4767748A, 0xB50CF789, 083 0xEB1FCBAD, 0x197448AE, 0x0A24BB5A, 0xF84F3859, 084 0x2C855CB2, 0xDEEEDFB1, 0xCDBE2C45, 0x3FD5AF46, 085 0x7198540D, 0x83F3D70E, 0x90A324FA, 0x62C8A7F9, 086 0xB602C312, 0x44694011, 0x5739B3E5, 0xA55230E6, 087 0xFB410CC2, 0x092A8FC1, 0x1A7A7C35, 0xE811FF36, 088 0x3CDB9BDD, 0xCEB018DE, 0xDDE0EB2A, 0x2F8B6829, 089 0x82F63B78, 0x709DB87B, 0x63CD4B8F, 0x91A6C88C, 090 0x456CAC67, 0xB7072F64, 0xA457DC90, 0x563C5F93, 091 0x082F63B7, 0xFA44E0B4, 0xE9141340, 0x1B7F9043, 092 0xCFB5F4A8, 0x3DDE77AB, 0x2E8E845F, 0xDCE5075C, 093 0x92A8FC17, 0x60C37F14, 0x73938CE0, 0x81F80FE3, 094 0x55326B08, 0xA759E80B, 0xB4091BFF, 0x466298FC, 095 0x1871A4D8, 0xEA1A27DB, 0xF94AD42F, 0x0B21572C, 096 0xDFEB33C7, 0x2D80B0C4, 0x3ED04330, 0xCCBBC033, 097 0xA24BB5A6, 0x502036A5, 0x4370C551, 0xB11B4652, 098 0x65D122B9, 0x97BAA1BA, 0x84EA524E, 0x7681D14D, 099 0x2892ED69, 0xDAF96E6A, 0xC9A99D9E, 0x3BC21E9D, 100 0xEF087A76, 0x1D63F975, 0x0E330A81, 0xFC588982, 101 0xB21572C9, 0x407EF1CA, 0x532E023E, 0xA145813D, 102 0x758FE5D6, 0x87E466D5, 0x94B49521, 0x66DF1622, 103 0x38CC2A06, 0xCAA7A905, 0xD9F75AF1, 0x2B9CD9F2, 104 0xFF56BD19, 0x0D3D3E1A, 0x1E6DCDEE, 0xEC064EED, 105 0xC38D26C4, 0x31E6A5C7, 0x22B65633, 0xD0DDD530, 106 0x0417B1DB, 0xF67C32D8, 0xE52CC12C, 0x1747422F, 107 0x49547E0B, 0xBB3FFD08, 0xA86F0EFC, 0x5A048DFF, 108 0x8ECEE914, 0x7CA56A17, 0x6FF599E3, 0x9D9E1AE0, 109 0xD3D3E1AB, 0x21B862A8, 0x32E8915C, 0xC083125F, 110 0x144976B4, 0xE622F5B7, 0xF5720643, 0x07198540, 111 0x590AB964, 0xAB613A67, 0xB831C993, 0x4A5A4A90, 112 0x9E902E7B, 0x6CFBAD78, 0x7FAB5E8C, 0x8DC0DD8F, 113 0xE330A81A, 0x115B2B19, 0x020BD8ED, 0xF0605BEE, 114 0x24AA3F05, 0xD6C1BC06, 0xC5914FF2, 0x37FACCF1, 115 0x69E9F0D5, 0x9B8273D6, 0x88D28022, 0x7AB90321, 116 0xAE7367CA, 0x5C18E4C9, 0x4F48173D, 0xBD23943E, 117 0xF36E6F75, 0x0105EC76, 0x12551F82, 0xE03E9C81, 118 0x34F4F86A, 0xC69F7B69, 0xD5CF889D, 0x27A40B9E, 119 0x79B737BA, 0x8BDCB4B9, 0x988C474D, 0x6AE7C44E, 120 0xBE2DA0A5, 0x4C4623A6, 0x5F16D052, 0xAD7D5351, 121 /* T8_1 */ 122 0x00000000, 0x13A29877, 0x274530EE, 0x34E7A899, 123 0x4E8A61DC, 0x5D28F9AB, 0x69CF5132, 0x7A6DC945, 124 0x9D14C3B8, 0x8EB65BCF, 0xBA51F356, 0xA9F36B21, 125 0xD39EA264, 0xC03C3A13, 0xF4DB928A, 0xE7790AFD, 126 0x3FC5F181, 0x2C6769F6, 0x1880C16F, 0x0B225918, 127 0x714F905D, 0x62ED082A, 0x560AA0B3, 0x45A838C4, 128 0xA2D13239, 0xB173AA4E, 0x859402D7, 0x96369AA0, 129 0xEC5B53E5, 0xFFF9CB92, 0xCB1E630B, 0xD8BCFB7C, 130 0x7F8BE302, 0x6C297B75, 0x58CED3EC, 0x4B6C4B9B, 131 0x310182DE, 0x22A31AA9, 0x1644B230, 0x05E62A47, 132 0xE29F20BA, 0xF13DB8CD, 0xC5DA1054, 0xD6788823, 133 0xAC154166, 0xBFB7D911, 0x8B507188, 0x98F2E9FF, 134 0x404E1283, 0x53EC8AF4, 0x670B226D, 0x74A9BA1A, 135 0x0EC4735F, 0x1D66EB28, 0x298143B1, 0x3A23DBC6, 136 0xDD5AD13B, 0xCEF8494C, 0xFA1FE1D5, 0xE9BD79A2, 137 0x93D0B0E7, 0x80722890, 0xB4958009, 0xA737187E, 138 0xFF17C604, 0xECB55E73, 0xD852F6EA, 0xCBF06E9D, 139 0xB19DA7D8, 0xA23F3FAF, 0x96D89736, 0x857A0F41, 140 0x620305BC, 0x71A19DCB, 0x45463552, 0x56E4AD25, 141 0x2C896460, 0x3F2BFC17, 0x0BCC548E, 0x186ECCF9, 142 0xC0D23785, 0xD370AFF2, 0xE797076B, 0xF4359F1C, 143 0x8E585659, 0x9DFACE2E, 0xA91D66B7, 0xBABFFEC0, 144 0x5DC6F43D, 0x4E646C4A, 0x7A83C4D3, 0x69215CA4, 145 0x134C95E1, 0x00EE0D96, 0x3409A50F, 0x27AB3D78, 146 0x809C2506, 0x933EBD71, 0xA7D915E8, 0xB47B8D9F, 147 0xCE1644DA, 0xDDB4DCAD, 0xE9537434, 0xFAF1EC43, 148 0x1D88E6BE, 0x0E2A7EC9, 0x3ACDD650, 0x296F4E27, 149 0x53028762, 0x40A01F15, 0x7447B78C, 0x67E52FFB, 150 0xBF59D487, 0xACFB4CF0, 0x981CE469, 0x8BBE7C1E, 151 0xF1D3B55B, 0xE2712D2C, 0xD69685B5, 0xC5341DC2, 152 0x224D173F, 0x31EF8F48, 0x050827D1, 0x16AABFA6, 153 0x6CC776E3, 0x7F65EE94, 0x4B82460D, 0x5820DE7A, 154 0xFBC3FAF9, 0xE861628E, 0xDC86CA17, 0xCF245260, 155 0xB5499B25, 0xA6EB0352, 0x920CABCB, 0x81AE33BC, 156 0x66D73941, 0x7575A136, 0x419209AF, 0x523091D8, 157 0x285D589D, 0x3BFFC0EA, 0x0F186873, 0x1CBAF004, 158 0xC4060B78, 0xD7A4930F, 0xE3433B96, 0xF0E1A3E1, 159 0x8A8C6AA4, 0x992EF2D3, 0xADC95A4A, 0xBE6BC23D, 160 0x5912C8C0, 0x4AB050B7, 0x7E57F82E, 0x6DF56059, 161 0x1798A91C, 0x043A316B, 0x30DD99F2, 0x237F0185, 162 0x844819FB, 0x97EA818C, 0xA30D2915, 0xB0AFB162, 163 0xCAC27827, 0xD960E050, 0xED8748C9, 0xFE25D0BE, 164 0x195CDA43, 0x0AFE4234, 0x3E19EAAD, 0x2DBB72DA, 165 0x57D6BB9F, 0x447423E8, 0x70938B71, 0x63311306, 166 0xBB8DE87A, 0xA82F700D, 0x9CC8D894, 0x8F6A40E3, 167 0xF50789A6, 0xE6A511D1, 0xD242B948, 0xC1E0213F, 168 0x26992BC2, 0x353BB3B5, 0x01DC1B2C, 0x127E835B, 169 0x68134A1E, 0x7BB1D269, 0x4F567AF0, 0x5CF4E287, 170 0x04D43CFD, 0x1776A48A, 0x23910C13, 0x30339464, 171 0x4A5E5D21, 0x59FCC556, 0x6D1B6DCF, 0x7EB9F5B8, 172 0x99C0FF45, 0x8A626732, 0xBE85CFAB, 0xAD2757DC, 173 0xD74A9E99, 0xC4E806EE, 0xF00FAE77, 0xE3AD3600, 174 0x3B11CD7C, 0x28B3550B, 0x1C54FD92, 0x0FF665E5, 175 0x759BACA0, 0x663934D7, 0x52DE9C4E, 0x417C0439, 176 0xA6050EC4, 0xB5A796B3, 0x81403E2A, 0x92E2A65D, 177 0xE88F6F18, 0xFB2DF76F, 0xCFCA5FF6, 0xDC68C781, 178 0x7B5FDFFF, 0x68FD4788, 0x5C1AEF11, 0x4FB87766, 179 0x35D5BE23, 0x26772654, 0x12908ECD, 0x013216BA, 180 0xE64B1C47, 0xF5E98430, 0xC10E2CA9, 0xD2ACB4DE, 181 0xA8C17D9B, 0xBB63E5EC, 0x8F844D75, 0x9C26D502, 182 0x449A2E7E, 0x5738B609, 0x63DF1E90, 0x707D86E7, 183 0x0A104FA2, 0x19B2D7D5, 0x2D557F4C, 0x3EF7E73B, 184 0xD98EEDC6, 0xCA2C75B1, 0xFECBDD28, 0xED69455F, 185 0x97048C1A, 0x84A6146D, 0xB041BCF4, 0xA3E32483, 186 /* T8_2 */ 187 0x00000000, 0xA541927E, 0x4F6F520D, 0xEA2EC073, 188 0x9EDEA41A, 0x3B9F3664, 0xD1B1F617, 0x74F06469, 189 0x38513EC5, 0x9D10ACBB, 0x773E6CC8, 0xD27FFEB6, 190 0xA68F9ADF, 0x03CE08A1, 0xE9E0C8D2, 0x4CA15AAC, 191 0x70A27D8A, 0xD5E3EFF4, 0x3FCD2F87, 0x9A8CBDF9, 192 0xEE7CD990, 0x4B3D4BEE, 0xA1138B9D, 0x045219E3, 193 0x48F3434F, 0xEDB2D131, 0x079C1142, 0xA2DD833C, 194 0xD62DE755, 0x736C752B, 0x9942B558, 0x3C032726, 195 0xE144FB14, 0x4405696A, 0xAE2BA919, 0x0B6A3B67, 196 0x7F9A5F0E, 0xDADBCD70, 0x30F50D03, 0x95B49F7D, 197 0xD915C5D1, 0x7C5457AF, 0x967A97DC, 0x333B05A2, 198 0x47CB61CB, 0xE28AF3B5, 0x08A433C6, 0xADE5A1B8, 199 0x91E6869E, 0x34A714E0, 0xDE89D493, 0x7BC846ED, 200 0x0F382284, 0xAA79B0FA, 0x40577089, 0xE516E2F7, 201 0xA9B7B85B, 0x0CF62A25, 0xE6D8EA56, 0x43997828, 202 0x37691C41, 0x92288E3F, 0x78064E4C, 0xDD47DC32, 203 0xC76580D9, 0x622412A7, 0x880AD2D4, 0x2D4B40AA, 204 0x59BB24C3, 0xFCFAB6BD, 0x16D476CE, 0xB395E4B0, 205 0xFF34BE1C, 0x5A752C62, 0xB05BEC11, 0x151A7E6F, 206 0x61EA1A06, 0xC4AB8878, 0x2E85480B, 0x8BC4DA75, 207 0xB7C7FD53, 0x12866F2D, 0xF8A8AF5E, 0x5DE93D20, 208 0x29195949, 0x8C58CB37, 0x66760B44, 0xC337993A, 209 0x8F96C396, 0x2AD751E8, 0xC0F9919B, 0x65B803E5, 210 0x1148678C, 0xB409F5F2, 0x5E273581, 0xFB66A7FF, 211 0x26217BCD, 0x8360E9B3, 0x694E29C0, 0xCC0FBBBE, 212 0xB8FFDFD7, 0x1DBE4DA9, 0xF7908DDA, 0x52D11FA4, 213 0x1E704508, 0xBB31D776, 0x511F1705, 0xF45E857B, 214 0x80AEE112, 0x25EF736C, 0xCFC1B31F, 0x6A802161, 215 0x56830647, 0xF3C29439, 0x19EC544A, 0xBCADC634, 216 0xC85DA25D, 0x6D1C3023, 0x8732F050, 0x2273622E, 217 0x6ED23882, 0xCB93AAFC, 0x21BD6A8F, 0x84FCF8F1, 218 0xF00C9C98, 0x554D0EE6, 0xBF63CE95, 0x1A225CEB, 219 0x8B277743, 0x2E66E53D, 0xC448254E, 0x6109B730, 220 0x15F9D359, 0xB0B84127, 0x5A968154, 0xFFD7132A, 221 0xB3764986, 0x1637DBF8, 0xFC191B8B, 0x595889F5, 222 0x2DA8ED9C, 0x88E97FE2, 0x62C7BF91, 0xC7862DEF, 223 0xFB850AC9, 0x5EC498B7, 0xB4EA58C4, 0x11ABCABA, 224 0x655BAED3, 0xC01A3CAD, 0x2A34FCDE, 0x8F756EA0, 225 0xC3D4340C, 0x6695A672, 0x8CBB6601, 0x29FAF47F, 226 0x5D0A9016, 0xF84B0268, 0x1265C21B, 0xB7245065, 227 0x6A638C57, 0xCF221E29, 0x250CDE5A, 0x804D4C24, 228 0xF4BD284D, 0x51FCBA33, 0xBBD27A40, 0x1E93E83E, 229 0x5232B292, 0xF77320EC, 0x1D5DE09F, 0xB81C72E1, 230 0xCCEC1688, 0x69AD84F6, 0x83834485, 0x26C2D6FB, 231 0x1AC1F1DD, 0xBF8063A3, 0x55AEA3D0, 0xF0EF31AE, 232 0x841F55C7, 0x215EC7B9, 0xCB7007CA, 0x6E3195B4, 233 0x2290CF18, 0x87D15D66, 0x6DFF9D15, 0xC8BE0F6B, 234 0xBC4E6B02, 0x190FF97C, 0xF321390F, 0x5660AB71, 235 0x4C42F79A, 0xE90365E4, 0x032DA597, 0xA66C37E9, 236 0xD29C5380, 0x77DDC1FE, 0x9DF3018D, 0x38B293F3, 237 0x7413C95F, 0xD1525B21, 0x3B7C9B52, 0x9E3D092C, 238 0xEACD6D45, 0x4F8CFF3B, 0xA5A23F48, 0x00E3AD36, 239 0x3CE08A10, 0x99A1186E, 0x738FD81D, 0xD6CE4A63, 240 0xA23E2E0A, 0x077FBC74, 0xED517C07, 0x4810EE79, 241 0x04B1B4D5, 0xA1F026AB, 0x4BDEE6D8, 0xEE9F74A6, 242 0x9A6F10CF, 0x3F2E82B1, 0xD50042C2, 0x7041D0BC, 243 0xAD060C8E, 0x08479EF0, 0xE2695E83, 0x4728CCFD, 244 0x33D8A894, 0x96993AEA, 0x7CB7FA99, 0xD9F668E7, 245 0x9557324B, 0x3016A035, 0xDA386046, 0x7F79F238, 246 0x0B899651, 0xAEC8042F, 0x44E6C45C, 0xE1A75622, 247 0xDDA47104, 0x78E5E37A, 0x92CB2309, 0x378AB177, 248 0x437AD51E, 0xE63B4760, 0x0C158713, 0xA954156D, 249 0xE5F54FC1, 0x40B4DDBF, 0xAA9A1DCC, 0x0FDB8FB2, 250 0x7B2BEBDB, 0xDE6A79A5, 0x3444B9D6, 0x91052BA8, 251 /* T8_3 */ 252 0x00000000, 0xDD45AAB8, 0xBF672381, 0x62228939, 253 0x7B2231F3, 0xA6679B4B, 0xC4451272, 0x1900B8CA, 254 0xF64463E6, 0x2B01C95E, 0x49234067, 0x9466EADF, 255 0x8D665215, 0x5023F8AD, 0x32017194, 0xEF44DB2C, 256 0xE964B13D, 0x34211B85, 0x560392BC, 0x8B463804, 257 0x924680CE, 0x4F032A76, 0x2D21A34F, 0xF06409F7, 258 0x1F20D2DB, 0xC2657863, 0xA047F15A, 0x7D025BE2, 259 0x6402E328, 0xB9474990, 0xDB65C0A9, 0x06206A11, 260 0xD725148B, 0x0A60BE33, 0x6842370A, 0xB5079DB2, 261 0xAC072578, 0x71428FC0, 0x136006F9, 0xCE25AC41, 262 0x2161776D, 0xFC24DDD5, 0x9E0654EC, 0x4343FE54, 263 0x5A43469E, 0x8706EC26, 0xE524651F, 0x3861CFA7, 264 0x3E41A5B6, 0xE3040F0E, 0x81268637, 0x5C632C8F, 265 0x45639445, 0x98263EFD, 0xFA04B7C4, 0x27411D7C, 266 0xC805C650, 0x15406CE8, 0x7762E5D1, 0xAA274F69, 267 0xB327F7A3, 0x6E625D1B, 0x0C40D422, 0xD1057E9A, 268 0xABA65FE7, 0x76E3F55F, 0x14C17C66, 0xC984D6DE, 269 0xD0846E14, 0x0DC1C4AC, 0x6FE34D95, 0xB2A6E72D, 270 0x5DE23C01, 0x80A796B9, 0xE2851F80, 0x3FC0B538, 271 0x26C00DF2, 0xFB85A74A, 0x99A72E73, 0x44E284CB, 272 0x42C2EEDA, 0x9F874462, 0xFDA5CD5B, 0x20E067E3, 273 0x39E0DF29, 0xE4A57591, 0x8687FCA8, 0x5BC25610, 274 0xB4868D3C, 0x69C32784, 0x0BE1AEBD, 0xD6A40405, 275 0xCFA4BCCF, 0x12E11677, 0x70C39F4E, 0xAD8635F6, 276 0x7C834B6C, 0xA1C6E1D4, 0xC3E468ED, 0x1EA1C255, 277 0x07A17A9F, 0xDAE4D027, 0xB8C6591E, 0x6583F3A6, 278 0x8AC7288A, 0x57828232, 0x35A00B0B, 0xE8E5A1B3, 279 0xF1E51979, 0x2CA0B3C1, 0x4E823AF8, 0x93C79040, 280 0x95E7FA51, 0x48A250E9, 0x2A80D9D0, 0xF7C57368, 281 0xEEC5CBA2, 0x3380611A, 0x51A2E823, 0x8CE7429B, 282 0x63A399B7, 0xBEE6330F, 0xDCC4BA36, 0x0181108E, 283 0x1881A844, 0xC5C402FC, 0xA7E68BC5, 0x7AA3217D, 284 0x52A0C93F, 0x8FE56387, 0xEDC7EABE, 0x30824006, 285 0x2982F8CC, 0xF4C75274, 0x96E5DB4D, 0x4BA071F5, 286 0xA4E4AAD9, 0x79A10061, 0x1B838958, 0xC6C623E0, 287 0xDFC69B2A, 0x02833192, 0x60A1B8AB, 0xBDE41213, 288 0xBBC47802, 0x6681D2BA, 0x04A35B83, 0xD9E6F13B, 289 0xC0E649F1, 0x1DA3E349, 0x7F816A70, 0xA2C4C0C8, 290 0x4D801BE4, 0x90C5B15C, 0xF2E73865, 0x2FA292DD, 291 0x36A22A17, 0xEBE780AF, 0x89C50996, 0x5480A32E, 292 0x8585DDB4, 0x58C0770C, 0x3AE2FE35, 0xE7A7548D, 293 0xFEA7EC47, 0x23E246FF, 0x41C0CFC6, 0x9C85657E, 294 0x73C1BE52, 0xAE8414EA, 0xCCA69DD3, 0x11E3376B, 295 0x08E38FA1, 0xD5A62519, 0xB784AC20, 0x6AC10698, 296 0x6CE16C89, 0xB1A4C631, 0xD3864F08, 0x0EC3E5B0, 297 0x17C35D7A, 0xCA86F7C2, 0xA8A47EFB, 0x75E1D443, 298 0x9AA50F6F, 0x47E0A5D7, 0x25C22CEE, 0xF8878656, 299 0xE1873E9C, 0x3CC29424, 0x5EE01D1D, 0x83A5B7A5, 300 0xF90696D8, 0x24433C60, 0x4661B559, 0x9B241FE1, 301 0x8224A72B, 0x5F610D93, 0x3D4384AA, 0xE0062E12, 302 0x0F42F53E, 0xD2075F86, 0xB025D6BF, 0x6D607C07, 303 0x7460C4CD, 0xA9256E75, 0xCB07E74C, 0x16424DF4, 304 0x106227E5, 0xCD278D5D, 0xAF050464, 0x7240AEDC, 305 0x6B401616, 0xB605BCAE, 0xD4273597, 0x09629F2F, 306 0xE6264403, 0x3B63EEBB, 0x59416782, 0x8404CD3A, 307 0x9D0475F0, 0x4041DF48, 0x22635671, 0xFF26FCC9, 308 0x2E238253, 0xF36628EB, 0x9144A1D2, 0x4C010B6A, 309 0x5501B3A0, 0x88441918, 0xEA669021, 0x37233A99, 310 0xD867E1B5, 0x05224B0D, 0x6700C234, 0xBA45688C, 311 0xA345D046, 0x7E007AFE, 0x1C22F3C7, 0xC167597F, 312 0xC747336E, 0x1A0299D6, 0x782010EF, 0xA565BA57, 313 0xBC65029D, 0x6120A825, 0x0302211C, 0xDE478BA4, 314 0x31035088, 0xEC46FA30, 0x8E647309, 0x5321D9B1, 315 0x4A21617B, 0x9764CBC3, 0xF54642FA, 0x2803E842, 316 /* T8_4 */ 317 0x00000000, 0x38116FAC, 0x7022DF58, 0x4833B0F4, 318 0xE045BEB0, 0xD854D11C, 0x906761E8, 0xA8760E44, 319 0xC5670B91, 0xFD76643D, 0xB545D4C9, 0x8D54BB65, 320 0x2522B521, 0x1D33DA8D, 0x55006A79, 0x6D1105D5, 321 0x8F2261D3, 0xB7330E7F, 0xFF00BE8B, 0xC711D127, 322 0x6F67DF63, 0x5776B0CF, 0x1F45003B, 0x27546F97, 323 0x4A456A42, 0x725405EE, 0x3A67B51A, 0x0276DAB6, 324 0xAA00D4F2, 0x9211BB5E, 0xDA220BAA, 0xE2336406, 325 0x1BA8B557, 0x23B9DAFB, 0x6B8A6A0F, 0x539B05A3, 326 0xFBED0BE7, 0xC3FC644B, 0x8BCFD4BF, 0xB3DEBB13, 327 0xDECFBEC6, 0xE6DED16A, 0xAEED619E, 0x96FC0E32, 328 0x3E8A0076, 0x069B6FDA, 0x4EA8DF2E, 0x76B9B082, 329 0x948AD484, 0xAC9BBB28, 0xE4A80BDC, 0xDCB96470, 330 0x74CF6A34, 0x4CDE0598, 0x04EDB56C, 0x3CFCDAC0, 331 0x51EDDF15, 0x69FCB0B9, 0x21CF004D, 0x19DE6FE1, 332 0xB1A861A5, 0x89B90E09, 0xC18ABEFD, 0xF99BD151, 333 0x37516AAE, 0x0F400502, 0x4773B5F6, 0x7F62DA5A, 334 0xD714D41E, 0xEF05BBB2, 0xA7360B46, 0x9F2764EA, 335 0xF236613F, 0xCA270E93, 0x8214BE67, 0xBA05D1CB, 336 0x1273DF8F, 0x2A62B023, 0x625100D7, 0x5A406F7B, 337 0xB8730B7D, 0x806264D1, 0xC851D425, 0xF040BB89, 338 0x5836B5CD, 0x6027DA61, 0x28146A95, 0x10050539, 339 0x7D1400EC, 0x45056F40, 0x0D36DFB4, 0x3527B018, 340 0x9D51BE5C, 0xA540D1F0, 0xED736104, 0xD5620EA8, 341 0x2CF9DFF9, 0x14E8B055, 0x5CDB00A1, 0x64CA6F0D, 342 0xCCBC6149, 0xF4AD0EE5, 0xBC9EBE11, 0x848FD1BD, 343 0xE99ED468, 0xD18FBBC4, 0x99BC0B30, 0xA1AD649C, 344 0x09DB6AD8, 0x31CA0574, 0x79F9B580, 0x41E8DA2C, 345 0xA3DBBE2A, 0x9BCAD186, 0xD3F96172, 0xEBE80EDE, 346 0x439E009A, 0x7B8F6F36, 0x33BCDFC2, 0x0BADB06E, 347 0x66BCB5BB, 0x5EADDA17, 0x169E6AE3, 0x2E8F054F, 348 0x86F90B0B, 0xBEE864A7, 0xF6DBD453, 0xCECABBFF, 349 0x6EA2D55C, 0x56B3BAF0, 0x1E800A04, 0x269165A8, 350 0x8EE76BEC, 0xB6F60440, 0xFEC5B4B4, 0xC6D4DB18, 351 0xABC5DECD, 0x93D4B161, 0xDBE70195, 0xE3F66E39, 352 0x4B80607D, 0x73910FD1, 0x3BA2BF25, 0x03B3D089, 353 0xE180B48F, 0xD991DB23, 0x91A26BD7, 0xA9B3047B, 354 0x01C50A3F, 0x39D46593, 0x71E7D567, 0x49F6BACB, 355 0x24E7BF1E, 0x1CF6D0B2, 0x54C56046, 0x6CD40FEA, 356 0xC4A201AE, 0xFCB36E02, 0xB480DEF6, 0x8C91B15A, 357 0x750A600B, 0x4D1B0FA7, 0x0528BF53, 0x3D39D0FF, 358 0x954FDEBB, 0xAD5EB117, 0xE56D01E3, 0xDD7C6E4F, 359 0xB06D6B9A, 0x887C0436, 0xC04FB4C2, 0xF85EDB6E, 360 0x5028D52A, 0x6839BA86, 0x200A0A72, 0x181B65DE, 361 0xFA2801D8, 0xC2396E74, 0x8A0ADE80, 0xB21BB12C, 362 0x1A6DBF68, 0x227CD0C4, 0x6A4F6030, 0x525E0F9C, 363 0x3F4F0A49, 0x075E65E5, 0x4F6DD511, 0x777CBABD, 364 0xDF0AB4F9, 0xE71BDB55, 0xAF286BA1, 0x9739040D, 365 0x59F3BFF2, 0x61E2D05E, 0x29D160AA, 0x11C00F06, 366 0xB9B60142, 0x81A76EEE, 0xC994DE1A, 0xF185B1B6, 367 0x9C94B463, 0xA485DBCF, 0xECB66B3B, 0xD4A70497, 368 0x7CD10AD3, 0x44C0657F, 0x0CF3D58B, 0x34E2BA27, 369 0xD6D1DE21, 0xEEC0B18D, 0xA6F30179, 0x9EE26ED5, 370 0x36946091, 0x0E850F3D, 0x46B6BFC9, 0x7EA7D065, 371 0x13B6D5B0, 0x2BA7BA1C, 0x63940AE8, 0x5B856544, 372 0xF3F36B00, 0xCBE204AC, 0x83D1B458, 0xBBC0DBF4, 373 0x425B0AA5, 0x7A4A6509, 0x3279D5FD, 0x0A68BA51, 374 0xA21EB415, 0x9A0FDBB9, 0xD23C6B4D, 0xEA2D04E1, 375 0x873C0134, 0xBF2D6E98, 0xF71EDE6C, 0xCF0FB1C0, 376 0x6779BF84, 0x5F68D028, 0x175B60DC, 0x2F4A0F70, 377 0xCD796B76, 0xF56804DA, 0xBD5BB42E, 0x854ADB82, 378 0x2D3CD5C6, 0x152DBA6A, 0x5D1E0A9E, 0x650F6532, 379 0x081E60E7, 0x300F0F4B, 0x783CBFBF, 0x402DD013, 380 0xE85BDE57, 0xD04AB1FB, 0x9879010F, 0xA0686EA3, 381 /* T8_5 */ 382 0x00000000, 0xEF306B19, 0xDB8CA0C3, 0x34BCCBDA, 383 0xB2F53777, 0x5DC55C6E, 0x697997B4, 0x8649FCAD, 384 0x6006181F, 0x8F367306, 0xBB8AB8DC, 0x54BAD3C5, 385 0xD2F32F68, 0x3DC34471, 0x097F8FAB, 0xE64FE4B2, 386 0xC00C303E, 0x2F3C5B27, 0x1B8090FD, 0xF4B0FBE4, 387 0x72F90749, 0x9DC96C50, 0xA975A78A, 0x4645CC93, 388 0xA00A2821, 0x4F3A4338, 0x7B8688E2, 0x94B6E3FB, 389 0x12FF1F56, 0xFDCF744F, 0xC973BF95, 0x2643D48C, 390 0x85F4168D, 0x6AC47D94, 0x5E78B64E, 0xB148DD57, 391 0x370121FA, 0xD8314AE3, 0xEC8D8139, 0x03BDEA20, 392 0xE5F20E92, 0x0AC2658B, 0x3E7EAE51, 0xD14EC548, 393 0x570739E5, 0xB83752FC, 0x8C8B9926, 0x63BBF23F, 394 0x45F826B3, 0xAAC84DAA, 0x9E748670, 0x7144ED69, 395 0xF70D11C4, 0x183D7ADD, 0x2C81B107, 0xC3B1DA1E, 396 0x25FE3EAC, 0xCACE55B5, 0xFE729E6F, 0x1142F576, 397 0x970B09DB, 0x783B62C2, 0x4C87A918, 0xA3B7C201, 398 0x0E045BEB, 0xE13430F2, 0xD588FB28, 0x3AB89031, 399 0xBCF16C9C, 0x53C10785, 0x677DCC5F, 0x884DA746, 400 0x6E0243F4, 0x813228ED, 0xB58EE337, 0x5ABE882E, 401 0xDCF77483, 0x33C71F9A, 0x077BD440, 0xE84BBF59, 402 0xCE086BD5, 0x213800CC, 0x1584CB16, 0xFAB4A00F, 403 0x7CFD5CA2, 0x93CD37BB, 0xA771FC61, 0x48419778, 404 0xAE0E73CA, 0x413E18D3, 0x7582D309, 0x9AB2B810, 405 0x1CFB44BD, 0xF3CB2FA4, 0xC777E47E, 0x28478F67, 406 0x8BF04D66, 0x64C0267F, 0x507CEDA5, 0xBF4C86BC, 407 0x39057A11, 0xD6351108, 0xE289DAD2, 0x0DB9B1CB, 408 0xEBF65579, 0x04C63E60, 0x307AF5BA, 0xDF4A9EA3, 409 0x5903620E, 0xB6330917, 0x828FC2CD, 0x6DBFA9D4, 410 0x4BFC7D58, 0xA4CC1641, 0x9070DD9B, 0x7F40B682, 411 0xF9094A2F, 0x16392136, 0x2285EAEC, 0xCDB581F5, 412 0x2BFA6547, 0xC4CA0E5E, 0xF076C584, 0x1F46AE9D, 413 0x990F5230, 0x763F3929, 0x4283F2F3, 0xADB399EA, 414 0x1C08B7D6, 0xF338DCCF, 0xC7841715, 0x28B47C0C, 415 0xAEFD80A1, 0x41CDEBB8, 0x75712062, 0x9A414B7B, 416 0x7C0EAFC9, 0x933EC4D0, 0xA7820F0A, 0x48B26413, 417 0xCEFB98BE, 0x21CBF3A7, 0x1577387D, 0xFA475364, 418 0xDC0487E8, 0x3334ECF1, 0x0788272B, 0xE8B84C32, 419 0x6EF1B09F, 0x81C1DB86, 0xB57D105C, 0x5A4D7B45, 420 0xBC029FF7, 0x5332F4EE, 0x678E3F34, 0x88BE542D, 421 0x0EF7A880, 0xE1C7C399, 0xD57B0843, 0x3A4B635A, 422 0x99FCA15B, 0x76CCCA42, 0x42700198, 0xAD406A81, 423 0x2B09962C, 0xC439FD35, 0xF08536EF, 0x1FB55DF6, 424 0xF9FAB944, 0x16CAD25D, 0x22761987, 0xCD46729E, 425 0x4B0F8E33, 0xA43FE52A, 0x90832EF0, 0x7FB345E9, 426 0x59F09165, 0xB6C0FA7C, 0x827C31A6, 0x6D4C5ABF, 427 0xEB05A612, 0x0435CD0B, 0x308906D1, 0xDFB96DC8, 428 0x39F6897A, 0xD6C6E263, 0xE27A29B9, 0x0D4A42A0, 429 0x8B03BE0D, 0x6433D514, 0x508F1ECE, 0xBFBF75D7, 430 0x120CEC3D, 0xFD3C8724, 0xC9804CFE, 0x26B027E7, 431 0xA0F9DB4A, 0x4FC9B053, 0x7B757B89, 0x94451090, 432 0x720AF422, 0x9D3A9F3B, 0xA98654E1, 0x46B63FF8, 433 0xC0FFC355, 0x2FCFA84C, 0x1B736396, 0xF443088F, 434 0xD200DC03, 0x3D30B71A, 0x098C7CC0, 0xE6BC17D9, 435 0x60F5EB74, 0x8FC5806D, 0xBB794BB7, 0x544920AE, 436 0xB206C41C, 0x5D36AF05, 0x698A64DF, 0x86BA0FC6, 437 0x00F3F36B, 0xEFC39872, 0xDB7F53A8, 0x344F38B1, 438 0x97F8FAB0, 0x78C891A9, 0x4C745A73, 0xA344316A, 439 0x250DCDC7, 0xCA3DA6DE, 0xFE816D04, 0x11B1061D, 440 0xF7FEE2AF, 0x18CE89B6, 0x2C72426C, 0xC3422975, 441 0x450BD5D8, 0xAA3BBEC1, 0x9E87751B, 0x71B71E02, 442 0x57F4CA8E, 0xB8C4A197, 0x8C786A4D, 0x63480154, 443 0xE501FDF9, 0x0A3196E0, 0x3E8D5D3A, 0xD1BD3623, 444 0x37F2D291, 0xD8C2B988, 0xEC7E7252, 0x034E194B, 445 0x8507E5E6, 0x6A378EFF, 0x5E8B4525, 0xB1BB2E3C, 446 /* T8_6 */ 447 0x00000000, 0x68032CC8, 0xD0065990, 0xB8057558, 448 0xA5E0C5D1, 0xCDE3E919, 0x75E69C41, 0x1DE5B089, 449 0x4E2DFD53, 0x262ED19B, 0x9E2BA4C3, 0xF628880B, 450 0xEBCD3882, 0x83CE144A, 0x3BCB6112, 0x53C84DDA, 451 0x9C5BFAA6, 0xF458D66E, 0x4C5DA336, 0x245E8FFE, 452 0x39BB3F77, 0x51B813BF, 0xE9BD66E7, 0x81BE4A2F, 453 0xD27607F5, 0xBA752B3D, 0x02705E65, 0x6A7372AD, 454 0x7796C224, 0x1F95EEEC, 0xA7909BB4, 0xCF93B77C, 455 0x3D5B83BD, 0x5558AF75, 0xED5DDA2D, 0x855EF6E5, 456 0x98BB466C, 0xF0B86AA4, 0x48BD1FFC, 0x20BE3334, 457 0x73767EEE, 0x1B755226, 0xA370277E, 0xCB730BB6, 458 0xD696BB3F, 0xBE9597F7, 0x0690E2AF, 0x6E93CE67, 459 0xA100791B, 0xC90355D3, 0x7106208B, 0x19050C43, 460 0x04E0BCCA, 0x6CE39002, 0xD4E6E55A, 0xBCE5C992, 461 0xEF2D8448, 0x872EA880, 0x3F2BDDD8, 0x5728F110, 462 0x4ACD4199, 0x22CE6D51, 0x9ACB1809, 0xF2C834C1, 463 0x7AB7077A, 0x12B42BB2, 0xAAB15EEA, 0xC2B27222, 464 0xDF57C2AB, 0xB754EE63, 0x0F519B3B, 0x6752B7F3, 465 0x349AFA29, 0x5C99D6E1, 0xE49CA3B9, 0x8C9F8F71, 466 0x917A3FF8, 0xF9791330, 0x417C6668, 0x297F4AA0, 467 0xE6ECFDDC, 0x8EEFD114, 0x36EAA44C, 0x5EE98884, 468 0x430C380D, 0x2B0F14C5, 0x930A619D, 0xFB094D55, 469 0xA8C1008F, 0xC0C22C47, 0x78C7591F, 0x10C475D7, 470 0x0D21C55E, 0x6522E996, 0xDD279CCE, 0xB524B006, 471 0x47EC84C7, 0x2FEFA80F, 0x97EADD57, 0xFFE9F19F, 472 0xE20C4116, 0x8A0F6DDE, 0x320A1886, 0x5A09344E, 473 0x09C17994, 0x61C2555C, 0xD9C72004, 0xB1C40CCC, 474 0xAC21BC45, 0xC422908D, 0x7C27E5D5, 0x1424C91D, 475 0xDBB77E61, 0xB3B452A9, 0x0BB127F1, 0x63B20B39, 476 0x7E57BBB0, 0x16549778, 0xAE51E220, 0xC652CEE8, 477 0x959A8332, 0xFD99AFFA, 0x459CDAA2, 0x2D9FF66A, 478 0x307A46E3, 0x58796A2B, 0xE07C1F73, 0x887F33BB, 479 0xF56E0EF4, 0x9D6D223C, 0x25685764, 0x4D6B7BAC, 480 0x508ECB25, 0x388DE7ED, 0x808892B5, 0xE88BBE7D, 481 0xBB43F3A7, 0xD340DF6F, 0x6B45AA37, 0x034686FF, 482 0x1EA33676, 0x76A01ABE, 0xCEA56FE6, 0xA6A6432E, 483 0x6935F452, 0x0136D89A, 0xB933ADC2, 0xD130810A, 484 0xCCD53183, 0xA4D61D4B, 0x1CD36813, 0x74D044DB, 485 0x27180901, 0x4F1B25C9, 0xF71E5091, 0x9F1D7C59, 486 0x82F8CCD0, 0xEAFBE018, 0x52FE9540, 0x3AFDB988, 487 0xC8358D49, 0xA036A181, 0x1833D4D9, 0x7030F811, 488 0x6DD54898, 0x05D66450, 0xBDD31108, 0xD5D03DC0, 489 0x8618701A, 0xEE1B5CD2, 0x561E298A, 0x3E1D0542, 490 0x23F8B5CB, 0x4BFB9903, 0xF3FEEC5B, 0x9BFDC093, 491 0x546E77EF, 0x3C6D5B27, 0x84682E7F, 0xEC6B02B7, 492 0xF18EB23E, 0x998D9EF6, 0x2188EBAE, 0x498BC766, 493 0x1A438ABC, 0x7240A674, 0xCA45D32C, 0xA246FFE4, 494 0xBFA34F6D, 0xD7A063A5, 0x6FA516FD, 0x07A63A35, 495 0x8FD9098E, 0xE7DA2546, 0x5FDF501E, 0x37DC7CD6, 496 0x2A39CC5F, 0x423AE097, 0xFA3F95CF, 0x923CB907, 497 0xC1F4F4DD, 0xA9F7D815, 0x11F2AD4D, 0x79F18185, 498 0x6414310C, 0x0C171DC4, 0xB412689C, 0xDC114454, 499 0x1382F328, 0x7B81DFE0, 0xC384AAB8, 0xAB878670, 500 0xB66236F9, 0xDE611A31, 0x66646F69, 0x0E6743A1, 501 0x5DAF0E7B, 0x35AC22B3, 0x8DA957EB, 0xE5AA7B23, 502 0xF84FCBAA, 0x904CE762, 0x2849923A, 0x404ABEF2, 503 0xB2828A33, 0xDA81A6FB, 0x6284D3A3, 0x0A87FF6B, 504 0x17624FE2, 0x7F61632A, 0xC7641672, 0xAF673ABA, 505 0xFCAF7760, 0x94AC5BA8, 0x2CA92EF0, 0x44AA0238, 506 0x594FB2B1, 0x314C9E79, 0x8949EB21, 0xE14AC7E9, 507 0x2ED97095, 0x46DA5C5D, 0xFEDF2905, 0x96DC05CD, 508 0x8B39B544, 0xE33A998C, 0x5B3FECD4, 0x333CC01C, 509 0x60F48DC6, 0x08F7A10E, 0xB0F2D456, 0xD8F1F89E, 510 0xC5144817, 0xAD1764DF, 0x15121187, 0x7D113D4F, 511 /* T8_7 */ 512 0x00000000, 0x493C7D27, 0x9278FA4E, 0xDB448769, 513 0x211D826D, 0x6821FF4A, 0xB3657823, 0xFA590504, 514 0x423B04DA, 0x0B0779FD, 0xD043FE94, 0x997F83B3, 515 0x632686B7, 0x2A1AFB90, 0xF15E7CF9, 0xB86201DE, 516 0x847609B4, 0xCD4A7493, 0x160EF3FA, 0x5F328EDD, 517 0xA56B8BD9, 0xEC57F6FE, 0x37137197, 0x7E2F0CB0, 518 0xC64D0D6E, 0x8F717049, 0x5435F720, 0x1D098A07, 519 0xE7508F03, 0xAE6CF224, 0x7528754D, 0x3C14086A, 520 0x0D006599, 0x443C18BE, 0x9F789FD7, 0xD644E2F0, 521 0x2C1DE7F4, 0x65219AD3, 0xBE651DBA, 0xF759609D, 522 0x4F3B6143, 0x06071C64, 0xDD439B0D, 0x947FE62A, 523 0x6E26E32E, 0x271A9E09, 0xFC5E1960, 0xB5626447, 524 0x89766C2D, 0xC04A110A, 0x1B0E9663, 0x5232EB44, 525 0xA86BEE40, 0xE1579367, 0x3A13140E, 0x732F6929, 526 0xCB4D68F7, 0x827115D0, 0x593592B9, 0x1009EF9E, 527 0xEA50EA9A, 0xA36C97BD, 0x782810D4, 0x31146DF3, 528 0x1A00CB32, 0x533CB615, 0x8878317C, 0xC1444C5B, 529 0x3B1D495F, 0x72213478, 0xA965B311, 0xE059CE36, 530 0x583BCFE8, 0x1107B2CF, 0xCA4335A6, 0x837F4881, 531 0x79264D85, 0x301A30A2, 0xEB5EB7CB, 0xA262CAEC, 532 0x9E76C286, 0xD74ABFA1, 0x0C0E38C8, 0x453245EF, 533 0xBF6B40EB, 0xF6573DCC, 0x2D13BAA5, 0x642FC782, 534 0xDC4DC65C, 0x9571BB7B, 0x4E353C12, 0x07094135, 535 0xFD504431, 0xB46C3916, 0x6F28BE7F, 0x2614C358, 536 0x1700AEAB, 0x5E3CD38C, 0x857854E5, 0xCC4429C2, 537 0x361D2CC6, 0x7F2151E1, 0xA465D688, 0xED59ABAF, 538 0x553BAA71, 0x1C07D756, 0xC743503F, 0x8E7F2D18, 539 0x7426281C, 0x3D1A553B, 0xE65ED252, 0xAF62AF75, 540 0x9376A71F, 0xDA4ADA38, 0x010E5D51, 0x48322076, 541 0xB26B2572, 0xFB575855, 0x2013DF3C, 0x692FA21B, 542 0xD14DA3C5, 0x9871DEE2, 0x4335598B, 0x0A0924AC, 543 0xF05021A8, 0xB96C5C8F, 0x6228DBE6, 0x2B14A6C1, 544 0x34019664, 0x7D3DEB43, 0xA6796C2A, 0xEF45110D, 545 0x151C1409, 0x5C20692E, 0x8764EE47, 0xCE589360, 546 0x763A92BE, 0x3F06EF99, 0xE44268F0, 0xAD7E15D7, 547 0x572710D3, 0x1E1B6DF4, 0xC55FEA9D, 0x8C6397BA, 548 0xB0779FD0, 0xF94BE2F7, 0x220F659E, 0x6B3318B9, 549 0x916A1DBD, 0xD856609A, 0x0312E7F3, 0x4A2E9AD4, 550 0xF24C9B0A, 0xBB70E62D, 0x60346144, 0x29081C63, 551 0xD3511967, 0x9A6D6440, 0x4129E329, 0x08159E0E, 552 0x3901F3FD, 0x703D8EDA, 0xAB7909B3, 0xE2457494, 553 0x181C7190, 0x51200CB7, 0x8A648BDE, 0xC358F6F9, 554 0x7B3AF727, 0x32068A00, 0xE9420D69, 0xA07E704E, 555 0x5A27754A, 0x131B086D, 0xC85F8F04, 0x8163F223, 556 0xBD77FA49, 0xF44B876E, 0x2F0F0007, 0x66337D20, 557 0x9C6A7824, 0xD5560503, 0x0E12826A, 0x472EFF4D, 558 0xFF4CFE93, 0xB67083B4, 0x6D3404DD, 0x240879FA, 559 0xDE517CFE, 0x976D01D9, 0x4C2986B0, 0x0515FB97, 560 0x2E015D56, 0x673D2071, 0xBC79A718, 0xF545DA3F, 561 0x0F1CDF3B, 0x4620A21C, 0x9D642575, 0xD4585852, 562 0x6C3A598C, 0x250624AB, 0xFE42A3C2, 0xB77EDEE5, 563 0x4D27DBE1, 0x041BA6C6, 0xDF5F21AF, 0x96635C88, 564 0xAA7754E2, 0xE34B29C5, 0x380FAEAC, 0x7133D38B, 565 0x8B6AD68F, 0xC256ABA8, 0x19122CC1, 0x502E51E6, 566 0xE84C5038, 0xA1702D1F, 0x7A34AA76, 0x3308D751, 567 0xC951D255, 0x806DAF72, 0x5B29281B, 0x1215553C, 568 0x230138CF, 0x6A3D45E8, 0xB179C281, 0xF845BFA6, 569 0x021CBAA2, 0x4B20C785, 0x906440EC, 0xD9583DCB, 570 0x613A3C15, 0x28064132, 0xF342C65B, 0xBA7EBB7C, 571 0x4027BE78, 0x091BC35F, 0xD25F4436, 0x9B633911, 572 0xA777317B, 0xEE4B4C5C, 0x350FCB35, 0x7C33B612, 573 0x866AB316, 0xCF56CE31, 0x14124958, 0x5D2E347F, 574 0xE54C35A1, 0xAC704886, 0x7734CFEF, 0x3E08B2C8, 575 0xC451B7CC, 0x8D6DCAEB, 0x56294D82, 0x1F1530A5 576 }; 577 // @formatter:on 578 579 /** The current CRC value, bit-flipped */ 580 private int crc; 581 582 /** Create a new PureJavaCrc32 object. */ 583 public PureJavaCrc32C() { 584 reset(); 585 } 586 587 @Override 588 public long getValue() { 589 final long ret = crc; 590 return ~ret & 0xffffffffL; 591 } 592 593 @Override 594 public void reset() { 595 crc = 0xffffffff; 596 } 597 598 @Override 599 public void update(final byte[] b, int off, int len) { 600 int localCrc = crc; 601 602 while (len > 7) { 603 final int c0 = (b[off + 0] ^ localCrc) & 0xff; 604 final int c1 = (b[off + 1] ^ (localCrc >>>= 8)) & 0xff; 605 final int c2 = (b[off + 2] ^ (localCrc >>>= 8)) & 0xff; 606 final int c3 = (b[off + 3] ^ (localCrc >>>= 8)) & 0xff; 607 localCrc = T[T8_7_START + c0] ^ T[T8_6_START + c1] ^ T[T8_5_START + c2] ^ T[T8_4_START + c3]; 608 609 final int c4 = b[off + 4] & 0xff; 610 final int c5 = b[off + 5] & 0xff; 611 final int c6 = b[off + 6] & 0xff; 612 final int c7 = b[off + 7] & 0xff; 613 614 localCrc ^= T[T8_3_START + c4] ^ T[T8_2_START + c5] ^ T[T8_1_START + c6] ^ T[T8_0_START + c7]; 615 616 off += 8; 617 len -= 8; 618 } 619 620 /* loop unroll - duff's device style */ 621 switch (len) { 622 case 7: 623 localCrc = localCrc >>> 8 ^ T[T8_0_START + ((localCrc ^ b[off++]) & 0xff)]; 624 case 6: 625 localCrc = localCrc >>> 8 ^ T[T8_0_START + ((localCrc ^ b[off++]) & 0xff)]; 626 case 5: 627 localCrc = localCrc >>> 8 ^ T[T8_0_START + ((localCrc ^ b[off++]) & 0xff)]; 628 case 4: 629 localCrc = localCrc >>> 8 ^ T[T8_0_START + ((localCrc ^ b[off++]) & 0xff)]; 630 case 3: 631 localCrc = localCrc >>> 8 ^ T[T8_0_START + ((localCrc ^ b[off++]) & 0xff)]; 632 case 2: 633 localCrc = localCrc >>> 8 ^ T[T8_0_START + ((localCrc ^ b[off++]) & 0xff)]; 634 case 1: 635 localCrc = localCrc >>> 8 ^ T[T8_0_START + ((localCrc ^ b[off++]) & 0xff)]; 636 default: 637 break; // satisfy Findbugs 638 } 639 640 // Publish crc out to object 641 crc = localCrc; 642 } 643 644 @Override 645 final public void update(final int b) { 646 crc = crc >>> 8 ^ T[T8_0_START + ((crc ^ b) & 0xff)]; 647 } 648 649}