public Object evaluate(Context c, HashMap map, DataFactory factory) {
		IVPBoolean b = (IVPBoolean) ((DataObject)map.get(flowConditionID)).evaluate(c, map, factory);
		Function f = (Function) map.get(c.getFunctionID());
		if (c.getBoolean(b.getUniqueID())) {
			for (int i = 0; i < children.size(); i += 1) {
				DataObject component = (DataObject) map.get(children.get(i));
				if(component instanceof Return){
					DataObject returnedElement = (DataObject) component.evaluate(c, map, factory);
					f.setFunctionReturnedElementID(returnedElement.getUniqueID());
					f.setReturning(true);
					return returnedElement;
				}else if(f.isReturning()){
					return IVPValue.NULL;
				}
				component.evaluate(c, map, factory);
			}
		} else {
			for (int i = 0; i < elseChildren.size(); i += 1) {
				DataObject component = (DataObject) map.get(elseChildren.get(i));
				if(component instanceof Return){
					DataObject returnedElement = (DataObject) component.evaluate(c, map, factory);
					f.setFunctionReturnedElementID(returnedElement.getUniqueID());
					f.setReturning(true);
					return returnedElement;
				}else if(f.isReturning()){
					return IVPValue.NULL;
				}
				component.evaluate(c, map, factory);
			}
		}
		return null;
	}