docs: public static void validateUTF8(byte[] utf8, int start, int len) throws MalformedInputException {
          int count = start;
          int leadByte = 0;
          int length = 0;
          int state = LEAD_BYTE;
          while (count < start + len) {
              int aByte = ((int) utf8[count] & 0xFF);
  
              switch (state) {
                  case LEAD_BYTE:
                      leadByte = aByte;
                      length = bytesFromUTF8[aByte];
  
                      switch (length) {
                          case 0: // check for ASCII
                              if (leadByte > 0x7F)
                                  throw new MalformedInputException(count);
                              break;
                          case 1:
                              if (leadByte < 0xC2 || leadByte > 0xDF)
                                  throw new MalformedInputException(count);
                              state = TRAIL_BYTE_1;
                              break;
                          case 2:
                              if (leadByte < 0xE0 || leadByte > 0xEF)
                                  throw new MalformedInputException(count);
                              state = TRAIL_BYTE_1;
                              break;
                          case 3:
                              if (leadByte < 0xF0 || leadByte > 0xF4)
                                  throw new MalformedInputException(count);
                              state = TRAIL_BYTE_1;
                              break;
                          default:
                              // too long! Longest valid UTF-8 is 4 bytes (lead + three)
                              // or if < 0 we got a trail byte in the lead byte position
                              throw new MalformedInputException(count);
                      } // switch (length)
                      break;
  
                  case TRAIL_BYTE_1:
                      if (leadByte == 0xF0 && aByte < 0x90)
                          throw new MalformedInputException(count);
                      if (leadByte == 0xF4 && aByte > 0x8F)
                          throw new MalformedInputException(count);
                      if (leadByte == 0xE0 && aByte < 0xA0)
                          throw new MalformedInputException(count);
                      if (leadByte == 0xED && aByte > 0x9F)
                          throw new MalformedInputException(count);
                      // falls through to regular trail-byte test!!
                  case TRAIL_BYTE:
                      if (aByte < 0x80 || aByte > 0xBF)
                          throw new MalformedInputException(count);
                      if (--length == 0) {
                          state = LEAD_BYTE;
                      } else {
                          state = TRAIL_BYTE;
                      }
                      break;
              } // switch (state)
              count++;
          }
      }