From cec3bad373c25ca2c65f41cc438a0d709b230223 Mon Sep 17 00:00:00 2001 From: Jakob Borg Date: Fri, 1 Aug 2014 16:35:37 +0200 Subject: [PATCH] Move calmh/syncthing -> syncthing/syncthing --- Godeps/Godeps.json | 12 +- .../p/go.text/unicode/norm/maketables.go | 212 ++++-------------- .../src/github.com/calmh/xdr/.gitignore | 1 + .../src/github.com/calmh/xdr/.travis.yml | 19 ++ .../src/github.com/calmh/xdr/LICENSE | 19 ++ .../src/github.com/calmh/xdr/README.md | 12 + .../src/github.com/calmh/xdr/encdec_test.go | 25 ++- .../github.com/calmh/xdr/encdec_xdr_test.go | 8 + .../src/github.com/calmh/xdr/xdr_test.go | 6 +- README.md | 10 +- auto/gui.files.go | 2 +- beacon/debug.go | 2 +- build.sh | 2 +- cmd/stindex/main.go | 4 +- cmd/syncthing/gui.go | 14 +- cmd/syncthing/gui_csrf.go | 2 +- cmd/syncthing/main.go | 18 +- cmd/syncthing/usage_report.go | 2 +- config/config.go | 4 +- config/config_test.go | 2 +- discover/debug.go | 2 +- discover/discover.go | 6 +- events/debug.go | 2 +- events/events_test.go | 2 +- files/debug.go | 2 +- files/leveldb.go | 4 +- files/set.go | 4 +- files/set_test.go | 6 +- gui/index.html | 6 +- luhn/luhn_test.go | 2 +- model/blockqueue.go | 2 +- model/debug.go | 2 +- model/model.go | 12 +- model/model_test.go | 4 +- model/puller.go | 12 +- protocol/debug.go | 2 +- protocol/nodeid.go | 2 +- scanner/blockqueue.go | 2 +- scanner/blocks.go | 2 +- scanner/blocks_test.go | 2 +- scanner/debug.go | 2 +- scanner/walk.go | 4 +- scanner/walk_test.go | 2 +- upgrade/upgrade_supported.go | 2 +- upnp/debug.go | 2 +- versioner/debug.go | 2 +- versioner/simple.go | 2 +- 47 files changed, 218 insertions(+), 252 deletions(-) create mode 100644 Godeps/_workspace/src/github.com/calmh/xdr/.gitignore create mode 100644 Godeps/_workspace/src/github.com/calmh/xdr/.travis.yml create mode 100644 Godeps/_workspace/src/github.com/calmh/xdr/LICENSE create mode 100644 Godeps/_workspace/src/github.com/calmh/xdr/README.md diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 9be2f9411..1970ee7da 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -1,5 +1,5 @@ { - "ImportPath": "github.com/calmh/syncthing", + "ImportPath": "github.com/syncthing/syncthing", "GoVersion": "go1.3", "Packages": [ "./cmd/..." @@ -22,13 +22,13 @@ }, { "ImportPath": "code.google.com/p/go.text/transform", - "Comment": "null-88", - "Rev": "1506dcc33592c369c3be7bd30b38f90445b86deb" + "Comment": "null-89", + "Rev": "df15baaf13e3f62b6b7a901e74caa3818a7c0a7c" }, { "ImportPath": "code.google.com/p/go.text/unicode/norm", - "Comment": "null-88", - "Rev": "1506dcc33592c369c3be7bd30b38f90445b86deb" + "Comment": "null-89", + "Rev": "df15baaf13e3f62b6b7a901e74caa3818a7c0a7c" }, { "ImportPath": "code.google.com/p/snappy-go/snappy", @@ -41,7 +41,7 @@ }, { "ImportPath": "github.com/calmh/xdr", - "Rev": "89d756f35ba26bcdd47ca25cf9795b3b8d1e1852" + "Rev": "694859acb207675085232438780db923ceb43e96" }, { "ImportPath": "github.com/juju/ratelimit", diff --git a/Godeps/_workspace/src/code.google.com/p/go.text/unicode/norm/maketables.go b/Godeps/_workspace/src/code.google.com/p/go.text/unicode/norm/maketables.go index cd40c9d46..4290da30b 100644 --- a/Godeps/_workspace/src/code.google.com/p/go.text/unicode/norm/maketables.go +++ b/Godeps/_workspace/src/code.google.com/p/go.text/unicode/norm/maketables.go @@ -11,7 +11,6 @@ package main import ( - "bufio" "bytes" "flag" "fmt" @@ -24,6 +23,8 @@ import ( "strconv" "strings" "unicode" + + "code.google.com/p/go.text/internal/ucd" ) func main() { @@ -63,31 +64,7 @@ var localFiles = flag.Bool("local", var logger = log.New(os.Stderr, "", log.Lshortfile) -// UnicodeData.txt has form: -// 0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;; -// 007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A -// See http://unicode.org/reports/tr44/ for full explanation -// The fields: -const ( - FCodePoint = iota - FName - FGeneralCategory - FCanonicalCombiningClass - FBidiClass - FDecompMapping - FDecimalValue - FDigitValue - FNumericValue - FBidiMirrored - FUnicode1Name - FISOComment - FSimpleUppercaseMapping - FSimpleLowercaseMapping - FSimpleTitlecaseMapping - NumField - - MaxChar = 0x10FFFF // anything above this shouldn't exist -) +const MaxChar = 0x10FFFF // anything above this shouldn't exist // Quick Check properties of runes allow us to quickly // determine whether a rune may occur in a normal form. @@ -232,7 +209,7 @@ func openReader(file string) (input io.ReadCloser) { return } -func parseDecomposition(s string, skipfirst bool) (a []rune, e error) { +func parseDecomposition(s string, skipfirst bool) (a []rune, err error) { decomp := strings.Split(s, " ") if len(decomp) > 0 && skipfirst { decomp = decomp[1:] @@ -247,56 +224,31 @@ func parseDecomposition(s string, skipfirst bool) (a []rune, e error) { return a, nil } -func parseCharacter(line string) { - field := strings.Split(line, ";") - if len(field) != NumField { - logger.Fatalf("%5s: %d fields (expected %d)\n", line, len(field), NumField) - } - x, err := strconv.ParseUint(field[FCodePoint], 16, 64) - point := int(x) - if err != nil { - logger.Fatalf("%.5s...: %s", line, err) - } - if point == 0 { - return // not interesting and we use 0 as unset - } - if point > MaxChar { - logger.Fatalf("%5s: Rune %X > MaxChar (%X)", line, point, MaxChar) - return - } - state := SNormal - switch { - case strings.Index(field[FName], ", First>") > 0: - state = SFirst - case strings.Index(field[FName], ", Last>") > 0: - state = SLast - } - firstChar := lastChar + 1 - lastChar = rune(point) - if state != SLast { - firstChar = lastChar - } - x, err = strconv.ParseUint(field[FCanonicalCombiningClass], 10, 64) - if err != nil { - logger.Fatalf("%U: bad ccc field: %s", int(x), err) - } - ccc := uint8(x) - decmap := field[FDecompMapping] - exp, e := parseDecomposition(decmap, false) - isCompat := false - if e != nil { - if len(decmap) > 0 { - exp, e = parseDecomposition(decmap, true) - if e != nil { - logger.Fatalf(`%U: bad decomp |%v|: "%s"`, int(x), decmap, e) +func loadUnicodeData() { + f := openReader("UnicodeData.txt") + defer f.Close() + p := ucd.New(f) + for p.Next() { + r := p.Rune(ucd.CodePoint) + char := &chars[r] + + char.ccc = uint8(p.Uint(ucd.CanonicalCombiningClass)) + decmap := p.String(ucd.DecompMapping) + + exp, err := parseDecomposition(decmap, false) + isCompat := false + if err != nil { + if len(decmap) > 0 { + exp, err = parseDecomposition(decmap, true) + if err != nil { + logger.Fatalf(`%U: bad decomp |%v|: "%s"`, r, decmap, err) + } + isCompat = true } - isCompat = true } - } - for i := firstChar; i <= lastChar; i++ { - char := &chars[i] - char.name = field[FName] - char.codePoint = i + + char.name = p.String(ucd.Name) + char.codePoint = r char.forms[FCompatibility].decomp = exp if !isCompat { char.forms[FCanonical].decomp = exp @@ -306,24 +258,9 @@ func parseCharacter(line string) { if len(decmap) > 0 { char.forms[FCompatibility].decomp = exp } - char.ccc = ccc - char.state = SMissing - if i == lastChar { - char.state = state - } } - return -} - -func loadUnicodeData() { - f := openReader("UnicodeData.txt") - defer f.Close() - scanner := bufio.NewScanner(f) - for scanner.Scan() { - parseCharacter(scanner.Text()) - } - if scanner.Err() != nil { - logger.Fatal(scanner.Err()) + if err := p.Err(); err != nil { + logger.Fatal(err) } } @@ -354,47 +291,22 @@ func compactCCC() { } } -var singlePointRe = regexp.MustCompile(`^([0-9A-F]+) *$`) - // CompositionExclusions.txt has form: // 0958 # ... // See http://unicode.org/reports/tr44/ for full explanation -func parseExclusion(line string) int { - comment := strings.Index(line, "#") - if comment >= 0 { - line = line[0:comment] - } - if len(line) == 0 { - return 0 - } - matches := singlePointRe.FindStringSubmatch(line) - if len(matches) != 2 { - logger.Fatalf("%s: %d matches (expected 1)\n", line, len(matches)) - } - point, err := strconv.ParseUint(matches[1], 16, 64) - if err != nil { - logger.Fatalf("%.5s...: %s", line, err) - } - return int(point) -} - func loadCompositionExclusions() { f := openReader("CompositionExclusions.txt") defer f.Close() - scanner := bufio.NewScanner(f) - for scanner.Scan() { - point := parseExclusion(scanner.Text()) - if point == 0 { - continue - } - c := &chars[point] + p := ucd.New(f) + for p.Next() { + c := &chars[p.Rune(0)] if c.excludeInComp { logger.Fatalf("%U: Duplicate entry in exclusions.", c.codePoint) } c.excludeInComp = true } - if scanner.Err() != nil { - log.Fatal(scanner.Err()) + if e := p.Err(); e != nil { + logger.Fatal(e) } } @@ -988,8 +900,6 @@ func verifyComputed() { } } -var qcRe = regexp.MustCompile(`([0-9A-F\.]+) *; (NF.*_QC); ([YNM]) #.*`) - // Use values in DerivedNormalizationProps.txt to compare against the // values we computed. // DerivedNormalizationProps.txt has form: @@ -999,27 +909,13 @@ var qcRe = regexp.MustCompile(`([0-9A-F\.]+) *; (NF.*_QC); ([YNM]) #.*`) func testDerived() { f := openReader("DerivedNormalizationProps.txt") defer f.Close() - scanner := bufio.NewScanner(f) - for scanner.Scan() { - line := scanner.Text() - qc := qcRe.FindStringSubmatch(line) - if qc == nil { - continue - } - rng := strings.Split(qc[1], "..") - i, err := strconv.ParseUint(rng[0], 16, 64) - if err != nil { - log.Fatal(err) - } - j := i - if len(rng) > 1 { - j, err = strconv.ParseUint(rng[1], 16, 64) - if err != nil { - log.Fatal(err) - } - } + p := ucd.New(f) + for p.Next() { + r := p.Rune(0) + c := &chars[r] + var ftype, mode int - qt := strings.TrimSpace(qc[2]) + qt := p.String(1) switch qt { case "NFC_QC": ftype, mode = FCanonical, MComposed @@ -1030,10 +926,10 @@ func testDerived() { case "NFKD_QC": ftype, mode = FCompatibility, MDecomposed default: - log.Fatalf(`Unexpected quick check type "%s"`, qt) + continue } var qr QCResult - switch qc[3] { + switch p.String(2) { case "Y": qr = QCYes case "N": @@ -1041,27 +937,15 @@ func testDerived() { case "M": qr = QCMaybe default: - log.Fatalf(`Unexpected quick check value "%s"`, qc[3]) + log.Fatalf(`Unexpected quick check value "%s"`, p.String(2)) } - var lastFailed bool - // Verify current - for ; i <= j; i++ { - c := &chars[int(i)] - c.forms[ftype].verified[mode] = true - curqr := c.forms[ftype].quickCheck[mode] - if curqr != qr { - if !lastFailed { - logger.Printf("%s: %.4X..%.4X -- %s\n", - qt, int(i), int(j), line[0:50]) - } - logger.Printf("%U: FAILED %s (was %v need %v)\n", - int(i), qt, curqr, qr) - lastFailed = true - } + if got := c.forms[ftype].quickCheck[mode]; got != qr { + logger.Printf("%U: FAILED %s (was %v need %v)\n", r, qt, got, qr) } + c.forms[ftype].verified[mode] = true } - if scanner.Err() != nil { - logger.Fatal(scanner.Err()) + if err := p.Err(); err != nil { + logger.Fatal(err) } // Any unspecified value must be QCYes. Verify this. for i, c := range chars { diff --git a/Godeps/_workspace/src/github.com/calmh/xdr/.gitignore b/Godeps/_workspace/src/github.com/calmh/xdr/.gitignore new file mode 100644 index 000000000..2d830686d --- /dev/null +++ b/Godeps/_workspace/src/github.com/calmh/xdr/.gitignore @@ -0,0 +1 @@ +coverage.out diff --git a/Godeps/_workspace/src/github.com/calmh/xdr/.travis.yml b/Godeps/_workspace/src/github.com/calmh/xdr/.travis.yml new file mode 100644 index 000000000..a7c4c07b3 --- /dev/null +++ b/Godeps/_workspace/src/github.com/calmh/xdr/.travis.yml @@ -0,0 +1,19 @@ +language: go +go: +- tip + +install: +- export PATH=$PATH:$HOME/gopath/bin +- go get code.google.com/p/go.tools/cmd/cover +- go get github.com/mattn/goveralls + +script: +- ./generate.sh +- go test -coverprofile=coverage.out + +after_success: +- goveralls -coverprofile=coverage.out -service=travis-ci -package=calmh/xdr -repotoken="$COVERALLS_TOKEN" + +env: + global: + secure: SmgnrGfp2zLrA44ChRMpjPeujubt9veZ8Fx/OseMWECmacyV5N/TuDhzIbwo6QwV4xB0sBacoPzvxQbJRVjNKsPiSu72UbcQmQ7flN4Tf7nW09tSh1iW8NgrpBCq/3UYLoBu2iPBEBKm93IK0aGNAKs6oEkB0fU27iTVBwiTXOY= diff --git a/Godeps/_workspace/src/github.com/calmh/xdr/LICENSE b/Godeps/_workspace/src/github.com/calmh/xdr/LICENSE new file mode 100644 index 000000000..8fdf7b0ad --- /dev/null +++ b/Godeps/_workspace/src/github.com/calmh/xdr/LICENSE @@ -0,0 +1,19 @@ +Copyright (C) 2014 Jakob Borg. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +- The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. diff --git a/Godeps/_workspace/src/github.com/calmh/xdr/README.md b/Godeps/_workspace/src/github.com/calmh/xdr/README.md new file mode 100644 index 000000000..dfc2e3f6b --- /dev/null +++ b/Godeps/_workspace/src/github.com/calmh/xdr/README.md @@ -0,0 +1,12 @@ +xdr +=== + +[![Build Status](https://img.shields.io/travis/calmh/xdr.svg?style=flat)](https://travis-ci.org/calmh/xdr) +[![Coverage Status](https://img.shields.io/coveralls/calmh/xdr.svg?style=flat)](https://coveralls.io/r/calmh/xdr?branch=master) +[![API Documentation](http://img.shields.io/badge/api-Godoc-blue.svg?style=flat)](http://godoc.org/github.com/calmh/xdr) +[![MIT License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](http://opensource.org/licenses/MIT) + +This is an XDR encoding/decoding library. It uses code generation and +not reflection. It supports the IPDR bastardized XDR format when built +with `-tags ipdr`. + diff --git a/Godeps/_workspace/src/github.com/calmh/xdr/encdec_test.go b/Godeps/_workspace/src/github.com/calmh/xdr/encdec_test.go index db122db72..eb42705c9 100644 --- a/Godeps/_workspace/src/github.com/calmh/xdr/encdec_test.go +++ b/Godeps/_workspace/src/github.com/calmh/xdr/encdec_test.go @@ -5,8 +5,12 @@ package xdr_test import ( "bytes" + "math/rand" + "reflect" "testing" "testing/quick" + + "github.com/calmh/xdr" ) // Contains all supported types @@ -22,6 +26,25 @@ type TestStruct struct { UI64 uint64 BS []byte S string + C Opaque +} + +type Opaque [32]byte + +func (u *Opaque) encodeXDR(w *xdr.Writer) (int, error) { + return w.WriteRaw(u[:]) +} + +func (u *Opaque) decodeXDR(r *xdr.Reader) (int, error) { + return r.ReadRaw(u[:]) +} + +func (Opaque) Generate(rand *rand.Rand, size int) reflect.Value { + var u Opaque + for i := range u[:] { + u[i] = byte(rand.Int()) + } + return reflect.ValueOf(u) } func TestEncDec(t *testing.T) { @@ -39,7 +62,7 @@ func TestEncDec(t *testing.T) { t0.I32 != t1.I32 || t0.UI32 != t1.UI32 || t0.I64 != t1.I64 || t0.UI64 != t1.UI64 || bytes.Compare(t0.BS, t1.BS) != 0 || - t0.S != t1.S { + t0.S != t1.S || t0.C != t1.C { t.Logf("%#v", t0) t.Logf("%#v", t1) return false diff --git a/Godeps/_workspace/src/github.com/calmh/xdr/encdec_xdr_test.go b/Godeps/_workspace/src/github.com/calmh/xdr/encdec_xdr_test.go index ffc49e04e..35bd59af5 100644 --- a/Godeps/_workspace/src/github.com/calmh/xdr/encdec_xdr_test.go +++ b/Godeps/_workspace/src/github.com/calmh/xdr/encdec_xdr_test.go @@ -52,6 +52,8 @@ TestStruct Structure: \ S (variable length) \ / / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| Opaque | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ struct TestStruct { @@ -66,6 +68,7 @@ struct TestStruct { unsigned hyper UI64; opaque BS<>; string S<>; + Opaque C; } */ @@ -98,6 +101,10 @@ func (o TestStruct) encodeXDR(xw *xdr.Writer) (int, error) { xw.WriteUint64(o.UI64) xw.WriteBytes(o.BS) xw.WriteString(o.S) + _, err := o.C.encodeXDR(xw) + if err != nil { + return xw.Tot(), err + } return xw.Tot(), xw.Error() } @@ -124,5 +131,6 @@ func (o *TestStruct) decodeXDR(xr *xdr.Reader) error { o.UI64 = xr.ReadUint64() o.BS = xr.ReadBytes() o.S = xr.ReadString() + (&o.C).decodeXDR(xr) return xr.Error() } diff --git a/Godeps/_workspace/src/github.com/calmh/xdr/xdr_test.go b/Godeps/_workspace/src/github.com/calmh/xdr/xdr_test.go index b9b248b90..bfc4bf8dd 100644 --- a/Godeps/_workspace/src/github.com/calmh/xdr/xdr_test.go +++ b/Godeps/_workspace/src/github.com/calmh/xdr/xdr_test.go @@ -67,7 +67,7 @@ func TestReadBytesMaxInto(t *testing.T) { } } -func TestReadBytesMaxIntoNil(t *testing.T) { +func TestReadStringMax(t *testing.T) { for tot := 42; tot < 72; tot++ { for max := 0; max < 128; max++ { var b = new(bytes.Buffer) @@ -77,8 +77,8 @@ func TestReadBytesMaxIntoNil(t *testing.T) { var toWrite = make([]byte, tot) w.WriteBytes(toWrite) - var bs = r.ReadBytesMaxInto(max, nil) - var read = len(bs) + var str = r.ReadStringMax(max) + var read = len(str) if max == 0 || tot <= max { if read != tot { diff --git a/README.md b/README.md index 1ac2ab4ce..f1c70df58 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ syncthing ========= -[![Build Status](https://img.shields.io/travis/calmh/syncthing.svg?style=flat)](https://travis-ci.org/calmh/syncthing) -[![Coverage Status](https://img.shields.io/coveralls/calmh/syncthing.svg?style=flat)](https://coveralls.io/r/calmh/syncthing?branch=master) -[![API Documentation](http://img.shields.io/badge/api-Godoc-blue.svg?style=flat)](http://godoc.org/github.com/calmh/syncthing) +[![Build Status](https://img.shields.io/travis/syncthing/syncthing.svg?style=flat)](https://travis-ci.org/syncthing/syncthing) +[![Coverage Status](https://img.shields.io/coveralls/syncthing/syncthing.svg?style=flat)](https://coveralls.io/r/syncthing/syncthing?branch=master) +[![API Documentation](http://img.shields.io/badge/api-Godoc-blue.svg?style=flat)](http://godoc.org/github.com/syncthing/syncthing) [![MIT License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](http://opensource.org/licenses/MIT) This is the `syncthing` project. The following are the project goals: @@ -12,7 +12,7 @@ This is the `syncthing` project. The following are the project goals: number of collaborating nodes. The protocol should be well defined, unambiguous, easily understood, free to use, efficient, secure and language neutral. This is the [Block Exchange - Protocol](https://github.com/calmh/syncthing/blob/master/protocol/PROTOCOL.md). + Protocol](https://github.com/syncthing/syncthing/blob/master/protocol/PROTOCOL.md). 2. Provide the reference implementation to demonstrate the usability of said protocol. This is the `syncthing` utility. It is the hope that @@ -50,4 +50,4 @@ under the [Creative Commons Attribution 4.0 International License](http://creativecommons.org/licenses/by/4.0/). All code is licensed under the [MIT -License](https://github.com/calmh/syncthing/blob/master/LICENSE). +License](https://github.com/syncthing/syncthing/blob/master/LICENSE). diff --git a/auto/gui.files.go b/auto/gui.files.go index c862d4048..049ddf214 100644 --- a/auto/gui.files.go +++ b/auto/gui.files.go @@ -73,7 +73,7 @@ func init() { bs, _ = ioutil.ReadAll(gr) Assets["favicon.png"] = bs - bs, _ = hex.DecodeString("1f8b080000096e8800ffec7d697bdc36d2e0f7fc0ab82787342b764b8ee3995524edea7026ca61eb91e4c966f3e49d074da29b8848820640c93d8ae6b7bf5500efa3c9564bb6e69d7cb0d524ae42a16e00c5bd67276f8e2f7f3e7b457c1d06079fec3d739c4f2613722ce285e4735f938de34df27c7be705f98e5e89293912724e68e4418d484b3e4db4908a6c28c688f619397ef3faf2fcf4e8ede59bf30b32e301db1c63778741404c778a48a698bc66de98bc558c881934e38a289148971157788cc0e35c5c3319318f4c173018f9f1f4d2517a1130ec2be02e8b140e473571a174cac84c2400128f0c0c3f9c1ebf7a7df1ca0c3ffec4716056383912d068be3f62d188447387c6f1fe482d2217868fe6e6958b331241c0e4fee8222b39d632181137a04aed8fb05220e8d508bb64d43bf88490bd90694a5c9f4ac5f4fe28d133e7afa3a2c0d73a76d8bb845fef8ffe9ff3f6d03916614c359f060cba85115904ad4e5fed336fce4aed221ab2fdd1356737b190ba54f5867bdadff7d835a0c1310f5b3071ae390d1ce5d280edef8cb71b1d794cb992c79a8ba8d457a31a4db42f64a346c0a32b58b8003006c5da4d34e12ef6e44b36db1fcde8353e8e6340e4c127d840731db0831c89e477727b8bebfc1ad6f7358cb4b17977b737b1b5f2016c675321b4d292c61357a949fe340e79348637a3140ea406e533a62d84e699e8450c93d0ecbdc6c6a68490a9f016e4d6fc2424a69e07003953a1b50877c95fb6e3f75fa7653398b433a3210f16bb64f42d0bae99e62e25af59c2465b247fb1450e25607b8b281a2907a899cf6c17779f983f49f0bffcaff211432ae73c72b48877c9cef82b1656ea8e115827149150310506b86d83e5471605628bfc2822eac25fe03c258020b7c8e818d886330920de00847937b52128101b52b7877ce31d6843ba5a1e20e9344b115fdda5335890eed2bc676f69cfada579cf5e8e85a9901e93167791886af30ac45cd4d0bc4bb6bfaeae74e98de9c6f9aa58f058288e1cb18b34053c795d1f802bed44c299262014743e94796d08ce4182b3a0d51ac2c482248cf2361e577140612d7904b4ce9c6920dcab0c0e206dcbc9408f197de48463c426904e5130a5eed55ca2c4c3518404f0e7d38de75fbedc22cf5f6ce37f3b9b5f573128a9c713b54bbe2c4d3ec3cf4efc9ebc28de67887c0eaf9f67afefeaf302328bc61e05c151a3f380cd00daed82d02bd3dbd92e5e1bcaa7019f23fe71925ff7e32a437026889bf8c5b520cf7888529346ba85134047e4cd6e7cae996378069bde80a0a948831b66b1ff627bbbb527af2158ecfc9f8358e983c21bab90068153c162274069e3ff1b328f53b211d2f7294efff2f22ff1fbcdbc8394af40cbc6202680a40fec9b32f7e5950999fc19681f74ad2694e4b2968026d328b6d9783edecdeb923f035224489929285612fb8069054c456012e286e0524d25a3570af57020a0b964b114d02600129c28d090a0d06fb8f6cb3d5a7a5263f2e749feba86040968ca56e52e27c7bd896141d0c413ab8a3fd93333c4228f5fd715faab6bd06746991fec4da0dcea29b076c8a58881a524414301df45f43ad7f7f41a4bec1f1443d94f8fcd6812805a86ee99a9c7e7d42857ab730c046927080505e4c8b40cb515704f750c672ac1a802d87838cf4a50be8d88922eaa3b079f9c9de77f355a96582b60f4e573d0c18646edefc901c995ee9e21afac339f7b20689df7a015abe35b05946806a3ff0e4885a283566d6dba3b486b64334982d23c32ec947e1ac6ce276e343dae0c07459fc473104bec349a8971c46e4af83115c1b2d4224a55ba7dc8edb0a98eb201f027fc2b56c45a11d6a00353f12a1f6863b33a401909f36011fb68c390fc97e3faec5ac2df241e65b3fe9c852a17104527c033910205c28a5fce350d12f89f490554b13fbabd2d4f176b287d77373a786bdf021192dbcfd2da9fdd55916c069a5814943039097815afe95c3c29624fdc44d5d9d214317f1ad5eb015dcfe7688da2204a1fcabdd4e678f0cae3da02f8eef3680af8d89be6a40e2cae115b53f8472be31784928f1bb228a90069a67190835a5e4390aee72c16b886bd0be77b5e6dc5ea5338f43c82dd81fa177291564588ab48ed8308f963104480951b6631d3031576d9074f8e487ecd3d649b15a006eda12fac7457834077c5bc07ecacbbfba1910fc7e23b89ee611f343ee8a2d393c7c4a1f2138d043c0868319bf5426cbbbb1ffe40d16b2af540329c4175bf079e73dbe36362904e45320c6450ed523b2c8cf5a28f7bb0cf2540ef4d92a05d7a1625a965803f40bd5873a04393dbfa683f7cc3a5d26008dc6c1111050b022ef24d44f88c44cc654a51b9f89aa438253754466858a5b64661aaa0427c06fdcff8fc3442159e8b69e8b8301c2ac0044ee8814550d6aea572c0030b88f9df4987ad6a847a5dc4b5676aedf95f96745aa58e71d947198d80dfc93ce68105f6e5418ebbee01d03eab0bfcb8b484973e468010078934d614f1a92253c6c0dfa0d7180d4a34d88360abbae0ac410b6f5c983b244c701952c0d02c4d2b9998101818d5aec77b93b84a1ebde0a3835ab35206d829689ca8b06ca39018fcc9d432faa09c5c37211a241500b7cdf8fb51cb62565f541e4b0f85695d650e364f0230a481966ba45f21f2ac3f6c58a867e36f930db4bed1b9da2c7a68658897cbf8c141bf391e11ee21bed3113853cb3923e5a2db5b6c728c051bf86b7c7a0286b15942786454db3ed1fdc1bf3f00d8359b7329d755ea414d60c236d6ab5533a65dc572033c043456994117834d8691bc3f55e69b5983f81226f6298f3cf61e0dd246f7032ce5b2c1452c96c6275c32d72cdfefc4040dcfa8f6efeefaba2f5883141e0b625881e3e8fa16c3179aeaa4588356a09bb679de8973e33330c993e82a3206ee5bfba369740fef4b0175c6e8415dd81f6bf5e5d2c84aeb8bf4577f6f8d3e402ab61155070c2652db3310211bb7b7d8ef19932e50149db312177cb6d90eddca9073af95c8dbc13e85ca1f10e6ae929aaf635f814aac727e5da4a6c2201345652eac327ec6d024e7ecc66843546dbd623d50d4cefb3658556e426a91dbf45969c90d0bb4235567c199f652d95584857ebf4284a5ed5586b94229b907d0f79281bd4a90248d65a402eef4c46c61789d739a744f6afdf9daa09a236216f5ccfb1b53f301269c4bf4b5e69d19bb21b872c12f29267f1df3e89a06bc8b7a06a32535741dc5e77d787925a558132ded73f89864310fc4b4cf43fe1bd4a1415bfce321903037bd7fc303a640f3d3e0862ed4eb249c327977d790df5c0384e9f05ba4a3afa385367d4d794491f88e3e1e7a7d11f661f707e13e1e7203ecfc61706bba7a42a8750391780ec6410241fbe2776fc00f7c3333bedf3af8edae4f3bc45404feaec5ff01d9aec684c40d3ac385519a853d9aab5874b2ee22624f2d6bd8b0464a33cb8caea593dbdf87d91d6cf780b34d8e961b5f86663e123de19e610f15fd4815f8f386571f858a5a4d7dc4bbc1f839f87d6fa200acb49f99eac3636757cf6a7dbd164f774992c8f5997bc5fab8fb741e09c908d8ec2157b821a23ec2f258201006f5102b54e9ee292f92d9a67568d0b7597161b7737fe2da5f4fc5990195d9dc414c6dded77c82922e17038acc16788be3d6f0c9ccebf68844bb83443b827db1e42108e4b60d49dc8429263c20dc0756becb833e8336df97ab6fbef5c2ead168cee4a8553e91cf3f2743b5209eda93dc632d5ab05f3ac443147f3a0039f61164b56cbeed3cd6e686df23d8590e55e2065629486968e5c1a29411743e2c3c99ef8097e291d8fa7836c790e42fd98efec6e6af4f272869a7974523f1c9413887ec0c956d71308da2ecb0423a672348d68ccb14f0f4446400c17f04659a4199de0d8ac31fc95bcd03fe4fb327b3a622598039178ee1cfd3f068345557aa0701c7676f1f1c016e9ca4e1ce9a7f018f11d589a4c1eecedddd67ff26bede495a8d9cc3d37a0882b123e622a2d52f5f68a169f005466da631524cc88057dcbb3b7cdae8a87b1a196feb121fcb44b6f9b171394879be8d1f138f22d1c311090efcc36332335f523e00900fa34880d7c1de7c4f9eed930464e38c479de27030cef13cb02f645f84311b9d5ce08587b5628dbd6e47761803cf929a862a71f1f4c16819529a67bbde9813b739a4c35c9ec6d83573f2d9c0b167b31506ff9872bd6fabe1eff61cdf7a4c961e067ccaeed07d7d1f63856666da23b93f6b5bff032c6e6b74da030185d5d965800bed338953574fe954408b01beee7180fa69c7963e5acdf5beb15acf06f4ec2da3fc296ba074b431ae03b8b2e8dcba228c0386c5f5d2f13f8cbec270e8cef6f6e05de9b7311e3f3a29d42cd980e6ebec903fc82cf6569a44f5448055e47d23807d690ccddded350e043403684b663e3a38e12a2d5f76eae2d176eeeb0cf3c7ce7da57048a09e477d81fa43cf83c9ae1505b602073baac4073e9ad52ec210e46f5f8c1578d097227a10ef7008fbd6bdc5829b3f2aaa625cfdde6d03bc4e7c9c565e055b0d8193a1a7d4d9a80da76657a01b2d1dbd3f1bda3dee12fc277be8752a1de0a8d79bfce1aff7627588db5e6ff328defbbf875786a8808ed656227fb8678fb83953fcb41b3493eab9737c654e7fa9f67b180ccbece9ed71c0a2b9f6ed3ed7c7bd90d1e6f5d591fc5a68ee16c2629d5b19251f16f081fe6b092d38b2b90d7a7b0b6fc7973c642006c0b164bba36f77c37057a9d1dddd6e766714dcbd99e42cf28285f57fb1915901c33f8f7f0fa3e439b65fc928b380b90561e963d80daf3ef3f5cdf71fe506468503f2ab4bf935677c7d64b2600cbbfd9c5d5e491f0148e6a569341aee78cff5e7ae4bc3d57bc225f9955631ae422ab430afcaee04a608ee5f22151be7b95cc611d393266f5c2431dec62713f28d9049d879536cd0c80a869e73ed27d331d8a7139706a13fc921984806eba8986a42f183b9f94bce6d85f58058327d1786990bb99878c24dd0d3482fa7374db752f1a3a2842b95b421e428597273f401066e21049b6ae8b8fba6edf20b8166cb9fe91b21afac4cc4e3116007651c649f4c70c0d632b2644494b9b58271721b1d47e101c2f53dcc2e34f8b7a7968991ed7863fc8be3dc06b3faea0b10b2f93cf2e85ce50a5d3a83e2569c622093301e356504edf92d02006324d2e459a22496028c8dd0e465200b400d398d34e65ed2a43001c740b05a2ea0bfcf7d16043cbd039f8aeebd899972819df4de99b994d7811a9957c910915d692be65fd4b9c457185dc970c8a399c8a77f50ae7a04daace520e599e1377243732b249b49d724b26bb99d53c8ae016713c09bbe3980f9f64b3a9bbcb763eb86b3b6c52b56adb8f708edccba8dbbe03c3de984907bef80ce022ae700c102c3bc15fc015f099595d839a457ac4b34680eb79c8274d77cc65d43a73532249f871e55fed7e5a06e71d664b3a0d39252b801dc13fc0ff5702d059279c4ed6b5419b7b7e1c2deb428341ca6c8c84eb04261aee56d1b9b2e864025076442388d28d8a6368bc63b39c9fa1b4d5a9169668b367083abb3805f6620e7a3da6a33eab196799a42c7e33410292f38c1bcd57ab48569dead0e0bd2d641abb09e2cc37f51bb50e68b9bfdd1330416c8e9d57bb0da0cab553a4a8dc822ed80ff6240a783fa446bbfa5d3ba0dd3985bc316dd9b0919a65956f0e7284d548694f6caacd392ad146c909da532f69d797bfb0570976324f717985e26eb681c19f776fc697a8f03a3ea2da51e977ad1dc19d90be814ccfb026130b8051328f4c072d1092819acd568cba3186f36a701a206868b2923b56761e712e59b89a6d96e6aec342a254533583067f9805912893b400858ead76366b57709c7539d66fe0e0ec23dd08c06bcd6c875e63175d0c41236377189060c15462f8d15673d82d08e2d87b7c5c8db37105a16d12ef0efbfb72d3078c7380b8010efa34776e550831af1428cea6c4b3b3832447f40d20c142392b2bdb0c566fbcf74372617880165d228a2e8c49fd0a930e9f940986c70735ad8db1c77ee5b3467dacef248c41bf74400383f3ff9a0836c662bb015f0123d56da22578cc538ef90c3144c224693c5d120cbdcc307e4403320a5caec151eddd442ac32af8e1534fc3bce297609af56d711afd40a03df34a0d1d583416210fada704c3f30869200ea0c284f3065121b04425c59ee1b93538d17a793c033c8245f3d374926a98b44885b36b0242eeeffd87516330266059459b2b2a17bb565ed3ad5a0b729338d528aebc042cd35efde096bcadb81e291e2194e231cd16c582e1ee30026e19bdb8cfba36f45989dab49252276d5260f0709406acf92b60bbab8990ca32c862e6cbe8f486950ccb80ea9b0cfe4821b24caae19da5ef5bc130f8f546a77cbd0d93acc7eae80596f01a8e4ae4115b897188af4dad405ee8a5bf30bd15f0c7adf35c861bdd0f2de6bf1ca8868dc5da3e0f9c4c02e1ad86cc4e35d9b45350713bda062aa20dc63268da941132dd01d7389f1ad81be1636492dcb1a0f5fc19a42bf60c16c346459cbd113bc313315efdbb45deb929696d5e23cefa103efe56da883e65986d64db596d0743b7d0d8ae7222a56b0115bc27f8392b0e451efd2ad3d7acdd2f45355722f89ef4ff3abc9eb47022f60bc25b1c041d3c82396e61c0f808c97a452dc0cca1c138aebbe4bacc7e8180e00b4ddfc43fd57a5f9e51332f1109b140713bc941708a8157ce5c119c2c01c49fa8e5c9f982e3b27d71357ad0458b33c35fd1e23d67a721ee38a7ee2c0247a4d277235d7b16de3a86f9c87f32bf1e252af5f59de016a2b6fdb096aab37c43f2d001ae3cf9a7fda52dae19f9ab1adbd60ac045bbd89eef634197daaa6401e1a04557b220d31ab9a886d10439608a5c3afedb121ceed8db392139b44fc5d82c7a48041a17a4cd13a8ef64793fffa853aff3c74feffb6f3bf9d7f8c7fbdddd97af9e2eed349a7d161e639cc033555db3d8796a5ca9db096b2c20bbdc0ec49801d1b82034939b3115c9227745a8cc98fa9d385ef152c06fa5d36fbab353ecd31cf4e676735b0adc363d16b049bf1696499707227d0d67ad081cb3e5f17fdb78134d4f3bb0f4c2971ad0a52ee2adb1459e545de78f9a2f0f78cb91a8009b6d9eef26d65fe9e71f19006f09f07b3dd186f6e199f8f6c389ba6146f4148653eb4b0f18fcdca1851b058829586d96b5fb69f49584fca61aeb06572ce96f74bba9a6794351d95a51cbe5845c0990eaa22ee5f939342c86562ccd6bba720cb73ed14f2ec834a278be02ef9644b0b0985cfe84355855216fa319946ccf9e404c86c4c7ee2209780e85dc98c77c66784eb2204c250218c09328be680df52d463e35f9b59e42dc1e3ab54659c835fa498e5e97cc81e92777123cef483a145f37abc365e7ae550893e1b6c1f23b286cba2e15c37c4d9ba971df372b819d33a8361eeaca9dac986a674a05b7b5e4d89d1f0694bcc6f53802cd5044b4443bbeceb8f52d8bbf318f28d25f8b278749dcca40891d4f1563b093125b8884a316310f198fcb45ea188badea45ca5f0de67ce8ba05ed2e0456a083483174b66f2e417b99255a3991db02b8fc8075d688c2ca5e39329d776ddd3003fc19c8726e88bfa1cedba7481d38f2345e49bc34bf31d232bc95a624f4be05b65f93a77afd4c8a6fa30993e4c68b32b98581fb2b278e5fb503d97a1aa303d089d28f0f991cbcc80e6386b7181a47e17a9fd22d2e3d0c78581cb262846d090714d3e14cbd825ad8161fc1516bffde5ff10d1ae381ea140de4a8ff49a633e0df637cc57d4f878421e036e1e2e2d1e90c46d8030c63d560b99f95a0a2563a5f31736b7a3950d400268697ae800d86098f9265a71daeb81ac7273c3ac0fc743cc77dbf07bc6e22e03be5c636513be683c3ac0ffb3055e2a94ca267ca9037b8aa7f4bcc458b7fed5728ab49de46661c8a3fdd1ce878b2a94f1da66b997cb6b7bdcf6c20f580a4079056102c5e23eef166a30fb31bdf55ce632004b4de80685d4c1cc412c1ce8b4103ddc8775f49b50c3c2f603fcb3482c7466ab9c6a8207d0c01a8b5806fd3d8dfe07d8624925c19013432d27000aadd47e0e80914a0c118f191a6f0d8d525e7285b8d17773666cdca9b9331ca5712af4fe164676ba786a0f6c5afc50db3533cb6bb01a52edfae02b8263182cf2d618f1ca225ddda7a53fc0a652faad9a6ac4b344307f6c2aadbaa9b4f626d2e0cf077d844da4ec133a1d3b48e9e7d8d493db416a1840959d9ce2c3400fbc57d317d1787cbbb7d536c1bb312c32c717f0242f3903e75ec080c41690bed318a6676babe0aa17ddad1245d461fcc69cea51e3123c1fcc65fc91bebf6091f7fd3406167a93e8b940c5815718010b21d764e37b7e34519bc35050ee6d35ebac84860a481f0c11e70cbfe360ced283a4bf309fccc1d865f6866c0c4542bda77b23a201d26064e047a11f0143e905830a92d277f7c253a3bf3550d584ed8391ce199560c8b0e01cac63a634502d9030016602d73132865856320c318dfeee8d9626641f52b0d89c9f968f1123c6c1b72fad845955b6943a5c47ba94e11a8a0f54f1ebe0e8c1022ff5d316914914f2f62c3acb37530a9ce16b5bc31b2d09d694d0536ef150b1977647e869e0cfa6ff3fc98e0eb6e0d0d4388ca2d5f0586ff5c0b85c0795edb6500aef191ebbac6385e0db01019bb2f3f46c09322a783db39fcbbf273b57e17ed21b2535ca4b3febb18cf46c959569afd1eca9135f0e707a40bc819b3c23e3bd49b089ca0a82b393e9f733dc1bf0af14f4ff48de4feadd00b2df9eded3e3c9ba58116d30e0381ffd8311d95b65280b267b98681fcfedd8db91b8733780b28c3a55abd3084ed60efd01ed51a56e84f45a679b150e3545d3ae96cd3ace2b35665e80f2744573db11fa6f2f2fcf2ecc062fcca2cdb052ecf2878b1e799c2e3d567c4212f8b1f4d985f98eeb9114378ac9169499f2b478a022ab34f90f40e16124a2452812053289ce6d5cde5c926fa3c0f3150dfbf30f66d6fb924cd634f72d2c0dfc9c9d92efd962c029676fd0d575bcd39ae9a3b353e81977e046cea8e356abe9398bcee72277850f0957761d98b6636e580836415ab38849933cac2ded4ce74ab4adc393bbb5b3d237ecff43b65056dd75b042411aa1d0b1f390c88fbde74068c0003cf37f9ed47cb57d88c3201037a45318fe9ff5f6271a5f3067912b17311ed448ca08e6ca9ecdf3280f16e6766f79635452f7cadc5b04a288a12be42eb565da12c5ff995edea5719cef7d4317b3fcc4adc4e14c02769003d8b13d47e6614697fc68602c4568e0327782cd09a374c5e89cf2da17d12bc75bf25fce350d12e624322872efe0b0d5f44376bb9ecee792cdcd115fbcfa8adb786e7aea31990227070b42af011926e04435b9bd856e6bf9c056148f65b9986e685bec9c4976cdd94df573eba502b20f43247894397d2ed3480ba7c5b27254a018a0488c66df9fe09afc4e7e533693bb2d84294af6016467f91b00e9ac29bc89f5dbf387919b3f97bec0745fb1597c2b20dfae75f13b0003611c24375f8b07139af891473cae6b4e7775277ec24acb52efd8743bb534aba49c90274dc1839fba14f6539720335898a758eb4cef9ca673ae277b2ea4b1fd524676227386e737328091a6230e6f297004be3c34f99f3666e5439aa5e498869e1d94000396eaf6167b3cc51b2cbfd05f312f50e9eb4df958b6ac9a55d324d2cd5212cdcc757d6c9efdc614a41484ab79dd6c99e1284fe4499a60a7cc3c1b5f80b035e91e4defe6a9f235a12c79a857d04c96e3b394b8b39158e8702a92ba922de8856269955ccaa450259d1411a6c78c18fc9dca2cb3ec49265592497da4b403825e383bcfff3a8ef13485d20bec05b409baf28143033e8f7689b3f3320693ff867bdadf1fbd7c31223e439499df938322b1d8de544e0a6157fa584526e2fc9d0c369959ef1555792ce2855d8dcf5df8f93579bebdf3827c47afc4941c0939cfaf32cd04ea6fdcf63ac63801070e1652ede67aa2eb4643df57d7928aa98fa9e60ea904823de26c6a2238bc511e791274c34912f9346cad20b59f4872f81e6f599ebffa895cb87e08a86cad9b789283357294e82bd01d2efc6eab76c42272c13d5fb40e7804e8f4300ae3f380c7b50e8a34764d41b7326ebe03e65278590aaf8a6122802630df819c21279c85edd8b330c60c9182e9cf65eb7ccf17c08d174910f06bda3acadf19d31c00a1118d583470c6e59f1df458245fe3911b24e6347685fa9498e91b93a74712633a9a3392980e48cc4ad4584090662fac246c9c8b0014de18e87b62ada4bf093c273297340c71901fa0344195883909b7481b933c27693b8cc401278c2ba90beb63a28536e57a9ab8574c9b71afa804b30f5cd6094898f720426a2f968d7c42230eb40d0088182c4c366070bc73359e0b310f98c9cf184f540476ecc2990b4041febb7bd41d33df0b5b7195699792425ab44f4c84c0a5ae0f0643f17b12c8a47bf82f01d5083c398ddc95c6fc2df92d99a0ff1de0c197d141f5b97bc017e418162342a94c7ed0de4a638219ee6989d365d72cf0a680e0da9b25abbb057c2781fd3c2a13722939fe8ae82ac35f73b0a2a3c93b8a9b67a5878e4157a563e40dd091bfa9947f0eedf37717dd93da760c46ed126ef5af21ce87e92918dc6046d1d8cc6a7470943d2fa1523bd025f8562021eb236582a9b00bf041b960a969aba0d3b9e1e1e2f16ff6f8a1293de8a8e8e492eb1e4d1c3437d980c17e7b9730b9709e8fb7c75ff6d7ced136f94d4d0a1cf6b6b3e9e6904355cf44e2b856010c7a93461dec0d1d025eff1b0000ffff010000ffffaf45cce4d09e0000") + bs, _ = hex.DecodeString("1f8b080000096e8800ffec7d697bdc36d2e0f7fc0ab82787342b764b8ee3995524edea7026ca61eb91e4c966f3e49d074da29b8848820640c93d8ae6b7bf5500efa3c9564bb6e69d7cb0d524ae42a16e00c5bd67276f8e2f7f3e7b457c1d06079fec3d739c4f2613722ce285e4735f938de34df27c7be705f98e5e89293912724e68e4418d484b3e4db4908a6c28c688f619397ef3faf2fcf4e8ede59bf30b32e301db1c63778741404c778a48a698bc66de98bc558c881934e38a289148971157788cc0e35c5c3319318f4c173018f9f1f4d2517a1130ec2be02e8b140e473571a174cac84c2400128f0c0c3f9c1ebf7a7df1ca0c3ffec4716056383912d068be3f62d188447387c6f1fe482d2217868fe6e6958b331241c0e4fee8222b39d632181137a04aed8fb05220e8d508bb64d43bf88490bd90694a5c9f4ac5f4fe28d133e7afa3a2c0d73a76d8bb845fef8ffe9ff3f6d03916614c359f060cba85115904ad4e5fed336fce4aed221ab2fdd1356737b190ba54f5867bdadff7d835a0c1310f5b3071ae390d1ce5d280edef8cb71b1d794cb992c79a8ba8d457a31a4db42f64a346c0a32b58b8003006c5da4d34e12ef6e44b36db1fcde8353e8e6340e4c127d840731db0831c89e477727b8bebfc1ad6f7358cb4b17977b737b1b5f2016c675321b4d292c61357a949fe340e79348637a3140ea406e533a62d84e699e8450c93d0ecbdc6c6a68490a9f016e4d6fc2424a69e07003953a1b50877c95fb6e3f75fa7653398b433a3210f16bb64f42d0bae99e62e25af59c2465b247fb1450e25607b8b281a2907a899cf6c17779f983f49f0bffcaff211432ae73c72b48877c9cef82b1656ea8e115827149150310506b86d83e5471605628bfc2822eac25fe03c258020b7c8e818d886330920de00847937b52128101b52b7877ce31d6843ba5a1e20e9344b115fdda5335890eed2bc676f69cfada579cf5e8e85a9901e93167791886af30ac45cd4d0bc4bb6bfaeae74e98de9c6f9aa58f058288e1cb18b34053c795d1f802bed44c299262014743e94796d08ce4182b3a0d51ac2c482248cf2361e577140612d7904b4ce9c6920dcab0c0e206dcbc9408f197de48463c426904e5130a5eed55ca2c4c3518404f0e7d38de75fbedc22cf5f6ce37f3b9b5f573128a9c713b54bbe2c4d3ec3cf4efc9ebc28de67887c0eaf9f67afefeaf302328bc61e05c151a3f380cd00daed82d02bd3dbd92e5e1bcaa7019f23fe71925ff7e32a437026889bf8c5b520cf7888529346ba85134047e4cd6e7cae996378069bde80a0a948831b66b1ff627bbbb527af2158ecfc9f8358e983c21bab90068153c162274069e3ff1b328f53b211d2f7294efff2f22ff1fbcdbc8394af40cbc6202680a40fec9b32f7e5950999fc19681f74ad2694e4b2968026d328b6d9783edecdeb923f035224489929285612fb8069054c456012e286e0524d25a3570af57020a0b964b114d02600129c28d090a0d06fb8f6cb3d5a7a5263f2e749feba86040968ca56e52e27c7bd896141d0c413ab8a3fd93333c4228f5fd715faab6bd06746991fec4da0dcea29b076c8a58881a524414301df45f43ad7f7f41a4bec1f1443d94f8fcd6812805a86ee99a9c7e7d42857ab730c046927080505e4c8b40cb515704f750c672ac1a802d87838cf4a50be8d88922eaa3b079f9c9de77f355a96582b60f4e573d0c18646edefc901c995ee9e21afac339f7b20689df7a015abe35b05946806a3ff0e4885a283566d6dba3b486b64334982d23c32ec947e1ac6ce276e343dae0c07459fc473104bec349a8971c46e4af83115c1b2d4224a55ba7dc8edb0a98eb201f027fc2b56c45a11d6a00353f12a1f6863b33a401909f36011fb68c390fc97e3faec5ac2df241e65b3fe9c852a17104527c033910205c28a5fce350d12f89f490554b13fbabd2d4f176b287d77373a786bdf021192dbcfd2da9fdd55916c069a5814943039097815afe95c3c29624fdc44d5d9d214317f1ad5eb015dcfe7688da2204a1fcabdd4e678f0cae3da02f8eef3680af8d89be6a40e2cae115b53f8472be31784928f1bb228a90069a67190835a5e4390aee72c16b886bd0be77b5e6dc5ea5338f43c82dd81fa177291564588ab48ed8308f963104480951b6631d3031576d9074f8e487ecd3d649b15a006eda12fac7457834077c5bc07ecacbbfba1910fc7e23b89ee611f343ee8a2d393c7c4a1f2138d043c0868319bf5426cbbbb1ffe40d16b2af540329c4175bf079e73dbe36362904e45320c6450ed523b2c8cf5a28f7bb0cf2540ef4d92a05d7a1625a965803f40bd5873a04393dbfa683f7cc3a5d26008dc6c1111050b022ef24d44f88c44cc654a51b9f89aa438253754466858a5b64661aaa0427c06fdcff8fc3442159e8b69e8b8301c2ac0044ee8814550d6aea572c0030b88f9df4987ad6a847a5dc4b5676aedf95f96745aa58e71d947198d80dfc93ce68105f6e5418ebbee01d03eab0bfcb8b484973e468010078934d614f1a92253c6c0dfa0d7180d4a34d88360abbae0ac410b6f5c983b244c701952c0d02c4d2b9998101818d5aec77b93b84a1ebde0a3835ab35206d829689ca8b06ca39018fcc9d432faa09c5c37211a241500b7cdf8fb51cb62565f541e4b0f85695d650e364f0230a481966ba45f21f2ac3f6c58a867e36f930db4bed1b9da2c7a68658897cbf8c141bf391e11ee21bed3113853cb3923e5a2db5b6c728c051bf86b7c7a0286b15942786454db3ed1fdc1bf3f00d8359b7329d755ea414d60c236d6ab5533a65dc572033c043456994117834d8691bc3f55e69b5983f81226f6298f3cf61e0dd246f7032ce5b2c1452c96c6275c32d72cdfefc4040dcfa8f6efeefaba2f5883141e0b625881e3e8fa16c3179aeaa4588356a09bb679de8973e33330c993e82a3206ee5bfba369740fef4b0175c6e8415dd81f6bf5e5d2c84aeb8bf4577f6f8d3e402ab61155070c2652db3310211bb7b7d8ef19932e50149db312177cb6d90eddca9073af95c8dbc13e85ca1f10e6ae929aaf635f814aac727e5da4a6c2201345652eac327ec6d024e7ecc66843546dbd623d50d4cefb3658556e426a91dbf45969c90d0bb4235567c199f652d95584857ebf4284a5ed5586b94229b907d0f79281bd4a90248d65a402eef4c46c61789d739a744f6afdf9daa09a236216f5ccfb1b53f301269c4bf4b5e69d19bb21b872c12f29267f1df3e89a06bc8b7a06a32535741dc5e77d787925a558132ded73f89864310fc4b4cf43fe1bd4a1415bfce321903037bd7fc303a640f3d3e0862ed4eb249c327977d790df5c0384e9f05ba4a3afa385367d4d794491f88e3e1e7a7d11f661f707e13e1e7203ecfc61706bba7a42a8750391780ec6410241fbe2776fc00f7c3333bedf3af8edae4f3bc45404feaec5ff01d9aec684c40d3ac385519a853d9aab5874b2ee22624f2d6bd8b0464a33cb8caea593dbdf87d91d6cf780b34d8e961b5f86663e123de19e610f15fd4815f8f386571f858a5a4d7dc4bbc1f839f87d6fa200acb49f99eac3636757cf6a7dbd164f774992c8f5997bc5fab8fb741e09c908d8ec2157b821a23ec2f258201006f5102b54e9ee292f92d9a67568d0b7597161b7737fe2da5f4fc5990195d9dc414c6dded77c82922e17038acc16788be3d6f0c9ccebf68844bb83443b827db1e42108e4b60d49dc8429263c20dc0756becb833e8336df97ab6fbef5c2ead168cee4a8553e91cf3f2743b5209eda93dc632d5ab05f3ac443147f3a0039f61164b56cbeed3cd6e686df23d8590e55e2065629486968e5c1a29411743e2c3c99ef8097e291d8fa7836c790e42fd98efec6e6af4f272869a7974523f1c9413887ec0c956d71308da2ecb0423a672348d68ccb14f0f4446400c17f04659a4199de0d8ac31fc95bcd03fe4fb327b3a622598039178ee1cfd3f068345557aa0701c7676f1f1c016e9ca4e1ce9a7f018f11d589a4c1eecedddd67ff26bede495a8d9cc3d37a0882b123e622a2d52f5f68a169f005466da631524cc88057dcbb3b7cdae8a87b1a196feb121fcb44b6f9b171394879be8d1f138f22d1c311090efcc36332335f523e00900fa34880d7c1de7c4f9eed930464e38c479de27030cef13cb02f645f84311b9d5ce08587b5628dbd6e47761803cf929a862a71f1f4c16819529a67bbde9813b739a4c35c9ec6d83573f2d9c0b167b31506ff9872bd6fabe1eff61cdf7a4c961e067ccaeed07d7d1f63856666da23b93f6b5bff032c6e6b74da030185d5d965800bed338953574fe954408b01beee7180fa69c7963e5acdf5beb15acf06f4ec2da3fc296ba074b431ae03b8b2e8dcba228c0386c5f5d2f13f8cbec270e8cef6f6e05de9b7311e3f3a29d42cd980e6ebec903fc82cf6569a44f5448055e47d23807d690ccddded350e043403684b663e3a38e12a2d5f76eae2d176eeeb0cf3c7ce7da57048a09e477d81fa43cf83c9ae1505b602073baac4073e9ad52ec210e46f5f8c1578d097227a10ef7008fbd6bdc5829b3f2aaa625cfdde6d03bc4e7c9c565e055b0d8193a1a7d4d9a80da76657a01b2d1dbd3f1bda3dee12fc277be8752a1de0a8d79bfce1aff7627588db5e6ff328defbbf875786a8808ed656227fb8678fb83953fcb41b3493eab9737c654e7fa9f67b180ccbece9ed71c0a2b9f6ed3ed7c7bd90d1e6f5d591fc5a68ee16c2629d5b19251f16f081fe6b092d38b2b90d7a7b0b6fc7973c642006c0b164bba36f77c37057a9d1dddd6e766714dcbd99e42cf28285f57fb1915901c33f8f7f0fa3e439b65fc928b380b90561e963d80daf3ef3f5cdf71fe506468503f2ab4bf935677c7d64b2600cbbfd9c5d5e491f0148e6a569341aee78cff5e7ae4bc3d57bc225f9955631ae422ab430afcaee04a608ee5f22151be7b95cc611d393266f5c2431dec62713f28d9049d879536cd0c80a869e73ed27d331d8a7937cecd22fc9602d15534d487e30b77fc9b9adb01e204b50e0c230732117134fb8097a1be905f5a6f9562a7e74b470a59236a41c254b6e903ed0e02d4461d30e1d77dfba5d7e39d06cff337d23e495958f7854026ca28c9bec930914d85a46ae8c8832375830666e23e5284840d0be871986661dec096662e43cde1effe238b7c7aceefa02046e3e8f3c5257b94e97cea0b821a718c8278c4d4d1941db7e8b00c018953439972889a500c32334391ac80250434e238d79983429ccc13110ae960be8ef739f05014fefc3a7627c6f62a65c6027bd83662ee875a046e655324464d7db8af917752ef115465a321cf26826f2e91f94ab1e81666b39547966f88edcd0dc22c966d23589ec8a6ee714b22bc1d904f0d66f0e60be1593ce26efedd8bae4ac6df18a552bee40423bb36ee32e384f4f3a21e4de3ba0b380ca3940b0c0906f057fc05b426525760ee975eb120d9a832ea720e9359f71d7d0698d0cc9e7a14795ff7539c05b9c3bd92ce8b4a4206e00f704ff439d5c4b87641e712b1bd5c7ed6db8b0b72e0a6d87e932b2d3ac50986b7cdbc6a68e2150c901b9104e230a76aacda8f14e4eb2fe469356649ad9a23ddce0ea2cf89719cbf9a8b6da8c7aac659ea6d0f1380d44ca0b4e306fb5246d619a83abc39ab475d042ac27cef05fd42e97f9e2667ff40c8105727af51e2c38c36a958e5283b24841e0bf18d0e9a03ed1f26fe9b46ecf34e6d6b04bf766428669c615fc394a939621a5bd32ebb4645b051b64e7aa8cad67dede7e01dce518c9fd05a69ac93a1a47c6d51d7f9adee9c0087b4ba9c7a55e347749f6023a0553bf40180c6ec1040a3db05c74024a066b35daf228c65bce69b0a881e162ca48ed5908ba44f966a269e69b1a3b8d4a09d20c16ccb93e609644e26e100296faf89865ed5dc2f184a799bf8383700f34a301af358a9d794f1d34b184cd4d8ca2014385d14b63c5598f20b463cbe16df1f2f6cd849645b40bfcfbef6d0b0c9e32ce0220c4bbe9915d39d4a046bc10a33adb52108e0cd11f90341bc588a46c2f6cb1d90a34dd8dc905624099948a283af127742a4caa3e10261bdc9c1cf636c79d7b18cd99b6b33c12f1c63d11008ed04f3ee8209be50a6c05bc508f95b6c8156331ce3be430059394d1647434c83277f20139d00c48a9327b85c738b510abccab63050dff8e738a5dc2abd575c4ebb5c2c0370d6874f560901884be361cd30f8ca124803a03ca134c99240781105796fbc6e454e325ea24f00c32c957cf4dc249ea2211e2f60d2c898b7b41769dc58c8059016596ac6c185f6d59bb4e35e86dca4ca394e23ab05073d3bb77c59af276a078a4789ed30847341b968bc7388049f8e666e3fee85b1166676c5289885db5c9c3410290da73a5ed822e6e26c6288ba10b9bfb23521a1433ae432aec33b9e00689b26b86b6573d07c5c32395da9d3374b80eb39f2b60d65b002ab96b50056e268625bd3675813be4d6fc42f41783de770d72582fb4bcf75abc32221a77da28783e31b08b06361bf178d76654cdc1442fa8982a08f79849636ad0440b74c75c627c6ca0af854d58cbb2c6c357b0a6d02f58301b0d59d67224056fcf4cc5fb366dd7baa4a565b538cf7be8c07b794beaa079aea17583ad254cdd4e5f8362bb888a156cc49650e0a0842c7904bc74838f5eb334155595dc4be2fbd3fc9af2fa51c10b186f495c70d034f2e8a539d30320e385a9143783b2c884e2baef42eb313a8603006d37ff50ff55697ef9844c3cc426c8c1642fe505026a055f7970b630304792bee3d727a6cbcec9f5c4582bc1d62c674dbfc788b59e9cc7b8a29f3830a15ed3895ccd756cdb44ea1be7e1fc4abcc4d4eb57967783dacadb7685daea0df14f0b80c6f8b3e69fb69476f8a7666c6b2f182bc1566fa2bb3d65469faa2990870641d59e4843cdaa26621bc4902545e9f06b7b6c88737bfbace4c426117f97e091296050a81e53b48ea3fdd1e4bf7ea1ce3f0f9dffbfedfc6fe71fe35f6f77b65ebeb8fb74d2697498790ef3404dd576cfa165a97227aca5acf0422f30931260c786e04052ce6c0497e4c99d1663f263ea74e17b058b817e97cd046b8d4f73e4b3d3d9590d6cebf058f41ac1667c1a59269cdc09b4b51e74e0b2cfd745ff6d200df5fcee03534a5cab8294bbca365d567991375ebe28fc3d63ae0660826db6bb7c5b99bf675c3ca401fce7c16c37c69b5bc6e7231bcea629c51b1152998f2e6cfc63b33246142c9660a561f6da97ede713d6937298376c999cb3e5fd92aee619654d476529872f561170a683aa88fbd7e4a410729918b3f5ee29c8f2bc3b853cfba0d2c922b84b3ed9d24242e133fa5055a194857e4cd61173563901321b939f38c825207a5732e39df119e1ba08813054086382cca239e0b714f5d8f8d76616794bf0282b5519e7e0d72966796a1fb287e45ddc8e33fd6068d1bc1eaf8d975e3954a2cf06dbc788ace1b26838d70d71b6ee65c7bc1c6ec6b4ce60983b6baa76b2a1291de8d69e57d363347cda12f3db74204b35c112d1d02efbfaa314f61e3d867c6309be2c1e63273329422475bce14e424c0f2ea252cc18443c2642ad5728a2ae37295729bc039af322a8973478911a02cde0c592993cf945ae64d868660aecca29f241171a234be9f864cab55df734c04f30ffa109faa23e47bb2e5de0f4434911f9e6f0d27cd3c84ab296d8d312f85659becedd2b35b2693f4cd60f13daec0a26d687ac2c5ef96e54cfc5a82a4c0f42270a7c7ee43233a039da5a5c26a9df4b6abf94f438f47161e0b2c98a1134645c931bc53276496b60187f85c56f7ff93f44b42b8e472890b7d2e3bde6984f83fd0df315353e9e90c7809b874b8b8725711b208c718fd54266be9c42c958e9fc85cdf368650390005a9a1e3a00361866be8f569cfa7a20abdcdc36ebc3f110f3dd36fc9eb1b8cb802fd758d9842f1a8f0ef0ff6c81970aa5b2095feac09ee2293d2f31d6ad7fb59c226d27b95918f2687fb4f3e1a20a65bcb659eee5f2da1eb7bdfc039602505e419840b1b8cfbb851acc7e586f3d97b90cc05213ba4121753073100b073a2d440ff7611dfd26d4b0b0fd00ff2c120b9dd92aa79ae00134b0c62296417f4fa3ff01b658524930e4c450cb0980422bb59f0360a41243c46386c65b43a394975c216ef4dd9c191b776aee0f47699c0abdbf85919d2e9eda039b163fda76cdccf21aac8654bb3ef88ae018068bbc3546bcb24857f7c9e90fb0a9947eb7a61af12c11cc1f9b4aab6e2aadbd8934f853421f611329fb9c4ec70e52fa6936f5e476901a06506527a7f848d003efd5f445341edfee6db54df09e0c8bccf1053cc94bcec0b9173020b105a4ef3486e9d9da2ab8ea4577ab44117518bf31a77ad4b804cf0773197fa4ef2f58e47d3f8d8185de247a2e5071e07546c042c835d9f89e1f4dd4e63014947b5bcd3a2ba1a102d20743c439c36f3a98b3f420e92fcce773307699bd211b439150efe9de886880341819f881e847c0507ac1a082a4f4ddbdf0d4e86f0d543561fb60a473462518322c3807eb98290d540b244c8099c0758c8c2196950c434ca3bf7ba3a509d987142c36ffa7e563c48871f0ed4b2b6156952da50ed7912e65b886e20355fc3a387ab0c04bfdb445649286bc3d8bcef2cd940267f8dad6f0464b823525f4945b3c54eca5dd117a1af8b39f0238c98e0eb6e0d0d4388ca2d5f0586ff5c0b85c0795edb6500aef191ebbac6385e0db01019bb2f3f46c09322a783db39fcebf273b57e17ed21b2535ca4b3ff1b18cf46c959569afd1eca9135f0e707a40bc819b3c3be3bd49b089ca0a82b393e9f733dc1bf0af14f4ff48de4feadd00b2df9eded3e3c9ba58116d30e0381ffd8311d95b65280b267b98681fcfedd8db91b8733780b28c3a55abd3084ed60efd01ed51a56e84f45a679b150e3545d3ae96cd3ace2b35665e80f2744573db11fa6f2f2fcf2ecc062fcca2cdb052ecf2878b1e799c2e3d567c4212f8b1f4d985f9a6eb9114378ac9169499f2b478a022ab34f90f40e16124a2452812053289ce6d5cde5c926fa3c0f3150dfbf30f66d6fb924cd634f72d2c0dfc9c9d92efd962c029676fd0d575bcd39ae9a3b353e81977e046cea8e356abe9398bcee72277858f0a57761d98b6636e580836415ab388499348ac2d054de74ab4adc393bbb5b3d2f7ecff43b65056dd75b042411aa1d0b1f390c88fbde74068c0003cf37f9ee07cb57d88c3201037a45318fe9ff5f6271a5f3367912b17311ed448ca08e6ca9ecdf3280f16e6766f79635452f7cadc5b04a288a12be42eb565da12c5ff995edea5719cef7d4317b3fcc4adc4e14c32769003d8b13d47e6614697fc68602c4568e0327782cd09a374c5e89cf2dad7d12bc75bf25fce350d12e6243228f2efe0b0d5344476bb9ecee792cdcd115fbcfa8adb786e7aea31990227070b42af011926e04435b9bd856e6bb9c156148f65b9986e685bec9c4976cdd94df5d3eba502b20f43247894397d2ed3480ba7c5b27254a018a0489266df9fe09afc4e7e5336abbb2d84294af6016467f97b00e9ac29bc89f5dbf387919b3f97bec6745fb1597c3720dfae75f19b0003611c24375f8b07139af8c1473cae6b4e7775277ec24acb52efd8743bb594aba49c90274dc1839fbd14f6b39720335898a75beb4cf59ca676ae277e2ea4b1fd6a4676227386e737328091a6230e6f297004be3c34f99f3666e5439aa54499869e1d94000396eaf6167b3cc51b2cbfd05f312f50e94b4ef958b6ac9a61d324d5cd5212cdcc757d6c9efdc674a41484ab79dd6c99e1284fea499a60a7cc3c1b5f80b035a91f4defe6a9f265a12c91a857d04c96efb394c4b39158e8702a92ba922de8856269955ccaa450259d1411a6c78c18fc9dca2cb3ec49265592497da4b403825e383bcfff3a8ef13485d20bec05b409baf28143033e8f7689b3f3320693ff867bdadf1fbd7c31223e439499df938322b1d8de544e0a6157fa704526e2fc9d0c369959ef1555792ce2855d8dcf5df8f93579bebdf3827c47afc4941c0939cfaf32cd04ea6fdcf63ac63801070e1652ede67aa2eb4643df17d8928aa98fe9e60ea904823de26c6a2238bc511e791274c34912f9346cad20b59f4872f81e6f599ebffa895cb87e08a86cad9b789283357294e82bd01d2efc6eab76c42272c13d5fb40e7804e8f4300ae3f380c7b50e8a34764d41b7326ebe03e65278590aaf8a6122802630df819c21279c85edd8b330c60c9182a9d065eb7ccf17c08d174910f06bda3acadf19d31c00a1118d583470c6e59f1df458245fe3911b24e6347685fa9498e91b93a74712633a9a3392980e48cc4ad45840906630ac246e9c8b0014de18e87b62ada4bf093c273297340c71901fa0344195883909b7481b933c27693b8cc401278c2ba90beb63a28536e57a9ab8574c9b71afa804b30f5cd6094898f720426a2f968d7c42230eb40d0088182c4c366070bc73359e0b310f98c9d1184f540476ecc2990b4041febb7bd41d33df0b5b7195699712435ab44f4c84c0a5ae0f0643f17b12c8a47bf82f01d5083c398ddc95c6fc2df92d99a0ff1de0c197d141f5b97bc017e418162342a94c7ed0de4a638219ee6989d365d72cf0a680e0da9b25abbb057c2781fd3c2a13722939fe8ae82ac35f73b0a2a3c93b8a9b67a5878e4157a563e40dd091bfa9947f0eedf37717dd93da760c46ed126ef5af21ce87e92918dc6046d1d8cc6a7470943d2fa1523bd025f8562021eb236582a9b00bf041b960a969aba0d3b9e1e1e2f16ff6f8a1293de8a8e8e492eb1e4d1c3437d980c17e7b9730b9709e8fb7c75ff6d7ced136f94d4d0a1cf6b6b3e9e6904355cf44e2b856010c7a93521dec0d1d025eff1b0000ffff010000ffff8418a8eedc9e0000") gr, _ = gzip.NewReader(bytes.NewBuffer(bs)) bs, _ = ioutil.ReadAll(gr) Assets["index.html"] = bs diff --git a/beacon/debug.go b/beacon/debug.go index 9d8115fb1..2f76458a1 100644 --- a/beacon/debug.go +++ b/beacon/debug.go @@ -8,7 +8,7 @@ import ( "os" "strings" - "github.com/calmh/syncthing/logger" + "github.com/syncthing/syncthing/logger" ) var ( diff --git a/build.sh b/build.sh index 35c3449f9..881350e9b 100755 --- a/build.sh +++ b/build.sh @@ -202,7 +202,7 @@ case "$1" in tag=$(git describe) shopt -s nullglob for f in *.tar.gz *.zip *.asc ; do - relup calmh/syncthing "$tag" "$f" + relup syncthing/syncthing "$tag" "$f" done ;; diff --git a/cmd/stindex/main.go b/cmd/stindex/main.go index bfdc0198e..e18bb412e 100644 --- a/cmd/stindex/main.go +++ b/cmd/stindex/main.go @@ -10,8 +10,8 @@ import ( "log" "os" - "github.com/calmh/syncthing/files" - "github.com/calmh/syncthing/protocol" + "github.com/syncthing/syncthing/files" + "github.com/syncthing/syncthing/protocol" "github.com/syndtr/goleveldb/leveldb" ) diff --git a/cmd/syncthing/gui.go b/cmd/syncthing/gui.go index 76ffcccc9..715191680 100644 --- a/cmd/syncthing/gui.go +++ b/cmd/syncthing/gui.go @@ -26,13 +26,13 @@ import ( "crypto/tls" "code.google.com/p/go.crypto/bcrypt" - "github.com/calmh/syncthing/auto" - "github.com/calmh/syncthing/config" - "github.com/calmh/syncthing/events" - "github.com/calmh/syncthing/logger" - "github.com/calmh/syncthing/model" - "github.com/calmh/syncthing/protocol" - "github.com/calmh/syncthing/upgrade" + "github.com/syncthing/syncthing/auto" + "github.com/syncthing/syncthing/config" + "github.com/syncthing/syncthing/events" + "github.com/syncthing/syncthing/logger" + "github.com/syncthing/syncthing/model" + "github.com/syncthing/syncthing/protocol" + "github.com/syncthing/syncthing/upgrade" "github.com/vitrun/qart/qr" ) diff --git a/cmd/syncthing/gui_csrf.go b/cmd/syncthing/gui_csrf.go index 93c85aa0d..ee8ee39d8 100644 --- a/cmd/syncthing/gui_csrf.go +++ b/cmd/syncthing/gui_csrf.go @@ -12,7 +12,7 @@ import ( "sync" "time" - "github.com/calmh/syncthing/osutil" + "github.com/syncthing/syncthing/osutil" ) var csrfTokens []string diff --git a/cmd/syncthing/main.go b/cmd/syncthing/main.go index 88b241555..81fc8a139 100644 --- a/cmd/syncthing/main.go +++ b/cmd/syncthing/main.go @@ -26,16 +26,16 @@ import ( "strings" "time" - "github.com/calmh/syncthing/config" - "github.com/calmh/syncthing/discover" - "github.com/calmh/syncthing/events" - "github.com/calmh/syncthing/logger" - "github.com/calmh/syncthing/model" - "github.com/calmh/syncthing/osutil" - "github.com/calmh/syncthing/protocol" - "github.com/calmh/syncthing/upgrade" - "github.com/calmh/syncthing/upnp" "github.com/juju/ratelimit" + "github.com/syncthing/syncthing/config" + "github.com/syncthing/syncthing/discover" + "github.com/syncthing/syncthing/events" + "github.com/syncthing/syncthing/logger" + "github.com/syncthing/syncthing/model" + "github.com/syncthing/syncthing/osutil" + "github.com/syncthing/syncthing/protocol" + "github.com/syncthing/syncthing/upgrade" + "github.com/syncthing/syncthing/upnp" "github.com/syndtr/goleveldb/leveldb" ) diff --git a/cmd/syncthing/usage_report.go b/cmd/syncthing/usage_report.go index 46bd9a3e3..e30ad54d4 100644 --- a/cmd/syncthing/usage_report.go +++ b/cmd/syncthing/usage_report.go @@ -11,7 +11,7 @@ import ( "strings" "time" - "github.com/calmh/syncthing/model" + "github.com/syncthing/syncthing/model" ) // Current version number of the usage report, for acceptance purposes. If diff --git a/config/config.go b/config/config.go index d7821a9c2..6e8783070 100644 --- a/config/config.go +++ b/config/config.go @@ -15,8 +15,8 @@ import ( "strconv" "code.google.com/p/go.crypto/bcrypt" - "github.com/calmh/syncthing/logger" - "github.com/calmh/syncthing/protocol" + "github.com/syncthing/syncthing/logger" + "github.com/syncthing/syncthing/protocol" ) var l = logger.DefaultLogger diff --git a/config/config_test.go b/config/config_test.go index aa65e47c0..26eee24b4 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -11,7 +11,7 @@ import ( "reflect" "testing" - "github.com/calmh/syncthing/protocol" + "github.com/syncthing/syncthing/protocol" ) var node1, node2, node3, node4 protocol.NodeID diff --git a/discover/debug.go b/discover/debug.go index cfc2b6659..6368e7600 100644 --- a/discover/debug.go +++ b/discover/debug.go @@ -8,7 +8,7 @@ import ( "os" "strings" - "github.com/calmh/syncthing/logger" + "github.com/syncthing/syncthing/logger" ) var ( diff --git a/discover/discover.go b/discover/discover.go index 2d81b0138..6e051a4e4 100644 --- a/discover/discover.go +++ b/discover/discover.go @@ -14,9 +14,9 @@ import ( "sync" "time" - "github.com/calmh/syncthing/beacon" - "github.com/calmh/syncthing/events" - "github.com/calmh/syncthing/protocol" + "github.com/syncthing/syncthing/beacon" + "github.com/syncthing/syncthing/events" + "github.com/syncthing/syncthing/protocol" ) type Discoverer struct { diff --git a/events/debug.go b/events/debug.go index 64c22b7cc..2eb1e8035 100644 --- a/events/debug.go +++ b/events/debug.go @@ -8,7 +8,7 @@ import ( "os" "strings" - "github.com/calmh/syncthing/logger" + "github.com/syncthing/syncthing/logger" ) var ( diff --git a/events/events_test.go b/events/events_test.go index 4a44284ed..70203c393 100644 --- a/events/events_test.go +++ b/events/events_test.go @@ -9,7 +9,7 @@ import ( "testing" "time" - "github.com/calmh/syncthing/events" + "github.com/syncthing/syncthing/events" ) var timeout = 100 * time.Millisecond diff --git a/files/debug.go b/files/debug.go index df7daa9fe..f110dfd86 100644 --- a/files/debug.go +++ b/files/debug.go @@ -8,7 +8,7 @@ import ( "os" "strings" - "github.com/calmh/syncthing/logger" + "github.com/syncthing/syncthing/logger" ) var ( diff --git a/files/leveldb.go b/files/leveldb.go index 4e8116afa..1544eb465 100644 --- a/files/leveldb.go +++ b/files/leveldb.go @@ -5,8 +5,8 @@ import ( "sort" "sync" - "github.com/calmh/syncthing/lamport" - "github.com/calmh/syncthing/protocol" + "github.com/syncthing/syncthing/lamport" + "github.com/syncthing/syncthing/protocol" "github.com/syndtr/goleveldb/leveldb" "github.com/syndtr/goleveldb/leveldb/iterator" "github.com/syndtr/goleveldb/leveldb/opt" diff --git a/files/set.go b/files/set.go index 102a5146e..d49615a74 100644 --- a/files/set.go +++ b/files/set.go @@ -8,8 +8,8 @@ package files import ( "sync" - "github.com/calmh/syncthing/lamport" - "github.com/calmh/syncthing/protocol" + "github.com/syncthing/syncthing/lamport" + "github.com/syncthing/syncthing/protocol" "github.com/syndtr/goleveldb/leveldb" ) diff --git a/files/set_test.go b/files/set_test.go index 90eacdf8c..fd2e3f8a3 100644 --- a/files/set_test.go +++ b/files/set_test.go @@ -9,9 +9,9 @@ import ( "sort" "testing" - "github.com/calmh/syncthing/files" - "github.com/calmh/syncthing/lamport" - "github.com/calmh/syncthing/protocol" + "github.com/syncthing/syncthing/files" + "github.com/syncthing/syncthing/lamport" + "github.com/syncthing/syncthing/protocol" "github.com/syndtr/goleveldb/leveldb" "github.com/syndtr/goleveldb/leveldb/storage" ) diff --git a/gui/index.html b/gui/index.html index c63075ca0..145f0010f 100644 --- a/gui/index.html +++ b/gui/index.html @@ -367,10 +367,10 @@
diff --git a/luhn/luhn_test.go b/luhn/luhn_test.go index 7a439c222..2313baaa1 100644 --- a/luhn/luhn_test.go +++ b/luhn/luhn_test.go @@ -3,7 +3,7 @@ package luhn_test import ( "testing" - "github.com/calmh/syncthing/luhn" + "github.com/syncthing/syncthing/luhn" ) func TestGenerate(t *testing.T) { diff --git a/model/blockqueue.go b/model/blockqueue.go index d4ae6c73d..6f49ad20c 100644 --- a/model/blockqueue.go +++ b/model/blockqueue.go @@ -4,7 +4,7 @@ package model -import "github.com/calmh/syncthing/protocol" +import "github.com/syncthing/syncthing/protocol" type bqAdd struct { file protocol.FileInfo diff --git a/model/debug.go b/model/debug.go index 18d634ed2..754d147b8 100644 --- a/model/debug.go +++ b/model/debug.go @@ -8,7 +8,7 @@ import ( "os" "strings" - "github.com/calmh/syncthing/logger" + "github.com/syncthing/syncthing/logger" ) var ( diff --git a/model/model.go b/model/model.go index d12d710e1..a7ea07008 100644 --- a/model/model.go +++ b/model/model.go @@ -15,12 +15,12 @@ import ( "sync" "time" - "github.com/calmh/syncthing/config" - "github.com/calmh/syncthing/events" - "github.com/calmh/syncthing/files" - "github.com/calmh/syncthing/lamport" - "github.com/calmh/syncthing/protocol" - "github.com/calmh/syncthing/scanner" + "github.com/syncthing/syncthing/config" + "github.com/syncthing/syncthing/events" + "github.com/syncthing/syncthing/files" + "github.com/syncthing/syncthing/lamport" + "github.com/syncthing/syncthing/protocol" + "github.com/syncthing/syncthing/scanner" "github.com/syndtr/goleveldb/leveldb" ) diff --git a/model/model_test.go b/model/model_test.go index 32a390336..70c6a78af 100644 --- a/model/model_test.go +++ b/model/model_test.go @@ -11,8 +11,8 @@ import ( "testing" "time" - "github.com/calmh/syncthing/config" - "github.com/calmh/syncthing/protocol" + "github.com/syncthing/syncthing/config" + "github.com/syncthing/syncthing/protocol" "github.com/syndtr/goleveldb/leveldb" "github.com/syndtr/goleveldb/leveldb/storage" ) diff --git a/model/puller.go b/model/puller.go index af8d4bfb8..e4513c045 100644 --- a/model/puller.go +++ b/model/puller.go @@ -11,12 +11,12 @@ import ( "path/filepath" "time" - "github.com/calmh/syncthing/config" - "github.com/calmh/syncthing/events" - "github.com/calmh/syncthing/osutil" - "github.com/calmh/syncthing/protocol" - "github.com/calmh/syncthing/scanner" - "github.com/calmh/syncthing/versioner" + "github.com/syncthing/syncthing/config" + "github.com/syncthing/syncthing/events" + "github.com/syncthing/syncthing/osutil" + "github.com/syncthing/syncthing/protocol" + "github.com/syncthing/syncthing/scanner" + "github.com/syncthing/syncthing/versioner" ) type requestResult struct { diff --git a/protocol/debug.go b/protocol/debug.go index 2356cd288..4097d3370 100644 --- a/protocol/debug.go +++ b/protocol/debug.go @@ -8,7 +8,7 @@ import ( "os" "strings" - "github.com/calmh/syncthing/logger" + "github.com/syncthing/syncthing/logger" ) var ( diff --git a/protocol/nodeid.go b/protocol/nodeid.go index f32956900..ef479ec3c 100644 --- a/protocol/nodeid.go +++ b/protocol/nodeid.go @@ -9,7 +9,7 @@ import ( "regexp" "strings" - "github.com/calmh/syncthing/luhn" + "github.com/syncthing/syncthing/luhn" ) type NodeID [32]byte diff --git a/scanner/blockqueue.go b/scanner/blockqueue.go index b37cf6491..535d7882e 100644 --- a/scanner/blockqueue.go +++ b/scanner/blockqueue.go @@ -9,7 +9,7 @@ import ( "path/filepath" "sync" - "github.com/calmh/syncthing/protocol" + "github.com/syncthing/syncthing/protocol" ) // The parallell hasher reads FileInfo structures from the inbox, hashes the diff --git a/scanner/blocks.go b/scanner/blocks.go index f6a957222..7820cf585 100644 --- a/scanner/blocks.go +++ b/scanner/blocks.go @@ -9,7 +9,7 @@ import ( "crypto/sha256" "io" - "github.com/calmh/syncthing/protocol" + "github.com/syncthing/syncthing/protocol" ) const StandardBlockSize = 128 * 1024 diff --git a/scanner/blocks_test.go b/scanner/blocks_test.go index 47f60c604..7c4e4dd68 100644 --- a/scanner/blocks_test.go +++ b/scanner/blocks_test.go @@ -9,7 +9,7 @@ import ( "fmt" "testing" - "github.com/calmh/syncthing/protocol" + "github.com/syncthing/syncthing/protocol" ) var blocksTestData = []struct { diff --git a/scanner/debug.go b/scanner/debug.go index c1def00a3..ee2c57167 100644 --- a/scanner/debug.go +++ b/scanner/debug.go @@ -8,7 +8,7 @@ import ( "os" "strings" - "github.com/calmh/syncthing/logger" + "github.com/syncthing/syncthing/logger" ) var ( diff --git a/scanner/walk.go b/scanner/walk.go index a188f0c1b..a88b04ebc 100644 --- a/scanner/walk.go +++ b/scanner/walk.go @@ -15,8 +15,8 @@ import ( "strings" "code.google.com/p/go.text/unicode/norm" - "github.com/calmh/syncthing/lamport" - "github.com/calmh/syncthing/protocol" + "github.com/syncthing/syncthing/lamport" + "github.com/syncthing/syncthing/protocol" ) type Walker struct { diff --git a/scanner/walk_test.go b/scanner/walk_test.go index 6b10e9b76..5f9538725 100644 --- a/scanner/walk_test.go +++ b/scanner/walk_test.go @@ -11,7 +11,7 @@ import ( "testing" "time" - "github.com/calmh/syncthing/protocol" + "github.com/syncthing/syncthing/protocol" ) var testdata = []struct { diff --git a/upgrade/upgrade_supported.go b/upgrade/upgrade_supported.go index c25d0f676..a2deae877 100644 --- a/upgrade/upgrade_supported.go +++ b/upgrade/upgrade_supported.go @@ -66,7 +66,7 @@ func UpgradeTo(rel Release) error { // Returns the latest release, including prereleases or not depending on the argument func LatestRelease(prerelease bool) (Release, error) { - resp, err := http.Get("https://api.github.com/repos/calmh/syncthing/releases?per_page=10") + resp, err := http.Get("https://api.github.com/repos/syncthing/syncthing/releases?per_page=10") if err != nil { return Release{}, err } diff --git a/upnp/debug.go b/upnp/debug.go index 190e2b432..c97c2b878 100644 --- a/upnp/debug.go +++ b/upnp/debug.go @@ -8,7 +8,7 @@ import ( "os" "strings" - "github.com/calmh/syncthing/logger" + "github.com/syncthing/syncthing/logger" ) var ( diff --git a/versioner/debug.go b/versioner/debug.go index 81d145b18..72b97c6a7 100644 --- a/versioner/debug.go +++ b/versioner/debug.go @@ -8,7 +8,7 @@ import ( "os" "strings" - "github.com/calmh/syncthing/logger" + "github.com/syncthing/syncthing/logger" ) var ( diff --git a/versioner/simple.go b/versioner/simple.go index 066381774..7c24ea6d4 100644 --- a/versioner/simple.go +++ b/versioner/simple.go @@ -11,7 +11,7 @@ import ( "strconv" "time" - "github.com/calmh/syncthing/osutil" + "github.com/syncthing/syncthing/osutil" ) func init() {