├── .travis.yml ├── go.mod ├── .gitignore ├── const.go ├── LICENSE ├── mode.go ├── opts.go ├── wots.go ├── wots_test.go ├── hasher.go ├── README.md └── testdata └── testdata.go /.travis.yml: -------------------------------------------------------------------------------- 1 | language: go 2 | 3 | go: 4 | - master -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/lentus/wotsp 2 | 3 | go 1.13 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Binaries for programs and plugins 2 | *.exe 3 | *.dll 4 | *.so 5 | *.dylib 6 | 7 | # Test binary, build with `go test -c` 8 | *.test 9 | 10 | # Output of the go coverage tool, specifically when used with LiteIDE 11 | *.out 12 | 13 | # Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736 14 | .glide/ 15 | 16 | # Editor files 17 | .idea/ 18 | -------------------------------------------------------------------------------- /const.go: -------------------------------------------------------------------------------- 1 | package wotsp 2 | 3 | // constants for W-OTS+ signatures for both W4, W16 and W256 modes. 4 | const ( 5 | W4PublicKeyBytes = 4256 // size of public key 6 | W4SecretKeyBytes = W4SeedBytes // size of the secret key, which is the seed 7 | W4Bytes = 4256 // size of signatures 8 | W4SeedBytes = 32 // size of the secret seed 9 | W4PubSeedBytes = 32 // size of the public seed 10 | W4AddressBytes = 32 // size of the address value 11 | 12 | W16PublicKeyBytes = 2144 13 | W16SecretKeyBytes = W16SeedBytes 14 | W16Bytes = 2144 15 | W16SeedBytes = 32 16 | W16PubSeedBytes = 32 17 | W16AddressBytes = 32 18 | 19 | W256PublicKeyBytes = 1088 20 | W256SecretKeyBytes = W256SeedBytes 21 | W256Bytes = 1088 22 | W256SeedBytes = 32 23 | W256PubSeedBytes = 32 24 | W256AddressBytes = 32 25 | ) 26 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Wouter van der Linde 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /mode.go: -------------------------------------------------------------------------------- 1 | package wotsp 2 | 3 | import ( 4 | "fmt" 5 | ) 6 | 7 | // params is an internal struct that defines required parameters in WOTS. The 8 | // parameters are derived from a Mode. 9 | type params struct { 10 | w uint 11 | logW uint 12 | l1, l2, l int 13 | } 14 | 15 | // Mode constants specify internal parameters according to the given mode of 16 | // operation. The available parameter sets include w = 4 and w = 16. The 17 | // default, which is used when no explicit mode is chosen, is w = 16. This 18 | // allows the default Mode to be selected by specifying wotsp.Mode(0). 19 | // 20 | // See RFC 8391 for details on the different parameter sets. 21 | type Mode int 22 | 23 | const ( 24 | // W16 indicates the parameter set of W-OTS+ where w = 16. W16 is the default 25 | // mode. 26 | // 27 | // Passing W16 to Opts opts is equivalent to passing Mode(0), or not setting 28 | // the Mode at all. 29 | W16 Mode = iota 30 | 31 | // W4 indicates the parameter set of W-OTS+ where w = 4. 32 | W4 33 | 34 | // W256 indicates the parameter set of W-OTS+ where w = 256. 35 | W256 36 | ) 37 | 38 | // params construct a modeParams instance based on the operating Mode, or an 39 | // error if the mode is not valid. 40 | func (m Mode) params() (p params) { 41 | switch m { 42 | case W4: 43 | p.w = 4 44 | p.logW = 2 45 | p.l1 = 128 46 | p.l2 = 5 47 | case W16: 48 | p.w = 16 49 | p.logW = 4 50 | p.l1 = 64 51 | p.l2 = 3 52 | case W256: 53 | p.w = 256 54 | p.logW = 8 55 | p.l1 = 32 56 | p.l2 = 2 57 | default: 58 | panic(fmt.Sprintf("invalid mode %s, must be either wotsp.W4, wotsp.W16 or wotsp.W256", m)) 59 | } 60 | 61 | p.l = p.l1 + p.l2 62 | return 63 | } 64 | 65 | // String implements fmt.Stringer. 66 | func (m Mode) String() string { 67 | switch m { 68 | case W4: 69 | return "W4" 70 | case W16: 71 | return "W16" 72 | case W256: 73 | return "W256" 74 | default: 75 | return fmt.Sprintf("", m) 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /opts.go: -------------------------------------------------------------------------------- 1 | package wotsp 2 | 3 | import ( 4 | "crypto" 5 | "fmt" 6 | "runtime" 7 | ) 8 | 9 | var ( 10 | canPrecompute = map[crypto.Hash]bool{ 11 | crypto.SHA256: true, 12 | crypto.SHA512_256: true, 13 | crypto.BLAKE2b_256: true, 14 | crypto.BLAKE2s_256: true, 15 | } 16 | ) 17 | 18 | // Opts groups the parameters required for W-OTS+ operations. It implements 19 | // crypto.SignerOpts. 20 | type Opts struct { 21 | Mode Mode 22 | Address [32]byte 23 | 24 | // Concurrency specifies the amount of goroutines to use for WOTS 25 | // operations. Concurrency follows the following logic for n: 26 | // n > 0: divide chains over n goroutines. 27 | // n == 0: default, use a single goroutine 28 | // n < 0: automatically determine the number of goroutines based on 29 | // runtime.NumCPU or runtime.GOMAXPROX(-1), whichever is lower. 30 | Concurrency int 31 | 32 | // Hash specifies the specific hash function to use. For a hash function to 33 | // be accepted by the implementation, it needs to have a digest of 256 bits. 34 | // 35 | // Currently, the following values are supported: 36 | // crypto.SHA256 37 | // crypto.SHA512_256 38 | // crypto.BLAKE2b_256 39 | // crypto.BLAKE2s_256 40 | // 41 | // The default (for crypto.Hash(0)) is SHA256, as per the RFC. 42 | crypto.Hash 43 | 44 | // NOTE by embedding Hash we automatically implement crypto.SignerOpts, if 45 | // this were ever to become relevant. 46 | } 47 | 48 | // hash returns the hash function to use for the run of W-OTS+. 49 | func (o Opts) hash() crypto.Hash { 50 | if o.Hash == crypto.Hash(0) { 51 | return crypto.SHA256 52 | } 53 | 54 | if canPrecompute[o.Hash] { 55 | return o.Hash 56 | } 57 | 58 | panic(fmt.Sprintf("unsupported value for Opts.Hash [%d]", o.Hash)) 59 | } 60 | 61 | // routines returns the amount of simultaneous goroutines to use for W-OTS+ 62 | // operations, based on Opts.Concurrency. 63 | func (o Opts) routines() int { 64 | if o.Concurrency == 0 { 65 | return 1 66 | } 67 | 68 | if o.Concurrency > 0 { 69 | return o.Concurrency 70 | } 71 | 72 | procs := runtime.GOMAXPROCS(-1) 73 | cpus := runtime.NumCPU() 74 | if procs > cpus { 75 | return cpus 76 | } 77 | return procs 78 | } 79 | -------------------------------------------------------------------------------- /wots.go: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Package wotsp implements WOTSP-SHA2_256 as documented in RFC 8391 4 | (https://datatracker.ietf.org/doc/rfc8391/). 5 | 6 | W-OTS+ is a one-time hash-based signature scheme that is most commonly used in 7 | a larger scheme such as XMSS or SPHINCS. As a W-OTS+ private key/private seed 8 | can only be used once securely, W-OTS+ should not be used directly to create 9 | signatures in most situations. This package is thus meant primarily to be used 10 | in larger structures such as SPHINCS. 11 | 12 | Since SHA512_256, BLAKE2b_256 and BLAKE2s_256 work out of the box, they can be 13 | used as the internal hash function as well by setting Opts.Hash to their 14 | corresponding crypto.Hash values. 15 | 16 | */ 17 | package wotsp 18 | 19 | import ( 20 | "crypto/subtle" 21 | ) 22 | 23 | // N is a constant defined as the output length of the used hash function. 24 | const N = 32 25 | 26 | // GenPublicKey computes the public key that corresponds to the expanded seed. 27 | func GenPublicKey(seed, pubSeed []byte, opts Opts) (pubKey []byte) { 28 | params := opts.Mode.params() 29 | 30 | numRoutines := opts.routines() 31 | h := newHasher(seed, pubSeed, opts, numRoutines) 32 | 33 | privKey := h.expandSeed() 34 | 35 | // Initialise list of chain lengths for full chains 36 | lengths := make([]uint8, params.l) 37 | for i := range lengths { 38 | lengths[i] = uint8(params.w - 1) 39 | } 40 | 41 | adrs := &opts.Address 42 | pubKey = make([]byte, params.l*N) 43 | h.computeChains(numRoutines, privKey, pubKey, lengths, adrs, params, false) 44 | 45 | return 46 | } 47 | 48 | // Sign generates the signature of msg using the private key generated using the 49 | // given seed. 50 | func Sign(msg, seed, pubSeed []byte, opts Opts) (sig []byte) { 51 | params := opts.Mode.params() 52 | 53 | numRoutines := opts.routines() 54 | h := newHasher(seed, pubSeed, opts, numRoutines) 55 | 56 | privKey := h.expandSeed() 57 | lengths := h.baseW(msg, params.l1) 58 | 59 | csum := h.checksum(lengths) 60 | lengths = append(lengths, csum...) 61 | 62 | adrs := &opts.Address 63 | sig = make([]byte, params.l*N) 64 | h.computeChains(numRoutines, privKey, sig, lengths, adrs, params, false) 65 | 66 | return 67 | } 68 | 69 | // PublicKeyFromSig generates a public key from the given signature 70 | func PublicKeyFromSig(sig, msg, pubSeed []byte, opts Opts) (pubKey []byte) { 71 | params := opts.Mode.params() 72 | 73 | numRoutines := opts.routines() 74 | h := newHasher(nil, pubSeed, opts, numRoutines) 75 | 76 | lengths := h.baseW(msg, h.params.l1) 77 | 78 | csum := h.checksum(lengths) 79 | lengths = append(lengths, csum...) 80 | 81 | adrs := &opts.Address 82 | pubKey = make([]byte, params.l*N) 83 | h.computeChains(numRoutines, sig, pubKey, lengths, adrs, params, true) 84 | 85 | return 86 | } 87 | 88 | // Verify checks whether the signature is correct for the given message. 89 | func Verify(pk, sig, msg, pubSeed []byte, opts Opts) bool { 90 | pubKeyFromSig := PublicKeyFromSig(sig, msg, pubSeed, opts) 91 | 92 | // use subtle.ConstantTimeCompare instead of bytes.Equal to avoid timing 93 | // attacks. 94 | return subtle.ConstantTimeCompare(pk, pubKeyFromSig) == 1 95 | } 96 | -------------------------------------------------------------------------------- /wots_test.go: -------------------------------------------------------------------------------- 1 | package wotsp 2 | 3 | import ( 4 | "bytes" 5 | "crypto/rand" 6 | "fmt" 7 | "testing" 8 | 9 | "github.com/lentus/wotsp/testdata" 10 | 11 | // ensure our crypto is available. This is part of the tests, but not of the 12 | // library itself, to avoid including more packages than the library's user 13 | // will actually need. 14 | _ "crypto/sha256" 15 | ) 16 | 17 | // noerr is a helper that triggers t.Fatal[f] if the error is non-nil. 18 | func noerr(t *testing.T, err error) { 19 | if err != nil { 20 | t.Fatalf("error occurred: [%s]", err.Error()) 21 | } 22 | } 23 | 24 | // TestGenPublicKey verifies the public key generation algorithm by comparing 25 | // the resulting public key to a public key obtained from the reference 26 | // implementation of RFC 8391. 27 | func TestGenPublicKey(t *testing.T) { 28 | var opts Opts 29 | opts.Mode = W16 // explicit, in case the default ever changes 30 | 31 | pubKey := GenPublicKey(testdata.Seed, testdata.PubSeed, opts) 32 | 33 | if !bytes.Equal(pubKey, testdata.PubKey) { 34 | t.Error("Wrong key") 35 | } 36 | } 37 | 38 | // TestSign verifies the signing algorithm by comparing the resulting signature 39 | // to a signature obtained from the reference implementation of RFC 8391. 40 | func TestSign(t *testing.T) { 41 | var opts Opts 42 | opts.Mode = W16 // explicit, in case the default ever changes 43 | 44 | signature := Sign(testdata.Message, testdata.Seed, testdata.PubSeed, opts) 45 | 46 | if !bytes.Equal(signature, testdata.Signature) { 47 | t.Error("Wrong signature") 48 | } 49 | } 50 | 51 | // TestPkFromSig verifies the public key from signature algorithm by comparing 52 | // the resulting public key to a public key obtained from the reference 53 | // implementation of RFC 8391. 54 | func TestPkFromSig(t *testing.T) { 55 | var opts Opts 56 | opts.Mode = W16 // explicit, in case the default ever changes 57 | 58 | pubKey := PublicKeyFromSig(testdata.Signature, testdata.Message, testdata.PubSeed, opts) 59 | 60 | if !bytes.Equal(pubKey, testdata.PubKey) { 61 | t.Error("Wrong public key") 62 | } 63 | } 64 | 65 | func TestVerify(t *testing.T) { 66 | var opts Opts 67 | opts.Mode = W16 // explicit, in case the default ever changes 68 | 69 | ok := Verify(testdata.PubKey, testdata.Signature, testdata.Message, testdata.PubSeed, opts) 70 | 71 | if !ok { 72 | t.Error("Wrong public key") 73 | } 74 | } 75 | 76 | // TestAll verifies the three signature scheme algorithms for all parameter 77 | // sets by generating a public key and a signature, and verifying the signature 78 | // for that public key. 79 | func TestAll(t *testing.T) { 80 | for _, mode := range []Mode{W4, W16, W256} { 81 | var opts Opts 82 | opts.Mode = mode 83 | 84 | seed := make([]byte, 32) 85 | _, err := rand.Read(seed) 86 | noerr(t, err) 87 | 88 | pubSeed := make([]byte, 32) 89 | _, err = rand.Read(pubSeed) 90 | noerr(t, err) 91 | 92 | msg := make([]byte, 32) 93 | _, err = rand.Read(msg) 94 | noerr(t, err) 95 | 96 | t.Run(fmt.Sprintf("TestAll-%s", opts.Mode), 97 | func(t *testing.T) { 98 | pubKey := GenPublicKey(seed, pubSeed, opts) 99 | 100 | signed := Sign(msg, seed, pubSeed, opts) 101 | 102 | valid := Verify(pubKey, signed, msg, pubSeed, opts) 103 | if !valid { 104 | t.Fail() 105 | } 106 | }) 107 | } 108 | } 109 | 110 | func BenchmarkWOTSP(b *testing.B) { 111 | for _, mode := range []Mode{W4, W16, W256} { 112 | runBenches(b, mode) 113 | } 114 | } 115 | 116 | // runBenches runs the set of main benchmarks 117 | func runBenches(b *testing.B, mode Mode) { 118 | // test setup 119 | var signature []byte 120 | switch mode { 121 | case W4: 122 | signature = testdata.SignatureW4 123 | case W256: 124 | signature = testdata.SignatureW256 125 | default: 126 | signature = testdata.Signature 127 | } 128 | 129 | // create opts 130 | var opts Opts 131 | opts.Mode = mode 132 | opts.Concurrency = -1 133 | 134 | var maxRoutines = opts.routines() 135 | 136 | // for each level of concurrency, run the benchmarks on this set of options. 137 | for i := 1; i <= maxRoutines; i++ { 138 | opts.Concurrency = i 139 | 140 | b.Run(fmt.Sprintf("GenPublicKey-%s-%d", opts.Mode, i), 141 | func(b *testing.B) { 142 | b.ReportAllocs() 143 | for i := 0; i < b.N; i++ { 144 | _ = GenPublicKey(testdata.Seed, testdata.PubSeed, opts) 145 | } 146 | }) 147 | } 148 | 149 | for i := 1; i <= maxRoutines; i++ { 150 | opts.Concurrency = i 151 | 152 | b.Run(fmt.Sprintf("Sign-%s-%d", opts.Mode, i), 153 | func(b *testing.B) { 154 | b.ReportAllocs() 155 | for i := 0; i < b.N; i++ { 156 | _ = Sign(testdata.Message, testdata.Seed, testdata.PubSeed, opts) 157 | } 158 | }) 159 | } 160 | 161 | for i := 1; i <= maxRoutines; i++ { 162 | opts.Concurrency = i 163 | 164 | b.Run(fmt.Sprintf("PublicKeyFromSig-%s-%d", opts.Mode, i), 165 | func(b *testing.B) { 166 | b.ReportAllocs() 167 | for i := 0; i < b.N; i++ { 168 | _ = PublicKeyFromSig(signature, testdata.Message, testdata.PubSeed, opts) 169 | } 170 | }) 171 | } 172 | } 173 | -------------------------------------------------------------------------------- /hasher.go: -------------------------------------------------------------------------------- 1 | package wotsp 2 | 3 | import ( 4 | "encoding/binary" 5 | "hash" 6 | "reflect" 7 | ) 8 | 9 | // The hasher struct implements the W-OTS+ functions PRF and HashF efficiently 10 | // by precomputing part of the hash digests. Using precomputation improves 11 | // performance by ~41%. 12 | // 13 | // Since the PRF function calculates H(toByte(3, 32) || seed || M), where seed 14 | // can be the secret or public seed, the first 64 bytes of the input are 15 | // recomputed on every evaluation of PRF. We can significantly improve 16 | // performance by precomputing the hash digest for this part of the input. 17 | // 18 | // For HashF we can only precompute the first 32 bytes of hash digest: it 19 | // calculates H(toByte(0, 32) || key || M) where key is the result of an 20 | // evaluation of PRF. 21 | type hasher struct { 22 | // Precomputed hash digests 23 | precompPrfPubSeed reflect.Value 24 | precompPrfPrivSeed reflect.Value 25 | precompHashF reflect.Value 26 | 27 | // params based on the mode 28 | params params 29 | 30 | // Hash function instances 31 | hashers []hash.Hash 32 | // Hash digests of hashers 33 | hasherVals []reflect.Value 34 | } 35 | 36 | func newHasher(privSeed, pubSeed []byte, opts Opts, nrRoutines int) *hasher { 37 | hashFunc := opts.hash() 38 | 39 | h := new(hasher) 40 | h.params = opts.Mode.params() 41 | h.hashers = make([]hash.Hash, nrRoutines) 42 | h.hasherVals = make([]reflect.Value, nrRoutines) 43 | 44 | for i := 0; i < nrRoutines; i++ { 45 | h.hashers[i] = hashFunc.New() 46 | h.hasherVals[i] = reflect.ValueOf(h.hashers[i]).Elem() 47 | } 48 | 49 | padding := make([]byte, N) 50 | 51 | // While padding is all zero, precompute hashF 52 | precompHashF := hashFunc.New() 53 | precompHashF.Write(padding) 54 | h.precompHashF = reflect.ValueOf(precompHashF).Elem() 55 | 56 | // Set padding for prf 57 | binary.BigEndian.PutUint16(padding[N-2:], uint16(3)) 58 | 59 | if privSeed != nil { 60 | // Precompute prf with private seed (not used in PkFromSig) 61 | precompPrfPrivSeed := hashFunc.New() 62 | precompPrfPrivSeed.Write(padding) 63 | precompPrfPrivSeed.Write(privSeed) 64 | h.precompPrfPrivSeed = reflect.ValueOf(precompPrfPrivSeed).Elem() 65 | } 66 | 67 | // Precompute prf with public seed 68 | precompPrfPubSeed := hashFunc.New() 69 | precompPrfPubSeed.Write(padding) 70 | precompPrfPubSeed.Write(pubSeed) 71 | h.precompPrfPubSeed = reflect.ValueOf(precompPrfPubSeed).Elem() 72 | 73 | return h 74 | } 75 | 76 | // 77 | // PRF with precomputed hash digests for pub and priv seeds 78 | // 79 | 80 | func (h *hasher) hashF(routineNr int, key, inout []byte) { 81 | h.hasherVals[routineNr].Set(h.precompHashF) 82 | h.hashers[routineNr].Write(key) 83 | h.hashers[routineNr].Write(inout) 84 | h.hashers[routineNr].Sum(inout[:0]) 85 | } 86 | 87 | func (h *hasher) prfPubSeed(routineNr int, addr *[32]byte, out []byte) { 88 | h.hasherVals[routineNr].Set(h.precompPrfPubSeed) 89 | h.hashers[routineNr].Write(addr[:]) 90 | h.hashers[routineNr].Sum(out[:0]) // Must make sure that out's capacity is >= 32 bytes! 91 | } 92 | 93 | func (h *hasher) prfPrivSeed(routineNr int, ctr []byte, out []byte) { 94 | h.hasherVals[routineNr].Set(h.precompPrfPrivSeed) 95 | h.hashers[routineNr].Write(ctr) 96 | h.hashers[routineNr].Sum(out[:0]) // Must make sure that out's capacity is >= 32 bytes! 97 | } 98 | 99 | // Computes the base-w representation of a binary input. 100 | func (h *hasher) baseW(x []byte, outLen int) []uint8 { 101 | var total byte 102 | in := 0 103 | out := 0 104 | bits := uint(0) 105 | baseW := make([]uint8, outLen) 106 | 107 | logW := h.params.logW 108 | w := h.params.w 109 | 110 | for consumed := 0; consumed < outLen; consumed++ { 111 | if bits == 0 { 112 | total = x[in] 113 | in++ 114 | bits += 8 115 | } 116 | 117 | bits -= logW 118 | baseW[out] = (total >> bits) & byte(w-1) 119 | out++ 120 | } 121 | 122 | return baseW 123 | } 124 | 125 | // Performs the chaining operation using an n-byte input and n-byte seed. 126 | // Assumes the input is the -th element in the chain, and performs 127 | // iterations. 128 | // 129 | // Scratch is used as a scratch pad: it is pre-allocated to prevent every call 130 | // to chain from allocating slices for keys and bitmask. It is used as: 131 | // scratch = key || bitmask. 132 | func (h *hasher) chain(routineNr int, scratch, in, out []byte, start, steps uint8, adrs *[32]byte) { 133 | copy(out, in) 134 | 135 | for i := start; i < start+steps; i++ { 136 | setHash(adrs, uint32(i)) 137 | 138 | setKeyAndMask(adrs, 0) 139 | h.prfPubSeed(routineNr, adrs, scratch[:32]) 140 | setKeyAndMask(adrs, 1) 141 | h.prfPubSeed(routineNr, adrs, scratch[32:64]) 142 | 143 | for j := 0; j < N; j++ { 144 | out[j] = out[j] ^ scratch[32+j] 145 | } 146 | 147 | h.hashF(routineNr, scratch[:32], out) 148 | } 149 | } 150 | 151 | func setHash(address *[32]byte, hash uint32) { 152 | binary.BigEndian.PutUint32(address[24:], hash) 153 | } 154 | 155 | func setKeyAndMask(address *[32]byte, keyAndMask uint32) { 156 | binary.BigEndian.PutUint32(address[28:], keyAndMask) 157 | } 158 | 159 | // Expands a 32-byte seed into an (l*n)-byte private key. 160 | func (h *hasher) expandSeed() []byte { 161 | l := h.params.l 162 | 163 | privKey := make([]byte, l*N) 164 | ctr := make([]byte, 32) 165 | 166 | for i := 0; i < l; i++ { 167 | binary.BigEndian.PutUint16(ctr[30:], uint16(i)) 168 | h.prfPrivSeed(0, ctr, privKey[i*N:]) 169 | } 170 | 171 | return privKey 172 | } 173 | 174 | func (h *hasher) checksum(msg []uint8) []uint8 { 175 | l1, l2, w, logW := h.params.l1, h.params.l2, h.params.w, h.params.logW 176 | 177 | csum := uint32(0) 178 | for i := 0; i < l1; i++ { 179 | csum += uint32(uint8(w-1) - msg[i]) 180 | } 181 | csum <<= 8 - ((uint(l2) * logW) % 8) 182 | 183 | // Length of the checksum is (l2*logw + 7) / 8 184 | csumBytes := make([]byte, 2) 185 | // Since bytesLen is always 2, we can truncate csum to a uint16. 186 | binary.BigEndian.PutUint16(csumBytes, uint16(csum)) 187 | 188 | return h.baseW(csumBytes, l2) 189 | } 190 | 191 | // Distributes the chains that must be computed between numRoutine goroutines. 192 | // 193 | // When fromSig is true, 'in' contains a signature and 'out' must be a public 194 | // key; in this case the routines must complete the signature chains so they 195 | // use lengths as start indices. If fromSig is false, we are either computing a 196 | // public key from a private key, or a signature from a private key, so the 197 | // routines use lengths as the amount of iterations to perform. 198 | func (h *hasher) computeChains(numRoutines int, in, out []byte, lengths []uint8, adrs *[32]byte, p params, fromSig bool) { 199 | chainsPerRoutine := (p.l-1)/numRoutines + 1 200 | 201 | // Initialise scratch pad 202 | scratch := make([]byte, numRoutines*64) 203 | 204 | done := make(chan struct{}, numRoutines) 205 | 206 | computeChain := func(nr int, scratch []byte, adrs [32]byte) { 207 | firstChain := nr * chainsPerRoutine 208 | lastChain := firstChain + chainsPerRoutine - 1 209 | 210 | // Make sure the last routine ends at the right chain 211 | if lastChain >= p.l { 212 | lastChain = p.l - 1 213 | } 214 | 215 | // Compute the hash chains 216 | for chainIdx := firstChain; chainIdx <= lastChain; chainIdx++ { 217 | setChain(&adrs, uint32(chainIdx)) 218 | 219 | input := in[chainIdx*N : (chainIdx+1)*N] 220 | output := out[chainIdx*N : (chainIdx+1)*N] 221 | 222 | var start, end uint8 223 | if fromSig { 224 | start = lengths[chainIdx] 225 | end = uint8(p.w-1) - lengths[chainIdx] 226 | } else { 227 | start = 0 228 | end = lengths[chainIdx] 229 | } 230 | 231 | h.chain(nr, scratch, input, output, start, end, &adrs) 232 | } 233 | 234 | done <- struct{}{} 235 | } 236 | 237 | // Start chain computations 238 | for routineIdx := 0; routineIdx < numRoutines; routineIdx++ { 239 | // adrs is passed by value here to create a new reference 240 | go computeChain(routineIdx, scratch[routineIdx*64:(routineIdx+1)*64], *adrs) 241 | } 242 | 243 | // Wait for chain computations to complete 244 | for i := 0; i < numRoutines; i++ { 245 | <-done 246 | } 247 | } 248 | 249 | func setChain(address *[32]byte, chain uint32) { 250 | binary.BigEndian.PutUint32(address[20:], chain) 251 | } 252 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Build Status](https://travis-ci.org/lentus/wotsp.svg?branch=concurrent)](https://travis-ci.org/lentus/wotsp) [![GoDoc](https://godoc.org/github.com/lentus/wotsp?status.svg)](https://godoc.org/github.com/lentus/wotsp) [![Go Report Card](https://goreportcard.com/badge/github.com/lentus/wotsp)](https://goreportcard.com/report/github.com/lentus/wotsp) 2 | 3 | # W-OTS+ 4 | A Go implementation of the Winternitz OTS (W-OTS+), as described in [RFC8391](https://datatracker.ietf.org/doc/rfc8391/). 5 | This implementation supports Winternitz parameters ```w = 4```, ```w = 16``` and ```w = 256```, 6 | which can be selected by setting the ```Mode``` of the ```Opts``` struct to 7 | ```W4```, ```W16``` or ```W256``` respectively (if no mode is provided, ```W16``` is used). 8 | 9 | W-OTS+ was first described in [1]. However, the original design is susceptible 10 | to multi-target attacks. This issue was solved in [2] with WOTS-T. The RFC 11 | confusingly refers to W-OTS+, despite including the modifications from 12 | [2] and thus actually describing WOTS-T. 13 | 14 | ## Install 15 | 16 | ```sh 17 | go get -u https://github.com/lentus/wotsp 18 | ``` 19 | 20 | ## Performance 21 | The benchmarks below were optained with `go test -run='^$' -bench .`. These 22 | benchmarks iterate through all relevant configurations of Opts, the mode and 23 | concurrency parameters. Read the docs on the Opts type for more details about 24 | these parameters. 25 | 26 | The names of the benchmarks should be read as 27 | `BenchmarkWOTSP/---`. 28 | 29 |
30 | Benchmarks 31 | 32 | ``` 33 | CPU: Intel(R) Core(TM) i7-5820K CPU @ 3.30GHz 34 | goos: linux 35 | goarch: amd64 36 | pkg: github.com/lentus/wotsp 37 | BenchmarkWOTSP/GenPublicKey-W4-1-12 3000 528686 ns/op 10848 B/op 15 allocs/op 38 | BenchmarkWOTSP/GenPublicKey-W4-2-12 3000 512078 ns/op 11121 B/op 17 allocs/op 39 | BenchmarkWOTSP/GenPublicKey-W4-3-12 3000 406027 ns/op 11394 B/op 19 allocs/op 40 | BenchmarkWOTSP/GenPublicKey-W4-4-12 5000 351777 ns/op 11638 B/op 21 allocs/op 41 | BenchmarkWOTSP/GenPublicKey-W4-5-12 5000 350774 ns/op 11909 B/op 23 allocs/op 42 | BenchmarkWOTSP/GenPublicKey-W4-6-12 5000 332991 ns/op 12161 B/op 25 allocs/op 43 | BenchmarkWOTSP/GenPublicKey-W4-7-12 5000 315319 ns/op 12437 B/op 27 allocs/op 44 | BenchmarkWOTSP/GenPublicKey-W4-8-12 5000 305585 ns/op 12688 B/op 29 allocs/op 45 | BenchmarkWOTSP/GenPublicKey-W4-9-12 5000 285246 ns/op 12960 B/op 31 allocs/op 46 | BenchmarkWOTSP/GenPublicKey-W4-10-12 5000 318314 ns/op 13216 B/op 33 allocs/op 47 | BenchmarkWOTSP/GenPublicKey-W4-11-12 5000 284008 ns/op 13510 B/op 35 allocs/op 48 | BenchmarkWOTSP/GenPublicKey-W4-12-12 5000 327860 ns/op 13744 B/op 37 allocs/op 49 | BenchmarkWOTSP/Sign-W4-1-12 5000 297997 ns/op 11093 B/op 17 allocs/op 50 | BenchmarkWOTSP/Sign-W4-2-12 5000 335446 ns/op 11349 B/op 19 allocs/op 51 | BenchmarkWOTSP/Sign-W4-3-12 5000 262650 ns/op 11621 B/op 21 allocs/op 52 | BenchmarkWOTSP/Sign-W4-4-12 10000 245845 ns/op 11877 B/op 23 allocs/op 53 | BenchmarkWOTSP/Sign-W4-5-12 10000 247218 ns/op 12149 B/op 25 allocs/op 54 | BenchmarkWOTSP/Sign-W4-6-12 5000 241907 ns/op 12405 B/op 27 allocs/op 55 | BenchmarkWOTSP/Sign-W4-7-12 10000 241170 ns/op 12677 B/op 29 allocs/op 56 | BenchmarkWOTSP/Sign-W4-8-12 10000 245966 ns/op 12933 B/op 31 allocs/op 57 | BenchmarkWOTSP/Sign-W4-9-12 5000 250778 ns/op 13206 B/op 33 allocs/op 58 | BenchmarkWOTSP/Sign-W4-10-12 5000 245817 ns/op 13461 B/op 35 allocs/op 59 | BenchmarkWOTSP/Sign-W4-11-12 5000 252121 ns/op 13749 B/op 37 allocs/op 60 | BenchmarkWOTSP/Sign-W4-12-12 5000 269160 ns/op 13989 B/op 39 allocs/op 61 | BenchmarkWOTSP/PublicKeyFromSig-W4-1-12 5000 255714 ns/op 6069 B/op 14 allocs/op 62 | BenchmarkWOTSP/PublicKeyFromSig-W4-2-12 5000 239534 ns/op 6325 B/op 16 allocs/op 63 | BenchmarkWOTSP/PublicKeyFromSig-W4-3-12 10000 184492 ns/op 6597 B/op 18 allocs/op 64 | BenchmarkWOTSP/PublicKeyFromSig-W4-4-12 10000 167097 ns/op 6853 B/op 20 allocs/op 65 | BenchmarkWOTSP/PublicKeyFromSig-W4-5-12 10000 168060 ns/op 7125 B/op 22 allocs/op 66 | BenchmarkWOTSP/PublicKeyFromSig-W4-6-12 10000 153551 ns/op 7381 B/op 24 allocs/op 67 | BenchmarkWOTSP/PublicKeyFromSig-W4-7-12 10000 156074 ns/op 7653 B/op 26 allocs/op 68 | BenchmarkWOTSP/PublicKeyFromSig-W4-8-12 10000 154310 ns/op 7909 B/op 28 allocs/op 69 | BenchmarkWOTSP/PublicKeyFromSig-W4-9-12 10000 157672 ns/op 8181 B/op 30 allocs/op 70 | BenchmarkWOTSP/PublicKeyFromSig-W4-10-12 10000 168863 ns/op 8437 B/op 32 allocs/op 71 | BenchmarkWOTSP/PublicKeyFromSig-W4-11-12 10000 167745 ns/op 8725 B/op 34 allocs/op 72 | BenchmarkWOTSP/PublicKeyFromSig-W4-12-12 10000 177620 ns/op 8965 B/op 36 allocs/op 73 | BenchmarkWOTSP/GenPublicKey-W16-1-12 1000 1190968 ns/op 5664 B/op 15 allocs/op 74 | BenchmarkWOTSP/GenPublicKey-W16-2-12 2000 1023288 ns/op 5920 B/op 17 allocs/op 75 | BenchmarkWOTSP/GenPublicKey-W16-3-12 2000 777303 ns/op 6192 B/op 19 allocs/op 76 | BenchmarkWOTSP/GenPublicKey-W16-4-12 2000 671296 ns/op 6448 B/op 21 allocs/op 77 | BenchmarkWOTSP/GenPublicKey-W16-5-12 2000 551805 ns/op 6720 B/op 23 allocs/op 78 | BenchmarkWOTSP/GenPublicKey-W16-6-12 3000 532176 ns/op 6976 B/op 25 allocs/op 79 | BenchmarkWOTSP/GenPublicKey-W16-7-12 3000 493157 ns/op 7248 B/op 27 allocs/op 80 | BenchmarkWOTSP/GenPublicKey-W16-8-12 3000 501420 ns/op 7504 B/op 29 allocs/op 81 | BenchmarkWOTSP/GenPublicKey-W16-9-12 3000 491974 ns/op 7776 B/op 31 allocs/op 82 | BenchmarkWOTSP/GenPublicKey-W16-10-12 5000 432767 ns/op 8032 B/op 33 allocs/op 83 | BenchmarkWOTSP/GenPublicKey-W16-11-12 3000 421337 ns/op 8320 B/op 35 allocs/op 84 | BenchmarkWOTSP/GenPublicKey-W16-12-12 3000 407954 ns/op 8560 B/op 37 allocs/op 85 | BenchmarkWOTSP/Sign-W16-1-12 3000 593656 ns/op 5779 B/op 17 allocs/op 86 | BenchmarkWOTSP/Sign-W16-2-12 2000 514728 ns/op 6035 B/op 19 allocs/op 87 | BenchmarkWOTSP/Sign-W16-3-12 3000 420184 ns/op 6307 B/op 21 allocs/op 88 | BenchmarkWOTSP/Sign-W16-4-12 5000 381084 ns/op 6563 B/op 23 allocs/op 89 | BenchmarkWOTSP/Sign-W16-5-12 3000 370102 ns/op 6835 B/op 25 allocs/op 90 | BenchmarkWOTSP/Sign-W16-6-12 5000 338943 ns/op 7091 B/op 27 allocs/op 91 | BenchmarkWOTSP/Sign-W16-7-12 5000 318898 ns/op 7363 B/op 29 allocs/op 92 | BenchmarkWOTSP/Sign-W16-8-12 5000 323298 ns/op 7619 B/op 31 allocs/op 93 | BenchmarkWOTSP/Sign-W16-9-12 5000 319790 ns/op 7891 B/op 33 allocs/op 94 | BenchmarkWOTSP/Sign-W16-10-12 5000 304686 ns/op 8147 B/op 35 allocs/op 95 | BenchmarkWOTSP/Sign-W16-11-12 5000 311558 ns/op 8435 B/op 37 allocs/op 96 | BenchmarkWOTSP/Sign-W16-12-12 3000 387059 ns/op 8675 B/op 39 allocs/op 97 | BenchmarkWOTSP/PublicKeyFromSig-W16-1-12 2000 618551 ns/op 3315 B/op 14 allocs/op 98 | BenchmarkWOTSP/PublicKeyFromSig-W16-2-12 2000 671003 ns/op 3571 B/op 16 allocs/op 99 | BenchmarkWOTSP/PublicKeyFromSig-W16-3-12 3000 458555 ns/op 3843 B/op 18 allocs/op 100 | BenchmarkWOTSP/PublicKeyFromSig-W16-4-12 3000 424912 ns/op 4099 B/op 20 allocs/op 101 | BenchmarkWOTSP/PublicKeyFromSig-W16-5-12 5000 347741 ns/op 4371 B/op 22 allocs/op 102 | BenchmarkWOTSP/PublicKeyFromSig-W16-6-12 5000 307307 ns/op 4627 B/op 24 allocs/op 103 | BenchmarkWOTSP/PublicKeyFromSig-W16-7-12 5000 292079 ns/op 4899 B/op 26 allocs/op 104 | BenchmarkWOTSP/PublicKeyFromSig-W16-8-12 5000 297520 ns/op 5155 B/op 28 allocs/op 105 | BenchmarkWOTSP/PublicKeyFromSig-W16-9-12 5000 277718 ns/op 5427 B/op 30 allocs/op 106 | BenchmarkWOTSP/PublicKeyFromSig-W16-10-12 5000 290740 ns/op 5683 B/op 32 allocs/op 107 | BenchmarkWOTSP/PublicKeyFromSig-W16-11-12 5000 269477 ns/op 5971 B/op 34 allocs/op 108 | BenchmarkWOTSP/PublicKeyFromSig-W16-12-12 5000 304969 ns/op 6211 B/op 36 allocs/op 109 | ``` 110 |
111 | 112 | 113 | ## References 114 | [1] Hülsing, Andreas. "W-OTS+–shorter signatures for hash-based signature schemes." International Conference on Cryptology in Africa. Springer, Berlin, Heidelberg, 2013. 115 | 116 | [2] Hülsing, Andreas, Joost Rijneveld, and Fang Song. "Mitigating multi-target attacks in hash-based signatures." Public-Key Cryptography–PKC 2016. Springer, Berlin, Heidelberg, 2016. 387-416. -------------------------------------------------------------------------------- /testdata/testdata.go: -------------------------------------------------------------------------------- 1 | package testdata 2 | 3 | // The data below was taken from a run of the C implementation by Rijneveld & 4 | // Hulsing, which accompanies the IETF draft for XMSS. 5 | 6 | var Seed = []byte{ 7 | 0x69, 0x31, 0x41, 0xc7, 8 | 0xee, 0x70, 0x1d, 0x13, 9 | 0xe1, 0xa7, 0xc7, 0x33, 10 | 0xe0, 0xaa, 0x83, 0x26, 11 | 0xc1, 0x99, 0x61, 0x42, 12 | 0x9b, 0xfb, 0x54, 0x08, 13 | 0x3f, 0x2f, 0x65, 0xb3, 14 | 0x0c, 0x32, 0xe2, 0x0b, 15 | } 16 | 17 | var PubSeed = []byte{ 18 | 0x46, 0xec, 0xe5, 0x85, 19 | 0xb4, 0xc0, 0xbf, 0xa1, 20 | 0x18, 0x62, 0x09, 0x27, 21 | 0x0e, 0x22, 0xfa, 0x07, 22 | 0xc4, 0x71, 0x64, 0x61, 23 | 0xb5, 0xa0, 0x26, 0xc2, 24 | 0x68, 0xe5, 0x94, 0xfb, 25 | 0x94, 0x40, 0x4f, 0x3a, 26 | } 27 | 28 | var Message = []byte{ 29 | 0xf1, 0x6c, 0x96, 0xe8, 30 | 0x8f, 0xb9, 0x9a, 0x82, 31 | 0x87, 0xa4, 0x31, 0x21, 32 | 0x96, 0x2e, 0x89, 0xed, 33 | 0x52, 0x16, 0x99, 0xfa, 34 | 0x3e, 0x12, 0x6c, 0x67, 35 | 0xea, 0xaa, 0x16, 0x80, 36 | 0x66, 0x35, 0x44, 0x77, 37 | } 38 | 39 | var PubKey = []byte{ 40 | 0x3d, 0x9b, 0x2e, 0xed, 0xb4, 0x44, 0xec, 0x46, 0xeb, 0xb0, 0x3f, 0x50, 0xe4, 0x1b, 0xa4, 0x06, 0x3e, 0x3a, 0x67, 0x84, 0x3c, 0xc5, 0xf9, 0xf3, 0x9e, 0x38, 0x6c, 0x40, 0x8b, 0xfc, 0x9a, 0xcb, 41 | 0x55, 0x4a, 0xf9, 0xa6, 0x6c, 0x96, 0xdf, 0xb8, 0x54, 0xdc, 0x3e, 0x9d, 0x32, 0x7b, 0x5a, 0x09, 0xef, 0x27, 0x3d, 0x94, 0x46, 0x20, 0xb7, 0x1c, 0xd3, 0xb5, 0xaf, 0x48, 0x89, 0x07, 0x61, 0x76, 42 | 0xe0, 0x4c, 0x01, 0x05, 0xf9, 0x86, 0x44, 0xe5, 0x91, 0xb0, 0x2b, 0x1c, 0xe9, 0x19, 0xe4, 0x8d, 0x4c, 0x39, 0x0d, 0x4f, 0x60, 0x05, 0x8e, 0x02, 0xfa, 0x06, 0xb3, 0xbe, 0x62, 0x42, 0x03, 0x66, 43 | 0x94, 0x26, 0xbc, 0x9c, 0x67, 0xd1, 0x77, 0xf4, 0x80, 0x9e, 0xb0, 0x87, 0xd6, 0x4b, 0x7e, 0xd5, 0xe4, 0xe1, 0xce, 0xb5, 0xf5, 0xff, 0x65, 0xaa, 0xdb, 0x2e, 0xf7, 0x47, 0xfa, 0x45, 0xbf, 0x12, 44 | 0xf2, 0x1d, 0xe8, 0x03, 0x3e, 0x20, 0xc7, 0xbb, 0xca, 0xaf, 0x20, 0x5a, 0xb9, 0xd2, 0x4f, 0xd6, 0xc5, 0x0f, 0xde, 0x9f, 0x94, 0x88, 0x56, 0x10, 0x32, 0x3a, 0x6c, 0x46, 0xe1, 0x6a, 0xd7, 0x0c, 45 | 0x53, 0x50, 0xcb, 0x89, 0xa4, 0xb8, 0x9d, 0xbf, 0xa2, 0xeb, 0x08, 0x8c, 0x7d, 0xa7, 0x77, 0x2f, 0xc5, 0x4c, 0x3f, 0xbd, 0x24, 0x4a, 0x05, 0x31, 0xa5, 0x87, 0x95, 0x37, 0xc7, 0xf2, 0x18, 0x00, 46 | 0x7d, 0x9c, 0xe6, 0xee, 0xf6, 0x9d, 0xcd, 0xe7, 0xa6, 0x66, 0x15, 0xcb, 0x58, 0x68, 0x99, 0x75, 0x63, 0xf4, 0x51, 0x10, 0xc7, 0xa1, 0x87, 0x5e, 0xc8, 0xed, 0x2e, 0x8e, 0x24, 0xdf, 0x51, 0x7e, 47 | 0x32, 0xfa, 0xc1, 0x13, 0xd7, 0xb2, 0xa4, 0x1d, 0x35, 0xf8, 0x0a, 0x9b, 0xc3, 0x88, 0x6b, 0xb7, 0xf6, 0xdf, 0x48, 0xe8, 0xb2, 0x08, 0x2e, 0x40, 0x41, 0xd1, 0x33, 0x13, 0x6e, 0xee, 0x40, 0x5a, 48 | 0xa1, 0xf1, 0x18, 0x07, 0xca, 0xe9, 0x58, 0x09, 0x28, 0xa2, 0x0f, 0x7c, 0xd6, 0xa7, 0x1a, 0x00, 0xe9, 0x90, 0x8e, 0xcb, 0x20, 0x94, 0x60, 0xe9, 0xa3, 0xc1, 0x9f, 0x7f, 0x80, 0x33, 0x0e, 0xc2, 49 | 0x35, 0x42, 0x6e, 0x6a, 0xfe, 0x72, 0xd2, 0xa0, 0x43, 0x45, 0x05, 0x95, 0xc2, 0xc0, 0x53, 0x8c, 0x3f, 0xab, 0x60, 0xe6, 0x82, 0xc9, 0x76, 0x1d, 0x69, 0x76, 0xa5, 0x1e, 0x17, 0xd3, 0x87, 0xba, 50 | 0xe9, 0x67, 0xdc, 0x59, 0x5d, 0x9e, 0x6e, 0x1c, 0x3d, 0x52, 0x19, 0x97, 0x8f, 0xb8, 0xf6, 0xa7, 0xa6, 0x7b, 0x85, 0xb5, 0xa5, 0x08, 0xd9, 0x59, 0x3c, 0xf8, 0x84, 0xb5, 0x4d, 0x43, 0xc0, 0x06, 51 | 0x42, 0x1e, 0x42, 0xe1, 0xc5, 0xbc, 0xd7, 0x1d, 0x69, 0xea, 0x43, 0x1d, 0xf0, 0xc3, 0xb5, 0x4f, 0xf9, 0xaf, 0xcd, 0xe3, 0x4f, 0x56, 0xb1, 0x01, 0xbf, 0x8b, 0xb1, 0xe3, 0x69, 0x57, 0x75, 0xc3, 52 | 0x00, 0x2a, 0x26, 0x15, 0x92, 0x42, 0x0e, 0xbf, 0x59, 0x95, 0xb1, 0x52, 0x4d, 0x6a, 0x3b, 0xfd, 0x68, 0x2f, 0x79, 0x3d, 0x9c, 0x8f, 0xa0, 0x7f, 0xdc, 0x1d, 0x64, 0x1f, 0x8e, 0x27, 0xc3, 0x94, 53 | 0x76, 0x8f, 0x9e, 0xd6, 0x17, 0xda, 0xf7, 0xeb, 0x82, 0x79, 0x97, 0x0d, 0x73, 0xd2, 0xc8, 0x59, 0xe5, 0x7e, 0x91, 0x21, 0x36, 0x81, 0xd3, 0x8e, 0x21, 0xd7, 0x82, 0xaa, 0x9d, 0xe2, 0xe6, 0x32, 54 | 0x0c, 0xff, 0xd0, 0x86, 0xe3, 0xdc, 0x08, 0x11, 0xeb, 0xef, 0xd4, 0xf7, 0x9f, 0x58, 0x17, 0x55, 0xc3, 0x34, 0x4a, 0x66, 0x2d, 0x84, 0x2f, 0x77, 0x7e, 0x31, 0x1c, 0xa3, 0xd2, 0x7e, 0x03, 0x6e, 55 | 0xcb, 0xc7, 0xd8, 0x5d, 0x82, 0xda, 0xb3, 0xcc, 0x0f, 0x11, 0x7f, 0x62, 0x79, 0x7b, 0x43, 0xfa, 0x84, 0xac, 0x37, 0xf6, 0xde, 0xd0, 0xbf, 0x3f, 0x57, 0x5d, 0x63, 0xa0, 0xc4, 0x30, 0x5b, 0x78, 56 | 0x72, 0xe6, 0x1b, 0x3f, 0x43, 0x18, 0x34, 0x33, 0x49, 0xa5, 0xbe, 0x4a, 0xbe, 0x7a, 0xec, 0xb8, 0x87, 0xc0, 0x17, 0x29, 0x3c, 0xa6, 0x59, 0x0b, 0x00, 0x82, 0x14, 0xfe, 0x61, 0xa1, 0x67, 0xca, 57 | 0xab, 0x81, 0x68, 0x69, 0x07, 0x41, 0x7f, 0x33, 0xa7, 0xa8, 0xd0, 0xf8, 0x82, 0x03, 0x4c, 0x10, 0xd6, 0xa0, 0x7c, 0xcc, 0x89, 0xa5, 0x4d, 0x73, 0xfa, 0x2a, 0x2e, 0x42, 0x76, 0xee, 0x64, 0xf2, 58 | 0xef, 0xb7, 0xe5, 0x0e, 0x60, 0x41, 0x6b, 0x3a, 0xae, 0x49, 0x7e, 0xc3, 0x7d, 0xb9, 0x0f, 0xa9, 0xf8, 0x6c, 0x81, 0x54, 0xb9, 0xbb, 0x49, 0x1e, 0x77, 0x95, 0x00, 0x32, 0x97, 0x62, 0xa5, 0xb7, 59 | 0x8c, 0x66, 0x75, 0x49, 0x77, 0xee, 0x6b, 0x20, 0x89, 0x6e, 0xf0, 0x40, 0x0d, 0x8a, 0x49, 0xa1, 0x69, 0x1d, 0xfa, 0x91, 0xe1, 0x3e, 0xd6, 0x25, 0x78, 0x9c, 0x30, 0x53, 0xac, 0xcd, 0x2d, 0xf2, 60 | 0xd9, 0x77, 0x52, 0xb9, 0x32, 0xa4, 0xc0, 0x41, 0xe8, 0x87, 0x65, 0xd7, 0x4a, 0x99, 0x1d, 0xbe, 0x46, 0xcf, 0xae, 0x05, 0x44, 0x6f, 0xee, 0x50, 0x72, 0x7d, 0xc4, 0x4f, 0x82, 0x6c, 0x89, 0x86, 61 | 0xfc, 0x1e, 0x11, 0x53, 0x41, 0xb3, 0xbc, 0x9b, 0x14, 0x6f, 0x83, 0xa8, 0x78, 0x7b, 0xcd, 0x05, 0xc0, 0xe7, 0x9d, 0xe7, 0xbe, 0xc7, 0x59, 0xae, 0x46, 0x89, 0xb7, 0x5b, 0x97, 0xd1, 0xd4, 0x74, 62 | 0x49, 0x36, 0x57, 0xf6, 0xde, 0xfa, 0xfc, 0x6c, 0xe8, 0x77, 0x75, 0x9b, 0x24, 0x55, 0xf8, 0xe0, 0x55, 0x6e, 0x5b, 0xb5, 0x73, 0x3c, 0xf1, 0x24, 0xca, 0x13, 0x9c, 0x51, 0xbe, 0x71, 0x39, 0xac, 63 | 0xf7, 0xa5, 0xe8, 0x99, 0xe3, 0xf7, 0xd1, 0xce, 0x73, 0xb5, 0x8a, 0x48, 0xc4, 0x4a, 0xab, 0xdb, 0xdd, 0x5a, 0xa3, 0x82, 0x47, 0x7b, 0x4c, 0x75, 0x79, 0x99, 0x1c, 0x05, 0xc1, 0x0a, 0x58, 0xb0, 64 | 0xe3, 0xc1, 0x1a, 0x98, 0xa6, 0xdb, 0x6d, 0x47, 0xb9, 0xec, 0xfd, 0x0d, 0x19, 0x50, 0x6d, 0x91, 0xb0, 0xd3, 0xb3, 0xe1, 0xfc, 0xbe, 0xf4, 0xb7, 0xdd, 0x26, 0xfd, 0x64, 0xee, 0x0d, 0x56, 0xfc, 65 | 0x9b, 0x87, 0x52, 0xcf, 0xa7, 0x38, 0x68, 0x4c, 0xa1, 0xa6, 0xf0, 0xa3, 0x73, 0xf8, 0xdc, 0xce, 0x54, 0x59, 0x7b, 0x30, 0x70, 0x2d, 0x0d, 0x18, 0x4b, 0xc7, 0xcd, 0xea, 0xfe, 0x47, 0xe8, 0xd0, 66 | 0xaa, 0xec, 0xe5, 0x3e, 0x59, 0x1f, 0x48, 0xdf, 0x7d, 0x94, 0x69, 0x02, 0xfa, 0xe1, 0x4c, 0xdd, 0xd3, 0xc3, 0xe1, 0xd3, 0x71, 0x16, 0x15, 0xfd, 0x1f, 0x3b, 0xc1, 0xee, 0xe5, 0xa3, 0x8e, 0x06, 67 | 0x0c, 0x92, 0x9b, 0xb8, 0x89, 0x72, 0x2d, 0xed, 0x97, 0x30, 0xa7, 0x08, 0x7e, 0x17, 0x3f, 0x26, 0xa6, 0x86, 0xa0, 0xd2, 0x37, 0x77, 0xc1, 0x62, 0x35, 0x98, 0x4b, 0xb8, 0x16, 0xf0, 0xcb, 0x72, 68 | 0x27, 0xf7, 0xd4, 0x22, 0xc7, 0x8f, 0xdb, 0xaf, 0x72, 0x4e, 0x08, 0x3b, 0x00, 0x7f, 0x05, 0xab, 0xb8, 0x0f, 0x59, 0xb4, 0xb1, 0xe5, 0x18, 0xb2, 0x73, 0x18, 0xb2, 0xf7, 0x39, 0x0f, 0xb3, 0xc0, 69 | 0xd6, 0x34, 0xdc, 0x0b, 0x1a, 0x60, 0xce, 0xb2, 0x41, 0x82, 0xb5, 0x72, 0xd0, 0x73, 0xce, 0x02, 0xf8, 0xe8, 0x3e, 0x4d, 0xdf, 0xe8, 0x68, 0x10, 0xd7, 0x89, 0x39, 0x70, 0x6d, 0x32, 0xf7, 0xb4, 70 | 0xf4, 0x09, 0x50, 0xdd, 0x9a, 0x06, 0x68, 0x87, 0xf9, 0x7c, 0xf9, 0xb5, 0x72, 0x27, 0x03, 0xd9, 0x85, 0x5c, 0x39, 0xff, 0xbf, 0xe3, 0x72, 0xce, 0x38, 0x0c, 0x72, 0x68, 0x84, 0x98, 0x69, 0x1a, 71 | 0x14, 0xc0, 0xce, 0x91, 0x9c, 0xef, 0xa3, 0x03, 0x1f, 0xb7, 0x77, 0x48, 0x43, 0xb8, 0x39, 0x1c, 0x82, 0x31, 0xcb, 0xc6, 0xdf, 0x13, 0x15, 0x2d, 0xb1, 0x6f, 0xc6, 0x9c, 0x55, 0xa4, 0xa5, 0x1c, 72 | 0x01, 0x89, 0xa8, 0x95, 0x2e, 0x88, 0x37, 0x48, 0x4b, 0xd1, 0x82, 0x2f, 0xe6, 0xc3, 0x53, 0x7f, 0x7d, 0xe9, 0x06, 0xa4, 0x2f, 0x77, 0x1b, 0x38, 0x8c, 0x67, 0xc9, 0xc9, 0x37, 0x4a, 0xd5, 0x03, 73 | 0xe4, 0x59, 0x3d, 0xd4, 0x4c, 0x92, 0xcb, 0xb4, 0x50, 0x9c, 0x9b, 0xf1, 0x6c, 0x3b, 0xa8, 0x4c, 0xb4, 0xdb, 0x1b, 0x22, 0xf3, 0xce, 0xdd, 0x15, 0xb7, 0xcc, 0x92, 0x13, 0xf3, 0x56, 0x88, 0x24, 74 | 0xb6, 0xc8, 0xb2, 0x54, 0xd4, 0x3e, 0xd8, 0x1f, 0x9c, 0x4d, 0xb7, 0x85, 0x7c, 0xe7, 0xdf, 0xac, 0xd8, 0x70, 0x49, 0xd3, 0x0b, 0xad, 0xd5, 0x9a, 0x45, 0x36, 0xcd, 0x94, 0x78, 0xea, 0x70, 0x17, 75 | 0xf3, 0x9d, 0x55, 0x49, 0x4a, 0x90, 0x7e, 0xbc, 0xe8, 0xe0, 0x88, 0xf8, 0xd3, 0x4f, 0x79, 0x8c, 0x89, 0xde, 0x87, 0x91, 0xcc, 0xf3, 0x60, 0x2a, 0x0f, 0x06, 0x37, 0xc4, 0x24, 0xd8, 0xdd, 0x13, 76 | 0x9d, 0x53, 0x63, 0x74, 0x4e, 0xf7, 0x10, 0xbe, 0xc4, 0xd2, 0xfd, 0x8e, 0x5f, 0x2d, 0xd8, 0x01, 0xd8, 0x41, 0x2a, 0xa5, 0x3c, 0xba, 0xc3, 0x4f, 0x34, 0xf9, 0xb5, 0x3b, 0x29, 0xa2, 0x49, 0x79, 77 | 0xfb, 0x99, 0xcc, 0xfc, 0x92, 0x89, 0x70, 0x95, 0xf2, 0x25, 0x13, 0x6e, 0xfe, 0x2c, 0x8d, 0xca, 0x64, 0x47, 0x7e, 0x61, 0x6a, 0x64, 0x00, 0x86, 0xa0, 0x33, 0x66, 0x20, 0x08, 0x02, 0x96, 0xf8, 78 | 0xb1, 0x31, 0xd2, 0x9f, 0x67, 0xd8, 0xae, 0xaf, 0xa6, 0x95, 0x49, 0x0b, 0x20, 0x17, 0xdf, 0x15, 0x50, 0x61, 0xf0, 0xb3, 0x13, 0x5b, 0x2b, 0x5e, 0xdf, 0x2f, 0xbe, 0xbb, 0x9d, 0x0c, 0x2e, 0xb4, 79 | 0x70, 0xc6, 0xe7, 0xf8, 0x3b, 0xce, 0x44, 0xf3, 0x52, 0xec, 0x37, 0x84, 0x54, 0x5c, 0xdf, 0x1e, 0x4a, 0xe1, 0xd6, 0x86, 0xd0, 0xa3, 0xdf, 0x4d, 0x9f, 0xfd, 0x28, 0x28, 0xc6, 0x76, 0x76, 0xec, 80 | 0xfa, 0xc9, 0x52, 0x6e, 0x27, 0xfe, 0x9d, 0xe7, 0x8e, 0x67, 0x4e, 0x0f, 0x77, 0x00, 0xf5, 0xbe, 0x22, 0x49, 0x8a, 0x67, 0x94, 0xd8, 0xfc, 0x31, 0xdc, 0x60, 0x23, 0xa2, 0x63, 0x11, 0xab, 0xd0, 81 | 0x57, 0x1c, 0xc4, 0xa8, 0xf4, 0xf7, 0x90, 0x46, 0x06, 0x0c, 0x4c, 0x0a, 0x45, 0xc8, 0x12, 0x14, 0x75, 0xd7, 0x34, 0xf6, 0x77, 0x15, 0xbb, 0x21, 0x52, 0x46, 0x46, 0x4c, 0x41, 0xa1, 0xd4, 0x1e, 82 | 0x7b, 0x94, 0x25, 0xfc, 0x66, 0xc2, 0x0b, 0x4e, 0x4f, 0x31, 0x25, 0x95, 0x7f, 0x93, 0x0b, 0x04, 0xbe, 0x84, 0x66, 0xba, 0xa0, 0xc2, 0x94, 0x66, 0x12, 0x89, 0x9d, 0x68, 0xc0, 0xde, 0x4c, 0xa8, 83 | 0x31, 0xe7, 0x5f, 0x23, 0xe8, 0xd7, 0xad, 0x43, 0x6d, 0x37, 0xd7, 0xb3, 0x66, 0x78, 0x8f, 0xe2, 0x56, 0x9a, 0x22, 0x03, 0x01, 0x0f, 0x7d, 0x0e, 0x08, 0x7a, 0x96, 0x9e, 0xc8, 0xa9, 0x8f, 0x52, 84 | 0x8c, 0x5b, 0xfd, 0x61, 0x5a, 0xf2, 0xcc, 0x2a, 0x5e, 0x5f, 0xe2, 0xdd, 0x62, 0xe7, 0xd0, 0xfb, 0x7f, 0x0b, 0x56, 0x07, 0x12, 0x0e, 0x86, 0x6f, 0xc4, 0xa4, 0xbc, 0x03, 0x82, 0x98, 0x38, 0x21, 85 | 0x5a, 0x72, 0x5d, 0xdd, 0xe5, 0x1f, 0x32, 0x39, 0x48, 0xba, 0x98, 0x20, 0x4e, 0x09, 0x5e, 0x5a, 0x2e, 0x52, 0xe4, 0x5e, 0x49, 0xda, 0x79, 0x0a, 0x30, 0xca, 0x25, 0xe4, 0x75, 0xb6, 0x92, 0x72, 86 | 0x34, 0x9d, 0x5d, 0x14, 0x6d, 0xc8, 0x2d, 0x2a, 0xa5, 0xd6, 0x9d, 0xa0, 0x1d, 0xcd, 0x8e, 0x0f, 0xb6, 0x6c, 0xaf, 0xdf, 0xc2, 0x7f, 0xcd, 0x41, 0x88, 0xfb, 0xa3, 0x1f, 0x95, 0x36, 0xad, 0xc0, 87 | 0xef, 0x31, 0x14, 0x07, 0x10, 0x28, 0xa9, 0x1b, 0xe8, 0x4d, 0x98, 0x49, 0x98, 0x0e, 0x03, 0x5d, 0x52, 0x9e, 0xf9, 0xb9, 0x72, 0x37, 0x9a, 0x2d, 0x6d, 0x43, 0x36, 0x16, 0x10, 0xf8, 0x4d, 0x0a, 88 | 0x93, 0xb2, 0x02, 0xe9, 0x32, 0xa8, 0xe6, 0xc6, 0x1b, 0xa7, 0x86, 0xb9, 0xf5, 0x7f, 0xcd, 0x70, 0x49, 0x62, 0x5a, 0x12, 0x52, 0x06, 0x1d, 0xa2, 0xb1, 0x2d, 0xde, 0x50, 0x7a, 0x85, 0x42, 0xcd, 89 | 0x4e, 0x9e, 0xc7, 0xe1, 0xfc, 0x40, 0x57, 0x67, 0x8a, 0xa8, 0x9b, 0x0c, 0x84, 0xcc, 0x24, 0xc1, 0x91, 0x9a, 0xbe, 0xbc, 0xba, 0xb6, 0x7a, 0x39, 0x82, 0x69, 0x25, 0x4b, 0x50, 0x69, 0x0c, 0xb5, 90 | 0x84, 0xbb, 0xbc, 0x4f, 0xbe, 0xab, 0x2e, 0x31, 0x0e, 0x76, 0xd8, 0xa4, 0xf6, 0xb8, 0xbf, 0x80, 0x3c, 0x4c, 0xf8, 0x88, 0xc1, 0xf0, 0xe6, 0x0d, 0x2b, 0xf2, 0xcf, 0x7a, 0xc6, 0x51, 0x19, 0x23, 91 | 0x55, 0xdc, 0xd6, 0x1b, 0xb5, 0x9d, 0xd4, 0xc9, 0xbc, 0x6c, 0xd6, 0x78, 0xaa, 0xed, 0xd7, 0x99, 0xad, 0xbc, 0xa0, 0x19, 0x67, 0x25, 0x23, 0x87, 0x61, 0xd0, 0x19, 0xf2, 0xd0, 0xe2, 0x7e, 0x13, 92 | 0xda, 0x2f, 0xa4, 0x63, 0xc8, 0x5c, 0xc2, 0x21, 0xc0, 0x2a, 0x53, 0x5e, 0xa2, 0xa6, 0x36, 0x8a, 0x63, 0x4b, 0x34, 0x8e, 0x5d, 0x62, 0x37, 0x19, 0x0a, 0xb4, 0x52, 0xba, 0x5f, 0x92, 0x49, 0x39, 93 | 0x52, 0xa2, 0x79, 0xcc, 0x04, 0xe8, 0x1d, 0x9d, 0x1a, 0x2b, 0x9a, 0x4b, 0x98, 0xc3, 0x4e, 0x16, 0x56, 0xd5, 0xaf, 0xfd, 0x2a, 0x6a, 0x06, 0x47, 0xac, 0x3b, 0xb5, 0xde, 0x30, 0x8d, 0x4c, 0xde, 94 | 0x00, 0x7e, 0xfc, 0xa2, 0x1d, 0x39, 0x15, 0x8f, 0x03, 0xe8, 0x5e, 0x5f, 0x70, 0xa9, 0xf6, 0x10, 0x9f, 0x22, 0x4c, 0x41, 0xb0, 0x79, 0xd5, 0x39, 0x4b, 0x9c, 0x83, 0xf8, 0xa4, 0x2b, 0xe0, 0xc3, 95 | 0x06, 0x11, 0xec, 0x8d, 0x2a, 0x24, 0x33, 0xf2, 0xbf, 0xaf, 0xda, 0xdc, 0x68, 0x2e, 0xdc, 0xf1, 0x03, 0x33, 0x05, 0x80, 0x3e, 0xe4, 0xf8, 0x5b, 0x9a, 0x68, 0x30, 0x68, 0x80, 0xfa, 0xee, 0x04, 96 | 0xa7, 0xf8, 0xdc, 0x65, 0xad, 0x9b, 0x11, 0xcf, 0x45, 0xea, 0x63, 0x32, 0xfc, 0xd7, 0xb6, 0x5e, 0xcf, 0x98, 0x25, 0x1b, 0xb2, 0x72, 0xbd, 0x17, 0x61, 0xd9, 0x31, 0xd5, 0xea, 0xca, 0xf8, 0x9b, 97 | 0x1f, 0x9f, 0x41, 0xcd, 0xd8, 0x0a, 0x3e, 0x82, 0x70, 0x21, 0x82, 0x79, 0xb3, 0x65, 0x7f, 0xbc, 0x5f, 0x9d, 0x75, 0x45, 0xeb, 0x2d, 0x49, 0x15, 0x38, 0x53, 0xa0, 0xdb, 0x52, 0x56, 0xdb, 0x78, 98 | 0x75, 0x72, 0xa6, 0xf4, 0xb7, 0xc0, 0x0b, 0xcc, 0x20, 0x2e, 0xd2, 0xf0, 0xe7, 0x16, 0x68, 0x2b, 0x93, 0xbd, 0xee, 0x4e, 0x72, 0x5c, 0x31, 0x24, 0xe9, 0x58, 0xa3, 0xda, 0x04, 0x5c, 0x11, 0x79, 99 | 0x5f, 0xe7, 0x53, 0xa0, 0x01, 0xca, 0xe4, 0x6e, 0xf4, 0x64, 0xb0, 0x4a, 0x70, 0x50, 0xab, 0x3a, 0x2f, 0x71, 0x34, 0x14, 0xc7, 0x73, 0xab, 0xde, 0x51, 0xbf, 0x82, 0x93, 0x46, 0xd6, 0x20, 0x87, 100 | 0xf1, 0xef, 0x85, 0x9a, 0x19, 0x24, 0x69, 0xf8, 0xc3, 0x65, 0xac, 0x32, 0xe0, 0x5d, 0x9f, 0xe3, 0x35, 0xb9, 0x2b, 0x57, 0xfc, 0x57, 0x67, 0x7f, 0xd6, 0xa9, 0x73, 0x92, 0x4b, 0xc5, 0x84, 0xd5, 101 | 0x1d, 0x34, 0x7a, 0x7b, 0x66, 0xd4, 0x3e, 0x34, 0x19, 0x6e, 0xd4, 0x41, 0x0d, 0xaf, 0xa3, 0x79, 0x18, 0xe7, 0x43, 0xef, 0xd5, 0x07, 0xfc, 0x67, 0x2a, 0x07, 0x1f, 0x69, 0x1f, 0xba, 0x7a, 0x7a, 102 | 0x53, 0x22, 0x4d, 0x93, 0xc0, 0x58, 0xd8, 0x86, 0x03, 0xbc, 0x09, 0xa2, 0x15, 0xee, 0xe7, 0x77, 0xca, 0x10, 0xbe, 0x89, 0x12, 0x71, 0x83, 0x4f, 0x9f, 0x76, 0xb4, 0x77, 0xb7, 0xa6, 0xe1, 0x70, 103 | 0x1e, 0xc6, 0x27, 0xc4, 0x88, 0xad, 0xeb, 0x2e, 0x9e, 0x92, 0xcd, 0xf6, 0x3e, 0xfb, 0x14, 0xab, 0xc4, 0xb2, 0x6a, 0x3e, 0xe3, 0x85, 0x7d, 0x58, 0xb1, 0xb4, 0x6d, 0x31, 0xfd, 0xd0, 0x96, 0xbe, 104 | 0x27, 0x77, 0xf1, 0x18, 0x99, 0x8c, 0x3b, 0xf0, 0xce, 0x32, 0x09, 0xf5, 0xf1, 0x25, 0xed, 0x42, 0xce, 0xcc, 0xe4, 0xbc, 0x23, 0xbf, 0x80, 0x17, 0x80, 0xe5, 0x3a, 0x1c, 0x11, 0xb7, 0x23, 0xb2, 105 | 0x09, 0x82, 0x6d, 0x20, 0xc3, 0xb7, 0xfa, 0x12, 0x7c, 0xe7, 0xca, 0x89, 0xf3, 0xe4, 0x4e, 0x25, 0x1f, 0xdb, 0x4f, 0x3d, 0x6c, 0x53, 0xd7, 0xc6, 0x89, 0xc8, 0x65, 0xe9, 0xbf, 0xb1, 0xfb, 0xff, 106 | 0x6d, 0xe2, 0x0c, 0xd2, 0x26, 0xa2, 0x25, 0xab, 0x81, 0x1b, 0x0e, 0xb3, 0xcc, 0x36, 0xf9, 0x8f, 0x55, 0x08, 0x2b, 0xa9, 0xde, 0x68, 0x67, 0x2c, 0x2c, 0x74, 0xb8, 0x99, 0x6d, 0x55, 0xc8, 0x35, 107 | } 108 | 109 | var Signature = []byte{ 110 | 0x3d, 0x9b, 0x2e, 0xed, 0xb4, 0x44, 0xec, 0x46, 0xeb, 0xb0, 0x3f, 0x50, 0xe4, 0x1b, 0xa4, 0x06, 0x3e, 0x3a, 0x67, 0x84, 0x3c, 0xc5, 0xf9, 0xf3, 0x9e, 0x38, 0x6c, 0x40, 0x8b, 0xfc, 0x9a, 0xcb, 111 | 0xf1, 0x4d, 0x59, 0x5b, 0x02, 0x68, 0x97, 0x14, 0x99, 0x8d, 0x9e, 0xdb, 0x65, 0xdc, 0xa7, 0xd4, 0x41, 0xa9, 0xef, 0x68, 0x03, 0xee, 0xe5, 0x4e, 0xe6, 0xb0, 0x6e, 0x46, 0x8c, 0x55, 0x9d, 0x00, 112 | 0x4e, 0x60, 0x46, 0x97, 0x6b, 0xbf, 0x9c, 0xe1, 0x32, 0xac, 0xbe, 0xe3, 0x9c, 0x23, 0xdc, 0xc9, 0xd0, 0xd8, 0x6d, 0x17, 0x33, 0x53, 0x9f, 0x1a, 0x83, 0xca, 0x9a, 0x24, 0xb3, 0xb4, 0x12, 0xbb, 113 | 0x5c, 0x34, 0x09, 0x3e, 0x85, 0xaf, 0xa6, 0xd5, 0x96, 0x1e, 0xac, 0x27, 0x75, 0xe3, 0xe8, 0xae, 0xc1, 0x06, 0xaf, 0x82, 0xdb, 0x44, 0x52, 0x77, 0x03, 0x3f, 0xc6, 0xf4, 0x5d, 0x5b, 0x75, 0x08, 114 | 0xb0, 0x55, 0x2b, 0xdb, 0x18, 0xec, 0xf1, 0x37, 0x2f, 0x09, 0xde, 0x39, 0x1a, 0x5f, 0x7d, 0xc3, 0x96, 0xee, 0xf4, 0xbc, 0xe2, 0x93, 0x4f, 0x2a, 0x28, 0x22, 0x36, 0x44, 0x81, 0x4d, 0x25, 0xa9, 115 | 0xc2, 0x2b, 0xc2, 0x4b, 0xd8, 0xae, 0xf1, 0x40, 0xab, 0x66, 0x91, 0x46, 0xc5, 0x39, 0x51, 0x1e, 0x17, 0xee, 0x85, 0x9b, 0xd2, 0xcf, 0x56, 0xfd, 0xb9, 0x9c, 0x86, 0xc8, 0x4f, 0xb1, 0x0d, 0x66, 116 | 0xa6, 0x51, 0xce, 0x64, 0xff, 0x1a, 0xfb, 0x59, 0xc8, 0x5a, 0x47, 0x97, 0x4e, 0xa0, 0xd2, 0xbc, 0x14, 0x09, 0x26, 0x46, 0x22, 0x0d, 0xc7, 0x2a, 0x96, 0x19, 0xb3, 0x54, 0xc1, 0x64, 0x7d, 0xd7, 117 | 0x6c, 0xd6, 0x3d, 0x54, 0xf1, 0x27, 0x46, 0x55, 0xe4, 0x60, 0x30, 0x1b, 0x13, 0x5e, 0xdd, 0xd6, 0xce, 0x0d, 0xce, 0x83, 0xa1, 0x66, 0xd1, 0xa9, 0xfe, 0x11, 0x00, 0x36, 0x70, 0xc6, 0xcd, 0x34, 118 | 0xe3, 0xb9, 0xdb, 0x15, 0x37, 0x90, 0x78, 0xf4, 0xfa, 0x99, 0x9c, 0xa6, 0xb7, 0x6d, 0x1b, 0x3b, 0xbc, 0x09, 0xf1, 0xff, 0xd6, 0xad, 0xae, 0x1d, 0xc6, 0x89, 0xf4, 0x76, 0xff, 0x45, 0xbd, 0x3b, 119 | 0x35, 0x42, 0x6e, 0x6a, 0xfe, 0x72, 0xd2, 0xa0, 0x43, 0x45, 0x05, 0x95, 0xc2, 0xc0, 0x53, 0x8c, 0x3f, 0xab, 0x60, 0xe6, 0x82, 0xc9, 0x76, 0x1d, 0x69, 0x76, 0xa5, 0x1e, 0x17, 0xd3, 0x87, 0xba, 120 | 0xd6, 0xf1, 0xae, 0x42, 0x61, 0x1d, 0xdd, 0x6e, 0xdd, 0x99, 0x32, 0x78, 0x66, 0x13, 0x45, 0x8c, 0x20, 0xca, 0x64, 0xe8, 0x02, 0x6d, 0xa8, 0x1f, 0x03, 0x4c, 0xad, 0x78, 0x4e, 0x17, 0x1a, 0x13, 121 | 0x2a, 0xe5, 0xfe, 0x5a, 0xf9, 0xc6, 0x28, 0xfa, 0xf2, 0xc5, 0xbc, 0xdf, 0xe2, 0x76, 0x12, 0x5f, 0xed, 0x8b, 0x43, 0x23, 0x65, 0x70, 0xcf, 0x2a, 0xfb, 0x5a, 0xbb, 0xa2, 0xd4, 0xbb, 0xe9, 0x08, 122 | 0x7e, 0x95, 0xe5, 0x38, 0x81, 0x4b, 0xc6, 0x0d, 0x9a, 0x30, 0xca, 0xe5, 0xd2, 0x7b, 0xe1, 0x32, 0xd0, 0xa1, 0x9e, 0x90, 0x00, 0x2b, 0x4f, 0x67, 0xa7, 0x35, 0x97, 0x9b, 0xfd, 0x1d, 0xf4, 0xcf, 123 | 0x32, 0xc6, 0x56, 0x76, 0x21, 0x93, 0x8c, 0xc8, 0x5f, 0xca, 0x45, 0xfc, 0x2b, 0xb1, 0x73, 0x70, 0x5f, 0x7e, 0x06, 0x9a, 0xd7, 0x6b, 0xc6, 0x98, 0x07, 0x7a, 0x2a, 0xe6, 0x08, 0x9b, 0x13, 0xd2, 124 | 0x04, 0xd0, 0x5b, 0x65, 0xbe, 0x29, 0x3d, 0x49, 0x39, 0x31, 0xbd, 0xbd, 0x84, 0xc1, 0x83, 0x28, 0x0a, 0xfe, 0xd7, 0x51, 0x41, 0x66, 0xcf, 0x3c, 0x6c, 0x00, 0x04, 0xcc, 0x70, 0xf9, 0x45, 0xcc, 125 | 0xe4, 0xed, 0x30, 0x45, 0x59, 0xfe, 0x99, 0x60, 0xd9, 0xf3, 0x9c, 0xde, 0x26, 0x49, 0x7d, 0x16, 0xd0, 0x8f, 0x21, 0x1f, 0x24, 0xfc, 0xc2, 0xd3, 0xe1, 0x4c, 0x98, 0xd1, 0x67, 0x20, 0x53, 0x10, 126 | 0x88, 0x3e, 0xcd, 0x4f, 0x83, 0x80, 0xbf, 0xc7, 0xdd, 0x81, 0xbc, 0x66, 0x84, 0xf9, 0xd8, 0xe6, 0x21, 0xd9, 0x2e, 0xd8, 0x94, 0xa0, 0x99, 0xa8, 0xc1, 0x68, 0xcd, 0x2e, 0xdb, 0x57, 0x6d, 0x55, 127 | 0x1c, 0xf2, 0xdf, 0xdf, 0x68, 0xf8, 0x25, 0x1f, 0xa8, 0xf5, 0xfa, 0x50, 0xbc, 0xe8, 0xa5, 0x8c, 0x28, 0x0a, 0xfb, 0xa1, 0x96, 0xb9, 0x2c, 0x35, 0x73, 0x65, 0x6f, 0xe1, 0x53, 0xd2, 0xf0, 0x56, 128 | 0xd9, 0x3b, 0xea, 0x87, 0x0c, 0xc5, 0xbc, 0x5e, 0xe6, 0x71, 0xd0, 0x52, 0x23, 0x48, 0x11, 0x01, 0x1e, 0xb2, 0x82, 0xc4, 0x0d, 0xf8, 0x99, 0x0a, 0xa1, 0x51, 0xe5, 0x07, 0xdd, 0x22, 0xa9, 0x54, 129 | 0x64, 0x05, 0x8f, 0xf5, 0xe0, 0x7f, 0xc6, 0x91, 0xda, 0x1a, 0x19, 0xad, 0xb9, 0x25, 0x36, 0x30, 0xec, 0x4c, 0xdb, 0xae, 0x66, 0x8f, 0xf1, 0x14, 0x67, 0xd7, 0x4b, 0x10, 0x05, 0xf7, 0x19, 0xe1, 130 | 0x0f, 0x06, 0xeb, 0x4b, 0x9c, 0xbe, 0x71, 0x65, 0x16, 0xef, 0x06, 0xff, 0x69, 0xec, 0xc9, 0x75, 0xd9, 0xa2, 0xf7, 0x88, 0xc5, 0x0a, 0x46, 0xbf, 0xac, 0xf4, 0xbd, 0x9a, 0x8b, 0xe5, 0x54, 0x69, 131 | 0x6a, 0x21, 0x04, 0x18, 0xbd, 0xdb, 0xc9, 0xf8, 0xeb, 0xc0, 0x7f, 0xdb, 0x31, 0x0e, 0xbd, 0xb5, 0x69, 0x54, 0xd5, 0x5d, 0x1e, 0x01, 0x76, 0x3a, 0x1b, 0x69, 0xb3, 0x08, 0xc5, 0x8c, 0x6b, 0x66, 132 | 0x9d, 0xa9, 0xbe, 0xb9, 0xc7, 0x30, 0x40, 0x2c, 0x40, 0x9f, 0x74, 0xe1, 0xfb, 0x10, 0x81, 0x75, 0x41, 0x19, 0x12, 0x18, 0xe4, 0xc8, 0xf3, 0x86, 0xb8, 0x3b, 0xec, 0xc3, 0x2d, 0x92, 0x19, 0x4a, 133 | 0xdc, 0x2c, 0x2f, 0x69, 0xde, 0xeb, 0xb3, 0x5f, 0x1e, 0xcb, 0xa9, 0x01, 0xee, 0xf0, 0x66, 0x01, 0x12, 0xab, 0x08, 0x7b, 0xed, 0xea, 0x11, 0x63, 0x94, 0xa5, 0x27, 0x23, 0x26, 0x80, 0x2b, 0x5f, 134 | 0x69, 0xfb, 0x85, 0x09, 0xb2, 0x88, 0x1e, 0x7c, 0x96, 0xa5, 0x06, 0x9a, 0x0c, 0x0a, 0xa4, 0x0a, 0x81, 0x1d, 0xfd, 0x11, 0x5b, 0x16, 0x01, 0xfe, 0x22, 0x35, 0xda, 0xad, 0xbd, 0x58, 0x45, 0x23, 135 | 0x67, 0x57, 0x0f, 0x5f, 0x6f, 0xdc, 0x97, 0x9c, 0x8c, 0x9c, 0x7a, 0x4b, 0x6b, 0x88, 0x5c, 0x1d, 0xf0, 0xb2, 0x37, 0x7d, 0x5f, 0xed, 0xe6, 0xeb, 0xc8, 0x28, 0xce, 0x82, 0xc6, 0x10, 0x92, 0xaa, 136 | 0x3d, 0xbc, 0x82, 0xd0, 0x30, 0x2c, 0xe8, 0xbf, 0x7a, 0x11, 0xd7, 0xf0, 0x7f, 0xff, 0x6f, 0x8b, 0x2d, 0x47, 0x0f, 0xf2, 0xf2, 0x9e, 0x70, 0x9e, 0x67, 0xec, 0x0d, 0xf6, 0x15, 0xaf, 0x4b, 0xf3, 137 | 0x60, 0x8d, 0xe2, 0xf5, 0x55, 0x19, 0x3f, 0x1e, 0x4a, 0x50, 0x65, 0xab, 0x37, 0xec, 0x6a, 0xdc, 0xef, 0xd0, 0x4b, 0x9a, 0x12, 0xc2, 0x5c, 0xfb, 0x10, 0x3b, 0x97, 0x53, 0x55, 0x1c, 0x38, 0xdf, 138 | 0x72, 0x73, 0xc3, 0xd3, 0x7c, 0x5c, 0xef, 0xf3, 0xdf, 0x0d, 0x8b, 0x73, 0x17, 0xf6, 0x9d, 0xaa, 0x86, 0x49, 0x63, 0xa0, 0x8d, 0xc0, 0x53, 0xb0, 0x65, 0x51, 0x29, 0x18, 0x83, 0x1a, 0x81, 0x89, 139 | 0x63, 0xba, 0x87, 0x43, 0x80, 0xcb, 0x42, 0xea, 0x4f, 0x8e, 0x48, 0x62, 0x31, 0xa9, 0xe6, 0x8c, 0x4f, 0xd4, 0x3e, 0x4d, 0x92, 0x8b, 0x94, 0x63, 0x22, 0x6f, 0x72, 0x4e, 0xda, 0xaf, 0xfe, 0x71, 140 | 0x2e, 0x8c, 0x4c, 0x6c, 0xe8, 0x63, 0x76, 0x2e, 0x97, 0xef, 0xfa, 0x66, 0x54, 0x50, 0x2d, 0x4b, 0x01, 0x15, 0x7f, 0x42, 0x49, 0x13, 0x76, 0xc0, 0x0f, 0xec, 0x2f, 0x32, 0xe7, 0xee, 0xe0, 0x51, 141 | 0x6d, 0x09, 0x7e, 0x90, 0x25, 0x62, 0x40, 0xe3, 0x7e, 0xab, 0x4c, 0xe4, 0xd9, 0x37, 0x19, 0xd7, 0x83, 0x9d, 0x62, 0xcc, 0x6b, 0xdb, 0x64, 0x7b, 0xc6, 0x05, 0x1f, 0x43, 0x0f, 0x6e, 0xe6, 0x70, 142 | 0xbb, 0xb0, 0xb3, 0x1c, 0xa2, 0x1f, 0xeb, 0x5b, 0x99, 0x16, 0xfc, 0x76, 0x4f, 0x80, 0xee, 0xa7, 0x6c, 0x10, 0x93, 0x31, 0x59, 0xd9, 0xda, 0xea, 0xeb, 0x28, 0x0a, 0x4a, 0x53, 0xa5, 0x3b, 0x44, 143 | 0xb1, 0x88, 0xd7, 0xa6, 0x4c, 0xbe, 0x80, 0x30, 0x95, 0x37, 0x38, 0xb5, 0x7b, 0xe8, 0x55, 0x9c, 0x2f, 0xc9, 0x36, 0xc1, 0x68, 0x41, 0x82, 0x8b, 0x8a, 0xe4, 0xee, 0xab, 0x9e, 0x65, 0x21, 0x53, 144 | 0xfa, 0x8b, 0x7e, 0xa3, 0xe0, 0xc8, 0xd0, 0x45, 0xf6, 0xf9, 0x38, 0x38, 0xb7, 0xdd, 0x72, 0xcc, 0x92, 0x2d, 0xe6, 0x1b, 0xf2, 0x21, 0x2c, 0x4e, 0xb4, 0xf8, 0x26, 0xc3, 0x4b, 0x0a, 0x81, 0xa6, 145 | 0x55, 0xe7, 0x38, 0x9d, 0xb5, 0x56, 0xff, 0x58, 0x85, 0x73, 0xc5, 0x97, 0x6e, 0x7b, 0xbe, 0x80, 0x43, 0x59, 0x6b, 0x82, 0x34, 0x08, 0x86, 0x8c, 0x81, 0x0d, 0x67, 0x7b, 0x06, 0x52, 0xb5, 0xce, 146 | 0x7f, 0x91, 0x77, 0x2d, 0xaf, 0xb6, 0x68, 0x21, 0x58, 0x86, 0x06, 0x59, 0xba, 0x8e, 0x9a, 0x94, 0x2a, 0xf1, 0x3e, 0xb1, 0xe8, 0x7e, 0x60, 0xdf, 0x5e, 0x27, 0xe4, 0x89, 0xea, 0x09, 0xf4, 0xeb, 147 | 0x09, 0x02, 0x0f, 0x72, 0x73, 0xef, 0x92, 0xac, 0x76, 0x2c, 0x96, 0x3a, 0x8d, 0x84, 0x3a, 0xaa, 0x72, 0x02, 0x4e, 0x37, 0xaa, 0xb5, 0x1d, 0xe6, 0xc9, 0xd0, 0x1a, 0x3a, 0x3b, 0x72, 0x92, 0xda, 148 | 0xb1, 0x31, 0xd2, 0x9f, 0x67, 0xd8, 0xae, 0xaf, 0xa6, 0x95, 0x49, 0x0b, 0x20, 0x17, 0xdf, 0x15, 0x50, 0x61, 0xf0, 0xb3, 0x13, 0x5b, 0x2b, 0x5e, 0xdf, 0x2f, 0xbe, 0xbb, 0x9d, 0x0c, 0x2e, 0xb4, 149 | 0xea, 0x9d, 0x7a, 0x91, 0x1d, 0xfe, 0x6a, 0x42, 0x6b, 0x08, 0x6d, 0x5f, 0x37, 0x0f, 0xeb, 0x16, 0x56, 0xfc, 0xc3, 0x0c, 0x98, 0xef, 0xd2, 0x5e, 0x15, 0x9d, 0x14, 0x80, 0xd7, 0x1e, 0x15, 0x4e, 150 | 0x57, 0x9c, 0xf6, 0x54, 0x97, 0x14, 0xff, 0xb0, 0xa4, 0xe6, 0x27, 0x19, 0x06, 0xd5, 0x70, 0x70, 0x8f, 0xfb, 0x67, 0x9f, 0x45, 0xa3, 0xb8, 0x4f, 0x1b, 0xe3, 0x6d, 0x1e, 0x1e, 0x79, 0xb4, 0xc4, 151 | 0x17, 0xfc, 0xd3, 0xf4, 0x42, 0x71, 0xea, 0xcd, 0x12, 0xb0, 0xea, 0x97, 0x6f, 0x81, 0x8b, 0x70, 0x30, 0x6b, 0xdf, 0x58, 0xd3, 0x11, 0xc6, 0xd2, 0x6d, 0xa3, 0xc1, 0x71, 0xb4, 0xca, 0x6f, 0x2f, 152 | 0x57, 0x7b, 0xee, 0x2b, 0x57, 0xee, 0x5e, 0x4d, 0xc4, 0x78, 0xf8, 0xfe, 0xbf, 0x65, 0x22, 0x8a, 0xfe, 0x48, 0x3c, 0xff, 0xd1, 0x16, 0x04, 0xa5, 0xb0, 0xa4, 0x80, 0x14, 0x4b, 0x8c, 0x8f, 0x4b, 153 | 0x50, 0x63, 0x70, 0x8e, 0x92, 0xb7, 0xb6, 0xb7, 0xc6, 0x5b, 0xbf, 0xab, 0xc8, 0xf2, 0x03, 0x59, 0x24, 0x03, 0x97, 0xdb, 0xaa, 0xe7, 0xdb, 0x6a, 0x2b, 0x0b, 0xd4, 0x70, 0x03, 0x7a, 0xdb, 0x9d, 154 | 0xbb, 0x05, 0x1e, 0xfe, 0xf5, 0x13, 0x9b, 0x02, 0x6b, 0xba, 0x9e, 0xcd, 0xbc, 0x13, 0x52, 0x06, 0x18, 0xe4, 0xc2, 0x82, 0xd4, 0x05, 0x49, 0x4c, 0x2f, 0xc4, 0x7b, 0xf8, 0x8c, 0x75, 0x8f, 0x24, 155 | 0xc2, 0xa8, 0xc6, 0x68, 0x6b, 0x4f, 0xc9, 0xea, 0x0b, 0xeb, 0x58, 0x55, 0x83, 0xf9, 0xe7, 0x6a, 0x8c, 0x90, 0xc3, 0x45, 0x85, 0x10, 0x12, 0xcf, 0xc4, 0x1d, 0x50, 0x39, 0x6e, 0xf5, 0xa1, 0x81, 156 | 0xeb, 0xea, 0x3d, 0x63, 0x80, 0x30, 0x2b, 0x59, 0x9c, 0x07, 0x1d, 0x7c, 0xd4, 0x5f, 0x58, 0x21, 0x1b, 0x9a, 0xef, 0x24, 0xda, 0xc9, 0x62, 0xeb, 0xcc, 0x91, 0xdb, 0x63, 0x9a, 0x56, 0x00, 0xfb, 157 | 0x5d, 0xac, 0xbf, 0x24, 0x86, 0x31, 0x99, 0xbb, 0x54, 0x6b, 0x0c, 0x76, 0x3c, 0x63, 0x81, 0xe7, 0x61, 0xa2, 0x4f, 0x3e, 0xaf, 0xac, 0xad, 0x09, 0xca, 0x88, 0x4f, 0xc8, 0x48, 0x8e, 0x16, 0xd6, 158 | 0x86, 0xbf, 0x5a, 0xd5, 0x20, 0x71, 0xcf, 0xb7, 0x7a, 0x96, 0x3a, 0x9f, 0xc4, 0x13, 0x35, 0x68, 0x90, 0xcd, 0x06, 0x25, 0x8f, 0xfc, 0xcf, 0x01, 0x42, 0x09, 0x40, 0xe3, 0x83, 0xcc, 0xe1, 0xa0, 159 | 0xf4, 0x6e, 0x85, 0xce, 0xc0, 0x6a, 0x61, 0x85, 0xc3, 0x08, 0x38, 0xe8, 0xad, 0x49, 0x2c, 0x4e, 0x56, 0x29, 0x78, 0x79, 0x14, 0x98, 0x4a, 0x50, 0x47, 0x48, 0x2c, 0x18, 0x75, 0x67, 0x65, 0xe7, 160 | 0x47, 0x0a, 0x38, 0xde, 0xa5, 0x69, 0xb7, 0x26, 0x27, 0xed, 0xc8, 0xb3, 0x90, 0xa4, 0x08, 0xb3, 0x10, 0x73, 0x71, 0xd9, 0x2a, 0x8b, 0x1f, 0x3f, 0xe9, 0x78, 0xde, 0x1e, 0x06, 0xe2, 0x8e, 0xb7, 161 | 0xa3, 0x3c, 0x1d, 0xab, 0xe7, 0xb3, 0x85, 0x9a, 0x87, 0x69, 0xc5, 0x64, 0x0d, 0xb4, 0xb7, 0xbc, 0xfa, 0xa9, 0x6e, 0x62, 0xcd, 0xfe, 0x1b, 0x3e, 0x0d, 0x16, 0x04, 0xa7, 0xd8, 0x3a, 0x3b, 0xe8, 162 | 0x13, 0x4d, 0x3c, 0x7a, 0xb9, 0x90, 0xfa, 0xa0, 0x3c, 0x43, 0xbe, 0x25, 0xc2, 0x3d, 0x64, 0x89, 0x4a, 0x25, 0xa2, 0x75, 0xa8, 0xbf, 0x04, 0x0d, 0x65, 0x97, 0xad, 0x65, 0x95, 0x95, 0x20, 0x31, 163 | 0x66, 0xfb, 0x9c, 0xb8, 0x34, 0x81, 0x01, 0xcb, 0xfa, 0x39, 0xd0, 0x36, 0x26, 0xce, 0xe3, 0x8b, 0x32, 0x39, 0x06, 0x3f, 0xc1, 0xba, 0x28, 0xd5, 0x4d, 0x3f, 0x90, 0x02, 0xa4, 0x51, 0xb5, 0x3d, 164 | 0xfb, 0xd1, 0xe7, 0xf9, 0x4b, 0xde, 0x31, 0xcb, 0x1d, 0x9f, 0xc7, 0xd9, 0xd6, 0x33, 0x60, 0x57, 0xbf, 0x4e, 0xf7, 0x99, 0x08, 0xe6, 0xe0, 0x49, 0x15, 0xb0, 0x8e, 0xcb, 0x7c, 0x94, 0xf0, 0xe6, 165 | 0x9e, 0x22, 0xed, 0x54, 0x07, 0xaf, 0xa7, 0x80, 0x2f, 0xb8, 0xe4, 0xfd, 0xb0, 0x1c, 0x18, 0xd8, 0xfe, 0x81, 0xfd, 0xda, 0x59, 0xa4, 0x48, 0xb5, 0xad, 0x05, 0xc9, 0xa3, 0x49, 0x0f, 0x93, 0x64, 166 | 0xa7, 0x2c, 0xe2, 0xf1, 0x47, 0x15, 0x10, 0x0b, 0xa4, 0x97, 0x4f, 0xe2, 0x80, 0xc1, 0xdc, 0x02, 0xcf, 0x4f, 0x72, 0x5d, 0xe2, 0x6e, 0x12, 0x02, 0xb8, 0x42, 0x7e, 0x4a, 0x8b, 0x34, 0x59, 0xd2, 167 | 0xb6, 0xec, 0x86, 0x48, 0x33, 0x28, 0xeb, 0xa9, 0xea, 0x15, 0xe4, 0x03, 0x29, 0x3d, 0xa6, 0x5d, 0xa0, 0xcf, 0xa4, 0xcf, 0x72, 0x9d, 0x8a, 0x32, 0x3f, 0xc6, 0xd8, 0x5d, 0xc0, 0x37, 0x58, 0x21, 168 | 0x6e, 0xce, 0x0f, 0xd6, 0x95, 0x60, 0x33, 0xc9, 0x41, 0x32, 0x56, 0xe9, 0x09, 0xba, 0xfe, 0x6e, 0x7f, 0x40, 0x91, 0xa7, 0x8c, 0x61, 0x79, 0x12, 0x42, 0x28, 0x22, 0x25, 0x5b, 0xdb, 0x99, 0xca, 169 | 0x4a, 0xe0, 0xc3, 0x39, 0x1a, 0x71, 0xca, 0x53, 0xfa, 0x57, 0xa8, 0x53, 0xc3, 0xf5, 0xb4, 0xfe, 0x87, 0x1e, 0x65, 0xc2, 0x2e, 0xe7, 0x0c, 0x10, 0x86, 0xc3, 0x1b, 0x7a, 0xc7, 0xd0, 0xcf, 0x87, 170 | 0xc3, 0xf3, 0x7b, 0x0a, 0x15, 0xfd, 0x2c, 0x32, 0x55, 0x87, 0xc6, 0x80, 0xe1, 0x84, 0x0d, 0x45, 0xdd, 0xbc, 0x0c, 0x73, 0xa8, 0x63, 0x46, 0x80, 0xc7, 0x47, 0x26, 0xbb, 0xd7, 0xf7, 0x5f, 0x00, 171 | 0xb9, 0xcf, 0x71, 0x97, 0x67, 0x8e, 0xe8, 0xc8, 0xe6, 0x13, 0x21, 0xc6, 0xfb, 0x2a, 0x0a, 0x39, 0xb1, 0xac, 0x0d, 0x77, 0xa2, 0xe2, 0xdc, 0x66, 0xd1, 0x78, 0x86, 0x8d, 0x7c, 0xab, 0xa4, 0x47, 172 | 0x15, 0xf0, 0x8c, 0xf8, 0xee, 0x45, 0x68, 0x45, 0xab, 0x60, 0xd2, 0x78, 0x85, 0x00, 0xce, 0x26, 0xf2, 0xdf, 0x84, 0x87, 0x16, 0xbe, 0x13, 0x89, 0x13, 0x02, 0xcd, 0x34, 0x6c, 0x81, 0x7c, 0x0e, 173 | 0xd6, 0xc1, 0xf6, 0x47, 0x39, 0xe1, 0x44, 0x12, 0x63, 0xde, 0x7f, 0x3d, 0x55, 0xb0, 0x04, 0xb1, 0x34, 0x93, 0xfa, 0x78, 0x95, 0xbd, 0xa4, 0x4d, 0x42, 0x5e, 0xe4, 0x84, 0xdd, 0x5c, 0x36, 0xd9, 174 | 0x23, 0x90, 0x5b, 0x15, 0xf2, 0xc4, 0x12, 0x9e, 0xf7, 0x39, 0x73, 0x24, 0x05, 0x09, 0xfd, 0xe4, 0xd1, 0xdc, 0x39, 0x68, 0xd3, 0x8a, 0x1c, 0x58, 0xe9, 0x02, 0x3d, 0xcb, 0x97, 0x26, 0xea, 0x8a, 175 | 0x09, 0x82, 0x6d, 0x20, 0xc3, 0xb7, 0xfa, 0x12, 0x7c, 0xe7, 0xca, 0x89, 0xf3, 0xe4, 0x4e, 0x25, 0x1f, 0xdb, 0x4f, 0x3d, 0x6c, 0x53, 0xd7, 0xc6, 0x89, 0xc8, 0x65, 0xe9, 0xbf, 0xb1, 0xfb, 0xff, 176 | 0x7a, 0x2c, 0xe9, 0x81, 0x27, 0x1e, 0xcb, 0x55, 0x6f, 0x46, 0xdc, 0x59, 0xa9, 0xd1, 0x80, 0x33, 0xdb, 0x21, 0x13, 0x18, 0x34, 0x72, 0xa3, 0xf8, 0xbb, 0x92, 0xc9, 0xae, 0xcf, 0xfc, 0x09, 0xe2} 177 | 178 | var SignatureW4 = []byte{ 179 | 0xc7, 0x26, 0x90, 0xe1, 0x1e, 0x0d, 0x3e, 0x9c, 0xc5, 0x71, 0x3d, 0x38, 0x23, 0x27, 0xa7, 0x15, 0x1f, 0x76, 0xea, 0x70, 0x4a, 0xcf, 0x9f, 0xe0, 0x8d, 0xe8, 0x51, 0xa6, 0xb4, 0x6c, 0xf1, 0xcd, 180 | 0x0f, 0xd7, 0xca, 0xb3, 0x0e, 0xb9, 0x9e, 0x3d, 0x1b, 0x87, 0x49, 0x5e, 0x4b, 0x1f, 0x1f, 0x16, 0xb0, 0xcb, 0x2a, 0xa0, 0x7d, 0x4d, 0x45, 0xc1, 0x63, 0x17, 0xa1, 0xcf, 0xb8, 0x40, 0x0a, 0x33, 181 | 0xb8, 0xa4, 0x83, 0x4a, 0x05, 0x94, 0x15, 0x4c, 0x71, 0x58, 0xae, 0xe8, 0xc6, 0x55, 0x6e, 0xa8, 0xc3, 0x02, 0x5f, 0x81, 0xe5, 0x95, 0x84, 0x3d, 0x3b, 0x8d, 0xc7, 0x47, 0x6f, 0x7e, 0xd4, 0x2f, 182 | 0xa7, 0xed, 0x65, 0xdd, 0x67, 0xa3, 0xf0, 0xea, 0xe6, 0x3c, 0x09, 0x5d, 0xb4, 0x5a, 0xf3, 0x27, 0x28, 0x5a, 0x0e, 0xed, 0xc5, 0x13, 0x82, 0xb7, 0x76, 0xdc, 0x13, 0x55, 0x8d, 0x00, 0x11, 0x46, 183 | 0x6b, 0x75, 0xe7, 0xbc, 0xc1, 0x13, 0xfa, 0x73, 0xa2, 0x22, 0x27, 0x87, 0x48, 0xb7, 0x3c, 0x78, 0xf8, 0xa7, 0x94, 0x9f, 0x25, 0x55, 0x75, 0xf7, 0xcf, 0x6c, 0xf8, 0x4c, 0x91, 0x5d, 0xbf, 0x90, 184 | 0xdd, 0x7d, 0x3d, 0x19, 0x90, 0x50, 0x3c, 0x7f, 0x89, 0xac, 0x88, 0x79, 0x6a, 0xcd, 0xf7, 0x52, 0x53, 0xc0, 0xa6, 0x7d, 0x06, 0x46, 0x3b, 0x9c, 0xb8, 0xc9, 0xda, 0x2f, 0x64, 0x34, 0xc8, 0xb7, 185 | 0x54, 0xab, 0x1a, 0x88, 0x32, 0x8d, 0x41, 0xad, 0x06, 0x82, 0x28, 0x4a, 0x30, 0xcd, 0xbe, 0x07, 0x05, 0xcc, 0x75, 0x45, 0xc9, 0x57, 0x4f, 0x6f, 0x81, 0xee, 0xf6, 0x8b, 0xdc, 0xd1, 0x87, 0xd3, 186 | 0x96, 0x53, 0xa9, 0x70, 0xbd, 0x3d, 0x2d, 0xda, 0xbc, 0xb6, 0x95, 0x3d, 0x05, 0x35, 0x38, 0x6b, 0x9c, 0xbc, 0xc1, 0x62, 0x74, 0xe7, 0x5f, 0x0f, 0x37, 0xbe, 0xc2, 0xe7, 0xc6, 0xd1, 0x2a, 0x38, 187 | 0x79, 0xae, 0x32, 0xd9, 0x0c, 0x3d, 0x53, 0x4d, 0x5e, 0xac, 0xcf, 0x1c, 0xdf, 0xf1, 0xa1, 0x05, 0x77, 0x4b, 0xb3, 0xfa, 0xca, 0x52, 0x37, 0x88, 0x29, 0x4b, 0xcb, 0xc2, 0x9a, 0xaf, 0xea, 0x1a, 188 | 0xba, 0x3c, 0x49, 0xc7, 0xd4, 0x8d, 0xb8, 0x8a, 0x98, 0x2d, 0x48, 0x95, 0xd5, 0xde, 0xe3, 0xa6, 0xc8, 0xc9, 0x4a, 0xdc, 0x34, 0x4f, 0xa2, 0x34, 0x6f, 0x86, 0x26, 0x06, 0xd5, 0x85, 0xf8, 0x8b, 189 | 0xa1, 0xda, 0xd6, 0x7a, 0x36, 0x3a, 0xbb, 0x70, 0x03, 0x3d, 0x00, 0xef, 0x9b, 0x81, 0xb1, 0xad, 0xa4, 0x7c, 0xa2, 0x3c, 0x44, 0x6a, 0x34, 0x6b, 0xcf, 0x6b, 0xa9, 0x6b, 0xa1, 0x19, 0xd1, 0xd6, 190 | 0x3e, 0x32, 0x0b, 0xcc, 0x94, 0x22, 0x8e, 0x4c, 0xe0, 0x28, 0x94, 0xd0, 0x46, 0x42, 0xb0, 0x3e, 0x40, 0xc3, 0x61, 0x74, 0xf2, 0x01, 0x04, 0x4c, 0xa4, 0x80, 0xa4, 0x2e, 0x50, 0x8d, 0xb6, 0x39, 191 | 0x50, 0xf5, 0x98, 0x32, 0xe3, 0x87, 0x15, 0x2d, 0xf6, 0x01, 0x22, 0x8c, 0x97, 0xe3, 0x43, 0xf9, 0xfb, 0x3d, 0xb7, 0xe2, 0x9e, 0x45, 0x2a, 0x99, 0xbb, 0x55, 0x4a, 0x97, 0x65, 0x58, 0x65, 0x7c, 192 | 0x76, 0xeb, 0x42, 0xfc, 0x1a, 0xfd, 0x22, 0x94, 0xdb, 0x9d, 0xaa, 0xf1, 0x55, 0xf4, 0x9b, 0xa5, 0x04, 0xdc, 0xdc, 0xa8, 0x6b, 0x77, 0x97, 0xdb, 0xbf, 0xb5, 0x30, 0xf3, 0x14, 0x18, 0xfb, 0x0e, 193 | 0x3c, 0x0e, 0x6c, 0xf4, 0xac, 0x67, 0x41, 0xb3, 0x94, 0x1a, 0x79, 0x17, 0x2b, 0x9e, 0x0b, 0x09, 0x3c, 0x81, 0x2f, 0x09, 0x3d, 0xe7, 0x8f, 0x8d, 0x73, 0xd5, 0x13, 0x24, 0xa8, 0x93, 0xb4, 0xdf, 194 | 0x44, 0x6e, 0x47, 0x17, 0x53, 0xdf, 0xd0, 0x6a, 0x55, 0x2a, 0xb6, 0xaf, 0x26, 0x02, 0xb6, 0xf9, 0x0f, 0xe1, 0x51, 0xd3, 0xc3, 0xf5, 0x8f, 0x79, 0x94, 0xbc, 0xac, 0xe6, 0xe3, 0x26, 0xb3, 0x1c, 195 | 0x27, 0x7b, 0x79, 0x38, 0x01, 0xc0, 0xc2, 0xcf, 0xa3, 0xf8, 0x6b, 0x60, 0x8f, 0x30, 0x6d, 0xd6, 0x7a, 0xc9, 0x1a, 0xfe, 0x4d, 0x1f, 0xb4, 0xdf, 0x9b, 0x1e, 0xe8, 0x2f, 0xc3, 0xc4, 0x47, 0x8f, 196 | 0xb4, 0x40, 0x82, 0x05, 0xff, 0x46, 0x65, 0x77, 0x56, 0x6c, 0x0e, 0x61, 0x6f, 0x72, 0x94, 0xd8, 0x04, 0x86, 0xc9, 0xaa, 0xb9, 0x1b, 0x3c, 0x1a, 0x34, 0xc9, 0x1b, 0xac, 0x7e, 0x02, 0x74, 0x70, 197 | 0x40, 0xcf, 0x67, 0x00, 0xd3, 0x96, 0xe9, 0x3f, 0xf8, 0x75, 0x51, 0x3f, 0xaf, 0x94, 0x59, 0x58, 0xe4, 0x39, 0xbb, 0x53, 0x80, 0x2b, 0x61, 0x61, 0x01, 0x7a, 0xa0, 0x74, 0x52, 0xf7, 0x39, 0x94, 198 | 0x3f, 0x20, 0x87, 0x7a, 0xdb, 0xd4, 0x8d, 0x97, 0xaf, 0x83, 0x03, 0x23, 0x32, 0x43, 0x01, 0x45, 0xa2, 0x16, 0x8f, 0x2a, 0xd9, 0x30, 0x0f, 0x37, 0xe4, 0xbb, 0x53, 0xdc, 0x74, 0x5b, 0x77, 0xd6, 199 | 0xac, 0xac, 0x7c, 0x94, 0x16, 0x42, 0x14, 0x41, 0xfa, 0x0f, 0x6e, 0xa9, 0xd7, 0x69, 0xae, 0xa7, 0x89, 0x0e, 0x9a, 0x38, 0x32, 0x72, 0xe3, 0xb0, 0x55, 0x5a, 0xfd, 0xb2, 0xc1, 0x87, 0xc9, 0xa6, 200 | 0x80, 0x58, 0xdd, 0xeb, 0x42, 0xd9, 0xe9, 0x40, 0x9a, 0xeb, 0x29, 0x20, 0x2f, 0x68, 0x4a, 0xe5, 0x66, 0xaf, 0x29, 0x7e, 0x45, 0xcd, 0x8e, 0x59, 0xd6, 0xa7, 0x08, 0xca, 0x53, 0x6c, 0x20, 0x53, 201 | 0xc7, 0xfc, 0x3f, 0xc1, 0x81, 0x54, 0xe1, 0x6b, 0x31, 0x56, 0x6b, 0x43, 0xe4, 0x4a, 0x0c, 0xeb, 0xe2, 0xd6, 0x53, 0x94, 0xa2, 0x06, 0x90, 0xe8, 0xf1, 0x3d, 0x57, 0x89, 0xd5, 0x1a, 0x7c, 0xae, 202 | 0x2e, 0xee, 0x20, 0x58, 0x6c, 0x0f, 0xb8, 0x10, 0x56, 0x10, 0x16, 0xfd, 0xea, 0xa5, 0x23, 0xc1, 0x7e, 0x86, 0xd6, 0xd4, 0x97, 0xbc, 0xad, 0x46, 0xc7, 0x3d, 0x84, 0xb2, 0x0b, 0x63, 0x73, 0xd4, 203 | 0x0e, 0x3d, 0xad, 0xd5, 0xaf, 0x9d, 0xe7, 0xbe, 0x01, 0xc9, 0x78, 0xfd, 0x17, 0x45, 0x37, 0x4a, 0x6c, 0xd4, 0x3f, 0xfe, 0x5b, 0xd4, 0xce, 0x6f, 0x5d, 0xba, 0x33, 0xfc, 0xf2, 0x05, 0x58, 0x0e, 204 | 0xc0, 0x9c, 0x33, 0x34, 0x10, 0x4b, 0xb8, 0xf5, 0x9f, 0x10, 0x4d, 0x95, 0x43, 0x5a, 0xe4, 0x2f, 0x35, 0x8f, 0x29, 0x8c, 0x9a, 0x9c, 0xe6, 0x81, 0x77, 0xc2, 0x4b, 0x70, 0x00, 0xc4, 0x40, 0x55, 205 | 0xc9, 0xf1, 0x85, 0xe1, 0x29, 0x0f, 0xf5, 0x87, 0xfe, 0x3c, 0xbc, 0x53, 0x7f, 0x95, 0x90, 0xf9, 0x4a, 0x21, 0x01, 0x6e, 0x86, 0xe8, 0x0a, 0xd0, 0x8e, 0x9e, 0x7d, 0x8d, 0x50, 0x7c, 0x4c, 0x5f, 206 | 0x48, 0xcd, 0x0b, 0x81, 0x39, 0x36, 0xd0, 0xc9, 0xd1, 0xbf, 0x23, 0x2b, 0x32, 0xc3, 0xb0, 0x58, 0xec, 0x81, 0x6c, 0xe4, 0x94, 0x22, 0x6f, 0x4d, 0x41, 0x54, 0x21, 0x18, 0x48, 0xe2, 0xb2, 0xc8, 207 | 0x37, 0xe3, 0x33, 0x60, 0xa7, 0x82, 0x21, 0x6d, 0x27, 0x47, 0x8b, 0x70, 0xb3, 0xc5, 0x45, 0xbc, 0x1d, 0x6a, 0xfc, 0x92, 0xbd, 0x6d, 0xb2, 0x90, 0x59, 0xda, 0x65, 0x8a, 0x77, 0x8e, 0x12, 0xa8, 208 | 0x08, 0x00, 0x6f, 0xde, 0xcf, 0x09, 0x4b, 0xbf, 0x66, 0x9f, 0xeb, 0x8b, 0x77, 0x4a, 0xdb, 0x23, 0xa7, 0x07, 0x8f, 0x5a, 0x78, 0xf6, 0x6e, 0xc2, 0x88, 0x7f, 0xf0, 0x69, 0xbe, 0x31, 0x0e, 0xdc, 209 | 0x42, 0xae, 0x6e, 0x18, 0x6f, 0xc3, 0x04, 0x0c, 0x3b, 0x12, 0x1b, 0x5c, 0xb4, 0x81, 0x74, 0x22, 0x2a, 0x40, 0x29, 0x58, 0x54, 0x0c, 0x06, 0x50, 0x86, 0x08, 0xd6, 0xf4, 0xb3, 0xb8, 0xa1, 0x33, 210 | 0x78, 0xf9, 0x98, 0x29, 0x2f, 0x10, 0x95, 0xea, 0x88, 0x68, 0x2a, 0x1a, 0x42, 0x13, 0x86, 0xf4, 0x15, 0xb9, 0x22, 0x0e, 0x0f, 0x2d, 0x65, 0x9f, 0x2c, 0x51, 0x13, 0xe6, 0x78, 0x8b, 0x68, 0x22, 211 | 0xb5, 0x6c, 0x44, 0xf0, 0xa2, 0x99, 0xd7, 0x1e, 0xdc, 0xd5, 0xc9, 0x08, 0xa4, 0xaf, 0x23, 0x72, 0x1d, 0x96, 0x83, 0xe8, 0xe6, 0x8c, 0x0f, 0xb3, 0xaa, 0x5e, 0x2e, 0x8f, 0x8b, 0x2a, 0x6d, 0xc9, 212 | 0x7a, 0xca, 0xd7, 0xef, 0x22, 0x3b, 0x9e, 0x20, 0x22, 0x09, 0x30, 0xaa, 0x34, 0xe2, 0xc3, 0x69, 0x0c, 0xf5, 0x4e, 0xd5, 0x4f, 0xe8, 0xa7, 0xf6, 0x35, 0x09, 0xf6, 0x35, 0x54, 0xab, 0x0d, 0xcc, 213 | 0xe6, 0x7e, 0x0f, 0xea, 0x4d, 0x5b, 0x81, 0x3e, 0xa5, 0x2c, 0xa4, 0x01, 0x23, 0x04, 0x83, 0xae, 0x88, 0xa7, 0x71, 0xd5, 0x25, 0x17, 0xaa, 0x54, 0xa9, 0xde, 0x8a, 0x3e, 0x91, 0x41, 0x9e, 0x8a, 214 | 0xf3, 0x61, 0xed, 0x68, 0x52, 0x0d, 0x2c, 0x24, 0x44, 0x7c, 0x71, 0x91, 0x0c, 0xd3, 0x5a, 0xa3, 0x1c, 0x77, 0xcf, 0x76, 0x02, 0xde, 0x75, 0xcc, 0x29, 0xcb, 0xa9, 0x8d, 0xcd, 0x46, 0xb0, 0x10, 215 | 0x6b, 0xae, 0xad, 0x6f, 0x4a, 0x48, 0x96, 0xe2, 0xec, 0x77, 0xa4, 0xc2, 0x21, 0x44, 0x29, 0xbb, 0x4d, 0x4e, 0x75, 0x6b, 0xb5, 0x29, 0x32, 0x21, 0xff, 0xf3, 0x21, 0x9f, 0xf9, 0x00, 0xd5, 0xcd, 216 | 0xca, 0x26, 0x0a, 0xdc, 0xc5, 0xf2, 0x43, 0x44, 0x3c, 0x10, 0xe8, 0xc0, 0x22, 0xad, 0xd9, 0xa7, 0x90, 0xcf, 0x12, 0x52, 0x35, 0xe7, 0xa0, 0x1e, 0x91, 0xce, 0x99, 0xe7, 0x3f, 0x33, 0x3f, 0xbd, 217 | 0x2d, 0xcb, 0x9a, 0x9a, 0x93, 0x3b, 0x59, 0x2a, 0xb5, 0xf8, 0xc7, 0x59, 0xe0, 0x30, 0x31, 0xe2, 0x1f, 0x94, 0x4c, 0x8e, 0x62, 0x8a, 0xeb, 0x10, 0xca, 0xdd, 0x58, 0xe4, 0xef, 0x9c, 0xcc, 0xb0, 218 | 0x45, 0x9a, 0x43, 0xcb, 0xf4, 0xf9, 0x7c, 0x18, 0xc9, 0xbb, 0xd6, 0x2c, 0x10, 0x4b, 0x55, 0xdb, 0x3a, 0xdb, 0xbc, 0xa4, 0xcf, 0x03, 0x88, 0x4d, 0x9d, 0x04, 0x77, 0x1b, 0x83, 0x2c, 0xd3, 0xe8, 219 | 0x33, 0x73, 0xba, 0x30, 0xd4, 0x1e, 0xd9, 0xb4, 0x27, 0xa1, 0x9c, 0x0a, 0x83, 0x89, 0xd3, 0xa5, 0x8c, 0xe2, 0x29, 0xcb, 0x35, 0xa0, 0xc3, 0x2b, 0x25, 0x00, 0x21, 0xfa, 0x83, 0x4e, 0xbe, 0x83, 220 | 0x80, 0x89, 0x22, 0xe4, 0x30, 0x0f, 0x18, 0xfb, 0xe1, 0x29, 0xdb, 0x4a, 0xe8, 0xa3, 0xd8, 0x79, 0xb3, 0x6d, 0x9c, 0x0b, 0xe0, 0x31, 0x9a, 0xeb, 0x0b, 0xb7, 0x44, 0xee, 0x30, 0xc0, 0x24, 0xb9, 221 | 0x3a, 0x81, 0x04, 0xfd, 0xbd, 0xba, 0x3a, 0x21, 0x10, 0x41, 0xc6, 0x70, 0x83, 0x2d, 0x7f, 0xb4, 0x5b, 0xd0, 0xc1, 0x37, 0xbe, 0xba, 0xb8, 0xf1, 0xd3, 0xf1, 0xc1, 0xf4, 0xa0, 0x2f, 0x5e, 0xd6, 222 | 0x10, 0x37, 0xe9, 0x4d, 0x3e, 0xa2, 0x49, 0xdd, 0xa3, 0x71, 0xed, 0xac, 0xa6, 0x2b, 0x56, 0xbf, 0xb2, 0x4e, 0xab, 0xea, 0x97, 0x5e, 0x24, 0x0b, 0xf1, 0x6e, 0x72, 0x68, 0x6a, 0x44, 0x93, 0x3d, 223 | 0xaa, 0xc5, 0xcb, 0x07, 0x83, 0x00, 0xc1, 0x08, 0x87, 0xa2, 0x7a, 0x88, 0x36, 0x01, 0xd0, 0xd2, 0x3d, 0xb1, 0xb8, 0xdf, 0x92, 0xda, 0x06, 0xed, 0xc2, 0x3c, 0x54, 0xc5, 0xc0, 0xf9, 0x46, 0xd7, 224 | 0x1d, 0xf3, 0x97, 0x4e, 0x71, 0x26, 0x21, 0x3e, 0xaf, 0xad, 0x2a, 0x05, 0x7f, 0x95, 0x93, 0xef, 0x99, 0xc1, 0xfd, 0xbf, 0x8b, 0x6e, 0x25, 0x46, 0x0e, 0x44, 0x99, 0x85, 0x98, 0xf2, 0x63, 0x0d, 225 | 0x74, 0x77, 0x4f, 0xd3, 0x05, 0x77, 0x08, 0xe9, 0xe7, 0x82, 0x9c, 0xfe, 0x7a, 0x5a, 0x4a, 0x63, 0x1f, 0xe1, 0x2a, 0x78, 0xd0, 0x15, 0x21, 0x67, 0x3e, 0xf5, 0x07, 0xd5, 0x33, 0xa9, 0xa9, 0x82, 226 | 0x6f, 0x0b, 0xc4, 0x71, 0x01, 0x07, 0x25, 0xed, 0x70, 0x72, 0xb0, 0xd2, 0xfc, 0xaf, 0x26, 0xa6, 0x7d, 0xfa, 0x14, 0xfa, 0x88, 0x38, 0xe4, 0xd3, 0xef, 0xb5, 0x5b, 0x52, 0x29, 0x21, 0x1f, 0x11, 227 | 0x9a, 0xcd, 0x6f, 0xfb, 0xb8, 0x73, 0x11, 0x04, 0xe4, 0x24, 0xd8, 0x07, 0xde, 0x62, 0x83, 0xdf, 0xf0, 0x7c, 0x3f, 0x80, 0x2d, 0xa5, 0xeb, 0x9e, 0x93, 0xe1, 0x56, 0x72, 0x21, 0x5b, 0x2c, 0xdb, 228 | 0x35, 0xc1, 0x14, 0x9f, 0x53, 0xec, 0xba, 0xb1, 0x8d, 0xf6, 0x62, 0x81, 0x59, 0x62, 0x4c, 0x54, 0x6f, 0x21, 0xa0, 0x98, 0xa2, 0x6c, 0xe7, 0x4e, 0x35, 0x37, 0xb2, 0xe1, 0x52, 0x72, 0xa1, 0xef, 229 | 0x2d, 0xe4, 0xe8, 0xba, 0xf8, 0x0f, 0xec, 0x4d, 0x9c, 0xfb, 0xb5, 0x32, 0xd8, 0x42, 0x8e, 0x6f, 0x49, 0x83, 0x69, 0x34, 0x62, 0xa2, 0x84, 0x6d, 0xfd, 0x6d, 0xc2, 0xd2, 0xd2, 0x7e, 0xb9, 0xb3, 230 | 0x0f, 0x51, 0x39, 0xa1, 0xe9, 0xef, 0xec, 0xcf, 0xdb, 0xe9, 0x7b, 0xd3, 0x57, 0x0b, 0x5e, 0xf5, 0x60, 0xb9, 0x52, 0xcf, 0x76, 0x99, 0x17, 0xf2, 0x13, 0xbf, 0xd9, 0xa8, 0x71, 0x65, 0x0a, 0x6c, 231 | 0xb4, 0x94, 0xa5, 0x48, 0x94, 0xfc, 0x6c, 0xab, 0x23, 0x56, 0x3f, 0x46, 0x2d, 0x92, 0xc2, 0xb8, 0xeb, 0x2e, 0x75, 0xdf, 0xc7, 0x9a, 0xf8, 0x37, 0xb3, 0xe8, 0xfb, 0xee, 0xe2, 0x86, 0x55, 0x93, 232 | 0xbd, 0x60, 0x2f, 0x29, 0x70, 0x5c, 0x42, 0xf8, 0x73, 0x04, 0x6f, 0xe8, 0x4e, 0xfb, 0x5d, 0xb2, 0x3a, 0xbe, 0x11, 0xe1, 0xe1, 0xaa, 0x60, 0x07, 0xbd, 0x42, 0x20, 0x68, 0xcc, 0x97, 0xd4, 0x5a, 233 | 0x12, 0x60, 0x35, 0xe0, 0x59, 0xd0, 0xac, 0xf6, 0x9e, 0xda, 0x5e, 0xe7, 0xce, 0x2c, 0xda, 0xc8, 0x91, 0xed, 0xef, 0xe9, 0x2c, 0x9e, 0x79, 0xca, 0x78, 0x9a, 0x9f, 0x98, 0xb5, 0x0e, 0xdc, 0xb7, 234 | 0x12, 0xf1, 0x32, 0xea, 0x8d, 0x91, 0x09, 0xf5, 0x4c, 0x44, 0xe7, 0xe7, 0xc1, 0x21, 0xe5, 0x1a, 0xa1, 0xf9, 0x7b, 0x65, 0x06, 0x43, 0xc6, 0xb5, 0xae, 0xda, 0xe9, 0x96, 0x67, 0x0f, 0x8c, 0x2c, 235 | 0xda, 0xdd, 0x7d, 0xb5, 0x51, 0x95, 0x9b, 0x8f, 0x0b, 0xe8, 0x6d, 0xc6, 0xc6, 0x1c, 0x4b, 0x4d, 0x79, 0xaa, 0x7a, 0xd3, 0x52, 0x7f, 0x2e, 0x48, 0x81, 0xbe, 0xed, 0xf0, 0x6c, 0x22, 0x7f, 0x6c, 236 | 0xb9, 0x15, 0x8b, 0x49, 0x05, 0x9a, 0xc3, 0x1e, 0xc7, 0x09, 0xcf, 0xf2, 0x6e, 0xdf, 0x59, 0xe5, 0x3b, 0x98, 0xd2, 0x70, 0x4b, 0x33, 0xb0, 0x6a, 0x16, 0x0f, 0xd7, 0xf5, 0x90, 0x44, 0x27, 0xd8, 237 | 0xeb, 0xae, 0x86, 0x2c, 0xe5, 0x46, 0x9f, 0x87, 0x07, 0xc2, 0x85, 0x30, 0xe5, 0x84, 0x14, 0xf3, 0xcf, 0xf6, 0x6a, 0xc4, 0x51, 0xf1, 0x3b, 0x62, 0x35, 0x9e, 0x8e, 0x13, 0x54, 0xd6, 0x24, 0xba, 238 | 0x6d, 0xeb, 0x4d, 0x35, 0x2f, 0xa4, 0xfa, 0x6e, 0x1a, 0xf7, 0xbc, 0xb4, 0xff, 0x64, 0xae, 0xc2, 0x3d, 0x94, 0xc9, 0x6b, 0x80, 0x6e, 0x31, 0x35, 0x2d, 0x1e, 0x1c, 0x0d, 0x31, 0xaa, 0x6b, 0x60, 239 | 0xea, 0x7a, 0x30, 0x06, 0xd7, 0xe7, 0x45, 0x00, 0x6c, 0xf7, 0xbd, 0x89, 0xa3, 0xfe, 0x41, 0xf7, 0x09, 0x11, 0x24, 0xf7, 0x58, 0xbe, 0x63, 0x77, 0x84, 0x60, 0xca, 0x89, 0x6d, 0x9f, 0x0f, 0x0b, 240 | 0xf6, 0x54, 0x25, 0x4f, 0xde, 0xb0, 0xd8, 0xe5, 0xc5, 0x52, 0x41, 0xec, 0x1e, 0x69, 0x41, 0xfe, 0x34, 0x00, 0x81, 0x93, 0xdd, 0x15, 0x1c, 0x20, 0x31, 0x01, 0xc1, 0xe9, 0xcb, 0x89, 0xa8, 0x6b, 241 | 0x4d, 0xc3, 0x52, 0xab, 0x7b, 0x44, 0x9b, 0x8d, 0x6c, 0x85, 0x2a, 0x21, 0x5a, 0x2e, 0xe4, 0xe7, 0x19, 0x0b, 0x9a, 0x91, 0xdf, 0x29, 0xfb, 0xf0, 0xf0, 0x1e, 0xf6, 0x7a, 0xae, 0x59, 0x68, 0x4e, 242 | 0x6d, 0x82, 0x6a, 0x55, 0x92, 0x3e, 0x50, 0x8c, 0x99, 0x3a, 0x82, 0x52, 0x94, 0xb7, 0xe6, 0x9a, 0x9b, 0xa7, 0xf8, 0x71, 0xf5, 0x4a, 0x23, 0x29, 0xb1, 0x3a, 0x76, 0x13, 0x7a, 0x5c, 0x0b, 0xff, 243 | 0xcf, 0xae, 0xdf, 0x8d, 0x10, 0xed, 0xc3, 0xdd, 0x00, 0x72, 0x43, 0x57, 0x5d, 0xe7, 0xaf, 0x39, 0x06, 0x26, 0x81, 0x44, 0x66, 0xf1, 0xe7, 0x87, 0x0c, 0x28, 0x79, 0x7b, 0x66, 0xaa, 0x5d, 0xdd, 244 | 0xd4, 0xb7, 0x00, 0x79, 0xc9, 0x8a, 0xd8, 0xf9, 0xd8, 0x77, 0xb9, 0x49, 0x21, 0x5f, 0x51, 0xde, 0xe5, 0xa6, 0x01, 0x24, 0x73, 0x86, 0x4b, 0x98, 0xb6, 0xb1, 0x79, 0x42, 0xd1, 0x9e, 0x4c, 0x35, 245 | 0x1b, 0x1c, 0x24, 0xd8, 0xd5, 0x8d, 0x39, 0xb6, 0xac, 0xdc, 0x19, 0x3a, 0x35, 0xee, 0xa1, 0x5d, 0x54, 0xfb, 0xfb, 0x95, 0x43, 0x7b, 0xa8, 0x4d, 0xaa, 0x61, 0x77, 0xc2, 0x0d, 0xc5, 0x2c, 0x52, 246 | 0x6b, 0x44, 0x53, 0xcd, 0xb6, 0x38, 0xe4, 0x2b, 0xf2, 0x6d, 0xf7, 0x42, 0xad, 0x43, 0x8f, 0x87, 0x42, 0x4e, 0xa1, 0xac, 0x1b, 0x2a, 0xcb, 0xd0, 0x4d, 0x8f, 0xdb, 0x92, 0x6a, 0xb0, 0x92, 0xa7, 247 | 0x22, 0x03, 0xee, 0x7d, 0xc2, 0x3c, 0xc4, 0xef, 0xab, 0x38, 0xbe, 0x11, 0x87, 0xe1, 0xa6, 0x46, 0x97, 0x3e, 0xbe, 0xc8, 0xd4, 0x02, 0x6c, 0x52, 0xba, 0x28, 0x60, 0xff, 0x10, 0xb2, 0x14, 0xfd, 248 | 0x41, 0x31, 0xd3, 0xde, 0x56, 0x0b, 0x04, 0x69, 0x4a, 0xb4, 0xbc, 0x82, 0x2c, 0xe3, 0x83, 0xca, 0x58, 0x8d, 0x70, 0xce, 0x98, 0xbf, 0xca, 0x52, 0x9d, 0xbb, 0x9a, 0x1b, 0xf9, 0x92, 0xf7, 0xae, 249 | 0x73, 0xe1, 0x31, 0xad, 0x46, 0xa4, 0xd0, 0xf1, 0xd1, 0xa1, 0xeb, 0xa0, 0xaa, 0xd8, 0x1e, 0x99, 0x84, 0xb7, 0x1e, 0x86, 0x77, 0x09, 0x5a, 0xf8, 0xa6, 0xc2, 0x70, 0x74, 0x41, 0x32, 0x17, 0x85, 250 | 0x00, 0x2e, 0xa9, 0x4c, 0x0d, 0xd7, 0x0f, 0xbf, 0x4e, 0x80, 0xd4, 0xff, 0x8b, 0xfc, 0x22, 0xcf, 0x5f, 0x9e, 0x7c, 0x8c, 0x8c, 0x59, 0x69, 0xdd, 0x88, 0xf0, 0xe2, 0x0a, 0x26, 0x89, 0x72, 0xe5, 251 | 0xe8, 0xbd, 0xed, 0xbe, 0x90, 0x20, 0x05, 0x36, 0x44, 0xf6, 0x86, 0xb2, 0x02, 0x1b, 0xb7, 0x02, 0x8a, 0xc9, 0xf3, 0x03, 0x3b, 0x7e, 0xac, 0x7e, 0x35, 0x79, 0x20, 0xa3, 0x6d, 0xd6, 0x2c, 0x94, 252 | 0x6e, 0xdf, 0x71, 0x8e, 0x42, 0xdb, 0x91, 0x2d, 0x80, 0x48, 0xd6, 0x2d, 0xde, 0xc2, 0x1d, 0x54, 0xfe, 0xe7, 0x23, 0x8d, 0x64, 0xe3, 0x22, 0x61, 0x29, 0xeb, 0xd7, 0x0c, 0xd0, 0xbc, 0x75, 0x2e, 253 | 0x83, 0x1e, 0xe1, 0x09, 0xf2, 0x30, 0x86, 0x30, 0x1a, 0x7f, 0x24, 0x6c, 0x57, 0x88, 0x9d, 0xbe, 0xaf, 0x92, 0x22, 0x24, 0x75, 0x37, 0x1a, 0xd7, 0xca, 0x53, 0x3e, 0xe8, 0x3d, 0x51, 0x42, 0xa2, 254 | 0x87, 0xa6, 0x48, 0x9c, 0x27, 0xd0, 0xe4, 0x34, 0x8e, 0x41, 0xf4, 0xcb, 0xce, 0x1d, 0x9b, 0x0b, 0x61, 0x82, 0xe4, 0xa4, 0x20, 0x22, 0xa7, 0x5f, 0x21, 0x80, 0x4b, 0xbd, 0x59, 0x55, 0xd8, 0x91, 255 | 0x8c, 0xc7, 0x21, 0x71, 0xdc, 0xdd, 0x41, 0x36, 0xbd, 0x89, 0xf3, 0x1b, 0xae, 0x87, 0x34, 0x0e, 0x12, 0xfb, 0xff, 0x5e, 0x1a, 0x41, 0xc5, 0x67, 0x9e, 0xdb, 0x49, 0x32, 0x20, 0xda, 0xf1, 0xbf, 256 | 0x92, 0xd6, 0xd0, 0xf6, 0x18, 0x55, 0x4a, 0x75, 0x2a, 0x10, 0x6e, 0x02, 0x06, 0x1e, 0x8c, 0xeb, 0x3a, 0x78, 0x08, 0xe7, 0x14, 0x9e, 0x6a, 0x7c, 0x1b, 0x72, 0x65, 0xf8, 0x46, 0xc8, 0x1f, 0x25, 257 | 0x56, 0x80, 0x15, 0xdb, 0x61, 0x73, 0x8b, 0xe5, 0x95, 0xa5, 0xa9, 0xb3, 0x9a, 0xd5, 0xdf, 0x08, 0xcf, 0x69, 0x5a, 0x31, 0xc3, 0x80, 0x86, 0xa3, 0x09, 0x34, 0x4b, 0x1d, 0xf4, 0x36, 0xae, 0xd6, 258 | 0x72, 0x10, 0xf0, 0xef, 0xdd, 0x66, 0x98, 0x21, 0xe7, 0x85, 0xfc, 0xff, 0x8e, 0xd7, 0x6c, 0x0e, 0xd2, 0x9c, 0x71, 0x5d, 0xd9, 0x7f, 0x0d, 0xa5, 0xd2, 0x88, 0xbd, 0x0a, 0xa0, 0xb7, 0x16, 0xb2, 259 | 0xe5, 0x46, 0x59, 0x7b, 0x70, 0xac, 0x6a, 0x7d, 0x71, 0x6b, 0x4f, 0x50, 0xec, 0x43, 0x3a, 0xbd, 0xdb, 0x82, 0x48, 0x34, 0xb7, 0x94, 0x62, 0xec, 0x06, 0x10, 0xad, 0x05, 0xc5, 0x6d, 0x7a, 0xca, 260 | 0x25, 0xe0, 0x1f, 0xa8, 0x83, 0x48, 0x6b, 0xa9, 0x0b, 0xee, 0x58, 0xbc, 0x88, 0x13, 0x85, 0xaf, 0xb9, 0x9a, 0x88, 0x0c, 0x35, 0x76, 0x35, 0xf0, 0x10, 0x0d, 0x25, 0x01, 0x0e, 0xc2, 0x12, 0x1e, 261 | 0x98, 0xc5, 0x08, 0x83, 0x52, 0x07, 0x79, 0xfe, 0x5a, 0xca, 0xdc, 0xbb, 0x07, 0x85, 0x16, 0xe1, 0x50, 0x1d, 0xd6, 0xb7, 0xf4, 0x0b, 0x14, 0x75, 0x70, 0x94, 0x0f, 0x41, 0x8b, 0x29, 0xe1, 0xf9, 262 | 0xb3, 0x6e, 0xfb, 0x1b, 0x9f, 0xe1, 0xca, 0xb8, 0x6f, 0x9c, 0xb2, 0x50, 0x6e, 0x4a, 0x6e, 0xfe, 0xd4, 0x17, 0x24, 0x76, 0xa5, 0x6f, 0xcd, 0x7f, 0xa8, 0x28, 0x25, 0xae, 0xd7, 0x44, 0xb1, 0xec, 263 | 0xbe, 0x62, 0x6a, 0xd5, 0xaf, 0xba, 0x0f, 0x3a, 0x20, 0x65, 0x92, 0xb2, 0x76, 0xec, 0x58, 0x2d, 0xed, 0xb0, 0x90, 0xbe, 0x1a, 0xd4, 0xc1, 0xbf, 0x47, 0x43, 0x25, 0x7a, 0xa1, 0xa7, 0xa7, 0x39, 264 | 0x7d, 0x08, 0x8a, 0x0c, 0x71, 0x77, 0xea, 0x6d, 0xe3, 0x98, 0x0d, 0xc2, 0x40, 0xe5, 0x72, 0xf3, 0x23, 0x0a, 0x30, 0xaa, 0xa9, 0xb7, 0x4f, 0x47, 0x17, 0x01, 0x07, 0x3e, 0x39, 0xed, 0xfe, 0x90, 265 | 0x38, 0x44, 0x48, 0x33, 0x92, 0x12, 0x99, 0x79, 0xb7, 0xa1, 0xbb, 0x60, 0x5d, 0x01, 0x75, 0xe4, 0x84, 0xff, 0x1d, 0xc6, 0x42, 0x97, 0x1e, 0x21, 0x4f, 0xf7, 0xff, 0xad, 0xf7, 0x90, 0x99, 0x82, 266 | 0x61, 0xba, 0xa8, 0x0f, 0x6c, 0x99, 0xb5, 0x63, 0xb2, 0x12, 0x9a, 0xd2, 0x36, 0x71, 0x23, 0xe3, 0x31, 0x56, 0x84, 0xce, 0xd4, 0x42, 0x4e, 0x04, 0x62, 0x12, 0x17, 0x31, 0x35, 0x1f, 0x22, 0xae, 267 | 0x21, 0x95, 0x62, 0x0d, 0x84, 0xe5, 0x29, 0x50, 0x49, 0xc9, 0x80, 0xa2, 0xb3, 0xae, 0x5e, 0xb9, 0xeb, 0xf9, 0x05, 0xd0, 0x96, 0xd3, 0x40, 0x6b, 0xd7, 0x0d, 0x32, 0xda, 0xd3, 0x68, 0xbd, 0x19, 268 | 0x1c, 0xdc, 0x3f, 0x30, 0x69, 0x77, 0xe6, 0x3b, 0xbf, 0x70, 0xab, 0x2e, 0x85, 0x19, 0x88, 0x94, 0x24, 0xd6, 0x9a, 0x1e, 0x7b, 0x9a, 0x3b, 0x21, 0xab, 0xe8, 0x47, 0xae, 0xff, 0x36, 0xc2, 0xa9, 269 | 0x3b, 0x89, 0x7d, 0x2d, 0xe8, 0x3f, 0xe7, 0xf2, 0xbb, 0x6a, 0x39, 0xa6, 0x5f, 0xe0, 0x60, 0x86, 0xbf, 0x70, 0x54, 0xe8, 0x10, 0xbc, 0x0c, 0x3f, 0x99, 0xb0, 0xa4, 0x44, 0x89, 0x08, 0x8c, 0x43, 270 | 0x85, 0x52, 0xa0, 0x9c, 0x40, 0x2a, 0x37, 0x92, 0x6c, 0x4a, 0x19, 0x71, 0x73, 0x27, 0xe3, 0x20, 0x35, 0x88, 0x98, 0xb8, 0xc8, 0x9c, 0xe7, 0x38, 0xc0, 0xce, 0x04, 0xc8, 0x7d, 0x8f, 0xe2, 0x06, 271 | 0x87, 0xd0, 0x82, 0x78, 0x6e, 0x50, 0x18, 0xe1, 0xae, 0xe5, 0xd5, 0x8d, 0x47, 0x3b, 0xe9, 0xae, 0x80, 0x3e, 0x7c, 0xa2, 0x1c, 0x9e, 0xf5, 0x1e, 0x24, 0x30, 0x77, 0xc9, 0x12, 0x4b, 0x36, 0x1e, 272 | 0xe7, 0xa6, 0x96, 0xe1, 0xe3, 0x41, 0x54, 0x3a, 0x5a, 0x9f, 0xb7, 0xf1, 0xa6, 0x72, 0x66, 0xf4, 0xc7, 0x35, 0x6d, 0x5d, 0xb1, 0x33, 0xae, 0xa1, 0x91, 0xfd, 0x06, 0xfc, 0xa8, 0x14, 0x9c, 0x85, 273 | 0xdf, 0xce, 0xa1, 0x1c, 0x2f, 0xcc, 0x8f, 0xf1, 0x97, 0x9d, 0xc8, 0x15, 0xcc, 0x4c, 0xa6, 0xd7, 0xbf, 0x9a, 0xf9, 0xc7, 0xc6, 0xca, 0x86, 0x29, 0xca, 0xa7, 0xbf, 0x2c, 0x7b, 0x4f, 0x17, 0x9e, 274 | 0x0d, 0xe6, 0x5b, 0xfd, 0x2e, 0x62, 0x01, 0x0f, 0x26, 0xdc, 0xe1, 0xab, 0xf6, 0xbf, 0x9a, 0xbd, 0x47, 0x1b, 0xe1, 0xa3, 0x97, 0x58, 0x56, 0x0d, 0x1c, 0xe0, 0xdd, 0xb7, 0x62, 0xf9, 0xbc, 0xa2, 275 | 0xc6, 0x18, 0x78, 0xfc, 0x73, 0xf6, 0xc6, 0x76, 0x31, 0xc3, 0x42, 0x08, 0xfa, 0x4f, 0xbd, 0xf6, 0x44, 0xf4, 0xc3, 0xe2, 0xb8, 0x34, 0x93, 0xaf, 0xd1, 0x28, 0xef, 0x7c, 0xd4, 0x48, 0xbd, 0x5e, 276 | 0x04, 0x94, 0x15, 0x34, 0xbb, 0x41, 0x69, 0x64, 0x6d, 0x9a, 0x8a, 0x34, 0x71, 0x66, 0xb5, 0xd0, 0x75, 0xc7, 0xe6, 0xd7, 0xee, 0xcf, 0x05, 0x41, 0x2b, 0x59, 0x10, 0xc0, 0x85, 0xab, 0x29, 0x42, 277 | 0xdf, 0xc6, 0x13, 0xbc, 0x45, 0xb5, 0xe2, 0x43, 0x00, 0x5f, 0x2f, 0x6c, 0x9b, 0x7e, 0x1c, 0xfe, 0xb9, 0xc2, 0x58, 0x0d, 0x0b, 0xe7, 0xa4, 0xce, 0x48, 0x43, 0xad, 0x3d, 0x19, 0xa9, 0xa6, 0x23, 278 | 0x2c, 0x6c, 0x3c, 0xb5, 0xd6, 0x7f, 0x6e, 0x3d, 0xe4, 0x40, 0x05, 0xb0, 0xcc, 0xa8, 0x31, 0x6a, 0xf1, 0x82, 0x36, 0x74, 0x10, 0x1d, 0x32, 0x2b, 0xae, 0xc8, 0x05, 0x5c, 0x43, 0x63, 0x2a, 0x88, 279 | 0x42, 0x08, 0x5c, 0xee, 0x87, 0x58, 0x61, 0xa9, 0xd7, 0x6d, 0x88, 0x25, 0xdf, 0xb3, 0x77, 0x56, 0x48, 0xd2, 0xfe, 0x35, 0x8a, 0xb1, 0x8e, 0xcd, 0xfa, 0x3f, 0x2a, 0x79, 0xd7, 0x7b, 0x99, 0x8f, 280 | 0x43, 0xbc, 0xa0, 0x00, 0xc6, 0xcd, 0x8b, 0x61, 0x16, 0xfb, 0x70, 0x6a, 0xff, 0x54, 0x45, 0xe4, 0x0e, 0x4e, 0x16, 0x0e, 0xa5, 0x91, 0x46, 0x75, 0x90, 0x5d, 0x9b, 0xd4, 0xb3, 0x7b, 0x69, 0x93, 281 | 0x90, 0xb0, 0x8d, 0xe6, 0x86, 0x88, 0x0e, 0xc3, 0xef, 0xc8, 0x44, 0x74, 0x06, 0x03, 0x57, 0x1e, 0xfe, 0x4b, 0x89, 0x6b, 0x06, 0xcd, 0xce, 0xd7, 0x07, 0x00, 0x70, 0x21, 0x3b, 0xfe, 0x83, 0xa0, 282 | 0x3c, 0x91, 0x6c, 0x08, 0xa3, 0x64, 0x27, 0x9f, 0xb8, 0x30, 0x97, 0x4b, 0x86, 0xc8, 0x92, 0x6e, 0x4b, 0x6a, 0xfa, 0x00, 0xfc, 0x64, 0xa3, 0x83, 0x75, 0x5b, 0xe9, 0xf6, 0x71, 0xe3, 0x2b, 0x60, 283 | 0x83, 0xdb, 0xa2, 0xfa, 0x4f, 0x71, 0x4d, 0xe5, 0xf0, 0x5a, 0xe6, 0x6e, 0xe3, 0x3f, 0xe6, 0xc6, 0xb9, 0xb8, 0xba, 0x30, 0x56, 0x6d, 0xa1, 0x21, 0x2b, 0x18, 0xec, 0x39, 0x7b, 0x5f, 0xea, 0x12, 284 | 0xab, 0x52, 0x2c, 0x3c, 0xed, 0x1e, 0xd0, 0x0d, 0x9a, 0x36, 0xdb, 0xcd, 0xeb, 0xa4, 0x0e, 0xaa, 0x8a, 0xf0, 0x6b, 0xc8, 0x2a, 0x21, 0x1b, 0xbf, 0x44, 0xd5, 0xe5, 0xd2, 0x27, 0xd5, 0x8c, 0x49, 285 | 0x59, 0xe6, 0xb9, 0x29, 0x94, 0xc6, 0xa6, 0x49, 0x40, 0x69, 0x36, 0x80, 0x17, 0x88, 0x80, 0xaf, 0x59, 0xf3, 0xf1, 0xba, 0xfa, 0x67, 0x91, 0xbc, 0xbb, 0x0d, 0x7c, 0x4c, 0x46, 0x3c, 0xbd, 0x27, 286 | 0xc5, 0xd1, 0xa9, 0xc3, 0xcf, 0x38, 0x92, 0x0a, 0xe1, 0x2f, 0x7a, 0x71, 0x21, 0xa1, 0x55, 0xd8, 0xdc, 0x46, 0xdb, 0x34, 0x8c, 0x76, 0xd5, 0x52, 0xa8, 0x41, 0x94, 0x32, 0x9b, 0x79, 0x4c, 0xf6, 287 | 0x70, 0x77, 0x05, 0x8e, 0x1d, 0xe9, 0x7a, 0x5d, 0x5a, 0x32, 0xef, 0x63, 0x28, 0x45, 0xc1, 0x0b, 0x0e, 0xe1, 0x25, 0x7f, 0x2f, 0x88, 0x06, 0x51, 0x8b, 0x80, 0x1f, 0xd2, 0x44, 0x68, 0x91, 0x2e, 288 | 0x29, 0xbe, 0xb5, 0x5c, 0x1a, 0xe1, 0xbf, 0xfe, 0x20, 0xb6, 0x03, 0x5d, 0xce, 0x01, 0x9d, 0x5d, 0xf5, 0xee, 0x97, 0xdf, 0xe2, 0x87, 0x1f, 0x0f, 0x8a, 0x96, 0xd7, 0x9a, 0xdc, 0xc1, 0x37, 0x7c, 289 | 0x72, 0xe4, 0x71, 0xa1, 0x9b, 0x10, 0x5c, 0x7a, 0x1d, 0xae, 0x9e, 0x3f, 0x6c, 0x15, 0x14, 0xe3, 0x8c, 0xbe, 0xd5, 0x81, 0xec, 0xd2, 0x94, 0x30, 0xf2, 0x17, 0xba, 0x31, 0x93, 0xc7, 0xf1, 0xf6, 290 | 0xfc, 0x22, 0xea, 0x4e, 0xe7, 0x57, 0xcc, 0x82, 0x6e, 0xde, 0x92, 0xab, 0x5c, 0xd3, 0xdc, 0x43, 0xa0, 0xa1, 0xd1, 0xaf, 0x35, 0x62, 0x22, 0xe1, 0x20, 0xfc, 0x15, 0xc8, 0xfd, 0x0c, 0x54, 0xa2, 291 | 0xe2, 0xfa, 0x5f, 0x4e, 0x09, 0x40, 0x8c, 0x98, 0x2a, 0x23, 0xbd, 0xf8, 0x5a, 0xfc, 0x3e, 0x3e, 0x38, 0x8e, 0xe6, 0x49, 0xbc, 0x98, 0x13, 0x37, 0xd3, 0xcf, 0x9d, 0x3e, 0xec, 0xcf, 0x48, 0x2d, 292 | 0xec, 0x5c, 0xe1, 0x2a, 0x4d, 0x54, 0x3c, 0x2a, 0x15, 0x57, 0xe9, 0x30, 0xd9, 0x17, 0x21, 0x53, 0x4a, 0xc1, 0x74, 0x5f, 0x87, 0xdd, 0xde, 0x30, 0xba, 0xd4, 0xc3, 0x05, 0xae, 0x1f, 0xa5, 0x53, 293 | 0xac, 0x6f, 0xee, 0xd3, 0x13, 0xd6, 0xbc, 0xf0, 0x5f, 0x60, 0xce, 0xd8, 0x9c, 0xa4, 0x3f, 0x4a, 0x19, 0xfb, 0x4b, 0xba, 0x4f, 0x38, 0x8e, 0x32, 0x91, 0xaa, 0xd0, 0x06, 0x40, 0x56, 0x07, 0x34, 294 | 0xc7, 0x2f, 0xa4, 0xc3, 0x92, 0x8e, 0xb2, 0x36, 0xba, 0x91, 0xd3, 0xe9, 0xc2, 0x95, 0xa5, 0xb7, 0xa1, 0xdf, 0xe8, 0x2b, 0x8d, 0x10, 0x4f, 0x36, 0xe0, 0x4d, 0x14, 0x81, 0x8e, 0x17, 0xf5, 0x48, 295 | 0x95, 0xf8, 0x42, 0x6e, 0x81, 0x6f, 0x45, 0x7a, 0x42, 0xd5, 0x6d, 0xe9, 0x41, 0x8a, 0x2f, 0x0c, 0x16, 0x7a, 0x57, 0xc8, 0xa5, 0x7d, 0x4c, 0x42, 0x3b, 0xa4, 0x92, 0x89, 0xe5, 0x36, 0xf5, 0xa3, 296 | 0xd1, 0x5c, 0x1d, 0xab, 0x7c, 0x4b, 0x7c, 0xab, 0x8a, 0x24, 0x1d, 0xa9, 0x42, 0xb2, 0x25, 0xb9, 0xf8, 0x2d, 0x82, 0xdf, 0xd3, 0x8c, 0x8c, 0x29, 0xa1, 0xb8, 0x29, 0xad, 0x8c, 0x65, 0x1b, 0x53, 297 | 0x0f, 0x54, 0xae, 0xde, 0x81, 0x0b, 0x44, 0x33, 0xc0, 0xf0, 0xa4, 0xca, 0xe1, 0xd6, 0xc0, 0xb6, 0x31, 0xb5, 0x48, 0x3a, 0xeb, 0x91, 0x01, 0x14, 0x75, 0x33, 0xf5, 0xcf, 0xd6, 0xac, 0xa5, 0x2c, 298 | 0x33, 0x98, 0xf7, 0x76, 0x84, 0x99, 0x84, 0xad, 0x8c, 0x18, 0xe5, 0x6f, 0x59, 0x2f, 0x4f, 0x70, 0xc4, 0x44, 0xfe, 0xf5, 0xd1, 0x7f, 0xe9, 0x3f, 0xae, 0x75, 0x90, 0x7e, 0x49, 0xda, 0xeb, 0x1b, 299 | 0x20, 0x8e, 0x3a, 0x20, 0x73, 0x28, 0x50, 0xda, 0xa4, 0xf6, 0xe1, 0x9b, 0xbb, 0x34, 0x67, 0xb1, 0x30, 0xf9, 0x42, 0x04, 0xa1, 0xfd, 0xed, 0x2e, 0x11, 0x76, 0xe1, 0x0c, 0xd8, 0x54, 0x57, 0x75, 300 | 0x73, 0xf4, 0x92, 0x5d, 0x75, 0x24, 0xa4, 0x41, 0x6f, 0x66, 0x7d, 0x8a, 0x6e, 0x67, 0x31, 0x80, 0x93, 0xb3, 0x5d, 0x1a, 0x1c, 0x2c, 0x90, 0xc1, 0xfa, 0xee, 0x7b, 0xec, 0xc9, 0xfe, 0xb9, 0x0a, 301 | 0x00, 0x9f, 0xe4, 0x65, 0xb3, 0x1f, 0x0f, 0xc4, 0x1c, 0xc3, 0xb2, 0x78, 0x85, 0x8c, 0x8d, 0x95, 0x87, 0x9d, 0x86, 0x71, 0xbe, 0x94, 0xcb, 0xf0, 0xfd, 0x08, 0xcb, 0x92, 0x17, 0x24, 0xbd, 0x2f, 302 | 0xf9, 0xb7, 0x02, 0x06, 0x0b, 0x44, 0x03, 0x88, 0xbb, 0xe4, 0xaf, 0x3d, 0xf5, 0x28, 0x17, 0x26, 0xcd, 0x9c, 0xfd, 0x40, 0xdb, 0x79, 0x20, 0x90, 0xb1, 0xc5, 0xaa, 0x00, 0x39, 0xb5, 0x08, 0xf0, 303 | 0x7b, 0x0d, 0xe5, 0x93, 0x3b, 0x8d, 0x16, 0xaf, 0xf2, 0x48, 0xe9, 0xa1, 0x06, 0x34, 0x1a, 0xb4, 0x48, 0x0d, 0xd4, 0xc2, 0xbf, 0x4f, 0x1a, 0x52, 0x51, 0x3a, 0xbc, 0x8e, 0xa9, 0x27, 0x74, 0x4d, 304 | 0x61, 0x08, 0x1d, 0x24, 0x16, 0x2c, 0x3e, 0x55, 0xf5, 0xd1, 0x3f, 0xdb, 0x32, 0x95, 0x24, 0xc3, 0xb2, 0x77, 0x69, 0x23, 0x3e, 0x21, 0x41, 0x7b, 0x93, 0xf6, 0x3e, 0x4b, 0xe8, 0x5b, 0x8d, 0x36, 305 | 0x84, 0xbe, 0x97, 0x86, 0x0b, 0x34, 0x39, 0xed, 0x58, 0x83, 0x87, 0x6c, 0x91, 0x4d, 0x41, 0x67, 0xed, 0xf4, 0xd4, 0x3e, 0xb9, 0x65, 0x61, 0x2c, 0x87, 0x06, 0x36, 0xcf, 0x1f, 0x9a, 0x5a, 0x8d, 306 | 0x84, 0xfb, 0xf0, 0x87, 0x6b, 0xfc, 0xd9, 0x8b, 0x5b, 0xd4, 0xe9, 0x13, 0xec, 0x32, 0x3f, 0x2f, 0xa8, 0xd7, 0x8c, 0x3f, 0x61, 0x1d, 0xb1, 0xaa, 0x40, 0x96, 0xf8, 0x6d, 0xf8, 0x82, 0x76, 0x0b, 307 | 0x9e, 0xdf, 0x08, 0xa8, 0x8c, 0x52, 0xcd, 0xa8, 0x39, 0x1b, 0x79, 0x0a, 0xc0, 0xe0, 0xf9, 0x8e, 0x80, 0x6d, 0x9a, 0x58, 0x2c, 0xc4, 0xee, 0xb7, 0x11, 0x24, 0xa4, 0x45, 0xdb, 0x41, 0x37, 0x97, 308 | 0x13, 0x88, 0x44, 0xb3, 0x19, 0x66, 0x20, 0xa1, 0x14, 0x74, 0xb7, 0xcf, 0x52, 0xc4, 0x6a, 0x78, 0x65, 0x52, 0x60, 0xc7, 0x48, 0x6b, 0x72, 0x86, 0x30, 0x5b, 0x23, 0x16, 0x57, 0xc8, 0x6a, 0xc1, 309 | 0xa4, 0x03, 0xb9, 0xb1, 0x13, 0xde, 0x40, 0x8a, 0x3e, 0xf2, 0x89, 0x90, 0xf5, 0x2f, 0xbb, 0x11, 0xc7, 0xc5, 0xc2, 0x45, 0xe4, 0x51, 0x41, 0x0e, 0xdb, 0xa3, 0x4a, 0xcf, 0x0a, 0x2f, 0xac, 0x88, 310 | 0x8a, 0xb8, 0x50, 0x69, 0xfc, 0x95, 0xeb, 0xf0, 0x69, 0xe1, 0x92, 0x20, 0xc7, 0x69, 0x79, 0xf2, 0xc6, 0xd4, 0x1b, 0x17, 0x11, 0xab, 0x4f, 0x73, 0x5e, 0x96, 0xcb, 0x1f, 0x95, 0x6c, 0xbc, 0xc4, 311 | 0x89, 0xf0, 0xf2, 0x08, 0x5b, 0xa7, 0x75, 0xfa, 0xef, 0xc0, 0xf0, 0x25, 0xa5, 0x2b, 0xad, 0x76, 0x8c, 0xec, 0x7a, 0xef, 0x6b, 0x4b, 0x1a, 0x52, 0xb4, 0xac, 0xbe, 0x69, 0x16, 0x32, 0x3a, 0xc5, 312 | } 313 | 314 | var SignatureW256 = []byte{ 315 | 0x59, 0x36, 0x5d, 0xc9, 0xbd, 0x11, 0x9b, 0xdb, 0x98, 0x45, 0x0c, 0xae, 0xa4, 0xd0, 0x70, 0xf0, 0x16, 0xee, 0x74, 0xcf, 0x43, 0x06, 0x56, 0x98, 0xf9, 0x66, 0x4f, 0x0a, 0xa1, 0x81, 0x36, 0x20, 316 | 0xb2, 0x60, 0x76, 0x36, 0x70, 0x7d, 0x81, 0x09, 0x44, 0x00, 0xcf, 0xd6, 0xda, 0xe2, 0xfc, 0x5a, 0xb0, 0xe8, 0x91, 0x44, 0x05, 0xc3, 0x3d, 0xc6, 0xae, 0x36, 0xee, 0x6d, 0xb9, 0xea, 0xaa, 0xdb, 317 | 0xb8, 0xac, 0x76, 0xcc, 0xc3, 0xf1, 0xec, 0x35, 0x78, 0x11, 0x97, 0x81, 0xaa, 0x25, 0x5a, 0x2d, 0x63, 0xb2, 0x90, 0x3d, 0x71, 0x8a, 0xf7, 0xe2, 0xde, 0xec, 0xb9, 0x29, 0x6d, 0xba, 0xf2, 0x85, 318 | 0x00, 0xea, 0xfb, 0xe7, 0xf0, 0x7d, 0x24, 0xca, 0xdf, 0x3a, 0x5b, 0x75, 0xe4, 0xaa, 0xfb, 0x60, 0x4e, 0x03, 0xf0, 0xfe, 0xdb, 0x1c, 0xe5, 0x73, 0x94, 0xd7, 0xfb, 0x65, 0xc0, 0x15, 0x5c, 0x61, 319 | 0x0a, 0xbe, 0x33, 0x00, 0xa2, 0x26, 0x34, 0xb7, 0xf8, 0x57, 0x89, 0x30, 0x99, 0xb0, 0xf0, 0x68, 0xdd, 0xd3, 0xfe, 0x6c, 0x4e, 0xc2, 0x76, 0x21, 0xfe, 0x88, 0x95, 0xfa, 0xf9, 0x4a, 0xa8, 0xce, 320 | 0x5c, 0x92, 0xf1, 0xea, 0x21, 0x0a, 0xf3, 0xd3, 0x71, 0x7a, 0x17, 0xed, 0xe3, 0x14, 0x3e, 0x70, 0x58, 0xfd, 0xe1, 0x5e, 0x09, 0xfd, 0x52, 0xca, 0xe4, 0x61, 0x61, 0xd8, 0xbf, 0xfb, 0x55, 0x86, 321 | 0x88, 0xe1, 0xa3, 0xa1, 0x97, 0x8c, 0xbc, 0x49, 0x4b, 0x16, 0xc8, 0x26, 0x8b, 0x79, 0xfc, 0x82, 0x3c, 0x49, 0x39, 0x38, 0x3e, 0x3a, 0x7c, 0x84, 0x0e, 0x15, 0xb4, 0xe7, 0x9b, 0xfc, 0xbc, 0x5b, 322 | 0x9e, 0xed, 0x54, 0xeb, 0x5a, 0xe3, 0x1b, 0xd9, 0x40, 0x17, 0xf1, 0x00, 0x2c, 0xfd, 0xe2, 0xa2, 0xfe, 0xf0, 0x67, 0xca, 0xfe, 0x59, 0xf4, 0x8b, 0x4d, 0x7b, 0xf6, 0x39, 0xfc, 0xd6, 0xa7, 0x6d, 323 | 0x37, 0x98, 0x7f, 0x43, 0x2e, 0xd8, 0x6e, 0x2c, 0x7a, 0x06, 0x0f, 0x39, 0x06, 0x64, 0x63, 0x7e, 0x48, 0xcc, 0x45, 0xb1, 0x86, 0xd2, 0x6d, 0xf5, 0xf0, 0x73, 0xd5, 0x38, 0x4b, 0xa8, 0x6a, 0x3a, 324 | 0x8b, 0xe9, 0x1b, 0x2f, 0x6d, 0xe0, 0x7a, 0x0d, 0xfb, 0x08, 0xf3, 0x18, 0x92, 0xb3, 0x4f, 0x36, 0x29, 0x48, 0x57, 0x61, 0x74, 0x8b, 0x00, 0xf7, 0xe4, 0x66, 0xae, 0xde, 0xc2, 0x7a, 0xba, 0x77, 325 | 0xae, 0xfa, 0xc2, 0x1f, 0x85, 0xa2, 0xf3, 0x5e, 0x73, 0x4f, 0x98, 0xaa, 0xff, 0x55, 0xcd, 0x27, 0xfd, 0x90, 0x61, 0x1a, 0x57, 0x13, 0x51, 0x9b, 0x20, 0x3e, 0x3f, 0x8d, 0xa4, 0xae, 0x4c, 0xe4, 326 | 0x14, 0xa4, 0xa2, 0x44, 0xf3, 0xfc, 0x6c, 0x5d, 0xb7, 0x1a, 0xba, 0xbb, 0xe1, 0x93, 0xf9, 0x9d, 0x02, 0xc2, 0xb7, 0xf0, 0xb9, 0x27, 0x09, 0x15, 0xb4, 0x42, 0x77, 0x56, 0xb0, 0x02, 0x3e, 0x6d, 327 | 0x88, 0x7c, 0x3c, 0x0f, 0xb9, 0x90, 0x4c, 0xc7, 0xc6, 0xfd, 0x2e, 0x4a, 0x98, 0x50, 0xcb, 0xdc, 0xf7, 0x4c, 0xd6, 0x8e, 0xd5, 0xdf, 0x60, 0x4f, 0x8d, 0x1d, 0x62, 0xbd, 0x40, 0x20, 0xe7, 0x69, 328 | 0x09, 0xf0, 0x0e, 0x0c, 0xb5, 0xdf, 0x4e, 0x09, 0xd4, 0x8a, 0x02, 0x17, 0x28, 0x76, 0x94, 0x22, 0x53, 0xb9, 0xc8, 0x12, 0x63, 0x46, 0xce, 0x61, 0xcc, 0x00, 0x2f, 0x14, 0x18, 0x59, 0xad, 0x20, 329 | 0xd9, 0x50, 0x32, 0x51, 0x70, 0x9f, 0xeb, 0x46, 0x31, 0x04, 0x97, 0x23, 0x51, 0x55, 0x4e, 0xfd, 0x68, 0xb2, 0x03, 0xfb, 0x05, 0xd4, 0x81, 0x1d, 0x8b, 0xfc, 0x82, 0x39, 0x19, 0x1b, 0x1f, 0xe3, 330 | 0xb1, 0x9e, 0x7d, 0xb1, 0x5f, 0xd2, 0x2f, 0x8a, 0x9f, 0xee, 0x12, 0x24, 0x64, 0x0b, 0x0d, 0xa4, 0xd3, 0x34, 0x0c, 0xd2, 0x28, 0x06, 0xe5, 0x9e, 0xe7, 0xcf, 0x70, 0x07, 0xe1, 0x06, 0x06, 0xe2, 331 | 0x52, 0x5c, 0xa4, 0x46, 0x85, 0x6e, 0x66, 0x27, 0xc3, 0x1f, 0xe1, 0xd3, 0xa8, 0xc0, 0x9d, 0x0f, 0x29, 0xed, 0xb7, 0xae, 0x16, 0xd1, 0xd6, 0x96, 0xc4, 0x3e, 0x02, 0xbd, 0x19, 0x16, 0xd8, 0x0f, 332 | 0x32, 0xbf, 0x6c, 0x16, 0x54, 0xa1, 0x4b, 0x39, 0xb4, 0xbd, 0xc3, 0x9e, 0xec, 0x48, 0xb9, 0x42, 0x52, 0x8c, 0x15, 0x30, 0xed, 0x24, 0x52, 0xdf, 0x75, 0xb2, 0x43, 0xa0, 0x47, 0xbd, 0x88, 0x5f, 333 | 0x78, 0x70, 0x8d, 0xba, 0xde, 0x0d, 0xb2, 0x0b, 0x02, 0x3a, 0xc6, 0x26, 0x6e, 0x35, 0x10, 0x6e, 0x7e, 0xa2, 0x4c, 0xec, 0xb1, 0x3e, 0x3f, 0x4e, 0x67, 0x4b, 0xb7, 0x38, 0x58, 0x60, 0xb4, 0xdb, 334 | 0x3d, 0xaf, 0x69, 0x08, 0x0b, 0x10, 0x1d, 0xc4, 0xad, 0x4f, 0xae, 0xc2, 0xcc, 0x63, 0x42, 0x96, 0xd8, 0x0b, 0x7d, 0xbe, 0xd4, 0xb0, 0xd5, 0x2e, 0x04, 0x2e, 0x24, 0x8f, 0x73, 0x01, 0x86, 0xc3, 335 | 0x2d, 0xa9, 0x7b, 0xe7, 0xc5, 0x11, 0xea, 0x3e, 0x33, 0xac, 0xb2, 0x35, 0x04, 0x64, 0x89, 0x90, 0xa9, 0xde, 0x0f, 0xf0, 0x24, 0x85, 0x26, 0xa8, 0x5b, 0x4f, 0xda, 0xca, 0xa8, 0x41, 0x52, 0x8d, 336 | 0x98, 0xe9, 0x59, 0xbc, 0xfa, 0x07, 0x68, 0x70, 0x70, 0xd4, 0x1d, 0xa9, 0x6a, 0xc7, 0x16, 0x87, 0xf0, 0x2d, 0xb2, 0x2a, 0x89, 0x68, 0x4e, 0x22, 0xbc, 0xbf, 0x15, 0xbf, 0x32, 0xd4, 0xc1, 0xa6, 337 | 0xcd, 0x3c, 0x8f, 0x8c, 0xb2, 0x38, 0x80, 0xbc, 0xa1, 0xa0, 0xcf, 0x2c, 0x3d, 0xaf, 0x94, 0xf1, 0x68, 0x85, 0x93, 0x9e, 0x87, 0x10, 0xd4, 0xc6, 0x02, 0x46, 0xe2, 0x5f, 0x77, 0xcf, 0x74, 0x0e, 338 | 0xc5, 0x1d, 0x44, 0x8f, 0x7a, 0xdf, 0xf0, 0x5a, 0x88, 0x42, 0xdc, 0xa6, 0xb8, 0xf7, 0x82, 0x60, 0xc7, 0xf6, 0x2e, 0x33, 0x38, 0x50, 0xf4, 0xf0, 0x44, 0x66, 0x31, 0xbe, 0xd6, 0xd6, 0x77, 0x1d, 339 | 0xe8, 0x68, 0x60, 0x28, 0x79, 0x6d, 0xe0, 0x28, 0x3a, 0x73, 0xa1, 0x04, 0x17, 0x1d, 0xba, 0x03, 0x0b, 0x90, 0x5c, 0xfd, 0xee, 0x14, 0x41, 0xe8, 0x4b, 0x45, 0xe1, 0xe6, 0x8a, 0x6b, 0x63, 0x7b, 340 | 0x5f, 0x2d, 0xe4, 0x20, 0xed, 0xd1, 0xd1, 0xbf, 0x78, 0x65, 0x4a, 0x55, 0x02, 0xe6, 0xf5, 0xc5, 0x2c, 0xde, 0x9d, 0x71, 0x12, 0xd0, 0x0f, 0x0b, 0xba, 0x04, 0x23, 0x65, 0x97, 0x9c, 0x17, 0xc0, 341 | 0xae, 0x42, 0x09, 0xdc, 0x44, 0xca, 0x66, 0xa8, 0xd6, 0x22, 0xd4, 0x8b, 0x95, 0xa8, 0xa4, 0xde, 0x85, 0x0c, 0xb7, 0xcd, 0x97, 0x96, 0xf9, 0x98, 0x21, 0x47, 0xf5, 0x4d, 0x9f, 0x69, 0x76, 0x93, 342 | 0xf8, 0x97, 0x6a, 0x34, 0xe3, 0x1e, 0x03, 0xe3, 0x30, 0xfd, 0x3c, 0x30, 0x29, 0xdb, 0x06, 0x44, 0x59, 0x89, 0x4a, 0x2b, 0xa2, 0x31, 0x9b, 0x8b, 0xf1, 0xbf, 0x66, 0x49, 0x85, 0xba, 0x90, 0x2f, 343 | 0x85, 0xec, 0xc8, 0xb4, 0x4b, 0xb9, 0x56, 0xdb, 0xe0, 0xc6, 0xb1, 0xa0, 0x88, 0x02, 0x21, 0x7c, 0x44, 0x7e, 0x17, 0x07, 0xf3, 0x92, 0x8a, 0x9b, 0x2e, 0xc8, 0x61, 0x44, 0xe9, 0xe5, 0x8f, 0x91, 344 | 0xa3, 0xdc, 0xc3, 0x30, 0x72, 0x32, 0x57, 0x5f, 0xed, 0xe7, 0xe6, 0xa8, 0xaa, 0xf1, 0xd6, 0x29, 0x0a, 0x62, 0x58, 0x4d, 0x70, 0xdb, 0x24, 0xb2, 0x77, 0xe9, 0xda, 0xa6, 0x2d, 0x30, 0x0b, 0xe7, 345 | 0x00, 0x34, 0x1e, 0xc5, 0xa0, 0x64, 0x58, 0x32, 0x49, 0x11, 0xbf, 0xa9, 0x25, 0x96, 0xa0, 0x6a, 0xea, 0xd6, 0x49, 0x2b, 0x58, 0x9c, 0xdf, 0xa8, 0x3b, 0xfc, 0x14, 0xb7, 0x56, 0xaa, 0xb6, 0x0e, 346 | 0xae, 0x7c, 0x89, 0xa7, 0x55, 0x14, 0xfb, 0x57, 0xae, 0x05, 0x65, 0xd1, 0x53, 0xd4, 0x38, 0xcf, 0x8a, 0x2c, 0xeb, 0x78, 0x18, 0x26, 0x0f, 0xf7, 0xe9, 0x21, 0x48, 0xcc, 0xe0, 0x9b, 0x46, 0xe1, 347 | 0x30, 0x78, 0x10, 0x9a, 0xcf, 0x41, 0xd9, 0x6c, 0x71, 0xb8, 0xb8, 0xc7, 0xe4, 0x15, 0xea, 0xd2, 0x32, 0x81, 0x37, 0xdc, 0xea, 0x92, 0x86, 0x54, 0xc7, 0x6d, 0xa5, 0x9e, 0xf8, 0xa2, 0xb0, 0x77, 348 | 0x9c, 0x65, 0xb0, 0xd7, 0x40, 0x21, 0x9d, 0xf0, 0xc1, 0x8c, 0x49, 0x37, 0xb8, 0xf8, 0x61, 0x4b, 0x0a, 0x06, 0x91, 0x73, 0x95, 0xf2, 0x41, 0x33, 0x82, 0x10, 0x68, 0xbc, 0x49, 0x88, 0x42, 0x15, 349 | } 350 | --------------------------------------------------------------------------------