class CompUInt128 implements CompUInt<UInt64, UInt64, CompUInt128> {

  @Override
  public CompUInt128 add(CompUInt128 other) {
    long newLow = Integer.toUnsignedLong(this.low) + Integer.toUnsignedLong(other.low);
    long lowOverflow = newLow >>> 32;
    long newMid = Integer.toUnsignedLong(this.mid)
        + Integer.toUnsignedLong(other.mid)
        + lowOverflow;
    long midOverflow = newMid >>> 32;
    long newHigh = this.high + other.high + midOverflow;
    return new CompUInt128(newHigh, (int) newMid, (int) newLow);
  }

  public  CompUInt128(byte[] bytes);
  public  CompUInt128(byte[] bytes, boolean requiresPadding);
  public  CompUInt128(BigInteger value);
    CompUInt128(long high, int mid, int low);
    CompUInt128(UInt64 value);
    CompUInt128(long value);
    CompUInt128(CompUInt128 other);

}