code: func mergeCCCall(invocChain []*fab.ChaincodeCall, respCCCall *fab.ChaincodeCall) (*fab.ChaincodeCall, bool) {
  	ccCall, ok := getCCCall(invocChain, respCCCall.ID)
  	if ok {
  		logger.Debugf("Already have chaincode [%s]. Checking to see if any private data collections were detected in the proposal response", respCCCall.ID)
  		c, merged := merge(ccCall, respCCCall)
  		if merged {
  			logger.Debugf("Modifying chaincode call for chaincode [%s] since additional private data collections were detected in the RW set", respCCCall.ID)
  		} else {
  			logger.Debugf("No additional private data collections were detected for chaincode [%s]", respCCCall.ID)
  		}
  		return c, merged
  	}
  
  	logger.Debugf("Detected chaincode [%s] in the RW set of the proposal response that was not part of the original invocation chain", respCCCall.ID)
  	return respCCCall, true
  }
docs: // mergeCCCall checks if the provided invocation chain contains the given Chaincode Call.
  // - If the invocation chain does not contain the chaincode call then return (respCCCall,true)
  // - If the invocation chain contains the chaincode call but the collection sets are different, then return (mergedCCCall,true)
  // - If the invocation chain contains the chaincode call and the collection sets are the same, then return (respCCCall,false)