@Override
    public IndexEntry previous() {
      if (cursor <= 0 || cursor > numberOfEntries) {
        throw new NoSuchElementException();
      }
      try {
        int i = cursor - 1;
        StoreKey key = sealedIndex.getKeyAt(mmap, i);
        mmap.get(valueBuf);
        return new IndexEntry(key, new IndexValue(startOffset.getName(), ByteBuffer.wrap(valueBuf), getVersion()));
      } catch (Exception e) {
        throw new IllegalStateException(
            "Failed to read index entry at " + cursor + " in index segment file " + indexFile.getAbsolutePath(), e);
      } finally {
        cursor--;
      }
    }
An {@link IndexEntry} {@link ListIterator} for a sealed {@link IndexSegment}.
ambry-store/src/main/java/com/github/ambry/store/IndexSegment.java