private static long unsignedLongMulXorFold(final long lhs, final long rhs) {
    final long upper = multiplyHigh(lhs, rhs) + ((lhs >> 63) & rhs) + ((rhs >> 63) & lhs);
    final long lower = lhs * rhs;
    return lower ^ upper;
  }
private static long unsignedLongMulXorFold(final long lhs, final long rhs)