import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

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

 public String globalIncludedString = "included";

 protected String with_space = "withspace";

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.ServletContext application = null;
javax.servlet.ServletConfig config = null;
javax.servlet.jsp.JspWriter out = null;
Object page = null;
javax.servlet.http.HttpSession session = null;

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