docs: public static Deferred<HashMap<String, String>> resolveIdsAsync(final TSDB tsdb,
                                              final List<byte[]> tags)
      throws NoSuchUniqueId {
      final short name_width = tsdb.tag_names.width();
      final short value_width = tsdb.tag_values.width();
      final short tag_bytes = (short) (name_width + value_width);
      final HashMap<String, String> result
        = new HashMap<String, String>(tags.size());
      final ArrayList<Deferred<String>> deferreds 
        = new ArrayList<Deferred<String>>(tags.size());
      
      for (final byte[] tag : tags) {
        final byte[] tmp_name = new byte[name_width];
        final byte[] tmp_value = new byte[value_width];
        if (tag.length != tag_bytes) {
          throw new IllegalArgumentException("invalid length: " + tag.length
              + " (expected " + tag_bytes + "): " + Arrays.toString(tag));
        }
        System.arraycopy(tag, 0, tmp_name, 0, name_width);
        deferreds.add(tsdb.tag_names.getNameAsync(tmp_name));
        System.arraycopy(tag, name_width, tmp_value, 0, value_width);
        deferreds.add(tsdb.tag_values.getNameAsync(tmp_value));
      }
      
      class GroupCB implements Callback<HashMap<String, String>, ArrayList<String>> {
        public HashMap<String, String> call(final ArrayList<String> names)
            throws Exception {
          for (int i = 0; i < names.size(); i++) {
            if (i % 2 != 0) {
              result.put(names.get(i - 1), names.get(i));
            }
          }
          return result;
        }
      }
      
      return Deferred.groupInOrder(deferreds).addCallback(new GroupCB());
    }