code: def _ValidateFSM(self):
      
  
      # Must have 'Start' state.
      if 'Start' not in self.states:
        raise TextFSMTemplateError("Missing state 'Start'.")
  
      # 'End/EOF' state (if specified) must be empty.
      if self.states.get('End'):
        raise TextFSMTemplateError("Non-Empty 'End' state.")
  
      if self.states.get('EOF'):
        raise TextFSMTemplateError("Non-Empty 'EOF' state.")
  
      # Remove 'End' state.
      if 'End' in self.states:
        del self.states['End']
        self.state_list.remove('End')
  
      # Ensure jump states are all valid.
      for state in self.states:
        for rule in self.states[state]:
          if rule.line_op == 'Error':
            continue
  
          if not rule.new_state or rule.new_state in ('End', 'EOF'):
            continue
  
          if rule.new_state not in self.states:
            raise TextFSMTemplateError(
                "State '%s' not found, referenced in state '%s'" %
                (rule.new_state, state))
  
      return True
docs: Checks state names and destinations for validity.
  
      Each destination state must exist, be a valid name and
      not be a reserved name.
      There must be a 'Start' state and if 'EOF' or 'End' states are specified,
      they must be empty.
  
      Returns:
        True if FSM is valid.
  
      Raises:
        TextFSMTemplateError: If any state definitions are invalid.