docs: static void render(List<AbstractConfigValue> stack, StringBuilder sb, int indent, boolean atRoot, String atKey,
              ConfigRenderOptions options) {
          boolean commentMerge = options.getComments();
          if (commentMerge) {
              sb.append("# unresolved merge of " + stack.size() + " values follows (\n");
              if (atKey == null) {
                  indent(sb, indent, options);
                  sb.append("# this unresolved merge will not be parseable because it's at the root of the object\n");
                  indent(sb, indent, options);
                  sb.append("# the HOCON format has no way to list multiple root objects in a single file\n");
              }
          }
  
          List<AbstractConfigValue> reversed = new ArrayList<AbstractConfigValue>();
          reversed.addAll(stack);
          Collections.reverse(reversed);
  
          int i = 0;
          for (AbstractConfigValue v : reversed) {
              if (commentMerge) {
                  indent(sb, indent, options);
                  if (atKey != null) {
                      sb.append("#     unmerged value " + i + " for key "
                              + ConfigImplUtil.renderJsonString(atKey) + " from ");
                  } else {
                      sb.append("#     unmerged value " + i + " from ");
                  }
                  i += 1;
                  sb.append(v.origin().description());
                  sb.append("\n");
  
                  for (String comment : v.origin().comments()) {
                      indent(sb, indent, options);
                      sb.append("# ");
                      sb.append(comment);
                      sb.append("\n");
                  }
              }
              indent(sb, indent, options);
  
              if (atKey != null) {
                  sb.append(ConfigImplUtil.renderJsonString(atKey));
                  if (options.getFormatted())
                      sb.append(" : ");
                  else
                      sb.append(":");
              }
              v.render(sb, indent, atRoot, options);
              sb.append(",");
              if (options.getFormatted())
                  sb.append('\n');
          }
          // chop comma or newline
          sb.setLength(sb.length() - 1);
          if (options.getFormatted()) {
              sb.setLength(sb.length() - 1); // also chop comma
              sb.append("\n"); // put a newline back
          }
          if (commentMerge) {
              indent(sb, indent, options);
              sb.append("# ) end of unresolved merge\n");
          }
      }