TUN-2582: EventDigest field in tunnelrpc

This commit is contained in:
Adam Chalmers 2019-11-22 10:17:23 -06:00
parent b0d31a0ef3
commit f51712bef9
4 changed files with 278 additions and 256 deletions

View File

@ -43,15 +43,17 @@ type TunnelRegistration struct {
}
type SuccessfulTunnelRegistration struct {
Url string
LogLines []string
TunnelID string `capnp:"tunnelID"`
Url string
LogLines []string
TunnelID string `capnp:"tunnelID"`
EventDigest []byte
}
func NewSuccessfulTunnelRegistration(
url string,
logLines []string,
tunnelID string,
eventDigest []byte,
) *TunnelRegistration {
// Marshal nil will result in an error
if logLines == nil {
@ -59,9 +61,10 @@ func NewSuccessfulTunnelRegistration(
}
return &TunnelRegistration{
SuccessfulTunnelRegistration: SuccessfulTunnelRegistration{
Url: url,
LogLines: logLines,
TunnelID: tunnelID,
Url: url,
LogLines: logLines,
TunnelID: tunnelID,
EventDigest: eventDigest,
},
}
}

View File

@ -19,8 +19,9 @@ const (
)
var (
testErr = fmt.Errorf("Invalid credential")
testLogLines = []string{"all", "working"}
testErr = fmt.Errorf("Invalid credential")
testLogLines = []string{"all", "working"}
testEventDigest = []byte("asdf")
)
// *PermanentRegistrationError implements TunnelRegistrationError
@ -31,8 +32,8 @@ var _ TunnelRegistrationError = (*RetryableRegistrationError)(nil)
func TestTunnelRegistration(t *testing.T) {
testCases := []*TunnelRegistration{
NewSuccessfulTunnelRegistration(testURL, testLogLines, testTunnelID),
NewSuccessfulTunnelRegistration(testURL, nil, testTunnelID),
NewSuccessfulTunnelRegistration(testURL, testLogLines, testTunnelID, testEventDigest),
NewSuccessfulTunnelRegistration(testURL, nil, testTunnelID, testEventDigest),
NewPermanentRegistrationError(testErr).Serialize(),
NewRetryableRegistrationError(testErr, testRetryAfterSeconds).Serialize(),
}

View File

@ -21,6 +21,8 @@ struct TunnelRegistration {
tunnelID @4 :Text;
# How long should this connection wait to retry in seconds, if the error wasn't permanent
retryAfterSeconds @5 :UInt16;
# A unique ID used to reconnect this tunnel.
eventDigest @6 :Data;
}
struct RegistrationOptions {

View File

@ -125,12 +125,12 @@ type TunnelRegistration struct{ capnp.Struct }
const TunnelRegistration_TypeID = 0xf41a0f001ad49e46
func NewTunnelRegistration(s *capnp.Segment) (TunnelRegistration, error) {
st, err := capnp.NewStruct(s, capnp.ObjectSize{DataSize: 8, PointerCount: 4})
st, err := capnp.NewStruct(s, capnp.ObjectSize{DataSize: 8, PointerCount: 5})
return TunnelRegistration{st}, err
}
func NewRootTunnelRegistration(s *capnp.Segment) (TunnelRegistration, error) {
st, err := capnp.NewRootStruct(s, capnp.ObjectSize{DataSize: 8, PointerCount: 4})
st, err := capnp.NewRootStruct(s, capnp.ObjectSize{DataSize: 8, PointerCount: 5})
return TunnelRegistration{st}, err
}
@ -242,12 +242,26 @@ func (s TunnelRegistration) SetRetryAfterSeconds(v uint16) {
s.Struct.SetUint16(2, v)
}
func (s TunnelRegistration) EventDigest() ([]byte, error) {
p, err := s.Struct.Ptr(4)
return []byte(p.Data()), err
}
func (s TunnelRegistration) HasEventDigest() bool {
p, err := s.Struct.Ptr(4)
return p.IsValid() || err != nil
}
func (s TunnelRegistration) SetEventDigest(v []byte) error {
return s.Struct.SetData(4, v)
}
// TunnelRegistration_List is a list of TunnelRegistration.
type TunnelRegistration_List struct{ capnp.List }
// NewTunnelRegistration creates a new list of TunnelRegistration.
func NewTunnelRegistration_List(s *capnp.Segment, sz int32) (TunnelRegistration_List, error) {
l, err := capnp.NewCompositeList(s, capnp.ObjectSize{DataSize: 8, PointerCount: 4}, sz)
l, err := capnp.NewCompositeList(s, capnp.ObjectSize{DataSize: 8, PointerCount: 5}, sz)
return TunnelRegistration_List{l}, err
}
@ -4302,249 +4316,251 @@ func (p ClientService_useConfiguration_Results_Promise) Result() UseConfiguratio
return UseConfigurationResult_Promise{Pipeline: p.Pipeline.GetPipeline(0)}
}
const schema_db8274f9144abc7e = "x\xda\xc4Z}\x90\x14ez\x7f\x9e\xee\x19\x9a\x85]" +
"f\xda^\x8b=\x04\x16(\x8d\xc2\x09Q\xd1D7\xf1" +
"f?\x80\xdb\xe5\xf8\x98\xdeYPWL\xd1\xcc\xbc\xbb" +
"\xdb\xd0\xd3=t\xf7\x00K\xf0\x10\x0a\xe3\xb9\x91\x13<" +
"I\x89\x07W\x80\x1a?\xc2\xe5\xc0\x83\x8a\x1a\xce:\x13" +
"\x8d\x98\xbb\x8b\xde\x05R\xc7\xc5\xaa3\"\x95\xd2\x0ae" +
"\xd4\xb3,Sj\xa7\x9e\xb7?wv]\xc0\\U\xfe" +
"\x81\xa9\xa7\x9f\xf7\xe3\xf9\xfa=\x1f\xef^\xd7;\xa1U" +
"\xb8>}u\x06@=\x92\x1e\xe7\xb19\xbf\xda|\xe0" +
"\xaa\x7f\xdc\x0e\xea\x14D\xef\xdb'\x167~\xean\xff" +
"wH\x8b\x12\xc0\xfcAi3*;%\x09@\xb9_" +
"\xfaO@/\xfd\x07\xa7\xdf\xaa\xbc%\xed\x00yJ\x92" +
"Y \xe6\xf2\xf8\xc5\xa8l\x1bO\xccw\x8f\xdf\x08\xe8" +
"\xfdi\xf9\xf5C\x7f\xb4\xe7g\xc4,\xc4\xcc\x80\xf3\xcf" +
"\x8d\xdf\x8c\xca\xa7\x9c\xf3\xe3\xf1\xcb\x01\xbd\x8f\x1en\xfa" +
"\x9b\x83\xffr\xf2^\x90\xafF\x08\xcen\xa8\xfb\x0d\x02" +
"*3\xeb~\x04\xe8\xfd\xebu[\xdeY\xfd\xd1\xee\xef" +
"\x0c?7E|/\xd5\x0d\xa1r\xa6N\x02\xd1\xdb\x7f" +
"g\xe3?\xe3\x81Ov\x83|\x0dm\x83\xf4\xf9x\xdd" +
"\x04\x01P\xf9E]\x0e\xd0{\xfd\xda\x13/\xec\xfa\xf1" +
"}\xdf\x07\xf5jD\xf0\xd7\x9f\xaf\xfb\x1f:\x07'\x10" +
"\xc3\x07\x8f\x7f=\xf5\xc3\xd7/\xfb\x01g\xf0\x9e\xf8\xe5" +
"m\xcf\xee\xfa\xf1\x8c\xf7`\x85 a\x0a`\xfe\xec\x09" +
"6\xf1\xde4\x81t\xf1\xf0\xaf\x7f\xb2\xac\xbc\xfb\xd1C" +
"\xfe\xa5\xf9^\x97O\x14\x04Hy;\xba>)\xafx" +
"\xac\xf0XR\x9c\xba\x89\x1f\xd2\xd2i\x13I\x9c\x9b~" +
"sn\xf9\xd2g\xfb\x9e\x0c\x18\xf8E\x9f\x9f\xf8,1" +
"\xbc6\x91\xeeqrc\xf6\x81\xb6?~\xf0\xc9Z\xab" +
"\xa4\xf9\x8d'\x0e\xa1\x92\xae\xa7\x9fX\x7f\x1b\x02zC" +
"\xb7\xfcd\xe5G\x7f\xe1<\x03\xea\\Ly/\xdf\x7f" +
"v\xc3\xec\xa7\xfb^\xe5\xd7\x16\xc9\x8c\x0d\xbf\xa2\xadw" +
"6\xd0\xd9\x0d\x7f?g\xd9\x83\xef,9J['\xcc" +
"\xe2_b\xee\xa4\x16Tn\x9dD\x96\xb9e\x12q\xbf" +
"q\xed\xca\x17_<\xd2\x7f\xb4\xf6\"\xdc\xe2g&-" +
"F\xe5<\xe7~\x97s_\xde\x85o\xfe\xf4\xfa\xd4\xdf" +
"%\x05\xdf\x9fy\x8f\x0e?\x9a!\x86;?;\xfe\x0f" +
"\x0b\xdf?\xf5|\xd2BjV \x0b\xb1,\x09\xde;" +
"\x84\xe57[Z_\x04\xf5\x1aDo\xed\x9e-n\xe7" +
"#;=X\x81\x12\x0a\x00\xf3wf7\xd3f{\xb3" +
"\xe4_\xd3\xce\xb77\x98\xefo\xffi\x8d3\xf2S?" +
"\xce.F\xa5N\xa6\xab\xa5\xe5\x1f\x01~\xf2\xcc}\xbb" +
"\xba\xce.xU\x9d\x82\xa9Z\xa1\x0f\xca\x9bQ9N" +
"\xbc\xf3\x8f\xca\xcd\xa4\xcfH\x835\xec\\\xea\xff\xb8l" +
"-*\x1f_F??\xb8\x8c\xb3/\xbe\xf3{\x0f\xa5" +
"\xcf}\xef\xd5Z\x95R\xe0\xcc\xff\\\xb1Q\x91\x1b\xb9" +
"K7\xfeV\x00\xf4\xa6\x1c\xf9\x93\xbfm/\x9d\xf9\xd9" +
"(A\xa4\xdc:\xf9C\xa5k2\xfdZ8\x99d<" +
";\xf7\xe8\x9f\xbf\xbb\xf3\x97\xa7\x92\x9erp2\xf7\xd8" +
"\xe3\x93Ia\xf7}}p\xf3\xb2\xab\x86N\xd7\x1a\x88" +
"s\x9e\x9e<\x84\xcay\xbe\xdd\xbb|;\xe1\x9c\xf6\xb5" +
"{\xfe\xed\x1bo&|\xf6\x8e\xa6\xb7\x11R\xde\xb2\x95" +
"w\xae\xad\xbb\xfb\xec\xd9\xe4AK\x9b\xb8\xe9\xb4&:" +
"\xe8\x98\xfc\x90r\xe2\xe0_\xbfC\x07I\xb5\xea\xde\xd6" +
"\xd4\x8b\xca\x9e&\xfa\xb9\xbb\xe9I\x122\x8a\x9d\xd1\x1c" +
"g\xe7\x15-\xa8\xec\xbf\x82\xee\xb5\xf7\x0a\xba\xd7M\xab" +
"\xdb\xd8\xaa\x9bo\x7f\x0f\xe4)\xe20\xa88C\x9c\xef" +
"\x12\xe7\xfcsW\xdc\x87\xca\xf9\xa9\x12\x80\xf7\xdd\xfe\xde" +
"\xd7>\xe88\xf8\xdf\xb5\x9bs\x81NOmA\xe5\xdc" +
"Tn\xaa\xa9\xdc>\xf3\xaf\xff\xcb\xf3{\x1e\xeb\xf8`" +
"\xc4\xees\xa7\xb7\xa3r\xebt\xee\xee\xd3\xbf\xa9\xe8\xd3" +
"\xf9\xe6\xdf^\xb0\xfc\x96Y/}\x98\xd4\x84:\x9dG" +
"/\x9bN\x9a\xe8\xbb\xf9\xbf\xbey\xd5w\xff\xe9\xc3\x1a" +
"\xfbq\xc6{\xa7\xcfAe\x0f\xdfq71\xbf\xbf\xe8" +
"\x07\xa7\xa6d\xa6\xfcn\xb4\x8b\x1e\x9f\xbe\x16\x95\xd7\x88" +
"w\xfe+\xd3y\x1c\xdf\xfe\xf6\xa3\x1bs\xdf\xff\xdd'" +
"$\x97X\x83s\xb7\xcc\xe8Ee\xe9\x0c\xda\xb9k\x06" +
"\xc5\xd2\x92\xc3g\xbe1\xb0\xe7\xe4\xa7\xa3\"\xf7\xc73" +
"\xb6\xa3R7\x93\xfb\xffLB\xab\xbf\x92\xf6\x9d\xbd\xe7" +
"\xb7\x7f\xf6YR\xaa\xf33\xdf\xe6\xd07\x8b\xa4\xda\xf2" +
"\xfe\xde\xce\x07W\x1d\xfe\"\xc90s\xd6\x0b\xc4p=" +
"g\x88\x82q4OSg\xb5\xa3\xa2\xcd\xa2\xf3\xee\x9a" +
"\x95\x83\xb9\x9e[5Mf\xd8\x95T\xf1\x0f\xc3\x9f\xc5" +
"yE\xadbVZ\xda\xaa\xee\x003]\xbd\xa8\xb9\xac" +
"\x9b\xe5\x9c\x8ae:,\x8f\xa8f\xc5\x14@\x0a\x01d" +
"m-\x80\xbaZD\xd5\x10PFl$\xb4\x96u\"" +
"\x0e\x88\xa8\xba\x02\xca\x82\xd0H\x88 \xaf\x9f\x05\xa0\x1a" +
"\"\xaa\x9b\x04D\xb1\x91\xf0N\xae>\x04\xa0n\x12Q" +
"\xdd!\xa0WavY3\x99\x09\x19w\xa1mc=" +
"\x08X\x0f\xe8\xd9\xcc\xb5\x07\xb55\x06dX\x82,\xad" +
"\xdd\xe8b\x03\x08\xd8\x00\xe8\x0dXU\xdbYa\xba\xa8" +
"\x1b\xdd\xac\xcff\x0e\x0e\xe08\x10p\x1c\xe0X\xe2u" +
"X\xa6\xc9\x8an\xa1Z,2\xc7\x01 \xc9\xc6G\x92" +
"\xcd~\x14@\xbdVD\xf5\xe6\x84d7\x91d7\x8a" +
"\xa8\xb6\x0a\xe89\xcc\xde\xc0\xec%\x16\x165W\xb7\xcc" +
"e\x9aXf\xd1\xb5\x8b\x86\xceL\xb7\xc3\x82\x8c\xd9\xa7" +
"\xf7c6\x0e\x05@\xcc\x8e}\xb1\x85\x9bt\xc7\xd5\xcd" +
"\xfe\x1eN\xcf\xe5-C/\x0e\xd2\xed\xea\xb9&\xa7\xb5" +
"\xd0\x1e\xf2\xe5\xbd\x00(\xc8r;@N\xef7-\x9b" +
"y%\xdd)\x92P \x16\xdd\xadk4C3\x8b," +
":h\xdc\xc8\x83\xfc\x03\x0a\\\x8eyZ\xc2\xdaW\xe6" +
"5[\x13\xcb\x8eZ\x1f\xe9ca/\x80\xba@D5" +
"\x9f\xd0\xc7\xd2\xc5\x00\xea\x12\x11\xd5\xdb\x13\x96^\xd1\x0e" +
"\xa0\xe6ETW\x09\xe8Y\xb6\xde\xaf\x9b\x1d\x0cD;" +
"i0\xc75\xb52\x03\x80Pa[\xad\x0a)\xd1\xc1" +
"l\x8c\xd25\x9aJ\x8f\x14\xa0\x93\x19\x86u\x9be\x1b" +
"\xa5\xe5\xfe9\x16i\x9b\x9b2Z&\x8dbyn\x1c" +
"\x92[/\xb2yU\x87\xf9\xeb\xaa67\xe4\x95\xdd\xcc" +
"\xa9\x1a\xae\x03\xa0\xa6\"\xf1\x1bZ\x00\xd4\xf1\"\xaa\x8d" +
"\x02\xe6l\xce\x80\xd9\x18\xd4k\xaez!]WM\x9b" +
"\xf5\xeb\x8e\xcbl\x9f|e\x8e\x14^v\x92\x07\x92\xff" +
"eET\xa7\x0a\xe8\xf5\xdbZ\x91\xe5\x99\x8d\xbaUZ" +
"\xa6\x99VAdEL\x83\x80\xe9\xb1=i\x91\xa6\x1b" +
"\xac\xe4K7\xaf\xd8\xcc\xff\xa7\xe8\xad\xf7<?|{" +
"\xe3\xf0m\xc0/\xbc ~7\xc7\xf1\xdb |\xee\x8d" +
"\x0c\xe0\x06\xf13/\x08a\x8a\x08WD\xf5\x1e\x8a\x88" +
"j\x85t\xea\x80h\xd9\x98\x8dQ2\xd0\x0e+\xf5\x93" +
"\xa6M\xc8\xb1\")\x1a\xb3a\xb6\xf7\x19\xa4\x925\x80" +
"\xd9\xb8\x94\x09\x96\xd9l\x03\xb3\x1d\x96\x87\x8cmm\x1a" +
"\xc4l\x9c\xf5k\xb4>\xe9R\xb5\x1e\x1a:Z5\xf6" +
"z\x9b\x15}\xc8\x08\x96\xe7\x9b}\xa3%\x82\x84t\xd4" +
"*\xa2\xba$\x11$]\x14$\x9d\"\xaa=\x89 Q" +
"\xdb\xe3\xc8\xa9\x01\xb3\xdfSl\x0c\xbbzp\xf1\xe8\xca" +
"\x09?#\x17\xa8\x17Qm\"\x0c\xa6\xaf\xcc\xa5h\xa5" +
"\xd3\xa2\xea\xf6\xc2\xa7u\xd0\xbf\x01\xa2\xe6\x83]\xec\x00" +
"T\x9b\xa2\xc3\xf6\xd2a\x8f\x88\xa8>\x9e\xd0\xcfA\x1b" +
"@= \xa2zX@\x0c\xd4\xf3\xf4!\x00\xf5\xb0\x88" +
"\xeas\x02\xca\xa2\xe0\xfb\xda\xf19\xd4\x0b\x89\xa8\xfe\\" +
"@9%6R\xa9/\xbfFq\xf2s\x11\xd5_\x0b" +
"(\xa7S\x8d\x98\x06\x90O\xaf\x01PO\x89\xa8\xbe\xf5" +
"e\x10T4\xacj\xa9\xcf\xd0\xa0\xd9f\xa5\xae\x05\x11" +
"\xdd\xac\x96\xf36\xdb\xa0\xa3Uu\xda\\\x97\x95\xa5\x8a" +
"\xeb\x84\xd9$\xe3j\xfd\x0eN\x02\xcc\x8b\x88\xd9\xb8>" +
"\x04$b\xb4'\xda\xac\xb4\x92\xd9\x8e.Zf\x94\x10" +
"t\xd3e\xa6\xbbD\x03i\x0d3\"\xea\x18\x80\xd1\x1d" +
"\xb8=9}\x10\xc1V\x0cr\xd8On7\xd5\xf3\x02" +
"%.\x9c\x13{\xde4\xfc\x82\xc8\xa4\xc7\xae\xee\xd8\xf7" +
"\xa6\x09\x9f\x13\x994\xa9\xf6\xc6\x10\x9d\x19p\xdd\x0af" +
"\xe3\xba10\xf6F\xb6\xc6\xb1\x8a\xeb\x18 !]T" +
"\xc4\x04_\x07\x02\xe4\x05\xd1(a6\xee\xfbj<E" +
"\xfc\xb2\xb4\x9b\xa3$o\xd9<\xab\xc5\xe1sC,D" +
"\x14=\xbd\xc9\xe8i\x0d\xa2gM|\xff\xe6\xa2Vu" +
"\xd8\xf0z\xa1\xad\xcf\x05\x91\xd9\x11D:\x03V\xd5(" +
"u3\x90\\{\x10\x11\x04\xc4\xb1\x81s\x81\xd5\x99P" +
"\xbc\xef\xc6\xa3\xe7\xc2(\x15\xf6&Sa\xa0\xfe\x15\xa4" +
"\xfe\x1e\x11\xd5\x8a\x80\x9eA\xd0cvZ :nt" +
"]\x9f\x98\xb7\xb8sJ \xa0\x04\xe8U+\x8ek3" +
"\xad\x0c\x18y\x1b\xf1O\xba\x84\x0cS\x83ty-S" +
"\x0bU\xff\xef\xf9\xfc\xd2\x13\xb3\x9f$\x87\xa5\xe5C\x89" +
",Y\x0cV#_\xdea\x99\xd2%\x97^\x01\x82\xf9" +
"\x89a^\x90\xe8\xa9*\x0c3\xe6lB\xf8+ET" +
"\xafKf\xcc\xb9\xa4\xa2kDTo\x14Pb6%" +
"\xbf\xa8}\xf7\x0f\xdd\xea\xf8e&f\xe3\xd9\xcc\x85\xaf" +
"\x93\xa8\xc0u\xcb\x1c\xe1\x86\xa3f\x9b\x1b\x12v\x0dM" +
"\xb8tM\"\xdb\xacc\x83\xa1\x95\x9aYY\xd3c4" +
"\x0a\x8c\xdb\x06\xd2\xb7b\x9e1+\xd5 \xa3\xfb\xf9<" +
"\xe7[\x8b.\xd9\x18]\xf2\xee!\x00\xf5\x1e\x11\xd5\x07" +
"\x12\x97\xbc\x9f\x0a\xff\x07DT\x1fI\\r\x0f)q" +
"\x97\x88\xea>\xc2\xfc\xa0E\xd8K\x06\xde'\xa2\xfa\x94" +
"\x80\x98\xf2!\xff\x09\x82\xfc\xa7DT\x8f\x09\x1c\xb0;" +
"\xdb:,\x13\x83K8\x00Q\xf1?\xc04\xdb]\xc3" +
"4t\xbbL\x97\xd9\x1b44BH\xd8\xea\xeaef" +
"U\xdd\x08\"\xca\xda&^-a\xa9\xd3_%i\xae" +
"\x83u `\x1dE\xa4\xc3\xec\x0e\x9b\x95\x90\xac\xa1\x19" +
"yMt\x07.FA\xc3A<3\x8az\xa8\xd6\xda" +
"\"\xa2\xfa\x1d\x82\x12L\x8c\x88\xe4{\xd7\x82\xc0\x91\x84" +
"d^\xdf\x1eW_<!\xa6k\xfa'\x9e\x10\xc7\x01" +
"\xc8\xdbH;;DTw\x09\xe1\xd5:-\xc8\xf9\x11" +
"Zk\xea\xa0?\xd9J\xa8\xa9\xb3X\xde\xa0^\xd0\xd1" +
"2{\xb8\xa20\xd6T\xd1*Wlre\xdd2\xd5" +
"\xaaf\xe8\xa2;\x18-\x1cS\x17\x04I~(/\xaf" +
"4sc\x912n\x0c\x95\xa1\xdc\x85\x8b\x01\x0a\xabP" +
"\xc4\xc2\x00\xc6\xee\xa20l\x07(\xac&\xba\x81\xb1\xc7" +
"(:N\x01(\x94\x88^\xc1\xa8\xadT\xca\xf8\x0c@" +
"\xa1B\xe4-\x18\x97\x0a\xca \xdf~\x13\xd1w`\\" +
"-(\xdbp\x0e@a\x0b\xd1\x1f!\xfa8\x81kR" +
"\xd9\x83k\x01\x0a\x0f\x13\xfd\x00\xd1\xa5t#\xf5\xd0\xca" +
"~\xb4\x01\x0a\xfb\x88\xfe\x14\xd1\xc775\xe2x\x00\xe5" +
"\x09N\x7f\x9c\xe8G\x88^\xf7\xb5F\xac\x03P~\x88" +
"\xdb\x01\x0a\x87\x89\xfe\x1c\xd1'`#N\x00P\x8e\xe3" +
"\xa3\x00\x85\xe7\x88\xfe2\xd1'\x8ek\xc4\x89\x00\xcaK" +
"\xfc>'\x88~\x92\xe8\xf5\xa9F\xac\x07P^\xc1C" +
"\x00\x85\x93D?\x85\x11\xdeu\x95\x92\xb0K\xee\xa6\xc7" +
"e\x87h9\x91\xc9Y\xd0V\xa2\x9f\x13\xf2V\x86\xfa" +
"J\xcc\xc4\xf3_@\xcc\x00z\x15\xcb2\x96\x0d\x87\xf3" +
"\x0bU>\x81\xbb@\xc62\xbbJQ\xfc\xf9N\xb6\xc4" +
"\x82\xe6\xa2ftU\xe2Z\xc8i\xab\xbaV\xb5\x02\xcd" +
"%\xcde\xa5(!\xdbUs\x91m\x95{\x90\xd9e" +
"\xdd\xd4\x0c\x88\xbe\x8c\xe5s\x99jU/E{\x8fY" +
"\xc0E\xee)\xd4\xbags\xa5\xa5G\xeb\xaf\x19\x01\xcc" +
"\x89\xb1>\x82\xae\xb97\xc4P\x9fI\x86T\xf3\x06\xcd" +
"\xa8\xb2\x8b\xa9\xec\xc6l*\xbas~Sr\xa1\xde3" +
"\x1cX]\xb84_Q\x93F\xfd\xe46b\xde\xd1\x1e" +
"\x0b\x1b\xc9j\x073\x90N!N`\xa1I\xfa\x82\xde" +
"\x12\x9ai\xef\x84sD\x13\xc5\xc09.V\x13\xfd\xcc" +
"\xf5\x7fu\x99}\x16\xe5zI+;_qu7s" +
"2\x17\xa3\xc5xFx\xe1d\xdc\xd9\xd3\x93\x8f\xc7\x0c" +
"\xa2\x8f\xe4\xd7E\xe0\xd5\x86\xdd\x00\x85V\x8a\xce%\x18" +
"\xe9P\xe9\xe2 \xd2I\xe4\x1e\x8cKXE\xe5`\x91" +
"'\xfa*\x8c\x9b\x1c\xe5\x0e\x1e\xe41\x06\xa6\xda|\xf0" +
"b|\xfb\x08\xeb\xe44\xfa\xe0U\xe6\xfb\x1bD\xdf\x94" +
"\x04\xaf*\x0e\x0d\x03;I\xf4\xc1k\x1b\x07\x9d\x1dD" +
"\xdf\xc5\xc1+\xe5\x83\xd7N|\x16\xa0\xb0\x8b\xe8\xfb8" +
"x\xa5}\xf0\xda\x8b/\x0c\x03\xbb\x09\xe3|\xf0z\x82" +
"\xf3?E\xf4c\x1c\xbc\xda}\xf0:\xca\xc1\xee\x08\xd1" +
"O\x10HUm\xa3\xe0\xda\xba\x09\xd8\x1f\xc7F\xb1\xf2" +
"-\xc6*m\x901\xf4\x0d,J,%]3\x16T" +
"5\x03\x9a\x0b\xaeV\\\x17\xd7\xe9\x86\xd3\xa9\x99%\x07" +
"\x07\xb4u\x8c\xd2\x91\x94L\xdc\xae\xe1\xacd\xb6\xde\x07" +
"\x18W\xf6Q!\x93\xc9[Vm}\xc3\x0bDf\xfb" +
"\x08\x17}+k\x9b\xbaJ\x06\xeb\xc0\xb0\x9c\x11\xcd8" +
"\x1d\xea\xf4\xc52M\xf4k\x8c\x1e\xbdyx\xf1P\x09" +
"z\x85\xb0\x08\xe9\xc9\xd5T\x17lS\x85\x15\xdd\x0e\x0b" +
"MW7\xabl\xc4\x06\xc5\x81\xaa\xb9\x8e\x95\x16\xa2Y" +
"\xb4J\xba\xd9\x0f#\x9a\x14\xf1\xcb\xa6;\x89\xaa\x8bG" +
"3&^\xc7\xe4\xd9- p\xe8\xa2\x1aBn\x89[" +
"\xfd\\\x91\xaf\xca\xd9Ls\x12]\xea\x18\xa7\x05\xd3H" +
"?\xc8\xfc\xb6>\x0d\x10=%a8\x8e\x97\x8fn\x06" +
"A~Z\xc2\xf8\x15\x03\xc3G\x0by\xbf\x0d\x82\xbcG" +
"B!z\xe2\xc3\xf0yN\xbe\x7f\x08\x04\xf9^\x09\xc5" +
"\xe8\xd9\x0d\xc3Y\xb7<\xd8\x0e\x82\\\x960\x15=A" +
"b8(\x975\xaa\x93\xee\x900\x1d\xbd\xe7a\xf8\x1a" +
"#/\xdd\x0e\x82\xbcP\xf2\xc2v\x08r\xbe\x18\xad\xe8" +
"\x85\x80\x01\xcd\x1c2Z\xd1\x0b\xe7C\x18\xb6M\x00\xad" +
"\xb85\x80\xe7V\xf4\xc2\x09)d\x8a\x9a\xcbZ\xa9\xd7" +
"\xf4?b\x00\xde\xd0\x8a\xc9\xc9\xa3\xf8e\x0d\xce\xe8\x85" +
"r{\\\xcc\x85\x00\xbcm(\xae\xe5\xa2\xa6r\xe73" +
"\xc9:9\x98\x8d\xec\xdd\x1eLV\x8e%f#G\xa9" +
"x>&\xa2\xfa\x86\x10W\x06\xa1O\x87\xc3:\xb4\xec" +
"\xb0\xcb\x1dcf\x17x~P\xc3\xd6N\xee\xbc\x925" +
"\xc0k\\\xf4\xb7r N\x07\xc9q\xde\xa4\xc48\x0f" +
"\xc3\xfeZ\x1a\x96=\x92\xc3\xbdI\x17h\xd6\x92\xdd\"" +
"Og)\xee\x92\xe1\xe3%\x86\xef\xcc\xb2L\xae\xd5 " +
"yaG\x89a.\x84\x1a\x93]b[\xdd\xcd\x9a\xff" +
"/\xc9z\x14\x07\xf1\xcf\xc9\x90G\xfa\x02E\xfb\xaeM" +
"\xcc\xe9\x0c+\xe8\x083\xcb\x92E\xfd\x18\xba\xf2/\x1c" +
"\x96\xe0\x19Z\\3\x9a\xa3f\xf2a\x11\xd5\x03\x89b" +
"g\xff\xac\xc4\xbc.\xec\xd3\x0e.\x0e\xe6u'\xe2\x97" +
"\x9c\xe7\xc9QO\x88\xa8\x9eL\xb8\xdf+\xc4\xf8\xb2\xef" +
"~a\xbe\x92\x7fA=\xcb\x1b\"\xaao\x06\xadr\xf8" +
"\xa2S\xb5c\xa06\xac\xfe%\xba\xc9\x1c\xaa@k\x06" +
" \xe13\x11\xba\x04\x7fU\x9b0|8Vv-H" +
"\x14\xae\xd1<\x08\x99]\xa0p-\xa1\x13\xcdY\xc6\xd0" +
"W!\x88\x0e?8\x82d\x9fh\xbd\x0f%\xa6R\xa1" +
"\xb6\xd4\x17\x82i\xcf\xea\x84\xb6\xee\xa2\xd6{\x95\x88\xea" +
"\x80\xc0\x11\xc4ZQ)i\xe8\xb2E6[_e\x92" +
"Y\x1c\x8c[Pj\xc2\x8a\xce\x0a\xacPY\xbc\xc8f" +
"\xb9\xf5U\x96d\x08\x9f\x01@\xd2\xad\xd2\x88\xf9\xff(" +
"\xa5\xdfmlM\xc1*\xaec\xee\xb0\xe7\x91\x9a'\xbc" +
"\xee\xf8\x0d z\xc1\xebN\xbe\xe0\x05\xb8\xb3\x9e<\xb0" +
"\"\xa2\xba%\x81;\x83Cq\xff:z\xae\xff\xfd\xa4" +
"\xe7\xaf\xf4\x8aE\x95\xaet1U`\xf4\xc75_q" +
"\xac~\xb1E{\xfc6{\x89\xa3(\x88\xc0\x00\x13\x7f" +
"{A\x87\x08\xc1\xe6\xff\x1b\x00\x00\xff\xff\x99N\xd0U"
const schema_db8274f9144abc7e = "x\xda\xc4Z{\x90\x15ev?\xa7\xfb^\x9a\x81\x19" +
"\xeem{,f\x11\x18\x9d\xd2(\xac\x10\x15It\x12" +
"w^\xc0\xce\xb0<n\xcf\x1dPG6Es\xef7" +
"3=\xf4\xed\xbet\xf7\x05\x86\xe0\"\x14\xc6u\"+" +
"\xb8\x92\x12\x17\xb6\x045>\xc2f\xc1\x85\x8a\x1a\xb44" +
"\xd9\x8d\x98\xdd\xc4\xdd\x0d\xa4dc\xd5\xba\"\x95\xc2\x92" +
"2\xbe\xca\x98R;u\xbe~\xce\x9dq\x00\xb3U\xf9" +
"\x07n\x9d>\xdf\xe3\xbc~\xe7\xf1\xcdu\x83\x93Z\x85" +
"\xeb\xd3Wg\x00\xd4C\xe9\x09\x1e\x9b\xfd\xebM\x8f\\" +
"\xf5\x8f\xdb@\x9d\x86\xe8}\xe7\xd8\xe2\xfaO\xddm\xff" +
"\x01iQ\x02\x987$mBe\x87$\x01(\xf7J" +
"\xff\x09\xe8\xa5\xff\xe0\xe4\x9b\xe57\xa5\xed OK2" +
"\x0b\xc4\\\x9a\xb8\x18\x95\xad\x13\x89\xf9\xce\x89\x1b\x00\xbd" +
"?-\xbdv\xe0\x8fv\xff\x9c\x98\x85\x98\x19p\xde\x99" +
"\x89\x9bP\xf9\x94s~<q9\xa0\xf7\xe1\x83\x0d\x7f" +
"\xb3\xff_\x8f\xdf\x0d\xf2\xd5\x08\xc1\xd9u5\xbfA@" +
"\xe5\x8a\x9a\x1f\x03z\xffv\xdd\xe6\xb7W\x7f\xb8\xeb\xbb" +
"#\xcfM\x11\xdf\xcb5\xc3\xa8\x9c\xaa\x91@\xf4\xf6\xdd" +
"Q\xff\xcf\xf8\xc8'\xbb@\xbe\x86\xb6A\xfa|\xb4f" +
"\x92\x00\xa8\xfcKM\x0b\xa0\xf7\xda\xb5\xc7\x9e\xdf\xf9\x93" +
"{~\x00\xea\xd5\x88\xe0\xaf?W\xf3?t\x0eN\"" +
"\x86\xf7\x1f\xfbz\xeaG\xaf]\xf2C\xce\xe0=\xfe\xab" +
"[\x9f\xd9\xf9\x93\xcb\xdf\x81\x15\x82\x84)\x80y\xb3&" +
"\xd9\xc4;\x7f\x12\xe9\xe2\xc1\xd7_XV\xda\xf5\xf0\x01" +
"\xff\xd2|\xafK'\x0b\x02\xa4\xbc\xed]\x9f\x94V<" +
"\x9a\x7f4)N\xcd\xe4\x0fh\xe9\x8c\xc9$\xce\xfc\xdf" +
"\x9cY\xbe\xf4\x99\xbe'\x02\x06~\xd1\xe7&?C\x0c" +
"\xafN\xa6{\x1c\xdf\x90\xbd\xaf\xed\x8f\xef\x7f\xa2\xda*" +
"i~\xe3\xc9\xc3\xa8\xa4k\xe9'\xd6\xde\x8a\x80\xde\xf0" +
"\xcd/\xac\xfc\xf0/\x9c\xa7A\x9d\x83)\xef\xa7\xf7\x9e" +
"^?\xeb\xa9\xbeW\xf8\xb5E2c\xdd\xafi\xeb\x1d" +
"utv\xdd\xdf\xcf^v\xff\xdbK\x0e\xd3\xd6\x09\xb3" +
"\xf8\x97\x983\xa5\x19\x95[\xa6\x90en\x9eB\xdc\xbf" +
"\xbcv\xe5\x8b/\x1e\xea?\\}\x11n\xf1SS\x16" +
"\xa3r\x8es\x9f\xe5\xdc\x97v\xe1\x1b/]\x9f\xfa\xbb" +
"\xa4\xe0\xfb2\xef\xd0\xe1\x873\xc4p\xc7gG\xffa" +
"\xe1{'\x9eKZH\xcd\x0ad!\x96%\xc1{\x87" +
"\xb1\xf4Fs\xeb\x8b\xa0^\x83\xe8\x0d\xee\xde\xecv>" +
"\xb4\xc3\x83\x15(\xa1\x000oGv\x13m\xb6'K" +
"\xfe5\xe3\\{\x9d\xf9\xde\xb6\x97\xaa\x9c\x91\x9f\xfaq" +
"v1*52]--\xff\x18\xf0\x93\xa7\xef\xd9\xd9" +
"uz\xc1+\xea4LU\x0b\xbd_\xde\x84\xcaQ\xe2" +
"\x9dwXn$}F\x1a\xacb\xe7R\xff\xee\x92A" +
"T>\xbe\x84~\xbe\x7f\x09g_|\xc7\xf7\x1fH\x9f" +
"\xf9\xfe+\xd5*\xa5\xc0\x99\xf7\xb9b\xa3\"\xd7s\x97" +
"\xae\xff\xad\x00\xe8M;\xf4'\x7f\xdb^<\xf5\xf31" +
"\x82H\xb9e\xea\x07J\xd7T\xfa\xb5p*\xc9xz" +
"\xce\xe1??\xbb\xe3W'\x92\x9e\xb2\x7f*\xf7\xd8\xa3" +
"SIa\xf7|}h\xd3\xb2\xab\x86OV\x1b\x88s" +
"\x9e\x9c:\x8c\xca9\xbe\xddY\xbe\x9dpF\xfb\xda]" +
"\xff\xfe\x8d7\x12>{{\xc3[\x08)o\xd9\xca;" +
"\x06k\xee<}:y\xd0\xd2\x06n:\xad\x81\x0e:" +
"\"?\xa0\x1c\xdb\xff\xd7o\xd3AR\xb5\xba\xb76\xf4" +
"\xa2\xb2\xbb\x81~\xeejx\x82\x84\x8cbg,\xc7\xd9" +
"qY3*\xfb.\xa3{\xed\xb9\x8c\xee5\x7fu\x1b" +
"[u\xd3m\xef\x80<M\x1c\x01\x15\xa7\x88\xf3,q" +
"\xce;s\xd9=\xa8\x9c\x9b.\x01x\xdf\xeb\xef}\xf5" +
"\xfd\x8e\xfd\xffU\xbd9\x17\xe8\xe4\xf4fT\xceL\xe7" +
"\xa6\x9a\xce\xed3\xef\xfa\xbf<\xb7\xfb\xd1\x8e\xf7G\xed" +
">gf;*\xb7\xcc\xe4\xee>\xf3\x9b\x8a>\x93o" +
"\xfe\x9d\x05\xcbonz\xf9\x83\xa4&\xd4\x99<z\xd9" +
"L\xd2D\xdfM\xef~\xf3\xaa\xef\xfd\xd3\x07U\xf6\xe3" +
"\x8cw\xcf\x9c\x8d\xcan\xbe\xe3.b~o\xd1\x0fO" +
"L\xcbL\xfbh\xac8>:s\x10\x95W\x89w\xde" +
"\xcff\xdeO\x17\xbd\xed\xad\x877\xb4\xfc\xe0\xa3OH" +
".\xb1\x0a\xe7\x86.\xefEe\xc7\xe5\x1c\x8b/\xa7X" +
"Zr\xf0\xd47\x06v\x1f\xfftL\xe4\x9e\x7f\xc56" +
"T\xba\xae\xe0\x8et\x05\xa1\xd5_I{O\xdf\xf5\xdb" +
"?\xfb,)\xd5\x9c\xa6\xb7H\xaa\xb6&\x92j\xf3{" +
"{:\xef_u\xf0\x8b$\x83\xd6\xf4<1\xac\xe3\x0c" +
"Q0\x8e\xe5i\xbb\x9a\xdaQ\xd9\xdfD\xe7\xedkj" +
"\x819\x9e[1Mf\xd8\xe5T\xe1\x0f\xc3\x9f\x85\xb9" +
"\x05\xadl\x96\x9b\xdb*\xee\x003]\xbd\xa0\xb9\xac\x9b" +
"\xb58e\xcbtX\x0eQ\xcd\x8a)\x80\x14\x02\xc8\xda" +
" \x80\xbaZD\xd5\x10PF\xac'\xb4\x96u\"\x0e" +
"\x88\xa8\xba\x02\xca\x82PO\x88 \xafk\x02P\x0d\x11" +
"\xd5\x8d\x02\xa2XOx'W\x1e\x00P7\x8a\xa8n" +
"\x17\xd0+3\xbb\xa4\x99\xcc\x84\x8c\xbb\xd0\xb6\xb1\x16\x04" +
"\xac\x05\xf4l\xe6\xdaC\xda\x1a\x032,A\x96\x067" +
"\xb8X\x07\x02\xd6\x01z\x03V\xc5vV\x98.\xeaF" +
"7\xeb\xb3\x99\x83\x038\x01\x04\x9c\x008\x9ex\x1d\x96" +
"i\xb2\x82\x9b\xaf\x14\x0a\xccq\x00H\xb2\x89\x91d\xb3" +
"\x1e\x06P\xaf\x15Q\xbd)!\xd9|\x92\xecF\x11\xd5" +
"V\x01=\x87\xd9\xeb\x99\xbd\xc4\xc2\x82\xe6\xea\x96\xb9L" +
"\x13K,\xbav\xc1\xd0\x99\xe9vX\x901\xfb\xf4~" +
"\xcc\xc6\xa1\x00\x88\xd9\xf1/\xb6p\xa3\xee\xb8\xba\xd9\xdf" +
"\xc3\xe9-9\xcb\xd0\x0bCt\xbbZ\xae\xc9\x19\xcd\xb4" +
"\x87|i/\x00\x0a\xb2\xdc\x0e\xd0\xa2\xf7\x9b\x96\xcd\xbc" +
"\xa2\xee\x14H(\x10\x0b\xee\x965\x9a\xa1\x99\x05\x16\x1d" +
"4a\xf4A\xfe\x01y.\xc7\\-a\xed+s\x9a" +
"\xad\x89%G\xad\x8d\xf4\xb1\xb0\x17@] \xa2\x9aK" +
"\xe8c\xe9b\x00u\x89\x88\xeam\x09K\xafh\x07P" +
"s\"\xaa\xab\x04\xf4,[\xef\xd7\xcd\x0e\x06\xa2\x9d4" +
"\x98\xe3\x9aZ\x89\x01@\xa8\xb0-V\x99\x94\xe8`6" +
"F\xe9*M\xa5G\x0b\xd0\xc9\x0c\xc3\xba\xd5\xb2\x8d\xe2" +
"r\xff\x1c\x8b\xb4\xcdM\x19-\x93\xc6\xb0<7\x0e\xc9" +
"\xad\x17\xd8\xdc\x8a\xc3\xfcu\x15\x9b\x1b\xf2\xcan\xe6T" +
"\x0c\xd7\x01PS\x91\xf8u\xcd\x00\xeaD\x11\xd5z\x01" +
"[l\xce\x80\xd9\x18\xd4\xab\xaez>]WL\x9b\xf5" +
"\xeb\x8e\xcbl\x9f|e\x0b)\xbc\xe4$\x0f$\xff\xcb" +
"\x8a\xa8N\x17\xd0\xeb\xb7\xb5\x02\xcb1\x1bu\xab\xb8L" +
"3\xad\xbc\xc8\x0a\x98\x06\x01\xd3\xe3{\xd2\"M7X" +
"\xd1\x97nn\xa1\x91\xffO\xd1[\xeby~\xf8\xf6\xc6" +
"\xe1[\x87_xA\xfcn\x8a\xe3\xb7N\xf8\xdc\x1b\x1d" +
"\xc0u\xe2g^\x10\xc2\x14\x11\xae\x88\xea]\x14\x11\x95" +
"2\xe9\xd4\x01\xd1\xb21\x1b\xa3d\xa0\x1dV\xec'M" +
"\x9b\xd0\xc2\x0a\xa4h\xcc\x86\xd9\xdeg\x90\x8a\xd6\x00f" +
"\xe3R&Xf\xb3\xf5\xccvX\x0e2\xb6\xb5q\x08" +
"\xb3q\xd6\xaf\xd2\xfa\x94\x8b\xd5zh\xe8h\xd5\xf8\xeb" +
"mV\xf0!#X\x9ek\xf4\x8d\x96\x08\x12\xd2Q\xab" +
"\x88\xea\x92D\x90tQ\x90t\x8a\xa8\xf6$\x82Dm" +
"\x8f#\xa7\x0a\xcc~O\xb11\xe2\xea\xc1\xc5\xa3+'" +
"\xfc\x8c\\\xa0VD\xb5\x810\x98\xbe2\x97\xa2\x95N" +
"\x8b\xaa\xdb\xf3\x9f\xd6A\xff\x06\x88\x9a\x0bv\xb1\x03P" +
"m\x88\x0e\xdbC\x87=$\xa2\xfaXB?\xfbm\x00" +
"\xf5\x11\x11\xd5\x83\x02b\xa0\x9e\xa7\x0e\x00\xa8\x07ET" +
"\x9f\x15P\x16\x05\xdf\xd7\x8e\xce\xa6^HD\xf5\x17\x02" +
"\xca)\xb1\x9eJ}\xf9U\x8a\x93_\x88\xa8\xbe.\xa0" +
"\x9cN\xd5c\x1a@>\xb9\x06@=!\xa2\xfa\xe6\x97" +
"AP\xc1\xb0*\xc5>C\x83F\x9b\x15\xbb\x16Dt" +
"\xb3R\xca\xd9l\xbd\x8eV\xc5is]V\x92\xca\xae" +
"\x13f\x93\x8c\xab\xf5;8\x050'\"f\xe3\xfa\x10" +
"\x90\x88\xd1\x9eh\xb3\xe2Jf;\xbah\x99QB\xd0" +
"M\x97\x99\xee\x12\x0d\xa45\xcc\x88\xa8\xe3\x00Fw\xe0" +
"\xf6\xe4\xf4A\x04[1\xc8a?\xb9\xddt\xcf\x0b\x94" +
"\xb8pv\xecy3\xf0\x0b\"\x93\x1e\xbb\xbac\xdf\x9b" +
"!|Nd\xd2\xa4\xda\x1bCtf\xc0u\xcb\x98\x8d" +
"\xeb\xc6\xc0\xd8\x1b\xd8\x1a\xc7*\xace\x80\x84tQ\x11" +
"\x13|\x1d\x08\x90\x17D\xa3\x88\xd9\xb8\xef\xab\xf2\x14\xf1" +
"\xcb\xd2n\x0b%y\xcb\xe6Y-\x0e\x9f\x1bb!\xa2" +
"\xe8\xe9MFOk\x10=k\xe2\xfb7\x16\xb4\x8a\xc3" +
"F\xd6\x0bm}.\x88\xcc\x8e \xd2\x19\xb0*F\xb1" +
"\x9b\x81\xe4\xdaC\x88 \x8e\x0f\x9c\x0b\xac\xce\x84\xe2" +
"}7\x1e;\x17F\xa9\xb07\x99\x0a\x03\xf5\xaf \xf5" +
"\xf7\x88\xa8\x96\x05\xf4\x0c\x82\x1e\xb3\xd3\x02\xd1q\xa3\xeb" +
"\xfa\xc4\x9c\xc5\x9dS\x02\x01%@\xafRv\\\x9bi" +
"%\xc0\xc8\xdb\x88\x7f\xcaEd\x98*\xa4\xcbi\x99j" +
"\xa8\xfa\x7f\xcf\xe7\x17\x9f\x98\xfd$9\"-\x1fHd" +
"\xc9B\xb0\x1a\xf9\xf2\x0e\xcb\x94.\xba\xf4\x0a\x10\xccO" +
"\x0cs\x83DOUa\x981g\x11\xc2_)\xa2z" +
"]2c\xce!\x15]#\xa2z\xa3\x80\x12\xb3)\xf9" +
"E\xed\xbb\x7f\xe8\x16\xc7/31\x1b\xcff\xce\x7f\x9d" +
"D\x05\xae[\xe6(7\x1c3\xdb\xdc\x90\xb0kh\xc2" +
"\xa5k\x12\xd9f-\x1b\x0a\xad\xd4\xc8J\x9a\x1e\xa3Q" +
"`\xdc6\x90\xbe\x15\xf3\x8c[\xa9\x06\x19\xdd\xcf\xe7-" +
"\xbe\xb5\xe8\x92\xf5\xd1%\xef\x1c\x06P\xef\x12Q\xbd/" +
"q\xc9{\xa9\xf0\xbfOD\xf5\xa1\xc4%w\x93\x12w" +
"\x8a\xa8\xee%\xcc\x0fZ\x84=d\xe0\xbd\"\xaaO\x0a" +
"\x88)\x1f\xf2\x1f'\xc8\x7fRD\xf5\x88\xc0\x01\xbb\xb3" +
"\xad\xc321\xb8\x84\x03\x10\x15\xff\x03L\xb3\xdd5L" +
"C\xb7\xcbt\x99\xbd^C#\x84\x84-\xae^bV" +
"\xc5\x8d \xa2\xa4m\xe4\xd5\x12\x16;\xfdU\x92\xe6:" +
"X\x03\x02\xd6PD:\xcc\xee\xb0Y\x11\xc9\x1a\x9a\x91" +
"\xd3Dw\xe0B\x144\x12\xc43c\xa8\x87j\xad\xcd" +
"\"\xaa\xdf%(\xc1\xc4\x88H\xbe{\x10\x04\x8e$$" +
"\xf3\xba\xf6\xb8\xfa\xe2\x091]\xd5?\xf1\x848\x01@" +
"\xdeJ\xda\xd9.\xa2\xbaS\x08\xaf\xd6iA\x8b\x1f\xa1" +
"\xd5\xa6\x0e\xfa\x93-\x84\x9a:\x8b\xe5\x0d\xea\x05\x1d-" +
"\xb3\x87+\x0acM\x15\xacR\xd9&W\xd6-S\xad" +
"h\x86.\xbaC\xd1\xc2quA\x90\xe4\x87\xf2\xf2r" +
"#7\x16)\xe3\xc6P\x19\xca\xb7q1@~\x15\x8a" +
"\x98\x1f\xc0\xd8]\x14\x86\xed\x00\xf9\xd5D70\xf6\x18" +
"E\xc7i\x00\xf9\"\xd1\xcb\x18\xb5\x95J\x09\x9f\x06\xc8" +
"\x97\x89\xbc\x19\xe3RA\x19\xe2\xdbo$\xfav\x8c\xab" +
"\x05e+\xce\x06\xc8o&\xfaCD\x9f pM*" +
"\xbbq\x10 \xff \xd1\x1f!\xba\x94\xaeG\xde8\xa3" +
"\x0d\x90\xdfK\xf4'\x89>\xb1\xa1\x1e'\x02(\x8fs" +
"\xfacD?D\xf4\x9a\xaf\xd5c\x0d\x80\xf2#\xdc\x06" +
"\x90?H\xf4g\x89>\x09\xebq\x12\x80r\x14\x1f\x06" +
"\xc8?K\xf4\x9f\x12}\xf2\x84z\x9c\x0c\xa0\xbc\xcc\xef" +
"s\x8c\xe8\xc7\x89^\x9b\xaa\xc7Z\x00\xe5gx\x00 " +
"\x7f\x9c\xe8'0\xc2\xbb\xaeb\x12v\xc9\xdd\xf4\xb8\xec" +
"\x10-'29\x0b\xdaJ\xf4sB\xce\xcaP_\x89" +
"\x99x\xfe\x0b\x88\x19@\xaflY\xc6\xb2\x91p~\xbe" +
"\xca'p\x17\xc8XfW1\x8a?\xdf\xc9\x96X\xd0" +
"X\xd0\x8c\xaer\\\x0b9m\x15\xd7\xaa\x94\xa1\xb1\xa8" +
"\xb9\xac\x18%d\xbbb.\xb2\xadR\x0f2\xbb\xa4\x9b" +
"\x9a\x01\xd1\x97\xf1|.S\xa9\xe8\xc5h\xefq\x0b\xb8" +
"\xc8=\x85j\xf7l,7\xf7h\xfdU#\x80\xd91" +
"\xd6G\xd05\xe7\x86\x18\xea3\xc9\x90j\\\xaf\x19\x15" +
"v!\x95\xdd\xb8MEw\x8b\xdf\x94\x9c\xaf\xf7\x0c\x07" +
"V\xe7/\xcdWT\xa5Q?\xb9\x8d\x9aw\xb4\xc7\xc2" +
"F\xb2\xda\xc1\x0c\xa4S\x88\x13Xh\x92\xbe\xa0\xb7\x84" +
"F\xda;\xe1\x1c\xd1D1p\x8e\x0b\xd5D?s\xfd" +
"_]f\x9fE\xb9^\xd2J\xceW\\\xdd\xcd\x9c\xcc" +
"\x85h1\x9e\x11\x9e?\x19w\xf6\xf4\xe4\xe21\x83\xe8" +
"#\xf9u\x11x\xb5a7@\xbe\x95\xa2s\x09F:" +
"T\xba8\x88t\x12\xb9\x07\xe3\x12VQ9X\xe4\x88" +
"\xbe\x0a\xe3&G\xb9\x9d\x07y\x8c\x81\xa96\x1f\xbc\x18" +
"\xdf>\xc2:9\x8d>x\x95\xf8\xfe\x06\xd17&\xc1" +
"\xab\x82\xc3#\xc0N\x12}\xf0\xda\xcaAg;\xd1w" +
"r\xf0J\xf9\xe0\xb5\x03\x9f\x01\xc8\xef$\xfa^\x0e^" +
"i\x1f\xbc\xf6\xe0\xf3#\xc0n\xd2\x04\x1f\xbc\x1e\xe7\xfc" +
"O\x12\xfd\x08\x07\xafv\x1f\xbc\x0es\xb0;D\xf4c" +
"\x04R\x15\xdb\xc8\xbb\xb6n\x02\xf6\xc7\xb1Q(\x7f\x8b" +
"\xb1r\x1bd\x0c}=\x8b\x12KQ\xd7\x8c\x05\x15\xcd" +
"\x80\xc6\xbc\xab\x15\xd6\xc6u\xba\xe1tjf\xd1\xc1\x01" +
"m-\xa3t$%\x13\xb7k8+\x99\xad\xf7\x01\xc6" +
"\x95}T\xc8dr\x96U]\xdf\xf0\x02\x91\xd9>\xc2" +
"E\xdfJ\xda\xc6\xae\xa2\xc1:0,gD3N\x87" +
":}\xb1L\x13\xfd\x1a\xa3Go\x1cY<\x94\x83^" +
"!,BzZ\xaa\xaa\x0b\xb6\xb1\xcc\x0an\x87\x85\xa6" +
"\xab\x9b\x156j\x83\xc2@\xc5\\\xcb\x8a\x0b\xd1,X" +
"E\xdd\xec\x87QM\x8a\xf8e\xd3\x9dD\xd5\xc5\xa3\x19" +
"\x13\xafc\xf2\xacf\x108tQ\x0d!7\xc7\xad~" +
"K\x81\xafj\xb1\x99\xe6$\xba\xd4qN\x0b\xa6\x91~" +
"\x90\xf9m}\x1a zJ\xc2p\x1c/\x1f\xde\x04\x82" +
"\xfc\x94\x84\xf1+\x06\x86\x8f\x16\xf2>\x1b\x04y\xb7\x84" +
"B\xf4\xc4\x87\xe1\xf3\x9c|\xef0\x08\xf2\xdd\x12\x8a\xd1" +
"\xb3\x1b\x86\xb3ny\xa8\x1d\x04\xb9$a*z\x82\xc4" +
"pP.kT'\xdd.a:z\xcf\xc3\xf05F" +
"^\xba\x0d\x04y\xa1\xe4\x85\xed\x10\xb4\xf8b\xb4\xa2\x17" +
"\x02\x064r\xc8hE/\x9c\x0fa\xd86\x01\xb4\xe2" +
"\x96\x00\x9e[\xd1\x0b'\xa4\x90)h.k\xa5^\xd3" +
"\xff\x88\x01xC+&'\x8f\xe2\x9758c\x17\xca" +
"\xedq1\x17\x02\xf0\xd6\xe1\xb8\x96\x8b\x9a\xca\x1dO'" +
"\xeb\xe4`6\xb2g[0Y9\x92\x98\x8d\x1c\xa6\xe2" +
"\xf9\x88\x88\xea/\x85\xb82\x08}:\x1c\xd6\xa1e\x87" +
"]\xee83\xbb\xc0\xf3\x83\x1a\xb6zr\xe7\x15\xad\x01" +
"^\xe3\xa2\xbf\x95\x03q:H\x8e\xf3\xa6$\xc6y\x18" +
"\xf6\xd7\xd2\x88\xec\x91\x1c\xeeM9O\xb3\x96\xec\x16y" +
":Kq\x97\x0c\x1f/1|g\x96er\xad:\xc9" +
"\x0b;J\x0cs!T\x99\xec\"\xdb\xean\xd6\xf8\x7f" +
"I\xd6c8\x88\x7fN\x86<\xd2\x17(\xdaw01" +
"\xa73\xac\xa0#\xcc,K\x16\xf5\xe3\xe8\xca\xbfpX" +
"\x82gh1\xed?=\xda\xffhS0\\;\x96(" +
"v\x9ek\x0a\x1c\xe8\xa5D\x9f\xf6\xc2b\x00\xf5\x98?" +
"q\x0b_rN\x92\xa3\xbe.\xa2\xfav\xc2\xfd~G" +
"\x8co\x8a\xa8\xbe\x1b\xe7+\xf9,\xf5,\xef\x8a\xa8\xfe" +
"7%\xab\x94\xdf\xb3|L\xfd\xe9G\"vc\xd0?" +
"\x87\xcf<\x15;Fo\xc3\xea_\xa2\x9b\xcc\xa1\xb2\xb4" +
"j*\x12\xbe\x1d\xa1K\x98X\xb1\x09\xd8G\x02h\xd7" +
"\x82D5\x1b\x0d\x89\x90\xd9y\x8a\xe1\":\xd1\xf0\x85" +
"\xadg\xa6\xbb@\xef\x07\x899\xf1\x88c\x1c\xd5\xe6\x83" +
"@\xf2\xe3(\xa8\x0b\x12]\xfa\x81\xc4\x00+T\xac\xfa" +
"|0\x18Z\x9dP\xec\xb7I\x0b\xabDT\x07\x04\x0e" +
"6\xd6\x8arQC\x97-\xb2\xd9\xba\x0a\x93\xcc\xc2P" +
"\xdc\xadR\xbfVpV`\x99*\xe8E6kYW" +
"aI\x86\xf0\xc5\x00$\xdd*\x8ez*\x18\xa3J\xbc" +
"\x95\xad\xc9[\x85\xb5\xcc\x1d\xf1\x92R\xf5\xda\xd7\x1d?" +
"\x17D\x8f}\xdd\xc9\xc7\xbe\x00\xa2\xd6\x91\xb3\x96ET" +
"7' jh8nu\xc7.\x0b~?\x99\xfc+" +
"=xQQ,]H\xc1\x18\xfd\x1d\xceW\x9c\xc0_" +
"h}\x1f?\xe3^\xe4\xd4\x0a\"\xdc\xc0\xc4\x9fi\xd0" +
"!B\xb0\xf9\xff\x06\x00\x00\xff\xff\"\xcf\xdc\xc0"
func init() {
schemas.Register(schema_db8274f9144abc7e,