diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f487411..d88dfe2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,39 +9,32 @@ jobs: - name: Checkout uses: actions/checkout@v4 with: - path: gopath/github.com/katydid/validator-gogo-proto + path: gopath/src/github.com/katydid/experiment-encode-gogo-proto - name: Checkout gogoprotobuf uses: actions/checkout@v4 with: repository: gogo/protobuf - path: gopath/github.com/gogo/protobuf - - name: Checkout testsuite - uses: actions/checkout@v4 - with: - repository: katydid/testsuite - path: gopath/github.com/katydid/testsuite + path: gopath/src/github.com/gogo/protobuf - name: Setup Go uses: actions/setup-go@v3 with: go-version: 1.23 - name: Fetch dependencies run: | - cd gopath/github.com/katydid/validator-gogo-proto + cd gopath/src/github.com/katydid/experiment-encode-gogo-proto go mod download -x - name: Install tools run: | - cd gopath/github.com/katydid/validator-gogo-proto - go install -x github.com/goccmack/gocc + cd gopath/src/github.com/katydid/experiment-encode-gogo-proto go install -x github.com/awalterschulze/checklicense - go install -x github.com/awalterschulze/goderive go install -x github.com/gogo/protobuf/protoc-gen-gogo - name: Setup protoc run: | - cd gopath/github.com/katydid/validator-gogo-proto + cd gopath/src/github.com/katydid/experiment-encode-gogo-proto ./install_protoc.sh - name: Protoc version run: | - cd gopath/github.com/katydid/validator-gogo-proto + cd gopath/src/github.com/katydid/experiment-encode-gogo-proto PATH=$HOME/bin:$PATH protoc --version - name: env run: env && go env && pwd @@ -49,25 +42,25 @@ jobs: run: tree - name: Generate run: | - cd gopath/github.com/katydid/validator-gogo-proto + cd gopath/src/github.com/katydid/experiment-encode-gogo-proto PATH=$HOME/bin:$PATH make regenerate - name: Build run: | - cd gopath/github.com/katydid/validator-gogo-proto + cd gopath/src/github.com/katydid/experiment-encode-gogo-proto make build - name: Test run: | - cd gopath/github.com/katydid/validator-gogo-proto + cd gopath/src/github.com/katydid/experiment-encode-gogo-proto make test - name: Vet run: | - cd gopath/github.com/katydid/validator-gogo-proto + cd gopath/src/github.com/katydid/experiment-encode-gogo-proto make vet - name: Checklicencse run: | - cd gopath/github.com/katydid/validator-gogo-proto + cd gopath/src/github.com/katydid/experiment-encode-gogo-proto make checklicense - name: Diff run: | - cd gopath/github.com/katydid/validator-gogo-proto + cd gopath/src/github.com/katydid/experiment-encode-gogo-proto make diff diff --git a/Makefile b/Makefile index 5cee252..071ea8c 100644 --- a/Makefile +++ b/Makefile @@ -18,20 +18,10 @@ all: nuke dep regenerate build test vet dep: go install github.com/gogo/protobuf/protoc-gen-gogo - go install -v github.com/goccmack/gocc - go install -v github.com/awalterschulze/goderive checklicense: go get github.com/awalterschulze/checklicense checklicense . \ - person.proto \ - srctree.proto \ - puddingmilkshake.proto \ - taxonomy.proto \ - treeregister.proto \ - typewriterprison.proto \ - proto/tokens/test.proto \ - parser/debug/debug.proto \ doc.go \ tools/tools.go \ .svg \ @@ -51,18 +41,15 @@ bench: go test -test.v -test.run=XXX -test.bench=. ./... vet: - go vet ./encode/... + go vet ./proto/... regenerate: - goderive ./... - (cd parser && make regenerate) - (cd encode && make regenerate) + (cd proto && make regenerate) clean: go clean ./... nuke: clean - (cd parser && make nuke) go clean -i ./... gofmt: diff --git a/README.md b/README.md index ece6e05..f843220 100755 --- a/README.md +++ b/README.md @@ -1,12 +1,3 @@ -## Katydid Validator for Protocol Buffers in Go using GoGoProtobuf +## encode-gogo-proto -[![GoDoc](https://godoc.org/github.com/katydid/validator-gogo-proto?status.svg)](https://godoc.org/github.com/katydid/validator-gogo-proto) [![Build Status](https://github.com/katydid/validator-gogo-proto/actions/workflows/build.yml/badge.svg)](https://github.com/katydid/validator-gogo-proto/actions) - -![Katydid Logo](https://cdn.rawgit.com/katydid/katydid.github.io/main/logo.png) - -The [Katydid](http://katydid.github.io) validator for Protocol Buffers in Go using GoGoProtobuf. - -The validator is a regular expression type language for protocol buffers that matches up to 1000000s of records per second. -This package includes: -* a parser that parses protocol buffers without deserializing the bytes. -* An encoder for protocol buffers. +Experimental encoder in Go for Protocol Buffers using gogoprotobuf. \ No newline at end of file diff --git a/encode/Makefile b/encode/Makefile deleted file mode 100644 index e5e9717..0000000 --- a/encode/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright 2016 Walter Schulze -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -regenerate: - (cd proto && make regenerate) \ No newline at end of file diff --git a/encode/proto/prototests/Makefile b/encode/proto/prototests/Makefile deleted file mode 100644 index 7467c9f..0000000 --- a/encode/proto/prototests/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright 2016 Walter Schulze -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -regenerate: - (protoc --gogo_out=. -I=.:../../../../../../:../../../../../../github.com/gogo/protobuf/protobuf simple.proto) diff --git a/go.mod b/go.mod index 9615ad1..9475b51 100644 --- a/go.mod +++ b/go.mod @@ -1,23 +1,12 @@ -module github.com/katydid/validator-gogo-proto +module github.com/katydid/experiment-encode-gogo-proto go 1.23 -require ( - github.com/awalterschulze/checklicense v1.0.0 - github.com/awalterschulze/goderive v0.5.0 - github.com/goccmack/gocc v0.0.0-20230228185258-2292f9e40198 -) +require github.com/awalterschulze/checklicense v1.0.0 require ( github.com/gogo/protobuf v1.3.2 github.com/katydid/parser-go v0.6.0 github.com/katydid/parser-go-reflect v0.1.0 - github.com/katydid/validator-go v0.5.0 -) - -require ( - github.com/kisielk/gotool v1.0.0 // indirect - golang.org/x/mod v0.8.0 // indirect - golang.org/x/sys v0.5.0 // indirect - golang.org/x/tools v0.6.0 // indirect + github.com/katydid/parser-gogo-proto v0.2.0 ) diff --git a/go.sum b/go.sum index 903e878..d51b681 100644 --- a/go.sum +++ b/go.sum @@ -1,23 +1,14 @@ github.com/awalterschulze/checklicense v1.0.0 h1:SiRilt26Q+2M238VbXw+e5826mxPypvsj/xgglHDHW8= github.com/awalterschulze/checklicense v1.0.0/go.mod h1:oUHvoD4crryzAwDwtdQqCnaZRznAvZE64edH9ukb1K4= -github.com/awalterschulze/goderive v0.5.0 h1:fzWIV1WVS20EQT3YMXJhjiPZIZom1dlgiabZ/PhT9zo= -github.com/awalterschulze/goderive v0.5.0/go.mod h1:rXccmDQDJN/4aGqWxWhq+UmBJeQEkFV/2/rkluP+ipA= -github.com/goccmack/gocc v0.0.0-20230228185258-2292f9e40198 h1:FSii2UQeSLngl3jFoR4tUKZLprO7qUlh/TKKticc0BM= -github.com/goccmack/gocc v0.0.0-20230228185258-2292f9e40198/go.mod h1:DTh/Y2+NbnOVVoypCCQrovMPDKUGp4yZpSbWg5D0XIM= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/katydid/parser-go v0.6.0 h1:8VFYXEp9pZsq4CCxYLDavPPqOSX+JXsmhjfU4XMB8iw= github.com/katydid/parser-go v0.6.0/go.mod h1:1BwRfDlyRgDlAaURZ4FXi7IzHqWKTsrCdsstLsFeQho= -github.com/katydid/parser-go-json v0.1.0 h1:r3+YkDtf9A4JYO+MrdQsN2azxITrgO+2Sc5SSNhp+YI= -github.com/katydid/parser-go-json v0.1.0/go.mod h1:iLjxtkGLdPROUPBHZAhOTIdQerUPl/FEplS10rlq9Nc= github.com/katydid/parser-go-reflect v0.1.0 h1:GsmmOjPC9eLVVHx/Q8nzOPAiOhSan6UP8z9oDOEbYiY= github.com/katydid/parser-go-reflect v0.1.0/go.mod h1:v+FO4WoxNNIhpjzF7nam4YuUzWCe8LFclO4B0f3OaPI= -github.com/katydid/parser-go-xml v0.1.0 h1:8AL0X9hQbNLbQeqRbOdKBOwx4WTSWjy7kxEMmWqHMXc= -github.com/katydid/parser-go-xml v0.1.0/go.mod h1:7rEHS3YuEv/8/ep+uQnLgcvT1znZs8JEc3ZaBbpygjA= -github.com/katydid/validator-go v0.5.0 h1:wOo8hgzeu6/0iv+RVZBGx52cfdvjI2CynXAN6lew5yA= -github.com/katydid/validator-go v0.5.0/go.mod h1:ZVsNg5NEwcOJT2ukTrCu/jKKuNiTRS/4sw4cMNr9vh8= +github.com/katydid/parser-gogo-proto v0.2.0 h1:zUpdli98aYSQY1mvzbysNkk/41jPB25W4NiRXocI/Kg= +github.com/katydid/parser-gogo-proto v0.2.0/go.mod h1:AH9y+kby4gN4o8w3MHDn6EX4SjrviWycnFjvEr/o1Ho= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -26,8 +17,6 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -38,16 +27,12 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/parser/Makefile b/parser/Makefile deleted file mode 100644 index 192012f..0000000 --- a/parser/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright 2015 Walter Schulze -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -regenerate: - cd debug && make regenerate - cd proto && make regenerate - -nuke: - (cd debug && make nuke) \ No newline at end of file diff --git a/parser/debug/debug.pb.go b/parser/debug/debug.pb.go deleted file mode 100644 index 00ecc74..0000000 --- a/parser/debug/debug.pb.go +++ /dev/null @@ -1,443 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: debug.proto - -package debug - -import ( - bytes "bytes" - compress_gzip "compress/gzip" - fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_protoc_gen_gogo_descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" - io_ioutil "io/ioutil" - math "math" - reflect "reflect" - strings "strings" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package - -type Debug struct { - A int64 `protobuf:"varint,1,opt,name=A" json:"A"` - B []string `protobuf:"bytes,2,rep,name=B" json:"B,omitempty"` - C *Debug `protobuf:"bytes,3,opt,name=C" json:"C,omitempty"` - D *int32 `protobuf:"varint,4,opt,name=D" json:"D,omitempty"` - E []*Debug `protobuf:"bytes,5,rep,name=E" json:"E,omitempty"` - F []uint32 `protobuf:"fixed32,6,rep,name=F" json:"F,omitempty"` - G *float64 `protobuf:"fixed64,7,opt,name=G" json:"G,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *Debug) Reset() { *m = Debug{} } -func (m *Debug) String() string { return proto.CompactTextString(m) } -func (*Debug) ProtoMessage() {} -func (*Debug) Descriptor() ([]byte, []int) { - return fileDescriptor_8d9d361be58531fb, []int{0} -} -func (m *Debug) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Debug.Unmarshal(m, b) -} -func (m *Debug) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Debug.Marshal(b, m, deterministic) -} -func (m *Debug) XXX_Merge(src proto.Message) { - xxx_messageInfo_Debug.Merge(m, src) -} -func (m *Debug) XXX_Size() int { - return xxx_messageInfo_Debug.Size(m) -} -func (m *Debug) XXX_DiscardUnknown() { - xxx_messageInfo_Debug.DiscardUnknown(m) -} - -var xxx_messageInfo_Debug proto.InternalMessageInfo - -func (m *Debug) GetA() int64 { - if m != nil { - return m.A - } - return 0 -} - -func (m *Debug) GetB() []string { - if m != nil { - return m.B - } - return nil -} - -func (m *Debug) GetC() *Debug { - if m != nil { - return m.C - } - return nil -} - -func (m *Debug) GetD() int32 { - if m != nil && m.D != nil { - return *m.D - } - return 0 -} - -func (m *Debug) GetE() []*Debug { - if m != nil { - return m.E - } - return nil -} - -func (m *Debug) GetF() []uint32 { - if m != nil { - return m.F - } - return nil -} - -func (m *Debug) GetG() float64 { - if m != nil && m.G != nil { - return *m.G - } - return 0 -} - -func init() { - proto.RegisterType((*Debug)(nil), "debug.Debug") -} - -func init() { proto.RegisterFile("debug.proto", fileDescriptor_8d9d361be58531fb) } - -var fileDescriptor_8d9d361be58531fb = []byte{ - // 199 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x4e, 0x49, 0x4d, 0x2a, - 0x4d, 0xd7, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x05, 0x73, 0xa4, 0x74, 0xd3, 0x33, 0x4b, - 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0xd3, 0xf3, 0xd3, 0xf3, 0xf5, 0xc1, 0xb2, 0x49, - 0xa5, 0x69, 0x60, 0x1e, 0x98, 0x03, 0x66, 0x41, 0x74, 0x29, 0x75, 0x33, 0x72, 0xb1, 0xba, 0x80, - 0x34, 0x0a, 0x09, 0x71, 0x31, 0x3a, 0x4a, 0x30, 0x2a, 0x30, 0x6a, 0x30, 0x3b, 0xb1, 0x9c, 0xb8, - 0x27, 0xcf, 0x10, 0xc4, 0xe8, 0x28, 0xc4, 0xc3, 0xc5, 0xe8, 0x24, 0xc1, 0xa4, 0xc0, 0xac, 0xc1, - 0x19, 0xc4, 0xe8, 0x24, 0x24, 0xc5, 0xc5, 0xe8, 0x2c, 0xc1, 0xac, 0xc0, 0xa8, 0xc1, 0x6d, 0xc4, - 0xa3, 0x07, 0xb1, 0x1a, 0xac, 0x35, 0x88, 0xd1, 0x19, 0xa4, 0xd2, 0x45, 0x82, 0x45, 0x81, 0x51, - 0x83, 0x35, 0x88, 0xd1, 0x05, 0xa4, 0xd2, 0x55, 0x82, 0x55, 0x81, 0x19, 0x53, 0xa5, 0x2b, 0x48, - 0xa5, 0x9b, 0x04, 0x9b, 0x02, 0xb3, 0x06, 0x7b, 0x10, 0xa3, 0x1b, 0x88, 0xe7, 0x2e, 0xc1, 0xae, - 0xc0, 0xa8, 0xc1, 0x18, 0xc4, 0xe8, 0xee, 0x24, 0xf0, 0xe1, 0xa1, 0x1c, 0xe3, 0x86, 0x47, 0x72, - 0x8c, 0x17, 0x1e, 0xcb, 0x31, 0xdc, 0x78, 0x2c, 0xc7, 0x00, 0x08, 0x00, 0x00, 0xff, 0xff, 0x55, - 0xf4, 0x89, 0xf2, 0xe3, 0x00, 0x00, 0x00, -} - -func (this *Debug) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { - return DebugDescription() -} -func DebugDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { - d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} - var gzipped = []byte{ - // 3905 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x5b, 0x70, 0xe3, 0xd6, - 0x79, 0x5e, 0xf0, 0x22, 0x91, 0x3f, 0x29, 0x0a, 0x3a, 0x92, 0xb5, 0x5c, 0x39, 0xde, 0x8b, 0x6c, - 0xc7, 0xb2, 0x1d, 0x6b, 0x33, 0xeb, 0xdd, 0xb5, 0xcd, 0x6d, 0xe2, 0x52, 0x14, 0x56, 0x91, 0xab, - 0x0b, 0x03, 0x4a, 0xf1, 0x25, 0xd3, 0xc1, 0x40, 0xe0, 0x21, 0x85, 0x5d, 0x10, 0x40, 0x00, 0x70, - 0xd7, 0xda, 0xe9, 0x83, 0x3b, 0xee, 0x65, 0x32, 0xe9, 0xbd, 0x9d, 0x69, 0xe2, 0x3a, 0x6e, 0x93, - 0x4e, 0xe3, 0x36, 0xbd, 0x25, 0xbd, 0xa4, 0x4d, 0xfa, 0xd2, 0x97, 0xb4, 0x7e, 0xea, 0x34, 0x6f, - 0x7d, 0xe8, 0x74, 0xda, 0xda, 0x33, 0xbd, 0xb9, 0x6d, 0xda, 0xee, 0x43, 0x67, 0xfc, 0x92, 0x39, - 0x37, 0x10, 0x00, 0xa9, 0x05, 0x94, 0x19, 0x3b, 0x4f, 0x12, 0xfe, 0xf3, 0x7f, 0x1f, 0xfe, 0xf3, - 0x9f, 0xff, 0xfc, 0xff, 0x7f, 0x0e, 0x08, 0x6f, 0x35, 0xe0, 0x7c, 0xdf, 0x71, 0xfa, 0x16, 0xbe, - 0xe8, 0x7a, 0x4e, 0xe0, 0x1c, 0x0c, 0x7b, 0x17, 0xbb, 0xd8, 0x37, 0x3c, 0xd3, 0x0d, 0x1c, 0x6f, - 0x95, 0xca, 0xd0, 0x2c, 0xd3, 0x58, 0x15, 0x1a, 0xcb, 0xdb, 0x30, 0x77, 0xdd, 0xb4, 0xf0, 0x7a, - 0xa8, 0xd8, 0xc1, 0x01, 0x7a, 0x1a, 0x0a, 0x3d, 0xd3, 0xc2, 0x75, 0xe9, 0x7c, 0x7e, 0xa5, 0x72, - 0xe9, 0xa1, 0xd5, 0x04, 0x68, 0x35, 0x8e, 0x68, 0x13, 0xb1, 0x4a, 0x11, 0xcb, 0xef, 0x14, 0x60, - 0x7e, 0xc2, 0x28, 0x42, 0x50, 0xb0, 0xf5, 0x01, 0x61, 0x94, 0x56, 0xca, 0x2a, 0xfd, 0x1f, 0xd5, - 0x61, 0xda, 0xd5, 0x8d, 0x9b, 0x7a, 0x1f, 0xd7, 0x73, 0x54, 0x2c, 0x1e, 0xd1, 0x59, 0x80, 0x2e, - 0x76, 0xb1, 0xdd, 0xc5, 0xb6, 0x71, 0x54, 0xcf, 0x9f, 0xcf, 0xaf, 0x94, 0xd5, 0x88, 0x04, 0x3d, - 0x0e, 0x73, 0xee, 0xf0, 0xc0, 0x32, 0x0d, 0x2d, 0xa2, 0x06, 0xe7, 0xf3, 0x2b, 0x45, 0x55, 0x66, - 0x03, 0xeb, 0x23, 0xe5, 0x47, 0x60, 0xf6, 0x36, 0xd6, 0x6f, 0x46, 0x55, 0x2b, 0x54, 0xb5, 0x46, - 0xc4, 0x11, 0xc5, 0x16, 0x54, 0x07, 0xd8, 0xf7, 0xf5, 0x3e, 0xd6, 0x82, 0x23, 0x17, 0xd7, 0x0b, - 0x74, 0xf6, 0xe7, 0xc7, 0x66, 0x9f, 0x9c, 0x79, 0x85, 0xa3, 0xf6, 0x8e, 0x5c, 0x8c, 0x9a, 0x50, - 0xc6, 0xf6, 0x70, 0xc0, 0x18, 0x8a, 0xc7, 0xf8, 0x4f, 0xb1, 0x87, 0x83, 0x24, 0x4b, 0x89, 0xc0, - 0x38, 0xc5, 0xb4, 0x8f, 0xbd, 0x5b, 0xa6, 0x81, 0xeb, 0x53, 0x94, 0xe0, 0x91, 0x31, 0x82, 0x0e, - 0x1b, 0x4f, 0x72, 0x08, 0x1c, 0x6a, 0x41, 0x19, 0xbf, 0x1c, 0x60, 0xdb, 0x37, 0x1d, 0xbb, 0x3e, - 0x4d, 0x49, 0x1e, 0x9e, 0xb0, 0x8a, 0xd8, 0xea, 0x26, 0x29, 0x46, 0x38, 0x74, 0x15, 0xa6, 0x1d, - 0x37, 0x30, 0x1d, 0xdb, 0xaf, 0x97, 0xce, 0x4b, 0x2b, 0x95, 0x4b, 0x1f, 0x9a, 0x18, 0x08, 0xbb, - 0x4c, 0x47, 0x15, 0xca, 0x68, 0x13, 0x64, 0xdf, 0x19, 0x7a, 0x06, 0xd6, 0x0c, 0xa7, 0x8b, 0x35, - 0xd3, 0xee, 0x39, 0xf5, 0x32, 0x25, 0x38, 0x37, 0x3e, 0x11, 0xaa, 0xd8, 0x72, 0xba, 0x78, 0xd3, - 0xee, 0x39, 0x6a, 0xcd, 0x8f, 0x3d, 0xa3, 0x45, 0x98, 0xf2, 0x8f, 0xec, 0x40, 0x7f, 0xb9, 0x5e, - 0xa5, 0x11, 0xc2, 0x9f, 0x96, 0xbf, 0x39, 0x05, 0xb3, 0x59, 0x42, 0xec, 0x1a, 0x14, 0x7b, 0x64, - 0x96, 0xf5, 0xdc, 0x49, 0x7c, 0xc0, 0x30, 0x71, 0x27, 0x4e, 0x7d, 0x9f, 0x4e, 0x6c, 0x42, 0xc5, - 0xc6, 0x7e, 0x80, 0xbb, 0x2c, 0x22, 0xf2, 0x19, 0x63, 0x0a, 0x18, 0x68, 0x3c, 0xa4, 0x0a, 0xdf, - 0x57, 0x48, 0xbd, 0x00, 0xb3, 0xa1, 0x49, 0x9a, 0xa7, 0xdb, 0x7d, 0x11, 0x9b, 0x17, 0xd3, 0x2c, - 0x59, 0x55, 0x04, 0x4e, 0x25, 0x30, 0xb5, 0x86, 0x63, 0xcf, 0x68, 0x1d, 0xc0, 0xb1, 0xb1, 0xd3, - 0xd3, 0xba, 0xd8, 0xb0, 0xea, 0xa5, 0x63, 0xbc, 0xb4, 0x4b, 0x54, 0xc6, 0xbc, 0xe4, 0x30, 0xa9, - 0x61, 0xa1, 0x67, 0x46, 0xa1, 0x36, 0x7d, 0x4c, 0xa4, 0x6c, 0xb3, 0x4d, 0x36, 0x16, 0x6d, 0xfb, - 0x50, 0xf3, 0x30, 0x89, 0x7b, 0xdc, 0xe5, 0x33, 0x2b, 0x53, 0x23, 0x56, 0x53, 0x67, 0xa6, 0x72, - 0x18, 0x9b, 0xd8, 0x8c, 0x17, 0x7d, 0x44, 0x0f, 0x42, 0x28, 0xd0, 0x68, 0x58, 0x01, 0xcd, 0x42, - 0x55, 0x21, 0xdc, 0xd1, 0x07, 0x78, 0xe9, 0x0e, 0xd4, 0xe2, 0xee, 0x41, 0x0b, 0x50, 0xf4, 0x03, - 0xdd, 0x0b, 0x68, 0x14, 0x16, 0x55, 0xf6, 0x80, 0x64, 0xc8, 0x63, 0xbb, 0x4b, 0xb3, 0x5c, 0x51, - 0x25, 0xff, 0xa2, 0x1f, 0x1e, 0x4d, 0x38, 0x4f, 0x27, 0xfc, 0xe1, 0xf1, 0x15, 0x8d, 0x31, 0x27, - 0xe7, 0xbd, 0xf4, 0x14, 0xcc, 0xc4, 0x26, 0x90, 0xf5, 0xd5, 0xcb, 0x3f, 0x06, 0xf7, 0x4d, 0xa4, - 0x46, 0x2f, 0xc0, 0xc2, 0xd0, 0x36, 0xed, 0x00, 0x7b, 0xae, 0x87, 0x49, 0xc4, 0xb2, 0x57, 0xd5, - 0xff, 0x65, 0xfa, 0x98, 0x98, 0xdb, 0x8f, 0x6a, 0x33, 0x16, 0x75, 0x7e, 0x38, 0x2e, 0x7c, 0xac, - 0x5c, 0xfa, 0xd7, 0x69, 0xf9, 0x95, 0x57, 0x5e, 0x79, 0x25, 0xb7, 0xfc, 0xf9, 0x29, 0x58, 0x98, - 0xb4, 0x67, 0x26, 0x6e, 0xdf, 0x45, 0x98, 0xb2, 0x87, 0x83, 0x03, 0xec, 0x51, 0x27, 0x15, 0x55, - 0xfe, 0x84, 0x9a, 0x50, 0xb4, 0xf4, 0x03, 0x6c, 0xd5, 0x0b, 0xe7, 0xa5, 0x95, 0xda, 0xa5, 0xc7, - 0x33, 0xed, 0xca, 0xd5, 0x2d, 0x02, 0x51, 0x19, 0x12, 0x7d, 0x1c, 0x0a, 0x3c, 0x45, 0x13, 0x86, - 0xc7, 0xb2, 0x31, 0x90, 0xbd, 0xa4, 0x52, 0x1c, 0xba, 0x1f, 0xca, 0xe4, 0x2f, 0x8b, 0x8d, 0x29, - 0x6a, 0x73, 0x89, 0x08, 0x48, 0x5c, 0xa0, 0x25, 0x28, 0xd1, 0x6d, 0xd2, 0xc5, 0xa2, 0xb4, 0x85, - 0xcf, 0x24, 0xb0, 0xba, 0xb8, 0xa7, 0x0f, 0xad, 0x40, 0xbb, 0xa5, 0x5b, 0x43, 0x4c, 0x03, 0xbe, - 0xac, 0x56, 0xb9, 0xf0, 0x53, 0x44, 0x86, 0xce, 0x41, 0x85, 0xed, 0x2a, 0xd3, 0xee, 0xe2, 0x97, - 0x69, 0xf6, 0x2c, 0xaa, 0x6c, 0xa3, 0x6d, 0x12, 0x09, 0x79, 0xfd, 0x0d, 0xdf, 0xb1, 0x45, 0x68, - 0xd2, 0x57, 0x10, 0x01, 0x7d, 0xfd, 0x53, 0xc9, 0xc4, 0xfd, 0xc0, 0xe4, 0xe9, 0x25, 0x63, 0x6a, - 0xf9, 0x1b, 0x39, 0x28, 0xd0, 0x7c, 0x31, 0x0b, 0x95, 0xbd, 0x17, 0xdb, 0x8a, 0xb6, 0xbe, 0xbb, - 0xbf, 0xb6, 0xa5, 0xc8, 0x12, 0xaa, 0x01, 0x50, 0xc1, 0xf5, 0xad, 0xdd, 0xe6, 0x9e, 0x9c, 0x0b, - 0x9f, 0x37, 0x77, 0xf6, 0xae, 0x5e, 0x96, 0xf3, 0x21, 0x60, 0x9f, 0x09, 0x0a, 0x51, 0x85, 0x27, - 0x2f, 0xc9, 0x45, 0x24, 0x43, 0x95, 0x11, 0x6c, 0xbe, 0xa0, 0xac, 0x5f, 0xbd, 0x2c, 0x4f, 0xc5, - 0x25, 0x4f, 0x5e, 0x92, 0xa7, 0xd1, 0x0c, 0x94, 0xa9, 0x64, 0x6d, 0x77, 0x77, 0x4b, 0x2e, 0x85, - 0x9c, 0x9d, 0x3d, 0x75, 0x73, 0x67, 0x43, 0x2e, 0x87, 0x9c, 0x1b, 0xea, 0xee, 0x7e, 0x5b, 0x86, - 0x90, 0x61, 0x5b, 0xe9, 0x74, 0x9a, 0x1b, 0x8a, 0x5c, 0x09, 0x35, 0xd6, 0x5e, 0xdc, 0x53, 0x3a, - 0x72, 0x35, 0x66, 0xd6, 0x93, 0x97, 0xe4, 0x99, 0xf0, 0x15, 0xca, 0xce, 0xfe, 0xb6, 0x5c, 0x43, - 0x73, 0x30, 0xc3, 0x5e, 0x21, 0x8c, 0x98, 0x4d, 0x88, 0xae, 0x5e, 0x96, 0xe5, 0x91, 0x21, 0x8c, - 0x65, 0x2e, 0x26, 0xb8, 0x7a, 0x59, 0x46, 0xcb, 0x2d, 0x28, 0xd2, 0xe8, 0x42, 0x08, 0x6a, 0x5b, - 0xcd, 0x35, 0x65, 0x4b, 0xdb, 0x6d, 0xef, 0x6d, 0xee, 0xee, 0x34, 0xb7, 0x64, 0x69, 0x24, 0x53, - 0x95, 0x4f, 0xee, 0x6f, 0xaa, 0xca, 0xba, 0x9c, 0x8b, 0xca, 0xda, 0x4a, 0x73, 0x4f, 0x59, 0x97, - 0xf3, 0xcb, 0x06, 0x2c, 0x4c, 0xca, 0x93, 0x13, 0x77, 0x46, 0x64, 0x89, 0x73, 0xc7, 0x2c, 0x31, - 0xe5, 0x1a, 0x5b, 0xe2, 0xb7, 0x73, 0x30, 0x3f, 0xa1, 0x56, 0x4c, 0x7c, 0xc9, 0xb3, 0x50, 0x64, - 0x21, 0xca, 0xaa, 0xe7, 0xa3, 0x13, 0x8b, 0x0e, 0x0d, 0xd8, 0xb1, 0x0a, 0x4a, 0x71, 0xd1, 0x0e, - 0x22, 0x7f, 0x4c, 0x07, 0x41, 0x28, 0xc6, 0x72, 0xfa, 0x8f, 0x8e, 0xe5, 0x74, 0x56, 0xf6, 0xae, - 0x66, 0x29, 0x7b, 0x54, 0x76, 0xb2, 0xdc, 0x5e, 0x9c, 0x90, 0xdb, 0xaf, 0xc1, 0xdc, 0x18, 0x51, - 0xe6, 0x1c, 0xfb, 0xaa, 0x04, 0xf5, 0xe3, 0x9c, 0x93, 0x92, 0xe9, 0x72, 0xb1, 0x4c, 0x77, 0x2d, - 0xe9, 0xc1, 0x0b, 0xc7, 0x2f, 0xc2, 0xd8, 0x5a, 0xbf, 0x29, 0xc1, 0xe2, 0xe4, 0x4e, 0x71, 0xa2, - 0x0d, 0x1f, 0x87, 0xa9, 0x01, 0x0e, 0x0e, 0x1d, 0xd1, 0x2d, 0x7d, 0x78, 0x42, 0x0d, 0x26, 0xc3, - 0xc9, 0xc5, 0xe6, 0xa8, 0x68, 0x11, 0xcf, 0x1f, 0xd7, 0xee, 0x31, 0x6b, 0xc6, 0x2c, 0xfd, 0x6c, - 0x0e, 0xee, 0x9b, 0x48, 0x3e, 0xd1, 0xd0, 0x07, 0x00, 0x4c, 0xdb, 0x1d, 0x06, 0xac, 0x23, 0x62, - 0x09, 0xb6, 0x4c, 0x25, 0x34, 0x79, 0x91, 0xe4, 0x39, 0x0c, 0xc2, 0xf1, 0x3c, 0x1d, 0x07, 0x26, - 0xa2, 0x0a, 0x4f, 0x8f, 0x0c, 0x2d, 0x50, 0x43, 0xcf, 0x1e, 0x33, 0xd3, 0xb1, 0xc0, 0xfc, 0x28, - 0xc8, 0x86, 0x65, 0x62, 0x3b, 0xd0, 0xfc, 0xc0, 0xc3, 0xfa, 0xc0, 0xb4, 0xfb, 0xb4, 0x82, 0x94, - 0x1a, 0xc5, 0x9e, 0x6e, 0xf9, 0x58, 0x9d, 0x65, 0xc3, 0x1d, 0x31, 0x4a, 0x10, 0x34, 0x80, 0xbc, - 0x08, 0x62, 0x2a, 0x86, 0x60, 0xc3, 0x21, 0x62, 0xf9, 0x67, 0xca, 0x50, 0x89, 0xf4, 0xd5, 0xe8, - 0x02, 0x54, 0x6f, 0xe8, 0xb7, 0x74, 0x4d, 0x9c, 0x95, 0x98, 0x27, 0x2a, 0x44, 0xd6, 0xe6, 0xe7, - 0xa5, 0x8f, 0xc2, 0x02, 0x55, 0x71, 0x86, 0x01, 0xf6, 0x34, 0xc3, 0xd2, 0x7d, 0x9f, 0x3a, 0xad, - 0x44, 0x55, 0x11, 0x19, 0xdb, 0x25, 0x43, 0x2d, 0x31, 0x82, 0xae, 0xc0, 0x3c, 0x45, 0x0c, 0x86, - 0x56, 0x60, 0xba, 0x16, 0xd6, 0xc8, 0xe9, 0xcd, 0xa7, 0x95, 0x24, 0xb4, 0x6c, 0x8e, 0x68, 0x6c, - 0x73, 0x05, 0x62, 0x91, 0x8f, 0xd6, 0xe1, 0x01, 0x0a, 0xeb, 0x63, 0x1b, 0x7b, 0x7a, 0x80, 0x35, - 0xfc, 0x99, 0xa1, 0x6e, 0xf9, 0x9a, 0x6e, 0x77, 0xb5, 0x43, 0xdd, 0x3f, 0xac, 0x2f, 0x10, 0x82, - 0xb5, 0x5c, 0x5d, 0x52, 0xcf, 0x10, 0xc5, 0x0d, 0xae, 0xa7, 0x50, 0xb5, 0xa6, 0xdd, 0xfd, 0x84, - 0xee, 0x1f, 0xa2, 0x06, 0x2c, 0x52, 0x16, 0x3f, 0xf0, 0x4c, 0xbb, 0xaf, 0x19, 0x87, 0xd8, 0xb8, - 0xa9, 0x0d, 0x83, 0xde, 0xd3, 0xf5, 0xfb, 0xa3, 0xef, 0xa7, 0x16, 0x76, 0xa8, 0x4e, 0x8b, 0xa8, - 0xec, 0x07, 0xbd, 0xa7, 0x51, 0x07, 0xaa, 0x64, 0x31, 0x06, 0xe6, 0x1d, 0xac, 0xf5, 0x1c, 0x8f, - 0x96, 0xc6, 0xda, 0x84, 0xd4, 0x14, 0xf1, 0xe0, 0xea, 0x2e, 0x07, 0x6c, 0x3b, 0x5d, 0xdc, 0x28, - 0x76, 0xda, 0x8a, 0xb2, 0xae, 0x56, 0x04, 0xcb, 0x75, 0xc7, 0x23, 0x01, 0xd5, 0x77, 0x42, 0x07, - 0x57, 0x58, 0x40, 0xf5, 0x1d, 0xe1, 0xde, 0x2b, 0x30, 0x6f, 0x18, 0x6c, 0xce, 0xa6, 0xa1, 0xf1, - 0x33, 0x96, 0x5f, 0x97, 0x63, 0xce, 0x32, 0x8c, 0x0d, 0xa6, 0xc0, 0x63, 0xdc, 0x47, 0xcf, 0xc0, - 0x7d, 0x23, 0x67, 0x45, 0x81, 0x73, 0x63, 0xb3, 0x4c, 0x42, 0xaf, 0xc0, 0xbc, 0x7b, 0x34, 0x0e, - 0x44, 0xb1, 0x37, 0xba, 0x47, 0x49, 0xd8, 0x53, 0xb0, 0xe0, 0x1e, 0xba, 0xe3, 0xb8, 0xc7, 0xa2, - 0x38, 0xe4, 0x1e, 0xba, 0x49, 0xe0, 0xc3, 0xf4, 0xc0, 0xed, 0x61, 0x43, 0x0f, 0x70, 0xb7, 0x7e, - 0x3a, 0xaa, 0x1e, 0x19, 0x40, 0x17, 0x41, 0x36, 0x0c, 0x0d, 0xdb, 0xfa, 0x81, 0x85, 0x35, 0xdd, - 0xc3, 0xb6, 0xee, 0xd7, 0xcf, 0x45, 0x95, 0x6b, 0x86, 0xa1, 0xd0, 0xd1, 0x26, 0x1d, 0x44, 0x8f, - 0xc1, 0x9c, 0x73, 0x70, 0xc3, 0x60, 0x21, 0xa9, 0xb9, 0x1e, 0xee, 0x99, 0x2f, 0xd7, 0x1f, 0xa2, - 0xfe, 0x9d, 0x25, 0x03, 0x34, 0x20, 0xdb, 0x54, 0x8c, 0x1e, 0x05, 0xd9, 0xf0, 0x0f, 0x75, 0xcf, - 0xa5, 0x39, 0xd9, 0x77, 0x75, 0x03, 0xd7, 0x1f, 0x66, 0xaa, 0x4c, 0xbe, 0x23, 0xc4, 0x64, 0x4b, - 0xf8, 0xb7, 0xcd, 0x5e, 0x20, 0x18, 0x1f, 0x61, 0x5b, 0x82, 0xca, 0x38, 0xdb, 0x0a, 0xc8, 0xc4, - 0x15, 0xb1, 0x17, 0xaf, 0x50, 0xb5, 0x9a, 0x7b, 0xe8, 0x46, 0xdf, 0xfb, 0x20, 0xcc, 0x10, 0xcd, - 0xd1, 0x4b, 0x1f, 0x65, 0x0d, 0x99, 0x7b, 0x18, 0x79, 0xe3, 0x65, 0x58, 0x24, 0x4a, 0x03, 0x1c, - 0xe8, 0x5d, 0x3d, 0xd0, 0x23, 0xda, 0x1f, 0xa1, 0xda, 0xc4, 0xef, 0xdb, 0x7c, 0x30, 0x66, 0xa7, - 0x37, 0x3c, 0x38, 0x0a, 0x23, 0xeb, 0x09, 0x66, 0x27, 0x91, 0x89, 0xd8, 0x7a, 0xdf, 0x9a, 0xee, - 0xe5, 0x06, 0x54, 0xa3, 0x81, 0x8f, 0xca, 0xc0, 0x42, 0x5f, 0x96, 0x48, 0x17, 0xd4, 0xda, 0x5d, - 0x27, 0xfd, 0xcb, 0x4b, 0x8a, 0x9c, 0x23, 0x7d, 0xd4, 0xd6, 0xe6, 0x9e, 0xa2, 0xa9, 0xfb, 0x3b, - 0x7b, 0x9b, 0xdb, 0x8a, 0x9c, 0x8f, 0x36, 0xec, 0xdf, 0xce, 0x41, 0x2d, 0x7e, 0xf6, 0x42, 0x3f, - 0x04, 0xa7, 0xc5, 0x45, 0x89, 0x8f, 0x03, 0xed, 0xb6, 0xe9, 0xd1, 0xbd, 0x38, 0xd0, 0x59, 0x5d, - 0x0c, 0xa3, 0x61, 0x81, 0x6b, 0x75, 0x70, 0xf0, 0xbc, 0xe9, 0x91, 0x9d, 0x36, 0xd0, 0x03, 0xb4, - 0x05, 0xe7, 0x6c, 0x47, 0xf3, 0x03, 0xdd, 0xee, 0xea, 0x5e, 0x57, 0x1b, 0x5d, 0x51, 0x69, 0xba, - 0x61, 0x60, 0xdf, 0x77, 0x58, 0x0d, 0x0c, 0x59, 0x3e, 0x64, 0x3b, 0x1d, 0xae, 0x3c, 0x2a, 0x0e, - 0x4d, 0xae, 0x9a, 0x88, 0xdc, 0xfc, 0x71, 0x91, 0x7b, 0x3f, 0x94, 0x07, 0xba, 0xab, 0x61, 0x3b, - 0xf0, 0x8e, 0x68, 0xc7, 0x5d, 0x52, 0x4b, 0x03, 0xdd, 0x55, 0xc8, 0xf3, 0x07, 0x73, 0xf0, 0xf9, - 0xfb, 0x3c, 0x54, 0xa3, 0x5d, 0x37, 0x39, 0xc4, 0x18, 0xb4, 0x40, 0x49, 0x34, 0x85, 0x3d, 0x78, - 0xcf, 0x1e, 0x7d, 0xb5, 0x45, 0x2a, 0x57, 0x63, 0x8a, 0xf5, 0xc2, 0x2a, 0x43, 0x92, 0xae, 0x81, - 0x84, 0x16, 0x66, 0xbd, 0x47, 0x49, 0xe5, 0x4f, 0x68, 0x03, 0xa6, 0x6e, 0xf8, 0x94, 0x7b, 0x8a, - 0x72, 0x3f, 0x74, 0x6f, 0xee, 0xe7, 0x3a, 0x94, 0xbc, 0xfc, 0x5c, 0x47, 0xdb, 0xd9, 0x55, 0xb7, - 0x9b, 0x5b, 0x2a, 0x87, 0xa3, 0x33, 0x50, 0xb0, 0xf4, 0x3b, 0x47, 0xf1, 0x1a, 0x47, 0x45, 0x59, - 0x1d, 0x7f, 0x06, 0x0a, 0xb7, 0xb1, 0x7e, 0x33, 0x5e, 0x59, 0xa8, 0xe8, 0x7d, 0x0c, 0xfd, 0x8b, - 0x50, 0xa4, 0xfe, 0x42, 0x00, 0xdc, 0x63, 0xf2, 0x29, 0x54, 0x82, 0x42, 0x6b, 0x57, 0x25, 0xe1, - 0x2f, 0x43, 0x95, 0x49, 0xb5, 0xf6, 0xa6, 0xd2, 0x52, 0xe4, 0xdc, 0xf2, 0x15, 0x98, 0x62, 0x4e, - 0x20, 0x5b, 0x23, 0x74, 0x83, 0x7c, 0x8a, 0x3f, 0x72, 0x0e, 0x49, 0x8c, 0xee, 0x6f, 0xaf, 0x29, - 0xaa, 0x9c, 0x8b, 0x2e, 0xaf, 0x0f, 0xd5, 0x68, 0xc3, 0xfd, 0xc1, 0xc4, 0xd4, 0xb7, 0x24, 0xa8, - 0x44, 0x1a, 0x68, 0xd2, 0xf9, 0xe8, 0x96, 0xe5, 0xdc, 0xd6, 0x74, 0xcb, 0xd4, 0x7d, 0x1e, 0x14, - 0x40, 0x45, 0x4d, 0x22, 0xc9, 0xba, 0x68, 0x1f, 0x88, 0xf1, 0x6f, 0x48, 0x20, 0x27, 0x7b, 0xd7, - 0x84, 0x81, 0xd2, 0x0f, 0xd4, 0xc0, 0xd7, 0x25, 0xa8, 0xc5, 0x1b, 0xd6, 0x84, 0x79, 0x17, 0x7e, - 0xa0, 0xe6, 0xfd, 0x63, 0x0e, 0x66, 0x62, 0x6d, 0x6a, 0x56, 0xeb, 0x3e, 0x03, 0x73, 0x66, 0x17, - 0x0f, 0x5c, 0x27, 0xc0, 0xb6, 0x71, 0xa4, 0x59, 0xf8, 0x16, 0xb6, 0xea, 0xcb, 0x34, 0x51, 0x5c, - 0xbc, 0x77, 0x23, 0xbc, 0xba, 0x39, 0xc2, 0x6d, 0x11, 0x58, 0x63, 0x7e, 0x73, 0x5d, 0xd9, 0x6e, - 0xef, 0xee, 0x29, 0x3b, 0xad, 0x17, 0xb5, 0xfd, 0x9d, 0x1f, 0xd9, 0xd9, 0x7d, 0x7e, 0x47, 0x95, - 0xcd, 0x84, 0xda, 0xfb, 0xb8, 0xd5, 0xdb, 0x20, 0x27, 0x8d, 0x42, 0xa7, 0x61, 0x92, 0x59, 0xf2, - 0x29, 0x34, 0x0f, 0xb3, 0x3b, 0xbb, 0x5a, 0x67, 0x73, 0x5d, 0xd1, 0x94, 0xeb, 0xd7, 0x95, 0xd6, - 0x5e, 0x87, 0x5d, 0x6d, 0x84, 0xda, 0x7b, 0xf1, 0x4d, 0xfd, 0x5a, 0x1e, 0xe6, 0x27, 0x58, 0x82, - 0x9a, 0xfc, 0x50, 0xc2, 0xce, 0x49, 0x4f, 0x64, 0xb1, 0x7e, 0x95, 0x74, 0x05, 0x6d, 0xdd, 0x0b, - 0xf8, 0x19, 0xe6, 0x51, 0x20, 0x5e, 0xb2, 0x03, 0xb3, 0x67, 0x62, 0x8f, 0xdf, 0x04, 0xb1, 0x93, - 0xca, 0xec, 0x48, 0xce, 0x2e, 0x83, 0x3e, 0x02, 0xc8, 0x75, 0x7c, 0x33, 0x30, 0x6f, 0x61, 0xcd, - 0xb4, 0xc5, 0xb5, 0x11, 0x39, 0xb9, 0x14, 0x54, 0x59, 0x8c, 0x6c, 0xda, 0x41, 0xa8, 0x6d, 0xe3, - 0xbe, 0x9e, 0xd0, 0x26, 0x09, 0x3c, 0xaf, 0xca, 0x62, 0x24, 0xd4, 0xbe, 0x00, 0xd5, 0xae, 0x33, - 0x24, 0xed, 0x1c, 0xd3, 0x23, 0xf5, 0x42, 0x52, 0x2b, 0x4c, 0x16, 0xaa, 0xf0, 0x46, 0x7d, 0x74, - 0x5f, 0x55, 0x55, 0x2b, 0x4c, 0xc6, 0x54, 0x1e, 0x81, 0x59, 0xbd, 0xdf, 0xf7, 0x08, 0xb9, 0x20, - 0x62, 0x47, 0x8f, 0x5a, 0x28, 0xa6, 0x8a, 0x4b, 0xcf, 0x41, 0x49, 0xf8, 0x81, 0x94, 0x64, 0xe2, - 0x09, 0xcd, 0x65, 0xe7, 0xe9, 0xdc, 0x4a, 0x59, 0x2d, 0xd9, 0x62, 0xf0, 0x02, 0x54, 0x4d, 0x5f, - 0x1b, 0x5d, 0xbf, 0xe7, 0xce, 0xe7, 0x56, 0x4a, 0x6a, 0xc5, 0xf4, 0xc3, 0xab, 0xcb, 0xe5, 0x37, - 0x73, 0x50, 0x8b, 0x7f, 0x3e, 0x40, 0xeb, 0x50, 0xb2, 0x1c, 0x43, 0xa7, 0xa1, 0xc5, 0xbe, 0x5d, - 0xad, 0xa4, 0x7c, 0x71, 0x58, 0xdd, 0xe2, 0xfa, 0x6a, 0x88, 0x5c, 0xfa, 0x1b, 0x09, 0x4a, 0x42, - 0x8c, 0x16, 0xa1, 0xe0, 0xea, 0xc1, 0x21, 0xa5, 0x2b, 0xae, 0xe5, 0x64, 0x49, 0xa5, 0xcf, 0x44, - 0xee, 0xbb, 0xba, 0x4d, 0x43, 0x80, 0xcb, 0xc9, 0x33, 0x59, 0x57, 0x0b, 0xeb, 0x5d, 0x7a, 0xae, - 0x71, 0x06, 0x03, 0x6c, 0x07, 0xbe, 0x58, 0x57, 0x2e, 0x6f, 0x71, 0x31, 0x7a, 0x1c, 0xe6, 0x02, - 0x4f, 0x37, 0xad, 0x98, 0x6e, 0x81, 0xea, 0xca, 0x62, 0x20, 0x54, 0x6e, 0xc0, 0x19, 0xc1, 0xdb, - 0xc5, 0x81, 0x6e, 0x1c, 0xe2, 0xee, 0x08, 0x34, 0x45, 0xef, 0x2f, 0x4e, 0x73, 0x85, 0x75, 0x3e, - 0x2e, 0xb0, 0xcb, 0xdf, 0x91, 0x60, 0x4e, 0x9c, 0xc4, 0xba, 0xa1, 0xb3, 0xb6, 0x01, 0x74, 0xdb, - 0x76, 0x82, 0xa8, 0xbb, 0xc6, 0x43, 0x79, 0x0c, 0xb7, 0xda, 0x0c, 0x41, 0x6a, 0x84, 0x60, 0x69, - 0x00, 0x30, 0x1a, 0x39, 0xd6, 0x6d, 0xe7, 0xa0, 0xc2, 0xbf, 0x0d, 0xd1, 0x0f, 0x8c, 0xec, 0xec, - 0x0e, 0x4c, 0x44, 0x8e, 0x6c, 0x68, 0x01, 0x8a, 0x07, 0xb8, 0x6f, 0xda, 0xfc, 0xc6, 0x97, 0x3d, - 0x88, 0x1b, 0x96, 0x42, 0x78, 0xc3, 0xb2, 0xf6, 0x69, 0x98, 0x37, 0x9c, 0x41, 0xd2, 0xdc, 0x35, - 0x39, 0x71, 0x7f, 0xe0, 0x7f, 0x42, 0x7a, 0x09, 0x46, 0x2d, 0xe6, 0xff, 0x4b, 0xd2, 0x97, 0x73, - 0xf9, 0x8d, 0xf6, 0xda, 0x57, 0x73, 0x4b, 0x1b, 0x0c, 0xda, 0x16, 0x33, 0x55, 0x71, 0xcf, 0xc2, - 0x06, 0xb1, 0x1e, 0xbe, 0xf2, 0x38, 0x3c, 0xd1, 0x37, 0x83, 0xc3, 0xe1, 0xc1, 0xaa, 0xe1, 0x0c, - 0x2e, 0xf6, 0x9d, 0xbe, 0x33, 0xfa, 0xa6, 0x4a, 0x9e, 0xe8, 0x03, 0xfd, 0x8f, 0x7f, 0x57, 0x2d, - 0x87, 0xd2, 0xa5, 0xd4, 0x8f, 0xb0, 0x8d, 0x1d, 0x98, 0xe7, 0xca, 0x1a, 0xfd, 0xb0, 0xc3, 0x8e, - 0x27, 0xe8, 0x9e, 0x97, 0x63, 0xf5, 0xaf, 0xbf, 0x43, 0xcb, 0xb5, 0x3a, 0xc7, 0xa1, 0x64, 0x8c, - 0x9d, 0x60, 0x1a, 0x2a, 0xdc, 0x17, 0xe3, 0x63, 0x5b, 0x13, 0x7b, 0x29, 0x8c, 0xdf, 0xe6, 0x8c, - 0xf3, 0x11, 0xc6, 0x0e, 0x87, 0x36, 0x5a, 0x30, 0x73, 0x12, 0xae, 0xbf, 0xe2, 0x5c, 0x55, 0x1c, - 0x25, 0xd9, 0x80, 0x59, 0x4a, 0x62, 0x0c, 0xfd, 0xc0, 0x19, 0xd0, 0xbc, 0x77, 0x6f, 0x9a, 0xbf, - 0x7e, 0x87, 0xed, 0x95, 0x1a, 0x81, 0xb5, 0x42, 0x54, 0xa3, 0x01, 0xf4, 0x5b, 0x56, 0x17, 0x1b, - 0x56, 0x0a, 0xc3, 0x5b, 0xdc, 0x90, 0x50, 0xbf, 0xf1, 0x29, 0x58, 0x20, 0xff, 0xd3, 0xb4, 0x14, - 0xb5, 0x24, 0xfd, 0x26, 0xad, 0xfe, 0x9d, 0x57, 0xd9, 0x76, 0x9c, 0x0f, 0x09, 0x22, 0x36, 0x45, - 0x56, 0xb1, 0x8f, 0x83, 0x00, 0x7b, 0xbe, 0xa6, 0x5b, 0x93, 0xcc, 0x8b, 0x5c, 0x45, 0xd4, 0xbf, - 0xf0, 0x6e, 0x7c, 0x15, 0x37, 0x18, 0xb2, 0x69, 0x59, 0x8d, 0x7d, 0x38, 0x3d, 0x21, 0x2a, 0x32, - 0x70, 0xbe, 0xc6, 0x39, 0x17, 0xc6, 0x22, 0x83, 0xd0, 0xb6, 0x41, 0xc8, 0xc3, 0xb5, 0xcc, 0xc0, - 0xf9, 0x6b, 0x9c, 0x13, 0x71, 0xac, 0x58, 0x52, 0xc2, 0xf8, 0x1c, 0xcc, 0xdd, 0xc2, 0xde, 0x81, - 0xe3, 0xf3, 0xeb, 0x9f, 0x0c, 0x74, 0xaf, 0x73, 0xba, 0x59, 0x0e, 0xa4, 0xf7, 0x41, 0x84, 0xeb, - 0x19, 0x28, 0xf5, 0x74, 0x03, 0x67, 0xa0, 0xf8, 0x22, 0xa7, 0x98, 0x26, 0xfa, 0x04, 0xda, 0x84, - 0x6a, 0xdf, 0xe1, 0x95, 0x29, 0x1d, 0xfe, 0x06, 0x87, 0x57, 0x04, 0x86, 0x53, 0xb8, 0x8e, 0x3b, - 0xb4, 0x48, 0xd9, 0x4a, 0xa7, 0xf8, 0x75, 0x41, 0x21, 0x30, 0x9c, 0xe2, 0x04, 0x6e, 0xfd, 0x0d, - 0x41, 0xe1, 0x47, 0xfc, 0xf9, 0x2c, 0x54, 0x1c, 0xdb, 0x3a, 0x72, 0xec, 0x2c, 0x46, 0x7c, 0x89, - 0x33, 0x00, 0x87, 0x10, 0x82, 0x6b, 0x50, 0xce, 0xba, 0x10, 0xbf, 0xf5, 0xae, 0xd8, 0x1e, 0x62, - 0x05, 0x36, 0x60, 0x56, 0x24, 0x28, 0xd3, 0xb1, 0x33, 0x50, 0x7c, 0x85, 0x53, 0xd4, 0x22, 0x30, - 0x3e, 0x8d, 0x00, 0xfb, 0x41, 0x1f, 0x67, 0x21, 0x79, 0x53, 0x4c, 0x83, 0x43, 0xb8, 0x2b, 0x0f, - 0xb0, 0x6d, 0x1c, 0x66, 0x63, 0xf8, 0x6d, 0xe1, 0x4a, 0x81, 0x21, 0x14, 0x2d, 0x98, 0x19, 0xe8, - 0x9e, 0x7f, 0xa8, 0x5b, 0x99, 0x96, 0xe3, 0x77, 0x38, 0x47, 0x35, 0x04, 0x71, 0x8f, 0x0c, 0xed, - 0x93, 0xd0, 0x7c, 0x55, 0x78, 0x24, 0x02, 0xe3, 0x5b, 0xcf, 0x0f, 0xe8, 0x5d, 0xd9, 0x49, 0xd8, - 0x7e, 0x57, 0x6c, 0x3d, 0x86, 0xdd, 0x8e, 0x32, 0x5e, 0x83, 0xb2, 0x6f, 0xde, 0xc9, 0x44, 0xf3, - 0x7b, 0x62, 0xa5, 0x29, 0x80, 0x80, 0x5f, 0x84, 0x33, 0x13, 0xcb, 0x44, 0x06, 0xb2, 0xdf, 0xe7, - 0x64, 0x8b, 0x13, 0x4a, 0x05, 0x4f, 0x09, 0x27, 0xa5, 0xfc, 0x03, 0x91, 0x12, 0x70, 0x82, 0xab, - 0x4d, 0xce, 0x0a, 0xbe, 0xde, 0x3b, 0x99, 0xd7, 0xfe, 0x50, 0x78, 0x8d, 0x61, 0x63, 0x5e, 0xdb, - 0x83, 0x45, 0xce, 0x78, 0xb2, 0x75, 0xfd, 0x9a, 0x48, 0xac, 0x0c, 0xbd, 0x1f, 0x5f, 0xdd, 0x4f, - 0xc3, 0x52, 0xe8, 0x4e, 0xd1, 0x94, 0xfa, 0xda, 0x40, 0x77, 0x33, 0x30, 0x7f, 0x9d, 0x33, 0x8b, - 0x8c, 0x1f, 0x76, 0xb5, 0xfe, 0xb6, 0xee, 0x12, 0xf2, 0x17, 0xa0, 0x2e, 0xc8, 0x87, 0xb6, 0x87, - 0x0d, 0xa7, 0x6f, 0x9b, 0x77, 0x70, 0x37, 0x03, 0xf5, 0x1f, 0x25, 0x96, 0x6a, 0x3f, 0x02, 0x27, - 0xcc, 0x9b, 0x20, 0x87, 0xbd, 0x8a, 0x66, 0x0e, 0x5c, 0xc7, 0x0b, 0x52, 0x18, 0xff, 0x58, 0xac, - 0x54, 0x88, 0xdb, 0xa4, 0xb0, 0x86, 0x02, 0x35, 0xfa, 0x98, 0x35, 0x24, 0xff, 0x84, 0x13, 0xcd, - 0x8c, 0x50, 0x3c, 0x71, 0x18, 0xce, 0xc0, 0xd5, 0xbd, 0x2c, 0xf9, 0xef, 0x4f, 0x45, 0xe2, 0xe0, - 0x10, 0x9e, 0x38, 0x82, 0x23, 0x17, 0x93, 0x6a, 0x9f, 0x81, 0xe1, 0x1b, 0x22, 0x71, 0x08, 0x0c, - 0xa7, 0x10, 0x0d, 0x43, 0x06, 0x8a, 0x3f, 0x13, 0x14, 0x02, 0x43, 0x28, 0x3e, 0x39, 0x2a, 0xb4, - 0x1e, 0xee, 0x9b, 0x7e, 0xe0, 0xb1, 0x56, 0xf8, 0xde, 0x54, 0x7f, 0xfe, 0x6e, 0xbc, 0x09, 0x53, - 0x23, 0x50, 0x92, 0x89, 0xf8, 0x15, 0x2a, 0x3d, 0x29, 0xa5, 0x1b, 0xf6, 0x4d, 0x91, 0x89, 0x22, - 0x30, 0x62, 0x5b, 0xa4, 0x43, 0x24, 0x6e, 0x37, 0xc8, 0xf9, 0x20, 0x03, 0xdd, 0xb7, 0x12, 0xc6, - 0x75, 0x04, 0x96, 0x70, 0x46, 0xfa, 0x9f, 0xa1, 0x7d, 0x13, 0x1f, 0x65, 0x8a, 0xce, 0xbf, 0x48, - 0xf4, 0x3f, 0xfb, 0x0c, 0xc9, 0x72, 0xc8, 0x6c, 0xa2, 0x9f, 0x42, 0x69, 0xbf, 0x02, 0xaa, 0xff, - 0xf8, 0x5d, 0x3e, 0xdf, 0x78, 0x3b, 0xd5, 0xd8, 0x22, 0x41, 0x1e, 0x6f, 0x7a, 0xd2, 0xc9, 0x5e, - 0xbd, 0x1b, 0xc6, 0x79, 0xac, 0xe7, 0x69, 0x5c, 0x87, 0x99, 0x58, 0xc3, 0x93, 0x4e, 0xf5, 0x13, - 0x9c, 0xaa, 0x1a, 0xed, 0x77, 0x1a, 0x57, 0xa0, 0x40, 0x9a, 0x97, 0x74, 0xf8, 0x4f, 0x72, 0x38, - 0x55, 0x6f, 0x7c, 0x0c, 0x4a, 0xa2, 0x69, 0x49, 0x87, 0xfe, 0x14, 0x87, 0x86, 0x10, 0x02, 0x17, - 0x0d, 0x4b, 0x3a, 0xfc, 0xa7, 0x05, 0x5c, 0x40, 0x08, 0x3c, 0xbb, 0x0b, 0xff, 0xf2, 0x73, 0x05, - 0x5e, 0x74, 0x84, 0xef, 0xae, 0xc1, 0x34, 0xef, 0x54, 0xd2, 0xd1, 0x9f, 0xe5, 0x2f, 0x17, 0x88, - 0xc6, 0x53, 0x50, 0xcc, 0xe8, 0xf0, 0x9f, 0xe5, 0x50, 0xa6, 0xdf, 0x68, 0x41, 0x25, 0xd2, 0x9d, - 0xa4, 0xc3, 0x7f, 0x8e, 0xc3, 0xa3, 0x28, 0x62, 0x3a, 0xef, 0x4e, 0xd2, 0x09, 0x7e, 0x5e, 0x98, - 0xce, 0x11, 0xc4, 0x6d, 0xa2, 0x31, 0x49, 0x47, 0xff, 0x82, 0xf0, 0xba, 0x80, 0x34, 0x9e, 0x85, - 0x72, 0x58, 0x6c, 0xd2, 0xf1, 0xbf, 0xc8, 0xf1, 0x23, 0x0c, 0xf1, 0x40, 0xa4, 0xd8, 0xa5, 0x53, - 0xfc, 0x92, 0xf0, 0x40, 0x04, 0x45, 0xb6, 0x51, 0xb2, 0x81, 0x49, 0x67, 0xfa, 0x65, 0xb1, 0x8d, - 0x12, 0xfd, 0x0b, 0x59, 0x4d, 0x9a, 0xf3, 0xd3, 0x29, 0x7e, 0x45, 0xac, 0x26, 0xd5, 0x27, 0x66, - 0x24, 0x3b, 0x82, 0x74, 0x8e, 0x5f, 0x15, 0x66, 0x24, 0x1a, 0x82, 0x46, 0x1b, 0xd0, 0x78, 0x37, - 0x90, 0xce, 0xf7, 0x79, 0xce, 0x37, 0x37, 0xd6, 0x0c, 0x34, 0x9e, 0x87, 0xc5, 0xc9, 0x9d, 0x40, - 0x3a, 0xeb, 0x17, 0xee, 0x26, 0xce, 0x6e, 0xd1, 0x46, 0xa0, 0xb1, 0x37, 0x2a, 0x29, 0xd1, 0x2e, - 0x20, 0x9d, 0xf6, 0xb5, 0xbb, 0xf1, 0xc4, 0x1d, 0x6d, 0x02, 0x1a, 0x4d, 0x80, 0x51, 0x01, 0x4e, - 0xe7, 0x7a, 0x9d, 0x73, 0x45, 0x40, 0x64, 0x6b, 0xf0, 0xfa, 0x9b, 0x8e, 0xff, 0xa2, 0xd8, 0x1a, - 0x1c, 0x41, 0xb6, 0x86, 0x28, 0xbd, 0xe9, 0xe8, 0x37, 0xc4, 0xd6, 0x10, 0x10, 0x12, 0xd9, 0x91, - 0xea, 0x96, 0xce, 0xf0, 0x25, 0x11, 0xd9, 0x11, 0x54, 0x63, 0x07, 0xe6, 0xc6, 0x0a, 0x62, 0x3a, - 0xd5, 0x97, 0x39, 0x95, 0x9c, 0xac, 0x87, 0xd1, 0xe2, 0xc5, 0x8b, 0x61, 0x3a, 0xdb, 0x6f, 0x26, - 0x8a, 0x17, 0xaf, 0x85, 0x8d, 0x6b, 0x50, 0xb2, 0x87, 0x96, 0x45, 0x36, 0x0f, 0xba, 0xf7, 0x2f, - 0xf7, 0xea, 0xff, 0xf6, 0x1e, 0xf7, 0x8e, 0x00, 0x34, 0xae, 0x40, 0x11, 0x0f, 0x0e, 0x70, 0x37, - 0x0d, 0xf9, 0xef, 0xef, 0x89, 0x84, 0x49, 0xb4, 0x1b, 0xcf, 0x02, 0xb0, 0xab, 0x11, 0xfa, 0xd9, - 0x2f, 0x05, 0xfb, 0x1f, 0xef, 0xf1, 0xdf, 0xd4, 0x8c, 0x20, 0x23, 0x02, 0xf6, 0x0b, 0x9d, 0x7b, - 0x13, 0xbc, 0x1b, 0x27, 0xa0, 0x2b, 0xf2, 0x0c, 0x4c, 0xdf, 0xf0, 0x1d, 0x3b, 0xd0, 0xfb, 0x69, - 0xe8, 0xff, 0xe4, 0x68, 0xa1, 0x4f, 0x1c, 0x36, 0x70, 0x3c, 0x1c, 0xe8, 0x7d, 0x3f, 0x0d, 0xfb, - 0x5f, 0x1c, 0x1b, 0x02, 0x08, 0xd8, 0xd0, 0xfd, 0x20, 0xcb, 0xbc, 0xff, 0x5b, 0x80, 0x05, 0x80, - 0x18, 0x4d, 0xfe, 0xbf, 0x89, 0x8f, 0xd2, 0xb0, 0xdf, 0x15, 0x46, 0x73, 0xfd, 0xc6, 0xc7, 0xa0, - 0x4c, 0xfe, 0x65, 0x3f, 0x94, 0x4b, 0x01, 0xff, 0x0f, 0x07, 0x8f, 0x10, 0xe4, 0xcd, 0x7e, 0xd0, - 0x0d, 0xcc, 0x74, 0x67, 0xff, 0x2f, 0x5f, 0x69, 0xa1, 0xdf, 0x68, 0x42, 0xc5, 0x0f, 0xba, 0xdd, - 0x21, 0xef, 0x4f, 0x53, 0xe0, 0xff, 0xf7, 0x5e, 0x78, 0x65, 0x11, 0x62, 0xc8, 0x6a, 0xdf, 0xbe, - 0x19, 0xb8, 0x0e, 0xfd, 0xcc, 0x91, 0xc6, 0x70, 0x97, 0x33, 0x44, 0x20, 0x6b, 0xca, 0xe4, 0xeb, - 0x5b, 0xd8, 0x70, 0x36, 0x1c, 0x76, 0x71, 0xfb, 0xd2, 0x72, 0xfa, 0x0d, 0x2c, 0xbc, 0x2d, 0x91, - 0x42, 0x7f, 0x30, 0xec, 0xf3, 0x6b, 0xd8, 0x22, 0x7d, 0x58, 0x3a, 0xd9, 0xe5, 0xed, 0xf2, 0xe7, - 0x24, 0x28, 0xae, 0x13, 0x20, 0x42, 0x20, 0x35, 0xe9, 0x57, 0xc7, 0xfc, 0x5a, 0xe1, 0xad, 0x7f, - 0x38, 0x77, 0x4a, 0x95, 0x9a, 0xa8, 0x0a, 0xd2, 0x1a, 0xbd, 0xe6, 0x2f, 0xab, 0xd2, 0x1a, 0x5a, - 0x02, 0xa9, 0xc5, 0x7f, 0xde, 0x56, 0x5d, 0x65, 0xaf, 0xa6, 0x50, 0x55, 0x6a, 0x11, 0xcd, 0x75, - 0x7e, 0x47, 0x2d, 0xad, 0x13, 0x4d, 0x85, 0xff, 0xca, 0x3e, 0xa1, 0xa9, 0x10, 0xcd, 0xeb, 0xf4, - 0xd6, 0x7e, 0x5a, 0x95, 0xae, 0x93, 0xa7, 0x0d, 0xfa, 0x59, 0x45, 0x52, 0xa5, 0x8d, 0x35, 0xf9, - 0xbb, 0xff, 0x74, 0x56, 0xfa, 0xda, 0x3f, 0x9f, 0x95, 0xfe, 0xf6, 0xed, 0xb3, 0xa7, 0xfe, 0xee, - 0xed, 0xb3, 0xa7, 0xbe, 0x17, 0x00, 0x00, 0xff, 0xff, 0x66, 0x3d, 0xbe, 0x10, 0xda, 0x33, 0x00, - 0x00, - } - r := bytes.NewReader(gzipped) - gzipr, err := compress_gzip.NewReader(r) - if err != nil { - panic(err) - } - ungzipped, err := io_ioutil.ReadAll(gzipr) - if err != nil { - panic(err) - } - if err := github_com_gogo_protobuf_proto.Unmarshal(ungzipped, d); err != nil { - panic(err) - } - return d -} -func (this *Debug) GoString() string { - if this == nil { - return "nil" - } - s := make([]string, 0, 11) - s = append(s, "&debug.Debug{") - s = append(s, "A: "+fmt.Sprintf("%#v", this.A)+",\n") - if this.B != nil { - s = append(s, "B: "+fmt.Sprintf("%#v", this.B)+",\n") - } - if this.C != nil { - s = append(s, "C: "+fmt.Sprintf("%#v", this.C)+",\n") - } - if this.D != nil { - s = append(s, "D: "+valueToGoStringDebug(this.D, "int32")+",\n") - } - if this.E != nil { - s = append(s, "E: "+fmt.Sprintf("%#v", this.E)+",\n") - } - if this.F != nil { - s = append(s, "F: "+fmt.Sprintf("%#v", this.F)+",\n") - } - if this.G != nil { - s = append(s, "G: "+valueToGoStringDebug(this.G, "float64")+",\n") - } - if this.XXX_unrecognized != nil { - s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") - } - s = append(s, "}") - return strings.Join(s, "") -} -func valueToGoStringDebug(v interface{}, typ string) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" - } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("func(v %v) *%v { return &v } ( %#v )", typ, typ, pv) -} diff --git a/parser/debug/debug.proto b/parser/debug/debug.proto deleted file mode 100644 index 67c5150..0000000 --- a/parser/debug/debug.proto +++ /dev/null @@ -1,20 +0,0 @@ -syntax = "proto2"; - -package debug; - -import "github.com/gogo/protobuf/gogoproto/gogo.proto"; - -option (gogoproto.gostring_all) = true; -option (gogoproto.description_all) = true; -option (gogoproto.goproto_unkeyed_all) = false; -option (gogoproto.goproto_sizecache_all) = false; - -message Debug { - optional int64 A = 1 [(gogoproto.nullable) = false]; - repeated string B = 2; - optional Debug C = 3; - optional int32 D = 4; - repeated Debug E = 5; - repeated fixed32 F = 6; - optional double G = 7; -} diff --git a/parser/debug/doc.go b/parser/debug/doc.go deleted file mode 100644 index 5d2cb1f..0000000 --- a/parser/debug/doc.go +++ /dev/null @@ -1,2 +0,0 @@ -//The debug package is great for testing and debugging of parser.Interface implementations. -package debug diff --git a/parser/debug/example.go b/parser/debug/example.go deleted file mode 100644 index 922fe03..0000000 --- a/parser/debug/example.go +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2015 Walter Schulze -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package debug - -import proto "github.com/gogo/protobuf/proto" - -// Input is a sample instance of the Debug struct. -var Input = &Debug{ - A: int64(1), - B: []string{"b2", "b3"}, - C: &Debug{ - A: int64(2), - D: proto.Int32(3), - E: []*Debug{ - { - B: []string{"b4"}, - }, - { - B: []string{"b5"}, - }, - }, - }, - D: proto.Int32(4), - F: []uint32{5}, -} - -// Output is a sample instance of Nodes that repesents the Input variable after it has been parsed by Walk. -var Output = Nodes{ - Field(`A`, `1`), - Nested(`B`, - Field(`0`, `b2`), - Field(`1`, `b3`), - ), - Nested(`C`, - Field(`A`, `2`), - Field(`D`, `3`), - Nested(`E`, - Nested(`0`, - Field(`A`, `0`), - Nested(`B`, - Field(`0`, `b4`), - ), - ), - Nested(`1`, - Field(`A`, `0`), - Nested(`B`, - Field(`0`, `b5`), - ), - ), - ), - ), - Field(`D`, `4`), - Nested(`F`, - Field(`0`, `5`), - ), -} diff --git a/parser/debug/log.go b/parser/debug/log.go deleted file mode 100644 index c24aa35..0000000 --- a/parser/debug/log.go +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright 2015 Walter Schulze -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package debug - -import ( - "log" - "os" - "path/filepath" - "runtime" - "strconv" - "time" - - "github.com/katydid/parser-go/parser" -) - -// Logger is an interface for a type that is made to log debug info. -type Logger interface { - Printf(format string, v ...interface{}) -} - -// NewLineLogger returns a logger that logs the line at which the Printf method was called to stderr. -func NewLineLogger() Logger { - return &line{log.New(os.Stderr, "", 0)} -} - -type line struct { - l Logger -} - -func (l *line) Printf(format string, v ...interface{}) { - _, thisfile, _, ok := runtime.Caller(0) - if !ok { - l.l.Printf(":0: "+format, v...) - return - } - i := 0 - for { - i++ - _, file, line, ok := runtime.Caller(i) - if !ok { - l.l.Printf(":"+strconv.Itoa(i)+": "+format, v...) - return - } - if file == thisfile { - continue - } - _, name := filepath.Split(file) - l.l.Printf(name+":"+strconv.Itoa(line)+": "+format, v...) - return - } -} - -// NewDelayLogger returns a logger that sleeps after every log. -// This is useful for debugging infinite loops. -func NewDelayLogger(delay time.Duration) Logger { - return &d{ - delay: delay, - log: NewLineLogger(), - } -} - -type d struct { - log Logger - delay time.Duration -} - -func (d *d) Printf(format string, v ...interface{}) { - d.log.Printf(format, v...) - time.Sleep(d.delay) -} - -type l struct { - name string - s parser.Interface - l Logger - copies int -} - -// NewLogger returns a parser that when called returns and logs the value returned by the argument parser to the argument logger. -func NewLogger(s parser.Interface, logger Logger) parser.Interface { - return &l{"parser", s, logger, 0} -} - -func (l *l) Double() (float64, error) { - v, err := l.s.Double() - l.l.Printf(l.name+".Double() (%v, %v)", v, err) - return v, err -} - -func (l *l) Int() (int64, error) { - v, err := l.s.Int() - l.l.Printf(l.name+".Int() (%v, %v)", v, err) - return v, err -} - -func (l *l) Uint() (uint64, error) { - v, err := l.s.Uint() - l.l.Printf(l.name+".Uint() (%v, %v)", v, err) - return v, err -} - -func (l *l) Bool() (bool, error) { - v, err := l.s.Bool() - l.l.Printf(l.name+".Bool() (%v, %v)", v, err) - return v, err -} - -func (l *l) String() (string, error) { - v, err := l.s.String() - l.l.Printf(l.name+".String() (%v, %v)", v, err) - return v, err -} - -func (l *l) Bytes() ([]byte, error) { - v, err := l.s.Bytes() - l.l.Printf(l.name+".Bytes() (%v, %v)", v, err) - return v, err -} - -func (l *l) Next() error { - err := l.s.Next() - l.l.Printf(l.name+".Next() (%v)", err) - return err -} - -func (l *l) IsLeaf() bool { - v := l.s.IsLeaf() - l.l.Printf(l.name+".IsLeaf() (%v)", v) - return v -} - -func (l *l) Up() { - l.s.Up() - l.l.Printf(l.name + ".Up()") - return -} - -func (l *l) Down() { - l.s.Down() - l.l.Printf(l.name + ".Down()") - return -} diff --git a/parser/debug/node.go b/parser/debug/node.go deleted file mode 100644 index 268ccf2..0000000 --- a/parser/debug/node.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2015 Walter Schulze -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package debug - -// Field is a helper function for creating a Node with a label and one child label. -// This is how a field with a value is typically represented. -func Field(name string, value string) Node { - return Node{ - Label: name, - Children: Nodes{ - Node{ - Label: value, - }, - }, - } -} - -// Nested is a helper function for creating a Node. -func Nested(name string, fs ...Node) Node { - return Node{ - Label: name, - Children: Nodes(fs), - } -} diff --git a/parser/debug/value.go b/parser/debug/value.go deleted file mode 100644 index c9683e0..0000000 --- a/parser/debug/value.go +++ /dev/null @@ -1,129 +0,0 @@ -// Copyright 2015 Walter Schulze -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package debug - -import ( - "github.com/katydid/parser-go/parser" -) - -type errValue struct{} - -func (*errValue) Double() (float64, error) { - return 0, parser.ErrNotDouble -} - -func (*errValue) Bytes() ([]byte, error) { - return nil, parser.ErrNotBytes -} - -func (*errValue) Int() (int64, error) { - return 0, parser.ErrNotInt -} - -func (*errValue) Bool() (bool, error) { - return false, parser.ErrNotBool -} - -func (*errValue) Uint() (uint64, error) { - return 0, parser.ErrNotUint -} - -func (*errValue) String() (string, error) { - return "", parser.ErrNotString -} - -type doubleValue struct { - *errValue - v float64 -} - -// NewDoubleValue wraps a native go type into a parser.Value. -func NewDoubleValue(v float64) parser.Value { - return &doubleValue{&errValue{}, v} -} - -func (v *doubleValue) Double() (float64, error) { - return v.v, nil -} - -type intValue struct { - *errValue - v int64 -} - -// NewIntValue wraps a native go type into a parser.Value. -func NewIntValue(v int64) parser.Value { - return &intValue{&errValue{}, v} -} - -func (v *intValue) Int() (int64, error) { - return v.v, nil -} - -type uintValue struct { - *errValue - v uint64 -} - -// NewUintValue wraps a native go type into a parser.Value. -func NewUintValue(v uint64) parser.Value { - return &uintValue{&errValue{}, v} -} - -func (v *uintValue) Uint() (uint64, error) { - return v.v, nil -} - -type boolValue struct { - *errValue - v bool -} - -// NewBoolValue wraps a native go type into a parser.Value. -func NewBoolValue(v bool) parser.Value { - return &boolValue{&errValue{}, v} -} - -func (v *boolValue) Bool() (bool, error) { - return v.v, nil -} - -type stringValue struct { - *errValue - v string -} - -// NewStringValue wraps a native go type into a parser.Value. -func NewStringValue(v string) parser.Value { - return &stringValue{&errValue{}, v} -} - -func (v *stringValue) String() (string, error) { - return v.v, nil -} - -type bytesValue struct { - *errValue - v []byte -} - -// NewBytesValue wraps a native go type into a parser.Value. -func NewBytesValue(v []byte) parser.Value { - return &bytesValue{&errValue{}, v} -} - -func (v *bytesValue) Bytes() ([]byte, error) { - return v.v, nil -} diff --git a/parser/debug/walk.go b/parser/debug/walk.go deleted file mode 100644 index 01e36b6..0000000 --- a/parser/debug/walk.go +++ /dev/null @@ -1,178 +0,0 @@ -// Copyright 2015 Walter Schulze -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package debug - -import ( - "fmt" - "io" - "math/rand" - "strings" - "time" - - "github.com/katydid/parser-go/parser" -) - -func getValue(p parser.Interface) interface{} { - var v interface{} - var err error - v, err = p.Int() - if err == nil { - return v - } - v, err = p.Uint() - if err == nil { - return v - } - v, err = p.Double() - if err == nil { - return v - } - v, err = p.Bool() - if err == nil { - return v - } - v, err = p.String() - if err == nil { - return v - } - v, err = p.Bytes() - if err == nil { - return v - } - return nil -} - -// Node is a type that represents a node in a tree. -// It has a label an children nodes. -type Node struct { - Label string - Children Nodes -} - -// String returns a string representation of Node. -func (this Node) String() string { - if len(this.Children) == 0 { - return this.Label - } - return this.Label + ":" + this.Children.String() -} - -// Equal returns whether two Nodes are the same. -func (this Node) Equal(that Node) bool { - if this.Label != that.Label { - return false - } - if !this.Children.Equal(that.Children) { - return false - } - return true -} - -// Nodes is a list of Node. -type Nodes []Node - -// String returns a string representation of Nodes. -func (this Nodes) String() string { - ss := make([]string, len(this)) - for i := range this { - ss[i] = this[i].String() - } - return "{" + strings.Join(ss, ",") + "}" -} - -// Equal returns whether two Node lists are equal. -func (this Nodes) Equal(that Nodes) bool { - if len(this) != len(that) { - return false - } - for i := range this { - if !this[i].Equal(that[i]) { - return false - } - } - return true -} - -// Walk walks through the whole parser in a top down manner and records the values into a Nodes structute. -func Walk(p parser.Interface) Nodes { - a := make(Nodes, 0) - for { - if err := p.Next(); err != nil { - if err == io.EOF { - break - } else { - panic(err) - } - } - value := getValue(p) - if p.IsLeaf() { - a = append(a, Node{fmt.Sprintf("%v", value), nil}) - } else { - name := fmt.Sprintf("%v", value) - p.Down() - v := Walk(p) - p.Up() - a = append(a, Node{name, v}) - } - } - return a -} - -// NewRand returns a random integer generator, that can be used with RandomWalk. -// Its seed is the current time. -func NewRand() Rand { - return rand.New(rand.NewSource(time.Now().UnixNano())) -} - -// Rand is a subset of the interface that is implemented by math/rand representing only the methods used by the RandomWalk function. -type Rand interface { - Intn(n int) int -} - -// RandomWalk does a random walk of the parser, given two probabilities. -// -// next is passed to r.Intn and when a zero value is returned the Next method on the parser is called. -// down is passed to r.Intn and when a non zero value is returned the Down method on the parser is called. -// -// RandomWalk is great for testing that the implemented parser can handle random skipping of parts of the tree. -func RandomWalk(p parser.Interface, r Rand, next, down int) Nodes { - a := make(Nodes, 0) - for { - if r.Intn(next) == 0 { - break - } - if err := p.Next(); err != nil { - if err == io.EOF { - break - } else { - panic(err) - } - } - value := getValue(p) - if p.IsLeaf() { - a = append(a, Node{fmt.Sprintf("%#v", value), nil}) - } else { - name := fmt.Sprintf("%#v", value) - var v Nodes - if r.Intn(down) != 0 { - p.Down() - v = RandomWalk(p, r, next, down) - p.Up() - } - a = append(a, Node{name, v}) - } - } - return a -} diff --git a/parser/proto/Makefile b/parser/proto/Makefile deleted file mode 100644 index 4c721c8..0000000 --- a/parser/proto/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright 2016 Walter Schulze -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -regenerate: - cd prototests && make regenerate diff --git a/parser/proto/desc.go b/parser/proto/desc.go deleted file mode 100644 index 06ecb5a..0000000 --- a/parser/proto/desc.go +++ /dev/null @@ -1,162 +0,0 @@ -// Copyright 2015 Walter Schulze -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package proto - -import ( - "strings" - - descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" -) - -type errUnknown struct { - msg string -} - -func (this *errUnknown) Error() string { - return "parser/proto: Could not find " + this.msg -} - -// DescMap is a map of the descriptor.FileDescriptorSet -type DescMap interface { - //GetRoot returns the root message that was used to create this map. - GetRoot() *descriptor.DescriptorProto - //LookupMessage returns the message descriptor of the field type. - LookupMessage(field *descriptor.FieldDescriptorProto) *descriptor.DescriptorProto - //LookupFields returns a map of field key to field descriptor in the message. - LookupFields(msg *descriptor.DescriptorProto) map[uint64]*descriptor.FieldDescriptorProto -} - -type descMap struct { - desc *descriptor.FileDescriptorSet - root *descriptor.DescriptorProto - fieldToMsg map[*descriptor.FieldDescriptorProto]*descriptor.DescriptorProto - msgToField map[*descriptor.DescriptorProto]map[uint64]*descriptor.FieldDescriptorProto -} - -// NewDescriptorMap returns a map of the FileDescriptorSet starting at the message represented by the package name and message name. -func NewDescriptorMap(pkgName, msgName string, desc *descriptor.FileDescriptorSet) (DescMap, error) { - root := desc.GetMessage(pkgName, msgName) - if root == nil { - return nil, &errUnknown{pkgName + "." + msgName} - } - d := &descMap{ - desc: desc, - root: root, - fieldToMsg: make(map[*descriptor.FieldDescriptorProto]*descriptor.DescriptorProto), - msgToField: make(map[*descriptor.DescriptorProto]map[uint64]*descriptor.FieldDescriptorProto), - } - err := d.visit(pkgName, root) - return d, err -} - -func dotToUnderscore(r rune) rune { - if r == '.' { - return '_' - } - return r -} - -func (this *descMap) findExts(pkgName string, msgName string) []*descriptor.FieldDescriptorProto { - exts := []*descriptor.FieldDescriptorProto{} - extendee := "." + pkgName + "." + msgName - for _, file := range this.desc.GetFile() { - for i, ext := range file.GetExtension() { - if strings.Map(dotToUnderscore, file.GetPackage()) == strings.Map(dotToUnderscore, pkgName) { - if !(ext.GetExtendee() == msgName || ext.GetExtendee() == extendee) { - continue - } - } else { - if ext.GetExtendee() != extendee { - continue - } - } - exts = append(exts, file.Extension[i]) - } - } - return exts -} - -func couldBePacked(field *descriptor.FieldDescriptorProto) bool { - return field.IsRepeated() && field.IsScalar() -} - -func keysOf(field *descriptor.FieldDescriptorProto) []uint64 { - wireType := field.WireType() - fieldNumber := field.GetNumber() - normalKey := uint64(uint32(fieldNumber)<<3 | uint32(wireType)) - keys := []uint64{normalKey} - - if couldBePacked(field) { - wireType = 2 - packedKey := uint64(uint32(fieldNumber)<<3 | uint32(wireType)) - keys = append(keys, packedKey) - } - return keys -} - -func (this *descMap) visit(pkgName string, msg *descriptor.DescriptorProto) error { - if _, ok := this.msgToField[msg]; ok { - return nil - } - fields := msg.GetField() - if msg.HasExtension() { - exts := this.findExts(pkgName, msg.GetName()) - fields = append(fields, exts...) - } - for i, f := range fields { - if _, ok := this.msgToField[msg]; !ok { - this.msgToField[msg] = make(map[uint64]*descriptor.FieldDescriptorProto) - } - keys := keysOf(f) - for _, k := range keys { - this.msgToField[msg][k] = fields[i] - } - if f.GetType() == descriptor.FieldDescriptorProto_TYPE_MESSAGE { - newPkgName, newMsgName := this.desc.FindMessage(pkgName, msg.GetName(), f.GetName()) - if len(newMsgName) == 0 { - return &errUnknown{pkgName + "." + msg.GetName() + "." + f.GetName()} - } - newMsg := this.desc.GetMessage(newPkgName, newMsgName) - if newMsg == nil { - return &errUnknown{newPkgName + "." + newMsgName} - } - this.fieldToMsg[fields[i]] = newMsg - if _, ok := this.msgToField[newMsg]; ok { - continue - } - if err := this.visit(newPkgName, newMsg); err != nil { - return err - } - } - } - for i := range msg.GetNestedType() { - if err := this.visit(pkgName, msg.GetNestedType()[i]); err != nil { - return err - } - } - return nil -} - -func (this *descMap) GetRoot() *descriptor.DescriptorProto { - return this.root -} - -func (this *descMap) LookupMessage(field *descriptor.FieldDescriptorProto) *descriptor.DescriptorProto { - return this.fieldToMsg[field] -} - -func (this *descMap) LookupFields(msg *descriptor.DescriptorProto) map[uint64]*descriptor.FieldDescriptorProto { - return this.msgToField[msg] -} diff --git a/parser/proto/nomerge.go b/parser/proto/nomerge.go deleted file mode 100644 index 6ce8108..0000000 --- a/parser/proto/nomerge.go +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2016 Walter Schulze -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package proto - -import ( - "fmt" - "io" -) - -//NoLatentAppendingOrMerging returns whether the current parser has some latent fields. -//Latent fields are those fields you have already seen on your walk, but then after seeing a different field you see this field again. -//This typically happens when the protocol buffer user created an object marshaled it and then merged it with another value. -func NoLatentAppendingOrMerging(parser ProtoParser) error { - seen := make(map[string]bool) - for { - if err := parser.Next(); err != nil { - if err == io.EOF { - break - } else { - return fmt.Errorf("expected EOF, but got: %v", err) - } - } - if !parser.IsLeaf() { - if _, err := parser.Int(); err != nil { - if fieldName, err := parser.String(); err == nil { - if _, ok := seen[fieldName]; ok { - return fmt.Errorf("%s requires merging", parser.Field().GetName()) - } - seen[fieldName] = true - } else { - return fmt.Errorf("not an index, field or leaf: %v", err) - } - } - parser.Down() - if err := NoLatentAppendingOrMerging(parser); err != nil { - return err - } - parser.Up() - } - } - return nil -} diff --git a/parser/proto/nomerge_test.go b/parser/proto/nomerge_test.go deleted file mode 100644 index 02ae0f4..0000000 --- a/parser/proto/nomerge_test.go +++ /dev/null @@ -1,173 +0,0 @@ -// Copyright 2016 Walter Schulze -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package proto_test - -import ( - "encoding/binary" - "math/rand" - "strings" - "testing" - "time" - - "github.com/gogo/protobuf/proto" - "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" - "github.com/katydid/validator-gogo-proto/parser/debug" - protoparser "github.com/katydid/validator-gogo-proto/parser/proto" - "github.com/katydid/validator-gogo-proto/parser/proto/prototests" -) - -func noMerge(data []byte, desc *descriptor.FileDescriptorSet, pkgName, msgName string) error { - parser, err := protoparser.NewProtoParser(pkgName, msgName, desc) - if err != nil { - return err - } - if err := parser.Init(data); err != nil { - return err - } - return protoparser.NoLatentAppendingOrMerging(parser) -} - -var ( - r = rand.New(rand.NewSource(time.Now().UnixNano())) -) - -func TestNoMergeNoMerge(t *testing.T) { - m := debug.Input - data, err := proto.Marshal(m) - if err != nil { - t.Fatal(err) - } - err = noMerge(data, m.Description(), "debug", "Debug") - if err != nil { - t.Fatal(err) - } -} - -func TestNoMergeMerge(t *testing.T) { - m := debug.Input - m.G = proto.Float64(1.1) - data, err := proto.Marshal(m) - if err != nil { - t.Fatal(err) - } - key := byte(uint32(7)<<3 | uint32(1)) - data = append(data, key, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) - err = noMerge(data, m.Description(), "debug", "Debug") - if err == nil || !strings.Contains(err.Error(), "G requires merging") { - t.Fatalf("G should require merging") - } -} - -func TestNoMergeLatent(t *testing.T) { - m := debug.Input - m.F = []uint32{5, 6, 7} - m.G = proto.Float64(1.1) - data, err := proto.Marshal(m) - if err != nil { - t.Fatal(err) - } - key := byte(uint32(6)<<3 | uint32(5)) - data = append(data, key, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) - err = noMerge(data, m.Description(), "debug", "Debug") - if err == nil || !strings.Contains(err.Error(), "F") { - t.Fatalf("F should have latent appending") - } -} - -func TestNoMergeNestedNoMerge(t *testing.T) { - bigm := prototests.NewPopulatedBigMsg(r, true) - data, err := proto.Marshal(bigm) - if err != nil { - t.Fatal(err) - } - err = noMerge(data, bigm.Description(), "prototests", "BigMsg") - if err != nil { - t.Fatal(err) - } -} - -func TestNoMergeMessageMerge(t *testing.T) { - bigm := prototests.NewPopulatedBigMsg(r, true) - bigm.Msg = prototests.NewPopulatedSmallMsg(r, true) - data, err := proto.Marshal(bigm) - if err != nil { - t.Fatal(err) - } - key := byte(uint32(3)<<3 | uint32(2)) - fieldkey := byte(uint32(12)<<3 | uint32(5)) - data = append(data, key, 5, fieldkey, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) - err = noMerge(data, bigm.Description(), "prototests", "BigMsg") - if err == nil || !strings.Contains(err.Error(), "requires merging") { - t.Fatal(err) - } -} - -func TestNoMergeNestedMerge(t *testing.T) { - bigm := prototests.NewPopulatedBigMsg(r, true) - m := prototests.NewPopulatedSmallMsg(r, true) - if len(m.FlightParachute) == 0 { - m.FlightParachute = []uint32{1} - } - m.MapShark = proto.String("a") - key := byte(uint32(12)<<3 | uint32(5)) - m.XXX_unrecognized = append(m.XXX_unrecognized, key, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) - bigm.Msg = m - data, err := proto.Marshal(bigm) - if err != nil { - t.Fatal(err) - } - err = noMerge(data, bigm.Description(), "prototests", "BigMsg") - if err == nil || !strings.Contains(err.Error(), "FlightParachute requires merging") { - t.Fatalf("FlightParachute should require merging %#v", bigm) - } -} - -func TestNoMergeExtensionNoMerge(t *testing.T) { - bigm := prototests.AContainer - data, err := proto.Marshal(bigm) - if err != nil { - t.Fatal(err) - } - err = noMerge(data, bigm.Description(), "prototests", "Container") - if err != nil { - t.Fatal(err) - } -} - -func TestNoMergeExtensionMerge(t *testing.T) { - bigm := prototests.AContainer - m := &prototests.Small{SmallField: proto.Int64(1)} - data, err := proto.Marshal(bigm) - if err != nil { - t.Fatal(err) - } - mdata, err := proto.Marshal(m) - if err != nil { - t.Fatal(err) - } - key := uint32(101)<<3 | uint32(2) - datakey := make([]byte, 10) - n := binary.PutUvarint(datakey, uint64(key)) - datakey = datakey[:n] - datalen := make([]byte, 10) - n = binary.PutUvarint(datalen, uint64(len(mdata))) - datalen = datalen[:n] - data = append(data, append(datakey, append(datalen, mdata...)...)...) - err = noMerge(data, bigm.Description(), "prototests", "Container") - if err == nil || !strings.Contains(err.Error(), "FieldB requires merging") { - t.Fatalf("FieldB should require merging, but error is %v", err) - } - t.Log(err) -} diff --git a/parser/proto/packed_test.go b/parser/proto/packed_test.go deleted file mode 100644 index 63e13ef..0000000 --- a/parser/proto/packed_test.go +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright 2017 Walter Schulze -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package proto - -import ( - "math" - "strconv" - "testing" - - "github.com/gogo/protobuf/proto" - "github.com/katydid/validator-gogo-proto/parser/debug" - "github.com/katydid/validator-gogo-proto/parser/proto/prototests" -) - -var packedInput1 = &prototests.Packed{ - Ints: []int64{1, math.MaxInt64, math.MinInt64}, -} - -var packedOutput1 = debug.Nodes{ - debug.Nested(`Ints`, - debug.Field(`0`, `1`), - debug.Field(`1`, strconv.Itoa(math.MaxInt64)), - debug.Field(`2`, strconv.Itoa(math.MinInt64)), - ), -} - -func TestPacked1(t *testing.T) { - p, err := NewProtoParser("prototests", "Packed", packedInput1.Description()) - if err != nil { - t.Fatal(err) - } - data, err := proto.Marshal(packedInput1) - if err != nil { - t.Fatal(err) - } - if err := p.Init(data); err != nil { - t.Fatal(err) - } - parser := debug.NewLogger(p, debug.NewLineLogger()) - m := debug.Walk(parser) - if !m.Equal(packedOutput1) { - t.Fatalf("expected %s but got %s", packedOutput1, m) - } -} - -func TestRandomPacked1(t *testing.T) { - p, err := NewProtoParser("prototests", "Packed", packedInput1.Description()) - if err != nil { - t.Fatal(err) - } - data, err := proto.Marshal(packedInput1) - if err != nil { - t.Fatal(err) - } - for i := 0; i < 10; i++ { - if err := p.Init(data); err != nil { - t.Fatal(err) - } - l := debug.NewLogger(p, debug.NewLineLogger()) - debug.RandomWalk(l, debug.NewRand(), 10, 3) - } -} - -var packedInput2 = &prototests.Packed{ - Ints: []int64{1, math.MaxInt64, math.MinInt64}, - Floats: []float64{0.1}, - Uints: []uint32{3, 4}, -} - -var packedOutput2 = debug.Nodes{ - debug.Nested(`Ints`, - debug.Field(`0`, `1`), - debug.Field(`1`, strconv.Itoa(math.MaxInt64)), - debug.Field(`2`, strconv.Itoa(math.MinInt64)), - ), - debug.Nested(`Floats`, - debug.Field(`0`, `0.1`), - ), - debug.Nested(`Uints`, - debug.Field(`0`, `3`), - debug.Field(`1`, `4`), - ), -} - -func TestPacked2(t *testing.T) { - p, err := NewProtoParser("prototests", "Packed", packedInput2.Description()) - if err != nil { - t.Fatal(err) - } - data, err := proto.Marshal(packedInput2) - if err != nil { - t.Fatal(err) - } - if err := p.Init(data); err != nil { - t.Fatal(err) - } - parser := debug.NewLogger(p, debug.NewLineLogger()) - m := debug.Walk(parser) - if !m.Equal(packedOutput2) { - t.Fatalf("expected %s but got %s", packedOutput2, m) - } -} - -func TestRandomPacked2(t *testing.T) { - p, err := NewProtoParser("prototests", "Packed", packedInput2.Description()) - if err != nil { - t.Fatal(err) - } - data, err := proto.Marshal(packedInput2) - if err != nil { - t.Fatal(err) - } - for i := 0; i < 10; i++ { - if err := p.Init(data); err != nil { - t.Fatal(err) - } - l := debug.NewLogger(p, debug.NewLineLogger()) - debug.RandomWalk(l, debug.NewRand(), 10, 3) - } -} diff --git a/parser/proto/proto.go b/parser/proto/proto.go deleted file mode 100644 index f7c18eb..0000000 --- a/parser/proto/proto.go +++ /dev/null @@ -1,522 +0,0 @@ -// Copyright 2013 Walter Schulze -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package proto contains an implementation of a protocol buffer parser. -// -// Merging of fields and splitting of arrays are not supported by this parser for optimization reasons. -// Use the NoLatentAppendingOrMerging function to check whether the marshaled buffer conforms to the limitations. -// -// TODO: defaults, maps and proto3 zero values -package proto - -import ( - "encoding/binary" - "fmt" - "io" - "reflect" - "unsafe" - - descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" - "github.com/katydid/parser-go/parser" -) - -type errVarint struct { - buf []byte -} - -func newErrVarint(buf []byte) error { - buffer := make([]byte, 10) - nn := copy(buffer, buf) - return &errVarint{buffer[:nn]} -} - -func (this *errVarint) Error() string { - return fmt.Sprintf("parser/proto: error decoding varint from %#v", this.buf) -} - -var errBufferOverlow = fmt.Errorf("buffer overflow") - -var errUnknownWireType = fmt.Errorf("unknown wire type") - -func uvarint(buf []byte) (uint64, int, error) { - var uv uint64 - var shift uint - for i, b := range buf { - if b < 0x80 { - if i > 9 || i == 9 && b > 1 { - return 0, 0, newErrVarint(buf) - } - return uv | uint64(b)< 0 { - return s.Init(s.stack[0].buf) - } - return s.Init(s.buf) -} - -func (s *protoParser) Message() *descriptor.DescriptorProto { - return s.parent -} - -func (s *protoParser) Field() *descriptor.FieldDescriptorProto { - return s.field -} - -func (s *protoParser) Init(buf []byte) error { - s.stack = s.stack[:0] - s.state = state{ - parent: s.initRoot, - fieldsMap: s.initFieldsMap, - buf: buf, - } - return nil -} - -func (s *protoParser) Next() error { - if s.isLeaf { - if s.hadLeaf { - return io.EOF - } - s.hadLeaf = true - return nil - } - // This field is repeated, but Next is called, - // => all elements in the repeated field should be skipped - // and the Next field should be retrieved. - if s.isRepeated && !s.inRepeated { - if err := s.skipRepeated(); err != nil { - return err - } - s.isRepeated = false - s.length = 0 - } - - s.offset += s.length - if s.offset >= len(s.buf) { - if s.offset == len(s.buf) { - s.length = 0 - return io.EOF - } - return io.ErrShortBuffer - } - - if s.inRepeated { - v, n, err := uvarint(s.buf[s.offset:]) - if err != nil { - return err - } - fieldNumber := int32(v >> 3) - if fieldNumber != s.field.GetNumber() { - s.length = 0 - s.isRepeated = false - return io.EOF - } - s.offset += n - wireType := int(v & 0x7) - n, l, err := length(wireType, s.buf[s.offset:]) - if err != nil { - return err - } - s.offset += n - s.length = l - s.indexRepeated++ - return nil - } - if s.inPacked { - n, l, err := length(s.field.WireType(), s.buf[s.offset:]) - if err != nil { - return err - } - s.offset += n - s.length = l - s.indexRepeated++ - return nil - } - - v, n, err := uvarint(s.buf[s.offset:]) - if err != nil { - return err - } - field, ok := s.fieldsMap[v] - if ok { - wireType := int(v & 0x7) - s.isPacked = field.IsRepeated() && field.IsScalar() && wireType == 2 - } - if !ok || !field.IsRepeated() || s.isPacked { - s.offset += n - wireType := int(v & 0x7) - n, l, err := length(wireType, s.buf[s.offset:]) - if err != nil { - return err - } - s.offset += n - s.length = l - } - if ok { - if field.IsRepeated() && !s.isPacked { - s.isRepeated = true - s.length = 0 - } - s.field = field - return nil - } - return s.Next() -} - -func (s *protoParser) skipRepeated() error { - s.Down() - err := s.Next() - for err == nil { - err = s.Next() - } - if err != io.EOF { - return err - } - s.Up() - return nil -} - -func (s *protoParser) IsLeaf() bool { - return s.isLeaf -} - -func (s *protoParser) Value() []byte { - return s.buf[s.offset : s.offset+s.length] -} - -func (s *protoParser) Double() (float64, error) { - if !s.isLeaf { - return 0, parser.ErrNotDouble - } - if s.field.GetType() != descriptor.FieldDescriptorProto_TYPE_DOUBLE && - s.field.GetType() != descriptor.FieldDescriptorProto_TYPE_FLOAT { - return 0, parser.ErrNotDouble - } - buf := s.Value() - if len(buf) == 8 { - return *(*float64)(unsafe.Pointer(&buf[0])), nil - } - if len(buf) == 4 { - return float64(*(*float32)(unsafe.Pointer(&buf[0]))), nil - } - return 0, fmt.Errorf("Double: wrong size buffer %d should be 4 or 8", len(buf)) -} - -func (s *protoParser) Int() (int64, error) { - if !s.isLeaf { - if s.inRepeated { - return int64(s.indexRepeated - 1), nil - } - if s.inPacked { - return int64(s.indexRepeated - 1), nil - } - return 0, parser.ErrNotInt - } - typ := s.field.GetType() - switch typ { - case descriptor.FieldDescriptorProto_TYPE_INT64: - return s.decodeInt64() - case descriptor.FieldDescriptorProto_TYPE_SFIXED64: - return s.decodeSfixed64() - case descriptor.FieldDescriptorProto_TYPE_SINT64: - return s.decodeSint64() - case descriptor.FieldDescriptorProto_TYPE_INT32: - i, err := s.decodeInt32() - return int64(i), err - case descriptor.FieldDescriptorProto_TYPE_SFIXED32: - i, err := s.decodeSfixed32() - return int64(i), err - case descriptor.FieldDescriptorProto_TYPE_SINT32: - i, err := s.decodeSint32() - return int64(i), err - case descriptor.FieldDescriptorProto_TYPE_ENUM: - i, err := s.decodeInt32() - return int64(i), err - } - return 0, parser.ErrNotInt -} - -func (s *protoParser) Uint() (uint64, error) { - if !s.isLeaf { - if !s.fieldNames { - return uint64(s.field.GetNumber()), nil - } - return 0, parser.ErrNotUint - } - typ := s.field.GetType() - switch typ { - case descriptor.FieldDescriptorProto_TYPE_UINT64: - return s.decodeUint64() - case descriptor.FieldDescriptorProto_TYPE_FIXED64: - return s.decodeFixed64() - case descriptor.FieldDescriptorProto_TYPE_UINT32: - u, err := s.decodeUint32() - return uint64(u), err - case descriptor.FieldDescriptorProto_TYPE_FIXED32: - u, err := s.decodeFixed32() - return uint64(u), err - } - return 0, parser.ErrNotUint -} - -func (s *protoParser) Bool() (bool, error) { - if !s.isLeaf { - return false, parser.ErrNotBool - } - if s.field.GetType() != descriptor.FieldDescriptorProto_TYPE_BOOL { - return false, parser.ErrNotBool - } - buf := s.Value() - v, n := binary.Uvarint(buf) - if n <= 0 { - return false, fmt.Errorf("decodeVarint n = %d", n) - } - return v != 0, nil -} - -func (s *protoParser) String() (string, error) { - if !s.isLeaf { - if s.fieldNames && !s.inRepeated { - return s.field.GetName(), nil - } - return "", parser.ErrNotString - } - if s.field.GetType() != descriptor.FieldDescriptorProto_TYPE_STRING { - return "", parser.ErrNotString - } - buf := s.Value() - header := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) - strHeader := reflect.StringHeader{Data: header.Data, Len: header.Len} - return *(*string)(unsafe.Pointer(&strHeader)), nil -} - -func (s *protoParser) Bytes() ([]byte, error) { - if !s.isLeaf { - return nil, parser.ErrNotBytes - } - if s.field.GetType() != descriptor.FieldDescriptorProto_TYPE_BYTES { - return nil, parser.ErrNotBytes - } - return s.Value(), nil -} - -func (s *protoParser) decodeInt64() (int64, error) { - v, n := binary.Uvarint(s.Value()) - if n <= 0 { - return 0, fmt.Errorf("decodeVarint n = %d", n) - } - return int64(v), nil -} - -func (s *protoParser) decodeUint64() (uint64, error) { - v, n := binary.Uvarint(s.Value()) - if n <= 0 { - return 0, fmt.Errorf("decodeVarint n = %d", n) - } - return v, nil -} - -func (s *protoParser) decodeInt32() (int32, error) { - v, n := binary.Uvarint(s.Value()) - if n <= 0 { - return 0, fmt.Errorf("decodeVarint n = %d", n) - } - return int32(v), nil -} - -func (s *protoParser) decodeFixed64() (uint64, error) { - buf := s.Value() - if len(buf) < 8 { - return 0, fmt.Errorf("decodeDouble: buffer too short") - } - return *(*uint64)(unsafe.Pointer(&buf[0])), nil -} - -func (s *protoParser) decodeFixed32() (uint32, error) { - buf := s.Value() - if len(buf) < 4 { - return 0, fmt.Errorf("decodeDouble: buffer too short") - } - return *(*uint32)(unsafe.Pointer(&buf[0])), nil -} - -func (s *protoParser) decodeUint32() (uint32, error) { - buf := s.Value() - v, n := binary.Uvarint(buf) - if n <= 0 { - return 0, fmt.Errorf("decodeVarint n = %d", n) - } - return uint32(v), nil -} - -func (s *protoParser) decodeSfixed32() (int32, error) { - buf := s.Value() - if len(buf) < 4 { - return 0, fmt.Errorf("decodeDouble: buffer too short") - } - return *(*int32)(unsafe.Pointer(&buf[0])), nil -} - -func (s *protoParser) decodeSfixed64() (int64, error) { - buf := s.Value() - if len(buf) < 8 { - return 0, fmt.Errorf("decodeDouble: buffer too short") - } - return *(*int64)(unsafe.Pointer(&buf[0])), nil -} - -func (s *protoParser) decodeSint32() (int32, error) { - buf := s.Value() - v, n := binary.Uvarint(buf) - if n <= 0 { - return 0, fmt.Errorf("decodeVarint n = %d", n) - } - return int32((uint32(v) >> 1) ^ uint32(((v&1)<<31)>>31)), nil -} - -func (s *protoParser) decodeSint64() (int64, error) { - buf := s.Value() - v, n := binary.Uvarint(buf) - if n <= 0 { - return 0, fmt.Errorf("decodeVarint n = %d", n) - } - return int64((v >> 1) ^ uint64((int64(v&1)<<63)>>63)), nil -} - -func (s *protoParser) Up() { - top := len(s.stack) - 1 - offset := s.offset - length := s.length - inRepeated := s.inRepeated - s.state = s.stack[top] - s.stack = s.stack[:top] - if inRepeated { - s.offset = offset + length - } -} - -func (s *protoParser) Down() { - s.stack = append(s.stack, s.state) - if s.isRepeated && !s.inRepeated { - s.inRepeated = true - s.indexRepeated = 0 - s.length = 0 - } else if s.field.IsMessage() { - s.buf = s.buf[s.offset : s.offset+s.length] - s.parent = s.descMap.LookupMessage(s.field) - s.fieldsMap = s.descMap.LookupFields(s.parent) - s.offset = 0 - s.length = 0 - s.field = nil - s.inRepeated = false - s.isRepeated = false - s.isPacked = false - s.inPacked = false - } else if s.isPacked && !s.inPacked { - s.buf = s.buf[s.offset : s.offset+s.length] - s.offset = 0 - s.inPacked = true - s.indexRepeated = 0 - s.length = 0 - } else { - s.isLeaf = true - s.inRepeated = false - s.isRepeated = false - s.isPacked = false - s.inPacked = false - } -} diff --git a/parser/proto/proto3_test.go b/parser/proto/proto3_test.go deleted file mode 100644 index 1a0d7ff..0000000 --- a/parser/proto/proto3_test.go +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright 2017 Walter Schulze -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package proto - -import ( - "math" - "strconv" - "testing" - - "github.com/gogo/protobuf/proto" - "github.com/katydid/validator-gogo-proto/parser/debug" - "github.com/katydid/validator-gogo-proto/parser/proto/prototests" -) - -var proto3Input1 = &prototests.Proto3{ - Field: 97824789, - Msg: &prototests.SmallMsg3{ - ScarBusStop: "cde", - FlightParachute: []uint32{1, 2, 3}, - }, - Ints: []int64{math.MinInt64}, -} - -var proto3Output1 = debug.Nodes{ - debug.Field(`Field`, `97824789`), - debug.Nested(`Msg`, - debug.Field(`ScarBusStop`, `cde`), - debug.Nested(`FlightParachute`, - debug.Field(`0`, `1`), - debug.Field(`1`, `2`), - debug.Field(`2`, `3`), - ), - ), - debug.Nested(`Ints`, - debug.Field(`0`, strconv.Itoa(math.MinInt64)), - ), -} - -func TestProto31(t *testing.T) { - p, err := NewProtoParser("prototests", "Proto3", proto3Input1.Description()) - if err != nil { - t.Fatal(err) - } - data, err := proto.Marshal(proto3Input1) - if err != nil { - t.Fatal(err) - } - if err := p.Init(data); err != nil { - t.Fatal(err) - } - parser := debug.NewLogger(p, debug.NewLineLogger()) - m := debug.Walk(parser) - if !m.Equal(proto3Output1) { - t.Fatalf("expected %s but got %s", proto3Output1, m) - } -} - -func TestRandomProto31(t *testing.T) { - p, err := NewProtoParser("prototests", "Proto3", proto3Input1.Description()) - if err != nil { - t.Fatal(err) - } - data, err := proto.Marshal(proto3Input1) - if err != nil { - t.Fatal(err) - } - for i := 0; i < 10; i++ { - if err := p.Init(data); err != nil { - t.Fatal(err) - } - l := debug.NewLogger(p, debug.NewLineLogger()) - debug.RandomWalk(l, debug.NewRand(), 10, 3) - } -} diff --git a/parser/proto/proto_test.go b/parser/proto/proto_test.go deleted file mode 100644 index fda9350..0000000 --- a/parser/proto/proto_test.go +++ /dev/null @@ -1,193 +0,0 @@ -// Copyright 2015 Walter Schulze -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package proto - -import ( - "io" - "testing" - - "github.com/gogo/protobuf/proto" - "github.com/katydid/parser-go/parser" - "github.com/katydid/validator-gogo-proto/parser/debug" - "github.com/katydid/validator-gogo-proto/parser/proto/prototests" -) - -func TestDebug(t *testing.T) { - p, err := NewProtoParser("debug", "Debug", debug.DebugDescription()) - if err != nil { - t.Fatal(err) - } - data, err := proto.Marshal(debug.Input) - if err != nil { - t.Fatal(err) - } - if err := p.Init(data); err != nil { - t.Fatal(err) - } - parser := debug.NewLogger(p, debug.NewLineLogger()) - m := debug.Walk(parser) - if !m.Equal(debug.Output) { - t.Fatalf("expected %s but got %s", debug.Output, m) - } -} - -func TestRandomDebug(t *testing.T) { - p, err := NewProtoParser("debug", "Debug", debug.DebugDescription()) - if err != nil { - t.Fatal(err) - } - data, err := proto.Marshal(debug.Input) - if err != nil { - t.Fatal(err) - } - for i := 0; i < 10; i++ { - if err := p.Init(data); err != nil { - t.Fatal(err) - } - //l := debug.NewLogger(p, debug.NewLineLogger()) - debug.RandomWalk(p, debug.NewRand(), 10, 3) - //t.Logf("original %v vs random %v", debug.Output, m) - } -} - -func next(t *testing.T, parser parser.Interface) { - if err := parser.Next(); err != nil { - if err != io.EOF { - t.Fatal(err) - } - } -} - -func TestSkipRepeated1(t *testing.T) { - p, err := NewProtoParser("debug", "Debug", debug.DebugDescription()) - if err != nil { - t.Fatal(err) - } - data, err := proto.Marshal(debug.Input) - if err != nil { - t.Fatal(err) - } - if err := p.Init(data); err != nil { - t.Fatal(err) - } - parser := debug.NewLogger(p, debug.NewLineLogger()) - next(t, parser) - next(t, parser) - parser.Down() - next(t, parser) - parser.Down() - parser.Up() - next(t, parser) - parser.Down() - next(t, parser) - next(t, parser) - parser.Up() - parser.Up() - next(t, parser) -} - -func TestSkipRepeated2(t *testing.T) { - p, err := NewProtoParser("debug", "Debug", debug.DebugDescription()) - if err != nil { - t.Fatal(err) - } - data, err := proto.Marshal(debug.Input) - if err != nil { - t.Fatal(err) - } - if err := p.Init(data); err != nil { - t.Fatal(err) - } - parser := debug.NewLogger(p, debug.NewLineLogger()) - next(t, parser) - if _, err := parser.String(); err != nil { - t.Fatal(err) - } - next(t, parser) - if _, err := parser.String(); err != nil { - t.Fatal(err) - } - parser.Down() - next(t, parser) - if _, err := parser.Int(); err != nil { - t.Fatal(err) - } - parser.Up() - next(t, parser) -} - -func TestIndexIsNotAString(t *testing.T) { - p, err := NewProtoParser("debug", "Debug", debug.DebugDescription()) - if err != nil { - t.Fatal(err) - } - data, err := proto.Marshal(debug.Input) - if err != nil { - t.Fatal(err) - } - if err := p.Init(data); err != nil { - t.Fatal(err) - } - parser := debug.NewLogger(p, debug.NewLineLogger()) - next(t, parser) - if _, err := parser.String(); err != nil { - t.Fatal(err) - } - next(t, parser) - if _, err := parser.String(); err != nil { - t.Fatal(err) - } - parser.Down() - next(t, parser) - if _, err := parser.String(); err == nil { - t.Fatal("expected error, since an index is not a string") - } -} - -func TestExtensionsSmallContainer(t *testing.T) { - p, err := NewProtoParser("prototests", "Container", prototests.AContainer.Description()) - if err != nil { - t.Fatal(err) - } - data, err := proto.Marshal(prototests.AContainer) - if err != nil { - t.Fatal(err) - } - if err := p.Init(data); err != nil { - t.Fatal(err) - } - nodes := debug.Walk(p) - if !nodes.Equal(prototests.AContainerOutput) { - t.Fatalf("expected %v, but got %v", prototests.AContainerOutput, nodes) - } -} - -func TestExtensionsBigContainer(t *testing.T) { - p, err := NewProtoParser("prototests", "BigContainer", prototests.ABigContainer.Description()) - if err != nil { - t.Fatal(err) - } - data, err := proto.Marshal(prototests.ABigContainer) - if err != nil { - t.Fatal(err) - } - if err := p.Init(data); err != nil { - t.Fatal(err) - } - nodes := debug.Walk(p) - if !nodes.Equal(prototests.ABigContainerOutput) { - t.Fatalf("expected %v, but got %v", prototests.ABigContainerOutput, nodes) - } -} diff --git a/parser/proto/prototests/Makefile b/parser/proto/prototests/Makefile deleted file mode 100644 index 60a33f9..0000000 --- a/parser/proto/prototests/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright 2016 Walter Schulze -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -regenerate: - (protoc --gogo_out=. -I=.:../../../../../../:../../../../../../github.com/gogo/protobuf/protobuf extensions.proto) - (protoc --gogo_out=. -I=.:../../../../../../:../../../../../../github.com/gogo/protobuf/protobuf msg.proto) - (protoc --gogo_out=. -I=.:../../../../../../:../../../../../../github.com/gogo/protobuf/protobuf proto3.proto) diff --git a/parser/proto/prototests/doc.go b/parser/proto/prototests/doc.go deleted file mode 100644 index 7fd7532..0000000 --- a/parser/proto/prototests/doc.go +++ /dev/null @@ -1,2 +0,0 @@ -//Package prototests contains some structures and values that are useful for testing the protocol buffer parser. -package prototests diff --git a/parser/proto/prototests/extensions.pb.go b/parser/proto/prototests/extensions.pb.go deleted file mode 100644 index 603a746..0000000 --- a/parser/proto/prototests/extensions.pb.go +++ /dev/null @@ -1,553 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: extensions.proto - -package prototests - -import ( - bytes "bytes" - compress_gzip "compress/gzip" - fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_protoc_gen_gogo_descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" - io_ioutil "io/ioutil" - math "math" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package - -// Container contains a field and some extensions. -type Container struct { - Field1 *int64 `protobuf:"varint,1,opt,name=Field1" json:"Field1,omitempty"` - proto.XXX_InternalExtensions `json:"-"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *Container) Reset() { *m = Container{} } -func (m *Container) String() string { return proto.CompactTextString(m) } -func (*Container) ProtoMessage() {} -func (*Container) Descriptor() ([]byte, []int) { - return fileDescriptor_80048569110312b4, []int{0} -} - -var extRange_Container = []proto.ExtensionRange{ - {Start: 100, End: 199}, -} - -func (*Container) ExtensionRangeArray() []proto.ExtensionRange { - return extRange_Container -} - -func (m *Container) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Container.Unmarshal(m, b) -} -func (m *Container) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Container.Marshal(b, m, deterministic) -} -func (m *Container) XXX_Merge(src proto.Message) { - xxx_messageInfo_Container.Merge(m, src) -} -func (m *Container) XXX_Size() int { - return xxx_messageInfo_Container.Size(m) -} -func (m *Container) XXX_DiscardUnknown() { - xxx_messageInfo_Container.DiscardUnknown(m) -} - -var xxx_messageInfo_Container proto.InternalMessageInfo - -func (m *Container) GetField1() int64 { - if m != nil && m.Field1 != nil { - return *m.Field1 - } - return 0 -} - -type Small struct { - SmallField *int64 `protobuf:"varint,1,opt,name=SmallField" json:"SmallField,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *Small) Reset() { *m = Small{} } -func (m *Small) String() string { return proto.CompactTextString(m) } -func (*Small) ProtoMessage() {} -func (*Small) Descriptor() ([]byte, []int) { - return fileDescriptor_80048569110312b4, []int{1} -} -func (m *Small) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Small.Unmarshal(m, b) -} -func (m *Small) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Small.Marshal(b, m, deterministic) -} -func (m *Small) XXX_Merge(src proto.Message) { - xxx_messageInfo_Small.Merge(m, src) -} -func (m *Small) XXX_Size() int { - return xxx_messageInfo_Small.Size(m) -} -func (m *Small) XXX_DiscardUnknown() { - xxx_messageInfo_Small.DiscardUnknown(m) -} - -var xxx_messageInfo_Small proto.InternalMessageInfo - -func (m *Small) GetSmallField() int64 { - if m != nil && m.SmallField != nil { - return *m.SmallField - } - return 0 -} - -type Big struct { - BigField *int64 `protobuf:"varint,1,opt,name=BigField" json:"BigField,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *Big) Reset() { *m = Big{} } -func (m *Big) String() string { return proto.CompactTextString(m) } -func (*Big) ProtoMessage() {} -func (*Big) Descriptor() ([]byte, []int) { - return fileDescriptor_80048569110312b4, []int{2} -} -func (m *Big) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Big.Unmarshal(m, b) -} -func (m *Big) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Big.Marshal(b, m, deterministic) -} -func (m *Big) XXX_Merge(src proto.Message) { - xxx_messageInfo_Big.Merge(m, src) -} -func (m *Big) XXX_Size() int { - return xxx_messageInfo_Big.Size(m) -} -func (m *Big) XXX_DiscardUnknown() { - xxx_messageInfo_Big.DiscardUnknown(m) -} - -var xxx_messageInfo_Big proto.InternalMessageInfo - -func (m *Big) GetBigField() int64 { - if m != nil && m.BigField != nil { - return *m.BigField - } - return 0 -} - -// BigContainer contains 3 fields and two extension ranges. -type BigContainer struct { - Field2 *int64 `protobuf:"varint,2,opt,name=Field2" json:"Field2,omitempty"` - Field13 *int64 `protobuf:"varint,13,opt,name=Field13" json:"Field13,omitempty"` - M *Container `protobuf:"bytes,1,opt,name=M" json:"M,omitempty"` - proto.XXX_InternalExtensions `json:"-"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *BigContainer) Reset() { *m = BigContainer{} } -func (m *BigContainer) String() string { return proto.CompactTextString(m) } -func (*BigContainer) ProtoMessage() {} -func (*BigContainer) Descriptor() ([]byte, []int) { - return fileDescriptor_80048569110312b4, []int{3} -} - -var extRange_BigContainer = []proto.ExtensionRange{ - {Start: 14, End: 16}, - {Start: 10, End: 12}, -} - -func (*BigContainer) ExtensionRangeArray() []proto.ExtensionRange { - return extRange_BigContainer -} - -func (m *BigContainer) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_BigContainer.Unmarshal(m, b) -} -func (m *BigContainer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_BigContainer.Marshal(b, m, deterministic) -} -func (m *BigContainer) XXX_Merge(src proto.Message) { - xxx_messageInfo_BigContainer.Merge(m, src) -} -func (m *BigContainer) XXX_Size() int { - return xxx_messageInfo_BigContainer.Size(m) -} -func (m *BigContainer) XXX_DiscardUnknown() { - xxx_messageInfo_BigContainer.DiscardUnknown(m) -} - -var xxx_messageInfo_BigContainer proto.InternalMessageInfo - -func (m *BigContainer) GetField2() int64 { - if m != nil && m.Field2 != nil { - return *m.Field2 - } - return 0 -} - -func (m *BigContainer) GetField13() int64 { - if m != nil && m.Field13 != nil { - return *m.Field13 - } - return 0 -} - -func (m *BigContainer) GetM() *Container { - if m != nil { - return m.M - } - return nil -} - -var E_FieldA = &proto.ExtensionDesc{ - ExtendedType: (*Container)(nil), - ExtensionType: (*float64)(nil), - Field: 100, - Name: "prototests.FieldA", - Tag: "fixed64,100,opt,name=FieldA", - Filename: "extensions.proto", -} - -var E_FieldB = &proto.ExtensionDesc{ - ExtendedType: (*Container)(nil), - ExtensionType: (*Small)(nil), - Field: 101, - Name: "prototests.FieldB", - Tag: "bytes,101,opt,name=FieldB", - Filename: "extensions.proto", -} - -var E_FieldC = &proto.ExtensionDesc{ - ExtendedType: (*Container)(nil), - ExtensionType: (*Big)(nil), - Field: 102, - Name: "prototests.FieldC", - Tag: "bytes,102,opt,name=FieldC", - Filename: "extensions.proto", -} - -func init() { - proto.RegisterType((*Container)(nil), "prototests.Container") - proto.RegisterType((*Small)(nil), "prototests.Small") - proto.RegisterType((*Big)(nil), "prototests.Big") - proto.RegisterType((*BigContainer)(nil), "prototests.BigContainer") - proto.RegisterExtension(E_FieldA) - proto.RegisterExtension(E_FieldB) - proto.RegisterExtension(E_FieldC) -} - -func init() { proto.RegisterFile("extensions.proto", fileDescriptor_80048569110312b4) } - -var fileDescriptor_80048569110312b4 = []byte{ - // 289 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x48, 0xad, 0x28, 0x49, - 0xcd, 0x2b, 0xce, 0xcc, 0xcf, 0x2b, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x02, 0x53, - 0x25, 0xa9, 0xc5, 0x25, 0xc5, 0x52, 0xba, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, - 0xb9, 0xfa, 0xe9, 0xf9, 0xe9, 0xf9, 0xfa, 0x60, 0xb9, 0xa4, 0xd2, 0x34, 0x30, 0x0f, 0xcc, 0x01, - 0xb3, 0x20, 0x5a, 0x95, 0xb4, 0xb8, 0x38, 0x9d, 0xf3, 0xf3, 0x4a, 0x12, 0x33, 0xf3, 0x52, 0x8b, - 0x84, 0xc4, 0xb8, 0xd8, 0xdc, 0x32, 0x53, 0x73, 0x52, 0x0c, 0x25, 0x18, 0x15, 0x18, 0x35, 0x98, - 0x83, 0xa0, 0x3c, 0x2d, 0x56, 0x8e, 0x14, 0x81, 0x13, 0x8c, 0x4a, 0xea, 0x5c, 0xac, 0xc1, 0xb9, - 0x89, 0x39, 0x39, 0x42, 0x72, 0x5c, 0x5c, 0x60, 0x06, 0x58, 0x1a, 0xaa, 0x16, 0x49, 0x44, 0x49, - 0x91, 0x8b, 0xd9, 0x29, 0x33, 0x5d, 0x48, 0x8a, 0x8b, 0xc3, 0x29, 0x33, 0x1d, 0x59, 0x11, 0x9c, - 0xaf, 0x54, 0xc8, 0xc5, 0xe3, 0x94, 0x99, 0x8e, 0x69, 0xb5, 0x91, 0x04, 0x13, 0x92, 0xd5, 0x46, - 0x42, 0x12, 0x5c, 0xec, 0x10, 0x47, 0x18, 0x4b, 0xf0, 0x82, 0x25, 0x60, 0x5c, 0x21, 0x65, 0x2e, - 0x46, 0x5f, 0xb0, 0xb1, 0xdc, 0x46, 0xa2, 0x7a, 0x88, 0x00, 0xd0, 0x83, 0x9b, 0x19, 0xc4, 0xe8, - 0xab, 0xc5, 0xc2, 0xc1, 0x27, 0x20, 0xa8, 0xc5, 0xc2, 0xc1, 0x25, 0xc0, 0x6b, 0xa5, 0x0b, 0xb5, - 0xc2, 0x51, 0x08, 0xbb, 0x7a, 0x89, 0x14, 0x05, 0x46, 0x0d, 0x46, 0xa8, 0xcd, 0x8e, 0x56, 0x0e, - 0x50, 0xe5, 0x4e, 0xb8, 0x94, 0xa7, 0x82, 0xed, 0x16, 0x44, 0x96, 0x04, 0x87, 0x01, 0xd4, 0x04, - 0x27, 0x2b, 0x3b, 0xa8, 0x09, 0xce, 0xb8, 0x4c, 0x48, 0x03, 0x9b, 0xc0, 0x8f, 0x2c, 0xe9, 0x94, - 0x99, 0x0e, 0xd5, 0xef, 0xec, 0xc4, 0xb3, 0xe1, 0x91, 0x1c, 0xe3, 0x85, 0xc7, 0x72, 0x0c, 0x37, - 0x1e, 0xcb, 0x31, 0x00, 0x02, 0x00, 0x00, 0xff, 0xff, 0xec, 0xa7, 0xcf, 0x81, 0xf7, 0x01, 0x00, - 0x00, -} - -func (this *Container) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { - return ExtensionsDescription() -} -func (this *Small) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { - return ExtensionsDescription() -} -func (this *Big) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { - return ExtensionsDescription() -} -func (this *BigContainer) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { - return ExtensionsDescription() -} -func ExtensionsDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { - d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} - var gzipped = []byte{ - // 3982 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x59, 0x70, 0xe4, 0xd6, - 0x75, 0x9d, 0xde, 0xc8, 0xee, 0xdb, 0xcd, 0x26, 0xf8, 0xc8, 0xe1, 0xf4, 0x50, 0xd6, 0x2c, 0x2d, - 0xc9, 0x43, 0x8d, 0x2c, 0x8e, 0x33, 0x9a, 0x19, 0x49, 0x98, 0x58, 0x72, 0x77, 0xb3, 0x87, 0xa6, - 0xc2, 0xcd, 0x68, 0xd2, 0x5a, 0x5c, 0x29, 0x14, 0x88, 0x7e, 0xdd, 0xc4, 0x0c, 0x1a, 0x80, 0x00, - 0xf4, 0x8c, 0x38, 0x95, 0x0f, 0xa5, 0x94, 0xa5, 0x5c, 0xd9, 0x97, 0xaa, 0xd8, 0x8a, 0xac, 0xc4, - 0x4e, 0xc5, 0x4a, 0x9c, 0xcd, 0xce, 0xe2, 0xc4, 0xce, 0x4f, 0x7e, 0x9c, 0xe8, 0x2b, 0x15, 0xff, - 0xe5, 0x23, 0x1f, 0xa9, 0x48, 0x55, 0xd9, 0x94, 0x7d, 0xaa, 0x92, 0x2a, 0xfd, 0xa4, 0xde, 0x86, - 0x06, 0xd0, 0xcd, 0x01, 0xe8, 0x2a, 0x49, 0x5f, 0x6c, 0xdc, 0x77, 0xcf, 0xc1, 0x7d, 0xf7, 0xdd, - 0x77, 0xef, 0x7d, 0x0f, 0x84, 0xb7, 0x65, 0x38, 0xd7, 0xb7, 0xed, 0xbe, 0x89, 0x2f, 0x39, 0xae, - 0xed, 0xdb, 0xfb, 0xc3, 0xde, 0xa5, 0x2e, 0xf6, 0x74, 0xd7, 0x70, 0x7c, 0xdb, 0x5d, 0xa1, 0x32, - 0x34, 0xcb, 0x34, 0x56, 0x84, 0x46, 0x7d, 0x13, 0xe6, 0x6e, 0x18, 0x26, 0x5e, 0x0d, 0x14, 0x3b, - 0xd8, 0x47, 0x4f, 0x41, 0xbe, 0x67, 0x98, 0xb8, 0x96, 0x39, 0x97, 0x5b, 0x2e, 0x5f, 0x7e, 0x78, - 0x25, 0x06, 0x5a, 0x89, 0x22, 0x76, 0x88, 0x58, 0xa1, 0x88, 0xfa, 0xbb, 0x79, 0x98, 0x9f, 0x30, - 0x8a, 0x10, 0xe4, 0x2d, 0x6d, 0x40, 0x18, 0x33, 0xcb, 0x25, 0x85, 0xfe, 0x46, 0x35, 0x98, 0x76, - 0x34, 0xfd, 0x96, 0xd6, 0xc7, 0xb5, 0x2c, 0x15, 0x8b, 0x47, 0x74, 0x06, 0xa0, 0x8b, 0x1d, 0x6c, - 0x75, 0xb1, 0xa5, 0x1f, 0xd6, 0x72, 0xe7, 0x72, 0xcb, 0x25, 0x25, 0x24, 0x41, 0x8f, 0xc1, 0x9c, - 0x33, 0xdc, 0x37, 0x0d, 0x5d, 0x0d, 0xa9, 0xc1, 0xb9, 0xdc, 0x72, 0x41, 0x91, 0xd8, 0xc0, 0xea, - 0x48, 0xf9, 0x02, 0xcc, 0xde, 0xc1, 0xda, 0xad, 0xb0, 0x6a, 0x99, 0xaa, 0x56, 0x89, 0x38, 0xa4, - 0xd8, 0x82, 0xca, 0x00, 0x7b, 0x9e, 0xd6, 0xc7, 0xaa, 0x7f, 0xe8, 0xe0, 0x5a, 0x9e, 0xce, 0xfe, - 0xdc, 0xd8, 0xec, 0xe3, 0x33, 0x2f, 0x73, 0xd4, 0xee, 0xa1, 0x83, 0x51, 0x03, 0x4a, 0xd8, 0x1a, - 0x0e, 0x18, 0x43, 0xe1, 0x08, 0xff, 0xb5, 0xad, 0xe1, 0x20, 0xce, 0x52, 0x24, 0x30, 0x4e, 0x31, - 0xed, 0x61, 0xf7, 0xb6, 0xa1, 0xe3, 0xda, 0x14, 0x25, 0xb8, 0x30, 0x46, 0xd0, 0x61, 0xe3, 0x71, - 0x0e, 0x81, 0x43, 0x2d, 0x28, 0xe1, 0x57, 0x7c, 0x6c, 0x79, 0x86, 0x6d, 0xd5, 0xa6, 0x29, 0xc9, - 0x23, 0x13, 0x56, 0x11, 0x9b, 0xdd, 0x38, 0xc5, 0x08, 0x87, 0xae, 0xc1, 0xb4, 0xed, 0xf8, 0x86, - 0x6d, 0x79, 0xb5, 0xe2, 0xb9, 0xcc, 0x72, 0xf9, 0xf2, 0xc7, 0x26, 0x06, 0xc2, 0x36, 0xd3, 0x51, - 0x84, 0x32, 0x5a, 0x07, 0xc9, 0xb3, 0x87, 0xae, 0x8e, 0x55, 0xdd, 0xee, 0x62, 0xd5, 0xb0, 0x7a, - 0x76, 0xad, 0x44, 0x09, 0xce, 0x8e, 0x4f, 0x84, 0x2a, 0xb6, 0xec, 0x2e, 0x5e, 0xb7, 0x7a, 0xb6, - 0x52, 0xf5, 0x22, 0xcf, 0x68, 0x11, 0xa6, 0xbc, 0x43, 0xcb, 0xd7, 0x5e, 0xa9, 0x55, 0x68, 0x84, - 0xf0, 0xa7, 0xfa, 0xb7, 0xa7, 0x60, 0x36, 0x4d, 0x88, 0x5d, 0x87, 0x42, 0x8f, 0xcc, 0xb2, 0x96, - 0x3d, 0x8e, 0x0f, 0x18, 0x26, 0xea, 0xc4, 0xa9, 0xef, 0xd3, 0x89, 0x0d, 0x28, 0x5b, 0xd8, 0xf3, - 0x71, 0x97, 0x45, 0x44, 0x2e, 0x65, 0x4c, 0x01, 0x03, 0x8d, 0x87, 0x54, 0xfe, 0xfb, 0x0a, 0xa9, - 0x17, 0x60, 0x36, 0x30, 0x49, 0x75, 0x35, 0xab, 0x2f, 0x62, 0xf3, 0x52, 0x92, 0x25, 0x2b, 0x6d, - 0x81, 0x53, 0x08, 0x4c, 0xa9, 0xe2, 0xc8, 0x33, 0x5a, 0x05, 0xb0, 0x2d, 0x6c, 0xf7, 0xd4, 0x2e, - 0xd6, 0xcd, 0x5a, 0xf1, 0x08, 0x2f, 0x6d, 0x13, 0x95, 0x31, 0x2f, 0xd9, 0x4c, 0xaa, 0x9b, 0xe8, - 0xe9, 0x51, 0xa8, 0x4d, 0x1f, 0x11, 0x29, 0x9b, 0x6c, 0x93, 0x8d, 0x45, 0xdb, 0x1e, 0x54, 0x5d, - 0x4c, 0xe2, 0x1e, 0x77, 0xf9, 0xcc, 0x4a, 0xd4, 0x88, 0x95, 0xc4, 0x99, 0x29, 0x1c, 0xc6, 0x26, - 0x36, 0xe3, 0x86, 0x1f, 0xd1, 0x43, 0x10, 0x08, 0x54, 0x1a, 0x56, 0x40, 0xb3, 0x50, 0x45, 0x08, - 0xb7, 0xb4, 0x01, 0x5e, 0xba, 0x0b, 0xd5, 0xa8, 0x7b, 0xd0, 0x02, 0x14, 0x3c, 0x5f, 0x73, 0x7d, - 0x1a, 0x85, 0x05, 0x85, 0x3d, 0x20, 0x09, 0x72, 0xd8, 0xea, 0xd2, 0x2c, 0x57, 0x50, 0xc8, 0x4f, - 0xf4, 0xe9, 0xd1, 0x84, 0x73, 0x74, 0xc2, 0x1f, 0x1f, 0x5f, 0xd1, 0x08, 0x73, 0x7c, 0xde, 0x4b, - 0x4f, 0xc2, 0x4c, 0x64, 0x02, 0x69, 0x5f, 0x5d, 0xff, 0x11, 0x38, 0x39, 0x91, 0x1a, 0xbd, 0x00, - 0x0b, 0x43, 0xcb, 0xb0, 0x7c, 0xec, 0x3a, 0x2e, 0x26, 0x11, 0xcb, 0x5e, 0x55, 0xfb, 0xc7, 0xe9, - 0x23, 0x62, 0x6e, 0x2f, 0xac, 0xcd, 0x58, 0x94, 0xf9, 0xe1, 0xb8, 0xf0, 0x62, 0xa9, 0xf8, 0x4f, - 0xd3, 0xd2, 0xab, 0xaf, 0xbe, 0xfa, 0x6a, 0xb6, 0xfe, 0xc5, 0x29, 0x58, 0x98, 0xb4, 0x67, 0x26, - 0x6e, 0xdf, 0x45, 0x98, 0xb2, 0x86, 0x83, 0x7d, 0xec, 0x52, 0x27, 0x15, 0x14, 0xfe, 0x84, 0x1a, - 0x50, 0x30, 0xb5, 0x7d, 0x6c, 0xd6, 0xf2, 0xe7, 0x32, 0xcb, 0xd5, 0xcb, 0x8f, 0xa5, 0xda, 0x95, - 0x2b, 0x1b, 0x04, 0xa2, 0x30, 0x24, 0x7a, 0x06, 0xf2, 0x3c, 0x45, 0x13, 0x86, 0x8b, 0xe9, 0x18, - 0xc8, 0x5e, 0x52, 0x28, 0x0e, 0x3d, 0x00, 0x25, 0xf2, 0x97, 0xc5, 0xc6, 0x14, 0xb5, 0xb9, 0x48, - 0x04, 0x24, 0x2e, 0xd0, 0x12, 0x14, 0xe9, 0x36, 0xe9, 0x62, 0x51, 0xda, 0x82, 0x67, 0x12, 0x58, - 0x5d, 0xdc, 0xd3, 0x86, 0xa6, 0xaf, 0xde, 0xd6, 0xcc, 0x21, 0xa6, 0x01, 0x5f, 0x52, 0x2a, 0x5c, - 0xf8, 0x39, 0x22, 0x43, 0x67, 0xa1, 0xcc, 0x76, 0x95, 0x61, 0x75, 0xf1, 0x2b, 0x34, 0x7b, 0x16, - 0x14, 0xb6, 0xd1, 0xd6, 0x89, 0x84, 0xbc, 0xfe, 0xa6, 0x67, 0x5b, 0x22, 0x34, 0xe9, 0x2b, 0x88, - 0x80, 0xbe, 0xfe, 0xc9, 0x78, 0xe2, 0x7e, 0x70, 0xf2, 0xf4, 0xe2, 0x31, 0x55, 0xff, 0x56, 0x16, - 0xf2, 0x34, 0x5f, 0xcc, 0x42, 0x79, 0xf7, 0xc5, 0x9d, 0xb6, 0xba, 0xba, 0xbd, 0xd7, 0xdc, 0x68, - 0x4b, 0x19, 0x54, 0x05, 0xa0, 0x82, 0x1b, 0x1b, 0xdb, 0x8d, 0x5d, 0x29, 0x1b, 0x3c, 0xaf, 0x6f, - 0xed, 0x5e, 0xbb, 0x22, 0xe5, 0x02, 0xc0, 0x1e, 0x13, 0xe4, 0xc3, 0x0a, 0x4f, 0x5c, 0x96, 0x0a, - 0x48, 0x82, 0x0a, 0x23, 0x58, 0x7f, 0xa1, 0xbd, 0x7a, 0xed, 0x8a, 0x34, 0x15, 0x95, 0x3c, 0x71, - 0x59, 0x9a, 0x46, 0x33, 0x50, 0xa2, 0x92, 0xe6, 0xf6, 0xf6, 0x86, 0x54, 0x0c, 0x38, 0x3b, 0xbb, - 0xca, 0xfa, 0xd6, 0x9a, 0x54, 0x0a, 0x38, 0xd7, 0x94, 0xed, 0xbd, 0x1d, 0x09, 0x02, 0x86, 0xcd, - 0x76, 0xa7, 0xd3, 0x58, 0x6b, 0x4b, 0xe5, 0x40, 0xa3, 0xf9, 0xe2, 0x6e, 0xbb, 0x23, 0x55, 0x22, - 0x66, 0x3d, 0x71, 0x59, 0x9a, 0x09, 0x5e, 0xd1, 0xde, 0xda, 0xdb, 0x94, 0xaa, 0x68, 0x0e, 0x66, - 0xd8, 0x2b, 0x84, 0x11, 0xb3, 0x31, 0xd1, 0xb5, 0x2b, 0x92, 0x34, 0x32, 0x84, 0xb1, 0xcc, 0x45, - 0x04, 0xd7, 0xae, 0x48, 0xa8, 0xde, 0x82, 0x02, 0x8d, 0x2e, 0x84, 0xa0, 0xba, 0xd1, 0x68, 0xb6, - 0x37, 0xd4, 0xed, 0x9d, 0xdd, 0xf5, 0xed, 0xad, 0xc6, 0x86, 0x94, 0x19, 0xc9, 0x94, 0xf6, 0x67, - 0xf7, 0xd6, 0x95, 0xf6, 0xaa, 0x94, 0x0d, 0xcb, 0x76, 0xda, 0x8d, 0xdd, 0xf6, 0xaa, 0x94, 0xab, - 0xeb, 0xb0, 0x30, 0x29, 0x4f, 0x4e, 0xdc, 0x19, 0xa1, 0x25, 0xce, 0x1e, 0xb1, 0xc4, 0x94, 0x6b, - 0x6c, 0x89, 0xdf, 0xc9, 0xc2, 0xfc, 0x84, 0x5a, 0x31, 0xf1, 0x25, 0xcf, 0x42, 0x81, 0x85, 0x28, - 0xab, 0x9e, 0x8f, 0x4e, 0x2c, 0x3a, 0x34, 0x60, 0xc7, 0x2a, 0x28, 0xc5, 0x85, 0x3b, 0x88, 0xdc, - 0x11, 0x1d, 0x04, 0xa1, 0x18, 0xcb, 0xe9, 0x3f, 0x3c, 0x96, 0xd3, 0x59, 0xd9, 0xbb, 0x96, 0xa6, - 0xec, 0x51, 0xd9, 0xf1, 0x72, 0x7b, 0x61, 0x42, 0x6e, 0xbf, 0x0e, 0x73, 0x63, 0x44, 0xa9, 0x73, - 0xec, 0x6b, 0x19, 0xa8, 0x1d, 0xe5, 0x9c, 0x84, 0x4c, 0x97, 0x8d, 0x64, 0xba, 0xeb, 0x71, 0x0f, - 0x9e, 0x3f, 0x7a, 0x11, 0xc6, 0xd6, 0xfa, 0xad, 0x0c, 0x2c, 0x4e, 0xee, 0x14, 0x27, 0xda, 0xf0, - 0x0c, 0x4c, 0x0d, 0xb0, 0x7f, 0x60, 0x8b, 0x6e, 0xe9, 0xe3, 0x13, 0x6a, 0x30, 0x19, 0x8e, 0x2f, - 0x36, 0x47, 0x85, 0x8b, 0x78, 0xee, 0xa8, 0x76, 0x8f, 0x59, 0x33, 0x66, 0xe9, 0x17, 0xb2, 0x70, - 0x72, 0x22, 0xf9, 0x44, 0x43, 0x1f, 0x04, 0x30, 0x2c, 0x67, 0xe8, 0xb3, 0x8e, 0x88, 0x25, 0xd8, - 0x12, 0x95, 0xd0, 0xe4, 0x45, 0x92, 0xe7, 0xd0, 0x0f, 0xc6, 0x73, 0x74, 0x1c, 0x98, 0x88, 0x2a, - 0x3c, 0x35, 0x32, 0x34, 0x4f, 0x0d, 0x3d, 0x73, 0xc4, 0x4c, 0xc7, 0x02, 0xf3, 0x93, 0x20, 0xe9, - 0xa6, 0x81, 0x2d, 0x5f, 0xf5, 0x7c, 0x17, 0x6b, 0x03, 0xc3, 0xea, 0xd3, 0x0a, 0x52, 0x94, 0x0b, - 0x3d, 0xcd, 0xf4, 0xb0, 0x32, 0xcb, 0x86, 0x3b, 0x62, 0x94, 0x20, 0x68, 0x00, 0xb9, 0x21, 0xc4, - 0x54, 0x04, 0xc1, 0x86, 0x03, 0x44, 0xfd, 0xa7, 0x4b, 0x50, 0x0e, 0xf5, 0xd5, 0xe8, 0x3c, 0x54, - 0x6e, 0x6a, 0xb7, 0x35, 0x55, 0x9c, 0x95, 0x98, 0x27, 0xca, 0x44, 0xb6, 0xc3, 0xcf, 0x4b, 0x9f, - 0x84, 0x05, 0xaa, 0x62, 0x0f, 0x7d, 0xec, 0xaa, 0xba, 0xa9, 0x79, 0x1e, 0x75, 0x5a, 0x91, 0xaa, - 0x22, 0x32, 0xb6, 0x4d, 0x86, 0x5a, 0x62, 0x04, 0x5d, 0x85, 0x79, 0x8a, 0x18, 0x0c, 0x4d, 0xdf, - 0x70, 0x4c, 0xac, 0x92, 0xd3, 0x9b, 0x47, 0x2b, 0x49, 0x60, 0xd9, 0x1c, 0xd1, 0xd8, 0xe4, 0x0a, - 0xc4, 0x22, 0x0f, 0xad, 0xc2, 0x83, 0x14, 0xd6, 0xc7, 0x16, 0x76, 0x35, 0x1f, 0xab, 0xf8, 0xe5, - 0xa1, 0x66, 0x7a, 0xaa, 0x66, 0x75, 0xd5, 0x03, 0xcd, 0x3b, 0xa8, 0x2d, 0x10, 0x82, 0x66, 0xb6, - 0x96, 0x51, 0x4e, 0x13, 0xc5, 0x35, 0xae, 0xd7, 0xa6, 0x6a, 0x0d, 0xab, 0xfb, 0x19, 0xcd, 0x3b, - 0x40, 0x32, 0x2c, 0x52, 0x16, 0xcf, 0x77, 0x0d, 0xab, 0xaf, 0xea, 0x07, 0x58, 0xbf, 0xa5, 0x0e, - 0xfd, 0xde, 0x53, 0xb5, 0x07, 0xc2, 0xef, 0xa7, 0x16, 0x76, 0xa8, 0x4e, 0x8b, 0xa8, 0xec, 0xf9, - 0xbd, 0xa7, 0x50, 0x07, 0x2a, 0x64, 0x31, 0x06, 0xc6, 0x5d, 0xac, 0xf6, 0x6c, 0x97, 0x96, 0xc6, - 0xea, 0x84, 0xd4, 0x14, 0xf2, 0xe0, 0xca, 0x36, 0x07, 0x6c, 0xda, 0x5d, 0x2c, 0x17, 0x3a, 0x3b, - 0xed, 0xf6, 0xaa, 0x52, 0x16, 0x2c, 0x37, 0x6c, 0x97, 0x04, 0x54, 0xdf, 0x0e, 0x1c, 0x5c, 0x66, - 0x01, 0xd5, 0xb7, 0x85, 0x7b, 0xaf, 0xc2, 0xbc, 0xae, 0xb3, 0x39, 0x1b, 0xba, 0xca, 0xcf, 0x58, - 0x5e, 0x4d, 0x8a, 0x38, 0x4b, 0xd7, 0xd7, 0x98, 0x02, 0x8f, 0x71, 0x0f, 0x3d, 0x0d, 0x27, 0x47, - 0xce, 0x0a, 0x03, 0xe7, 0xc6, 0x66, 0x19, 0x87, 0x5e, 0x85, 0x79, 0xe7, 0x70, 0x1c, 0x88, 0x22, - 0x6f, 0x74, 0x0e, 0xe3, 0xb0, 0x27, 0x61, 0xc1, 0x39, 0x70, 0xc6, 0x71, 0x17, 0xc3, 0x38, 0xe4, - 0x1c, 0x38, 0x71, 0xe0, 0x23, 0xf4, 0xc0, 0xed, 0x62, 0x5d, 0xf3, 0x71, 0xb7, 0x76, 0x2a, 0xac, - 0x1e, 0x1a, 0x40, 0x97, 0x40, 0xd2, 0x75, 0x15, 0x5b, 0xda, 0xbe, 0x89, 0x55, 0xcd, 0xc5, 0x96, - 0xe6, 0xd5, 0xce, 0x86, 0x95, 0xab, 0xba, 0xde, 0xa6, 0xa3, 0x0d, 0x3a, 0x88, 0x2e, 0xc2, 0x9c, - 0xbd, 0x7f, 0x53, 0x67, 0x21, 0xa9, 0x3a, 0x2e, 0xee, 0x19, 0xaf, 0xd4, 0x1e, 0xa6, 0xfe, 0x9d, - 0x25, 0x03, 0x34, 0x20, 0x77, 0xa8, 0x18, 0x3d, 0x0a, 0x92, 0xee, 0x1d, 0x68, 0xae, 0x43, 0x73, - 0xb2, 0xe7, 0x68, 0x3a, 0xae, 0x3d, 0xc2, 0x54, 0x99, 0x7c, 0x4b, 0x88, 0xc9, 0x96, 0xf0, 0xee, - 0x18, 0x3d, 0x5f, 0x30, 0x5e, 0x60, 0x5b, 0x82, 0xca, 0x38, 0xdb, 0x32, 0x48, 0xc4, 0x15, 0x91, - 0x17, 0x2f, 0x53, 0xb5, 0xaa, 0x73, 0xe0, 0x84, 0xdf, 0xfb, 0x10, 0xcc, 0x10, 0xcd, 0xd1, 0x4b, - 0x1f, 0x65, 0x0d, 0x99, 0x73, 0x10, 0x7a, 0xe3, 0x15, 0x58, 0x24, 0x4a, 0x03, 0xec, 0x6b, 0x5d, - 0xcd, 0xd7, 0x42, 0xda, 0x9f, 0xa0, 0xda, 0xc4, 0xef, 0x9b, 0x7c, 0x30, 0x62, 0xa7, 0x3b, 0xdc, - 0x3f, 0x0c, 0x22, 0xeb, 0x71, 0x66, 0x27, 0x91, 0x89, 0xd8, 0xfa, 0xc0, 0x9a, 0xee, 0xba, 0x0c, - 0x95, 0x70, 0xe0, 0xa3, 0x12, 0xb0, 0xd0, 0x97, 0x32, 0xa4, 0x0b, 0x6a, 0x6d, 0xaf, 0x92, 0xfe, - 0xe5, 0xa5, 0xb6, 0x94, 0x25, 0x7d, 0xd4, 0xc6, 0xfa, 0x6e, 0x5b, 0x55, 0xf6, 0xb6, 0x76, 0xd7, - 0x37, 0xdb, 0x52, 0x2e, 0xdc, 0xb0, 0x7f, 0x37, 0x0b, 0xd5, 0xe8, 0xd9, 0x0b, 0xfd, 0x20, 0x9c, - 0x12, 0x17, 0x25, 0x1e, 0xf6, 0xd5, 0x3b, 0x86, 0x4b, 0xf7, 0xe2, 0x40, 0x63, 0x75, 0x31, 0x88, - 0x86, 0x05, 0xae, 0xd5, 0xc1, 0xfe, 0xf3, 0x86, 0x4b, 0x76, 0xda, 0x40, 0xf3, 0xd1, 0x06, 0x9c, - 0xb5, 0x6c, 0xd5, 0xf3, 0x35, 0xab, 0xab, 0xb9, 0x5d, 0x75, 0x74, 0x45, 0xa5, 0x6a, 0xba, 0x8e, - 0x3d, 0xcf, 0x66, 0x35, 0x30, 0x60, 0xf9, 0x98, 0x65, 0x77, 0xb8, 0xf2, 0xa8, 0x38, 0x34, 0xb8, - 0x6a, 0x2c, 0x72, 0x73, 0x47, 0x45, 0xee, 0x03, 0x50, 0x1a, 0x68, 0x8e, 0x8a, 0x2d, 0xdf, 0x3d, - 0xa4, 0x1d, 0x77, 0x51, 0x29, 0x0e, 0x34, 0xa7, 0x4d, 0x9e, 0x3f, 0x9c, 0x83, 0xcf, 0xdf, 0xe5, - 0xa0, 0x12, 0xee, 0xba, 0xc9, 0x21, 0x46, 0xa7, 0x05, 0x2a, 0x43, 0x53, 0xd8, 0x43, 0xf7, 0xed, - 0xd1, 0x57, 0x5a, 0xa4, 0x72, 0xc9, 0x53, 0xac, 0x17, 0x56, 0x18, 0x92, 0x74, 0x0d, 0x24, 0xb4, - 0x30, 0xeb, 0x3d, 0x8a, 0x0a, 0x7f, 0x42, 0x6b, 0x30, 0x75, 0xd3, 0xa3, 0xdc, 0x53, 0x94, 0xfb, - 0xe1, 0xfb, 0x73, 0x3f, 0xd7, 0xa1, 0xe4, 0xa5, 0xe7, 0x3a, 0xea, 0xd6, 0xb6, 0xb2, 0xd9, 0xd8, - 0x50, 0x38, 0x1c, 0x9d, 0x86, 0xbc, 0xa9, 0xdd, 0x3d, 0x8c, 0xd6, 0x38, 0x2a, 0x4a, 0xeb, 0xf8, - 0xd3, 0x90, 0xbf, 0x83, 0xb5, 0x5b, 0xd1, 0xca, 0x42, 0x45, 0x1f, 0x60, 0xe8, 0x5f, 0x82, 0x02, - 0xf5, 0x17, 0x02, 0xe0, 0x1e, 0x93, 0x4e, 0xa0, 0x22, 0xe4, 0x5b, 0xdb, 0x0a, 0x09, 0x7f, 0x09, - 0x2a, 0x4c, 0xaa, 0xee, 0xac, 0xb7, 0x5b, 0x6d, 0x29, 0x5b, 0xbf, 0x0a, 0x53, 0xcc, 0x09, 0x64, - 0x6b, 0x04, 0x6e, 0x90, 0x4e, 0xf0, 0x47, 0xce, 0x91, 0x11, 0xa3, 0x7b, 0x9b, 0xcd, 0xb6, 0x22, - 0x65, 0xc3, 0xcb, 0xeb, 0x41, 0x25, 0xdc, 0x70, 0x7f, 0x38, 0x31, 0xf5, 0x9d, 0x0c, 0x94, 0x43, - 0x0d, 0x34, 0xe9, 0x7c, 0x34, 0xd3, 0xb4, 0xef, 0xa8, 0x9a, 0x69, 0x68, 0x1e, 0x0f, 0x0a, 0xa0, - 0xa2, 0x06, 0x91, 0xa4, 0x5d, 0xb4, 0x0f, 0xc5, 0xf8, 0x37, 0x33, 0x20, 0xc5, 0x7b, 0xd7, 0x98, - 0x81, 0x99, 0x8f, 0xd4, 0xc0, 0x37, 0x32, 0x50, 0x8d, 0x36, 0xac, 0x31, 0xf3, 0xce, 0x7f, 0xa4, - 0xe6, 0xfd, 0x7d, 0x16, 0x66, 0x22, 0x6d, 0x6a, 0x5a, 0xeb, 0x5e, 0x86, 0x39, 0xa3, 0x8b, 0x07, - 0x8e, 0xed, 0x63, 0x4b, 0x3f, 0x54, 0x4d, 0x7c, 0x1b, 0x9b, 0xb5, 0x3a, 0x4d, 0x14, 0x97, 0xee, - 0xdf, 0x08, 0xaf, 0xac, 0x8f, 0x70, 0x1b, 0x04, 0x26, 0xcf, 0xaf, 0xaf, 0xb6, 0x37, 0x77, 0xb6, - 0x77, 0xdb, 0x5b, 0xad, 0x17, 0xd5, 0xbd, 0xad, 0x1f, 0xda, 0xda, 0x7e, 0x7e, 0x4b, 0x91, 0x8c, - 0x98, 0xda, 0x07, 0xb8, 0xd5, 0x77, 0x40, 0x8a, 0x1b, 0x85, 0x4e, 0xc1, 0x24, 0xb3, 0xa4, 0x13, - 0x68, 0x1e, 0x66, 0xb7, 0xb6, 0xd5, 0xce, 0xfa, 0x6a, 0x5b, 0x6d, 0xdf, 0xb8, 0xd1, 0x6e, 0xed, - 0x76, 0xd8, 0xd5, 0x46, 0xa0, 0xbd, 0x1b, 0xdd, 0xd4, 0xaf, 0xe7, 0x60, 0x7e, 0x82, 0x25, 0xa8, - 0xc1, 0x0f, 0x25, 0xec, 0x9c, 0xf4, 0x78, 0x1a, 0xeb, 0x57, 0x48, 0x57, 0xb0, 0xa3, 0xb9, 0x3e, - 0x3f, 0xc3, 0x3c, 0x0a, 0xc4, 0x4b, 0x96, 0x6f, 0xf4, 0x0c, 0xec, 0xf2, 0x9b, 0x20, 0x76, 0x52, - 0x99, 0x1d, 0xc9, 0xd9, 0x65, 0xd0, 0x27, 0x00, 0x39, 0xb6, 0x67, 0xf8, 0xc6, 0x6d, 0xac, 0x1a, - 0x96, 0xb8, 0x36, 0x22, 0x27, 0x97, 0xbc, 0x22, 0x89, 0x91, 0x75, 0xcb, 0x0f, 0xb4, 0x2d, 0xdc, - 0xd7, 0x62, 0xda, 0x24, 0x81, 0xe7, 0x14, 0x49, 0x8c, 0x04, 0xda, 0xe7, 0xa1, 0xd2, 0xb5, 0x87, - 0xa4, 0x9d, 0x63, 0x7a, 0xa4, 0x5e, 0x64, 0x94, 0x32, 0x93, 0x05, 0x2a, 0xbc, 0x51, 0x1f, 0xdd, - 0x57, 0x55, 0x94, 0x32, 0x93, 0x31, 0x95, 0x0b, 0x30, 0xab, 0xf5, 0xfb, 0x2e, 0x21, 0x17, 0x44, - 0xec, 0xe8, 0x51, 0x0d, 0xc4, 0x54, 0x71, 0xe9, 0x39, 0x28, 0x0a, 0x3f, 0x90, 0x92, 0x4c, 0x3c, - 0xa1, 0x3a, 0xec, 0x3c, 0x9d, 0x5d, 0x2e, 0x29, 0x45, 0x4b, 0x0c, 0x9e, 0x87, 0x8a, 0xe1, 0xa9, - 0xa3, 0xeb, 0xf7, 0xec, 0xb9, 0xec, 0x72, 0x51, 0x29, 0x1b, 0x5e, 0x70, 0x75, 0x59, 0x7f, 0x2b, - 0x0b, 0xd5, 0xe8, 0xe7, 0x03, 0xb4, 0x0a, 0x45, 0xd3, 0xd6, 0x35, 0x1a, 0x5a, 0xec, 0xdb, 0xd5, - 0x72, 0xc2, 0x17, 0x87, 0x95, 0x0d, 0xae, 0xaf, 0x04, 0xc8, 0xa5, 0xbf, 0xce, 0x40, 0x51, 0x88, - 0xd1, 0x22, 0xe4, 0x1d, 0xcd, 0x3f, 0xa0, 0x74, 0x85, 0x66, 0x56, 0xca, 0x28, 0xf4, 0x99, 0xc8, - 0x3d, 0x47, 0xb3, 0x68, 0x08, 0x70, 0x39, 0x79, 0x26, 0xeb, 0x6a, 0x62, 0xad, 0x4b, 0xcf, 0x35, - 0xf6, 0x60, 0x80, 0x2d, 0xdf, 0x13, 0xeb, 0xca, 0xe5, 0x2d, 0x2e, 0x46, 0x8f, 0xc1, 0x9c, 0xef, - 0x6a, 0x86, 0x19, 0xd1, 0xcd, 0x53, 0x5d, 0x49, 0x0c, 0x04, 0xca, 0x32, 0x9c, 0x16, 0xbc, 0x5d, - 0xec, 0x6b, 0xfa, 0x01, 0xee, 0x8e, 0x40, 0x53, 0xf4, 0xfe, 0xe2, 0x14, 0x57, 0x58, 0xe5, 0xe3, - 0x02, 0x5b, 0xff, 0x5e, 0x06, 0xe6, 0xc4, 0x49, 0xac, 0x1b, 0x38, 0x6b, 0x13, 0x40, 0xb3, 0x2c, - 0xdb, 0x0f, 0xbb, 0x6b, 0x3c, 0x94, 0xc7, 0x70, 0x2b, 0x8d, 0x00, 0xa4, 0x84, 0x08, 0x96, 0x06, - 0x00, 0xa3, 0x91, 0x23, 0xdd, 0x76, 0x16, 0xca, 0xfc, 0xdb, 0x10, 0xfd, 0xc0, 0xc8, 0xce, 0xee, - 0xc0, 0x44, 0xe4, 0xc8, 0x86, 0x16, 0xa0, 0xb0, 0x8f, 0xfb, 0x86, 0xc5, 0x6f, 0x7c, 0xd9, 0x83, - 0xb8, 0x61, 0xc9, 0x07, 0x37, 0x2c, 0xcd, 0xcf, 0xc3, 0xbc, 0x6e, 0x0f, 0xe2, 0xe6, 0x36, 0xa5, - 0xd8, 0xfd, 0x81, 0xf7, 0x99, 0xcc, 0x4b, 0x30, 0x6a, 0x31, 0xff, 0x2f, 0x93, 0xf9, 0x6a, 0x36, - 0xb7, 0xb6, 0xd3, 0xfc, 0x7a, 0x76, 0x69, 0x8d, 0x41, 0x77, 0xc4, 0x4c, 0x15, 0xdc, 0x33, 0xb1, - 0x4e, 0xac, 0x87, 0xaf, 0x3d, 0x06, 0x8f, 0xf7, 0x0d, 0xff, 0x60, 0xb8, 0xbf, 0xa2, 0xdb, 0x83, - 0x4b, 0x7d, 0xbb, 0x6f, 0x8f, 0xbe, 0xa9, 0x92, 0x27, 0xfa, 0x40, 0x7f, 0xf1, 0xef, 0xaa, 0xa5, - 0x40, 0xba, 0x94, 0xf8, 0x11, 0x56, 0xde, 0x82, 0x79, 0xae, 0xac, 0xd2, 0x0f, 0x3b, 0xec, 0x78, - 0x82, 0xee, 0x7b, 0x39, 0x56, 0xfb, 0xe6, 0xbb, 0xb4, 0x5c, 0x2b, 0x73, 0x1c, 0x4a, 0xc6, 0xd8, - 0x09, 0x46, 0x56, 0xe0, 0x64, 0x84, 0x8f, 0x6d, 0x4d, 0xec, 0x26, 0x30, 0x7e, 0x97, 0x33, 0xce, - 0x87, 0x18, 0x3b, 0x1c, 0x2a, 0xb7, 0x60, 0xe6, 0x38, 0x5c, 0x7f, 0xc9, 0xb9, 0x2a, 0x38, 0x4c, - 0xb2, 0x06, 0xb3, 0x94, 0x44, 0x1f, 0x7a, 0xbe, 0x3d, 0xa0, 0x79, 0xef, 0xfe, 0x34, 0x7f, 0xf5, - 0x2e, 0xdb, 0x2b, 0x55, 0x02, 0x6b, 0x05, 0x28, 0x59, 0x06, 0xfa, 0x2d, 0xab, 0x8b, 0x75, 0x33, - 0x81, 0xe1, 0x6d, 0x6e, 0x48, 0xa0, 0x2f, 0x7f, 0x0e, 0x16, 0xc8, 0x6f, 0x9a, 0x96, 0xc2, 0x96, - 0x24, 0xdf, 0xa4, 0xd5, 0xbe, 0xf7, 0x1a, 0xdb, 0x8e, 0xf3, 0x01, 0x41, 0xc8, 0xa6, 0xd0, 0x2a, - 0xf6, 0xb1, 0xef, 0x63, 0xd7, 0x53, 0x35, 0x73, 0x92, 0x79, 0xa1, 0xab, 0x88, 0xda, 0x97, 0xde, - 0x8b, 0xae, 0xe2, 0x1a, 0x43, 0x36, 0x4c, 0x53, 0xde, 0x83, 0x53, 0x13, 0xa2, 0x22, 0x05, 0xe7, - 0xeb, 0x9c, 0x73, 0x61, 0x2c, 0x32, 0x08, 0xed, 0x0e, 0x08, 0x79, 0xb0, 0x96, 0x29, 0x38, 0x7f, - 0x95, 0x73, 0x22, 0x8e, 0x15, 0x4b, 0x4a, 0x18, 0x9f, 0x83, 0xb9, 0xdb, 0xd8, 0xdd, 0xb7, 0x3d, - 0x7e, 0xfd, 0x93, 0x82, 0xee, 0x0d, 0x4e, 0x37, 0xcb, 0x81, 0xf4, 0x3e, 0x88, 0x70, 0x3d, 0x0d, - 0xc5, 0x9e, 0xa6, 0xe3, 0x14, 0x14, 0x5f, 0xe6, 0x14, 0xd3, 0x44, 0x9f, 0x40, 0x1b, 0x50, 0xe9, - 0xdb, 0xbc, 0x32, 0x25, 0xc3, 0xdf, 0xe4, 0xf0, 0xb2, 0xc0, 0x70, 0x0a, 0xc7, 0x76, 0x86, 0x26, - 0x29, 0x5b, 0xc9, 0x14, 0xbf, 0x26, 0x28, 0x04, 0x86, 0x53, 0x1c, 0xc3, 0xad, 0xbf, 0x2e, 0x28, - 0xbc, 0x90, 0x3f, 0x9f, 0x85, 0xb2, 0x6d, 0x99, 0x87, 0xb6, 0x95, 0xc6, 0x88, 0xaf, 0x70, 0x06, - 0xe0, 0x10, 0x42, 0x70, 0x1d, 0x4a, 0x69, 0x17, 0xe2, 0x37, 0xdf, 0x13, 0xdb, 0x43, 0xac, 0xc0, - 0x1a, 0xcc, 0x8a, 0x04, 0x65, 0xd8, 0x56, 0x0a, 0x8a, 0xaf, 0x71, 0x8a, 0x6a, 0x08, 0xc6, 0xa7, - 0xe1, 0x63, 0xcf, 0xef, 0xe3, 0x34, 0x24, 0x6f, 0x89, 0x69, 0x70, 0x08, 0x77, 0xe5, 0x3e, 0xb6, - 0xf4, 0x83, 0x74, 0x0c, 0xbf, 0x25, 0x5c, 0x29, 0x30, 0x84, 0xa2, 0x05, 0x33, 0x03, 0xcd, 0xf5, - 0x0e, 0x34, 0x33, 0xd5, 0x72, 0xfc, 0x36, 0xe7, 0xa8, 0x04, 0x20, 0xee, 0x91, 0xa1, 0x75, 0x1c, - 0x9a, 0xaf, 0x0b, 0x8f, 0x84, 0x60, 0x7c, 0xeb, 0x79, 0x3e, 0xbd, 0x2b, 0x3b, 0x0e, 0xdb, 0xef, - 0x88, 0xad, 0xc7, 0xb0, 0x9b, 0x61, 0xc6, 0xeb, 0x50, 0xf2, 0x8c, 0xbb, 0xa9, 0x68, 0x7e, 0x57, - 0xac, 0x34, 0x05, 0x10, 0xf0, 0x8b, 0x70, 0x7a, 0x62, 0x99, 0x48, 0x41, 0xf6, 0x7b, 0x9c, 0x6c, - 0x71, 0x42, 0xa9, 0xe0, 0x29, 0xe1, 0xb8, 0x94, 0xbf, 0x2f, 0x52, 0x02, 0x8e, 0x71, 0xed, 0x90, - 0xb3, 0x82, 0xa7, 0xf5, 0x8e, 0xe7, 0xb5, 0x3f, 0x10, 0x5e, 0x63, 0xd8, 0x88, 0xd7, 0x76, 0x61, - 0x91, 0x33, 0x1e, 0x6f, 0x5d, 0xbf, 0x21, 0x12, 0x2b, 0x43, 0xef, 0x45, 0x57, 0xf7, 0xf3, 0xb0, - 0x14, 0xb8, 0x53, 0x34, 0xa5, 0x9e, 0x3a, 0xd0, 0x9c, 0x14, 0xcc, 0xdf, 0xe4, 0xcc, 0x22, 0xe3, - 0x07, 0x5d, 0xad, 0xb7, 0xa9, 0x39, 0x84, 0xfc, 0x05, 0xa8, 0x09, 0xf2, 0xa1, 0xe5, 0x62, 0xdd, - 0xee, 0x5b, 0xc6, 0x5d, 0xdc, 0x4d, 0x41, 0xfd, 0x87, 0xb1, 0xa5, 0xda, 0x0b, 0xc1, 0x09, 0xf3, - 0x3a, 0x48, 0x41, 0xaf, 0xa2, 0x1a, 0x03, 0xc7, 0x76, 0xfd, 0x04, 0xc6, 0x3f, 0x12, 0x2b, 0x15, - 0xe0, 0xd6, 0x29, 0x4c, 0x6e, 0x43, 0x95, 0x3e, 0xa6, 0x0d, 0xc9, 0x3f, 0xe6, 0x44, 0x33, 0x23, - 0x14, 0x4f, 0x1c, 0xba, 0x3d, 0x70, 0x34, 0x37, 0x4d, 0xfe, 0xfb, 0x13, 0x91, 0x38, 0x38, 0x84, - 0x27, 0x0e, 0xff, 0xd0, 0xc1, 0xa4, 0xda, 0xa7, 0x60, 0xf8, 0x96, 0x48, 0x1c, 0x02, 0xc3, 0x29, - 0x44, 0xc3, 0x90, 0x82, 0xe2, 0x4f, 0x05, 0x85, 0xc0, 0x10, 0x8a, 0xcf, 0x8e, 0x0a, 0xad, 0x8b, - 0xfb, 0x86, 0xe7, 0xbb, 0xac, 0x15, 0xbe, 0x3f, 0xd5, 0x9f, 0xbd, 0x17, 0x6d, 0xc2, 0x94, 0x10, - 0x94, 0x64, 0x22, 0x7e, 0x85, 0x4a, 0x4f, 0x4a, 0xc9, 0x86, 0x7d, 0x5b, 0x64, 0xa2, 0x10, 0x8c, - 0xd8, 0x16, 0xea, 0x10, 0x89, 0xdb, 0x75, 0x72, 0x3e, 0x48, 0x41, 0xf7, 0x9d, 0x98, 0x71, 0x1d, - 0x81, 0x25, 0x9c, 0xa1, 0xfe, 0x67, 0x68, 0xdd, 0xc2, 0x87, 0xa9, 0xa2, 0xf3, 0xcf, 0x63, 0xfd, - 0xcf, 0x1e, 0x43, 0xb2, 0x1c, 0x32, 0x1b, 0xeb, 0xa7, 0x50, 0xd2, 0x7f, 0x01, 0xd5, 0x7e, 0xf4, - 0x1e, 0x9f, 0x6f, 0xb4, 0x9d, 0x92, 0x37, 0x48, 0x90, 0x47, 0x9b, 0x9e, 0x64, 0xb2, 0xd7, 0xee, - 0x05, 0x71, 0x1e, 0xe9, 0x79, 0xe4, 0x1b, 0x30, 0x13, 0x69, 0x78, 0x92, 0xa9, 0x7e, 0x8c, 0x53, - 0x55, 0xc2, 0xfd, 0x8e, 0x7c, 0x15, 0xf2, 0xa4, 0x79, 0x49, 0x86, 0xff, 0x38, 0x87, 0x53, 0x75, - 0xf9, 0x53, 0x50, 0x14, 0x4d, 0x4b, 0x32, 0xf4, 0x27, 0x38, 0x34, 0x80, 0x10, 0xb8, 0x68, 0x58, - 0x92, 0xe1, 0x3f, 0x29, 0xe0, 0x02, 0x42, 0xe0, 0xe9, 0x5d, 0xf8, 0x17, 0x3f, 0x95, 0xe7, 0x45, - 0x47, 0xf8, 0xee, 0x3a, 0x4c, 0xf3, 0x4e, 0x25, 0x19, 0xfd, 0x05, 0xfe, 0x72, 0x81, 0x90, 0x9f, - 0x84, 0x42, 0x4a, 0x87, 0xff, 0x0c, 0x87, 0x32, 0x7d, 0xb9, 0x05, 0xe5, 0x50, 0x77, 0x92, 0x0c, - 0xff, 0x59, 0x0e, 0x0f, 0xa3, 0x88, 0xe9, 0xbc, 0x3b, 0x49, 0x26, 0xf8, 0x39, 0x61, 0x3a, 0x47, - 0x10, 0xb7, 0x89, 0xc6, 0x24, 0x19, 0xfd, 0xf3, 0xc2, 0xeb, 0x02, 0x22, 0x3f, 0x0b, 0xa5, 0xa0, - 0xd8, 0x24, 0xe3, 0x7f, 0x81, 0xe3, 0x47, 0x18, 0xe2, 0x81, 0x50, 0xb1, 0x4b, 0xa6, 0xf8, 0x45, - 0xe1, 0x81, 0x10, 0x8a, 0x6c, 0xa3, 0x78, 0x03, 0x93, 0xcc, 0xf4, 0x4b, 0x62, 0x1b, 0xc5, 0xfa, - 0x17, 0xb2, 0x9a, 0x34, 0xe7, 0x27, 0x53, 0xfc, 0xb2, 0x58, 0x4d, 0xaa, 0x4f, 0xcc, 0x88, 0x77, - 0x04, 0xc9, 0x1c, 0xbf, 0x22, 0xcc, 0x88, 0x35, 0x04, 0xf2, 0x0e, 0xa0, 0xf1, 0x6e, 0x20, 0x99, - 0xef, 0x8b, 0x9c, 0x6f, 0x6e, 0xac, 0x19, 0x90, 0x9f, 0x87, 0xc5, 0xc9, 0x9d, 0x40, 0x32, 0xeb, - 0x97, 0xee, 0xc5, 0xce, 0x6e, 0xe1, 0x46, 0x40, 0xde, 0x1d, 0x95, 0x94, 0x70, 0x17, 0x90, 0x4c, - 0xfb, 0xfa, 0xbd, 0x68, 0xe2, 0x0e, 0x37, 0x01, 0x72, 0x03, 0x60, 0x54, 0x80, 0x93, 0xb9, 0xde, - 0xe0, 0x5c, 0x21, 0x10, 0xd9, 0x1a, 0xbc, 0xfe, 0x26, 0xe3, 0xbf, 0x2c, 0xb6, 0x06, 0x47, 0x90, - 0xad, 0x21, 0x4a, 0x6f, 0x32, 0xfa, 0x4d, 0xb1, 0x35, 0x04, 0x84, 0x44, 0x76, 0xa8, 0xba, 0x25, - 0x33, 0x7c, 0x45, 0x44, 0x76, 0x08, 0x25, 0x6f, 0xc1, 0xdc, 0x58, 0x41, 0x4c, 0xa6, 0xfa, 0x2a, - 0xa7, 0x92, 0xe2, 0xf5, 0x30, 0x5c, 0xbc, 0x78, 0x31, 0x4c, 0x66, 0xfb, 0x8d, 0x58, 0xf1, 0xe2, - 0xb5, 0x50, 0xbe, 0x0e, 0x45, 0x6b, 0x68, 0x9a, 0x64, 0xf3, 0xa0, 0xfb, 0xff, 0xe7, 0x5e, 0xed, - 0x9f, 0xdf, 0xe7, 0xde, 0x11, 0x00, 0xf9, 0x2a, 0x14, 0xf0, 0x60, 0x1f, 0x77, 0x93, 0x90, 0xff, - 0xf2, 0xbe, 0x48, 0x98, 0x44, 0x5b, 0x7e, 0x16, 0x80, 0x5d, 0x8d, 0xd0, 0xcf, 0x7e, 0x09, 0xd8, - 0x7f, 0x7d, 0x9f, 0xff, 0x4f, 0xcd, 0x08, 0x32, 0x22, 0x60, 0xff, 0xa1, 0x73, 0x7f, 0x82, 0xf7, - 0xa2, 0x04, 0x74, 0x45, 0x9e, 0x86, 0xe9, 0x9b, 0x9e, 0x6d, 0xf9, 0x5a, 0x3f, 0x09, 0xfd, 0x6f, - 0x1c, 0x2d, 0xf4, 0x89, 0xc3, 0x06, 0xb6, 0x8b, 0x7d, 0xad, 0xef, 0x25, 0x61, 0xff, 0x9d, 0x63, - 0x03, 0x00, 0x01, 0xeb, 0x9a, 0xe7, 0xa7, 0x99, 0xf7, 0x7f, 0x08, 0xb0, 0x00, 0x10, 0xa3, 0xc9, - 0xef, 0x5b, 0xf8, 0x30, 0x09, 0xfb, 0x9f, 0xc2, 0x68, 0xae, 0x2f, 0x7f, 0x0a, 0x4a, 0xe4, 0x27, - 0xfb, 0x47, 0xb9, 0x04, 0xf0, 0x7f, 0x71, 0xf0, 0x08, 0x41, 0xde, 0xec, 0xf9, 0x5d, 0xdf, 0x48, - 0x76, 0xf6, 0x7f, 0xf3, 0x95, 0x16, 0xfa, 0x72, 0x03, 0xca, 0x9e, 0xdf, 0xed, 0x0e, 0x79, 0x7f, - 0x9a, 0x00, 0xff, 0x9f, 0xf7, 0x83, 0x2b, 0x8b, 0x00, 0x43, 0x56, 0xfb, 0xce, 0x2d, 0xdf, 0xb1, - 0xe9, 0x67, 0x8e, 0x24, 0x86, 0x7b, 0x9c, 0x21, 0x04, 0x69, 0xb6, 0x27, 0x5f, 0xdf, 0xc2, 0x9a, - 0xbd, 0x66, 0xb3, 0x8b, 0xdb, 0x97, 0xea, 0xc9, 0x37, 0xb0, 0xf0, 0xbf, 0x39, 0x90, 0x46, 0x29, - 0x97, 0xdf, 0xc5, 0xb2, 0x44, 0x45, 0x0a, 0xb1, 0xb7, 0x74, 0xbc, 0x6b, 0xdc, 0xfa, 0x45, 0x28, - 0xb5, 0x48, 0x4c, 0x19, 0x16, 0x76, 0xd1, 0x22, 0x4c, 0xd1, 0x79, 0xfc, 0x00, 0xfd, 0x0e, 0x99, - 0x53, 0xf8, 0xd3, 0xc5, 0x42, 0xb1, 0x2b, 0xbd, 0x9d, 0xa9, 0x5f, 0x80, 0x42, 0x67, 0x40, 0x3a, - 0xde, 0x33, 0x00, 0xf4, 0x07, 0x1d, 0xe6, 0xba, 0x21, 0x49, 0xfd, 0x3c, 0xe4, 0x9a, 0x46, 0x1f, - 0x2d, 0x41, 0xb1, 0x69, 0xf4, 0xc3, 0x4a, 0xc1, 0x73, 0xfd, 0x65, 0xa8, 0x34, 0x8d, 0xfe, 0xf8, - 0xab, 0x2f, 0xd3, 0x1b, 0x72, 0xf1, 0xea, 0xcb, 0xa8, 0x06, 0xd3, 0xcc, 0x88, 0x27, 0x6a, 0x33, - 0x74, 0x40, 0x3c, 0xa2, 0x87, 0x20, 0xb3, 0x49, 0x69, 0xcb, 0x97, 0x4f, 0xae, 0x8c, 0x1c, 0xb0, - 0x12, 0x70, 0x2a, 0x99, 0xcd, 0x8b, 0xf9, 0x62, 0x55, 0x9a, 0xbb, 0x98, 0x2f, 0x82, 0x34, 0x23, - 0x3f, 0xce, 0x5f, 0xd1, 0x40, 0x93, 0xf5, 0x6b, 0x5d, 0xfa, 0x29, 0x88, 0x2b, 0xc9, 0x9f, 0xe6, - 0xea, 0xcd, 0xa3, 0xd4, 0x31, 0x7d, 0xf7, 0x5c, 0x78, 0x90, 0xfa, 0x80, 0x33, 0x34, 0xe5, 0x67, - 0x38, 0x43, 0xeb, 0x28, 0x86, 0x1e, 0x65, 0x98, 0x0d, 0x0f, 0x36, 0x8d, 0x3e, 0xc7, 0xb7, 0x9a, - 0x95, 0x6f, 0xfc, 0xc3, 0x99, 0xcc, 0xdf, 0xbc, 0x73, 0xe6, 0xc4, 0xdf, 0xbe, 0x73, 0xe6, 0xc4, - 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0xb3, 0x33, 0x40, 0xb4, 0xee, 0x34, 0x00, 0x00, - } - r := bytes.NewReader(gzipped) - gzipr, err := compress_gzip.NewReader(r) - if err != nil { - panic(err) - } - ungzipped, err := io_ioutil.ReadAll(gzipr) - if err != nil { - panic(err) - } - if err := github_com_gogo_protobuf_proto.Unmarshal(ungzipped, d); err != nil { - panic(err) - } - return d -} diff --git a/parser/proto/prototests/extensions.proto b/parser/proto/prototests/extensions.proto deleted file mode 100644 index f3d3e21..0000000 --- a/parser/proto/prototests/extensions.proto +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2016 Walter Schulze -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto2"; -package prototests; - -import "github.com/gogo/protobuf/gogoproto/gogo.proto"; -option (gogoproto.description_all) = true; -option (gogoproto.goproto_unkeyed_all) = false; -option (gogoproto.goproto_sizecache_all) = false; - -//Container contains a field and some extensions. -message Container { - optional int64 Field1 = 1; - extensions 100 to 199; -} - -extend Container { - optional double FieldA = 100; - optional Small FieldB = 101; - optional Big FieldC = 102; -} - -message Small { - optional int64 SmallField = 1; -} - -message Big { - optional int64 BigField = 1; -} - -//BigContainer contains 3 fields and two extension ranges. -message BigContainer { - optional int64 Field2 = 2; - extensions 14 to 16; - optional int64 Field13 = 13; - extensions 10 to 12; - optional Container M = 1; -} \ No newline at end of file diff --git a/parser/proto/prototests/msg.pb.go b/parser/proto/prototests/msg.pb.go deleted file mode 100644 index eaef39a..0000000 --- a/parser/proto/prototests/msg.pb.go +++ /dev/null @@ -1,704 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: msg.proto - -package prototests - -import ( - bytes "bytes" - compress_gzip "compress/gzip" - fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_protoc_gen_gogo_descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" - io_ioutil "io/ioutil" - math "math" - reflect "reflect" - strings "strings" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package - -// BigMsg contains a field and a message field. -type BigMsg struct { - Field *int64 `protobuf:"varint,1,opt,name=Field" json:"Field,omitempty"` - Msg *SmallMsg `protobuf:"bytes,3,opt,name=Msg" json:"Msg,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *BigMsg) Reset() { *m = BigMsg{} } -func (m *BigMsg) String() string { return proto.CompactTextString(m) } -func (*BigMsg) ProtoMessage() {} -func (*BigMsg) Descriptor() ([]byte, []int) { - return fileDescriptor_c06e4cca6c2cc899, []int{0} -} -func (m *BigMsg) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_BigMsg.Unmarshal(m, b) -} -func (m *BigMsg) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_BigMsg.Marshal(b, m, deterministic) -} -func (m *BigMsg) XXX_Merge(src proto.Message) { - xxx_messageInfo_BigMsg.Merge(m, src) -} -func (m *BigMsg) XXX_Size() int { - return xxx_messageInfo_BigMsg.Size(m) -} -func (m *BigMsg) XXX_DiscardUnknown() { - xxx_messageInfo_BigMsg.DiscardUnknown(m) -} - -var xxx_messageInfo_BigMsg proto.InternalMessageInfo - -func (m *BigMsg) GetField() int64 { - if m != nil && m.Field != nil { - return *m.Field - } - return 0 -} - -func (m *BigMsg) GetMsg() *SmallMsg { - if m != nil { - return m.Msg - } - return nil -} - -// SmallMsg only contains some native fields. -type SmallMsg struct { - ScarBusStop *string `protobuf:"bytes,1,opt,name=ScarBusStop" json:"ScarBusStop,omitempty"` - FlightParachute []uint32 `protobuf:"fixed32,12,rep,name=FlightParachute" json:"FlightParachute,omitempty"` - MapShark *string `protobuf:"bytes,18,opt,name=MapShark" json:"MapShark,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *SmallMsg) Reset() { *m = SmallMsg{} } -func (m *SmallMsg) String() string { return proto.CompactTextString(m) } -func (*SmallMsg) ProtoMessage() {} -func (*SmallMsg) Descriptor() ([]byte, []int) { - return fileDescriptor_c06e4cca6c2cc899, []int{1} -} -func (m *SmallMsg) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SmallMsg.Unmarshal(m, b) -} -func (m *SmallMsg) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SmallMsg.Marshal(b, m, deterministic) -} -func (m *SmallMsg) XXX_Merge(src proto.Message) { - xxx_messageInfo_SmallMsg.Merge(m, src) -} -func (m *SmallMsg) XXX_Size() int { - return xxx_messageInfo_SmallMsg.Size(m) -} -func (m *SmallMsg) XXX_DiscardUnknown() { - xxx_messageInfo_SmallMsg.DiscardUnknown(m) -} - -var xxx_messageInfo_SmallMsg proto.InternalMessageInfo - -func (m *SmallMsg) GetScarBusStop() string { - if m != nil && m.ScarBusStop != nil { - return *m.ScarBusStop - } - return "" -} - -func (m *SmallMsg) GetFlightParachute() []uint32 { - if m != nil { - return m.FlightParachute - } - return nil -} - -func (m *SmallMsg) GetMapShark() string { - if m != nil && m.MapShark != nil { - return *m.MapShark - } - return "" -} - -// Packed contains some repeated packed fields. -type Packed struct { - Ints []int64 `protobuf:"varint,4,rep,packed,name=Ints" json:"Ints,omitempty"` - Floats []float64 `protobuf:"fixed64,5,rep,packed,name=Floats" json:"Floats,omitempty"` - Uints []uint32 `protobuf:"varint,6,rep,packed,name=Uints" json:"Uints,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *Packed) Reset() { *m = Packed{} } -func (m *Packed) String() string { return proto.CompactTextString(m) } -func (*Packed) ProtoMessage() {} -func (*Packed) Descriptor() ([]byte, []int) { - return fileDescriptor_c06e4cca6c2cc899, []int{2} -} -func (m *Packed) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Packed.Unmarshal(m, b) -} -func (m *Packed) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Packed.Marshal(b, m, deterministic) -} -func (m *Packed) XXX_Merge(src proto.Message) { - xxx_messageInfo_Packed.Merge(m, src) -} -func (m *Packed) XXX_Size() int { - return xxx_messageInfo_Packed.Size(m) -} -func (m *Packed) XXX_DiscardUnknown() { - xxx_messageInfo_Packed.DiscardUnknown(m) -} - -var xxx_messageInfo_Packed proto.InternalMessageInfo - -func (m *Packed) GetInts() []int64 { - if m != nil { - return m.Ints - } - return nil -} - -func (m *Packed) GetFloats() []float64 { - if m != nil { - return m.Floats - } - return nil -} - -func (m *Packed) GetUints() []uint32 { - if m != nil { - return m.Uints - } - return nil -} - -func init() { - proto.RegisterType((*BigMsg)(nil), "prototests.BigMsg") - proto.RegisterType((*SmallMsg)(nil), "prototests.SmallMsg") - proto.RegisterType((*Packed)(nil), "prototests.Packed") -} - -func init() { proto.RegisterFile("msg.proto", fileDescriptor_c06e4cca6c2cc899) } - -var fileDescriptor_c06e4cca6c2cc899 = []byte{ - // 282 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0x8d, 0x3f, 0x4e, 0xc3, 0x30, - 0x1c, 0x85, 0x6b, 0xdc, 0x86, 0xf6, 0x57, 0x10, 0xc8, 0x8a, 0x90, 0x95, 0x21, 0xb2, 0x32, 0x20, - 0x2f, 0xa4, 0x12, 0x47, 0xc8, 0x10, 0x89, 0x21, 0x52, 0x95, 0x08, 0x76, 0x37, 0x0d, 0x4e, 0xd4, - 0x04, 0x47, 0xb6, 0x73, 0x2f, 0x8e, 0xc2, 0xc8, 0x5a, 0x7a, 0x01, 0x46, 0x46, 0x54, 0x87, 0x7f, - 0x62, 0xb2, 0xbf, 0xef, 0xf9, 0x3d, 0xc3, 0xa2, 0x33, 0x32, 0xee, 0xb5, 0xb2, 0x8a, 0x80, 0x3b, - 0x6c, 0x65, 0xac, 0x09, 0x6e, 0x64, 0x63, 0xeb, 0x61, 0x13, 0x97, 0xaa, 0x5b, 0x49, 0x25, 0xd5, - 0xca, 0x65, 0x9b, 0xe1, 0xd1, 0x91, 0x03, 0x77, 0x1b, 0xab, 0x51, 0x0a, 0x5e, 0xd2, 0xc8, 0xcc, - 0x48, 0xe2, 0xc3, 0x2c, 0x6d, 0xaa, 0x76, 0x4b, 0x11, 0x43, 0x1c, 0xe7, 0x23, 0x90, 0x6b, 0xc0, - 0x99, 0x91, 0x14, 0x33, 0xc4, 0x97, 0xb7, 0x7e, 0xfc, 0xfb, 0x51, 0x5c, 0x74, 0xa2, 0x6d, 0x33, - 0x23, 0xf3, 0xe3, 0x83, 0x48, 0xc3, 0xfc, 0x5b, 0x10, 0x06, 0xcb, 0xa2, 0x14, 0x3a, 0x19, 0x4c, - 0x61, 0x55, 0xef, 0xf6, 0x16, 0xf9, 0x5f, 0x45, 0x38, 0x5c, 0xa4, 0x6d, 0x23, 0x6b, 0xbb, 0x16, - 0x5a, 0x94, 0xf5, 0x60, 0x2b, 0x7a, 0xc6, 0x30, 0x3f, 0xcd, 0xff, 0x6b, 0x12, 0xc0, 0x3c, 0x13, - 0x7d, 0x51, 0x0b, 0xbd, 0xa3, 0xc4, 0x0d, 0xfd, 0x70, 0xf4, 0x00, 0xde, 0x5a, 0x94, 0xbb, 0x6a, - 0x4b, 0xae, 0x60, 0x7a, 0xf7, 0x64, 0x0d, 0x9d, 0x32, 0xcc, 0x71, 0x72, 0x72, 0x89, 0x72, 0xc7, - 0x24, 0x00, 0x2f, 0x6d, 0x95, 0xb0, 0x86, 0xce, 0x18, 0xe6, 0xc8, 0x25, 0x5f, 0x86, 0x50, 0x98, - 0xdd, 0x37, 0xc7, 0x92, 0xc7, 0x30, 0x3f, 0x77, 0xd1, 0x28, 0x12, 0xff, 0x7d, 0x1f, 0xa2, 0x8f, - 0x7d, 0x88, 0x9e, 0xdf, 0x42, 0xf4, 0x72, 0x08, 0x27, 0xaf, 0x87, 0x70, 0xf2, 0x19, 0x00, 0x00, - 0xff, 0xff, 0x8b, 0xe2, 0xad, 0x70, 0x70, 0x01, 0x00, 0x00, -} - -func (this *BigMsg) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { - return MsgDescription() -} -func (this *SmallMsg) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { - return MsgDescription() -} -func (this *Packed) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { - return MsgDescription() -} -func MsgDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { - d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} - var gzipped = []byte{ - // 3979 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x4b, 0x70, 0x23, 0xd7, - 0x75, 0x15, 0xbe, 0x04, 0x2e, 0x40, 0xb0, 0xf9, 0x48, 0x71, 0x30, 0x94, 0x35, 0xc3, 0x81, 0x7e, - 0x94, 0x64, 0x71, 0x5c, 0xa3, 0x99, 0x91, 0x84, 0x89, 0xad, 0x80, 0x24, 0x48, 0x43, 0x21, 0x48, - 0xb8, 0x41, 0xea, 0xe7, 0x4a, 0x75, 0x3d, 0x36, 0x1e, 0x81, 0x9e, 0x69, 0x74, 0xb7, 0xbb, 0x1b, - 0x33, 0xe2, 0x54, 0x16, 0x4a, 0x29, 0x9f, 0x72, 0xe5, 0xff, 0xa9, 0x8a, 0xad, 0xc8, 0x4a, 0xec, - 0x54, 0xac, 0xc4, 0xf9, 0xd9, 0xf9, 0x38, 0xb1, 0xb3, 0xc9, 0xc6, 0x89, 0x57, 0xa9, 0x78, 0x97, - 0x45, 0x16, 0x71, 0xa4, 0xaa, 0xfc, 0x94, 0x44, 0x49, 0x66, 0xe1, 0x2a, 0x6d, 0x5c, 0xef, 0xd7, - 0x68, 0x34, 0xc0, 0x69, 0xd0, 0x55, 0x92, 0x57, 0x64, 0xdf, 0x77, 0xcf, 0xe9, 0xfb, 0xee, 0xbb, - 0xef, 0xde, 0xfb, 0x5e, 0x03, 0xbe, 0x5d, 0x85, 0x95, 0xae, 0x6d, 0x77, 0x4d, 0x72, 0xd1, 0x71, - 0x6d, 0xdf, 0x3e, 0x1c, 0x1c, 0x5d, 0xec, 0x10, 0x4f, 0x77, 0x0d, 0xc7, 0xb7, 0xdd, 0x35, 0x26, - 0x43, 0x73, 0x5c, 0x63, 0x4d, 0x6a, 0x54, 0x9a, 0x30, 0xbf, 0x65, 0x98, 0x64, 0x33, 0x50, 0x6c, - 0x13, 0x1f, 0x3d, 0x0d, 0xe9, 0x23, 0xc3, 0x24, 0xe5, 0xc4, 0x4a, 0x6a, 0xb5, 0x70, 0xe9, 0xc1, - 0xb5, 0x08, 0x68, 0x6d, 0x14, 0xd1, 0xa2, 0x62, 0x95, 0x21, 0x2a, 0xef, 0xa4, 0x61, 0x61, 0xc2, - 0x28, 0x42, 0x90, 0xb6, 0x70, 0x9f, 0x32, 0x26, 0x56, 0xf3, 0x2a, 0xfb, 0x1f, 0x95, 0x61, 0xc6, - 0xc1, 0xfa, 0x0d, 0xdc, 0x25, 0xe5, 0x24, 0x13, 0xcb, 0x47, 0x74, 0x0e, 0xa0, 0x43, 0x1c, 0x62, - 0x75, 0x88, 0xa5, 0x1f, 0x97, 0x53, 0x2b, 0xa9, 0xd5, 0xbc, 0x1a, 0x92, 0xa0, 0xc7, 0x61, 0xde, - 0x19, 0x1c, 0x9a, 0x86, 0xae, 0x85, 0xd4, 0x60, 0x25, 0xb5, 0x9a, 0x51, 0x15, 0x3e, 0xb0, 0x39, - 0x54, 0x7e, 0x04, 0xe6, 0x6e, 0x11, 0x7c, 0x23, 0xac, 0x5a, 0x60, 0xaa, 0x25, 0x2a, 0x0e, 0x29, - 0x6e, 0x40, 0xb1, 0x4f, 0x3c, 0x0f, 0x77, 0x89, 0xe6, 0x1f, 0x3b, 0xa4, 0x9c, 0x66, 0xb3, 0x5f, - 0x19, 0x9b, 0x7d, 0x74, 0xe6, 0x05, 0x81, 0xda, 0x3f, 0x76, 0x08, 0xaa, 0x41, 0x9e, 0x58, 0x83, - 0x3e, 0x67, 0xc8, 0x9c, 0xe0, 0xbf, 0xba, 0x35, 0xe8, 0x47, 0x59, 0x72, 0x14, 0x26, 0x28, 0x66, - 0x3c, 0xe2, 0xde, 0x34, 0x74, 0x52, 0xce, 0x32, 0x82, 0x47, 0xc6, 0x08, 0xda, 0x7c, 0x3c, 0xca, - 0x21, 0x71, 0x68, 0x03, 0xf2, 0xe4, 0x15, 0x9f, 0x58, 0x9e, 0x61, 0x5b, 0xe5, 0x19, 0x46, 0xf2, - 0xd0, 0x84, 0x55, 0x24, 0x66, 0x27, 0x4a, 0x31, 0xc4, 0xa1, 0xab, 0x30, 0x63, 0x3b, 0xbe, 0x61, - 0x5b, 0x5e, 0x39, 0xb7, 0x92, 0x58, 0x2d, 0x5c, 0xfa, 0xc8, 0xc4, 0x40, 0xd8, 0xe3, 0x3a, 0xaa, - 0x54, 0x46, 0x0d, 0x50, 0x3c, 0x7b, 0xe0, 0xea, 0x44, 0xd3, 0xed, 0x0e, 0xd1, 0x0c, 0xeb, 0xc8, - 0x2e, 0xe7, 0x19, 0xc1, 0xf9, 0xf1, 0x89, 0x30, 0xc5, 0x0d, 0xbb, 0x43, 0x1a, 0xd6, 0x91, 0xad, - 0x96, 0xbc, 0x91, 0x67, 0xb4, 0x04, 0x59, 0xef, 0xd8, 0xf2, 0xf1, 0x2b, 0xe5, 0x22, 0x8b, 0x10, - 0xf1, 0x54, 0xf9, 0x46, 0x16, 0xe6, 0xa6, 0x09, 0xb1, 0x6b, 0x90, 0x39, 0xa2, 0xb3, 0x2c, 0x27, - 0x4f, 0xe3, 0x03, 0x8e, 0x19, 0x75, 0x62, 0xf6, 0x07, 0x74, 0x62, 0x0d, 0x0a, 0x16, 0xf1, 0x7c, - 0xd2, 0xe1, 0x11, 0x91, 0x9a, 0x32, 0xa6, 0x80, 0x83, 0xc6, 0x43, 0x2a, 0xfd, 0x03, 0x85, 0xd4, - 0x8b, 0x30, 0x17, 0x98, 0xa4, 0xb9, 0xd8, 0xea, 0xca, 0xd8, 0xbc, 0x18, 0x67, 0xc9, 0x5a, 0x5d, - 0xe2, 0x54, 0x0a, 0x53, 0x4b, 0x64, 0xe4, 0x19, 0x6d, 0x02, 0xd8, 0x16, 0xb1, 0x8f, 0xb4, 0x0e, - 0xd1, 0xcd, 0x72, 0xee, 0x04, 0x2f, 0xed, 0x51, 0x95, 0x31, 0x2f, 0xd9, 0x5c, 0xaa, 0x9b, 0xe8, - 0x99, 0x61, 0xa8, 0xcd, 0x9c, 0x10, 0x29, 0x4d, 0xbe, 0xc9, 0xc6, 0xa2, 0xed, 0x00, 0x4a, 0x2e, - 0xa1, 0x71, 0x4f, 0x3a, 0x62, 0x66, 0x79, 0x66, 0xc4, 0x5a, 0xec, 0xcc, 0x54, 0x01, 0xe3, 0x13, - 0x9b, 0x75, 0xc3, 0x8f, 0xe8, 0x01, 0x08, 0x04, 0x1a, 0x0b, 0x2b, 0x60, 0x59, 0xa8, 0x28, 0x85, - 0xbb, 0xb8, 0x4f, 0x96, 0x6f, 0x43, 0x69, 0xd4, 0x3d, 0x68, 0x11, 0x32, 0x9e, 0x8f, 0x5d, 0x9f, - 0x45, 0x61, 0x46, 0xe5, 0x0f, 0x48, 0x81, 0x14, 0xb1, 0x3a, 0x2c, 0xcb, 0x65, 0x54, 0xfa, 0x2f, - 0xfa, 0xd1, 0xe1, 0x84, 0x53, 0x6c, 0xc2, 0x0f, 0x8f, 0xaf, 0xe8, 0x08, 0x73, 0x74, 0xde, 0xcb, - 0x4f, 0xc1, 0xec, 0xc8, 0x04, 0xa6, 0x7d, 0x75, 0xe5, 0x27, 0xe0, 0xde, 0x89, 0xd4, 0xe8, 0x45, - 0x58, 0x1c, 0x58, 0x86, 0xe5, 0x13, 0xd7, 0x71, 0x09, 0x8d, 0x58, 0xfe, 0xaa, 0xf2, 0xbf, 0xce, - 0x9c, 0x10, 0x73, 0x07, 0x61, 0x6d, 0xce, 0xa2, 0x2e, 0x0c, 0xc6, 0x85, 0x8f, 0xe5, 0x73, 0xff, - 0x36, 0xa3, 0xbc, 0xfa, 0xea, 0xab, 0xaf, 0x26, 0x2b, 0x9f, 0xcb, 0xc2, 0xe2, 0xa4, 0x3d, 0x33, - 0x71, 0xfb, 0x2e, 0x41, 0xd6, 0x1a, 0xf4, 0x0f, 0x89, 0xcb, 0x9c, 0x94, 0x51, 0xc5, 0x13, 0xaa, - 0x41, 0xc6, 0xc4, 0x87, 0xc4, 0x2c, 0xa7, 0x57, 0x12, 0xab, 0xa5, 0x4b, 0x8f, 0x4f, 0xb5, 0x2b, - 0xd7, 0x76, 0x28, 0x44, 0xe5, 0x48, 0xf4, 0x09, 0x48, 0x8b, 0x14, 0x4d, 0x19, 0x1e, 0x9b, 0x8e, - 0x81, 0xee, 0x25, 0x95, 0xe1, 0xd0, 0x7d, 0x90, 0xa7, 0x7f, 0x79, 0x6c, 0x64, 0x99, 0xcd, 0x39, - 0x2a, 0xa0, 0x71, 0x81, 0x96, 0x21, 0xc7, 0xb6, 0x49, 0x87, 0xc8, 0xd2, 0x16, 0x3c, 0xd3, 0xc0, - 0xea, 0x90, 0x23, 0x3c, 0x30, 0x7d, 0xed, 0x26, 0x36, 0x07, 0x84, 0x05, 0x7c, 0x5e, 0x2d, 0x0a, - 0xe1, 0xf3, 0x54, 0x86, 0xce, 0x43, 0x81, 0xef, 0x2a, 0xc3, 0xea, 0x90, 0x57, 0x58, 0xf6, 0xcc, - 0xa8, 0x7c, 0xa3, 0x35, 0xa8, 0x84, 0xbe, 0xfe, 0xba, 0x67, 0x5b, 0x32, 0x34, 0xd9, 0x2b, 0xa8, - 0x80, 0xbd, 0xfe, 0xa9, 0x68, 0xe2, 0xbe, 0x7f, 0xf2, 0xf4, 0xa2, 0x31, 0x55, 0xf9, 0x7a, 0x12, - 0xd2, 0x2c, 0x5f, 0xcc, 0x41, 0x61, 0xff, 0xa5, 0x56, 0x5d, 0xdb, 0xdc, 0x3b, 0x58, 0xdf, 0xa9, - 0x2b, 0x09, 0x54, 0x02, 0x60, 0x82, 0xad, 0x9d, 0xbd, 0xda, 0xbe, 0x92, 0x0c, 0x9e, 0x1b, 0xbb, - 0xfb, 0x57, 0x2f, 0x2b, 0xa9, 0x00, 0x70, 0xc0, 0x05, 0xe9, 0xb0, 0xc2, 0x93, 0x97, 0x94, 0x0c, - 0x52, 0xa0, 0xc8, 0x09, 0x1a, 0x2f, 0xd6, 0x37, 0xaf, 0x5e, 0x56, 0xb2, 0xa3, 0x92, 0x27, 0x2f, - 0x29, 0x33, 0x68, 0x16, 0xf2, 0x4c, 0xb2, 0xbe, 0xb7, 0xb7, 0xa3, 0xe4, 0x02, 0xce, 0xf6, 0xbe, - 0xda, 0xd8, 0xdd, 0x56, 0xf2, 0x01, 0xe7, 0xb6, 0xba, 0x77, 0xd0, 0x52, 0x20, 0x60, 0x68, 0xd6, - 0xdb, 0xed, 0xda, 0x76, 0x5d, 0x29, 0x04, 0x1a, 0xeb, 0x2f, 0xed, 0xd7, 0xdb, 0x4a, 0x71, 0xc4, - 0xac, 0x27, 0x2f, 0x29, 0xb3, 0xc1, 0x2b, 0xea, 0xbb, 0x07, 0x4d, 0xa5, 0x84, 0xe6, 0x61, 0x96, - 0xbf, 0x42, 0x1a, 0x31, 0x17, 0x11, 0x5d, 0xbd, 0xac, 0x28, 0x43, 0x43, 0x38, 0xcb, 0xfc, 0x88, - 0xe0, 0xea, 0x65, 0x05, 0x55, 0x36, 0x20, 0xc3, 0xa2, 0x0b, 0x21, 0x28, 0xed, 0xd4, 0xd6, 0xeb, - 0x3b, 0xda, 0x5e, 0x6b, 0xbf, 0xb1, 0xb7, 0x5b, 0xdb, 0x51, 0x12, 0x43, 0x99, 0x5a, 0xff, 0xd4, - 0x41, 0x43, 0xad, 0x6f, 0x2a, 0xc9, 0xb0, 0xac, 0x55, 0xaf, 0xed, 0xd7, 0x37, 0x95, 0x54, 0x45, - 0x87, 0xc5, 0x49, 0x79, 0x72, 0xe2, 0xce, 0x08, 0x2d, 0x71, 0xf2, 0x84, 0x25, 0x66, 0x5c, 0x63, - 0x4b, 0xfc, 0x76, 0x12, 0x16, 0x26, 0xd4, 0x8a, 0x89, 0x2f, 0x79, 0x16, 0x32, 0x3c, 0x44, 0x79, - 0xf5, 0x7c, 0x74, 0x62, 0xd1, 0x61, 0x01, 0x3b, 0x56, 0x41, 0x19, 0x2e, 0xdc, 0x41, 0xa4, 0x4e, - 0xe8, 0x20, 0x28, 0xc5, 0x58, 0x4e, 0xff, 0xf1, 0xb1, 0x9c, 0xce, 0xcb, 0xde, 0xd5, 0x69, 0xca, - 0x1e, 0x93, 0x9d, 0x2e, 0xb7, 0x67, 0x26, 0xe4, 0xf6, 0x6b, 0x30, 0x3f, 0x46, 0x34, 0x75, 0x8e, - 0x7d, 0x2d, 0x01, 0xe5, 0x93, 0x9c, 0x13, 0x93, 0xe9, 0x92, 0x23, 0x99, 0xee, 0x5a, 0xd4, 0x83, - 0x17, 0x4e, 0x5e, 0x84, 0xb1, 0xb5, 0x7e, 0x2b, 0x01, 0x4b, 0x93, 0x3b, 0xc5, 0x89, 0x36, 0x7c, - 0x02, 0xb2, 0x7d, 0xe2, 0xf7, 0x6c, 0xd9, 0x2d, 0x3d, 0x3c, 0xa1, 0x06, 0xd3, 0xe1, 0xe8, 0x62, - 0x0b, 0x54, 0xb8, 0x88, 0xa7, 0x4e, 0x6a, 0xf7, 0xb8, 0x35, 0x63, 0x96, 0x7e, 0x36, 0x09, 0xf7, - 0x4e, 0x24, 0x9f, 0x68, 0xe8, 0xfd, 0x00, 0x86, 0xe5, 0x0c, 0x7c, 0xde, 0x11, 0xf1, 0x04, 0x9b, - 0x67, 0x12, 0x96, 0xbc, 0x68, 0xf2, 0x1c, 0xf8, 0xc1, 0x78, 0x8a, 0x8d, 0x03, 0x17, 0x31, 0x85, - 0xa7, 0x87, 0x86, 0xa6, 0x99, 0xa1, 0xe7, 0x4e, 0x98, 0xe9, 0x58, 0x60, 0x7e, 0x0c, 0x14, 0xdd, - 0x34, 0x88, 0xe5, 0x6b, 0x9e, 0xef, 0x12, 0xdc, 0x37, 0xac, 0x2e, 0xab, 0x20, 0xb9, 0x6a, 0xe6, - 0x08, 0x9b, 0x1e, 0x51, 0xe7, 0xf8, 0x70, 0x5b, 0x8e, 0x52, 0x04, 0x0b, 0x20, 0x37, 0x84, 0xc8, - 0x8e, 0x20, 0xf8, 0x70, 0x80, 0xa8, 0xfc, 0x7c, 0x1e, 0x0a, 0xa1, 0xbe, 0x1a, 0x5d, 0x80, 0xe2, - 0x75, 0x7c, 0x13, 0x6b, 0xf2, 0xac, 0xc4, 0x3d, 0x51, 0xa0, 0xb2, 0x96, 0x38, 0x2f, 0x7d, 0x0c, - 0x16, 0x99, 0x8a, 0x3d, 0xf0, 0x89, 0xab, 0xe9, 0x26, 0xf6, 0x3c, 0xe6, 0xb4, 0x1c, 0x53, 0x45, - 0x74, 0x6c, 0x8f, 0x0e, 0x6d, 0xc8, 0x11, 0x74, 0x05, 0x16, 0x18, 0xa2, 0x3f, 0x30, 0x7d, 0xc3, - 0x31, 0x89, 0x46, 0x4f, 0x6f, 0x1e, 0xab, 0x24, 0x81, 0x65, 0xf3, 0x54, 0xa3, 0x29, 0x14, 0xa8, - 0x45, 0x1e, 0xda, 0x84, 0xfb, 0x19, 0xac, 0x4b, 0x2c, 0xe2, 0x62, 0x9f, 0x68, 0xe4, 0x33, 0x03, - 0x6c, 0x7a, 0x1a, 0xb6, 0x3a, 0x5a, 0x0f, 0x7b, 0xbd, 0xf2, 0x22, 0x25, 0x58, 0x4f, 0x96, 0x13, - 0xea, 0x59, 0xaa, 0xb8, 0x2d, 0xf4, 0xea, 0x4c, 0xad, 0x66, 0x75, 0x3e, 0x89, 0xbd, 0x1e, 0xaa, - 0xc2, 0x12, 0x63, 0xf1, 0x7c, 0xd7, 0xb0, 0xba, 0x9a, 0xde, 0x23, 0xfa, 0x0d, 0x6d, 0xe0, 0x1f, - 0x3d, 0x5d, 0xbe, 0x2f, 0xfc, 0x7e, 0x66, 0x61, 0x9b, 0xe9, 0x6c, 0x50, 0x95, 0x03, 0xff, 0xe8, - 0x69, 0xd4, 0x86, 0x22, 0x5d, 0x8c, 0xbe, 0x71, 0x9b, 0x68, 0x47, 0xb6, 0xcb, 0x4a, 0x63, 0x69, - 0x42, 0x6a, 0x0a, 0x79, 0x70, 0x6d, 0x4f, 0x00, 0x9a, 0x76, 0x87, 0x54, 0x33, 0xed, 0x56, 0xbd, - 0xbe, 0xa9, 0x16, 0x24, 0xcb, 0x96, 0xed, 0xd2, 0x80, 0xea, 0xda, 0x81, 0x83, 0x0b, 0x3c, 0xa0, - 0xba, 0xb6, 0x74, 0xef, 0x15, 0x58, 0xd0, 0x75, 0x3e, 0x67, 0x43, 0xd7, 0xc4, 0x19, 0xcb, 0x2b, - 0x2b, 0x23, 0xce, 0xd2, 0xf5, 0x6d, 0xae, 0x20, 0x62, 0xdc, 0x43, 0xcf, 0xc0, 0xbd, 0x43, 0x67, - 0x85, 0x81, 0xf3, 0x63, 0xb3, 0x8c, 0x42, 0xaf, 0xc0, 0x82, 0x73, 0x3c, 0x0e, 0x44, 0x23, 0x6f, - 0x74, 0x8e, 0xa3, 0xb0, 0xa7, 0x60, 0xd1, 0xe9, 0x39, 0xe3, 0xb8, 0xc7, 0xc2, 0x38, 0xe4, 0xf4, - 0x9c, 0x28, 0xf0, 0x21, 0x76, 0xe0, 0x76, 0x89, 0x8e, 0x7d, 0xd2, 0x29, 0x9f, 0x09, 0xab, 0x87, - 0x06, 0xd0, 0x45, 0x50, 0x74, 0x5d, 0x23, 0x16, 0x3e, 0x34, 0x89, 0x86, 0x5d, 0x62, 0x61, 0xaf, - 0x7c, 0x3e, 0xac, 0x5c, 0xd2, 0xf5, 0x3a, 0x1b, 0xad, 0xb1, 0x41, 0xf4, 0x18, 0xcc, 0xdb, 0x87, - 0xd7, 0x75, 0x1e, 0x92, 0x9a, 0xe3, 0x92, 0x23, 0xe3, 0x95, 0xf2, 0x83, 0xcc, 0xbf, 0x73, 0x74, - 0x80, 0x05, 0x64, 0x8b, 0x89, 0xd1, 0xa3, 0xa0, 0xe8, 0x5e, 0x0f, 0xbb, 0x0e, 0xcb, 0xc9, 0x9e, - 0x83, 0x75, 0x52, 0x7e, 0x88, 0xab, 0x72, 0xf9, 0xae, 0x14, 0xd3, 0x2d, 0xe1, 0xdd, 0x32, 0x8e, - 0x7c, 0xc9, 0xf8, 0x08, 0xdf, 0x12, 0x4c, 0x26, 0xd8, 0x56, 0x41, 0xa1, 0xae, 0x18, 0x79, 0xf1, - 0x2a, 0x53, 0x2b, 0x39, 0x3d, 0x27, 0xfc, 0xde, 0x07, 0x60, 0x96, 0x6a, 0x0e, 0x5f, 0xfa, 0x28, - 0x6f, 0xc8, 0x9c, 0x5e, 0xe8, 0x8d, 0x97, 0x61, 0x89, 0x2a, 0xf5, 0x89, 0x8f, 0x3b, 0xd8, 0xc7, - 0x21, 0xed, 0x8f, 0x32, 0x6d, 0xea, 0xf7, 0xa6, 0x18, 0x1c, 0xb1, 0xd3, 0x1d, 0x1c, 0x1e, 0x07, - 0x91, 0xf5, 0x04, 0xb7, 0x93, 0xca, 0x64, 0x6c, 0x7d, 0x60, 0x4d, 0x77, 0xa5, 0x0a, 0xc5, 0x70, - 0xe0, 0xa3, 0x3c, 0xf0, 0xd0, 0x57, 0x12, 0xb4, 0x0b, 0xda, 0xd8, 0xdb, 0xa4, 0xfd, 0xcb, 0xcb, - 0x75, 0x25, 0x49, 0xfb, 0xa8, 0x9d, 0xc6, 0x7e, 0x5d, 0x53, 0x0f, 0x76, 0xf7, 0x1b, 0xcd, 0xba, - 0x92, 0x0a, 0x37, 0xec, 0xdf, 0x4a, 0x42, 0x69, 0xf4, 0xec, 0x85, 0x7e, 0x04, 0xce, 0xc8, 0x8b, - 0x12, 0x8f, 0xf8, 0xda, 0x2d, 0xc3, 0x65, 0x7b, 0xb1, 0x8f, 0x79, 0x5d, 0x0c, 0xa2, 0x61, 0x51, - 0x68, 0xb5, 0x89, 0xff, 0x82, 0xe1, 0xd2, 0x9d, 0xd6, 0xc7, 0x3e, 0xda, 0x81, 0xf3, 0x96, 0xad, - 0x79, 0x3e, 0xb6, 0x3a, 0xd8, 0xed, 0x68, 0xc3, 0x2b, 0x2a, 0x0d, 0xeb, 0x3a, 0xf1, 0x3c, 0x9b, - 0xd7, 0xc0, 0x80, 0xe5, 0x23, 0x96, 0xdd, 0x16, 0xca, 0xc3, 0xe2, 0x50, 0x13, 0xaa, 0x91, 0xc8, - 0x4d, 0x9d, 0x14, 0xb9, 0xf7, 0x41, 0xbe, 0x8f, 0x1d, 0x8d, 0x58, 0xbe, 0x7b, 0xcc, 0x3a, 0xee, - 0x9c, 0x9a, 0xeb, 0x63, 0xa7, 0x4e, 0x9f, 0x3f, 0x9c, 0x83, 0xcf, 0x3f, 0xa5, 0xa0, 0x18, 0xee, - 0xba, 0xe9, 0x21, 0x46, 0x67, 0x05, 0x2a, 0xc1, 0x52, 0xd8, 0x03, 0x77, 0xed, 0xd1, 0xd7, 0x36, - 0x68, 0xe5, 0xaa, 0x66, 0x79, 0x2f, 0xac, 0x72, 0x24, 0xed, 0x1a, 0x68, 0x68, 0x11, 0xde, 0x7b, - 0xe4, 0x54, 0xf1, 0x84, 0xb6, 0x21, 0x7b, 0xdd, 0x63, 0xdc, 0x59, 0xc6, 0xfd, 0xe0, 0xdd, 0xb9, - 0x9f, 0x6b, 0x33, 0xf2, 0xfc, 0x73, 0x6d, 0x6d, 0x77, 0x4f, 0x6d, 0xd6, 0x76, 0x54, 0x01, 0x47, - 0x67, 0x21, 0x6d, 0xe2, 0xdb, 0xc7, 0xa3, 0x35, 0x8e, 0x89, 0xa6, 0x75, 0xfc, 0x59, 0x48, 0xdf, - 0x22, 0xf8, 0xc6, 0x68, 0x65, 0x61, 0xa2, 0x0f, 0x30, 0xf4, 0x2f, 0x42, 0x86, 0xf9, 0x0b, 0x01, - 0x08, 0x8f, 0x29, 0xf7, 0xa0, 0x1c, 0xa4, 0x37, 0xf6, 0x54, 0x1a, 0xfe, 0x0a, 0x14, 0xb9, 0x54, - 0x6b, 0x35, 0xea, 0x1b, 0x75, 0x25, 0x59, 0xb9, 0x02, 0x59, 0xee, 0x04, 0xba, 0x35, 0x02, 0x37, - 0x28, 0xf7, 0x88, 0x47, 0xc1, 0x91, 0x90, 0xa3, 0x07, 0xcd, 0xf5, 0xba, 0xaa, 0x24, 0xc3, 0xcb, - 0xeb, 0x41, 0x31, 0xdc, 0x70, 0x7f, 0x38, 0x31, 0xf5, 0xcd, 0x04, 0x14, 0x42, 0x0d, 0x34, 0xed, - 0x7c, 0xb0, 0x69, 0xda, 0xb7, 0x34, 0x6c, 0x1a, 0xd8, 0x13, 0x41, 0x01, 0x4c, 0x54, 0xa3, 0x92, - 0x69, 0x17, 0xed, 0x43, 0x31, 0xfe, 0xcd, 0x04, 0x28, 0xd1, 0xde, 0x35, 0x62, 0x60, 0xe2, 0x87, - 0x6a, 0xe0, 0x1b, 0x09, 0x28, 0x8d, 0x36, 0xac, 0x11, 0xf3, 0x2e, 0xfc, 0x50, 0xcd, 0xfb, 0xe7, - 0x24, 0xcc, 0x8e, 0xb4, 0xa9, 0xd3, 0x5a, 0xf7, 0x19, 0x98, 0x37, 0x3a, 0xa4, 0xef, 0xd8, 0x3e, - 0xb1, 0xf4, 0x63, 0xcd, 0x24, 0x37, 0x89, 0x59, 0xae, 0xb0, 0x44, 0x71, 0xf1, 0xee, 0x8d, 0xf0, - 0x5a, 0x63, 0x88, 0xdb, 0xa1, 0xb0, 0xea, 0x42, 0x63, 0xb3, 0xde, 0x6c, 0xed, 0xed, 0xd7, 0x77, - 0x37, 0x5e, 0xd2, 0x0e, 0x76, 0x7f, 0x6c, 0x77, 0xef, 0x85, 0x5d, 0x55, 0x31, 0x22, 0x6a, 0x1f, - 0xe0, 0x56, 0x6f, 0x81, 0x12, 0x35, 0x0a, 0x9d, 0x81, 0x49, 0x66, 0x29, 0xf7, 0xa0, 0x05, 0x98, - 0xdb, 0xdd, 0xd3, 0xda, 0x8d, 0xcd, 0xba, 0x56, 0xdf, 0xda, 0xaa, 0x6f, 0xec, 0xb7, 0xf9, 0xd5, - 0x46, 0xa0, 0xbd, 0x3f, 0xba, 0xa9, 0x5f, 0x4f, 0xc1, 0xc2, 0x04, 0x4b, 0x50, 0x4d, 0x1c, 0x4a, - 0xf8, 0x39, 0xe9, 0x89, 0x69, 0xac, 0x5f, 0xa3, 0x5d, 0x41, 0x0b, 0xbb, 0xbe, 0x38, 0xc3, 0x3c, - 0x0a, 0xd4, 0x4b, 0x96, 0x6f, 0x1c, 0x19, 0xc4, 0x15, 0x37, 0x41, 0xfc, 0xa4, 0x32, 0x37, 0x94, - 0xf3, 0xcb, 0xa0, 0x8f, 0x02, 0x72, 0x6c, 0xcf, 0xf0, 0x8d, 0x9b, 0x44, 0x33, 0x2c, 0x79, 0x6d, - 0x44, 0x4f, 0x2e, 0x69, 0x55, 0x91, 0x23, 0x0d, 0xcb, 0x0f, 0xb4, 0x2d, 0xd2, 0xc5, 0x11, 0x6d, - 0x9a, 0xc0, 0x53, 0xaa, 0x22, 0x47, 0x02, 0xed, 0x0b, 0x50, 0xec, 0xd8, 0x03, 0xda, 0xce, 0x71, - 0x3d, 0x5a, 0x2f, 0x12, 0x6a, 0x81, 0xcb, 0x02, 0x15, 0xd1, 0xa8, 0x0f, 0xef, 0xab, 0x8a, 0x6a, - 0x81, 0xcb, 0xb8, 0xca, 0x23, 0x30, 0x87, 0xbb, 0x5d, 0x97, 0x92, 0x4b, 0x22, 0x7e, 0xf4, 0x28, - 0x05, 0x62, 0xa6, 0xb8, 0xfc, 0x1c, 0xe4, 0xa4, 0x1f, 0x68, 0x49, 0xa6, 0x9e, 0xd0, 0x1c, 0x7e, - 0x9e, 0x4e, 0xae, 0xe6, 0xd5, 0x9c, 0x25, 0x07, 0x2f, 0x40, 0xd1, 0xf0, 0xb4, 0xe1, 0xf5, 0x7b, - 0x72, 0x25, 0xb9, 0x9a, 0x53, 0x0b, 0x86, 0x17, 0x5c, 0x5d, 0x56, 0xde, 0x4a, 0x42, 0x69, 0xf4, - 0xf3, 0x01, 0xda, 0x84, 0x9c, 0x69, 0xeb, 0x98, 0x85, 0x16, 0xff, 0x76, 0xb5, 0x1a, 0xf3, 0xc5, - 0x61, 0x6d, 0x47, 0xe8, 0xab, 0x01, 0x72, 0xf9, 0xef, 0x13, 0x90, 0x93, 0x62, 0xb4, 0x04, 0x69, - 0x07, 0xfb, 0x3d, 0x46, 0x97, 0x59, 0x4f, 0x2a, 0x09, 0x95, 0x3d, 0x53, 0xb9, 0xe7, 0x60, 0x8b, - 0x85, 0x80, 0x90, 0xd3, 0x67, 0xba, 0xae, 0x26, 0xc1, 0x1d, 0x76, 0xae, 0xb1, 0xfb, 0x7d, 0x62, - 0xf9, 0x9e, 0x5c, 0x57, 0x21, 0xdf, 0x10, 0x62, 0xf4, 0x38, 0xcc, 0xfb, 0x2e, 0x36, 0xcc, 0x11, - 0xdd, 0x34, 0xd3, 0x55, 0xe4, 0x40, 0xa0, 0x5c, 0x85, 0xb3, 0x92, 0xb7, 0x43, 0x7c, 0xac, 0xf7, - 0x48, 0x67, 0x08, 0xca, 0xb2, 0xfb, 0x8b, 0x33, 0x42, 0x61, 0x53, 0x8c, 0x4b, 0x6c, 0xe5, 0x3b, - 0x09, 0x98, 0x97, 0x27, 0xb1, 0x4e, 0xe0, 0xac, 0x26, 0x00, 0xb6, 0x2c, 0xdb, 0x0f, 0xbb, 0x6b, - 0x3c, 0x94, 0xc7, 0x70, 0x6b, 0xb5, 0x00, 0xa4, 0x86, 0x08, 0x96, 0xfb, 0x00, 0xc3, 0x91, 0x13, - 0xdd, 0x76, 0x1e, 0x0a, 0xe2, 0xdb, 0x10, 0xfb, 0xc0, 0xc8, 0xcf, 0xee, 0xc0, 0x45, 0xf4, 0xc8, - 0x86, 0x16, 0x21, 0x73, 0x48, 0xba, 0x86, 0x25, 0x6e, 0x7c, 0xf9, 0x83, 0xbc, 0x61, 0x49, 0x07, - 0x37, 0x2c, 0xeb, 0x9f, 0x86, 0x05, 0xdd, 0xee, 0x47, 0xcd, 0x5d, 0x57, 0x22, 0xf7, 0x07, 0xde, - 0x27, 0x13, 0x2f, 0xc3, 0xb0, 0xc5, 0xfc, 0x5e, 0x22, 0xf1, 0xa5, 0x64, 0x6a, 0xbb, 0xb5, 0xfe, - 0x95, 0xe4, 0xf2, 0x36, 0x87, 0xb6, 0xe4, 0x4c, 0x55, 0x72, 0x64, 0x12, 0x9d, 0x5a, 0x0f, 0x5f, - 0x7e, 0x1c, 0x9e, 0xe8, 0x1a, 0x7e, 0x6f, 0x70, 0xb8, 0xa6, 0xdb, 0xfd, 0x8b, 0x5d, 0xbb, 0x6b, - 0x0f, 0xbf, 0xa9, 0xd2, 0x27, 0xf6, 0xc0, 0xfe, 0x13, 0xdf, 0x55, 0xf3, 0x81, 0x74, 0x39, 0xf6, - 0x23, 0x6c, 0x75, 0x17, 0x16, 0x84, 0xb2, 0xc6, 0x3e, 0xec, 0xf0, 0xe3, 0x09, 0xba, 0xeb, 0xe5, - 0x58, 0xf9, 0x6b, 0xef, 0xb0, 0x72, 0xad, 0xce, 0x0b, 0x28, 0x1d, 0xe3, 0x27, 0x98, 0xaa, 0x0a, - 0xf7, 0x8e, 0xf0, 0xf1, 0xad, 0x49, 0xdc, 0x18, 0xc6, 0x6f, 0x09, 0xc6, 0x85, 0x10, 0x63, 0x5b, - 0x40, 0xab, 0x1b, 0x30, 0x7b, 0x1a, 0xae, 0xbf, 0x15, 0x5c, 0x45, 0x12, 0x26, 0xd9, 0x86, 0x39, - 0x46, 0xa2, 0x0f, 0x3c, 0xdf, 0xee, 0xb3, 0xbc, 0x77, 0x77, 0x9a, 0xbf, 0x7b, 0x87, 0xef, 0x95, - 0x12, 0x85, 0x6d, 0x04, 0xa8, 0x6a, 0x15, 0xd8, 0xb7, 0xac, 0x0e, 0xd1, 0xcd, 0x18, 0x86, 0x6f, - 0x0b, 0x43, 0x02, 0xfd, 0xea, 0xf3, 0xb0, 0x48, 0xff, 0x67, 0x69, 0x29, 0x6c, 0x49, 0xfc, 0x4d, - 0x5a, 0xf9, 0x3b, 0xaf, 0xf1, 0xed, 0xb8, 0x10, 0x10, 0x84, 0x6c, 0x0a, 0xad, 0x62, 0x97, 0xf8, - 0x3e, 0x71, 0x3d, 0x0d, 0x9b, 0x93, 0xcc, 0x0b, 0x5d, 0x45, 0x94, 0x3f, 0xff, 0xee, 0xe8, 0x2a, - 0x6e, 0x73, 0x64, 0xcd, 0x34, 0xab, 0x07, 0x70, 0x66, 0x42, 0x54, 0x4c, 0xc1, 0xf9, 0xba, 0xe0, - 0x5c, 0x1c, 0x8b, 0x0c, 0x4a, 0xdb, 0x02, 0x29, 0x0f, 0xd6, 0x72, 0x0a, 0xce, 0xdf, 0x14, 0x9c, - 0x48, 0x60, 0xe5, 0x92, 0x52, 0xc6, 0xe7, 0x60, 0xfe, 0x26, 0x71, 0x0f, 0x6d, 0x4f, 0x5c, 0xff, - 0x4c, 0x41, 0xf7, 0x86, 0xa0, 0x9b, 0x13, 0x40, 0x76, 0x1f, 0x44, 0xb9, 0x9e, 0x81, 0xdc, 0x11, - 0xd6, 0xc9, 0x14, 0x14, 0x5f, 0x10, 0x14, 0x33, 0x54, 0x9f, 0x42, 0x6b, 0x50, 0xec, 0xda, 0xa2, - 0x32, 0xc5, 0xc3, 0xdf, 0x14, 0xf0, 0x82, 0xc4, 0x08, 0x0a, 0xc7, 0x76, 0x06, 0x26, 0x2d, 0x5b, - 0xf1, 0x14, 0xbf, 0x25, 0x29, 0x24, 0x46, 0x50, 0x9c, 0xc2, 0xad, 0xbf, 0x2d, 0x29, 0xbc, 0x90, - 0x3f, 0x9f, 0x85, 0x82, 0x6d, 0x99, 0xc7, 0xb6, 0x35, 0x8d, 0x11, 0x5f, 0x14, 0x0c, 0x20, 0x20, - 0x94, 0xe0, 0x1a, 0xe4, 0xa7, 0x5d, 0x88, 0xdf, 0x7d, 0x57, 0x6e, 0x0f, 0xb9, 0x02, 0xdb, 0x30, - 0x27, 0x13, 0x94, 0x61, 0x5b, 0x53, 0x50, 0x7c, 0x59, 0x50, 0x94, 0x42, 0x30, 0x31, 0x0d, 0x9f, - 0x78, 0x7e, 0x97, 0x4c, 0x43, 0xf2, 0x96, 0x9c, 0x86, 0x80, 0x08, 0x57, 0x1e, 0x12, 0x4b, 0xef, - 0x4d, 0xc7, 0xf0, 0x7b, 0xd2, 0x95, 0x12, 0x43, 0x29, 0x36, 0x60, 0xb6, 0x8f, 0x5d, 0xaf, 0x87, - 0xcd, 0xa9, 0x96, 0xe3, 0xf7, 0x05, 0x47, 0x31, 0x00, 0x09, 0x8f, 0x0c, 0xac, 0xd3, 0xd0, 0x7c, - 0x45, 0x7a, 0x24, 0x04, 0x13, 0x5b, 0xcf, 0xf3, 0xd9, 0x5d, 0xd9, 0x69, 0xd8, 0xfe, 0x40, 0x6e, - 0x3d, 0x8e, 0x6d, 0x86, 0x19, 0xaf, 0x41, 0xde, 0x33, 0x6e, 0x4f, 0x45, 0xf3, 0x87, 0x72, 0xa5, - 0x19, 0x80, 0x82, 0x5f, 0x82, 0xb3, 0x13, 0xcb, 0xc4, 0x14, 0x64, 0x7f, 0x24, 0xc8, 0x96, 0x26, - 0x94, 0x0a, 0x91, 0x12, 0x4e, 0x4b, 0xf9, 0xc7, 0x32, 0x25, 0x90, 0x08, 0x57, 0x8b, 0x9e, 0x15, - 0x3c, 0x7c, 0x74, 0x3a, 0xaf, 0xfd, 0x89, 0xf4, 0x1a, 0xc7, 0x8e, 0x78, 0x6d, 0x1f, 0x96, 0x04, - 0xe3, 0xe9, 0xd6, 0xf5, 0xab, 0x32, 0xb1, 0x72, 0xf4, 0xc1, 0xe8, 0xea, 0x7e, 0x1a, 0x96, 0x03, - 0x77, 0xca, 0xa6, 0xd4, 0xd3, 0xfa, 0xd8, 0x99, 0x82, 0xf9, 0x6b, 0x82, 0x59, 0x66, 0xfc, 0xa0, - 0xab, 0xf5, 0x9a, 0xd8, 0xa1, 0xe4, 0x2f, 0x42, 0x59, 0x92, 0x0f, 0x2c, 0x97, 0xe8, 0x76, 0xd7, - 0x32, 0x6e, 0x93, 0xce, 0x14, 0xd4, 0x7f, 0x1a, 0x59, 0xaa, 0x83, 0x10, 0x9c, 0x32, 0x37, 0x40, - 0x09, 0x7a, 0x15, 0xcd, 0xe8, 0x3b, 0xb6, 0xeb, 0xc7, 0x30, 0xfe, 0x99, 0x5c, 0xa9, 0x00, 0xd7, - 0x60, 0xb0, 0x6a, 0x1d, 0x4a, 0xec, 0x71, 0xda, 0x90, 0xfc, 0x73, 0x41, 0x34, 0x3b, 0x44, 0x89, - 0xc4, 0xa1, 0xdb, 0x7d, 0x07, 0xbb, 0xd3, 0xe4, 0xbf, 0xbf, 0x90, 0x89, 0x43, 0x40, 0x44, 0xe2, - 0xf0, 0x8f, 0x1d, 0x42, 0xab, 0xfd, 0x14, 0x0c, 0x5f, 0x97, 0x89, 0x43, 0x62, 0x04, 0x85, 0x6c, - 0x18, 0xa6, 0xa0, 0xf8, 0x4b, 0x49, 0x21, 0x31, 0x94, 0xe2, 0x53, 0xc3, 0x42, 0xeb, 0x92, 0xae, - 0xe1, 0xf9, 0x2e, 0x6f, 0x85, 0xef, 0x4e, 0xf5, 0x57, 0xef, 0x8e, 0x36, 0x61, 0x6a, 0x08, 0x4a, - 0x33, 0x91, 0xb8, 0x42, 0x65, 0x27, 0xa5, 0x78, 0xc3, 0xbe, 0x21, 0x33, 0x51, 0x08, 0x46, 0x6d, - 0x0b, 0x75, 0x88, 0xd4, 0xed, 0x3a, 0x3d, 0x1f, 0x4c, 0x41, 0xf7, 0xcd, 0x88, 0x71, 0x6d, 0x89, - 0xa5, 0x9c, 0xa1, 0xfe, 0x67, 0x60, 0xdd, 0x20, 0xc7, 0x53, 0x45, 0xe7, 0x5f, 0x47, 0xfa, 0x9f, - 0x03, 0x8e, 0xe4, 0x39, 0x64, 0x2e, 0xd2, 0x4f, 0xa1, 0xb8, 0x5f, 0x01, 0x95, 0x7f, 0xf2, 0x8e, - 0x98, 0xef, 0x68, 0x3b, 0x55, 0xdd, 0xa1, 0x41, 0x3e, 0xda, 0xf4, 0xc4, 0x93, 0xbd, 0x76, 0x27, - 0x88, 0xf3, 0x91, 0x9e, 0xa7, 0xba, 0x05, 0xb3, 0x23, 0x0d, 0x4f, 0x3c, 0xd5, 0x4f, 0x09, 0xaa, - 0x62, 0xb8, 0xdf, 0xa9, 0x5e, 0x81, 0x34, 0x6d, 0x5e, 0xe2, 0xe1, 0x3f, 0x2d, 0xe0, 0x4c, 0xbd, - 0xfa, 0x71, 0xc8, 0xc9, 0xa6, 0x25, 0x1e, 0xfa, 0x33, 0x02, 0x1a, 0x40, 0x28, 0x5c, 0x36, 0x2c, - 0xf1, 0xf0, 0x9f, 0x95, 0x70, 0x09, 0xa1, 0xf0, 0xe9, 0x5d, 0xf8, 0x37, 0x3f, 0x97, 0x16, 0x45, - 0x47, 0xfa, 0xee, 0x1a, 0xcc, 0x88, 0x4e, 0x25, 0x1e, 0xfd, 0x59, 0xf1, 0x72, 0x89, 0xa8, 0x3e, - 0x05, 0x99, 0x29, 0x1d, 0xfe, 0x0b, 0x02, 0xca, 0xf5, 0xab, 0x1b, 0x50, 0x08, 0x75, 0x27, 0xf1, - 0xf0, 0x5f, 0x14, 0xf0, 0x30, 0x8a, 0x9a, 0x2e, 0xba, 0x93, 0x78, 0x82, 0x5f, 0x92, 0xa6, 0x0b, - 0x04, 0x75, 0x9b, 0x6c, 0x4c, 0xe2, 0xd1, 0xbf, 0x2c, 0xbd, 0x2e, 0x21, 0xd5, 0x67, 0x21, 0x1f, - 0x14, 0x9b, 0x78, 0xfc, 0xaf, 0x08, 0xfc, 0x10, 0x43, 0x3d, 0x10, 0x2a, 0x76, 0xf1, 0x14, 0xbf, - 0x2a, 0x3d, 0x10, 0x42, 0xd1, 0x6d, 0x14, 0x6d, 0x60, 0xe2, 0x99, 0x7e, 0x4d, 0x6e, 0xa3, 0x48, - 0xff, 0x42, 0x57, 0x93, 0xe5, 0xfc, 0x78, 0x8a, 0x5f, 0x97, 0xab, 0xc9, 0xf4, 0xa9, 0x19, 0xd1, - 0x8e, 0x20, 0x9e, 0xe3, 0x37, 0xa4, 0x19, 0x91, 0x86, 0xa0, 0xda, 0x02, 0x34, 0xde, 0x0d, 0xc4, - 0xf3, 0x7d, 0x4e, 0xf0, 0xcd, 0x8f, 0x35, 0x03, 0xd5, 0x17, 0x60, 0x69, 0x72, 0x27, 0x10, 0xcf, - 0xfa, 0xf9, 0x3b, 0x91, 0xb3, 0x5b, 0xb8, 0x11, 0xa8, 0xee, 0x0f, 0x4b, 0x4a, 0xb8, 0x0b, 0x88, - 0xa7, 0x7d, 0xfd, 0xce, 0x68, 0xe2, 0x0e, 0x37, 0x01, 0xd5, 0x1a, 0xc0, 0xb0, 0x00, 0xc7, 0x73, - 0xbd, 0x21, 0xb8, 0x42, 0x20, 0xba, 0x35, 0x44, 0xfd, 0x8d, 0xc7, 0x7f, 0x41, 0x6e, 0x0d, 0x81, - 0xa0, 0x5b, 0x43, 0x96, 0xde, 0x78, 0xf4, 0x9b, 0x72, 0x6b, 0x48, 0x08, 0x8d, 0xec, 0x50, 0x75, - 0x8b, 0x67, 0xf8, 0xa2, 0x8c, 0xec, 0x10, 0xaa, 0xba, 0x0b, 0xf3, 0x63, 0x05, 0x31, 0x9e, 0xea, - 0x4b, 0x82, 0x4a, 0x89, 0xd6, 0xc3, 0x70, 0xf1, 0x12, 0xc5, 0x30, 0x9e, 0xed, 0x77, 0x22, 0xc5, - 0x4b, 0xd4, 0xc2, 0xea, 0x35, 0xc8, 0x59, 0x03, 0xd3, 0xa4, 0x9b, 0x07, 0xdd, 0xfd, 0x97, 0x7b, - 0xe5, 0x7f, 0x7f, 0x5f, 0x78, 0x47, 0x02, 0xaa, 0x57, 0x20, 0x43, 0xfa, 0x87, 0xa4, 0x13, 0x87, - 0xfc, 0x8f, 0xf7, 0x65, 0xc2, 0xa4, 0xda, 0xd5, 0x67, 0x01, 0xf8, 0xd5, 0x08, 0xfb, 0xec, 0x17, - 0x83, 0xfd, 0xcf, 0xf7, 0xc5, 0x6f, 0x6a, 0x86, 0x90, 0x21, 0x01, 0xff, 0x85, 0xce, 0xdd, 0x09, - 0xde, 0x1d, 0x25, 0x60, 0x2b, 0xf2, 0x0c, 0xcc, 0x5c, 0xf7, 0x6c, 0xcb, 0xc7, 0xdd, 0x38, 0xf4, - 0x7f, 0x09, 0xb4, 0xd4, 0xa7, 0x0e, 0xeb, 0xdb, 0x2e, 0xf1, 0x71, 0xd7, 0x8b, 0xc3, 0xfe, 0xb7, - 0xc0, 0x06, 0x00, 0x0a, 0xd6, 0xb1, 0xe7, 0x4f, 0x33, 0xef, 0xff, 0x91, 0x60, 0x09, 0xa0, 0x46, - 0xd3, 0xff, 0x6f, 0x90, 0xe3, 0x38, 0xec, 0x7b, 0xd2, 0x68, 0xa1, 0x5f, 0xfd, 0x38, 0xe4, 0xe9, - 0xbf, 0xfc, 0x87, 0x72, 0x31, 0xe0, 0xff, 0x15, 0xe0, 0x21, 0x82, 0xbe, 0xd9, 0xf3, 0x3b, 0xbe, - 0x11, 0xef, 0xec, 0xff, 0x13, 0x2b, 0x2d, 0xf5, 0xab, 0x35, 0x28, 0x78, 0x7e, 0xa7, 0x33, 0x10, - 0xfd, 0x69, 0x0c, 0xfc, 0xff, 0xdf, 0x0f, 0xae, 0x2c, 0x02, 0x0c, 0x5d, 0xed, 0x5b, 0x37, 0x7c, - 0xc7, 0x66, 0x9f, 0x39, 0xe2, 0x18, 0xee, 0x08, 0x86, 0x10, 0x64, 0xbd, 0x3e, 0xf9, 0xfa, 0x16, - 0xb6, 0xed, 0x6d, 0x9b, 0x5f, 0xdc, 0xbe, 0x5c, 0x89, 0xbf, 0x81, 0x85, 0xf7, 0x92, 0x90, 0xef, - 0x7b, 0x5d, 0x71, 0x09, 0xcb, 0x33, 0x14, 0xad, 0xc0, 0xde, 0xf2, 0xe9, 0xee, 0x6f, 0x2b, 0x5b, - 0x90, 0x5d, 0x37, 0xba, 0x4d, 0xaf, 0x8b, 0x16, 0x21, 0xc3, 0xac, 0x67, 0x1f, 0x1f, 0x53, 0x2a, - 0x7f, 0x40, 0x0f, 0x43, 0xaa, 0xe9, 0x75, 0xc5, 0xef, 0xda, 0x16, 0xd7, 0x86, 0x2f, 0x5a, 0x6b, - 0xf7, 0xb1, 0x69, 0x36, 0xbd, 0xae, 0x4a, 0x15, 0x2a, 0x2e, 0xe4, 0xa4, 0x00, 0xad, 0x40, 0xa1, - 0xad, 0x63, 0x77, 0x7d, 0xe0, 0xb5, 0x7d, 0xdb, 0x91, 0xbf, 0xdb, 0x0a, 0x89, 0xd0, 0x2a, 0xcc, - 0x6d, 0x99, 0x46, 0xb7, 0xe7, 0xb7, 0xb0, 0x8b, 0xf5, 0xde, 0xc0, 0x27, 0xe5, 0xe2, 0x4a, 0x6a, - 0x75, 0x46, 0x8d, 0x8a, 0xd1, 0x32, 0xe4, 0x9a, 0xd8, 0x69, 0xf7, 0xb0, 0x7b, 0x83, 0xfd, 0x0a, - 0x28, 0xaf, 0x06, 0xcf, 0x95, 0xe7, 0x21, 0xdb, 0xe2, 0xdf, 0xfd, 0x97, 0x20, 0xdd, 0xe0, 0x1f, - 0x11, 0x52, 0xab, 0x29, 0x7e, 0xeb, 0x4e, 0x9f, 0xd1, 0x32, 0x64, 0xb7, 0x4c, 0x1b, 0xfb, 0x1e, - 0xfb, 0xa5, 0x63, 0x82, 0x8d, 0x08, 0x09, 0x2a, 0x43, 0xe6, 0xc0, 0x90, 0x1f, 0x11, 0x66, 0xd9, - 0x10, 0x17, 0xac, 0x2f, 0xbe, 0xf7, 0xdd, 0x73, 0x89, 0xef, 0x7d, 0xf7, 0x5c, 0xe2, 0xab, 0xff, - 0x72, 0x2e, 0xf1, 0x0f, 0x6f, 0x9f, 0xbb, 0xe7, 0x1f, 0xdf, 0x3e, 0x77, 0xcf, 0xf7, 0x03, 0x00, - 0x00, 0xff, 0xff, 0xef, 0xca, 0x82, 0x66, 0x67, 0x34, 0x00, 0x00, - } - r := bytes.NewReader(gzipped) - gzipr, err := compress_gzip.NewReader(r) - if err != nil { - panic(err) - } - ungzipped, err := io_ioutil.ReadAll(gzipr) - if err != nil { - panic(err) - } - if err := github_com_gogo_protobuf_proto.Unmarshal(ungzipped, d); err != nil { - panic(err) - } - return d -} -func (this *BigMsg) GoString() string { - if this == nil { - return "nil" - } - s := make([]string, 0, 6) - s = append(s, "&prototests.BigMsg{") - if this.Field != nil { - s = append(s, "Field: "+valueToGoStringMsg(this.Field, "int64")+",\n") - } - if this.Msg != nil { - s = append(s, "Msg: "+fmt.Sprintf("%#v", this.Msg)+",\n") - } - if this.XXX_unrecognized != nil { - s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") - } - s = append(s, "}") - return strings.Join(s, "") -} -func (this *SmallMsg) GoString() string { - if this == nil { - return "nil" - } - s := make([]string, 0, 7) - s = append(s, "&prototests.SmallMsg{") - if this.ScarBusStop != nil { - s = append(s, "ScarBusStop: "+valueToGoStringMsg(this.ScarBusStop, "string")+",\n") - } - if this.FlightParachute != nil { - s = append(s, "FlightParachute: "+fmt.Sprintf("%#v", this.FlightParachute)+",\n") - } - if this.MapShark != nil { - s = append(s, "MapShark: "+valueToGoStringMsg(this.MapShark, "string")+",\n") - } - if this.XXX_unrecognized != nil { - s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") - } - s = append(s, "}") - return strings.Join(s, "") -} -func (this *Packed) GoString() string { - if this == nil { - return "nil" - } - s := make([]string, 0, 7) - s = append(s, "&prototests.Packed{") - if this.Ints != nil { - s = append(s, "Ints: "+fmt.Sprintf("%#v", this.Ints)+",\n") - } - if this.Floats != nil { - s = append(s, "Floats: "+fmt.Sprintf("%#v", this.Floats)+",\n") - } - if this.Uints != nil { - s = append(s, "Uints: "+fmt.Sprintf("%#v", this.Uints)+",\n") - } - if this.XXX_unrecognized != nil { - s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") - } - s = append(s, "}") - return strings.Join(s, "") -} -func valueToGoStringMsg(v interface{}, typ string) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" - } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("func(v %v) *%v { return &v } ( %#v )", typ, typ, pv) -} -func NewPopulatedBigMsg(r randyMsg, easy bool) *BigMsg { - this := &BigMsg{} - if r.Intn(5) != 0 { - v1 := int64(r.Int63()) - if r.Intn(2) == 0 { - v1 *= -1 - } - this.Field = &v1 - } - if r.Intn(5) != 0 { - this.Msg = NewPopulatedSmallMsg(r, easy) - } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedMsg(r, 4) - } - return this -} - -func NewPopulatedSmallMsg(r randyMsg, easy bool) *SmallMsg { - this := &SmallMsg{} - if r.Intn(5) != 0 { - v2 := string(randStringMsg(r)) - this.ScarBusStop = &v2 - } - if r.Intn(5) != 0 { - v3 := r.Intn(10) - this.FlightParachute = make([]uint32, v3) - for i := 0; i < v3; i++ { - this.FlightParachute[i] = uint32(r.Uint32()) - } - } - if r.Intn(5) != 0 { - v4 := string(randStringMsg(r)) - this.MapShark = &v4 - } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedMsg(r, 19) - } - return this -} - -func NewPopulatedPacked(r randyMsg, easy bool) *Packed { - this := &Packed{} - if r.Intn(5) != 0 { - v5 := r.Intn(10) - this.Ints = make([]int64, v5) - for i := 0; i < v5; i++ { - this.Ints[i] = int64(r.Int63()) - if r.Intn(2) == 0 { - this.Ints[i] *= -1 - } - } - } - if r.Intn(5) != 0 { - v6 := r.Intn(10) - this.Floats = make([]float64, v6) - for i := 0; i < v6; i++ { - this.Floats[i] = float64(r.Float64()) - if r.Intn(2) == 0 { - this.Floats[i] *= -1 - } - } - } - if r.Intn(5) != 0 { - v7 := r.Intn(10) - this.Uints = make([]uint32, v7) - for i := 0; i < v7; i++ { - this.Uints[i] = uint32(r.Uint32()) - } - } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedMsg(r, 7) - } - return this -} - -type randyMsg interface { - Float32() float32 - Float64() float64 - Int63() int64 - Int31() int32 - Uint32() uint32 - Intn(n int) int -} - -func randUTF8RuneMsg(r randyMsg) rune { - ru := r.Intn(62) - if ru < 10 { - return rune(ru + 48) - } else if ru < 36 { - return rune(ru + 55) - } - return rune(ru + 61) -} -func randStringMsg(r randyMsg) string { - v8 := r.Intn(100) - tmps := make([]rune, v8) - for i := 0; i < v8; i++ { - tmps[i] = randUTF8RuneMsg(r) - } - return string(tmps) -} -func randUnrecognizedMsg(r randyMsg, maxFieldNumber int) (dAtA []byte) { - l := r.Intn(5) - for i := 0; i < l; i++ { - wire := r.Intn(4) - if wire == 3 { - wire = 5 - } - fieldNumber := maxFieldNumber + r.Intn(100) - dAtA = randFieldMsg(dAtA, r, fieldNumber, wire) - } - return dAtA -} -func randFieldMsg(dAtA []byte, r randyMsg, fieldNumber int, wire int) []byte { - key := uint32(fieldNumber)<<3 | uint32(wire) - switch wire { - case 0: - dAtA = encodeVarintPopulateMsg(dAtA, uint64(key)) - v9 := r.Int63() - if r.Intn(2) == 0 { - v9 *= -1 - } - dAtA = encodeVarintPopulateMsg(dAtA, uint64(v9)) - case 1: - dAtA = encodeVarintPopulateMsg(dAtA, uint64(key)) - dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) - case 2: - dAtA = encodeVarintPopulateMsg(dAtA, uint64(key)) - ll := r.Intn(100) - dAtA = encodeVarintPopulateMsg(dAtA, uint64(ll)) - for j := 0; j < ll; j++ { - dAtA = append(dAtA, byte(r.Intn(256))) - } - default: - dAtA = encodeVarintPopulateMsg(dAtA, uint64(key)) - dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) - } - return dAtA -} -func encodeVarintPopulateMsg(dAtA []byte, v uint64) []byte { - for v >= 1<<7 { - dAtA = append(dAtA, uint8(uint64(v)&0x7f|0x80)) - v >>= 7 - } - dAtA = append(dAtA, uint8(v)) - return dAtA -} diff --git a/parser/proto/prototests/msg.proto b/parser/proto/prototests/msg.proto deleted file mode 100644 index a4f800b..0000000 --- a/parser/proto/prototests/msg.proto +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2016 Walter Schulze -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto2"; -package prototests; - -import "github.com/gogo/protobuf/gogoproto/gogo.proto"; - -option (gogoproto.description_all) = true; -option (gogoproto.populate_all) = true; -option (gogoproto.gostring_all) = true; -option (gogoproto.goproto_unkeyed_all) = false; -option (gogoproto.goproto_sizecache_all) = false; - -//BigMsg contains a field and a message field. -message BigMsg { - optional int64 Field = 1; - optional SmallMsg Msg = 3; -} - -//SmallMsg only contains some native fields. -message SmallMsg { - optional string ScarBusStop = 1; - repeated fixed32 FlightParachute = 12; - optional string MapShark = 18; -} - -//Packed contains some repeated packed fields. -message Packed { - repeated int64 Ints = 4 [packed=true]; - repeated double Floats = 5 [packed=true]; - repeated uint32 Uints = 6 [packed=true]; -} \ No newline at end of file diff --git a/parser/proto/prototests/proto3.pb.go b/parser/proto/prototests/proto3.pb.go deleted file mode 100644 index 5aa989e..0000000 --- a/parser/proto/prototests/proto3.pb.go +++ /dev/null @@ -1,573 +0,0 @@ -// Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: proto3.proto - -package prototests - -import ( - bytes "bytes" - compress_gzip "compress/gzip" - fmt "fmt" - _ "github.com/gogo/protobuf/gogoproto" - github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto" - proto "github.com/gogo/protobuf/proto" - github_com_gogo_protobuf_protoc_gen_gogo_descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" - io_ioutil "io/ioutil" - math "math" - reflect "reflect" - strings "strings" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package - -// Proto3 is a proto3 message. -type Proto3 struct { - Field int64 `protobuf:"varint,1,opt,name=Field,proto3" json:"Field,omitempty"` - Msg *SmallMsg3 `protobuf:"bytes,3,opt,name=Msg,proto3" json:"Msg,omitempty"` - Ints []int64 `protobuf:"varint,4,rep,packed,name=Ints,proto3" json:"Ints,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *Proto3) Reset() { *m = Proto3{} } -func (m *Proto3) String() string { return proto.CompactTextString(m) } -func (*Proto3) ProtoMessage() {} -func (*Proto3) Descriptor() ([]byte, []int) { - return fileDescriptor_4fee6d65e34a64b6, []int{0} -} -func (m *Proto3) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Proto3.Unmarshal(m, b) -} -func (m *Proto3) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Proto3.Marshal(b, m, deterministic) -} -func (m *Proto3) XXX_Merge(src proto.Message) { - xxx_messageInfo_Proto3.Merge(m, src) -} -func (m *Proto3) XXX_Size() int { - return xxx_messageInfo_Proto3.Size(m) -} -func (m *Proto3) XXX_DiscardUnknown() { - xxx_messageInfo_Proto3.DiscardUnknown(m) -} - -var xxx_messageInfo_Proto3 proto.InternalMessageInfo - -func (m *Proto3) GetField() int64 { - if m != nil { - return m.Field - } - return 0 -} - -func (m *Proto3) GetMsg() *SmallMsg3 { - if m != nil { - return m.Msg - } - return nil -} - -func (m *Proto3) GetInts() []int64 { - if m != nil { - return m.Ints - } - return nil -} - -// SmallMsg3 only contains some native fields. -type SmallMsg3 struct { - ScarBusStop string `protobuf:"bytes,1,opt,name=ScarBusStop,proto3" json:"ScarBusStop,omitempty"` - FlightParachute []uint32 `protobuf:"fixed32,12,rep,packed,name=FlightParachute,proto3" json:"FlightParachute,omitempty"` - XXX_unrecognized []byte `json:"-"` -} - -func (m *SmallMsg3) Reset() { *m = SmallMsg3{} } -func (m *SmallMsg3) String() string { return proto.CompactTextString(m) } -func (*SmallMsg3) ProtoMessage() {} -func (*SmallMsg3) Descriptor() ([]byte, []int) { - return fileDescriptor_4fee6d65e34a64b6, []int{1} -} -func (m *SmallMsg3) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_SmallMsg3.Unmarshal(m, b) -} -func (m *SmallMsg3) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_SmallMsg3.Marshal(b, m, deterministic) -} -func (m *SmallMsg3) XXX_Merge(src proto.Message) { - xxx_messageInfo_SmallMsg3.Merge(m, src) -} -func (m *SmallMsg3) XXX_Size() int { - return xxx_messageInfo_SmallMsg3.Size(m) -} -func (m *SmallMsg3) XXX_DiscardUnknown() { - xxx_messageInfo_SmallMsg3.DiscardUnknown(m) -} - -var xxx_messageInfo_SmallMsg3 proto.InternalMessageInfo - -func (m *SmallMsg3) GetScarBusStop() string { - if m != nil { - return m.ScarBusStop - } - return "" -} - -func (m *SmallMsg3) GetFlightParachute() []uint32 { - if m != nil { - return m.FlightParachute - } - return nil -} - -func init() { - proto.RegisterType((*Proto3)(nil), "prototests.Proto3") - proto.RegisterType((*SmallMsg3)(nil), "prototests.SmallMsg3") -} - -func init() { proto.RegisterFile("proto3.proto", fileDescriptor_4fee6d65e34a64b6) } - -var fileDescriptor_4fee6d65e34a64b6 = []byte{ - // 229 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x29, 0x28, 0xca, 0x2f, - 0xc9, 0x37, 0xd6, 0x03, 0x53, 0x42, 0x5c, 0x60, 0xaa, 0x24, 0xb5, 0xb8, 0xa4, 0x58, 0x4a, 0x37, - 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, 0x3f, 0x3d, 0x3f, 0x3d, 0x5f, 0x1f, - 0x2c, 0x97, 0x54, 0x9a, 0x06, 0xe6, 0x81, 0x39, 0x60, 0x16, 0x44, 0xab, 0x52, 0x34, 0x17, 0x5b, - 0x00, 0xd8, 0x28, 0x21, 0x11, 0x2e, 0x56, 0xb7, 0xcc, 0xd4, 0x9c, 0x14, 0x09, 0x46, 0x05, 0x46, - 0x0d, 0xe6, 0x20, 0x08, 0x47, 0x48, 0x9d, 0x8b, 0xd9, 0xb7, 0x38, 0x5d, 0x82, 0x59, 0x81, 0x51, - 0x83, 0xdb, 0x48, 0x54, 0x0f, 0x61, 0x91, 0x5e, 0x70, 0x6e, 0x62, 0x4e, 0x8e, 0x6f, 0x71, 0xba, - 0x71, 0x10, 0x48, 0x85, 0x90, 0x10, 0x17, 0x8b, 0x67, 0x5e, 0x49, 0xb1, 0x04, 0x8b, 0x02, 0xb3, - 0x06, 0x73, 0x10, 0x98, 0xad, 0x14, 0xce, 0xc5, 0x09, 0x57, 0x25, 0xa4, 0xc0, 0xc5, 0x1d, 0x9c, - 0x9c, 0x58, 0xe4, 0x54, 0x5a, 0x1c, 0x5c, 0x92, 0x5f, 0x00, 0xb6, 0x85, 0x33, 0x08, 0x59, 0x48, - 0x48, 0x83, 0x8b, 0xdf, 0x2d, 0x27, 0x33, 0x3d, 0xa3, 0x24, 0x20, 0xb1, 0x28, 0x31, 0x39, 0xa3, - 0xb4, 0x24, 0x55, 0x82, 0x47, 0x81, 0x59, 0x83, 0x3d, 0x08, 0x5d, 0xd8, 0x49, 0xe4, 0xc3, 0x43, - 0x39, 0xc6, 0x1f, 0x0f, 0xe5, 0x18, 0x37, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, - 0x63, 0x39, 0x86, 0x24, 0x36, 0x48, 0xa0, 0x00, 0x02, 0x00, 0x00, 0xff, 0xff, 0xc6, 0x11, 0xe7, - 0xa2, 0x1d, 0x01, 0x00, 0x00, -} - -func (this *Proto3) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { - return Proto3Description() -} -func (this *SmallMsg3) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { - return Proto3Description() -} -func Proto3Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { - d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} - var gzipped = []byte{ - // 3933 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x59, 0x70, 0x23, 0xd7, - 0x75, 0x1d, 0x6c, 0x24, 0x70, 0x01, 0x82, 0xcd, 0x47, 0xce, 0x0c, 0x86, 0xb2, 0x66, 0x38, 0x94, - 0xe4, 0xa1, 0x24, 0x8b, 0xe3, 0x9a, 0x4d, 0x12, 0x26, 0xb6, 0x02, 0x92, 0x18, 0x1a, 0x0a, 0x17, - 0xb8, 0x41, 0x5a, 0x5b, 0xa5, 0xba, 0x1e, 0x1b, 0x8f, 0x60, 0xcf, 0x34, 0xba, 0xdb, 0xdd, 0x8d, - 0x19, 0x71, 0x2a, 0x1f, 0x4a, 0x29, 0x4b, 0xb9, 0xb2, 0x2f, 0x55, 0xb1, 0x15, 0x49, 0x89, 0x9d, - 0x8a, 0x95, 0x38, 0x9b, 0x9d, 0xc5, 0x89, 0x9d, 0x9f, 0xfc, 0x38, 0xf1, 0x57, 0x2a, 0xfe, 0xcb, - 0x47, 0x3e, 0xe2, 0x48, 0x55, 0xd9, 0x94, 0xc4, 0x49, 0xe6, 0xc3, 0x55, 0xfa, 0x71, 0xbd, 0xad, - 0xd1, 0xdd, 0x00, 0xa7, 0x9b, 0xae, 0x92, 0xf4, 0x45, 0xf4, 0x7d, 0xf7, 0x9c, 0xbe, 0xef, 0xbe, - 0xfb, 0xee, 0xbd, 0xef, 0x35, 0xe1, 0xdb, 0x75, 0x58, 0xe8, 0xd9, 0x76, 0xcf, 0x24, 0x17, 0x1d, - 0xd7, 0xf6, 0xed, 0xbd, 0xc1, 0xfe, 0xc5, 0x2e, 0xf1, 0x74, 0xd7, 0x70, 0x7c, 0xdb, 0x5d, 0x66, - 0x32, 0x34, 0xcd, 0x35, 0x96, 0xa5, 0xc6, 0xe2, 0x26, 0xcc, 0xdc, 0x30, 0x4c, 0xb2, 0x16, 0x28, - 0x76, 0x88, 0x8f, 0x9e, 0x82, 0xfc, 0xbe, 0x61, 0x92, 0x5a, 0x66, 0x21, 0xb7, 0x54, 0xbe, 0xf4, - 0xf0, 0x72, 0x0c, 0xb4, 0x1c, 0x45, 0xb4, 0xa9, 0x58, 0x65, 0x88, 0xc5, 0x77, 0xf2, 0x30, 0x3b, - 0x66, 0x14, 0x21, 0xc8, 0x5b, 0xb8, 0x4f, 0x19, 0x33, 0x4b, 0x25, 0x95, 0xfd, 0x46, 0x35, 0x98, - 0x74, 0xb0, 0x7e, 0x0b, 0xf7, 0x48, 0x2d, 0xcb, 0xc4, 0xf2, 0x11, 0x9d, 0x05, 0xe8, 0x12, 0x87, - 0x58, 0x5d, 0x62, 0xe9, 0x87, 0xb5, 0xdc, 0x42, 0x6e, 0xa9, 0xa4, 0x86, 0x24, 0xe8, 0x71, 0x98, - 0x71, 0x06, 0x7b, 0xa6, 0xa1, 0x6b, 0x21, 0x35, 0x58, 0xc8, 0x2d, 0x15, 0x54, 0x85, 0x0f, 0xac, - 0x0d, 0x95, 0x2f, 0xc0, 0xf4, 0x1d, 0x82, 0x6f, 0x85, 0x55, 0xcb, 0x4c, 0xb5, 0x4a, 0xc5, 0x21, - 0xc5, 0x55, 0xa8, 0xf4, 0x89, 0xe7, 0xe1, 0x1e, 0xd1, 0xfc, 0x43, 0x87, 0xd4, 0xf2, 0x6c, 0xf6, - 0x0b, 0x23, 0xb3, 0x8f, 0xcf, 0xbc, 0x2c, 0x50, 0x3b, 0x87, 0x0e, 0x41, 0x0d, 0x28, 0x11, 0x6b, - 0xd0, 0xe7, 0x0c, 0x85, 0x23, 0xfc, 0xd7, 0xb4, 0x06, 0xfd, 0x38, 0x4b, 0x91, 0xc2, 0x04, 0xc5, - 0xa4, 0x47, 0xdc, 0xdb, 0x86, 0x4e, 0x6a, 0x13, 0x8c, 0xe0, 0xc2, 0x08, 0x41, 0x87, 0x8f, 0xc7, - 0x39, 0x24, 0x0e, 0xad, 0x42, 0x89, 0xbc, 0xec, 0x13, 0xcb, 0x33, 0x6c, 0xab, 0x36, 0xc9, 0x48, - 0x1e, 0x19, 0xb3, 0x8a, 0xc4, 0xec, 0xc6, 0x29, 0x86, 0x38, 0x74, 0x0d, 0x26, 0x6d, 0xc7, 0x37, - 0x6c, 0xcb, 0xab, 0x15, 0x17, 0x32, 0x4b, 0xe5, 0x4b, 0x1f, 0x19, 0x1b, 0x08, 0xdb, 0x5c, 0x47, - 0x95, 0xca, 0xa8, 0x05, 0x8a, 0x67, 0x0f, 0x5c, 0x9d, 0x68, 0xba, 0xdd, 0x25, 0x9a, 0x61, 0xed, - 0xdb, 0xb5, 0x12, 0x23, 0x38, 0x37, 0x3a, 0x11, 0xa6, 0xb8, 0x6a, 0x77, 0x49, 0xcb, 0xda, 0xb7, - 0xd5, 0xaa, 0x17, 0x79, 0x46, 0xa7, 0x60, 0xc2, 0x3b, 0xb4, 0x7c, 0xfc, 0x72, 0xad, 0xc2, 0x22, - 0x44, 0x3c, 0x2d, 0x7e, 0x63, 0x02, 0xa6, 0xd3, 0x84, 0xd8, 0x75, 0x28, 0xec, 0xd3, 0x59, 0xd6, - 0xb2, 0xc7, 0xf1, 0x01, 0xc7, 0x44, 0x9d, 0x38, 0xf1, 0x43, 0x3a, 0xb1, 0x01, 0x65, 0x8b, 0x78, - 0x3e, 0xe9, 0xf2, 0x88, 0xc8, 0xa5, 0x8c, 0x29, 0xe0, 0xa0, 0xd1, 0x90, 0xca, 0xff, 0x50, 0x21, - 0xf5, 0x3c, 0x4c, 0x07, 0x26, 0x69, 0x2e, 0xb6, 0x7a, 0x32, 0x36, 0x2f, 0x26, 0x59, 0xb2, 0xdc, - 0x94, 0x38, 0x95, 0xc2, 0xd4, 0x2a, 0x89, 0x3c, 0xa3, 0x35, 0x00, 0xdb, 0x22, 0xf6, 0xbe, 0xd6, - 0x25, 0xba, 0x59, 0x2b, 0x1e, 0xe1, 0xa5, 0x6d, 0xaa, 0x32, 0xe2, 0x25, 0x9b, 0x4b, 0x75, 0x13, - 0x3d, 0x3d, 0x0c, 0xb5, 0xc9, 0x23, 0x22, 0x65, 0x93, 0x6f, 0xb2, 0x91, 0x68, 0xdb, 0x85, 0xaa, - 0x4b, 0x68, 0xdc, 0x93, 0xae, 0x98, 0x59, 0x89, 0x19, 0xb1, 0x9c, 0x38, 0x33, 0x55, 0xc0, 0xf8, - 0xc4, 0xa6, 0xdc, 0xf0, 0x23, 0x7a, 0x08, 0x02, 0x81, 0xc6, 0xc2, 0x0a, 0x58, 0x16, 0xaa, 0x48, - 0xe1, 0x16, 0xee, 0x93, 0xf9, 0xbb, 0x50, 0x8d, 0xba, 0x07, 0xcd, 0x41, 0xc1, 0xf3, 0xb1, 0xeb, - 0xb3, 0x28, 0x2c, 0xa8, 0xfc, 0x01, 0x29, 0x90, 0x23, 0x56, 0x97, 0x65, 0xb9, 0x82, 0x4a, 0x7f, - 0xa2, 0x1f, 0x1d, 0x4e, 0x38, 0xc7, 0x26, 0xfc, 0xd1, 0xd1, 0x15, 0x8d, 0x30, 0xc7, 0xe7, 0x3d, - 0xff, 0x24, 0x4c, 0x45, 0x26, 0x90, 0xf6, 0xd5, 0x8b, 0x3f, 0x01, 0x27, 0xc7, 0x52, 0xa3, 0xe7, - 0x61, 0x6e, 0x60, 0x19, 0x96, 0x4f, 0x5c, 0xc7, 0x25, 0x34, 0x62, 0xf9, 0xab, 0x6a, 0xff, 0x3a, - 0x79, 0x44, 0xcc, 0xed, 0x86, 0xb5, 0x39, 0x8b, 0x3a, 0x3b, 0x18, 0x15, 0x3e, 0x56, 0x2a, 0xfe, - 0xdb, 0xa4, 0xf2, 0xca, 0x2b, 0xaf, 0xbc, 0x92, 0x5d, 0xfc, 0xfc, 0x04, 0xcc, 0x8d, 0xdb, 0x33, - 0x63, 0xb7, 0xef, 0x29, 0x98, 0xb0, 0x06, 0xfd, 0x3d, 0xe2, 0x32, 0x27, 0x15, 0x54, 0xf1, 0x84, - 0x1a, 0x50, 0x30, 0xf1, 0x1e, 0x31, 0x6b, 0xf9, 0x85, 0xcc, 0x52, 0xf5, 0xd2, 0xe3, 0xa9, 0x76, - 0xe5, 0xf2, 0x06, 0x85, 0xa8, 0x1c, 0x89, 0x3e, 0x09, 0x79, 0x91, 0xa2, 0x29, 0xc3, 0x63, 0xe9, - 0x18, 0xe8, 0x5e, 0x52, 0x19, 0x0e, 0x3d, 0x00, 0x25, 0xfa, 0x97, 0xc7, 0xc6, 0x04, 0xb3, 0xb9, - 0x48, 0x05, 0x34, 0x2e, 0xd0, 0x3c, 0x14, 0xd9, 0x36, 0xe9, 0x12, 0x59, 0xda, 0x82, 0x67, 0x1a, - 0x58, 0x5d, 0xb2, 0x8f, 0x07, 0xa6, 0xaf, 0xdd, 0xc6, 0xe6, 0x80, 0xb0, 0x80, 0x2f, 0xa9, 0x15, - 0x21, 0xfc, 0x0c, 0x95, 0xa1, 0x73, 0x50, 0xe6, 0xbb, 0xca, 0xb0, 0xba, 0xe4, 0x65, 0x96, 0x3d, - 0x0b, 0x2a, 0xdf, 0x68, 0x2d, 0x2a, 0xa1, 0xaf, 0xbf, 0xe9, 0xd9, 0x96, 0x0c, 0x4d, 0xf6, 0x0a, - 0x2a, 0x60, 0xaf, 0x7f, 0x32, 0x9e, 0xb8, 0x1f, 0x1c, 0x3f, 0xbd, 0x78, 0x4c, 0x2d, 0x7e, 0x3d, - 0x0b, 0x79, 0x96, 0x2f, 0xa6, 0xa1, 0xbc, 0xf3, 0x42, 0xbb, 0xa9, 0xad, 0x6d, 0xef, 0xae, 0x6c, - 0x34, 0x95, 0x0c, 0xaa, 0x02, 0x30, 0xc1, 0x8d, 0x8d, 0xed, 0xc6, 0x8e, 0x92, 0x0d, 0x9e, 0x5b, - 0x5b, 0x3b, 0xd7, 0xae, 0x28, 0xb9, 0x00, 0xb0, 0xcb, 0x05, 0xf9, 0xb0, 0xc2, 0xe5, 0x4b, 0x4a, - 0x01, 0x29, 0x50, 0xe1, 0x04, 0xad, 0xe7, 0x9b, 0x6b, 0xd7, 0xae, 0x28, 0x13, 0x51, 0xc9, 0xe5, - 0x4b, 0xca, 0x24, 0x9a, 0x82, 0x12, 0x93, 0xac, 0x6c, 0x6f, 0x6f, 0x28, 0xc5, 0x80, 0xb3, 0xb3, - 0xa3, 0xb6, 0xb6, 0xd6, 0x95, 0x52, 0xc0, 0xb9, 0xae, 0x6e, 0xef, 0xb6, 0x15, 0x08, 0x18, 0x36, - 0x9b, 0x9d, 0x4e, 0x63, 0xbd, 0xa9, 0x94, 0x03, 0x8d, 0x95, 0x17, 0x76, 0x9a, 0x1d, 0xa5, 0x12, - 0x31, 0xeb, 0xf2, 0x25, 0x65, 0x2a, 0x78, 0x45, 0x73, 0x6b, 0x77, 0x53, 0xa9, 0xa2, 0x19, 0x98, - 0xe2, 0xaf, 0x90, 0x46, 0x4c, 0xc7, 0x44, 0xd7, 0xae, 0x28, 0xca, 0xd0, 0x10, 0xce, 0x32, 0x13, - 0x11, 0x5c, 0xbb, 0xa2, 0xa0, 0xc5, 0x55, 0x28, 0xb0, 0xe8, 0x42, 0x08, 0xaa, 0x1b, 0x8d, 0x95, - 0xe6, 0x86, 0xb6, 0xdd, 0xde, 0x69, 0x6d, 0x6f, 0x35, 0x36, 0x94, 0xcc, 0x50, 0xa6, 0x36, 0x3f, - 0xbd, 0xdb, 0x52, 0x9b, 0x6b, 0x4a, 0x36, 0x2c, 0x6b, 0x37, 0x1b, 0x3b, 0xcd, 0x35, 0x25, 0xb7, - 0xa8, 0xc3, 0xdc, 0xb8, 0x3c, 0x39, 0x76, 0x67, 0x84, 0x96, 0x38, 0x7b, 0xc4, 0x12, 0x33, 0xae, - 0x91, 0x25, 0x7e, 0x3b, 0x0b, 0xb3, 0x63, 0x6a, 0xc5, 0xd8, 0x97, 0x3c, 0x03, 0x05, 0x1e, 0xa2, - 0xbc, 0x7a, 0x3e, 0x3a, 0xb6, 0xe8, 0xb0, 0x80, 0x1d, 0xa9, 0xa0, 0x0c, 0x17, 0xee, 0x20, 0x72, - 0x47, 0x74, 0x10, 0x94, 0x62, 0x24, 0xa7, 0xff, 0xf8, 0x48, 0x4e, 0xe7, 0x65, 0xef, 0x5a, 0x9a, - 0xb2, 0xc7, 0x64, 0xc7, 0xcb, 0xed, 0x85, 0x31, 0xb9, 0xfd, 0x3a, 0xcc, 0x8c, 0x10, 0xa5, 0xce, - 0xb1, 0xaf, 0x66, 0xa0, 0x76, 0x94, 0x73, 0x12, 0x32, 0x5d, 0x36, 0x92, 0xe9, 0xae, 0xc7, 0x3d, - 0x78, 0xfe, 0xe8, 0x45, 0x18, 0x59, 0xeb, 0xb7, 0x32, 0x70, 0x6a, 0x7c, 0xa7, 0x38, 0xd6, 0x86, - 0x4f, 0xc2, 0x44, 0x9f, 0xf8, 0x07, 0xb6, 0xec, 0x96, 0x3e, 0x3a, 0xa6, 0x06, 0xd3, 0xe1, 0xf8, - 0x62, 0x0b, 0x54, 0xb8, 0x88, 0xe7, 0x8e, 0x6a, 0xf7, 0xb8, 0x35, 0x23, 0x96, 0x7e, 0x2e, 0x0b, - 0x27, 0xc7, 0x92, 0x8f, 0x35, 0xf4, 0x41, 0x00, 0xc3, 0x72, 0x06, 0x3e, 0xef, 0x88, 0x78, 0x82, - 0x2d, 0x31, 0x09, 0x4b, 0x5e, 0x34, 0x79, 0x0e, 0xfc, 0x60, 0x3c, 0xc7, 0xc6, 0x81, 0x8b, 0x98, - 0xc2, 0x53, 0x43, 0x43, 0xf3, 0xcc, 0xd0, 0xb3, 0x47, 0xcc, 0x74, 0x24, 0x30, 0x3f, 0x0e, 0x8a, - 0x6e, 0x1a, 0xc4, 0xf2, 0x35, 0xcf, 0x77, 0x09, 0xee, 0x1b, 0x56, 0x8f, 0x55, 0x90, 0x62, 0xbd, - 0xb0, 0x8f, 0x4d, 0x8f, 0xa8, 0xd3, 0x7c, 0xb8, 0x23, 0x47, 0x29, 0x82, 0x05, 0x90, 0x1b, 0x42, - 0x4c, 0x44, 0x10, 0x7c, 0x38, 0x40, 0x2c, 0xfe, 0x7c, 0x09, 0xca, 0xa1, 0xbe, 0x1a, 0x9d, 0x87, - 0xca, 0x4d, 0x7c, 0x1b, 0x6b, 0xf2, 0xac, 0xc4, 0x3d, 0x51, 0xa6, 0xb2, 0xb6, 0x38, 0x2f, 0x7d, - 0x1c, 0xe6, 0x98, 0x8a, 0x3d, 0xf0, 0x89, 0xab, 0xe9, 0x26, 0xf6, 0x3c, 0xe6, 0xb4, 0x22, 0x53, - 0x45, 0x74, 0x6c, 0x9b, 0x0e, 0xad, 0xca, 0x11, 0x74, 0x15, 0x66, 0x19, 0xa2, 0x3f, 0x30, 0x7d, - 0xc3, 0x31, 0x89, 0x46, 0x4f, 0x6f, 0x1e, 0xab, 0x24, 0x81, 0x65, 0x33, 0x54, 0x63, 0x53, 0x28, - 0x50, 0x8b, 0x3c, 0xb4, 0x06, 0x0f, 0x32, 0x58, 0x8f, 0x58, 0xc4, 0xc5, 0x3e, 0xd1, 0xc8, 0x67, - 0x07, 0xd8, 0xf4, 0x34, 0x6c, 0x75, 0xb5, 0x03, 0xec, 0x1d, 0xd4, 0xe6, 0x28, 0xc1, 0x4a, 0xb6, - 0x96, 0x51, 0xcf, 0x50, 0xc5, 0x75, 0xa1, 0xd7, 0x64, 0x6a, 0x0d, 0xab, 0xfb, 0x29, 0xec, 0x1d, - 0xa0, 0x3a, 0x9c, 0x62, 0x2c, 0x9e, 0xef, 0x1a, 0x56, 0x4f, 0xd3, 0x0f, 0x88, 0x7e, 0x4b, 0x1b, - 0xf8, 0xfb, 0x4f, 0xd5, 0x1e, 0x08, 0xbf, 0x9f, 0x59, 0xd8, 0x61, 0x3a, 0xab, 0x54, 0x65, 0xd7, - 0xdf, 0x7f, 0x0a, 0x75, 0xa0, 0x42, 0x17, 0xa3, 0x6f, 0xdc, 0x25, 0xda, 0xbe, 0xed, 0xb2, 0xd2, - 0x58, 0x1d, 0x93, 0x9a, 0x42, 0x1e, 0x5c, 0xde, 0x16, 0x80, 0x4d, 0xbb, 0x4b, 0xea, 0x85, 0x4e, - 0xbb, 0xd9, 0x5c, 0x53, 0xcb, 0x92, 0xe5, 0x86, 0xed, 0xd2, 0x80, 0xea, 0xd9, 0x81, 0x83, 0xcb, - 0x3c, 0xa0, 0x7a, 0xb6, 0x74, 0xef, 0x55, 0x98, 0xd5, 0x75, 0x3e, 0x67, 0x43, 0xd7, 0xc4, 0x19, - 0xcb, 0xab, 0x29, 0x11, 0x67, 0xe9, 0xfa, 0x3a, 0x57, 0x10, 0x31, 0xee, 0xa1, 0xa7, 0xe1, 0xe4, - 0xd0, 0x59, 0x61, 0xe0, 0xcc, 0xc8, 0x2c, 0xe3, 0xd0, 0xab, 0x30, 0xeb, 0x1c, 0x8e, 0x02, 0x51, - 0xe4, 0x8d, 0xce, 0x61, 0x1c, 0xf6, 0x24, 0xcc, 0x39, 0x07, 0xce, 0x28, 0xee, 0xb1, 0x30, 0x0e, - 0x39, 0x07, 0x4e, 0x1c, 0xf8, 0x08, 0x3b, 0x70, 0xbb, 0x44, 0xc7, 0x3e, 0xe9, 0xd6, 0x4e, 0x87, - 0xd5, 0x43, 0x03, 0xe8, 0x22, 0x28, 0xba, 0xae, 0x11, 0x0b, 0xef, 0x99, 0x44, 0xc3, 0x2e, 0xb1, - 0xb0, 0x57, 0x3b, 0x17, 0x56, 0xae, 0xea, 0x7a, 0x93, 0x8d, 0x36, 0xd8, 0x20, 0x7a, 0x0c, 0x66, - 0xec, 0xbd, 0x9b, 0x3a, 0x0f, 0x49, 0xcd, 0x71, 0xc9, 0xbe, 0xf1, 0x72, 0xed, 0x61, 0xe6, 0xdf, - 0x69, 0x3a, 0xc0, 0x02, 0xb2, 0xcd, 0xc4, 0xe8, 0x51, 0x50, 0x74, 0xef, 0x00, 0xbb, 0x0e, 0xcb, - 0xc9, 0x9e, 0x83, 0x75, 0x52, 0x7b, 0x84, 0xab, 0x72, 0xf9, 0x96, 0x14, 0xd3, 0x2d, 0xe1, 0xdd, - 0x31, 0xf6, 0x7d, 0xc9, 0x78, 0x81, 0x6f, 0x09, 0x26, 0x13, 0x6c, 0x4b, 0xa0, 0x50, 0x57, 0x44, - 0x5e, 0xbc, 0xc4, 0xd4, 0xaa, 0xce, 0x81, 0x13, 0x7e, 0xef, 0x43, 0x30, 0x45, 0x35, 0x87, 0x2f, - 0x7d, 0x94, 0x37, 0x64, 0xce, 0x41, 0xe8, 0x8d, 0x57, 0xe0, 0x14, 0x55, 0xea, 0x13, 0x1f, 0x77, - 0xb1, 0x8f, 0x43, 0xda, 0x1f, 0x63, 0xda, 0xd4, 0xef, 0x9b, 0x62, 0x30, 0x62, 0xa7, 0x3b, 0xd8, - 0x3b, 0x0c, 0x22, 0xeb, 0x09, 0x6e, 0x27, 0x95, 0xc9, 0xd8, 0x7a, 0xdf, 0x9a, 0xee, 0xc5, 0x3a, - 0x54, 0xc2, 0x81, 0x8f, 0x4a, 0xc0, 0x43, 0x5f, 0xc9, 0xd0, 0x2e, 0x68, 0x75, 0x7b, 0x8d, 0xf6, - 0x2f, 0x2f, 0x36, 0x95, 0x2c, 0xed, 0xa3, 0x36, 0x5a, 0x3b, 0x4d, 0x4d, 0xdd, 0xdd, 0xda, 0x69, - 0x6d, 0x36, 0x95, 0x5c, 0xb8, 0x61, 0xff, 0x56, 0x16, 0xaa, 0xd1, 0xb3, 0x17, 0xfa, 0x11, 0x38, - 0x2d, 0x2f, 0x4a, 0x3c, 0xe2, 0x6b, 0x77, 0x0c, 0x97, 0xed, 0xc5, 0x3e, 0xe6, 0x75, 0x31, 0x88, - 0x86, 0x39, 0xa1, 0xd5, 0x21, 0xfe, 0x73, 0x86, 0x4b, 0x77, 0x5a, 0x1f, 0xfb, 0x68, 0x03, 0xce, - 0x59, 0xb6, 0xe6, 0xf9, 0xd8, 0xea, 0x62, 0xb7, 0xab, 0x0d, 0xaf, 0xa8, 0x34, 0xac, 0xeb, 0xc4, - 0xf3, 0x6c, 0x5e, 0x03, 0x03, 0x96, 0x8f, 0x58, 0x76, 0x47, 0x28, 0x0f, 0x8b, 0x43, 0x43, 0xa8, - 0xc6, 0x22, 0x37, 0x77, 0x54, 0xe4, 0x3e, 0x00, 0xa5, 0x3e, 0x76, 0x34, 0x62, 0xf9, 0xee, 0x21, - 0xeb, 0xb8, 0x8b, 0x6a, 0xb1, 0x8f, 0x9d, 0x26, 0x7d, 0xfe, 0x60, 0x0e, 0x3e, 0xff, 0x94, 0x83, - 0x4a, 0xb8, 0xeb, 0xa6, 0x87, 0x18, 0x9d, 0x15, 0xa8, 0x0c, 0x4b, 0x61, 0x0f, 0xdd, 0xb7, 0x47, - 0x5f, 0x5e, 0xa5, 0x95, 0xab, 0x3e, 0xc1, 0x7b, 0x61, 0x95, 0x23, 0x69, 0xd7, 0x40, 0x43, 0x8b, - 0xf0, 0xde, 0xa3, 0xa8, 0x8a, 0x27, 0xb4, 0x0e, 0x13, 0x37, 0x3d, 0xc6, 0x3d, 0xc1, 0xb8, 0x1f, - 0xbe, 0x3f, 0xf7, 0xb3, 0x1d, 0x46, 0x5e, 0x7a, 0xb6, 0xa3, 0x6d, 0x6d, 0xab, 0x9b, 0x8d, 0x0d, - 0x55, 0xc0, 0xd1, 0x19, 0xc8, 0x9b, 0xf8, 0xee, 0x61, 0xb4, 0xc6, 0x31, 0x51, 0x5a, 0xc7, 0x9f, - 0x81, 0xfc, 0x1d, 0x82, 0x6f, 0x45, 0x2b, 0x0b, 0x13, 0xbd, 0x8f, 0xa1, 0x7f, 0x11, 0x0a, 0xcc, - 0x5f, 0x08, 0x40, 0x78, 0x4c, 0x39, 0x81, 0x8a, 0x90, 0x5f, 0xdd, 0x56, 0x69, 0xf8, 0x2b, 0x50, - 0xe1, 0x52, 0xad, 0xdd, 0x6a, 0xae, 0x36, 0x95, 0xec, 0xe2, 0x55, 0x98, 0xe0, 0x4e, 0xa0, 0x5b, - 0x23, 0x70, 0x83, 0x72, 0x42, 0x3c, 0x0a, 0x8e, 0x8c, 0x1c, 0xdd, 0xdd, 0x5c, 0x69, 0xaa, 0x4a, - 0x36, 0xbc, 0xbc, 0x1e, 0x54, 0xc2, 0x0d, 0xf7, 0x07, 0x13, 0x53, 0xdf, 0xcc, 0x40, 0x39, 0xd4, - 0x40, 0xd3, 0xce, 0x07, 0x9b, 0xa6, 0x7d, 0x47, 0xc3, 0xa6, 0x81, 0x3d, 0x11, 0x14, 0xc0, 0x44, - 0x0d, 0x2a, 0x49, 0xbb, 0x68, 0x1f, 0x88, 0xf1, 0x6f, 0x66, 0x40, 0x89, 0xf7, 0xae, 0x31, 0x03, - 0x33, 0x1f, 0xaa, 0x81, 0xaf, 0x67, 0xa0, 0x1a, 0x6d, 0x58, 0x63, 0xe6, 0x9d, 0xff, 0x50, 0xcd, - 0xfb, 0xe7, 0x2c, 0x4c, 0x45, 0xda, 0xd4, 0xb4, 0xd6, 0x7d, 0x16, 0x66, 0x8c, 0x2e, 0xe9, 0x3b, - 0xb6, 0x4f, 0x2c, 0xfd, 0x50, 0x33, 0xc9, 0x6d, 0x62, 0xd6, 0x16, 0x59, 0xa2, 0xb8, 0x78, 0xff, - 0x46, 0x78, 0xb9, 0x35, 0xc4, 0x6d, 0x50, 0x58, 0x7d, 0xb6, 0xb5, 0xd6, 0xdc, 0x6c, 0x6f, 0xef, - 0x34, 0xb7, 0x56, 0x5f, 0xd0, 0x76, 0xb7, 0x7e, 0x6c, 0x6b, 0xfb, 0xb9, 0x2d, 0x55, 0x31, 0x62, - 0x6a, 0xef, 0xe3, 0x56, 0x6f, 0x83, 0x12, 0x37, 0x0a, 0x9d, 0x86, 0x71, 0x66, 0x29, 0x27, 0xd0, - 0x2c, 0x4c, 0x6f, 0x6d, 0x6b, 0x9d, 0xd6, 0x5a, 0x53, 0x6b, 0xde, 0xb8, 0xd1, 0x5c, 0xdd, 0xe9, - 0xf0, 0xab, 0x8d, 0x40, 0x7b, 0x27, 0xba, 0xa9, 0x5f, 0xcb, 0xc1, 0xec, 0x18, 0x4b, 0x50, 0x43, - 0x1c, 0x4a, 0xf8, 0x39, 0xe9, 0x89, 0x34, 0xd6, 0x2f, 0xd3, 0xae, 0xa0, 0x8d, 0x5d, 0x5f, 0x9c, - 0x61, 0x1e, 0x05, 0xea, 0x25, 0xcb, 0x37, 0xf6, 0x0d, 0xe2, 0x8a, 0x9b, 0x20, 0x7e, 0x52, 0x99, - 0x1e, 0xca, 0xf9, 0x65, 0xd0, 0xc7, 0x00, 0x39, 0xb6, 0x67, 0xf8, 0xc6, 0x6d, 0xa2, 0x19, 0x96, - 0xbc, 0x36, 0xa2, 0x27, 0x97, 0xbc, 0xaa, 0xc8, 0x91, 0x96, 0xe5, 0x07, 0xda, 0x16, 0xe9, 0xe1, - 0x98, 0x36, 0x4d, 0xe0, 0x39, 0x55, 0x91, 0x23, 0x81, 0xf6, 0x79, 0xa8, 0x74, 0xed, 0x01, 0x6d, - 0xe7, 0xb8, 0x1e, 0xad, 0x17, 0x19, 0xb5, 0xcc, 0x65, 0x81, 0x8a, 0x68, 0xd4, 0x87, 0xf7, 0x55, - 0x15, 0xb5, 0xcc, 0x65, 0x5c, 0xe5, 0x02, 0x4c, 0xe3, 0x5e, 0xcf, 0xa5, 0xe4, 0x92, 0x88, 0x1f, - 0x3d, 0xaa, 0x81, 0x98, 0x29, 0xce, 0x3f, 0x0b, 0x45, 0xe9, 0x07, 0x5a, 0x92, 0xa9, 0x27, 0x34, - 0x87, 0x9f, 0xa7, 0xb3, 0x4b, 0x25, 0xb5, 0x68, 0xc9, 0xc1, 0xf3, 0x50, 0x31, 0x3c, 0x6d, 0x78, - 0xfd, 0x9e, 0x5d, 0xc8, 0x2e, 0x15, 0xd5, 0xb2, 0xe1, 0x05, 0x57, 0x97, 0x8b, 0x6f, 0x65, 0xa1, - 0x1a, 0xfd, 0x7c, 0x80, 0xd6, 0xa0, 0x68, 0xda, 0x3a, 0x66, 0xa1, 0xc5, 0xbf, 0x5d, 0x2d, 0x25, - 0x7c, 0x71, 0x58, 0xde, 0x10, 0xfa, 0x6a, 0x80, 0x9c, 0xff, 0xfb, 0x0c, 0x14, 0xa5, 0x18, 0x9d, - 0x82, 0xbc, 0x83, 0xfd, 0x03, 0x46, 0x57, 0x58, 0xc9, 0x2a, 0x19, 0x95, 0x3d, 0x53, 0xb9, 0xe7, - 0x60, 0x8b, 0x85, 0x80, 0x90, 0xd3, 0x67, 0xba, 0xae, 0x26, 0xc1, 0x5d, 0x76, 0xae, 0xb1, 0xfb, - 0x7d, 0x62, 0xf9, 0x9e, 0x5c, 0x57, 0x21, 0x5f, 0x15, 0x62, 0xf4, 0x38, 0xcc, 0xf8, 0x2e, 0x36, - 0xcc, 0x88, 0x6e, 0x9e, 0xe9, 0x2a, 0x72, 0x20, 0x50, 0xae, 0xc3, 0x19, 0xc9, 0xdb, 0x25, 0x3e, - 0xd6, 0x0f, 0x48, 0x77, 0x08, 0x9a, 0x60, 0xf7, 0x17, 0xa7, 0x85, 0xc2, 0x9a, 0x18, 0x97, 0xd8, - 0xc5, 0xef, 0x64, 0x60, 0x46, 0x9e, 0xc4, 0xba, 0x81, 0xb3, 0x36, 0x01, 0xb0, 0x65, 0xd9, 0x7e, - 0xd8, 0x5d, 0xa3, 0xa1, 0x3c, 0x82, 0x5b, 0x6e, 0x04, 0x20, 0x35, 0x44, 0x30, 0xdf, 0x07, 0x18, - 0x8e, 0x1c, 0xe9, 0xb6, 0x73, 0x50, 0x16, 0xdf, 0x86, 0xd8, 0x07, 0x46, 0x7e, 0x76, 0x07, 0x2e, - 0xa2, 0x47, 0x36, 0x34, 0x07, 0x85, 0x3d, 0xd2, 0x33, 0x2c, 0x71, 0xe3, 0xcb, 0x1f, 0xe4, 0x0d, - 0x4b, 0x3e, 0xb8, 0x61, 0x59, 0x79, 0x09, 0x66, 0x75, 0xbb, 0x1f, 0x37, 0x77, 0x45, 0x89, 0xdd, - 0x1f, 0x78, 0x9f, 0xca, 0xbc, 0x08, 0xc3, 0x16, 0xf3, 0xfb, 0x99, 0xcc, 0x97, 0xb2, 0xb9, 0xf5, - 0xf6, 0xca, 0x57, 0xb2, 0xf3, 0xeb, 0x1c, 0xda, 0x96, 0x33, 0x55, 0xc9, 0xbe, 0x49, 0x74, 0x6a, - 0x3d, 0x7c, 0xf9, 0x71, 0x78, 0xa2, 0x67, 0xf8, 0x07, 0x83, 0xbd, 0x65, 0xdd, 0xee, 0x5f, 0xec, - 0xd9, 0x3d, 0x7b, 0xf8, 0x4d, 0x95, 0x3e, 0xb1, 0x07, 0xf6, 0x4b, 0x7c, 0x57, 0x2d, 0x05, 0xd2, - 0xf9, 0xc4, 0x8f, 0xb0, 0xf5, 0x2d, 0x98, 0x15, 0xca, 0x1a, 0xfb, 0xb0, 0xc3, 0x8f, 0x27, 0xe8, - 0xbe, 0x97, 0x63, 0xb5, 0xaf, 0xbd, 0xc3, 0xca, 0xb5, 0x3a, 0x23, 0xa0, 0x74, 0x8c, 0x9f, 0x60, - 0xea, 0x2a, 0x9c, 0x8c, 0xf0, 0xf1, 0xad, 0x49, 0xdc, 0x04, 0xc6, 0x6f, 0x09, 0xc6, 0xd9, 0x10, - 0x63, 0x47, 0x40, 0xeb, 0xab, 0x30, 0x75, 0x1c, 0xae, 0xbf, 0x15, 0x5c, 0x15, 0x12, 0x26, 0x59, - 0x87, 0x69, 0x46, 0xa2, 0x0f, 0x3c, 0xdf, 0xee, 0xb3, 0xbc, 0x77, 0x7f, 0x9a, 0xbf, 0x7b, 0x87, - 0xef, 0x95, 0x2a, 0x85, 0xad, 0x06, 0xa8, 0x7a, 0x1d, 0xd8, 0xb7, 0xac, 0x2e, 0xd1, 0xcd, 0x04, - 0x86, 0x6f, 0x0b, 0x43, 0x02, 0xfd, 0xfa, 0x67, 0x60, 0x8e, 0xfe, 0x66, 0x69, 0x29, 0x6c, 0x49, - 0xf2, 0x4d, 0x5a, 0xed, 0x3b, 0xaf, 0xf2, 0xed, 0x38, 0x1b, 0x10, 0x84, 0x6c, 0x0a, 0xad, 0x62, - 0x8f, 0xf8, 0x3e, 0x71, 0x3d, 0x0d, 0x9b, 0xe3, 0xcc, 0x0b, 0x5d, 0x45, 0xd4, 0xbe, 0xf0, 0x6e, - 0x74, 0x15, 0xd7, 0x39, 0xb2, 0x61, 0x9a, 0xf5, 0x5d, 0x38, 0x3d, 0x26, 0x2a, 0x52, 0x70, 0xbe, - 0x26, 0x38, 0xe7, 0x46, 0x22, 0x83, 0xd2, 0xb6, 0x41, 0xca, 0x83, 0xb5, 0x4c, 0xc1, 0xf9, 0x9b, - 0x82, 0x13, 0x09, 0xac, 0x5c, 0x52, 0xca, 0xf8, 0x2c, 0xcc, 0xdc, 0x26, 0xee, 0x9e, 0xed, 0x89, - 0xeb, 0x9f, 0x14, 0x74, 0xaf, 0x0b, 0xba, 0x69, 0x01, 0x64, 0xf7, 0x41, 0x94, 0xeb, 0x69, 0x28, - 0xee, 0x63, 0x9d, 0xa4, 0xa0, 0x78, 0x43, 0x50, 0x4c, 0x52, 0x7d, 0x0a, 0x6d, 0x40, 0xa5, 0x67, - 0x8b, 0xca, 0x94, 0x0c, 0x7f, 0x53, 0xc0, 0xcb, 0x12, 0x23, 0x28, 0x1c, 0xdb, 0x19, 0x98, 0xb4, - 0x6c, 0x25, 0x53, 0xfc, 0x96, 0xa4, 0x90, 0x18, 0x41, 0x71, 0x0c, 0xb7, 0xfe, 0xb6, 0xa4, 0xf0, - 0x42, 0xfe, 0x7c, 0x06, 0xca, 0xb6, 0x65, 0x1e, 0xda, 0x56, 0x1a, 0x23, 0xbe, 0x28, 0x18, 0x40, - 0x40, 0x28, 0xc1, 0x75, 0x28, 0xa5, 0x5d, 0x88, 0xdf, 0x7d, 0x57, 0x6e, 0x0f, 0xb9, 0x02, 0xeb, - 0x30, 0x2d, 0x13, 0x94, 0x61, 0x5b, 0x29, 0x28, 0xbe, 0x2c, 0x28, 0xaa, 0x21, 0x98, 0x98, 0x86, - 0x4f, 0x3c, 0xbf, 0x47, 0xd2, 0x90, 0xbc, 0x25, 0xa7, 0x21, 0x20, 0xc2, 0x95, 0x7b, 0xc4, 0xd2, - 0x0f, 0xd2, 0x31, 0xfc, 0x9e, 0x74, 0xa5, 0xc4, 0x50, 0x8a, 0x55, 0x98, 0xea, 0x63, 0xd7, 0x3b, - 0xc0, 0x66, 0xaa, 0xe5, 0xf8, 0x7d, 0xc1, 0x51, 0x09, 0x40, 0xc2, 0x23, 0x03, 0xeb, 0x38, 0x34, - 0x5f, 0x91, 0x1e, 0x09, 0xc1, 0xc4, 0xd6, 0xf3, 0x7c, 0x76, 0x57, 0x76, 0x1c, 0xb6, 0x3f, 0x90, - 0x5b, 0x8f, 0x63, 0x37, 0xc3, 0x8c, 0xd7, 0xa1, 0xe4, 0x19, 0x77, 0x53, 0xd1, 0xfc, 0xa1, 0x5c, - 0x69, 0x06, 0xa0, 0xe0, 0x17, 0xe0, 0xcc, 0xd8, 0x32, 0x91, 0x82, 0xec, 0x8f, 0x04, 0xd9, 0xa9, - 0x31, 0xa5, 0x42, 0xa4, 0x84, 0xe3, 0x52, 0xfe, 0xb1, 0x4c, 0x09, 0x24, 0xc6, 0xd5, 0xa6, 0x67, - 0x05, 0x0f, 0xef, 0x1f, 0xcf, 0x6b, 0x7f, 0x22, 0xbd, 0xc6, 0xb1, 0x11, 0xaf, 0xed, 0xc0, 0x29, - 0xc1, 0x78, 0xbc, 0x75, 0xfd, 0xaa, 0x4c, 0xac, 0x1c, 0xbd, 0x1b, 0x5d, 0xdd, 0x97, 0x60, 0x3e, - 0x70, 0xa7, 0x6c, 0x4a, 0x3d, 0xad, 0x8f, 0x9d, 0x14, 0xcc, 0x5f, 0x13, 0xcc, 0x32, 0xe3, 0x07, - 0x5d, 0xad, 0xb7, 0x89, 0x1d, 0x4a, 0xfe, 0x3c, 0xd4, 0x24, 0xf9, 0xc0, 0x72, 0x89, 0x6e, 0xf7, - 0x2c, 0xe3, 0x2e, 0xe9, 0xa6, 0xa0, 0xfe, 0xd3, 0xd8, 0x52, 0xed, 0x86, 0xe0, 0x94, 0xb9, 0x05, - 0x4a, 0xd0, 0xab, 0x68, 0x46, 0xdf, 0xb1, 0x5d, 0x3f, 0x81, 0xf1, 0xcf, 0xe4, 0x4a, 0x05, 0xb8, - 0x16, 0x83, 0xd5, 0x9b, 0x50, 0x65, 0x8f, 0x69, 0x43, 0xf2, 0xcf, 0x05, 0xd1, 0xd4, 0x10, 0x25, - 0x12, 0x87, 0x6e, 0xf7, 0x1d, 0xec, 0xa6, 0xc9, 0x7f, 0x7f, 0x21, 0x13, 0x87, 0x80, 0x88, 0xc4, - 0xe1, 0x1f, 0x3a, 0x84, 0x56, 0xfb, 0x14, 0x0c, 0x5f, 0x97, 0x89, 0x43, 0x62, 0x04, 0x85, 0x6c, - 0x18, 0x52, 0x50, 0xfc, 0xa5, 0xa4, 0x90, 0x18, 0x4a, 0xf1, 0xe9, 0x61, 0xa1, 0x75, 0x49, 0xcf, - 0xf0, 0x7c, 0x97, 0xb7, 0xc2, 0xf7, 0xa7, 0xfa, 0xab, 0x77, 0xa3, 0x4d, 0x98, 0x1a, 0x82, 0xd2, - 0x4c, 0x24, 0xae, 0x50, 0xd9, 0x49, 0x29, 0xd9, 0xb0, 0x6f, 0xc8, 0x4c, 0x14, 0x82, 0x51, 0xdb, - 0x42, 0x1d, 0x22, 0x75, 0xbb, 0x4e, 0xcf, 0x07, 0x29, 0xe8, 0xbe, 0x19, 0x33, 0xae, 0x23, 0xb1, - 0x94, 0x33, 0xd4, 0xff, 0x0c, 0xac, 0x5b, 0xe4, 0x30, 0x55, 0x74, 0xfe, 0x75, 0xac, 0xff, 0xd9, - 0xe5, 0x48, 0x9e, 0x43, 0xa6, 0x63, 0xfd, 0x14, 0x4a, 0xfa, 0x2f, 0xa0, 0xda, 0x4f, 0xde, 0x13, - 0xf3, 0x8d, 0xb6, 0x53, 0xf5, 0x0d, 0x1a, 0xe4, 0xd1, 0xa6, 0x27, 0x99, 0xec, 0xd5, 0x7b, 0x41, - 0x9c, 0x47, 0x7a, 0x9e, 0xfa, 0x0d, 0x98, 0x8a, 0x34, 0x3c, 0xc9, 0x54, 0x3f, 0x25, 0xa8, 0x2a, - 0xe1, 0x7e, 0xa7, 0x7e, 0x15, 0xf2, 0xb4, 0x79, 0x49, 0x86, 0xff, 0xb4, 0x80, 0x33, 0xf5, 0xfa, - 0x27, 0xa0, 0x28, 0x9b, 0x96, 0x64, 0xe8, 0xcf, 0x08, 0x68, 0x00, 0xa1, 0x70, 0xd9, 0xb0, 0x24, - 0xc3, 0x7f, 0x56, 0xc2, 0x25, 0x84, 0xc2, 0xd3, 0xbb, 0xf0, 0x6f, 0x7e, 0x2e, 0x2f, 0x8a, 0x8e, - 0xf4, 0xdd, 0x75, 0x98, 0x14, 0x9d, 0x4a, 0x32, 0xfa, 0x73, 0xe2, 0xe5, 0x12, 0x51, 0x7f, 0x12, - 0x0a, 0x29, 0x1d, 0xfe, 0x0b, 0x02, 0xca, 0xf5, 0xeb, 0xab, 0x50, 0x0e, 0x75, 0x27, 0xc9, 0xf0, - 0x5f, 0x14, 0xf0, 0x30, 0x8a, 0x9a, 0x2e, 0xba, 0x93, 0x64, 0x82, 0x5f, 0x92, 0xa6, 0x0b, 0x04, - 0x75, 0x9b, 0x6c, 0x4c, 0x92, 0xd1, 0xbf, 0x2c, 0xbd, 0x2e, 0x21, 0xf5, 0x67, 0xa0, 0x14, 0x14, - 0x9b, 0x64, 0xfc, 0xaf, 0x08, 0xfc, 0x10, 0x43, 0x3d, 0x10, 0x2a, 0x76, 0xc9, 0x14, 0xbf, 0x2a, - 0x3d, 0x10, 0x42, 0xd1, 0x6d, 0x14, 0x6f, 0x60, 0x92, 0x99, 0x7e, 0x4d, 0x6e, 0xa3, 0x58, 0xff, - 0x42, 0x57, 0x93, 0xe5, 0xfc, 0x64, 0x8a, 0x5f, 0x97, 0xab, 0xc9, 0xf4, 0xa9, 0x19, 0xf1, 0x8e, - 0x20, 0x99, 0xe3, 0x37, 0xa4, 0x19, 0xb1, 0x86, 0xa0, 0xde, 0x06, 0x34, 0xda, 0x0d, 0x24, 0xf3, - 0x7d, 0x5e, 0xf0, 0xcd, 0x8c, 0x34, 0x03, 0xf5, 0xe7, 0xe0, 0xd4, 0xf8, 0x4e, 0x20, 0x99, 0xf5, - 0x0b, 0xf7, 0x62, 0x67, 0xb7, 0x70, 0x23, 0x50, 0xdf, 0x19, 0x96, 0x94, 0x70, 0x17, 0x90, 0x4c, - 0xfb, 0xda, 0xbd, 0x68, 0xe2, 0x0e, 0x37, 0x01, 0xf5, 0x06, 0xc0, 0xb0, 0x00, 0x27, 0x73, 0xbd, - 0x2e, 0xb8, 0x42, 0x20, 0xba, 0x35, 0x44, 0xfd, 0x4d, 0xc6, 0xbf, 0x21, 0xb7, 0x86, 0x40, 0xd0, - 0xad, 0x21, 0x4b, 0x6f, 0x32, 0xfa, 0x4d, 0xb9, 0x35, 0x24, 0x84, 0x46, 0x76, 0xa8, 0xba, 0x25, - 0x33, 0x7c, 0x51, 0x46, 0x76, 0x08, 0x55, 0xdf, 0x82, 0x99, 0x91, 0x82, 0x98, 0x4c, 0xf5, 0x25, - 0x41, 0xa5, 0xc4, 0xeb, 0x61, 0xb8, 0x78, 0x89, 0x62, 0x98, 0xcc, 0xf6, 0x3b, 0xb1, 0xe2, 0x25, - 0x6a, 0x61, 0xfd, 0x3a, 0x14, 0xad, 0x81, 0x69, 0xd2, 0xcd, 0x83, 0xee, 0xff, 0x9f, 0x7b, 0xb5, - 0x7f, 0x7f, 0x4f, 0x78, 0x47, 0x02, 0xea, 0x57, 0xa1, 0x40, 0xfa, 0x7b, 0xa4, 0x9b, 0x84, 0xfc, - 0x8f, 0xf7, 0x64, 0xc2, 0xa4, 0xda, 0xf5, 0x67, 0x00, 0xf8, 0xd5, 0x08, 0xfb, 0xec, 0x97, 0x80, - 0xfd, 0xcf, 0xf7, 0xc4, 0xff, 0xd4, 0x0c, 0x21, 0x43, 0x02, 0xfe, 0x1f, 0x3a, 0xf7, 0x27, 0x78, - 0x37, 0x4a, 0xc0, 0x56, 0xe4, 0x69, 0x98, 0xbc, 0xe9, 0xd9, 0x96, 0x8f, 0x7b, 0x49, 0xe8, 0xff, - 0x12, 0x68, 0xa9, 0x4f, 0x1d, 0xd6, 0xb7, 0x5d, 0xe2, 0xe3, 0x9e, 0x97, 0x84, 0xfd, 0x6f, 0x81, - 0x0d, 0x00, 0x14, 0xac, 0x63, 0xcf, 0x4f, 0x33, 0xef, 0xff, 0x91, 0x60, 0x09, 0xa0, 0x46, 0xd3, - 0xdf, 0xb7, 0xc8, 0x61, 0x12, 0xf6, 0x7b, 0xd2, 0x68, 0xa1, 0x5f, 0xff, 0x04, 0x94, 0xe8, 0x4f, - 0xfe, 0x8f, 0x72, 0x09, 0xe0, 0xff, 0x15, 0xe0, 0x21, 0x82, 0xbe, 0xd9, 0xf3, 0xbb, 0xbe, 0x91, - 0xec, 0xec, 0xff, 0x13, 0x2b, 0x2d, 0xf5, 0xeb, 0x0d, 0x28, 0x7b, 0x7e, 0xb7, 0x3b, 0x10, 0xfd, - 0x69, 0x02, 0xfc, 0xff, 0xdf, 0x0b, 0xae, 0x2c, 0x02, 0x0c, 0x5d, 0xed, 0x3b, 0xb7, 0x7c, 0xc7, - 0x66, 0x9f, 0x39, 0x92, 0x18, 0xee, 0x09, 0x86, 0x10, 0x64, 0xa5, 0x39, 0xfe, 0xfa, 0x16, 0xd6, - 0xed, 0x75, 0x9b, 0x5f, 0xdc, 0xbe, 0xb8, 0x98, 0x7c, 0x03, 0x0b, 0x6f, 0x64, 0xa1, 0xc2, 0x7e, - 0x5d, 0x16, 0xf7, 0xb0, 0x3c, 0x49, 0xd1, 0x22, 0xec, 0xcd, 0x1f, 0xef, 0x0a, 0x77, 0xf1, 0x25, - 0x98, 0x60, 0x6f, 0xbe, 0x8c, 0xe6, 0xa0, 0xc0, 0x26, 0xc0, 0xbe, 0x3f, 0xe6, 0x54, 0xfe, 0x80, - 0x2e, 0x40, 0x6e, 0xd3, 0xeb, 0x89, 0x7f, 0x6d, 0x3b, 0xb9, 0x3c, 0x7c, 0xd1, 0x72, 0xa7, 0x8f, - 0x4d, 0x73, 0xd3, 0xeb, 0x5d, 0x56, 0xa9, 0x06, 0x42, 0x90, 0x6f, 0xf1, 0xab, 0xfc, 0xdc, 0x52, - 0x4e, 0x65, 0xbf, 0x17, 0x9f, 0x83, 0x52, 0xa0, 0x85, 0x16, 0xa0, 0xdc, 0xd1, 0xb1, 0xbb, 0x32, - 0xf0, 0x3a, 0xbe, 0xed, 0xc8, 0x7f, 0xe8, 0x0a, 0x89, 0xd0, 0x12, 0x4c, 0xdf, 0x30, 0x8d, 0xde, - 0x81, 0xdf, 0xc6, 0x2e, 0xd6, 0x0f, 0x06, 0x3e, 0xa9, 0x55, 0x16, 0x72, 0x4b, 0x93, 0x6a, 0x5c, - 0xbc, 0x32, 0xf7, 0xbd, 0xef, 0x9e, 0xcd, 0x7c, 0xff, 0xbb, 0x67, 0x33, 0x5f, 0xfd, 0x97, 0xb3, - 0x99, 0x7f, 0x78, 0xfb, 0xec, 0x89, 0x7f, 0x7c, 0xfb, 0xec, 0x89, 0xbd, 0x09, 0xee, 0x94, 0x1f, - 0x04, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x2d, 0x4b, 0xae, 0x14, 0x34, 0x00, 0x00, - } - r := bytes.NewReader(gzipped) - gzipr, err := compress_gzip.NewReader(r) - if err != nil { - panic(err) - } - ungzipped, err := io_ioutil.ReadAll(gzipr) - if err != nil { - panic(err) - } - if err := github_com_gogo_protobuf_proto.Unmarshal(ungzipped, d); err != nil { - panic(err) - } - return d -} -func (this *Proto3) GoString() string { - if this == nil { - return "nil" - } - s := make([]string, 0, 7) - s = append(s, "&prototests.Proto3{") - s = append(s, "Field: "+fmt.Sprintf("%#v", this.Field)+",\n") - if this.Msg != nil { - s = append(s, "Msg: "+fmt.Sprintf("%#v", this.Msg)+",\n") - } - s = append(s, "Ints: "+fmt.Sprintf("%#v", this.Ints)+",\n") - if this.XXX_unrecognized != nil { - s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") - } - s = append(s, "}") - return strings.Join(s, "") -} -func (this *SmallMsg3) GoString() string { - if this == nil { - return "nil" - } - s := make([]string, 0, 6) - s = append(s, "&prototests.SmallMsg3{") - s = append(s, "ScarBusStop: "+fmt.Sprintf("%#v", this.ScarBusStop)+",\n") - s = append(s, "FlightParachute: "+fmt.Sprintf("%#v", this.FlightParachute)+",\n") - if this.XXX_unrecognized != nil { - s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n") - } - s = append(s, "}") - return strings.Join(s, "") -} -func valueToGoStringProto3(v interface{}, typ string) string { - rv := reflect.ValueOf(v) - if rv.IsNil() { - return "nil" - } - pv := reflect.Indirect(rv).Interface() - return fmt.Sprintf("func(v %v) *%v { return &v } ( %#v )", typ, typ, pv) -} -func NewPopulatedProto3(r randyProto3, easy bool) *Proto3 { - this := &Proto3{} - this.Field = int64(r.Int63()) - if r.Intn(2) == 0 { - this.Field *= -1 - } - if r.Intn(5) != 0 { - this.Msg = NewPopulatedSmallMsg3(r, easy) - } - v1 := r.Intn(10) - this.Ints = make([]int64, v1) - for i := 0; i < v1; i++ { - this.Ints[i] = int64(r.Int63()) - if r.Intn(2) == 0 { - this.Ints[i] *= -1 - } - } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedProto3(r, 5) - } - return this -} - -func NewPopulatedSmallMsg3(r randyProto3, easy bool) *SmallMsg3 { - this := &SmallMsg3{} - this.ScarBusStop = string(randStringProto3(r)) - v2 := r.Intn(10) - this.FlightParachute = make([]uint32, v2) - for i := 0; i < v2; i++ { - this.FlightParachute[i] = uint32(r.Uint32()) - } - if !easy && r.Intn(10) != 0 { - this.XXX_unrecognized = randUnrecognizedProto3(r, 13) - } - return this -} - -type randyProto3 interface { - Float32() float32 - Float64() float64 - Int63() int64 - Int31() int32 - Uint32() uint32 - Intn(n int) int -} - -func randUTF8RuneProto3(r randyProto3) rune { - ru := r.Intn(62) - if ru < 10 { - return rune(ru + 48) - } else if ru < 36 { - return rune(ru + 55) - } - return rune(ru + 61) -} -func randStringProto3(r randyProto3) string { - v3 := r.Intn(100) - tmps := make([]rune, v3) - for i := 0; i < v3; i++ { - tmps[i] = randUTF8RuneProto3(r) - } - return string(tmps) -} -func randUnrecognizedProto3(r randyProto3, maxFieldNumber int) (dAtA []byte) { - l := r.Intn(5) - for i := 0; i < l; i++ { - wire := r.Intn(4) - if wire == 3 { - wire = 5 - } - fieldNumber := maxFieldNumber + r.Intn(100) - dAtA = randFieldProto3(dAtA, r, fieldNumber, wire) - } - return dAtA -} -func randFieldProto3(dAtA []byte, r randyProto3, fieldNumber int, wire int) []byte { - key := uint32(fieldNumber)<<3 | uint32(wire) - switch wire { - case 0: - dAtA = encodeVarintPopulateProto3(dAtA, uint64(key)) - v4 := r.Int63() - if r.Intn(2) == 0 { - v4 *= -1 - } - dAtA = encodeVarintPopulateProto3(dAtA, uint64(v4)) - case 1: - dAtA = encodeVarintPopulateProto3(dAtA, uint64(key)) - dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) - case 2: - dAtA = encodeVarintPopulateProto3(dAtA, uint64(key)) - ll := r.Intn(100) - dAtA = encodeVarintPopulateProto3(dAtA, uint64(ll)) - for j := 0; j < ll; j++ { - dAtA = append(dAtA, byte(r.Intn(256))) - } - default: - dAtA = encodeVarintPopulateProto3(dAtA, uint64(key)) - dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256))) - } - return dAtA -} -func encodeVarintPopulateProto3(dAtA []byte, v uint64) []byte { - for v >= 1<<7 { - dAtA = append(dAtA, uint8(uint64(v)&0x7f|0x80)) - v >>= 7 - } - dAtA = append(dAtA, uint8(v)) - return dAtA -} diff --git a/parser/proto/prototests/proto3.proto b/parser/proto/prototests/proto3.proto deleted file mode 100644 index d061b18..0000000 --- a/parser/proto/prototests/proto3.proto +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2017 Walter Schulze -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; -package prototests; - -import "github.com/gogo/protobuf/gogoproto/gogo.proto"; - -option (gogoproto.description_all) = true; -option (gogoproto.populate_all) = true; -option (gogoproto.gostring_all) = true; -option (gogoproto.goproto_unkeyed_all) = false; -option (gogoproto.goproto_sizecache_all) = false; - -//Proto3 is a proto3 message. -message Proto3 { - int64 Field = 1; - SmallMsg3 Msg = 3; - repeated int64 Ints = 4; -} - -//SmallMsg3 only contains some native fields. -message SmallMsg3 { - string ScarBusStop = 1; - repeated fixed32 FlightParachute = 12; -} diff --git a/parser/proto/prototests/value.go b/parser/proto/prototests/value.go deleted file mode 100644 index 4ff475e..0000000 --- a/parser/proto/prototests/value.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2016 Walter Schulze -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package prototests - -import ( - "github.com/gogo/protobuf/proto" - . "github.com/katydid/validator-gogo-proto/parser/debug" -) - -// AContainer is a populated Container instance. -var AContainer = &Container{ - Field1: proto.Int64(123), -} - -func init() { - f := float64(0.123) - if err := proto.SetExtension(AContainer, E_FieldA, &f); err != nil { - panic(err) - } - if err := proto.SetExtension(AContainer, E_FieldB, &Small{SmallField: proto.Int64(456)}); err != nil { - panic(err) - } - if err := proto.SetExtension(AContainer, E_FieldC, &Big{BigField: proto.Int64(789)}); err != nil { - panic(err) - } -} - -// AContainerOutput is a populated Container instance that has been parsed into debug.Nodes. -var AContainerOutput = Nodes{ - Field(`FieldA`, `0.123`), - Nested(`FieldB`, - Field(`SmallField`, `456`), - ), - Nested(`FieldC`, - Field(`BigField`, `789`), - ), - Field(`Field1`, `123`), -} - -// ABigContainer is a populated BigContainer instance. -var ABigContainer = &BigContainer{ - Field13: proto.Int64(987), - M: AContainer, -} - -// ABigContainer is a populated BigContainer instance that has been parsed into debug.Nodes. -var ABigContainerOutput = Nodes{ - Nested(`M`, AContainerOutput...), - Field(`Field13`, `987`), -} diff --git a/encode/proto/Makefile b/proto/Makefile similarity index 100% rename from encode/proto/Makefile rename to proto/Makefile diff --git a/encode/proto/bench_test.go b/proto/bench_test.go similarity index 97% rename from encode/proto/bench_test.go rename to proto/bench_test.go index adbf74f..96e986a 100644 --- a/encode/proto/bench_test.go +++ b/proto/bench_test.go @@ -20,8 +20,8 @@ import ( "testing" "github.com/gogo/protobuf/proto" + . "github.com/katydid/experiment-encode-gogo-proto/proto/prototests" reflectparser "github.com/katydid/parser-go-reflect/reflect" - . "github.com/katydid/validator-gogo-proto/encode/proto/prototests" ) func BenchmarkMarshalSimple(b *testing.B) { diff --git a/encode/proto/proto.go b/proto/proto.go similarity index 99% rename from encode/proto/proto.go rename to proto/proto.go index 9c9bc80..afbce36 100644 --- a/encode/proto/proto.go +++ b/proto/proto.go @@ -27,7 +27,7 @@ import ( "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" "github.com/katydid/parser-go/parser" - protoparser "github.com/katydid/validator-gogo-proto/parser/proto" + protoparser "github.com/katydid/parser-gogo-proto/proto" ) const maxVarintSize = 10 diff --git a/encode/proto/proto_test.go b/proto/proto_test.go similarity index 97% rename from encode/proto/proto_test.go rename to proto/proto_test.go index 902d2de..d334664 100644 --- a/encode/proto/proto_test.go +++ b/proto/proto_test.go @@ -21,8 +21,8 @@ import ( "time" "github.com/gogo/protobuf/proto" + "github.com/katydid/experiment-encode-gogo-proto/proto/prototests" reflectparser "github.com/katydid/parser-go-reflect/reflect" - "github.com/katydid/validator-gogo-proto/encode/proto/prototests" ) func makeEmptyNil(v reflect.Value) { diff --git a/parser/debug/Makefile b/proto/prototests/Makefile similarity index 89% rename from parser/debug/Makefile rename to proto/prototests/Makefile index e3e50c3..70e047b 100644 --- a/parser/debug/Makefile +++ b/proto/prototests/Makefile @@ -1,4 +1,4 @@ -# Copyright 2015 Walter Schulze +# Copyright 2016 Walter Schulze # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -13,4 +13,4 @@ # limitations under the License. regenerate: - (protoc --gogo_out=. -I=.:../../../../../:../../../../../github.com/gogo/protobuf/protobuf debug.proto) + (protoc --gogo_out=. -I=.:../../../../../:../../../../../github.com/gogo/protobuf/protobuf simple.proto) diff --git a/encode/proto/prototests/derived.gen.go b/proto/prototests/derived.gen.go similarity index 100% rename from encode/proto/prototests/derived.gen.go rename to proto/prototests/derived.gen.go diff --git a/encode/proto/prototests/equal.go b/proto/prototests/equal.go similarity index 100% rename from encode/proto/prototests/equal.go rename to proto/prototests/equal.go diff --git a/encode/proto/prototests/simple.pb.go b/proto/prototests/simple.pb.go similarity index 100% rename from encode/proto/prototests/simple.pb.go rename to proto/prototests/simple.pb.go diff --git a/encode/proto/prototests/simple.proto b/proto/prototests/simple.proto similarity index 100% rename from encode/proto/prototests/simple.proto rename to proto/prototests/simple.proto diff --git a/testsuite/auto/bench_test.go b/testsuite/auto/bench_test.go deleted file mode 100644 index b7e976a..0000000 --- a/testsuite/auto/bench_test.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2016 Walter Schulze -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package auto_test - -import ( - "testing" - - "github.com/katydid/validator-go/validator/ast" - "github.com/katydid/validator-go/validator/auto" - "github.com/katydid/validator-gogo-proto/testsuite" -) - -func BenchmarkSuite(b *testing.B) { - if !testsuite.BenchSuiteExists() { - b.Skip("benchsuite not available") - } - benches, err := testsuite.ReadBenchmarkSuite() - if err != nil { - b.Fatal(err) - } - for _, benchCase := range benches { - b.Run(benchCase.Name, func(b *testing.B) { - bench(b, benchCase.Grammar, benchCase.Parsers, benchCase.Record) - }) - } -} - -func bench(b *testing.B, grammar *ast.Grammar, parsers []testsuite.ResetParser, record bool) { - num := len(parsers) - var a *auto.Auto - var err error - if record { - a, err = auto.CompileRecord(grammar) - } else { - a, err = auto.Compile(grammar) - } - if err != nil { - b.Fatal(err) - } - b.ResetTimer() - for i := 0; i < b.N; i++ { - if err := parsers[i%num].Reset(); err != nil { - b.Fatal(err) - } - if _, err := a.Validate(parsers[i%num]); err != nil { - b.Fatal(err) - } - } - b.ReportAllocs() -} diff --git a/testsuite/auto/suite_test.go b/testsuite/auto/suite_test.go deleted file mode 100644 index 4fc1749..0000000 --- a/testsuite/auto/suite_test.go +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright 2016 Walter Schulze -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package auto_test - -import ( - "strings" - "testing" - - "github.com/katydid/parser-go/parser" - "github.com/katydid/validator-go/validator/ast" - "github.com/katydid/validator-go/validator/auto" - "github.com/katydid/validator-go/validator/interp" - "github.com/katydid/validator-gogo-proto/testsuite" -) - -func TestSuite(t *testing.T) { - if !testsuite.TestSuiteExists() { - t.Skip("testsuite not avaliable") - } - tests, err := testsuite.ReadTestSuite() - if err != nil { - t.Fatal(err) - } - for _, testCase := range tests { - t.Run(testCase.Name, func(t *testing.T) { - test(t, testCase.Name, testCase.Grammar, testCase.Parser, testCase.Expected, "", testCase.Record) - }) - } -} - -func test(t *testing.T, name string, g *ast.Grammar, p parser.Interface, expected bool, desc string, record bool) { - if interp.HasRecursion(g) { - t.Skipf("convert was not designed to handle recursion") - } - if strings.HasPrefix(name, "GoBigOr") { - t.Skipf("too big to fail: the number of Ors creates a state space explosion") - } - if strings.HasPrefix(name, "BananaLarge") { - t.Skipf(`too big to fail: this test was specifically created to test that nested if expressions don't result in exponential explosions, -but since the auto implementation does compile everything it will explode.`) - } - var a *auto.Auto - var err error - if record { - a, err = auto.CompileRecord(g) - } else { - a, err = auto.Compile(g) - } - if err != nil { - t.Fatal(err) - } - match, err := a.Validate(p) - if err != nil { - t.Fatal(err) - } - if match != expected { - t.Fatalf("Expected %v on given \n%s\n on \n%s", expected, g.String(), desc) - } -} diff --git a/testsuite/files.go b/testsuite/files.go deleted file mode 100644 index b7993a6..0000000 --- a/testsuite/files.go +++ /dev/null @@ -1,306 +0,0 @@ -// Copyright 2017 Walter Schulze -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package testsuite - -import ( - "fmt" - "io/ioutil" - "os" - "path/filepath" - "strings" - - "github.com/gogo/protobuf/proto" - "github.com/gogo/protobuf/protoc-gen-gogo/descriptor" - "github.com/katydid/parser-go/parser" - "github.com/katydid/validator-go/validator" - "github.com/katydid/validator-go/validator/ast" - protoparser "github.com/katydid/validator-gogo-proto/parser/proto" -) - -func exists(filename string) bool { - _, err := os.Stat(filename) - return err == nil -} - -var testpath string -var benchpath string - -func init() { - gopath := os.Getenv("GOPATH") - testpath = filepath.Join(gopath, "src/github.com/katydid/testsuite/validator/tests") - benchpath = filepath.Join(gopath, "src/github.com/katydid/testsuite/validator/benches") -} - -func TestSuiteExists() bool { - return exists(testpath) -} - -func BenchSuiteExists() bool { - return exists(benchpath) -} - -func getFolders(path string) (map[string][]string, error) { - folders := make(map[string][]string) - codecFileInfos, err := ioutil.ReadDir(path) - if err != nil { - return nil, err - } - for _, codecFileInfo := range codecFileInfos { - if !codecFileInfo.IsDir() { - continue - } - codecFolderName := codecFileInfo.Name() - codecPath := filepath.Join(path, codecFolderName) - caseDirInfos, err := ioutil.ReadDir(codecPath) - if err != nil { - return nil, err - } - for _, caseDirInfo := range caseDirInfos { - if !caseDirInfo.IsDir() { - continue - } - casePath := filepath.Join(codecPath, caseDirInfo.Name()) - folders[codecFolderName] = append(folders[codecFolderName], casePath) - } - } - return folders, nil -} - -func ReadTestSuite() ([]Test, error) { - tests := []Test{} - codecs, err := getFolders(testpath) - if err != nil { - return nil, err - } - for codec, folders := range codecs { - switch codec { - case "pb": - default: - // codec not supported - continue - } - for _, folder := range folders { - test, err := readTestFolder(folder) - if err != nil { - return nil, err - } - tests = append(tests, *test) - } - } - return tests, nil -} - -func ReadBenchmarkSuite() ([]Bench, error) { - benches := []Bench{} - codecs, err := getFolders(benchpath) - if err != nil { - return nil, err - } - for codec, folders := range codecs { - switch codec { - case "pb": - default: - // codec not supported - continue - } - for _, folder := range folders { - bench, err := readBenchFolder(folder) - if err != nil { - return nil, err - } - benches = append(benches, *bench) - } - } - return benches, nil -} - -type Test struct { - Name string - Grammar *ast.Grammar - Parser parser.Interface - Expected bool - Record bool -} - -func readTestFolder(path string) (*Test, error) { - name := filepath.Base(path) - g, err := readGrammar(path) - if err != nil { - return nil, err - } - fileInfos, err := ioutil.ReadDir(path) - if err != nil { - return nil, fmt.Errorf("err <%v> reading folder <%s>", err, path) - } - var p parser.Interface - var expected bool - var codecName string - for _, fileInfo := range fileInfos { - if fileInfo.IsDir() { - continue - } - filebase := fileInfo.Name() - filename := filepath.Join(path, filebase) - names := strings.Split(filebase, ".") - valid := names[0] == "valid" - invalid := names[0] == "invalid" - if !valid && !invalid { - continue - } - expected = valid - codecName = names[len(names)-1] - switch codecName { - case "pb": - pkgName, msgName, desc, err := getProtoDesc(filename) - if err != nil { - return nil, err - } - p, err = newProtoParser(pkgName, msgName, desc, filename) - if err != nil { - return nil, err - } - default: - // unsupported codec - continue - } - } - if p == nil { - return nil, fmt.Errorf("couldn't find valid.* or invalid.* filename inside <%s>", path) - } - name = name + capFirst(codecName) - return &Test{ - Name: name, - Grammar: g, - Parser: p, - Expected: expected, - Record: codecName != "xml", - }, nil -} - -type Bench struct { - Name string - Grammar *ast.Grammar - Parsers []ResetParser - Record bool -} - -type ResetParser interface { - parser.Interface - Reset() error -} - -func readBenchFolder(path string) (*Bench, error) { - name := filepath.Base(path) - g, err := readGrammar(path) - if err != nil { - return nil, err - } - fileInfos, err := ioutil.ReadDir(path) - if err != nil { - return nil, fmt.Errorf("err <%v> reading folder <%s>", err, path) - } - var parsers []ResetParser - var pkgName, msgName string - var codecName string - var desc *descriptor.FileDescriptorSet - for _, fileInfo := range fileInfos { - if fileInfo.IsDir() { - continue - } - filebase := fileInfo.Name() - names := strings.Split(filebase, "_") - valid := names[0] == "valid" - invalid := names[0] == "invalid" - if !valid && !invalid { - continue - } - filename := filepath.Join(path, filebase) - codecName = filepath.Ext(filename)[1:] - switch codecName { - case "pb": - if desc == nil { - pkgName, msgName, desc, err = getProtoDesc(filename) - if err != nil { - return nil, err - } - } - p, err := newProtoParser(pkgName, msgName, desc, filename) - if err != nil { - return nil, err - } - parsers = append(parsers, p) - default: - // unsupported codec - continue - } - } - return &Bench{ - Name: name + capFirst(codecName), - Grammar: g, - Parsers: parsers, - Record: true, - }, nil -} - -func capFirst(s string) string { - b := []byte(s) - b[0] ^= ' ' - return string(b) -} - -func readGrammar(path string) (*ast.Grammar, error) { - validatorTxt := filepath.Join(path, "validator.txt") - validatorBytes, err := ioutil.ReadFile(validatorTxt) - if err != nil { - return nil, fmt.Errorf("err <%v> reading file <%s>", err, validatorTxt) - } - g, err := validator.Parse(string(validatorBytes)) - if err != nil { - return nil, fmt.Errorf("err <%v> parsing grammar from file <%s>", err, validatorTxt) - } - return g, nil -} - -func getProtoDesc(filename string) (pkgName, msgName string, desc *descriptor.FileDescriptorSet, err error) { - names := strings.Split(filepath.Base(filename), ".") - schemaName := strings.Join(names[1:len(names)-1], ".") - schemaFilename := filepath.Clean(filepath.Join(filepath.Join(filepath.Dir(filename), ".."), schemaName)) - descData, err := ioutil.ReadFile(schemaFilename) - if err != nil { - return "", "", nil, fmt.Errorf("err <%v> reading filename <%s>", err, schemaFilename) - } - desc = &descriptor.FileDescriptorSet{} - if err := proto.Unmarshal(descData, desc); err != nil { - return "", "", nil, fmt.Errorf("err <%v> unmarshaling descriptor from filename <%s>", err, schemaFilename) - } - pkgName = names[1] - msgName = names[2] - return pkgName, msgName, desc, nil -} - -func newProtoParser(pkgName, msgName string, desc *descriptor.FileDescriptorSet, filename string) (ResetParser, error) { - pp, err := protoparser.NewProtoParser(pkgName, msgName, desc) - if err != nil { - return nil, fmt.Errorf("err <%v> createing proto parser", err) - } - bytes, err := ioutil.ReadFile(filename) - if err != nil { - return nil, fmt.Errorf("err <%v> reading file <%s>", err, filename) - } - if err := pp.Init(bytes); err != nil { - return nil, fmt.Errorf("err <%v> parser.Init with bytes from filename <%s>", err, filename) - } - return pp, nil -} diff --git a/testsuite/intern/bench_test.go b/testsuite/intern/bench_test.go deleted file mode 100644 index e8abd85..0000000 --- a/testsuite/intern/bench_test.go +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2016 Walter Schulze -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package intern_test - -import ( - "testing" - - "github.com/katydid/validator-go/validator/intern" - "github.com/katydid/validator-gogo-proto/testsuite" -) - -func BenchmarkSuite(b *testing.B) { - if !testsuite.BenchSuiteExists() { - b.Skip("benchsuite not available") - } - benches, err := testsuite.ReadBenchmarkSuite() - if err != nil { - b.Fatal(err) - } - for _, benchCase := range benches { - b.Run(benchCase.Name, func(b *testing.B) { - num := len(benchCase.Parsers) - b.ResetTimer() - for i := 0; i < b.N; i++ { - if err := benchCase.Parsers[i%num].Reset(); err != nil { - b.Fatal(err) - } - if _, err := intern.Interpret(benchCase.Grammar, benchCase.Record, benchCase.Parsers[i%num]); err != nil { - b.Fatal(err) - } - } - }) - } -} diff --git a/testsuite/intern/suite_test.go b/testsuite/intern/suite_test.go deleted file mode 100644 index 620bdb3..0000000 --- a/testsuite/intern/suite_test.go +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2015 Walter Schulze -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package intern_test - -import ( - "testing" - - "github.com/katydid/parser-go/parser" - "github.com/katydid/validator-go/validator/ast" - "github.com/katydid/validator-go/validator/intern" - "github.com/katydid/validator-go/validator/interp" - "github.com/katydid/validator-gogo-proto/testsuite" -) - -func TestSuite(t *testing.T) { - if !testsuite.TestSuiteExists() { - t.Skip("testsuite not avaliable") - } - tests, err := testsuite.ReadTestSuite() - if err != nil { - t.Fatal(err) - } - for _, testCase := range tests { - t.Run(testCase.Name, func(t *testing.T) { - test(t, testCase.Grammar, testCase.Parser, testCase.Expected, testCase.Record) - }) - } -} - -func test(t *testing.T, g *ast.Grammar, p parser.Interface, expected bool, record bool) { - if interp.HasRecursion(g) { - t.Skipf("intern was not designed to handle left recursion") - } - match, err := intern.Interpret(g, record, p) - if err != nil { - t.Fatal(err) - } - if match != expected { - t.Fatalf("Expected %v on given \n%s\n", expected, g.String()) - } -} diff --git a/testsuite/interp/bench_test.go b/testsuite/interp/bench_test.go deleted file mode 100644 index 77eeb59..0000000 --- a/testsuite/interp/bench_test.go +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2016 Walter Schulze -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package interp_test - -import ( - "testing" - - "github.com/katydid/validator-go/validator/interp" - "github.com/katydid/validator-gogo-proto/testsuite" -) - -func BenchmarkSuite(b *testing.B) { - if !testsuite.BenchSuiteExists() { - b.Skip("benchsuite not available") - } - benches, err := testsuite.ReadBenchmarkSuite() - if err != nil { - b.Fatal(err) - } - for _, benchCase := range benches { - b.Run(benchCase.Name, func(b *testing.B) { - num := len(benchCase.Parsers) - b.ResetTimer() - for i := 0; i < b.N; i++ { - if err := benchCase.Parsers[i%num].Reset(); err != nil { - b.Fatal(err) - } - if _, err := interp.Interpret(benchCase.Grammar, benchCase.Parsers[i%num]); err != nil { - b.Fatal(err) - } - } - }) - } -} diff --git a/testsuite/interp/suite_test.go b/testsuite/interp/suite_test.go deleted file mode 100644 index fff1dba..0000000 --- a/testsuite/interp/suite_test.go +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2015 Walter Schulze -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package interp_test - -import ( - "strings" - "testing" - - "github.com/katydid/parser-go/parser" - "github.com/katydid/validator-go/validator/ast" - "github.com/katydid/validator-go/validator/interp" - "github.com/katydid/validator-gogo-proto/testsuite" -) - -func TestSuite(t *testing.T) { - if !testsuite.TestSuiteExists() { - t.Skip("testsuite not avaliable") - } - tests, err := testsuite.ReadTestSuite() - if err != nil { - t.Fatal(err) - } - for _, testCase := range tests { - t.Run(testCase.Name, func(t *testing.T) { - test(t, testCase.Grammar, testCase.Parser, testCase.Expected, "") - }) - } -} - -func test(t *testing.T, g *ast.Grammar, p parser.Interface, expected bool, desc string) { - if interp.HasRecursion(g) { - t.Skipf("interp was not designed to handle left recursion") - } - if !strings.Contains(desc, "Larger") { - t.Skipf("cannot handle Larger tests") - } - match, err := interp.Interpret(g, p) - if err != nil { - t.Fatal(err) - } - if match != expected { - t.Fatalf("Expected %v on given \n%s\n on \n%s", expected, g.String(), desc) - } -} diff --git a/testsuite/mem/bench_test.go b/testsuite/mem/bench_test.go deleted file mode 100644 index d3bd4a7..0000000 --- a/testsuite/mem/bench_test.go +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2016 Walter Schulze -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package mem_test - -import ( - "flag" - "testing" - - "github.com/katydid/validator-go/validator/ast" - "github.com/katydid/validator-go/validator/mem" - "github.com/katydid/validator-gogo-proto/testsuite" -) - -func BenchmarkSuite(b *testing.B) { - var bN = flag.Int("b.N", 0, "the number of times the benchmark function's target code must run") - flag.Parse() - if !testsuite.BenchSuiteExists() { - b.Skip("benchsuite not available") - } - benches, err := testsuite.ReadBenchmarkSuite() - if err != nil { - b.Fatal(err) - } - if *bN != 0 { - b.N = *bN - } - for _, benchCase := range benches { - b.Run(benchCase.Name, func(b *testing.B) { - bench(b, benchCase.Grammar, benchCase.Parsers, benchCase.Record) - }) - } -} - -func bench(b *testing.B, grammar *ast.Grammar, parsers []testsuite.ResetParser, record bool) { - num := len(parsers) - var m *mem.Mem - var err error - if record { - m, err = mem.NewRecord(grammar) - } else { - m, err = mem.New(grammar) - } - if err != nil { - b.Fatal(err) - } - b.ResetTimer() - for i := 0; i < b.N; i++ { - if err := parsers[i%num].Reset(); err != nil { - b.Fatal(err) - } - if _, err := m.Validate(parsers[i%num]); err != nil { - b.Fatal(err) - } - } -} diff --git a/testsuite/mem/suite_test.go b/testsuite/mem/suite_test.go deleted file mode 100644 index f1a8c3d..0000000 --- a/testsuite/mem/suite_test.go +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2016 Walter Schulze -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package mem_test - -import ( - "testing" - - "github.com/katydid/parser-go/parser" - "github.com/katydid/validator-go/validator/ast" - "github.com/katydid/validator-go/validator/interp" - "github.com/katydid/validator-go/validator/mem" - "github.com/katydid/validator-gogo-proto/testsuite" -) - -func TestSuite(t *testing.T) { - if !testsuite.TestSuiteExists() { - t.Skip("testsuite not avaliable") - } - tests, err := testsuite.ReadTestSuite() - if err != nil { - t.Fatal(err) - } - for _, testCase := range tests { - t.Run(testCase.Name, func(t *testing.T) { - test(t, testCase.Grammar, testCase.Parser, testCase.Expected, "", testCase.Record) - }) - } -} - -func test(t *testing.T, g *ast.Grammar, p parser.Interface, expected bool, desc string, record bool) { - if interp.HasRecursion(g) { - t.Skipf("interp was not designed to handle left recursion") - } - var m *mem.Mem - var err error - if record { - m, err = mem.NewRecord(g) - } else { - m, err = mem.New(g) - } - if err != nil { - t.Fatal(err) - } - match, err := m.Validate(p) - if err != nil { - t.Fatal(err) - } - if match != expected { - t.Fatalf("Expected %v on given \n%s\n on \n%s", expected, g.String(), desc) - } -} diff --git a/tools/tools.go b/tools/tools.go index 50747d0..0127bd4 100644 --- a/tools/tools.go +++ b/tools/tools.go @@ -6,7 +6,5 @@ package tools import ( _ "github.com/awalterschulze/checklicense" - _ "github.com/awalterschulze/goderive" - _ "github.com/goccmack/gocc" _ "github.com/gogo/protobuf/protoc-gen-gogo" )