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

import java.util.List;
public class __2F_INCLUDES_TESTS_2F_xml_2D_jsp_2F_most_2D_tags_2D_xml_2D_jsp_2E_jsp extends javax.servlet.http.HttpServlet{
public String myFunc() { return "myfunc"; }

public String myFunc2() { return "myfunc"; }

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 consec1 = "test";
String consec2 = "two";
out.print(""+
myFunc()
);
out.print(""+
myFunc2()
);
javax.swing.AbstractButton jb = new javax.swing.JButton();
String includedString = "incd";
   jb. 
{ // <logic:iterate>
} // </logic:iterate>
 } catch (java.lang.Exception e) {} 
}}