1// Code generated by protoc-gen-go. DO NOT EDIT.
2// source: signalling.proto
3
4package tdproto
5
6import (
7	fmt "fmt"
8	proto "github.com/ooni/psiphon/oopsi/github.com/golang/protobuf/proto"
9	math "math"
10)
11
12// Reference imports to suppress errors if they are not otherwise used.
13var _ = proto.Marshal
14var _ = fmt.Errorf
15var _ = math.Inf
16
17// This is a compile-time assertion to ensure that this generated file
18// is compatible with the proto package it is being compiled against.
19// A compilation error at this line likely means your copy of the
20// proto package needs to be updated.
21const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
22
23type KeyType int32
24
25const (
26	KeyType_AES_GCM_128 KeyType = 90
27	KeyType_AES_GCM_256 KeyType = 91
28)
29
30var KeyType_name = map[int32]string{
31	90: "AES_GCM_128",
32	91: "AES_GCM_256",
33}
34
35var KeyType_value = map[string]int32{
36	"AES_GCM_128": 90,
37	"AES_GCM_256": 91,
38}
39
40func (x KeyType) Enum() *KeyType {
41	p := new(KeyType)
42	*p = x
43	return p
44}
45
46func (x KeyType) String() string {
47	return proto.EnumName(KeyType_name, int32(x))
48}
49
50func (x *KeyType) UnmarshalJSON(data []byte) error {
51	value, err := proto.UnmarshalJSONEnum(KeyType_value, data, "KeyType")
52	if err != nil {
53		return err
54	}
55	*x = KeyType(value)
56	return nil
57}
58
59func (KeyType) EnumDescriptor() ([]byte, []int) {
60	return fileDescriptor_39f66308029891ad, []int{0}
61}
62
63// State transitions of the client
64type C2S_Transition int32
65
66const (
67	C2S_Transition_C2S_NO_CHANGE                C2S_Transition = 0
68	C2S_Transition_C2S_SESSION_INIT             C2S_Transition = 1
69	C2S_Transition_C2S_SESSION_COVERT_INIT      C2S_Transition = 11
70	C2S_Transition_C2S_EXPECT_RECONNECT         C2S_Transition = 2
71	C2S_Transition_C2S_SESSION_CLOSE            C2S_Transition = 3
72	C2S_Transition_C2S_YIELD_UPLOAD             C2S_Transition = 4
73	C2S_Transition_C2S_ACQUIRE_UPLOAD           C2S_Transition = 5
74	C2S_Transition_C2S_EXPECT_UPLOADONLY_RECONN C2S_Transition = 6
75	C2S_Transition_C2S_ERROR                    C2S_Transition = 255
76)
77
78var C2S_Transition_name = map[int32]string{
79	0:   "C2S_NO_CHANGE",
80	1:   "C2S_SESSION_INIT",
81	11:  "C2S_SESSION_COVERT_INIT",
82	2:   "C2S_EXPECT_RECONNECT",
83	3:   "C2S_SESSION_CLOSE",
84	4:   "C2S_YIELD_UPLOAD",
85	5:   "C2S_ACQUIRE_UPLOAD",
86	6:   "C2S_EXPECT_UPLOADONLY_RECONN",
87	255: "C2S_ERROR",
88}
89
90var C2S_Transition_value = map[string]int32{
91	"C2S_NO_CHANGE":                0,
92	"C2S_SESSION_INIT":             1,
93	"C2S_SESSION_COVERT_INIT":      11,
94	"C2S_EXPECT_RECONNECT":         2,
95	"C2S_SESSION_CLOSE":            3,
96	"C2S_YIELD_UPLOAD":             4,
97	"C2S_ACQUIRE_UPLOAD":           5,
98	"C2S_EXPECT_UPLOADONLY_RECONN": 6,
99	"C2S_ERROR":                    255,
100}
101
102func (x C2S_Transition) Enum() *C2S_Transition {
103	p := new(C2S_Transition)
104	*p = x
105	return p
106}
107
108func (x C2S_Transition) String() string {
109	return proto.EnumName(C2S_Transition_name, int32(x))
110}
111
112func (x *C2S_Transition) UnmarshalJSON(data []byte) error {
113	value, err := proto.UnmarshalJSONEnum(C2S_Transition_value, data, "C2S_Transition")
114	if err != nil {
115		return err
116	}
117	*x = C2S_Transition(value)
118	return nil
119}
120
121func (C2S_Transition) EnumDescriptor() ([]byte, []int) {
122	return fileDescriptor_39f66308029891ad, []int{1}
123}
124
125// State transitions of the server
126type S2C_Transition int32
127
128const (
129	S2C_Transition_S2C_NO_CHANGE           S2C_Transition = 0
130	S2C_Transition_S2C_SESSION_INIT        S2C_Transition = 1
131	S2C_Transition_S2C_SESSION_COVERT_INIT S2C_Transition = 11
132	S2C_Transition_S2C_CONFIRM_RECONNECT   S2C_Transition = 2
133	S2C_Transition_S2C_SESSION_CLOSE       S2C_Transition = 3
134	// TODO should probably also allow EXPECT_RECONNECT here, for DittoTap
135	S2C_Transition_S2C_ERROR S2C_Transition = 255
136)
137
138var S2C_Transition_name = map[int32]string{
139	0:   "S2C_NO_CHANGE",
140	1:   "S2C_SESSION_INIT",
141	11:  "S2C_SESSION_COVERT_INIT",
142	2:   "S2C_CONFIRM_RECONNECT",
143	3:   "S2C_SESSION_CLOSE",
144	255: "S2C_ERROR",
145}
146
147var S2C_Transition_value = map[string]int32{
148	"S2C_NO_CHANGE":           0,
149	"S2C_SESSION_INIT":        1,
150	"S2C_SESSION_COVERT_INIT": 11,
151	"S2C_CONFIRM_RECONNECT":   2,
152	"S2C_SESSION_CLOSE":       3,
153	"S2C_ERROR":               255,
154}
155
156func (x S2C_Transition) Enum() *S2C_Transition {
157	p := new(S2C_Transition)
158	*p = x
159	return p
160}
161
162func (x S2C_Transition) String() string {
163	return proto.EnumName(S2C_Transition_name, int32(x))
164}
165
166func (x *S2C_Transition) UnmarshalJSON(data []byte) error {
167	value, err := proto.UnmarshalJSONEnum(S2C_Transition_value, data, "S2C_Transition")
168	if err != nil {
169		return err
170	}
171	*x = S2C_Transition(value)
172	return nil
173}
174
175func (S2C_Transition) EnumDescriptor() ([]byte, []int) {
176	return fileDescriptor_39f66308029891ad, []int{2}
177}
178
179// Should accompany all S2C_ERROR messages.
180type ErrorReasonS2C int32
181
182const (
183	ErrorReasonS2C_NO_ERROR         ErrorReasonS2C = 0
184	ErrorReasonS2C_COVERT_STREAM    ErrorReasonS2C = 1
185	ErrorReasonS2C_CLIENT_REPORTED  ErrorReasonS2C = 2
186	ErrorReasonS2C_CLIENT_PROTOCOL  ErrorReasonS2C = 3
187	ErrorReasonS2C_STATION_INTERNAL ErrorReasonS2C = 4
188	ErrorReasonS2C_DECOY_OVERLOAD   ErrorReasonS2C = 5
189	ErrorReasonS2C_CLIENT_STREAM    ErrorReasonS2C = 100
190	ErrorReasonS2C_CLIENT_TIMEOUT   ErrorReasonS2C = 101
191)
192
193var ErrorReasonS2C_name = map[int32]string{
194	0:   "NO_ERROR",
195	1:   "COVERT_STREAM",
196	2:   "CLIENT_REPORTED",
197	3:   "CLIENT_PROTOCOL",
198	4:   "STATION_INTERNAL",
199	5:   "DECOY_OVERLOAD",
200	100: "CLIENT_STREAM",
201	101: "CLIENT_TIMEOUT",
202}
203
204var ErrorReasonS2C_value = map[string]int32{
205	"NO_ERROR":         0,
206	"COVERT_STREAM":    1,
207	"CLIENT_REPORTED":  2,
208	"CLIENT_PROTOCOL":  3,
209	"STATION_INTERNAL": 4,
210	"DECOY_OVERLOAD":   5,
211	"CLIENT_STREAM":    100,
212	"CLIENT_TIMEOUT":   101,
213}
214
215func (x ErrorReasonS2C) Enum() *ErrorReasonS2C {
216	p := new(ErrorReasonS2C)
217	*p = x
218	return p
219}
220
221func (x ErrorReasonS2C) String() string {
222	return proto.EnumName(ErrorReasonS2C_name, int32(x))
223}
224
225func (x *ErrorReasonS2C) UnmarshalJSON(data []byte) error {
226	value, err := proto.UnmarshalJSONEnum(ErrorReasonS2C_value, data, "ErrorReasonS2C")
227	if err != nil {
228		return err
229	}
230	*x = ErrorReasonS2C(value)
231	return nil
232}
233
234func (ErrorReasonS2C) EnumDescriptor() ([]byte, []int) {
235	return fileDescriptor_39f66308029891ad, []int{3}
236}
237
238type TransportType int32
239
240const (
241	TransportType_Null  TransportType = 0
242	TransportType_Min   TransportType = 1
243	TransportType_Obfs4 TransportType = 2
244)
245
246var TransportType_name = map[int32]string{
247	0: "Null",
248	1: "Min",
249	2: "Obfs4",
250}
251
252var TransportType_value = map[string]int32{
253	"Null":  0,
254	"Min":   1,
255	"Obfs4": 2,
256}
257
258func (x TransportType) Enum() *TransportType {
259	p := new(TransportType)
260	*p = x
261	return p
262}
263
264func (x TransportType) String() string {
265	return proto.EnumName(TransportType_name, int32(x))
266}
267
268func (x *TransportType) UnmarshalJSON(data []byte) error {
269	value, err := proto.UnmarshalJSONEnum(TransportType_value, data, "TransportType")
270	if err != nil {
271		return err
272	}
273	*x = TransportType(value)
274	return nil
275}
276
277func (TransportType) EnumDescriptor() ([]byte, []int) {
278	return fileDescriptor_39f66308029891ad, []int{4}
279}
280
281type RegistrationSource int32
282
283const (
284	RegistrationSource_Unspecified     RegistrationSource = 0
285	RegistrationSource_Detector        RegistrationSource = 1
286	RegistrationSource_API             RegistrationSource = 2
287	RegistrationSource_DetectorPrescan RegistrationSource = 3
288)
289
290var RegistrationSource_name = map[int32]string{
291	0: "Unspecified",
292	1: "Detector",
293	2: "API",
294	3: "DetectorPrescan",
295}
296
297var RegistrationSource_value = map[string]int32{
298	"Unspecified":     0,
299	"Detector":        1,
300	"API":             2,
301	"DetectorPrescan": 3,
302}
303
304func (x RegistrationSource) Enum() *RegistrationSource {
305	p := new(RegistrationSource)
306	*p = x
307	return p
308}
309
310func (x RegistrationSource) String() string {
311	return proto.EnumName(RegistrationSource_name, int32(x))
312}
313
314func (x *RegistrationSource) UnmarshalJSON(data []byte) error {
315	value, err := proto.UnmarshalJSONEnum(RegistrationSource_value, data, "RegistrationSource")
316	if err != nil {
317		return err
318	}
319	*x = RegistrationSource(value)
320	return nil
321}
322
323func (RegistrationSource) EnumDescriptor() ([]byte, []int) {
324	return fileDescriptor_39f66308029891ad, []int{5}
325}
326
327type PubKey struct {
328	// A public key, as used by the station.
329	Key                  []byte   `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"`
330	Type                 *KeyType `protobuf:"varint,2,opt,name=type,enum=tapdance.KeyType" json:"type,omitempty"`
331	XXX_NoUnkeyedLiteral struct{} `json:"-"`
332	XXX_unrecognized     []byte   `json:"-"`
333	XXX_sizecache        int32    `json:"-"`
334}
335
336func (m *PubKey) Reset()         { *m = PubKey{} }
337func (m *PubKey) String() string { return proto.CompactTextString(m) }
338func (*PubKey) ProtoMessage()    {}
339func (*PubKey) Descriptor() ([]byte, []int) {
340	return fileDescriptor_39f66308029891ad, []int{0}
341}
342
343func (m *PubKey) XXX_Unmarshal(b []byte) error {
344	return xxx_messageInfo_PubKey.Unmarshal(m, b)
345}
346func (m *PubKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
347	return xxx_messageInfo_PubKey.Marshal(b, m, deterministic)
348}
349func (m *PubKey) XXX_Merge(src proto.Message) {
350	xxx_messageInfo_PubKey.Merge(m, src)
351}
352func (m *PubKey) XXX_Size() int {
353	return xxx_messageInfo_PubKey.Size(m)
354}
355func (m *PubKey) XXX_DiscardUnknown() {
356	xxx_messageInfo_PubKey.DiscardUnknown(m)
357}
358
359var xxx_messageInfo_PubKey proto.InternalMessageInfo
360
361func (m *PubKey) GetKey() []byte {
362	if m != nil {
363		return m.Key
364	}
365	return nil
366}
367
368func (m *PubKey) GetType() KeyType {
369	if m != nil && m.Type != nil {
370		return *m.Type
371	}
372	return KeyType_AES_GCM_128
373}
374
375type TLSDecoySpec struct {
376	// The hostname/SNI to use for this host
377	//
378	// The hostname is the only required field, although other
379	// fields are expected to be present in most cases.
380	Hostname *string `protobuf:"bytes,1,opt,name=hostname" json:"hostname,omitempty"`
381	// The 32-bit ipv4 address, in network byte order
382	//
383	// If the IPv4 address is absent, then it may be resolved via
384	// DNS by the client, or the client may discard this decoy spec
385	// if local DNS is untrusted, or the service may be multihomed.
386	Ipv4Addr *uint32 `protobuf:"fixed32,2,opt,name=ipv4addr" json:"ipv4addr,omitempty"`
387	// The 128-bit ipv6 address, in network byte order
388	Ipv6Addr []byte `protobuf:"bytes,6,opt,name=ipv6addr" json:"ipv6addr,omitempty"`
389	// The Tapdance station public key to use when contacting this
390	// decoy
391	//
392	// If omitted, the default station public key (if any) is used.
393	Pubkey *PubKey `protobuf:"bytes,3,opt,name=pubkey" json:"pubkey,omitempty"`
394	// The maximum duration, in milliseconds, to maintain an open
395	// connection to this decoy (because the decoy may close the
396	// connection itself after this length of time)
397	//
398	// If omitted, a default of 30,000 milliseconds is assumed.
399	Timeout *uint32 `protobuf:"varint,4,opt,name=timeout" json:"timeout,omitempty"`
400	// The maximum TCP window size to attempt to use for this decoy.
401	//
402	// If omitted, a default of 15360 is assumed.
403	//
404	// TODO: the default is based on the current heuristic of only
405	// using decoys that permit windows of 15KB or larger.  If this
406	// heuristic changes, then this default doesn't make sense.
407	Tcpwin               *uint32  `protobuf:"varint,5,opt,name=tcpwin" json:"tcpwin,omitempty"`
408	XXX_NoUnkeyedLiteral struct{} `json:"-"`
409	XXX_unrecognized     []byte   `json:"-"`
410	XXX_sizecache        int32    `json:"-"`
411}
412
413func (m *TLSDecoySpec) Reset()         { *m = TLSDecoySpec{} }
414func (m *TLSDecoySpec) String() string { return proto.CompactTextString(m) }
415func (*TLSDecoySpec) ProtoMessage()    {}
416func (*TLSDecoySpec) Descriptor() ([]byte, []int) {
417	return fileDescriptor_39f66308029891ad, []int{1}
418}
419
420func (m *TLSDecoySpec) XXX_Unmarshal(b []byte) error {
421	return xxx_messageInfo_TLSDecoySpec.Unmarshal(m, b)
422}
423func (m *TLSDecoySpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
424	return xxx_messageInfo_TLSDecoySpec.Marshal(b, m, deterministic)
425}
426func (m *TLSDecoySpec) XXX_Merge(src proto.Message) {
427	xxx_messageInfo_TLSDecoySpec.Merge(m, src)
428}
429func (m *TLSDecoySpec) XXX_Size() int {
430	return xxx_messageInfo_TLSDecoySpec.Size(m)
431}
432func (m *TLSDecoySpec) XXX_DiscardUnknown() {
433	xxx_messageInfo_TLSDecoySpec.DiscardUnknown(m)
434}
435
436var xxx_messageInfo_TLSDecoySpec proto.InternalMessageInfo
437
438func (m *TLSDecoySpec) GetHostname() string {
439	if m != nil && m.Hostname != nil {
440		return *m.Hostname
441	}
442	return ""
443}
444
445func (m *TLSDecoySpec) GetIpv4Addr() uint32 {
446	if m != nil && m.Ipv4Addr != nil {
447		return *m.Ipv4Addr
448	}
449	return 0
450}
451
452func (m *TLSDecoySpec) GetIpv6Addr() []byte {
453	if m != nil {
454		return m.Ipv6Addr
455	}
456	return nil
457}
458
459func (m *TLSDecoySpec) GetPubkey() *PubKey {
460	if m != nil {
461		return m.Pubkey
462	}
463	return nil
464}
465
466func (m *TLSDecoySpec) GetTimeout() uint32 {
467	if m != nil && m.Timeout != nil {
468		return *m.Timeout
469	}
470	return 0
471}
472
473func (m *TLSDecoySpec) GetTcpwin() uint32 {
474	if m != nil && m.Tcpwin != nil {
475		return *m.Tcpwin
476	}
477	return 0
478}
479
480type ClientConf struct {
481	DecoyList            *DecoyList       `protobuf:"bytes,1,opt,name=decoy_list,json=decoyList" json:"decoy_list,omitempty"`
482	Generation           *uint32          `protobuf:"varint,2,opt,name=generation" json:"generation,omitempty"`
483	DefaultPubkey        *PubKey          `protobuf:"bytes,3,opt,name=default_pubkey,json=defaultPubkey" json:"default_pubkey,omitempty"`
484	DarkDecoyBlocks      *DarkDecoyBlocks `protobuf:"bytes,4,opt,name=dark_decoy_blocks,json=darkDecoyBlocks" json:"dark_decoy_blocks,omitempty"`
485	ConjurePubkey        *PubKey          `protobuf:"bytes,5,opt,name=conjure_pubkey,json=conjurePubkey" json:"conjure_pubkey,omitempty"`
486	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
487	XXX_unrecognized     []byte           `json:"-"`
488	XXX_sizecache        int32            `json:"-"`
489}
490
491func (m *ClientConf) Reset()         { *m = ClientConf{} }
492func (m *ClientConf) String() string { return proto.CompactTextString(m) }
493func (*ClientConf) ProtoMessage()    {}
494func (*ClientConf) Descriptor() ([]byte, []int) {
495	return fileDescriptor_39f66308029891ad, []int{2}
496}
497
498func (m *ClientConf) XXX_Unmarshal(b []byte) error {
499	return xxx_messageInfo_ClientConf.Unmarshal(m, b)
500}
501func (m *ClientConf) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
502	return xxx_messageInfo_ClientConf.Marshal(b, m, deterministic)
503}
504func (m *ClientConf) XXX_Merge(src proto.Message) {
505	xxx_messageInfo_ClientConf.Merge(m, src)
506}
507func (m *ClientConf) XXX_Size() int {
508	return xxx_messageInfo_ClientConf.Size(m)
509}
510func (m *ClientConf) XXX_DiscardUnknown() {
511	xxx_messageInfo_ClientConf.DiscardUnknown(m)
512}
513
514var xxx_messageInfo_ClientConf proto.InternalMessageInfo
515
516func (m *ClientConf) GetDecoyList() *DecoyList {
517	if m != nil {
518		return m.DecoyList
519	}
520	return nil
521}
522
523func (m *ClientConf) GetGeneration() uint32 {
524	if m != nil && m.Generation != nil {
525		return *m.Generation
526	}
527	return 0
528}
529
530func (m *ClientConf) GetDefaultPubkey() *PubKey {
531	if m != nil {
532		return m.DefaultPubkey
533	}
534	return nil
535}
536
537func (m *ClientConf) GetDarkDecoyBlocks() *DarkDecoyBlocks {
538	if m != nil {
539		return m.DarkDecoyBlocks
540	}
541	return nil
542}
543
544func (m *ClientConf) GetConjurePubkey() *PubKey {
545	if m != nil {
546		return m.ConjurePubkey
547	}
548	return nil
549}
550
551type DecoyList struct {
552	TlsDecoys            []*TLSDecoySpec `protobuf:"bytes,1,rep,name=tls_decoys,json=tlsDecoys" json:"tls_decoys,omitempty"`
553	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
554	XXX_unrecognized     []byte          `json:"-"`
555	XXX_sizecache        int32           `json:"-"`
556}
557
558func (m *DecoyList) Reset()         { *m = DecoyList{} }
559func (m *DecoyList) String() string { return proto.CompactTextString(m) }
560func (*DecoyList) ProtoMessage()    {}
561func (*DecoyList) Descriptor() ([]byte, []int) {
562	return fileDescriptor_39f66308029891ad, []int{3}
563}
564
565func (m *DecoyList) XXX_Unmarshal(b []byte) error {
566	return xxx_messageInfo_DecoyList.Unmarshal(m, b)
567}
568func (m *DecoyList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
569	return xxx_messageInfo_DecoyList.Marshal(b, m, deterministic)
570}
571func (m *DecoyList) XXX_Merge(src proto.Message) {
572	xxx_messageInfo_DecoyList.Merge(m, src)
573}
574func (m *DecoyList) XXX_Size() int {
575	return xxx_messageInfo_DecoyList.Size(m)
576}
577func (m *DecoyList) XXX_DiscardUnknown() {
578	xxx_messageInfo_DecoyList.DiscardUnknown(m)
579}
580
581var xxx_messageInfo_DecoyList proto.InternalMessageInfo
582
583func (m *DecoyList) GetTlsDecoys() []*TLSDecoySpec {
584	if m != nil {
585		return m.TlsDecoys
586	}
587	return nil
588}
589
590type DarkDecoyBlocks struct {
591	Blocks               []string `protobuf:"bytes,1,rep,name=blocks" json:"blocks,omitempty"`
592	XXX_NoUnkeyedLiteral struct{} `json:"-"`
593	XXX_unrecognized     []byte   `json:"-"`
594	XXX_sizecache        int32    `json:"-"`
595}
596
597func (m *DarkDecoyBlocks) Reset()         { *m = DarkDecoyBlocks{} }
598func (m *DarkDecoyBlocks) String() string { return proto.CompactTextString(m) }
599func (*DarkDecoyBlocks) ProtoMessage()    {}
600func (*DarkDecoyBlocks) Descriptor() ([]byte, []int) {
601	return fileDescriptor_39f66308029891ad, []int{4}
602}
603
604func (m *DarkDecoyBlocks) XXX_Unmarshal(b []byte) error {
605	return xxx_messageInfo_DarkDecoyBlocks.Unmarshal(m, b)
606}
607func (m *DarkDecoyBlocks) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
608	return xxx_messageInfo_DarkDecoyBlocks.Marshal(b, m, deterministic)
609}
610func (m *DarkDecoyBlocks) XXX_Merge(src proto.Message) {
611	xxx_messageInfo_DarkDecoyBlocks.Merge(m, src)
612}
613func (m *DarkDecoyBlocks) XXX_Size() int {
614	return xxx_messageInfo_DarkDecoyBlocks.Size(m)
615}
616func (m *DarkDecoyBlocks) XXX_DiscardUnknown() {
617	xxx_messageInfo_DarkDecoyBlocks.DiscardUnknown(m)
618}
619
620var xxx_messageInfo_DarkDecoyBlocks proto.InternalMessageInfo
621
622func (m *DarkDecoyBlocks) GetBlocks() []string {
623	if m != nil {
624		return m.Blocks
625	}
626	return nil
627}
628
629type StationToClient struct {
630	// Should accompany (at least) SESSION_INIT and CONFIRM_RECONNECT.
631	ProtocolVersion *uint32 `protobuf:"varint,1,opt,name=protocol_version,json=protocolVersion" json:"protocol_version,omitempty"`
632	// There might be a state transition. May be absent; absence should be
633	// treated identically to NO_CHANGE.
634	StateTransition *S2C_Transition `protobuf:"varint,2,opt,name=state_transition,json=stateTransition,enum=tapdance.S2C_Transition" json:"state_transition,omitempty"`
635	// The station can send client config info piggybacked
636	// on any message, as it sees fit
637	ConfigInfo *ClientConf `protobuf:"bytes,3,opt,name=config_info,json=configInfo" json:"config_info,omitempty"`
638	// If state_transition == S2C_ERROR, this field is the explanation.
639	ErrReason *ErrorReasonS2C `protobuf:"varint,4,opt,name=err_reason,json=errReason,enum=tapdance.ErrorReasonS2C" json:"err_reason,omitempty"`
640	// Signals client to stop connecting for following amount of seconds
641	TmpBackoff *uint32 `protobuf:"varint,5,opt,name=tmp_backoff,json=tmpBackoff" json:"tmp_backoff,omitempty"`
642	// Sent in SESSION_INIT, identifies the station that picked up
643	StationId *string `protobuf:"bytes,6,opt,name=station_id,json=stationId" json:"station_id,omitempty"`
644	// Random-sized junk to defeat packet size fingerprinting.
645	Padding              []byte   `protobuf:"bytes,100,opt,name=padding" json:"padding,omitempty"`
646	XXX_NoUnkeyedLiteral struct{} `json:"-"`
647	XXX_unrecognized     []byte   `json:"-"`
648	XXX_sizecache        int32    `json:"-"`
649}
650
651func (m *StationToClient) Reset()         { *m = StationToClient{} }
652func (m *StationToClient) String() string { return proto.CompactTextString(m) }
653func (*StationToClient) ProtoMessage()    {}
654func (*StationToClient) Descriptor() ([]byte, []int) {
655	return fileDescriptor_39f66308029891ad, []int{5}
656}
657
658func (m *StationToClient) XXX_Unmarshal(b []byte) error {
659	return xxx_messageInfo_StationToClient.Unmarshal(m, b)
660}
661func (m *StationToClient) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
662	return xxx_messageInfo_StationToClient.Marshal(b, m, deterministic)
663}
664func (m *StationToClient) XXX_Merge(src proto.Message) {
665	xxx_messageInfo_StationToClient.Merge(m, src)
666}
667func (m *StationToClient) XXX_Size() int {
668	return xxx_messageInfo_StationToClient.Size(m)
669}
670func (m *StationToClient) XXX_DiscardUnknown() {
671	xxx_messageInfo_StationToClient.DiscardUnknown(m)
672}
673
674var xxx_messageInfo_StationToClient proto.InternalMessageInfo
675
676func (m *StationToClient) GetProtocolVersion() uint32 {
677	if m != nil && m.ProtocolVersion != nil {
678		return *m.ProtocolVersion
679	}
680	return 0
681}
682
683func (m *StationToClient) GetStateTransition() S2C_Transition {
684	if m != nil && m.StateTransition != nil {
685		return *m.StateTransition
686	}
687	return S2C_Transition_S2C_NO_CHANGE
688}
689
690func (m *StationToClient) GetConfigInfo() *ClientConf {
691	if m != nil {
692		return m.ConfigInfo
693	}
694	return nil
695}
696
697func (m *StationToClient) GetErrReason() ErrorReasonS2C {
698	if m != nil && m.ErrReason != nil {
699		return *m.ErrReason
700	}
701	return ErrorReasonS2C_NO_ERROR
702}
703
704func (m *StationToClient) GetTmpBackoff() uint32 {
705	if m != nil && m.TmpBackoff != nil {
706		return *m.TmpBackoff
707	}
708	return 0
709}
710
711func (m *StationToClient) GetStationId() string {
712	if m != nil && m.StationId != nil {
713		return *m.StationId
714	}
715	return ""
716}
717
718func (m *StationToClient) GetPadding() []byte {
719	if m != nil {
720		return m.Padding
721	}
722	return nil
723}
724
725type RegistrationFlags struct {
726	UploadOnly           *bool    `protobuf:"varint,1,opt,name=upload_only,json=uploadOnly" json:"upload_only,omitempty"`
727	DarkDecoy            *bool    `protobuf:"varint,2,opt,name=dark_decoy,json=darkDecoy" json:"dark_decoy,omitempty"`
728	ProxyHeader          *bool    `protobuf:"varint,3,opt,name=proxy_header,json=proxyHeader" json:"proxy_header,omitempty"`
729	Use_TIL              *bool    `protobuf:"varint,4,opt,name=use_TIL,json=useTIL" json:"use_TIL,omitempty"`
730	Prescanned           *bool    `protobuf:"varint,5,opt,name=prescanned" json:"prescanned,omitempty"`
731	XXX_NoUnkeyedLiteral struct{} `json:"-"`
732	XXX_unrecognized     []byte   `json:"-"`
733	XXX_sizecache        int32    `json:"-"`
734}
735
736func (m *RegistrationFlags) Reset()         { *m = RegistrationFlags{} }
737func (m *RegistrationFlags) String() string { return proto.CompactTextString(m) }
738func (*RegistrationFlags) ProtoMessage()    {}
739func (*RegistrationFlags) Descriptor() ([]byte, []int) {
740	return fileDescriptor_39f66308029891ad, []int{6}
741}
742
743func (m *RegistrationFlags) XXX_Unmarshal(b []byte) error {
744	return xxx_messageInfo_RegistrationFlags.Unmarshal(m, b)
745}
746func (m *RegistrationFlags) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
747	return xxx_messageInfo_RegistrationFlags.Marshal(b, m, deterministic)
748}
749func (m *RegistrationFlags) XXX_Merge(src proto.Message) {
750	xxx_messageInfo_RegistrationFlags.Merge(m, src)
751}
752func (m *RegistrationFlags) XXX_Size() int {
753	return xxx_messageInfo_RegistrationFlags.Size(m)
754}
755func (m *RegistrationFlags) XXX_DiscardUnknown() {
756	xxx_messageInfo_RegistrationFlags.DiscardUnknown(m)
757}
758
759var xxx_messageInfo_RegistrationFlags proto.InternalMessageInfo
760
761func (m *RegistrationFlags) GetUploadOnly() bool {
762	if m != nil && m.UploadOnly != nil {
763		return *m.UploadOnly
764	}
765	return false
766}
767
768func (m *RegistrationFlags) GetDarkDecoy() bool {
769	if m != nil && m.DarkDecoy != nil {
770		return *m.DarkDecoy
771	}
772	return false
773}
774
775func (m *RegistrationFlags) GetProxyHeader() bool {
776	if m != nil && m.ProxyHeader != nil {
777		return *m.ProxyHeader
778	}
779	return false
780}
781
782func (m *RegistrationFlags) GetUse_TIL() bool {
783	if m != nil && m.Use_TIL != nil {
784		return *m.Use_TIL
785	}
786	return false
787}
788
789func (m *RegistrationFlags) GetPrescanned() bool {
790	if m != nil && m.Prescanned != nil {
791		return *m.Prescanned
792	}
793	return false
794}
795
796type ClientToStation struct {
797	ProtocolVersion *uint32 `protobuf:"varint,1,opt,name=protocol_version,json=protocolVersion" json:"protocol_version,omitempty"`
798	// The client reports its decoy list's version number here, which the
799	// station can use to decide whether to send an updated one. The station
800	// should always send a list if this field is set to 0.
801	DecoyListGeneration *uint32         `protobuf:"varint,2,opt,name=decoy_list_generation,json=decoyListGeneration" json:"decoy_list_generation,omitempty"`
802	StateTransition     *C2S_Transition `protobuf:"varint,3,opt,name=state_transition,json=stateTransition,enum=tapdance.C2S_Transition" json:"state_transition,omitempty"`
803	// The position in the overall session's upload sequence where the current
804	// YIELD=>ACQUIRE switchover is happening.
805	UploadSync *uint64 `protobuf:"varint,4,opt,name=upload_sync,json=uploadSync" json:"upload_sync,omitempty"`
806	// List of decoys that client have unsuccessfully tried in current session.
807	// Could be sent in chunks
808	FailedDecoys []string      `protobuf:"bytes,10,rep,name=failed_decoys,json=failedDecoys" json:"failed_decoys,omitempty"`
809	Stats        *SessionStats `protobuf:"bytes,11,opt,name=stats" json:"stats,omitempty"`
810	// NullTransport, MinTransport, Obfs4Transport, etc. Transport type we want from phantom proxy
811	Transport *TransportType `protobuf:"varint,12,opt,name=transport,enum=tapdance.TransportType" json:"transport,omitempty"`
812	// Station is only required to check this variable during session initialization.
813	// If set, station must facilitate connection to said target by itself, i.e. write into squid
814	// socket an HTTP/SOCKS/any other connection request.
815	// covert_address must have exactly one ':' colon, that separates host (literal IP address or
816	// resolvable hostname) and port
817	// TODO: make it required for initialization, and stop connecting any client straight to squid?
818	CovertAddress *string `protobuf:"bytes,20,opt,name=covert_address,json=covertAddress" json:"covert_address,omitempty"`
819	// Used in dark decoys to signal which dark decoy it will connect to.
820	MaskedDecoyServerName *string `protobuf:"bytes,21,opt,name=masked_decoy_server_name,json=maskedDecoyServerName" json:"masked_decoy_server_name,omitempty"`
821	// Used to indicate to server if client is registering v4, v6 or both
822	V6Support *bool `protobuf:"varint,22,opt,name=v6_support,json=v6Support" json:"v6_support,omitempty"`
823	V4Support *bool `protobuf:"varint,23,opt,name=v4_support,json=v4Support" json:"v4_support,omitempty"`
824	// A collection of optional flags for the registration.
825	Flags *RegistrationFlags `protobuf:"bytes,24,opt,name=flags" json:"flags,omitempty"`
826	// Random-sized junk to defeat packet size fingerprinting.
827	Padding              []byte   `protobuf:"bytes,100,opt,name=padding" json:"padding,omitempty"`
828	XXX_NoUnkeyedLiteral struct{} `json:"-"`
829	XXX_unrecognized     []byte   `json:"-"`
830	XXX_sizecache        int32    `json:"-"`
831}
832
833func (m *ClientToStation) Reset()         { *m = ClientToStation{} }
834func (m *ClientToStation) String() string { return proto.CompactTextString(m) }
835func (*ClientToStation) ProtoMessage()    {}
836func (*ClientToStation) Descriptor() ([]byte, []int) {
837	return fileDescriptor_39f66308029891ad, []int{7}
838}
839
840func (m *ClientToStation) XXX_Unmarshal(b []byte) error {
841	return xxx_messageInfo_ClientToStation.Unmarshal(m, b)
842}
843func (m *ClientToStation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
844	return xxx_messageInfo_ClientToStation.Marshal(b, m, deterministic)
845}
846func (m *ClientToStation) XXX_Merge(src proto.Message) {
847	xxx_messageInfo_ClientToStation.Merge(m, src)
848}
849func (m *ClientToStation) XXX_Size() int {
850	return xxx_messageInfo_ClientToStation.Size(m)
851}
852func (m *ClientToStation) XXX_DiscardUnknown() {
853	xxx_messageInfo_ClientToStation.DiscardUnknown(m)
854}
855
856var xxx_messageInfo_ClientToStation proto.InternalMessageInfo
857
858func (m *ClientToStation) GetProtocolVersion() uint32 {
859	if m != nil && m.ProtocolVersion != nil {
860		return *m.ProtocolVersion
861	}
862	return 0
863}
864
865func (m *ClientToStation) GetDecoyListGeneration() uint32 {
866	if m != nil && m.DecoyListGeneration != nil {
867		return *m.DecoyListGeneration
868	}
869	return 0
870}
871
872func (m *ClientToStation) GetStateTransition() C2S_Transition {
873	if m != nil && m.StateTransition != nil {
874		return *m.StateTransition
875	}
876	return C2S_Transition_C2S_NO_CHANGE
877}
878
879func (m *ClientToStation) GetUploadSync() uint64 {
880	if m != nil && m.UploadSync != nil {
881		return *m.UploadSync
882	}
883	return 0
884}
885
886func (m *ClientToStation) GetFailedDecoys() []string {
887	if m != nil {
888		return m.FailedDecoys
889	}
890	return nil
891}
892
893func (m *ClientToStation) GetStats() *SessionStats {
894	if m != nil {
895		return m.Stats
896	}
897	return nil
898}
899
900func (m *ClientToStation) GetTransport() TransportType {
901	if m != nil && m.Transport != nil {
902		return *m.Transport
903	}
904	return TransportType_Null
905}
906
907func (m *ClientToStation) GetCovertAddress() string {
908	if m != nil && m.CovertAddress != nil {
909		return *m.CovertAddress
910	}
911	return ""
912}
913
914func (m *ClientToStation) GetMaskedDecoyServerName() string {
915	if m != nil && m.MaskedDecoyServerName != nil {
916		return *m.MaskedDecoyServerName
917	}
918	return ""
919}
920
921func (m *ClientToStation) GetV6Support() bool {
922	if m != nil && m.V6Support != nil {
923		return *m.V6Support
924	}
925	return false
926}
927
928func (m *ClientToStation) GetV4Support() bool {
929	if m != nil && m.V4Support != nil {
930		return *m.V4Support
931	}
932	return false
933}
934
935func (m *ClientToStation) GetFlags() *RegistrationFlags {
936	if m != nil {
937		return m.Flags
938	}
939	return nil
940}
941
942func (m *ClientToStation) GetPadding() []byte {
943	if m != nil {
944		return m.Padding
945	}
946	return nil
947}
948
949type C2SWrapper struct {
950	SharedSecret        []byte              `protobuf:"bytes,1,opt,name=shared_secret,json=sharedSecret" json:"shared_secret,omitempty"`
951	RegistrationPayload *ClientToStation    `protobuf:"bytes,3,opt,name=registration_payload,json=registrationPayload" json:"registration_payload,omitempty"`
952	RegistrationSource  *RegistrationSource `protobuf:"varint,4,opt,name=registration_source,json=registrationSource,enum=tapdance.RegistrationSource" json:"registration_source,omitempty"`
953	// client source address when receiving a registration
954	RegistrationAddress []byte `protobuf:"bytes,6,opt,name=registration_address,json=registrationAddress" json:"registration_address,omitempty"`
955	// Decoy address used when registering over Decoy registrar
956	DecoyAddress         []byte   `protobuf:"bytes,7,opt,name=decoy_address,json=decoyAddress" json:"decoy_address,omitempty"`
957	XXX_NoUnkeyedLiteral struct{} `json:"-"`
958	XXX_unrecognized     []byte   `json:"-"`
959	XXX_sizecache        int32    `json:"-"`
960}
961
962func (m *C2SWrapper) Reset()         { *m = C2SWrapper{} }
963func (m *C2SWrapper) String() string { return proto.CompactTextString(m) }
964func (*C2SWrapper) ProtoMessage()    {}
965func (*C2SWrapper) Descriptor() ([]byte, []int) {
966	return fileDescriptor_39f66308029891ad, []int{8}
967}
968
969func (m *C2SWrapper) XXX_Unmarshal(b []byte) error {
970	return xxx_messageInfo_C2SWrapper.Unmarshal(m, b)
971}
972func (m *C2SWrapper) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
973	return xxx_messageInfo_C2SWrapper.Marshal(b, m, deterministic)
974}
975func (m *C2SWrapper) XXX_Merge(src proto.Message) {
976	xxx_messageInfo_C2SWrapper.Merge(m, src)
977}
978func (m *C2SWrapper) XXX_Size() int {
979	return xxx_messageInfo_C2SWrapper.Size(m)
980}
981func (m *C2SWrapper) XXX_DiscardUnknown() {
982	xxx_messageInfo_C2SWrapper.DiscardUnknown(m)
983}
984
985var xxx_messageInfo_C2SWrapper proto.InternalMessageInfo
986
987func (m *C2SWrapper) GetSharedSecret() []byte {
988	if m != nil {
989		return m.SharedSecret
990	}
991	return nil
992}
993
994func (m *C2SWrapper) GetRegistrationPayload() *ClientToStation {
995	if m != nil {
996		return m.RegistrationPayload
997	}
998	return nil
999}
1000
1001func (m *C2SWrapper) GetRegistrationSource() RegistrationSource {
1002	if m != nil && m.RegistrationSource != nil {
1003		return *m.RegistrationSource
1004	}
1005	return RegistrationSource_Unspecified
1006}
1007
1008func (m *C2SWrapper) GetRegistrationAddress() []byte {
1009	if m != nil {
1010		return m.RegistrationAddress
1011	}
1012	return nil
1013}
1014
1015func (m *C2SWrapper) GetDecoyAddress() []byte {
1016	if m != nil {
1017		return m.DecoyAddress
1018	}
1019	return nil
1020}
1021
1022type SessionStats struct {
1023	FailedDecoysAmount *uint32 `protobuf:"varint,20,opt,name=failed_decoys_amount,json=failedDecoysAmount" json:"failed_decoys_amount,omitempty"`
1024	// Applicable to whole session:
1025	TotalTimeToConnect *uint32 `protobuf:"varint,31,opt,name=total_time_to_connect,json=totalTimeToConnect" json:"total_time_to_connect,omitempty"`
1026	// Last (i.e. successful) decoy:
1027	RttToStation         *uint32  `protobuf:"varint,33,opt,name=rtt_to_station,json=rttToStation" json:"rtt_to_station,omitempty"`
1028	TlsToDecoy           *uint32  `protobuf:"varint,38,opt,name=tls_to_decoy,json=tlsToDecoy" json:"tls_to_decoy,omitempty"`
1029	TcpToDecoy           *uint32  `protobuf:"varint,39,opt,name=tcp_to_decoy,json=tcpToDecoy" json:"tcp_to_decoy,omitempty"`
1030	XXX_NoUnkeyedLiteral struct{} `json:"-"`
1031	XXX_unrecognized     []byte   `json:"-"`
1032	XXX_sizecache        int32    `json:"-"`
1033}
1034
1035func (m *SessionStats) Reset()         { *m = SessionStats{} }
1036func (m *SessionStats) String() string { return proto.CompactTextString(m) }
1037func (*SessionStats) ProtoMessage()    {}
1038func (*SessionStats) Descriptor() ([]byte, []int) {
1039	return fileDescriptor_39f66308029891ad, []int{9}
1040}
1041
1042func (m *SessionStats) XXX_Unmarshal(b []byte) error {
1043	return xxx_messageInfo_SessionStats.Unmarshal(m, b)
1044}
1045func (m *SessionStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
1046	return xxx_messageInfo_SessionStats.Marshal(b, m, deterministic)
1047}
1048func (m *SessionStats) XXX_Merge(src proto.Message) {
1049	xxx_messageInfo_SessionStats.Merge(m, src)
1050}
1051func (m *SessionStats) XXX_Size() int {
1052	return xxx_messageInfo_SessionStats.Size(m)
1053}
1054func (m *SessionStats) XXX_DiscardUnknown() {
1055	xxx_messageInfo_SessionStats.DiscardUnknown(m)
1056}
1057
1058var xxx_messageInfo_SessionStats proto.InternalMessageInfo
1059
1060func (m *SessionStats) GetFailedDecoysAmount() uint32 {
1061	if m != nil && m.FailedDecoysAmount != nil {
1062		return *m.FailedDecoysAmount
1063	}
1064	return 0
1065}
1066
1067func (m *SessionStats) GetTotalTimeToConnect() uint32 {
1068	if m != nil && m.TotalTimeToConnect != nil {
1069		return *m.TotalTimeToConnect
1070	}
1071	return 0
1072}
1073
1074func (m *SessionStats) GetRttToStation() uint32 {
1075	if m != nil && m.RttToStation != nil {
1076		return *m.RttToStation
1077	}
1078	return 0
1079}
1080
1081func (m *SessionStats) GetTlsToDecoy() uint32 {
1082	if m != nil && m.TlsToDecoy != nil {
1083		return *m.TlsToDecoy
1084	}
1085	return 0
1086}
1087
1088func (m *SessionStats) GetTcpToDecoy() uint32 {
1089	if m != nil && m.TcpToDecoy != nil {
1090		return *m.TcpToDecoy
1091	}
1092	return 0
1093}
1094
1095func init() {
1096	proto.RegisterEnum("tapdance.KeyType", KeyType_name, KeyType_value)
1097	proto.RegisterEnum("tapdance.C2S_Transition", C2S_Transition_name, C2S_Transition_value)
1098	proto.RegisterEnum("tapdance.S2C_Transition", S2C_Transition_name, S2C_Transition_value)
1099	proto.RegisterEnum("tapdance.ErrorReasonS2C", ErrorReasonS2C_name, ErrorReasonS2C_value)
1100	proto.RegisterEnum("tapdance.TransportType", TransportType_name, TransportType_value)
1101	proto.RegisterEnum("tapdance.RegistrationSource", RegistrationSource_name, RegistrationSource_value)
1102	proto.RegisterType((*PubKey)(nil), "tapdance.PubKey")
1103	proto.RegisterType((*TLSDecoySpec)(nil), "tapdance.TLSDecoySpec")
1104	proto.RegisterType((*ClientConf)(nil), "tapdance.ClientConf")
1105	proto.RegisterType((*DecoyList)(nil), "tapdance.DecoyList")
1106	proto.RegisterType((*DarkDecoyBlocks)(nil), "tapdance.DarkDecoyBlocks")
1107	proto.RegisterType((*StationToClient)(nil), "tapdance.StationToClient")
1108	proto.RegisterType((*RegistrationFlags)(nil), "tapdance.RegistrationFlags")
1109	proto.RegisterType((*ClientToStation)(nil), "tapdance.ClientToStation")
1110	proto.RegisterType((*C2SWrapper)(nil), "tapdance.C2SWrapper")
1111	proto.RegisterType((*SessionStats)(nil), "tapdance.SessionStats")
1112}
1113
1114func init() { proto.RegisterFile("signalling.proto", fileDescriptor_39f66308029891ad) }
1115
1116var fileDescriptor_39f66308029891ad = []byte{
1117	// 1451 bytes of a gzipped FileDescriptorProto
1118	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0xdd, 0x72, 0xdb, 0xba,
1119	0x11, 0x36, 0xfd, 0x2b, 0xad, 0xfe, 0x68, 0xf8, 0x8f, 0xe9, 0x39, 0xa7, 0xc7, 0x47, 0x69, 0x5a,
1120	0xc7, 0x6d, 0x33, 0xb5, 0xc6, 0x76, 0x7a, 0xab, 0xd0, 0x4c, 0xa2, 0x89, 0x2c, 0x2a, 0x20, 0x9d,
1121	0x36, 0xed, 0x05, 0x86, 0x26, 0x21, 0x87, 0x35, 0x4d, 0x72, 0x00, 0xc8, 0xad, 0xde, 0xa4, 0x7d,
1122	0x81, 0x5e, 0x75, 0xa6, 0x6f, 0xd0, 0x17, 0xc8, 0x33, 0xf4, 0xba, 0x8f, 0xd1, 0x0e, 0x00, 0x52,
1123	0xa2, 0xec, 0x34, 0x9d, 0xde, 0x09, 0xdf, 0x2e, 0xb0, 0xfb, 0xed, 0x7e, 0xbb, 0x14, 0x98, 0x3c,
1124	0xbe, 0x49, 0x83, 0x24, 0x89, 0xd3, 0x9b, 0x17, 0x39, 0xcb, 0x44, 0x86, 0x6a, 0x22, 0xc8, 0xa3,
1125	0x20, 0x0d, 0x69, 0xb7, 0x0f, 0x9b, 0xe3, 0xe9, 0xf5, 0x3b, 0x3a, 0x43, 0x26, 0xac, 0xdd, 0xd2,
1126	0x99, 0x65, 0x1c, 0x1a, 0x47, 0x4d, 0x2c, 0x7f, 0xa2, 0x67, 0xb0, 0x2e, 0x66, 0x39, 0xb5, 0x56,
1127	0x0f, 0x8d, 0xa3, 0x76, 0x6f, 0xfb, 0x45, 0x79, 0xe9, 0xc5, 0x3b, 0x3a, 0xf3, 0x67, 0x39, 0xc5,
1128	0xca, 0xdc, 0xfd, 0x87, 0x01, 0x4d, 0x7f, 0xe8, 0x5d, 0xd0, 0x30, 0x9b, 0x79, 0x39, 0x0d, 0xd1,
1129	0x8f, 0xa0, 0xf6, 0x29, 0xe3, 0x22, 0x0d, 0xee, 0xa8, 0x7a, 0xae, 0x8e, 0xe7, 0x67, 0x69, 0x8b,
1130	0xf3, 0xfb, 0xd3, 0x20, 0x8a, 0x98, 0x7a, 0x77, 0x0b, 0xcf, 0xcf, 0x85, 0xed, 0x5c, 0xd9, 0x36,
1131	0x55, 0x1a, 0xf3, 0x33, 0x3a, 0x82, 0xcd, 0x7c, 0x7a, 0x2d, 0x13, 0x5c, 0x3b, 0x34, 0x8e, 0x1a,
1132	0x3d, 0x73, 0x91, 0x8d, 0xce, 0x1f, 0x17, 0x76, 0x64, 0xc1, 0x96, 0x88, 0xef, 0x68, 0x36, 0x15,
1133	0xd6, 0xfa, 0xa1, 0x71, 0xd4, 0xc2, 0xe5, 0x11, 0xed, 0xc3, 0xa6, 0x08, 0xf3, 0x3f, 0xc6, 0xa9,
1134	0xb5, 0xa1, 0x0c, 0xc5, 0xa9, 0xfb, 0x97, 0x55, 0x00, 0x3b, 0x89, 0x69, 0x2a, 0xec, 0x2c, 0x9d,
1135	0xa0, 0x1e, 0x40, 0x24, 0xb9, 0x90, 0x24, 0xe6, 0x42, 0x11, 0x68, 0xf4, 0x76, 0x16, 0xe1, 0x14,
1136	0xcf, 0x61, 0xcc, 0x05, 0xae, 0x47, 0xe5, 0x4f, 0xf4, 0x63, 0x80, 0x1b, 0x9a, 0x52, 0x16, 0x88,
1137	0x38, 0x4b, 0x15, 0xb1, 0x16, 0xae, 0x20, 0xe8, 0x25, 0xb4, 0x23, 0x3a, 0x09, 0xa6, 0x89, 0x20,
1138	0xff, 0x83, 0x46, 0xab, 0xf0, 0x1b, 0x6b, 0x36, 0x0e, 0x6c, 0x47, 0x01, 0xbb, 0x25, 0x3a, 0xa3,
1139	0xeb, 0x24, 0x0b, 0x6f, 0xb9, 0xe2, 0xd5, 0xe8, 0x3d, 0xa9, 0xe4, 0x14, 0xb0, 0x5b, 0x95, 0xd7,
1140	0x2b, 0xe5, 0x80, 0x3b, 0xd1, 0x32, 0x20, 0xe3, 0x87, 0x59, 0xfa, 0x87, 0x29, 0xa3, 0x65, 0xfc,
1141	0x8d, 0xff, 0x16, 0xbf, 0xf0, 0xd3, 0xf1, 0xbb, 0xaf, 0xa0, 0x3e, 0x27, 0x8c, 0xce, 0x00, 0x44,
1142	0xc2, 0x75, 0x2e, 0xdc, 0x32, 0x0e, 0xd7, 0x8e, 0x1a, 0xbd, 0xfd, 0xc5, 0x0b, 0x55, 0x11, 0xe0,
1143	0xba, 0x48, 0xb8, 0x3a, 0xf1, 0xee, 0x73, 0xe8, 0x3c, 0x48, 0x50, 0xb6, 0xa2, 0xe0, 0x22, 0x5f,
1144	0xa9, 0xe3, 0xe2, 0xd4, 0xfd, 0xbc, 0x0a, 0x1d, 0x4f, 0xa8, 0x9a, 0xf9, 0x99, 0xee, 0x09, 0x7a,
1145	0x0e, 0xa6, 0x52, 0x6d, 0x98, 0x25, 0xe4, 0x9e, 0x32, 0x2e, 0x2b, 0x6c, 0xa8, 0x0a, 0x77, 0x4a,
1146	0xfc, 0x83, 0x86, 0x91, 0x0d, 0x26, 0x17, 0x81, 0xa0, 0x44, 0xb0, 0x20, 0xe5, 0xf1, 0xbc, 0x19,
1147	0xed, 0x9e, 0xb5, 0x48, 0xd3, 0xeb, 0xd9, 0xc4, 0x9f, 0xdb, 0x71, 0x47, 0xdd, 0x58, 0x00, 0xe8,
1148	0x0c, 0x1a, 0x61, 0x96, 0x4e, 0xe2, 0x1b, 0x12, 0xa7, 0x93, 0xac, 0x68, 0xd4, 0xee, 0xe2, 0xfe,
1149	0x42, 0x2a, 0x18, 0xb4, 0xe3, 0x20, 0x9d, 0x64, 0xe8, 0x25, 0x00, 0x65, 0x8c, 0x30, 0x1a, 0xf0,
1150	0x2c, 0x55, 0x2d, 0x5a, 0x8a, 0xea, 0x30, 0x96, 0x31, 0xac, 0x8c, 0x5e, 0xcf, 0xc6, 0x75, 0xca,
1151	0x8a, 0x13, 0xfa, 0x1e, 0x1a, 0xe2, 0x2e, 0x27, 0xd7, 0x41, 0x78, 0x9b, 0x4d, 0x26, 0x85, 0x36,
1152	0x41, 0xdc, 0xe5, 0xaf, 0x34, 0x82, 0xbe, 0x03, 0xe0, 0xba, 0x26, 0x24, 0x8e, 0xd4, 0x64, 0xd4,
1153	0x71, 0xbd, 0x40, 0x06, 0x91, 0x14, 0x7c, 0x1e, 0x44, 0x51, 0x9c, 0xde, 0x58, 0x91, 0x9a, 0x9a,
1154	0xf2, 0xd8, 0xfd, 0xbb, 0x01, 0xdb, 0x98, 0xde, 0xc4, 0x5c, 0x68, 0x19, 0xbe, 0x4e, 0x82, 0x1b,
1155	0x2e, 0xe3, 0x4d, 0xf3, 0x24, 0x0b, 0x22, 0x92, 0xa5, 0x89, 0x1e, 0xf8, 0x1a, 0x06, 0x0d, 0xb9,
1156	0x69, 0x32, 0x93, 0xf1, 0x16, 0x9a, 0x53, 0xf5, 0xab, 0xe1, 0xfa, 0x5c, 0x51, 0xe8, 0x07, 0x68,
1157	0xe6, 0x2c, 0xfb, 0xd3, 0x8c, 0x7c, 0xa2, 0x41, 0x44, 0x99, 0x2a, 0x50, 0x0d, 0x37, 0x14, 0xf6,
1158	0x56, 0x41, 0xe8, 0x00, 0xb6, 0xa6, 0x9c, 0x12, 0x7f, 0x30, 0x54, 0x85, 0xa8, 0xe1, 0xcd, 0x29,
1159	0xa7, 0xfe, 0x60, 0x28, 0xe7, 0x24, 0x67, 0x94, 0x87, 0x41, 0x9a, 0xd2, 0x48, 0x51, 0xad, 0xe1,
1160	0x0a, 0xd2, 0xfd, 0xbc, 0x0e, 0x1d, 0x5d, 0x5f, 0x3f, 0x2b, 0x74, 0xf0, 0xff, 0xf4, 0xbf, 0x07,
1161	0x7b, 0x8b, 0xd1, 0x25, 0x8f, 0x26, 0x72, 0x67, 0x3e, 0xb0, 0x6f, 0x16, 0xa3, 0xf9, 0x25, 0xcd,
1162	0xac, 0x3d, 0xec, 0x9e, 0xdd, 0xf3, 0xbe, 0xaa, 0x99, 0x45, 0x4d, 0xf9, 0x2c, 0x0d, 0x15, 0xe9,
1163	0xf5, 0xb2, 0xa6, 0xde, 0x2c, 0x0d, 0xd1, 0x53, 0x68, 0x4d, 0x82, 0x38, 0xa1, 0x51, 0x39, 0x3d,
1164	0xa0, 0x74, 0xdf, 0xd4, 0xa0, 0x1e, 0x14, 0xf4, 0x0b, 0xd8, 0x90, 0x0f, 0x73, 0xab, 0xa1, 0x34,
1165	0x57, 0x19, 0x2d, 0x8f, 0x72, 0x49, 0x50, 0x96, 0x84, 0x63, 0xed, 0x84, 0xce, 0xa0, 0xae, 0x52,
1166	0xce, 0x33, 0x26, 0xac, 0xa6, 0xca, 0xf8, 0xa0, 0x32, 0x8c, 0xa5, 0x49, 0x6d, 0xea, 0x85, 0x27,
1167	0x7a, 0x26, 0x57, 0xc1, 0x3d, 0x65, 0x82, 0xc8, 0xc5, 0x4a, 0x39, 0xb7, 0x76, 0x95, 0xa2, 0x5a,
1168	0x1a, 0xed, 0x6b, 0x10, 0xbd, 0x04, 0xeb, 0x2e, 0xe0, 0xb7, 0x65, 0xc2, 0x84, 0x53, 0x76, 0x4f,
1169	0x19, 0x51, 0x4b, 0x7d, 0x4f, 0x5d, 0xd8, 0xd3, 0x76, 0x3d, 0xf2, 0xca, 0x3a, 0x92, 0x1b, 0xfe,
1170	0x3b, 0x80, 0xfb, 0x73, 0xc2, 0xa7, 0xb9, 0xca, 0x6b, 0x5f, 0xab, 0xe7, 0xfe, 0xdc, 0xd3, 0x80,
1171	0x32, 0x9f, 0xce, 0xcd, 0x07, 0x85, 0xf9, 0xb4, 0x34, 0x9f, 0xc0, 0xc6, 0x44, 0xaa, 0xd4, 0xb2,
1172	0x54, 0x09, 0xbe, 0x59, 0x10, 0x7a, 0x24, 0x64, 0xac, 0x3d, 0xbf, 0xa2, 0xff, 0xbf, 0xca, 0xc5,
1173	0xde, 0xf3, 0x7e, 0xc3, 0x82, 0x3c, 0xa7, 0x4c, 0xf6, 0x80, 0x7f, 0x0a, 0x18, 0x8d, 0x08, 0xa7,
1174	0x21, 0xa3, 0xa2, 0xf8, 0xd6, 0x35, 0x35, 0xe8, 0x29, 0x0c, 0x0d, 0x61, 0x97, 0x55, 0x22, 0x91,
1175	0x3c, 0x98, 0xc9, 0x26, 0x16, 0x6b, 0xe0, 0xc9, 0xc3, 0x35, 0x30, 0x97, 0x29, 0xde, 0xa9, 0x5e,
1176	0x1b, 0xeb, 0x5b, 0xe8, 0x12, 0x96, 0x60, 0xc2, 0xb3, 0x29, 0x0b, 0x69, 0xb1, 0x1d, 0xbe, 0xfd,
1177	0x32, 0x39, 0x4f, 0xf9, 0x60, 0xc4, 0x1e, 0x61, 0xe8, 0xe4, 0x41, 0x72, 0x65, 0x07, 0xf5, 0xd7,
1178	0x72, 0x29, 0x54, 0xd9, 0xc7, 0xa7, 0xd0, 0xd2, 0x0d, 0x2c, 0x7d, 0xb7, 0x34, 0x69, 0x05, 0x16,
1179	0x4e, 0xdd, 0x7f, 0x1a, 0xd0, 0xac, 0x4a, 0x0c, 0xfd, 0x0a, 0x76, 0x97, 0xe4, 0x4a, 0x82, 0xbb,
1180	0x6c, 0x9a, 0x0a, 0x25, 0x95, 0x16, 0x46, 0x55, 0xd5, 0xf6, 0x95, 0x05, 0x9d, 0xc0, 0x9e, 0xc8,
1181	0x44, 0x90, 0x10, 0xf9, 0xb5, 0x25, 0x22, 0x23, 0x61, 0x96, 0xa6, 0x34, 0x14, 0xd6, 0xf7, 0xfa,
1182	0x8a, 0x32, 0xfa, 0xf1, 0x1d, 0xf5, 0x33, 0x5b, 0x5b, 0xd0, 0x4f, 0xa0, 0xcd, 0x84, 0x90, 0xbe,
1183	0xc5, 0x32, 0xb3, 0x7e, 0x50, 0xbe, 0x4d, 0x26, 0x2a, 0xe3, 0x7f, 0x08, 0x4d, 0xf9, 0xd1, 0x11,
1184	0x59, 0xb1, 0x8f, 0x7e, 0x5a, 0xec, 0xc7, 0x84, 0xfb, 0x99, 0x5e, 0x48, 0xd2, 0x23, 0xcc, 0x17,
1185	0x1e, 0x3f, 0x2b, 0x3c, 0xc2, 0xbc, 0xf0, 0x38, 0xfe, 0x39, 0x6c, 0x15, 0xff, 0x59, 0x50, 0x07,
1186	0x1a, 0x7d, 0xc7, 0x23, 0x6f, 0xec, 0x4b, 0x72, 0xd2, 0xfb, 0xb5, 0xf9, 0xbb, 0x2a, 0xd0, 0x3b,
1187	0x3b, 0x37, 0x7f, 0x7f, 0xfc, 0x2f, 0x03, 0xda, 0xcb, 0xf3, 0x8e, 0xb6, 0xa1, 0x25, 0x91, 0x91,
1188	0x4b, 0xec, 0xb7, 0xfd, 0xd1, 0x1b, 0xc7, 0x5c, 0x41, 0xbb, 0x60, 0x4a, 0xc8, 0x73, 0x3c, 0x6f,
1189	0xe0, 0x8e, 0xc8, 0x60, 0x34, 0xf0, 0x4d, 0x03, 0x7d, 0x03, 0x07, 0x55, 0xd4, 0x76, 0x3f, 0x38,
1190	0xd8, 0xd7, 0xc6, 0x06, 0xb2, 0x60, 0x57, 0x1a, 0x9d, 0xdf, 0x8e, 0x1d, 0xdb, 0x27, 0xd8, 0xb1,
1191	0xdd, 0xd1, 0xc8, 0xb1, 0x7d, 0x73, 0x15, 0xed, 0xc1, 0xf6, 0xd2, 0xb5, 0xa1, 0xeb, 0x39, 0xe6,
1192	0x5a, 0x19, 0xe3, 0xe3, 0xc0, 0x19, 0x5e, 0x90, 0xab, 0xf1, 0xd0, 0xed, 0x5f, 0x98, 0xeb, 0x68,
1193	0x1f, 0x90, 0x44, 0xfb, 0xf6, 0xfb, 0xab, 0x01, 0x76, 0x4a, 0x7c, 0x03, 0x1d, 0xc2, 0xb7, 0x95,
1194	0xe7, 0x35, 0xec, 0x8e, 0x86, 0x1f, 0x8b, 0x48, 0xe6, 0x26, 0x6a, 0x43, 0x5d, 0x79, 0x60, 0xec,
1195	0x62, 0xf3, 0xdf, 0xc6, 0xf1, 0x9f, 0x0d, 0x68, 0x2f, 0x7f, 0x0d, 0x25, 0x53, 0x89, 0x3c, 0x60,
1196	0x2a, 0xa1, 0xc7, 0x4c, 0xab, 0xe8, 0x32, 0xd3, 0x27, 0xb0, 0x27, 0x8d, 0xb6, 0x3b, 0x7a, 0x3d,
1197	0xc0, 0x97, 0x0f, 0xa9, 0x2e, 0xdd, 0x2b, 0xa8, 0xb6, 0xa1, 0x2e, 0xe1, 0x79, 0x6a, 0x7f, 0x33,
1198	0xa0, 0xbd, 0xfc, 0xc9, 0x44, 0x4d, 0xa8, 0x8d, 0xdc, 0xc2, 0x63, 0x45, 0xb5, 0x44, 0xc7, 0xf4,
1199	0x7c, 0xec, 0xf4, 0x2f, 0x4d, 0x03, 0xed, 0x40, 0xc7, 0x1e, 0x0e, 0x9c, 0x91, 0xac, 0xed, 0xd8,
1200	0xc5, 0xbe, 0x73, 0x61, 0xae, 0x56, 0xc0, 0x31, 0x76, 0x7d, 0xd7, 0x76, 0x87, 0xba, 0xb0, 0x9e,
1201	0xdf, 0xf7, 0x35, 0x1d, 0xdf, 0xc1, 0xa3, 0xfe, 0xd0, 0x5c, 0x47, 0x08, 0xda, 0x17, 0x8e, 0xed,
1202	0x7e, 0x24, 0xf2, 0xdd, 0xa2, 0xa8, 0x32, 0x8c, 0xbe, 0x5e, 0x84, 0x89, 0xa4, 0x5b, 0x01, 0xf9,
1203	0x83, 0x4b, 0xc7, 0xbd, 0xf2, 0x4d, 0x7a, 0xfc, 0x4b, 0x68, 0x2d, 0x2d, 0x5c, 0x54, 0x83, 0xf5,
1204	0xd1, 0x34, 0x49, 0xcc, 0x15, 0xb4, 0x05, 0x6b, 0x97, 0x71, 0x6a, 0x1a, 0xa8, 0x0e, 0x1b, 0xee,
1205	0xf5, 0x84, 0x9f, 0x9a, 0xab, 0xc7, 0xef, 0x01, 0x3d, 0x9e, 0x78, 0xa9, 0xc4, 0xab, 0x94, 0xe7,
1206	0x34, 0x8c, 0x27, 0x31, 0x8d, 0xcc, 0x15, 0xc9, 0xf8, 0x82, 0x0a, 0x1a, 0x8a, 0x8c, 0x99, 0x86,
1207	0x7c, 0xa8, 0x3f, 0x1e, 0x68, 0x4a, 0x25, 0x3c, 0xd6, 0x9f, 0x4e, 0x73, 0xed, 0x3f, 0x01, 0x00,
1208	0x00, 0xff, 0xff, 0xe7, 0xd7, 0xdf, 0x07, 0xe5, 0x0b, 0x00, 0x00,
1209}
1210