code: private ChronoLocalDateTimeImpl<D> plusWithOverflow(D newDate, long hours, long minutes, long seconds, long nanos) {
          // 9223372036854775808 long, 2147483648 int
          if ((hours | minutes | seconds | nanos) == 0) {
              return with(newDate, time);
          }
          long totDays = nanos / NANOS_PER_DAY +             //   max/24*60*60*1B
                  seconds / SECONDS_PER_DAY +                //   max/24*60*60
                  minutes / MINUTES_PER_DAY +                //   max/24*60
                  hours / HOURS_PER_DAY;                     //   max/24
          long totNanos = nanos % NANOS_PER_DAY +                    //   max  86400000000000
                  (seconds % SECONDS_PER_DAY) * NANOS_PER_SECOND +   //   max  86400000000000
                  (minutes % MINUTES_PER_DAY) * NANOS_PER_MINUTE +   //   max  86400000000000
                  (hours % HOURS_PER_DAY) * NANOS_PER_HOUR;          //   max  86400000000000
          long curNoD = time.toNanoOfDay();                          //   max  86400000000000
          totNanos = totNanos + curNoD;                              // total 432000000000000
          totDays += Math.floorDiv(totNanos, NANOS_PER_DAY);
          long newNoD = Math.floorMod(totNanos, NANOS_PER_DAY);
          LocalTime newTime = (newNoD == curNoD ? time : LocalTime.ofNanoOfDay(newNoD));
          return with(newDate.plus(totDays, ChronoUnit.DAYS), newTime);
      }
docs: -----------------------------------------------------------------------