// Code generated by gocode.Generate; DO NOT EDIT.

package filetypes

import (
	"fmt"

	"cuelang.org/go/encoding/gocode/gocodec"
	"cuelang.org/go/internal/legacy/cue"
)

var cuegenCodec, cuegenInstance = func() (*gocodec.Codec, *cue.Instance) {
	var r *cue.Runtime
	r = &cue.Runtime{}
	instances, err := r.Unmarshal(cuegenInstanceData)
	if err != nil {
		panic(err)
	}
	if len(instances) != 1 {
		panic("expected encoding of exactly one instance")
	}
	return gocodec.New(r, nil), instances[0]
}()

// cuegenMake is called in the init phase to initialize CUE values for
// validation functions.
func cuegenMake(name string, x interface{}) cue.Value {
	f, err := cuegenInstance.LookupField(name)
	if err != nil {
		panic(fmt.Errorf("could not find type %q in instance", name))
	}
	v := f.Value
	if x != nil {
		w, err := cuegenCodec.ExtractType(x)
		if err != nil {
			panic(err)
		}
		v = v.Unify(w)
	}
	return v
}

// Data size: 1131 bytes.
var cuegenInstanceData = []byte("\x01\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xd4W_\x8b\xe4D\x10O\u03eeb7\xa7\xe8\a\x10b\x16\x8es\xc0y\x15\x06\x8e}9\x0f\xeeE\xc4\xd7\xe5Xz\x93N6^&\x1d\x92\x8e\xec\xe2\u0383z\x9e~Y\xbf\u008dTW\xffIw2w\xee\u0081\xce\xcbn~\xd5\xf5\xbf\xaa\xbb\xea\xd3\u00df+\xb2:\xfc\x95\x90\xc3oI\xf2\xed\xe1\xd7\x13B\x1e\xd5\xed\xa0x\x9b\x8bg\\q\xc0\xc9\t9\xfdQJEV\t9\xfd\x81\xabk\xf2(!\x1f=\xaf\x1b1\x90\u00db$I\xbe<\xfc\xb1\"\u4ccb\x97\xf9(6e\xdd\x18\xce7\t9\xbcN\x92'\x87\xdfO\b\xf9\xc4\xe3\xaf\x13\xb2\"\xa7\xdf\xf3\x9d\x00A\xa7\x1adI\x92\xbc\xfd\xe2c\xb0\x84\x90\x15!T\xddvb\xd8\xe4\xa3 o?\xff\xbb\xe3\xf9+^\x89\xf4j\xac\x9b\x82\xb13\u043dM\u007fa\x14\x84\xb6|'\xb6\xa9\xf9\r\xaa\xaf\u06caQ\xd1\u6ca8\xdb\xca\x11\u03be3\b\xa3u\xabD\xdf\xf5BqU\xcb\xf6|\x9b\x9e\xbd\b\x10FK\xd9\xef\xce\x1d+p?\x97\xfd\x8eQ\u016b\xe1\\+\xa6\x17\xa8\xe9\xe5\u05a9\u0733=sZ,\xf3WO\xb3\x8cE\xf2\x1d\x8b\x96:UcpP\xa3\xb5(q\xa3P\x9d\xf7'\x030cT\x1b\x89\xccY\xc1\x15\xcf\xc0\x02\n\xff!\a\x92'\xa4|\x143Y\xf9(\x908\xe4\xd7b\x17r\"\x84\xe4\x9f\x060;b\x06\u0413\x9bEz\x83\an\xf9nN\a\x10\u0255\x8c\x89\xf8\xcbrY\x80\x81Q\u02b6i\x06\xa0\v\x13\xa5\r\xd7\x12+\t\xf8^\xcb\xecz\xa9fb3\x8d\x1a\xa5=\xef\xae\x03\x8f5b\xe3XEa\xacL\x14e1\v\u30cc\xb5ec\xcc\xe5\xe3\xdcZ\xfc\xad1\xd0\xe9]z\xb9$\x1c\x18}\x16\xa6y\xbc\xa7 \u03ce\xe2d'Z\xde\xd5\x0f\x92ex3\xd3\x15\xcfD\xc9\xc7FmS\u0779\xe9\xe3\xb0u\xd7\xd97 \xc8\x04d\x8f\xed\xfd\xa2-1\x1eX\xd1\xf6\xb7V\xfd(\u04bb\xb4\xe4\xcd \x18\xedE)z\xd1\xe6b\xd8\u0389\xf9m\xde a\x81\xb3\x10e\xdd\xd6`.\x9c\xb8\x92\xb2\x01\x8f\xe1\x9b7\u0202X.\xdbA\xf5\xbcn\x95?\xf7J\x88\u03b84l\rV\xb7\xb9\xdcu\x8dP\xfa.2\u062e\x93\xbd\xb2\x16 6\xa8^p\xd7\xf4\x88\x152\x1f\xbc\x8b\x88q\xa5\xfa\xfajT\xe8\x00b:0l\xcfv\xb2\x10XLu\u06cd\xe6\x86\xf0A\xd6E\xe6\x13\xb6\xd6]n2E7\x9b\r\xd6\x1c\r\xc3L\x03+\xa2`\xd1\xc0\x9c\x19\xd1\u02f4Zm\xa9\xbb;\x87\xd25t\u04b0\xc1\n\xb3\xd6\xec-\u07cd\x12\xed\x80\xc9\xd0\u01f3\x8d\xae/\xcb\x1c\x17\xd8\x1a\xcb>\x10\x83e\x05\xac\xfaby \xeb=9u\x81#\xbb\xb8\x81l\xbf7\x19\u04fe\xf9\x97\xd90\xf1^/fcF\xbcO6\xa0\xb9\x8e\xf9#\xc7N\xb9\xe2\xfa\xcfY'~\xe6\xcd\a(\xfc\x0f\xe7LY\xb7\xbc9\xe6M!\xca\xff\u007f\x17\xc3U\x1f\xb2:F{\xeb\x19e\xceo?WL\xefE\fpz\xa7\x03\xceB\x9f\xac\xb9SW,\xe6\xabf\xa2\u008f\x1e\x81\x11\x90G#\x1e\xd9\xf4\xe3\x1f\x99\x161\x06\xe7#5~T\x8b|=r\\.Zu\xec\xf8\xbb\x87\x19:M\u0284\xcb\xcf*\xcbJ&\fL#\xfa\xf0\x05L\xe6O\xddx\xeb\n\xccJ\u0372mzi?\xe6s\xa3{\xa9\xed\x00\x99\u07a5\x99.~\xfd\x9f\x9d\xb1\xa2\a8\xae\xc6\xf0)~\x12\x90\xbfN\x1f\xc7\b\xa3\xd1C\x1d\xcb\v\x9f\xec\x98\x1a>\xde3j\xf0\x8c\xc7\xd4\xf0A\x8f\xae\b\x97\n\x1d\x80\xa50\x99\xd0\xcc\\^6\xfch\xfeP\xcbl\xa4\xf5\xc9\xc0\xb8C\x06`\x94\u017fz3\x88\x06,\xdbrAv\x96\xb3b\xd10\xf2\xef6<\x8c\xf4r\x84\xe3\xd8E\xb3\xb8^\xaa\\\x19\xd9!/\x8cL\xdc\xcc\xf1Z\xe4\xb73\x1c\xec\xc3A\xd296\x1d \x17c\xb0\x18\x82E\xaf\xe2\xf66\vc4\xf8@o\x99\xdf%\xf3CP\x9a\xc2\xfa\xa0\xbf\x98\x9fo\f\n_\u030d.1\n\xaf\x86GsH.\x8a\u0547\x9dX}\xb6)\x8c\xbe\x10n\x97au\xa3&\x92\xe1\xfe\x03\xb4\x92\xc6\x05\x8dV\x120\xbc\xa7\xac:\xfd\x057\x8e^\xe2\xdd\xf5\x12o\x05Y)\xe5\u01ac\x98\x93U\xd7n({\x16\x8eg\x0f\xb8\xbb\xfc\xcau\xa4\x9d\x8e/T\xe1\x18w\x84\xfd\xc8\x02\xf5\x1e^\x96$\xff\x04\x00\x00\xff\xff^\x83Y\u0756\x11\x00\x00")
