code: @NonNull
      @Override
      public List<Card> parseGroup(@NonNull JSONArray data, @NonNull final ServiceManager serviceManager) {
          final CardResolver cardResolver = serviceManager.getService(CardResolver.class);
          Preconditions.checkState(cardResolver != null, "Must register CardResolver into ServiceManager first");
          final MVHelper cellResolver = serviceManager.getService(MVHelper.class);
          Preconditions.checkState(cellResolver != null, "Must register CellResolver into ServiceManager first");
          final int size = data.length();
          final List<Card> result = new ArrayList<>(size);
          for (int i = 0; i < size; i++) {
              JSONObject cardData = data.optJSONObject(i);
              final Card card = parseSingleGroup(cardData, serviceManager);
              if (card != null) {
                  if (card instanceof IDelegateCard) {
                      List<Card> cards = ((IDelegateCard) card).getCards(new CardResolver() {
                          @Override
                          public Card create(String type) {
                              Card c = cardResolver.create(type);
                              c.serviceManager = serviceManager;
                              c.id = card.id;
                              c.setStringType(type);
                              c.rowId = card.rowId;
                              return c;
                          }
                      });
                      for (Card c : cards) {
                          if (c.isValid()) {
                              result.add(c);
                          }
                      }
                  } else {
                      result.add(card);
                  }
              }
          }
          cellResolver.resolver().setCards(result);
          return result;
      }
docs: {@inheritDoc}