var poly = 0xEDB88320; // reverse polynomial // build table function signed_crc_table() { var c, n, k, table = new Array(256); for (n = 0; n < 256; n++) { c = n; for (k = 0; k < 8; k++) { if (c & 1) { c = poly ^ (c >>> 1); } else { c = c >>> 1; } } table[n] = c >>> 0; } return typeof Int32Array !== 'undefined' ? new Int32Array(table) : table; } var T = signed_crc_table(); function crc32_str(str, seed = 0) { var C = seed ^ -1; for (var i = 0, L = str.length, c, d; i < L;) { c = str.charCodeAt(i++); if (c < 0x80) { C = (C >>> 8) ^ T[(C ^ c) & 0xFF]; } else if (c < 0x800) { C = (C >>> 8) ^ T[(C ^ (192 | ((c >> 6) & 31))) & 0xFF]; C = (C >>> 8) ^ T[(C ^ (128 | (c & 63))) & 0xFF]; } else if (c >= 0xD800 && c < 0xE000) { c = (c & 1023) + 64; d = str.charCodeAt(i++) & 1023; C = (C >>> 8) ^ T[(C ^ (240 | ((c >> 8) & 7))) & 0xFF]; C = (C >>> 8) ^ T[(C ^ (128 | ((c >> 2) & 63))) & 0xFF]; C = (C >>> 8) ^ T[(C ^ (128 | ((d >> 6) & 15) | ((c & 3) << 4))) & 0xFF]; C = (C >>> 8) ^ T[(C ^ (128 | (d & 63))) & 0xFF]; } else { C = (C >>> 8) ^ T[(C ^ (224 | ((c >> 12) & 15))) & 0xFF]; C = (C >>> 8) ^ T[(C ^ (128 | ((c >> 6) & 63))) & 0xFF]; C = (C >>> 8) ^ T[(C ^ (128 | (c & 63))) & 0xFF]; } } return C ^ -1; } function decimalToHex(num) { var str = (num >>> 0).toString(16); var padLen = 8 - str.length; return padLen > 0 ? new Array(padLen + 1).join('0') + str : str; } function crc32(str) { return decimalToHex(crc32_str(str)); } export default crc32;