code: public static long safeMultiply(
          long op1,
          long op2
      ) {
  
          if (op2 == 1L) {
              return op1;
          }
  
          if (
              (op2 > 0)
              ? (op1 > Long.MAX_VALUE / op2) || (op1 < Long.MIN_VALUE / op2)
              : ((op2 < -1)
                  ? (op1 > Long.MIN_VALUE / op2) || (op1 < Long.MAX_VALUE / op2)
                  : (op2 == -1) && (op1 == Long.MIN_VALUE))
          ) {
              StringBuilder sb = new StringBuilder(32);
              sb.append("Long overflow: (");
              sb.append(op1);
              sb.append(',');
              sb.append(op2);
              sb.append(')');
              throw new ArithmeticException(sb.toString());
          }
  
          return op1 * op2;
  
      }
docs: /*[deutsch]
  <p>Multipliziert die Zahlen mit &Uuml;berlaufkontrolle. </p>
  
  @param   op1     first operand
  @param   op2     second operand
  @return  product
  @throws  ArithmeticException if long-range overflows