code: func NewBundle(channelID string, config *cb.Config) (*Bundle, error) {
  	if err := preValidate(config); err != nil {
  		return nil, err
  	}
  
  	channelConfig, err := NewChannelConfig(config.ChannelGroup)
  	if err != nil {
  		return nil, errors.Wrap(err, "initializing channelconfig failed")
  	}
  
  	policyProviderMap := make(map[int32]policies.Provider)
  	for pType := range cb.Policy_PolicyType_name {
  		rtype := cb.Policy_PolicyType(pType)
  		switch rtype {
  		case cb.Policy_UNKNOWN:
  			// Do not register a handler
  		case cb.Policy_SIGNATURE:
  			policyProviderMap[pType] = cauthdsl.NewPolicyProvider(channelConfig.MSPManager())
  		case cb.Policy_MSP:
  			// Add hook for MSP Handler here
  		}
  	}
  
  	policyManager, err := policies.NewManagerImpl(RootGroupKey, policyProviderMap, config.ChannelGroup)
  	if err != nil {
  		return nil, errors.Wrap(err, "initializing policymanager failed")
  	}
  
  	configtxManager, err := configtx.NewValidatorImpl(channelID, config, RootGroupKey, policyManager)
  	if err != nil {
  		return nil, errors.Wrap(err, "initializing configtx manager failed")
  	}
  
  	return &Bundle{
  		policyManager:   policyManager,
  		channelConfig:   channelConfig,
  		configtxManager: configtxManager,
  	}, nil
  }
docs: // NewBundle creates a new immutable bundle of configuration