docs: public Object next() {
  
          // for chained iterators
          if (chained) {
              if (it1 == null) {
                  if (it2 == null) {
                      throw new NoSuchElementException();
                  }
  
                  if (it2.hasNext()) {
                      return it2.next();
                  }
  
                  it2 = null;
  
                  next();
              } else {
                  if (it1.hasNext()) {
                      return it1.next();
                  }
  
                  it1 = null;
  
                  next();
              }
          }
  
          // for other itertors
          if (hasNext()) {
              return elements[i++];
          }
  
          throw new NoSuchElementException();
      }