@SuppressWarnings("unchecked")
  private void checkValidFeedBackMove(VerifyMove verifyMove){
    /**
     * Legal Move should be (assume lastMoveId is wId)
     * Case A: the game is not finished.
     * 1 add(new SetTurn(bId))
     * 2 add(new Set(CURRENTMOVE,GUESS))
     * 3 add(new Set(FEEDBACKHISTORY,x+feedback)), where x is FEEDBACKHISTORY and feedback is not 
     *   checked now. However the format should be "nbmw", where n+m <= 4
     * Case B: current game is end and verification should be done. Coder uncover the code and let
     * guesser do verification next move.
     * 1 add (new SetTurn(wId))
     * 2 add(new Set(CURRENTMOVE,VERIFY))
     * 3 add (new Set(FEEDBACKHISTORY, x+feedback), where x is FEEDBACKHISTORY and entire feedback 
     *   is checked now.
     * 4 add (new SetVisibility(CODE,ImmutableList.of(bId))
     * 
     */
    List<Operation> lastMove = verifyMove.getLastMove();
    Map<String, Object> lastState = verifyMove.getLastState();
    String coderId = verifyMove.getLastMovePlayerId();
    List<String> ids = verifyMove.getPlayerIds();
    String guesserId = getOtherPlayerId(ids,coderId);
    int currentTurn = (Integer)lastState.get(CURRENTTURN);
    int maxTurn = (Integer)lastState.get(MAXTURN);
    
    
    List<String> feedbackHistory = (List<String>)(((Set)lastMove.get(2)).getValue());
    String feedback = feedbackHistory.get(feedbackHistory.size()-1);
    check(feedback.length() == (Integer)lastState.get(CODELENGTH));
    check(checkValidFeedback(feedback));
    
    List<Operation> feedbackMove = getFeedbackOperationContinue(coderId, guesserId, feedback,
        lastState);
    if (currentTurn < maxTurn && !feedback.equals("4b0w")){
      //Nothing change for defaultfeedbackMove
    } else {
      feedbackMove = getFeedbackOperationVerify(coderId, guesserId, feedback,
          lastState);
      //Verify previous feedback
    } 
    check(lastMove.equals(feedbackMove),feedbackMove,lastMove);
  }