public class  extends javax.servlet.http.HttpServlet{
 String argh = "argh"; 

 protected String with_space = "withspace";

 public String globalIncludedString = "included";

public void _jspService(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
		throws java.io.IOException, javax.servlet.ServletException {
javax.servlet.jsp.PageContext pageContext = null;
javax.servlet.http.HttpSession session = null;
javax.servlet.ServletContext application = null;
javax.servlet.ServletConfig config = null;
javax.servlet.jsp.JspWriter out = null;
Object page = null;

try {
 int include_include_int = 5; 
javax.swing.JButton includesUseBean = new javax.swing.JButton();
 String localIncludedString = globalIncludedString;
for(int i=0; i<5; i++) {
}
javax.swing.JButton BEAN_includedBean = new javax.swing.JButton();
out.print(""+
i
);
out.print(""+
   
);
 } catch (java.lang.Exception e) {} 
}}