TUN-6142: Add tunnel details support to RPC

This commit adds the tunnel details to RPC register connection response
so we can have access to some of the details associacted to the tunnel
that only the edge knows.

Currently this is limited to knowing if the tunnel is remotely managed
or not. In the future we could extend this with more information.
This commit is contained in:
João Oliveirinha 2022-04-27 14:34:11 +01:00
parent f3244db861
commit d68ad89159
3 changed files with 243 additions and 229 deletions

View File

@ -224,8 +224,9 @@ func (a *TunnelAuth) UnmarshalCapnproto(s tunnelrpc.TunnelAuth) error {
} }
type ConnectionDetails struct { type ConnectionDetails struct {
UUID uuid.UUID UUID uuid.UUID
Location string Location string
TunnelIsRemotelyManaged bool
} }
func (details *ConnectionDetails) MarshalCapnproto(s tunnelrpc.ConnectionDetails) error { func (details *ConnectionDetails) MarshalCapnproto(s tunnelrpc.ConnectionDetails) error {
@ -235,6 +236,7 @@ func (details *ConnectionDetails) MarshalCapnproto(s tunnelrpc.ConnectionDetails
if err := s.SetLocationName(details.Location); err != nil { if err := s.SetLocationName(details.Location); err != nil {
return err return err
} }
s.SetTunnelIsRemotelyManaged(details.TunnelIsRemotelyManaged)
return nil return nil
} }
@ -252,6 +254,7 @@ func (details *ConnectionDetails) UnmarshalCapnproto(s tunnelrpc.ConnectionDetai
if err != nil { if err != nil {
return err return err
} }
details.TunnelIsRemotelyManaged = s.TunnelIsRemotelyManaged()
return err return err
} }

View File

@ -121,6 +121,8 @@ struct ConnectionDetails {
uuid @0 :Data; uuid @0 :Data;
# airport code of the colo where this connection landed # airport code of the colo where this connection landed
locationName @1 :Text; locationName @1 :Text;
# tells if the tunnel is remotely managed
tunnelIsRemotelyManaged @2: Bool;
} }
struct TunnelAuth { struct TunnelAuth {

View File

@ -1410,12 +1410,12 @@ type ConnectionDetails struct{ capnp.Struct }
const ConnectionDetails_TypeID = 0xb5f39f082b9ac18a const ConnectionDetails_TypeID = 0xb5f39f082b9ac18a
func NewConnectionDetails(s *capnp.Segment) (ConnectionDetails, error) { func NewConnectionDetails(s *capnp.Segment) (ConnectionDetails, error) {
st, err := capnp.NewStruct(s, capnp.ObjectSize{DataSize: 0, PointerCount: 2}) st, err := capnp.NewStruct(s, capnp.ObjectSize{DataSize: 8, PointerCount: 2})
return ConnectionDetails{st}, err return ConnectionDetails{st}, err
} }
func NewRootConnectionDetails(s *capnp.Segment) (ConnectionDetails, error) { func NewRootConnectionDetails(s *capnp.Segment) (ConnectionDetails, error) {
st, err := capnp.NewRootStruct(s, capnp.ObjectSize{DataSize: 0, PointerCount: 2}) st, err := capnp.NewRootStruct(s, capnp.ObjectSize{DataSize: 8, PointerCount: 2})
return ConnectionDetails{st}, err return ConnectionDetails{st}, err
} }
@ -1462,12 +1462,20 @@ func (s ConnectionDetails) SetLocationName(v string) error {
return s.Struct.SetText(1, v) return s.Struct.SetText(1, v)
} }
func (s ConnectionDetails) TunnelIsRemotelyManaged() bool {
return s.Struct.Bit(0)
}
func (s ConnectionDetails) SetTunnelIsRemotelyManaged(v bool) {
s.Struct.SetBit(0, v)
}
// ConnectionDetails_List is a list of ConnectionDetails. // ConnectionDetails_List is a list of ConnectionDetails.
type ConnectionDetails_List struct{ capnp.List } type ConnectionDetails_List struct{ capnp.List }
// NewConnectionDetails creates a new list of ConnectionDetails. // NewConnectionDetails creates a new list of ConnectionDetails.
func NewConnectionDetails_List(s *capnp.Segment, sz int32) (ConnectionDetails_List, error) { func NewConnectionDetails_List(s *capnp.Segment, sz int32) (ConnectionDetails_List, error) {
l, err := capnp.NewCompositeList(s, capnp.ObjectSize{DataSize: 0, PointerCount: 2}, sz) l, err := capnp.NewCompositeList(s, capnp.ObjectSize{DataSize: 8, PointerCount: 2}, sz)
return ConnectionDetails_List{l}, err return ConnectionDetails_List{l}, err
} }
@ -4525,230 +4533,231 @@ func CloudflaredServer_Methods(methods []server.Method, s CloudflaredServer_Serv
return methods return methods
} }
const schema_db8274f9144abc7e = "x\xda\xccZ{\x94\x14\xe5\x95\xbf\xb7\xaa{\xaa\x07\xa7" + const schema_db8274f9144abc7e = "x\xda\xccZ}t\x1c\xd5u\xbfwfW#\x19\xad" +
"\xa9)\xaaa\xa0\x0f\xb3\xb3\xe10\xebB\x82\x0a,Y" + "G\xc3,\x96\xb5\xc7B\x8d\x8e]j'\x06d\xd7)" +
"\xc3\xc6\xcc\x0c\x0e\xc4\x19yLuC\x8eG1\xc7\x9a" + "u\xd3H2\xb2\x83\x84?4\xbbV\x0e1&\x87\xd1" +
"\xeeofj\xb6\xbb\xaa\xad\xaa\x1e\x81hx\x04D<" + "\xee\x934\xea\xee\xcc23+l\x07\xe2\x0fl\x0c\x1c" +
"j\xc4\x80\x0f\x126\x80\xeb\xee\x09\xc6\xacD\xdc,{" + "B0\xb1\xf9pBc\x9b\xd2\x9e\x98$\x85`\x9a\xba" +
"tWvc\x8c\x1a\x89\xe4h\x16\x83\xd9lB\xd8]" + "\x07Z\x9c\x86\x10Cpp\x0e\xa4&\x86\xa6\x89\xe3\xb6" +
"9\xb8\xae\xa8\x9b\xc3n\xb4\xf6\xdc\xaa\xae\xc7t73" + "\xf8\x98R\x0cn\x8e\xdb\x98\xe9\xb93;\x1f\xda]$" +
"\x8c\xe4\x8f\xfc\xd7s\xeb{\xdc\xfb\xfb~\xf7\xf1\xddo" + "+\xce\x1f\xf9ou\xe7\xbe\xf7\xee\xfb\xbd\xdf\xfdx\xf7" +
"\xae2\x1b;\xb9\xf9\xf1\x8d\"\x80r8\xde\xe0\xb0\xb9" + "\xe9\xea;\x1a\xba\xb8\x8e\xf8F\x11@9\x10\xafs\xd8" +
"?\xd9\xb0\xaf\xfd\x9f\xb7\x80\x92Ft\xbe\xfcLo\xea" + "\xbc\x9fl\xd83\xe7\x9f\xb7\x80\x92Bt\xbe\xf8l_" +
"\xbc\xbd\xe5$\xc4y\x01`\xe1c\xc2\x06\x94\x8f\x08\x02" + "\xf2\x9c\xbd\xe58\xc4y\x01`\xe1\xe3\xc2\x06\x94\x0f\x0a" +
"\x80\xfc\xb4\xf0\x1f\x80\xce\x9d\xd3\x9e\xfc\xe6cKw}" + "\x02\x80\xfc\x8c\xf0\x1f\x80\xce\x9d3\x9e\xfc\xfa\xe3Kw" +
"\x05\xa44\x1f\x0e\x06\\\xf8H\xa2\x17\xe5'\x124\xf2" + "\xde\x01R\x8a\x0f\x95\x01\x17>R\xdf\x87\xf2\xb7\xeaI" +
"[\x89\xedrc\xa3\x00\xe0\\/]yS\xea\xd5c" + "\xf3\x1b\xf5\xdb\xe5\x86\x06\x01\xc0\xb9^\xba\xea\xc6\xe4\xab" +
"4:\xbat\x8c\x96~71\x17e\xa4a\xf2\x87\x09" + "GH;:u\x8c\xa6~\xaf~\x1e\xcaHj\xf2\xf9" +
"Z\xfa\xb3\xc5\x1f\x1f\xf8\xf4\xee\x97\xb7\x82\x94\xe6F-" + "z\x9a\xfaS\x85\x1f\xef\xfb\xe4\xae\x97\xb7\x82\x94\xe2\xc6" +
"\xfdV\xe3\x06\x94?tG\x9eo\\\x05\xe8\xbc\xb7k" + "M\xfdv\xc3\x06\x94\xcf\xbb\x9a\xe7\x1aV\x01:\xef\xef" +
"\xfa\xe3\xfb\x8f\xfdp\x1bH\x97#T4\x95&\xfd\x0c" + "\x9c\xf9\xc4\xde#?\xdc\x06\xd2\x15\x08eK\xa5i?" +
"\x01\xe5\xf6I\x7f\x03\xe8\xbc\xf2\xc1M\xef\x1f\xfe\xc1\xa2" + "C@y\xce\xb4\xbf\x05t^9{\xe3\x07\x07~\xb0" +
";A\x9aC\x03\x90\x06<?i\x16\x07(\xff|R" + "\xe8N\x90\xe6\x92\x02\x92\xc2\x0b\xd3\xda9@\xf9\xadi" +
"\x07\xa0s\xe6\xec\xffm\xff\xd2\x9c\x95\xf7\x832\x079" + "\x9d\x80\xce\xa9\xd3\xff\xb7\xfd\x0bsW\xde\x0f\xca\\\xe4" +
"\x808G#>\x9c\x94\xa6\x11S/#m:\x96\xbd" + "\x00\xe2\x1ci\x9c\x9f\x96\"\x8d\xcb.!k:\x97\xbd" +
"r$\xbd\xf0\xc1]U\xaa\xbb\x03?\xb8l.\xca\xf1" + "r0\xb5\xf0\xc1\x9d\x15\xa6\xbb\x8ag/\x99\x87r\xbc" +
"&R\x08\x9bn\x03t>\xf7\xa7O\xdd\xd7\xfd\xe0\xa6" + "\x91\x0c\xc2\xc6[\x01\x9dO\xff\xc9\xd3\xf7\xf5<\xb8i" +
"\xdd ]\x19\xec\xc7\x9an\xa4\xd567\xd1~\xff3" + "\x17HW\x05\xeb\xb1\xc654\xdb\xe6FZ\xef\x7f\xa6" +
"\xf9\xeb\xc7\xca\xd7~\xef\xc1\x8aB\xee*\xfb\x9b\xe6\xd2" + "\x7f\xf5H\xe9\xda\xef>X6\xc8\x9deo\xe3<R" +
"\x80#\xee\x0a\xb3F\xdao\xf9\xa7\xe7\x9fz\x08\x94y" + "8\xe8\xce\xd0>6\xe7\xe6\xef\xbd\xf0\xf4C\xa0\xccG" +
"\x88\xce\x9b\xfd\x9f|\x9d\xdf{\xf0$\xacA\x81\xf4[" + "t\xde\x1c\xfc\xf8\xeb\xfc\xa3\xfb\x8f\xc3\x00\x0ad\xdf\xc2" +
"8#y\x80\xac\x9b\x93\xa4\xb1?\xfe\xd43\x7f\x7f\xff" + "\x96\xc4>\xda\xdd\xdc\x04\xe9\xfe\xf8\x13\xcf\xfe\xc3\xfdO" +
"S\xdb\xbf\x0e\xca\xe5\x88\x00.\x9a\xf7&\xff\x97\x06\xec" + "o\xff*(W \x02\xb8h~)\xf1\xbf\xa4\xb07" +
"O\xd2n\xbbN<\xbb\xb2\xb8s\xcf\x01\x0f\x1f\xf7\xfb" + "A\xab\xed<\xf6\xdc\xca\xc2\x8e\xdd\xfb<|\xdc\xef\x87" +
"\x8bI\x8e\x83\x98\xb3\xb5\xe77\xc55\x8ff\x1f\xad " + "\x13\x1c\x071gk\xef\xaf\x0b\x03\x8fe\x1e+#\x17" +
"\x17\xa7O\xcf&\xcf!\xe0\xc2\xe3\xc96\x04t\x16\xfd" + "\xa7O\xcf%\xce \xe0\xc2\xa3\x896\x04t\x16\xfd\xec" +
"\xec\xf4\xaa\x15\xdf\x1d\xf8\xeb\xc8\xdc\xb7'o\xa0\xb9\xdb" + "\xe4\xaa\x15\xdf\x19\xfa\x9b\xc8\xd8w\xa6o\xa0\xb1\xdb\x87" +
"\x07\xce\x1dm\xce\x14\x1f\xafB\xc45\xf6\xad\xc9\x07Q" + "\xce\x1cjJ\x17\x9e\xa8@\xc4\xdd\xec\xdb\xd3\xf7\xa3\x8c" +
"F\xd1=\xcc\xc9\xa4\xc2\x13\x7fp}\xe3\xba\xd3\xcb\x9e" + "\xa2{\x98\xd3\xc9\x84o]~}\xc3\xba\x93\xcb\x9e\x04" +
"\x04i\x9e\xbfL\xab\x98\xa1eF^z\xf4\x8f\xda_" + "i\xbe?M\xab\x98\xa6i\xc6^z\xec\x0f\xe7\xbct" +
"\xba\xed\x10(Wb\x00\xd6\x0c\xfa\x86\xf2\"\x91\xec\x8b" + "\xebS\xa0\\\x85\x01X-\xf4\x0d\xe5E\"\xed/v" +
"\x9dl?\xf8\xec/\xee;\\\xc3\xb1\x9d\xe2\x06\x94\x1f" + "|\xce\xfe\xe7~~\xdf\x81*\x8e\xed\x107\xa0\xfc\xb8" +
"sw\xd9/~^>N\xbf\x9c\xd8\xcd\xfcG\xea\xc3" + "\xbb\xca^\xf13\xf2Q\xfa\xe5\xc4n\xe2?T\x1f\xfe" +
"\xffx\xb8\x9a\xbf.\xc6G\xc4~\x94_\x11]\x04D" + "\xa7\x03\x95\xfcu1>(\x0e\xa2\xfc\x8a\xe8\" \xba" +
"\xd7\xbe\xbb\x8f\xee\xf9d\xe2\x9b\xef=]\xef\\\xdfm" + "\xfb\xbb\xe7\xd0\xee\x8f\xd7\x7f\xfd\xfdgj\xaa\xbf\xd74" +
"\xeeG9.\xb9\xe7*\x91&S{\xf0\xcd\xe7\xe6\xc7" + "\x88r\\r\x0fV\"\"]\xd6\x8bo>\xdf\x11\xfb" +
"\xbe\x17%\x9a*\x9d!\xa4\xcb\x12\x11\xad\xf5\xed%I" + "n\x94i\x8fK\xa7\x08\xea\x83\xaeB\xeb;K\x12\xfa" +
"\xfd\x9d-\xcfU\xad\xe6\x0e\x9c:\xa5\x17\xe59Sh" + "\xbb[\x9e\xaf\x00\xc5U\xfc\xdc\xa5}(\x17.\xa5\xd9" +
"\xb5\xf6)48\xf6\xe9\xe1\xed\xd2\xa9\x9f>\xefa\xe2" + "\xb4KI9\xf6\xc9\xd1\xed\xd2\x89\x9f\xbe\xe0\x81\xe2\xed" +
"\x19~t\xca\xb0\xcb\xca)\x04Z\xefM_{ ~" + "<.\x8f\xd2\xce?&\x13j}7~\xe5\x81\xf8\xc9" +
"\xfak/\x90)\x11\x17\x88'\\vN1Q\x96d" + "\xaf\xbcH\xc6E| Nn\xb5\xb0[6Q\x1e\x90" +
"\xfa\x99\x94[x@'\xfd\xe4\x9f}gI\xfe\x8d\x97" + "\xe9\xa7\"7\xf3\x80N\xea\xc9?\xfb\xf6\x92\xdc\x1b/" +
"\xeb\x98\"\xdf;\xed\x9c\xfc\xc84\xfa\xb5{\x1aYr" + "\xd7\xe0\xa8|t\xc6\x19\xf9\xad\x19\xf4\xeb\x8d\x19\x04\xea" +
"j\xde\xa1/\xbdu\xef\xf1\xd7*\x96\xb8{\xbf;\xcd" + "\x89\xf9O}\xe1\xed/\x1d}\xad\xbc\x13w\xedE\xcd" +
"\xe5L\xbc\x85\xf6>\xbfv\xdf\xf5\x9as\xc3\xc9j\x18" + ".iz\x9bi\xedsk\xf7\\\xaf97\x1c\xaf\x04" +
"\xdd\x91\xed-\xdfE\xf9\x9a\x16Z\xee3-\xb4\\@" + "\xc6\xd5\xd4\x9a\xbf\x83\xf2\xe6f\x9a\xee\xf6f\x9a.`" +
"\xd0z\xa3\xf7\xb6\x0c\xa3|\xc8\x1d\xfd\x84\xbb6wZ" + "h-\xed_4\x8f\xa2|\xd6\xd5~\xcf\x9d\x9b;\xa9" +
"\x9d\xb1\xe9\xa7\x9f{3\xc2\xa9C-\xbfB\x889+" + "\xb6l\xfa\xe9\xa7\xdf\x8c\x90\xeal\xf3/\x11b\xce\xca" +
"\xbfp\xd3p\xe3\x1d\xa7NE\xd5z\xac\xc5\x05\xf8\x88" + "\xcf\xde8\xdap\xfb\x89\x13Q\xb3\xdenv\x01>\xef" +
";\xf5\x1f\xfe\xe5\xa1\xa1\x9b\xbfs\xect\x84Go\xb4" + "\x0e\xfd\xc7\x7fyh\xe4\xa6o\x1f9\x19%\xd2L\x93" +
"\x98\xc4\xa3\xff\xfa\xab3_=[\xcc\xff\xbb\xeb1\xfe" + "\x88\xf4_\x7f}\xea\xcb\xa7\x0b\xb9\x7fw]\xc6?\x9c" +
"\xe1\xbc\xde\xb2\x98\xe0|\xbb\x85\\\xb8\xa5-\xb9t\xd6" + "\x96\x99\x8b\x09\xce\x8e\x99\xe4\xc3\xcdm\x89\xa5\xed\xc7\xfa" +
"\x89\xbe3Q\xbc_\x9c\xbe\x84\x06\xfcr:-\xbe\xe8" + "OE\xf1N\xb4,!\x859-4\xf9\xa2\x9b\xbb\xd9" +
"\x96.\xb6\xf6\xea\x1b\xce\xd4\x10\x0dg,FY\x9a\xe1" + "\xdakn8U\xc5\xb4\xa5-\x8bQ\x1ehq\xb1n" +
"b=c;\xca\xed\xe9\x16\x00g\xe4ow\xde\xf0\xf8" + "\xd9\x8e\xb2\x96j\x06p\xc6\xfen\xc7\x0dO|\x7f\xe5" +
"\xf7W\x9e\xf3\x9c\xd8\xd5ejz\x01\xe9r\xdf\x97\xbb" + "\x19\xcf\x8b][>\x97Z@\xb6\xdc\xf7\xc5\x9eU\x7f" +
"W}f\xd6\xd1sQ3\x92ir+\xf9\x13i\xda" + "\xda~\xe8Lt\x1bJ\x8a\xfcJf)Zi\xe8\x9a" +
"i\xe0\xea\xb3\x9fo\xbf\xef\x07\xe7\xea\xf9NWz." + "\xd3\x9f\x99s\xdf\x0f\xce\xd4r\x9em\xa9y(\xefJ" +
"\xcaJ\x9a\xe0ZA\x83\xdfY\xf6\x17\xaf\xa5\xc5\xf4\xfb" + "\x11\\;H\xf9\xdde\x7f\xf9ZJL}P\x01m" +
"U\xd06\xd0\xd8[\xd3\xc3(o\xa3\xb1\x0b7\xa7_" + "\x1d\xe9>\x93\x1aE\xf9p\xca\x0dh\xa9\x17\x89\xd0{" +
" >\xef\xff\xcb\x03\xffz\xfe\xd8u\x1f\xd4\xd8P\x9e" + "\xffj\xdf\xbf\x9e;r\xdd\xd9\xaa=\x1c\x9cE\xdc\x9f" +
"\xd9\x8f\xf2\x8e\x99\xb4\xec\xb6\x99\x82\xbcm\xe6\xe5\x00\xce" + "E\xd3\x1e\x9e%\xc8\x87g]\x01\xe0\xdcy\xfc\xf3\xeb" +
"\x9d'\xbf\xb8\xee'_y\xef\x83j\x86\xb9\x8a\xdc1" + "~r\xc7\xfbg+\x19\xe6\x1arhV\x1a\xe5\xd7\xdd" +
"3\x83\xf2Nw\xc6\xbd3\x89\xb0\x0f\xad\xfe\xcf\x8dg" + "\x11Gg\x11a\x1fZ\xfd\x9f\x1bO\xef\x9a\xf1\xeb\xaa" +
"wO\xfbM\xcd\xda\xf3Z\x87Q\xeej\xa5\x91\xd7\xb4" + "\xb9oi\x1dEy[+inn}Q\xbe\xecr" +
"\xbe \x1f\xa7_\xce\xab\xc2\xa3\xf3\xbb7\xbe|>r" + "\xf2\xc4W\x85\xc7:z6\xbe|.rT\xe7[\xfb" +
"TGZ{\x09\x9e\x07\x85o\x9c\xda\xf4\x8b/\xfe6" + "\x08\x9e\x07\x85\xaf\x9d\xd8\xf4\xf3\xcf\xff&\x0a\xcf\xb9\xd6" +
"\x0a\xcf\xd3\xad\xbf\"x^l%xn\x7f\xe7\x91\xeb" + "_\x12<\x89\xcb\x09\x9e\xdb\xde}\xe4\xba/\xaf\xfd\xe6" +
"\xbe\xba\xf6\xdb\x1fE\x08\xf2V\xeb\x16\x9aj\x97u\x9d" + "\x87\x11\x82\xcc\xbf|\x0b\x0d\xb5K\xba\xce\xf2f1\x96" +
"\x15\xccR,w\xa5\xff3wEN-\xe9\xa5\xc5]" + "\xbd\xca\xff\x99\xbd2\xab\x16\xf5\xe2\xe2\xee\x92=\xc2t" +
"e{\x88\xe9\xb6\x96Sm\x96a\x1dV\xc9\xd0-\xd6" + "[\xcb\xaa6K\xb3N\xabh\xe8\x16\xebGT\x9a\xf8" +
"\x87\xa84\xf31\x80\x18\x02H\xea0\x80r\x0b\x8fJ" + "\x18@\x0c\x01$u\x14@\xb9\x99G%\xcf\xa1\x84\x98" +
"\x81C\x091ED\x914\x12\x0e\xf1\xa8\xd8\x1cJ\x1c" + "$\xa2H\x1a\x09GxTl\x0e%\x8eKR\x84\x95" +
"\x97\xa2\x00+\xdd:\x0b@)\xf0\xa8\xac\xe3\x10\xf9\x14" + "ni\x07P\xf2<*\xeb8D>\x89<\x80Tz" +
"\xf2\x00R\xf9\x01\x00e\x1d\x8f\xcaV\x0e\x9d\x123\x8b" + "\x00@Y\xc7\xa3\xb2\x95C\xa7\xc8\xcc\x82\xaa3\x1dD" +
"\xaa\xcet\x10\xed\xa5\xa6\x89M\xc0a\x13\xa0c2\xdb" + "{\xa9ib#p\xd8\x08\xe8\x98\xcc6\xd7\xab\x83y" +
"\\\xaf\xf6\x17@d\x11\xb10|\x9b\x8dI\xe00\x09" + "\x10YD,\x8c\xdejc\x028L\x00:#F\xc9" +
"\xe8\x0c\x19e\xd3Z\xa3\xdb\xa8\x152l\xc0d\x16\x0e" + "\xb4\x06t\x1b\xb5|\x9a\x0d\x99\xcc\xc2\x11\xac\x03\x0e\xeb" +
"a\x03p\xd8\x008\x96yYfY\x9a\xa1\xafPu" + "\x00'\xda^\x86Y\x96f\xe8+T]\x1df&\x00" +
"u\x90\x99\x00dY\x82\x8f\x03\x04\xc9\x0b\xfd4'\xcd" + "\xed\xac\x9e\x8f\x03\x04\xd9\x0b\xfd<'u\xec\x06N\x9a" +
"\xdf\x03\x9c4O\xc00\xd1\xa0OV\xe9\x13\x07\x81\x93" + "/`\x98i\xd0'\xab\xf4\xb1\xfd\xc0I\xad\x82c\xb2" +
"Z\x05\xc7d\x83\x9ae3\x13\xd7\xe4K\xee\xda\xbc\xa1" + "a\xcd\xb2\x99\x89\x03\xb9\xa2;7o\xe8]\xe8\x94t" +
"w\xa2S\xd6\xbd\x0f\xc8L\xef\x83H\xbbvb\x1f\x86" + "\xef\x032\xd3\xfb \xd2\xaa]\xd8\x8f\xa1u|\xb5u" +
"\xda\xf1\xb5\xda][\xd0\x98n\x8b=\xfa\x80Q\x05y" + "\xd7\xe65\xa6\xdbb\xaf>dT@\xdeW\x0b\xf2\xbe" +
"o=\xc8{+\x90o\x8d@\xbey\x09\x80r;\x8f" + "2\xe4[#\x90o^\x02\xa0\xdc\xc6\xa3r\x17\x87\x12" +
"\xca]\x1cJ|\x05\xf3ms\x01\x94M<*\xf7p" + "_\xc6|\xdb<\x00e\x13\x8f\xca\xbd\x1c:Yw\x91" +
"\xe8\xe4\xdcMz\xf2\x00\x10\xa09\xc0T\xbbl2\x8b" + "\xde\x1c\x00\x04h\x0e1\xd5.\x99\xcc\"\xd9t\xc0~" +
"d\x93\x01\xfbxtA\x9f\x0c\xb8q\x84\x99\xa4\xbb\x7f" + "\x1e]\xd0\xa7\x03n\x1cc&\xd9\xee\x1f\x82\xa8\x9a\xd9" +
"\x08\xa2j\xe6\x86\x82\x83\x1a\x03\xe9\xa5\xeb4\xcb\xd6\xf4" + "\x91\xe0\xa0&@z\xe9:\xcd\xb25}x\xb5+\xef" +
"\xc1\xd5\xae\xbc\xa3\xcf(h\xb9\xf5dU\x93\xabg\xeb" + "\xec7\xf2Zv=\xed\xaa\xd1\xb5\xb3u1\x00\xa2t" +
"b\x00Di\xea\x8d\x00\xc8I\xd2\x12\x80\x0emP7" + "\xd9\x1a\x00\xe4$i\x09@\xa76\xac\x1b&sr\x9a" +
"L\xe6\xe45+g\xe8:\x03>go\xecW\x0b\xaa" + "\x955t\x9d\x01\x9f\xb57\x0e\xaayU\xcf\xb2`\xa1" +
"\x9ec\xc1F\x0d\xb5\x1by\x1bd\x999\xc2\xcc+\xd4" + "\xba\xea\x85\xbc\x052\xcc\x1cc\xe6\x95j\x84\xbe\xb3\xfb" +
"\x08}g\xf7\xa9\xa6\xca\x17-\xa5)\xc0q\xe9\x8d\x00" + "US\xe5\x0b\x96\xd2\x18\xe0\xb8t\x0d\x80\xd2\xc3\xa3\xd2" +
"J7\x8fJ_\x04\xc7\x15\x84\xe3r\x1e\x95\x1b\"8" + "\x1f\xc1q\x05\xe1\xb8\x9cG\xe5\x86\x08\x8e\x03\x84c?" +
"\xae!\x1c\xfbxT\xd6r\xe8\x18\xa66\xa8\xe9\xd72" + "\x8f\xcaZ\x0e\x1d\xc3\xd4\x865\xfdZ\x06\xbc\x19e\xa0" +
"\xe0\xcd(\x03-[W\x8b\x8c0\xab\xe0\xb1\xd1(\xd9" + "e\xebj\x81\x11fe<6\x1aE[3t\x0b\x9b" +
"\x9a\xa1[\xd8\x1cf\x1d@l\x8e %\x8c\xc7\xc9+" + "\xc2\xac\x03\x88M\x11\xa4\x84\xc98y\xa5O)\x9fQ" +
"|J\xf9\x8c2\xf4\xd9\x19f\x95\x85\x82m)\xb1\xc0" + "\x86>;\xcd\xac\x92\x90\xb7-%\x16\xec$\xb1\x18@" +
"\x92\xe4b\x00%\xc1\xa3\x92\xe2\xb0\xc3dV\xb9`c" + "\xa9\xe7QIr\xd8i2\xab\x94\xb7\xb1),'~" +
"sXM\xfc.v\xf5\xe1\x8b\xd00S\x8f\x86\x0b\x00" + "\x17\xab\xfa\xf0Eh\x98\xaeE\xc3\x05\x00J\x8eG\xa5" +
"\x94<\x8fJ\x89C\xac\xa0W\\\x12\x89\x06<z," + "\xc8!\x96\xd1+,\x89D\x03\x1e=\x16\xde\xb2\x1b@" +
"\xbcu\x0f\x80b\xf3\xa8l\xe2\xd0\xb1\xbcMz\x00\xf3" + "\xb1yT6q\xe8X\xde\"\xbd\x809\x1f\xd1\xb6\x9c" +
">\xa2my\xcb\xee)\xf9\x7fm\xcc[v\x9fa\xda" + "e\xf7\x16\xfd\xbf6\xe6,\xbb\xdf0m\x14\x80C\x01" +
"(\x00\x87\x02\x10o\x0d\x8bu\x0d\x90O\xf5\xe4\x0b\xec" + "\x88\xb7\x86\xc5\xba\x87\xc8\xa7zsyv\x9d\xc6\xeb6" +
":\x8d\xd7m\x8c\x03\x87q\x18\xd3\xa9<~\x88\x14\xd8" + "\xc6\x81\xc38L\xe8T\x1e?D\x0al\x9e\xb7\xfb\xbb" +
"<o\xf7\xad\x99Cd\xf8c\x1e\x95?\x89X3\x9f" + "\x99Kd\xf8#\x1e\x95?\x8e\xec\xa6\x83\xe2\xd8\xd5<" +
"\xe2\xd8U<*\x9f\xe5\xd0Qs9\xa3\xac\xdb\xab\x81" + "*\x9f\xe2\xd0Q\xb3Y\xa3\xa4\xdb\xab\x81W\x87+8" +
"W\x07\xab8\x9fe \xe6L\x16\xd2\xc1\xdf6Q\xc7" + "\x9fa fM\x16\xd2\xc1_\xb6\xbe\x86[\x1b\xfa\x90" +
"\xad\x0d}@\x1b,\x9b\xaa\x1d\x01\xbc\\\xca\xab6\x1b" + "6\\2U;\x02x\xa9\x98Sm6\xee\x93{\xce" +
"\xf5\xc9=\xe7\x02\x7f\x11\xe7\x1c\xd4\x15\x13>g?2" + "y\xfe\x02\xce9\xa8+\xa6|\xce~d\xaa8i\xd1" +
"U\x9d\xb4h\xaaE+\x8aM\xa6\x1e6t\xaa\x9f\xe2" + "T\x0bV\x14\x9bt-l\xe8T?\xc1\xa3rM\xed" +
"Q\xb9\xba\xfe\x01n,2\xcbR\x07YMx\x88\xd7" + "\x03\xdcX`\x96\xa5\x0e\xb3\xaa\xf0\x10\xaf\x89\x89\xce\xb2" +
"\xc5Dg9\xb2:\xc3\xbc$s\x85\xc9,\xa1\\\xb0" + "\xb4\xeb4\xf3\x92\xcc\x95&\xb3\x84R\xde&+\x1a\x1d" +
"I\x8b&\xc7\xf1\xd4 n\xcd\xe6Q\xb9\x8a\xc3$~" + "\xc73\x83\xb85\x9bG\xe5j\x0e\x13\xf8\xa1\xe3\xd91" +
"\xe4xz\xcc{ <\xa36f\x9a\x86\x89\xcda\x12" + "\xff\x81\xf0\x8c\xda\x98i\x1a&6\x85I\xb8\x0cI\xb6" +
"\xae@\x92\xabl\x80\x86\xde\xcdlU+ \xb9eP" + "\xbc\x00\x1az\x0f\xb3U-\x8f\xe4\x96A\xa5Z\x01\xdc" +
"\xa8V\x017^\\\x09a\xf3\xc4\xb3;\xc8;\x8a\xa3" + "dq%\x84\xcd\x13\xcf\xee$\xef(\x8c;)\xa2w" +
"N\x8a\xe8\xdd\xcc\xa32\x93Cg\xd0Ts\xac\x8f\x99" + "\x13\x8f\xca,\x0e\x9daS\xcd\xb2~f\xa2f\xe4V" +
"\xa8\x19\xf9\x95\xaandy\x96\xab!\xeb\xe4\x89n\xea" + "\xaa\xba\x91\xe1Y\xb6\x8a\xac\xd3\xa7\xba\xa8\xcb\x0f\xdb\x82" +
"\xf2\xc3\xb6 \x985\xf6|\x93U@\xa8L\xefk\xf3" + "`\xd4\xc4\xe3MV\x06\xa1<\xbc\xbf\xcd\xb39\x19\xd8" +
"tN\x05:\xdf1+L\xc6\xc11o\xee\x0f\xb3E" + "|{{\x98\x8c\x83c\xde<\x18f\x8b \x1e\xdeM" +
"\x10\x0fw\x90\xb3\xdc\xc5\xa3\xb2+\x92WvR\xe4\xbc" + "\xcer\x17\x8f\xca\xceH^\xd9A\x91\xf3~\x1e\x95\xaf" +
"\x9fG\xe5\x1b\x1cJ\xb1X\x0ac\x00\xd2#\xc4\x92]" + "q(\xc5bI\x8c\x01H\x8f\x10Kv\xf2\xa8\xec\xe1" +
"<*\xfb\xb8\xd1)\x9b\x8d0\xdd\xee\xd6\x06A`V" + "\xc6\xa7l6\xc6t\xbbG\x1b\x06\x81Y\xa1\x94L\xec" +
"(%\x15\xbb\xb5A\x06\xbcu\xa9\xb151\x0e\x1eF" + "\xd1\x86\x19\xf0\xd6\xc5\xc6\xd6\xfaI\xf00\x06-#\xcf" +
"\xbfe\x14\x98\xcd\xbaY\xae\xa0\x92\xcb\x8d0\xef{\x85" + "l\xd6\xc3\xb2y\x95\\n\x8cy\xdf\xcbd\xf4\x0fu" +
"\x8c\xfe\xa1\x8e\xc5\xdbL\x8d\xf7\x10\x7fE\xbfJ\x8a\xd0" + "\"\xde\xa6\xab\xbc\x87\xf8+\xfaUR\x84\x0e\xed\xa1\xe3" +
"aV\xe8\xb8\x02\x8b\x147ch\xeb-\xee\x05\x83\x1a" + "\x0a,R\xdcL`\xad7\xb9\x17\x0c\xaa8\x10zL" +
"\x0e\x84\x1eS\xe1\x01Z\xbf\x93\xa0\xe3\xda\x8c\xa3\x9c\x7f" + "\x99\x07h\xfdN\x82\x8e\xbbg\x1c\xe7\xfcKB\xaf\xf3" +
"I\xe8u>)\xe6-\x0e\x03BP\x13\xc4\x80\xc3\x18" + "I1\x7fq\x18\x10\x82\x9a \x06\x1c\xc6\x00;\xb3\xee" +
"`G\xce]\xb0&\x14\xc6\xc6\xd3\xaa\xc3S\xcb\x03\x8e" + "\x84U\xa106\x99U\x9d\x9eY\x1epT\x84\xf9\xf7" +
"\x8a0\xff\x1a\x8b\xfe\xdd_\x92\x0e\x00'%\x05\xc7\xd7" + "X\xf4/\xff\x92\xb4\x0f8)!8\xbe\xe5\xe8\x8f\x17" +
"\x1c\xfd\xf9BMA\x15\x1b+\xca\xac*\xd9\x9a`\xe8" + "\xaa\x0a\xaa\xd8DQfU\xd1\xd6\x04C\xb7h\xad\x08" +
"\x16\xed\x15\xe1\xff\xe2z\xfc7C\xfe\xfb\x09m\xc7\x96" + "\xff\x17\xd7\xe2\xbf\x19\xf2\xdfOhwo\x89\xd2\xbf\x9c" +
"(\xfd+\x09m\xe7\x9e\x90\xe9R\x8c\xf3\xe8\xbf\xf7\x00" + "\xd0v\xec\x0e\x99.\xc58\x8f\xfe\x8f\xee\x03P\xf6\xf0" +
"\x80\xb2\x8fG\xe5\xdb\x1cvx\xb5\x166\x87=\x9b\x0a" + "\xa8|\x93\xc3N\xaf\xd6\xc2\xa6\xb0iS\xa6\xacWQ" +
"e\xbd\x8ab\xb9\x01m9\xb5\x10&=\xc7d\xa5\x82" + ",7\xa0-\xab\xe6\xc3\xa4\xe7\x98\xac\x98W\xb3l)" +
"\x9acK\xb1R=\x01\"p\x88\xae\x9f\x14K&\xb3" + "\x96\xab'@\x04\x0e\xd1\xf5\x93B\xd1d\x96\x85\x9a\xa1" +
",\xd4\x0c])\xab\x05\x8d\xb7\xd7\x07\x15\xaf^.\xf6" + "+%5\xaf\xf1\xf6\xfa\xa0\xe2\xd5K\x85~\x93\x8di" +
"\x99lDC\xa3lu\xd96+\x0a%\xdb\xba\x98z" + "h\x94\xacn\xdbf\x05\xa1h[\x17R\x0f\x87\x00Q" +
"8\x04\x88\x82\xa4\xa0\x15\xac\xaa\x1c97\xa4B\x00\xd0" + "\x90\x14\xb4\xbc\x0bP\xa4`\xa2\xca\xb1\x8bGey\x04" +
"\xbc\xe10\x0f\x88\xe5\xb2\x16$\x00\xa7`\xe4\xdc\x93\x05" + "\xa0^\xca\x91\xd7\xf1\xa8\xac\x0e\x01R\xbe\x07\xa0\xac\xe6" +
"q\xa5Z\xac\xcd\x03\x0d\xe3\x06\xacQ\xe1\xceOK\xbf" + "Q\xb9\x99C\xb1T\xd2\x82\xa4\xe0\xe4\x8d\xac{\xda " +
"O\xf5\xdb\xd8W&2\xdd\xbdSDT\xa68\xd0\xc9" + "\xaeT\x0b\x95\xb9\xa1\xd7\xe2\xd2\xac`\xd8,\xbf\xde\xe3" +
"\xa3\xb2<\xa2r\xcf\x82\x88\x1d\xbe\xca+\xfaC;\x84" + "h.\xdc\xf1\x85\xc6\xe6\x8a \xe9'\xb3\xdf\xa7\xaao" +
"?g\xeb}\xad\xdaX\x91\xd2\x97\x0ff\xc5\x98.\x10" + "\xe2\x8b\x16\x81\x03\x15\xb8\xb7\xd7\xc2}Ad\x1f\xbe\xc9" +
"\xae\x0f\xc7L4\xaa\xb8\xde\xb4\xdc\xc8\xa9\x85\xea` " + "+\x06\xc3}\x08\x7f\xc1\xd6\xfbV\xb5\xb1\x02%=\x1f" +
"V\xa7\xb5h\x01r\xf1\x8e\x1e\xddtU\xa9\xcd\x85\x95" + "\xee\xf2f\xbaA\xb8>\xd4\x99j,r}p\xb9\x91" +
"\x80\xb9\xda_X^\x8f\xbd\x00\xd9u\xc8cv+\x86" + "U\xf3\x95!D\xacL\x86\xd1\xb2\xe5\xc2\xc3Ct\xd1" +
"\xd8\xc8\x9bq\x09@\xf6v\x92\xdf\x85!<\xf26L" + "U\xc56\x17V\x02\xe6\x1a\x7fby=\xf6\x01d\xd6" +
"\x03d7\x91\xfc\x1e\x0c\xee\x93\xf2\x0e<\x08\x90\xbd\x87" + "!\x8f\x99\xad\x18b#o\xc6%\x00\x99\xdbH~\x17" +
"\xc4\x0f\xd3\xf0\x18\xef\xfa\xa1\xbc\xdb]~\x17\xc9\xf7\x91" + "\x86\xf0\xc8\xdb0\x05\x90\xd9D\xf2{1\xb8\x85\xcaw" +
"<\x1eKa\x1c@\xde\x8bs\x01\xb2\x0f\x93\xfc0\xc9" + "\xe3~\x80\xcc\xbd$~\x98\xd4c\xbc\xeb\xbd\xf2.w" +
"\x1b\xb8\x146\x00\xc8\x87p\x18 \xfb$\xc9\x9f!\xb9" + "\xfa\x9d$\xdfC\xf2x,\x89q\x00\xf9Q\x9c\x07\x90" +
"\x10O\xd1\x95Z>\x82&@\xf6\xefH\xfe}\x92'" + "y\x98\xe4\x07H^\xc7%\xb1\x0e@~\x0aG\x012" +
"\xa6\xa70\x01 \x1fu\xe5\xcf\x91\xfcG$o\x9c\x91" + "O\x92\xfcY\x92\x0b\xf1$]\xc4\xe5\x83h\x02d\xfe" +
"\xc2F\x00\xf9E\xdc\x02\x90\xfd!\xc9_#\xf9$L" + "\x9e\xe4\xdf'y\xfd\xcc$\xd6\x03\xc8\x87\\\xf9\xf3$" +
"\xe1$\x00\xf98\xee\x01\xc8\xbeF\xf2\x7f#\xf9e\x0d" + "\xff\x11\xc9\x1bZ\x92\xd8\x00 \x1f\xc6-\x00\x99\x1f\x92" +
")\xbc\x0c@\xfe\xb9\xab\xcf\x09\x92\xff\x9a\xe4M\xb1\x14" + "\xfc5\x92O\xc3$N\x03\x90\x8f\xe2n\x80\xcck$" +
"6\x01\xc8\xbf\xc4\x03\x00\xd9_\x93\xfc\xbfI\x9e\x14R" + "\xff7\x92_R\x97\xc4K\x00\xe4\xb7\\{\x8e\x91\xfc" +
"\x98\x04\x90\xdfv\xed:K\xf2\x04Wu\x9d\xf3i\\" + "W$o\x8c%\xb1\x11@\xfe\x05\xee\x03\xc8\xfc\x8a\xe4" +
"ug\xe3\x0d+\xe0\x09\xab\x04\x16\xf4|\xac\xcf\x10\xe9" + "\xffM\xf2\x84\x90\xc4\x04\x80\xfc\x8e\xbb\xaf\xd3$\xaf\xe7" +
"^\x86b\xd8(\x06D\x11\xd0)\x19Fa\xe5h\xf7" + "*.\x81>\x8d+nz\xbca\x05<a\xe5p\x84" +
"\x10mu\xd0\xf2\xef\x87\xcda\xa7\x0c\x90\x84A\xc5\x05" + "\x9e\x8f\xf5\x1b\"\xdd\xe6P\x0c\xfb\xcb\x80(\x02:E" +
"\xa2\xa1\xf7\xe4\x83\xe8S\x1d\xea|M4\xab\xabl\x1b" + "\xc3\xc8\xaf\x1c\xef\x1e\xa2\xad\x0e[\xfe\xad\xb2)\xec\xaf" +
"\xe5\x12\xb4\x11\x17\xf3A\xa03\xcb\xfa2\xd3(\xaeF" + "\x01\x920\xa8\xd3@4\xf4\xde\\\x10\xb3*\x03\xa4o" +
"f\x165]-\x8c\x13\x02\x1b\x81\xc3F\xa8\xc4!\x7f" + "\x89fu\x97l\xa3T\x846\xe2b.\x08\x16fI" +
"\xed\xb1\xe3\xe1\x85o\xbb\x01\xa3\xb9jF\xb7\x95\x16\xaf" + "_f\x1a\x85\xd5\xc8\xcc\x82\xa6\xab\xf9I\x02g\x03p" +
"V\x07/&8.\x08\x13\xa5\xa8G\xa2`\xdb\x88Z" + "\xd8\x00\xe5H\xe5\xcf=q\x14\xfd\xe8;r\xc0h\xae" +
"(\x7f\x9c\x988\xba\x88\xcbtxE\xe0xw\x04\xbf" + "\x92\xd1m\xc5\xc5\xab\xd5\xe1\x8ak\xc7\xbc0\xbb\x06\xae" +
"\xe1U\x15\xbf\xea\x944kj\x8b\x82\x0c\xb3\xda\x82\xce" + "=\x7fA\x98^E=\x12'\xdb\xc6\xd4|\xa9\xba\xa2" +
"O\xc4\xe0\x83a\xe0\xf7\xed]4+ra*\xa86" + "\xae\x9bb\xe9\x97\xee\xf4J\xc7\xc9n\x16~\x9b\xac\"" +
"\xb3\xec\xae\x12\x96\x0a\x1a\xcb\x7f\x81\x99b\xb4N\xa8[" + "~\xd5(\x84\x06\xaaK\x894\xb3\xda\x82~Qd\xc3" +
"\x06\xc5\xc6\xbb\x1b\x8c\xae\xad0\xd2\xd5'\xc3\xb9\x8a\xc1" + "\xfb\xc3k\x83\xbf\xdfE\xed\x91kV^\xb5\x99ew" +
"\x17\x8d\xe7 \xb3\xbd_=\xfa\x80A\xc5\x8f\x10\xad\xf8" + "\x17\xb1\x98\xd7X\xee\xb3\xcc\x14\xa3\xd5E\xcd\xe2)6" +
"&6;\xc3,\xf1b\xce\"\xecT\x8e_\xb1N$" + "\xd9\x8db|E\x86\x91\xc7\x00\xda8W\xde\xf0\x05\xe3" +
"ZgX\x9b\xcb\x85\xb1\xee\x7fu\xd6\xabSQ\xfa\xd7" + "9\xccl\xefW\xaf>dP\xc9$D\xeb\xc4\xa9\x8d" +
"\x99\xc8]\x9f\xc8\xbd\x96Ge(Bn\xd6[\xe7\xae" + "N3K\xbc\x90\xb3\x08\xfb\x9b\x93\xd7\xb9S\x89\xd6i" +
"\x9f\x09\x9b|\x12\xcfU\xba|\x94~K<*\xb7s" + "\xd6\xe6ra\xa2[c\x8d\xf9j\xd4\xa1\xfe%(\xd2" +
"(\xaae{\x08\x9b\xc3\xc7\x9fQ \x8cnD\x11\xd7" + "! r\xaf\xe5Q\x19\x89\x90\x9b\xf5\xd5\xe8\x10\xa4\xc3" +
"{\xf4<\x03\\\xe7\xbbk$)\x07\xaf\x12\x1f\x0b\xc6" + "\xd6\xa0\xc4s\xe5\xde \xa5\xdf\"\x8f\xcam\x1c\x8aj" +
"\x0b\x16\xd2\x16\x8c{\x80Ak\xbej\xe7\x0b\xf6\x1b:" + "\xc9\x1e\xc1\xa6\xf0\xcdh\x1c\x08\xe3\xdbW\xc4\xf5^=" +
"\xbcM\x89\xb7\xd3\xdd\xd2\xd6\x7f\xf5@\xbf\xad-\x1d\xda" + "\xc7\x00\xd7\xf9\xee\x1aI\xca\xc1c\xc6o\x05\xe3G\x96" +
"\x00\x9c\xf4-\x01\xc3V>\xfa\x9d{i\xaf\x09\x9c\xb4" + "\xdf\x16Lz\x80AC\xbfb\xe5\x8f\xecRtz\x8b" +
"[@.x\x97B\xff\xfdI\xdaq7p\xd26\x01" + "\x12og\xba\x05\xb1\xffV\x82~3\\zj\x03p" +
"\xf9\xe0Y\x09\xfdV\xef\xfc\xf5\x93\x108\xe9\x0e\x01c" + "\xd27\x04\x0c\x1f\x00\xd0\xef\xf7K\x8f\x9a\xc0I\xbb\x04" +
"\xc1{\x1e\xfa\x8db\xe9\xd6a\xe0$M\xc0x\xf0b" + "\xe4\x82\xe7,\xf4\x9f\xad\xa4\xbb\xef\x01N\xda& \x1f" +
"\x85\xfe\x0b\x86t\xf3\x16\xe0\xa45aC\x13:<;" + "\xbcF\xa1\xdf \xeeX?\x0d\x81\x93n\x170\x16<" +
":\xd1\xf19\x0fm.\xebG\xb77\xbdQ\x00\x9d\xe8" + "\x03\xa2\xdf^\x96n\x19\x05N\xd2\x04\x8c\x07\x0f]\xe8" +
"\xf8\xd7+\xfeB\xf7+w\x94\xdf\xa1\x031\xa7\xda\xac" + "\xbf{H7m\x01N\x1a\x08\xdb\xa0\xd0\xe9\xed\xa3\x0b" +
"\x93J^/\xc0a%\xc2A'*1\x8c\xf4\xc9\x01" + "\x1d\x9f\xf3\xd0\xe6\xb2~|S\xd4\xd3\x02\xe8B\xc7\xbf" +
".\xb5\xbfQ\xe3'\x13,D\xfd\xf9\x1f3\xe6\xf2\xf5" + "\x94\xf1\x1fu+s\xb5\xfc\xbe\x1e\x88Y\xd5f]T" +
"\xb4\xa6}\x82Nod]\xaa\xad\x9bxT\xa6s\xe3" + "({\x01\x0e\xcb\x11\x0e\xbaP\x89a\xa4\xbb\x0ep\xb1" +
"\x96\xd3\xb1\x0bY\xe1\x93_\xa4\xc9\xb4\xfe\x1f\x06\xeb\x1f" + "]\x91*?\x99b!\xea\x8f\xff-c._\xcbj" +
"\xa7p\xfd#\x1e\x95\x13\x11\xb7~\x9d\x84\xaf\xf2\xa8\xbc" + "Z'\xe8\x0fG\xe6\xa5\x8a\xbc\x91Ge&7I\xc1" +
"\x19)G\xdf _?\xc1\xa3\xf2~\xd8\xbc\x7f\xf7n" + "]3tz\x06\xfb\xe4\x17i0\xcd\xff\x07\xc1\xfcG" +
"\x00\xe5}\x1e3\x91JK\xfa\x90\x06\xfe\x96\xea\x11\xb7" + ")\\\xff\x88G\xe5X\xc4\xad_'\xe1\xab<*o" +
"\xceB\xaf\xce\x8a\xe3\x03\x00\xd9\x04\xd5))\xb7\xce\x8a" + "F\xca\xd17\xc8\xd7\x8f\xf1\xa8|\x10\xb6\xfc\xdf\xbb\x07" +
"yu\x96\x84\xfd\x00\xd9f\x92\xcf\x8c\xd6Y3\xf0F" + "@\xf9\x80\xc7t\xa4\xd2\x92\xce\x93\xe2o\xa8\x1eq\xeb" +
"\x80\xect\x92\xcf\xc6\xd1Wf\xa1l\x86\xe5o\xc1\x18" + ",\xf4\xea\xac8>\x00\x90\xa9\xa7:%\xe9\xd6Y1" +
"\\\xae\xe9u\x93\xb7\xff\x9a\x80\xf62U+\x94M\x06" + "\xaf\xce\x92p\x10 \xd3D\xf2Y\xd1:\xab\x05\xd7\x00" +
"a\xedP\x096\xdd\x91r\xc6{f\xf0:\x8aY\"" + "df\x92|6\x8e\xbfh\x0b%3,\x7f\xf3\xc6\xf0" +
"a\x1e\xad\xa0\xdb8\x81f\xc5X\x99\xac`\x94\xf3\x03" + "rM\xaf\x99\xbc\xfd7\x08\xb4\x97\xa9Z\xbed2\xa8" +
"\x05\xd5d\xf9,3\x05/ \xf4\xf1q%\x81\x91W" + "\xbc\x82\xf4\xf6D\xca\x19\xefq\xc2\xebCf\x88\x849" +
"\x7f\x80\xf0u6B\xf613\xe3R\xd34\xd0\xac\xba" + "\xb4\x82\x1e\xe5\x14Z\x1c\x13e\xb2\xbcQ\xca\x0d\xe5U" +
"j,\x08\xaf\x1a\xc1M\x83nL\xd7\xf1\xa8\xac\xa6\xa3" + "\x93\xe52\xcc\x14\xbc\x80\xd0\xcf\xc7\x95z\x8c\xfc\xb3\x00" +
"\xed\xf4\x8eV\xe9\x0f/Gm9\xb5l\xb1\x1aL\x80" + "@\xf8\xa8\x1b!\xfb\x84\x99q\xa9i\x1ahV\\5" +
"gf\xd0\xb0\xb2\x86\x8cr!\x9fa \xd8\xe6\xfa*" + "\x16\x84W\x8d\xe0\xa6\xb1&\xbc\xe1I\\W\xf9\x8a7" +
"H\xc7\xad\xfe\xb3L\xf4#a\x93\x1b\x09\xfd7F\xf4" + "\x18^\x8e\xda\xb2j\xc9bU\x98\x00\xcf\xcc\xa0\xcde" +
"\x9f\x12%e\x0fp\xd2\x0a\x8a\x84\xfes\x17\xfaO\xdd" + "\x8d\x18\xa5|.\xcd@\xb0\xcd\xf5U\xb7\xba\xd8d\xd1" +
"R\xd7A\xe0\xa4k(\x12\xfa/\xbd\xe8?_J\xf3" + "W\xf4#a\xa3\x1b\x09\xfd\x97I\xf4\x1f %e7" +
"_\x02N\x9a\x1fy\x85\xf1\xf1\xa9y\x85\xf1>\xb8\xfe" + "p\xd2\x0a\x8a\x84\xfe#\x19\xfa/\xe4R\xf7~\xe0\xa4" +
"@\x1f*\x09\x95\xab\xce\xa8\x14\xa1\xa2-\x85K\xe8\xd1" + "?\xa7H\xe8\xbf\x0f\xa3\xff\xe8)u\xbc\x04\x9c\xd4\x11" +
"x\x095r\x9c\x13z\xba\xb8\xe8\x8e\x7f\xf0\x8f&U" + "y\xbb\xf1\xf1\xa9z\xbb\xf1>\xb8\xfe@\x1f\xca\x09\x95" +
"1\xa7\xf1R{a~j\xfc\xff\x00\x00\x00\xff\xff\xe5" + "\xab\xcc\xa8\x14\xa1\xa2\x8d\x88\x8b\xe8\xecx\x095r\x9c" +
"\xf9\xce\x8f" "Sz\xf0\xb8\xe0w\x82\xe0\xffS*bN\xc3\xc5v" +
"\xd0\xfc\xd4\xf8\xff\x01\x00\x00\xff\xff|\xba\xdf\xe8"
func init() { func init() {
schemas.Register(schema_db8274f9144abc7e, schemas.Register(schema_db8274f9144abc7e,