private static boolean areAttributesEqual(
    @NotNull List<Attribute> l1,
    @NotNull List<Attribute> l2,
    @NotNull Element base,
    @NotNull List<MergeAttribute> mergeByAttributes
  ) {
    Set<String> attributes = new HashSet<>();
    for (MergeAttribute mergeByAttribute : mergeByAttributes) {
      if (mergeByAttribute.elementName.equals(base.getName())) {
        attributes.add(mergeByAttribute.attributeName);
      }
    }
    if (attributes.isEmpty()) {
      return isAttributesEqual(l1, l2, false);
    }

    Map<String, String> secondMap = new HashMap<>();
    for (Attribute attribute : l2) {
      if (secondMap.put(attribute.getName(), attribute.getValue()) != null) {
        throw new IllegalStateException("Duplicate key");
      }
    }
    for (Attribute o : l1) {
      if (attributes.contains(o.getName()) && !o.getValue().equals(secondMap.get(o.getName()))) {
        return false;
      }
    }
    return true;
  }
private static boolean areAttributesEqual(
    @NotNull List<Attribute> l1,
    @NotNull List<Attribute> l2,
    @NotNull Element base,
    @NotNull List<MergeAttribute> mergeByAttributes
  )