Tobias Cudnik пре 2 година
родитељ
комит
8dc59b60e1
1 измењених фајлова са 2273 додато и 0 уклоњено
  1. 2273 0
      models/mqtt_easyjson.go

+ 2273 - 0
models/mqtt_easyjson.go

@@ -0,0 +1,2273 @@
+// Code generated by easyjson for marshaling/unmarshaling. DO NOT EDIT.
+
+package models
+
+import (
+	json "encoding/json"
+	easyjson "github.com/mailru/easyjson"
+	jlexer "github.com/mailru/easyjson/jlexer"
+	jwriter "github.com/mailru/easyjson/jwriter"
+	wgtypes "golang.zx2c4.com/wireguard/wgctrl/wgtypes"
+	net "net"
+	netip "net/netip"
+	time "time"
+)
+
+// suppress unused package warning
+var (
+	_ *json.RawMessage
+	_ *jlexer.Lexer
+	_ *jwriter.Writer
+	_ easyjson.Marshaler
+)
+
+func easyjsonDa059d96DecodeGithubComGravitlNetmakerModels(in *jlexer.Lexer, out *HostPeerUpdate) {
+	isTopLevel := in.IsStart()
+	if in.IsNull() {
+		if isTopLevel {
+			in.Consumed()
+		}
+		in.Skip()
+		return
+	}
+	in.Delim('{')
+	for !in.IsDelim('}') {
+		key := in.UnsafeFieldName(false)
+		in.WantColon()
+		if in.IsNull() {
+			in.Skip()
+			in.WantComma()
+			continue
+		}
+		switch key {
+		case "host":
+			easyjsonDa059d96DecodeGithubComGravitlNetmakerModels1(in, &out.Host)
+		case "server":
+			out.Server = string(in.String())
+		case "serverversion":
+			out.ServerVersion = string(in.String())
+		case "serveraddrs":
+			if in.IsNull() {
+				in.Skip()
+				out.ServerAddrs = nil
+			} else {
+				in.Delim('[')
+				if out.ServerAddrs == nil {
+					if !in.IsDelim(']') {
+						out.ServerAddrs = make([]ServerAddr, 0, 2)
+					} else {
+						out.ServerAddrs = []ServerAddr{}
+					}
+				} else {
+					out.ServerAddrs = (out.ServerAddrs)[:0]
+				}
+				for !in.IsDelim(']') {
+					var v1 ServerAddr
+					easyjsonDa059d96DecodeGithubComGravitlNetmakerModels2(in, &v1)
+					out.ServerAddrs = append(out.ServerAddrs, v1)
+					in.WantComma()
+				}
+				in.Delim(']')
+			}
+		case "peers":
+			if in.IsNull() {
+				in.Skip()
+				out.NodePeers = nil
+			} else {
+				in.Delim('[')
+				if out.NodePeers == nil {
+					if !in.IsDelim(']') {
+						out.NodePeers = make([]wgtypes.PeerConfig, 0, 0)
+					} else {
+						out.NodePeers = []wgtypes.PeerConfig{}
+					}
+				} else {
+					out.NodePeers = (out.NodePeers)[:0]
+				}
+				for !in.IsDelim(']') {
+					var v2 wgtypes.PeerConfig
+					easyjsonDa059d96DecodeGolangZx2c4ComWireguardWgctrlWgtypes(in, &v2)
+					out.NodePeers = append(out.NodePeers, v2)
+					in.WantComma()
+				}
+				in.Delim(']')
+			}
+		case "Peers":
+			if in.IsNull() {
+				in.Skip()
+				out.Peers = nil
+			} else {
+				in.Delim('[')
+				if out.Peers == nil {
+					if !in.IsDelim(']') {
+						out.Peers = make([]wgtypes.PeerConfig, 0, 0)
+					} else {
+						out.Peers = []wgtypes.PeerConfig{}
+					}
+				} else {
+					out.Peers = (out.Peers)[:0]
+				}
+				for !in.IsDelim(']') {
+					var v3 wgtypes.PeerConfig
+					easyjsonDa059d96DecodeGolangZx2c4ComWireguardWgctrlWgtypes(in, &v3)
+					out.Peers = append(out.Peers, v3)
+					in.WantComma()
+				}
+				in.Delim(']')
+			}
+		case "hostpeerids":
+			if in.IsNull() {
+				in.Skip()
+			} else {
+				in.Delim('{')
+				out.HostPeerIDs = make(HostPeerMap)
+				for !in.IsDelim('}') {
+					key := string(in.String())
+					in.WantColon()
+					var v4 map[string]IDandAddr
+					if in.IsNull() {
+						in.Skip()
+					} else {
+						in.Delim('{')
+						v4 = make(map[string]IDandAddr)
+						for !in.IsDelim('}') {
+							key := string(in.String())
+							in.WantColon()
+							var v5 IDandAddr
+							easyjsonDa059d96DecodeGithubComGravitlNetmakerModels3(in, &v5)
+							(v4)[key] = v5
+							in.WantComma()
+						}
+						in.Delim('}')
+					}
+					(out.HostPeerIDs)[key] = v4
+					in.WantComma()
+				}
+				in.Delim('}')
+			}
+		case "proxy_update":
+			easyjsonDa059d96DecodeGithubComGravitlNetmakerModels4(in, &out.ProxyUpdate)
+		case "egress_info":
+			if in.IsNull() {
+				in.Skip()
+			} else {
+				in.Delim('{')
+				out.EgressInfo = make(map[string]EgressInfo)
+				for !in.IsDelim('}') {
+					key := string(in.String())
+					in.WantColon()
+					var v6 EgressInfo
+					easyjsonDa059d96DecodeGithubComGravitlNetmakerModels5(in, &v6)
+					(out.EgressInfo)[key] = v6
+					in.WantComma()
+				}
+				in.Delim('}')
+			}
+		case "ingress_info":
+			easyjsonDa059d96DecodeGithubComGravitlNetmakerModels6(in, &out.IngressInfo)
+		case "peerids":
+			if in.IsNull() {
+				in.Skip()
+			} else {
+				in.Delim('{')
+				out.PeerIDs = make(PeerMap)
+				for !in.IsDelim('}') {
+					key := string(in.String())
+					in.WantColon()
+					var v7 IDandAddr
+					easyjsonDa059d96DecodeGithubComGravitlNetmakerModels3(in, &v7)
+					(out.PeerIDs)[key] = v7
+					in.WantComma()
+				}
+				in.Delim('}')
+			}
+		case "host_network_info":
+			if in.IsNull() {
+				in.Skip()
+			} else {
+				in.Delim('{')
+				if !in.IsDelim('}') {
+					out.HostNetworkInfo = make(HostInfoMap)
+				} else {
+					out.HostNetworkInfo = nil
+				}
+				for !in.IsDelim('}') {
+					key := string(in.String())
+					in.WantColon()
+					var v8 HostNetworkInfo
+					easyjsonDa059d96DecodeGithubComGravitlNetmakerModels7(in, &v8)
+					(out.HostNetworkInfo)[key] = v8
+					in.WantComma()
+				}
+				in.Delim('}')
+			}
+		default:
+			in.SkipRecursive()
+		}
+		in.WantComma()
+	}
+	in.Delim('}')
+	if isTopLevel {
+		in.Consumed()
+	}
+}
+func easyjsonDa059d96EncodeGithubComGravitlNetmakerModels(out *jwriter.Writer, in HostPeerUpdate) {
+	out.RawByte('{')
+	first := true
+	_ = first
+	{
+		const prefix string = ",\"host\":"
+		out.RawString(prefix[1:])
+		easyjsonDa059d96EncodeGithubComGravitlNetmakerModels1(out, in.Host)
+	}
+	{
+		const prefix string = ",\"server\":"
+		out.RawString(prefix)
+		out.String(string(in.Server))
+	}
+	{
+		const prefix string = ",\"serverversion\":"
+		out.RawString(prefix)
+		out.String(string(in.ServerVersion))
+	}
+	{
+		const prefix string = ",\"serveraddrs\":"
+		out.RawString(prefix)
+		if in.ServerAddrs == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 {
+			out.RawString("null")
+		} else {
+			out.RawByte('[')
+			for v9, v10 := range in.ServerAddrs {
+				if v9 > 0 {
+					out.RawByte(',')
+				}
+				easyjsonDa059d96EncodeGithubComGravitlNetmakerModels2(out, v10)
+			}
+			out.RawByte(']')
+		}
+	}
+	{
+		const prefix string = ",\"peers\":"
+		out.RawString(prefix)
+		if in.NodePeers == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 {
+			out.RawString("null")
+		} else {
+			out.RawByte('[')
+			for v11, v12 := range in.NodePeers {
+				if v11 > 0 {
+					out.RawByte(',')
+				}
+				easyjsonDa059d96EncodeGolangZx2c4ComWireguardWgctrlWgtypes(out, v12)
+			}
+			out.RawByte(']')
+		}
+	}
+	{
+		const prefix string = ",\"Peers\":"
+		out.RawString(prefix)
+		if in.Peers == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 {
+			out.RawString("null")
+		} else {
+			out.RawByte('[')
+			for v13, v14 := range in.Peers {
+				if v13 > 0 {
+					out.RawByte(',')
+				}
+				easyjsonDa059d96EncodeGolangZx2c4ComWireguardWgctrlWgtypes(out, v14)
+			}
+			out.RawByte(']')
+		}
+	}
+	{
+		const prefix string = ",\"hostpeerids\":"
+		out.RawString(prefix)
+		if in.HostPeerIDs == nil && (out.Flags&jwriter.NilMapAsEmpty) == 0 {
+			out.RawString(`null`)
+		} else {
+			out.RawByte('{')
+			v15First := true
+			for v15Name, v15Value := range in.HostPeerIDs {
+				if v15First {
+					v15First = false
+				} else {
+					out.RawByte(',')
+				}
+				out.String(string(v15Name))
+				out.RawByte(':')
+				if v15Value == nil && (out.Flags&jwriter.NilMapAsEmpty) == 0 {
+					out.RawString(`null`)
+				} else {
+					out.RawByte('{')
+					v16First := true
+					for v16Name, v16Value := range v15Value {
+						if v16First {
+							v16First = false
+						} else {
+							out.RawByte(',')
+						}
+						out.String(string(v16Name))
+						out.RawByte(':')
+						easyjsonDa059d96EncodeGithubComGravitlNetmakerModels3(out, v16Value)
+					}
+					out.RawByte('}')
+				}
+			}
+			out.RawByte('}')
+		}
+	}
+	{
+		const prefix string = ",\"proxy_update\":"
+		out.RawString(prefix)
+		easyjsonDa059d96EncodeGithubComGravitlNetmakerModels4(out, in.ProxyUpdate)
+	}
+	{
+		const prefix string = ",\"egress_info\":"
+		out.RawString(prefix)
+		if in.EgressInfo == nil && (out.Flags&jwriter.NilMapAsEmpty) == 0 {
+			out.RawString(`null`)
+		} else {
+			out.RawByte('{')
+			v17First := true
+			for v17Name, v17Value := range in.EgressInfo {
+				if v17First {
+					v17First = false
+				} else {
+					out.RawByte(',')
+				}
+				out.String(string(v17Name))
+				out.RawByte(':')
+				easyjsonDa059d96EncodeGithubComGravitlNetmakerModels5(out, v17Value)
+			}
+			out.RawByte('}')
+		}
+	}
+	{
+		const prefix string = ",\"ingress_info\":"
+		out.RawString(prefix)
+		easyjsonDa059d96EncodeGithubComGravitlNetmakerModels6(out, in.IngressInfo)
+	}
+	{
+		const prefix string = ",\"peerids\":"
+		out.RawString(prefix)
+		if in.PeerIDs == nil && (out.Flags&jwriter.NilMapAsEmpty) == 0 {
+			out.RawString(`null`)
+		} else {
+			out.RawByte('{')
+			v18First := true
+			for v18Name, v18Value := range in.PeerIDs {
+				if v18First {
+					v18First = false
+				} else {
+					out.RawByte(',')
+				}
+				out.String(string(v18Name))
+				out.RawByte(':')
+				easyjsonDa059d96EncodeGithubComGravitlNetmakerModels3(out, v18Value)
+			}
+			out.RawByte('}')
+		}
+	}
+	if len(in.HostNetworkInfo) != 0 {
+		const prefix string = ",\"host_network_info\":"
+		out.RawString(prefix)
+		{
+			out.RawByte('{')
+			v19First := true
+			for v19Name, v19Value := range in.HostNetworkInfo {
+				if v19First {
+					v19First = false
+				} else {
+					out.RawByte(',')
+				}
+				out.String(string(v19Name))
+				out.RawByte(':')
+				easyjsonDa059d96EncodeGithubComGravitlNetmakerModels7(out, v19Value)
+			}
+			out.RawByte('}')
+		}
+	}
+	out.RawByte('}')
+}
+
+// MarshalJSON supports json.Marshaler interface
+func (v HostPeerUpdate) MarshalJSON() ([]byte, error) {
+	w := jwriter.Writer{}
+	easyjsonDa059d96EncodeGithubComGravitlNetmakerModels(&w, v)
+	return w.Buffer.BuildBytes(), w.Error
+}
+
+// MarshalEasyJSON supports easyjson.Marshaler interface
+func (v HostPeerUpdate) MarshalEasyJSON(w *jwriter.Writer) {
+	easyjsonDa059d96EncodeGithubComGravitlNetmakerModels(w, v)
+}
+
+// UnmarshalJSON supports json.Unmarshaler interface
+func (v *HostPeerUpdate) UnmarshalJSON(data []byte) error {
+	r := jlexer.Lexer{Data: data}
+	easyjsonDa059d96DecodeGithubComGravitlNetmakerModels(&r, v)
+	return r.Error()
+}
+
+// UnmarshalEasyJSON supports easyjson.Unmarshaler interface
+func (v *HostPeerUpdate) UnmarshalEasyJSON(l *jlexer.Lexer) {
+	easyjsonDa059d96DecodeGithubComGravitlNetmakerModels(l, v)
+}
+func easyjsonDa059d96DecodeGithubComGravitlNetmakerModels7(in *jlexer.Lexer, out *HostNetworkInfo) {
+	isTopLevel := in.IsStart()
+	if in.IsNull() {
+		if isTopLevel {
+			in.Consumed()
+		}
+		in.Skip()
+		return
+	}
+	in.Delim('{')
+	for !in.IsDelim('}') {
+		key := in.UnsafeFieldName(false)
+		in.WantColon()
+		if in.IsNull() {
+			in.Skip()
+			in.WantComma()
+			continue
+		}
+		switch key {
+		case "interfaces":
+			if in.IsNull() {
+				in.Skip()
+				out.Interfaces = nil
+			} else {
+				in.Delim('[')
+				if out.Interfaces == nil {
+					if !in.IsDelim(']') {
+						out.Interfaces = make([]Iface, 0, 0)
+					} else {
+						out.Interfaces = []Iface{}
+					}
+				} else {
+					out.Interfaces = (out.Interfaces)[:0]
+				}
+				for !in.IsDelim(']') {
+					var v20 Iface
+					easyjsonDa059d96DecodeGithubComGravitlNetmakerModels8(in, &v20)
+					out.Interfaces = append(out.Interfaces, v20)
+					in.WantComma()
+				}
+				in.Delim(']')
+			}
+		case "proxy_listen_port":
+			out.ProxyListenPort = int(in.Int())
+		default:
+			in.SkipRecursive()
+		}
+		in.WantComma()
+	}
+	in.Delim('}')
+	if isTopLevel {
+		in.Consumed()
+	}
+}
+func easyjsonDa059d96EncodeGithubComGravitlNetmakerModels7(out *jwriter.Writer, in HostNetworkInfo) {
+	out.RawByte('{')
+	first := true
+	_ = first
+	{
+		const prefix string = ",\"interfaces\":"
+		out.RawString(prefix[1:])
+		if in.Interfaces == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 {
+			out.RawString("null")
+		} else {
+			out.RawByte('[')
+			for v21, v22 := range in.Interfaces {
+				if v21 > 0 {
+					out.RawByte(',')
+				}
+				easyjsonDa059d96EncodeGithubComGravitlNetmakerModels8(out, v22)
+			}
+			out.RawByte(']')
+		}
+	}
+	{
+		const prefix string = ",\"proxy_listen_port\":"
+		out.RawString(prefix)
+		out.Int(int(in.ProxyListenPort))
+	}
+	out.RawByte('}')
+}
+func easyjsonDa059d96DecodeGithubComGravitlNetmakerModels8(in *jlexer.Lexer, out *Iface) {
+	isTopLevel := in.IsStart()
+	if in.IsNull() {
+		if isTopLevel {
+			in.Consumed()
+		}
+		in.Skip()
+		return
+	}
+	in.Delim('{')
+	for !in.IsDelim('}') {
+		key := in.UnsafeFieldName(false)
+		in.WantColon()
+		if in.IsNull() {
+			in.Skip()
+			in.WantComma()
+			continue
+		}
+		switch key {
+		case "name":
+			out.Name = string(in.String())
+		case "address":
+			easyjsonDa059d96DecodeNet(in, &out.Address)
+		case "addressString":
+			out.AddressString = string(in.String())
+		default:
+			in.SkipRecursive()
+		}
+		in.WantComma()
+	}
+	in.Delim('}')
+	if isTopLevel {
+		in.Consumed()
+	}
+}
+func easyjsonDa059d96EncodeGithubComGravitlNetmakerModels8(out *jwriter.Writer, in Iface) {
+	out.RawByte('{')
+	first := true
+	_ = first
+	{
+		const prefix string = ",\"name\":"
+		out.RawString(prefix[1:])
+		out.String(string(in.Name))
+	}
+	{
+		const prefix string = ",\"address\":"
+		out.RawString(prefix)
+		easyjsonDa059d96EncodeNet(out, in.Address)
+	}
+	{
+		const prefix string = ",\"addressString\":"
+		out.RawString(prefix)
+		out.String(string(in.AddressString))
+	}
+	out.RawByte('}')
+}
+func easyjsonDa059d96DecodeNet(in *jlexer.Lexer, out *net.IPNet) {
+	isTopLevel := in.IsStart()
+	if in.IsNull() {
+		if isTopLevel {
+			in.Consumed()
+		}
+		in.Skip()
+		return
+	}
+	in.Delim('{')
+	for !in.IsDelim('}') {
+		key := in.UnsafeFieldName(false)
+		in.WantColon()
+		if in.IsNull() {
+			in.Skip()
+			in.WantComma()
+			continue
+		}
+		switch key {
+		case "IP":
+			if data := in.UnsafeBytes(); in.Ok() {
+				in.AddError((out.IP).UnmarshalText(data))
+			}
+		case "Mask":
+			if in.IsNull() {
+				in.Skip()
+				out.Mask = nil
+			} else {
+				out.Mask = in.Bytes()
+			}
+		default:
+			in.SkipRecursive()
+		}
+		in.WantComma()
+	}
+	in.Delim('}')
+	if isTopLevel {
+		in.Consumed()
+	}
+}
+func easyjsonDa059d96EncodeNet(out *jwriter.Writer, in net.IPNet) {
+	out.RawByte('{')
+	first := true
+	_ = first
+	{
+		const prefix string = ",\"IP\":"
+		out.RawString(prefix[1:])
+		out.RawText((in.IP).MarshalText())
+	}
+	{
+		const prefix string = ",\"Mask\":"
+		out.RawString(prefix)
+		out.Base64Bytes(in.Mask)
+	}
+	out.RawByte('}')
+}
+func easyjsonDa059d96DecodeGithubComGravitlNetmakerModels6(in *jlexer.Lexer, out *IngressInfo) {
+	isTopLevel := in.IsStart()
+	if in.IsNull() {
+		if isTopLevel {
+			in.Consumed()
+		}
+		in.Skip()
+		return
+	}
+	in.Delim('{')
+	for !in.IsDelim('}') {
+		key := in.UnsafeFieldName(false)
+		in.WantColon()
+		if in.IsNull() {
+			in.Skip()
+			in.WantComma()
+			continue
+		}
+		switch key {
+		case "ext_peers":
+			if in.IsNull() {
+				in.Skip()
+			} else {
+				in.Delim('{')
+				out.ExtPeers = make(map[string]ExtClientInfo)
+				for !in.IsDelim('}') {
+					key := string(in.String())
+					in.WantColon()
+					var v26 ExtClientInfo
+					easyjsonDa059d96DecodeGithubComGravitlNetmakerModels9(in, &v26)
+					(out.ExtPeers)[key] = v26
+					in.WantComma()
+				}
+				in.Delim('}')
+			}
+		case "egress_ranges":
+			if in.IsNull() {
+				in.Skip()
+				out.EgressRanges = nil
+			} else {
+				in.Delim('[')
+				if out.EgressRanges == nil {
+					if !in.IsDelim(']') {
+						out.EgressRanges = make([]string, 0, 4)
+					} else {
+						out.EgressRanges = []string{}
+					}
+				} else {
+					out.EgressRanges = (out.EgressRanges)[:0]
+				}
+				for !in.IsDelim(']') {
+					var v27 string
+					v27 = string(in.String())
+					out.EgressRanges = append(out.EgressRanges, v27)
+					in.WantComma()
+				}
+				in.Delim(']')
+			}
+		default:
+			in.SkipRecursive()
+		}
+		in.WantComma()
+	}
+	in.Delim('}')
+	if isTopLevel {
+		in.Consumed()
+	}
+}
+func easyjsonDa059d96EncodeGithubComGravitlNetmakerModels6(out *jwriter.Writer, in IngressInfo) {
+	out.RawByte('{')
+	first := true
+	_ = first
+	{
+		const prefix string = ",\"ext_peers\":"
+		out.RawString(prefix[1:])
+		if in.ExtPeers == nil && (out.Flags&jwriter.NilMapAsEmpty) == 0 {
+			out.RawString(`null`)
+		} else {
+			out.RawByte('{')
+			v28First := true
+			for v28Name, v28Value := range in.ExtPeers {
+				if v28First {
+					v28First = false
+				} else {
+					out.RawByte(',')
+				}
+				out.String(string(v28Name))
+				out.RawByte(':')
+				easyjsonDa059d96EncodeGithubComGravitlNetmakerModels9(out, v28Value)
+			}
+			out.RawByte('}')
+		}
+	}
+	{
+		const prefix string = ",\"egress_ranges\":"
+		out.RawString(prefix)
+		if in.EgressRanges == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 {
+			out.RawString("null")
+		} else {
+			out.RawByte('[')
+			for v29, v30 := range in.EgressRanges {
+				if v29 > 0 {
+					out.RawByte(',')
+				}
+				out.String(string(v30))
+			}
+			out.RawByte(']')
+		}
+	}
+	out.RawByte('}')
+}
+func easyjsonDa059d96DecodeGithubComGravitlNetmakerModels9(in *jlexer.Lexer, out *ExtClientInfo) {
+	isTopLevel := in.IsStart()
+	if in.IsNull() {
+		if isTopLevel {
+			in.Consumed()
+		}
+		in.Skip()
+		return
+	}
+	in.Delim('{')
+	for !in.IsDelim('}') {
+		key := in.UnsafeFieldName(false)
+		in.WantColon()
+		if in.IsNull() {
+			in.Skip()
+			in.WantComma()
+			continue
+		}
+		switch key {
+		case "ingress_gw_addr":
+			easyjsonDa059d96DecodeNet(in, &out.IngGwAddr)
+		case "network":
+			easyjsonDa059d96DecodeNet(in, &out.Network)
+		case "masquerade":
+			out.Masquerade = bool(in.Bool())
+		case "ext_peer_addr":
+			easyjsonDa059d96DecodeNet(in, &out.ExtPeerAddr)
+		case "ext_peer_key":
+			out.ExtPeerKey = string(in.String())
+		case "peers":
+			if in.IsNull() {
+				in.Skip()
+			} else {
+				in.Delim('{')
+				out.Peers = make(map[string]PeerRouteInfo)
+				for !in.IsDelim('}') {
+					key := string(in.String())
+					in.WantColon()
+					var v31 PeerRouteInfo
+					easyjsonDa059d96DecodeGithubComGravitlNetmakerModels10(in, &v31)
+					(out.Peers)[key] = v31
+					in.WantComma()
+				}
+				in.Delim('}')
+			}
+		default:
+			in.SkipRecursive()
+		}
+		in.WantComma()
+	}
+	in.Delim('}')
+	if isTopLevel {
+		in.Consumed()
+	}
+}
+func easyjsonDa059d96EncodeGithubComGravitlNetmakerModels9(out *jwriter.Writer, in ExtClientInfo) {
+	out.RawByte('{')
+	first := true
+	_ = first
+	{
+		const prefix string = ",\"ingress_gw_addr\":"
+		out.RawString(prefix[1:])
+		easyjsonDa059d96EncodeNet(out, in.IngGwAddr)
+	}
+	{
+		const prefix string = ",\"network\":"
+		out.RawString(prefix)
+		easyjsonDa059d96EncodeNet(out, in.Network)
+	}
+	{
+		const prefix string = ",\"masquerade\":"
+		out.RawString(prefix)
+		out.Bool(bool(in.Masquerade))
+	}
+	{
+		const prefix string = ",\"ext_peer_addr\":"
+		out.RawString(prefix)
+		easyjsonDa059d96EncodeNet(out, in.ExtPeerAddr)
+	}
+	{
+		const prefix string = ",\"ext_peer_key\":"
+		out.RawString(prefix)
+		out.String(string(in.ExtPeerKey))
+	}
+	{
+		const prefix string = ",\"peers\":"
+		out.RawString(prefix)
+		if in.Peers == nil && (out.Flags&jwriter.NilMapAsEmpty) == 0 {
+			out.RawString(`null`)
+		} else {
+			out.RawByte('{')
+			v32First := true
+			for v32Name, v32Value := range in.Peers {
+				if v32First {
+					v32First = false
+				} else {
+					out.RawByte(',')
+				}
+				out.String(string(v32Name))
+				out.RawByte(':')
+				easyjsonDa059d96EncodeGithubComGravitlNetmakerModels10(out, v32Value)
+			}
+			out.RawByte('}')
+		}
+	}
+	out.RawByte('}')
+}
+func easyjsonDa059d96DecodeGithubComGravitlNetmakerModels10(in *jlexer.Lexer, out *PeerRouteInfo) {
+	isTopLevel := in.IsStart()
+	if in.IsNull() {
+		if isTopLevel {
+			in.Consumed()
+		}
+		in.Skip()
+		return
+	}
+	in.Delim('{')
+	for !in.IsDelim('}') {
+		key := in.UnsafeFieldName(false)
+		in.WantColon()
+		if in.IsNull() {
+			in.Skip()
+			in.WantComma()
+			continue
+		}
+		switch key {
+		case "peer_addr":
+			easyjsonDa059d96DecodeNet(in, &out.PeerAddr)
+		case "peer_key":
+			out.PeerKey = string(in.String())
+		case "allow":
+			out.Allow = bool(in.Bool())
+		case "id":
+			out.ID = string(in.String())
+		default:
+			in.SkipRecursive()
+		}
+		in.WantComma()
+	}
+	in.Delim('}')
+	if isTopLevel {
+		in.Consumed()
+	}
+}
+func easyjsonDa059d96EncodeGithubComGravitlNetmakerModels10(out *jwriter.Writer, in PeerRouteInfo) {
+	out.RawByte('{')
+	first := true
+	_ = first
+	{
+		const prefix string = ",\"peer_addr\":"
+		out.RawString(prefix[1:])
+		easyjsonDa059d96EncodeNet(out, in.PeerAddr)
+	}
+	{
+		const prefix string = ",\"peer_key\":"
+		out.RawString(prefix)
+		out.String(string(in.PeerKey))
+	}
+	{
+		const prefix string = ",\"allow\":"
+		out.RawString(prefix)
+		out.Bool(bool(in.Allow))
+	}
+	if in.ID != "" {
+		const prefix string = ",\"id\":"
+		out.RawString(prefix)
+		out.String(string(in.ID))
+	}
+	out.RawByte('}')
+}
+func easyjsonDa059d96DecodeGithubComGravitlNetmakerModels5(in *jlexer.Lexer, out *EgressInfo) {
+	isTopLevel := in.IsStart()
+	if in.IsNull() {
+		if isTopLevel {
+			in.Consumed()
+		}
+		in.Skip()
+		return
+	}
+	in.Delim('{')
+	for !in.IsDelim('}') {
+		key := in.UnsafeFieldName(false)
+		in.WantColon()
+		if in.IsNull() {
+			in.Skip()
+			in.WantComma()
+			continue
+		}
+		switch key {
+		case "egress_id":
+			out.EgressID = string(in.String())
+		case "network":
+			easyjsonDa059d96DecodeNet(in, &out.Network)
+		case "egress_gw_addr":
+			easyjsonDa059d96DecodeNet(in, &out.EgressGwAddr)
+		case "gateway_peers":
+			if in.IsNull() {
+				in.Skip()
+			} else {
+				in.Delim('{')
+				out.GwPeers = make(map[string]PeerRouteInfo)
+				for !in.IsDelim('}') {
+					key := string(in.String())
+					in.WantColon()
+					var v33 PeerRouteInfo
+					easyjsonDa059d96DecodeGithubComGravitlNetmakerModels10(in, &v33)
+					(out.GwPeers)[key] = v33
+					in.WantComma()
+				}
+				in.Delim('}')
+			}
+		case "egress_gateway_cfg":
+			easyjsonDa059d96DecodeGithubComGravitlNetmakerModels11(in, &out.EgressGWCfg)
+		default:
+			in.SkipRecursive()
+		}
+		in.WantComma()
+	}
+	in.Delim('}')
+	if isTopLevel {
+		in.Consumed()
+	}
+}
+func easyjsonDa059d96EncodeGithubComGravitlNetmakerModels5(out *jwriter.Writer, in EgressInfo) {
+	out.RawByte('{')
+	first := true
+	_ = first
+	{
+		const prefix string = ",\"egress_id\":"
+		out.RawString(prefix[1:])
+		out.String(string(in.EgressID))
+	}
+	{
+		const prefix string = ",\"network\":"
+		out.RawString(prefix)
+		easyjsonDa059d96EncodeNet(out, in.Network)
+	}
+	{
+		const prefix string = ",\"egress_gw_addr\":"
+		out.RawString(prefix)
+		easyjsonDa059d96EncodeNet(out, in.EgressGwAddr)
+	}
+	{
+		const prefix string = ",\"gateway_peers\":"
+		out.RawString(prefix)
+		if in.GwPeers == nil && (out.Flags&jwriter.NilMapAsEmpty) == 0 {
+			out.RawString(`null`)
+		} else {
+			out.RawByte('{')
+			v34First := true
+			for v34Name, v34Value := range in.GwPeers {
+				if v34First {
+					v34First = false
+				} else {
+					out.RawByte(',')
+				}
+				out.String(string(v34Name))
+				out.RawByte(':')
+				easyjsonDa059d96EncodeGithubComGravitlNetmakerModels10(out, v34Value)
+			}
+			out.RawByte('}')
+		}
+	}
+	{
+		const prefix string = ",\"egress_gateway_cfg\":"
+		out.RawString(prefix)
+		easyjsonDa059d96EncodeGithubComGravitlNetmakerModels11(out, in.EgressGWCfg)
+	}
+	out.RawByte('}')
+}
+func easyjsonDa059d96DecodeGithubComGravitlNetmakerModels11(in *jlexer.Lexer, out *EgressGatewayRequest) {
+	isTopLevel := in.IsStart()
+	if in.IsNull() {
+		if isTopLevel {
+			in.Consumed()
+		}
+		in.Skip()
+		return
+	}
+	in.Delim('{')
+	for !in.IsDelim('}') {
+		key := in.UnsafeFieldName(false)
+		in.WantColon()
+		if in.IsNull() {
+			in.Skip()
+			in.WantComma()
+			continue
+		}
+		switch key {
+		case "nodeid":
+			out.NodeID = string(in.String())
+		case "netid":
+			out.NetID = string(in.String())
+		case "natenabled":
+			out.NatEnabled = string(in.String())
+		case "ranges":
+			if in.IsNull() {
+				in.Skip()
+				out.Ranges = nil
+			} else {
+				in.Delim('[')
+				if out.Ranges == nil {
+					if !in.IsDelim(']') {
+						out.Ranges = make([]string, 0, 4)
+					} else {
+						out.Ranges = []string{}
+					}
+				} else {
+					out.Ranges = (out.Ranges)[:0]
+				}
+				for !in.IsDelim(']') {
+					var v35 string
+					v35 = string(in.String())
+					out.Ranges = append(out.Ranges, v35)
+					in.WantComma()
+				}
+				in.Delim(']')
+			}
+		default:
+			in.SkipRecursive()
+		}
+		in.WantComma()
+	}
+	in.Delim('}')
+	if isTopLevel {
+		in.Consumed()
+	}
+}
+func easyjsonDa059d96EncodeGithubComGravitlNetmakerModels11(out *jwriter.Writer, in EgressGatewayRequest) {
+	out.RawByte('{')
+	first := true
+	_ = first
+	{
+		const prefix string = ",\"nodeid\":"
+		out.RawString(prefix[1:])
+		out.String(string(in.NodeID))
+	}
+	{
+		const prefix string = ",\"netid\":"
+		out.RawString(prefix)
+		out.String(string(in.NetID))
+	}
+	{
+		const prefix string = ",\"natenabled\":"
+		out.RawString(prefix)
+		out.String(string(in.NatEnabled))
+	}
+	{
+		const prefix string = ",\"ranges\":"
+		out.RawString(prefix)
+		if in.Ranges == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 {
+			out.RawString("null")
+		} else {
+			out.RawByte('[')
+			for v36, v37 := range in.Ranges {
+				if v36 > 0 {
+					out.RawByte(',')
+				}
+				out.String(string(v37))
+			}
+			out.RawByte(']')
+		}
+	}
+	out.RawByte('}')
+}
+func easyjsonDa059d96DecodeGithubComGravitlNetmakerModels4(in *jlexer.Lexer, out *ProxyManagerPayload) {
+	isTopLevel := in.IsStart()
+	if in.IsNull() {
+		if isTopLevel {
+			in.Consumed()
+		}
+		in.Skip()
+		return
+	}
+	in.Delim('{')
+	for !in.IsDelim('}') {
+		key := in.UnsafeFieldName(false)
+		in.WantColon()
+		if in.IsNull() {
+			in.Skip()
+			in.WantComma()
+			continue
+		}
+		switch key {
+		case "action":
+			out.Action = ProxyAction(in.String())
+		case "interface_name":
+			out.InterfaceName = string(in.String())
+		case "server":
+			out.Server = string(in.String())
+		case "peers":
+			if in.IsNull() {
+				in.Skip()
+				out.Peers = nil
+			} else {
+				in.Delim('[')
+				if out.Peers == nil {
+					if !in.IsDelim(']') {
+						out.Peers = make([]wgtypes.PeerConfig, 0, 0)
+					} else {
+						out.Peers = []wgtypes.PeerConfig{}
+					}
+				} else {
+					out.Peers = (out.Peers)[:0]
+				}
+				for !in.IsDelim(']') {
+					var v38 wgtypes.PeerConfig
+					easyjsonDa059d96DecodeGolangZx2c4ComWireguardWgctrlWgtypes(in, &v38)
+					out.Peers = append(out.Peers, v38)
+					in.WantComma()
+				}
+				in.Delim(']')
+			}
+		case "peer_map":
+			if in.IsNull() {
+				in.Skip()
+			} else {
+				in.Delim('{')
+				out.PeerMap = make(map[string]PeerConf)
+				for !in.IsDelim('}') {
+					key := string(in.String())
+					in.WantColon()
+					var v39 PeerConf
+					easyjsonDa059d96DecodeGithubComGravitlNetmakerModels12(in, &v39)
+					(out.PeerMap)[key] = v39
+					in.WantComma()
+				}
+				in.Delim('}')
+			}
+		case "is_ingress":
+			out.IsIngress = bool(in.Bool())
+		case "is_relayed":
+			out.IsRelayed = bool(in.Bool())
+		case "relayed_to":
+			if in.IsNull() {
+				in.Skip()
+				out.RelayedTo = nil
+			} else {
+				if out.RelayedTo == nil {
+					out.RelayedTo = new(net.UDPAddr)
+				}
+				easyjsonDa059d96DecodeNet1(in, out.RelayedTo)
+			}
+		case "is_relay":
+			out.IsRelay = bool(in.Bool())
+		case "relayed_conf":
+			if in.IsNull() {
+				in.Skip()
+			} else {
+				in.Delim('{')
+				out.RelayedPeerConf = make(map[string]RelayedConf)
+				for !in.IsDelim('}') {
+					key := string(in.String())
+					in.WantColon()
+					var v40 RelayedConf
+					easyjsonDa059d96DecodeGithubComGravitlNetmakerModels13(in, &v40)
+					(out.RelayedPeerConf)[key] = v40
+					in.WantComma()
+				}
+				in.Delim('}')
+			}
+		default:
+			in.SkipRecursive()
+		}
+		in.WantComma()
+	}
+	in.Delim('}')
+	if isTopLevel {
+		in.Consumed()
+	}
+}
+func easyjsonDa059d96EncodeGithubComGravitlNetmakerModels4(out *jwriter.Writer, in ProxyManagerPayload) {
+	out.RawByte('{')
+	first := true
+	_ = first
+	{
+		const prefix string = ",\"action\":"
+		out.RawString(prefix[1:])
+		out.String(string(in.Action))
+	}
+	{
+		const prefix string = ",\"interface_name\":"
+		out.RawString(prefix)
+		out.String(string(in.InterfaceName))
+	}
+	{
+		const prefix string = ",\"server\":"
+		out.RawString(prefix)
+		out.String(string(in.Server))
+	}
+	{
+		const prefix string = ",\"peers\":"
+		out.RawString(prefix)
+		if in.Peers == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 {
+			out.RawString("null")
+		} else {
+			out.RawByte('[')
+			for v41, v42 := range in.Peers {
+				if v41 > 0 {
+					out.RawByte(',')
+				}
+				easyjsonDa059d96EncodeGolangZx2c4ComWireguardWgctrlWgtypes(out, v42)
+			}
+			out.RawByte(']')
+		}
+	}
+	{
+		const prefix string = ",\"peer_map\":"
+		out.RawString(prefix)
+		if in.PeerMap == nil && (out.Flags&jwriter.NilMapAsEmpty) == 0 {
+			out.RawString(`null`)
+		} else {
+			out.RawByte('{')
+			v43First := true
+			for v43Name, v43Value := range in.PeerMap {
+				if v43First {
+					v43First = false
+				} else {
+					out.RawByte(',')
+				}
+				out.String(string(v43Name))
+				out.RawByte(':')
+				easyjsonDa059d96EncodeGithubComGravitlNetmakerModels12(out, v43Value)
+			}
+			out.RawByte('}')
+		}
+	}
+	{
+		const prefix string = ",\"is_ingress\":"
+		out.RawString(prefix)
+		out.Bool(bool(in.IsIngress))
+	}
+	{
+		const prefix string = ",\"is_relayed\":"
+		out.RawString(prefix)
+		out.Bool(bool(in.IsRelayed))
+	}
+	{
+		const prefix string = ",\"relayed_to\":"
+		out.RawString(prefix)
+		if in.RelayedTo == nil {
+			out.RawString("null")
+		} else {
+			easyjsonDa059d96EncodeNet1(out, *in.RelayedTo)
+		}
+	}
+	{
+		const prefix string = ",\"is_relay\":"
+		out.RawString(prefix)
+		out.Bool(bool(in.IsRelay))
+	}
+	{
+		const prefix string = ",\"relayed_conf\":"
+		out.RawString(prefix)
+		if in.RelayedPeerConf == nil && (out.Flags&jwriter.NilMapAsEmpty) == 0 {
+			out.RawString(`null`)
+		} else {
+			out.RawByte('{')
+			v44First := true
+			for v44Name, v44Value := range in.RelayedPeerConf {
+				if v44First {
+					v44First = false
+				} else {
+					out.RawByte(',')
+				}
+				out.String(string(v44Name))
+				out.RawByte(':')
+				easyjsonDa059d96EncodeGithubComGravitlNetmakerModels13(out, v44Value)
+			}
+			out.RawByte('}')
+		}
+	}
+	out.RawByte('}')
+}
+func easyjsonDa059d96DecodeGithubComGravitlNetmakerModels13(in *jlexer.Lexer, out *RelayedConf) {
+	isTopLevel := in.IsStart()
+	if in.IsNull() {
+		if isTopLevel {
+			in.Consumed()
+		}
+		in.Skip()
+		return
+	}
+	in.Delim('{')
+	for !in.IsDelim('}') {
+		key := in.UnsafeFieldName(false)
+		in.WantColon()
+		if in.IsNull() {
+			in.Skip()
+			in.WantComma()
+			continue
+		}
+		switch key {
+		case "relayed_peer_endpoint":
+			if in.IsNull() {
+				in.Skip()
+				out.RelayedPeerEndpoint = nil
+			} else {
+				if out.RelayedPeerEndpoint == nil {
+					out.RelayedPeerEndpoint = new(net.UDPAddr)
+				}
+				easyjsonDa059d96DecodeNet1(in, out.RelayedPeerEndpoint)
+			}
+		case "relayed_peer_pub_key":
+			out.RelayedPeerPubKey = string(in.String())
+		case "relayed_peers":
+			if in.IsNull() {
+				in.Skip()
+				out.Peers = nil
+			} else {
+				in.Delim('[')
+				if out.Peers == nil {
+					if !in.IsDelim(']') {
+						out.Peers = make([]wgtypes.PeerConfig, 0, 0)
+					} else {
+						out.Peers = []wgtypes.PeerConfig{}
+					}
+				} else {
+					out.Peers = (out.Peers)[:0]
+				}
+				for !in.IsDelim(']') {
+					var v45 wgtypes.PeerConfig
+					easyjsonDa059d96DecodeGolangZx2c4ComWireguardWgctrlWgtypes(in, &v45)
+					out.Peers = append(out.Peers, v45)
+					in.WantComma()
+				}
+				in.Delim(']')
+			}
+		default:
+			in.SkipRecursive()
+		}
+		in.WantComma()
+	}
+	in.Delim('}')
+	if isTopLevel {
+		in.Consumed()
+	}
+}
+func easyjsonDa059d96EncodeGithubComGravitlNetmakerModels13(out *jwriter.Writer, in RelayedConf) {
+	out.RawByte('{')
+	first := true
+	_ = first
+	{
+		const prefix string = ",\"relayed_peer_endpoint\":"
+		out.RawString(prefix[1:])
+		if in.RelayedPeerEndpoint == nil {
+			out.RawString("null")
+		} else {
+			easyjsonDa059d96EncodeNet1(out, *in.RelayedPeerEndpoint)
+		}
+	}
+	{
+		const prefix string = ",\"relayed_peer_pub_key\":"
+		out.RawString(prefix)
+		out.String(string(in.RelayedPeerPubKey))
+	}
+	{
+		const prefix string = ",\"relayed_peers\":"
+		out.RawString(prefix)
+		if in.Peers == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 {
+			out.RawString("null")
+		} else {
+			out.RawByte('[')
+			for v46, v47 := range in.Peers {
+				if v46 > 0 {
+					out.RawByte(',')
+				}
+				easyjsonDa059d96EncodeGolangZx2c4ComWireguardWgctrlWgtypes(out, v47)
+			}
+			out.RawByte(']')
+		}
+	}
+	out.RawByte('}')
+}
+func easyjsonDa059d96DecodeNet1(in *jlexer.Lexer, out *net.UDPAddr) {
+	isTopLevel := in.IsStart()
+	if in.IsNull() {
+		if isTopLevel {
+			in.Consumed()
+		}
+		in.Skip()
+		return
+	}
+	in.Delim('{')
+	for !in.IsDelim('}') {
+		key := in.UnsafeFieldName(false)
+		in.WantColon()
+		if in.IsNull() {
+			in.Skip()
+			in.WantComma()
+			continue
+		}
+		switch key {
+		case "IP":
+			if data := in.UnsafeBytes(); in.Ok() {
+				in.AddError((out.IP).UnmarshalText(data))
+			}
+		case "Port":
+			out.Port = int(in.Int())
+		case "Zone":
+			out.Zone = string(in.String())
+		default:
+			in.SkipRecursive()
+		}
+		in.WantComma()
+	}
+	in.Delim('}')
+	if isTopLevel {
+		in.Consumed()
+	}
+}
+func easyjsonDa059d96EncodeNet1(out *jwriter.Writer, in net.UDPAddr) {
+	out.RawByte('{')
+	first := true
+	_ = first
+	{
+		const prefix string = ",\"IP\":"
+		out.RawString(prefix[1:])
+		out.RawText((in.IP).MarshalText())
+	}
+	{
+		const prefix string = ",\"Port\":"
+		out.RawString(prefix)
+		out.Int(int(in.Port))
+	}
+	{
+		const prefix string = ",\"Zone\":"
+		out.RawString(prefix)
+		out.String(string(in.Zone))
+	}
+	out.RawByte('}')
+}
+func easyjsonDa059d96DecodeGithubComGravitlNetmakerModels12(in *jlexer.Lexer, out *PeerConf) {
+	isTopLevel := in.IsStart()
+	if in.IsNull() {
+		if isTopLevel {
+			in.Consumed()
+		}
+		in.Skip()
+		return
+	}
+	in.Delim('{')
+	for !in.IsDelim('}') {
+		key := in.UnsafeFieldName(false)
+		in.WantColon()
+		if in.IsNull() {
+			in.Skip()
+			in.WantComma()
+			continue
+		}
+		switch key {
+		case "proxy":
+			out.Proxy = bool(in.Bool())
+		case "public_listen_port":
+			out.PublicListenPort = int32(in.Int32())
+		case "proxy_listen_port":
+			out.ProxyListenPort = int(in.Int())
+		case "is_ext_client":
+			out.IsExtClient = bool(in.Bool())
+		case "address":
+			if data := in.UnsafeBytes(); in.Ok() {
+				in.AddError((out.Address).UnmarshalText(data))
+			}
+		case "is_relayed":
+			out.IsRelayed = bool(in.Bool())
+		case "relayed_to":
+			if in.IsNull() {
+				in.Skip()
+				out.RelayedTo = nil
+			} else {
+				if out.RelayedTo == nil {
+					out.RelayedTo = new(net.UDPAddr)
+				}
+				easyjsonDa059d96DecodeNet1(in, out.RelayedTo)
+			}
+		case "nat_type":
+			out.NatType = string(in.String())
+		default:
+			in.SkipRecursive()
+		}
+		in.WantComma()
+	}
+	in.Delim('}')
+	if isTopLevel {
+		in.Consumed()
+	}
+}
+func easyjsonDa059d96EncodeGithubComGravitlNetmakerModels12(out *jwriter.Writer, in PeerConf) {
+	out.RawByte('{')
+	first := true
+	_ = first
+	{
+		const prefix string = ",\"proxy\":"
+		out.RawString(prefix[1:])
+		out.Bool(bool(in.Proxy))
+	}
+	{
+		const prefix string = ",\"public_listen_port\":"
+		out.RawString(prefix)
+		out.Int32(int32(in.PublicListenPort))
+	}
+	{
+		const prefix string = ",\"proxy_listen_port\":"
+		out.RawString(prefix)
+		out.Int(int(in.ProxyListenPort))
+	}
+	{
+		const prefix string = ",\"is_ext_client\":"
+		out.RawString(prefix)
+		out.Bool(bool(in.IsExtClient))
+	}
+	{
+		const prefix string = ",\"address\":"
+		out.RawString(prefix)
+		out.RawText((in.Address).MarshalText())
+	}
+	{
+		const prefix string = ",\"is_relayed\":"
+		out.RawString(prefix)
+		out.Bool(bool(in.IsRelayed))
+	}
+	{
+		const prefix string = ",\"relayed_to\":"
+		out.RawString(prefix)
+		if in.RelayedTo == nil {
+			out.RawString("null")
+		} else {
+			easyjsonDa059d96EncodeNet1(out, *in.RelayedTo)
+		}
+	}
+	{
+		const prefix string = ",\"nat_type\":"
+		out.RawString(prefix)
+		out.String(string(in.NatType))
+	}
+	out.RawByte('}')
+}
+func easyjsonDa059d96DecodeGithubComGravitlNetmakerModels3(in *jlexer.Lexer, out *IDandAddr) {
+	isTopLevel := in.IsStart()
+	if in.IsNull() {
+		if isTopLevel {
+			in.Consumed()
+		}
+		in.Skip()
+		return
+	}
+	in.Delim('{')
+	for !in.IsDelim('}') {
+		key := in.UnsafeFieldName(false)
+		in.WantColon()
+		if in.IsNull() {
+			in.Skip()
+			in.WantComma()
+			continue
+		}
+		switch key {
+		case "id":
+			out.ID = string(in.String())
+		case "address":
+			out.Address = string(in.String())
+		case "name":
+			out.Name = string(in.String())
+		case "isserver":
+			out.IsServer = string(in.String())
+		case "network":
+			out.Network = string(in.String())
+		case "proxy_listen_port":
+			out.ProxyListenPort = int(in.Int())
+		default:
+			in.SkipRecursive()
+		}
+		in.WantComma()
+	}
+	in.Delim('}')
+	if isTopLevel {
+		in.Consumed()
+	}
+}
+func easyjsonDa059d96EncodeGithubComGravitlNetmakerModels3(out *jwriter.Writer, in IDandAddr) {
+	out.RawByte('{')
+	first := true
+	_ = first
+	{
+		const prefix string = ",\"id\":"
+		out.RawString(prefix[1:])
+		out.String(string(in.ID))
+	}
+	{
+		const prefix string = ",\"address\":"
+		out.RawString(prefix)
+		out.String(string(in.Address))
+	}
+	{
+		const prefix string = ",\"name\":"
+		out.RawString(prefix)
+		out.String(string(in.Name))
+	}
+	{
+		const prefix string = ",\"isserver\":"
+		out.RawString(prefix)
+		out.String(string(in.IsServer))
+	}
+	{
+		const prefix string = ",\"network\":"
+		out.RawString(prefix)
+		out.String(string(in.Network))
+	}
+	{
+		const prefix string = ",\"proxy_listen_port\":"
+		out.RawString(prefix)
+		out.Int(int(in.ProxyListenPort))
+	}
+	out.RawByte('}')
+}
+func easyjsonDa059d96DecodeGolangZx2c4ComWireguardWgctrlWgtypes(in *jlexer.Lexer, out *wgtypes.PeerConfig) {
+	isTopLevel := in.IsStart()
+	if in.IsNull() {
+		if isTopLevel {
+			in.Consumed()
+		}
+		in.Skip()
+		return
+	}
+	in.Delim('{')
+	for !in.IsDelim('}') {
+		key := in.UnsafeFieldName(false)
+		in.WantColon()
+		if in.IsNull() {
+			in.Skip()
+			in.WantComma()
+			continue
+		}
+		switch key {
+		case "PublicKey":
+			if in.IsNull() {
+				in.Skip()
+			} else {
+				copy(out.PublicKey[:], in.Bytes())
+			}
+		case "Remove":
+			out.Remove = bool(in.Bool())
+		case "UpdateOnly":
+			out.UpdateOnly = bool(in.Bool())
+		case "PresharedKey":
+			if in.IsNull() {
+				in.Skip()
+				out.PresharedKey = nil
+			} else {
+				if out.PresharedKey == nil {
+					out.PresharedKey = new(wgtypes.Key)
+				}
+				if in.IsNull() {
+					in.Skip()
+				} else {
+					copy(out.PresharedKey[:], in.Bytes())
+				}
+			}
+		case "Endpoint":
+			if in.IsNull() {
+				in.Skip()
+				out.Endpoint = nil
+			} else {
+				if out.Endpoint == nil {
+					out.Endpoint = new(net.UDPAddr)
+				}
+				easyjsonDa059d96DecodeNet1(in, out.Endpoint)
+			}
+		case "PersistentKeepaliveInterval":
+			if in.IsNull() {
+				in.Skip()
+				out.PersistentKeepaliveInterval = nil
+			} else {
+				if out.PersistentKeepaliveInterval == nil {
+					out.PersistentKeepaliveInterval = new(time.Duration)
+				}
+				*out.PersistentKeepaliveInterval = time.Duration(in.Int64())
+			}
+		case "ReplaceAllowedIPs":
+			out.ReplaceAllowedIPs = bool(in.Bool())
+		case "AllowedIPs":
+			if in.IsNull() {
+				in.Skip()
+				out.AllowedIPs = nil
+			} else {
+				in.Delim('[')
+				if out.AllowedIPs == nil {
+					if !in.IsDelim(']') {
+						out.AllowedIPs = make([]net.IPNet, 0, 1)
+					} else {
+						out.AllowedIPs = []net.IPNet{}
+					}
+				} else {
+					out.AllowedIPs = (out.AllowedIPs)[:0]
+				}
+				for !in.IsDelim(']') {
+					var v50 net.IPNet
+					easyjsonDa059d96DecodeNet(in, &v50)
+					out.AllowedIPs = append(out.AllowedIPs, v50)
+					in.WantComma()
+				}
+				in.Delim(']')
+			}
+		default:
+			in.SkipRecursive()
+		}
+		in.WantComma()
+	}
+	in.Delim('}')
+	if isTopLevel {
+		in.Consumed()
+	}
+}
+func easyjsonDa059d96EncodeGolangZx2c4ComWireguardWgctrlWgtypes(out *jwriter.Writer, in wgtypes.PeerConfig) {
+	out.RawByte('{')
+	first := true
+	_ = first
+	{
+		const prefix string = ",\"PublicKey\":"
+		out.RawString(prefix[1:])
+		out.Base64Bytes(in.PublicKey[:])
+	}
+	{
+		const prefix string = ",\"Remove\":"
+		out.RawString(prefix)
+		out.Bool(bool(in.Remove))
+	}
+	{
+		const prefix string = ",\"UpdateOnly\":"
+		out.RawString(prefix)
+		out.Bool(bool(in.UpdateOnly))
+	}
+	{
+		const prefix string = ",\"PresharedKey\":"
+		out.RawString(prefix)
+		if in.PresharedKey == nil {
+			out.RawString("null")
+		} else {
+			out.Base64Bytes(in.PresharedKey[:])
+		}
+	}
+	{
+		const prefix string = ",\"Endpoint\":"
+		out.RawString(prefix)
+		if in.Endpoint == nil {
+			out.RawString("null")
+		} else {
+			easyjsonDa059d96EncodeNet1(out, *in.Endpoint)
+		}
+	}
+	{
+		const prefix string = ",\"PersistentKeepaliveInterval\":"
+		out.RawString(prefix)
+		if in.PersistentKeepaliveInterval == nil {
+			out.RawString("null")
+		} else {
+			out.Int64(int64(*in.PersistentKeepaliveInterval))
+		}
+	}
+	{
+		const prefix string = ",\"ReplaceAllowedIPs\":"
+		out.RawString(prefix)
+		out.Bool(bool(in.ReplaceAllowedIPs))
+	}
+	{
+		const prefix string = ",\"AllowedIPs\":"
+		out.RawString(prefix)
+		if in.AllowedIPs == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 {
+			out.RawString("null")
+		} else {
+			out.RawByte('[')
+			for v53, v54 := range in.AllowedIPs {
+				if v53 > 0 {
+					out.RawByte(',')
+				}
+				easyjsonDa059d96EncodeNet(out, v54)
+			}
+			out.RawByte(']')
+		}
+	}
+	out.RawByte('}')
+}
+func easyjsonDa059d96DecodeGithubComGravitlNetmakerModels2(in *jlexer.Lexer, out *ServerAddr) {
+	isTopLevel := in.IsStart()
+	if in.IsNull() {
+		if isTopLevel {
+			in.Consumed()
+		}
+		in.Skip()
+		return
+	}
+	in.Delim('{')
+	for !in.IsDelim('}') {
+		key := in.UnsafeFieldName(false)
+		in.WantColon()
+		if in.IsNull() {
+			in.Skip()
+			in.WantComma()
+			continue
+		}
+		switch key {
+		case "isleader":
+			out.IsLeader = bool(in.Bool())
+		case "address":
+			out.Address = string(in.String())
+		default:
+			in.SkipRecursive()
+		}
+		in.WantComma()
+	}
+	in.Delim('}')
+	if isTopLevel {
+		in.Consumed()
+	}
+}
+func easyjsonDa059d96EncodeGithubComGravitlNetmakerModels2(out *jwriter.Writer, in ServerAddr) {
+	out.RawByte('{')
+	first := true
+	_ = first
+	{
+		const prefix string = ",\"isleader\":"
+		out.RawString(prefix[1:])
+		out.Bool(bool(in.IsLeader))
+	}
+	{
+		const prefix string = ",\"address\":"
+		out.RawString(prefix)
+		out.String(string(in.Address))
+	}
+	out.RawByte('}')
+}
+func easyjsonDa059d96DecodeGithubComGravitlNetmakerModels1(in *jlexer.Lexer, out *Host) {
+	isTopLevel := in.IsStart()
+	if in.IsNull() {
+		if isTopLevel {
+			in.Consumed()
+		}
+		in.Skip()
+		return
+	}
+	in.Delim('{')
+	for !in.IsDelim('}') {
+		key := in.UnsafeFieldName(false)
+		in.WantColon()
+		if in.IsNull() {
+			in.Skip()
+			in.WantComma()
+			continue
+		}
+		switch key {
+		case "id":
+			if data := in.UnsafeBytes(); in.Ok() {
+				in.AddError((out.ID).UnmarshalText(data))
+			}
+		case "verbosity":
+			out.Verbosity = int(in.Int())
+		case "firewallinuse":
+			out.FirewallInUse = string(in.String())
+		case "version":
+			out.Version = string(in.String())
+		case "ipforwarding":
+			out.IPForwarding = bool(in.Bool())
+		case "daemoninstalled":
+			out.DaemonInstalled = bool(in.Bool())
+		case "autoupdate":
+			out.AutoUpdate = bool(in.Bool())
+		case "endpointdetection":
+			out.EndpointDetection = bool(in.Bool())
+		case "hostpass":
+			out.HostPass = string(in.String())
+		case "name":
+			out.Name = string(in.String())
+		case "os":
+			out.OS = string(in.String())
+		case "interface":
+			out.Interface = string(in.String())
+		case "debug":
+			out.Debug = bool(in.Bool())
+		case "listenport":
+			out.ListenPort = int(in.Int())
+		case "public_listen_port":
+			out.PublicListenPort = int(in.Int())
+		case "wg_public_listen_port":
+			out.WgPublicListenPort = int(in.Int())
+		case "proxy_listen_port":
+			out.ProxyListenPort = int(in.Int())
+		case "mtu":
+			out.MTU = int(in.Int())
+		case "publickey":
+			if in.IsNull() {
+				in.Skip()
+			} else {
+				copy(out.PublicKey[:], in.Bytes())
+			}
+		case "macaddress":
+			if in.IsNull() {
+				in.Skip()
+				out.MacAddress = nil
+			} else {
+				out.MacAddress = in.Bytes()
+			}
+		case "traffickeypublic":
+			if in.IsNull() {
+				in.Skip()
+				out.TrafficKeyPublic = nil
+			} else {
+				out.TrafficKeyPublic = in.Bytes()
+			}
+		case "internetgateway":
+			easyjsonDa059d96DecodeNet1(in, &out.InternetGateway)
+		case "nodes":
+			if in.IsNull() {
+				in.Skip()
+				out.Nodes = nil
+			} else {
+				in.Delim('[')
+				if out.Nodes == nil {
+					if !in.IsDelim(']') {
+						out.Nodes = make([]string, 0, 4)
+					} else {
+						out.Nodes = []string{}
+					}
+				} else {
+					out.Nodes = (out.Nodes)[:0]
+				}
+				for !in.IsDelim(']') {
+					var v58 string
+					v58 = string(in.String())
+					out.Nodes = append(out.Nodes, v58)
+					in.WantComma()
+				}
+				in.Delim(']')
+			}
+		case "isrelayed":
+			out.IsRelayed = bool(in.Bool())
+		case "relayed_by":
+			out.RelayedBy = string(in.String())
+		case "isrelay":
+			out.IsRelay = bool(in.Bool())
+		case "relay_hosts":
+			if in.IsNull() {
+				in.Skip()
+				out.RelayedHosts = nil
+			} else {
+				in.Delim('[')
+				if out.RelayedHosts == nil {
+					if !in.IsDelim(']') {
+						out.RelayedHosts = make([]string, 0, 4)
+					} else {
+						out.RelayedHosts = []string{}
+					}
+				} else {
+					out.RelayedHosts = (out.RelayedHosts)[:0]
+				}
+				for !in.IsDelim(']') {
+					var v59 string
+					v59 = string(in.String())
+					out.RelayedHosts = append(out.RelayedHosts, v59)
+					in.WantComma()
+				}
+				in.Delim(']')
+			}
+		case "interfaces":
+			if in.IsNull() {
+				in.Skip()
+				out.Interfaces = nil
+			} else {
+				in.Delim('[')
+				if out.Interfaces == nil {
+					if !in.IsDelim(']') {
+						out.Interfaces = make([]Iface, 0, 0)
+					} else {
+						out.Interfaces = []Iface{}
+					}
+				} else {
+					out.Interfaces = (out.Interfaces)[:0]
+				}
+				for !in.IsDelim(']') {
+					var v60 Iface
+					easyjsonDa059d96DecodeGithubComGravitlNetmakerModels8(in, &v60)
+					out.Interfaces = append(out.Interfaces, v60)
+					in.WantComma()
+				}
+				in.Delim(']')
+			}
+		case "defaultinterface":
+			out.DefaultInterface = string(in.String())
+		case "endpointip":
+			if data := in.UnsafeBytes(); in.Ok() {
+				in.AddError((out.EndpointIP).UnmarshalText(data))
+			}
+		case "proxy_enabled":
+			out.ProxyEnabled = bool(in.Bool())
+		case "proxy_enabled_updated":
+			out.ProxyEnabledSet = bool(in.Bool())
+		case "isdocker":
+			out.IsDocker = bool(in.Bool())
+		case "isk8s":
+			out.IsK8S = bool(in.Bool())
+		case "isstatic":
+			out.IsStatic = bool(in.Bool())
+		case "isdefault":
+			out.IsDefault = bool(in.Bool())
+		case "nat_type":
+			out.NatType = string(in.String())
+		case "turn_endpoint":
+			if in.IsNull() {
+				in.Skip()
+				out.TurnEndpoint = nil
+			} else {
+				if out.TurnEndpoint == nil {
+					out.TurnEndpoint = new(netip.AddrPort)
+				}
+				if data := in.UnsafeBytes(); in.Ok() {
+					in.AddError((*out.TurnEndpoint).UnmarshalText(data))
+				}
+			}
+		default:
+			in.SkipRecursive()
+		}
+		in.WantComma()
+	}
+	in.Delim('}')
+	if isTopLevel {
+		in.Consumed()
+	}
+}
+func easyjsonDa059d96EncodeGithubComGravitlNetmakerModels1(out *jwriter.Writer, in Host) {
+	out.RawByte('{')
+	first := true
+	_ = first
+	{
+		const prefix string = ",\"id\":"
+		out.RawString(prefix[1:])
+		out.RawText((in.ID).MarshalText())
+	}
+	{
+		const prefix string = ",\"verbosity\":"
+		out.RawString(prefix)
+		out.Int(int(in.Verbosity))
+	}
+	{
+		const prefix string = ",\"firewallinuse\":"
+		out.RawString(prefix)
+		out.String(string(in.FirewallInUse))
+	}
+	{
+		const prefix string = ",\"version\":"
+		out.RawString(prefix)
+		out.String(string(in.Version))
+	}
+	{
+		const prefix string = ",\"ipforwarding\":"
+		out.RawString(prefix)
+		out.Bool(bool(in.IPForwarding))
+	}
+	{
+		const prefix string = ",\"daemoninstalled\":"
+		out.RawString(prefix)
+		out.Bool(bool(in.DaemonInstalled))
+	}
+	{
+		const prefix string = ",\"autoupdate\":"
+		out.RawString(prefix)
+		out.Bool(bool(in.AutoUpdate))
+	}
+	{
+		const prefix string = ",\"endpointdetection\":"
+		out.RawString(prefix)
+		out.Bool(bool(in.EndpointDetection))
+	}
+	{
+		const prefix string = ",\"hostpass\":"
+		out.RawString(prefix)
+		out.String(string(in.HostPass))
+	}
+	{
+		const prefix string = ",\"name\":"
+		out.RawString(prefix)
+		out.String(string(in.Name))
+	}
+	{
+		const prefix string = ",\"os\":"
+		out.RawString(prefix)
+		out.String(string(in.OS))
+	}
+	{
+		const prefix string = ",\"interface\":"
+		out.RawString(prefix)
+		out.String(string(in.Interface))
+	}
+	{
+		const prefix string = ",\"debug\":"
+		out.RawString(prefix)
+		out.Bool(bool(in.Debug))
+	}
+	{
+		const prefix string = ",\"listenport\":"
+		out.RawString(prefix)
+		out.Int(int(in.ListenPort))
+	}
+	{
+		const prefix string = ",\"public_listen_port\":"
+		out.RawString(prefix)
+		out.Int(int(in.PublicListenPort))
+	}
+	{
+		const prefix string = ",\"wg_public_listen_port\":"
+		out.RawString(prefix)
+		out.Int(int(in.WgPublicListenPort))
+	}
+	{
+		const prefix string = ",\"proxy_listen_port\":"
+		out.RawString(prefix)
+		out.Int(int(in.ProxyListenPort))
+	}
+	{
+		const prefix string = ",\"mtu\":"
+		out.RawString(prefix)
+		out.Int(int(in.MTU))
+	}
+	{
+		const prefix string = ",\"publickey\":"
+		out.RawString(prefix)
+		out.Base64Bytes(in.PublicKey[:])
+	}
+	{
+		const prefix string = ",\"macaddress\":"
+		out.RawString(prefix)
+		out.Base64Bytes(in.MacAddress)
+	}
+	{
+		const prefix string = ",\"traffickeypublic\":"
+		out.RawString(prefix)
+		out.Base64Bytes(in.TrafficKeyPublic)
+	}
+	{
+		const prefix string = ",\"internetgateway\":"
+		out.RawString(prefix)
+		easyjsonDa059d96EncodeNet1(out, in.InternetGateway)
+	}
+	{
+		const prefix string = ",\"nodes\":"
+		out.RawString(prefix)
+		if in.Nodes == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 {
+			out.RawString("null")
+		} else {
+			out.RawByte('[')
+			for v66, v67 := range in.Nodes {
+				if v66 > 0 {
+					out.RawByte(',')
+				}
+				out.String(string(v67))
+			}
+			out.RawByte(']')
+		}
+	}
+	{
+		const prefix string = ",\"isrelayed\":"
+		out.RawString(prefix)
+		out.Bool(bool(in.IsRelayed))
+	}
+	{
+		const prefix string = ",\"relayed_by\":"
+		out.RawString(prefix)
+		out.String(string(in.RelayedBy))
+	}
+	{
+		const prefix string = ",\"isrelay\":"
+		out.RawString(prefix)
+		out.Bool(bool(in.IsRelay))
+	}
+	{
+		const prefix string = ",\"relay_hosts\":"
+		out.RawString(prefix)
+		if in.RelayedHosts == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 {
+			out.RawString("null")
+		} else {
+			out.RawByte('[')
+			for v68, v69 := range in.RelayedHosts {
+				if v68 > 0 {
+					out.RawByte(',')
+				}
+				out.String(string(v69))
+			}
+			out.RawByte(']')
+		}
+	}
+	{
+		const prefix string = ",\"interfaces\":"
+		out.RawString(prefix)
+		if in.Interfaces == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 {
+			out.RawString("null")
+		} else {
+			out.RawByte('[')
+			for v70, v71 := range in.Interfaces {
+				if v70 > 0 {
+					out.RawByte(',')
+				}
+				easyjsonDa059d96EncodeGithubComGravitlNetmakerModels8(out, v71)
+			}
+			out.RawByte(']')
+		}
+	}
+	{
+		const prefix string = ",\"defaultinterface\":"
+		out.RawString(prefix)
+		out.String(string(in.DefaultInterface))
+	}
+	{
+		const prefix string = ",\"endpointip\":"
+		out.RawString(prefix)
+		out.RawText((in.EndpointIP).MarshalText())
+	}
+	{
+		const prefix string = ",\"proxy_enabled\":"
+		out.RawString(prefix)
+		out.Bool(bool(in.ProxyEnabled))
+	}
+	{
+		const prefix string = ",\"proxy_enabled_updated\":"
+		out.RawString(prefix)
+		out.Bool(bool(in.ProxyEnabledSet))
+	}
+	{
+		const prefix string = ",\"isdocker\":"
+		out.RawString(prefix)
+		out.Bool(bool(in.IsDocker))
+	}
+	{
+		const prefix string = ",\"isk8s\":"
+		out.RawString(prefix)
+		out.Bool(bool(in.IsK8S))
+	}
+	{
+		const prefix string = ",\"isstatic\":"
+		out.RawString(prefix)
+		out.Bool(bool(in.IsStatic))
+	}
+	{
+		const prefix string = ",\"isdefault\":"
+		out.RawString(prefix)
+		out.Bool(bool(in.IsDefault))
+	}
+	if in.NatType != "" {
+		const prefix string = ",\"nat_type\":"
+		out.RawString(prefix)
+		out.String(string(in.NatType))
+	}
+	if in.TurnEndpoint != nil {
+		const prefix string = ",\"turn_endpoint\":"
+		out.RawString(prefix)
+		out.RawText((*in.TurnEndpoint).MarshalText())
+	}
+	out.RawByte('}')
+}