func (c *CTypes) Names() []string {
	if c.types == nil || len(c.types) == 0 {
		c.build()
	}
	keys := make([]string, len(c.types))
	keyIndex := 0
	for k := range c.types {
		keys[keyIndex] = k
		keyIndex++
	}
	return keys
}
Names returns a list of the names in NameToContractType
package contractspecs
import (
	"sync"
)
const (
	InvalidContractType ContractType = iota
	CivilTcrContractType
	NewsroomContractType
	CivilPLCRVotingContractType
	CVLTokenContractType
	CivilParameterizerContractType
	CivilGovernmentContractType
	MultiSigWalletContractType
	MultiSigWalletFactoryContractType
	NewsroomFactoryType
)
type ContractSpecs struct {
	name        string
	simpleName  string
	abiStr      string
	importPath  string
	typePackage string
}
func (c *ContractSpecs) Name() string {
	return c.name
}
func (c *ContractSpecs) SimpleName() string {
	return c.simpleName
}
func (c *ContractSpecs) AbiStr() string {
	return c.abiStr
}
func (c *ContractSpecs) ImportPath() string {
	return c.importPath
}
func (c *ContractSpecs) TypePackage() string {
	return c.typePackage
}
type CSpecs struct {
	specs map[ContractType]*ContractSpecs
}
func (c *CSpecs) Get(t ContractType) (*ContractSpecs, bool) {
	specs, ok := c.specs[t]
	return specs, ok
}
func (c *CSpecs) Types() []ContractType {
	types := make([]ContractType, len(c.specs))
	index := 0
	for k := range c.specs {
		types[index] = k
		index++
	}
	return types
}
type ContractType int
type CTypes struct {
	types            map[string]ContractType
	simpleNameToName map[string]string
	mutex            sync.Mutex
}
func (c *CTypes) Get(name string) (ContractType, bool) {
	if c.types == nil || len(c.types) == 0 {
		c.build()
	}
	_type, ok := c.types[name]
	return _type, ok
}