// This file is automatically generated by Demeter/Java.

SubgraphVisitor {
  (@
    private java.util.Stack history = new java.util.Stack();
    public SubgraphVisitor(Object obj) {
      history.push(obj);
    }
  @)

  before -> S, service, Service (@
    if (is_equal) {
      S obj = (S) history.peek();
      Object temp1 = obj.get_service();
      if(temp1==null) { is_equal = false; return; }
      history.push(temp1);
    }
  @)
  after -> S, service, Service (@
    if (is_equal) history.pop();
  @)

  before S (@
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  @)

  before Service (@
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  @)

  before -> Basic_Service, address, Address (@
    if (is_equal) {
      Basic_Service obj = (Basic_Service) history.peek();
      Object temp2 = obj.get_address();
      if(temp2==null) { is_equal = false; return; }
      history.push(temp2);
    }
  @)
  after -> Basic_Service, address, Address (@
    if (is_equal) history.pop();
  @)

  before Basic_Service (@
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  @)

  before -> Sequential_Execution, first, S (@
    if (is_equal) {
      Sequential_Execution obj = (Sequential_Execution) history.peek();
      Object temp3 = obj.get_first();
      if(temp3==null) { is_equal = false; return; }
      history.push(temp3);
    }
  @)
  after -> Sequential_Execution, first, S (@
    if (is_equal) history.pop();
  @)

  before -> Sequential_Execution, second, S (@
    if (is_equal) {
      Sequential_Execution obj = (Sequential_Execution) history.peek();
      Object temp4 = obj.get_second();
      if(temp4==null) { is_equal = false; return; }
      history.push(temp4);
    }
  @)
  after -> Sequential_Execution, second, S (@
    if (is_equal) history.pop();
  @)

  before Sequential_Execution (@
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  @)

  before Address (@
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp5 = host.get_string();
    Object temp6 = ((Address) obj).get_string();
    if(temp5 == null && temp6 == null) {}
    else if(temp5 == null ||
            temp6 == null ||
            !temp5.equals(temp6)) { is_equal = false; return; }
  @)

  before -> Repeatition, repeat, S (@
    if (is_equal) {
      Repeatition obj = (Repeatition) history.peek();
      Object temp7 = obj.get_repeat();
      if(temp7==null) { is_equal = false; return; }
      history.push(temp7);
    }
  @)
  after -> Repeatition, repeat, S (@
    if (is_equal) history.pop();
  @)

  before Repeatition (@
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  @)

  before -> Time_Limit, time, Time (@
    if (is_equal) {
      Time_Limit obj = (Time_Limit) history.peek();
      Object temp8 = obj.get_time();
      if(temp8==null) { is_equal = false; return; }
      history.push(temp8);
    }
  @)
  after -> Time_Limit, time, Time (@
    if (is_equal) history.pop();
  @)

  before -> Time_Limit, on, Block (@
    if (is_equal) {
      Time_Limit obj = (Time_Limit) history.peek();
      Object temp9 = obj.get_on();
      if(temp9==null) { is_equal = false; return; }
      history.push(temp9);
    }
  @)
  after -> Time_Limit, on, Block (@
    if (is_equal) history.pop();
  @)

  before Time_Limit (@
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  @)

  before Time (@
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    is_equal = is_equal && host.get_l() == ((Time) obj).get_l();
  @)

  before Block (@
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  @)

  before Stall (@
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  @)

  before -> Concurrent_Execution, main, S (@
    if (is_equal) {
      Concurrent_Execution obj = (Concurrent_Execution) history.peek();
      Object temp10 = obj.get_main();
      if(temp10==null) { is_equal = false; return; }
      history.push(temp10);
    }
  @)
  after -> Concurrent_Execution, main, S (@
    if (is_equal) history.pop();
  @)

  before -> Concurrent_Execution, thread, S (@
    if (is_equal) {
      Concurrent_Execution obj = (Concurrent_Execution) history.peek();
      Object temp11 = obj.get_thread();
      if(temp11==null) { is_equal = false; return; }
      history.push(temp11);
    }
  @)
  after -> Concurrent_Execution, thread, S (@
    if (is_equal) history.pop();
  @)

  before Concurrent_Execution (@
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  @)

  before -> Visitor, rv, RepeatCheckingVisitor (@
    if (is_equal) {
      Visitor obj = (Visitor) history.peek();
      Object temp12 = obj.get_rv();
      if(temp12==null) { is_equal = false; return; }
      history.push(temp12);
    }
  @)
  after -> Visitor, rv, RepeatCheckingVisitor (@
    if (is_equal) history.pop();
  @)

  before -> Visitor, lv, LimitCheckingVisitor (@
    if (is_equal) {
      Visitor obj = (Visitor) history.peek();
      Object temp13 = obj.get_lv();
      if(temp13==null) { is_equal = false; return; }
      history.push(temp13);
    }
  @)
  after -> Visitor, lv, LimitCheckingVisitor (@
    if (is_equal) history.pop();
  @)

  before Visitor (@
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    is_equal = is_equal && host.get_date() == ((Visitor) obj).get_date();
    Object temp14 = host.get_page();
    Object temp15 = ((Visitor) obj).get_page();
    if(temp14 == null && temp15 == null) {}
    else if(temp14 == null ||
            temp15 == null ||
            !temp14.equals(temp15)) { is_equal = false; return; }
    Object temp16 = host.get_urlConn();
    Object temp17 = ((Visitor) obj).get_urlConn();
    if(temp16 == null && temp17 == null) {}
    else if(temp16 == null ||
            temp17 == null ||
            !temp16.equals(temp17)) { is_equal = false; return; }
    Object temp18 = host.get_stream();
    Object temp19 = ((Visitor) obj).get_stream();
    if(temp18 == null && temp19 == null) {}
    else if(temp18 == null ||
            temp19 == null ||
            !temp18.equals(temp19)) { is_equal = false; return; }
    is_equal = is_equal && host.get_next() == ((Visitor) obj).get_next();
    is_equal = is_equal && host.get_active() == ((Visitor) obj).get_active();
    Object temp20 = host.get_s();
    Object temp21 = ((Visitor) obj).get_s();
    if(temp20 == null && temp21 == null) {}
    else if(temp20 == null ||
            temp21 == null ||
            !temp20.equals(temp21)) { is_equal = false; return; }
    is_equal = is_equal && host.get_concurrent() == ((Visitor) obj).get_concurrent();
    Object temp22 = host.get_sequentialStack();
    Object temp23 = ((Visitor) obj).get_sequentialStack();
    if(temp22 == null && temp23 == null) {}
    else if(temp22 == null ||
            temp23 == null ||
            !temp22.equals(temp23)) { is_equal = false; return; }
    Object temp24 = host.get_concurrentStack();
    Object temp25 = ((Visitor) obj).get_concurrentStack();
    if(temp24 == null && temp25 == null) {}
    else if(temp24 == null ||
            temp25 == null ||
            !temp24.equals(temp25)) { is_equal = false; return; }
  @)

  before -> RepeatCheckingVisitor, lv, LimitCheckingVisitor (@
    if (is_equal) {
      RepeatCheckingVisitor obj = (RepeatCheckingVisitor) history.peek();
      Object temp26 = obj.get_lv();
      if(temp26==null) { is_equal = false; return; }
      history.push(temp26);
    }
  @)
  after -> RepeatCheckingVisitor, lv, LimitCheckingVisitor (@
    if (is_equal) history.pop();
  @)

  before -> RepeatCheckingVisitor, v, Visitor (@
    if (is_equal) {
      RepeatCheckingVisitor obj = (RepeatCheckingVisitor) history.peek();
      Object temp27 = obj.get_v();
      if(temp27==null) { is_equal = false; return; }
      history.push(temp27);
    }
  @)
  after -> RepeatCheckingVisitor, v, Visitor (@
    if (is_equal) history.pop();
  @)

  before RepeatCheckingVisitor (@
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    is_equal = is_equal && host.get_date() == ((RepeatCheckingVisitor) obj).get_date();
  @)

  before -> LimitCheckingVisitor, v, Visitor (@
    if (is_equal) {
      LimitCheckingVisitor obj = (LimitCheckingVisitor) history.peek();
      Object temp32 = obj.get_v();
      if(temp32==null) { is_equal = false; return; }
      history.push(temp32);
    }
  @)
  after -> LimitCheckingVisitor, v, Visitor (@
    if (is_equal) history.pop();
  @)

  before LimitCheckingVisitor (@
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    is_equal = is_equal && host.get_limitFlag() == ((LimitCheckingVisitor) obj).get_limitFlag();
    is_equal = is_equal && host.get_limit() == ((LimitCheckingVisitor) obj).get_limit();
    Object temp28 = host.get_date();
    Object temp29 = ((LimitCheckingVisitor) obj).get_date();
    if(temp28 == null && temp29 == null) {}
    else if(temp28 == null ||
            temp29 == null ||
            !temp28.equals(temp29)) { is_equal = false; return; }
    Object temp30 = host.get_limitStack();
    Object temp31 = ((LimitCheckingVisitor) obj).get_limitStack();
    if(temp30 == null && temp31 == null) {}
    else if(temp30 == null ||
            temp31 == null ||
            !temp30.equals(temp31)) { is_equal = false; return; }
  @)

  before TimeCheckingVisitor (@
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    is_equal = is_equal && host.get_flag() == ((TimeCheckingVisitor) obj).get_flag();
    is_equal = is_equal && host.get_time() == ((TimeCheckingVisitor) obj).get_time();
    is_equal = is_equal && host.get_pretime() == ((TimeCheckingVisitor) obj).get_pretime();
    is_equal = is_equal && host.get_condition() == ((TimeCheckingVisitor) obj).get_condition();
  @)

  before Main (@
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  @)

  before PrintVisitor (@
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    is_equal = is_equal && host.get_indent() == ((PrintVisitor) obj).get_indent();
    is_equal = is_equal && host.get_needSpace() == ((PrintVisitor) obj).get_needSpace();
  @)

  before CopyVisitor (@
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp33 = host.get_copy();
    Object temp34 = ((CopyVisitor) obj).get_copy();
    if(temp33 == null && temp34 == null) {}
    else if(temp33 == null ||
            temp34 == null ||
            !temp33.equals(temp34)) { is_equal = false; return; }
  @)

  before SubgraphVisitor (@
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    is_equal = is_equal && host.get_is_equal() == ((SubgraphVisitor) obj).get_is_equal();
  @)

  before EqualVisitor (@
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    is_equal = is_equal && host.get_is_equal() == ((EqualVisitor) obj).get_is_equal();
  @)

  before DisplayVisitor (@
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    is_equal = is_equal && host.get_indent() == ((DisplayVisitor) obj).get_indent();
  @)

  before TraceVisitor (@
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    is_equal = is_equal && host.get_indent() == ((TraceVisitor) obj).get_indent();
  @)

  before UniversalVisitor (@
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  @)

  return boolean (@ is_equal @)
}