// $ANTLR start "ruleModel"
  // PsiInternalBug289524TestLanguage.g:65:1: ruleModel returns [Boolean current=false] : ( ()
  // otherlv_1= 'Model' ( (lv_refs_2_0= ruleModelElement ) )* ) ;
  public final Boolean ruleModel() throws RecognitionException {
    Boolean current = false;

    Token otherlv_1 = null;
    Boolean lv_refs_2_0 = null;

    try {
      // PsiInternalBug289524TestLanguage.g:66:1: ( ( () otherlv_1= 'Model' ( (lv_refs_2_0=
      // ruleModelElement ) )* ) )
      // PsiInternalBug289524TestLanguage.g:67:2: ( () otherlv_1= 'Model' ( (lv_refs_2_0=
      // ruleModelElement ) )* )
      {
        // PsiInternalBug289524TestLanguage.g:67:2: ( () otherlv_1= 'Model' ( (lv_refs_2_0=
        // ruleModelElement ) )* )
        // PsiInternalBug289524TestLanguage.g:68:3: () otherlv_1= 'Model' ( (lv_refs_2_0=
        // ruleModelElement ) )*
        {
          // PsiInternalBug289524TestLanguage.g:68:3: ()
          // PsiInternalBug289524TestLanguage.g:69:4:
          {
            if (state.backtracking == 0) {

              /* */

            }
            if (state.backtracking == 0) {

              precedeComposite(elementTypeProvider.getModel_ModelAction_0ElementType());
              doneComposite();
              associateWithSemanticElement();
            }
          }

          if (state.backtracking == 0) {

            markLeaf(elementTypeProvider.getModel_ModelKeyword_1ElementType());
          }
          otherlv_1 = (Token) match(input, 11, FollowSets000.FOLLOW_3);
          if (state.failed) return current;
          if (state.backtracking == 0) {

            doneLeaf(otherlv_1);
          }
          // PsiInternalBug289524TestLanguage.g:85:3: ( (lv_refs_2_0= ruleModelElement ) )*
          loop1:
          do {
            int alt1 = 2;
            int LA1_0 = input.LA(1);

            if ((LA1_0 == 12 || LA1_0 == 14)) {
              alt1 = 1;
            }

            switch (alt1) {
              case 1:
                // PsiInternalBug289524TestLanguage.g:86:4: (lv_refs_2_0= ruleModelElement )
                {
                  // PsiInternalBug289524TestLanguage.g:86:4: (lv_refs_2_0= ruleModelElement )
                  // PsiInternalBug289524TestLanguage.g:87:5: lv_refs_2_0= ruleModelElement
                  {
                    if (state.backtracking == 0) {

                      markComposite(
                          elementTypeProvider
                              .getModel_RefsModelElementParserRuleCall_2_0ElementType());
                    }
                    pushFollow(FollowSets000.FOLLOW_3);
                    lv_refs_2_0 = ruleModelElement();

                    state._fsp--;
                    if (state.failed) return current;
                    if (state.backtracking == 0) {

                      doneComposite();
                      if (!current) {
                        associateWithSemanticElement();
                        current = true;
                      }
                    }
                  }
                }
                break;

              default:
                break loop1;
            }
          } while (true);
        }
      }

    } catch (RecognitionException re) {
      reportError(re);
      recover(input, re);
    } finally {
    }
    return current;
  }