@Override
      protected T nextImpl() {
        if (it.hasNext()) return it.next();
        if (wrapped) return stop();
        wrapped = true;
        it = from(iterate(null, fwd)).takeWhile(item -> item != start);
        return it.hasNext() ? it.next() : stop();
      }
@Override
      protected T nextImpl()