erigon-pulse/patricia/patricia_test.go
ledgerwatch 75b52ac25e
[compress] Allow uncompressed words (#350)
* Intermediate work

* Allow uncompressed words

* Fix

* Fix tests

* Add NextUncompressed, remove g.word buffer

* Code simplifications, no goroutines when workers == 1

* Fix lint|

* Add test for MatchPrefix

* Work on patricia

* Beginning of new matcher

* Fuzz test for new longest match

* No skip

* Fixes

* Fixes

* More tracing

* Fixes

* Fixes

* Change back to old FindLongestMatches

* Switch to old match finder

* Print mismatches

* Fix

* After fix

* After fix

* After fix

* Print pointers

* Fixes and tests

* Print

* Print

* Print

* More tests

* Intermediate

* Fix

* Fix

* Prints

* Fix

* Fix

* Initialise matchStack

* Compute only once

* Compute only once

* Switch back

* Switch to old Find

* Introduce sais

* Switch patricia to sais

* Use sais in compressor

* Use sais in compressor

* Remove unused code

Co-authored-by: Alexey Sharp <alexeysharp@Alexeys-iMac.local>
Co-authored-by: Alex Sharp <alexsharp@Alexs-MacBook-Pro.local>
2022-03-09 17:25:22 +00:00

1645 lines
163 KiB
Go

/*
Copyright 2021 Erigon contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package patricia
import (
"encoding/hex"
"fmt"
"testing"
)
func TestInserts1(t *testing.T) {
n := &node{}
s := makestate(n)
d := s.transition(0x34, true)
fmt.Printf("1 tree:\n%sstate: %s\ndivergence %s\n\n", n, s, tostr(d))
s.diverge(d)
fmt.Printf("2 tree:\n%sstate: %s\n\n", n, s)
d = s.transition(0x56, true)
fmt.Printf("3 tree:\n%sstate: %s\ndivergence %s\n\n", n, s, tostr(d))
s.diverge(d)
fmt.Printf("4 tree:\n%sstate: %s\n\n", n, s)
d = s.transition(0xff, true)
fmt.Printf("5 tree:\n%sstate: %s\ndivergence %s\n\n", n, s, tostr(d))
s.diverge(d)
fmt.Printf("6 tree:\n%sstate: %s\n\n", n, s)
d = s.transition(0xcc, true)
fmt.Printf("7 tree:\n%sstate: %s\ndivergence %s\n\n", n, s, tostr(d))
s.diverge(d)
fmt.Printf("8 tree:\n%sstate: %s\n\n", n, s)
s.insert(nil)
s = makestate(n)
d = s.transition(0x34, true)
fmt.Printf("9 tree:\n%sstate: %s\ndivergence %s\n\n", n, s, tostr(d))
d = s.transition(0x66, true)
fmt.Printf("10 tree:\n%sstate: %s\ndivergence %s\n\n", n, s, tostr(d))
s.diverge(d)
fmt.Printf("11 tree:\n%sstate: %s\n\n", n, s)
n.insert([]byte{0xff, 0xff, 0xff, 0xff, 0xff}, []byte{0x01})
fmt.Printf("12 tree:\n%s\n", n)
n.insert([]byte{0xff, 0xff, 0xff, 0xff, 0x0f}, []byte{0x02})
fmt.Printf("13 tree:\n%s\n", n)
n.insert([]byte{0xff, 0xff, 0xff, 0xff, 0xff}, []byte{0x03})
fmt.Printf("14 tree:\n%s\n", n)
vs, ok := n.get([]byte{0xff, 0xff, 0xff, 0xff, 0x0f})
fmt.Printf("15 vs = %v, ok = %t\n", vs, ok)
vs, ok = n.get([]byte{0xff, 0xff, 0xff, 0xff, 0xff})
fmt.Printf("16 vs = %v, ok = %t\n", vs, ok)
vs, ok = n.get([]byte{0xff, 0xff, 0xff, 0xff, 0xff, 0x56})
fmt.Printf("17 vs = %v, ok = %t\n", vs, ok)
vs, ok = n.get([]byte{0x34, 0x56, 0xff, 0xcc})
fmt.Printf("18 vs = %v, ok = %t\n", vs, ok)
vs, ok = n.get([]byte{})
fmt.Printf("19 vs = %v, ok = %t\n", vs, ok)
}
func TestInserts2(t *testing.T) {
var n node
n.insert([]byte{0xff}, []byte{0x03, 0x03, 0x03, 0x1a, 0xed, 0xed})
n.insert([]byte{0xed}, []byte{})
fmt.Printf("tree:\n%s", &n)
vs, ok := n.get([]byte{0xff})
fmt.Printf("vs = %v, ok = %t\n", vs, ok)
vs, ok = n.get([]byte{0xed})
fmt.Printf("vs = %v, ok = %t\n", vs, ok)
}
func TestFindMatches1(t *testing.T) {
var pt PatriciaTree
pt.Insert([]byte("wolf"), []byte{1})
pt.Insert([]byte("winter"), []byte{2})
pt.Insert([]byte("wolfs"), []byte{3})
fmt.Printf("n\n%s", &pt.root)
mf := NewMatchFinder2(&pt)
data := []byte("Who lives here in winter, wolfs")
matches := mf.FindLongestMatches(data)
for _, m := range matches {
fmt.Printf("%+v, match [%s]\n", m, data[m.Start:m.End])
}
if len(matches) != 2 {
t.Errorf("expected matches: %d, got %d", 2, len(matches))
}
}
func TestFindMatches2(t *testing.T) {
var pt PatriciaTree
pt.Insert([]byte("wolf"), []byte{1})
pt.Insert([]byte("winter"), []byte{2})
pt.Insert([]byte("wolfs?"), []byte{3})
fmt.Printf("n\n%s", &pt.root)
mf2 := NewMatchFinder2(&pt)
data := []byte("Who lives here in winter, wolfs?")
matches := mf2.FindLongestMatches(data)
for _, m := range matches {
fmt.Printf("%+v, match: [%s]\n", m, data[m.Start:m.End])
}
if len(matches) != 2 {
t.Errorf("expected matches: %d, got %d", 2, len(matches))
}
}
func decodeHex(in string) []byte {
payload, err := hex.DecodeString(in)
if err != nil {
panic(err)
}
return payload
}
func TestFindMatches3(t *testing.T) {
var pt PatriciaTree
v := []byte{1}
pt.Insert(decodeHex("00000000000000000000000000000000000000"), v)
pt.Insert(decodeHex("000000000000000000000000000000000000"), v)
pt.Insert(decodeHex("0000000000000000000000000000000000"), v)
pt.Insert(decodeHex("00000000000000000000000000000000"), v)
pt.Insert(decodeHex("000000000000000000000000000000"), v)
pt.Insert(decodeHex("0000000000000000000000000000"), v)
pt.Insert(decodeHex("0100000000000000000000003b30000001000003"), v)
pt.Insert(decodeHex("0000000000000000003b30000001000003000100"), v)
pt.Insert(decodeHex("000000000000000000003b300000010000030001"), v)
pt.Insert(decodeHex("00000000000000000000003b3000000100000300"), v)
pt.Insert(decodeHex("00000000000000000000000000"), v)
pt.Insert(decodeHex("00000000000000003b30000001000003000100"), v)
pt.Insert(decodeHex("000000000000000000000000"), v)
pt.Insert(decodeHex("000000000000003b30000001000003000100"), v)
pt.Insert(decodeHex("0000000000003b30000001000003000100"), v)
pt.Insert(decodeHex("00000000003b30000001000003000100"), v)
pt.Insert(decodeHex("000000003b30000001000003000100"), v)
pt.Insert(decodeHex("0000003b30000001000003000100"), v)
pt.Insert(decodeHex("00003b30000001000003000100"), v)
pt.Insert(decodeHex("0100000000000000"), v)
pt.Insert(decodeHex("003b30000001000003000100"), v)
pt.Insert(decodeHex("3b30000001000003000100"), v)
pt.Insert(decodeHex("00000000000000003b3000000100000300010000"), v)
pt.Insert(decodeHex("0100000000000000000000003a30000001000000"), v)
pt.Insert(decodeHex("000000003a300000010000000000010010000000"), v)
pt.Insert(decodeHex("00000000003a3000000100000000000100100000"), v)
pt.Insert(decodeHex("0000000000003a30000001000000000001001000"), v)
pt.Insert(decodeHex("000000000000003a300000010000000000010010"), v)
pt.Insert(decodeHex("00000000000000003a3000000100000000000100"), v)
pt.Insert(decodeHex("0000000000000000003a30000001000000000001"), v)
pt.Insert(decodeHex("000000000000000000003a300000010000000000"), v)
pt.Insert(decodeHex("00000000000000000000003a3000000100000000"), v)
mf2 := NewMatchFinder2(&pt)
data := decodeHex("0100000000000000000000003a30000001000000000001001000000044004500")
matches := mf2.FindLongestMatches(data)
for _, m := range matches {
fmt.Printf("%+v, match: [%x]\n", m, data[m.Start:m.End])
}
if len(matches) != 9 {
t.Errorf("expected matches: %d, got %d", 9, len(matches))
}
}
func TestFindMatches4(t *testing.T) {
var pt PatriciaTree
v := []byte{1}
pt.Insert(decodeHex("00000000000000000000000000000000000000"), v)
mf2 := NewMatchFinder2(&pt)
data := decodeHex("01")
matches := mf2.FindLongestMatches(data)
for _, m := range matches {
fmt.Printf("%+v, match: [%x]\n", m, data[m.Start:m.End])
}
if len(matches) != 0 {
t.Errorf("expected matches: %d, got %d", 0, len(matches))
}
}
func TestFindMatches5(t *testing.T) {
var pt PatriciaTree
v := []byte{1}
pt.Insert(decodeHex("0434e37673a8e0aaa536828f0d5b0ddba12fece1"), v)
pt.Insert(decodeHex("e28e72fcf78647adce1f1252f240bbfaebd63bcc"), v)
pt.Insert(decodeHex("34e28e72fcf78647adce1f1252f240bbfaebd63b"), v)
pt.Insert(decodeHex("0434e28e72fcf78647adce1f1252f240bbfaebd6"), v)
pt.Insert(decodeHex("090bdc64a7e3632cde8f4689f47acfc0760e35bce43af50d4b1f5973463bde62"), v)
pt.Insert(decodeHex("00090bdc64a7e3632cde8f4689f47acfc0760e35bce43af50d4b1f5973463bde"), v)
pt.Insert(decodeHex("0000000000"), v)
pt.Insert(decodeHex("00000000000000000000"), v)
pt.Insert(decodeHex("000000000000000000000000000000"), v)
pt.Insert(decodeHex("0000000000000000000000000000"), v)
pt.Insert(decodeHex("000000000000000000"), v)
pt.Insert(decodeHex("0000000000000000"), v)
pt.Insert(decodeHex("00000000000000000000000000"), v)
pt.Insert(decodeHex("000000000000000000000000"), v)
pt.Insert(decodeHex("f47acfc0760e35bce43af50d4b1f5973463bde62"), v)
pt.Insert(decodeHex("e3632cde8f4689f47acfc0760e35bce43af50d4b"), v)
pt.Insert(decodeHex("de8f4689f47acfc0760e35bce43af50d4b1f5973"), v)
pt.Insert(decodeHex("dc64a7e3632cde8f4689f47acfc0760e35bce43a"), v)
pt.Insert(decodeHex("a7e3632cde8f4689f47acfc0760e35bce43af50d"), v)
pt.Insert(decodeHex("8f4689f47acfc0760e35bce43af50d4b1f597346"), v)
pt.Insert(decodeHex("89f47acfc0760e35bce43af50d4b1f5973463bde"), v)
pt.Insert(decodeHex("64a7e3632cde8f4689f47acfc0760e35bce43af5"), v)
pt.Insert(decodeHex("632cde8f4689f47acfc0760e35bce43af50d4b1f"), v)
pt.Insert(decodeHex("4689f47acfc0760e35bce43af50d4b1f5973463b"), v)
pt.Insert(decodeHex("2cde8f4689f47acfc0760e35bce43af50d4b1f59"), v)
pt.Insert(decodeHex("0bdc64a7e3632cde8f4689f47acfc0760e35bce4"), v)
pt.Insert(decodeHex("7acfc0760e35bce43af50d4b1f5973463bde62"), v)
pt.Insert(decodeHex("0000000000000000000000"), v)
pt.Insert(decodeHex("cfc0760e35bce43af50d4b1f5973463bde62"), v)
pt.Insert(decodeHex("00000000000000000000000000000000"), v)
pt.Insert(decodeHex("c0760e35bce43af50d4b1f5973463bde62"), v)
pt.Insert(decodeHex("0000000000000000000000000000000000000000"), v)
pt.Insert(decodeHex("00000000000000000000000000000000000000"), v)
pt.Insert(decodeHex("760e35bce43af50d4b1f5973463bde62"), v)
pt.Insert(decodeHex("000000000000000000000000000000000000"), v)
pt.Insert(decodeHex("0e35bce43af50d4b1f5973463bde62"), v)
pt.Insert(decodeHex("0000000000000000000000000000000000"), v)
pt.Insert(decodeHex("35bce43af50d4b1f5973463bde62"), v)
pt.Insert(decodeHex("bce43af50d4b1f5973463bde62"), v)
pt.Insert(decodeHex("e43af50d4b1f5973463bde62"), v)
pt.Insert(decodeHex("1090bdc64a7e3632cde8f4689f47acfc0760e35bce43af50d4b1f5973463bde6"), v)
pt.Insert(decodeHex("3af50d4b1f5973463bde62"), v)
pt.Insert(decodeHex("f50d4b1f5973463bde62"), v)
pt.Insert(decodeHex("fc0fd417d3a29f2962b8badecbf4d3036e28fcd7dcf22db126f130193790f769"), v)
pt.Insert(decodeHex("ecbb6a595f07cbc2fc0fd417d3a29f2962b8badecbf4d3036e28fcd7dcf22db1"), v)
pt.Insert(decodeHex("df415bb7ae2363ecbb6a595f07cbc2fc0fd417d3a29f2962b8badecbf4d3036e"), v)
pt.Insert(decodeHex("d417d3a29f2962b8badecbf4d3036e28fcd7dcf22db126f130193790f7698ee4"), v)
pt.Insert(decodeHex("cbc2fc0fd417d3a29f2962b8badecbf4d3036e28fcd7dcf22db126f130193790"), v)
pt.Insert(decodeHex("c2fc0fd417d3a29f2962b8badecbf4d3036e28fcd7dcf22db126f130193790f7"), v)
pt.Insert(decodeHex("bb6a595f07cbc2fc0fd417d3a29f2962b8badecbf4d3036e28fcd7dcf22db126"), v)
pt.Insert(decodeHex("b7ae2363ecbb6a595f07cbc2fc0fd417d3a29f2962b8badecbf4d3036e28fcd7"), v)
pt.Insert(decodeHex("ae2363ecbb6a595f07cbc2fc0fd417d3a29f2962b8badecbf4d3036e28fcd7dc"), v)
pt.Insert(decodeHex("6a595f07cbc2fc0fd417d3a29f2962b8badecbf4d3036e28fcd7dcf22db126f1"), v)
pt.Insert(decodeHex("63ecbb6a595f07cbc2fc0fd417d3a29f2962b8badecbf4d3036e28fcd7dcf22d"), v)
pt.Insert(decodeHex("5f07cbc2fc0fd417d3a29f2962b8badecbf4d3036e28fcd7dcf22db126f13019"), v)
pt.Insert(decodeHex("5bb7ae2363ecbb6a595f07cbc2fc0fd417d3a29f2962b8badecbf4d3036e28fc"), v)
pt.Insert(decodeHex("595f07cbc2fc0fd417d3a29f2962b8badecbf4d3036e28fcd7dcf22db126f130"), v)
pt.Insert(decodeHex("415bb7ae2363ecbb6a595f07cbc2fc0fd417d3a29f2962b8badecbf4d3036e28"), v)
pt.Insert(decodeHex("34df415bb7ae2363ecbb6a595f07cbc2fc0fd417d3a29f2962b8badecbf4d303"), v)
pt.Insert(decodeHex("2363ecbb6a595f07cbc2fc0fd417d3a29f2962b8badecbf4d3036e28fcd7dcf2"), v)
pt.Insert(decodeHex("0fd417d3a29f2962b8badecbf4d3036e28fcd7dcf22db126f130193790f7698e"), v)
pt.Insert(decodeHex("07cbc2fc0fd417d3a29f2962b8badecbf4d3036e28fcd7dcf22db126f1301937"), v)
pt.Insert(decodeHex("0434df415bb7ae2363ecbb6a595f07cbc2fc0fd417d3a29f2962b8badecbf4d3"), v)
pt.Insert(decodeHex("0d4b1f5973463bde62"), v)
pt.Insert(decodeHex("0000000000000000000000000000000000000000000000000000000000000000"), v)
pt.Insert(decodeHex("fc0fd417d37e04bc63768597761b6c198fd8bd0feded3970bcdafd3adaa9dce4"), v)
pt.Insert(decodeHex("ecbb6a595f07cbc2fc0fd417d37e04bc63768597761b6c198fd8bd0feded3970"), v)
pt.Insert(decodeHex("df415bb7ae2363ecbb6a595f07cbc2fc0fd417d37e04bc63768597761b6c198f"), v)
pt.Insert(decodeHex("d417d37e04bc63768597761b6c198fd8bd0feded3970bcdafd3adaa9dce41b48"), v)
pt.Insert(decodeHex("d37e04bc63768597761b6c198fd8bd0feded3970bcdafd3adaa9dce41b48747f"), v)
pt.Insert(decodeHex("cbc2fc0fd417d37e04bc63768597761b6c198fd8bd0feded3970bcdafd3adaa9"), v)
pt.Insert(decodeHex("c2fc0fd417d37e04bc63768597761b6c198fd8bd0feded3970bcdafd3adaa9dc"), v)
pt.Insert(decodeHex("bb6a595f07cbc2fc0fd417d37e04bc63768597761b6c198fd8bd0feded3970bc"), v)
pt.Insert(decodeHex("b7ae2363ecbb6a595f07cbc2fc0fd417d37e04bc63768597761b6c198fd8bd0f"), v)
pt.Insert(decodeHex("ae2363ecbb6a595f07cbc2fc0fd417d37e04bc63768597761b6c198fd8bd0fed"), v)
pt.Insert(decodeHex("6a595f07cbc2fc0fd417d37e04bc63768597761b6c198fd8bd0feded3970bcda"), v)
pt.Insert(decodeHex("63ecbb6a595f07cbc2fc0fd417d37e04bc63768597761b6c198fd8bd0feded39"), v)
pt.Insert(decodeHex("5f07cbc2fc0fd417d37e04bc63768597761b6c198fd8bd0feded3970bcdafd3a"), v)
pt.Insert(decodeHex("5bb7ae2363ecbb6a595f07cbc2fc0fd417d37e04bc63768597761b6c198fd8bd"), v)
pt.Insert(decodeHex("595f07cbc2fc0fd417d37e04bc63768597761b6c198fd8bd0feded3970bcdafd"), v)
pt.Insert(decodeHex("415bb7ae2363ecbb6a595f07cbc2fc0fd417d37e04bc63768597761b6c198fd8"), v)
pt.Insert(decodeHex("34df415bb7ae2363ecbb6a595f07cbc2fc0fd417d37e04bc63768597761b6c19"), v)
pt.Insert(decodeHex("2363ecbb6a595f07cbc2fc0fd417d37e04bc63768597761b6c198fd8bd0feded"), v)
pt.Insert(decodeHex("17d37e04bc63768597761b6c198fd8bd0feded3970bcdafd3adaa9dce41b4874"), v)
pt.Insert(decodeHex("0fd417d37e04bc63768597761b6c198fd8bd0feded3970bcdafd3adaa9dce41b"), v)
pt.Insert(decodeHex("07cbc2fc0fd417d37e04bc63768597761b6c198fd8bd0feded3970bcdafd3ada"), v)
pt.Insert(decodeHex("0434df415bb7ae2363ecbb6a595f07cbc2fc0fd417d37e04bc63768597761b6c"), v)
pt.Insert(decodeHex("df415bb7ae2363ecbb6a595f07cbc2fc0fd417d3"), v)
pt.Insert(decodeHex("34df415bb7ae2363ecbb6a595f07cbc2fc0fd417"), v)
pt.Insert(decodeHex("0434df415bb7ae2363ecbb6a595f07cbc2fc0fd4"), v)
pt.Insert(decodeHex("4b1f5973463bde62"), v)
pt.Insert(decodeHex("415bb7ae2363ecbb6a595f07cbc2fc0fd417d3"), v)
pt.Insert(decodeHex("5bb7ae2363ecbb6a595f07cbc2fc0fd417d3"), v)
pt.Insert(decodeHex("f4689f47acfc0760e35bce43af50d4b1f5973463"), v)
pt.Insert(decodeHex("e8f4689f47acfc0760e35bce43af50d4b1f59734"), v)
pt.Insert(decodeHex("cde8f4689f47acfc0760e35bce43af50d4b1f597"), v)
pt.Insert(decodeHex("c64a7e3632cde8f4689f47acfc0760e35bce43af"), v)
pt.Insert(decodeHex("bdc64a7e3632cde8f4689f47acfc0760e35bce43"), v)
pt.Insert(decodeHex("9f47acfc0760e35bce43af50d4b1f5973463bde6"), v)
pt.Insert(decodeHex("90bdc64a7e3632cde8f4689f47acfc0760e35bce"), v)
pt.Insert(decodeHex("7e3632cde8f4689f47acfc0760e35bce43af50d4"), v)
pt.Insert(decodeHex("689f47acfc0760e35bce43af50d4b1f5973463bd"), v)
pt.Insert(decodeHex("4a7e3632cde8f4689f47acfc0760e35bce43af50"), v)
pt.Insert(decodeHex("3632cde8f4689f47acfc0760e35bce43af50d4b1"), v)
pt.Insert(decodeHex("32cde8f4689f47acfc0760e35bce43af50d4b1f5"), v)
pt.Insert(decodeHex("b7ae2363ecbb6a595f07cbc2fc0fd417d3"), v)
pt.Insert(decodeHex("47acfc0760e35bce43af50d4b1f5973463bde6"), v)
pt.Insert(decodeHex("ae2363ecbb6a595f07cbc2fc0fd417d3"), v)
pt.Insert(decodeHex("acfc0760e35bce43af50d4b1f5973463bde6"), v)
pt.Insert(decodeHex("2363ecbb6a595f07cbc2fc0fd417d3"), v)
pt.Insert(decodeHex("fc0760e35bce43af50d4b1f5973463bde6"), v)
pt.Insert(decodeHex("63ecbb6a595f07cbc2fc0fd417d3"), v)
pt.Insert(decodeHex("0000000000000000000000000000000000000001"), v)
pt.Insert(decodeHex("0760e35bce43af50d4b1f5973463bde6"), v)
pt.Insert(decodeHex("bc63768597761b6c198fd8bd0feded3970bcdafd"), v)
pt.Insert(decodeHex("97761b6c198fd8bd0feded3970bcdafd3adaa9dc"), v)
pt.Insert(decodeHex("8fd8bd0feded3970bcdafd3adaa9dce41b48747f"), v)
pt.Insert(decodeHex("8597761b6c198fd8bd0feded3970bcdafd3adaa9"), v)
pt.Insert(decodeHex("7e04bc63768597761b6c198fd8bd0feded3970bc"), v)
pt.Insert(decodeHex("768597761b6c198fd8bd0feded3970bcdafd3ada"), v)
pt.Insert(decodeHex("761b6c198fd8bd0feded3970bcdafd3adaa9dce4"), v)
pt.Insert(decodeHex("6c198fd8bd0feded3970bcdafd3adaa9dce41b48"), v)
pt.Insert(decodeHex("63768597761b6c198fd8bd0feded3970bcdafd3a"), v)
pt.Insert(decodeHex("1b6c198fd8bd0feded3970bcdafd3adaa9dce41b"), v)
pt.Insert(decodeHex("198fd8bd0feded3970bcdafd3adaa9dce41b4874"), v)
pt.Insert(decodeHex("04bc63768597761b6c198fd8bd0feded3970bcda"), v)
pt.Insert(decodeHex("00000000000000000000000000000000000001"), v)
pt.Insert(decodeHex("0000000000000000000000000000000000000000000000000000000000000002"), v)
pt.Insert(decodeHex("ecbb6a595f07cbc2fc0fd417d3"), v)
pt.Insert(decodeHex("60e35bce43af50d4b1f5973463bde6"), v)
pt.Insert(decodeHex("d8bd0feded3970bcdafd3adaa9dce41b48747f"), v)
pt.Insert(decodeHex("000000000000000000000000000000000001"), v)
pt.Insert(decodeHex("60e3997d5a409c25fe09d77351b6"), v)
pt.Insert(decodeHex("bd0feded3970bcdafd3adaa9dce41b48747f"), v)
mf2 := NewMatchFinder2(&pt)
data := decodeHex("9d7d9d7d082073e2920896915d0e0239a7e852d86b26e03a188bc5b947972aeec206d63b6744043493d38e72c5281e78f6b364eacac6fa907ecba1640000000000000000000000000000000000000000000000000000000007bfa482043493d38e72c5281e78f6b364eacac6fa907ecba1640000000000000000000000000000000000000000000000000000000000000011043493d38e72c5281e78f6b364eacac6fa907ecba1640000000000000000000000000000000000000000000000000000000000000002043493d38e72c5281e78f6b364eacac6fa907ecba164000000000000000000000000000000000000000000000000000000000000001e0820a516e4eeef0852f3c4ee0f11237e5e5127ed67a64e43a2f2ebef2d6bc26bb384082073404b8fb6bb42e5a0c9bb7d6253d9d72084bed3991df1efd25512e7f713e796043493d38e72c5281e78f6b364eacac6fa907ecba164000000000000000000000000000000000000000000000000000000000000001f043493d38e72c5281e78f6b364eacac6fa907ecba1640000000000000000000000000000000000000000000000000000000000000012082010db8a472df5096168436e756dbf37edce306a01f4fa7a889f7ad8195e1154a9043493d38e72c5281e78f6b364eacac6fa907ecba1640000000000000000000000000000000000000000000000000000000000000006")
matches := mf2.FindLongestMatches(data)
for _, m := range matches {
fmt.Printf("%+v, match: [%x]\n", m, data[m.Start:m.End])
}
if len(matches) != 88 {
t.Errorf("expected matches: %d, got %d", 88, len(matches))
}
}
func TestFindMatches6(t *testing.T) {
var pt PatriciaTree
v := []byte{1}
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("73ffffffffffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffff16"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffff16"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffff16"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff16"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffff16"), v)
pt.Insert(decodeHex("600160a060020a03"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffff16815260200191505060405180910390a1"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffff1681"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffff168156"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff1681565b"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffff1681565b60"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffffff168152602001908152602001"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffff16815260200190815260200160"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffff1681526020019081526020016000"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffff168152602001908152602001600020"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff16815260200190815260200160002060"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffff1681526020019081526020016000206000"), v)
pt.Insert(decodeHex("73ffffffffffffffffffffffffffffffffffffffff1681526020019081526020"), v)
pt.Insert(decodeHex("81526020019081526020016000206000"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffff168152"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff16815260"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffff1681526020"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffff168152602001"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffff1681565b60"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffff168152602001"), v)
pt.Insert(decodeHex("526020019081526020016000206000"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff1682"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffff1681565b60"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffff168152602001"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffff1682"), v)
pt.Insert(decodeHex("6020019081526020016000206000"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffff1681565b60"), v)
pt.Insert(decodeHex("ffffffffffffffffffffff168152602001"), v)
pt.Insert(decodeHex("8152602001908152602001600020600050"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffff1682"), v)
pt.Insert(decodeHex("ffffffffffffffff168152602001"), v)
pt.Insert(decodeHex("80806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f16801561"), v)
pt.Insert(decodeHex("60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f16"), v)
pt.Insert(decodeHex("5b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f"), v)
pt.Insert(decodeHex("5180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f168015"), v)
pt.Insert(decodeHex("405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680"), v)
pt.Insert(decodeHex("20019081526020016000206000"), v)
pt.Insert(decodeHex("ffffffffffffffffffffff1681565b60"), v)
pt.Insert(decodeHex("ffffffffffffffffffff168152602001"), v)
pt.Insert(decodeHex("52602001908152602001600020600050"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffff1682"), v)
pt.Insert(decodeHex("ffffffffffffffff1681565b60"), v)
pt.Insert(decodeHex("ffffffffffffff168152602001"), v)
pt.Insert(decodeHex("ffffffffffffffffffff1681565b60"), v)
pt.Insert(decodeHex("019081526020016000206000"), v)
pt.Insert(decodeHex("ffffffffffffffffff168152602001"), v)
pt.Insert(decodeHex("1681526020019081526020016000206000"), v)
pt.Insert(decodeHex("602001908152602001600020600050"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffff1682"), v)
pt.Insert(decodeHex("ffffffffffffff1681565b60"), v)
pt.Insert(decodeHex("ffffffffffffffffff1681565b60"), v)
pt.Insert(decodeHex("ffffffffffff168152602001"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffff168152602001908152602001600020600050"), v)
pt.Insert(decodeHex("9081526020016000206000"), v)
pt.Insert(decodeHex("5050604051849350600080"), v)
pt.Insert(decodeHex("2001908152602001600020600050"), v)
pt.Insert(decodeHex("505060405180910390f35b"), v)
pt.Insert(decodeHex("ffffffffffffffffffffff1682"), v)
pt.Insert(decodeHex("6000506000600060005054815260200190815260200160002060006101000a81"), v)
pt.Insert(decodeHex("00506000600060005054815260200190815260200160002060006101000a8154"), v)
pt.Insert(decodeHex("ffffffffffff1681565b60"), v)
pt.Insert(decodeHex("ffffff16815260200191505060405180910390a1"), v)
pt.Insert(decodeHex("ffffffffff168152602001"), v)
pt.Insert(decodeHex("8281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100a4578082"), v)
pt.Insert(decodeHex("81038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100a457808203"), v)
pt.Insert(decodeHex("6020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100a4"), v)
pt.Insert(decodeHex("60005060003373ffffffffffffffffffffffffffffffffffffffff1681526020"), v)
pt.Insert(decodeHex("60003373ffffffffffffffffffffffffffffffffffffffff1681526020019081"), v)
pt.Insert(decodeHex("5060003373ffffffffffffffffffffffffffffffffffffffff16815260200190"), v)
pt.Insert(decodeHex("3373ffffffffffffffffffffffffffffffffffffffff16815260200190815260"), v)
pt.Insert(decodeHex("20018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100a457"), v)
pt.Insert(decodeHex("038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100a45780820380"), v)
pt.Insert(decodeHex("018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100a45780"), v)
pt.Insert(decodeHex("005060003373ffffffffffffffffffffffffffffffffffffffff168152602001"), v)
pt.Insert(decodeHex("003373ffffffffffffffffffffffffffffffffffffffff168152602001908152"), v)
pt.Insert(decodeHex("01908152602001600020600050"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffff16815260200190"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffff1681526020019081"), v)
pt.Insert(decodeHex("ffffffffffffffffffffff168152602001908152"), v)
pt.Insert(decodeHex("ffffffffffffffffffff16815260200190815260"), v)
pt.Insert(decodeHex("ffffffffffffffffff1681526020019081526020"), v)
pt.Insert(decodeHex("ffffffffffffffff168152602001908152602001"), v)
pt.Insert(decodeHex("ffffffffffffff16815260200190815260200160"), v)
pt.Insert(decodeHex("ffffffffffff1681526020019081526020016000"), v)
pt.Insert(decodeHex("ffffffffff168152602001908152602001600020"), v)
pt.Insert(decodeHex("ffffffff16815260200190815260200160002060"), v)
pt.Insert(decodeHex("ffffff1681526020019081526020016000206000"), v)
pt.Insert(decodeHex("81526020016000206000"), v)
pt.Insert(decodeHex("50604051849350600080"), v)
pt.Insert(decodeHex("ffffffffffffffffffff1682"), v)
pt.Insert(decodeHex("5060405180910390f35b"), v)
pt.Insert(decodeHex("168152602001908152602001600020600050"), v)
pt.Insert(decodeHex("ffff16815260200191505060405180910390a1"), v)
pt.Insert(decodeHex("67ffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffff1682"), v)
pt.Insert(decodeHex("ffff1681526020019081526020016000206000"), v)
pt.Insert(decodeHex("6040518082815260200191505060405180910390"), v)
pt.Insert(decodeHex("ffffffffff1681565b60"), v)
pt.Insert(decodeHex("908152602001600020600050"), v)
pt.Insert(decodeHex("8281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390"), v)
pt.Insert(decodeHex("81038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f3"), v)
pt.Insert(decodeHex("80806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f150905001925050506040"), v)
pt.Insert(decodeHex("806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f15090500192505050604051"), v)
pt.Insert(decodeHex("60405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f150905001925050"), v)
pt.Insert(decodeHex("6020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180"), v)
pt.Insert(decodeHex("5b60405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250"), v)
pt.Insert(decodeHex("5180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060"), v)
pt.Insert(decodeHex("405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f15090500192505050"), v)
pt.Insert(decodeHex("20018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f150905001925050506040518091"), v)
pt.Insert(decodeHex("038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b"), v)
pt.Insert(decodeHex("018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f15090500192505050604051809103"), v)
pt.Insert(decodeHex("ffffffff168152602001"), v)
pt.Insert(decodeHex("5b60405180828152602001915050604051809103"), v)
pt.Insert(decodeHex("565b604051808281526020019150506040518091"), v)
pt.Insert(decodeHex("518082815260200191505060405180910390f35b"), v)
pt.Insert(decodeHex("40518082815260200191505060405180910390f3"), v)
pt.Insert(decodeHex("ff16815260200191505060405180910390a1"), v)
pt.Insert(decodeHex("ffffffffffffffffff1682"), v)
pt.Insert(decodeHex("808281526102cb94909290828280156100d757"), v)
pt.Insert(decodeHex("ff1681526020019081526020016000206000"), v)
pt.Insert(decodeHex("526020016000206000"), v)
pt.Insert(decodeHex("f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f15090509081019060"), v)
pt.Insert(decodeHex("a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff191681556001810180548482559084528284209192849261"), v)
pt.Insert(decodeHex("90f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190"), v)
pt.Insert(decodeHex("8252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60"), v)
pt.Insert(decodeHex("60a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff1916815560018101805484825590845282842091928492"), v)
pt.Insert(decodeHex("602081815260408083206002548452825282208354815467ffffffffffffffff191667ffffffffffffffff919091161781556001848101805491830180548382"), v)
pt.Insert(decodeHex("600435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff191681556001810180548482559084528284"), v)
pt.Insert(decodeHex("600160a060020a0333168252602082815260408084208585528252928390206001018054601f810183900490920260a090810190945260808281529293909190"), v)
pt.Insert(decodeHex("600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff191681556001810180548482559084528284209192"), v)
pt.Insert(decodeHex("60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("52838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b6040"), v)
pt.Insert(decodeHex("52600160a060020a0333168252602082815260408084208585528252928390206001018054601f810183900490920260a0908101909452608082815292939091"), v)
pt.Insert(decodeHex("526000828152604090208054829081101561000257506000908152602090200154905081565b610315600435600160a060020a03331660009081526020818152"), v)
pt.Insert(decodeHex("35600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff1916815560018101805484825590845282842091"), v)
pt.Insert(decodeHex("2081815260408083206002548452825282208354815467ffffffffffffffff191667ffffffffffffffff91909116178155600184810180549183018054838255"), v)
pt.Insert(decodeHex("0435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff19168155600181018054848255908452828420"), v)
pt.Insert(decodeHex("0160a060020a0333168252602082815260408084208585528252928390206001018054601f810183900490920260a09081019094526080828152929390919082"), v)
pt.Insert(decodeHex("0160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff19168155600181018054848255908452828420919284"), v)
pt.Insert(decodeHex("009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16"), v)
pt.Insert(decodeHex("60405180910390f35b"), v)
pt.Insert(decodeHex("8082815260200191505060405180910390f35b"), v)
pt.Insert(decodeHex("ffffffffffffff1682"), v)
pt.Insert(decodeHex("600160a060020a033316600090815261"), v)
pt.Insert(decodeHex("8152602001600020600050"), v)
pt.Insert(decodeHex("90600052602060002090"), v)
pt.Insert(decodeHex("928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101859004909402850160405260"), v)
pt.Insert(decodeHex("836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de5782"), v)
pt.Insert(decodeHex("822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101859004909402850160405260608481526100"), v)
pt.Insert(decodeHex("820380516001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080"), v)
pt.Insert(decodeHex("818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101859004909402850160"), v)
pt.Insert(decodeHex("8152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f810185900490940285016040"), v)
pt.Insert(decodeHex("8152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f810185900490940285016040526060"), v)
pt.Insert(decodeHex("815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020"), v)
pt.Insert(decodeHex("80822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590049094028501604052606084815261"), v)
pt.Insert(decodeHex("80820380516001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c0908490"), v)
pt.Insert(decodeHex("80519060200190808383829060006004602084601f0104600302600f01f15090"), v)
pt.Insert(decodeHex("80516001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c0908490801561"), v)
pt.Insert(decodeHex("6101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de578201919060"), v)
pt.Insert(decodeHex("604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101859004909402850160405260608481"), v)
pt.Insert(decodeHex("60243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590"), v)
pt.Insert(decodeHex("6020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f810185900490940285"), v)
pt.Insert(decodeHex("6020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de578201"), v)
pt.Insert(decodeHex("60200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b"), v)
pt.Insert(decodeHex("60043560243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81"), v)
pt.Insert(decodeHex("6001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de"), v)
pt.Insert(decodeHex("60006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590049094"), v)
pt.Insert(decodeHex("5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c09084"), v)
pt.Insert(decodeHex("52928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590049094028501604052"), v)
pt.Insert(decodeHex("52604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590049094028501604052606084"), v)
pt.Insert(decodeHex("5260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de5782019190600052602060002090"), v)
pt.Insert(decodeHex("516001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103"), v)
pt.Insert(decodeHex("4080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f810185900490940285016040526060848152"), v)
pt.Insert(decodeHex("3560243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f810185"), v)
pt.Insert(decodeHex("3560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f810185900490"), v)
pt.Insert(decodeHex("243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101859004"), v)
pt.Insert(decodeHex("2090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590049094028501604052606084815261006c"), v)
pt.Insert(decodeHex("20818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590049094028501"), v)
pt.Insert(decodeHex("20036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191"), v)
pt.Insert(decodeHex("200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b81"), v)
pt.Insert(decodeHex("1916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de5782019190600052602060"), v)
pt.Insert(decodeHex("16815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de578201919060005260206000"), v)
pt.Insert(decodeHex("0a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de578201919060005260"), v)
pt.Insert(decodeHex("043560243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101"), v)
pt.Insert(decodeHex("0380516001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c09084908015"), v)
pt.Insert(decodeHex("036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de5782019190"), v)
pt.Insert(decodeHex("031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020"), v)
pt.Insert(decodeHex("0191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b8154"), v)
pt.Insert(decodeHex("01836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57"), v)
pt.Insert(decodeHex("01000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000"), v)
pt.Insert(decodeHex("006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101859004909402"), v)
pt.Insert(decodeHex("000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de5782019190600052"), v)
pt.Insert(decodeHex("ffffffff1681565b60"), v)
pt.Insert(decodeHex("60006005600a4306101561032f57600190506103"), v)
pt.Insert(decodeHex("600160a060020a033316600090815260"), v)
pt.Insert(decodeHex("ffffff168152602001"), v)
pt.Insert(decodeHex("82815260200191505060405180910390f35b"), v)
pt.Insert(decodeHex("9060006004602084601f0104600302600f01f150"), v)
pt.Insert(decodeHex("8383829060006004602084601f0104600302600f"), v)
pt.Insert(decodeHex("83829060006004602084601f0104600302600f01"), v)
pt.Insert(decodeHex("829060006004602084601f0104600302600f01f1"), v)
pt.Insert(decodeHex("808383829060006004602084601f010460030260"), v)
pt.Insert(decodeHex("60006004602084601f0104600302600f01f15090"), v)
pt.Insert(decodeHex("815260200191505060405180910390f35b"), v)
pt.Insert(decodeHex("0000000000000000000000000000"), v)
pt.Insert(decodeHex("8352600160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190955280855292939290918301828280"), v)
pt.Insert(decodeHex("83526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184019095528085529293929091"), v)
pt.Insert(decodeHex("81810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184019095528085529293"), v)
pt.Insert(decodeHex("810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401909552808552929392"), v)
pt.Insert(decodeHex("808352600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401909552808552929392909183018282"), v)
pt.Insert(decodeHex("8051602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190955280"), v)
pt.Insert(decodeHex("60408051602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184019095"), v)
pt.Insert(decodeHex("602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401909552808552"), v)
pt.Insert(decodeHex("60043560408051602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184"), v)
pt.Insert(decodeHex("600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401909552808552929392909183018282801561"), v)
pt.Insert(decodeHex("6000808352600160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190955280855292939290918301"), v)
pt.Insert(decodeHex("6000526020600020"), v)
pt.Insert(decodeHex("52600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184019095528085529293929091830182828015"), v)
pt.Insert(decodeHex("526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401909552808552929392909183"), v)
pt.Insert(decodeHex("51602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184019095528085"), v)
pt.Insert(decodeHex("408051602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401909552"), v)
pt.Insert(decodeHex("3560408051602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190"), v)
pt.Insert(decodeHex("2081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190955280855292"), v)
pt.Insert(decodeHex("043560408051602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401"), v)
pt.Insert(decodeHex("0183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190955280855292939290"), v)
pt.Insert(decodeHex("0160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190955280855292939290918301828280156101"), v)
pt.Insert(decodeHex("00808352600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184019095528085529293929091830182"), v)
pt.Insert(decodeHex("0160a060020a033316600090815261"), v)
pt.Insert(decodeHex("006005600a4306101561032f57600190506103"), v)
pt.Insert(decodeHex("6020016000206000"), v)
pt.Insert(decodeHex("000000000000000000"), v)
pt.Insert(decodeHex("7c01000000000000000000000000000000000000000000000000000000009004"), v)
pt.Insert(decodeHex("6000357c01000000000000000000000000000000000000000000000000000000"), v)
pt.Insert(decodeHex("357c010000000000000000000000000000000000000000000000000000000090"), v)
pt.Insert(decodeHex("0100000000000000000000000000000000000000000000000000000000900480"), v)
pt.Insert(decodeHex("00357c0100000000000000000000000000000000000000000000000000000000"), v)
pt.Insert(decodeHex("0000000000000000000000000000000000000000000000000000000090048063"), v)
pt.Insert(decodeHex("0160a060020a033316600090815260"), v)
pt.Insert(decodeHex("405180910390f35b"), v)
pt.Insert(decodeHex("006004602084601f0104600302600f01f15090"), v)
pt.Insert(decodeHex("52602001600020600050"), v)
pt.Insert(decodeHex("ffffffffffff1682"), v)
pt.Insert(decodeHex("600460209081526040808320849055600590"), v)
pt.Insert(decodeHex("928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190"), v)
pt.Insert(decodeHex("836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382528381"), v)
pt.Insert(decodeHex("822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261"), v)
pt.Insert(decodeHex("820380516001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182"), v)
pt.Insert(decodeHex("818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601"), v)
pt.Insert(decodeHex("8152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185"), v)
pt.Insert(decodeHex("8152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096"), v)
pt.Insert(decodeHex("815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103825283818154815260200191508054"), v)
pt.Insert(decodeHex("80822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552"), v)
pt.Insert(decodeHex("80820380516001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001"), v)
pt.Insert(decodeHex("806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156104"), v)
pt.Insert(decodeHex("80516001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103"), v)
pt.Insert(decodeHex("6101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281038252838181548152"), v)
pt.Insert(decodeHex("604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285"), v)
pt.Insert(decodeHex("60243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101"), v)
pt.Insert(decodeHex("6020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502"), v)
pt.Insert(decodeHex("6020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281038252838181"), v)
pt.Insert(decodeHex("60200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281038252838181548152602001915080548015"), v)
pt.Insert(decodeHex("60043560243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6040805160206024803560048181013560"), v)
pt.Insert(decodeHex("6001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281038252"), v)
pt.Insert(decodeHex("60006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004"), v)
pt.Insert(decodeHex("5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020"), v)
pt.Insert(decodeHex("52928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501"), v)
pt.Insert(decodeHex("52604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652"), v)
pt.Insert(decodeHex("5260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382528381815481526020019150805480"), v)
pt.Insert(decodeHex("5260200191505060405180910390f35b"), v)
pt.Insert(decodeHex("516001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382"), v)
pt.Insert(decodeHex("4080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585"), v)
pt.Insert(decodeHex("3560243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81"), v)
pt.Insert(decodeHex("3560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590"), v)
pt.Insert(decodeHex("243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185"), v)
pt.Insert(decodeHex("2090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100"), v)
pt.Insert(decodeHex("20818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286"), v)
pt.Insert(decodeHex("20036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103825283818154"), v)
pt.Insert(decodeHex("200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103825283818154815260200191508054801561"), v)
pt.Insert(decodeHex("1916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382528381815481526020019150"), v)
pt.Insert(decodeHex("16815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281038252838181548152602001915080"), v)
pt.Insert(decodeHex("0a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281038252838181548152602001"), v)
pt.Insert(decodeHex("043560243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f"), v)
pt.Insert(decodeHex("0380516001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281"), v)
pt.Insert(decodeHex("036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382528381815481"), v)
pt.Insert(decodeHex("031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103825283818154815260200191"), v)
pt.Insert(decodeHex("0191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382528381815481526020019150805480156104"), v)
pt.Insert(decodeHex("01836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103825283"), v)
pt.Insert(decodeHex("01000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103825283818154815260"), v)
pt.Insert(decodeHex("006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485"), v)
pt.Insert(decodeHex("000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382528381815481526020"), v)
pt.Insert(decodeHex("600052602060002090"), v)
pt.Insert(decodeHex("820191906000526020600020905b81"), v)
pt.Insert(decodeHex("00000000000000000000000000"), v)
pt.Insert(decodeHex("ffffff1681565b60"), v)
pt.Insert(decodeHex("60a060020a033316600090815261"), v)
pt.Insert(decodeHex("ffff168152602001"), v)
pt.Insert(decodeHex("0000000000000000"), v)
pt.Insert(decodeHex("6004602084601f0104600302600f01f15090"), v)
pt.Insert(decodeHex("000000000000000000000000"), v)
pt.Insert(decodeHex("60a060020a033316600090815260"), v)
pt.Insert(decodeHex("600160a060020a033316"), v)
pt.Insert(decodeHex("0460209081526040808320849055600590"), v)
pt.Insert(decodeHex("f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b8154815290600101906020018083116103c1"), v)
pt.Insert(decodeHex("9250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b81548152906001"), v)
pt.Insert(decodeHex("910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b815481529060010190602001808311"), v)
pt.Insert(decodeHex("90f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b8154815290600101906020018083116103"), v)
pt.Insert(decodeHex("9081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467"), v)
pt.Insert(decodeHex("900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467ffff"), v)
pt.Insert(decodeHex("8252519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60"), v)
pt.Insert(decodeHex("81900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467ff"), v)
pt.Insert(decodeHex("80910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b8154815290600101906020018083"), v)
pt.Insert(decodeHex("606060405260e060020a60003504630a3b0a4f81146100315780634e71d92d14"), v)
pt.Insert(decodeHex("6060405260e060020a60003504630a3b0a4f81146100315780634e71d92d1461"), v)
pt.Insert(decodeHex("60405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b8154815290600101906020"), v)
pt.Insert(decodeHex("60200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467ffffffff"), v)
pt.Insert(decodeHex("52519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b6002"), v)
pt.Insert(decodeHex("519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b600254"), v)
pt.Insert(decodeHex("5180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b81548152906001019060200180"), v)
pt.Insert(decodeHex("5060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b81548152906001019060"), v)
pt.Insert(decodeHex("505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b815481529060010190"), v)
pt.Insert(decodeHex("50505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b8154815290600101"), v)
pt.Insert(decodeHex("405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b815481529060010190602001"), v)
pt.Insert(decodeHex("200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467ffffffffff"), v)
pt.Insert(decodeHex("0390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b81548152906001019060200180831161"), v)
pt.Insert(decodeHex("0360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467ffffff"), v)
pt.Insert(decodeHex("0190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467ffffffffffff"), v)
pt.Insert(decodeHex("91906000526020600020905b8154815290600101"), v)
pt.Insert(decodeHex("906000526020600020905b815481529060010190"), v)
pt.Insert(decodeHex("820191906000526020600020905b815481529060"), v)
pt.Insert(decodeHex("6020600020905b81548152906001019060200180"), v)
pt.Insert(decodeHex("60200191505060405180910390f35b"), v)
pt.Insert(decodeHex("6000526020600020905b81548152906001019060"), v)
pt.Insert(decodeHex("600020905b815481529060010190602001808311"), v)
pt.Insert(decodeHex("57820191906000526020600020905b8154815290"), v)
pt.Insert(decodeHex("526020600020905b815481529060010190602001"), v)
pt.Insert(decodeHex("20600020905b8154815290600101906020018083"), v)
pt.Insert(decodeHex("0191906000526020600020905b81548152906001"), v)
pt.Insert(decodeHex("00526020600020905b8154815290600101906020"), v)
pt.Insert(decodeHex("0020905b81548152906001019060200180831161"), v)
pt.Insert(decodeHex("50505060405180910390"), v)
pt.Insert(decodeHex("57823582600050559160200191906001019061"), v)
pt.Insert(decodeHex("0191906000526020600020905b81"), v)
pt.Insert(decodeHex("602001600020600050"), v)
pt.Insert(decodeHex("a060020a033316600090815261"), v)
pt.Insert(decodeHex("04602084601f0104600302600f01f15090"), v)
pt.Insert(decodeHex("ffff168152602001908152602001600020600050"), v)
pt.Insert(decodeHex("006004602084601f0104600302600f01f1509050"), v)
pt.Insert(decodeHex("906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b"), v)
pt.Insert(decodeHex("9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681"), v)
pt.Insert(decodeHex("81815233600160a060020a031682526001602090815260409283902080549182"), v)
pt.Insert(decodeHex("6101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60"), v)
pt.Insert(decodeHex("60606040526000357c0100000000000000000000000000000000000000000000"), v)
pt.Insert(decodeHex("606040526000357c010000000000000000000000000000000000000000000000"), v)
pt.Insert(decodeHex("6040526000357c01000000000000000000000000000000000000000000000000"), v)
pt.Insert(decodeHex("565b60405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f15090500192"), v)
pt.Insert(decodeHex("54906101000a900473ffffffffffffffffffffffffffffffffffffffff168156"), v)
pt.Insert(decodeHex("526000357c010000000000000000000000000000000000000000000000000000"), v)
pt.Insert(decodeHex("40526000357c0100000000000000000000000000000000000000000000000000"), v)
pt.Insert(decodeHex("018367ffffffffffffffff16815260200150600360005060003373ffffffffff"), v)
pt.Insert(decodeHex("20905b81548152906001019060200180831161"), v)
pt.Insert(decodeHex("0052602060002090"), v)
pt.Insert(decodeHex("a060020a033316600090815260"), v)
pt.Insert(decodeHex("9081101561000257"), v)
pt.Insert(decodeHex("0000000000000000000000"), v)
pt.Insert(decodeHex("200191505060405180910390f35b"), v)
pt.Insert(decodeHex("ff168152602001908152602001600020600050"), v)
pt.Insert(decodeHex("6004602084601f0104600302600f01f1509050"), v)
pt.Insert(decodeHex("0160a060020a033316"), v)
pt.Insert(decodeHex("91906000526020600020905b81"), v)
pt.Insert(decodeHex("602084601f0104600302600f01f15090"), v)
pt.Insert(decodeHex("546802b5e3af16b187ff"), v)
pt.Insert(decodeHex("905b81548152906001019060200180831161"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16"), v)
pt.Insert(decodeHex("ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392"), v)
pt.Insert(decodeHex("ffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290"), v)
pt.Insert(decodeHex("ffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092"), v)
pt.Insert(decodeHex("ffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201"), v)
pt.Insert(decodeHex("ffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191"), v)
pt.Insert(decodeHex("ffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181"), v)
pt.Insert(decodeHex("ffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190"), v)
pt.Insert(decodeHex("ff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191819084"), v)
pt.Insert(decodeHex("f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051906020019080838382906000600460208460"), v)
pt.Insert(decodeHex("f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060"), v)
pt.Insert(decodeHex("935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795"), v)
pt.Insert(decodeHex("9250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150805190602001908083"), v)
pt.Insert(decodeHex("918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302"), v)
pt.Insert(decodeHex("915080519060200190808383829060006004602084601f0104600302600f01f1"), v)
pt.Insert(decodeHex("915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b604080519182525190819003"), v)
pt.Insert(decodeHex("910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051906020019080838382906000600460"), v)
pt.Insert(decodeHex("90f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084"), v)
pt.Insert(decodeHex("90935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077"), v)
pt.Insert(decodeHex("9081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f1"), v)
pt.Insert(decodeHex("90815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035"), v)
pt.Insert(decodeHex("90808383829060006004602084601f0104600302600f01f15090509081019060"), v)
pt.Insert(decodeHex("906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffff"), v)
pt.Insert(decodeHex("90602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040"), v)
pt.Insert(decodeHex("9060200190808383829060006004602084601f0104600302600f01f150905090"), v)
pt.Insert(decodeHex("9060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190"), v)
pt.Insert(decodeHex("9060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190840183"), v)
pt.Insert(decodeHex("9060006004602084601f0104600302600f01f150905090810190601f16801561"), v)
pt.Insert(decodeHex("9060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281"), v)
pt.Insert(decodeHex("9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673"), v)
pt.Insert(decodeHex("9050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150805190602001"), v)
pt.Insert(decodeHex("900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffff"), v)
pt.Insert(decodeHex("900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f15090"), v)
pt.Insert(decodeHex("84601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151"), v)
pt.Insert(decodeHex("8383829060006004602084601f0104600302600f01f150905090810190601f16"), v)
pt.Insert(decodeHex("8383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020"), v)
pt.Insert(decodeHex("83829060006004602084601f0104600302600f01f150905090810190601f1680"), v)
pt.Insert(decodeHex("83829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001"), v)
pt.Insert(decodeHex("838181518152602001915080519060200190808383829060006004602084601f"), v)
pt.Insert(decodeHex("838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b604080"), v)
pt.Insert(decodeHex("836020036101000a031916815260200191505b509250505060405180910390f3"), v)
pt.Insert(decodeHex("829060006004602084601f0104600302600f01f150905090810190601f168015"), v)
pt.Insert(decodeHex("829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182"), v)
pt.Insert(decodeHex("8281038252838181518152602001915080519060200190808383829060006004"), v)
pt.Insert(decodeHex("82565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191819084018382808284"), v)
pt.Insert(decodeHex("8252838181518152602001915080519060200190808383829060006004602084"), v)
pt.Insert(decodeHex("8252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f010460030260"), v)
pt.Insert(decodeHex("820380516001836020036101000a031916815260200191505b50925050506040"), v)
pt.Insert(decodeHex("81900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150"), v)
pt.Insert(decodeHex("8181518152602001915080519060200190808383829060006004602084601f01"), v)
pt.Insert(decodeHex("8181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051"), v)
pt.Insert(decodeHex("8152602001915080519060200190808383829060006004602084601f01046003"), v)
pt.Insert(decodeHex("8152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252"), v)
pt.Insert(decodeHex("815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594"), v)
pt.Insert(decodeHex("81518152602001915080519060200190808383829060006004602084601f0104"), v)
pt.Insert(decodeHex("81518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b6040805191"), v)
pt.Insert(decodeHex("8103825283818151815260200191508051906020019080838382906000600460"), v)
pt.Insert(decodeHex("80910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004"), v)
pt.Insert(decodeHex("808383829060006004602084601f0104600302600f01f150905090810190601f"), v)
pt.Insert(decodeHex("808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060"), v)
pt.Insert(decodeHex("80820380516001836020036101000a031916815260200191505b509250505060"), v)
pt.Insert(decodeHex("805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494"), v)
pt.Insert(decodeHex("8051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f010460"), v)
pt.Insert(decodeHex("80519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b6040805191825251908190036020"), v)
pt.Insert(decodeHex("8051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190840183828082843750949550"), v)
pt.Insert(decodeHex("80516001836020036101000a031916815260200191505b509250505060405180"), v)
pt.Insert(decodeHex("8035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190840183828082843750949550505050505060"), v)
pt.Insert(decodeHex("73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffff"), v)
pt.Insert(decodeHex("6c600435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff1916815560018101805484825590845282"), v)
pt.Insert(decodeHex("67ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093"), v)
pt.Insert(decodeHex("6101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffff"), v)
pt.Insert(decodeHex("61006c600435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff191681556001810180548482559084"), v)
pt.Insert(decodeHex("60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f01"), v)
pt.Insert(decodeHex("60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191819084018382808284375094"), v)
pt.Insert(decodeHex("60405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060"), v)
pt.Insert(decodeHex("60248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191819084018382808284375094955050505050"), v)
pt.Insert(decodeHex("602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381"), v)
pt.Insert(decodeHex("602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181908401838280828437509495505050"), v)
pt.Insert(decodeHex("6020036101000a031916815260200191505b509250505060405180910390f35b"), v)
pt.Insert(decodeHex("602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051"), v)
pt.Insert(decodeHex("602001915080519060200190808383829060006004602084601f010460030260"), v)
pt.Insert(decodeHex("602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b604080519182525190"), v)
pt.Insert(decodeHex("60200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090"), v)
pt.Insert(decodeHex("60200190808383829060006004602084601f0104600302600f01f15090509081"), v)
pt.Insert(decodeHex("60200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f3"), v)
pt.Insert(decodeHex("6020018281038252838181518152602001915080519060200190808383829060"), v)
pt.Insert(decodeHex("601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181"), v)
pt.Insert(decodeHex("600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080"), v)
pt.Insert(decodeHex("6004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252"), v)
pt.Insert(decodeHex("600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001"), v)
pt.Insert(decodeHex("6001836020036101000a031916815260200191505b5092505050604051809103"), v)
pt.Insert(decodeHex("60010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191819084018382"), v)
pt.Insert(decodeHex("60006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103"), v)
pt.Insert(decodeHex("6000600050600060016000506000868152602001908152602001600020600050"), v)
pt.Insert(decodeHex("5b61006c600435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff1916815560018101805484825590"), v)
pt.Insert(decodeHex("5b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f"), v)
pt.Insert(decodeHex("5b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190840183828082843750"), v)
pt.Insert(decodeHex("5780820380516001836020036101000a031916815260200191505b5092505050"), v)
pt.Insert(decodeHex("565b61006c600435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff19168155600181018054848255"), v)
pt.Insert(decodeHex("565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181908401838280828437"), v)
pt.Insert(decodeHex("54906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ff"), v)
pt.Insert(decodeHex("5467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490"), v)
pt.Insert(decodeHex("5290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590"), v)
pt.Insert(decodeHex("5283818151815260200191508051906020019080838382906000600460208460"), v)
pt.Insert(decodeHex("52602001915080519060200190808383829060006004602084601f0104600302"), v)
pt.Insert(decodeHex("52602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b6040805191825251"), v)
pt.Insert(decodeHex("52519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f"), v)
pt.Insert(decodeHex("5220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460"), v)
pt.Insert(decodeHex("51918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f01046003"), v)
pt.Insert(decodeHex("519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01"), v)
pt.Insert(decodeHex("519060200190808383829060006004602084601f0104600302600f01f1509050"), v)
pt.Insert(decodeHex("519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b604080519182525190819003602001"), v)
pt.Insert(decodeHex("518152602001915080519060200190808383829060006004602084601f010460"), v)
pt.Insert(decodeHex("518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b604080519182"), v)
pt.Insert(decodeHex("5180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150805190602001908083838290600060"), v)
pt.Insert(decodeHex("51602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191819084018382808284375094955050"), v)
pt.Insert(decodeHex("516001836020036101000a031916815260200191505b50925050506040518091"), v)
pt.Insert(decodeHex("509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051906020"), v)
pt.Insert(decodeHex("5080519060200190808383829060006004602084601f0104600302600f01f150"), v)
pt.Insert(decodeHex("5080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360"), v)
pt.Insert(decodeHex("5060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150805190602001908083838290"), v)
pt.Insert(decodeHex("505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051906020019080838382"), v)
pt.Insert(decodeHex("50505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383"), v)
pt.Insert(decodeHex("50019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190"), v)
pt.Insert(decodeHex("408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104"), v)
pt.Insert(decodeHex("408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181908401838280828437509495"), v)
pt.Insert(decodeHex("405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051906020019080838382906000"), v)
pt.Insert(decodeHex("248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181908401838280828437509495505050505050"), v)
pt.Insert(decodeHex("2084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181"), v)
pt.Insert(decodeHex("20805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044"), v)
pt.Insert(decodeHex("2060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190840183828082843750949550505050"), v)
pt.Insert(decodeHex("2002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180"), v)
pt.Insert(decodeHex("2001915080519060200190808383829060006004602084601f0104600302600f"), v)
pt.Insert(decodeHex("2001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081"), v)
pt.Insert(decodeHex("200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f15090509081"), v)
pt.Insert(decodeHex("200190808383829060006004602084601f0104600302600f01f1509050908101"), v)
pt.Insert(decodeHex("200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b"), v)
pt.Insert(decodeHex("2001828103825283818151815260200191508051906020019080838382906000"), v)
pt.Insert(decodeHex("1f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152"), v)
pt.Insert(decodeHex("169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181908401"), v)
pt.Insert(decodeHex("0f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051"), v)
pt.Insert(decodeHex("0a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffff"), v)
pt.Insert(decodeHex("0473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffff"), v)
pt.Insert(decodeHex("04602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283"), v)
pt.Insert(decodeHex("04600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020"), v)
pt.Insert(decodeHex("0390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150805190602001908083838290600060046020"), v)
pt.Insert(decodeHex("0382528381815181526020019150805190602001908083838290600060046020"), v)
pt.Insert(decodeHex("0380516001836020036101000a031916815260200191505b5092505050604051"), v)
pt.Insert(decodeHex("0360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f1509050"), v)
pt.Insert(decodeHex("0302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191"), v)
pt.Insert(decodeHex("02808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080"), v)
pt.Insert(decodeHex("02600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150"), v)
pt.Insert(decodeHex("01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150805190"), v)
pt.Insert(decodeHex("019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051906020019080"), v)
pt.Insert(decodeHex("01915080519060200190808383829060006004602084601f0104600302600f01"), v)
pt.Insert(decodeHex("01915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b6040805191825251908190"), v)
pt.Insert(decodeHex("0190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f1509050908101"), v)
pt.Insert(decodeHex("0190808383829060006004602084601f0104600302600f01f150905090810190"), v)
pt.Insert(decodeHex("0190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60"), v)
pt.Insert(decodeHex("01836020036101000a031916815260200191505b509250505060405180910390"), v)
pt.Insert(decodeHex("0182810382528381815181526020019150805190602001908083838290600060"), v)
pt.Insert(decodeHex("0182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190840183828082"), v)
pt.Insert(decodeHex("0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260"), v)
pt.Insert(decodeHex("010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181908401838280"), v)
pt.Insert(decodeHex("01000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffff"), v)
pt.Insert(decodeHex("006c600435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff19168155600181018054848255908452"), v)
pt.Insert(decodeHex("006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382"), v)
pt.Insert(decodeHex("0060005060006001600050600086815260200190815260200160002060005060"), v)
pt.Insert(decodeHex("000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffff"), v)
mf2 := NewMatchFinder2(&pt)
data := decodeHex("6060604052361561008a576000357c01000000000000000000000000000000000000000000000000000000009004806301cb3b20146102e357806329dcb0cf14" +
"6102f057806338af3eed146103115780636e66f6e9146103485780637a3a0e841461037f5780637b3e5e7b146103a0578063a035b1fe146103c1578063dc0d3d" +
"ff146103e25761008a565b6102e15b60006000600660005060066000508054600101908181548183558181151161011957600202816002028360005260206000" +
"20918201910161011891906100cf565b808211156101145760006000820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690" +
"556001820160005060009055506001016100cf565b5090565b5b5050508154811015610002579060005260206000209060020201600091509150338282506000" +
"0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055503482825060010160005081905550818150600101600050" +
"546002600082828250540192505081905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffff" +
"ffffffffffffffffffff166390b98a11336004600050548585506001016000505404604051837c01000000000000000000000000000000000000000000000000" +
"00000000028152600401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506020604051808303816000876161da" +
"5a03f1156100025750505060405151507fe842aea7a5f1b01049d752008c53c52890b1a6daf660cf39e8eec506112bbdf682825060000160009054906101000a" +
"900473ffffffffffffffffffffffffffffffffffffffff16838350600101600050546001604051808473ffffffffffffffffffffffffffffffffffffffff1681" +
"52602001838152602001828152602001935050505060405180910390a15b5050565b005b6102ee6004506104ec565b005b6102fb60045061045e565b60405180" +
"82815260200191505060405180910390f35b61031c600450610426565b604051808273ffffffffffffffffffffffffffffffffffffffff168152602001915050" +
"60405180910390f35b610353600450610470565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b" +
"61038a60045061044c565b6040518082815260200191505060405180910390f35b6103ab600450610455565b6040518082815260200191505060405180910390" +
"f35b6103cc600450610467565b6040518082815260200191505060405180910390f35b6103f3600480359060200150610496565b604051808373ffffffffffff" +
"ffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b600060009054906101000a900473ffffffffffffffffffffff" +
"ffffffffffffffffff1681565b60016000505481565b60026000505481565b60036000505481565b60046000505481565b600560009054906101000a900473ff" +
"ffffffffffffffffffffffffffffffffffffff1681565b6006600050818154811015610002579060005260206000209060020201600091509050806000016000" +
"9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160005054905082565b6000600360005054421015156107fc57600160" +
"0050546002600050541015156105f357600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffff" +
"ffffffffffffffff166000600260005054604051809050600060405180830381858888f19350505050507fe842aea7a5f1b01049d752008c53c52890b1a6daf6" +
"60cf39e8eec506112bbdf6600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002600050546000604051808473ffffffff" +
"ffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a16107c1565b7fe842aea7a5f1b01049d752" +
"008c53c52890b1a6daf660cf39e8eec506112bbdf66000600b600060405180848152602001838152602001828152602001935050505060405180910390a16000" +
"90505b6006600050548110156107c057600660005081815481101561000257906000526020600020906002020160005060000160009054906101000a900473ff" +
"ffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660006006600050838154811015610002579060005260" +
"20600020906002020160005060010160005054604051809050600060405180830381858888f19350505050507fe842aea7a5f1b01049d752008c53c52890b1a6" +
"daf660cf39e8eec506112bbdf6600660005082815481101561000257906000526020600020906002020160005060000160009054906101000a900473ffffffff" +
"ffffffffffffffffffffffffffffffff166006600050838154811015610002579060005260206000209060020201600050600101600050546000604051808473" +
"ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a15b806001019050805061064256" +
"5b5b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b5b5056")
matches := mf2.FindLongestMatches(data)
for _, m := range matches {
fmt.Printf("%+v, match: [%x]\n", m, data[m.Start:m.End])
}
if len(matches) != 234 {
t.Errorf("expected matches: %d, got %d", 234, len(matches))
}
}
func TestFindMatches7(t *testing.T) {
var pt PatriciaTree
v := []byte{1}
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("73ffffffffffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffff16"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffff16"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffff16"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff16"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffff16"), v)
pt.Insert(decodeHex("600160a060020a03"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffff16815260200191505060405180910390a1"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffff1681"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffff168156"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff1681565b"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffff1681565b60"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffffff168152602001908152602001"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffff16815260200190815260200160"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffff1681526020019081526020016000"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffff168152602001908152602001600020"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff16815260200190815260200160002060"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffff1681526020019081526020016000206000"), v)
pt.Insert(decodeHex("73ffffffffffffffffffffffffffffffffffffffff1681526020019081526020"), v)
pt.Insert(decodeHex("81526020019081526020016000206000"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffff168152"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff16815260"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffff1681526020"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffff168152602001"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffff1681565b60"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffff168152602001"), v)
pt.Insert(decodeHex("526020019081526020016000206000"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff1682"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffff1681565b60"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffff168152602001"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffff1682"), v)
pt.Insert(decodeHex("6020019081526020016000206000"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffff1681565b60"), v)
pt.Insert(decodeHex("ffffffffffffffffffffff168152602001"), v)
pt.Insert(decodeHex("8152602001908152602001600020600050"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffff1682"), v)
pt.Insert(decodeHex("ffffffffffffffff168152602001"), v)
pt.Insert(decodeHex("80806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f16801561"), v)
pt.Insert(decodeHex("60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f16"), v)
pt.Insert(decodeHex("5b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f"), v)
pt.Insert(decodeHex("5180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f168015"), v)
pt.Insert(decodeHex("405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680"), v)
pt.Insert(decodeHex("20019081526020016000206000"), v)
pt.Insert(decodeHex("ffffffffffffffffffffff1681565b60"), v)
pt.Insert(decodeHex("ffffffffffffffffffff168152602001"), v)
pt.Insert(decodeHex("52602001908152602001600020600050"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffff1682"), v)
pt.Insert(decodeHex("ffffffffffffffff1681565b60"), v)
pt.Insert(decodeHex("ffffffffffffff168152602001"), v)
pt.Insert(decodeHex("ffffffffffffffffffff1681565b60"), v)
pt.Insert(decodeHex("019081526020016000206000"), v)
pt.Insert(decodeHex("ffffffffffffffffff168152602001"), v)
pt.Insert(decodeHex("1681526020019081526020016000206000"), v)
pt.Insert(decodeHex("602001908152602001600020600050"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffff1682"), v)
pt.Insert(decodeHex("ffffffffffffff1681565b60"), v)
pt.Insert(decodeHex("ffffffffffffffffff1681565b60"), v)
pt.Insert(decodeHex("ffffffffffff168152602001"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffff168152602001908152602001600020600050"), v)
pt.Insert(decodeHex("9081526020016000206000"), v)
pt.Insert(decodeHex("5050604051849350600080"), v)
pt.Insert(decodeHex("2001908152602001600020600050"), v)
pt.Insert(decodeHex("505060405180910390f35b"), v)
pt.Insert(decodeHex("ffffffffffffffffffffff1682"), v)
pt.Insert(decodeHex("6000506000600060005054815260200190815260200160002060006101000a81"), v)
pt.Insert(decodeHex("00506000600060005054815260200190815260200160002060006101000a8154"), v)
pt.Insert(decodeHex("ffffffffffff1681565b60"), v)
pt.Insert(decodeHex("ffffff16815260200191505060405180910390a1"), v)
pt.Insert(decodeHex("ffffffffff168152602001"), v)
pt.Insert(decodeHex("8281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100a4578082"), v)
pt.Insert(decodeHex("81038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100a457808203"), v)
pt.Insert(decodeHex("6020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100a4"), v)
pt.Insert(decodeHex("60005060003373ffffffffffffffffffffffffffffffffffffffff1681526020"), v)
pt.Insert(decodeHex("60003373ffffffffffffffffffffffffffffffffffffffff1681526020019081"), v)
pt.Insert(decodeHex("5060003373ffffffffffffffffffffffffffffffffffffffff16815260200190"), v)
pt.Insert(decodeHex("3373ffffffffffffffffffffffffffffffffffffffff16815260200190815260"), v)
pt.Insert(decodeHex("20018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100a457"), v)
pt.Insert(decodeHex("038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100a45780820380"), v)
pt.Insert(decodeHex("018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156100a45780"), v)
pt.Insert(decodeHex("005060003373ffffffffffffffffffffffffffffffffffffffff168152602001"), v)
pt.Insert(decodeHex("003373ffffffffffffffffffffffffffffffffffffffff168152602001908152"), v)
pt.Insert(decodeHex("01908152602001600020600050"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffff16815260200190"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffff1681526020019081"), v)
pt.Insert(decodeHex("ffffffffffffffffffffff168152602001908152"), v)
pt.Insert(decodeHex("ffffffffffffffffffff16815260200190815260"), v)
pt.Insert(decodeHex("ffffffffffffffffff1681526020019081526020"), v)
pt.Insert(decodeHex("ffffffffffffffff168152602001908152602001"), v)
pt.Insert(decodeHex("ffffffffffffff16815260200190815260200160"), v)
pt.Insert(decodeHex("ffffffffffff1681526020019081526020016000"), v)
pt.Insert(decodeHex("ffffffffff168152602001908152602001600020"), v)
pt.Insert(decodeHex("ffffffff16815260200190815260200160002060"), v)
pt.Insert(decodeHex("ffffff1681526020019081526020016000206000"), v)
pt.Insert(decodeHex("81526020016000206000"), v)
pt.Insert(decodeHex("50604051849350600080"), v)
pt.Insert(decodeHex("ffffffffffffffffffff1682"), v)
pt.Insert(decodeHex("5060405180910390f35b"), v)
pt.Insert(decodeHex("168152602001908152602001600020600050"), v)
pt.Insert(decodeHex("ffff16815260200191505060405180910390a1"), v)
pt.Insert(decodeHex("67ffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffff1682"), v)
pt.Insert(decodeHex("ffff1681526020019081526020016000206000"), v)
pt.Insert(decodeHex("6040518082815260200191505060405180910390"), v)
pt.Insert(decodeHex("ffffffffff1681565b60"), v)
pt.Insert(decodeHex("908152602001600020600050"), v)
pt.Insert(decodeHex("8281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390"), v)
pt.Insert(decodeHex("81038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f3"), v)
pt.Insert(decodeHex("80806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f150905001925050506040"), v)
pt.Insert(decodeHex("806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f15090500192505050604051"), v)
pt.Insert(decodeHex("60405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f150905001925050"), v)
pt.Insert(decodeHex("6020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180"), v)
pt.Insert(decodeHex("5b60405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250"), v)
pt.Insert(decodeHex("5180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060"), v)
pt.Insert(decodeHex("405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f15090500192505050"), v)
pt.Insert(decodeHex("20018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f150905001925050506040518091"), v)
pt.Insert(decodeHex("038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b"), v)
pt.Insert(decodeHex("018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f15090500192505050604051809103"), v)
pt.Insert(decodeHex("ffffffff168152602001"), v)
pt.Insert(decodeHex("5b60405180828152602001915050604051809103"), v)
pt.Insert(decodeHex("565b604051808281526020019150506040518091"), v)
pt.Insert(decodeHex("518082815260200191505060405180910390f35b"), v)
pt.Insert(decodeHex("40518082815260200191505060405180910390f3"), v)
pt.Insert(decodeHex("ff16815260200191505060405180910390a1"), v)
pt.Insert(decodeHex("ffffffffffffffffff1682"), v)
pt.Insert(decodeHex("808281526102cb94909290828280156100d757"), v)
pt.Insert(decodeHex("ff1681526020019081526020016000206000"), v)
pt.Insert(decodeHex("526020016000206000"), v)
pt.Insert(decodeHex("f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f15090509081019060"), v)
pt.Insert(decodeHex("a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff191681556001810180548482559084528284209192849261"), v)
pt.Insert(decodeHex("90f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190"), v)
pt.Insert(decodeHex("8252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60"), v)
pt.Insert(decodeHex("60a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff1916815560018101805484825590845282842091928492"), v)
pt.Insert(decodeHex("602081815260408083206002548452825282208354815467ffffffffffffffff191667ffffffffffffffff919091161781556001848101805491830180548382"), v)
pt.Insert(decodeHex("600435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff191681556001810180548482559084528284"), v)
pt.Insert(decodeHex("600160a060020a0333168252602082815260408084208585528252928390206001018054601f810183900490920260a090810190945260808281529293909190"), v)
pt.Insert(decodeHex("600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff191681556001810180548482559084528284209192"), v)
pt.Insert(decodeHex("60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("52838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b6040"), v)
pt.Insert(decodeHex("52600160a060020a0333168252602082815260408084208585528252928390206001018054601f810183900490920260a0908101909452608082815292939091"), v)
pt.Insert(decodeHex("526000828152604090208054829081101561000257506000908152602090200154905081565b610315600435600160a060020a03331660009081526020818152"), v)
pt.Insert(decodeHex("35600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff1916815560018101805484825590845282842091"), v)
pt.Insert(decodeHex("2081815260408083206002548452825282208354815467ffffffffffffffff191667ffffffffffffffff91909116178155600184810180549183018054838255"), v)
pt.Insert(decodeHex("0435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff19168155600181018054848255908452828420"), v)
pt.Insert(decodeHex("0160a060020a0333168252602082815260408084208585528252928390206001018054601f810183900490920260a09081019094526080828152929390919082"), v)
pt.Insert(decodeHex("0160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff19168155600181018054848255908452828420919284"), v)
pt.Insert(decodeHex("009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16"), v)
pt.Insert(decodeHex("60405180910390f35b"), v)
pt.Insert(decodeHex("8082815260200191505060405180910390f35b"), v)
pt.Insert(decodeHex("ffffffffffffff1682"), v)
pt.Insert(decodeHex("600160a060020a033316600090815261"), v)
pt.Insert(decodeHex("8152602001600020600050"), v)
pt.Insert(decodeHex("90600052602060002090"), v)
pt.Insert(decodeHex("928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101859004909402850160405260"), v)
pt.Insert(decodeHex("836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de5782"), v)
pt.Insert(decodeHex("822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101859004909402850160405260608481526100"), v)
pt.Insert(decodeHex("820380516001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080"), v)
pt.Insert(decodeHex("818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101859004909402850160"), v)
pt.Insert(decodeHex("8152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f810185900490940285016040"), v)
pt.Insert(decodeHex("8152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f810185900490940285016040526060"), v)
pt.Insert(decodeHex("815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020"), v)
pt.Insert(decodeHex("80822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590049094028501604052606084815261"), v)
pt.Insert(decodeHex("80820380516001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c0908490"), v)
pt.Insert(decodeHex("80519060200190808383829060006004602084601f0104600302600f01f15090"), v)
pt.Insert(decodeHex("80516001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c0908490801561"), v)
pt.Insert(decodeHex("6101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de578201919060"), v)
pt.Insert(decodeHex("604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101859004909402850160405260608481"), v)
pt.Insert(decodeHex("60243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590"), v)
pt.Insert(decodeHex("6020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f810185900490940285"), v)
pt.Insert(decodeHex("6020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de578201"), v)
pt.Insert(decodeHex("60200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b"), v)
pt.Insert(decodeHex("60043560243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81"), v)
pt.Insert(decodeHex("6001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de"), v)
pt.Insert(decodeHex("60006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590049094"), v)
pt.Insert(decodeHex("5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c09084"), v)
pt.Insert(decodeHex("52928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590049094028501604052"), v)
pt.Insert(decodeHex("52604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590049094028501604052606084"), v)
pt.Insert(decodeHex("5260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de5782019190600052602060002090"), v)
pt.Insert(decodeHex("516001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103"), v)
pt.Insert(decodeHex("4080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f810185900490940285016040526060848152"), v)
pt.Insert(decodeHex("3560243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f810185"), v)
pt.Insert(decodeHex("3560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f810185900490"), v)
pt.Insert(decodeHex("243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101859004"), v)
pt.Insert(decodeHex("2090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590049094028501604052606084815261006c"), v)
pt.Insert(decodeHex("20818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f81018590049094028501"), v)
pt.Insert(decodeHex("20036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191"), v)
pt.Insert(decodeHex("200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b81"), v)
pt.Insert(decodeHex("1916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de5782019190600052602060"), v)
pt.Insert(decodeHex("16815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de578201919060005260206000"), v)
pt.Insert(decodeHex("0a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de578201919060005260"), v)
pt.Insert(decodeHex("043560243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101"), v)
pt.Insert(decodeHex("0380516001836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c09084908015"), v)
pt.Insert(decodeHex("036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de5782019190"), v)
pt.Insert(decodeHex("031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020"), v)
pt.Insert(decodeHex("0191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b8154"), v)
pt.Insert(decodeHex("01836020036101000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57"), v)
pt.Insert(decodeHex("01000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000"), v)
pt.Insert(decodeHex("006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6080602060248035600481810135601f8101859004909402"), v)
pt.Insert(decodeHex("000a031916815260200191505b509250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de5782019190600052"), v)
pt.Insert(decodeHex("ffffffff1681565b60"), v)
pt.Insert(decodeHex("60006005600a4306101561032f57600190506103"), v)
pt.Insert(decodeHex("600160a060020a033316600090815260"), v)
pt.Insert(decodeHex("ffffff168152602001"), v)
pt.Insert(decodeHex("82815260200191505060405180910390f35b"), v)
pt.Insert(decodeHex("9060006004602084601f0104600302600f01f150"), v)
pt.Insert(decodeHex("8383829060006004602084601f0104600302600f"), v)
pt.Insert(decodeHex("83829060006004602084601f0104600302600f01"), v)
pt.Insert(decodeHex("829060006004602084601f0104600302600f01f1"), v)
pt.Insert(decodeHex("808383829060006004602084601f010460030260"), v)
pt.Insert(decodeHex("60006004602084601f0104600302600f01f15090"), v)
pt.Insert(decodeHex("815260200191505060405180910390f35b"), v)
pt.Insert(decodeHex("0000000000000000000000000000"), v)
pt.Insert(decodeHex("8352600160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190955280855292939290918301828280"), v)
pt.Insert(decodeHex("83526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184019095528085529293929091"), v)
pt.Insert(decodeHex("81810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184019095528085529293"), v)
pt.Insert(decodeHex("810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401909552808552929392"), v)
pt.Insert(decodeHex("808352600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401909552808552929392909183018282"), v)
pt.Insert(decodeHex("8051602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190955280"), v)
pt.Insert(decodeHex("60408051602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184019095"), v)
pt.Insert(decodeHex("602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401909552808552"), v)
pt.Insert(decodeHex("60043560408051602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184"), v)
pt.Insert(decodeHex("600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401909552808552929392909183018282801561"), v)
pt.Insert(decodeHex("6000808352600160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190955280855292939290918301"), v)
pt.Insert(decodeHex("6000526020600020"), v)
pt.Insert(decodeHex("52600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184019095528085529293929091830182828015"), v)
pt.Insert(decodeHex("526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401909552808552929392909183"), v)
pt.Insert(decodeHex("51602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184019095528085"), v)
pt.Insert(decodeHex("408051602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401909552"), v)
pt.Insert(decodeHex("3560408051602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190"), v)
pt.Insert(decodeHex("2081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190955280855292"), v)
pt.Insert(decodeHex("043560408051602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f8201849004840281018401"), v)
pt.Insert(decodeHex("0183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190955280855292939290"), v)
pt.Insert(decodeHex("0160a060020a0333168152808252838120858252825283902060010180548451601f820184900484028101840190955280855292939290918301828280156101"), v)
pt.Insert(decodeHex("00808352600160a060020a0333168152808252838120858252825283902060010180548451601f82018490048402810184019095528085529293929091830182"), v)
pt.Insert(decodeHex("0160a060020a033316600090815261"), v)
pt.Insert(decodeHex("006005600a4306101561032f57600190506103"), v)
pt.Insert(decodeHex("6020016000206000"), v)
pt.Insert(decodeHex("000000000000000000"), v)
pt.Insert(decodeHex("7c01000000000000000000000000000000000000000000000000000000009004"), v)
pt.Insert(decodeHex("6000357c01000000000000000000000000000000000000000000000000000000"), v)
pt.Insert(decodeHex("357c010000000000000000000000000000000000000000000000000000000090"), v)
pt.Insert(decodeHex("0100000000000000000000000000000000000000000000000000000000900480"), v)
pt.Insert(decodeHex("00357c0100000000000000000000000000000000000000000000000000000000"), v)
pt.Insert(decodeHex("0000000000000000000000000000000000000000000000000000000090048063"), v)
pt.Insert(decodeHex("0160a060020a033316600090815260"), v)
pt.Insert(decodeHex("405180910390f35b"), v)
pt.Insert(decodeHex("006004602084601f0104600302600f01f15090"), v)
pt.Insert(decodeHex("52602001600020600050"), v)
pt.Insert(decodeHex("ffffffffffff1682"), v)
pt.Insert(decodeHex("600460209081526040808320849055600590"), v)
pt.Insert(decodeHex("928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190"), v)
pt.Insert(decodeHex("836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382528381"), v)
pt.Insert(decodeHex("822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261"), v)
pt.Insert(decodeHex("820380516001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182"), v)
pt.Insert(decodeHex("818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601"), v)
pt.Insert(decodeHex("8152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185"), v)
pt.Insert(decodeHex("8152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096"), v)
pt.Insert(decodeHex("815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103825283818154815260200191508054"), v)
pt.Insert(decodeHex("80822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552"), v)
pt.Insert(decodeHex("80820380516001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001"), v)
pt.Insert(decodeHex("806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f1680156104"), v)
pt.Insert(decodeHex("80516001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103"), v)
pt.Insert(decodeHex("6101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281038252838181548152"), v)
pt.Insert(decodeHex("604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285"), v)
pt.Insert(decodeHex("60243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101"), v)
pt.Insert(decodeHex("6020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502"), v)
pt.Insert(decodeHex("6020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281038252838181"), v)
pt.Insert(decodeHex("60200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281038252838181548152602001915080548015"), v)
pt.Insert(decodeHex("60043560243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b6040805160206024803560048181013560"), v)
pt.Insert(decodeHex("6001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281038252"), v)
pt.Insert(decodeHex("60006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004"), v)
pt.Insert(decodeHex("5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020"), v)
pt.Insert(decodeHex("52928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501"), v)
pt.Insert(decodeHex("52604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652"), v)
pt.Insert(decodeHex("5260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382528381815481526020019150805480"), v)
pt.Insert(decodeHex("5260200191505060405180910390f35b"), v)
pt.Insert(decodeHex("516001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382"), v)
pt.Insert(decodeHex("4080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585"), v)
pt.Insert(decodeHex("3560243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81"), v)
pt.Insert(decodeHex("3560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590"), v)
pt.Insert(decodeHex("243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185"), v)
pt.Insert(decodeHex("2090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100"), v)
pt.Insert(decodeHex("20818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286"), v)
pt.Insert(decodeHex("20036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103825283818154"), v)
pt.Insert(decodeHex("200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103825283818154815260200191508054801561"), v)
pt.Insert(decodeHex("1916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382528381815481526020019150"), v)
pt.Insert(decodeHex("16815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281038252838181548152602001915080"), v)
pt.Insert(decodeHex("0a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281038252838181548152602001"), v)
pt.Insert(decodeHex("043560243560006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f"), v)
pt.Insert(decodeHex("0380516001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff168152602001806020018281"), v)
pt.Insert(decodeHex("036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382528381815481"), v)
pt.Insert(decodeHex("031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103825283818154815260200191"), v)
pt.Insert(decodeHex("0191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382528381815481526020019150805480156104"), v)
pt.Insert(decodeHex("01836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103825283"), v)
pt.Insert(decodeHex("01000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180602001828103825283818154815260"), v)
pt.Insert(decodeHex("006020818152928152604080822090935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485"), v)
pt.Insert(decodeHex("000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff1681526020018060200182810382528381815481526020"), v)
pt.Insert(decodeHex("600052602060002090"), v)
pt.Insert(decodeHex("820191906000526020600020905b81"), v)
pt.Insert(decodeHex("00000000000000000000000000"), v)
pt.Insert(decodeHex("ffffff1681565b60"), v)
pt.Insert(decodeHex("60a060020a033316600090815261"), v)
pt.Insert(decodeHex("ffff168152602001"), v)
pt.Insert(decodeHex("0000000000000000"), v)
pt.Insert(decodeHex("6004602084601f0104600302600f01f15090"), v)
pt.Insert(decodeHex("000000000000000000000000"), v)
pt.Insert(decodeHex("60a060020a033316600090815260"), v)
pt.Insert(decodeHex("600160a060020a033316"), v)
pt.Insert(decodeHex("0460209081526040808320849055600590"), v)
pt.Insert(decodeHex("f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b8154815290600101906020018083116103c1"), v)
pt.Insert(decodeHex("9250505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b81548152906001"), v)
pt.Insert(decodeHex("910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b815481529060010190602001808311"), v)
pt.Insert(decodeHex("90f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b8154815290600101906020018083116103"), v)
pt.Insert(decodeHex("9081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467"), v)
pt.Insert(decodeHex("900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467ffff"), v)
pt.Insert(decodeHex("8252519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60"), v)
pt.Insert(decodeHex("81900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467ff"), v)
pt.Insert(decodeHex("80910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b8154815290600101906020018083"), v)
pt.Insert(decodeHex("606060405260e060020a60003504630a3b0a4f81146100315780634e71d92d14"), v)
pt.Insert(decodeHex("6060405260e060020a60003504630a3b0a4f81146100315780634e71d92d1461"), v)
pt.Insert(decodeHex("60405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b8154815290600101906020"), v)
pt.Insert(decodeHex("60200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467ffffffff"), v)
pt.Insert(decodeHex("52519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b6002"), v)
pt.Insert(decodeHex("519081900360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b600254"), v)
pt.Insert(decodeHex("5180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b81548152906001019060200180"), v)
pt.Insert(decodeHex("5060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b81548152906001019060"), v)
pt.Insert(decodeHex("505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b815481529060010190"), v)
pt.Insert(decodeHex("50505060405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b8154815290600101"), v)
pt.Insert(decodeHex("405180910390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b815481529060010190602001"), v)
pt.Insert(decodeHex("200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467ffffffffff"), v)
pt.Insert(decodeHex("0390f35b606082815260406080908152825460a081905260c090849080156103de57820191906000526020600020905b81548152906001019060200180831161"), v)
pt.Insert(decodeHex("0360200190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467ffffff"), v)
pt.Insert(decodeHex("0190f35b60408051600160a060020a03929092168252519081900360200190f35b60408051918252519081900360200190f35b50815b60025467ffffffffffff"), v)
pt.Insert(decodeHex("91906000526020600020905b8154815290600101"), v)
pt.Insert(decodeHex("906000526020600020905b815481529060010190"), v)
pt.Insert(decodeHex("820191906000526020600020905b815481529060"), v)
pt.Insert(decodeHex("6020600020905b81548152906001019060200180"), v)
pt.Insert(decodeHex("60200191505060405180910390f35b"), v)
pt.Insert(decodeHex("6000526020600020905b81548152906001019060"), v)
pt.Insert(decodeHex("600020905b815481529060010190602001808311"), v)
pt.Insert(decodeHex("57820191906000526020600020905b8154815290"), v)
pt.Insert(decodeHex("526020600020905b815481529060010190602001"), v)
pt.Insert(decodeHex("20600020905b8154815290600101906020018083"), v)
pt.Insert(decodeHex("0191906000526020600020905b81548152906001"), v)
pt.Insert(decodeHex("00526020600020905b8154815290600101906020"), v)
pt.Insert(decodeHex("0020905b81548152906001019060200180831161"), v)
pt.Insert(decodeHex("50505060405180910390"), v)
pt.Insert(decodeHex("57823582600050559160200191906001019061"), v)
pt.Insert(decodeHex("0191906000526020600020905b81"), v)
pt.Insert(decodeHex("602001600020600050"), v)
pt.Insert(decodeHex("a060020a033316600090815261"), v)
pt.Insert(decodeHex("04602084601f0104600302600f01f15090"), v)
pt.Insert(decodeHex("ffff168152602001908152602001600020600050"), v)
pt.Insert(decodeHex("006004602084601f0104600302600f01f1509050"), v)
pt.Insert(decodeHex("906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b"), v)
pt.Insert(decodeHex("9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681"), v)
pt.Insert(decodeHex("81815233600160a060020a031682526001602090815260409283902080549182"), v)
pt.Insert(decodeHex("6101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60"), v)
pt.Insert(decodeHex("60606040526000357c0100000000000000000000000000000000000000000000"), v)
pt.Insert(decodeHex("606040526000357c010000000000000000000000000000000000000000000000"), v)
pt.Insert(decodeHex("6040526000357c01000000000000000000000000000000000000000000000000"), v)
pt.Insert(decodeHex("565b60405180806020018281038252838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f15090500192"), v)
pt.Insert(decodeHex("54906101000a900473ffffffffffffffffffffffffffffffffffffffff168156"), v)
pt.Insert(decodeHex("526000357c010000000000000000000000000000000000000000000000000000"), v)
pt.Insert(decodeHex("40526000357c0100000000000000000000000000000000000000000000000000"), v)
pt.Insert(decodeHex("018367ffffffffffffffff16815260200150600360005060003373ffffffffff"), v)
pt.Insert(decodeHex("20905b81548152906001019060200180831161"), v)
pt.Insert(decodeHex("0052602060002090"), v)
pt.Insert(decodeHex("a060020a033316600090815260"), v)
pt.Insert(decodeHex("9081101561000257"), v)
pt.Insert(decodeHex("0000000000000000000000"), v)
pt.Insert(decodeHex("200191505060405180910390f35b"), v)
pt.Insert(decodeHex("ff168152602001908152602001600020600050"), v)
pt.Insert(decodeHex("6004602084601f0104600302600f01f1509050"), v)
pt.Insert(decodeHex("0160a060020a033316"), v)
pt.Insert(decodeHex("91906000526020600020905b81"), v)
pt.Insert(decodeHex("602084601f0104600302600f01f15090"), v)
pt.Insert(decodeHex("546802b5e3af16b187ff"), v)
pt.Insert(decodeHex("905b81548152906001019060200180831161"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16"), v)
pt.Insert(decodeHex("ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392"), v)
pt.Insert(decodeHex("ffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290"), v)
pt.Insert(decodeHex("ffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092"), v)
pt.Insert(decodeHex("ffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201"), v)
pt.Insert(decodeHex("ffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191"), v)
pt.Insert(decodeHex("ffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181"), v)
pt.Insert(decodeHex("ffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190"), v)
pt.Insert(decodeHex("ff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191819084"), v)
pt.Insert(decodeHex("f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051906020019080838382906000600460208460"), v)
pt.Insert(decodeHex("f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060"), v)
pt.Insert(decodeHex("935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795"), v)
pt.Insert(decodeHex("9250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150805190602001908083"), v)
pt.Insert(decodeHex("918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302"), v)
pt.Insert(decodeHex("915080519060200190808383829060006004602084601f0104600302600f01f1"), v)
pt.Insert(decodeHex("915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b604080519182525190819003"), v)
pt.Insert(decodeHex("910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051906020019080838382906000600460"), v)
pt.Insert(decodeHex("90f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084"), v)
pt.Insert(decodeHex("90935290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077"), v)
pt.Insert(decodeHex("9081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f1"), v)
pt.Insert(decodeHex("90815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035"), v)
pt.Insert(decodeHex("90808383829060006004602084601f0104600302600f01f15090509081019060"), v)
pt.Insert(decodeHex("906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffff"), v)
pt.Insert(decodeHex("90602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040"), v)
pt.Insert(decodeHex("9060200190808383829060006004602084601f0104600302600f01f150905090"), v)
pt.Insert(decodeHex("9060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190"), v)
pt.Insert(decodeHex("9060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190840183"), v)
pt.Insert(decodeHex("9060006004602084601f0104600302600f01f150905090810190601f16801561"), v)
pt.Insert(decodeHex("9060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281"), v)
pt.Insert(decodeHex("9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673"), v)
pt.Insert(decodeHex("9050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150805190602001"), v)
pt.Insert(decodeHex("900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffff"), v)
pt.Insert(decodeHex("900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f15090"), v)
pt.Insert(decodeHex("84601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151"), v)
pt.Insert(decodeHex("8383829060006004602084601f0104600302600f01f150905090810190601f16"), v)
pt.Insert(decodeHex("8383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020"), v)
pt.Insert(decodeHex("83829060006004602084601f0104600302600f01f150905090810190601f1680"), v)
pt.Insert(decodeHex("83829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001"), v)
pt.Insert(decodeHex("838181518152602001915080519060200190808383829060006004602084601f"), v)
pt.Insert(decodeHex("838181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b604080"), v)
pt.Insert(decodeHex("836020036101000a031916815260200191505b509250505060405180910390f3"), v)
pt.Insert(decodeHex("829060006004602084601f0104600302600f01f150905090810190601f168015"), v)
pt.Insert(decodeHex("829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182"), v)
pt.Insert(decodeHex("8281038252838181518152602001915080519060200190808383829060006004"), v)
pt.Insert(decodeHex("82565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191819084018382808284"), v)
pt.Insert(decodeHex("8252838181518152602001915080519060200190808383829060006004602084"), v)
pt.Insert(decodeHex("8252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f010460030260"), v)
pt.Insert(decodeHex("820380516001836020036101000a031916815260200191505b50925050506040"), v)
pt.Insert(decodeHex("81900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150"), v)
pt.Insert(decodeHex("8181518152602001915080519060200190808383829060006004602084601f01"), v)
pt.Insert(decodeHex("8181518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051"), v)
pt.Insert(decodeHex("8152602001915080519060200190808383829060006004602084601f01046003"), v)
pt.Insert(decodeHex("8152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252"), v)
pt.Insert(decodeHex("815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594"), v)
pt.Insert(decodeHex("81518152602001915080519060200190808383829060006004602084601f0104"), v)
pt.Insert(decodeHex("81518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b6040805191"), v)
pt.Insert(decodeHex("8103825283818151815260200191508051906020019080838382906000600460"), v)
pt.Insert(decodeHex("80910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004"), v)
pt.Insert(decodeHex("808383829060006004602084601f0104600302600f01f150905090810190601f"), v)
pt.Insert(decodeHex("808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060"), v)
pt.Insert(decodeHex("80820380516001836020036101000a031916815260200191505b509250505060"), v)
pt.Insert(decodeHex("805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494"), v)
pt.Insert(decodeHex("8051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f010460"), v)
pt.Insert(decodeHex("80519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b6040805191825251908190036020"), v)
pt.Insert(decodeHex("8051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190840183828082843750949550"), v)
pt.Insert(decodeHex("80516001836020036101000a031916815260200191505b509250505060405180"), v)
pt.Insert(decodeHex("8035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190840183828082843750949550505050505060"), v)
pt.Insert(decodeHex("73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffff"), v)
pt.Insert(decodeHex("6c600435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff1916815560018101805484825590845282"), v)
pt.Insert(decodeHex("67ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093"), v)
pt.Insert(decodeHex("6101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffff"), v)
pt.Insert(decodeHex("61006c600435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff191681556001810180548482559084"), v)
pt.Insert(decodeHex("60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f01"), v)
pt.Insert(decodeHex("60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191819084018382808284375094"), v)
pt.Insert(decodeHex("60405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060"), v)
pt.Insert(decodeHex("60248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191819084018382808284375094955050505050"), v)
pt.Insert(decodeHex("602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381"), v)
pt.Insert(decodeHex("602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181908401838280828437509495505050"), v)
pt.Insert(decodeHex("6020036101000a031916815260200191505b509250505060405180910390f35b"), v)
pt.Insert(decodeHex("602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051"), v)
pt.Insert(decodeHex("602001915080519060200190808383829060006004602084601f010460030260"), v)
pt.Insert(decodeHex("602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b604080519182525190"), v)
pt.Insert(decodeHex("60200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090"), v)
pt.Insert(decodeHex("60200190808383829060006004602084601f0104600302600f01f15090509081"), v)
pt.Insert(decodeHex("60200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f3"), v)
pt.Insert(decodeHex("6020018281038252838181518152602001915080519060200190808383829060"), v)
pt.Insert(decodeHex("601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181"), v)
pt.Insert(decodeHex("600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080"), v)
pt.Insert(decodeHex("6004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252"), v)
pt.Insert(decodeHex("600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001"), v)
pt.Insert(decodeHex("6001836020036101000a031916815260200191505b5092505050604051809103"), v)
pt.Insert(decodeHex("60010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191819084018382"), v)
pt.Insert(decodeHex("60006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103"), v)
pt.Insert(decodeHex("6000600050600060016000506000868152602001908152602001600020600050"), v)
pt.Insert(decodeHex("5b61006c600435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff1916815560018101805484825590"), v)
pt.Insert(decodeHex("5b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f"), v)
pt.Insert(decodeHex("5b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190840183828082843750"), v)
pt.Insert(decodeHex("5780820380516001836020036101000a031916815260200191505b5092505050"), v)
pt.Insert(decodeHex("565b61006c600435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff19168155600181018054848255"), v)
pt.Insert(decodeHex("565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181908401838280828437"), v)
pt.Insert(decodeHex("54906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ff"), v)
pt.Insert(decodeHex("5467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460449490"), v)
pt.Insert(decodeHex("5290815220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590"), v)
pt.Insert(decodeHex("5283818151815260200191508051906020019080838382906000600460208460"), v)
pt.Insert(decodeHex("52602001915080519060200190808383829060006004602084601f0104600302"), v)
pt.Insert(decodeHex("52602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b6040805191825251"), v)
pt.Insert(decodeHex("52519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f"), v)
pt.Insert(decodeHex("5220805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100779590359460"), v)
pt.Insert(decodeHex("51918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f01046003"), v)
pt.Insert(decodeHex("519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01"), v)
pt.Insert(decodeHex("519060200190808383829060006004602084601f0104600302600f01f1509050"), v)
pt.Insert(decodeHex("519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b604080519182525190819003602001"), v)
pt.Insert(decodeHex("518152602001915080519060200190808383829060006004602084601f010460"), v)
pt.Insert(decodeHex("518152602001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b604080519182"), v)
pt.Insert(decodeHex("5180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150805190602001908083838290600060"), v)
pt.Insert(decodeHex("51602060248035600481810135601f81018590048502860185019096528585526100779590359460449490939290920191819084018382808284375094955050"), v)
pt.Insert(decodeHex("516001836020036101000a031916815260200191505b50925050506040518091"), v)
pt.Insert(decodeHex("509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051906020"), v)
pt.Insert(decodeHex("5080519060200190808383829060006004602084601f0104600302600f01f150"), v)
pt.Insert(decodeHex("5080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360"), v)
pt.Insert(decodeHex("5060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150805190602001908083838290"), v)
pt.Insert(decodeHex("505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051906020019080838382"), v)
pt.Insert(decodeHex("50505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383"), v)
pt.Insert(decodeHex("50019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190"), v)
pt.Insert(decodeHex("408051918252519081900360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104"), v)
pt.Insert(decodeHex("408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181908401838280828437509495"), v)
pt.Insert(decodeHex("405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051906020019080838382906000"), v)
pt.Insert(decodeHex("248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181908401838280828437509495505050505050"), v)
pt.Insert(decodeHex("2084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181"), v)
pt.Insert(decodeHex("20805467ffffffffffffffff169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044"), v)
pt.Insert(decodeHex("2060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190840183828082843750949550505050"), v)
pt.Insert(decodeHex("2002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180"), v)
pt.Insert(decodeHex("2001915080519060200190808383829060006004602084601f0104600302600f"), v)
pt.Insert(decodeHex("2001915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081"), v)
pt.Insert(decodeHex("200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f15090509081"), v)
pt.Insert(decodeHex("200190808383829060006004602084601f0104600302600f01f1509050908101"), v)
pt.Insert(decodeHex("200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b"), v)
pt.Insert(decodeHex("1f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60405180806020018281038252838181518152"), v)
pt.Insert(decodeHex("169060010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181908401"), v)
pt.Insert(decodeHex("0f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051"), v)
pt.Insert(decodeHex("0a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffff"), v)
pt.Insert(decodeHex("0473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffff"), v)
pt.Insert(decodeHex("04602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283"), v)
pt.Insert(decodeHex("04600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020"), v)
pt.Insert(decodeHex("0390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150805190602001908083838290600060046020"), v)
pt.Insert(decodeHex("0382528381815181526020019150805190602001908083838290600060046020"), v)
pt.Insert(decodeHex("0380516001836020036101000a031916815260200191505b5092505050604051"), v)
pt.Insert(decodeHex("0360200190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f1509050"), v)
pt.Insert(decodeHex("0302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191"), v)
pt.Insert(decodeHex("02808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080"), v)
pt.Insert(decodeHex("02600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150"), v)
pt.Insert(decodeHex("01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382528381815181526020019150805190"), v)
pt.Insert(decodeHex("019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260200191508051906020019080"), v)
pt.Insert(decodeHex("01915080519060200190808383829060006004602084601f0104600302600f01"), v)
pt.Insert(decodeHex("01915080519060200190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b6040805191825251908190"), v)
pt.Insert(decodeHex("0190f35b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f1509050908101"), v)
pt.Insert(decodeHex("0190808383829060006004602084601f0104600302600f01f150905090810190"), v)
pt.Insert(decodeHex("0190602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b60"), v)
pt.Insert(decodeHex("01836020036101000a031916815260200191505b509250505060405180910390"), v)
pt.Insert(decodeHex("0182810382528381815181526020019150805190602001908083838290600060"), v)
pt.Insert(decodeHex("0182565b60408051602060248035600481810135601f810185900485028601850190965285855261007795903594604494909392909201918190840183828082"), v)
pt.Insert(decodeHex("0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b6040518080602001828103825283818151815260"), v)
pt.Insert(decodeHex("010182565b60408051602060248035600481810135601f8101859004850286018501909652858552610077959035946044949093929092019181908401838280"), v)
pt.Insert(decodeHex("01000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffff"), v)
pt.Insert(decodeHex("006c600435600160a060020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff19168155600181018054848255908452"), v)
pt.Insert(decodeHex("006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051808060200182810382"), v)
pt.Insert(decodeHex("0060005060006001600050600086815260200190815260200160002060005060"), v)
pt.Insert(decodeHex("000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffff"), v)
mf2 := NewMatchFinder2(&pt)
data := decodeHex("606060405236156100615760e060020a60003504630a936fe5811461006357806315853113146100d857806339bfc4a11461010b5780636939cd971461014357" +
"8063c36948b5146101d3578063de6f24bb14610205578063fe1e3eca146102f5575b005b6040805160208181018352600080835233600160a060020a03168152" +
"60018252839020805484518184028101840190955280855261036094928301828280156100ce57602002820191906000526020600020905b8160005054815260" +
"200190600101908083116100b7575b5050505050905090565b6103aa600435602435600160205260008281526040902080548290811015610002575060009081" +
"52602090200154905081565b6103aa600435600160a060020a03331660009081526020818152604080832084845290915290205467ffffffffffffffff165b91" +
"9050565b6103bc60043560408051602081810183526000808352600160a060020a0333168152808252838120858252825283902060010180548451601f820184" +
"900484028101840190955280855292939290918301828280156101c757820191906000526020600020905b8154815290600101906020018083116101aa578290" +
"03601f168201915b5050505050905061013e565b61042a60043560243560006020818152928152604080822090935290815220805467ffffffffffffffff1690" +
"60010182565b60408051602060248035600481810135601f81018590048502860185019096528585526100619590359460449490939290920191819084018382" +
"808284375094955050505050506000600082604051808280519060200190808383829060006004602084601f0104600302600f01f15090910182900390912083" +
"5467ffffffffffffffff191642178455915160018054828255818652939550926020601f91909101047fb10e2d527612073b26eecdfd717e6a320cf44b4afac2" +
"b0732d9fcbe2b7fa0cf690810192821561052a579182015b8281111561052a5782518260005055916020019190600101906102d7565b610061600435600160a0" +
"60020a03331660009081526020818152604080832084845282528220805467ffffffffffffffff19168155600181018054848255908452828420919284926104" +
"9592601f01919091048101905b80821115610522576000815560010161034c565b60405180806020018281038252838181518152602001915080519060200190" +
"602002808383829060006004602084601f0104600302600f01f1509050019250505060405180910390f35b60408051918252519081900360200190f35b604051" +
"80806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600302600f01f150905090810190601f16801561" +
"041c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b604051808367ffffffffffffffff16815260200180" +
"602001828103825283818154815260200191508054801561048557820191906000526020600020905b8154815290600101906020018083116104685782900360" +
"1f168201915b5050935050505060405180910390f35b505050600090505b600160a060020a033316600090815260016020526040902054811015610526576040" +
"6000208054839190839081101561000257600091825260209091200154141561051a576001600050600033600160a060020a0316815260200190815260200160" +
"00206000508181548110156100025760009182526020822001555b60010161049d565b5090565b5050565b5061053692915061034c565b5050600160a060020a" +
"038416600090815260208181526040808320858452825282208354815467ffffffffffffffff191667ffffffffffffffff919091161781556001848101805491" +
"8301805483825581875295859020879694959194601f01919091048101929182156105d257600052602060002091601f016020900482015b828111156105d257" +
"82548255916001019190600101906105b7565b506105de92915061034c565b50505050600160a060020a03841660009081526001602052604090208054839190" +
"61000256")
matches := mf2.FindLongestMatches(data)
for _, m := range matches {
fmt.Printf("%+v, match: [%x]\n", m, data[m.Start:m.End])
}
if len(matches) != 201 {
t.Errorf("expected matches: %d, got %d", 201, len(matches))
}
}
func TestFindMatches8(t *testing.T) {
var pt PatriciaTree
v := []byte{1}
mf2 := NewMatchFinder2(&pt)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("73ffffffffffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffff16"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffff16"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffff16"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff16"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffff16"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffff16"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffff16"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffff16"), v)
pt.Insert(decodeHex("ffffffffffffffffffffff16"), v)
pt.Insert(decodeHex("ffffffffffffffffffff16"), v)
pt.Insert(decodeHex("60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16"), v)
pt.Insert(decodeHex("ffffffffffffffffff16"), v)
pt.Insert(decodeHex("ffffffffffffffff16"), v)
pt.Insert(decodeHex("ffffffffffffff16"), v)
pt.Insert(decodeHex("01000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000"), v)
pt.Insert(decodeHex("81526020019081526020016000208190"), v)
pt.Insert(decodeHex("81526020019081526020016000206000"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff"), v)
pt.Insert(decodeHex("ffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16"), v)
pt.Insert(decodeHex("906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffff"), v)
pt.Insert(decodeHex("9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673"), v)
pt.Insert(decodeHex("900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffff"), v)
pt.Insert(decodeHex("73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffff"), v)
pt.Insert(decodeHex("6101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffff"), v)
pt.Insert(decodeHex("54906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ff"), v)
pt.Insert(decodeHex("0a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffff"), v)
pt.Insert(decodeHex("0473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffff"), v)
pt.Insert(decodeHex("01000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffff"), v)
pt.Insert(decodeHex("000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffff"), v)
pt.Insert(decodeHex("815260016020526040"), v)
pt.Insert(decodeHex("526020019081526020016000208190"), v)
data := decodeHex("60606040523615610103576000357c01000000000000000000000000000000000000000000000000000000009004806311bc5478146103bc578063353d90ec14" +
"6103dd57806343743d93146103fe5780634faa2d541461041f57806350b44712146104405780635c0ecfad1461047d5780635d80c2781461049e578063602a6c" +
"a1146104bf578063806b984f146104d85780638b7bcc86146104f9578063a2fb11751461051a578063a457c2ae14610541578063a59d698614610562578063a5" +
"e01f371461056f578063f000c30914610590578063f18d20be146105b1578063f56f48f2146105be578063f6f0b074146105df578063f961ec87146106005761" +
"0103565b6103ba5b600060006801639e49bba16280003410151561016e57670e398811bec680003404915081503373ffffffffffffffffffffffffffffffffff" +
"ffffff166000670e398811bec680003406604051809050600060405180830381858888f1935050505050610281565b6791b77e5e5d9a0000341015156101d057" +
"670e92596fd62900003404915081503373ffffffffffffffffffffffffffffffffffffffff166000670e92596fd6290000340660405180905060006040518083" +
"0381858888f1935050505050610280565b674c53ecdc18a600003410151561023257670f43fc2c04ee00003404915081503373ffffffffffffffffffffffffff" +
"ffffffffffffff166000670f43fc2c04ee00003406604051809050600060405180830381858888f193505050505061027f565b670ff59ee833b3000034049150" +
"81503373ffffffffffffffffffffffffffffffffffffffff166000670ff59ee833b300003406604051809050600060405180830381858888f19350505050505b" +
"5b5b6007600050543334604051808481526020018373ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140182" +
"8152602001935050505060405180910390206007600050819055506103e88260036000505401046103e86003600050540414151561031b574360066000508190" +
"5550600760005054600a6000508190555042600b600050819055505b600060010260016006600050540140141515610345576001600660005054014060096000" +
"50819055505b600190505b818160ff161115156103b5573360016000506000600360008181505480929190600101919050558152602001908152602001600020" +
"60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908302179055505b600181019050805061034a565b5b5050565b005b6103c7" +
"600450610af4565b6040518082815260200191505060405180910390f35b6103e8600450610b5c565b6040518082815260200191505060405180910390f35b61" +
"0409600450610b00565b6040518082815260200191505060405180910390f35b61042a600450610a65565b6040518082815260200191505060405180910390f3" +
"5b610451600480359060200150610b09565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104" +
"88600450610ad5565b6040518082815260200191505060405180910390f35b6104a9600450610ade565b6040518082815260200191505060405180910390f35b" +
"6104d6600480359060200180359060200150610627565b005b6104e3600450610aba565b6040518082815260200191505060405180910390f35b610504600450" +
"610b65565b6040518082815260200191505060405180910390f35b61052b600480359060200150610b41565b6040518082815260200191505060405180910390f" +
"35b61054c600450610ac3565b6040518082815260200191505060405180910390f35b61056d600450610838565b005b61057a600450610b6e565b604051808281" +
"5260200191505060405180910390f35b61059b600450610acc565b6040518082815260200191505060405180910390f35b6105bc60045061094e565b005b6105c" +
"9600450610aed565b6040518082815260200191505060405180910390f35b6105ea600450610ae7565b6040518082815260200191505060405180910390f35b61" +
"0611600480359060200150610a96565b6040518082815260200191505060405180910390f35b60006000600060009054906101000a900473fffffffffffffffff" +
"fffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561068757" +
"610832565b600860005054846040518082815260200191505060405180910390201415806106b857506000600102600860005054145b156106c257610832565b6" +
"103e860036000505410806106e457506103e860036000505403600560005054115b156106ee57610832565b83600a600050546040518083815260200182815260" +
"200192505050604051809103902091506103e86009600050548318600190040660056000505401905060016000506000828152602001908152602001600020600" +
"09054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000670de0b6b3a7640000" +
"6103e802604051809050600060405180830381858888f19350505050507f909c57d5c6ac08245cf2a6de3900e2b868513fa59099b92b27d8db823d92df9c816040" +
"518082815260200191505060405180910390a180600260005060006004600081815054809291906001019190505581526020019081526020016000206000508190" +
"55506103e860056000828282505401925050819055506000600b60005081905550826008600050819055505b50505050565b600060006000600b60005054141561" +
"084f5761094a565b62015180600b60005054420310156108665761094a565b60006001026008600050819055506000915060056000505490505b60036000505481" +
"1015610916573373ffffffffffffffffffffffffffffffffffffffff166001600050600083815260200190815260200160002060009054906101000a900473ffff" +
"ffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561090857670de0b6b3a76400008201915081505b5b80" +
"80600101915050610881565b3373ffffffffffffffffffffffffffffffffffffffff16600083604051809050600060405180830381858888f19350505050505b50" +
"50565b6000600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ff" +
"ffffffffffffffffffffffffffffffffffffff161415156109ac57610a62565b670de0b6b3a7640000600560005054600360005054030290507f909c57d5c6ac08" +
"245cf2a6de3900e2b868513fa59099b92b27d8db823d92df9c813073ffffffffffffffffffffffffffffffffffffffff1631036040518082815260200191505060" +
"405180910390a13373ffffffffffffffffffffffffffffffffffffffff166000823073ffffffffffffffffffffffffffffffffffffffff16310360405180905060" +
"0060405180830381858888f19350505050505b50565b60006000600b600050541415610a83576105399050610a9356610a92565b600b6000505442039050610a93" +
"565b5b90565b6000816040518082815260200191505060405180910390209050610ab5565b919050565b60066000505481565b60076000505481565b6008600050" +
"5481565b60096000505481565b600a6000505481565b6103e881565b6201518081565b670de0b6b3a764000081565b600b6000505481565b600160005060205280" +
"600052604060002060009150909054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260005060205280600052604060002060" +
"00915090505481565b60036000505481565b60046000505481565b6005600050548156")
matches := mf2.FindLongestMatches(data)
for _, m := range matches {
fmt.Printf("%+v, match: [%x]\n", m, data[m.Start:m.End])
}
if len(matches) != 144 {
t.Errorf("expected matches: %d, got %d", 144, len(matches))
}
}