docs: private Map<KeyRange, ServerName> normalizeKeyBounds(NavigableMap<HRegionInfo, ServerName> raw) {
  
          Map.Entry<HRegionInfo, ServerName> nullStart = null;
          Map.Entry<HRegionInfo, ServerName> nullEnd = null;
  
          ImmutableMap.Builder<KeyRange, ServerName> b = ImmutableMap.builder();
  
          for (Map.Entry<HRegionInfo, ServerName> e : raw.entrySet()) {
              HRegionInfo regionInfo = e.getKey();
              byte startKey[] = regionInfo.getStartKey();
              byte endKey[]   = regionInfo.getEndKey();
  
              if (0 == startKey.length) {
                  startKey = null;
                  logger.trace("Converted zero-length HBase startKey byte array to null");
              }
  
              if (0 == endKey.length) {
                  endKey = null;
                  logger.trace("Converted zero-length HBase endKey byte array to null");
              }
  
              if (null == startKey && null == endKey) {
                  Preconditions.checkState(1 == raw.size());
                  logger.debug("HBase table {} has a single region {}", tableName, regionInfo);
                  // Choose arbitrary shared value = startKey = endKey
                  return b.put(new KeyRange(FOUR_ZERO_BYTES, FOUR_ZERO_BYTES), e.getValue()).build();
              } else if (null == startKey) {
                  logger.debug("Found HRegionInfo with null startKey on server {}: {}", e.getValue(), regionInfo);
                  Preconditions.checkState(null == nullStart);
                  nullStart = e;
                  // I thought endBuf would be inclusive from the HBase javadoc, but in practice it is exclusive
                  StaticBuffer endBuf = StaticArrayBuffer.of(zeroExtend(endKey));
                  // Replace null start key with zeroes
                  b.put(new KeyRange(FOUR_ZERO_BYTES, endBuf), e.getValue());
              } else if (null == endKey) {
                  logger.debug("Found HRegionInfo with null endKey on server {}: {}", e.getValue(), regionInfo);
                  Preconditions.checkState(null == nullEnd);
                  nullEnd = e;
                  // Replace null end key with zeroes
                  b.put(new KeyRange(StaticArrayBuffer.of(zeroExtend(startKey)), FOUR_ZERO_BYTES), e.getValue());
              } else {
                  Preconditions.checkState(null != startKey);
                  Preconditions.checkState(null != endKey);
  
                  // Convert HBase's inclusive end keys into exclusive Titan end keys
                  StaticBuffer startBuf = StaticArrayBuffer.of(zeroExtend(startKey));
                  StaticBuffer endBuf = StaticArrayBuffer.of(zeroExtend(endKey));
  
                  KeyRange kr = new KeyRange(startBuf, endBuf);
                  b.put(kr, e.getValue());
                  logger.debug("Found HRegionInfo with non-null end and start keys on server {}: {}", e.getValue(), regionInfo);
              }
          }
  
          // Require either no null key bounds or a pair of them
          Preconditions.checkState(!(null == nullStart ^ null == nullEnd));
  
          // Check that every key in the result is at least 4 bytes long
          Map<KeyRange, ServerName> result = b.build();
          for (KeyRange kr : result.keySet()) {
              Preconditions.checkState(4 <= kr.getStart().length());
              Preconditions.checkState(4 <= kr.getEnd().length());
          }
  
          return result;
      }