public String runMacro(HTTPRequest httpReq, String parm)
	{
		final String last=httpReq.getUrlParameter("COMPONENT");
		if(last==null)
			return " @break@";
		if(last.length()>0)
		{
			final String fixedCompID=last.replace(' ','_').toUpperCase();
			final List<AbilityComponent> set=new Vector<AbilityComponent>();
			int posDex=1;
			while(httpReq.isUrlParameter(fixedCompID+"_PIECE_CONNECTOR_"+posDex) && httpReq.getUrlParameter(fixedCompID+"_PIECE_CONNECTOR_"+posDex).trim().length()>0)
			{
				final String mask=httpReq.getUrlParameter(fixedCompID+"_PIECE_MASK_"+posDex);
				final String str=httpReq.getUrlParameter(fixedCompID+"_PIECE_STRING_"+posDex);
				final String amt=httpReq.getUrlParameter(fixedCompID+"_PIECE_AMOUNT_"+posDex);
				final String conn=httpReq.getUrlParameter(fixedCompID+"_PIECE_CONNECTOR_"+posDex);
				final String loc=httpReq.getUrlParameter(fixedCompID+"_PIECE_LOCATION_"+posDex);
				final String type=httpReq.getUrlParameter(fixedCompID+"_PIECE_TYPE_"+posDex);
				final String consumed=httpReq.getUrlParameter(fixedCompID+"_PIECE_CONSUMED_"+posDex);
				if(!conn.equalsIgnoreCase("DELETE"))
				{
					final AbilityComponent able=(AbilityComponent)CMClass.getCommon("DefaultAbilityComponent");
					able.setAmount(CMath.s_int(amt));
					if(posDex==1)
						able.setConnector(AbilityComponent.CompConnector.AND);
					else
						able.setConnector(AbilityComponent.CompConnector.valueOf(conn));
					able.setConsumed((consumed!=null)&&(consumed.equalsIgnoreCase("on")||consumed.equalsIgnoreCase("checked")));
					able.setLocation(AbilityComponent.CompLocation.valueOf(loc));
					able.setMask(mask);
					able.setType(AbilityComponent.CompType.valueOf(type), str);
					set.add(able);
				}
				posDex++;
			}

			if(CMLib.ableComponents().getAbilityComponentMap().containsKey(last.toUpperCase().trim()))
			{
				final List<AbilityComponent> xset=CMLib.ableComponents().getAbilityComponentMap().get(last.toUpperCase().trim());
				xset.clear();
				xset.addAll(set);
			}
			else
				CMLib.ableComponents().getAbilityComponentMap().put(last.toUpperCase().trim(),set);
			CMLib.ableComponents().alterAbilityComponentFile(last.toUpperCase().trim(),false);
		}
		return "";
	}