docs: public RangeResponseResult getResponseResult(final long resourceContentLength, String ifRange, Date lastModified, String eTag) {
          if(ranges.isEmpty()) {
              return null;
          }
          long start = getStart(0);
          long end = getEnd(0);
          long rangeLength;
          if(ifRange != null && !ifRange.isEmpty()) {
              if(ifRange.charAt(0) == '"') {
                  //entity tag
                  if(eTag != null && !eTag.equals(ifRange)) {
                      return null;
                  }
              } else {
                  Date ifDate = DateUtils.parseDate(ifRange);
                  if(ifDate != null && lastModified != null && ifDate.getTime() < lastModified.getTime()) {
                      return null;
                  }
              }
          }
  
          if(start == -1 ) {
              //suffix range
              if(end < 0){
                  //ignore the range request
                  return new RangeResponseResult(0, 0, 0, "bytes */" + resourceContentLength, StatusCodes.REQUEST_RANGE_NOT_SATISFIABLE);
              }
              start = Math.max(resourceContentLength - end, 0);
              end = resourceContentLength - 1;
              rangeLength = resourceContentLength - start;
          } else if(end == -1) {
              //prefix range
              long toWrite = resourceContentLength - start;
              if(toWrite >= 0) {
                  rangeLength = toWrite;
              } else {
                  //ignore the range request
                  return new RangeResponseResult(0, 0, 0, "bytes */" + resourceContentLength, StatusCodes.REQUEST_RANGE_NOT_SATISFIABLE);
              }
              end = resourceContentLength - 1;
          } else {
              end = Math.min(end, resourceContentLength - 1);
              if(start >= resourceContentLength || start > end) {
                  return new RangeResponseResult(0, 0, 0, "bytes */" + resourceContentLength, StatusCodes.REQUEST_RANGE_NOT_SATISFIABLE);
              }
              rangeLength = end - start + 1;
          }
          return new RangeResponseResult(start, end, rangeLength,  "bytes " + start + "-" + end + "/" + resourceContentLength, StatusCodes.PARTIAL_CONTENT);
      }