 // MARK: IntegerArithmeticType Conformance
 extension UInt128: IntegerArithmeticType {
     public func toIntMax() -> IntMax {
+        precondition(self.value.lowerBits <= UInt64(IntMax.max),
+            "Converting `self` to 'IntMax' causes an integer overflow")
         return IntMax(value.lowerBits)
     }
     public static func addWithOverflow(lhs: UInt128, _ rhs: UInt128) -> (UInt128, overflow: Bool) {

}
/// Shifts `lhs`' bits left by `rhs` bits and returns the result.
public func <<(lhs: UInt128, rhs: UInt128) -> UInt128 {
    if rhs.value.upperBits > 0 || rhs.value.lowerBits >= 128 {
        return UInt128(0)
    }
    switch rhs {

}
/// Shifts `lhs`' bits right by `rhs` bits and returns the result.
public func >>(lhs: UInt128, rhs: UInt128) -> UInt128 {
    if rhs.value.upperBits > 0 || rhs.value.lowerBits > 128 {
        return UInt128(0)
    }
    switch rhs {
