@Override
	public long hash(String string, long unsigned32BitMod) throws PdbException {
		byte[] bytes = string.getBytes();
		PdbByteReader reader = new PdbByteReader(bytes);
		int count = bytes.length;
		long hash = 0xb170a1bfL; // represents unsigned 32-bit.

		while (count >= 4) {
			count -= 4;
			hash += reader.parseUnsignedIntVal();
			hash += (hash << 10);
			hash ^= (hash >> 6);
		}
		// Hash remaining bytes.
		while (reader.hasMore()) {
			hash += reader.parseUnsignedByteVal();
			hash += (hash << 10);
			hash ^= (hash >> 6);
		}
		// Mask down to 32-bits.
		hash &= 0xffffffff;
		// Apply modulus.
		return hashUnsigned32Bit(hash) % unsigned32BitMod;
	}
Hashes (V2) {@link String}, using unsigned32BitMod, which the user should ensure
 is <= 0xffffffff.  Returns an unsigned integer value (32-bit) returned as a long.
@param string The input {@link String} to be hashed.
@param unsigned32BitMod Modulus to be used for the hash.
@return An unsigned integer hash value returned as a long.
@throws PdbException Upon not enough data left to parse.
Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb2/pdbreader/Hasher32V2.java