CRM_DEV_ASSERT(compare_version(CIB_FEATURE_SET, feature_sets[num_sets-1]) == 0);
internal_update_feature_set(crm_data_t *xml_obj, int current){	int lpc = current;	int lpc_nested = 0;	const char *value = NULL;	int num_sets = DIMOF(feature_sets);	for(;lpc < num_sets; lpc++) {					const char *tag = crm_element_name(xml_obj);		crm_debug_3("Checking set %d with %d tags", lpc,			  feature_tags[lpc].length);				lpc_nested = 0;		for(; lpc_nested < feature_tags[lpc].length; lpc_nested++) {			const char *name = feature_tags[lpc].tags[lpc_nested];			crm_debug_4("Checking %s vs. %s", tag, name);			if(safe_str_eq(tag, name)) {				crm_err("Found feature %s from set %s",					tag, feature_sets[lpc]);				current = lpc;				break;			}		}		if(current == lpc) {			continue;		}		lpc_nested = 0;		for(; lpc_nested < feature_attrs[lpc].length; lpc_nested++) {			const char *name = feature_attrs[lpc].tags[lpc_nested];			crm_debug_4("Checking for %s", name);			value = crm_element_value(xml_obj, name);			if(value != NULL) {				crm_err("Found feature %s from set %s",					name, feature_sets[lpc]);				current = lpc;				break;			}		}	}	if(current == (num_sets -1)) {		return current;	}		xml_child_iter(xml_obj, xml_child, NULL,		       current = internal_update_feature_set(xml_child,current);		       if(current == (num_sets -1)) {			       return current;		       }		);	return current;	}