Add callgraphs to docs

This commit is contained in:
eyedeekay
2025-02-26 20:58:20 -05:00
parent f46bd95b68
commit ea4d126358
75 changed files with 14173 additions and 19743 deletions

View File

@ -12,7 +12,8 @@ for dir in $dirs; do
packageLine=$(grep -E "^package" $file)
package=$(echo $packageLine | awk '{print $2}')
echo "Generating callgraph for $package"
go-callvis -nostd -focus "$package" -group pkg,type -format svg -file $dir/$package "github.com/go-i2p/go-i2p/$dir"
godocdown -template template.md -o "$dir/doc.md" "./$dir"
git add -v "$dir/$package.svg" "$dir/doc.md"
go-callvis -nostd -focus "$package" -group type -format svg -file $dir/$package "github.com/go-i2p/go-i2p/$dir"
git mv -v "$dir/doc.md" "$dir/README.md"
godocdown -template template.md -o "$dir/README.md" "./$dir"
git add -v "$dir/$package.svg" "$dir/README.md"
done

View File

@ -2,35 +2,11 @@
--
import "github.com/go-i2p/go-i2p/lib/bootstrap"
provides generic interfaces for initial bootstrap into network and network
### reseeding
## Usage
#### type Bootstrap
```go
type Bootstrap interface {
// get more peers for bootstrap
// try obtaining at most n router infos
// if n is 0 then try obtaining as many router infos as possible
// returns nil and error if we cannot fetch ANY router infos
// returns a channel that yields 1 slice of router infos containing n or fewer router infos, caller must close channel after use
GetPeers(n int) (chan []router_info.RouterInfo, error)
}
```
interface defining a way to bootstrap into the i2p network
# bootstrap
--
import "github.com/go-i2p/go-i2p/lib/bootstrap"
provides generic interfaces for initial bootstrap into network and network
### reseeding
![bootstrap.svg](bootstrap)
provides generic interfaces for initial bootstrap into network and network
### reseeding
## Usage
#### type Bootstrap

View File

@ -2,45 +2,11 @@
--
import "github.com/go-i2p/go-i2p/lib/common/base32"
Package base32 implmenets utilities for encoding and decoding text using I2P's
### alphabet
## Usage
```go
const I2PEncodeAlphabet = "abcdefghijklmnopqrstuvwxyz234567"
```
I2PEncodeAlphabet is the base32 encoding used throughout I2P. RFC 3548 using
lowercase characters.
```go
var I2PEncoding *b32.Encoding = b32.NewEncoding(I2PEncodeAlphabet)
```
I2PEncoding is the standard base32 encoding used through I2P.
#### func DecodeString
```go
func DecodeString(data string) ([]byte, error)
```
DecodeString decodes base64 string to []byte I2PEncoding
#### func EncodeToString
```go
func EncodeToString(data []byte) string
```
EncodeToString encodes []byte to a base32 string using I2PEncoding
# base32
--
import "github.com/go-i2p/go-i2p/lib/common/base32"
Package base32 implmenets utilities for encoding and decoding text using I2P's
### alphabet
![base32.svg](base32)
Package base32 implmenets utilities for encoding and decoding text using I2P's
### alphabet
## Usage
```go

View File

@ -2,45 +2,11 @@
--
import "github.com/go-i2p/go-i2p/lib/common/base64"
Package base64 implmenets utilities for encoding and decoding text using I2P's
### alphabet
## Usage
```go
const I2PEncodeAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-~"
```
I2PEncodeAlphabet is the base64 encoding used throughout I2P. RFC 4648 with "/""
replaced with "~", and "+" replaced with "-".
```go
var I2PEncoding *b64.Encoding = b64.NewEncoding(I2PEncodeAlphabet)
```
I2PEncoding is the standard base64 encoding used through I2P.
#### func DecodeString
```go
func DecodeString(str string) ([]byte, error)
```
DecodeString decodes base64 string to []byte I2PEncoding
#### func EncodeToString
```go
func EncodeToString(data []byte) string
```
I2PEncoding is the standard base64 encoding used through I2P.
# base64
--
import "github.com/go-i2p/go-i2p/lib/common/base64"
Package base64 implmenets utilities for encoding and decoding text using I2P's
### alphabet
![base64.svg](base64)
Package base64 implmenets utilities for encoding and decoding text using I2P's
### alphabet
## Usage
```go

View File

@ -2,127 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/common/certificate"
## Usage
```go
const (
CERT_NULL = iota
CERT_HASHCASH
CERT_HIDDEN
CERT_SIGNED
CERT_MULTIPLE
CERT_KEY
)
```
Certificate Types
```go
const CERT_MIN_SIZE = 3
```
CERT_MIN_SIZE is the minimum size of a valid Certificate in []byte 1 byte for
type 2 bytes for payload length
#### func GetSignatureTypeFromCertificate
```go
func GetSignatureTypeFromCertificate(cert Certificate) (int, error)
```
#### type Certificate
```go
type Certificate struct {
}
```
Certificate is the representation of an I2P Certificate.
https://geti2p.net/spec/common-structures#certificate
#### func NewCertificate
```go
func NewCertificate() *Certificate
```
NewCertificate creates a new Certificate with default NULL type
#### func NewCertificateDeux
```go
func NewCertificateDeux(certType int, payload []byte) (*Certificate, error)
```
#### func NewCertificateWithType
```go
func NewCertificateWithType(certType uint8, payload []byte) (*Certificate, error)
```
NewCertificateWithType creates a new Certificate with specified type and payload
#### func ReadCertificate
```go
func ReadCertificate(data []byte) (certificate Certificate, remainder []byte, err error)
```
ReadCertificate creates a Certificate from []byte and returns any ExcessBytes at
the end of the input. returns err if the certificate could not be read.
#### func (*Certificate) Bytes
```go
func (c *Certificate) Bytes() []byte
```
Bytes returns the entire certificate in []byte form, trims payload to specified
length.
#### func (*Certificate) Data
```go
func (c *Certificate) Data() (data []byte)
```
Data returns the payload of a Certificate, payload is trimmed to the specified
length.
#### func (*Certificate) ExcessBytes
```go
func (c *Certificate) ExcessBytes() []byte
```
ExcessBytes returns the excess bytes in a certificate found after the specified
payload length.
#### func (*Certificate) Length
```go
func (c *Certificate) Length() (length int)
```
Length returns the payload length of a Certificate.
#### func (*Certificate) RawBytes
```go
func (c *Certificate) RawBytes() []byte
```
RawBytes returns the entire certificate in []byte form, includes excess payload
data.
#### func (*Certificate) Type
```go
func (c *Certificate) Type() (cert_type int)
```
Type returns the Certificate type specified in the first byte of the
Certificate,
# certificate
--
import "github.com/go-i2p/go-i2p/lib/common/certificate"
![certificate.svg](certificate)
## Usage
```go

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 62 KiB

View File

@ -2,318 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/common/data"
Package data implements common data structures used in higher level structures.
## Usage
```go
const DATE_SIZE = 8
```
DATE_SIZE is the length in bytes of an I2P Date.
```go
const MAX_INTEGER_SIZE = 8
```
MAX_INTEGER_SIZE is the maximum length of an I2P integer in bytes.
```go
const STRING_MAX_SIZE = 255
```
STRING_MAX_SIZE is the maximum number of bytes that can be stored in an I2P
string
```go
var (
ErrZeroLength = oops.Errorf("error parsing string: zero length")
ErrDataTooShort = oops.Errorf("string parsing warning: string data is shorter than specified by length")
ErrDataTooLong = oops.Errorf("string parsing warning: string contains data beyond length")
ErrLengthMismatch = oops.Errorf("error reading I2P string, length does not match data")
ErrMappingLengthMismatch = oops.Errorf("warning parsing mapping: mapping length exceeds provided data")
)
```
#### func PrintErrors
```go
func PrintErrors(errs []error)
```
PrintErrors prints a formatted list of errors to the console.
#### func WrapErrors
```go
func WrapErrors(errs []error) error
```
WrapErrors compiles a slice of errors and returns them wrapped together as a
single error.
#### type Date
```go
type Date [8]byte
```
Date is the represenation of an I2P Date.
https://geti2p.net/spec/common-structures#date
#### func NewDate
```go
func NewDate(data []byte) (date *Date, remainder []byte, err error)
```
NewDate creates a new Date from []byte using ReadDate. Returns a pointer to Date
unlike ReadDate.
#### func ReadDate
```go
func ReadDate(data []byte) (date Date, remainder []byte, err error)
```
ReadDate creates a Date from []byte using the first DATE_SIZE bytes. Any data
after DATE_SIZE is returned as a remainder.
#### func (Date) Bytes
```go
func (i Date) Bytes() []byte
```
Bytes returns the raw []byte content of a Date.
#### func (Date) Int
```go
func (i Date) Int() int
```
Int returns the Date as a Go integer.
#### func (Date) Time
```go
func (date Date) Time() (date_time time.Time)
```
Time takes the value stored in date as an 8 byte big-endian integer representing
the number of milliseconds since the beginning of unix time and converts it to a
Go time.Time struct.
#### type Hash
```go
type Hash [32]byte
```
Hash is the represenation of an I2P Hash.
https://geti2p.net/spec/common-structures#hash
#### func HashData
```go
func HashData(data []byte) (h Hash)
```
HashData returns the SHA256 sum of a []byte input as Hash.
#### func HashReader
```go
func HashReader(r io.Reader) (h Hash, err error)
```
HashReader returns the SHA256 sum from all data read from an io.Reader. return
error if one occurs while reading from reader
#### func (Hash) Bytes
```go
func (h Hash) Bytes() [32]byte
```
#### type I2PString
```go
type I2PString []byte
```
I2PString is the represenation of an I2P String.
https://geti2p.net/spec/common-structures#string
#### func ReadI2PString
```go
func ReadI2PString(data []byte) (str I2PString, remainder []byte, err error)
```
ReadI2PString returns I2PString from a []byte. The remaining bytes after the
specified length are also returned. Returns a list of errors that occurred
during parsing.
#### func ToI2PString
```go
func ToI2PString(data string) (str I2PString, err error)
```
ToI2PString converts a Go string to an I2PString. Returns error if the string
exceeds STRING_MAX_SIZE.
#### func (I2PString) Data
```go
func (str I2PString) Data() (data string, err error)
```
Data returns the I2PString content as a string trimmed to the specified length
and not including the length byte. Returns error encountered by Length.
#### func (I2PString) Length
```go
func (str I2PString) Length() (length int, err error)
```
Length returns the length specified in the first byte. Returns error if the
specified does not match the actual length or the string is otherwise invalid.
#### type Integer
```go
type Integer []byte
```
Integer is the represenation of an I2P Integer.
https://geti2p.net/spec/common-structures#integer
#### func NewInteger
```go
func NewInteger(bytes []byte, size int) (integer *Integer, remainder []byte, err error)
```
NewInteger creates a new Integer from []byte using ReadInteger. Limits the
length of the created Integer to MAX_INTEGER_SIZE. Returns a pointer to Integer
unlike ReadInteger.
#### func NewIntegerFromInt
```go
func NewIntegerFromInt(value int, size int) (integer *Integer, err error)
```
NewIntegerFromInt creates a new Integer from a Go integer of a specified []byte
length.
#### func ReadInteger
```go
func ReadInteger(bytes []byte, size int) (Integer, []byte)
```
ReadInteger returns an Integer from a []byte of specified length. The remaining
bytes after the specified length are also returned.
#### func (Integer) Bytes
```go
func (i Integer) Bytes() []byte
```
Bytes returns the raw []byte content of an Integer.
#### func (Integer) Int
```go
func (i Integer) Int() int
```
Int returns the Integer as a Go integer
#### type Mapping
```go
type Mapping struct {
}
```
Mapping is the represenation of an I2P Mapping.
https://geti2p.net/spec/common-structures#mapping
#### func GoMapToMapping
```go
func GoMapToMapping(gomap map[string]string) (mapping *Mapping, err error)
```
GoMapToMapping converts a Go map of unformatted strings to *Mapping.
#### func NewMapping
```go
func NewMapping(bytes []byte) (values *Mapping, remainder []byte, err []error)
```
NewMapping creates a new *Mapping from []byte using ReadMapping. Returns a
pointer to Mapping unlike ReadMapping.
#### func ReadMapping
```go
func ReadMapping(bytes []byte) (mapping Mapping, remainder []byte, err []error)
```
ReadMapping returns Mapping from a []byte. The remaining bytes after the
specified length are also returned. Returns a list of errors that occurred
during parsing.
#### func ValuesToMapping
```go
func ValuesToMapping(values MappingValues) *Mapping
```
ValuesToMapping creates a *Mapping using MappingValues. The values are sorted in
the order defined in mappingOrder.
#### func (*Mapping) Data
```go
func (mapping *Mapping) Data() []byte
```
Data returns a Mapping in its []byte form.
#### func (*Mapping) HasDuplicateKeys
```go
func (mapping *Mapping) HasDuplicateKeys() bool
```
HasDuplicateKeys returns true if two keys in a mapping are identical.
#### func (Mapping) Values
```go
func (mapping Mapping) Values() MappingValues
```
Values returns the values contained in a Mapping as MappingValues.
#### type MappingValues
```go
type MappingValues [][2]I2PString
```
MappingValues represents the parsed key value pairs inside of an I2P Mapping.
#### func ReadMappingValues
```go
func ReadMappingValues(remainder []byte, map_length Integer) (values *MappingValues, remainder_bytes []byte, errs []error)
```
ReadMappingValues returns *MappingValues from a []byte. The remaining bytes
after the specified length are also returned. Returns a list of errors that
occurred during parsing.
#### func (MappingValues) Get
```go
func (m MappingValues) Get(key I2PString) I2PString
```
# data
--
import "github.com/go-i2p/go-i2p/lib/common/data"
Package data implements common data structures used in higher level structures.
![data.svg](data)
Package data implements common data structures used in higher level structures.
## Usage
```go

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 138 KiB

After

Width:  |  Height:  |  Size: 138 KiB

View File

@ -2,53 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/common/destination"
Package destination implements the I2P Destination common data structure
## Usage
#### type Destination
```go
type Destination struct {
KeysAndCert
}
```
Destination is the represenation of an I2P Destination.
https://geti2p.net/spec/common-structures#destination
#### func ReadDestination
```go
func ReadDestination(data []byte) (destination Destination, remainder []byte, err error)
```
ReadDestination returns Destination from a []byte. The remaining bytes after the
specified length are also returned. Returns a list of errors that occurred
during parsing.
#### func (Destination) Base32Address
```go
func (destination Destination) Base32Address() (str string)
```
Base32Address returns the I2P base32 address for this Destination.
#### func (Destination) Base64
```go
func (destination Destination) Base64() string
```
Base64 returns the I2P base64 address for this Destination.
# destination
--
import "github.com/go-i2p/go-i2p/lib/common/destination"
Package destination implements the I2P Destination common data structure
![destination.svg](destination)
Package destination implements the I2P Destination common data structure
## Usage
#### type Destination

View File

@ -4,191 +4,81 @@
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="365pt" height="850pt"
viewBox="0.00 0.00 364.94 850.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 850)">
<svg width="357pt" height="609pt"
viewBox="0.00 0.00 356.94 609.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 609)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-850 364.9356,-850 364.9356,0 0,0"/>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-609 356.9356,-609 356.9356,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-842 356.9356,-842 356.9356,-8 8,-8"/>
<text text-anchor="middle" x="182.4678" y="-821.8" font-family="Arial" font-size="18.00" fill="#000000">destination</text>
</g>
<g id="clust11" class="cluster">
<title>cluster_github.com/sirupsen/logrus</title>
<g id="a_clust11"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="package: github.com/sirupsen/logrus">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="229.4047,-501 229.4047,-622 322.7259,-622 322.7259,-501 229.4047,-501"/>
<text text-anchor="middle" x="276.0653" y="-603.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logrus</text>
</a>
</g>
</g>
<g id="clust12" class="cluster">
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust12"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M249.4047,-509C249.4047,-509 302.7259,-509 302.7259,-509 308.7259,-509 314.7259,-515 314.7259,-521 314.7259,-521 314.7259,-575 314.7259,-575 314.7259,-581 308.7259,-587 302.7259,-587 302.7259,-587 249.4047,-587 249.4047,-587 243.4047,-587 237.4047,-581 237.4047,-575 237.4047,-575 237.4047,-521 237.4047,-521 237.4047,-515 243.4047,-509 249.4047,-509"/>
<text text-anchor="middle" x="276.0653" y="-517.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust9" class="cluster">
<title>cluster_github.com/go&#45;i2p/logger</title>
<g id="a_clust9"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="package: github.com/go&#45;i2p/logger">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="207.4706,-319 207.4706,-493 344.66,-493 344.66,-319 207.4706,-319"/>
<text text-anchor="middle" x="276.0653" y="-474.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logger</text>
</a>
</g>
</g>
<g id="clust10" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust10"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M236.9559,-327C236.9559,-327 315.1747,-327 315.1747,-327 321.1747,-327 327.1747,-333 327.1747,-339 327.1747,-339 327.1747,-393 327.1747,-393 327.1747,-399 321.1747,-405 315.1747,-405 315.1747,-405 236.9559,-405 236.9559,-405 230.9559,-405 224.9559,-399 224.9559,-393 224.9559,-393 224.9559,-339 224.9559,-339 224.9559,-333 230.9559,-327 236.9559,-327"/>
<text text-anchor="middle" x="276.0653" y="-335.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust7" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert</title>
<g id="a_clust7"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/keys_and_cert" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="203.195,-630 203.195,-804 348.9356,-804 348.9356,-630 203.195,-630"/>
<text text-anchor="middle" x="276.0653" y="-785.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">keys_and_cert</text>
</a>
</g>
</g>
<g id="clust8" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert</title>
<g id="a_clust8"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/keys_and_cert" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M230.526,-638C230.526,-638 321.6046,-638 321.6046,-638 327.6046,-638 333.6046,-644 333.6046,-650 333.6046,-650 333.6046,-704 333.6046,-704 333.6046,-710 327.6046,-716 321.6046,-716 321.6046,-716 230.526,-716 230.526,-716 224.526,-716 218.526,-710 218.526,-704 218.526,-704 218.526,-650 218.526,-650 218.526,-644 224.526,-638 230.526,-638"/>
<text text-anchor="middle" x="276.0653" y="-646.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*KeysAndCert)</text>
</a>
</g>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-601 348.9356,-601 348.9356,-8 8,-8"/>
<text text-anchor="middle" x="178.4678" y="-580.8" font-family="Arial" font-size="18.00" fill="#000000">destination</text>
</g>
<g id="clust6" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination</title>
<g id="a_clust6"><a xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M28,-266C28,-266 131.0814,-266 131.0814,-266 137.0814,-266 143.0814,-272 143.0814,-278 143.0814,-278 143.0814,-393 143.0814,-393 143.0814,-399 137.0814,-405 131.0814,-405 131.0814,-405 28,-405 28,-405 22,-405 16,-399 16,-393 16,-393 16,-278 16,-278 16,-272 22,-266 28,-266"/>
<text text-anchor="middle" x="79.5407" y="-274.5" font-family="Arial" font-size="15.00" fill="#222222">(Destination)</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/certificate" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="220.1221,-190 220.1221,-311 332.0085,-311 332.0085,-190 220.1221,-190"/>
<text text-anchor="middle" x="276.0653" y="-292.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">certificate</text>
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M28,-295C28,-295 131.0814,-295 131.0814,-295 137.0814,-295 143.0814,-301 143.0814,-307 143.0814,-307 143.0814,-422 143.0814,-422 143.0814,-428 137.0814,-434 131.0814,-434 131.0814,-434 28,-434 28,-434 22,-434 16,-428 16,-422 16,-422 16,-307 16,-307 16,-301 22,-295 28,-295"/>
<text text-anchor="middle" x="79.5407" y="-303.5" font-family="Arial" font-size="15.00" fill="#222222">(Destination)</text>
</a>
</g>
</g>
<g id="clust5" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate</title>
<g id="a_clust5"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/certificate" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M240.1221,-198C240.1221,-198 312.0085,-198 312.0085,-198 318.0085,-198 324.0085,-204 324.0085,-210 324.0085,-210 324.0085,-264 324.0085,-264 324.0085,-270 318.0085,-276 312.0085,-276 312.0085,-276 240.1221,-276 240.1221,-276 234.1221,-276 228.1221,-270 228.1221,-264 228.1221,-264 228.1221,-210 228.1221,-210 228.1221,-204 234.1221,-198 240.1221,-198"/>
<text text-anchor="middle" x="276.0653" y="-206.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Certificate)</text>
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust5"><a xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M249.4047,-121C249.4047,-121 303.7259,-121 303.7259,-121 309.7259,-121 315.7259,-127 315.7259,-133 315.7259,-133 315.7259,-187 315.7259,-187 315.7259,-193 309.7259,-199 303.7259,-199 303.7259,-199 249.4047,-199 249.4047,-199 243.4047,-199 237.4047,-193 237.4047,-187 237.4047,-187 237.4047,-133 237.4047,-133 237.4047,-127 243.4047,-121 249.4047,-121"/>
<text text-anchor="middle" x="276.5653" y="-129.5" font-family="Arial" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust4"><a xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M236.9559,-260C236.9559,-260 315.1747,-260 315.1747,-260 321.1747,-260 327.1747,-266 327.1747,-272 327.1747,-272 327.1747,-326 327.1747,-326 327.1747,-332 321.1747,-338 315.1747,-338 315.1747,-338 236.9559,-338 236.9559,-338 230.9559,-338 224.9559,-332 224.9559,-326 224.9559,-326 224.9559,-272 224.9559,-272 224.9559,-266 230.9559,-260 236.9559,-260"/>
<text text-anchor="middle" x="276.0653" y="-268.5" font-family="Arial" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/base64</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/base64" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/base64">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="210.1859,-103 210.1859,-182 341.9447,-182 341.9447,-103 210.1859,-103"/>
<text text-anchor="middle" x="276.0653" y="-163.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">base64</text>
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert</title>
<g id="a_clust3"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M227.6382,-432C227.6382,-432 324.4924,-432 324.4924,-432 330.4924,-432 336.4924,-438 336.4924,-444 336.4924,-444 336.4924,-498 336.4924,-498 336.4924,-504 330.4924,-510 324.4924,-510 324.4924,-510 227.6382,-510 227.6382,-510 221.6382,-510 215.6382,-504 215.6382,-498 215.6382,-498 215.6382,-444 215.6382,-444 215.6382,-438 221.6382,-432 227.6382,-432"/>
<text text-anchor="middle" x="276.0653" y="-440.5" font-family="Arial" font-size="15.00" fill="#222222">(*KeysAndCert)</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/base32</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/base32" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/base32">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="210.1859,-16 210.1859,-95 341.9447,-95 341.9447,-16 210.1859,-16"/>
<text text-anchor="middle" x="276.0653" y="-76.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">base32</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination | defined in destination.go:72&#10;at destination.go:75: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at destination.go:84: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at destination.go:77: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert]&#10;at destination.go:73: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at destination.go:82: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M126.3497,-579C126.3497,-579 32.7317,-579 32.7317,-579 26.7317,-579 20.7317,-573 20.7317,-567 20.7317,-567 20.7317,-555 20.7317,-555 20.7317,-549 26.7317,-543 32.7317,-543 32.7317,-543 126.3497,-543 126.3497,-543 132.3497,-543 138.3497,-549 138.3497,-555 138.3497,-555 138.3497,-567 138.3497,-567 138.3497,-573 132.3497,-579 126.3497,-579"/>
<text text-anchor="middle" x="79.5407" y="-556.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadDestination</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert -->
<g id="node8" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert</title>
<g id="a_node8"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert | defined in keys_and_cert.go:142">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M328.8062,-769C328.8062,-769 223.3244,-769 223.3244,-769 217.3244,-769 211.3244,-763 211.3244,-757 211.3244,-757 211.3244,-745 211.3244,-745 211.3244,-739 217.3244,-733 223.3244,-733 223.3244,-733 328.8062,-733 328.8062,-733 334.8062,-733 340.8062,-739 340.8062,-745 340.8062,-745 340.8062,-757 340.8062,-757 340.8062,-763 334.8062,-769 328.8062,-769"/>
<text text-anchor="middle" x="276.0653" y="-746.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadKeysAndCert</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert -->
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert</title>
<g id="a_edge4"><a xlink:title="at destination.go:77: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert]">
<path fill="none" stroke="#8b4513" d="M89.0222,-579.0163C107.093,-611.7642 149.4959,-681.4059 203.195,-722 205.9953,-724.1169 208.9706,-726.1015 212.0573,-727.9591"/>
<polygon fill="#8b4513" stroke="#8b4513" points="210.5472,-731.1227 220.9983,-732.8619 213.9129,-724.9849 210.5472,-731.1227"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="node11" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_node11"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithFields | defined in log.go:60">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M307.2844,-397C307.2844,-397 244.8462,-397 244.8462,-397 238.8462,-397 232.8462,-391 232.8462,-385 232.8462,-385 232.8462,-373 232.8462,-373 232.8462,-367 238.8462,-361 244.8462,-361 244.8462,-361 307.2844,-361 307.2844,-361 313.2844,-361 319.2844,-367 319.2844,-373 319.2844,-373 319.2844,-385 319.2844,-385 319.2844,-391 313.2844,-397 307.2844,-397"/>
<text text-anchor="middle" x="276.0653" y="-374.8" font-family="Verdana" font-size="14.00" fill="#000000">WithFields</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge7" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge7"><a xlink:title="at destination.go:73: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at destination.go:82: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M92.6277,-542.81C121.3973,-503.0116 188.7377,-410.955 203.195,-401 209.2562,-396.8264 216.1285,-393.4275 223.1724,-390.6638"/>
<polygon fill="#8b4513" stroke="#8b4513" points="224.5476,-393.8905 232.8238,-387.2758 222.2289,-387.2857 224.5476,-393.8905"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Debug -->
<g id="node12" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_node12"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debug | defined in logger.go:221">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M294.8873,-579C294.8873,-579 257.2433,-579 257.2433,-579 251.2433,-579 245.2433,-573 245.2433,-567 245.2433,-567 245.2433,-555 245.2433,-555 245.2433,-549 251.2433,-543 257.2433,-543 257.2433,-543 294.8873,-543 294.8873,-543 300.8873,-543 306.8873,-549 306.8873,-555 306.8873,-555 306.8873,-567 306.8873,-567 306.8873,-573 300.8873,-579 294.8873,-579"/>
<text text-anchor="middle" x="276.0653" y="-556.8" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge3"><a xlink:title="at destination.go:75: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at destination.go:84: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M138.2384,-561C169.429,-561 207.0043,-561 235.0381,-561"/>
<polygon fill="#8b4513" stroke="#8b4513" points="235.282,-564.5001 245.282,-561 235.2819,-557.5001 235.282,-564.5001"/>
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate</title>
<g id="a_clust2"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M239.087,-346C239.087,-346 314.0436,-346 314.0436,-346 320.0436,-346 326.0436,-352 326.0436,-358 326.0436,-358 326.0436,-412 326.0436,-412 326.0436,-418 320.0436,-424 314.0436,-424 314.0436,-424 239.087,-424 239.087,-424 233.087,-424 227.087,-418 227.087,-412 227.087,-412 227.087,-358 227.087,-358 227.087,-352 233.087,-346 239.087,-346"/>
<text text-anchor="middle" x="276.5653" y="-354.5" font-family="Arial" font-size="15.00" fill="#222222">(*Certificate)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.init -->
<g id="node2" class="node">
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.init</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.init | defined in .:0&#10;at destination.go:17: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M94.5407,-458C94.5407,-458 64.5407,-458 64.5407,-458 58.5407,-458 52.5407,-452 52.5407,-446 52.5407,-446 52.5407,-434 52.5407,-434 52.5407,-428 58.5407,-422 64.5407,-422 64.5407,-422 94.5407,-422 94.5407,-422 100.5407,-422 106.5407,-428 106.5407,-434 106.5407,-434 106.5407,-446 106.5407,-446 106.5407,-452 100.5407,-458 94.5407,-458"/>
<text text-anchor="middle" x="79.5407" y="-435.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.init | defined in .:0&#10;at destination.go:17: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M94.5407,-52C94.5407,-52 64.5407,-52 64.5407,-52 58.5407,-52 52.5407,-46 52.5407,-40 52.5407,-40 52.5407,-28 52.5407,-28 52.5407,-22 58.5407,-16 64.5407,-16 64.5407,-16 94.5407,-16 94.5407,-16 100.5407,-16 106.5407,-22 106.5407,-28 106.5407,-28 106.5407,-40 106.5407,-40 106.5407,-46 100.5407,-52 94.5407,-52"/>
<text text-anchor="middle" x="79.5407" y="-29.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="node10" class="node">
<g id="node2" class="node">
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node10"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M324.7548,-458C324.7548,-458 227.3758,-458 227.3758,-458 221.3758,-458 215.3758,-452 215.3758,-446 215.3758,-446 215.3758,-434 215.3758,-434 215.3758,-428 221.3758,-422 227.3758,-422 227.3758,-422 324.7548,-422 324.7548,-422 330.7548,-422 336.7548,-428 336.7548,-434 336.7548,-434 336.7548,-446 336.7548,-446 336.7548,-452 330.7548,-458 324.7548,-458"/>
<text text-anchor="middle" x="276.0653" y="-435.8" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M324.7548,-52C324.7548,-52 227.3758,-52 227.3758,-52 221.3758,-52 215.3758,-46 215.3758,-40 215.3758,-40 215.3758,-28 215.3758,-28 215.3758,-22 221.3758,-16 227.3758,-16 227.3758,-16 324.7548,-16 324.7548,-16 330.7548,-16 336.7548,-22 336.7548,-28 336.7548,-28 336.7548,-40 336.7548,-40 336.7548,-46 330.7548,-52 324.7548,-52"/>
<text text-anchor="middle" x="276.0653" y="-38.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="276.0653" y="-21.4" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge14" class="edge">
<g id="edge12" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge14"><a xlink:title="at destination.go:17: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M106.8666,-440C132.1954,-440 170.9888,-440 205.043,-440"/>
<polygon fill="#8b4513" stroke="#8b4513" points="205.4392,-443.5001 215.4392,-440 205.4392,-436.5001 205.4392,-443.5001"/>
<g id="a_edge12"><a xlink:title="at destination.go:17: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M106.8666,-34C132.1954,-34 170.9888,-34 205.043,-34"/>
<polygon fill="#8b4513" stroke="#8b4513" points="205.4392,-37.5001 215.4392,-34 205.4392,-30.5001 205.4392,-37.5001"/>
</a>
</g>
</g>
@ -196,62 +86,132 @@
<g id="node3" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/base32.EncodeToString</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/base32.EncodeToString | defined in base32.go:16">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M321.8244,-60C321.8244,-60 230.3062,-60 230.3062,-60 224.3062,-60 218.3062,-54 218.3062,-48 218.3062,-48 218.3062,-36 218.3062,-36 218.3062,-30 224.3062,-24 230.3062,-24 230.3062,-24 321.8244,-24 321.8244,-24 327.8244,-24 333.8244,-30 333.8244,-36 333.8244,-36 333.8244,-48 333.8244,-48 333.8244,-54 327.8244,-60 321.8244,-60"/>
<text text-anchor="middle" x="276.0653" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">EncodeToString</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M321.8244,-563C321.8244,-563 230.3062,-563 230.3062,-563 224.3062,-563 218.3062,-557 218.3062,-551 218.3062,-551 218.3062,-539 218.3062,-539 218.3062,-533 224.3062,-527 230.3062,-527 230.3062,-527 321.8244,-527 321.8244,-527 327.8244,-527 333.8244,-533 333.8244,-539 333.8244,-539 333.8244,-551 333.8244,-551 333.8244,-557 327.8244,-563 321.8244,-563"/>
<text text-anchor="middle" x="276.0653" y="-549.2" font-family="Verdana" font-size="14.00" fill="#000000">base32</text>
<text text-anchor="middle" x="276.0653" y="-532.4" font-family="Verdana" font-size="14.00" fill="#000000">EncodeToString</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination -->
<g id="node4" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination</title>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination | defined in destination.go:72&#10;at destination.go:73: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at destination.go:82: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at destination.go:75: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at destination.go:84: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at destination.go:77: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M126.3497,-191C126.3497,-191 32.7317,-191 32.7317,-191 26.7317,-191 20.7317,-185 20.7317,-179 20.7317,-179 20.7317,-167 20.7317,-167 20.7317,-161 26.7317,-155 32.7317,-155 32.7317,-155 126.3497,-155 126.3497,-155 132.3497,-155 138.3497,-161 138.3497,-167 138.3497,-167 138.3497,-179 138.3497,-179 138.3497,-185 132.3497,-191 126.3497,-191"/>
<text text-anchor="middle" x="79.5407" y="-168.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadDestination</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert -->
<g id="node5" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert</title>
<g id="a_node5"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert | defined in keys_and_cert.go:142">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M328.8062,-113C328.8062,-113 223.3244,-113 223.3244,-113 217.3244,-113 211.3244,-107 211.3244,-101 211.3244,-101 211.3244,-89 211.3244,-89 211.3244,-83 217.3244,-77 223.3244,-77 223.3244,-77 328.8062,-77 328.8062,-77 334.8062,-77 340.8062,-83 340.8062,-89 340.8062,-89 340.8062,-101 340.8062,-101 340.8062,-107 334.8062,-113 328.8062,-113"/>
<text text-anchor="middle" x="276.0653" y="-99.2" font-family="Verdana" font-size="14.00" fill="#000000">keys_and_cert</text>
<text text-anchor="middle" x="276.0653" y="-82.4" font-family="Verdana" font-size="14.00" fill="#000000">ReadKeysAndCert</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert -->
<g id="edge14" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert</title>
<g id="a_edge14"><a xlink:title="at destination.go:77: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert]">
<path fill="none" stroke="#8b4513" d="M119.8466,-154.9251C145.7433,-143.5438 180.215,-128.8228 211.195,-117 211.5179,-116.8768 211.8418,-116.7535 212.1667,-116.6302"/>
<polygon fill="#8b4513" stroke="#8b4513" points="213.6372,-119.8181 221.8003,-113.0642 211.2071,-113.2534 213.6372,-119.8181"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="node9" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_node9"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithFields | defined in log.go:60">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M307.2844,-330C307.2844,-330 244.8462,-330 244.8462,-330 238.8462,-330 232.8462,-324 232.8462,-318 232.8462,-318 232.8462,-306 232.8462,-306 232.8462,-300 238.8462,-294 244.8462,-294 244.8462,-294 307.2844,-294 307.2844,-294 313.2844,-294 319.2844,-300 319.2844,-306 319.2844,-306 319.2844,-318 319.2844,-318 319.2844,-324 313.2844,-330 307.2844,-330"/>
<text text-anchor="middle" x="276.0653" y="-316.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="276.0653" y="-299.4" font-family="Verdana" font-size="14.00" fill="#000000">WithFields</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge4"><a xlink:title="at destination.go:73: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at destination.go:82: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M95.6552,-191.3454C118.8737,-216.761 164.144,-262.6371 211.195,-290 215.0581,-292.2466 219.1849,-294.3077 223.4146,-296.1894"/>
<polygon fill="#8b4513" stroke="#8b4513" points="222.196,-299.4724 232.7765,-300.0243 224.8495,-292.9948 222.196,-299.4724"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Debug -->
<g id="node10" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_node10"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debug | defined in logger.go:221">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M294.8873,-191C294.8873,-191 257.2433,-191 257.2433,-191 251.2433,-191 245.2433,-185 245.2433,-179 245.2433,-179 245.2433,-167 245.2433,-167 245.2433,-161 251.2433,-155 257.2433,-155 257.2433,-155 294.8873,-155 294.8873,-155 300.8873,-155 306.8873,-161 306.8873,-167 306.8873,-167 306.8873,-179 306.8873,-179 306.8873,-185 300.8873,-191 294.8873,-191"/>
<text text-anchor="middle" x="276.0653" y="-177.2" font-family="Verdana" font-size="14.00" fill="#000000">logrus</text>
<text text-anchor="middle" x="276.0653" y="-160.4" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge13" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge13"><a xlink:title="at destination.go:75: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at destination.go:84: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M138.2384,-173C169.429,-173 207.0043,-173 235.0381,-173"/>
<polygon fill="#8b4513" stroke="#8b4513" points="235.282,-176.5001 245.282,-173 235.2819,-169.5001 235.282,-176.5001"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/base64.EncodeToString -->
<g id="node4" class="node">
<g id="node6" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/base64.EncodeToString</title>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/base64.EncodeToString | defined in base64.go:16">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M321.8244,-147C321.8244,-147 230.3062,-147 230.3062,-147 224.3062,-147 218.3062,-141 218.3062,-135 218.3062,-135 218.3062,-123 218.3062,-123 218.3062,-117 224.3062,-111 230.3062,-111 230.3062,-111 321.8244,-111 321.8244,-111 327.8244,-111 333.8244,-117 333.8244,-123 333.8244,-123 333.8244,-135 333.8244,-135 333.8244,-141 327.8244,-147 321.8244,-147"/>
<text text-anchor="middle" x="276.0653" y="-124.8" font-family="Verdana" font-size="14.00" fill="#000000">EncodeToString</text>
<g id="a_node6"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/base64.EncodeToString | defined in base64.go:16">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M321.8244,-252C321.8244,-252 230.3062,-252 230.3062,-252 224.3062,-252 218.3062,-246 218.3062,-240 218.3062,-240 218.3062,-228 218.3062,-228 218.3062,-222 224.3062,-216 230.3062,-216 230.3062,-216 321.8244,-216 321.8244,-216 327.8244,-216 333.8244,-222 333.8244,-228 333.8244,-228 333.8244,-240 333.8244,-240 333.8244,-246 327.8244,-252 321.8244,-252"/>
<text text-anchor="middle" x="276.0653" y="-238.2" font-family="Verdana" font-size="14.00" fill="#000000">base64</text>
<text text-anchor="middle" x="276.0653" y="-221.4" font-family="Verdana" font-size="14.00" fill="#000000">EncodeToString</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes -->
<g id="node5" class="node">
<g id="node7" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes</title>
<g id="a_node5"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes | defined in certificate.go:100">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M291.9518,-268C291.9518,-268 260.1788,-268 260.1788,-268 254.1788,-268 248.1788,-262 248.1788,-256 248.1788,-256 248.1788,-244 248.1788,-244 248.1788,-238 254.1788,-232 260.1788,-232 260.1788,-232 291.9518,-232 291.9518,-232 297.9518,-232 303.9518,-238 303.9518,-244 303.9518,-244 303.9518,-256 303.9518,-256 303.9518,-262 297.9518,-268 291.9518,-268"/>
<text text-anchor="middle" x="276.0653" y="-245.8" font-family="Verdana" font-size="14.00" fill="#000000">Bytes</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address -->
<g id="node6" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address</title>
<g id="a_node6"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address | defined in destination.go:38&#10;at destination.go:41: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate]&#10;at destination.go:42: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes]&#10;at destination.go:39: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at destination.go:49: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at destination.go:44: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/base32.EncodeToString]&#10;at destination.go:47: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M123.1221,-336C123.1221,-336 35.9593,-336 35.9593,-336 29.9593,-336 23.9593,-330 23.9593,-324 23.9593,-324 23.9593,-312 23.9593,-312 23.9593,-306 29.9593,-300 35.9593,-300 35.9593,-300 123.1221,-300 123.1221,-300 129.1221,-300 135.1221,-306 135.1221,-312 135.1221,-312 135.1221,-324 135.1221,-324 135.1221,-330 129.1221,-336 123.1221,-336"/>
<text text-anchor="middle" x="79.5407" y="-313.8" font-family="Verdana" font-size="14.00" fill="#000000">Base32Address</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/base32.EncodeToString -->
<g id="edge9" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/base32.EncodeToString</title>
<g id="a_edge9"><a xlink:title="at destination.go:44: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/base32.EncodeToString]">
<path fill="none" stroke="#8b4513" d="M86.649,-299.8171C102.8674,-259.9055 145.6896,-162.9386 203.195,-97 213.2677,-85.4501 226.1264,-74.7792 238.2299,-65.9707"/>
<polygon fill="#8b4513" stroke="#8b4513" points="240.2865,-68.8033 246.4451,-60.1822 236.2545,-63.0811 240.2865,-68.8033"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes -->
<g id="edge5" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes</title>
<g id="a_edge5"><a xlink:title="at destination.go:42: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes]">
<path fill="none" stroke="#8b4513" d="M125.559,-299.8729C140.9517,-293.9769 158.249,-287.5315 174.195,-282 195.2242,-274.7052 218.9368,-267.2138 238.1896,-261.315"/>
<polygon fill="#8b4513" stroke="#8b4513" points="239.2662,-264.6459 247.8132,-258.3849 237.2273,-257.9494 239.2662,-264.6459"/>
<g id="a_node7"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes | defined in certificate.go:100">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M304.0219,-416C304.0219,-416 248.1087,-416 248.1087,-416 242.1087,-416 236.1087,-410 236.1087,-404 236.1087,-404 236.1087,-392 236.1087,-392 236.1087,-386 242.1087,-380 248.1087,-380 248.1087,-380 304.0219,-380 304.0219,-380 310.0219,-380 316.0219,-386 316.0219,-392 316.0219,-392 316.0219,-404 316.0219,-404 316.0219,-410 310.0219,-416 304.0219,-416"/>
<text text-anchor="middle" x="276.0653" y="-402.2" font-family="Verdana" font-size="14.00" fill="#000000">certificate</text>
<text text-anchor="middle" x="276.0653" y="-385.4" font-family="Verdana" font-size="14.00" fill="#000000">Bytes</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate -->
<g id="node9" class="node">
<g id="node8" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate</title>
<g id="a_node9"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate | defined in keys_and_cert.go:136">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M305.6439,-708C305.6439,-708 246.4867,-708 246.4867,-708 240.4867,-708 234.4867,-702 234.4867,-696 234.4867,-696 234.4867,-684 234.4867,-684 234.4867,-678 240.4867,-672 246.4867,-672 246.4867,-672 305.6439,-672 305.6439,-672 311.6439,-672 317.6439,-678 317.6439,-684 317.6439,-684 317.6439,-696 317.6439,-696 317.6439,-702 311.6439,-708 305.6439,-708"/>
<text text-anchor="middle" x="276.0653" y="-685.8" font-family="Verdana" font-size="14.00" fill="#000000">Certificate</text>
<g id="a_node8"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate | defined in keys_and_cert.go:136">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M316.4196,-502C316.4196,-502 235.711,-502 235.711,-502 229.711,-502 223.711,-496 223.711,-490 223.711,-490 223.711,-478 223.711,-478 223.711,-472 229.711,-466 235.711,-466 235.711,-466 316.4196,-466 316.4196,-466 322.4196,-466 328.4196,-472 328.4196,-478 328.4196,-478 328.4196,-490 328.4196,-490 328.4196,-496 322.4196,-502 316.4196,-502"/>
<text text-anchor="middle" x="276.0653" y="-488.2" font-family="Verdana" font-size="14.00" fill="#000000">keys_and_cert</text>
<text text-anchor="middle" x="276.0653" y="-471.4" font-family="Verdana" font-size="14.00" fill="#000000">Certificate</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address -->
<g id="node11" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address</title>
<g id="a_node11"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address | defined in destination.go:38&#10;at destination.go:41: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate]&#10;at destination.go:42: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes]&#10;at destination.go:44: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/base32.EncodeToString]&#10;at destination.go:47: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at destination.go:39: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at destination.go:49: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M123.1221,-426C123.1221,-426 35.9593,-426 35.9593,-426 29.9593,-426 23.9593,-420 23.9593,-414 23.9593,-414 23.9593,-402 23.9593,-402 23.9593,-396 29.9593,-390 35.9593,-390 35.9593,-390 123.1221,-390 123.1221,-390 129.1221,-390 135.1221,-396 135.1221,-402 135.1221,-402 135.1221,-414 135.1221,-414 135.1221,-420 129.1221,-426 123.1221,-426"/>
<text text-anchor="middle" x="79.5407" y="-403.8" font-family="Verdana" font-size="14.00" fill="#000000">Base32Address</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/base32.EncodeToString -->
<g id="edge3" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/base32.EncodeToString</title>
<g id="a_edge3"><a xlink:title="at destination.go:44: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/base32.EncodeToString]">
<path fill="none" stroke="#8b4513" d="M98.3658,-426.2155C122.8623,-449.2395 167.6924,-489.1061 211.195,-516 214.7364,-518.1894 218.4716,-520.3055 222.2878,-522.3296"/>
<polygon fill="#8b4513" stroke="#8b4513" points="220.7827,-525.4905 231.2865,-526.8769 223.9399,-519.2429 220.7827,-525.4905"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes -->
<g id="edge2" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes</title>
<g id="a_edge2"><a xlink:title="at destination.go:42: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes]">
<path fill="none" stroke="#8b4513" d="M135.3003,-423.7554C148.355,-425.819 162.2348,-426.7045 175.195,-425 192.0147,-422.7879 210.016,-418.5853 226.0877,-414.143"/>
<polygon fill="#8b4513" stroke="#8b4513" points="227.1646,-417.4754 235.8175,-411.3617 225.2406,-410.745 227.1646,-417.4754"/>
</a>
</g>
</g>
@ -259,17 +219,17 @@
<g id="edge1" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate</title>
<g id="a_edge1"><a xlink:title="at destination.go:41: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate]">
<path fill="none" stroke="#8b4513" d="M128.3297,-336.0159C133.8768,-339.644 138.9948,-343.9385 143.0814,-349 178.1618,-392.4496 179.2613,-542.5453 203.195,-593 215.6981,-619.3578 236.0022,-645.5881 252.0064,-664.1136"/>
<polygon fill="#8b4513" stroke="#8b4513" points="249.5509,-666.621 258.7897,-671.8072 254.8016,-661.9916 249.5509,-666.621"/>
<path fill="none" stroke="#8b4513" d="M126.1143,-426.0109C154.2801,-436.9032 190.3668,-450.8587 220.0806,-462.3496"/>
<polygon fill="#8b4513" stroke="#8b4513" points="218.8966,-465.6443 229.4859,-465.9868 221.4214,-459.1155 218.8966,-465.6443"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge11" class="edge">
<g id="edge6" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge11"><a xlink:title="at destination.go:47: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M135.3311,-335.317C162.9225,-343.8812 196.0461,-354.1625 223.2253,-362.5988"/>
<polygon fill="#8b4513" stroke="#8b4513" points="222.3605,-365.995 232.9485,-365.6168 224.4356,-359.3097 222.3605,-365.995"/>
<g id="a_edge6"><a xlink:title="at destination.go:47: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M135.4607,-410.5532C149.2676,-408.9965 163.4512,-405.3584 175.195,-398 200.9047,-381.8908 188.214,-359.8083 211.195,-340 215.0451,-336.6814 219.3484,-333.7036 223.8574,-331.0431"/>
<polygon fill="#8b4513" stroke="#8b4513" points="225.5446,-334.1099 232.7168,-326.3118 222.247,-327.9353 225.5446,-334.1099"/>
</a>
</g>
</g>
@ -277,26 +237,26 @@
<g id="edge8" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge8"><a xlink:title="at destination.go:39: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at destination.go:49: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M127.0415,-336.1787C132.9301,-339.8055 138.4846,-344.056 143.0814,-349 191.9862,-401.5982 161.2607,-440.6925 203.195,-499 213.4754,-513.2943 227.7358,-526.3809 240.9177,-536.8092"/>
<polygon fill="#8b4513" stroke="#8b4513" points="238.8713,-539.6505 248.9407,-542.9458 243.1241,-534.0904 238.8713,-539.6505"/>
<path fill="none" stroke="#8b4513" d="M128.4239,-389.9118C133.8188,-386.5287 138.8725,-382.5818 143.0814,-378 201.7913,-314.0883 148.9351,-255.4587 211.195,-195 217.9616,-188.4291 226.762,-183.8181 235.6865,-180.5832"/>
<polygon fill="#8b4513" stroke="#8b4513" points="236.8188,-183.8965 245.3289,-177.5856 234.7406,-177.2121 236.8188,-183.8965"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64 -->
<g id="node7" class="node">
<g id="node12" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64</title>
<g id="a_node7"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64 | defined in destination.go:55&#10;at destination.go:56: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at destination.go:64: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at destination.go:62: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at destination.go:59: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes]&#10;at destination.go:58: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate]&#10;at destination.go:60: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/base64.EncodeToString]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M100.2514,-397C100.2514,-397 58.83,-397 58.83,-397 52.83,-397 46.83,-391 46.83,-385 46.83,-385 46.83,-373 46.83,-373 46.83,-367 52.83,-361 58.83,-361 58.83,-361 100.2514,-361 100.2514,-361 106.2514,-361 112.2514,-367 112.2514,-373 112.2514,-373 112.2514,-385 112.2514,-385 112.2514,-391 106.2514,-397 100.2514,-397"/>
<text text-anchor="middle" x="79.5407" y="-374.8" font-family="Verdana" font-size="14.00" fill="#000000">Base64</text>
<g id="a_node12"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64 | defined in destination.go:55&#10;at destination.go:56: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at destination.go:64: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at destination.go:60: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/base64.EncodeToString]&#10;at destination.go:58: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate]&#10;at destination.go:59: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes]&#10;at destination.go:62: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M100.2514,-365C100.2514,-365 58.83,-365 58.83,-365 52.83,-365 46.83,-359 46.83,-353 46.83,-353 46.83,-341 46.83,-341 46.83,-335 52.83,-329 58.83,-329 58.83,-329 100.2514,-329 100.2514,-329 106.2514,-329 112.2514,-335 112.2514,-341 112.2514,-341 112.2514,-353 112.2514,-353 112.2514,-359 106.2514,-365 100.2514,-365"/>
<text text-anchor="middle" x="79.5407" y="-342.8" font-family="Verdana" font-size="14.00" fill="#000000">Base64</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/base64.EncodeToString -->
<g id="edge13" class="edge">
<g id="edge7" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/base64.EncodeToString</title>
<g id="a_edge13"><a xlink:title="at destination.go:60: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/base64.EncodeToString]">
<path fill="none" stroke="#8b4513" d="M112.3291,-369.1217C123.2768,-364.4796 134.7868,-357.9452 143.0814,-349 193.8848,-294.2117 160.2819,-253.1654 203.195,-192 213.4558,-177.3749 227.8424,-163.9852 241.1247,-153.3466"/>
<polygon fill="#8b4513" stroke="#8b4513" points="243.44,-155.9805 249.2053,-147.0917 239.1552,-150.4451 243.44,-155.9805"/>
<g id="a_edge7"><a xlink:title="at destination.go:60: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/base64.EncodeToString]">
<path fill="none" stroke="#8b4513" d="M112.1939,-338.8592C122.5317,-335.4699 133.7005,-330.9153 143.0814,-325 176.9686,-303.632 175.1512,-282.1226 209.631,-257.6621"/>
<polygon fill="#8b4513" stroke="#8b4513" points="211.6947,-260.4935 218.1081,-252.0603 207.8355,-254.6534 211.6947,-260.4935"/>
</a>
</g>
</g>
@ -304,35 +264,35 @@
<g id="edge10" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes</title>
<g id="a_edge10"><a xlink:title="at destination.go:59: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes]">
<path fill="none" stroke="#8b4513" d="M112.1859,-365.1014C122.308,-360.3936 133.3536,-354.8381 143.0814,-349 180.4938,-326.5472 220.2294,-295.9708 246.418,-274.765"/>
<polygon fill="#8b4513" stroke="#8b4513" points="248.8896,-277.2655 254.4246,-268.2314 244.464,-271.8421 248.8896,-277.2655"/>
<path fill="none" stroke="#8b4513" d="M112.2576,-348.1387C130.9214,-349.3528 154.6235,-351.8541 175.195,-357 193.2842,-361.5249 212.4093,-368.65 229.0864,-375.6996"/>
<polygon fill="#8b4513" stroke="#8b4513" points="228.0292,-379.056 238.5963,-379.8214 230.8129,-372.6333 228.0292,-379.056"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate -->
<g id="edge12" class="edge">
<g id="edge9" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate</title>
<g id="a_edge12"><a xlink:title="at destination.go:58: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate]">
<path fill="none" stroke="#8b4513" d="M112.3418,-383.209C123.6947,-386.3145 135.4677,-391.6935 143.0814,-401 208.6771,-481.1802 116.2541,-546.125 174.195,-632 186.4226,-650.1226 206.3255,-663.2487 225.3093,-672.3805"/>
<polygon fill="#8b4513" stroke="#8b4513" points="223.9636,-675.6131 234.5172,-676.5469 226.8493,-669.2356 223.9636,-675.6131"/>
<g id="a_edge9"><a xlink:title="at destination.go:58: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate]">
<path fill="none" stroke="#8b4513" d="M112.2798,-361.284C122.4063,-366.1451 133.4308,-371.9033 143.0814,-378 163.9636,-391.1922 214.3577,-432.4214 246.7655,-459.4025"/>
<polygon fill="#8b4513" stroke="#8b4513" points="244.6676,-462.2104 254.5883,-465.9293 249.1521,-456.8354 244.6676,-462.2104"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge6" class="edge">
<g id="edge11" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge6"><a xlink:title="at destination.go:62: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M112.4345,-379C142.469,-379 187.4151,-379 222.6061,-379"/>
<polygon fill="#8b4513" stroke="#8b4513" points="222.7186,-382.5001 232.7186,-379 222.7185,-375.5001 222.7186,-382.5001"/>
<g id="a_edge11"><a xlink:title="at destination.go:62: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M112.3907,-341.0766C130.5996,-337.7992 153.6485,-333.6603 174.195,-330 190.0047,-327.1835 207.1979,-324.1387 222.8796,-321.3685"/>
<polygon fill="#8b4513" stroke="#8b4513" points="223.6975,-324.7783 232.9366,-319.5929 222.4804,-317.8849 223.6975,-324.7783"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge2" class="edge">
<g id="edge5" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge2"><a xlink:title="at destination.go:56: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at destination.go:64: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M112.2579,-384.4732C123.1989,-387.7109 134.7228,-392.8505 143.0814,-401 171.2889,-428.5018 150.6333,-452.4269 174.195,-484 190.7856,-506.2317 215.4946,-525.126 236.4225,-538.6343"/>
<polygon fill="#8b4513" stroke="#8b4513" points="234.7932,-541.7437 245.1255,-544.0878 238.5102,-535.812 234.7932,-541.7437"/>
<g id="a_edge5"><a xlink:title="at destination.go:56: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at destination.go:64: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M112.3191,-341.1468C123.1386,-337.8792 134.5697,-332.8178 143.0814,-325 168.1559,-301.9697 158.3099,-285.1129 174.195,-255 188.8126,-227.2898 186.6888,-214.5186 211.195,-195 218.2916,-189.3477 226.9195,-185.1105 235.5357,-181.9469"/>
<polygon fill="#8b4513" stroke="#8b4513" points="236.7484,-185.2331 245.1766,-178.8131 234.5844,-178.5759 236.7484,-185.2331"/>
</a>
</g>
</g>

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -2,23 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/common/fuzz/certificate"
## Usage
#### func Fuzz
```go
func Fuzz(data []byte) int
```
# exportable
--
import "github.com/go-i2p/go-i2p/lib/common/fuzz/certificate"
![exportable.svg](exportable)
## Usage
#### func Fuzz

View File

@ -4,29 +4,21 @@
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="279pt" height="349pt"
viewBox="0.00 0.00 278.84 349.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 349)">
<svg width="272pt" height="306pt"
viewBox="0.00 0.00 271.84 306.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 306)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-349 278.8444,-349 278.8444,0 0,0"/>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-306 271.8444,-306 271.8444,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-341 270.8444,-341 270.8444,-8 8,-8"/>
<text text-anchor="middle" x="139.4222" y="-320.8" font-family="Arial" font-size="18.00" fill="#000000">exportable</text>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-298 263.8444,-298 263.8444,-8 8,-8"/>
<text text-anchor="middle" x="135.9222" y="-277.8" font-family="Arial" font-size="18.00" fill="#000000">exportable</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/certificate" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="135,-16 135,-303 262.8444,-303 262.8444,-16 135,-16"/>
<text text-anchor="middle" x="198.9222" y="-284.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">certificate</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/certificate" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M163.0933,-68C163.0933,-68 235.7511,-68 235.7511,-68 241.7511,-68 247.7511,-74 247.7511,-80 247.7511,-80 247.7511,-256 247.7511,-256 247.7511,-262 241.7511,-268 235.7511,-268 235.7511,-268 163.0933,-268 163.0933,-268 157.0933,-268 151.0933,-262 151.0933,-256 151.0933,-256 151.0933,-80 151.0933,-80 151.0933,-74 157.0933,-68 163.0933,-68"/>
<text text-anchor="middle" x="199.4222" y="-76.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Certificate)</text>
<g id="a_clust2"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M162.9439,-60C162.9439,-60 237.9005,-60 237.9005,-60 243.9005,-60 249.9005,-66 249.9005,-72 249.9005,-72 249.9005,-248 249.9005,-248 249.9005,-254 243.9005,-260 237.9005,-260 237.9005,-260 162.9439,-260 162.9439,-260 156.9439,-260 150.9439,-254 150.9439,-248 150.9439,-248 150.9439,-72 150.9439,-72 150.9439,-66 156.9439,-60 162.9439,-60"/>
<text text-anchor="middle" x="200.4222" y="-68.5" font-family="Arial" font-size="15.00" fill="#222222">(*Certificate)</text>
</a>
</g>
</g>
@ -34,8 +26,8 @@
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/certificate.Fuzz</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/certificate.Fuzz | defined in fuzz.go:5&#10;at fuzz.go:9: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type]&#10;at fuzz.go:6: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate]&#10;at fuzz.go:7: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data]&#10;at fuzz.go:8: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Length]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M58,-168C58,-168 28,-168 28,-168 22,-168 16,-162 16,-156 16,-156 16,-144 16,-144 16,-138 22,-132 28,-132 28,-132 58,-132 58,-132 64,-132 70,-138 70,-144 70,-144 70,-156 70,-156 70,-162 64,-168 58,-168"/>
<text text-anchor="middle" x="43" y="-145.8" font-family="Verdana" font-size="14.00" fill="#000000">Fuzz</text>
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M58,-160C58,-160 28,-160 28,-160 22,-160 16,-154 16,-148 16,-148 16,-136 16,-136 16,-130 22,-124 28,-124 28,-124 58,-124 58,-124 64,-124 70,-130 70,-136 70,-136 70,-148 70,-148 70,-154 64,-160 58,-160"/>
<text text-anchor="middle" x="43" y="-137.8" font-family="Verdana" font-size="14.00" fill="#000000">Fuzz</text>
</a>
</g>
</g>
@ -43,8 +35,9 @@
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate | defined in certificate.go:201">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M242.7667,-60C242.7667,-60 155.0777,-60 155.0777,-60 149.0777,-60 143.0777,-54 143.0777,-48 143.0777,-48 143.0777,-36 143.0777,-36 143.0777,-30 149.0777,-24 155.0777,-24 155.0777,-24 242.7667,-24 242.7667,-24 248.7667,-24 254.7667,-30 254.7667,-36 254.7667,-36 254.7667,-48 254.7667,-48 254.7667,-54 248.7667,-60 242.7667,-60"/>
<text text-anchor="middle" x="198.9222" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadCertificate</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M243.7667,-52C243.7667,-52 156.0777,-52 156.0777,-52 150.0777,-52 144.0777,-46 144.0777,-40 144.0777,-40 144.0777,-28 144.0777,-28 144.0777,-22 150.0777,-16 156.0777,-16 156.0777,-16 243.7667,-16 243.7667,-16 249.7667,-16 255.7667,-22 255.7667,-28 255.7667,-28 255.7667,-40 255.7667,-40 255.7667,-46 249.7667,-52 243.7667,-52"/>
<text text-anchor="middle" x="199.9222" y="-38.2" font-family="Verdana" font-size="14.00" fill="#000000">certificate</text>
<text text-anchor="middle" x="199.9222" y="-21.4" font-family="Verdana" font-size="14.00" fill="#000000">ReadCertificate</text>
</a>
</g>
</g>
@ -52,8 +45,8 @@
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/certificate.Fuzz&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate</title>
<g id="a_edge2"><a xlink:title="at fuzz.go:6: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.ReadCertificate]">
<path fill="none" stroke="#8b4513" d="M58.2008,-131.824C73.8343,-114.0833 99.7994,-87.1203 133.9843,-65.1785"/>
<polygon fill="#8b4513" stroke="#8b4513" points="136.1723,-67.9415 142.8512,-59.7169 132.5012,-61.9814 136.1723,-67.9415"/>
<path fill="none" stroke="#8b4513" d="M60.5563,-123.8395C78.2431,-106.2965 107.1045,-79.6361 142.3601,-57.393"/>
<polygon fill="#8b4513" stroke="#8b4513" points="144.2536,-60.3376 150.9601,-52.1355 140.6025,-54.3652 144.2536,-60.3376"/>
</a>
</g>
</g>
@ -61,8 +54,9 @@
<g id="node3" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data</title>
<g id="a_node3"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data | defined in certificate.go:134">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M213.9222,-138C213.9222,-138 183.9222,-138 183.9222,-138 177.9222,-138 171.9222,-132 171.9222,-126 171.9222,-126 171.9222,-114 171.9222,-114 171.9222,-108 177.9222,-102 183.9222,-102 183.9222,-102 213.9222,-102 213.9222,-102 219.9222,-102 225.9222,-108 225.9222,-114 225.9222,-114 225.9222,-126 225.9222,-126 225.9222,-132 219.9222,-138 213.9222,-138"/>
<text text-anchor="middle" x="198.9222" y="-115.8" font-family="Verdana" font-size="14.00" fill="#000000">Data</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M227.8788,-130C227.8788,-130 171.9656,-130 171.9656,-130 165.9656,-130 159.9656,-124 159.9656,-118 159.9656,-118 159.9656,-106 159.9656,-106 159.9656,-100 165.9656,-94 171.9656,-94 171.9656,-94 227.8788,-94 227.8788,-94 233.8788,-94 239.8788,-100 239.8788,-106 239.8788,-106 239.8788,-118 239.8788,-118 239.8788,-124 233.8788,-130 227.8788,-130"/>
<text text-anchor="middle" x="199.9222" y="-116.2" font-family="Verdana" font-size="14.00" fill="#000000">certificate</text>
<text text-anchor="middle" x="199.9222" y="-99.4" font-family="Verdana" font-size="14.00" fill="#000000">Data</text>
</a>
</g>
</g>
@ -70,8 +64,8 @@
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/certificate.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data</title>
<g id="a_edge3"><a xlink:title="at fuzz.go:7: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Data]">
<path fill="none" stroke="#8b4513" d="M70.1596,-144.7744C95.5702,-139.8853 133.7344,-132.5424 161.9215,-127.1191"/>
<polygon fill="#8b4513" stroke="#8b4513" points="162.6542,-130.5424 171.8127,-125.216 161.3315,-123.6685 162.6542,-130.5424"/>
<path fill="none" stroke="#8b4513" d="M70.3338,-136.7744C92.2913,-132.5766 123.7111,-126.5699 150.1132,-121.5224"/>
<polygon fill="#8b4513" stroke="#8b4513" points="150.7913,-124.9562 159.9562,-119.6406 149.4768,-118.0807 150.7913,-124.9562"/>
</a>
</g>
</g>
@ -79,8 +73,9 @@
<g id="node4" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Length</title>
<g id="a_node4"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Length | defined in certificate.go:125">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M218.5809,-199C218.5809,-199 179.2635,-199 179.2635,-199 173.2635,-199 167.2635,-193 167.2635,-187 167.2635,-187 167.2635,-175 167.2635,-175 167.2635,-169 173.2635,-163 179.2635,-163 179.2635,-163 218.5809,-163 218.5809,-163 224.5809,-163 230.5809,-169 230.5809,-175 230.5809,-175 230.5809,-187 230.5809,-187 230.5809,-193 224.5809,-199 218.5809,-199"/>
<text text-anchor="middle" x="198.9222" y="-176.8" font-family="Verdana" font-size="14.00" fill="#000000">Length</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M227.8788,-191C227.8788,-191 171.9656,-191 171.9656,-191 165.9656,-191 159.9656,-185 159.9656,-179 159.9656,-179 159.9656,-167 159.9656,-167 159.9656,-161 165.9656,-155 171.9656,-155 171.9656,-155 227.8788,-155 227.8788,-155 233.8788,-155 239.8788,-161 239.8788,-167 239.8788,-167 239.8788,-179 239.8788,-179 239.8788,-185 233.8788,-191 227.8788,-191"/>
<text text-anchor="middle" x="199.9222" y="-177.2" font-family="Verdana" font-size="14.00" fill="#000000">certificate</text>
<text text-anchor="middle" x="199.9222" y="-160.4" font-family="Verdana" font-size="14.00" fill="#000000">Length</text>
</a>
</g>
</g>
@ -88,8 +83,8 @@
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/certificate.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Length</title>
<g id="a_edge4"><a xlink:title="at fuzz.go:8: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Length]">
<path fill="none" stroke="#8b4513" d="M70.1596,-155.3998C94.1435,-160.1682 129.489,-167.1955 157.0834,-172.6817"/>
<polygon fill="#8b4513" stroke="#8b4513" points="156.7493,-176.1837 167.2398,-174.701 158.1143,-169.3181 156.7493,-176.1837"/>
<path fill="none" stroke="#8b4513" d="M70.3338,-147.3998C92.2913,-151.7375 123.7111,-157.9445 150.1132,-163.1602"/>
<polygon fill="#8b4513" stroke="#8b4513" points="149.4674,-166.6002 159.9562,-165.1047 150.8241,-159.7329 149.4674,-166.6002"/>
</a>
</g>
</g>
@ -97,8 +92,9 @@
<g id="node5" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type</title>
<g id="a_node5"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type | defined in certificate.go:116">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M213.9222,-260C213.9222,-260 183.9222,-260 183.9222,-260 177.9222,-260 171.9222,-254 171.9222,-248 171.9222,-248 171.9222,-236 171.9222,-236 171.9222,-230 177.9222,-224 183.9222,-224 183.9222,-224 213.9222,-224 213.9222,-224 219.9222,-224 225.9222,-230 225.9222,-236 225.9222,-236 225.9222,-248 225.9222,-248 225.9222,-254 219.9222,-260 213.9222,-260"/>
<text text-anchor="middle" x="198.9222" y="-237.8" font-family="Verdana" font-size="14.00" fill="#000000">Type</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M227.8788,-252C227.8788,-252 171.9656,-252 171.9656,-252 165.9656,-252 159.9656,-246 159.9656,-240 159.9656,-240 159.9656,-228 159.9656,-228 159.9656,-222 165.9656,-216 171.9656,-216 171.9656,-216 227.8788,-216 227.8788,-216 233.8788,-216 239.8788,-222 239.8788,-228 239.8788,-228 239.8788,-240 239.8788,-240 239.8788,-246 233.8788,-252 227.8788,-252"/>
<text text-anchor="middle" x="199.9222" y="-238.2" font-family="Verdana" font-size="14.00" fill="#000000">certificate</text>
<text text-anchor="middle" x="199.9222" y="-221.4" font-family="Verdana" font-size="14.00" fill="#000000">Type</text>
</a>
</g>
</g>
@ -106,8 +102,8 @@
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/certificate.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type</title>
<g id="a_edge1"><a xlink:title="at fuzz.go:9: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Type]">
<path fill="none" stroke="#8b4513" d="M67.7151,-168.1829C85.8672,-181.155 111.3771,-198.6026 135,-212 143.7057,-216.9373 153.3599,-221.7766 162.4721,-226.0783"/>
<polygon fill="#8b4513" stroke="#8b4513" points="161.1636,-229.3292 171.7093,-230.348 164.1007,-222.9752 161.1636,-229.3292"/>
<path fill="none" stroke="#8b4513" d="M70.1769,-159.2759C90.3621,-171.9616 118.6668,-189.4457 144,-204 148.084,-206.3463 152.3634,-208.7456 156.6592,-211.1147"/>
<polygon fill="#8b4513" stroke="#8b4513" points="154.9879,-214.1898 165.4424,-215.9086 158.3415,-208.0455 154.9879,-214.1898"/>
</a>
</g>
</g>

Before

Width:  |  Height:  |  Size: 9.7 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

View File

@ -2,23 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/common/fuzz/destination"
## Usage
#### func Fuzz
```go
func Fuzz(data []byte) int
```
# exportable
--
import "github.com/go-i2p/go-i2p/lib/common/fuzz/destination"
![exportable.svg](exportable)
## Usage
#### func Fuzz

View File

@ -4,29 +4,21 @@
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="289pt" height="288pt"
viewBox="0.00 0.00 289.19 288.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 288)">
<svg width="281pt" height="245pt"
viewBox="0.00 0.00 281.19 245.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 245)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-288 289.195,-288 289.195,0 0,0"/>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-245 281.195,-245 281.195,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-280 281.195,-280 281.195,-8 8,-8"/>
<text text-anchor="middle" x="144.5975" y="-259.8" font-family="Arial" font-size="18.00" fill="#000000">exportable</text>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-237 273.195,-237 273.195,-8 8,-8"/>
<text text-anchor="middle" x="140.5975" y="-216.8" font-family="Arial" font-size="18.00" fill="#000000">exportable</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/destination</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/destination" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/destination">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="130.1136,-16 130.1136,-242 273.195,-242 273.195,-16 130.1136,-16"/>
<text text-anchor="middle" x="201.6543" y="-223.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">destination</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/destination" xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M150.1136,-68C150.1136,-68 253.195,-68 253.195,-68 259.195,-68 265.195,-74 265.195,-80 265.195,-80 265.195,-195 265.195,-195 265.195,-201 259.195,-207 253.195,-207 253.195,-207 150.1136,-207 150.1136,-207 144.1136,-207 138.1136,-201 138.1136,-195 138.1136,-195 138.1136,-80 138.1136,-80 138.1136,-74 144.1136,-68 150.1136,-68"/>
<text text-anchor="middle" x="201.6543" y="-76.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(Destination)</text>
<g id="a_clust2"><a xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M150.1136,-60C150.1136,-60 253.195,-60 253.195,-60 259.195,-60 265.195,-66 265.195,-72 265.195,-72 265.195,-187 265.195,-187 265.195,-193 259.195,-199 253.195,-199 253.195,-199 150.1136,-199 150.1136,-199 144.1136,-199 138.1136,-193 138.1136,-187 138.1136,-187 138.1136,-72 138.1136,-72 138.1136,-66 144.1136,-60 150.1136,-60"/>
<text text-anchor="middle" x="201.6543" y="-68.5" font-family="Arial" font-size="15.00" fill="#222222">(Destination)</text>
</a>
</g>
</g>
@ -34,8 +26,8 @@
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/destination.Fuzz</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/destination.Fuzz | defined in fuzz.go:5&#10;at fuzz.go:6: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination]&#10;at fuzz.go:7: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address]&#10;at fuzz.go:8: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M58,-138C58,-138 28,-138 28,-138 22,-138 16,-132 16,-126 16,-126 16,-114 16,-114 16,-108 22,-102 28,-102 28,-102 58,-102 58,-102 64,-102 70,-108 70,-114 70,-114 70,-126 70,-126 70,-132 64,-138 58,-138"/>
<text text-anchor="middle" x="43" y="-115.8" font-family="Verdana" font-size="14.00" fill="#000000">Fuzz</text>
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M58,-130C58,-130 28,-130 28,-130 22,-130 16,-124 16,-118 16,-118 16,-106 16,-106 16,-100 22,-94 28,-94 28,-94 58,-94 58,-94 64,-94 70,-100 70,-106 70,-106 70,-118 70,-118 70,-124 64,-130 58,-130"/>
<text text-anchor="middle" x="43" y="-107.8" font-family="Verdana" font-size="14.00" fill="#000000">Fuzz</text>
</a>
</g>
</g>
@ -43,8 +35,9 @@
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination | defined in destination.go:72">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M248.4633,-60C248.4633,-60 154.8453,-60 154.8453,-60 148.8453,-60 142.8453,-54 142.8453,-48 142.8453,-48 142.8453,-36 142.8453,-36 142.8453,-30 148.8453,-24 154.8453,-24 154.8453,-24 248.4633,-24 248.4633,-24 254.4633,-24 260.4633,-30 260.4633,-36 260.4633,-36 260.4633,-48 260.4633,-48 260.4633,-54 254.4633,-60 248.4633,-60"/>
<text text-anchor="middle" x="201.6543" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadDestination</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M248.4633,-52C248.4633,-52 154.8453,-52 154.8453,-52 148.8453,-52 142.8453,-46 142.8453,-40 142.8453,-40 142.8453,-28 142.8453,-28 142.8453,-22 148.8453,-16 154.8453,-16 154.8453,-16 248.4633,-16 248.4633,-16 254.4633,-16 260.4633,-22 260.4633,-28 260.4633,-28 260.4633,-40 260.4633,-40 260.4633,-46 254.4633,-52 248.4633,-52"/>
<text text-anchor="middle" x="201.6543" y="-38.2" font-family="Verdana" font-size="14.00" fill="#000000">destination</text>
<text text-anchor="middle" x="201.6543" y="-21.4" font-family="Verdana" font-size="14.00" fill="#000000">ReadDestination</text>
</a>
</g>
</g>
@ -52,8 +45,8 @@
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/destination.Fuzz&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination</title>
<g id="a_edge1"><a xlink:title="at fuzz.go:6: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.ReadDestination]">
<path fill="none" stroke="#8b4513" d="M67.12,-101.9366C84.055,-89.9084 107.6112,-74.452 130.1136,-64 131.2737,-63.4612 132.4503,-62.9312 133.6406,-62.4103"/>
<polygon fill="#8b4513" stroke="#8b4513" points="135.0473,-65.6165 142.9817,-58.5953 132.4006,-59.1361 135.0473,-65.6165"/>
<path fill="none" stroke="#8b4513" d="M70.1001,-94.0845C88.7169,-82.2726 114.281,-67.0087 138.1136,-56 138.2063,-55.9572 138.2992,-55.9144 138.3921,-55.8716"/>
<polygon fill="#8b4513" stroke="#8b4513" points="139.5119,-59.2012 147.2891,-52.0063 136.7226,-52.7809 139.5119,-59.2012"/>
</a>
</g>
</g>
@ -61,8 +54,9 @@
<g id="node3" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address</title>
<g id="a_node3"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address | defined in destination.go:38">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M245.2357,-138C245.2357,-138 158.0729,-138 158.0729,-138 152.0729,-138 146.0729,-132 146.0729,-126 146.0729,-126 146.0729,-114 146.0729,-114 146.0729,-108 152.0729,-102 158.0729,-102 158.0729,-102 245.2357,-102 245.2357,-102 251.2357,-102 257.2357,-108 257.2357,-114 257.2357,-114 257.2357,-126 257.2357,-126 257.2357,-132 251.2357,-138 245.2357,-138"/>
<text text-anchor="middle" x="201.6543" y="-115.8" font-family="Verdana" font-size="14.00" fill="#000000">Base32Address</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M245.2357,-130C245.2357,-130 158.0729,-130 158.0729,-130 152.0729,-130 146.0729,-124 146.0729,-118 146.0729,-118 146.0729,-106 146.0729,-106 146.0729,-100 152.0729,-94 158.0729,-94 158.0729,-94 245.2357,-94 245.2357,-94 251.2357,-94 257.2357,-100 257.2357,-106 257.2357,-106 257.2357,-118 257.2357,-118 257.2357,-124 251.2357,-130 245.2357,-130"/>
<text text-anchor="middle" x="201.6543" y="-116.2" font-family="Verdana" font-size="14.00" fill="#000000">destination</text>
<text text-anchor="middle" x="201.6543" y="-99.4" font-family="Verdana" font-size="14.00" fill="#000000">Base32Address</text>
</a>
</g>
</g>
@ -70,8 +64,8 @@
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/destination.Fuzz&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address</title>
<g id="a_edge2"><a xlink:title="at fuzz.go:7: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base32Address]">
<path fill="none" stroke="#8b4513" d="M70.2736,-120C88.3329,-120 112.8362,-120 135.7903,-120"/>
<polygon fill="#8b4513" stroke="#8b4513" points="135.853,-123.5001 145.853,-120 135.8529,-116.5001 135.853,-123.5001"/>
<path fill="none" stroke="#8b4513" d="M70.2736,-112C88.3329,-112 112.8362,-112 135.7903,-112"/>
<polygon fill="#8b4513" stroke="#8b4513" points="135.853,-115.5001 145.853,-112 135.8529,-108.5001 135.853,-115.5001"/>
</a>
</g>
</g>
@ -79,8 +73,9 @@
<g id="node4" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64</title>
<g id="a_node4"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64 | defined in destination.go:55">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M222.365,-199C222.365,-199 180.9436,-199 180.9436,-199 174.9436,-199 168.9436,-193 168.9436,-187 168.9436,-187 168.9436,-175 168.9436,-175 168.9436,-169 174.9436,-163 180.9436,-163 180.9436,-163 222.365,-163 222.365,-163 228.365,-163 234.365,-169 234.365,-175 234.365,-175 234.365,-187 234.365,-187 234.365,-193 228.365,-199 222.365,-199"/>
<text text-anchor="middle" x="201.6543" y="-176.8" font-family="Verdana" font-size="14.00" fill="#000000">Base64</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M232.5916,-191C232.5916,-191 170.717,-191 170.717,-191 164.717,-191 158.717,-185 158.717,-179 158.717,-179 158.717,-167 158.717,-167 158.717,-161 164.717,-155 170.717,-155 170.717,-155 232.5916,-155 232.5916,-155 238.5916,-155 244.5916,-161 244.5916,-167 244.5916,-167 244.5916,-179 244.5916,-179 244.5916,-185 238.5916,-191 232.5916,-191"/>
<text text-anchor="middle" x="201.6543" y="-177.2" font-family="Verdana" font-size="14.00" fill="#000000">destination</text>
<text text-anchor="middle" x="201.6543" y="-160.4" font-family="Verdana" font-size="14.00" fill="#000000">Base64</text>
</a>
</g>
</g>
@ -88,8 +83,8 @@
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/destination.Fuzz&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64</title>
<g id="a_edge3"><a xlink:title="at fuzz.go:8: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/destination.Destination).Base64]">
<path fill="none" stroke="#8b4513" d="M70.2736,-130.4863C94.7627,-139.9019 131.1015,-153.8736 159.3582,-164.7378"/>
<polygon fill="#8b4513" stroke="#8b4513" points="158.3932,-168.1165 168.9832,-168.4385 160.9054,-161.5828 158.3932,-168.1165"/>
<path fill="none" stroke="#8b4513" d="M70.2736,-122.4863C91.973,-130.8293 122.976,-142.7495 149.4161,-152.9153"/>
<polygon fill="#8b4513" stroke="#8b4513" points="148.3351,-156.2494 158.9251,-156.5713 150.8473,-149.7157 148.3351,-156.2494"/>
</a>
</g>
</g>

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

View File

@ -2,23 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/common/fuzz/keys_and_cert"
## Usage
#### func Fuzz
```go
func Fuzz(data []byte) int
```
# exportable
--
import "github.com/go-i2p/go-i2p/lib/common/fuzz/keys_and_cert"
![exportable.svg](exportable)
## Usage
#### func Fuzz

View File

@ -4,38 +4,30 @@
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="303pt" height="349pt"
viewBox="0.00 0.00 303.20 349.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 349)">
<svg width="295pt" height="306pt"
viewBox="0.00 0.00 295.20 306.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 306)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-349 303.202,-349 303.202,0 0,0"/>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-306 295.202,-306 295.202,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-341 295.202,-341 295.202,-8 8,-8"/>
<text text-anchor="middle" x="151.601" y="-320.8" font-family="Arial" font-size="18.00" fill="#000000">exportable</text>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-298 287.202,-298 287.202,-8 8,-8"/>
<text text-anchor="middle" x="147.601" y="-277.8" font-family="Arial" font-size="18.00" fill="#000000">exportable</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/keys_and_cert" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="128.5386,-16 128.5386,-303 287.202,-303 287.202,-16 128.5386,-16"/>
<text text-anchor="middle" x="207.8703" y="-284.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">keys_and_cert</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/keys_and_cert" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M148.5386,-68C148.5386,-68 267.202,-68 267.202,-68 273.202,-68 279.202,-74 279.202,-80 279.202,-80 279.202,-256 279.202,-256 279.202,-262 273.202,-268 267.202,-268 267.202,-268 148.5386,-268 148.5386,-268 142.5386,-268 136.5386,-262 136.5386,-256 136.5386,-256 136.5386,-80 136.5386,-80 136.5386,-74 142.5386,-68 148.5386,-68"/>
<text text-anchor="middle" x="207.8703" y="-76.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*KeysAndCert)</text>
<g id="a_clust2"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M148.5386,-60C148.5386,-60 267.202,-60 267.202,-60 273.202,-60 279.202,-66 279.202,-72 279.202,-72 279.202,-248 279.202,-248 279.202,-254 273.202,-260 267.202,-260 267.202,-260 148.5386,-260 148.5386,-260 142.5386,-260 136.5386,-254 136.5386,-248 136.5386,-248 136.5386,-72 136.5386,-72 136.5386,-66 142.5386,-60 148.5386,-60"/>
<text text-anchor="middle" x="207.8703" y="-68.5" font-family="Arial" font-size="15.00" fill="#222222">(*KeysAndCert)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/keys_and_cert.Fuzz -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/keys_and_cert.Fuzz</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/keys_and_cert.Fuzz | defined in fuzz.go:5&#10;at fuzz.go:6: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert]&#10;at fuzz.go:7: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate]&#10;at fuzz.go:8: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).PublicKey]&#10;at fuzz.go:9: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).SigningPublicKey]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M58,-168C58,-168 28,-168 28,-168 22,-168 16,-162 16,-156 16,-156 16,-144 16,-144 16,-138 22,-132 28,-132 28,-132 58,-132 58,-132 64,-132 70,-138 70,-144 70,-144 70,-156 70,-156 70,-162 64,-168 58,-168"/>
<text text-anchor="middle" x="43" y="-145.8" font-family="Verdana" font-size="14.00" fill="#000000">Fuzz</text>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/keys_and_cert.Fuzz | defined in fuzz.go:5&#10;at fuzz.go:8: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).PublicKey]&#10;at fuzz.go:9: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).SigningPublicKey]&#10;at fuzz.go:6: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert]&#10;at fuzz.go:7: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M58,-160C58,-160 28,-160 28,-160 22,-160 16,-154 16,-148 16,-148 16,-136 16,-136 16,-130 22,-124 28,-124 28,-124 58,-124 58,-124 64,-124 70,-130 70,-136 70,-136 70,-148 70,-148 70,-154 64,-160 58,-160"/>
<text text-anchor="middle" x="43" y="-137.8" font-family="Verdana" font-size="14.00" fill="#000000">Fuzz</text>
</a>
</g>
</g>
@ -43,17 +35,18 @@
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert | defined in keys_and_cert.go:142">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M260.6112,-60C260.6112,-60 155.1294,-60 155.1294,-60 149.1294,-60 143.1294,-54 143.1294,-48 143.1294,-48 143.1294,-36 143.1294,-36 143.1294,-30 149.1294,-24 155.1294,-24 155.1294,-24 260.6112,-24 260.6112,-24 266.6112,-24 272.6112,-30 272.6112,-36 272.6112,-36 272.6112,-48 272.6112,-48 272.6112,-54 266.6112,-60 260.6112,-60"/>
<text text-anchor="middle" x="207.8703" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadKeysAndCert</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M260.6112,-52C260.6112,-52 155.1294,-52 155.1294,-52 149.1294,-52 143.1294,-46 143.1294,-40 143.1294,-40 143.1294,-28 143.1294,-28 143.1294,-22 149.1294,-16 155.1294,-16 155.1294,-16 260.6112,-16 260.6112,-16 266.6112,-16 272.6112,-22 272.6112,-28 272.6112,-28 272.6112,-40 272.6112,-40 272.6112,-46 266.6112,-52 260.6112,-52"/>
<text text-anchor="middle" x="207.8703" y="-38.2" font-family="Verdana" font-size="14.00" fill="#000000">keys_and_cert</text>
<text text-anchor="middle" x="207.8703" y="-21.4" font-family="Verdana" font-size="14.00" fill="#000000">ReadKeysAndCert</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/keys_and_cert.Fuzz&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert -->
<g id="edge1" class="edge">
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/keys_and_cert.Fuzz&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert</title>
<g id="a_edge1"><a xlink:title="at fuzz.go:6: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert]">
<path fill="none" stroke="#8b4513" d="M56.3722,-131.7759C71.6819,-112.1993 98.5469,-81.5446 128.5386,-64 130.2503,-62.9987 132.0096,-62.0412 133.8061,-61.1259"/>
<polygon fill="#8b4513" stroke="#8b4513" points="135.4178,-64.2375 143.0527,-56.8917 132.5034,-57.873 135.4178,-64.2375"/>
<g id="a_edge3"><a xlink:title="at fuzz.go:6: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert]">
<path fill="none" stroke="#8b4513" d="M58.0901,-123.9966C73.9008,-106.1275 100.4054,-78.8225 134.9201,-57.4503"/>
<polygon fill="#8b4513" stroke="#8b4513" points="137.0442,-60.2603 143.866,-52.1539 133.4779,-54.2368 137.0442,-60.2603"/>
</a>
</g>
</g>
@ -61,17 +54,18 @@
<g id="node3" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate</title>
<g id="a_node3"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate | defined in keys_and_cert.go:136">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M237.4489,-138C237.4489,-138 178.2917,-138 178.2917,-138 172.2917,-138 166.2917,-132 166.2917,-126 166.2917,-126 166.2917,-114 166.2917,-114 166.2917,-108 172.2917,-102 178.2917,-102 178.2917,-102 237.4489,-102 237.4489,-102 243.4489,-102 249.4489,-108 249.4489,-114 249.4489,-114 249.4489,-126 249.4489,-126 249.4489,-132 243.4489,-138 237.4489,-138"/>
<text text-anchor="middle" x="207.8703" y="-115.8" font-family="Verdana" font-size="14.00" fill="#000000">Certificate</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M248.2246,-130C248.2246,-130 167.516,-130 167.516,-130 161.516,-130 155.516,-124 155.516,-118 155.516,-118 155.516,-106 155.516,-106 155.516,-100 161.516,-94 167.516,-94 167.516,-94 248.2246,-94 248.2246,-94 254.2246,-94 260.2246,-100 260.2246,-106 260.2246,-106 260.2246,-118 260.2246,-118 260.2246,-124 254.2246,-130 248.2246,-130"/>
<text text-anchor="middle" x="207.8703" y="-116.2" font-family="Verdana" font-size="14.00" fill="#000000">keys_and_cert</text>
<text text-anchor="middle" x="207.8703" y="-99.4" font-family="Verdana" font-size="14.00" fill="#000000">Certificate</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/keys_and_cert.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate -->
<g id="edge2" class="edge">
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/keys_and_cert.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate</title>
<g id="a_edge2"><a xlink:title="at fuzz.go:7: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate]">
<path fill="none" stroke="#8b4513" d="M70.225,-145.0461C93.4402,-140.8218 127.4671,-134.6303 155.88,-129.4602"/>
<polygon fill="#8b4513" stroke="#8b4513" points="156.8516,-132.841 166.0634,-127.6072 155.5984,-125.9541 156.8516,-132.841"/>
<g id="a_edge4"><a xlink:title="at fuzz.go:7: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate]">
<path fill="none" stroke="#8b4513" d="M70.225,-137.0461C90.5721,-133.3437 119.2244,-128.1301 145.123,-123.4176"/>
<polygon fill="#8b4513" stroke="#8b4513" points="146.0533,-126.8058 155.2652,-121.5721 144.8001,-119.9189 146.0533,-126.8058"/>
</a>
</g>
</g>
@ -79,17 +73,18 @@
<g id="node4" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).PublicKey</title>
<g id="a_node4"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).PublicKey | defined in keys_and_cert.go:126">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M237.47,-199C237.47,-199 178.2706,-199 178.2706,-199 172.2706,-199 166.2706,-193 166.2706,-187 166.2706,-187 166.2706,-175 166.2706,-175 166.2706,-169 172.2706,-163 178.2706,-163 178.2706,-163 237.47,-163 237.47,-163 243.47,-163 249.47,-169 249.47,-175 249.47,-175 249.47,-187 249.47,-187 249.47,-193 243.47,-199 237.47,-199"/>
<text text-anchor="middle" x="207.8703" y="-176.8" font-family="Verdana" font-size="14.00" fill="#000000">PublicKey</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M248.2246,-191C248.2246,-191 167.516,-191 167.516,-191 161.516,-191 155.516,-185 155.516,-179 155.516,-179 155.516,-167 155.516,-167 155.516,-161 161.516,-155 167.516,-155 167.516,-155 248.2246,-155 248.2246,-155 254.2246,-155 260.2246,-161 260.2246,-167 260.2246,-167 260.2246,-179 260.2246,-179 260.2246,-185 254.2246,-191 248.2246,-191"/>
<text text-anchor="middle" x="207.8703" y="-177.2" font-family="Verdana" font-size="14.00" fill="#000000">keys_and_cert</text>
<text text-anchor="middle" x="207.8703" y="-160.4" font-family="Verdana" font-size="14.00" fill="#000000">PublicKey</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/keys_and_cert.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).PublicKey -->
<g id="edge3" class="edge">
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/keys_and_cert.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).PublicKey</title>
<g id="a_edge3"><a xlink:title="at fuzz.go:8: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).PublicKey]">
<path fill="none" stroke="#8b4513" d="M70.225,-155.119C93.4402,-159.4841 127.4671,-165.8821 155.88,-171.2244"/>
<polygon fill="#8b4513" stroke="#8b4513" points="155.5889,-174.731 166.0634,-173.1392 156.8824,-167.8515 155.5889,-174.731"/>
<g id="a_edge1"><a xlink:title="at fuzz.go:8: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).PublicKey]">
<path fill="none" stroke="#8b4513" d="M70.225,-147.119C90.5721,-150.9448 119.2244,-156.3322 145.123,-161.2018"/>
<polygon fill="#8b4513" stroke="#8b4513" points="144.7906,-164.7006 155.2652,-163.1088 146.0842,-157.8212 144.7906,-164.7006"/>
</a>
</g>
</g>
@ -97,17 +92,18 @@
<g id="node5" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).SigningPublicKey</title>
<g id="a_node5"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).SigningPublicKey | defined in keys_and_cert.go:131">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M259.0341,-260C259.0341,-260 156.7065,-260 156.7065,-260 150.7065,-260 144.7065,-254 144.7065,-248 144.7065,-248 144.7065,-236 144.7065,-236 144.7065,-230 150.7065,-224 156.7065,-224 156.7065,-224 259.0341,-224 259.0341,-224 265.0341,-224 271.0341,-230 271.0341,-236 271.0341,-236 271.0341,-248 271.0341,-248 271.0341,-254 265.0341,-260 259.0341,-260"/>
<text text-anchor="middle" x="207.8703" y="-237.8" font-family="Verdana" font-size="14.00" fill="#000000">SigningPublicKey</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M259.0341,-252C259.0341,-252 156.7065,-252 156.7065,-252 150.7065,-252 144.7065,-246 144.7065,-240 144.7065,-240 144.7065,-228 144.7065,-228 144.7065,-222 150.7065,-216 156.7065,-216 156.7065,-216 259.0341,-216 259.0341,-216 265.0341,-216 271.0341,-222 271.0341,-228 271.0341,-228 271.0341,-240 271.0341,-240 271.0341,-246 265.0341,-252 259.0341,-252"/>
<text text-anchor="middle" x="207.8703" y="-238.2" font-family="Verdana" font-size="14.00" fill="#000000">keys_and_cert</text>
<text text-anchor="middle" x="207.8703" y="-221.4" font-family="Verdana" font-size="14.00" fill="#000000">SigningPublicKey</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/keys_and_cert.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).SigningPublicKey -->
<g id="edge4" class="edge">
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/keys_and_cert.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).SigningPublicKey</title>
<g id="a_edge4"><a xlink:title="at fuzz.go:9: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).SigningPublicKey]">
<path fill="none" stroke="#8b4513" d="M64.4418,-168.022C81.1307,-181.4179 105.2896,-199.4686 128.5386,-212 133.6869,-214.7749 139.1473,-217.411 144.699,-219.8844"/>
<polygon fill="#8b4513" stroke="#8b4513" points="143.5181,-223.1857 154.0895,-223.8893 146.2642,-216.7468 143.5181,-223.1857"/>
<g id="a_edge2"><a xlink:title="at fuzz.go:9: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).SigningPublicKey]">
<path fill="none" stroke="#8b4513" d="M67.6184,-160.1635C86.0385,-173.2904 112.1509,-190.9378 136.5386,-204 141.4238,-206.6165 146.5867,-209.1688 151.811,-211.6095"/>
<polygon fill="#8b4513" stroke="#8b4513" points="150.6805,-214.9395 161.2342,-215.8722 153.5656,-208.5617 150.6805,-214.9395"/>
</a>
</g>
</g>

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 9.9 KiB

View File

@ -2,23 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/common/fuzz/router_address"
## Usage
#### func Fuzz
```go
func Fuzz(data []byte) int
```
# exportable
--
import "github.com/go-i2p/go-i2p/lib/common/fuzz/router_address"
![exportable.svg](exportable)
## Usage
#### func Fuzz

View File

@ -4,29 +4,21 @@
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="304pt" height="410pt"
viewBox="0.00 0.00 303.74 410.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 410)">
<svg width="298pt" height="367pt"
viewBox="0.00 0.00 297.74 367.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 367)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-410 303.7392,-410 303.7392,0 0,0"/>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-367 297.7392,-367 297.7392,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-402 295.7392,-402 295.7392,-8 8,-8"/>
<text text-anchor="middle" x="151.8696" y="-381.8" font-family="Arial" font-size="18.00" fill="#000000">exportable</text>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-359 289.7392,-359 289.7392,-8 8,-8"/>
<text text-anchor="middle" x="148.8696" y="-338.8" font-family="Arial" font-size="18.00" fill="#000000">exportable</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/router_address" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="135,-16 135,-364 287.7392,-364 287.7392,-16 135,-16"/>
<text text-anchor="middle" x="211.3696" y="-345.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">router_address</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/router_address" xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M161.7686,-68C161.7686,-68 260.9706,-68 260.9706,-68 266.9706,-68 272.9706,-74 272.9706,-80 272.9706,-80 272.9706,-317 272.9706,-317 272.9706,-323 266.9706,-329 260.9706,-329 260.9706,-329 161.7686,-329 161.7686,-329 155.7686,-329 149.7686,-323 149.7686,-317 149.7686,-317 149.7686,-80 149.7686,-80 149.7686,-74 155.7686,-68 161.7686,-68"/>
<text text-anchor="middle" x="211.3696" y="-76.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(RouterAddress)</text>
<g id="a_clust2"><a xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M162.7686,-60C162.7686,-60 263.9706,-60 263.9706,-60 269.9706,-60 275.9706,-66 275.9706,-72 275.9706,-72 275.9706,-309 275.9706,-309 275.9706,-315 269.9706,-321 263.9706,-321 263.9706,-321 162.7686,-321 162.7686,-321 156.7686,-321 150.7686,-315 150.7686,-309 150.7686,-309 150.7686,-72 150.7686,-72 150.7686,-66 156.7686,-60 162.7686,-60"/>
<text text-anchor="middle" x="213.3696" y="-68.5" font-family="Arial" font-size="15.00" fill="#222222">(RouterAddress)</text>
</a>
</g>
</g>
@ -34,8 +26,8 @@
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_address.Fuzz</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_address.Fuzz | defined in fuzz.go:5&#10;at fuzz.go:6: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.ReadRouterAddress]&#10;at fuzz.go:7: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Cost]&#10;at fuzz.go:8: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Expiration]&#10;at fuzz.go:9: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Options]&#10;at fuzz.go:10: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M58,-199C58,-199 28,-199 28,-199 22,-199 16,-193 16,-187 16,-187 16,-175 16,-175 16,-169 22,-163 28,-163 28,-163 58,-163 58,-163 64,-163 70,-169 70,-175 70,-175 70,-187 70,-187 70,-193 64,-199 58,-199"/>
<text text-anchor="middle" x="43" y="-176.8" font-family="Verdana" font-size="14.00" fill="#000000">Fuzz</text>
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M58,-191C58,-191 28,-191 28,-191 22,-191 16,-185 16,-179 16,-179 16,-167 16,-167 16,-161 22,-155 28,-155 28,-155 58,-155 58,-155 64,-155 70,-161 70,-167 70,-167 70,-179 70,-179 70,-185 64,-191 58,-191"/>
<text text-anchor="middle" x="43" y="-168.8" font-family="Verdana" font-size="14.00" fill="#000000">Fuzz</text>
</a>
</g>
</g>
@ -43,8 +35,9 @@
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.ReadRouterAddress</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.ReadRouterAddress | defined in router_address.go:317">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M267.609,-60C267.609,-60 155.1302,-60 155.1302,-60 149.1302,-60 143.1302,-54 143.1302,-48 143.1302,-48 143.1302,-36 143.1302,-36 143.1302,-30 149.1302,-24 155.1302,-24 155.1302,-24 267.609,-24 267.609,-24 273.609,-24 279.609,-30 279.609,-36 279.609,-36 279.609,-48 279.609,-48 279.609,-54 273.609,-60 267.609,-60"/>
<text text-anchor="middle" x="211.3696" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadRouterAddress</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M269.609,-52C269.609,-52 157.1302,-52 157.1302,-52 151.1302,-52 145.1302,-46 145.1302,-40 145.1302,-40 145.1302,-28 145.1302,-28 145.1302,-22 151.1302,-16 157.1302,-16 157.1302,-16 269.609,-16 269.609,-16 275.609,-16 281.609,-22 281.609,-28 281.609,-28 281.609,-40 281.609,-40 281.609,-46 275.609,-52 269.609,-52"/>
<text text-anchor="middle" x="213.3696" y="-38.2" font-family="Verdana" font-size="14.00" fill="#000000">router_address</text>
<text text-anchor="middle" x="213.3696" y="-21.4" font-family="Verdana" font-size="14.00" fill="#000000">ReadRouterAddress</text>
</a>
</g>
</g>
@ -52,8 +45,8 @@
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_address.Fuzz&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.ReadRouterAddress</title>
<g id="a_edge1"><a xlink:title="at fuzz.go:6: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.ReadRouterAddress]">
<path fill="none" stroke="#8b4513" d="M52.5485,-162.6228C66.067,-138.3067 93.0901,-95.432 134.6832,-65.0103"/>
<polygon fill="#8b4513" stroke="#8b4513" points="136.6949,-67.8744 142.9069,-59.2918 132.6986,-62.1273 136.6949,-67.8744"/>
<path fill="none" stroke="#8b4513" d="M54.2,-154.8153C69.8891,-130.7191 100.687,-88.1071 143.143,-57.8152"/>
<polygon fill="#8b4513" stroke="#8b4513" points="145.2054,-60.6453 151.4961,-52.1202 141.2621,-54.8616 145.2054,-60.6453"/>
</a>
</g>
</g>
@ -61,8 +54,9 @@
<g id="node3" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Cost</title>
<g id="a_node3"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Cost | defined in router_address.go:163">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M226.3696,-138C226.3696,-138 196.3696,-138 196.3696,-138 190.3696,-138 184.3696,-132 184.3696,-126 184.3696,-126 184.3696,-114 184.3696,-114 184.3696,-108 190.3696,-102 196.3696,-102 196.3696,-102 226.3696,-102 226.3696,-102 232.3696,-102 238.3696,-108 238.3696,-114 238.3696,-114 238.3696,-126 238.3696,-126 238.3696,-132 232.3696,-138 226.3696,-138"/>
<text text-anchor="middle" x="211.3696" y="-115.8" font-family="Verdana" font-size="14.00" fill="#000000">Cost</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M254.7758,-130C254.7758,-130 171.9634,-130 171.9634,-130 165.9634,-130 159.9634,-124 159.9634,-118 159.9634,-118 159.9634,-106 159.9634,-106 159.9634,-100 165.9634,-94 171.9634,-94 171.9634,-94 254.7758,-94 254.7758,-94 260.7758,-94 266.7758,-100 266.7758,-106 266.7758,-106 266.7758,-118 266.7758,-118 266.7758,-124 260.7758,-130 254.7758,-130"/>
<text text-anchor="middle" x="213.3696" y="-116.2" font-family="Verdana" font-size="14.00" fill="#000000">router_address</text>
<text text-anchor="middle" x="213.3696" y="-99.4" font-family="Verdana" font-size="14.00" fill="#000000">Cost</text>
</a>
</g>
</g>
@ -70,8 +64,8 @@
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_address.Fuzz&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Cost</title>
<g id="a_edge2"><a xlink:title="at fuzz.go:7: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Cost]">
<path fill="none" stroke="#8b4513" d="M70.0515,-171.1993C98.3189,-160.9581 142.8584,-144.8215 174.37,-133.4049"/>
<polygon fill="#8b4513" stroke="#8b4513" points="175.8964,-136.5746 184.1061,-129.8775 173.5119,-129.9932 175.8964,-136.5746"/>
<path fill="none" stroke="#8b4513" d="M70.3728,-163.1993C92.7676,-155.181 125.2557,-143.5488 153.6076,-133.3975"/>
<polygon fill="#8b4513" stroke="#8b4513" points="154.8086,-136.6851 163.0435,-130.019 152.4489,-130.0948 154.8086,-136.6851"/>
</a>
</g>
</g>
@ -79,8 +73,9 @@
<g id="node4" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Expiration</title>
<g id="a_node4"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Expiration | defined in router_address.go:168">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M240.9693,-199C240.9693,-199 181.7699,-199 181.7699,-199 175.7699,-199 169.7699,-193 169.7699,-187 169.7699,-187 169.7699,-175 169.7699,-175 169.7699,-169 175.7699,-163 181.7699,-163 181.7699,-163 240.9693,-163 240.9693,-163 246.9693,-163 252.9693,-169 252.9693,-175 252.9693,-175 252.9693,-187 252.9693,-187 252.9693,-193 246.9693,-199 240.9693,-199"/>
<text text-anchor="middle" x="211.3696" y="-176.8" font-family="Verdana" font-size="14.00" fill="#000000">Expiration</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M254.7758,-191C254.7758,-191 171.9634,-191 171.9634,-191 165.9634,-191 159.9634,-185 159.9634,-179 159.9634,-179 159.9634,-167 159.9634,-167 159.9634,-161 165.9634,-155 171.9634,-155 171.9634,-155 254.7758,-155 254.7758,-155 260.7758,-155 266.7758,-161 266.7758,-167 266.7758,-167 266.7758,-179 266.7758,-179 266.7758,-185 260.7758,-191 254.7758,-191"/>
<text text-anchor="middle" x="213.3696" y="-177.2" font-family="Verdana" font-size="14.00" fill="#000000">router_address</text>
<text text-anchor="middle" x="213.3696" y="-160.4" font-family="Verdana" font-size="14.00" fill="#000000">Expiration</text>
</a>
</g>
</g>
@ -88,8 +83,8 @@
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_address.Fuzz&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Expiration</title>
<g id="a_edge3"><a xlink:title="at fuzz.go:8: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Expiration]">
<path fill="none" stroke="#8b4513" d="M70.0515,-181C94.0828,-181 129.8746,-181 159.4241,-181"/>
<polygon fill="#8b4513" stroke="#8b4513" points="159.5863,-184.5001 169.5862,-181 159.5862,-177.5001 159.5863,-184.5001"/>
<path fill="none" stroke="#8b4513" d="M70.3728,-173C91.7248,-173 122.2521,-173 149.6217,-173"/>
<polygon fill="#8b4513" stroke="#8b4513" points="149.9311,-176.5001 159.931,-173 149.931,-169.5001 149.9311,-176.5001"/>
</a>
</g>
</g>
@ -97,8 +92,9 @@
<g id="node5" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Options</title>
<g id="a_node5"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Options | defined in router_address.go:305">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M233.7028,-260C233.7028,-260 189.0364,-260 189.0364,-260 183.0364,-260 177.0364,-254 177.0364,-248 177.0364,-248 177.0364,-236 177.0364,-236 177.0364,-230 183.0364,-224 189.0364,-224 189.0364,-224 233.7028,-224 233.7028,-224 239.7028,-224 245.7028,-230 245.7028,-236 245.7028,-236 245.7028,-248 245.7028,-248 245.7028,-254 239.7028,-260 233.7028,-260"/>
<text text-anchor="middle" x="211.3696" y="-237.8" font-family="Verdana" font-size="14.00" fill="#000000">Options</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M254.7758,-252C254.7758,-252 171.9634,-252 171.9634,-252 165.9634,-252 159.9634,-246 159.9634,-240 159.9634,-240 159.9634,-228 159.9634,-228 159.9634,-222 165.9634,-216 171.9634,-216 171.9634,-216 254.7758,-216 254.7758,-216 260.7758,-216 266.7758,-222 266.7758,-228 266.7758,-228 266.7758,-240 266.7758,-240 266.7758,-246 260.7758,-252 254.7758,-252"/>
<text text-anchor="middle" x="213.3696" y="-238.2" font-family="Verdana" font-size="14.00" fill="#000000">router_address</text>
<text text-anchor="middle" x="213.3696" y="-221.4" font-family="Verdana" font-size="14.00" fill="#000000">Options</text>
</a>
</g>
</g>
@ -106,8 +102,8 @@
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_address.Fuzz&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Options</title>
<g id="a_edge4"><a xlink:title="at fuzz.go:9: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).Options]">
<path fill="none" stroke="#8b4513" d="M70.0515,-190.8007C96.3058,-200.3126 136.5971,-214.91 167.4499,-226.088"/>
<polygon fill="#8b4513" stroke="#8b4513" points="166.5115,-229.4705 177.1057,-229.5862 168.8959,-222.8892 166.5115,-229.4705"/>
<path fill="none" stroke="#8b4513" d="M70.3728,-182.8007C92.7676,-190.819 125.2557,-202.4512 153.6076,-212.6025"/>
<polygon fill="#8b4513" stroke="#8b4513" points="152.4489,-215.9052 163.0435,-215.981 154.8086,-209.3149 152.4489,-215.9052"/>
</a>
</g>
</g>
@ -115,8 +111,9 @@
<g id="node6" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle</title>
<g id="a_node6"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle | defined in router_address.go:173">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M253.0718,-321C253.0718,-321 169.6674,-321 169.6674,-321 163.6674,-321 157.6674,-315 157.6674,-309 157.6674,-309 157.6674,-297 157.6674,-297 157.6674,-291 163.6674,-285 169.6674,-285 169.6674,-285 253.0718,-285 253.0718,-285 259.0718,-285 265.0718,-291 265.0718,-297 265.0718,-297 265.0718,-309 265.0718,-309 265.0718,-315 259.0718,-321 253.0718,-321"/>
<text text-anchor="middle" x="211.3696" y="-298.8" font-family="Verdana" font-size="14.00" fill="#000000">TransportStyle</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M255.0718,-313C255.0718,-313 171.6674,-313 171.6674,-313 165.6674,-313 159.6674,-307 159.6674,-301 159.6674,-301 159.6674,-289 159.6674,-289 159.6674,-283 165.6674,-277 171.6674,-277 171.6674,-277 255.0718,-277 255.0718,-277 261.0718,-277 267.0718,-283 267.0718,-289 267.0718,-289 267.0718,-301 267.0718,-301 267.0718,-307 261.0718,-313 255.0718,-313"/>
<text text-anchor="middle" x="213.3696" y="-299.2" font-family="Verdana" font-size="14.00" fill="#000000">router_address</text>
<text text-anchor="middle" x="213.3696" y="-282.4" font-family="Verdana" font-size="14.00" fill="#000000">TransportStyle</text>
</a>
</g>
</g>
@ -124,8 +121,8 @@
<g id="edge5" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_address.Fuzz&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle</title>
<g id="a_edge5"><a xlink:title="at fuzz.go:10: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_address.RouterAddress).TransportStyle]">
<path fill="none" stroke="#8b4513" d="M57.185,-199.133C73.9077,-219.4785 103.4438,-252.332 135,-273 139.2117,-275.7585 143.7162,-278.3272 148.3523,-280.7058"/>
<polygon fill="#8b4513" stroke="#8b4513" points="146.8581,-283.8709 157.3876,-285.0458 149.889,-277.561 146.8581,-283.8709"/>
<path fill="none" stroke="#8b4513" d="M59.628,-191.1509C78.7338,-211.2098 111.7512,-243.5148 145,-265 149.0077,-267.5898 153.2766,-270.0551 157.6487,-272.3782"/>
<polygon fill="#8b4513" stroke="#8b4513" points="156.211,-275.5729 166.7171,-276.9412 159.3574,-269.3198 156.211,-275.5729"/>
</a>
</g>
</g>

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -2,23 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/common/fuzz/router_identity"
## Usage
#### func Fuzz
```go
func Fuzz(data []byte) int
```
# exportable
--
import "github.com/go-i2p/go-i2p/lib/common/fuzz/router_identity"
![exportable.svg](exportable)
## Usage
#### func Fuzz

View File

@ -4,37 +4,21 @@
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="301pt" height="270pt"
viewBox="0.00 0.00 301.42 270.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 270)">
<svg width="293pt" height="184pt"
viewBox="0.00 0.00 293.42 184.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 184)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-270 301.4152,-270 301.4152,0 0,0"/>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-184 293.4152,-184 293.4152,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-262 293.4152,-262 293.4152,-8 8,-8"/>
<text text-anchor="middle" x="150.7076" y="-241.8" font-family="Arial" font-size="18.00" fill="#000000">exportable</text>
</g>
<g id="clust4" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/router_identity" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="135,-145 135,-224 285.4152,-224 285.4152,-145 135,-145"/>
<text text-anchor="middle" x="210.2076" y="-205.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">router_identity</text>
</a>
</g>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-176 285.4152,-176 285.4152,-8 8,-8"/>
<text text-anchor="middle" x="146.7076" y="-155.8" font-family="Arial" font-size="18.00" fill="#000000">exportable</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/keys_and_cert" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="144.6683,-16 144.6683,-137 275.7469,-137 275.7469,-16 144.6683,-16"/>
<text text-anchor="middle" x="210.2076" y="-118.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">keys_and_cert</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/keys_and_cert" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M164.6683,-24C164.6683,-24 255.7469,-24 255.7469,-24 261.7469,-24 267.7469,-30 267.7469,-36 267.7469,-36 267.7469,-90 267.7469,-90 267.7469,-96 261.7469,-102 255.7469,-102 255.7469,-102 164.6683,-102 164.6683,-102 158.6683,-102 152.6683,-96 152.6683,-90 152.6683,-90 152.6683,-36 152.6683,-36 152.6683,-30 158.6683,-24 164.6683,-24"/>
<text text-anchor="middle" x="210.2076" y="-32.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*KeysAndCert)</text>
<g id="a_clust2"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M161.7805,-60C161.7805,-60 258.6347,-60 258.6347,-60 264.6347,-60 270.6347,-66 270.6347,-72 270.6347,-72 270.6347,-126 270.6347,-126 270.6347,-132 264.6347,-138 258.6347,-138 258.6347,-138 161.7805,-138 161.7805,-138 155.7805,-138 149.7805,-132 149.7805,-126 149.7805,-126 149.7805,-72 149.7805,-72 149.7805,-66 155.7805,-60 161.7805,-60"/>
<text text-anchor="middle" x="210.2076" y="-68.5" font-family="Arial" font-size="15.00" fill="#222222">(*KeysAndCert)</text>
</a>
</g>
</g>
@ -42,35 +26,18 @@
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_identity.Fuzz</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_identity.Fuzz | defined in fuzz.go:5&#10;at fuzz.go:6: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity]&#10;at fuzz.go:7: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M58,-124C58,-124 28,-124 28,-124 22,-124 16,-118 16,-112 16,-112 16,-100 16,-100 16,-94 22,-88 28,-88 28,-88 58,-88 58,-88 64,-88 70,-94 70,-100 70,-100 70,-112 70,-112 70,-118 64,-124 58,-124"/>
<text text-anchor="middle" x="43" y="-101.8" font-family="Verdana" font-size="14.00" fill="#000000">Fuzz</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate -->
<g id="node2" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate</title>
<g id="a_node2"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate | defined in keys_and_cert.go:136">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M239.7862,-94C239.7862,-94 180.629,-94 180.629,-94 174.629,-94 168.629,-88 168.629,-82 168.629,-82 168.629,-70 168.629,-70 168.629,-64 174.629,-58 180.629,-58 180.629,-58 239.7862,-58 239.7862,-58 245.7862,-58 251.7862,-64 251.7862,-70 251.7862,-70 251.7862,-82 251.7862,-82 251.7862,-88 245.7862,-94 239.7862,-94"/>
<text text-anchor="middle" x="210.2076" y="-71.8" font-family="Verdana" font-size="14.00" fill="#000000">Certificate</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_identity.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate -->
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_identity.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate</title>
<g id="a_edge2"><a xlink:title="at fuzz.go:7: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate]">
<path fill="none" stroke="#8b4513" d="M70.2369,-101.1132C94.0774,-96.8358 129.3644,-90.5047 158.5427,-85.2696"/>
<polygon fill="#8b4513" stroke="#8b4513" points="159.3552,-88.6798 168.5799,-83.4687 158.1189,-81.7898 159.3552,-88.6798"/>
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M58,-65C58,-65 28,-65 28,-65 22,-65 16,-59 16,-53 16,-53 16,-41 16,-41 16,-35 22,-29 28,-29 28,-29 58,-29 58,-29 64,-29 70,-35 70,-41 70,-41 70,-53 70,-53 70,-59 64,-65 58,-65"/>
<text text-anchor="middle" x="43" y="-42.8" font-family="Verdana" font-size="14.00" fill="#000000">Fuzz</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity -->
<g id="node3" class="node">
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity | defined in router_identity.go:37">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M265.6234,-189C265.6234,-189 154.7918,-189 154.7918,-189 148.7918,-189 142.7918,-183 142.7918,-177 142.7918,-177 142.7918,-165 142.7918,-165 142.7918,-159 148.7918,-153 154.7918,-153 154.7918,-153 265.6234,-153 265.6234,-153 271.6234,-153 277.6234,-159 277.6234,-165 277.6234,-165 277.6234,-177 277.6234,-177 277.6234,-183 271.6234,-189 265.6234,-189"/>
<text text-anchor="middle" x="210.2076" y="-166.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadRouterIdentity</text>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity | defined in router_identity.go:37">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M265.6234,-52C265.6234,-52 154.7918,-52 154.7918,-52 148.7918,-52 142.7918,-46 142.7918,-40 142.7918,-40 142.7918,-28 142.7918,-28 142.7918,-22 148.7918,-16 154.7918,-16 154.7918,-16 265.6234,-16 265.6234,-16 271.6234,-16 277.6234,-22 277.6234,-28 277.6234,-28 277.6234,-40 277.6234,-40 277.6234,-46 271.6234,-52 265.6234,-52"/>
<text text-anchor="middle" x="210.2076" y="-38.2" font-family="Verdana" font-size="14.00" fill="#000000">router_identity</text>
<text text-anchor="middle" x="210.2076" y="-21.4" font-family="Verdana" font-size="14.00" fill="#000000">ReadRouterIdentity</text>
</a>
</g>
</g>
@ -78,8 +45,27 @@
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_identity.Fuzz&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity</title>
<g id="a_edge1"><a xlink:title="at fuzz.go:6: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity]">
<path fill="none" stroke="#8b4513" d="M70.2369,-116.588C92.9344,-125.4114 126.0071,-138.2681 154.3058,-149.2688"/>
<polygon fill="#8b4513" stroke="#8b4513" points="153.1091,-152.5587 163.6978,-152.9199 155.6454,-146.0344 153.1091,-152.5587"/>
<path fill="none" stroke="#8b4513" d="M70.2369,-44.8824C87.33,-43.5534 110.3072,-41.767 132.6983,-40.0262"/>
<polygon fill="#8b4513" stroke="#8b4513" points="133.223,-43.496 142.9216,-39.2313 132.6803,-36.5171 133.223,-43.496"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate -->
<g id="node3" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate</title>
<g id="a_node3"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate | defined in keys_and_cert.go:136">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M250.5619,-130C250.5619,-130 169.8533,-130 169.8533,-130 163.8533,-130 157.8533,-124 157.8533,-118 157.8533,-118 157.8533,-106 157.8533,-106 157.8533,-100 163.8533,-94 169.8533,-94 169.8533,-94 250.5619,-94 250.5619,-94 256.5619,-94 262.5619,-100 262.5619,-106 262.5619,-106 262.5619,-118 262.5619,-118 262.5619,-124 256.5619,-130 250.5619,-130"/>
<text text-anchor="middle" x="210.2076" y="-116.2" font-family="Verdana" font-size="14.00" fill="#000000">keys_and_cert</text>
<text text-anchor="middle" x="210.2076" y="-99.4" font-family="Verdana" font-size="14.00" fill="#000000">Certificate</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_identity.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate -->
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/router_identity.Fuzz&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate</title>
<g id="a_edge2"><a xlink:title="at fuzz.go:7: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Certificate]">
<path fill="none" stroke="#8b4513" d="M70.3186,-59.5347C90.2689,-68.4946 118.0733,-80.5827 143,-90 144.6187,-90.6115 146.2628,-91.2224 147.9247,-91.8308"/>
<polygon fill="#8b4513" stroke="#8b4513" points="146.9887,-95.2129 157.5834,-95.2765 149.3408,-88.6199 146.9887,-95.2129"/>
</a>
</g>
</g>

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -2,23 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/common/fuzz/string"
## Usage
#### func Fuzz
```go
func Fuzz(data []byte) int
```
# exportable
--
import "github.com/go-i2p/go-i2p/lib/common/fuzz/string"
![exportable.svg](exportable)
## Usage
#### func Fuzz

View File

@ -4,29 +4,21 @@
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="262pt" height="288pt"
viewBox="0.00 0.00 262.22 288.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 288)">
<svg width="257pt" height="245pt"
viewBox="0.00 0.00 257.22 245.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 245)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-288 262.2202,-288 262.2202,0 0,0"/>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-245 257.2202,-245 257.2202,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-280 254.2202,-280 254.2202,-8 8,-8"/>
<text text-anchor="middle" x="131.1101" y="-259.8" font-family="Arial" font-size="18.00" fill="#000000">exportable</text>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-237 249.2202,-237 249.2202,-8 8,-8"/>
<text text-anchor="middle" x="128.6101" y="-216.8" font-family="Arial" font-size="18.00" fill="#000000">exportable</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/data</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/data" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/data">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="137,-16 137,-242 246.2202,-242 246.2202,-16 137,-16"/>
<text text-anchor="middle" x="191.6101" y="-223.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">data</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/data" xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M162.7812,-68C162.7812,-68 221.439,-68 221.439,-68 227.439,-68 233.439,-74 233.439,-80 233.439,-80 233.439,-195 233.439,-195 233.439,-201 227.439,-207 221.439,-207 221.439,-207 162.7812,-207 162.7812,-207 156.7812,-207 150.7812,-201 150.7812,-195 150.7812,-195 150.7812,-80 150.7812,-80 150.7812,-74 156.7812,-68 162.7812,-68"/>
<text text-anchor="middle" x="192.1101" y="-76.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(I2PString)</text>
<g id="a_clust2"><a xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M162.7812,-60C162.7812,-60 226.439,-60 226.439,-60 232.439,-60 238.439,-66 238.439,-72 238.439,-72 238.439,-187 238.439,-187 238.439,-193 232.439,-199 226.439,-199 226.439,-199 162.7812,-199 162.7812,-199 156.7812,-199 150.7812,-193 150.7812,-187 150.7812,-187 150.7812,-72 150.7812,-72 150.7812,-66 156.7812,-60 162.7812,-60"/>
<text text-anchor="middle" x="194.6101" y="-68.5" font-family="Arial" font-size="15.00" fill="#222222">(I2PString)</text>
</a>
</g>
</g>
@ -34,8 +26,8 @@
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/string.Fuzz</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/string.Fuzz | defined in fuzz.go:5&#10;at fuzz.go:7: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data]&#10;at fuzz.go:10: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data]&#10;at fuzz.go:8: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Length]&#10;at fuzz.go:11: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Length]&#10;at fuzz.go:9: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/data.ToI2PString]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M58,-138C58,-138 28,-138 28,-138 22,-138 16,-132 16,-126 16,-126 16,-114 16,-114 16,-108 22,-102 28,-102 28,-102 58,-102 58,-102 64,-102 70,-108 70,-114 70,-114 70,-126 70,-126 70,-132 64,-138 58,-138"/>
<text text-anchor="middle" x="43" y="-115.8" font-family="Verdana" font-size="14.00" fill="#000000">Fuzz</text>
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M58,-130C58,-130 28,-130 28,-130 22,-130 16,-124 16,-118 16,-118 16,-106 16,-106 16,-100 22,-94 28,-94 28,-94 58,-94 58,-94 64,-94 70,-100 70,-106 70,-106 70,-118 70,-118 70,-124 64,-130 58,-130"/>
<text text-anchor="middle" x="43" y="-107.8" font-family="Verdana" font-size="14.00" fill="#000000">Fuzz</text>
</a>
</g>
</g>
@ -43,8 +35,9 @@
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/data.ToI2PString</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/data.ToI2PString | defined in string.go:114">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M226.3306,-60C226.3306,-60 156.8896,-60 156.8896,-60 150.8896,-60 144.8896,-54 144.8896,-48 144.8896,-48 144.8896,-36 144.8896,-36 144.8896,-30 150.8896,-24 156.8896,-24 156.8896,-24 226.3306,-24 226.3306,-24 232.3306,-24 238.3306,-30 238.3306,-36 238.3306,-36 238.3306,-48 238.3306,-48 238.3306,-54 232.3306,-60 226.3306,-60"/>
<text text-anchor="middle" x="191.6101" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">ToI2PString</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M229.3306,-52C229.3306,-52 159.8896,-52 159.8896,-52 153.8896,-52 147.8896,-46 147.8896,-40 147.8896,-40 147.8896,-28 147.8896,-28 147.8896,-22 153.8896,-16 159.8896,-16 159.8896,-16 229.3306,-16 229.3306,-16 235.3306,-16 241.3306,-22 241.3306,-28 241.3306,-28 241.3306,-40 241.3306,-40 241.3306,-46 235.3306,-52 229.3306,-52"/>
<text text-anchor="middle" x="194.6101" y="-38.2" font-family="Verdana" font-size="14.00" fill="#000000">data</text>
<text text-anchor="middle" x="194.6101" y="-21.4" font-family="Verdana" font-size="14.00" fill="#000000">ToI2PString</text>
</a>
</g>
</g>
@ -52,8 +45,8 @@
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/string.Fuzz&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/data.ToI2PString</title>
<g id="a_edge3"><a xlink:title="at fuzz.go:9: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/data.ToI2PString]">
<path fill="none" stroke="#8b4513" d="M70.341,-102.1837C86.9701,-91.6949 109.0169,-78.3859 136.2019,-64.6014"/>
<polygon fill="#8b4513" stroke="#8b4513" points="137.8199,-67.7056 145.2084,-60.1122 134.6972,-61.4407 137.8199,-67.7056"/>
<path fill="none" stroke="#8b4513" d="M70.0043,-97.129C89.2049,-86.6594 115.8894,-72.3156 146.6535,-56.7465"/>
<polygon fill="#8b4513" stroke="#8b4513" points="148.5211,-59.7249 155.8799,-52.1027 145.374,-53.4722 148.5211,-59.7249"/>
</a>
</g>
</g>
@ -61,8 +54,9 @@
<g id="node3" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data</title>
<g id="a_node3"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data | defined in string.go:73">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M206.6101,-138C206.6101,-138 176.6101,-138 176.6101,-138 170.6101,-138 164.6101,-132 164.6101,-126 164.6101,-126 164.6101,-114 164.6101,-114 164.6101,-108 170.6101,-102 176.6101,-102 176.6101,-102 206.6101,-102 206.6101,-102 212.6101,-102 218.6101,-108 218.6101,-114 218.6101,-114 218.6101,-126 218.6101,-126 218.6101,-132 212.6101,-138 206.6101,-138"/>
<text text-anchor="middle" x="191.6101" y="-115.8" font-family="Verdana" font-size="14.00" fill="#000000">Data</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M209.6101,-130C209.6101,-130 179.6101,-130 179.6101,-130 173.6101,-130 167.6101,-124 167.6101,-118 167.6101,-118 167.6101,-106 167.6101,-106 167.6101,-100 173.6101,-94 179.6101,-94 179.6101,-94 209.6101,-94 209.6101,-94 215.6101,-94 221.6101,-100 221.6101,-106 221.6101,-106 221.6101,-118 221.6101,-118 221.6101,-124 215.6101,-130 209.6101,-130"/>
<text text-anchor="middle" x="194.6101" y="-116.2" font-family="Verdana" font-size="14.00" fill="#000000">data</text>
<text text-anchor="middle" x="194.6101" y="-99.4" font-family="Verdana" font-size="14.00" fill="#000000">Data</text>
</a>
</g>
</g>
@ -70,8 +64,8 @@
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/string.Fuzz&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data</title>
<g id="a_edge1"><a xlink:title="at fuzz.go:7: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data]&#10;at fuzz.go:10: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Data]">
<path fill="none" stroke="#8b4513" d="M70.2574,-120C93.8244,-120 128.1179,-120 154.2422,-120"/>
<polygon fill="#8b4513" stroke="#8b4513" points="154.5256,-123.5001 164.5255,-120 154.5255,-116.5001 154.5256,-123.5001"/>
<path fill="none" stroke="#8b4513" d="M70.1048,-112C94.3917,-112 130.2444,-112 157.2471,-112"/>
<polygon fill="#8b4513" stroke="#8b4513" points="157.4848,-115.5001 167.4848,-112 157.4847,-108.5001 157.4848,-115.5001"/>
</a>
</g>
</g>
@ -79,8 +73,9 @@
<g id="node4" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Length</title>
<g id="a_node4"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Length | defined in string.go:31">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M211.2688,-199C211.2688,-199 171.9514,-199 171.9514,-199 165.9514,-199 159.9514,-193 159.9514,-187 159.9514,-187 159.9514,-175 159.9514,-175 159.9514,-169 165.9514,-163 171.9514,-163 171.9514,-163 211.2688,-163 211.2688,-163 217.2688,-163 223.2688,-169 223.2688,-175 223.2688,-175 223.2688,-187 223.2688,-187 223.2688,-193 217.2688,-199 211.2688,-199"/>
<text text-anchor="middle" x="191.6101" y="-176.8" font-family="Verdana" font-size="14.00" fill="#000000">Length</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M214.2688,-191C214.2688,-191 174.9514,-191 174.9514,-191 168.9514,-191 162.9514,-185 162.9514,-179 162.9514,-179 162.9514,-167 162.9514,-167 162.9514,-161 168.9514,-155 174.9514,-155 174.9514,-155 214.2688,-155 214.2688,-155 220.2688,-155 226.2688,-161 226.2688,-167 226.2688,-167 226.2688,-179 226.2688,-179 226.2688,-185 220.2688,-191 214.2688,-191"/>
<text text-anchor="middle" x="194.6101" y="-177.2" font-family="Verdana" font-size="14.00" fill="#000000">data</text>
<text text-anchor="middle" x="194.6101" y="-160.4" font-family="Verdana" font-size="14.00" fill="#000000">Length</text>
</a>
</g>
</g>
@ -88,8 +83,8 @@
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/fuzz/string.Fuzz&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Length</title>
<g id="a_edge2"><a xlink:title="at fuzz.go:8: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Length]&#10;at fuzz.go:11: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.I2PString).Length]">
<path fill="none" stroke="#8b4513" d="M70.2574,-131.1883C92.6965,-140.3989 124.8599,-153.601 150.4371,-164.0997"/>
<polygon fill="#8b4513" stroke="#8b4513" points="149.3033,-167.4176 159.8833,-167.9771 151.9614,-160.9419 149.3033,-167.4176"/>
<path fill="none" stroke="#8b4513" d="M70.1048,-122.9056C93.2412,-132.2144 126.8736,-145.7464 153.3522,-156.4"/>
<polygon fill="#8b4513" stroke="#8b4513" points="152.1674,-159.6959 162.7511,-160.1816 154.7804,-153.2018 152.1674,-159.6959"/>
</a>
</g>
</g>

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

View File

@ -2,201 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/common/key_certificate"
Package key_certificate implements the I2P Destination common data structure
## Usage
```go
const (
KEYCERT_SIGN_DSA_SHA1 = 0
KEYCERT_SIGN_P256 = 1
KEYCERT_SIGN_P384 = 2
KEYCERT_SIGN_P521 = 3
KEYCERT_SIGN_RSA2048 = 4
KEYCERT_SIGN_RSA3072 = 5
KEYCERT_SIGN_RSA4096 = 6
KEYCERT_SIGN_ED25519 = 7
KEYCERT_SIGN_ED25519PH = 8
)
```
Key Certificate Signing Key Types
```go
const (
KEYCERT_CRYPTO_ELG = 0
KEYCERT_CRYPTO_P256 = 1
KEYCERT_CRYPTO_P384 = 2
KEYCERT_CRYPTO_P521 = 3
KEYCERT_CRYPTO_X25519 = 4
)
```
Key Certificate Public Key Types
```go
const (
KEYCERT_SIGN_DSA_SHA1_SIZE = 128
KEYCERT_SIGN_P256_SIZE = 64
KEYCERT_SIGN_P384_SIZE = 96
KEYCERT_SIGN_P521_SIZE = 132
KEYCERT_SIGN_RSA2048_SIZE = 256
KEYCERT_SIGN_RSA3072_SIZE = 384
KEYCERT_SIGN_RSA4096_SIZE = 512
KEYCERT_SIGN_ED25519_SIZE = 32
KEYCERT_SIGN_ED25519PH_SIZE = 32
)
```
signingPublicKey sizes for Signing Key Types
```go
const (
KEYCERT_CRYPTO_ELG_SIZE = 256
KEYCERT_CRYPTO_P256_SIZE = 64
KEYCERT_CRYPTO_P384_SIZE = 96
KEYCERT_CRYPTO_P521_SIZE = 132
KEYCERT_CRYPTO_X25519_SIZE = 32
)
```
publicKey sizes for Public Key Types
```go
const (
KEYCERT_PUBKEY_SIZE = 256
KEYCERT_SPK_SIZE = 128
)
```
Sizes of structures in KeyCertificates
```go
const (
CRYPTO_KEY_TYPE_ELGAMAL = 0 // ElGamal
// Signature Types
SIGNATURE_TYPE_DSA_SHA1 = 0 // DSA-SHA1
SIGNATURE_TYPE_ED25519_SHA512 = 7 // Ed25519
)
```
```go
const (
KEYCERT_MIN_SIZE = 7
)
```
```go
var CryptoPublicKeySizes = map[uint16]int{
CRYPTO_KEY_TYPE_ELGAMAL: 256,
}
```
```go
var SignaturePublicKeySizes = map[uint16]int{
SIGNATURE_TYPE_DSA_SHA1: 128,
SIGNATURE_TYPE_ED25519_SHA512: 32,
}
```
#### type KeyCertificate
```go
type KeyCertificate struct {
Certificate
SpkType Integer
CpkType Integer
}
```
type KeyCertificate []byte
#### func KeyCertificateFromCertificate
```go
func KeyCertificateFromCertificate(cert Certificate) (*KeyCertificate, error)
```
#### func NewKeyCertificate
```go
func NewKeyCertificate(bytes []byte) (key_certificate *KeyCertificate, remainder []byte, err error)
```
NewKeyCertificate creates a new *KeyCertificate from []byte using
ReadCertificate. The remaining bytes after the specified length are also
returned. Returns a list of errors that occurred during parsing.
#### func (KeyCertificate) ConstructPublicKey
```go
func (keyCertificate KeyCertificate) ConstructPublicKey(data []byte) (public_key crypto.RecievingPublicKey, err error)
```
ConstructPublicKey returns a publicKey constructed using any excess data that
may be stored in the KeyCertififcate. Returns enr errors encountered while
parsing.
#### func (KeyCertificate) ConstructSigningPublicKey
```go
func (keyCertificate KeyCertificate) ConstructSigningPublicKey(data []byte) (signing_public_key crypto.SigningPublicKey, err error)
```
ConstructSigningPublicKey returns a SingingPublicKey constructed using any
excess data that may be stored in the KeyCertificate. Returns any errors
encountered while parsing.
#### func (*KeyCertificate) CryptoPublicKeySize
```go
func (keyCertificate *KeyCertificate) CryptoPublicKeySize() (int, error)
```
#### func (KeyCertificate) CryptoSize
```go
func (keyCertificate KeyCertificate) CryptoSize() (size int)
```
CryptoSize return the size of a Public Key corresponding to the Key
Certificate's publicKey type.
#### func (KeyCertificate) Data
```go
func (keyCertificate KeyCertificate) Data() ([]byte, error)
```
Data returns the raw []byte contained in the Certificate.
#### func (KeyCertificate) PublicKeyType
```go
func (keyCertificate KeyCertificate) PublicKeyType() (pubkey_type int)
```
PublicKeyType returns the publicKey type as a Go integer.
#### func (KeyCertificate) SignatureSize
```go
func (keyCertificate KeyCertificate) SignatureSize() (size int)
```
SignatureSize return the size of a Signature corresponding to the Key
Certificate's signingPublicKey type.
#### func (*KeyCertificate) SigningPublicKeySize
```go
func (keyCertificate *KeyCertificate) SigningPublicKeySize() int
```
#### func (KeyCertificate) SigningPublicKeyType
```go
func (keyCertificate KeyCertificate) SigningPublicKeyType() (signing_pubkey_type int)
```
SigningPublicKeyType returns the signingPublicKey type as a Go integer.
# key_certificate
--
import "github.com/go-i2p/go-i2p/lib/common/key_certificate"
Package key_certificate implements the I2P Destination common data structure
![key_certificate.svg](key_certificate)
Package key_certificate implements the I2P Destination common data structure
## Usage
```go

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 82 KiB

View File

@ -2,119 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/common/keys_and_cert"
Package keys_and_cert implements the I2P KeysAndCert common data structure
## Usage
```go
const (
KEYS_AND_CERT_PUBKEY_SIZE = 256
KEYS_AND_CERT_SPK_SIZE = 128
KEYS_AND_CERT_MIN_SIZE = 387
KEYS_AND_CERT_DATA_SIZE = 384
)
```
Sizes of various KeysAndCert structures and requirements
#### type KeysAndCert
```go
type KeysAndCert struct {
KeyCertificate *KeyCertificate
ReceivingPublic crypto.RecievingPublicKey
Padding []byte
SigningPublic crypto.SigningPublicKey
}
```
KeysAndCert is the represenation of an I2P KeysAndCert.
https://geti2p.net/spec/common-structures#keysandcert
#### func NewKeysAndCert
```go
func NewKeysAndCert(
keyCertificate *KeyCertificate,
publicKey crypto.RecievingPublicKey,
padding []byte,
signingPublicKey crypto.SigningPublicKey,
) (*KeysAndCert, error)
```
NewKeysAndCert creates a new KeysAndCert instance with the provided parameters.
It validates the sizes of the provided keys and padding before assembling the
struct.
#### func ReadKeysAndCert
```go
func ReadKeysAndCert(data []byte) (keys_and_cert KeysAndCert, remainder []byte, err error)
```
ReadKeysAndCert creates a new *KeysAndCert from []byte using ReadKeysAndCert.
Returns a pointer to KeysAndCert unlike ReadKeysAndCert.
#### func ReadKeysAndCertElgAndEd25519
```go
func ReadKeysAndCertElgAndEd25519(data []byte) (keysAndCert *KeysAndCert, remainder []byte, err error)
```
#### func (KeysAndCert) Bytes
```go
func (keys_and_cert KeysAndCert) Bytes() []byte
```
Bytes returns the entire keyCertificate in []byte form, trims payload to
specified length.
#### func (*KeysAndCert) Certificate
```go
func (keys_and_cert *KeysAndCert) Certificate() (cert Certificate)
```
Certfificate returns the certificate.
#### func (*KeysAndCert) PublicKey
```go
func (keys_and_cert *KeysAndCert) PublicKey() (key crypto.RecievingPublicKey)
```
publicKey returns the public key as a crypto.publicKey.
#### func (*KeysAndCert) SigningPublicKey
```go
func (keys_and_cert *KeysAndCert) SigningPublicKey() (signing_public_key crypto.SigningPublicKey)
```
signingPublicKey returns the signing public key.
#### type PrivateKeysAndCert
```go
type PrivateKeysAndCert struct {
KeysAndCert
PK_KEY crypto.PrivateKey
SPK_KEY crypto.PrivateKey
}
```
PrivateKeysAndCert contains a KeysAndCert along with the corresponding private
keys for the Public Key and the Signing Public Key
#### func NewPrivateKeysAndCert
```go
func NewPrivateKeysAndCert() (*PrivateKeysAndCert, error)
```
# keys_and_cert
--
import "github.com/go-i2p/go-i2p/lib/common/keys_and_cert"
Package keys_and_cert implements the I2P KeysAndCert common data structure
![keys_and_cert.svg](keys_and_cert)
Package keys_and_cert implements the I2P KeysAndCert common data structure
## Usage
```go

View File

@ -4,552 +4,526 @@
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="526pt" height="1172pt"
viewBox="0.00 0.00 525.94 1172.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 1172)">
<svg width="518pt" height="992pt"
viewBox="0.00 0.00 517.94 992.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 992)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-1172 525.944,-1172 525.944,0 0,0"/>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-992 517.944,-992 517.944,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-1164 517.944,-1164 517.944,-8 8,-8"/>
<text text-anchor="middle" x="262.972" y="-1143.8" font-family="Arial" font-size="18.00" fill="#000000">keys_and_cert</text>
</g>
<g id="clust10" class="cluster">
<title>cluster_github.com/sirupsen/logrus</title>
<g id="a_clust10"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="package: github.com/sirupsen/logrus">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="356.7329,-398 356.7329,-519 450.0541,-519 450.0541,-398 356.7329,-398"/>
<text text-anchor="middle" x="403.3935" y="-500.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logrus</text>
</a>
</g>
</g>
<g id="clust11" class="cluster">
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust11"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M376.7329,-406C376.7329,-406 430.0541,-406 430.0541,-406 436.0541,-406 442.0541,-412 442.0541,-418 442.0541,-418 442.0541,-472 442.0541,-472 442.0541,-478 436.0541,-484 430.0541,-484 430.0541,-484 376.7329,-484 376.7329,-484 370.7329,-484 364.7329,-478 364.7329,-472 364.7329,-472 364.7329,-418 364.7329,-418 364.7329,-412 370.7329,-406 376.7329,-406"/>
<text text-anchor="middle" x="403.3935" y="-414.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust9" class="cluster">
<title>cluster_github.com/samber/oops</title>
<g id="a_clust9"><a xlink:href="/?f=github.com/samber/oops" xlink:title="package: github.com/samber/oops">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="366.296,-16 366.296,-95 440.491,-95 440.491,-16 366.296,-16"/>
<text text-anchor="middle" x="403.3935" y="-76.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">oops</text>
</a>
</g>
</g>
<g id="clust7" class="cluster">
<title>cluster_github.com/go&#45;i2p/logger</title>
<g id="a_clust7"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="package: github.com/go&#45;i2p/logger">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="334.7988,-103 334.7988,-390 471.9882,-390 471.9882,-103 334.7988,-103"/>
<text text-anchor="middle" x="403.3935" y="-371.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logger</text>
</a>
</g>
</g>
<g id="clust8" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust8"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M364.2841,-155C364.2841,-155 442.5029,-155 442.5029,-155 448.5029,-155 454.5029,-161 454.5029,-167 454.5029,-167 454.5029,-343 454.5029,-343 454.5029,-349 448.5029,-355 442.5029,-355 442.5029,-355 364.2841,-355 364.2841,-355 358.2841,-355 352.2841,-349 352.2841,-343 352.2841,-343 352.2841,-167 352.2841,-167 352.2841,-161 358.2841,-155 364.2841,-155"/>
<text text-anchor="middle" x="403.3935" y="-163.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-984 509.944,-984 509.944,-8 8,-8"/>
<text text-anchor="middle" x="258.972" y="-963.8" font-family="Arial" font-size="18.00" fill="#000000">keys_and_cert</text>
</g>
<g id="clust6" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert</title>
<g id="a_clust6"><a xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M82.9783,-593C82.9783,-593 172.8647,-593 172.8647,-593 178.8647,-593 184.8647,-599 184.8647,-605 184.8647,-605 184.8647,-659 184.8647,-659 184.8647,-665 178.8647,-671 172.8647,-671 172.8647,-671 82.9783,-671 82.9783,-671 76.9783,-671 70.9783,-665 70.9783,-659 70.9783,-659 70.9783,-605 70.9783,-605 70.9783,-599 76.9783,-593 82.9783,-593"/>
<text text-anchor="middle" x="127.9215" y="-601.5" font-family="Arial" font-size="15.00" fill="#222222">(KeysAndCert)</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/key_certificate" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="296.843,-527 296.843,-997 509.944,-997 509.944,-527 296.843,-527"/>
<text text-anchor="middle" x="403.3935" y="-978.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">key_certificate</text>
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M82.9783,-788C82.9783,-788 172.8647,-788 172.8647,-788 178.8647,-788 184.8647,-794 184.8647,-800 184.8647,-800 184.8647,-854 184.8647,-854 184.8647,-860 178.8647,-866 172.8647,-866 172.8647,-866 82.9783,-866 82.9783,-866 76.9783,-866 70.9783,-860 70.9783,-854 70.9783,-854 70.9783,-800 70.9783,-800 70.9783,-794 76.9783,-788 82.9783,-788"/>
<text text-anchor="middle" x="127.9215" y="-796.5" font-family="Arial" font-size="15.00" fill="#222222">(KeysAndCert)</text>
</a>
</g>
</g>
<g id="clust5" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate</title>
<g id="a_clust5"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/key_certificate" xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M316.843,-579C316.843,-579 489.944,-579 489.944,-579 495.944,-579 501.944,-585 501.944,-591 501.944,-591 501.944,-950 501.944,-950 501.944,-956 495.944,-962 489.944,-962 489.944,-962 316.843,-962 316.843,-962 310.843,-962 304.843,-956 304.843,-950 304.843,-950 304.843,-591 304.843,-591 304.843,-585 310.843,-579 316.843,-579"/>
<text text-anchor="middle" x="403.3935" y="-587.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(KeyCertificate)</text>
<g id="a_clust5"><a xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M316.843,-16C316.843,-16 489.944,-16 489.944,-16 495.944,-16 501.944,-22 501.944,-28 501.944,-28 501.944,-387 501.944,-387 501.944,-393 495.944,-399 489.944,-399 489.944,-399 316.843,-399 316.843,-399 310.843,-399 304.843,-393 304.843,-387 304.843,-387 304.843,-28 304.843,-28 304.843,-22 310.843,-16 316.843,-16"/>
<text text-anchor="middle" x="403.3935" y="-24.5" font-family="Arial" font-size="15.00" fill="#222222">(KeyCertificate)</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/certificate" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="347.4503,-1005 347.4503,-1126 459.3367,-1126 459.3367,-1005 347.4503,-1005"/>
<text text-anchor="middle" x="403.3935" y="-1107.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">certificate</text>
<g id="clust4" class="cluster">
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust4"><a xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M376.7329,-729C376.7329,-729 431.0541,-729 431.0541,-729 437.0541,-729 443.0541,-735 443.0541,-741 443.0541,-741 443.0541,-795 443.0541,-795 443.0541,-801 437.0541,-807 431.0541,-807 431.0541,-807 376.7329,-807 376.7329,-807 370.7329,-807 364.7329,-801 364.7329,-795 364.7329,-795 364.7329,-741 364.7329,-741 364.7329,-735 370.7329,-729 376.7329,-729"/>
<text text-anchor="middle" x="403.8935" y="-737.5" font-family="Arial" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust3"><a xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M364.2841,-521C364.2841,-521 442.5029,-521 442.5029,-521 448.5029,-521 454.5029,-527 454.5029,-533 454.5029,-533 454.5029,-709 454.5029,-709 454.5029,-715 448.5029,-721 442.5029,-721 442.5029,-721 364.2841,-721 364.2841,-721 358.2841,-721 352.2841,-715 352.2841,-709 352.2841,-709 352.2841,-533 352.2841,-533 352.2841,-527 358.2841,-521 364.2841,-521"/>
<text text-anchor="middle" x="403.3935" y="-529.5" font-family="Arial" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/certificate" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M367.4503,-1013C367.4503,-1013 439.3367,-1013 439.3367,-1013 445.3367,-1013 451.3367,-1019 451.3367,-1025 451.3367,-1025 451.3367,-1079 451.3367,-1079 451.3367,-1085 445.3367,-1091 439.3367,-1091 439.3367,-1091 367.4503,-1091 367.4503,-1091 361.4503,-1091 355.4503,-1085 355.4503,-1079 355.4503,-1079 355.4503,-1025 355.4503,-1025 355.4503,-1019 361.4503,-1013 367.4503,-1013"/>
<text text-anchor="middle" x="403.3935" y="-1021.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Certificate)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert | defined in keys_and_cert.go:142&#10;at keys_and_cert.go:155: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:167: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize]&#10;at keys_and_cert.go:143: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:149: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:192: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:193: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType]&#10;at keys_and_cert.go:159: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate]&#10;at keys_and_cert.go:161: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:172: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:188: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:154: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:161: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:172: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:188: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:184: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey]&#10;at keys_and_cert.go:194: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType]&#10;at keys_and_cert.go:170: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey]&#10;at keys_and_cert.go:145: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at keys_and_cert.go:197: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at keys_and_cert.go:166: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M180.6624,-585C180.6624,-585 75.1806,-585 75.1806,-585 69.1806,-585 63.1806,-579 63.1806,-573 63.1806,-573 63.1806,-561 63.1806,-561 63.1806,-555 69.1806,-549 75.1806,-549 75.1806,-549 180.6624,-549 180.6624,-549 186.6624,-549 192.6624,-555 192.6624,-561 192.6624,-561 192.6624,-573 192.6624,-573 192.6624,-579 186.6624,-585 180.6624,-585"/>
<text text-anchor="middle" x="127.9215" y="-562.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadKeysAndCert</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate -->
<g id="node8" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate</title>
<g id="a_node8"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate | defined in key_certificate.go:356">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M457.7212,-571C457.7212,-571 349.0658,-571 349.0658,-571 343.0658,-571 337.0658,-565 337.0658,-559 337.0658,-559 337.0658,-547 337.0658,-547 337.0658,-541 343.0658,-535 349.0658,-535 349.0658,-535 457.7212,-535 457.7212,-535 463.7212,-535 469.7212,-541 469.7212,-547 469.7212,-547 469.7212,-559 469.7212,-559 469.7212,-565 463.7212,-571 457.7212,-571"/>
<text text-anchor="middle" x="403.3935" y="-548.8" font-family="Verdana" font-size="14.00" fill="#000000">NewKeyCertificate</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate -->
<g id="edge15" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate</title>
<g id="a_edge15"><a xlink:title="at keys_and_cert.go:159: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate]">
<path fill="none" stroke="#8b4513" d="M192.8557,-563.6999C232.9728,-561.6611 284.653,-559.0346 326.7705,-556.8941"/>
<polygon fill="#8b4513" stroke="#8b4513" points="327.1723,-560.3783 336.9817,-556.3752 326.8169,-553.3873 327.1723,-560.3783"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize -->
<g id="node9" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize</title>
<g id="a_node9"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize | defined in key_certificate.go:336">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M434.8837,-649C434.8837,-649 371.9033,-649 371.9033,-649 365.9033,-649 359.9033,-643 359.9033,-637 359.9033,-637 359.9033,-625 359.9033,-625 359.9033,-619 365.9033,-613 371.9033,-613 371.9033,-613 434.8837,-613 434.8837,-613 440.8837,-613 446.8837,-619 446.8837,-625 446.8837,-625 446.8837,-637 446.8837,-637 446.8837,-643 440.8837,-649 434.8837,-649"/>
<text text-anchor="middle" x="403.3935" y="-626.8" font-family="Verdana" font-size="14.00" fill="#000000">CryptoSize</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize -->
<g id="edge30" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize</title>
<g id="a_edge30"><a xlink:title="at keys_and_cert.go:166: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize]">
<path fill="none" stroke="#8b4513" d="M192.8387,-576.9411C208.427,-580.0984 224.8874,-584.0831 239.843,-589 256.6521,-594.5263 259.0324,-600.4783 275.843,-606 299.5603,-613.7903 326.5989,-619.5163 349.6591,-623.5072"/>
<polygon fill="#8b4513" stroke="#8b4513" points="349.1721,-626.9743 359.6115,-625.1661 350.3231,-620.0695 349.1721,-626.9743"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize -->
<g id="node10" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize</title>
<g id="a_node10"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize | defined in key_certificate.go:308">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M442.1498,-710C442.1498,-710 364.6372,-710 364.6372,-710 358.6372,-710 352.6372,-704 352.6372,-698 352.6372,-698 352.6372,-686 352.6372,-686 352.6372,-680 358.6372,-674 364.6372,-674 364.6372,-674 442.1498,-674 442.1498,-674 448.1498,-674 454.1498,-680 454.1498,-686 454.1498,-686 454.1498,-698 454.1498,-698 454.1498,-704 448.1498,-710 442.1498,-710"/>
<text text-anchor="middle" x="403.3935" y="-687.8" font-family="Verdana" font-size="14.00" fill="#000000">SignatureSize</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize -->
<g id="edge5" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize</title>
<g id="a_edge5"><a xlink:title="at keys_and_cert.go:167: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize]">
<path fill="none" stroke="#8b4513" d="M192.7586,-569.2527C209.4646,-572.4954 226.4801,-578.4424 239.843,-589 270.1189,-612.9199 245.4704,-644.203 275.843,-668 294.6154,-682.7083 319.6671,-689.357 342.5974,-692.0964"/>
<polygon fill="#8b4513" stroke="#8b4513" points="342.319,-695.5858 352.6106,-693.0691 342.9959,-688.6185 342.319,-695.5858"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey -->
<g id="node11" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey</title>
<g id="a_node11"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey | defined in key_certificate.go:136">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M459.9315,-771C459.9315,-771 346.8555,-771 346.8555,-771 340.8555,-771 334.8555,-765 334.8555,-759 334.8555,-759 334.8555,-747 334.8555,-747 334.8555,-741 340.8555,-735 346.8555,-735 346.8555,-735 459.9315,-735 459.9315,-735 465.9315,-735 471.9315,-741 471.9315,-747 471.9315,-747 471.9315,-759 471.9315,-759 471.9315,-765 465.9315,-771 459.9315,-771"/>
<text text-anchor="middle" x="403.3935" y="-748.8" font-family="Verdana" font-size="14.00" fill="#000000">ConstructPublicKey</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey -->
<g id="edge27" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey</title>
<g id="a_edge27"><a xlink:title="at keys_and_cert.go:170: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey]">
<path fill="none" stroke="#8b4513" d="M192.6869,-568.9229C209.4877,-572.151 226.5693,-578.1731 239.843,-589 289.995,-629.9075 248.0338,-680.4993 296.843,-723 305.0543,-730.15 314.8499,-735.6046 325.1263,-739.764"/>
<polygon fill="#8b4513" stroke="#8b4513" points="324.0732,-743.1052 334.6673,-743.2313 326.4641,-736.5262 324.0732,-743.1052"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey -->
<g id="node12" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey</title>
<g id="a_node12"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey | defined in key_certificate.go:228">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M481.9945,-832C481.9945,-832 324.7925,-832 324.7925,-832 318.7925,-832 312.7925,-826 312.7925,-820 312.7925,-820 312.7925,-808 312.7925,-808 312.7925,-802 318.7925,-796 324.7925,-796 324.7925,-796 481.9945,-796 481.9945,-796 487.9945,-796 493.9945,-802 493.9945,-808 493.9945,-808 493.9945,-820 493.9945,-820 493.9945,-826 487.9945,-832 481.9945,-832"/>
<text text-anchor="middle" x="403.3935" y="-809.8" font-family="Verdana" font-size="14.00" fill="#000000">ConstructSigningPublicKey</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey -->
<g id="edge23" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey</title>
<g id="a_edge23"><a xlink:title="at keys_and_cert.go:184: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey]">
<path fill="none" stroke="#8b4513" d="M192.9288,-567.8572C209.9273,-571.0452 227.0503,-577.3132 239.843,-589 306.5065,-649.9005 232.6796,-720.4708 296.843,-784 299.0515,-786.1866 301.4061,-788.2167 303.8797,-790.1013"/>
<polygon fill="#8b4513" stroke="#8b4513" points="302.4415,-793.3477 312.7081,-795.9644 306.3141,-787.5165 302.4415,-793.3477"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType -->
<g id="node13" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType</title>
<g id="a_node13"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType | defined in key_certificate.go:126">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M447.2604,-893C447.2604,-893 359.5266,-893 359.5266,-893 353.5266,-893 347.5266,-887 347.5266,-881 347.5266,-881 347.5266,-869 347.5266,-869 347.5266,-863 353.5266,-857 359.5266,-857 359.5266,-857 447.2604,-857 447.2604,-857 453.2604,-857 459.2604,-863 459.2604,-869 459.2604,-869 459.2604,-881 459.2604,-881 459.2604,-887 453.2604,-893 447.2604,-893"/>
<text text-anchor="middle" x="403.3935" y="-870.8" font-family="Verdana" font-size="14.00" fill="#000000">PublicKeyType</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType -->
<g id="edge11" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType</title>
<g id="a_edge11"><a xlink:title="at keys_and_cert.go:193: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType]">
<path fill="none" stroke="#8b4513" d="M192.9511,-567.1122C210.1518,-570.2538 227.3752,-576.6837 239.843,-589 322.7687,-670.9175 215.6434,-761.3712 296.843,-845 307.7148,-856.1971 322.4116,-863.3091 337.4125,-867.8011"/>
<polygon fill="#8b4513" stroke="#8b4513" points="336.716,-871.2368 347.277,-870.3912 338.4938,-864.4663 336.716,-871.2368"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType -->
<g id="node14" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType</title>
<g id="a_node14"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType | defined in key_certificate.go:117">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M469.3247,-954C469.3247,-954 337.4623,-954 337.4623,-954 331.4623,-954 325.4623,-948 325.4623,-942 325.4623,-942 325.4623,-930 325.4623,-930 325.4623,-924 331.4623,-918 337.4623,-918 337.4623,-918 469.3247,-918 469.3247,-918 475.3247,-918 481.3247,-924 481.3247,-930 481.3247,-930 481.3247,-942 481.3247,-942 481.3247,-948 475.3247,-954 469.3247,-954"/>
<text text-anchor="middle" x="403.3935" y="-931.8" font-family="Verdana" font-size="14.00" fill="#000000">SigningPublicKeyType</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType -->
<g id="edge25" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType</title>
<g id="a_edge25"><a xlink:title="at keys_and_cert.go:194: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType]">
<path fill="none" stroke="#8b4513" d="M192.8031,-566.5783C210.208,-569.6698 227.5771,-576.2068 239.843,-589 289.3776,-640.6642 246.8368,-854.7922 296.843,-906 302.4602,-911.7521 309.087,-916.4254 316.2435,-920.2188"/>
<polygon fill="#8b4513" stroke="#8b4513" points="315.0139,-923.5074 325.5555,-924.5683 317.9763,-917.1652 315.0139,-923.5074"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="node17" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_node17"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithFields | defined in log.go:60">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M434.6126,-347C434.6126,-347 372.1744,-347 372.1744,-347 366.1744,-347 360.1744,-341 360.1744,-335 360.1744,-335 360.1744,-323 360.1744,-323 360.1744,-317 366.1744,-311 372.1744,-311 372.1744,-311 434.6126,-311 434.6126,-311 440.6126,-311 446.6126,-317 446.6126,-323 446.6126,-323 446.6126,-335 446.6126,-335 446.6126,-341 440.6126,-347 434.6126,-347"/>
<text text-anchor="middle" x="403.3935" y="-324.8" font-family="Verdana" font-size="14.00" fill="#000000">WithFields</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge10" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge10"><a xlink:title="at keys_and_cert.go:143: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:149: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:192: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M143.0925,-548.9493C177.6643,-507.9211 260.4941,-410.2566 275.843,-398 299.045,-379.4725 327.939,-363.3719 352.3566,-351.3942"/>
<polygon fill="#8b4513" stroke="#8b4513" points="353.9796,-354.4975 361.4746,-347.0091 350.9456,-348.1892 353.9796,-354.4975"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="node18" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_node18"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Error | defined in log.go:42">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M418.3935,-225C418.3935,-225 388.3935,-225 388.3935,-225 382.3935,-225 376.3935,-219 376.3935,-213 376.3935,-213 376.3935,-201 376.3935,-201 376.3935,-195 382.3935,-189 388.3935,-189 388.3935,-189 418.3935,-189 418.3935,-189 424.3935,-189 430.3935,-195 430.3935,-201 430.3935,-201 430.3935,-213 430.3935,-213 430.3935,-219 424.3935,-225 418.3935,-225"/>
<text text-anchor="middle" x="403.3935" y="-202.8" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge22" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge22"><a xlink:title="at keys_and_cert.go:154: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:161: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:172: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:188: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M147.8545,-548.989C172.8298,-525.3752 215.3212,-481.5712 239.843,-436 283.2355,-355.3596 232.1821,-302.844 296.843,-238 315.0099,-219.7817 343.219,-212.1349 366.049,-208.9879"/>
<polygon fill="#8b4513" stroke="#8b4513" points="366.5675,-212.4515 376.1045,-207.8368 365.7713,-205.4969 366.5675,-212.4515"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="node19" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_node19"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithError | defined in log.go:66">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M431.925,-286C431.925,-286 374.862,-286 374.862,-286 368.862,-286 362.862,-280 362.862,-274 362.862,-274 362.862,-262 362.862,-262 362.862,-256 368.862,-250 374.862,-250 374.862,-250 431.925,-250 431.925,-250 437.925,-250 443.925,-256 443.925,-262 443.925,-262 443.925,-274 443.925,-274 443.925,-280 437.925,-286 431.925,-286"/>
<text text-anchor="middle" x="403.3935" y="-263.8" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge16" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge16"><a xlink:title="at keys_and_cert.go:161: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:172: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:188: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M146.6319,-548.9412C170.6912,-524.934 212.6089,-480.3555 239.843,-436 274.3499,-379.7994 247.692,-342.9706 296.843,-299 312.1879,-285.2724 333.2902,-277.6038 352.6686,-273.3278"/>
<polygon fill="#8b4513" stroke="#8b4513" points="353.462,-276.7391 362.6055,-271.3868 352.12,-269.8689 353.462,-276.7391"/>
</a>
</g>
</g>
<!-- github.com/samber/oops.Errorf -->
<g id="node20" class="node">
<title>github.com/samber/oops.Errorf</title>
<g id="a_node20"><a xlink:title="github.com/samber/oops.Errorf | defined in oops.go:34">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M420.5888,-60C420.5888,-60 386.1982,-60 386.1982,-60 380.1982,-60 374.1982,-54 374.1982,-48 374.1982,-48 374.1982,-36 374.1982,-36 374.1982,-30 380.1982,-24 386.1982,-24 386.1982,-24 420.5888,-24 420.5888,-24 426.5888,-24 432.5888,-30 432.5888,-36 432.5888,-36 432.5888,-48 432.5888,-48 432.5888,-54 426.5888,-60 420.5888,-60"/>
<text text-anchor="middle" x="403.3935" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">Errorf</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge3"><a xlink:title="at keys_and_cert.go:155: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M149.5872,-548.5934C175.5357,-525.2285 218.2036,-482.349 239.843,-436 304.4764,-297.5632 206.779,-220.4127 296.843,-97 313.1644,-74.6351 341.2862,-60.6635 364.5417,-52.4006"/>
<polygon fill="#8b4513" stroke="#8b4513" points="365.7774,-55.6782 374.1618,-49.2011 363.5682,-49.036 365.7774,-55.6782"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Debug -->
<g id="node21" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_node21"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debug | defined in logger.go:221">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M422.2155,-476C422.2155,-476 384.5715,-476 384.5715,-476 378.5715,-476 372.5715,-470 372.5715,-464 372.5715,-464 372.5715,-452 372.5715,-452 372.5715,-446 378.5715,-440 384.5715,-440 384.5715,-440 422.2155,-440 422.2155,-440 428.2155,-440 434.2155,-446 434.2155,-452 434.2155,-452 434.2155,-464 434.2155,-464 434.2155,-470 428.2155,-476 422.2155,-476"/>
<text text-anchor="middle" x="403.3935" y="-453.8" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge29" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge29"><a xlink:title="at keys_and_cert.go:145: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at keys_and_cert.go:197: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M170.8221,-548.8943C200.2729,-536.5669 240.309,-520.0089 275.843,-506 304.8938,-494.547 337.8921,-482.1452 363.0463,-472.817"/>
<polygon fill="#8b4513" stroke="#8b4513" points="364.4572,-476.0269 372.6211,-469.2742 362.028,-469.462 364.4572,-476.0269"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.init -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.init</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.init | defined in .:0&#10;at keys_and_cert.go:14: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M142.9215,-180C142.9215,-180 112.9215,-180 112.9215,-180 106.9215,-180 100.9215,-174 100.9215,-168 100.9215,-168 100.9215,-156 100.9215,-156 100.9215,-150 106.9215,-144 112.9215,-144 112.9215,-144 142.9215,-144 142.9215,-144 148.9215,-144 154.9215,-150 154.9215,-156 154.9215,-156 154.9215,-168 154.9215,-168 154.9215,-174 148.9215,-180 142.9215,-180"/>
<text text-anchor="middle" x="127.9215" y="-157.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="node16" class="node">
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node16"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M452.083,-147C452.083,-147 354.704,-147 354.704,-147 348.704,-147 342.704,-141 342.704,-135 342.704,-135 342.704,-123 342.704,-123 342.704,-117 348.704,-111 354.704,-111 354.704,-111 452.083,-111 452.083,-111 458.083,-111 464.083,-117 464.083,-123 464.083,-123 464.083,-135 464.083,-135 464.083,-141 458.083,-147 452.083,-147"/>
<text text-anchor="middle" x="403.3935" y="-124.8" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge4"><a xlink:title="at keys_and_cert.go:14: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M155.0887,-158.7455C195.9363,-153.8522 274.546,-144.4352 332.4167,-137.5026"/>
<polygon fill="#8b4513" stroke="#8b4513" points="333.091,-140.947 342.6036,-136.2823 332.2583,-133.9967 333.091,-140.947"/>
<g id="a_clust2"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M366.4152,-815C366.4152,-815 441.3718,-815 441.3718,-815 447.3718,-815 453.3718,-821 453.3718,-827 453.3718,-827 453.3718,-881 453.3718,-881 453.3718,-887 447.3718,-893 441.3718,-893 441.3718,-893 366.4152,-893 366.4152,-893 360.4152,-893 354.4152,-887 354.4152,-881 354.4152,-881 354.4152,-827 354.4152,-827 354.4152,-821 360.4152,-815 366.4152,-815"/>
<text text-anchor="middle" x="403.8935" y="-823.5" font-family="Arial" font-size="15.00" fill="#222222">(*Certificate)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert -->
<g id="node3" class="node">
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert | defined in keys_and_cert.go:300&#10;at keys_and_cert.go:306: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at keys_and_cert.go:310: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:324: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:335: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:346: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:315: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize]&#10;at keys_and_cert.go:320: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:331: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:342: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:309: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:323: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:334: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:345: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:314: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M179.8247,-423C179.8247,-423 76.0183,-423 76.0183,-423 70.0183,-423 64.0183,-417 64.0183,-411 64.0183,-411 64.0183,-399 64.0183,-399 64.0183,-393 70.0183,-387 76.0183,-387 76.0183,-387 179.8247,-387 179.8247,-387 185.8247,-387 191.8247,-393 191.8247,-399 191.8247,-399 191.8247,-411 191.8247,-411 191.8247,-417 185.8247,-423 179.8247,-423"/>
<text text-anchor="middle" x="127.9215" y="-400.8" font-family="Verdana" font-size="14.00" fill="#000000">NewKeysAndCert</text>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert | defined in keys_and_cert.go:300&#10;at keys_and_cert.go:309: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:323: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:334: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:345: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:310: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:324: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:335: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:346: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:320: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:331: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:342: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:306: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at keys_and_cert.go:314: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize]&#10;at keys_and_cert.go:315: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M179.8247,-547C179.8247,-547 76.0183,-547 76.0183,-547 70.0183,-547 64.0183,-541 64.0183,-535 64.0183,-535 64.0183,-523 64.0183,-523 64.0183,-517 70.0183,-511 76.0183,-511 76.0183,-511 179.8247,-511 179.8247,-511 185.8247,-511 191.8247,-517 191.8247,-523 191.8247,-523 191.8247,-535 191.8247,-535 191.8247,-541 185.8247,-547 179.8247,-547"/>
<text text-anchor="middle" x="127.9215" y="-524.8" font-family="Verdana" font-size="14.00" fill="#000000">NewKeysAndCert</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize -->
<g id="edge26" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize</title>
<g id="a_edge26"><a xlink:title="at keys_and_cert.go:314: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize]">
<path fill="none" stroke="#8b4513" d="M143.6888,-423.201C165.537,-448.5103 206.1373,-495.865 239.843,-537 265.7108,-568.5695 262.0991,-587.5841 296.843,-609 312.5022,-618.6522 331.667,-624.1444 349.4041,-627.2449"/>
<polygon fill="#8b4513" stroke="#8b4513" points="349.2316,-630.759 359.6451,-628.8074 350.2874,-623.8391 349.2316,-630.759"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize -->
<g id="edge8" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize</title>
<g id="a_edge8"><a xlink:title="at keys_and_cert.go:315: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize]">
<path fill="none" stroke="#8b4513" d="M146.3914,-423.3675C170.1907,-447.7428 211.8276,-492.8611 239.843,-537 272.5633,-588.5517 250.4868,-622.2596 296.843,-662 309.6503,-672.9795 326.2024,-679.9567 342.4253,-684.3854"/>
<polygon fill="#8b4513" stroke="#8b4513" points="341.9032,-687.8605 352.4474,-686.8265 343.5598,-681.0593 341.9032,-687.8605"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge9" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge9"><a xlink:title="at keys_and_cert.go:320: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:331: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:342: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M191.8127,-387.373C239.8362,-374.1239 304.8637,-356.1834 350.1015,-343.7027"/>
<polygon fill="#8b4513" stroke="#8b4513" points="351.301,-347.0026 360.01,-340.9691 349.4393,-340.2547 351.301,-347.0026"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge12" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge12"><a xlink:title="at keys_and_cert.go:309: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:323: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:334: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:345: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M164.9733,-386.964C189.1215,-373.5871 219.7631,-353.3149 239.843,-328 267.1293,-293.6 242.5645,-264.6434 275.843,-236 300.72,-214.5879 338.1647,-208.1098 366.056,-206.5279"/>
<polygon fill="#8b4513" stroke="#8b4513" points="366.3722,-210.0185 376.2317,-206.1404 366.1058,-203.0236 366.3722,-210.0185"/>
<!-- github.com/samber/oops.Errorf -->
<g id="node2" class="node">
<title>github.com/samber/oops.Errorf</title>
<g id="a_node2"><a xlink:title="github.com/samber/oops.Errorf | defined in oops.go:34">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M420.5888,-452C420.5888,-452 386.1982,-452 386.1982,-452 380.1982,-452 374.1982,-446 374.1982,-440 374.1982,-440 374.1982,-428 374.1982,-428 374.1982,-422 380.1982,-416 386.1982,-416 386.1982,-416 420.5888,-416 420.5888,-416 426.5888,-416 432.5888,-422 432.5888,-428 432.5888,-428 432.5888,-440 432.5888,-440 432.5888,-446 426.5888,-452 420.5888,-452"/>
<text text-anchor="middle" x="403.3935" y="-438.2" font-family="Verdana" font-size="14.00" fill="#000000">oops</text>
<text text-anchor="middle" x="403.3935" y="-421.4" font-family="Verdana" font-size="14.00" fill="#000000">Errorf</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge7" class="edge">
<g id="edge21" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge7"><a xlink:title="at keys_and_cert.go:310: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:324: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:335: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:346: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M169.1007,-386.8617C193.5103,-373.9609 222.8968,-354.2567 239.843,-328 297.186,-239.1518 217.7588,-167.1991 296.843,-97 316.5544,-79.5031 342.8306,-65.8602 364.3566,-56.5388"/>
<polygon fill="#8b4513" stroke="#8b4513" points="365.9953,-59.6474 373.8721,-52.5618 363.2958,-53.1888 365.9953,-59.6474"/>
<g id="a_edge21"><a xlink:title="at keys_and_cert.go:310: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:324: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:335: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:346: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M191.9394,-523.5851C219.5012,-519.1019 251.2098,-510.9204 276.843,-496 292.8886,-486.6603 289.2172,-475.0263 304.843,-465 322.7573,-453.5053 345.2403,-446.0061 364.2067,-441.2681"/>
<polygon fill="#8b4513" stroke="#8b4513" points="365.1012,-444.6534 374.0451,-438.9739 363.5115,-437.8363 365.1012,-444.6534"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="node11" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_node11"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Error | defined in log.go:42">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M421.1598,-652C421.1598,-652 385.6272,-652 385.6272,-652 379.6272,-652 373.6272,-646 373.6272,-640 373.6272,-640 373.6272,-628 373.6272,-628 373.6272,-622 379.6272,-616 385.6272,-616 385.6272,-616 421.1598,-616 421.1598,-616 427.1598,-616 433.1598,-622 433.1598,-628 433.1598,-628 433.1598,-640 433.1598,-640 433.1598,-646 427.1598,-652 421.1598,-652"/>
<text text-anchor="middle" x="403.3935" y="-638.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="403.3935" y="-621.4" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge14" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge14"><a xlink:title="at keys_and_cert.go:309: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:323: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:334: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:345: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M191.8575,-533.1233C219.8762,-537.45 251.9673,-546.053 276.843,-563 295.0793,-575.4238 287.0594,-590.9365 304.843,-604 321.948,-616.565 344.372,-623.9274 363.508,-628.2105"/>
<polygon fill="#8b4513" stroke="#8b4513" points="362.96,-631.6707 373.457,-630.2338 364.3551,-624.8111 362.96,-631.6707"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="node12" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_node12"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithFields | defined in log.go:60">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M434.6126,-713C434.6126,-713 372.1744,-713 372.1744,-713 366.1744,-713 360.1744,-707 360.1744,-701 360.1744,-701 360.1744,-689 360.1744,-689 360.1744,-683 366.1744,-677 372.1744,-677 372.1744,-677 434.6126,-677 434.6126,-677 440.6126,-677 446.6126,-683 446.6126,-689 446.6126,-689 446.6126,-701 446.6126,-701 446.6126,-707 440.6126,-713 434.6126,-713"/>
<text text-anchor="middle" x="403.3935" y="-699.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="403.3935" y="-682.4" font-family="Verdana" font-size="14.00" fill="#000000">WithFields</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge22" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge22"><a xlink:title="at keys_and_cert.go:320: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:331: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:342: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M146.4943,-547.0103C177.1023,-575.7793 241.1194,-632.1939 304.843,-665 318.9304,-672.2525 335.0702,-678.0781 350.1546,-682.596"/>
<polygon fill="#8b4513" stroke="#8b4513" points="349.3058,-685.9935 359.8827,-685.3778 351.2304,-679.2632 349.3058,-685.9935"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Debug -->
<g id="node14" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_node14"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debug | defined in logger.go:221">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M422.2155,-799C422.2155,-799 384.5715,-799 384.5715,-799 378.5715,-799 372.5715,-793 372.5715,-787 372.5715,-787 372.5715,-775 372.5715,-775 372.5715,-769 378.5715,-763 384.5715,-763 384.5715,-763 422.2155,-763 422.2155,-763 428.2155,-763 434.2155,-769 434.2155,-775 434.2155,-775 434.2155,-787 434.2155,-787 434.2155,-793 428.2155,-799 422.2155,-799"/>
<text text-anchor="middle" x="403.3935" y="-785.2" font-family="Verdana" font-size="14.00" fill="#000000">logrus</text>
<text text-anchor="middle" x="403.3935" y="-768.4" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge1" class="edge">
<g id="edge23" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge1"><a xlink:title="at keys_and_cert.go:306: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M191.7652,-420.8217C217.7523,-426.9617 248.139,-433.761 275.843,-439 304.7484,-444.4662 337.5838,-449.3266 362.6999,-452.763"/>
<polygon fill="#8b4513" stroke="#8b4513" points="362.233,-456.2317 372.6112,-454.1002 363.1689,-449.2945 362.233,-456.2317"/>
<g id="a_edge23"><a xlink:title="at keys_and_cert.go:306: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M142.8206,-547.2031C178.4261,-590.4453 268.2089,-697.8923 304.843,-727 322.6144,-741.1204 344.5875,-753.5594 363.2726,-762.929"/>
<polygon fill="#8b4513" stroke="#8b4513" points="361.9049,-766.1562 372.4255,-767.4084 364.982,-759.8688 361.9049,-766.1562"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructSigningPublicKey -->
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize -->
<g id="node15" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize</title>
<g id="a_node15"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize | defined in key_certificate.go:336">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M445.0648,-330C445.0648,-330 361.7222,-330 361.7222,-330 355.7222,-330 349.7222,-324 349.7222,-318 349.7222,-318 349.7222,-306 349.7222,-306 349.7222,-300 355.7222,-294 361.7222,-294 361.7222,-294 445.0648,-294 445.0648,-294 451.0648,-294 457.0648,-300 457.0648,-306 457.0648,-306 457.0648,-318 457.0648,-318 457.0648,-324 451.0648,-330 445.0648,-330"/>
<text text-anchor="middle" x="403.3935" y="-316.2" font-family="Verdana" font-size="14.00" fill="#000000">key_certificate</text>
<text text-anchor="middle" x="403.3935" y="-299.4" font-family="Verdana" font-size="14.00" fill="#000000">CryptoSize</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize -->
<g id="edge27" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize</title>
<g id="a_edge27"><a xlink:title="at keys_and_cert.go:314: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize]">
<path fill="none" stroke="#8b4513" d="M191.6918,-511.5645C208.8688,-504.5279 226.3947,-494.9229 239.843,-482 289.0177,-434.7464 253.5291,-387.9215 304.843,-343 314.8443,-334.2446 327.314,-327.9605 339.9848,-323.4505"/>
<polygon fill="#8b4513" stroke="#8b4513" points="341.2264,-326.7279 349.6759,-320.336 339.0846,-320.0636 341.2264,-326.7279"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize -->
<g id="node16" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize</title>
<g id="a_node16"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize | defined in key_certificate.go:308">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M445.0648,-391C445.0648,-391 361.7222,-391 361.7222,-391 355.7222,-391 349.7222,-385 349.7222,-379 349.7222,-379 349.7222,-367 349.7222,-367 349.7222,-361 355.7222,-355 361.7222,-355 361.7222,-355 445.0648,-355 445.0648,-355 451.0648,-355 457.0648,-361 457.0648,-367 457.0648,-367 457.0648,-379 457.0648,-379 457.0648,-385 451.0648,-391 445.0648,-391"/>
<text text-anchor="middle" x="403.3935" y="-377.2" font-family="Verdana" font-size="14.00" fill="#000000">key_certificate</text>
<text text-anchor="middle" x="403.3935" y="-360.4" font-family="Verdana" font-size="14.00" fill="#000000">SignatureSize</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize -->
<g id="edge29" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize</title>
<g id="a_edge29"><a xlink:title="at keys_and_cert.go:315: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize]">
<path fill="none" stroke="#8b4513" d="M191.7794,-515.7539C220.9621,-506.8399 254.029,-492.3045 276.843,-469 301.4422,-443.8719 278.2756,-418.0372 304.843,-395 314.6146,-386.5268 326.9391,-381.1103 339.5335,-377.6923"/>
<polygon fill="#8b4513" stroke="#8b4513" points="340.6906,-381.0174 349.6481,-375.3594 339.1173,-374.1964 340.6906,-381.0174"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.init -->
<g id="node3" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.init</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.init | defined in .:0&#10;at keys_and_cert.go:14: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M142.9215,-946C142.9215,-946 112.9215,-946 112.9215,-946 106.9215,-946 100.9215,-940 100.9215,-934 100.9215,-934 100.9215,-922 100.9215,-922 100.9215,-916 106.9215,-910 112.9215,-910 112.9215,-910 142.9215,-910 142.9215,-910 148.9215,-910 154.9215,-916 154.9215,-922 154.9215,-922 154.9215,-934 154.9215,-934 154.9215,-940 148.9215,-946 142.9215,-946"/>
<text text-anchor="middle" x="127.9215" y="-923.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="node4" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructSigningPublicKey</title>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructSigningPublicKey | defined in keys_and_cert.go:285&#10;at keys_and_cert.go:294: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:289: calling [github.com/samber/oops.Errorf]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M204.9005,-113C204.9005,-113 50.9425,-113 50.9425,-113 44.9425,-113 38.9425,-107 38.9425,-101 38.9425,-101 38.9425,-89 38.9425,-89 38.9425,-83 44.9425,-77 50.9425,-77 50.9425,-77 204.9005,-77 204.9005,-77 210.9005,-77 216.9005,-83 216.9005,-89 216.9005,-89 216.9005,-101 216.9005,-101 216.9005,-107 210.9005,-113 204.9005,-113"/>
<text text-anchor="middle" x="127.9215" y="-90.8" font-family="Verdana" font-size="14.00" fill="#000000">constructSigningPublicKey</text>
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M452.083,-946C452.083,-946 354.704,-946 354.704,-946 348.704,-946 342.704,-940 342.704,-934 342.704,-934 342.704,-922 342.704,-922 342.704,-916 348.704,-910 354.704,-910 354.704,-910 452.083,-910 452.083,-910 458.083,-910 464.083,-916 464.083,-922 464.083,-922 464.083,-934 464.083,-934 464.083,-940 458.083,-946 452.083,-946"/>
<text text-anchor="middle" x="403.3935" y="-932.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="403.3935" y="-915.4" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructSigningPublicKey&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge18" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructSigningPublicKey&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge18"><a xlink:title="at keys_and_cert.go:294: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:289: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M216.9789,-77.8656C266.5502,-68.3283 325.7755,-56.9335 363.9573,-49.5874"/>
<polygon fill="#8b4513" stroke="#8b4513" points="364.9843,-52.9541 374.1429,-47.6277 363.6618,-46.0802 364.9843,-52.9541"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructPublicKey -->
<g id="node5" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructPublicKey</title>
<g id="a_node5"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructPublicKey | defined in keys_and_cert.go:270&#10;at keys_and_cert.go:281: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:274: calling [github.com/samber/oops.Errorf]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M183.3373,-52C183.3373,-52 72.5057,-52 72.5057,-52 66.5057,-52 60.5057,-46 60.5057,-40 60.5057,-40 60.5057,-28 60.5057,-28 60.5057,-22 66.5057,-16 72.5057,-16 72.5057,-16 183.3373,-16 183.3373,-16 189.3373,-16 195.3373,-22 195.3373,-28 195.3373,-28 195.3373,-40 195.3373,-40 195.3373,-46 189.3373,-52 183.3373,-52"/>
<text text-anchor="middle" x="127.9215" y="-29.8" font-family="Verdana" font-size="14.00" fill="#000000">constructPublicKey</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructPublicKey&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge19" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructPublicKey&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge19"><a xlink:title="at keys_and_cert.go:281: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:274: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M195.3095,-35.957C248.2482,-37.4944 320.1393,-39.5822 364.0707,-40.858"/>
<polygon fill="#8b4513" stroke="#8b4513" points="363.9758,-44.3566 374.0732,-41.1485 364.1791,-37.3596 363.9758,-44.3566"/>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge17" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge17"><a xlink:title="at keys_and_cert.go:14: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M155.0887,-928C195.9363,-928 274.546,-928 332.4167,-928"/>
<polygon fill="#8b4513" stroke="#8b4513" points="332.6037,-931.5001 342.6036,-928 332.6036,-924.5001 332.6037,-931.5001"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519 -->
<g id="node6" class="node">
<g id="node5" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519</title>
<g id="a_node6"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519 | defined in keys_and_cert.go:202&#10;at keys_and_cert.go:219: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:230: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:246: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:256: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:219: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:230: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:246: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:256: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:203: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:260: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:218: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:229: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:245: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:254: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate]&#10;at keys_and_cert.go:205: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at keys_and_cert.go:265: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M227.7646,-315C227.7646,-315 28.0784,-315 28.0784,-315 22.0784,-315 16.0784,-309 16.0784,-303 16.0784,-303 16.0784,-291 16.0784,-291 16.0784,-285 22.0784,-279 28.0784,-279 28.0784,-279 227.7646,-279 227.7646,-279 233.7646,-279 239.7646,-285 239.7646,-291 239.7646,-291 239.7646,-303 239.7646,-303 239.7646,-309 233.7646,-315 227.7646,-315"/>
<text text-anchor="middle" x="127.9215" y="-292.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadKeysAndCertElgAndEd25519</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate -->
<g id="edge20" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate</title>
<g id="a_edge20"><a xlink:title="at keys_and_cert.go:254: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate]">
<path fill="none" stroke="#8b4513" d="M162.7049,-315.0583C186.7571,-328.9069 218.2008,-349.8794 239.843,-375 277.0767,-418.2178 258.0219,-448.2023 296.843,-490 312.1826,-506.5158 332.8391,-520.0738 351.8805,-530.3251"/>
<polygon fill="#8b4513" stroke="#8b4513" points="350.2905,-533.4432 360.7782,-534.9455 353.5164,-527.2308 350.2905,-533.4432"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge13" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge13"><a xlink:title="at keys_and_cert.go:203: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:260: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M239.9665,-310.0156C277.9738,-314.4307 318.6869,-319.1601 349.9697,-322.7941"/>
<polygon fill="#8b4513" stroke="#8b4513" points="349.8625,-326.3051 360.1996,-323.9824 350.6703,-319.3518 349.8625,-326.3051"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge2"><a xlink:title="at keys_and_cert.go:219: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:230: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:246: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:256: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M149.7556,-278.946C177.1968,-257.5165 226.6816,-222.9331 275.843,-209 305.2451,-200.667 340.0091,-200.7362 365.8123,-202.5707"/>
<polygon fill="#8b4513" stroke="#8b4513" points="365.6742,-206.0713 375.9299,-203.4122 366.2544,-199.0953 365.6742,-206.0713"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge6" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge6"><a xlink:title="at keys_and_cert.go:219: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:230: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:246: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:256: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M239.9665,-285.2046C278.9106,-281.1048 320.6956,-276.7059 352.2655,-273.3824"/>
<polygon fill="#8b4513" stroke="#8b4513" points="352.9828,-276.8264 362.5613,-272.2986 352.2498,-269.8648 352.9828,-276.8264"/>
<g id="a_node5"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519 | defined in keys_and_cert.go:202&#10;at keys_and_cert.go:205: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at keys_and_cert.go:265: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at keys_and_cert.go:219: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:230: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:246: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:256: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:203: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:260: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:254: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate]&#10;at keys_and_cert.go:218: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:229: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:245: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:219: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:230: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:246: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:256: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M227.7646,-709C227.7646,-709 28.0784,-709 28.0784,-709 22.0784,-709 16.0784,-703 16.0784,-697 16.0784,-697 16.0784,-685 16.0784,-685 16.0784,-679 22.0784,-673 28.0784,-673 28.0784,-673 227.7646,-673 227.7646,-673 233.7646,-673 239.7646,-679 239.7646,-685 239.7646,-685 239.7646,-697 239.7646,-697 239.7646,-703 233.7646,-709 227.7646,-709"/>
<text text-anchor="middle" x="127.9215" y="-686.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadKeysAndCertElgAndEd25519</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge17" class="edge">
<g id="edge18" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge17"><a xlink:title="at keys_and_cert.go:218: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:229: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:245: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M153.2241,-278.6507C178.1502,-259.4571 215.8783,-227.2553 239.843,-192 264.294,-156.0292 245.9695,-132.6121 275.843,-101 299.6482,-75.8093 336.3091,-60.4083 364.2284,-51.689"/>
<polygon fill="#8b4513" stroke="#8b4513" points="365.4836,-54.9676 374.0789,-48.7731 363.4968,-48.2555 365.4836,-54.9676"/>
<g id="a_edge18"><a xlink:title="at keys_and_cert.go:218: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:229: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:245: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M144.5021,-672.8624C166.9367,-648.0422 207.8336,-601.7988 239.843,-560 247.6192,-549.8456 294.5672,-472.615 304.843,-465 322.0662,-452.2366 344.6884,-444.6339 363.9142,-440.1551"/>
<polygon fill="#8b4513" stroke="#8b4513" points="364.8469,-443.5351 373.9,-438.0312 363.3906,-436.6883 364.8469,-443.5351"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate -->
<g id="node6" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate</title>
<g id="a_node6"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate | defined in key_certificate.go:356">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M457.7212,-513C457.7212,-513 349.0658,-513 349.0658,-513 343.0658,-513 337.0658,-507 337.0658,-501 337.0658,-501 337.0658,-489 337.0658,-489 337.0658,-483 343.0658,-477 349.0658,-477 349.0658,-477 457.7212,-477 457.7212,-477 463.7212,-477 469.7212,-483 469.7212,-489 469.7212,-489 469.7212,-501 469.7212,-501 469.7212,-507 463.7212,-513 457.7212,-513"/>
<text text-anchor="middle" x="403.3935" y="-499.2" font-family="Verdana" font-size="14.00" fill="#000000">key_certificate</text>
<text text-anchor="middle" x="403.3935" y="-482.4" font-family="Verdana" font-size="14.00" fill="#000000">NewKeyCertificate</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate -->
<g id="edge9" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate</title>
<g id="a_edge9"><a xlink:title="at keys_and_cert.go:254: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate]">
<path fill="none" stroke="#8b4513" d="M211.1194,-672.9669C235.3022,-664.0021 259.7696,-650.691 276.843,-631 311.0215,-591.5816 267.5622,-553.4982 304.843,-517 311.2595,-510.7181 319.0538,-506.0694 327.4177,-502.6516"/>
<polygon fill="#8b4513" stroke="#8b4513" points="328.7665,-505.8881 337.0596,-499.2945 326.4648,-499.2774 328.7665,-505.8881"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge6" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge6"><a xlink:title="at keys_and_cert.go:219: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:230: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:246: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:256: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M239.8313,-693.5305C252.5154,-691.756 265.094,-689.0277 276.843,-685 291.3096,-680.0407 291.1567,-671.8236 304.843,-665 323.3976,-655.7492 345.2891,-648.5321 363.721,-643.3982"/>
<polygon fill="#8b4513" stroke="#8b4513" points="364.8089,-646.7302 373.5619,-640.7607 362.9967,-639.9689 364.8089,-646.7302"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge8" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge8"><a xlink:title="at keys_and_cert.go:203: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:260: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M211.9675,-709.0014C233.0834,-711.8268 255.7408,-713.411 276.843,-712 301.0109,-710.384 327.6025,-707.0505 350.1459,-703.76"/>
<polygon fill="#8b4513" stroke="#8b4513" points="350.8231,-707.1978 360.1957,-702.2575 349.788,-700.2747 350.8231,-707.1978"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="node13" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_node13"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithError | defined in log.go:66">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M431.925,-591C431.925,-591 374.862,-591 374.862,-591 368.862,-591 362.862,-585 362.862,-579 362.862,-579 362.862,-567 362.862,-567 362.862,-561 368.862,-555 374.862,-555 374.862,-555 431.925,-555 431.925,-555 437.925,-555 443.925,-561 443.925,-567 443.925,-567 443.925,-579 443.925,-579 443.925,-585 437.925,-591 431.925,-591"/>
<text text-anchor="middle" x="403.3935" y="-577.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="403.3935" y="-560.4" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge25" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge25"><a xlink:title="at keys_and_cert.go:219: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:230: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:246: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:256: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M240.1058,-677.517C253.2972,-672.735 265.9245,-666.3912 276.843,-658 298.2784,-641.5262 284.1415,-621.3872 304.843,-604 318.264,-592.7277 335.7984,-585.5441 352.3504,-580.9702"/>
<polygon fill="#8b4513" stroke="#8b4513" points="353.6262,-584.2595 362.4838,-578.4464 351.9344,-577.467 353.6262,-584.2595"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge28" class="edge">
<g id="edge5" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCertElgAndEd25519&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge28"><a xlink:title="at keys_and_cert.go:205: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at keys_and_cert.go:265: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M158.7198,-315.0001C208.8584,-344.3037 308.0885,-402.2989 363.535,-434.7047"/>
<polygon fill="#8b4513" stroke="#8b4513" points="361.9724,-437.8453 372.3721,-439.8695 365.5046,-431.8018 361.9724,-437.8453"/>
<g id="a_edge5"><a xlink:title="at keys_and_cert.go:205: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at keys_and_cert.go:265: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M156.1186,-709.1141C184.9835,-726.7185 231.7394,-752.6871 275.843,-766 304.0779,-774.5228 337.1882,-778.2428 362.5975,-779.8479"/>
<polygon fill="#8b4513" stroke="#8b4513" points="362.4519,-783.3451 372.6286,-780.3979 362.8352,-776.3555 362.4519,-783.3451"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructSigningPublicKey -->
<g id="node7" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructSigningPublicKey</title>
<g id="a_node7"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructSigningPublicKey | defined in keys_and_cert.go:285&#10;at keys_and_cert.go:294: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:289: calling [github.com/samber/oops.Errorf]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M204.9005,-469C204.9005,-469 50.9425,-469 50.9425,-469 44.9425,-469 38.9425,-463 38.9425,-457 38.9425,-457 38.9425,-445 38.9425,-445 38.9425,-439 44.9425,-433 50.9425,-433 50.9425,-433 204.9005,-433 204.9005,-433 210.9005,-433 216.9005,-439 216.9005,-445 216.9005,-445 216.9005,-457 216.9005,-457 216.9005,-463 210.9005,-469 204.9005,-469"/>
<text text-anchor="middle" x="127.9215" y="-446.8" font-family="Verdana" font-size="14.00" fill="#000000">constructSigningPublicKey</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructSigningPublicKey&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructSigningPublicKey&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge1"><a xlink:title="at keys_and_cert.go:294: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:289: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M216.9789,-445.5041C266.5502,-442.4449 325.7755,-438.79 363.9573,-436.4337"/>
<polygon fill="#8b4513" stroke="#8b4513" points="364.3775,-439.9145 374.1429,-435.8051 363.9463,-432.9278 364.3775,-439.9145"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert -->
<g id="node8" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert</title>
<g id="a_node8"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert | defined in keys_and_cert.go:142&#10;at keys_and_cert.go:143: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:149: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:192: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:159: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate]&#10;at keys_and_cert.go:170: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey]&#10;at keys_and_cert.go:154: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:161: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:172: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:188: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:161: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:172: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:188: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:166: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize]&#10;at keys_and_cert.go:167: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize]&#10;at keys_and_cert.go:155: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:193: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType]&#10;at keys_and_cert.go:194: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType]&#10;at keys_and_cert.go:184: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey]&#10;at keys_and_cert.go:145: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at keys_and_cert.go:197: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M180.6624,-277C180.6624,-277 75.1806,-277 75.1806,-277 69.1806,-277 63.1806,-271 63.1806,-265 63.1806,-265 63.1806,-253 63.1806,-253 63.1806,-247 69.1806,-241 75.1806,-241 75.1806,-241 180.6624,-241 180.6624,-241 186.6624,-241 192.6624,-247 192.6624,-253 192.6624,-253 192.6624,-265 192.6624,-265 192.6624,-271 186.6624,-277 180.6624,-277"/>
<text text-anchor="middle" x="127.9215" y="-254.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadKeysAndCert</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge19" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge19"><a xlink:title="at keys_and_cert.go:155: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M192.7302,-259.0243C221.9498,-262.3951 254.7737,-271.3789 276.843,-293 313.4948,-328.9074 269.3167,-367.9787 304.843,-405 320.1606,-420.9622 343.772,-428.2644 364.0435,-431.5511"/>
<polygon fill="#8b4513" stroke="#8b4513" points="363.5969,-435.0225 373.976,-432.8956 364.5359,-428.0858 363.5969,-435.0225"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate -->
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate</title>
<g id="a_edge3"><a xlink:title="at keys_and_cert.go:159: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.NewKeyCertificate]">
<path fill="none" stroke="#8b4513" d="M192.8759,-270.835C222.6765,-279.5451 255.9492,-294.4977 276.843,-320 318.4393,-370.7711 260.9252,-416.2232 304.843,-465 311.1266,-471.9788 318.9785,-477.3569 327.4911,-481.4973"/>
<polygon fill="#8b4513" stroke="#8b4513" points="326.3726,-484.825 336.9445,-485.5215 329.1143,-478.3843 326.3726,-484.825"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge7" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge7"><a xlink:title="at keys_and_cert.go:154: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:161: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:172: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at keys_and_cert.go:188: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M165.7988,-277.1123C200.8988,-296.0575 251.4049,-329.2799 276.843,-374 327.7584,-463.5091 238.6438,-525.1209 304.843,-604 319.1045,-620.9932 342.6833,-628.562 363.2017,-631.8497"/>
<polygon fill="#8b4513" stroke="#8b4513" points="362.9088,-635.3412 373.2797,-633.1743 363.8211,-628.4009 362.9088,-635.3412"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge2"><a xlink:title="at keys_and_cert.go:143: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:149: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:192: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M156.4725,-277.0049C182.3411,-294.8656 219.4383,-324.6345 239.843,-360 309.1082,-480.0509 211.1175,-562.8951 304.843,-665 316.4609,-677.6566 333.2365,-685.0389 349.663,-689.3229"/>
<polygon fill="#8b4513" stroke="#8b4513" points="349.2713,-692.8225 359.7965,-691.6094 350.8121,-685.9941 349.2713,-692.8225"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge10" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge10"><a xlink:title="at keys_and_cert.go:161: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:172: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at keys_and_cert.go:188: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M181.9705,-277.0762C214.805,-290.9489 254.5632,-313.4889 276.843,-347 327.5114,-423.2104 242.8792,-483.6517 304.843,-551 316.9481,-564.157 335.0487,-570.3226 352.4469,-572.9792"/>
<polygon fill="#8b4513" stroke="#8b4513" points="352.2194,-576.4764 362.5588,-574.1641 353.0342,-569.5239 352.2194,-576.4764"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge28" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge28"><a xlink:title="at keys_and_cert.go:145: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at keys_and_cert.go:197: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M157.4347,-277.0911C183.599,-294.8102 220.5613,-324.3071 239.843,-360 318.5749,-505.7432 205.8425,-594.1892 304.843,-727 319.2371,-746.3099 342.6657,-759.5535 363.0684,-768.0912"/>
<polygon fill="#8b4513" stroke="#8b4513" points="361.8993,-771.3924 372.4863,-771.7989 364.4635,-764.8789 361.8993,-771.3924"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize -->
<g id="edge11" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize</title>
<g id="a_edge11"><a xlink:title="at keys_and_cert.go:166: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize]">
<path fill="none" stroke="#8b4513" d="M168.5567,-240.9265C199.931,-229.8435 243.4755,-220.9096 276.843,-239 296.8917,-249.8696 286.6129,-268.2974 304.843,-282 315.1085,-289.716 327.3686,-295.4637 339.6967,-299.7403"/>
<polygon fill="#8b4513" stroke="#8b4513" points="338.9714,-303.1818 349.5614,-302.8641 341.0846,-296.5084 338.9714,-303.1818"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize -->
<g id="edge12" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize</title>
<g id="a_edge12"><a xlink:title="at keys_and_cert.go:167: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize]">
<path fill="none" stroke="#8b4513" d="M192.9881,-246.9051C221.2302,-245.2374 253.1835,-248.586 276.843,-266 306.1702,-287.5856 278.4173,-317.9459 304.843,-343 314.5648,-352.2173 327.0349,-358.609 339.8126,-363.0396"/>
<polygon fill="#8b4513" stroke="#8b4513" points="339.016,-366.4566 349.6034,-366.0598 341.0794,-359.7676 339.016,-366.4566"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey -->
<g id="node17" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey</title>
<g id="a_node17"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey | defined in key_certificate.go:136">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M459.9315,-269C459.9315,-269 346.8555,-269 346.8555,-269 340.8555,-269 334.8555,-263 334.8555,-257 334.8555,-257 334.8555,-245 334.8555,-245 334.8555,-239 340.8555,-233 346.8555,-233 346.8555,-233 459.9315,-233 459.9315,-233 465.9315,-233 471.9315,-239 471.9315,-245 471.9315,-245 471.9315,-257 471.9315,-257 471.9315,-263 465.9315,-269 459.9315,-269"/>
<text text-anchor="middle" x="403.3935" y="-255.2" font-family="Verdana" font-size="14.00" fill="#000000">key_certificate</text>
<text text-anchor="middle" x="403.3935" y="-238.4" font-family="Verdana" font-size="14.00" fill="#000000">ConstructPublicKey</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey -->
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey</title>
<g id="a_edge4"><a xlink:title="at keys_and_cert.go:170: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructPublicKey]">
<path fill="none" stroke="#8b4513" d="M157.5182,-240.9947C187.1224,-225.0713 234.2559,-205.3238 276.843,-212 289.7568,-214.0244 292.3679,-217.0966 304.843,-221 314.2521,-223.9441 324.1786,-227.0113 333.9634,-230.0121"/>
<polygon fill="#8b4513" stroke="#8b4513" points="333.0901,-233.405 343.6765,-232.9838 335.138,-226.7113 333.0901,-233.405"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey -->
<g id="node18" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey</title>
<g id="a_node18"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey | defined in key_certificate.go:228">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M481.9945,-86C481.9945,-86 324.7925,-86 324.7925,-86 318.7925,-86 312.7925,-80 312.7925,-74 312.7925,-74 312.7925,-62 312.7925,-62 312.7925,-56 318.7925,-50 324.7925,-50 324.7925,-50 481.9945,-50 481.9945,-50 487.9945,-50 493.9945,-56 493.9945,-62 493.9945,-62 493.9945,-74 493.9945,-74 493.9945,-80 487.9945,-86 481.9945,-86"/>
<text text-anchor="middle" x="403.3935" y="-72.2" font-family="Verdana" font-size="14.00" fill="#000000">key_certificate</text>
<text text-anchor="middle" x="403.3935" y="-55.4" font-family="Verdana" font-size="14.00" fill="#000000">ConstructSigningPublicKey</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey -->
<g id="edge26" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey</title>
<g id="a_edge26"><a xlink:title="at keys_and_cert.go:184: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).ConstructSigningPublicKey]">
<path fill="none" stroke="#8b4513" d="M143.0709,-240.8944C171.5002,-208.023 236.1988,-138.302 304.843,-99 310.6994,-95.6469 316.9632,-92.6098 323.388,-89.8683"/>
<polygon fill="#8b4513" stroke="#8b4513" points="324.9077,-93.0299 332.8877,-86.0607 322.3034,-86.5324 324.9077,-93.0299"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType -->
<g id="node19" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType</title>
<g id="a_node19"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType | defined in key_certificate.go:126">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M447.2604,-147C447.2604,-147 359.5266,-147 359.5266,-147 353.5266,-147 347.5266,-141 347.5266,-135 347.5266,-135 347.5266,-123 347.5266,-123 347.5266,-117 353.5266,-111 359.5266,-111 359.5266,-111 447.2604,-111 447.2604,-111 453.2604,-111 459.2604,-117 459.2604,-123 459.2604,-123 459.2604,-135 459.2604,-135 459.2604,-141 453.2604,-147 447.2604,-147"/>
<text text-anchor="middle" x="403.3935" y="-133.2" font-family="Verdana" font-size="14.00" fill="#000000">key_certificate</text>
<text text-anchor="middle" x="403.3935" y="-116.4" font-family="Verdana" font-size="14.00" fill="#000000">PublicKeyType</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType -->
<g id="edge20" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType</title>
<g id="a_edge20"><a xlink:title="at keys_and_cert.go:193: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType]">
<path fill="none" stroke="#8b4513" d="M156.1077,-240.8273C190.2665,-219.3772 250.0678,-183.6418 304.843,-160 315.287,-155.4922 326.6048,-151.3153 337.7225,-147.582"/>
<polygon fill="#8b4513" stroke="#8b4513" points="338.9939,-150.8488 347.414,-144.4182 336.8216,-144.1944 338.9939,-150.8488"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType -->
<g id="node20" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType</title>
<g id="a_node20"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType | defined in key_certificate.go:117">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M469.3247,-208C469.3247,-208 337.4623,-208 337.4623,-208 331.4623,-208 325.4623,-202 325.4623,-196 325.4623,-196 325.4623,-184 325.4623,-184 325.4623,-178 331.4623,-172 337.4623,-172 337.4623,-172 469.3247,-172 469.3247,-172 475.3247,-172 481.3247,-178 481.3247,-184 481.3247,-184 481.3247,-196 481.3247,-196 481.3247,-202 475.3247,-208 469.3247,-208"/>
<text text-anchor="middle" x="403.3935" y="-194.2" font-family="Verdana" font-size="14.00" fill="#000000">key_certificate</text>
<text text-anchor="middle" x="403.3935" y="-177.4" font-family="Verdana" font-size="14.00" fill="#000000">SigningPublicKeyType</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType -->
<g id="edge24" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType</title>
<g id="a_edge24"><a xlink:title="at keys_and_cert.go:194: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType]">
<path fill="none" stroke="#8b4513" d="M170.5306,-240.9176C199.6846,-229.2493 239.4923,-214.6809 275.843,-206 288.557,-202.9638 302.13,-200.4793 315.5034,-198.4532"/>
<polygon fill="#8b4513" stroke="#8b4513" points="316.2733,-201.8786 325.6736,-196.9915 315.2774,-194.9497 316.2733,-201.8786"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructPublicKey -->
<g id="node9" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructPublicKey</title>
<g id="a_node9"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructPublicKey | defined in keys_and_cert.go:270&#10;at keys_and_cert.go:281: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:274: calling [github.com/samber/oops.Errorf]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M183.3373,-408C183.3373,-408 72.5057,-408 72.5057,-408 66.5057,-408 60.5057,-402 60.5057,-396 60.5057,-396 60.5057,-384 60.5057,-384 60.5057,-378 66.5057,-372 72.5057,-372 72.5057,-372 183.3373,-372 183.3373,-372 189.3373,-372 195.3373,-378 195.3373,-384 195.3373,-384 195.3373,-396 195.3373,-396 195.3373,-402 189.3373,-408 183.3373,-408"/>
<text text-anchor="middle" x="127.9215" y="-385.8" font-family="Verdana" font-size="14.00" fill="#000000">constructPublicKey</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructPublicKey&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge13" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.constructPublicKey&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge13"><a xlink:title="at keys_and_cert.go:281: calling [github.com/samber/oops.Errorf]&#10;at keys_and_cert.go:274: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M195.3095,-400.7636C248.2482,-409.2193 320.1393,-420.7022 364.0707,-427.7191"/>
<polygon fill="#8b4513" stroke="#8b4513" points="363.6463,-431.1956 374.0732,-429.3168 364.7505,-424.2833 363.6463,-431.1956"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes -->
<g id="node7" class="node">
<g id="node10" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes</title>
<g id="a_node7"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes | defined in certificate.go:100">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M419.28,-1083C419.28,-1083 387.507,-1083 387.507,-1083 381.507,-1083 375.507,-1077 375.507,-1071 375.507,-1071 375.507,-1059 375.507,-1059 375.507,-1053 381.507,-1047 387.507,-1047 387.507,-1047 419.28,-1047 419.28,-1047 425.28,-1047 431.28,-1053 431.28,-1059 431.28,-1059 431.28,-1071 431.28,-1071 431.28,-1077 425.28,-1083 419.28,-1083"/>
<text text-anchor="middle" x="403.3935" y="-1060.8" font-family="Verdana" font-size="14.00" fill="#000000">Bytes</text>
<g id="a_node10"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes | defined in certificate.go:100">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M431.3501,-885C431.3501,-885 375.4369,-885 375.4369,-885 369.4369,-885 363.4369,-879 363.4369,-873 363.4369,-873 363.4369,-861 363.4369,-861 363.4369,-855 369.4369,-849 375.4369,-849 375.4369,-849 431.3501,-849 431.3501,-849 437.3501,-849 443.3501,-855 443.3501,-861 443.3501,-861 443.3501,-873 443.3501,-873 443.3501,-879 437.3501,-885 431.3501,-885"/>
<text text-anchor="middle" x="403.3935" y="-871.2" font-family="Verdana" font-size="14.00" fill="#000000">certificate</text>
<text text-anchor="middle" x="403.3935" y="-854.4" font-family="Verdana" font-size="14.00" fill="#000000">Bytes</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Bytes -->
<g id="node15" class="node">
<g id="node21" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Bytes</title>
<g id="a_node15"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Bytes | defined in keys_and_cert.go:87&#10;at keys_and_cert.go:113: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:109: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes]&#10;at keys_and_cert.go:110: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes]&#10;at keys_and_cert.go:121: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M143.808,-663C143.808,-663 112.035,-663 112.035,-663 106.035,-663 100.035,-657 100.035,-651 100.035,-651 100.035,-639 100.035,-639 100.035,-633 106.035,-627 112.035,-627 112.035,-627 143.808,-627 143.808,-627 149.808,-627 155.808,-633 155.808,-639 155.808,-639 155.808,-651 155.808,-651 155.808,-657 149.808,-663 143.808,-663"/>
<text text-anchor="middle" x="127.9215" y="-640.8" font-family="Verdana" font-size="14.00" fill="#000000">Bytes</text>
<g id="a_node21"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Bytes | defined in keys_and_cert.go:87&#10;at keys_and_cert.go:113: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at keys_and_cert.go:121: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at keys_and_cert.go:109: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes]&#10;at keys_and_cert.go:110: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M143.808,-858C143.808,-858 112.035,-858 112.035,-858 106.035,-858 100.035,-852 100.035,-846 100.035,-846 100.035,-834 100.035,-834 100.035,-828 106.035,-822 112.035,-822 112.035,-822 143.808,-822 143.808,-822 149.808,-822 155.808,-828 155.808,-834 155.808,-834 155.808,-846 155.808,-846 155.808,-852 149.808,-858 143.808,-858"/>
<text text-anchor="middle" x="127.9215" y="-835.8" font-family="Verdana" font-size="14.00" fill="#000000">Bytes</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Bytes&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes -->
<g id="edge21" class="edge">
<g id="edge30" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Bytes&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes</title>
<g id="a_edge21"><a xlink:title="at keys_and_cert.go:109: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes]&#10;at keys_and_cert.go:110: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes]">
<path fill="none" stroke="#8b4513" d="M131.3089,-663.1111C142.5169,-718.676 183.093,-889.2366 275.843,-993 300.325,-1020.3891 337.7953,-1039.7947 365.7982,-1051.5051"/>
<polygon fill="#8b4513" stroke="#8b4513" points="364.6882,-1054.8313 375.2715,-1055.3267 367.3071,-1048.3397 364.6882,-1054.8313"/>
<g id="a_edge30"><a xlink:title="at keys_and_cert.go:109: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes]&#10;at keys_and_cert.go:110: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.Certificate).Bytes]">
<path fill="none" stroke="#8b4513" d="M155.8512,-842.7375C202.046,-847.2652 295.0028,-856.3762 352.9328,-862.0542"/>
<polygon fill="#8b4513" stroke="#8b4513" points="352.6772,-865.5458 362.9709,-863.038 353.3601,-858.5792 352.6772,-865.5458"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Bytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge14" class="edge">
<g id="edge15" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Bytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge14"><a xlink:title="at keys_and_cert.go:113: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M156.023,-647.2753C181.2136,-647.7033 217.5382,-644.0861 239.843,-623 314.1805,-552.724 237.6854,-483.4576 296.843,-400 311.1761,-379.7793 333.2365,-363.704 353.5739,-351.9989"/>
<polygon fill="#8b4513" stroke="#8b4513" points="355.3983,-354.9896 362.4589,-347.0903 352.0133,-348.8625 355.3983,-354.9896"/>
<g id="a_edge15"><a xlink:title="at keys_and_cert.go:113: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M156.1148,-838.9948C179.7107,-837.1243 213.6306,-831.9728 239.843,-818 260.3653,-807.0604 263.3763,-799.9602 276.843,-781 293.4183,-757.663 282.9301,-741.4169 304.843,-723 317.5848,-712.291 334.1796,-705.6698 350.1079,-701.5788"/>
<polygon fill="#8b4513" stroke="#8b4513" points="350.9283,-704.9817 359.8991,-699.3446 349.371,-698.1571 350.9283,-704.9817"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Bytes&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge24" class="edge">
<g id="edge16" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.KeysAndCert).Bytes&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge24"><a xlink:title="at keys_and_cert.go:121: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M156.265,-645.8092C180.5911,-645.1176 215.4797,-640.676 239.843,-623 281.877,-592.5036 260.5722,-558.1661 296.843,-521 315.6703,-501.708 341.629,-486.196 363.2102,-475.3916"/>
<polygon fill="#8b4513" stroke="#8b4513" points="364.9927,-478.4172 372.4662,-470.9073 361.9407,-472.1176 364.9927,-478.4172"/>
<g id="a_edge16"><a xlink:title="at keys_and_cert.go:121: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M156.0364,-844.7199C186.9223,-848.6413 237.3801,-851.2662 276.843,-835 292.5437,-828.5283 290.0435,-817.3288 304.843,-809 322.6299,-798.9899 344.272,-792.3279 362.7394,-788.0238"/>
<polygon fill="#8b4513" stroke="#8b4513" points="363.6024,-791.4179 372.6278,-785.8688 362.1118,-784.5785 363.6024,-791.4179"/>
</a>
</g>
</g>

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 56 KiB

View File

@ -2,78 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/common/lease"
Package lease implements the I2P lease common data structure
## Usage
```go
const (
LEASE_SIZE = 44
LEASE_TUNNEL_GW_SIZE = 32
LEASE_TUNNEL_ID_SIZE = 4
)
```
Sizes in bytes of various components of a Lease
#### type Lease
```go
type Lease [LEASE_SIZE]byte
```
#### func NewLease
```go
func NewLease(tunnelGateway Hash, tunnelID uint32, expirationTime time.Time) (*Lease, error)
```
NewLease creates a new Lease with the provided parameters.
#### func NewLeaseFromBytes
```go
func NewLeaseFromBytes(data []byte) (lease *Lease, remainder []byte, err error)
```
NewLeaseFromBytes creates a new *Lease from []byte using ReadLease. Returns a
pointer to Lease unlike ReadLease.
#### func ReadLease
```go
func ReadLease(data []byte) (lease Lease, remainder []byte, err error)
```
ReadLease returns Lease from a []byte. The remaining bytes after the specified
length are also returned. Returns a list of errors that occurred during parsing.
#### func (Lease) Date
```go
func (lease Lease) Date() (date Date)
```
Date returns the date as an I2P Date.
#### func (Lease) TunnelGateway
```go
func (lease Lease) TunnelGateway() (hash Hash)
```
TunnelGateway returns the tunnel gateway as a Hash.
#### func (Lease) TunnelID
```go
func (lease Lease) TunnelID() uint32
```
TunnelID returns the tunnel id as a uint23.
# lease
--
import "github.com/go-i2p/go-i2p/lib/common/lease"
Package lease implements the I2P lease common data structure
![lease.svg](lease)
Package lease implements the I2P lease common data structure
## Usage
```go

View File

@ -4,373 +4,72 @@
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="673pt" height="820pt"
viewBox="0.00 0.00 672.89 820.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 820)">
<svg width="675pt" height="695pt"
viewBox="0.00 0.00 674.70 695.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 695)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-820 672.8852,-820 672.8852,0 0,0"/>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-695 674.6972,-695 674.6972,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-812 664.8852,-812 664.8852,-8 8,-8"/>
<text text-anchor="middle" x="336.4426" y="-791.8" font-family="Arial" font-size="18.00" fill="#000000">lease</text>
</g>
<g id="clust9" class="cluster">
<title>cluster_github.com/sirupsen/logrus</title>
<g id="a_clust9"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="package: github.com/sirupsen/logrus">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="406.6299,-653 406.6299,-774 499.9511,-774 499.9511,-653 406.6299,-653"/>
<text text-anchor="middle" x="453.2905" y="-755.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logrus</text>
</a>
</g>
</g>
<g id="clust10" class="cluster">
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust10"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M426.6299,-661C426.6299,-661 479.9511,-661 479.9511,-661 485.9511,-661 491.9511,-667 491.9511,-673 491.9511,-673 491.9511,-727 491.9511,-727 491.9511,-733 485.9511,-739 479.9511,-739 479.9511,-739 426.6299,-739 426.6299,-739 420.6299,-739 414.6299,-733 414.6299,-727 414.6299,-727 414.6299,-673 414.6299,-673 414.6299,-667 420.6299,-661 426.6299,-661"/>
<text text-anchor="middle" x="453.2905" y="-669.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust8" class="cluster">
<title>cluster_github.com/samber/oops</title>
<g id="a_clust8"><a xlink:href="/?f=github.com/samber/oops" xlink:title="package: github.com/samber/oops">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="416.193,-164 416.193,-243 490.388,-243 490.388,-164 416.193,-164"/>
<text text-anchor="middle" x="453.2905" y="-224.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">oops</text>
</a>
</g>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-687 667.6972,-687 667.6972,-8 8,-8"/>
<text text-anchor="middle" x="337.8486" y="-666.8" font-family="Arial" font-size="18.00" fill="#000000">lease</text>
</g>
<g id="clust6" class="cluster">
<title>cluster_github.com/go&#45;i2p/logger</title>
<g id="a_clust6"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="package: github.com/go&#45;i2p/logger">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="384.6958,-297 384.6958,-645 521.8852,-645 521.8852,-297 384.6958,-297"/>
<text text-anchor="middle" x="453.2905" y="-626.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logger</text>
</a>
</g>
</g>
<g id="clust7" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust7"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M414.1811,-349C414.1811,-349 492.3999,-349 492.3999,-349 498.3999,-349 504.3999,-355 504.3999,-361 504.3999,-361 504.3999,-598 504.3999,-598 504.3999,-604 498.3999,-610 492.3999,-610 492.3999,-610 414.1811,-610 414.1811,-610 408.1811,-610 402.1811,-604 402.1811,-598 402.1811,-598 402.1811,-361 402.1811,-361 402.1811,-355 408.1811,-349 414.1811,-349"/>
<text text-anchor="middle" x="453.2905" y="-357.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease</title>
<g id="a_clust6"><a xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M436.3753,-510C436.3753,-510 506.8003,-510 506.8003,-510 512.8003,-510 518.8003,-516 518.8003,-522 518.8003,-522 518.8003,-637 518.8003,-637 518.8003,-643 512.8003,-649 506.8003,-649 506.8003,-649 436.3753,-649 436.3753,-649 430.3753,-649 424.3753,-643 424.3753,-637 424.3753,-637 424.3753,-522 424.3753,-522 424.3753,-516 430.3753,-510 436.3753,-510"/>
<text text-anchor="middle" x="471.5878" y="-518.5" font-family="Arial" font-size="15.00" fill="#222222">(Lease)</text>
</a>
</g>
</g>
<g id="clust5" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease</title>
<g id="a_clust5"><a xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M418.078,-16C418.078,-16 488.503,-16 488.503,-16 494.503,-16 500.503,-22 500.503,-28 500.503,-28 500.503,-143 500.503,-143 500.503,-149 494.503,-155 488.503,-155 488.503,-155 418.078,-155 418.078,-155 412.078,-155 406.078,-149 406.078,-143 406.078,-143 406.078,-28 406.078,-28 406.078,-22 412.078,-16 418.078,-16"/>
<text text-anchor="middle" x="453.2905" y="-24.5" font-family="Arial" font-size="15.00" fill="#222222">(Lease)</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/data</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/data" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/data">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="570.8852,-106 570.8852,-313 656.8852,-313 656.8852,-106 570.8852,-106"/>
<text text-anchor="middle" x="613.8852" y="-294.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">data</text>
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer</title>
<g id="a_clust5"><a xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M599.6972,-510C599.6972,-510 647.6972,-510 647.6972,-510 653.6972,-510 659.6972,-516 659.6972,-522 659.6972,-522 659.6972,-576 659.6972,-576 659.6972,-582 653.6972,-588 647.6972,-588 647.6972,-588 599.6972,-588 599.6972,-588 593.6972,-588 587.6972,-582 587.6972,-576 587.6972,-576 587.6972,-522 587.6972,-522 587.6972,-516 593.6972,-510 599.6972,-510"/>
<text text-anchor="middle" x="623.6972" y="-518.5" font-family="Arial" font-size="15.00" fill="#222222">(Integer)</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/data" xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M590.8852,-114C590.8852,-114 636.8852,-114 636.8852,-114 642.8852,-114 648.8852,-120 648.8852,-126 648.8852,-126 648.8852,-180 648.8852,-180 648.8852,-186 642.8852,-192 636.8852,-192 636.8852,-192 590.8852,-192 590.8852,-192 584.8852,-192 578.8852,-186 578.8852,-180 578.8852,-180 578.8852,-126 578.8852,-126 578.8852,-120 584.8852,-114 590.8852,-114"/>
<text text-anchor="middle" x="613.8852" y="-122.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(Integer)</text>
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date</title>
<g id="a_clust4"><a xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M448.5878,-424C448.5878,-424 494.5878,-424 494.5878,-424 500.5878,-424 506.5878,-430 506.5878,-436 506.5878,-436 506.5878,-490 506.5878,-490 506.5878,-496 500.5878,-502 494.5878,-502 494.5878,-502 448.5878,-502 448.5878,-502 442.5878,-502 436.5878,-496 436.5878,-490 436.5878,-490 436.5878,-436 436.5878,-436 436.5878,-430 442.5878,-424 448.5878,-424"/>
<text text-anchor="middle" x="471.5878" y="-432.5" font-family="Arial" font-size="15.00" fill="#222222">(Date)</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/data" xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M590.8852,-200C590.8852,-200 636.8852,-200 636.8852,-200 642.8852,-200 648.8852,-206 648.8852,-212 648.8852,-212 648.8852,-266 648.8852,-266 648.8852,-272 642.8852,-278 636.8852,-278 636.8852,-278 590.8852,-278 590.8852,-278 584.8852,-278 578.8852,-272 578.8852,-266 578.8852,-266 578.8852,-212 578.8852,-212 578.8852,-206 584.8852,-200 590.8852,-200"/>
<text text-anchor="middle" x="613.8852" y="-208.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(Date)</text>
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust3"><a xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M444.9272,-338C444.9272,-338 499.2484,-338 499.2484,-338 505.2484,-338 511.2484,-344 511.2484,-350 511.2484,-350 511.2484,-404 511.2484,-404 511.2484,-410 505.2484,-416 499.2484,-416 499.2484,-416 444.9272,-416 444.9272,-416 438.9272,-416 432.9272,-410 432.9272,-404 432.9272,-404 432.9272,-350 432.9272,-350 432.9272,-344 438.9272,-338 444.9272,-338"/>
<text text-anchor="middle" x="472.0878" y="-346.5" font-family="Arial" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.init -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.init</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.init | defined in .:0&#10;at lease.go:59: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M291.9924,-388C291.9924,-388 261.9924,-388 261.9924,-388 255.9924,-388 249.9924,-382 249.9924,-376 249.9924,-376 249.9924,-364 249.9924,-364 249.9924,-358 255.9924,-352 261.9924,-352 261.9924,-352 291.9924,-352 291.9924,-352 297.9924,-352 303.9924,-358 303.9924,-364 303.9924,-364 303.9924,-376 303.9924,-376 303.9924,-382 297.9924,-388 291.9924,-388"/>
<text text-anchor="middle" x="276.9924" y="-365.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="node9" class="node">
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node9"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M501.98,-341C501.98,-341 404.601,-341 404.601,-341 398.601,-341 392.601,-335 392.601,-329 392.601,-329 392.601,-317 392.601,-317 392.601,-311 398.601,-305 404.601,-305 404.601,-305 501.98,-305 501.98,-305 507.98,-305 513.98,-311 513.98,-317 513.98,-317 513.98,-329 513.98,-329 513.98,-335 507.98,-341 501.98,-341"/>
<text text-anchor="middle" x="453.2905" y="-318.8" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge13" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge13"><a xlink:title="at lease.go:59: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M304.1526,-362.7593C325.0564,-357.1864 354.9352,-349.2209 382.4667,-341.8812"/>
<polygon fill="#8b4513" stroke="#8b4513" points="383.7218,-345.1689 392.4828,-339.211 381.9186,-338.4051 383.7218,-345.1689"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLease -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLease</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLease | defined in lease.go:111&#10;at lease.go:112: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at lease.go:133: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at lease.go:130: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M306.5612,-669C306.5612,-669 247.4236,-669 247.4236,-669 241.4236,-669 235.4236,-663 235.4236,-657 235.4236,-657 235.4236,-645 235.4236,-645 235.4236,-639 241.4236,-633 247.4236,-633 247.4236,-633 306.5612,-633 306.5612,-633 312.5612,-633 318.5612,-639 318.5612,-645 318.5612,-645 318.5612,-657 318.5612,-657 318.5612,-663 312.5612,-669 306.5612,-669"/>
<text text-anchor="middle" x="276.9924" y="-646.8" font-family="Verdana" font-size="14.00" fill="#000000">NewLease</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="node10" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_node10"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithFields | defined in log.go:60">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M484.5096,-541C484.5096,-541 422.0714,-541 422.0714,-541 416.0714,-541 410.0714,-535 410.0714,-529 410.0714,-529 410.0714,-517 410.0714,-517 410.0714,-511 416.0714,-505 422.0714,-505 422.0714,-505 484.5096,-505 484.5096,-505 490.5096,-505 496.5096,-511 496.5096,-517 496.5096,-517 496.5096,-529 496.5096,-529 496.5096,-535 490.5096,-541 484.5096,-541"/>
<text text-anchor="middle" x="453.2905" y="-518.8" font-family="Verdana" font-size="14.00" fill="#000000">WithFields</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLease&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge17" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLease&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge17"><a xlink:title="at lease.go:130: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M293.8775,-632.6923C313.9815,-611.6735 349.3063,-577.1259 384.6958,-554 389.8649,-550.6222 395.4626,-547.4352 401.1546,-544.4837"/>
<polygon fill="#8b4513" stroke="#8b4513" points="402.7165,-547.616 410.1288,-540.0458 399.6135,-541.3413 402.7165,-547.616"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Debug -->
<g id="node15" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_node15"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debug | defined in logger.go:221">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M472.1125,-731C472.1125,-731 434.4685,-731 434.4685,-731 428.4685,-731 422.4685,-725 422.4685,-719 422.4685,-719 422.4685,-707 422.4685,-707 422.4685,-701 428.4685,-695 434.4685,-695 434.4685,-695 472.1125,-695 472.1125,-695 478.1125,-695 484.1125,-701 484.1125,-707 484.1125,-707 484.1125,-719 484.1125,-719 484.1125,-725 478.1125,-731 472.1125,-731"/>
<text text-anchor="middle" x="453.2905" y="-708.8" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLease&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge16" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLease&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge16"><a xlink:title="at lease.go:112: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at lease.go:133: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M318.7726,-665.6931C347.282,-675.7193 384.8378,-688.9267 413.0202,-698.8379"/>
<polygon fill="#8b4513" stroke="#8b4513" points="411.9727,-702.1796 422.5675,-702.1954 414.2951,-695.576 411.9727,-702.1796"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes -->
<g id="node3" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes | defined in lease.go:140&#10;at lease.go:144: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease]&#10;at lease.go:146: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at lease.go:141: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at lease.go:156: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at lease.go:153: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID]&#10;at lease.go:146: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at lease.go:154: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date]&#10;at lease.go:141: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at lease.go:154: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time]&#10;at lease.go:152: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M149.4338,-432C149.4338,-432 27.8552,-432 27.8552,-432 21.8552,-432 15.8552,-426 15.8552,-420 15.8552,-420 15.8552,-408 15.8552,-408 15.8552,-402 21.8552,-396 27.8552,-396 27.8552,-396 149.4338,-396 149.4338,-396 155.4338,-396 161.4338,-402 161.4338,-408 161.4338,-408 161.4338,-420 161.4338,-420 161.4338,-426 155.4338,-432 149.4338,-432"/>
<text text-anchor="middle" x="88.6445" y="-409.8" font-family="Verdana" font-size="14.00" fill="#000000">NewLeaseFromBytes</text>
<g id="clust2" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust2"><a xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M432.4784,-16C432.4784,-16 510.6972,-16 510.6972,-16 516.6972,-16 522.6972,-22 522.6972,-28 522.6972,-28 522.6972,-265 522.6972,-265 522.6972,-271 516.6972,-277 510.6972,-277 510.6972,-277 432.4784,-277 432.4784,-277 426.4784,-277 420.4784,-271 420.4784,-265 420.4784,-265 420.4784,-28 420.4784,-28 420.4784,-22 426.4784,-16 432.4784,-16"/>
<text text-anchor="middle" x="471.5878" y="-24.5" font-family="Arial" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease -->
<g id="node4" class="node">
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease</title>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease | defined in lease.go:86&#10;at lease.go:90: calling [github.com/samber/oops.Errorf]&#10;at lease.go:91: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at lease.go:101: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at lease.go:103: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date]&#10;at lease.go:103: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time]&#10;at lease.go:87: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at lease.go:94: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at lease.go:87: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at lease.go:105: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at lease.go:102: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M307.9002,-324C307.9002,-324 246.0846,-324 246.0846,-324 240.0846,-324 234.0846,-318 234.0846,-312 234.0846,-312 234.0846,-300 234.0846,-300 234.0846,-294 240.0846,-288 246.0846,-288 246.0846,-288 307.9002,-288 307.9002,-288 313.9002,-288 319.9002,-294 319.9002,-300 319.9002,-300 319.9002,-312 319.9002,-312 319.9002,-318 313.9002,-324 307.9002,-324"/>
<text text-anchor="middle" x="276.9924" y="-301.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadLease</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease -->
<g id="edge5" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease</title>
<g id="a_edge5"><a xlink:title="at lease.go:144: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease]">
<path fill="none" stroke="#000000" d="M120.1697,-395.9232C152.0856,-377.6224 201.5709,-349.2472 236.401,-329.2754"/>
<polygon fill="#000000" stroke="#000000" points="238.4303,-332.1464 245.3643,-324.1357 234.9483,-326.0739 238.4303,-332.1464"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time -->
<g id="node5" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time</title>
<g id="a_node5"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time | defined in date.go:47">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M628.8852,-270C628.8852,-270 598.8852,-270 598.8852,-270 592.8852,-270 586.8852,-264 586.8852,-258 586.8852,-258 586.8852,-246 586.8852,-246 586.8852,-240 592.8852,-234 598.8852,-234 598.8852,-234 628.8852,-234 628.8852,-234 634.8852,-234 640.8852,-240 640.8852,-246 640.8852,-246 640.8852,-258 640.8852,-258 640.8852,-264 634.8852,-270 628.8852,-270"/>
<text text-anchor="middle" x="613.8852" y="-247.8" font-family="Verdana" font-size="14.00" fill="#000000">Time</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time -->
<g id="edge18" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time</title>
<g id="a_edge18"><a xlink:title="at lease.go:154: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time]">
<path fill="none" stroke="#8b4513" d="M98.4407,-395.7314C122.6368,-353.3643 189.6527,-252 276.9924,-252 276.9924,-252 276.9924,-252 453.2905,-252 495.3734,-252 543.6594,-252 576.2045,-252"/>
<polygon fill="#8b4513" stroke="#8b4513" points="576.6065,-255.5001 586.6064,-252 576.6064,-248.5001 576.6065,-255.5001"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID -->
<g id="node7" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID</title>
<g id="a_node7"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID | defined in lease.go:70&#10;at lease.go:73: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M480.7167,-86C480.7167,-86 425.8643,-86 425.8643,-86 419.8643,-86 413.8643,-80 413.8643,-74 413.8643,-74 413.8643,-62 413.8643,-62 413.8643,-56 419.8643,-50 425.8643,-50 425.8643,-50 480.7167,-50 480.7167,-50 486.7167,-50 492.7167,-56 492.7167,-62 492.7167,-62 492.7167,-74 492.7167,-74 492.7167,-80 486.7167,-86 480.7167,-86"/>
<text text-anchor="middle" x="453.2905" y="-63.8" font-family="Verdana" font-size="14.00" fill="#000000">TunnelID</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID -->
<g id="edge9" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID</title>
<g id="a_edge9"><a xlink:title="at lease.go:153: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID]">
<path fill="none" stroke="#000000" d="M94.838,-395.8702C110.9751,-351.0863 158.4041,-233.948 234.289,-166 283.6852,-121.7702 356.3239,-94.6547 404.2037,-80.4708"/>
<polygon fill="#000000" stroke="#000000" points="405.3884,-83.7718 414.0277,-77.6388 403.4494,-77.0457 405.3884,-83.7718"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date -->
<g id="node8" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date</title>
<g id="a_node8"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date | defined in lease.go:78">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M468.2905,-147C468.2905,-147 438.2905,-147 438.2905,-147 432.2905,-147 426.2905,-141 426.2905,-135 426.2905,-135 426.2905,-123 426.2905,-123 426.2905,-117 432.2905,-111 438.2905,-111 438.2905,-111 468.2905,-111 468.2905,-111 474.2905,-111 480.2905,-117 480.2905,-123 480.2905,-123 480.2905,-135 480.2905,-135 480.2905,-141 474.2905,-147 468.2905,-147"/>
<text text-anchor="middle" x="453.2905" y="-124.8" font-family="Verdana" font-size="14.00" fill="#000000">Date</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date -->
<g id="edge12" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date</title>
<g id="a_edge12"><a xlink:title="at lease.go:154: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date]">
<path fill="none" stroke="#000000" d="M96.1554,-395.8455C110.937,-362.0673 146.8101,-289.0096 197.289,-245 263.4566,-187.3123 363.055,-153.417 416.4191,-138.3635"/>
<polygon fill="#000000" stroke="#000000" points="417.4278,-141.7161 426.1395,-135.6864 415.5691,-134.9673 417.4278,-141.7161"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge19" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge19"><a xlink:title="at lease.go:152: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M149.2677,-432.1215C219.2881,-453.052 333.3811,-487.1567 400.0918,-507.0978"/>
<polygon fill="#8b4513" stroke="#8b4513" points="399.395,-510.5425 409.9785,-510.0532 401.3998,-503.8357 399.395,-510.5425"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="node11" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_node11"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithField | defined in log.go:54">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M481.565,-419C481.565,-419 425.016,-419 425.016,-419 419.016,-419 413.016,-413 413.016,-407 413.016,-407 413.016,-395 413.016,-395 413.016,-389 419.016,-383 425.016,-383 425.016,-383 481.565,-383 481.565,-383 487.565,-383 493.565,-389 493.565,-395 493.565,-395 493.565,-407 493.565,-407 493.565,-413 487.565,-419 481.565,-419"/>
<text text-anchor="middle" x="453.2905" y="-396.8" font-family="Verdana" font-size="14.00" fill="#000000">WithField</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge15" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge15"><a xlink:title="at lease.go:141: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M161.5597,-411.4005C233.1247,-408.8491 340.3772,-405.0255 402.9482,-402.7948"/>
<polygon fill="#8b4513" stroke="#8b4513" points="403.1,-406.2917 412.9689,-402.4375 402.8506,-399.2961 403.1,-406.2917"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="node12" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_node12"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Error | defined in log.go:42">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M468.2905,-480C468.2905,-480 438.2905,-480 438.2905,-480 432.2905,-480 426.2905,-474 426.2905,-468 426.2905,-468 426.2905,-456 426.2905,-456 426.2905,-450 432.2905,-444 438.2905,-444 438.2905,-444 468.2905,-444 468.2905,-444 474.2905,-444 480.2905,-450 480.2905,-456 480.2905,-456 480.2905,-468 480.2905,-468 480.2905,-474 474.2905,-480 468.2905,-480"/>
<text text-anchor="middle" x="453.2905" y="-457.8" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge6" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge6"><a xlink:title="at lease.go:146: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M161.5597,-423.5982C238.4175,-433.7153 356.4367,-449.2507 416.0653,-457.0999"/>
<polygon fill="#8b4513" stroke="#8b4513" points="415.7815,-460.5926 426.1528,-458.4277 416.6952,-453.6525 415.7815,-460.5926"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="node13" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_node13"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithError | defined in log.go:66">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M481.822,-602C481.822,-602 424.759,-602 424.759,-602 418.759,-602 412.759,-596 412.759,-590 412.759,-590 412.759,-578 412.759,-578 412.759,-572 418.759,-566 424.759,-566 424.759,-566 481.822,-566 481.822,-566 487.822,-566 493.822,-572 493.822,-578 493.822,-578 493.822,-590 493.822,-590 493.822,-596 487.822,-602 481.822,-602"/>
<text text-anchor="middle" x="453.2905" y="-579.8" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge11" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge11"><a xlink:title="at lease.go:146: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M125.8679,-432.0341C181.8185,-459.0429 291.0283,-511.3811 384.6958,-554 390.7369,-556.7487 397.0972,-559.5945 403.4089,-562.3892"/>
<polygon fill="#8b4513" stroke="#8b4513" points="402.0164,-565.6003 412.5787,-566.43 404.8391,-559.1946 402.0164,-565.6003"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge7" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge7"><a xlink:title="at lease.go:141: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at lease.go:156: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M92.5423,-432.1079C104.2103,-481.5243 143.8074,-619.1898 234.289,-682 287.3703,-718.8478 365.2923,-720.6482 412.4639,-717.5551"/>
<polygon fill="#8b4513" stroke="#8b4513" points="412.9095,-721.0314 422.615,-716.7824 412.3781,-714.0516 412.9095,-721.0314"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time -->
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time</title>
<g id="a_edge4"><a xlink:title="at lease.go:103: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time]">
<path fill="none" stroke="#8b4513" d="M320.0023,-299.106C386.7112,-288.4133 513.972,-268.0149 576.8449,-257.9371"/>
<polygon fill="#8b4513" stroke="#8b4513" points="577.4051,-261.3921 586.7251,-256.3534 576.2972,-254.4803 577.4051,-261.3921"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID -->
<g id="edge21" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID</title>
<g id="a_edge21"><a xlink:title="at lease.go:102: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID]">
<path fill="none" stroke="#000000" d="M282.0117,-287.7268C293.7015,-248.282 326.284,-154.2676 384.6958,-99 390.5027,-93.5057 397.4511,-88.8671 404.6639,-84.9889"/>
<polygon fill="#000000" stroke="#000000" points="406.435,-88.0188 413.8755,-80.4762 403.3554,-81.7326 406.435,-88.0188"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date -->
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date</title>
<g id="a_edge3"><a xlink:title="at lease.go:103: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date]">
<path fill="none" stroke="#000000" d="M286.103,-287.5916C302.135,-256.8842 338.1485,-194.9412 384.6958,-158 394.0954,-150.5402 405.6956,-144.6777 416.6652,-140.2348"/>
<polygon fill="#000000" stroke="#000000" points="417.9474,-143.4919 426.0717,-136.6914 415.4798,-136.9413 417.9474,-143.4919"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge2"><a xlink:title="at lease.go:91: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at lease.go:101: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M304.1744,-324.286C309.8022,-328.9409 315.3368,-334.2667 319.6958,-340 364.4116,-398.8138 332.7297,-440.4825 384.6958,-493 389.4255,-497.7799 395.045,-501.8531 401.0014,-505.3099"/>
<polygon fill="#8b4513" stroke="#8b4513" points="399.4186,-508.4318 409.9049,-509.9442 402.6505,-502.2225 399.4186,-508.4318"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge8" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge8"><a xlink:title="at lease.go:87: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M320.087,-310.0381C332.8848,-312.9308 346.2577,-317.8098 356.6958,-326 377.6548,-342.4454 364.2781,-361.8873 384.6958,-379 390.1053,-383.5339 396.4635,-387.1379 403.0892,-390.0018"/>
<polygon fill="#8b4513" stroke="#8b4513" points="402.3166,-393.4503 412.9087,-393.6901 404.778,-386.8973 402.3166,-393.4503"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge10" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge10"><a xlink:title="at lease.go:94: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M319.9833,-324.1829C333.2274,-331.5149 346.8877,-341.0994 356.6958,-353 380.3876,-381.7463 359.3158,-404.7326 384.6958,-432 393.2748,-441.217 405.1837,-447.7542 416.6737,-452.32"/>
<polygon fill="#8b4513" stroke="#8b4513" points="415.55,-455.6351 426.1446,-455.7071 417.9073,-449.044 415.55,-455.6351"/>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease | defined in lease.go:86&#10;at lease.go:90: calling [github.com/samber/oops.Errorf]&#10;at lease.go:94: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at lease.go:87: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at lease.go:105: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at lease.go:103: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time]&#10;at lease.go:87: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at lease.go:91: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at lease.go:101: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at lease.go:102: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID]&#10;at lease.go:103: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M325.7915,-369C325.7915,-369 263.9759,-369 263.9759,-369 257.9759,-369 251.9759,-363 251.9759,-357 251.9759,-357 251.9759,-345 251.9759,-345 251.9759,-339 257.9759,-333 263.9759,-333 263.9759,-333 325.7915,-333 325.7915,-333 331.7915,-333 337.7915,-339 337.7915,-345 337.7915,-345 337.7915,-357 337.7915,-357 337.7915,-363 331.7915,-369 325.7915,-369"/>
<text text-anchor="middle" x="294.8837" y="-346.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadLease</text>
</a>
</g>
</g>
<!-- github.com/samber/oops.Errorf -->
<g id="node14" class="node">
<g id="node2" class="node">
<title>github.com/samber/oops.Errorf</title>
<g id="a_node14"><a xlink:title="github.com/samber/oops.Errorf | defined in oops.go:34">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M470.4858,-208C470.4858,-208 436.0952,-208 436.0952,-208 430.0952,-208 424.0952,-202 424.0952,-196 424.0952,-196 424.0952,-184 424.0952,-184 424.0952,-178 430.0952,-172 436.0952,-172 436.0952,-172 470.4858,-172 470.4858,-172 476.4858,-172 482.4858,-178 482.4858,-184 482.4858,-184 482.4858,-196 482.4858,-196 482.4858,-202 476.4858,-208 470.4858,-208"/>
<text text-anchor="middle" x="453.2905" y="-185.8" font-family="Verdana" font-size="14.00" fill="#000000">Errorf</text>
<g id="a_node2"><a xlink:title="github.com/samber/oops.Errorf | defined in oops.go:34">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M488.7831,-330C488.7831,-330 454.3925,-330 454.3925,-330 448.3925,-330 442.3925,-324 442.3925,-318 442.3925,-318 442.3925,-306 442.3925,-306 442.3925,-300 448.3925,-294 454.3925,-294 454.3925,-294 488.7831,-294 488.7831,-294 494.7831,-294 500.7831,-300 500.7831,-306 500.7831,-306 500.7831,-318 500.7831,-318 500.7831,-324 494.7831,-330 488.7831,-330"/>
<text text-anchor="middle" x="471.5878" y="-316.2" font-family="Verdana" font-size="14.00" fill="#000000">oops</text>
<text text-anchor="middle" x="471.5878" y="-299.4" font-family="Verdana" font-size="14.00" fill="#000000">Errorf</text>
</a>
</g>
</g>
@ -378,35 +77,313 @@
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge1"><a xlink:title="at lease.go:90: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M293.1999,-287.9544C312.9328,-266.9814 348.1714,-232.6206 384.6958,-212 393.8439,-206.8353 404.3738,-202.6912 414.3939,-199.4541"/>
<polygon fill="#8b4513" stroke="#8b4513" points="415.6043,-202.7451 424.1739,-196.5151 413.5897,-196.0413 415.6043,-202.7451"/>
<path fill="none" stroke="#8b4513" d="M337.6588,-341.5592C366.587,-335.1745 404.4919,-326.8086 432.5907,-320.607"/>
<polygon fill="#8b4513" stroke="#8b4513" points="433.4538,-324.0008 442.4644,-318.4278 431.9451,-317.1653 433.4538,-324.0008"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="node7" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_node7"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithField | defined in log.go:54">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M499.8623,-208C499.8623,-208 443.3133,-208 443.3133,-208 437.3133,-208 431.3133,-202 431.3133,-196 431.3133,-196 431.3133,-184 431.3133,-184 431.3133,-178 437.3133,-172 443.3133,-172 443.3133,-172 499.8623,-172 499.8623,-172 505.8623,-172 511.8623,-178 511.8623,-184 511.8623,-184 511.8623,-196 511.8623,-196 511.8623,-202 505.8623,-208 499.8623,-208"/>
<text text-anchor="middle" x="471.5878" y="-194.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="471.5878" y="-177.4" font-family="Verdana" font-size="14.00" fill="#000000">WithField</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge9" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge9"><a xlink:title="at lease.go:87: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M309.8488,-332.7509C332.1793,-306.2005 376.3404,-256.2513 420.4784,-221 423.5826,-218.5208 426.9013,-216.0898 430.3009,-213.7482"/>
<polygon fill="#8b4513" stroke="#8b4513" points="432.4077,-216.5518 438.8421,-208.1346 428.563,-210.7021 432.4077,-216.5518"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="node8" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_node8"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithFields | defined in log.go:60">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M502.8069,-147C502.8069,-147 440.3687,-147 440.3687,-147 434.3687,-147 428.3687,-141 428.3687,-135 428.3687,-135 428.3687,-123 428.3687,-123 428.3687,-117 434.3687,-111 440.3687,-111 440.3687,-111 502.8069,-111 502.8069,-111 508.8069,-111 514.8069,-117 514.8069,-123 514.8069,-123 514.8069,-135 514.8069,-135 514.8069,-141 508.8069,-147 502.8069,-147"/>
<text text-anchor="middle" x="471.5878" y="-133.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="471.5878" y="-116.4" font-family="Verdana" font-size="14.00" fill="#000000">WithFields</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge10" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge10"><a xlink:title="at lease.go:91: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at lease.go:101: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M308.497,-332.686C321.0309,-315.6433 339.9741,-289.424 355.4784,-266 385.9807,-219.9171 381.3066,-198.982 420.4784,-160 422.9438,-157.5465 425.6397,-155.2041 428.4635,-152.9858"/>
<polygon fill="#8b4513" stroke="#8b4513" points="430.6048,-155.7569 436.6748,-147.0732 426.5145,-150.0763 430.6048,-155.7569"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="node9" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_node9"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Error | defined in log.go:42">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M489.3541,-269C489.3541,-269 453.8215,-269 453.8215,-269 447.8215,-269 441.8215,-263 441.8215,-257 441.8215,-257 441.8215,-245 441.8215,-245 441.8215,-239 447.8215,-233 453.8215,-233 453.8215,-233 489.3541,-233 489.3541,-233 495.3541,-233 501.3541,-239 501.3541,-245 501.3541,-245 501.3541,-257 501.3541,-257 501.3541,-263 495.3541,-269 489.3541,-269"/>
<text text-anchor="middle" x="471.5878" y="-255.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="471.5878" y="-238.4" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge2"><a xlink:title="at lease.go:94: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M321.6373,-332.7541C346.6075,-316.1216 385.2102,-291.411 420.4784,-273 424.2839,-271.0134 428.3082,-269.0537 432.3608,-267.1712"/>
<polygon fill="#8b4513" stroke="#8b4513" points="434.0891,-270.2319 441.7782,-262.943 431.2219,-263.846 434.0891,-270.2319"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Debug -->
<g id="node11" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_node11"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debug | defined in logger.go:221">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M490.4098,-408C490.4098,-408 452.7658,-408 452.7658,-408 446.7658,-408 440.7658,-402 440.7658,-396 440.7658,-396 440.7658,-384 440.7658,-384 440.7658,-378 446.7658,-372 452.7658,-372 452.7658,-372 490.4098,-372 490.4098,-372 496.4098,-372 502.4098,-378 502.4098,-384 502.4098,-384 502.4098,-396 502.4098,-396 502.4098,-402 496.4098,-408 490.4098,-408"/>
<text text-anchor="middle" x="471.5878" y="-394.2" font-family="Verdana" font-size="14.00" fill="#000000">logrus</text>
<text text-anchor="middle" x="471.5878" y="-377.4" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge14" class="edge">
<g id="edge5" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge14"><a xlink:title="at lease.go:87: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at lease.go:105: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M305.3623,-324.1378C310.7902,-328.7366 315.942,-334.0765 319.6958,-340 353.4244,-393.2241 358.8066,-558.5529 384.6958,-616 396.4331,-642.0446 415.5486,-668.3006 430.6229,-686.9157"/>
<polygon fill="#8b4513" stroke="#8b4513" points="427.946,-689.1708 437.0126,-694.6523 433.3432,-684.7132 427.946,-689.1708"/>
<g id="a_edge5"><a xlink:title="at lease.go:87: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at lease.go:105: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M337.6588,-360.4408C366.0412,-366.705 403.0647,-374.8764 430.9898,-381.0397"/>
<polygon fill="#8b4513" stroke="#8b4513" points="430.3142,-384.4747 440.8335,-383.2123 431.8229,-377.6393 430.3142,-384.4747"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time -->
<g id="node12" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time</title>
<g id="a_node12"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time | defined in date.go:47">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M486.5878,-494C486.5878,-494 456.5878,-494 456.5878,-494 450.5878,-494 444.5878,-488 444.5878,-482 444.5878,-482 444.5878,-470 444.5878,-470 444.5878,-464 450.5878,-458 456.5878,-458 456.5878,-458 486.5878,-458 486.5878,-458 492.5878,-458 498.5878,-464 498.5878,-470 498.5878,-470 498.5878,-482 498.5878,-482 498.5878,-488 492.5878,-494 486.5878,-494"/>
<text text-anchor="middle" x="471.5878" y="-480.2" font-family="Verdana" font-size="14.00" fill="#000000">data</text>
<text text-anchor="middle" x="471.5878" y="-463.4" font-family="Verdana" font-size="14.00" fill="#000000">Time</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time -->
<g id="edge6" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time</title>
<g id="a_edge6"><a xlink:title="at lease.go:103: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time]">
<path fill="none" stroke="#8b4513" d="M320.578,-369.1761C351.4625,-391.0237 403.3925,-427.7588 437.5774,-451.9411"/>
<polygon fill="#8b4513" stroke="#8b4513" points="435.6773,-454.8842 445.8625,-457.802 439.7199,-449.1695 435.6773,-454.8842"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID -->
<g id="node14" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID</title>
<g id="a_node14"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID | defined in lease.go:70&#10;at lease.go:73: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M499.014,-580C499.014,-580 444.1616,-580 444.1616,-580 438.1616,-580 432.1616,-574 432.1616,-568 432.1616,-568 432.1616,-556 432.1616,-556 432.1616,-550 438.1616,-544 444.1616,-544 444.1616,-544 499.014,-544 499.014,-544 505.014,-544 511.014,-550 511.014,-556 511.014,-556 511.014,-568 511.014,-568 511.014,-574 505.014,-580 499.014,-580"/>
<text text-anchor="middle" x="471.5878" y="-557.8" font-family="Verdana" font-size="14.00" fill="#000000">TunnelID</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID -->
<g id="edge17" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID</title>
<g id="a_edge17"><a xlink:title="at lease.go:102: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID]">
<path fill="none" stroke="#000000" d="M308.7228,-369.2915C331.3699,-398.9938 378.078,-459.2955 420.4784,-508 428.7382,-517.4879 438.1159,-527.5775 446.5634,-536.4358"/>
<polygon fill="#000000" stroke="#000000" points="444.2431,-539.0726 453.696,-543.8574 449.2901,-534.222 444.2431,-539.0726"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date -->
<g id="node15" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date</title>
<g id="a_node15"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date | defined in lease.go:78">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M486.5878,-641C486.5878,-641 456.5878,-641 456.5878,-641 450.5878,-641 444.5878,-635 444.5878,-629 444.5878,-629 444.5878,-617 444.5878,-617 444.5878,-611 450.5878,-605 456.5878,-605 456.5878,-605 486.5878,-605 486.5878,-605 492.5878,-605 498.5878,-611 498.5878,-617 498.5878,-617 498.5878,-629 498.5878,-629 498.5878,-635 492.5878,-641 486.5878,-641"/>
<text text-anchor="middle" x="471.5878" y="-618.8" font-family="Verdana" font-size="14.00" fill="#000000">Date</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date -->
<g id="edge18" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date</title>
<g id="a_edge18"><a xlink:title="at lease.go:103: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date]">
<path fill="none" stroke="#000000" d="M300.4005,-369.1813C314.3107,-412.522 354.487,-523.48 420.4784,-593 424.8945,-597.6522 430.1908,-601.8177 435.6768,-605.4577"/>
<polygon fill="#000000" stroke="#000000" points="433.9924,-608.5298 444.3543,-610.7394 437.632,-602.5504 433.9924,-608.5298"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes -->
<g id="node3" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes | defined in lease.go:140&#10;at lease.go:146: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at lease.go:154: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time]&#10;at lease.go:152: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at lease.go:141: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at lease.go:144: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease]&#10;at lease.go:153: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID]&#10;at lease.go:154: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date]&#10;at lease.go:141: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at lease.go:156: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at lease.go:146: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M149.4338,-369C149.4338,-369 27.8552,-369 27.8552,-369 21.8552,-369 15.8552,-363 15.8552,-357 15.8552,-357 15.8552,-345 15.8552,-345 15.8552,-339 21.8552,-333 27.8552,-333 27.8552,-333 149.4338,-333 149.4338,-333 155.4338,-333 161.4338,-339 161.4338,-345 161.4338,-345 161.4338,-357 161.4338,-357 161.4338,-363 155.4338,-369 149.4338,-369"/>
<text text-anchor="middle" x="88.6445" y="-346.8" font-family="Verdana" font-size="14.00" fill="#000000">NewLeaseFromBytes</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease -->
<g id="edge12" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease</title>
<g id="a_edge12"><a xlink:title="at lease.go:144: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.ReadLease]">
<path fill="none" stroke="#000000" d="M161.3567,-351C187.8418,-351 217.2658,-351 241.7376,-351"/>
<polygon fill="#000000" stroke="#000000" points="241.8993,-354.5001 251.8993,-351 241.8992,-347.5001 241.8993,-354.5001"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge11" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge11"><a xlink:title="at lease.go:141: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M99.995,-332.9943C121.5767,-300.5859 171.9856,-233.1879 234.289,-205 293.9799,-177.9941 370.8655,-178.7083 420.6831,-183.1515"/>
<polygon fill="#8b4513" stroke="#8b4513" points="420.5941,-186.6593 430.8869,-184.1476 421.2742,-179.6924 420.5941,-186.6593"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge8" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge8"><a xlink:title="at lease.go:152: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M98.0298,-332.7859C117.8314,-296.3425 167.6052,-214.564 234.289,-175 291.0131,-141.3451 367.5323,-131.6761 418.1586,-129.2264"/>
<polygon fill="#8b4513" stroke="#8b4513" points="418.3886,-132.72 428.2384,-128.8174 418.1047,-125.7258 418.3886,-132.72"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge20" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge20"><a xlink:title="at lease.go:146: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M157.9926,-332.8908C237.9871,-312.0014 366.7911,-278.3661 431.6069,-261.4404"/>
<polygon fill="#8b4513" stroke="#8b4513" points="432.6516,-264.7851 441.4428,-258.8719 430.8829,-258.0122 432.6516,-264.7851"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="node10" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_node10"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithError | defined in log.go:66">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M500.1193,-86C500.1193,-86 443.0563,-86 443.0563,-86 437.0563,-86 431.0563,-80 431.0563,-74 431.0563,-74 431.0563,-62 431.0563,-62 431.0563,-56 437.0563,-50 443.0563,-50 443.0563,-50 500.1193,-50 500.1193,-50 506.1193,-50 512.1193,-56 512.1193,-62 512.1193,-62 512.1193,-74 512.1193,-74 512.1193,-80 506.1193,-86 500.1193,-86"/>
<text text-anchor="middle" x="471.5878" y="-72.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="471.5878" y="-55.4" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge3"><a xlink:title="at lease.go:146: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M95.2424,-332.7646C111.6573,-290.0745 158.5544,-183.1699 234.289,-129 289.9619,-89.1794 369.4031,-75.3178 420.7361,-70.5142"/>
<polygon fill="#8b4513" stroke="#8b4513" points="421.2621,-73.9821 430.9284,-69.6448 420.6671,-67.0074 421.2621,-73.9821"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge19" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge19"><a xlink:title="at lease.go:141: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at lease.go:156: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M161.1936,-369.0675C184.401,-374.1391 210.2963,-379.0654 234.289,-382 302.7597,-390.3749 383.1129,-391.2191 430.5557,-390.7994"/>
<polygon fill="#8b4513" stroke="#8b4513" points="430.7759,-394.2973 440.736,-390.6852 430.6973,-387.2977 430.7759,-394.2973"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time -->
<g id="edge7" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time</title>
<g id="a_edge7"><a xlink:title="at lease.go:154: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Date).Time]">
<path fill="none" stroke="#8b4513" d="M143.9188,-369.0426C223.118,-394.8947 366.7757,-441.7873 434.442,-463.8749"/>
<polygon fill="#8b4513" stroke="#8b4513" points="433.6506,-467.2983 444.2431,-467.0742 435.8228,-460.6438 433.6506,-467.2983"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID -->
<g id="edge13" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID</title>
<g id="a_edge13"><a xlink:title="at lease.go:153: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID]">
<path fill="none" stroke="#000000" d="M121.6255,-369.1724C191.2724,-407.5475 353.2233,-496.7817 429.9054,-539.0332"/>
<polygon fill="#000000" stroke="#000000" points="428.3747,-542.1859 438.8222,-543.9463 431.7528,-536.0549 428.3747,-542.1859"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date -->
<g id="edge14" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLeaseFromBytes&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date</title>
<g id="a_edge14"><a xlink:title="at lease.go:154: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).Date]">
<path fill="none" stroke="#000000" d="M109.2931,-369.2294C137.0112,-393.4138 188.1173,-437.0086 234.289,-471 313.9603,-529.6536 336.4171,-540.8325 420.4784,-593 425.2866,-595.9839 430.3879,-599.0704 435.4344,-602.0777"/>
<polygon fill="#000000" stroke="#000000" points="433.9939,-605.2919 444.3837,-607.366 437.555,-599.2654 433.9939,-605.2919"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLease -->
<g id="node4" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLease</title>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLease | defined in lease.go:111&#10;at lease.go:130: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at lease.go:112: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at lease.go:133: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M324.4525,-253C324.4525,-253 265.3149,-253 265.3149,-253 259.3149,-253 253.3149,-247 253.3149,-241 253.3149,-241 253.3149,-229 253.3149,-229 253.3149,-223 259.3149,-217 265.3149,-217 265.3149,-217 324.4525,-217 324.4525,-217 330.4525,-217 336.4525,-223 336.4525,-229 336.4525,-229 336.4525,-241 336.4525,-241 336.4525,-247 330.4525,-253 324.4525,-253"/>
<text text-anchor="middle" x="294.8837" y="-230.8" font-family="Verdana" font-size="14.00" fill="#000000">NewLease</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLease&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLease&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge4"><a xlink:title="at lease.go:130: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M313.429,-216.74C331.8988,-199.39 361.7188,-173.5594 391.4784,-157 399.9823,-152.2681 409.4313,-148.1139 418.7714,-144.5544"/>
<polygon fill="#8b4513" stroke="#8b4513" points="420.2098,-147.756 428.4212,-141.0609 417.827,-141.1741 420.2098,-147.756"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLease&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge21" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.NewLease&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge21"><a xlink:title="at lease.go:112: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at lease.go:133: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M308.0787,-253.1518C329.1365,-281.042 372.8504,-334.694 420.4784,-368 423.9518,-370.4289 427.7359,-372.6715 431.6221,-374.7203"/>
<polygon fill="#8b4513" stroke="#8b4513" points="430.2507,-377.9448 440.7773,-379.1454 433.297,-371.6424 430.2507,-377.9448"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.init -->
<g id="node5" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.init</title>
<g id="a_node5"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.init | defined in .:0&#10;at lease.go:59: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M103.6445,-54C103.6445,-54 73.6445,-54 73.6445,-54 67.6445,-54 61.6445,-48 61.6445,-42 61.6445,-42 61.6445,-30 61.6445,-30 61.6445,-24 67.6445,-18 73.6445,-18 73.6445,-18 103.6445,-18 103.6445,-18 109.6445,-18 115.6445,-24 115.6445,-30 115.6445,-30 115.6445,-42 115.6445,-42 115.6445,-48 109.6445,-54 103.6445,-54"/>
<text text-anchor="middle" x="88.6445" y="-31.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="node6" class="node">
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node6"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M343.5732,-54C343.5732,-54 246.1942,-54 246.1942,-54 240.1942,-54 234.1942,-48 234.1942,-42 234.1942,-42 234.1942,-30 234.1942,-30 234.1942,-24 240.1942,-18 246.1942,-18 246.1942,-18 343.5732,-18 343.5732,-18 349.5732,-18 355.5732,-24 355.5732,-30 355.5732,-30 355.5732,-42 355.5732,-42 355.5732,-48 349.5732,-54 343.5732,-54"/>
<text text-anchor="middle" x="294.8837" y="-40.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="294.8837" y="-23.4" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge15" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge15"><a xlink:title="at lease.go:59: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M116.0315,-36C143.3741,-36 186.5488,-36 223.628,-36"/>
<polygon fill="#8b4513" stroke="#8b4513" points="223.9065,-39.5001 233.9064,-36 223.9064,-32.5001 223.9065,-39.5001"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int -->
<g id="node6" class="node">
<g id="node13" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int</title>
<g id="a_node6"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int | defined in integer.go:32">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M628.8852,-184C628.8852,-184 598.8852,-184 598.8852,-184 592.8852,-184 586.8852,-178 586.8852,-172 586.8852,-172 586.8852,-160 586.8852,-160 586.8852,-154 592.8852,-148 598.8852,-148 598.8852,-148 628.8852,-148 628.8852,-148 634.8852,-148 640.8852,-154 640.8852,-160 640.8852,-160 640.8852,-172 640.8852,-172 640.8852,-178 634.8852,-184 628.8852,-184"/>
<text text-anchor="middle" x="613.8852" y="-161.8" font-family="Verdana" font-size="14.00" fill="#000000">Int</text>
<g id="a_node13"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int | defined in integer.go:32">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M638.6972,-580C638.6972,-580 608.6972,-580 608.6972,-580 602.6972,-580 596.6972,-574 596.6972,-568 596.6972,-568 596.6972,-556 596.6972,-556 596.6972,-550 602.6972,-544 608.6972,-544 608.6972,-544 638.6972,-544 638.6972,-544 644.6972,-544 650.6972,-550 650.6972,-556 650.6972,-556 650.6972,-568 650.6972,-568 650.6972,-574 644.6972,-580 638.6972,-580"/>
<text text-anchor="middle" x="623.6972" y="-566.2" font-family="Verdana" font-size="14.00" fill="#000000">data</text>
<text text-anchor="middle" x="623.6972" y="-549.4" font-family="Verdana" font-size="14.00" fill="#000000">Int</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int -->
<g id="edge20" class="edge">
<g id="edge16" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/lease.Lease).TunnelID&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int</title>
<g id="a_edge20"><a xlink:title="at lease.go:73: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]">
<path fill="none" stroke="#8b4513" d="M492.8025,-84.1905C502.5089,-88.6184 512.7357,-93.6766 521.8852,-99 543.4602,-111.5529 566.145,-128.0322 583.5907,-141.5059"/>
<polygon fill="#8b4513" stroke="#8b4513" points="581.6718,-144.4483 591.7062,-147.8485 585.9823,-138.9329 581.6718,-144.4483"/>
<g id="a_edge16"><a xlink:title="at lease.go:73: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/data.Integer).Int]">
<path fill="none" stroke="#8b4513" d="M511.1557,-562C534.257,-562 563.2443,-562 586.0141,-562"/>
<polygon fill="#8b4513" stroke="#8b4513" points="586.3165,-565.5001 596.3164,-562 586.3164,-558.5001 586.3165,-565.5001"/>
</a>
</g>
</g>

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View File

@ -2,130 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/common/lease_set"
Package lease_set implements the I2P LeastSet common data structure
## Usage
```go
const (
LEASE_SET_PUBKEY_SIZE = 256
LEASE_SET_SPK_SIZE = 128
LEASE_SET_SIG_SIZE = 40
)
```
Sizes of various structures in an I2P LeaseSet
#### func ReadDestinationFromLeaseSet
```go
func ReadDestinationFromLeaseSet(data []byte) (destination Destination, remainder []byte, err error)
```
#### type LeaseSet
```go
type LeaseSet []byte
```
LeaseSet is the represenation of an I2P LeaseSet.
https://geti2p.net/spec/common-structures#leaseset
#### func NewLeaseSet
```go
func NewLeaseSet(
destination Destination,
encryptionKey crypto.RecievingPublicKey,
signingKey crypto.SigningPublicKey,
leases []Lease,
signingPrivateKey crypto.SigningPrivateKey,
) (LeaseSet, error)
```
#### func (LeaseSet) Destination
```go
func (lease_set LeaseSet) Destination() (destination Destination, err error)
```
Destination returns the Destination as []byte.
#### func (LeaseSet) DestinationDeux
```go
func (lease_set LeaseSet) DestinationDeux() (destination Destination, err error)
```
#### func (LeaseSet) LeaseCount
```go
func (lease_set LeaseSet) LeaseCount() (count int, err error)
```
LeaseCount returns the numbert of leases specified by the LeaseCount value as
int. returns errors encountered during parsing.
#### func (LeaseSet) Leases
```go
func (lease_set LeaseSet) Leases() (leases []Lease, err error)
```
Leases returns the leases as []Lease. returns errors encountered during parsing.
#### func (LeaseSet) NewestExpiration
```go
func (lease_set LeaseSet) NewestExpiration() (newest Date, err error)
```
NewestExpiration returns the newest lease expiration as an I2P Date. Returns
errors encountered during parsing.
#### func (LeaseSet) OldestExpiration
```go
func (lease_set LeaseSet) OldestExpiration() (earliest Date, err error)
```
OldestExpiration returns the oldest lease expiration as an I2P Date. Returns
errors encountered during parsing.
#### func (LeaseSet) PublicKey
```go
func (lease_set LeaseSet) PublicKey() (public_key crypto.ElgPublicKey, err error)
```
PublicKey returns the public key as crypto.ElgPublicKey. Returns errors
encountered during parsing.
#### func (LeaseSet) Signature
```go
func (lease_set LeaseSet) Signature() (signature signature.Signature, err error)
```
Signature returns the signature as Signature. returns errors encountered during
parsing.
#### func (LeaseSet) SigningKey
```go
func (lease_set LeaseSet) SigningKey() (signing_public_key crypto.SigningPublicKey, err error)
```
SigningKey returns the signing public key as crypto.SigningPublicKey. returns
errors encountered during parsing.
#### func (LeaseSet) Verify
```go
func (lease_set LeaseSet) Verify() error
```
Verify returns nil
# lease_set
--
import "github.com/go-i2p/go-i2p/lib/common/lease_set"
Package lease_set implements the I2P LeastSet common data structure
![lease_set.svg](lease_set)
Package lease_set implements the I2P LeastSet common data structure
## Usage
```go

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 135 KiB

After

Width:  |  Height:  |  Size: 135 KiB

View File

@ -2,211 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/common/router_address"
Package router_address implements the I2P RouterAddress common data structure
## Usage
```go
const (
ROUTER_ADDRESS_MIN_SIZE = 9
)
```
Minimum number of bytes in a valid RouterAddress
#### type RouterAddress
```go
type RouterAddress struct {
TransportCost *Integer
ExpirationDate *Date
TransportType I2PString
TransportOptions *Mapping
}
```
RouterAddress is the represenation of an I2P RouterAddress.
https://geti2p.net/spec/common-structures#routeraddress
#### func NewRouterAddress
```go
func NewRouterAddress(cost uint8, expiration time.Time, transportType string, options map[string]string) (*RouterAddress, error)
```
NewRouterAddress creates a new RouterAddress with the provided parameters.
Returns a pointer to RouterAddress.
#### func ReadRouterAddress
```go
func ReadRouterAddress(data []byte) (router_address RouterAddress, remainder []byte, err error)
```
ReadRouterAddress returns RouterAddress from a []byte. The remaining bytes after
the specified length are also returned. Returns a list of errors that occurred
during parsing.
#### func (RouterAddress) Bytes
```go
func (router_address RouterAddress) Bytes() []byte
```
Bytes returns the router address as a []byte.
#### func (RouterAddress) CapsString
```go
func (router_address RouterAddress) CapsString() I2PString
```
#### func (RouterAddress) Cost
```go
func (router_address RouterAddress) Cost() int
```
Cost returns the cost for this RouterAddress as a Go integer.
#### func (RouterAddress) Expiration
```go
func (router_address RouterAddress) Expiration() Date
```
Expiration returns the expiration for this RouterAddress as an I2P Date.
#### func (RouterAddress) GetOption
```go
func (router_address RouterAddress) GetOption(key I2PString) I2PString
```
GetOption returns the value of the option specified by the key
#### func (RouterAddress) Host
```go
func (router_address RouterAddress) Host() (net.Addr, error)
```
#### func (RouterAddress) HostString
```go
func (router_address RouterAddress) HostString() I2PString
```
#### func (*RouterAddress) IPVersion
```go
func (router_address *RouterAddress) IPVersion() string
```
IPVersion returns a string "4" for IPv4 or 6 for IPv6
#### func (RouterAddress) InitializationVector
```go
func (router_address RouterAddress) InitializationVector() ([16]byte, error)
```
#### func (RouterAddress) InitializationVectorString
```go
func (router_address RouterAddress) InitializationVectorString() I2PString
```
#### func (RouterAddress) IntroducerExpirationString
```go
func (router_address RouterAddress) IntroducerExpirationString(num int) I2PString
```
#### func (RouterAddress) IntroducerHashString
```go
func (router_address RouterAddress) IntroducerHashString(num int) I2PString
```
#### func (RouterAddress) IntroducerTagString
```go
func (router_address RouterAddress) IntroducerTagString(num int) I2PString
```
#### func (*RouterAddress) Network
```go
func (router_address *RouterAddress) Network() string
```
Network implements net.Addr. It returns the transport type plus 4 or 6
#### func (RouterAddress) Options
```go
func (router_address RouterAddress) Options() Mapping
```
Options returns the options for this RouterAddress as an I2P Mapping.
#### func (RouterAddress) Port
```go
func (router_address RouterAddress) Port() (string, error)
```
#### func (RouterAddress) PortString
```go
func (router_address RouterAddress) PortString() I2PString
```
#### func (RouterAddress) ProtocolVersion
```go
func (router_address RouterAddress) ProtocolVersion() (string, error)
```
#### func (RouterAddress) ProtocolVersionString
```go
func (router_address RouterAddress) ProtocolVersionString() I2PString
```
#### func (RouterAddress) StaticKey
```go
func (router_address RouterAddress) StaticKey() ([32]byte, error)
```
#### func (RouterAddress) StaticKeyString
```go
func (router_address RouterAddress) StaticKeyString() I2PString
```
#### func (*RouterAddress) String
```go
func (router_address *RouterAddress) String() string
```
String implements net.Addr. It returns the IP address, followed by the options
#### func (RouterAddress) TransportStyle
```go
func (router_address RouterAddress) TransportStyle() I2PString
```
TransportStyle returns the transport style for this RouterAddress as an
I2PString.
#### func (*RouterAddress) UDP
```go
func (router_address *RouterAddress) UDP() bool
```
# router_address
--
import "github.com/go-i2p/go-i2p/lib/common/router_address"
Package router_address implements the I2P RouterAddress common data structure
![router_address.svg](router_address)
Package router_address implements the I2P RouterAddress common data structure
## Usage
```go

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 149 KiB

After

Width:  |  Height:  |  Size: 154 KiB

View File

@ -2,51 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/common/router_identity"
Package router_identity implements the I2P RouterIdentity common data structure
## Usage
#### type RouterIdentity
```go
type RouterIdentity struct {
KeysAndCert
}
```
RouterIdentity is the represenation of an I2P RouterIdentity.
https://geti2p.net/spec/common-structures#routeridentity
#### func NewRouterIdentity
```go
func NewRouterIdentity(publicKey crypto.RecievingPublicKey, signingPublicKey crypto.SigningPublicKey, cert certificate.Certificate, padding []byte) (*RouterIdentity, error)
```
#### func ReadRouterIdentity
```go
func ReadRouterIdentity(data []byte) (router_identity RouterIdentity, remainder []byte, err error)
```
ReadRouterIdentity returns RouterIdentity from a []byte. The remaining bytes
after the specified length are also returned. Returns a list of errors that
occurred during parsing.
#### func (*RouterIdentity) AsDestination
```go
func (router_identity *RouterIdentity) AsDestination() destination.Destination
```
# router_identity
--
import "github.com/go-i2p/go-i2p/lib/common/router_identity"
Package router_identity implements the I2P RouterIdentity common data structure
![router_identity.svg](router_identity)
Package router_identity implements the I2P RouterIdentity common data structure
## Usage
#### type RouterIdentity

View File

@ -4,69 +4,37 @@
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="443pt" height="869pt"
viewBox="0.00 0.00 443.23 869.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 869)">
<svg width="435pt" height="723pt"
viewBox="0.00 0.00 435.23 723.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 723)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-869 443.2274,-869 443.2274,0 0,0"/>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-723 435.2274,-723 435.2274,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-861 435.2274,-861 435.2274,-8 8,-8"/>
<text text-anchor="middle" x="221.6137" y="-840.8" font-family="Arial" font-size="18.00" fill="#000000">router_identity</text>
</g>
<g id="clust7" class="cluster">
<title>cluster_github.com/sirupsen/logrus</title>
<g id="a_clust7"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="package: github.com/sirupsen/logrus">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="274.6607,-250 274.6607,-371 367.9819,-371 367.9819,-250 274.6607,-250"/>
<text text-anchor="middle" x="321.3213" y="-352.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logrus</text>
</a>
</g>
</g>
<g id="clust8" class="cluster">
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust8"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M294.6607,-258C294.6607,-258 347.9819,-258 347.9819,-258 353.9819,-258 359.9819,-264 359.9819,-270 359.9819,-270 359.9819,-324 359.9819,-324 359.9819,-330 353.9819,-336 347.9819,-336 347.9819,-336 294.6607,-336 294.6607,-336 288.6607,-336 282.6607,-330 282.6607,-324 282.6607,-324 282.6607,-270 282.6607,-270 282.6607,-264 288.6607,-258 294.6607,-258"/>
<text text-anchor="middle" x="321.3213" y="-266.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust5" class="cluster">
<title>cluster_github.com/go&#45;i2p/logger</title>
<g id="a_clust5"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="package: github.com/go&#45;i2p/logger">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="252.7266,-527 252.7266,-823 389.916,-823 389.916,-527 252.7266,-527"/>
<text text-anchor="middle" x="321.3213" y="-804.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logger</text>
</a>
</g>
</g>
<g id="clust6" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust6"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M282.2119,-535C282.2119,-535 360.4307,-535 360.4307,-535 366.4307,-535 372.4307,-541 372.4307,-547 372.4307,-547 372.4307,-723 372.4307,-723 372.4307,-729 366.4307,-735 360.4307,-735 360.4307,-735 282.2119,-735 282.2119,-735 276.2119,-735 270.2119,-729 270.2119,-723 270.2119,-723 270.2119,-547 270.2119,-547 270.2119,-541 276.2119,-535 282.2119,-535"/>
<text text-anchor="middle" x="321.3213" y="-543.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-715 427.2274,-715 427.2274,-8 8,-8"/>
<text text-anchor="middle" x="217.6137" y="-694.8" font-family="Arial" font-size="18.00" fill="#000000">router_identity</text>
</g>
<g id="clust4" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/keys_and_cert" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="248.451,-379 248.451,-519 394.1916,-519 394.1916,-379 248.451,-379"/>
<text text-anchor="middle" x="321.3213" y="-500.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">keys_and_cert</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/key_certificate" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="215.4152,-16 215.4152,-242 427.2274,-242 427.2274,-16 215.4152,-16"/>
<text text-anchor="middle" x="321.3213" y="-223.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">key_certificate</text>
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate</title>
<g id="a_clust4"><a xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M247.606,-16C247.606,-16 395.0366,-16 395.0366,-16 401.0366,-16 407.0366,-22 407.0366,-28 407.0366,-28 407.0366,-143 407.0366,-143 407.0366,-149 401.0366,-155 395.0366,-155 395.0366,-155 247.606,-155 247.606,-155 241.606,-155 235.606,-149 235.606,-143 235.606,-143 235.606,-28 235.606,-28 235.606,-22 241.606,-16 247.606,-16"/>
<text text-anchor="middle" x="321.3213" y="-24.5" font-family="Arial" font-size="15.00" fill="#222222">(KeyCertificate)</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/key_certificate" xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M247.606,-68C247.606,-68 395.0366,-68 395.0366,-68 401.0366,-68 407.0366,-74 407.0366,-80 407.0366,-80 407.0366,-195 407.0366,-195 407.0366,-201 401.0366,-207 395.0366,-207 395.0366,-207 247.606,-207 247.606,-207 241.606,-207 235.606,-201 235.606,-195 235.606,-195 235.606,-80 235.606,-80 235.606,-74 241.606,-68 247.606,-68"/>
<text text-anchor="middle" x="321.3213" y="-76.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(KeyCertificate)</text>
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust3"><a xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M294.6607,-277C294.6607,-277 348.9819,-277 348.9819,-277 354.9819,-277 360.9819,-283 360.9819,-289 360.9819,-289 360.9819,-343 360.9819,-343 360.9819,-349 354.9819,-355 348.9819,-355 348.9819,-355 294.6607,-355 294.6607,-355 288.6607,-355 282.6607,-349 282.6607,-343 282.6607,-343 282.6607,-289 282.6607,-289 282.6607,-283 288.6607,-277 294.6607,-277"/>
<text text-anchor="middle" x="321.8213" y="-285.5" font-family="Arial" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust2"><a xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M282.2119,-363C282.2119,-363 360.4307,-363 360.4307,-363 366.4307,-363 372.4307,-369 372.4307,-375 372.4307,-375 372.4307,-551 372.4307,-551 372.4307,-557 366.4307,-563 360.4307,-563 360.4307,-563 282.2119,-563 282.2119,-563 276.2119,-563 270.2119,-557 270.2119,-551 270.2119,-551 270.2119,-375 270.2119,-375 270.2119,-369 276.2119,-363 282.2119,-363"/>
<text text-anchor="middle" x="321.3213" y="-371.5" font-family="Arial" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
@ -74,242 +42,252 @@
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.init</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.init | defined in .:0&#10;at router_identity.go:14: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M98.2076,-788C98.2076,-788 68.2076,-788 68.2076,-788 62.2076,-788 56.2076,-782 56.2076,-776 56.2076,-776 56.2076,-764 56.2076,-764 56.2076,-758 62.2076,-752 68.2076,-752 68.2076,-752 98.2076,-752 98.2076,-752 104.2076,-752 110.2076,-758 110.2076,-764 110.2076,-764 110.2076,-776 110.2076,-776 110.2076,-782 104.2076,-788 98.2076,-788"/>
<text text-anchor="middle" x="83.2076" y="-765.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M98.2076,-677C98.2076,-677 68.2076,-677 68.2076,-677 62.2076,-677 56.2076,-671 56.2076,-665 56.2076,-665 56.2076,-653 56.2076,-653 56.2076,-647 62.2076,-641 68.2076,-641 68.2076,-641 98.2076,-641 98.2076,-641 104.2076,-641 110.2076,-647 110.2076,-653 110.2076,-653 110.2076,-665 110.2076,-665 110.2076,-671 104.2076,-677 98.2076,-677"/>
<text text-anchor="middle" x="83.2076" y="-654.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="node9" class="node">
<g id="node2" class="node">
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node9"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M370.0108,-788C370.0108,-788 272.6318,-788 272.6318,-788 266.6318,-788 260.6318,-782 260.6318,-776 260.6318,-776 260.6318,-764 260.6318,-764 260.6318,-758 266.6318,-752 272.6318,-752 272.6318,-752 370.0108,-752 370.0108,-752 376.0108,-752 382.0108,-758 382.0108,-764 382.0108,-764 382.0108,-776 382.0108,-776 382.0108,-782 376.0108,-788 370.0108,-788"/>
<text text-anchor="middle" x="321.3213" y="-765.8" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M370.0108,-677C370.0108,-677 272.6318,-677 272.6318,-677 266.6318,-677 260.6318,-671 260.6318,-665 260.6318,-665 260.6318,-653 260.6318,-653 260.6318,-647 266.6318,-641 272.6318,-641 272.6318,-641 370.0108,-641 370.0108,-641 376.0108,-641 382.0108,-647 382.0108,-653 382.0108,-653 382.0108,-665 382.0108,-665 382.0108,-671 376.0108,-677 370.0108,-677"/>
<text text-anchor="middle" x="321.3213" y="-663.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="321.3213" y="-646.4" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge1" class="edge">
<g id="edge8" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge1"><a xlink:title="at router_identity.go:14: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M110.5223,-770C144.4368,-770 203.5523,-770 250.5669,-770"/>
<polygon fill="#8b4513" stroke="#8b4513" points="250.7058,-773.5001 260.7058,-770 250.7058,-766.5001 250.7058,-773.5001"/>
<g id="a_edge8"><a xlink:title="at router_identity.go:14: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M110.5223,-659C144.4368,-659 203.5523,-659 250.5669,-659"/>
<polygon fill="#8b4513" stroke="#8b4513" points="250.7058,-662.5001 260.7058,-659 250.7058,-655.5001 250.7058,-662.5001"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity -->
<g id="node2" class="node">
<g id="node3" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity | defined in router_identity.go:37&#10;at router_identity.go:43: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at router_identity.go:41: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert]&#10;at router_identity.go:38: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at router_identity.go:49: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at router_identity.go:40: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router_identity.go:51: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router_identity.go:43: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M138.6234,-605C138.6234,-605 27.7918,-605 27.7918,-605 21.7918,-605 15.7918,-599 15.7918,-593 15.7918,-593 15.7918,-581 15.7918,-581 15.7918,-575 21.7918,-569 27.7918,-569 27.7918,-569 138.6234,-569 138.6234,-569 144.6234,-569 150.6234,-575 150.6234,-581 150.6234,-581 150.6234,-593 150.6234,-593 150.6234,-599 144.6234,-605 138.6234,-605"/>
<text text-anchor="middle" x="83.2076" y="-582.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadRouterIdentity</text>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity | defined in router_identity.go:37&#10;at router_identity.go:38: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at router_identity.go:49: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at router_identity.go:41: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert]&#10;at router_identity.go:43: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at router_identity.go:40: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router_identity.go:51: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router_identity.go:43: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M138.6234,-494C138.6234,-494 27.7918,-494 27.7918,-494 21.7918,-494 15.7918,-488 15.7918,-482 15.7918,-482 15.7918,-470 15.7918,-470 15.7918,-464 21.7918,-458 27.7918,-458 27.7918,-458 138.6234,-458 138.6234,-458 144.6234,-458 150.6234,-464 150.6234,-470 150.6234,-470 150.6234,-482 150.6234,-482 150.6234,-488 144.6234,-494 138.6234,-494"/>
<text text-anchor="middle" x="83.2076" y="-471.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadRouterIdentity</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert -->
<g id="node7" class="node">
<g id="node4" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert</title>
<g id="a_node7"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert | defined in keys_and_cert.go:142">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M374.0622,-484C374.0622,-484 268.5804,-484 268.5804,-484 262.5804,-484 256.5804,-478 256.5804,-472 256.5804,-472 256.5804,-460 256.5804,-460 256.5804,-454 262.5804,-448 268.5804,-448 268.5804,-448 374.0622,-448 374.0622,-448 380.0622,-448 386.0622,-454 386.0622,-460 386.0622,-460 386.0622,-472 386.0622,-472 386.0622,-478 380.0622,-484 374.0622,-484"/>
<text text-anchor="middle" x="321.3213" y="-461.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadKeysAndCert</text>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert | defined in keys_and_cert.go:142">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M374.0622,-616C374.0622,-616 268.5804,-616 268.5804,-616 262.5804,-616 256.5804,-610 256.5804,-604 256.5804,-604 256.5804,-592 256.5804,-592 256.5804,-586 262.5804,-580 268.5804,-580 268.5804,-580 374.0622,-580 374.0622,-580 380.0622,-580 386.0622,-586 386.0622,-592 386.0622,-592 386.0622,-604 386.0622,-604 386.0622,-610 380.0622,-616 374.0622,-616"/>
<text text-anchor="middle" x="321.3213" y="-602.2" font-family="Verdana" font-size="14.00" fill="#000000">keys_and_cert</text>
<text text-anchor="middle" x="321.3213" y="-585.4" font-family="Verdana" font-size="14.00" fill="#000000">ReadKeysAndCert</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert -->
<g id="edge4" class="edge">
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert</title>
<g id="a_edge4"><a xlink:title="at router_identity.go:41: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert]">
<path fill="none" stroke="#8b4513" d="M119.918,-568.8261C139.9067,-558.894 165.0546,-546.3395 187.4152,-535 217.5646,-519.7107 251.4066,-502.2699 277.5258,-488.7483"/>
<polygon fill="#8b4513" stroke="#8b4513" points="279.1543,-491.8465 286.4237,-484.1389 275.9344,-485.631 279.1543,-491.8465"/>
<g id="a_edge2"><a xlink:title="at router_identity.go:41: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.ReadKeysAndCert]">
<path fill="none" stroke="#8b4513" d="M105.7577,-494.0532C132.4636,-514.6754 178.9508,-548.2396 223.4152,-569 230.781,-572.4391 238.6493,-575.5766 246.6038,-578.4102"/>
<polygon fill="#8b4513" stroke="#8b4513" points="245.7269,-581.8088 256.3213,-581.7158 247.9812,-575.1817 245.7269,-581.8088"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="node10" class="node">
<g id="node8" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_node10"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithFields | defined in log.go:60">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M352.5404,-605C352.5404,-605 290.1022,-605 290.1022,-605 284.1022,-605 278.1022,-599 278.1022,-593 278.1022,-593 278.1022,-581 278.1022,-581 278.1022,-575 284.1022,-569 290.1022,-569 290.1022,-569 352.5404,-569 352.5404,-569 358.5404,-569 364.5404,-575 364.5404,-581 364.5404,-581 364.5404,-593 364.5404,-593 364.5404,-599 358.5404,-605 352.5404,-605"/>
<text text-anchor="middle" x="321.3213" y="-582.8" font-family="Verdana" font-size="14.00" fill="#000000">WithFields</text>
<g id="a_node8"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithFields | defined in log.go:60">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M352.5404,-494C352.5404,-494 290.1022,-494 290.1022,-494 284.1022,-494 278.1022,-488 278.1022,-482 278.1022,-482 278.1022,-470 278.1022,-470 278.1022,-464 284.1022,-458 290.1022,-458 290.1022,-458 352.5404,-458 352.5404,-458 358.5404,-458 364.5404,-464 364.5404,-470 364.5404,-470 364.5404,-482 364.5404,-482 364.5404,-488 358.5404,-494 352.5404,-494"/>
<text text-anchor="middle" x="321.3213" y="-480.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="321.3213" y="-463.4" font-family="Verdana" font-size="14.00" fill="#000000">WithFields</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge7" class="edge">
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge7"><a xlink:title="at router_identity.go:38: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at router_identity.go:49: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M150.4867,-587C187.5024,-587 232.8113,-587 267.4645,-587"/>
<polygon fill="#8b4513" stroke="#8b4513" points="267.8559,-590.5001 277.8558,-587 267.8558,-583.5001 267.8559,-590.5001"/>
<g id="a_edge1"><a xlink:title="at router_identity.go:38: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at router_identity.go:49: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M150.4867,-476C187.5024,-476 232.8113,-476 267.4645,-476"/>
<polygon fill="#8b4513" stroke="#8b4513" points="267.8559,-479.5001 277.8558,-476 267.8558,-472.5001 267.8559,-479.5001"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="node11" class="node">
<g id="node9" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_node11"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithError | defined in log.go:66">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M349.8528,-666C349.8528,-666 292.7898,-666 292.7898,-666 286.7898,-666 280.7898,-660 280.7898,-654 280.7898,-654 280.7898,-642 280.7898,-642 280.7898,-636 286.7898,-630 292.7898,-630 292.7898,-630 349.8528,-630 349.8528,-630 355.8528,-630 361.8528,-636 361.8528,-642 361.8528,-642 361.8528,-654 361.8528,-654 361.8528,-660 355.8528,-666 349.8528,-666"/>
<text text-anchor="middle" x="321.3213" y="-643.8" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
<g id="a_node9"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithError | defined in log.go:66">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M349.8528,-555C349.8528,-555 292.7898,-555 292.7898,-555 286.7898,-555 280.7898,-549 280.7898,-543 280.7898,-543 280.7898,-531 280.7898,-531 280.7898,-525 286.7898,-519 292.7898,-519 292.7898,-519 349.8528,-519 349.8528,-519 355.8528,-519 361.8528,-525 361.8528,-531 361.8528,-531 361.8528,-543 361.8528,-543 361.8528,-549 355.8528,-555 349.8528,-555"/>
<text text-anchor="middle" x="321.3213" y="-541.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="321.3213" y="-524.4" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge2" class="edge">
<g id="edge9" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge2"><a xlink:title="at router_identity.go:43: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M150.4867,-604.2356C188.6633,-614.0157 235.6615,-626.0557 270.6929,-635.03"/>
<polygon fill="#8b4513" stroke="#8b4513" points="270.1414,-638.5017 280.6972,-637.5929 271.8786,-631.7207 270.1414,-638.5017"/>
<g id="a_edge9"><a xlink:title="at router_identity.go:43: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M150.4867,-493.2356C188.6633,-503.0157 235.6615,-515.0557 270.6929,-524.03"/>
<polygon fill="#8b4513" stroke="#8b4513" points="270.1414,-527.5017 280.6972,-526.5929 271.8786,-520.7207 270.1414,-527.5017"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="node12" class="node">
<g id="node10" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_node12"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Error | defined in log.go:42">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M336.3213,-727C336.3213,-727 306.3213,-727 306.3213,-727 300.3213,-727 294.3213,-721 294.3213,-715 294.3213,-715 294.3213,-703 294.3213,-703 294.3213,-697 300.3213,-691 306.3213,-691 306.3213,-691 336.3213,-691 336.3213,-691 342.3213,-691 348.3213,-697 348.3213,-703 348.3213,-703 348.3213,-715 348.3213,-715 348.3213,-721 342.3213,-727 336.3213,-727"/>
<text text-anchor="middle" x="321.3213" y="-704.8" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
<g id="a_node10"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Error | defined in log.go:42">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M339.0876,-433C339.0876,-433 303.555,-433 303.555,-433 297.555,-433 291.555,-427 291.555,-421 291.555,-421 291.555,-409 291.555,-409 291.555,-403 297.555,-397 303.555,-397 303.555,-397 339.0876,-397 339.0876,-397 345.0876,-397 351.0876,-403 351.0876,-409 351.0876,-409 351.0876,-421 351.0876,-421 351.0876,-427 345.0876,-433 339.0876,-433"/>
<text text-anchor="middle" x="321.3213" y="-419.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="321.3213" y="-402.4" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge12" class="edge">
<g id="edge13" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge12"><a xlink:title="at router_identity.go:43: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M104.2809,-605.016C129.2845,-625.5639 172.9517,-658.9054 215.4152,-679 237.1373,-689.2793 263.0739,-696.6988 283.8429,-701.5876"/>
<polygon fill="#8b4513" stroke="#8b4513" points="283.357,-705.0659 293.8819,-703.8504 284.8963,-698.2372 283.357,-705.0659"/>
<g id="a_edge13"><a xlink:title="at router_identity.go:43: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M150.4867,-458.7644C192.6687,-447.9582 245.6205,-434.393 281.3,-425.2527"/>
<polygon fill="#8b4513" stroke="#8b4513" points="282.5155,-428.5544 291.3341,-422.6821 280.7783,-421.7733 282.5155,-428.5544"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Debug -->
<g id="node13" class="node">
<g id="node11" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_node13"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debug | defined in logger.go:221">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M340.1433,-328C340.1433,-328 302.4993,-328 302.4993,-328 296.4993,-328 290.4993,-322 290.4993,-316 290.4993,-316 290.4993,-304 290.4993,-304 290.4993,-298 296.4993,-292 302.4993,-292 302.4993,-292 340.1433,-292 340.1433,-292 346.1433,-292 352.1433,-298 352.1433,-304 352.1433,-304 352.1433,-316 352.1433,-316 352.1433,-322 346.1433,-328 340.1433,-328"/>
<text text-anchor="middle" x="321.3213" y="-305.8" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
<g id="a_node11"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debug | defined in logger.go:221">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M340.1433,-347C340.1433,-347 302.4993,-347 302.4993,-347 296.4993,-347 290.4993,-341 290.4993,-335 290.4993,-335 290.4993,-323 290.4993,-323 290.4993,-317 296.4993,-311 302.4993,-311 302.4993,-311 340.1433,-311 340.1433,-311 346.1433,-311 352.1433,-317 352.1433,-323 352.1433,-323 352.1433,-335 352.1433,-335 352.1433,-341 346.1433,-347 340.1433,-347"/>
<text text-anchor="middle" x="321.3213" y="-333.2" font-family="Verdana" font-size="14.00" fill="#000000">logrus</text>
<text text-anchor="middle" x="321.3213" y="-316.4" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge11" class="edge">
<g id="edge12" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.ReadRouterIdentity&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge11"><a xlink:title="at router_identity.go:40: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router_identity.go:51: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M90.736,-568.9593C107.9336,-529.4471 153.451,-433.9341 215.4152,-373 234.4164,-354.3146 260.0013,-338.8971 281.2638,-327.9912"/>
<polygon fill="#8b4513" stroke="#8b4513" points="282.9923,-331.0405 290.3839,-323.45 279.8722,-324.7743 282.9923,-331.0405"/>
<g id="a_edge12"><a xlink:title="at router_identity.go:40: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router_identity.go:51: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M99.5433,-457.9298C124.0103,-431.9254 172.74,-384.105 223.4152,-357 241.1722,-347.5022 262.5106,-340.913 280.7278,-336.5245"/>
<polygon fill="#8b4513" stroke="#8b4513" points="281.5084,-339.9364 290.4848,-334.3084 279.9579,-333.1103 281.5084,-339.9364"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity -->
<g id="node3" class="node">
<g id="node5" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity | defined in router_identity.go:55&#10;at router_identity.go:78: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at router_identity.go:67: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert]&#10;at router_identity.go:80: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType]&#10;at router_identity.go:60: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate]&#10;at router_identity.go:62: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at router_identity.go:69: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at router_identity.go:79: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType]&#10;at router_identity.go:56: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router_identity.go:82: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router_identity.go:62: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at router_identity.go:69: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M137.2848,-367C137.2848,-367 29.1304,-367 29.1304,-367 23.1304,-367 17.1304,-361 17.1304,-355 17.1304,-355 17.1304,-343 17.1304,-343 17.1304,-337 23.1304,-331 29.1304,-331 29.1304,-331 137.2848,-331 137.2848,-331 143.2848,-331 149.2848,-337 149.2848,-343 149.2848,-343 149.2848,-355 149.2848,-355 149.2848,-361 143.2848,-367 137.2848,-367"/>
<text text-anchor="middle" x="83.2076" y="-344.8" font-family="Verdana" font-size="14.00" fill="#000000">NewRouterIdentity</text>
<g id="a_node5"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity | defined in router_identity.go:55&#10;at router_identity.go:56: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router_identity.go:82: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router_identity.go:60: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate]&#10;at router_identity.go:62: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at router_identity.go:69: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at router_identity.go:67: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert]&#10;at router_identity.go:79: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType]&#10;at router_identity.go:62: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at router_identity.go:69: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at router_identity.go:78: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at router_identity.go:80: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M137.2848,-283C137.2848,-283 29.1304,-283 29.1304,-283 23.1304,-283 17.1304,-277 17.1304,-271 17.1304,-271 17.1304,-259 17.1304,-259 17.1304,-253 23.1304,-247 29.1304,-247 29.1304,-247 137.2848,-247 137.2848,-247 143.2848,-247 149.2848,-253 149.2848,-259 149.2848,-259 149.2848,-271 149.2848,-271 149.2848,-277 143.2848,-283 137.2848,-283"/>
<text text-anchor="middle" x="83.2076" y="-260.8" font-family="Verdana" font-size="14.00" fill="#000000">NewRouterIdentity</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate -->
<g id="node4" class="node">
<g id="node6" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate</title>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate | defined in key_certificate.go:395">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M407.1336,-60C407.1336,-60 235.509,-60 235.509,-60 229.509,-60 223.509,-54 223.509,-48 223.509,-48 223.509,-36 223.509,-36 223.509,-30 229.509,-24 235.509,-24 235.509,-24 407.1336,-24 407.1336,-24 413.1336,-24 419.1336,-30 419.1336,-36 419.1336,-36 419.1336,-48 419.1336,-48 419.1336,-54 413.1336,-60 407.1336,-60"/>
<text text-anchor="middle" x="321.3213" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">KeyCertificateFromCertificate</text>
<g id="a_node6"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate | defined in key_certificate.go:395">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M407.1336,-208C407.1336,-208 235.509,-208 235.509,-208 229.509,-208 223.509,-202 223.509,-196 223.509,-196 223.509,-184 223.509,-184 223.509,-178 229.509,-172 235.509,-172 235.509,-172 407.1336,-172 407.1336,-172 413.1336,-172 419.1336,-178 419.1336,-184 419.1336,-184 419.1336,-196 419.1336,-196 419.1336,-202 413.1336,-208 407.1336,-208"/>
<text text-anchor="middle" x="321.3213" y="-194.2" font-family="Verdana" font-size="14.00" fill="#000000">key_certificate</text>
<text text-anchor="middle" x="321.3213" y="-177.4" font-family="Verdana" font-size="14.00" fill="#000000">KeyCertificateFromCertificate</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate -->
<g id="edge8" class="edge">
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate</title>
<g id="a_edge8"><a xlink:title="at router_identity.go:60: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate]">
<path fill="none" stroke="#8b4513" d="M85.9093,-330.8722C94.2686,-281.3639 124.3964,-142.7131 215.4678,-64.945"/>
<polygon fill="#8b4513" stroke="#8b4513" points="217.7761,-67.5786 223.2939,-58.534 213.3402,-62.1635 217.7761,-67.5786"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType -->
<g id="node5" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType</title>
<g id="a_node5"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType | defined in key_certificate.go:126">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M365.1882,-138C365.1882,-138 277.4544,-138 277.4544,-138 271.4544,-138 265.4544,-132 265.4544,-126 265.4544,-126 265.4544,-114 265.4544,-114 265.4544,-108 271.4544,-102 277.4544,-102 277.4544,-102 365.1882,-102 365.1882,-102 371.1882,-102 377.1882,-108 377.1882,-114 377.1882,-114 377.1882,-126 377.1882,-126 377.1882,-132 371.1882,-138 365.1882,-138"/>
<text text-anchor="middle" x="321.3213" y="-115.8" font-family="Verdana" font-size="14.00" fill="#000000">PublicKeyType</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType -->
<g id="edge10" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType</title>
<g id="a_edge10"><a xlink:title="at router_identity.go:79: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType]">
<path fill="none" stroke="#8b4513" d="M90.212,-330.8703C106.2206,-291.8594 149.2841,-199.5637 215.4152,-151 227.2087,-142.3394 241.3916,-136.0872 255.4885,-131.5772"/>
<polygon fill="#8b4513" stroke="#8b4513" points="256.5946,-134.9003 265.2037,-128.725 254.6227,-128.1837 256.5946,-134.9003"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType -->
<g id="node6" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType</title>
<g id="a_node6"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType | defined in key_certificate.go:117">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M387.2525,-199C387.2525,-199 255.3901,-199 255.3901,-199 249.3901,-199 243.3901,-193 243.3901,-187 243.3901,-187 243.3901,-175 243.3901,-175 243.3901,-169 249.3901,-163 255.3901,-163 255.3901,-163 387.2525,-163 387.2525,-163 393.2525,-163 399.2525,-169 399.2525,-175 399.2525,-175 399.2525,-187 399.2525,-187 399.2525,-193 393.2525,-199 387.2525,-199"/>
<text text-anchor="middle" x="321.3213" y="-176.8" font-family="Verdana" font-size="14.00" fill="#000000">SigningPublicKeyType</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType -->
<g id="edge6" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType</title>
<g id="a_edge6"><a xlink:title="at router_identity.go:80: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType]">
<path fill="none" stroke="#8b4513" d="M107.351,-330.8105C133.687,-311.0814 177.1958,-278.8139 215.4152,-252 238.4063,-235.8699 264.6215,-218.2888 285.2179,-204.6569"/>
<polygon fill="#8b4513" stroke="#8b4513" points="287.2591,-207.5033 293.6751,-199.0721 283.4017,-201.662 287.2591,-207.5033"/>
<g id="a_edge4"><a xlink:title="at router_identity.go:60: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate]">
<path fill="none" stroke="#8b4513" d="M140.5448,-246.9402C174.7587,-236.1636 218.372,-222.4265 254.1884,-211.1452"/>
<polygon fill="#8b4513" stroke="#8b4513" points="255.5828,-214.3756 264.0694,-208.033 253.4798,-207.699 255.5828,-214.3756"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert -->
<g id="node8" class="node">
<g id="node7" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert</title>
<g id="a_node8"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert | defined in keys_and_cert.go:300">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M373.2245,-423C373.2245,-423 269.4181,-423 269.4181,-423 263.4181,-423 257.4181,-417 257.4181,-411 257.4181,-411 257.4181,-399 257.4181,-399 257.4181,-393 263.4181,-387 269.4181,-387 269.4181,-387 373.2245,-387 373.2245,-387 379.2245,-387 385.2245,-393 385.2245,-399 385.2245,-399 385.2245,-411 385.2245,-411 385.2245,-417 379.2245,-423 373.2245,-423"/>
<text text-anchor="middle" x="321.3213" y="-400.8" font-family="Verdana" font-size="14.00" fill="#000000">NewKeysAndCert</text>
<g id="a_node7"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert | defined in keys_and_cert.go:300">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M373.2245,-269C373.2245,-269 269.4181,-269 269.4181,-269 263.4181,-269 257.4181,-263 257.4181,-257 257.4181,-257 257.4181,-245 257.4181,-245 257.4181,-239 263.4181,-233 269.4181,-233 269.4181,-233 373.2245,-233 373.2245,-233 379.2245,-233 385.2245,-239 385.2245,-245 385.2245,-245 385.2245,-257 385.2245,-257 385.2245,-263 379.2245,-269 373.2245,-269"/>
<text text-anchor="middle" x="321.3213" y="-255.2" font-family="Verdana" font-size="14.00" fill="#000000">keys_and_cert</text>
<text text-anchor="middle" x="321.3213" y="-238.4" font-family="Verdana" font-size="14.00" fill="#000000">NewKeysAndCert</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert -->
<g id="edge5" class="edge">
<g id="edge6" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert</title>
<g id="a_edge5"><a xlink:title="at router_identity.go:67: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert]">
<path fill="none" stroke="#8b4513" d="M149.5355,-364.5991C179.9574,-371.7538 216.1353,-380.2622 247.4268,-387.6214"/>
<polygon fill="#8b4513" stroke="#8b4513" points="246.8654,-391.0848 257.4011,-389.9671 248.468,-384.2707 246.8654,-391.0848"/>
<g id="a_edge6"><a xlink:title="at router_identity.go:67: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/keys_and_cert.NewKeysAndCert]">
<path fill="none" stroke="#8b4513" d="M149.5355,-261.1002C179.8257,-259.3193 215.8222,-257.2029 247.0201,-255.3686"/>
<polygon fill="#8b4513" stroke="#8b4513" points="247.6238,-258.8392 257.4011,-254.7582 247.2129,-251.8513 247.6238,-258.8392"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge3" class="edge">
<g id="edge11" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge3"><a xlink:title="at router_identity.go:78: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M108.315,-367.0035C131.6852,-384.9216 166.0352,-414.3934 187.4152,-447 207.6117,-477.8017 191.8874,-496.6612 215.4152,-525 229.6253,-542.1159 249.8619,-555.5838 268.8449,-565.5322"/>
<polygon fill="#8b4513" stroke="#8b4513" points="267.5227,-568.7844 278.0313,-570.1338 270.6578,-562.5257 267.5227,-568.7844"/>
<g id="a_edge11"><a xlink:title="at router_identity.go:78: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M100.9862,-283.0291C122.7337,-305.5725 160.0294,-345.8533 187.4152,-384 205.9978,-409.8843 198.46,-426.1872 223.4152,-446 236.2071,-456.1559 252.4275,-462.8861 267.9681,-467.3415"/>
<polygon fill="#8b4513" stroke="#8b4513" points="267.4809,-470.8309 278.0394,-469.954 269.2385,-464.0552 267.4809,-470.8309"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge9" class="edge">
<g id="edge5" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge9"><a xlink:title="at router_identity.go:62: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at router_identity.go:69: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M101.3445,-367.3526C124.8994,-392.274 165.577,-439.2156 187.4152,-487 212.1627,-541.1503 174.7163,-574.5455 215.4152,-618 229.5986,-633.1437 250.8011,-640.8382 270.5176,-644.6783"/>
<polygon fill="#8b4513" stroke="#8b4513" points="270.2103,-648.1749 280.6475,-646.3541 271.3529,-641.2688 270.2103,-648.1749"/>
<g id="a_edge5"><a xlink:title="at router_identity.go:62: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at router_identity.go:69: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M88.6134,-283.2699C102.8782,-328.2912 145.8673,-445.3717 223.4152,-507 236.9003,-517.7168 254.2024,-524.6188 270.5006,-529.0585"/>
<polygon fill="#8b4513" stroke="#8b4513" points="269.9286,-532.5222 280.4756,-531.5168 271.6036,-525.7255 269.9286,-532.5222"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge14" class="edge">
<g id="edge10" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge14"><a xlink:title="at router_identity.go:62: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at router_identity.go:69: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M89.4293,-367.1672C112.1218,-433.0169 190.4151,-656.4964 215.4152,-679 234.1752,-695.8867 261.7691,-703.3341 284.0874,-706.5874"/>
<polygon fill="#8b4513" stroke="#8b4513" points="283.885,-710.0888 294.2381,-707.8383 284.7413,-703.1414 283.885,-710.0888"/>
<g id="a_edge10"><a xlink:title="at router_identity.go:62: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at router_identity.go:69: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M108.0521,-283.0879C135.7079,-302.9666 181.9738,-335.4661 223.4152,-361 242.4141,-372.7061 264.0933,-384.7882 282.2141,-394.548"/>
<polygon fill="#8b4513" stroke="#8b4513" points="280.8642,-397.7952 291.3328,-399.4258 284.1659,-391.6227 280.8642,-397.7952"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge13" class="edge">
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge13"><a xlink:title="at router_identity.go:56: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router_identity.go:82: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M149.5355,-338.1363C191.4929,-331.2642 244.3993,-322.5989 280.3345,-316.7131"/>
<polygon fill="#8b4513" stroke="#8b4513" points="281.1506,-320.1262 290.4533,-315.0558 280.0191,-313.2182 281.1506,-320.1262"/>
<g id="a_edge3"><a xlink:title="at router_identity.go:56: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at router_identity.go:82: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M140.2538,-283.0755C165.6054,-290.8525 195.8835,-299.7925 223.4152,-307 242.012,-311.8684 262.7669,-316.6273 280.3645,-320.4665"/>
<polygon fill="#8b4513" stroke="#8b4513" points="279.8074,-323.9268 290.3206,-322.6146 281.2837,-317.0842 279.8074,-323.9268"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType -->
<g id="node12" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType</title>
<g id="a_node12"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType | defined in key_certificate.go:126">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M365.1882,-86C365.1882,-86 277.4544,-86 277.4544,-86 271.4544,-86 265.4544,-80 265.4544,-74 265.4544,-74 265.4544,-62 265.4544,-62 265.4544,-56 271.4544,-50 277.4544,-50 277.4544,-50 365.1882,-50 365.1882,-50 371.1882,-50 377.1882,-56 377.1882,-62 377.1882,-62 377.1882,-74 377.1882,-74 377.1882,-80 371.1882,-86 365.1882,-86"/>
<text text-anchor="middle" x="321.3213" y="-72.2" font-family="Verdana" font-size="14.00" fill="#000000">key_certificate</text>
<text text-anchor="middle" x="321.3213" y="-55.4" font-family="Verdana" font-size="14.00" fill="#000000">PublicKeyType</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType -->
<g id="edge7" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType</title>
<g id="a_edge7"><a xlink:title="at router_identity.go:79: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).PublicKeyType]">
<path fill="none" stroke="#8b4513" d="M93.6553,-246.8619C114.1629,-212.8463 162.9947,-139.2833 223.4152,-99 233.2083,-92.4708 244.4613,-87.2475 255.77,-83.0909"/>
<polygon fill="#8b4513" stroke="#8b4513" points="256.9242,-86.3952 265.2515,-79.8449 254.6569,-79.7725 256.9242,-86.3952"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType -->
<g id="node13" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType</title>
<g id="a_node13"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType | defined in key_certificate.go:117">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M387.2525,-147C387.2525,-147 255.3901,-147 255.3901,-147 249.3901,-147 243.3901,-141 243.3901,-135 243.3901,-135 243.3901,-123 243.3901,-123 243.3901,-117 249.3901,-111 255.3901,-111 255.3901,-111 387.2525,-111 387.2525,-111 393.2525,-111 399.2525,-117 399.2525,-123 399.2525,-123 399.2525,-135 399.2525,-135 399.2525,-141 393.2525,-147 387.2525,-147"/>
<text text-anchor="middle" x="321.3213" y="-133.2" font-family="Verdana" font-size="14.00" fill="#000000">key_certificate</text>
<text text-anchor="middle" x="321.3213" y="-116.4" font-family="Verdana" font-size="14.00" fill="#000000">SigningPublicKeyType</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType -->
<g id="edge14" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType</title>
<g id="a_edge14"><a xlink:title="at router_identity.go:80: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SigningPublicKeyType]">
<path fill="none" stroke="#8b4513" d="M99.9188,-246.9185C124.4754,-221.4855 172.8945,-175.5196 223.4152,-151 226.7874,-149.3634 230.2842,-147.8464 233.8611,-146.4406"/>
<polygon fill="#8b4513" stroke="#8b4513" points="235.2636,-149.6556 243.4852,-142.9732 232.8908,-143.07 235.2636,-149.6556"/>
</a>
</g>
</g>

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -2,182 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/common/router_info"
Package router_info implements the I2P RouterInfo common data structure
## Usage
```go
const (
MIN_GOOD_VERSION = 58
MAX_GOOD_VERSION = 99
)
```
```go
const ROUTER_INFO_MIN_SIZE = 439
```
#### type RouterInfo
```go
type RouterInfo struct {
}
```
RouterInfo is the represenation of an I2P RouterInfo.
https://geti2p.net/spec/common-structures#routerinfo
#### func NewRouterInfo
```go
func NewRouterInfo(
routerIdentity *RouterIdentity,
publishedTime time.Time,
addresses []*RouterAddress,
options map[string]string,
signingPrivateKey crypto.SigningPrivateKey,
sigType int,
) (*RouterInfo, error)
```
#### func OwnedRouterInfo
```go
func OwnedRouterInfo(keyCertificate key_certificate.KeyCertificate) *RouterInfo
```
#### func ReadRouterInfo
```go
func ReadRouterInfo(bytes []byte) (info RouterInfo, remainder []byte, err error)
```
ReadRouterInfo returns RouterInfo from a []byte. The remaining bytes after the
specified length are also returned. Returns a list of errors that occurred
during parsing.
#### func (*RouterInfo) AddAddress
```go
func (router_info *RouterInfo) AddAddress(address *RouterAddress)
```
#### func (RouterInfo) Bytes
```go
func (router_info RouterInfo) Bytes() (bytes []byte, err error)
```
Bytes returns the RouterInfo as a []byte suitable for writing to a stream.
#### func (*RouterInfo) GoodVersion
```go
func (router_info *RouterInfo) GoodVersion() bool
```
#### func (*RouterInfo) IdentHash
```go
func (router_info *RouterInfo) IdentHash() Hash
```
IndentHash returns the identity hash (sha256 sum) for this RouterInfo.
#### func (RouterInfo) Network
```go
func (router_info RouterInfo) Network() string
```
Network implements net.Addr
#### func (RouterInfo) Options
```go
func (router_info RouterInfo) Options() (mapping Mapping)
```
Options returns the options for this RouterInfo as an I2P Mapping.
#### func (*RouterInfo) PeerSize
```go
func (router_info *RouterInfo) PeerSize() int
```
PeerSize returns the peer size as a Go integer.
#### func (*RouterInfo) Published
```go
func (router_info *RouterInfo) Published() *Date
```
Published returns the date this RouterInfo was published as an I2P Date.
#### func (*RouterInfo) Reachable
```go
func (router_info *RouterInfo) Reachable() bool
```
#### func (*RouterInfo) RouterAddressCount
```go
func (router_info *RouterInfo) RouterAddressCount() int
```
RouterAddressCount returns the count of RouterAddress in this RouterInfo as a Go
integer.
#### func (*RouterInfo) RouterAddresses
```go
func (router_info *RouterInfo) RouterAddresses() []*RouterAddress
```
RouterAddresses returns all RouterAddresses for this RouterInfo as
[]*RouterAddress.
#### func (*RouterInfo) RouterCapabilities
```go
func (router_info *RouterInfo) RouterCapabilities() string
```
#### func (*RouterInfo) RouterIdentity
```go
func (router_info *RouterInfo) RouterIdentity() *RouterIdentity
```
RouterIdentity returns the router identity as *RouterIdentity.
#### func (*RouterInfo) RouterVersion
```go
func (router_info *RouterInfo) RouterVersion() string
```
#### func (RouterInfo) Signature
```go
func (router_info RouterInfo) Signature() (signature Signature)
```
Signature returns the signature for this RouterInfo as an I2P Signature.
#### func (RouterInfo) String
```go
func (router_info RouterInfo) String() string
```
#### func (*RouterInfo) UnCongested
```go
func (router_info *RouterInfo) UnCongested() bool
```
# router_info
--
import "github.com/go-i2p/go-i2p/lib/common/router_info"
Package router_info implements the I2P RouterInfo common data structure
![router_info.svg](router_info)
Package router_info implements the I2P RouterInfo common data structure
## Usage
```go

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 150 KiB

After

Width:  |  Height:  |  Size: 147 KiB

View File

@ -2,45 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/common/session_key"
Package session_key implements the I2P SessionKey common data structure
## Usage
#### type SessionKey
```go
type SessionKey [32]byte
```
SessionKey is the represenation of an I2P SessionKey.
https://geti2p.net/spec/common-structures#sessionkey
#### func NewSessionKey
```go
func NewSessionKey(data []byte) (session_key *SessionKey, remainder []byte, err error)
```
NewSessionKey creates a new *SessionKey from []byte using ReadSessionKey.
Returns a pointer to SessionKey unlike ReadSessionKey.
#### func ReadSessionKey
```go
func ReadSessionKey(bytes []byte) (info SessionKey, remainder []byte, err error)
```
ReadSessionKey returns SessionKey from a []byte. The remaining bytes after the
specified length are also returned. Returns a list of errors that occurred
during parsing.
# session_key
--
import "github.com/go-i2p/go-i2p/lib/common/session_key"
Package session_key implements the I2P SessionKey common data structure
![session_key.svg](session_key)
Package session_key implements the I2P SessionKey common data structure
## Usage
#### type SessionKey

View File

@ -4,29 +4,21 @@
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="503pt" height="471pt"
viewBox="0.00 0.00 502.92 471.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 471)">
<svg width="472pt" height="428pt"
viewBox="0.00 0.00 472.39 428.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 428)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-471 502.9202,-471 502.9202,0 0,0"/>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-428 472.3858,-428 472.3858,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-463 494.9202,-463 494.9202,-8 8,-8"/>
<text text-anchor="middle" x="251.4601" y="-442.8" font-family="Arial" font-size="18.00" fill="#000000">session_key</text>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-420 464.3858,-420 464.3858,-8 8,-8"/>
<text text-anchor="middle" x="236.1929" y="-399.8" font-family="Arial" font-size="18.00" fill="#000000">session_key</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/sirupsen/logrus</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="package: github.com/sirupsen/logrus">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="389.39,-16 389.39,-425 486.9202,-425 486.9202,-16 389.39,-16"/>
<text text-anchor="middle" x="438.1551" y="-406.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logrus</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_*github.com/sirupsen/logrus.Entry</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="type: *github.com/sirupsen/logrus.Entry">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M411.4945,-251C411.4945,-251 464.8157,-251 464.8157,-251 470.8157,-251 476.8157,-257 476.8157,-263 476.8157,-263 476.8157,-378 476.8157,-378 476.8157,-384 470.8157,-390 464.8157,-390 464.8157,-390 411.4945,-390 411.4945,-390 405.4945,-390 399.4945,-384 399.4945,-378 399.4945,-378 399.4945,-263 399.4945,-263 399.4945,-257 405.4945,-251 411.4945,-251"/>
<text text-anchor="middle" x="438.1551" y="-259.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Entry)</text>
<g id="a_clust2"><a xlink:title="type: *github.com/sirupsen/logrus.Entry">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M238.2974,-243C238.2974,-243 291.6186,-243 291.6186,-243 297.6186,-243 303.6186,-249 303.6186,-255 303.6186,-255 303.6186,-370 303.6186,-370 303.6186,-376 297.6186,-382 291.6186,-382 291.6186,-382 238.2974,-382 238.2974,-382 232.2974,-382 226.2974,-376 226.2974,-370 226.2974,-370 226.2974,-255 226.2974,-255 226.2974,-249 232.2974,-243 238.2974,-243"/>
<text text-anchor="middle" x="264.958" y="-251.5" font-family="Arial" font-size="15.00" fill="#222222">(*Entry)</text>
</a>
</g>
</g>
@ -34,44 +26,45 @@
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.ReadSessionKey</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.ReadSessionKey | defined in session_key.go:25&#10;at session_key.go:27: calling [github.com/sirupsen/logrus.Warn]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M312.3221,-89C312.3221,-89 217.5939,-89 217.5939,-89 211.5939,-89 205.5939,-83 205.5939,-77 205.5939,-77 205.5939,-65 205.5939,-65 205.5939,-59 211.5939,-53 217.5939,-53 217.5939,-53 312.3221,-53 312.3221,-53 318.3221,-53 324.3221,-59 324.3221,-65 324.3221,-65 324.3221,-77 324.3221,-77 324.3221,-83 318.3221,-89 312.3221,-89"/>
<text text-anchor="middle" x="264.958" y="-66.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadSessionKey</text>
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M312.3221,-52C312.3221,-52 217.5939,-52 217.5939,-52 211.5939,-52 205.5939,-46 205.5939,-40 205.5939,-40 205.5939,-28 205.5939,-28 205.5939,-22 211.5939,-16 217.5939,-16 217.5939,-16 312.3221,-16 312.3221,-16 318.3221,-16 324.3221,-22 324.3221,-28 324.3221,-28 324.3221,-40 324.3221,-40 324.3221,-46 318.3221,-52 312.3221,-52"/>
<text text-anchor="middle" x="264.958" y="-29.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadSessionKey</text>
</a>
</g>
</g>
<!-- github.com/sirupsen/logrus.Warn -->
<g id="node3" class="node">
<g id="node2" class="node">
<title>github.com/sirupsen/logrus.Warn</title>
<g id="a_node3"><a xlink:title="github.com/sirupsen/logrus.Warn | defined in exported.go:113">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M453.745,-60C453.745,-60 422.5652,-60 422.5652,-60 416.5652,-60 410.5652,-54 410.5652,-48 410.5652,-48 410.5652,-36 410.5652,-36 410.5652,-30 416.5652,-24 422.5652,-24 422.5652,-24 453.745,-24 453.745,-24 459.745,-24 465.745,-30 465.745,-36 465.745,-36 465.745,-48 465.745,-48 465.745,-54 459.745,-60 453.745,-60"/>
<text text-anchor="middle" x="438.1551" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">Warn</text>
<g id="a_node2"><a xlink:title="github.com/sirupsen/logrus.Warn | defined in exported.go:113">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M444.3837,-52C444.3837,-52 409.3921,-52 409.3921,-52 403.3921,-52 397.3921,-46 397.3921,-40 397.3921,-40 397.3921,-28 397.3921,-28 397.3921,-22 403.3921,-16 409.3921,-16 409.3921,-16 444.3837,-16 444.3837,-16 450.3837,-16 456.3837,-22 456.3837,-28 456.3837,-28 456.3837,-40 456.3837,-40 456.3837,-46 450.3837,-52 444.3837,-52"/>
<text text-anchor="middle" x="426.8879" y="-38.2" font-family="Verdana" font-size="14.00" fill="#000000">logrus</text>
<text text-anchor="middle" x="426.8879" y="-21.4" font-family="Verdana" font-size="14.00" fill="#000000">Warn</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.ReadSessionKey&#45;&gt;github.com/sirupsen/logrus.Warn -->
<g id="edge7" class="edge">
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.ReadSessionKey&#45;&gt;github.com/sirupsen/logrus.Warn</title>
<g id="a_edge7"><a xlink:title="at session_key.go:27: calling [github.com/sirupsen/logrus.Warn]">
<path fill="none" stroke="#8b4513" d="M324.5626,-61.0198C349.7356,-56.8049 378.2897,-52.0238 400.4721,-48.3096"/>
<polygon fill="#8b4513" stroke="#8b4513" points="401.2083,-51.7352 410.493,-46.6317 400.0523,-44.8313 401.2083,-51.7352"/>
<g id="a_edge1"><a xlink:title="at session_key.go:27: calling [github.com/sirupsen/logrus.Warn]">
<path fill="none" stroke="#8b4513" d="M324.3352,-34C345.2029,-34 368.1346,-34 387.0117,-34"/>
<polygon fill="#8b4513" stroke="#8b4513" points="387.0431,-37.5001 397.043,-34 387.043,-30.5001 387.0431,-37.5001"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey -->
<g id="node2" class="node">
<g id="node3" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey | defined in session_key.go:33&#10;at session_key.go:34: calling [github.com/sirupsen/logrus.WithField]&#10;at session_key.go:34: calling [(*github.com/sirupsen/logrus.Entry).Debug]&#10;at session_key.go:35: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.ReadSessionKey]&#10;at session_key.go:37: calling [github.com/sirupsen/logrus.WithError]&#10;at session_key.go:37: calling [(*github.com/sirupsen/logrus.Entry).Error]&#10;at session_key.go:41: calling [github.com/sirupsen/logrus.Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M120.29,-212C120.29,-212 28.236,-212 28.236,-212 22.236,-212 16.236,-206 16.236,-200 16.236,-200 16.236,-188 16.236,-188 16.236,-182 22.236,-176 28.236,-176 28.236,-176 120.29,-176 120.29,-176 126.29,-176 132.29,-182 132.29,-188 132.29,-188 132.29,-200 132.29,-200 132.29,-206 126.29,-212 120.29,-212"/>
<text text-anchor="middle" x="74.263" y="-189.8" font-family="Verdana" font-size="14.00" fill="#000000">NewSessionKey</text>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey | defined in session_key.go:33&#10;at session_key.go:34: calling [github.com/sirupsen/logrus.WithField]&#10;at session_key.go:34: calling [(*github.com/sirupsen/logrus.Entry).Debug]&#10;at session_key.go:35: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.ReadSessionKey]&#10;at session_key.go:37: calling [github.com/sirupsen/logrus.WithError]&#10;at session_key.go:37: calling [(*github.com/sirupsen/logrus.Entry).Error]&#10;at session_key.go:41: calling [github.com/sirupsen/logrus.Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M120.29,-204C120.29,-204 28.236,-204 28.236,-204 22.236,-204 16.236,-198 16.236,-192 16.236,-192 16.236,-180 16.236,-180 16.236,-174 22.236,-168 28.236,-168 28.236,-168 120.29,-168 120.29,-168 126.29,-168 132.29,-174 132.29,-180 132.29,-180 132.29,-192 132.29,-192 132.29,-198 126.29,-204 120.29,-204"/>
<text text-anchor="middle" x="74.263" y="-181.8" font-family="Verdana" font-size="14.00" fill="#000000">NewSessionKey</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.ReadSessionKey -->
<g id="edge3" class="edge">
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.ReadSessionKey</title>
<g id="a_edge3"><a xlink:title="at session_key.go:35: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.ReadSessionKey]">
<path fill="none" stroke="#000000" d="M95.5362,-175.7261C114.1263,-160.2042 142.1895,-137.8306 168.526,-121 183.8021,-111.2377 201.2035,-101.7565 216.98,-93.722"/>
<polygon fill="#000000" stroke="#000000" points="218.686,-96.7819 226.0528,-89.1673 215.5454,-90.5259 218.686,-96.7819"/>
<g id="a_edge4"><a xlink:title="at session_key.go:35: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.ReadSessionKey]">
<path fill="none" stroke="#000000" d="M90.8252,-167.9829C114.5635,-142.8336 160.3942,-96.7292 205.526,-65 209.4263,-62.258 213.6003,-59.5997 217.8606,-57.0685"/>
<polygon fill="#000000" stroke="#000000" points="219.7007,-60.0485 226.6664,-52.0653 216.2427,-53.9622 219.7007,-60.0485"/>
</a>
</g>
</g>
@ -79,17 +72,18 @@
<g id="node4" class="node">
<title>github.com/sirupsen/logrus.WithField</title>
<g id="a_node4"><a xlink:title="github.com/sirupsen/logrus.WithField | defined in exported.go:69">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M466.4296,-121C466.4296,-121 409.8806,-121 409.8806,-121 403.8806,-121 397.8806,-115 397.8806,-109 397.8806,-109 397.8806,-97 397.8806,-97 397.8806,-91 403.8806,-85 409.8806,-85 409.8806,-85 466.4296,-85 466.4296,-85 472.4296,-85 478.4296,-91 478.4296,-97 478.4296,-97 478.4296,-109 478.4296,-109 478.4296,-115 472.4296,-121 466.4296,-121"/>
<text text-anchor="middle" x="438.1551" y="-98.8" font-family="Verdana" font-size="14.00" fill="#000000">WithField</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M293.2325,-113C293.2325,-113 236.6835,-113 236.6835,-113 230.6835,-113 224.6835,-107 224.6835,-101 224.6835,-101 224.6835,-89 224.6835,-89 224.6835,-83 230.6835,-77 236.6835,-77 236.6835,-77 293.2325,-77 293.2325,-77 299.2325,-77 305.2325,-83 305.2325,-89 305.2325,-89 305.2325,-101 305.2325,-101 305.2325,-107 299.2325,-113 293.2325,-113"/>
<text text-anchor="middle" x="264.958" y="-99.2" font-family="Verdana" font-size="14.00" fill="#000000">logrus</text>
<text text-anchor="middle" x="264.958" y="-82.4" font-family="Verdana" font-size="14.00" fill="#000000">WithField</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey&#45;&gt;github.com/sirupsen/logrus.WithField -->
<g id="edge1" class="edge">
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey&#45;&gt;github.com/sirupsen/logrus.WithField</title>
<g id="a_edge1"><a xlink:title="at session_key.go:34: calling [github.com/sirupsen/logrus.WithField]">
<path fill="none" stroke="#8b4513" d="M132.3252,-179.4802C202.9433,-161.8204 320.9777,-132.303 387.8778,-115.5731"/>
<polygon fill="#8b4513" stroke="#8b4513" points="388.911,-118.9225 397.7631,-113.101 387.2127,-112.1317 388.911,-118.9225"/>
<g id="a_edge2"><a xlink:title="at session_key.go:34: calling [github.com/sirupsen/logrus.WithField]">
<path fill="none" stroke="#8b4513" d="M112.3947,-167.8035C142.7648,-153.3108 185.4246,-132.9535 217.9151,-117.449"/>
<polygon fill="#8b4513" stroke="#8b4513" points="219.7002,-120.4753 227.2178,-113.0097 216.6854,-114.1577 219.7002,-120.4753"/>
</a>
</g>
</g>
@ -97,17 +91,18 @@
<g id="node5" class="node">
<title>github.com/sirupsen/logrus.WithError</title>
<g id="a_node5"><a xlink:title="github.com/sirupsen/logrus.WithError | defined in exported.go:55">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M466.6866,-182C466.6866,-182 409.6236,-182 409.6236,-182 403.6236,-182 397.6236,-176 397.6236,-170 397.6236,-170 397.6236,-158 397.6236,-158 397.6236,-152 403.6236,-146 409.6236,-146 409.6236,-146 466.6866,-146 466.6866,-146 472.6866,-146 478.6866,-152 478.6866,-158 478.6866,-158 478.6866,-170 478.6866,-170 478.6866,-176 472.6866,-182 466.6866,-182"/>
<text text-anchor="middle" x="438.1551" y="-159.8" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M293.4895,-174C293.4895,-174 236.4265,-174 236.4265,-174 230.4265,-174 224.4265,-168 224.4265,-162 224.4265,-162 224.4265,-150 224.4265,-150 224.4265,-144 230.4265,-138 236.4265,-138 236.4265,-138 293.4895,-138 293.4895,-138 299.4895,-138 305.4895,-144 305.4895,-150 305.4895,-150 305.4895,-162 305.4895,-162 305.4895,-168 299.4895,-174 293.4895,-174"/>
<text text-anchor="middle" x="264.958" y="-160.2" font-family="Verdana" font-size="14.00" fill="#000000">logrus</text>
<text text-anchor="middle" x="264.958" y="-143.4" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey&#45;&gt;github.com/sirupsen/logrus.WithError -->
<g id="edge4" class="edge">
<g id="edge5" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey&#45;&gt;github.com/sirupsen/logrus.WithError</title>
<g id="a_edge4"><a xlink:title="at session_key.go:37: calling [github.com/sirupsen/logrus.WithError]">
<path fill="none" stroke="#8b4513" d="M132.3252,-189.2132C202.703,-183.4111 320.1752,-173.7265 387.1933,-168.2014"/>
<polygon fill="#8b4513" stroke="#8b4513" points="387.8225,-171.6615 397.5011,-167.3516 387.2473,-164.6852 387.8225,-171.6615"/>
<g id="a_edge5"><a xlink:title="at session_key.go:37: calling [github.com/sirupsen/logrus.WithError]">
<path fill="none" stroke="#8b4513" d="M132.514,-176.836C158.6025,-172.7318 189.0807,-167.937 214.2186,-163.9823"/>
<polygon fill="#8b4513" stroke="#8b4513" points="214.9448,-167.4112 224.2794,-162.3995 213.8569,-160.4962 214.9448,-167.4112"/>
</a>
</g>
</g>
@ -115,17 +110,18 @@
<g id="node6" class="node">
<title>github.com/sirupsen/logrus.Debug</title>
<g id="a_node6"><a xlink:title="github.com/sirupsen/logrus.Debug | defined in exported.go:98">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M456.9771,-243C456.9771,-243 419.3331,-243 419.3331,-243 413.3331,-243 407.3331,-237 407.3331,-231 407.3331,-231 407.3331,-219 407.3331,-219 407.3331,-213 413.3331,-207 419.3331,-207 419.3331,-207 456.9771,-207 456.9771,-207 462.9771,-207 468.9771,-213 468.9771,-219 468.9771,-219 468.9771,-231 468.9771,-231 468.9771,-237 462.9771,-243 456.9771,-243"/>
<text text-anchor="middle" x="438.1551" y="-220.8" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M283.78,-235C283.78,-235 246.136,-235 246.136,-235 240.136,-235 234.136,-229 234.136,-223 234.136,-223 234.136,-211 234.136,-211 234.136,-205 240.136,-199 246.136,-199 246.136,-199 283.78,-199 283.78,-199 289.78,-199 295.78,-205 295.78,-211 295.78,-211 295.78,-223 295.78,-223 295.78,-229 289.78,-235 283.78,-235"/>
<text text-anchor="middle" x="264.958" y="-221.2" font-family="Verdana" font-size="14.00" fill="#000000">logrus</text>
<text text-anchor="middle" x="264.958" y="-204.4" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey&#45;&gt;github.com/sirupsen/logrus.Debug -->
<g id="edge6" class="edge">
<g id="edge7" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey&#45;&gt;github.com/sirupsen/logrus.Debug</title>
<g id="a_edge6"><a xlink:title="at session_key.go:41: calling [github.com/sirupsen/logrus.Debug]">
<path fill="none" stroke="#8b4513" d="M132.3252,-198.9463C206.2647,-205.2452 332.1858,-215.9725 396.9679,-221.4913"/>
<polygon fill="#8b4513" stroke="#8b4513" points="396.9382,-225.0013 407.1992,-222.3629 397.5324,-218.0266 396.9382,-225.0013"/>
<g id="a_edge7"><a xlink:title="at session_key.go:41: calling [github.com/sirupsen/logrus.Debug]">
<path fill="none" stroke="#8b4513" d="M132.514,-195.4695C162.1028,-200.2795 197.3383,-206.0075 224.025,-210.3458"/>
<polygon fill="#8b4513" stroke="#8b4513" points="223.7352,-213.8446 234.1673,-211.9946 224.8585,-206.9353 223.7352,-213.8446"/>
</a>
</g>
</g>
@ -133,17 +129,18 @@
<g id="node7" class="node">
<title>(*github.com/sirupsen/logrus.Entry).Debug</title>
<g id="a_node7"><a xlink:title="(*github.com/sirupsen/logrus.Entry).Debug | defined in entry.go:312">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M456.9771,-321C456.9771,-321 419.3331,-321 419.3331,-321 413.3331,-321 407.3331,-315 407.3331,-309 407.3331,-309 407.3331,-297 407.3331,-297 407.3331,-291 413.3331,-285 419.3331,-285 419.3331,-285 456.9771,-285 456.9771,-285 462.9771,-285 468.9771,-291 468.9771,-297 468.9771,-297 468.9771,-309 468.9771,-309 468.9771,-315 462.9771,-321 456.9771,-321"/>
<text text-anchor="middle" x="438.1551" y="-298.8" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M283.78,-313C283.78,-313 246.136,-313 246.136,-313 240.136,-313 234.136,-307 234.136,-301 234.136,-301 234.136,-289 234.136,-289 234.136,-283 240.136,-277 246.136,-277 246.136,-277 283.78,-277 283.78,-277 289.78,-277 295.78,-283 295.78,-289 295.78,-289 295.78,-301 295.78,-301 295.78,-307 289.78,-313 283.78,-313"/>
<text text-anchor="middle" x="264.958" y="-299.2" font-family="Verdana" font-size="14.00" fill="#000000">logrus</text>
<text text-anchor="middle" x="264.958" y="-282.4" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey&#45;&gt;(*github.com/sirupsen/logrus.Entry).Debug -->
<g id="edge2" class="edge">
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey&#45;&gt;(*github.com/sirupsen/logrus.Entry).Debug</title>
<g id="a_edge2"><a xlink:title="at session_key.go:34: calling [(*github.com/sirupsen/logrus.Entry).Debug]">
<path fill="none" stroke="#8b4513" d="M132.3252,-211.3919C206.4172,-233.5854 332.7053,-271.4136 397.3678,-290.7826"/>
<polygon fill="#8b4513" stroke="#8b4513" points="396.6154,-294.2108 407.1992,-293.7275 398.624,-287.5052 396.6154,-294.2108"/>
<g id="a_edge3"><a xlink:title="at session_key.go:34: calling [(*github.com/sirupsen/logrus.Entry).Debug]">
<path fill="none" stroke="#8b4513" d="M97.9151,-204.1135C123.4419,-223.0678 165.7928,-252.8208 205.526,-273 211.5896,-276.0795 218.19,-278.9545 224.7143,-281.5442"/>
<polygon fill="#8b4513" stroke="#8b4513" points="223.5564,-284.8483 234.1476,-285.1249 226.0405,-278.3039 223.5564,-284.8483"/>
</a>
</g>
</g>
@ -151,17 +148,18 @@
<g id="node8" class="node">
<title>(*github.com/sirupsen/logrus.Entry).Error</title>
<g id="a_node8"><a xlink:title="(*github.com/sirupsen/logrus.Entry).Error | defined in entry.go:332">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M453.1551,-382C453.1551,-382 423.1551,-382 423.1551,-382 417.1551,-382 411.1551,-376 411.1551,-370 411.1551,-370 411.1551,-358 411.1551,-358 411.1551,-352 417.1551,-346 423.1551,-346 423.1551,-346 453.1551,-346 453.1551,-346 459.1551,-346 465.1551,-352 465.1551,-358 465.1551,-358 465.1551,-370 465.1551,-370 465.1551,-376 459.1551,-382 453.1551,-382"/>
<text text-anchor="middle" x="438.1551" y="-359.8" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M282.4538,-374C282.4538,-374 247.4622,-374 247.4622,-374 241.4622,-374 235.4622,-368 235.4622,-362 235.4622,-362 235.4622,-350 235.4622,-350 235.4622,-344 241.4622,-338 247.4622,-338 247.4622,-338 282.4538,-338 282.4538,-338 288.4538,-338 294.4538,-344 294.4538,-350 294.4538,-350 294.4538,-362 294.4538,-362 294.4538,-368 288.4538,-374 282.4538,-374"/>
<text text-anchor="middle" x="264.958" y="-360.2" font-family="Verdana" font-size="14.00" fill="#000000">logrus</text>
<text text-anchor="middle" x="264.958" y="-343.4" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey&#45;&gt;(*github.com/sirupsen/logrus.Entry).Error -->
<g id="edge5" class="edge">
<g id="edge6" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_key.NewSessionKey&#45;&gt;(*github.com/sirupsen/logrus.Entry).Error</title>
<g id="a_edge5"><a xlink:title="at session_key.go:37: calling [(*github.com/sirupsen/logrus.Entry).Error]">
<path fill="none" stroke="#8b4513" d="M110.6359,-212.0502C136.9152,-225.0141 173.3068,-242.8081 205.526,-258 274.4848,-290.5153 355.6436,-327.1222 401.5796,-347.689"/>
<polygon fill="#8b4513" stroke="#8b4513" points="400.2726,-350.9385 410.8301,-351.827 403.131,-344.5487 400.2726,-350.9385"/>
<g id="a_edge6"><a xlink:title="at session_key.go:37: calling [(*github.com/sirupsen/logrus.Entry).Error]">
<path fill="none" stroke="#8b4513" d="M87.925,-204.2759C110.108,-233.0122 156.4463,-289.2647 205.526,-326 211.902,-330.7723 219.1515,-335.1491 226.3422,-338.9974"/>
<polygon fill="#8b4513" stroke="#8b4513" points="224.849,-342.1646 235.349,-343.5794 228.023,-335.9256 224.849,-342.1646"/>
</a>
</g>
</g>

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -2,45 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/common/session_tag"
Package session_tag implements the I2P SessionTag common data structure
## Usage
#### type SessionTag
```go
type SessionTag [32]byte
```
SessionTag is the represenation of an I2P SessionTag.
https://geti2p.net/spec/common-structures#session-tag
#### func NewSessionTag
```go
func NewSessionTag(data []byte) (session_tag *SessionTag, remainder []byte, err error)
```
NewSessionTag creates a new *SessionTag from []byte using ReadSessionTag.
Returns a pointer to SessionTag unlike ReadSessionTag.
#### func ReadSessionTag
```go
func ReadSessionTag(bytes []byte) (info SessionTag, remainder []byte, err error)
```
ReadSessionTag returns SessionTag from a []byte. The remaining bytes after the
specified length are also returned. Returns a list of errors that occurred
during parsing.
# session_tag
--
import "github.com/go-i2p/go-i2p/lib/common/session_tag"
Package session_tag implements the I2P SessionTag common data structure
![session_tag.svg](session_tag)
Package session_tag implements the I2P SessionTag common data structure
## Usage
#### type SessionTag

View File

@ -4,54 +4,38 @@
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="539pt" height="471pt"
viewBox="0.00 0.00 539.47 471.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 471)">
<svg width="508pt" height="384pt"
viewBox="0.00 0.00 508.38 384.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 384)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-471 539.4714,-471 539.4714,0 0,0"/>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-384 508.3802,-384 508.3802,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-463 531.4714,-463 531.4714,-8 8,-8"/>
<text text-anchor="middle" x="269.7357" y="-442.8" font-family="Arial" font-size="18.00" fill="#000000">session_tag</text>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-376 500.3802,-376 500.3802,-8 8,-8"/>
<text text-anchor="middle" x="254.1901" y="-355.8" font-family="Arial" font-size="18.00" fill="#000000">session_tag</text>
</g>
<g id="clust4" class="cluster">
<title>cluster_github.com/sirupsen/logrus</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="package: github.com/sirupsen/logrus">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="215.9664,-304 215.9664,-425 309.2876,-425 309.2876,-304 215.9664,-304"/>
<text text-anchor="middle" x="262.627" y="-406.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logrus</text>
</a>
</g>
</g>
<g id="clust5" class="cluster">
<g id="clust3" class="cluster">
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust5"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M235.9664,-312C235.9664,-312 289.2876,-312 289.2876,-312 295.2876,-312 301.2876,-318 301.2876,-324 301.2876,-324 301.2876,-378 301.2876,-378 301.2876,-384 295.2876,-390 289.2876,-390 289.2876,-390 235.9664,-390 235.9664,-390 229.9664,-390 223.9664,-384 223.9664,-378 223.9664,-378 223.9664,-324 223.9664,-324 223.9664,-318 229.9664,-312 235.9664,-312"/>
<text text-anchor="middle" x="262.627" y="-320.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
<g id="a_clust3"><a xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M237.9061,-253C237.9061,-253 292.2273,-253 292.2273,-253 298.2273,-253 304.2273,-259 304.2273,-265 304.2273,-265 304.2273,-319 304.2273,-319 304.2273,-325 298.2273,-331 292.2273,-331 292.2273,-331 237.9061,-331 237.9061,-331 231.9061,-331 225.9061,-325 225.9061,-319 225.9061,-319 225.9061,-265 225.9061,-265 225.9061,-259 231.9061,-253 237.9061,-253"/>
<text text-anchor="middle" x="265.0667" y="-261.5" font-family="Arial" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/logger</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="package: github.com/go&#45;i2p/logger">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="386.282,-16 386.282,-425 523.4714,-425 523.4714,-16 386.282,-16"/>
<text text-anchor="middle" x="454.8767" y="-406.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logger</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M415.7673,-68C415.7673,-68 493.9861,-68 493.9861,-68 499.9861,-68 505.9861,-74 505.9861,-80 505.9861,-80 505.9861,-378 505.9861,-378 505.9861,-384 499.9861,-390 493.9861,-390 493.9861,-390 415.7673,-390 415.7673,-390 409.7673,-390 403.7673,-384 403.7673,-378 403.7673,-378 403.7673,-80 403.7673,-80 403.7673,-74 409.7673,-68 415.7673,-68"/>
<text text-anchor="middle" x="454.8767" y="-76.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
<g id="a_clust2"><a xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M402.1614,-16C402.1614,-16 480.3802,-16 480.3802,-16 486.3802,-16 492.3802,-22 492.3802,-28 492.3802,-28 492.3802,-326 492.3802,-326 492.3802,-332 486.3802,-338 480.3802,-338 480.3802,-338 402.1614,-338 402.1614,-338 396.1614,-338 390.1614,-332 390.1614,-326 390.1614,-326 390.1614,-28 390.1614,-28 390.1614,-22 396.1614,-16 402.1614,-16"/>
<text text-anchor="middle" x="441.2708" y="-24.5" font-family="Arial" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag | defined in session_tag.go:38&#10;at session_tag.go:39: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at session_tag.go:48: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at session_tag.go:40: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.ReadSessionTag]&#10;at session_tag.go:42: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at session_tag.go:42: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at session_tag.go:46: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at session_tag.go:39: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M118.958,-272C118.958,-272 28.014,-272 28.014,-272 22.014,-272 16.014,-266 16.014,-260 16.014,-260 16.014,-248 16.014,-248 16.014,-242 22.014,-236 28.014,-236 28.014,-236 118.958,-236 118.958,-236 124.958,-236 130.958,-242 130.958,-248 130.958,-248 130.958,-260 130.958,-260 130.958,-266 124.958,-272 118.958,-272"/>
<text text-anchor="middle" x="73.486" y="-249.8" font-family="Verdana" font-size="14.00" fill="#000000">NewSessionTag</text>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag | defined in session_tag.go:38&#10;at session_tag.go:46: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at session_tag.go:39: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at session_tag.go:39: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at session_tag.go:48: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at session_tag.go:40: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.ReadSessionTag]&#10;at session_tag.go:42: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at session_tag.go:42: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M118.958,-221C118.958,-221 28.014,-221 28.014,-221 22.014,-221 16.014,-215 16.014,-209 16.014,-209 16.014,-197 16.014,-197 16.014,-191 22.014,-185 28.014,-185 28.014,-185 118.958,-185 118.958,-185 124.958,-185 130.958,-191 130.958,-197 130.958,-197 130.958,-209 130.958,-209 130.958,-215 124.958,-221 118.958,-221"/>
<text text-anchor="middle" x="73.486" y="-198.8" font-family="Verdana" font-size="14.00" fill="#000000">NewSessionTag</text>
</a>
</g>
</g>
@ -59,17 +43,17 @@
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.ReadSessionTag</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.ReadSessionTag | defined in session_tag.go:30&#10;at session_tag.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M309.4374,-158C309.4374,-158 215.8166,-158 215.8166,-158 209.8166,-158 203.8166,-152 203.8166,-146 203.8166,-146 203.8166,-134 203.8166,-134 203.8166,-128 209.8166,-122 215.8166,-122 215.8166,-122 309.4374,-122 309.4374,-122 315.4374,-122 321.4374,-128 321.4374,-134 321.4374,-134 321.4374,-146 321.4374,-146 321.4374,-152 315.4374,-158 309.4374,-158"/>
<text text-anchor="middle" x="262.627" y="-135.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadSessionTag</text>
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M311.3771,-128C311.3771,-128 217.7563,-128 217.7563,-128 211.7563,-128 205.7563,-122 205.7563,-116 205.7563,-116 205.7563,-104 205.7563,-104 205.7563,-98 211.7563,-92 217.7563,-92 217.7563,-92 311.3771,-92 311.3771,-92 317.3771,-92 323.3771,-98 323.3771,-104 323.3771,-104 323.3771,-116 323.3771,-116 323.3771,-122 317.3771,-128 311.3771,-128"/>
<text text-anchor="middle" x="264.5667" y="-105.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadSessionTag</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.ReadSessionTag -->
<g id="edge3" class="edge">
<g id="edge6" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.ReadSessionTag</title>
<g id="a_edge3"><a xlink:title="at session_tag.go:40: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.ReadSessionTag]">
<path fill="none" stroke="#000000" d="M98.3475,-235.7859C116.8851,-222.5017 143.0301,-204.3834 166.972,-190 182.6822,-180.5619 200.3502,-171.0373 216.187,-162.87"/>
<polygon fill="#000000" stroke="#000000" points="217.9585,-165.8953 225.2712,-158.2289 214.7737,-159.6617 217.9585,-165.8953"/>
<g id="a_edge6"><a xlink:title="at session_tag.go:40: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.ReadSessionTag]">
<path fill="none" stroke="#000000" d="M106.0521,-184.7968C123.8767,-175.0334 146.4515,-162.9903 166.972,-153 181.4472,-145.9528 197.3486,-138.732 212.0373,-132.2686"/>
<polygon fill="#000000" stroke="#000000" points="213.725,-135.3508 221.4875,-128.1401 210.9226,-128.9362 213.725,-135.3508"/>
</a>
</g>
</g>
@ -77,17 +61,18 @@
<g id="node5" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_node5"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithField | defined in log.go:54">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M483.1512,-199C483.1512,-199 426.6022,-199 426.6022,-199 420.6022,-199 414.6022,-193 414.6022,-187 414.6022,-187 414.6022,-175 414.6022,-175 414.6022,-169 420.6022,-163 426.6022,-163 426.6022,-163 483.1512,-163 483.1512,-163 489.1512,-163 495.1512,-169 495.1512,-175 495.1512,-175 495.1512,-187 495.1512,-187 495.1512,-193 489.1512,-199 483.1512,-199"/>
<text text-anchor="middle" x="454.8767" y="-176.8" font-family="Verdana" font-size="14.00" fill="#000000">WithField</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M469.5453,-147C469.5453,-147 412.9963,-147 412.9963,-147 406.9963,-147 400.9963,-141 400.9963,-135 400.9963,-135 400.9963,-123 400.9963,-123 400.9963,-117 406.9963,-111 412.9963,-111 412.9963,-111 469.5453,-111 469.5453,-111 475.5453,-111 481.5453,-117 481.5453,-123 481.5453,-123 481.5453,-135 481.5453,-135 481.5453,-141 475.5453,-147 469.5453,-147"/>
<text text-anchor="middle" x="441.2708" y="-133.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="441.2708" y="-116.4" font-family="Verdana" font-size="14.00" fill="#000000">WithField</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge8" class="edge">
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge8"><a xlink:title="at session_tag.go:39: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M130.997,-242.9921C205.3749,-228.7558 333.7439,-204.1854 404.4763,-190.6469"/>
<polygon fill="#8b4513" stroke="#8b4513" points="405.317,-194.0496 414.4807,-188.732 404.001,-187.1744 405.317,-194.0496"/>
<g id="a_edge3"><a xlink:title="at session_tag.go:39: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M131.357,-191.3561C202.7426,-176.993 322.9463,-152.8074 390.7638,-139.1622"/>
<polygon fill="#8b4513" stroke="#8b4513" points="391.667,-142.5507 400.7801,-137.1469 390.2862,-135.6883 391.667,-142.5507"/>
</a>
</g>
</g>
@ -95,17 +80,18 @@
<g id="node7" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_node7"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithError | defined in log.go:66">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M483.4082,-260C483.4082,-260 426.3452,-260 426.3452,-260 420.3452,-260 414.3452,-254 414.3452,-248 414.3452,-248 414.3452,-236 414.3452,-236 414.3452,-230 420.3452,-224 426.3452,-224 426.3452,-224 483.4082,-224 483.4082,-224 489.4082,-224 495.4082,-230 495.4082,-236 495.4082,-236 495.4082,-248 495.4082,-248 495.4082,-254 489.4082,-260 483.4082,-260"/>
<text text-anchor="middle" x="454.8767" y="-237.8" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M469.8023,-208C469.8023,-208 412.7393,-208 412.7393,-208 406.7393,-208 400.7393,-202 400.7393,-196 400.7393,-196 400.7393,-184 400.7393,-184 400.7393,-178 406.7393,-172 412.7393,-172 412.7393,-172 469.8023,-172 469.8023,-172 475.8023,-172 481.8023,-178 481.8023,-184 481.8023,-184 481.8023,-196 481.8023,-196 481.8023,-202 475.8023,-208 469.8023,-208"/>
<text text-anchor="middle" x="441.2708" y="-194.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="441.2708" y="-177.4" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge4" class="edge">
<g id="edge7" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge4"><a xlink:title="at session_tag.go:42: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M130.997,-252.1905C205.2757,-249.8534 333.4017,-245.8221 404.193,-243.5947"/>
<polygon fill="#8b4513" stroke="#8b4513" points="404.3235,-247.0924 414.2084,-243.2796 404.1033,-240.0959 404.3235,-247.0924"/>
<g id="a_edge7"><a xlink:title="at session_tag.go:42: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M131.357,-200.9544C202.6464,-198.4346 322.6224,-194.1938 390.4893,-191.795"/>
<polygon fill="#8b4513" stroke="#8b4513" points="390.6454,-195.2917 400.5155,-191.4406 390.3981,-188.2961 390.6454,-195.2917"/>
</a>
</g>
</g>
@ -113,17 +99,18 @@
<g id="node8" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_node8"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Error | defined in log.go:42">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M469.8767,-321C469.8767,-321 439.8767,-321 439.8767,-321 433.8767,-321 427.8767,-315 427.8767,-309 427.8767,-309 427.8767,-297 427.8767,-297 427.8767,-291 433.8767,-285 439.8767,-285 439.8767,-285 469.8767,-285 469.8767,-285 475.8767,-285 481.8767,-291 481.8767,-297 481.8767,-297 481.8767,-309 481.8767,-309 481.8767,-315 475.8767,-321 469.8767,-321"/>
<text text-anchor="middle" x="454.8767" y="-298.8" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M459.0371,-269C459.0371,-269 423.5045,-269 423.5045,-269 417.5045,-269 411.5045,-263 411.5045,-257 411.5045,-257 411.5045,-245 411.5045,-245 411.5045,-239 417.5045,-233 423.5045,-233 423.5045,-233 459.0371,-233 459.0371,-233 465.0371,-233 471.0371,-239 471.0371,-245 471.0371,-245 471.0371,-257 471.0371,-257 471.0371,-263 465.0371,-269 459.0371,-269"/>
<text text-anchor="middle" x="441.2708" y="-255.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="441.2708" y="-238.4" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge5" class="edge">
<g id="edge8" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge5"><a xlink:title="at session_tag.go:42: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M131.1094,-260.2764C188.6927,-266.6904 279.7207,-277.2141 358.282,-288 377.9587,-290.7015 399.8321,-294.0678 417.7815,-296.9265"/>
<polygon fill="#8b4513" stroke="#8b4513" points="417.4219,-300.4135 427.8502,-298.5422 418.531,-293.5019 417.4219,-300.4135"/>
<g id="a_edge8"><a xlink:title="at session_tag.go:42: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M131.1251,-208.7956C189.4872,-214.897 282.2809,-225.2377 362.1614,-237 374.8823,-238.8731 388.7001,-241.2127 401.1752,-243.4398"/>
<polygon fill="#8b4513" stroke="#8b4513" points="400.8211,-246.9326 411.2849,-245.2715 402.0691,-240.0447 400.8211,-246.9326"/>
</a>
</g>
</g>
@ -131,17 +118,18 @@
<g id="node9" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_node9"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithFields | defined in log.go:60">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M486.0958,-382C486.0958,-382 423.6576,-382 423.6576,-382 417.6576,-382 411.6576,-376 411.6576,-370 411.6576,-370 411.6576,-358 411.6576,-358 411.6576,-352 417.6576,-346 423.6576,-346 423.6576,-346 486.0958,-346 486.0958,-346 492.0958,-346 498.0958,-352 498.0958,-358 498.0958,-358 498.0958,-370 498.0958,-370 498.0958,-376 492.0958,-382 486.0958,-382"/>
<text text-anchor="middle" x="454.8767" y="-359.8" font-family="Verdana" font-size="14.00" fill="#000000">WithFields</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M472.4899,-330C472.4899,-330 410.0517,-330 410.0517,-330 404.0517,-330 398.0517,-324 398.0517,-318 398.0517,-318 398.0517,-306 398.0517,-306 398.0517,-300 404.0517,-294 410.0517,-294 410.0517,-294 472.4899,-294 472.4899,-294 478.4899,-294 484.4899,-300 484.4899,-306 484.4899,-306 484.4899,-318 484.4899,-318 484.4899,-324 478.4899,-330 472.4899,-330"/>
<text text-anchor="middle" x="441.2708" y="-316.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="441.2708" y="-299.4" font-family="Verdana" font-size="14.00" fill="#000000">WithFields</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge6" class="edge">
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge6"><a xlink:title="at session_tag.go:46: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M131.2724,-266.5243C153.9314,-271.4027 180.1613,-277.0098 203.972,-282 256.0581,-292.9162 270.5316,-289.9837 321.282,-306 323.5049,-306.7015 367.5162,-325.8491 404.4234,-341.9537"/>
<polygon fill="#8b4513" stroke="#8b4513" points="403.0586,-345.1769 413.6238,-345.9695 405.8589,-338.7613 403.0586,-345.1769"/>
<g id="a_edge1"><a xlink:title="at session_tag.go:46: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M131.1401,-216.2015C153.7818,-221.1681 180.0345,-226.6586 203.972,-231 257.5508,-240.7172 273.5123,-231.7524 325.1614,-249 340.6011,-254.1559 374.6188,-272.9648 401.864,-288.7001"/>
<polygon fill="#8b4513" stroke="#8b4513" points="400.4022,-291.8986 410.8074,-293.8944 403.9179,-285.8454 400.4022,-291.8986"/>
</a>
</g>
</g>
@ -149,17 +137,18 @@
<g id="node10" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_node10"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debug | defined in logger.go:221">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M281.449,-382C281.449,-382 243.805,-382 243.805,-382 237.805,-382 231.805,-376 231.805,-370 231.805,-370 231.805,-358 231.805,-358 231.805,-352 237.805,-346 243.805,-346 243.805,-346 281.449,-346 281.449,-346 287.449,-346 293.449,-352 293.449,-358 293.449,-358 293.449,-370 293.449,-370 293.449,-376 287.449,-382 281.449,-382"/>
<text text-anchor="middle" x="262.627" y="-359.8" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M283.3887,-323C283.3887,-323 245.7447,-323 245.7447,-323 239.7447,-323 233.7447,-317 233.7447,-311 233.7447,-311 233.7447,-299 233.7447,-299 233.7447,-293 239.7447,-287 245.7447,-287 245.7447,-287 283.3887,-287 283.3887,-287 289.3887,-287 295.3887,-293 295.3887,-299 295.3887,-299 295.3887,-311 295.3887,-311 295.3887,-317 289.3887,-323 283.3887,-323"/>
<text text-anchor="middle" x="264.5667" y="-309.2" font-family="Verdana" font-size="14.00" fill="#000000">logrus</text>
<text text-anchor="middle" x="264.5667" y="-292.4" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge1" class="edge">
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.NewSessionTag&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge1"><a xlink:title="at session_tag.go:39: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at session_tag.go:48: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M96.9635,-272.3213C122.3103,-291.4932 164.3866,-321.5879 203.972,-342 209.7447,-344.9767 216.016,-347.7618 222.2391,-350.2827"/>
<polygon fill="#8b4513" stroke="#8b4513" points="221.3108,-353.6761 231.9001,-354.0162 223.8341,-347.1467 221.3108,-353.6761"/>
<g id="a_edge4"><a xlink:title="at session_tag.go:39: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at session_tag.go:48: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M99.5846,-221.1809C125.3107,-238.5699 166.1513,-264.7711 203.972,-283 210.3393,-286.0689 217.2529,-288.9626 224.0558,-291.5807"/>
<polygon fill="#8b4513" stroke="#8b4513" points="223.2736,-295.0231 233.8669,-295.2077 225.7009,-288.4573 223.2736,-295.0231"/>
</a>
</g>
</g>
@ -167,17 +156,18 @@
<g id="node6" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_node6"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Warn | defined in log.go:30">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M470.4666,-138C470.4666,-138 439.2868,-138 439.2868,-138 433.2868,-138 427.2868,-132 427.2868,-126 427.2868,-126 427.2868,-114 427.2868,-114 427.2868,-108 433.2868,-102 439.2868,-102 439.2868,-102 470.4666,-102 470.4666,-102 476.4666,-102 482.4666,-108 482.4666,-114 482.4666,-114 482.4666,-126 482.4666,-126 482.4666,-132 476.4666,-138 470.4666,-138"/>
<text text-anchor="middle" x="454.8767" y="-115.8" font-family="Verdana" font-size="14.00" fill="#000000">Warn</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M459.0371,-86C459.0371,-86 423.5045,-86 423.5045,-86 417.5045,-86 411.5045,-80 411.5045,-74 411.5045,-74 411.5045,-62 411.5045,-62 411.5045,-56 417.5045,-50 423.5045,-50 423.5045,-50 459.0371,-50 459.0371,-50 465.0371,-50 471.0371,-56 471.0371,-62 471.0371,-62 471.0371,-74 471.0371,-74 471.0371,-80 465.0371,-86 459.0371,-86"/>
<text text-anchor="middle" x="441.2708" y="-72.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="441.2708" y="-55.4" font-family="Verdana" font-size="14.00" fill="#000000">Warn</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.ReadSessionTag&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn -->
<g id="edge2" class="edge">
<g id="edge5" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.ReadSessionTag&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_edge2"><a xlink:title="at session_tag.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]">
<path fill="none" stroke="#8b4513" d="M321.3529,-133.8907C352.4502,-130.6556 389.7343,-126.7769 416.9911,-123.9413"/>
<polygon fill="#8b4513" stroke="#8b4513" points="417.6935,-127.3872 427.2777,-122.8712 416.9692,-120.4248 417.6935,-127.3872"/>
<g id="a_edge5"><a xlink:title="at session_tag.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]">
<path fill="none" stroke="#8b4513" d="M323.4066,-96.0146C349.1185,-89.9033 378.5977,-82.8965 401.6424,-77.4191"/>
<polygon fill="#8b4513" stroke="#8b4513" points="402.4976,-80.8134 411.4172,-75.0958 400.8788,-74.0031 402.4976,-80.8134"/>
</a>
</g>
</g>
@ -185,8 +175,8 @@
<g id="node3" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.init</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.init | defined in .:0&#10;at session_tag.go:9: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M277.627,-60C277.627,-60 247.627,-60 247.627,-60 241.627,-60 235.627,-54 235.627,-48 235.627,-48 235.627,-36 235.627,-36 235.627,-30 241.627,-24 247.627,-24 247.627,-24 277.627,-24 277.627,-24 283.627,-24 289.627,-30 289.627,-36 289.627,-36 289.627,-48 289.627,-48 289.627,-54 283.627,-60 277.627,-60"/>
<text text-anchor="middle" x="262.627" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M88.486,-55C88.486,-55 58.486,-55 58.486,-55 52.486,-55 46.486,-49 46.486,-43 46.486,-43 46.486,-31 46.486,-31 46.486,-25 52.486,-19 58.486,-19 58.486,-19 88.486,-19 88.486,-19 94.486,-19 100.486,-25 100.486,-31 100.486,-31 100.486,-43 100.486,-43 100.486,-49 94.486,-55 88.486,-55"/>
<text text-anchor="middle" x="73.486" y="-32.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
@ -194,17 +184,18 @@
<g id="node4" class="node">
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M503.5662,-60C503.5662,-60 406.1872,-60 406.1872,-60 400.1872,-60 394.1872,-54 394.1872,-48 394.1872,-48 394.1872,-36 394.1872,-36 394.1872,-30 400.1872,-24 406.1872,-24 406.1872,-24 503.5662,-24 503.5662,-24 509.5662,-24 515.5662,-30 515.5662,-36 515.5662,-36 515.5662,-48 515.5662,-48 515.5662,-54 509.5662,-60 503.5662,-60"/>
<text text-anchor="middle" x="454.8767" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M313.2562,-55C313.2562,-55 215.8772,-55 215.8772,-55 209.8772,-55 203.8772,-49 203.8772,-43 203.8772,-43 203.8772,-31 203.8772,-31 203.8772,-25 209.8772,-19 215.8772,-19 215.8772,-19 313.2562,-19 313.2562,-19 319.2562,-19 325.2562,-25 325.2562,-31 325.2562,-31 325.2562,-43 325.2562,-43 325.2562,-49 319.2562,-55 313.2562,-55"/>
<text text-anchor="middle" x="264.5667" y="-41.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="264.5667" y="-24.4" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge7" class="edge">
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/session_tag.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge7"><a xlink:title="at session_tag.go:9: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M289.7639,-42C314.2457,-42 351.3461,-42 384.1812,-42"/>
<polygon fill="#8b4513" stroke="#8b4513" points="384.2158,-45.5001 394.2157,-42 384.2157,-38.5001 384.2158,-45.5001"/>
<g id="a_edge2"><a xlink:title="at session_tag.go:9: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M100.8632,-37C124.9805,-37 161.1891,-37 193.4256,-37"/>
<polygon fill="#8b4513" stroke="#8b4513" points="193.7322,-40.5001 203.7321,-37 193.7321,-33.5001 193.7322,-40.5001"/>
</a>
</g>
</g>

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -2,83 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/common/signature"
Package signature implements the I2P Signature common data structure
## Usage
```go
const (
DSA_SHA1_SIZE = 40
ECDSA_SHA256_P256_SIZE = 64
ECDSA_SHA384_P384_SIZE = 96
ECDSA_SHA512_P512_SIZE = 132
RSA_SHA256_2048_SIZE = 256
RSA_SHA384_3072_SIZE = 384
RSA_SHA512_4096_SIZE = 512
EdDSA_SHA512_Ed25519_SIZE = 64
EdDSA_SHA512_Ed25519ph_SIZE = 64
RedDSA_SHA512_Ed25519_SIZE = 64
)
```
Lengths of signature keys
```go
const (
SIGNATURE_TYPE_DSA_SHA1 = 0
SIGNATURE_TYPE_ECDSA_SHA256_P256 = 1
SIGNATURE_TYPE_ECDSA_SHA384_P384 = 2
SIGNATURE_TYPE_ECDSA_SHA512_P521 = 3
SIGNATURE_TYPE_RSA_SHA256_2048 = 4
SIGNATURE_TYPE_RSA_SHA384_3072 = 5
SIGNATURE_TYPE_RSA_SHA512_4096 = 6
SIGNATURE_TYPE_EDDSA_SHA512_ED25519 = 7
SIGNATURE_TYPE_EDDSA_SHA512_ED25519PH = 8
SIGNATURE_TYPE_REDDSA_SHA512_ED25519 = 11
)
```
#### type Signature
```go
type Signature []byte
```
Signature is the represenation of an I2P Signature.
https://geti2p.net/spec/common-structures#signature
#### func NewSignature
```go
func NewSignature(data []byte, sigType int) (signature *Signature, remainder []byte, err error)
```
NewSignature creates a new *Signature from []byte using ReadSignature. Returns a
pointer to Signature unlike ReadSignature.
#### func ReadSignature
```go
func ReadSignature(data []byte, sigType int) (sig Signature, remainder []byte, err error)
```
ReadSignature returns a Signature from a []byte. The remaining bytes after the
specified length are also returned. Returns an error if there is insufficient
data to read the signature.
Since the signature type and length are inferred from context (the type of key
used), and are not explicitly stated, this function assumes the default
signature type (DSA_SHA1) with a length of 40 bytes.
If a different signature type is expected based on context, this function should
be modified accordingly to handle the correct signature length.
# signature
--
import "github.com/go-i2p/go-i2p/lib/common/signature"
Package signature implements the I2P Signature common data structure
![signature.svg](signature)
Package signature implements the I2P Signature common data structure
## Usage
```go

View File

@ -4,152 +4,132 @@
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="518pt" height="506pt"
viewBox="0.00 0.00 517.69 506.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 506)">
<svg width="497pt" height="367pt"
viewBox="0.00 0.00 497.49 367.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 367)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-506 517.6902,-506 517.6902,0 0,0"/>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-367 497.4896,-367 497.4896,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-498 509.6902,-498 509.6902,-8 8,-8"/>
<text text-anchor="middle" x="258.8451" y="-477.8" font-family="Arial" font-size="18.00" fill="#000000">signature</text>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-359 489.4896,-359 489.4896,-8 8,-8"/>
<text text-anchor="middle" x="248.7448" y="-338.8" font-family="Arial" font-size="18.00" fill="#000000">signature</text>
</g>
<g id="clust5" class="cluster">
<title>cluster_github.com/sirupsen/logrus</title>
<g id="a_clust5"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="package: github.com/sirupsen/logrus">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="199.6305,-339 199.6305,-460 292.9517,-460 292.9517,-339 199.6305,-339"/>
<text text-anchor="middle" x="246.2911" y="-441.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logrus</text>
</a>
</g>
</g>
<g id="clust6" class="cluster">
<g id="clust3" class="cluster">
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust6"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M219.6305,-347C219.6305,-347 272.9517,-347 272.9517,-347 278.9517,-347 284.9517,-353 284.9517,-359 284.9517,-359 284.9517,-413 284.9517,-413 284.9517,-419 278.9517,-425 272.9517,-425 272.9517,-425 219.6305,-425 219.6305,-425 213.6305,-425 207.6305,-419 207.6305,-413 207.6305,-413 207.6305,-359 207.6305,-359 207.6305,-353 213.6305,-347 219.6305,-347"/>
<text text-anchor="middle" x="246.2911" y="-355.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_github.com/samber/oops</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/samber/oops" xlink:title="package: github.com/samber/oops">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="395.998,-16 395.998,-95 470.193,-95 470.193,-16 395.998,-16"/>
<text text-anchor="middle" x="433.0955" y="-76.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">oops</text>
<g id="a_clust3"><a xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M227.0155,-243C227.0155,-243 281.3367,-243 281.3367,-243 287.3367,-243 293.3367,-249 293.3367,-255 293.3367,-255 293.3367,-309 293.3367,-309 293.3367,-315 287.3367,-321 281.3367,-321 281.3367,-321 227.0155,-321 227.0155,-321 221.0155,-321 215.0155,-315 215.0155,-309 215.0155,-309 215.0155,-255 215.0155,-255 215.0155,-249 221.0155,-243 227.0155,-243"/>
<text text-anchor="middle" x="254.1761" y="-251.5" font-family="Arial" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/logger</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="package: github.com/go&#45;i2p/logger">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="364.5008,-103 364.5008,-460 501.6902,-460 501.6902,-103 364.5008,-103"/>
<text text-anchor="middle" x="433.0955" y="-441.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logger</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M393.9861,-111C393.9861,-111 472.2049,-111 472.2049,-111 478.2049,-111 484.2049,-117 484.2049,-123 484.2049,-123 484.2049,-360 484.2049,-360 484.2049,-366 478.2049,-372 472.2049,-372 472.2049,-372 393.9861,-372 393.9861,-372 387.9861,-372 381.9861,-366 381.9861,-360 381.9861,-360 381.9861,-123 381.9861,-123 381.9861,-117 387.9861,-111 393.9861,-111"/>
<text text-anchor="middle" x="433.0955" y="-119.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
<g id="a_clust2"><a xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M391.2708,-60C391.2708,-60 469.4896,-60 469.4896,-60 475.4896,-60 481.4896,-66 481.4896,-72 481.4896,-72 481.4896,-309 481.4896,-309 481.4896,-315 475.4896,-321 469.4896,-321 469.4896,-321 391.2708,-321 391.2708,-321 385.2708,-321 379.2708,-315 379.2708,-309 379.2708,-309 379.2708,-72 379.2708,-72 379.2708,-66 385.2708,-60 391.2708,-60"/>
<text text-anchor="middle" x="430.3802" y="-68.5" font-family="Arial" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature | defined in signature.go:106&#10;at signature.go:107: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at signature.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at signature.go:114: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at signature.go:107: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at signature.go:117: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at signature.go:108: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature]&#10;at signature.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M108.1221,-246C108.1221,-246 27.9593,-246 27.9593,-246 21.9593,-246 15.9593,-240 15.9593,-234 15.9593,-234 15.9593,-222 15.9593,-222 15.9593,-216 21.9593,-210 27.9593,-210 27.9593,-210 108.1221,-210 108.1221,-210 114.1221,-210 120.1221,-216 120.1221,-222 120.1221,-222 120.1221,-234 120.1221,-234 120.1221,-240 114.1221,-246 108.1221,-246"/>
<text text-anchor="middle" x="68.0407" y="-223.8" font-family="Verdana" font-size="14.00" fill="#000000">NewSignature</text>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature | defined in signature.go:106&#10;at signature.go:107: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at signature.go:108: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature]&#10;at signature.go:114: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at signature.go:107: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at signature.go:117: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at signature.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at signature.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M108.1221,-211C108.1221,-211 27.9593,-211 27.9593,-211 21.9593,-211 15.9593,-205 15.9593,-199 15.9593,-199 15.9593,-187 15.9593,-187 15.9593,-181 21.9593,-175 27.9593,-175 27.9593,-175 108.1221,-175 108.1221,-175 114.1221,-175 120.1221,-181 120.1221,-187 120.1221,-187 120.1221,-199 120.1221,-199 120.1221,-205 114.1221,-211 108.1221,-211"/>
<text text-anchor="middle" x="68.0407" y="-188.8" font-family="Verdana" font-size="14.00" fill="#000000">NewSignature</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature | defined in signature.go:66&#10;at signature.go:96: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at signature.go:96: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at signature.go:90: calling [github.com/samber/oops.Errorf]&#10;at signature.go:95: calling [github.com/samber/oops.Errorf]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M287.7113,-189C287.7113,-189 204.8709,-189 204.8709,-189 198.8709,-189 192.8709,-183 192.8709,-177 192.8709,-177 192.8709,-165 192.8709,-165 192.8709,-159 198.8709,-153 204.8709,-153 204.8709,-153 287.7113,-153 287.7113,-153 293.7113,-153 299.7113,-159 299.7113,-165 299.7113,-165 299.7113,-177 299.7113,-177 299.7113,-183 293.7113,-189 287.7113,-189"/>
<text text-anchor="middle" x="246.2911" y="-166.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadSignature</text>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature | defined in signature.go:66&#10;at signature.go:90: calling [github.com/samber/oops.Errorf]&#10;at signature.go:95: calling [github.com/samber/oops.Errorf]&#10;at signature.go:96: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at signature.go:96: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M295.0963,-124C295.0963,-124 212.2559,-124 212.2559,-124 206.2559,-124 200.2559,-118 200.2559,-112 200.2559,-112 200.2559,-100 200.2559,-100 200.2559,-94 206.2559,-88 212.2559,-88 212.2559,-88 295.0963,-88 295.0963,-88 301.0963,-88 307.0963,-94 307.0963,-100 307.0963,-100 307.0963,-112 307.0963,-112 307.0963,-118 301.0963,-124 295.0963,-124"/>
<text text-anchor="middle" x="253.6761" y="-101.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadSignature</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature -->
<g id="edge9" class="edge">
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature</title>
<g id="a_edge9"><a xlink:title="at signature.go:108: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature]">
<path fill="none" stroke="#000000" d="M120.5576,-211.2064C140.2388,-204.9129 162.8027,-197.6975 183.3337,-191.1322"/>
<polygon fill="#000000" stroke="#000000" points="184.457,-194.4477 192.9158,-188.0681 182.3248,-187.7803 184.457,-194.4477"/>
<g id="a_edge4"><a xlink:title="at signature.go:108: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature]">
<path fill="none" stroke="#000000" d="M100.2528,-174.7926C116.7462,-165.73 137.267,-154.8498 156.0814,-146 169.2752,-139.794 183.7031,-133.5789 197.321,-127.9607"/>
<polygon fill="#000000" stroke="#000000" points="198.6596,-131.1947 206.5943,-124.1739 196.0132,-124.7142 198.6596,-131.1947"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="node5" class="node">
<g id="node6" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_node5"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithField | defined in log.go:54">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M461.37,-303C461.37,-303 404.821,-303 404.821,-303 398.821,-303 392.821,-297 392.821,-291 392.821,-291 392.821,-279 392.821,-279 392.821,-273 398.821,-267 404.821,-267 404.821,-267 461.37,-267 461.37,-267 467.37,-267 473.37,-273 473.37,-279 473.37,-279 473.37,-291 473.37,-291 473.37,-297 467.37,-303 461.37,-303"/>
<text text-anchor="middle" x="433.0955" y="-280.8" font-family="Verdana" font-size="14.00" fill="#000000">WithField</text>
<g id="a_node6"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithField | defined in log.go:54">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M458.6547,-313C458.6547,-313 402.1057,-313 402.1057,-313 396.1057,-313 390.1057,-307 390.1057,-301 390.1057,-301 390.1057,-289 390.1057,-289 390.1057,-283 396.1057,-277 402.1057,-277 402.1057,-277 458.6547,-277 458.6547,-277 464.6547,-277 470.6547,-283 470.6547,-289 470.6547,-289 470.6547,-301 470.6547,-301 470.6547,-307 464.6547,-313 458.6547,-313"/>
<text text-anchor="middle" x="430.3802" y="-299.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="430.3802" y="-282.4" font-family="Verdana" font-size="14.00" fill="#000000">WithField</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge2" class="edge">
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge2"><a xlink:title="at signature.go:107: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M120.2622,-232.9298C174.5464,-238.4475 261.8522,-248.4265 336.5008,-262 351.5216,-264.7313 367.71,-268.3254 382.4604,-271.8585"/>
<polygon fill="#8b4513" stroke="#8b4513" points="381.8661,-275.3161 392.4105,-274.2834 383.5236,-268.5151 381.8661,-275.3161"/>
<g id="a_edge1"><a xlink:title="at signature.go:107: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M120.2271,-204.9654C142.6007,-209.9142 169.0645,-215.5281 193.0814,-220 246.6801,-229.9799 262.2256,-222.7606 314.2708,-239 340.6288,-247.2243 368.5487,-260.5281 390.4032,-272.1051"/>
<polygon fill="#8b4513" stroke="#8b4513" points="388.9124,-275.2776 399.3758,-276.9412 392.2336,-269.1156 388.9124,-275.2776"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="node6" class="node">
<g id="node7" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_node6"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithError | defined in log.go:66">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M461.627,-242C461.627,-242 404.564,-242 404.564,-242 398.564,-242 392.564,-236 392.564,-230 392.564,-230 392.564,-218 392.564,-218 392.564,-212 398.564,-206 404.564,-206 404.564,-206 461.627,-206 461.627,-206 467.627,-206 473.627,-212 473.627,-218 473.627,-218 473.627,-230 473.627,-230 473.627,-236 467.627,-242 461.627,-242"/>
<text text-anchor="middle" x="433.0955" y="-219.8" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
<g id="a_node7"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithError | defined in log.go:66">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M458.9117,-130C458.9117,-130 401.8487,-130 401.8487,-130 395.8487,-130 389.8487,-124 389.8487,-118 389.8487,-118 389.8487,-106 389.8487,-106 389.8487,-100 395.8487,-94 401.8487,-94 401.8487,-94 458.9117,-94 458.9117,-94 464.9117,-94 470.9117,-100 470.9117,-106 470.9117,-106 470.9117,-118 470.9117,-118 470.9117,-124 464.9117,-130 458.9117,-130"/>
<text text-anchor="middle" x="430.3802" y="-116.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="430.3802" y="-99.4" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge10" class="edge">
<g id="edge8" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge10"><a xlink:title="at signature.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M120.3442,-227.4269C190.1967,-226.6615 313.143,-225.3144 382.2484,-224.5571"/>
<polygon fill="#8b4513" stroke="#8b4513" points="382.4898,-228.0548 392.4508,-224.4454 382.4131,-221.0552 382.4898,-228.0548"/>
<g id="a_edge8"><a xlink:title="at signature.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M120.341,-181.3084C189.5934,-165.8272 310.9326,-138.7022 379.4763,-123.3794"/>
<polygon fill="#8b4513" stroke="#8b4513" points="380.6053,-126.7135 389.6008,-121.1161 379.0781,-119.8821 380.6053,-126.7135"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="node7" class="node">
<g id="node8" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_node7"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Error | defined in log.go:42">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M448.0955,-181C448.0955,-181 418.0955,-181 418.0955,-181 412.0955,-181 406.0955,-175 406.0955,-169 406.0955,-169 406.0955,-157 406.0955,-157 406.0955,-151 412.0955,-145 418.0955,-145 418.0955,-145 448.0955,-145 448.0955,-145 454.0955,-145 460.0955,-151 460.0955,-157 460.0955,-157 460.0955,-169 460.0955,-169 460.0955,-175 454.0955,-181 448.0955,-181"/>
<text text-anchor="middle" x="433.0955" y="-158.8" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
<g id="a_node8"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Error | defined in log.go:42">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M448.1465,-191C448.1465,-191 412.6139,-191 412.6139,-191 406.6139,-191 400.6139,-185 400.6139,-179 400.6139,-179 400.6139,-167 400.6139,-167 400.6139,-161 406.6139,-155 412.6139,-155 412.6139,-155 448.1465,-155 448.1465,-155 454.1465,-155 460.1465,-161 460.1465,-167 460.1465,-167 460.1465,-179 460.1465,-179 460.1465,-185 454.1465,-191 448.1465,-191"/>
<text text-anchor="middle" x="430.3802" y="-177.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="430.3802" y="-160.4" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge5" class="edge">
<g id="edge9" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge5"><a xlink:title="at signature.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M86.3702,-209.6972C109.1193,-188.4054 150.1838,-154.4553 193.0814,-141 262.5984,-119.1953 348.5806,-137.2279 396.4731,-150.9947"/>
<polygon fill="#8b4513" stroke="#8b4513" points="395.5125,-154.3604 406.0951,-153.8518 397.5051,-147.65 395.5125,-154.3604"/>
<g id="a_edge9"><a xlink:title="at signature.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M120.341,-190.1132C193.3004,-186.0861 324.0721,-178.8679 390.0137,-175.2281"/>
<polygon fill="#8b4513" stroke="#8b4513" points="390.6108,-178.7006 400.4027,-174.6547 390.2249,-171.7112 390.6108,-178.7006"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="node8" class="node">
<g id="node9" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_node8"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithFields | defined in log.go:60">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M464.3146,-364C464.3146,-364 401.8764,-364 401.8764,-364 395.8764,-364 389.8764,-358 389.8764,-352 389.8764,-352 389.8764,-340 389.8764,-340 389.8764,-334 395.8764,-328 401.8764,-328 401.8764,-328 464.3146,-328 464.3146,-328 470.3146,-328 476.3146,-334 476.3146,-340 476.3146,-340 476.3146,-352 476.3146,-352 476.3146,-358 470.3146,-364 464.3146,-364"/>
<text text-anchor="middle" x="433.0955" y="-341.8" font-family="Verdana" font-size="14.00" fill="#000000">WithFields</text>
<g id="a_node9"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithFields | defined in log.go:60">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M461.5993,-252C461.5993,-252 399.1611,-252 399.1611,-252 393.1611,-252 387.1611,-246 387.1611,-240 387.1611,-240 387.1611,-228 387.1611,-228 387.1611,-222 393.1611,-216 399.1611,-216 399.1611,-216 461.5993,-216 461.5993,-216 467.5993,-216 473.5993,-222 473.5993,-228 473.5993,-228 473.5993,-240 473.5993,-240 473.5993,-246 467.5993,-252 461.5993,-252"/>
<text text-anchor="middle" x="430.3802" y="-238.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="430.3802" y="-221.4" font-family="Verdana" font-size="14.00" fill="#000000">WithFields</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge6" class="edge">
<g id="edge5" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge6"><a xlink:title="at signature.go:114: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M120.2399,-239.7175C183.2108,-253.9602 282.754,-276.8577 299.5008,-283 329.9182,-294.1563 335.2023,-302.1698 364.5008,-316 369.9224,-318.5592 375.6171,-321.1702 381.3106,-323.731"/>
<polygon fill="#8b4513" stroke="#8b4513" points="380.2835,-327.105 390.8426,-327.9756 383.1311,-320.7103 380.2835,-327.105"/>
<g id="a_edge5"><a xlink:title="at signature.go:114: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M120.341,-198.918C188.7545,-206.6592 308.0006,-220.1523 376.9625,-227.9556"/>
<polygon fill="#8b4513" stroke="#8b4513" points="376.8415,-231.4642 387.1717,-229.1108 377.6286,-224.5085 376.8415,-231.4642"/>
</a>
</g>
</g>
@ -157,17 +137,37 @@
<g id="node10" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_node10"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debug | defined in logger.go:221">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M265.1131,-417C265.1131,-417 227.4691,-417 227.4691,-417 221.4691,-417 215.4691,-411 215.4691,-405 215.4691,-405 215.4691,-393 215.4691,-393 215.4691,-387 221.4691,-381 227.4691,-381 227.4691,-381 265.1131,-381 265.1131,-381 271.1131,-381 277.1131,-387 277.1131,-393 277.1131,-393 277.1131,-405 277.1131,-405 277.1131,-411 271.1131,-417 265.1131,-417"/>
<text text-anchor="middle" x="246.2911" y="-394.8" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M272.4981,-313C272.4981,-313 234.8541,-313 234.8541,-313 228.8541,-313 222.8541,-307 222.8541,-301 222.8541,-301 222.8541,-289 222.8541,-289 222.8541,-283 228.8541,-277 234.8541,-277 234.8541,-277 272.4981,-277 272.4981,-277 278.4981,-277 284.4981,-283 284.4981,-289 284.4981,-289 284.4981,-301 284.4981,-301 284.4981,-307 278.4981,-313 272.4981,-313"/>
<text text-anchor="middle" x="253.6761" y="-299.2" font-family="Verdana" font-size="14.00" fill="#000000">logrus</text>
<text text-anchor="middle" x="253.6761" y="-282.4" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge7" class="edge">
<g id="edge6" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.NewSignature&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge7"><a xlink:title="at signature.go:107: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at signature.go:117: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M78.981,-246.0114C98.4395,-276.7093 141.869,-339.4772 193.0814,-377 197.0552,-379.9116 201.4709,-382.5174 206.0111,-384.8274"/>
<polygon fill="#8b4513" stroke="#8b4513" points="204.8568,-388.1492 215.4036,-389.1564 207.7869,-381.7919 204.8568,-388.1492"/>
<g id="a_edge6"><a xlink:title="at signature.go:107: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at signature.go:117: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M92.9329,-211.2683C117.4985,-228.7221 156.5722,-254.9699 193.0814,-273 199.419,-276.1298 206.3176,-279.0544 213.1146,-281.6844"/>
<polygon fill="#8b4513" stroke="#8b4513" points="212.33,-285.1261 222.9231,-285.3166 214.7609,-278.5617 212.33,-285.1261"/>
</a>
</g>
</g>
<!-- github.com/samber/oops.Errorf -->
<g id="node3" class="node">
<title>github.com/samber/oops.Errorf</title>
<g id="a_node3"><a xlink:title="github.com/samber/oops.Errorf | defined in oops.go:34">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M447.5755,-52C447.5755,-52 413.1849,-52 413.1849,-52 407.1849,-52 401.1849,-46 401.1849,-40 401.1849,-40 401.1849,-28 401.1849,-28 401.1849,-22 407.1849,-16 413.1849,-16 413.1849,-16 447.5755,-16 447.5755,-16 453.5755,-16 459.5755,-22 459.5755,-28 459.5755,-28 459.5755,-40 459.5755,-40 459.5755,-46 453.5755,-52 447.5755,-52"/>
<text text-anchor="middle" x="430.3802" y="-38.2" font-family="Verdana" font-size="14.00" fill="#000000">oops</text>
<text text-anchor="middle" x="430.3802" y="-21.4" font-family="Verdana" font-size="14.00" fill="#000000">Errorf</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge2"><a xlink:title="at signature.go:90: calling [github.com/samber/oops.Errorf]&#10;at signature.go:95: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M298.266,-87.8314C327.0751,-76.0928 364.1891,-60.9703 391.7412,-49.7439"/>
<polygon fill="#8b4513" stroke="#8b4513" points="393.1185,-52.9621 401.0586,-45.9474 390.4771,-46.4796 393.1185,-52.9621"/>
</a>
</g>
</g>
@ -175,62 +175,45 @@
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge3"><a xlink:title="at signature.go:96: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M299.5717,-186.1167C325.6573,-193.5177 356.8978,-202.3812 382.6,-209.6735"/>
<polygon fill="#8b4513" stroke="#8b4513" points="381.942,-213.1249 392.5177,-212.4873 383.8527,-206.3906 381.942,-213.1249"/>
<path fill="none" stroke="#8b4513" d="M307.1727,-107.8165C330.1637,-108.5971 356.9049,-109.5051 379.5878,-110.2753"/>
<polygon fill="#8b4513" stroke="#8b4513" points="379.583,-113.7771 389.696,-110.6186 379.8206,-106.7811 379.583,-113.7771"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge4" class="edge">
<g id="edge7" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge4"><a xlink:title="at signature.go:96: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M299.5717,-168.7182C330.3627,-167.3996 368.336,-165.7734 395.9054,-164.5927"/>
<polygon fill="#8b4513" stroke="#8b4513" points="396.0845,-168.0883 405.9255,-164.1636 395.7849,-161.0947 396.0845,-168.0883"/>
</a>
</g>
</g>
<!-- github.com/samber/oops.Errorf -->
<g id="node9" class="node">
<title>github.com/samber/oops.Errorf</title>
<g id="a_node9"><a xlink:title="github.com/samber/oops.Errorf | defined in oops.go:34">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M450.2908,-60C450.2908,-60 415.9002,-60 415.9002,-60 409.9002,-60 403.9002,-54 403.9002,-48 403.9002,-48 403.9002,-36 403.9002,-36 403.9002,-30 409.9002,-24 415.9002,-24 415.9002,-24 450.2908,-24 450.2908,-24 456.2908,-24 462.2908,-30 462.2908,-36 462.2908,-36 462.2908,-48 462.2908,-48 462.2908,-54 456.2908,-60 450.2908,-60"/>
<text text-anchor="middle" x="433.0955" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">Errorf</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge8" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.ReadSignature&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge8"><a xlink:title="at signature.go:90: calling [github.com/samber/oops.Errorf]&#10;at signature.go:95: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M272.6594,-152.7911C305.6195,-130.0301 362.1179,-91.0144 398.5171,-65.8785"/>
<polygon fill="#8b4513" stroke="#8b4513" points="400.6215,-68.6788 406.8613,-60.1163 396.6438,-62.9187 400.6215,-68.6788"/>
<g id="a_edge7"><a xlink:title="at signature.go:96: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M301.4948,-124.1312C329.5,-134.7498 364.442,-147.9986 390.8762,-158.0215"/>
<polygon fill="#8b4513" stroke="#8b4513" points="389.9672,-161.4199 400.5586,-161.6927 392.449,-154.8746 389.9672,-161.4199"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.init -->
<g id="node3" class="node">
<g id="node4" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.init</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.init | defined in .:0&#10;at signature.go:10: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M261.2911,-331C261.2911,-331 231.2911,-331 231.2911,-331 225.2911,-331 219.2911,-325 219.2911,-319 219.2911,-319 219.2911,-307 219.2911,-307 219.2911,-301 225.2911,-295 231.2911,-295 231.2911,-295 261.2911,-295 261.2911,-295 267.2911,-295 273.2911,-301 273.2911,-307 273.2911,-307 273.2911,-319 273.2911,-319 273.2911,-325 267.2911,-331 261.2911,-331"/>
<text text-anchor="middle" x="246.2911" y="-308.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.init | defined in .:0&#10;at signature.go:10: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M83.0407,-56C83.0407,-56 53.0407,-56 53.0407,-56 47.0407,-56 41.0407,-50 41.0407,-44 41.0407,-44 41.0407,-32 41.0407,-32 41.0407,-26 47.0407,-20 53.0407,-20 53.0407,-20 83.0407,-20 83.0407,-20 89.0407,-20 95.0407,-26 95.0407,-32 95.0407,-32 95.0407,-44 95.0407,-44 95.0407,-50 89.0407,-56 83.0407,-56"/>
<text text-anchor="middle" x="68.0407" y="-33.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="node4" class="node">
<g id="node5" class="node">
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M481.785,-425C481.785,-425 384.406,-425 384.406,-425 378.406,-425 372.406,-419 372.406,-413 372.406,-413 372.406,-401 372.406,-401 372.406,-395 378.406,-389 384.406,-389 384.406,-389 481.785,-389 481.785,-389 487.785,-389 493.785,-395 493.785,-401 493.785,-401 493.785,-413 493.785,-413 493.785,-419 487.785,-425 481.785,-425"/>
<text text-anchor="middle" x="433.0955" y="-402.8" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
<g id="a_node5"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M302.3656,-56C302.3656,-56 204.9866,-56 204.9866,-56 198.9866,-56 192.9866,-50 192.9866,-44 192.9866,-44 192.9866,-32 192.9866,-32 192.9866,-26 198.9866,-20 204.9866,-20 204.9866,-20 302.3656,-20 302.3656,-20 308.3656,-20 314.3656,-26 314.3656,-32 314.3656,-32 314.3656,-44 314.3656,-44 314.3656,-50 308.3656,-56 302.3656,-56"/>
<text text-anchor="middle" x="253.6761" y="-42.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="253.6761" y="-25.4" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge1" class="edge">
<g id="edge10" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/signature.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge1"><a xlink:title="at signature.go:10: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M273.4527,-327.072C281.836,-331.4744 291.0772,-336.3878 299.5008,-341 328.6578,-356.9643 334.6962,-363.2802 364.5008,-378 369.0926,-380.2678 373.9055,-382.528 378.7614,-384.7288"/>
<polygon fill="#8b4513" stroke="#8b4513" points="377.5451,-388.0181 388.1053,-388.874 380.3837,-381.6195 377.5451,-388.0181"/>
<g id="a_edge10"><a xlink:title="at signature.go:10: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M95.4318,-38C118.3566,-38 152.1155,-38 182.5704,-38"/>
<polygon fill="#8b4513" stroke="#8b4513" points="182.7516,-41.5001 192.7515,-38 182.7515,-34.5001 182.7516,-41.5001"/>
</a>
</g>
</g>

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -2,118 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/config"
## Usage
```go
const GOI2P_BASE_DIR = ".go-i2p"
```
```go
var (
CfgFile string
)
```
```go
var DefaultBootstrapConfig = BootstrapConfig{
LowPeerThreshold: 10,
ReseedServers: []*ReseedConfig{},
}
```
default configuration for network bootstrap
```go
var DefaultNetDbConfig = NetDbConfig{
Path: filepath.Join(defaultConfig(), "netDb"),
}
```
default settings for netdb
```go
var RouterConfigProperties = DefaultRouterConfig()
```
#### func InitConfig
```go
func InitConfig()
```
#### func UpdateRouterConfig
```go
func UpdateRouterConfig()
```
#### type BootstrapConfig
```go
type BootstrapConfig struct {
// if we have less than this many peers we should reseed
LowPeerThreshold int
// reseed servers
ReseedServers []*ReseedConfig
}
```
#### type NetDbConfig
```go
type NetDbConfig struct {
// path to network database directory
Path string
}
```
local network database configuration
#### type ReseedConfig
```go
type ReseedConfig struct {
// url of reseed server
Url string
// fingerprint of reseed su3 signing key
SU3Fingerprint string
}
```
configuration for 1 reseed server
#### type RouterConfig
```go
type RouterConfig struct {
// the path to the base config directory where per-system defaults are stored
BaseDir string
// the path to the working config directory where files are changed
WorkingDir string
// netdb configuration
NetDb *NetDbConfig
// configuration for bootstrapping into the network
Bootstrap *BootstrapConfig
}
```
router.config options
#### func DefaultRouterConfig
```go
func DefaultRouterConfig() *RouterConfig
```
# config
--
import "github.com/go-i2p/go-i2p/lib/config"
![config.svg](config)
## Usage
```go

View File

@ -4,349 +4,75 @@
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="673pt" height="1038pt"
viewBox="0.00 0.00 672.82 1038.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 1038)">
<svg width="673pt" height="840pt"
viewBox="0.00 0.00 672.82 840.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 840)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-1038 672.8192,-1038 672.8192,0 0,0"/>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-840 672.8192,-840 672.8192,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-1030 664.8192,-1030 664.8192,-8 8,-8"/>
<text text-anchor="middle" x="336.4096" y="-1009.8" font-family="Arial" font-size="18.00" fill="#000000">config</text>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-832 664.8192,-832 664.8192,-8 8,-8"/>
<text text-anchor="middle" x="336.4096" y="-811.8" font-family="Arial" font-size="18.00" fill="#000000">config</text>
</g>
<g id="clust7" class="cluster">
<title>cluster_gopkg.in/yaml.v3</title>
<g id="a_clust7"><a xlink:href="/?f=gopkg.in/yaml.v3" xlink:title="package: gopkg.in/yaml.v3">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="199.1031,-804 199.1031,-883 284.9727,-883 284.9727,-804 199.1031,-804"/>
<text text-anchor="middle" x="242.0379" y="-864.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">yaml</text>
</a>
</g>
</g>
<g id="clust6" class="cluster">
<title>cluster_github.com/spf13/viper</title>
<g id="a_clust6"><a xlink:href="/?f=github.com/spf13/viper" xlink:title="package: github.com/spf13/viper">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="392.1291,-364 392.1291,-992 522.3311,-992 522.3311,-364 392.1291,-364"/>
<text text-anchor="middle" x="457.2301" y="-973.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">viper</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_github.com/sirupsen/logrus</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="package: github.com/sirupsen/logrus">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="193.047,-402 193.047,-584 291.0288,-584 291.0288,-402 193.047,-402"/>
<text text-anchor="middle" x="242.0379" y="-565.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logrus</text>
</a>
</g>
</g>
<g id="clust5" class="cluster">
<g id="clust3" class="cluster">
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust5"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M213.047,-410C213.047,-410 271.0288,-410 271.0288,-410 277.0288,-410 283.0288,-416 283.0288,-422 283.0288,-422 283.0288,-537 283.0288,-537 283.0288,-543 277.0288,-549 271.0288,-549 271.0288,-549 213.047,-549 213.047,-549 207.047,-549 201.047,-543 201.047,-537 201.047,-537 201.047,-422 201.047,-422 201.047,-416 207.047,-410 213.047,-410"/>
<text text-anchor="middle" x="242.0379" y="-418.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
<g id="a_clust3"><a xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M213.047,-602C213.047,-602 271.0288,-602 271.0288,-602 277.0288,-602 283.0288,-608 283.0288,-614 283.0288,-614 283.0288,-729 283.0288,-729 283.0288,-735 277.0288,-741 271.0288,-741 271.0288,-741 213.047,-741 213.047,-741 207.047,-741 201.047,-735 201.047,-729 201.047,-729 201.047,-614 201.047,-614 201.047,-608 207.047,-602 213.047,-602"/>
<text text-anchor="middle" x="242.0379" y="-610.5" font-family="Arial" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/logger</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="package: github.com/go&#45;i2p/logger">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="388.6354,-191 388.6354,-356 525.8248,-356 525.8248,-191 388.6354,-191"/>
<text text-anchor="middle" x="457.2301" y="-337.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logger</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M431.3549,-243C431.3549,-243 484.1053,-243 484.1053,-243 490.1053,-243 496.1053,-249 496.1053,-255 496.1053,-255 496.1053,-309 496.1053,-309 496.1053,-315 490.1053,-321 484.1053,-321 484.1053,-321 431.3549,-321 431.3549,-321 425.3549,-321 419.3549,-315 419.3549,-309 419.3549,-309 419.3549,-255 419.3549,-255 419.3549,-249 425.3549,-243 431.3549,-243"/>
<text text-anchor="middle" x="457.7301" y="-251.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
<g id="a_clust2"><a xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M430.3472,-182C430.3472,-182 484.113,-182 484.113,-182 490.113,-182 496.113,-188 496.113,-194 496.113,-194 496.113,-248 496.113,-248 496.113,-254 490.113,-260 484.113,-260 484.113,-260 430.3472,-260 430.3472,-260 424.3472,-260 418.3472,-254 418.3472,-248 418.3472,-248 418.3472,-194 418.3472,-194 418.3472,-188 424.3472,-182 430.3472,-182"/>
<text text-anchor="middle" x="457.2301" y="-190.5" font-family="Arial" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig -->
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig | defined in config.go:19&#10;at config.go:76: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig]&#10;at config.go:41: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:42: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:43: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:44: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:31: calling [(*github.com/sirupsen/logrus.Logger).Fatalf]&#10;at config.go:49: calling [(*github.com/sirupsen/logrus.Logger).Fatalf]&#10;at config.go:54: calling [(*github.com/sirupsen/logrus.Logger).Fatalf]&#10;at config.go:72: calling [github.com/spf13/viper.ConfigFileUsed]&#10;at config.go:25: calling [github.com/spf13/viper.SetConfigFile]&#10;at config.go:67: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults]&#10;at config.go:69: calling [github.com/spf13/viper.ReadInConfig]&#10;at config.go:61: calling [github.com/spf13/viper.AddConfigPath]&#10;at config.go:57: calling [(*github.com/sirupsen/logrus.Logger).Debugf]&#10;at config.go:72: calling [(*github.com/sirupsen/logrus.Logger).Debugf]&#10;at config.go:63: calling [github.com/spf13/viper.SetConfigType]&#10;at config.go:47: calling [gopkg.in/yaml.v3.Marshal]&#10;at config.go:70: calling [(*github.com/go&#45;i2p/logger.Logger).Warnf]&#10;at config.go:62: calling [github.com/spf13/viper.SetConfigName]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M86.4951,-611C86.4951,-611 27.8345,-611 27.8345,-611 21.8345,-611 15.8345,-605 15.8345,-599 15.8345,-599 15.8345,-587 15.8345,-587 15.8345,-581 21.8345,-575 27.8345,-575 27.8345,-575 86.4951,-575 86.4951,-575 92.4951,-575 98.4951,-581 98.4951,-587 98.4951,-587 98.4951,-599 98.4951,-599 98.4951,-605 92.4951,-611 86.4951,-611"/>
<text text-anchor="middle" x="57.1648" y="-588.8" font-family="Verdana" font-size="14.00" fill="#000000">InitConfig</text>
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig | defined in router.go:32&#10;at router.go:33: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.home]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M495.9892,-672C495.9892,-672 418.471,-672 418.471,-672 412.471,-672 406.471,-666 406.471,-660 406.471,-660 406.471,-648 406.471,-648 406.471,-642 412.471,-636 418.471,-636 418.471,-636 495.9892,-636 495.9892,-636 501.9892,-636 507.9892,-642 507.9892,-648 507.9892,-648 507.9892,-660 507.9892,-660 507.9892,-666 501.9892,-672 495.9892,-672"/>
<text text-anchor="middle" x="457.2301" y="-649.8" font-family="Verdana" font-size="14.00" fill="#000000">defaultConfig</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults -->
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.home -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults | defined in config.go:79&#10;at config.go:81: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:82: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:85: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:88: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:89: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:81: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:82: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M273.5099,-313C273.5099,-313 210.5659,-313 210.5659,-313 204.5659,-313 198.5659,-307 198.5659,-301 198.5659,-301 198.5659,-289 198.5659,-289 198.5659,-283 204.5659,-277 210.5659,-277 210.5659,-277 273.5099,-277 273.5099,-277 279.5099,-277 285.5099,-283 285.5099,-289 285.5099,-289 285.5099,-301 285.5099,-301 285.5099,-307 279.5099,-313 273.5099,-313"/>
<text text-anchor="middle" x="242.0379" y="-290.8" font-family="Verdana" font-size="14.00" fill="#000000">setDefaults</text>
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.home</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/config.home | defined in router.go:20">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M644.8719,-709C644.8719,-709 613.6613,-709 613.6613,-709 607.6613,-709 601.6613,-703 601.6613,-697 601.6613,-697 601.6613,-685 601.6613,-685 601.6613,-679 607.6613,-673 613.6613,-673 613.6613,-673 644.8719,-673 644.8719,-673 650.8719,-673 656.8719,-679 656.8719,-685 656.8719,-685 656.8719,-697 656.8719,-697 656.8719,-703 650.8719,-709 644.8719,-709"/>
<text text-anchor="middle" x="629.2666" y="-686.8" font-family="Verdana" font-size="14.00" fill="#000000">home</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults -->
<g id="edge12" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults</title>
<g id="a_edge12"><a xlink:title="at config.go:67: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults]">
<path fill="none" stroke="#000000" d="M60.2837,-574.979C69.7884,-521.9654 99.8539,-368.0065 134.3296,-332 148.5938,-317.1024 169.1175,-308.2023 188.4309,-302.8856"/>
<polygon fill="#000000" stroke="#000000" points="189.5166,-306.2224 198.3806,-300.4191 187.8322,-299.4281 189.5166,-306.2224"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig -->
<g id="node3" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig | defined in router.go:44">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M516.6979,-174C516.6979,-174 397.7623,-174 397.7623,-174 391.7623,-174 385.7623,-168 385.7623,-162 385.7623,-162 385.7623,-150 385.7623,-150 385.7623,-144 391.7623,-138 397.7623,-138 397.7623,-138 516.6979,-138 516.6979,-138 522.6979,-138 528.6979,-144 528.6979,-150 528.6979,-150 528.6979,-162 528.6979,-162 528.6979,-168 522.6979,-174 516.6979,-174"/>
<text text-anchor="middle" x="457.2301" y="-151.8" font-family="Verdana" font-size="14.00" fill="#000000">DefaultRouterConfig</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig -->
<g id="edge5" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig</title>
<g id="a_edge5"><a xlink:title="at config.go:41: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:42: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:43: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:44: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]">
<path fill="none" stroke="#000000" d="M60.8993,-574.9681C74.2062,-512.4871 121.1951,-306.7929 171.3296,-265 230.3689,-215.7839 314.0043,-187.3812 375.5705,-171.9867"/>
<polygon fill="#000000" stroke="#000000" points="376.7513,-175.3016 385.6395,-169.5353 375.0954,-168.5002 376.7513,-175.3016"/>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.home -->
<g id="edge7" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.home</title>
<g id="a_edge7"><a xlink:title="at router.go:33: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.home]">
<path fill="none" stroke="#000000" d="M508.3809,-665.001C535.0739,-670.7419 567.1591,-677.6425 591.5644,-682.8914"/>
<polygon fill="#000000" stroke="#000000" points="591.0031,-686.3506 601.5155,-685.0315 592.475,-679.5071 591.0031,-686.3506"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig -->
<g id="node4" class="node">
<g id="node3" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig</title>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig | defined in config.go:92&#10;at config.go:94: calling [github.com/spf13/viper.GetString]&#10;at config.go:95: calling [github.com/spf13/viper.GetString]&#10;at config.go:99: calling [github.com/spf13/viper.GetString]&#10;at config.go:110: calling [github.com/spf13/viper.GetInt]&#10;at config.go:105: calling [(*github.com/go&#45;i2p/logger.Logger).Warnf]&#10;at config.go:104: calling [github.com/spf13/viper.UnmarshalKey]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M300.9551,-655C300.9551,-655 183.1207,-655 183.1207,-655 177.1207,-655 171.1207,-649 171.1207,-643 171.1207,-643 171.1207,-631 171.1207,-631 171.1207,-625 177.1207,-619 183.1207,-619 183.1207,-619 300.9551,-619 300.9551,-619 306.9551,-619 312.9551,-625 312.9551,-631 312.9551,-631 312.9551,-643 312.9551,-643 312.9551,-649 306.9551,-655 300.9551,-655"/>
<text text-anchor="middle" x="242.0379" y="-632.8" font-family="Verdana" font-size="14.00" fill="#000000">UpdateRouterConfig</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig -->
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig</title>
<g id="a_edge2"><a xlink:title="at config.go:76: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig]">
<path fill="none" stroke="#000000" d="M98.6539,-602.8745C117.2101,-607.2909 139.7498,-612.6553 161.4101,-617.8105"/>
<polygon fill="#000000" stroke="#000000" points="160.7441,-621.2497 171.2828,-620.1602 162.3649,-614.4399 160.7441,-621.2497"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Warnf -->
<g id="node10" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Warnf</title>
<g id="a_node10"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Warnf | defined in log.go:36">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M474.981,-313C474.981,-313 439.4792,-313 439.4792,-313 433.4792,-313 427.4792,-307 427.4792,-301 427.4792,-301 427.4792,-289 427.4792,-289 427.4792,-283 433.4792,-277 439.4792,-277 439.4792,-277 474.981,-277 474.981,-277 480.981,-277 486.981,-283 486.981,-289 486.981,-289 486.981,-301 486.981,-301 486.981,-307 480.981,-313 474.981,-313"/>
<text text-anchor="middle" x="457.2301" y="-290.8" font-family="Verdana" font-size="14.00" fill="#000000">Warnf</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warnf -->
<g id="edge21" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warnf</title>
<g id="a_edge21"><a xlink:title="at config.go:70: calling [(*github.com/go&#45;i2p/logger.Logger).Warnf]">
<path fill="none" stroke="#8b4513" d="M60.8787,-574.9279C70.5959,-532.7388 101.0424,-427.7993 171.3296,-381 212.1617,-353.8128 348.9123,-319.8137 417.417,-303.939"/>
<polygon fill="#8b4513" stroke="#8b4513" points="418.4446,-307.2941 427.4052,-301.6409 416.875,-300.4723 418.4446,-307.2941"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Fatalf -->
<g id="node11" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Fatalf</title>
<g id="a_node11"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Fatalf | defined in logger.go:189">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M258.1926,-480C258.1926,-480 225.8832,-480 225.8832,-480 219.8832,-480 213.8832,-474 213.8832,-468 213.8832,-468 213.8832,-456 213.8832,-456 213.8832,-450 219.8832,-444 225.8832,-444 225.8832,-444 258.1926,-444 258.1926,-444 264.1926,-444 270.1926,-450 270.1926,-456 270.1926,-456 270.1926,-468 270.1926,-468 270.1926,-474 264.1926,-480 258.1926,-480"/>
<text text-anchor="middle" x="242.0379" y="-457.8" font-family="Verdana" font-size="14.00" fill="#000000">Fatalf</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;(*github.com/sirupsen/logrus.Logger).Fatalf -->
<g id="edge6" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;(*github.com/sirupsen/logrus.Logger).Fatalf</title>
<g id="a_edge6"><a xlink:title="at config.go:31: calling [(*github.com/sirupsen/logrus.Logger).Fatalf]&#10;at config.go:49: calling [(*github.com/sirupsen/logrus.Logger).Fatalf]&#10;at config.go:54: calling [(*github.com/sirupsen/logrus.Logger).Fatalf]">
<path fill="none" stroke="#8b4513" d="M74.3623,-574.8621C95.5878,-553.2435 133.5286,-517.0307 171.3296,-493 181.5656,-486.4928 193.4002,-480.7125 204.4242,-475.9583"/>
<polygon fill="#8b4513" stroke="#8b4513" points="205.9466,-479.116 213.8427,-472.052 203.2648,-472.6501 205.9466,-479.116"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Debugf -->
<g id="node12" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debugf</title>
<g id="a_node12"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debugf | defined in logger.go:163">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M263.0197,-541C263.0197,-541 221.0561,-541 221.0561,-541 215.0561,-541 209.0561,-535 209.0561,-529 209.0561,-529 209.0561,-517 209.0561,-517 209.0561,-511 215.0561,-505 221.0561,-505 221.0561,-505 263.0197,-505 263.0197,-505 269.0197,-505 275.0197,-511 275.0197,-517 275.0197,-517 275.0197,-529 275.0197,-529 275.0197,-535 269.0197,-541 263.0197,-541"/>
<text text-anchor="middle" x="242.0379" y="-518.8" font-family="Verdana" font-size="14.00" fill="#000000">Debugf</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debugf -->
<g id="edge15" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debugf</title>
<g id="a_edge15"><a xlink:title="at config.go:57: calling [(*github.com/sirupsen/logrus.Logger).Debugf]&#10;at config.go:72: calling [(*github.com/sirupsen/logrus.Logger).Debugf]">
<path fill="none" stroke="#8b4513" d="M97.4728,-574.9339C119.1598,-565.4988 146.4853,-554.0639 171.3296,-545 180.199,-541.7642 189.7985,-538.5744 198.9793,-535.6706"/>
<polygon fill="#8b4513" stroke="#8b4513" points="200.2116,-538.9528 208.7228,-532.6432 198.1346,-532.2681 200.2116,-538.9528"/>
</a>
</g>
</g>
<!-- github.com/spf13/viper.SetConfigFile -->
<g id="node13" class="node">
<title>github.com/spf13/viper.SetConfigFile</title>
<g id="a_node13"><a xlink:title="github.com/spf13/viper.SetConfigFile | defined in viper.go:509">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M496.2851,-774C496.2851,-774 418.1751,-774 418.1751,-774 412.1751,-774 406.1751,-768 406.1751,-762 406.1751,-762 406.1751,-750 406.1751,-750 406.1751,-744 412.1751,-738 418.1751,-738 418.1751,-738 496.2851,-738 496.2851,-738 502.2851,-738 508.2851,-744 508.2851,-750 508.2851,-750 508.2851,-762 508.2851,-762 508.2851,-768 502.2851,-774 496.2851,-774"/>
<text text-anchor="middle" x="457.2301" y="-751.8" font-family="Verdana" font-size="14.00" fill="#000000">SetConfigFile</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.SetConfigFile -->
<g id="edge10" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.SetConfigFile</title>
<g id="a_edge10"><a xlink:title="at config.go:25: calling [github.com/spf13/viper.SetConfigFile]">
<path fill="none" stroke="#8b4513" d="M80.4933,-611.1796C102.7855,-627.8412 137.8571,-652.2451 171.3296,-668 191.9452,-677.7034 318.6528,-715.458 396.307,-738.2442"/>
<polygon fill="#8b4513" stroke="#8b4513" points="395.4087,-741.628 405.9895,-741.0823 397.3778,-734.9107 395.4087,-741.628"/>
</a>
</g>
</g>
<!-- github.com/spf13/viper.ReadInConfig -->
<g id="node15" class="node">
<title>github.com/spf13/viper.ReadInConfig</title>
<g id="a_node15"><a xlink:title="github.com/spf13/viper.ReadInConfig | defined in viper.go:1632">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M497.0448,-835C497.0448,-835 417.4154,-835 417.4154,-835 411.4154,-835 405.4154,-829 405.4154,-823 405.4154,-823 405.4154,-811 405.4154,-811 405.4154,-805 411.4154,-799 417.4154,-799 417.4154,-799 497.0448,-799 497.0448,-799 503.0448,-799 509.0448,-805 509.0448,-811 509.0448,-811 509.0448,-823 509.0448,-823 509.0448,-829 503.0448,-835 497.0448,-835"/>
<text text-anchor="middle" x="457.2301" y="-812.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadInConfig</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.ReadInConfig -->
<g id="edge13" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.ReadInConfig</title>
<g id="a_edge13"><a xlink:title="at config.go:69: calling [github.com/spf13/viper.ReadInConfig]">
<path fill="none" stroke="#8b4513" d="M72.3319,-611.0539C92.6366,-634.1324 130.8196,-673.863 171.3296,-697 243.3839,-738.1534 278.3696,-709.6821 349.7462,-752 368.9415,-763.3805 367.1334,-774.6899 385.7462,-787 389.6788,-789.6009 393.8736,-792.0518 398.1854,-794.3449"/>
<polygon fill="#8b4513" stroke="#8b4513" points="396.6437,-797.4872 407.1533,-798.828 399.7737,-791.2259 396.6437,-797.4872"/>
</a>
</g>
</g>
<!-- github.com/spf13/viper.AddConfigPath -->
<g id="node16" class="node">
<title>github.com/spf13/viper.AddConfigPath</title>
<g id="a_node16"><a xlink:title="github.com/spf13/viper.AddConfigPath | defined in viper.go:574">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M501.1124,-896C501.1124,-896 413.3478,-896 413.3478,-896 407.3478,-896 401.3478,-890 401.3478,-884 401.3478,-884 401.3478,-872 401.3478,-872 401.3478,-866 407.3478,-860 413.3478,-860 413.3478,-860 501.1124,-860 501.1124,-860 507.1124,-860 513.1124,-866 513.1124,-872 513.1124,-872 513.1124,-884 513.1124,-884 513.1124,-890 507.1124,-896 501.1124,-896"/>
<text text-anchor="middle" x="457.2301" y="-873.8" font-family="Verdana" font-size="14.00" fill="#000000">AddConfigPath</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.AddConfigPath -->
<g id="edge14" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.AddConfigPath</title>
<g id="a_edge14"><a xlink:title="at config.go:61: calling [github.com/spf13/viper.AddConfigPath]">
<path fill="none" stroke="#8b4513" d="M68.5364,-611.1945C86.8449,-639.0334 125.484,-692.1087 171.3296,-722 241.0618,-767.4654 286.054,-725.3998 349.7462,-779 376.2114,-801.2719 360.2877,-824.584 385.7462,-848 388.3001,-850.349 391.0646,-852.5291 393.9714,-854.5506"/>
<polygon fill="#8b4513" stroke="#8b4513" points="392.1414,-857.5341 402.4833,-859.8358 395.834,-851.5873 392.1414,-857.5341"/>
</a>
</g>
</g>
<!-- github.com/spf13/viper.SetConfigName -->
<g id="node17" class="node">
<title>github.com/spf13/viper.SetConfigName</title>
<g id="a_node17"><a xlink:title="github.com/spf13/viper.SetConfigName | defined in viper.go:2174">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M502.4323,-957C502.4323,-957 412.0279,-957 412.0279,-957 406.0279,-957 400.0279,-951 400.0279,-945 400.0279,-945 400.0279,-933 400.0279,-933 400.0279,-927 406.0279,-921 412.0279,-921 412.0279,-921 502.4323,-921 502.4323,-921 508.4323,-921 514.4323,-927 514.4323,-933 514.4323,-933 514.4323,-945 514.4323,-945 514.4323,-951 508.4323,-957 502.4323,-957"/>
<text text-anchor="middle" x="457.2301" y="-934.8" font-family="Verdana" font-size="14.00" fill="#000000">SetConfigName</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.SetConfigName -->
<g id="edge25" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.SetConfigName</title>
<g id="a_edge25"><a xlink:title="at config.go:62: calling [github.com/spf13/viper.SetConfigName]">
<path fill="none" stroke="#8b4513" d="M70.0672,-611.1574C85.2269,-632.3895 111.2451,-668.5125 134.3296,-699 150.3779,-720.1948 149.8188,-730.3779 171.3296,-746 225.514,-785.3513 260.2861,-756.3777 312.7462,-798 359.0016,-834.6995 340.3279,-871.2694 385.7462,-909 388.6611,-911.4215 391.7996,-913.6733 395.0771,-915.7634"/>
<polygon fill="#8b4513" stroke="#8b4513" points="393.6092,-918.9572 404.0199,-920.9237 397.1078,-912.8942 393.6092,-918.9572"/>
</a>
</g>
</g>
<!-- github.com/spf13/viper.SetConfigType -->
<g id="node18" class="node">
<title>github.com/spf13/viper.SetConfigType</title>
<g id="a_node18"><a xlink:title="github.com/spf13/viper.SetConfigType | defined in viper.go:2185">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M499.7739,-469C499.7739,-469 414.6863,-469 414.6863,-469 408.6863,-469 402.6863,-463 402.6863,-457 402.6863,-457 402.6863,-445 402.6863,-445 402.6863,-439 408.6863,-433 414.6863,-433 414.6863,-433 499.7739,-433 499.7739,-433 505.7739,-433 511.7739,-439 511.7739,-445 511.7739,-445 511.7739,-457 511.7739,-457 511.7739,-463 505.7739,-469 499.7739,-469"/>
<text text-anchor="middle" x="457.2301" y="-446.8" font-family="Verdana" font-size="14.00" fill="#000000">SetConfigType</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.SetConfigType -->
<g id="edge19" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.SetConfigType</title>
<g id="a_edge19"><a xlink:title="at config.go:63: calling [github.com/spf13/viper.SetConfigType]">
<path fill="none" stroke="#8b4513" d="M61.6599,-574.9369C72.5967,-535.3689 104.7238,-441.581 171.3296,-404 226.0692,-373.1142 250.6699,-394.1573 312.7462,-404 343.8381,-408.9299 377.3414,-419.4778 404.2506,-429.3342"/>
<polygon fill="#8b4513" stroke="#8b4513" points="403.257,-432.6993 413.8495,-432.9225 405.7081,-426.1424 403.257,-432.6993"/>
</a>
</g>
</g>
<!-- github.com/spf13/viper.ConfigFileUsed -->
<g id="node22" class="node">
<title>github.com/spf13/viper.ConfigFileUsed</title>
<g id="a_node22"><a xlink:title="github.com/spf13/viper.ConfigFileUsed | defined in viper.go:569">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M502.1629,-530C502.1629,-530 412.2973,-530 412.2973,-530 406.2973,-530 400.2973,-524 400.2973,-518 400.2973,-518 400.2973,-506 400.2973,-506 400.2973,-500 406.2973,-494 412.2973,-494 412.2973,-494 502.1629,-494 502.1629,-494 508.1629,-494 514.1629,-500 514.1629,-506 514.1629,-506 514.1629,-518 514.1629,-518 514.1629,-524 508.1629,-530 502.1629,-530"/>
<text text-anchor="middle" x="457.2301" y="-507.8" font-family="Verdana" font-size="14.00" fill="#000000">ConfigFileUsed</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.ConfigFileUsed -->
<g id="edge8" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.ConfigFileUsed</title>
<g id="a_edge8"><a xlink:title="at config.go:72: calling [github.com/spf13/viper.ConfigFileUsed]">
<path fill="none" stroke="#8b4513" d="M98.6619,-588.6615C149.5003,-582.927 238.0781,-571.5743 312.7462,-555 339.4743,-549.0671 368.4853,-540.8025 393.4501,-533.1026"/>
<polygon fill="#8b4513" stroke="#8b4513" points="394.6589,-536.3919 403.1631,-530.0729 392.5745,-529.7094 394.6589,-536.3919"/>
</a>
</g>
</g>
<!-- gopkg.in/yaml.v3.Marshal -->
<g id="node23" class="node">
<title>gopkg.in/yaml.v3.Marshal</title>
<g id="a_node23"><a xlink:title="gopkg.in/yaml.v3.Marshal | defined in yaml.go:218">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M264.9076,-848C264.9076,-848 219.1682,-848 219.1682,-848 213.1682,-848 207.1682,-842 207.1682,-836 207.1682,-836 207.1682,-824 207.1682,-824 207.1682,-818 213.1682,-812 219.1682,-812 219.1682,-812 264.9076,-812 264.9076,-812 270.9076,-812 276.9076,-818 276.9076,-824 276.9076,-824 276.9076,-836 276.9076,-836 276.9076,-842 270.9076,-848 264.9076,-848"/>
<text text-anchor="middle" x="242.0379" y="-825.8" font-family="Verdana" font-size="14.00" fill="#000000">Marshal</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;gopkg.in/yaml.v3.Marshal -->
<g id="edge20" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;gopkg.in/yaml.v3.Marshal</title>
<g id="a_edge20"><a xlink:title="at config.go:47: calling [gopkg.in/yaml.v3.Marshal]">
<path fill="none" stroke="#8b4513" d="M59.297,-611.0549C64.7592,-649.5491 82.6661,-740.4543 134.3296,-793 150.9036,-809.857 175.4908,-819.0389 196.9907,-824.0379"/>
<polygon fill="#8b4513" stroke="#8b4513" points="196.425,-827.4952 206.9292,-826.1121 197.8552,-820.6429 196.425,-827.4952"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig -->
<g id="edge18" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig</title>
<g id="a_edge18"><a xlink:title="at config.go:81: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:82: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]">
<path fill="none" stroke="#000000" d="M262.2172,-276.7238C288.9519,-253.1997 338.2853,-212.1336 385.7462,-185 389.712,-182.7327 393.8901,-180.5548 398.1534,-178.4827"/>
<polygon fill="#000000" stroke="#000000" points="399.9691,-181.499 407.5735,-174.1217 397.0284,-175.1467 399.9691,-181.499"/>
</a>
</g>
</g>
<!-- github.com/spf13/viper.SetDefault -->
<g id="node14" class="node">
<title>github.com/spf13/viper.SetDefault</title>
<g id="a_node14"><a xlink:title="github.com/spf13/viper.SetDefault | defined in viper.go:1596">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M487.0956,-408C487.0956,-408 427.3646,-408 427.3646,-408 421.3646,-408 415.3646,-402 415.3646,-396 415.3646,-396 415.3646,-384 415.3646,-384 415.3646,-378 421.3646,-372 427.3646,-372 427.3646,-372 487.0956,-372 487.0956,-372 493.0956,-372 499.0956,-378 499.0956,-384 499.0956,-384 499.0956,-396 499.0956,-396 499.0956,-402 493.0956,-408 487.0956,-408"/>
<text text-anchor="middle" x="457.2301" y="-385.8" font-family="Verdana" font-size="14.00" fill="#000000">SetDefault</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults&#45;&gt;github.com/spf13/viper.SetDefault -->
<g id="edge11" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults&#45;&gt;github.com/spf13/viper.SetDefault</title>
<g id="a_edge11"><a xlink:title="at config.go:81: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:82: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:85: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:88: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:89: calling [github.com/spf13/viper.SetDefault]">
<path fill="none" stroke="#8b4513" d="M283.0204,-313.0924C318.3198,-328.6759 369.3895,-351.2214 407.1143,-367.8756"/>
<polygon fill="#8b4513" stroke="#8b4513" points="405.8384,-371.1382 416.4002,-371.975 408.6655,-364.7344 405.8384,-371.1382"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warnf -->
<g id="edge16" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warnf</title>
<g id="a_edge16"><a xlink:title="at config.go:105: calling [(*github.com/go&#45;i2p/logger.Logger).Warnf]">
<path fill="none" stroke="#8b4513" d="M260.995,-618.9556C276.601,-603.2612 298.4132,-579.2823 312.7462,-555 360.2096,-474.5896 332.8976,-434.9782 385.7462,-358 395.7483,-343.4312 409.8507,-330.0508 422.8896,-319.4039"/>
<polygon fill="#8b4513" stroke="#8b4513" points="425.1428,-322.0844 430.8245,-313.1418 420.8063,-316.5894 425.1428,-322.0844"/>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig | defined in config.go:92&#10;at config.go:94: calling [github.com/spf13/viper.GetString]&#10;at config.go:95: calling [github.com/spf13/viper.GetString]&#10;at config.go:99: calling [github.com/spf13/viper.GetString]&#10;at config.go:104: calling [github.com/spf13/viper.UnmarshalKey]&#10;at config.go:105: calling [(*github.com/go&#45;i2p/logger.Logger).Warnf]&#10;at config.go:110: calling [github.com/spf13/viper.GetInt]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M300.9551,-52C300.9551,-52 183.1207,-52 183.1207,-52 177.1207,-52 171.1207,-46 171.1207,-40 171.1207,-40 171.1207,-28 171.1207,-28 171.1207,-22 177.1207,-16 183.1207,-16 183.1207,-16 300.9551,-16 300.9551,-16 306.9551,-16 312.9551,-22 312.9551,-28 312.9551,-28 312.9551,-40 312.9551,-40 312.9551,-46 306.9551,-52 300.9551,-52"/>
<text text-anchor="middle" x="242.0379" y="-29.8" font-family="Verdana" font-size="14.00" fill="#000000">UpdateRouterConfig</text>
</a>
</g>
</g>
<!-- github.com/spf13/viper.GetString -->
<g id="node19" class="node">
<g id="node4" class="node">
<title>github.com/spf13/viper.GetString</title>
<g id="a_node19"><a xlink:title="github.com/spf13/viper.GetString | defined in viper.go:975">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M484.6675,-713C484.6675,-713 429.7927,-713 429.7927,-713 423.7927,-713 417.7927,-707 417.7927,-701 417.7927,-701 417.7927,-689 417.7927,-689 417.7927,-683 423.7927,-677 429.7927,-677 429.7927,-677 484.6675,-677 484.6675,-677 490.6675,-677 496.6675,-683 496.6675,-689 496.6675,-689 496.6675,-701 496.6675,-701 496.6675,-707 490.6675,-713 484.6675,-713"/>
<text text-anchor="middle" x="457.2301" y="-690.8" font-family="Verdana" font-size="14.00" fill="#000000">GetString</text>
<g id="a_node4"><a xlink:title="github.com/spf13/viper.GetString | defined in viper.go:975">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M484.6675,-52C484.6675,-52 429.7927,-52 429.7927,-52 423.7927,-52 417.7927,-46 417.7927,-40 417.7927,-40 417.7927,-28 417.7927,-28 417.7927,-22 423.7927,-16 429.7927,-16 429.7927,-16 484.6675,-16 484.6675,-16 490.6675,-16 496.6675,-22 496.6675,-28 496.6675,-28 496.6675,-40 496.6675,-40 496.6675,-46 490.6675,-52 484.6675,-52"/>
<text text-anchor="middle" x="457.2301" y="-38.2" font-family="Verdana" font-size="14.00" fill="#000000">viper</text>
<text text-anchor="middle" x="457.2301" y="-21.4" font-family="Verdana" font-size="14.00" fill="#000000">GetString</text>
</a>
</g>
</g>
@ -354,143 +80,400 @@
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig&#45;&gt;github.com/spf13/viper.GetString</title>
<g id="a_edge1"><a xlink:title="at config.go:94: calling [github.com/spf13/viper.GetString]&#10;at config.go:95: calling [github.com/spf13/viper.GetString]&#10;at config.go:99: calling [github.com/spf13/viper.GetString]">
<path fill="none" stroke="#8b4513" d="M308.9465,-655.0336C340.9528,-663.6602 378.5922,-673.805 407.9401,-681.715"/>
<polygon fill="#8b4513" stroke="#8b4513" points="407.3859,-685.1905 417.9522,-684.4136 409.2076,-678.4317 407.3859,-685.1905"/>
<path fill="none" stroke="#8b4513" d="M312.7979,-34C343.892,-34 379.6538,-34 407.813,-34"/>
<polygon fill="#8b4513" stroke="#8b4513" points="407.8207,-37.5001 417.8207,-34 407.8207,-30.5001 407.8207,-37.5001"/>
</a>
</g>
</g>
<!-- github.com/spf13/viper.UnmarshalKey -->
<g id="node20" class="node">
<g id="node5" class="node">
<title>github.com/spf13/viper.UnmarshalKey</title>
<g id="a_node20"><a xlink:title="github.com/spf13/viper.UnmarshalKey | defined in viper.go:1103">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M499.4738,-591C499.4738,-591 414.9864,-591 414.9864,-591 408.9864,-591 402.9864,-585 402.9864,-579 402.9864,-579 402.9864,-567 402.9864,-567 402.9864,-561 408.9864,-555 414.9864,-555 414.9864,-555 499.4738,-555 499.4738,-555 505.4738,-555 511.4738,-561 511.4738,-567 511.4738,-567 511.4738,-579 511.4738,-579 511.4738,-585 505.4738,-591 499.4738,-591"/>
<text text-anchor="middle" x="457.2301" y="-568.8" font-family="Verdana" font-size="14.00" fill="#000000">UnmarshalKey</text>
<g id="a_node5"><a xlink:title="github.com/spf13/viper.UnmarshalKey | defined in viper.go:1103">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M499.4738,-113C499.4738,-113 414.9864,-113 414.9864,-113 408.9864,-113 402.9864,-107 402.9864,-101 402.9864,-101 402.9864,-89 402.9864,-89 402.9864,-83 408.9864,-77 414.9864,-77 414.9864,-77 499.4738,-77 499.4738,-77 505.4738,-77 511.4738,-83 511.4738,-89 511.4738,-89 511.4738,-101 511.4738,-101 511.4738,-107 505.4738,-113 499.4738,-113"/>
<text text-anchor="middle" x="457.2301" y="-99.2" font-family="Verdana" font-size="14.00" fill="#000000">viper</text>
<text text-anchor="middle" x="457.2301" y="-82.4" font-family="Verdana" font-size="14.00" fill="#000000">UnmarshalKey</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig&#45;&gt;github.com/spf13/viper.UnmarshalKey -->
<g id="edge22" class="edge">
<g id="edge15" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig&#45;&gt;github.com/spf13/viper.UnmarshalKey</title>
<g id="a_edge22"><a xlink:title="at config.go:104: calling [github.com/spf13/viper.UnmarshalKey]">
<path fill="none" stroke="#8b4513" d="M302.8405,-618.9168C330.9686,-610.5513 364.3956,-600.6098 392.9411,-592.1201"/>
<polygon fill="#8b4513" stroke="#8b4513" points="394.2305,-595.3882 402.8178,-589.1827 392.2349,-588.6787 394.2305,-595.3882"/>
<g id="a_edge15"><a xlink:title="at config.go:104: calling [github.com/spf13/viper.UnmarshalKey]">
<path fill="none" stroke="#8b4513" d="M307.2809,-52.0688C321.2968,-55.9794 336.0198,-60.109 349.7462,-64 363.789,-67.9807 378.8504,-72.2959 393.1219,-76.4062"/>
<polygon fill="#8b4513" stroke="#8b4513" points="392.2755,-79.8046 402.8538,-79.2124 394.215,-73.0787 392.2755,-79.8046"/>
</a>
</g>
</g>
<!-- github.com/spf13/viper.GetInt -->
<g id="node21" class="node">
<g id="node6" class="node">
<title>github.com/spf13/viper.GetInt</title>
<g id="a_node21"><a xlink:title="github.com/spf13/viper.GetInt | defined in viper.go:989">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M474.9936,-652C474.9936,-652 439.4666,-652 439.4666,-652 433.4666,-652 427.4666,-646 427.4666,-640 427.4666,-640 427.4666,-628 427.4666,-628 427.4666,-622 433.4666,-616 439.4666,-616 439.4666,-616 474.9936,-616 474.9936,-616 480.9936,-616 486.9936,-622 486.9936,-628 486.9936,-628 486.9936,-640 486.9936,-640 486.9936,-646 480.9936,-652 474.9936,-652"/>
<text text-anchor="middle" x="457.2301" y="-629.8" font-family="Verdana" font-size="14.00" fill="#000000">GetInt</text>
<g id="a_node6"><a xlink:title="github.com/spf13/viper.GetInt | defined in viper.go:989">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M474.9936,-174C474.9936,-174 439.4666,-174 439.4666,-174 433.4666,-174 427.4666,-168 427.4666,-162 427.4666,-162 427.4666,-150 427.4666,-150 427.4666,-144 433.4666,-138 439.4666,-138 439.4666,-138 474.9936,-138 474.9936,-138 480.9936,-138 486.9936,-144 486.9936,-150 486.9936,-150 486.9936,-162 486.9936,-162 486.9936,-168 480.9936,-174 474.9936,-174"/>
<text text-anchor="middle" x="457.2301" y="-160.2" font-family="Verdana" font-size="14.00" fill="#000000">viper</text>
<text text-anchor="middle" x="457.2301" y="-143.4" font-family="Verdana" font-size="14.00" fill="#000000">GetInt</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig&#45;&gt;github.com/spf13/viper.GetInt -->
<g id="edge7" class="edge">
<g id="edge17" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig&#45;&gt;github.com/spf13/viper.GetInt</title>
<g id="a_edge7"><a xlink:title="at config.go:110: calling [github.com/spf13/viper.GetInt]">
<path fill="none" stroke="#8b4513" d="M312.7979,-636.0135C347.3833,-635.5314 387.7433,-634.9687 416.9933,-634.5609"/>
<polygon fill="#8b4513" stroke="#8b4513" points="417.2854,-638.0573 427.2356,-634.4182 417.1877,-631.058 417.2854,-638.0573"/>
<g id="a_edge17"><a xlink:title="at config.go:110: calling [github.com/spf13/viper.GetInt]">
<path fill="none" stroke="#8b4513" d="M276.9726,-52.1619C288.3923,-58.1305 301.1256,-64.8192 312.7462,-71 329.2501,-79.778 334.6796,-79.9353 349.7462,-91 367.7324,-104.2088 367.1334,-113.6899 385.7462,-126 395.6443,-132.5464 407.204,-138.1421 418.1066,-142.6655"/>
<polygon fill="#8b4513" stroke="#8b4513" points="416.8736,-145.9416 427.4602,-146.3614 419.4461,-139.4314 416.8736,-145.9416"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig -->
<g id="node5" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig</title>
<g id="a_node5"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig | defined in router.go:32&#10;at router.go:33: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.home]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M495.9892,-113C495.9892,-113 418.471,-113 418.471,-113 412.471,-113 406.471,-107 406.471,-101 406.471,-101 406.471,-89 406.471,-89 406.471,-83 412.471,-77 418.471,-77 418.471,-77 495.9892,-77 495.9892,-77 501.9892,-77 507.9892,-83 507.9892,-89 507.9892,-89 507.9892,-101 507.9892,-101 507.9892,-107 501.9892,-113 495.9892,-113"/>
<text text-anchor="middle" x="457.2301" y="-90.8" font-family="Verdana" font-size="14.00" fill="#000000">defaultConfig</text>
<!-- (*github.com/go&#45;i2p/logger.Logger).Warnf -->
<g id="node21" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Warnf</title>
<g id="a_node21"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Warnf | defined in log.go:36">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M474.9964,-252C474.9964,-252 439.4638,-252 439.4638,-252 433.4638,-252 427.4638,-246 427.4638,-240 427.4638,-240 427.4638,-228 427.4638,-228 427.4638,-222 433.4638,-216 439.4638,-216 439.4638,-216 474.9964,-216 474.9964,-216 480.9964,-216 486.9964,-222 486.9964,-228 486.9964,-228 486.9964,-240 486.9964,-240 486.9964,-246 480.9964,-252 474.9964,-252"/>
<text text-anchor="middle" x="457.2301" y="-238.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="457.2301" y="-221.4" font-family="Verdana" font-size="14.00" fill="#000000">Warnf</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.home -->
<g id="node6" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.home</title>
<g id="a_node6"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/config.home | defined in router.go:20">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M644.8719,-73C644.8719,-73 613.6613,-73 613.6613,-73 607.6613,-73 601.6613,-67 601.6613,-61 601.6613,-61 601.6613,-49 601.6613,-49 601.6613,-43 607.6613,-37 613.6613,-37 613.6613,-37 644.8719,-37 644.8719,-37 650.8719,-37 656.8719,-43 656.8719,-49 656.8719,-49 656.8719,-61 656.8719,-61 656.8719,-67 650.8719,-73 644.8719,-73"/>
<text text-anchor="middle" x="629.2666" y="-50.8" font-family="Verdana" font-size="14.00" fill="#000000">home</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.home -->
<g id="edge9" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.home</title>
<g id="a_edge9"><a xlink:title="at router.go:33: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.home]">
<path fill="none" stroke="#000000" d="M508.3809,-83.107C535.0739,-76.9006 567.1591,-69.4405 591.5644,-63.7661"/>
<polygon fill="#000000" stroke="#000000" points="592.568,-67.1262 601.5155,-61.4524 590.9826,-60.3081 592.568,-67.1262"/>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warnf -->
<g id="edge16" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warnf</title>
<g id="a_edge16"><a xlink:title="at config.go:105: calling [(*github.com/go&#45;i2p/logger.Logger).Warnf]">
<path fill="none" stroke="#8b4513" d="M283.8855,-52.1808C293.8633,-57.494 304.1124,-63.8306 312.7462,-71 333.1991,-87.9836 336.6214,-94.8806 349.7462,-118 371.8323,-156.9048 353.0679,-181.4466 385.7462,-212 394.476,-220.1621 406.1686,-225.299 417.5652,-228.5308"/>
<polygon fill="#8b4513" stroke="#8b4513" points="416.8803,-231.9659 427.4222,-230.9087 418.5219,-225.1611 416.8803,-231.9659"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.init -->
<g id="node7" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.init</title>
<g id="a_node7"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/config.init | defined in .:0&#10;at netdb.go:15: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig]&#10;at router.go:41: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig]&#10;at router.go:40: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultBase]&#10;at config.go:14: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]&#10;at router.go:48: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M257.0379,-150C257.0379,-150 227.0379,-150 227.0379,-150 221.0379,-150 215.0379,-144 215.0379,-138 215.0379,-138 215.0379,-126 215.0379,-126 215.0379,-120 221.0379,-114 227.0379,-114 227.0379,-114 257.0379,-114 257.0379,-114 263.0379,-114 269.0379,-120 269.0379,-126 269.0379,-126 269.0379,-138 269.0379,-138 269.0379,-144 263.0379,-150 257.0379,-150"/>
<text text-anchor="middle" x="242.0379" y="-127.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.init&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig -->
<g id="edge24" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.init&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig</title>
<g id="a_edge24"><a xlink:title="at router.go:48: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]">
<path fill="none" stroke="#000000" d="M269.2921,-135.0396C295.9735,-138.0153 337.9688,-142.699 375.5004,-146.8848"/>
<polygon fill="#000000" stroke="#000000" points="375.1147,-150.3634 385.441,-147.9935 375.8906,-143.4066 375.1147,-150.3634"/>
<g id="a_node7"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/config.init | defined in .:0&#10;at netdb.go:15: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig]&#10;at router.go:41: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig]&#10;at router.go:40: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultBase]&#10;at router.go:48: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:14: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M257.0379,-794C257.0379,-794 227.0379,-794 227.0379,-794 221.0379,-794 215.0379,-788 215.0379,-782 215.0379,-782 215.0379,-770 215.0379,-770 215.0379,-764 221.0379,-758 227.0379,-758 227.0379,-758 257.0379,-758 257.0379,-758 263.0379,-758 269.0379,-764 269.0379,-770 269.0379,-770 269.0379,-782 269.0379,-782 269.0379,-788 263.0379,-794 257.0379,-794"/>
<text text-anchor="middle" x="242.0379" y="-771.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.init&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig -->
<g id="edge3" class="edge">
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.init&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig</title>
<g id="a_edge3"><a xlink:title="at netdb.go:15: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig]&#10;at router.go:41: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig]">
<path fill="none" stroke="#000000" d="M269.2921,-127.3139C301.0545,-121.8527 354.5184,-112.6602 396.3196,-105.4729"/>
<polygon fill="#000000" stroke="#000000" points="397.1406,-108.8832 406.4029,-103.7392 395.9544,-101.9844 397.1406,-108.8832"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultBase -->
<g id="node8" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultBase</title>
<g id="a_node8"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultBase | defined in router.go:28&#10;at router.go:29: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.home]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M490.3115,-52C490.3115,-52 424.1487,-52 424.1487,-52 418.1487,-52 412.1487,-46 412.1487,-40 412.1487,-40 412.1487,-28 412.1487,-28 412.1487,-22 418.1487,-16 424.1487,-16 424.1487,-16 490.3115,-16 490.3115,-16 496.3115,-16 502.3115,-22 502.3115,-28 502.3115,-28 502.3115,-40 502.3115,-40 502.3115,-46 496.3115,-52 490.3115,-52"/>
<text text-anchor="middle" x="457.2301" y="-29.8" font-family="Verdana" font-size="14.00" fill="#000000">defaultBase</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.init&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultBase -->
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.init&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultBase</title>
<g id="a_edge4"><a xlink:title="at router.go:40: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultBase]">
<path fill="none" stroke="#000000" d="M269.2195,-119.06C298.0428,-105.4012 344.9513,-83.3513 385.7462,-65 392.2768,-62.0623 399.1632,-59.0139 405.979,-56.0263"/>
<polygon fill="#000000" stroke="#000000" points="407.4247,-59.2142 415.1896,-52.006 404.6244,-52.7987 407.4247,-59.2142"/>
<g id="a_edge2"><a xlink:title="at netdb.go:15: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig]&#10;at router.go:41: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultConfig]">
<path fill="none" stroke="#000000" d="M269.1861,-767.15C282.7582,-762.166 299.1448,-755.2766 312.7462,-747 349.1098,-724.8723 349.6053,-707.4897 385.7462,-685 390.4838,-682.0519 395.5506,-679.249 400.7175,-676.621"/>
<polygon fill="#000000" stroke="#000000" points="402.6036,-679.5964 410.0766,-672.0861 399.5512,-673.297 402.6036,-679.5964"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="node9" class="node">
<g id="node8" class="node">
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node9"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M505.9196,-235C505.9196,-235 408.5406,-235 408.5406,-235 402.5406,-235 396.5406,-229 396.5406,-223 396.5406,-223 396.5406,-211 396.5406,-211 396.5406,-205 402.5406,-199 408.5406,-199 408.5406,-199 505.9196,-199 505.9196,-199 511.9196,-199 517.9196,-205 517.9196,-211 517.9196,-211 517.9196,-223 517.9196,-223 517.9196,-229 511.9196,-235 505.9196,-235"/>
<text text-anchor="middle" x="457.2301" y="-212.8" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
<g id="a_node8"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M505.9196,-733C505.9196,-733 408.5406,-733 408.5406,-733 402.5406,-733 396.5406,-727 396.5406,-721 396.5406,-721 396.5406,-709 396.5406,-709 396.5406,-703 402.5406,-697 408.5406,-697 408.5406,-697 505.9196,-697 505.9196,-697 511.9196,-697 517.9196,-703 517.9196,-709 517.9196,-709 517.9196,-721 517.9196,-721 517.9196,-727 511.9196,-733 505.9196,-733"/>
<text text-anchor="middle" x="457.2301" y="-719.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="457.2301" y="-702.4" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge17" class="edge">
<g id="edge23" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge17"><a xlink:title="at config.go:14: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M269.2042,-145.0255C297.8196,-158.4804 344.3799,-179.6249 385.7462,-195 386.1874,-195.164 386.6305,-195.3277 387.0752,-195.4912"/>
<polygon fill="#8b4513" stroke="#8b4513" points="386.0215,-198.8311 396.6162,-198.8776 388.3629,-192.2343 386.0215,-198.8311"/>
<g id="a_edge23"><a xlink:title="at config.go:14: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M269.2921,-768.2743C298.6514,-759.9519 346.5527,-746.3735 386.646,-735.0083"/>
<polygon fill="#8b4513" stroke="#8b4513" points="387.723,-738.341 396.3894,-732.2464 385.8139,-731.6063 387.723,-738.341"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultBase -->
<g id="node9" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultBase</title>
<g id="a_node9"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultBase | defined in router.go:28&#10;at router.go:29: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.home]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M490.3115,-794C490.3115,-794 424.1487,-794 424.1487,-794 418.1487,-794 412.1487,-788 412.1487,-782 412.1487,-782 412.1487,-770 412.1487,-770 412.1487,-764 418.1487,-758 424.1487,-758 424.1487,-758 490.3115,-758 490.3115,-758 496.3115,-758 502.3115,-764 502.3115,-770 502.3115,-770 502.3115,-782 502.3115,-782 502.3115,-788 496.3115,-794 490.3115,-794"/>
<text text-anchor="middle" x="457.2301" y="-771.8" font-family="Verdana" font-size="14.00" fill="#000000">defaultBase</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.init&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultBase -->
<g id="edge18" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.init&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultBase</title>
<g id="a_edge18"><a xlink:title="at router.go:40: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultBase]">
<path fill="none" stroke="#000000" d="M269.2921,-776C302.4127,-776 359.1306,-776 401.6157,-776"/>
<polygon fill="#000000" stroke="#000000" points="401.8132,-779.5001 411.8132,-776 401.8132,-772.5001 401.8132,-779.5001"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig -->
<g id="node10" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig</title>
<g id="a_node10"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig | defined in router.go:44">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M516.6979,-611C516.6979,-611 397.7623,-611 397.7623,-611 391.7623,-611 385.7623,-605 385.7623,-599 385.7623,-599 385.7623,-587 385.7623,-587 385.7623,-581 391.7623,-575 397.7623,-575 397.7623,-575 516.6979,-575 516.6979,-575 522.6979,-575 528.6979,-581 528.6979,-587 528.6979,-587 528.6979,-599 528.6979,-599 528.6979,-605 522.6979,-611 516.6979,-611"/>
<text text-anchor="middle" x="457.2301" y="-588.8" font-family="Verdana" font-size="14.00" fill="#000000">DefaultRouterConfig</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.init&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig -->
<g id="edge19" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.init&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig</title>
<g id="a_edge19"><a xlink:title="at router.go:48: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]">
<path fill="none" stroke="#000000" d="M269.1158,-769.3961C283.3142,-764.8915 300.2928,-757.7516 312.7462,-747 360.8639,-705.4576 338.0457,-666.0208 385.7462,-624 388.9435,-621.1834 392.4364,-618.5905 396.1035,-616.209"/>
<polygon fill="#000000" stroke="#000000" points="398.0701,-619.1131 404.9196,-611.03 394.5244,-613.0774 398.0701,-619.1131"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultBase&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.home -->
<g id="edge23" class="edge">
<g id="edge8" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.defaultBase&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.home</title>
<g id="a_edge23"><a xlink:title="at router.go:29: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.home]">
<path fill="none" stroke="#000000" d="M502.4307,-39.5175C530.203,-42.9076 565.3654,-47.1998 591.6199,-50.4046"/>
<polygon fill="#000000" stroke="#000000" points="591.2158,-53.8811 601.5663,-51.6187 592.0641,-46.9327 591.2158,-53.8811"/>
<g id="a_edge8"><a xlink:title="at router.go:29: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.home]">
<path fill="none" stroke="#000000" d="M502.1609,-757.978C511.0355,-754.1847 520.2263,-750.0889 528.714,-746 550.2814,-735.61 573.786,-722.8381 592.6433,-712.2179"/>
<polygon fill="#000000" stroke="#000000" points="594.5257,-715.1741 601.4984,-707.197 591.0731,-709.0848 594.5257,-715.1741"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults -->
<g id="node11" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults</title>
<g id="a_node11"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults | defined in config.go:79&#10;at config.go:81: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:82: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:85: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:88: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:89: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:81: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:82: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M273.5099,-140C273.5099,-140 210.5659,-140 210.5659,-140 204.5659,-140 198.5659,-134 198.5659,-128 198.5659,-128 198.5659,-116 198.5659,-116 198.5659,-110 204.5659,-104 210.5659,-104 210.5659,-104 273.5099,-104 273.5099,-104 279.5099,-104 285.5099,-110 285.5099,-116 285.5099,-116 285.5099,-128 285.5099,-128 285.5099,-134 279.5099,-140 273.5099,-140"/>
<text text-anchor="middle" x="242.0379" y="-117.8" font-family="Verdana" font-size="14.00" fill="#000000">setDefaults</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig -->
<g id="edge24" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig</title>
<g id="a_edge24"><a xlink:title="at config.go:81: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:82: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]">
<path fill="none" stroke="#000000" d="M285.7551,-134.3874C295.6866,-138.9095 305.446,-144.9638 312.7462,-153 341.8,-184.9828 423.9374,-473.5016 449.5228,-565.1742"/>
<polygon fill="#000000" stroke="#000000" points="446.1684,-566.1755 452.2227,-574.8701 452.9119,-564.2977 446.1684,-566.1755"/>
</a>
</g>
</g>
<!-- github.com/spf13/viper.SetDefault -->
<g id="node12" class="node">
<title>github.com/spf13/viper.SetDefault</title>
<g id="a_node12"><a xlink:title="github.com/spf13/viper.SetDefault | defined in viper.go:1596">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M487.0956,-313C487.0956,-313 427.3646,-313 427.3646,-313 421.3646,-313 415.3646,-307 415.3646,-301 415.3646,-301 415.3646,-289 415.3646,-289 415.3646,-283 421.3646,-277 427.3646,-277 427.3646,-277 487.0956,-277 487.0956,-277 493.0956,-277 499.0956,-283 499.0956,-289 499.0956,-289 499.0956,-301 499.0956,-301 499.0956,-307 493.0956,-313 487.0956,-313"/>
<text text-anchor="middle" x="457.2301" y="-299.2" font-family="Verdana" font-size="14.00" fill="#000000">viper</text>
<text text-anchor="middle" x="457.2301" y="-282.4" font-family="Verdana" font-size="14.00" fill="#000000">SetDefault</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults&#45;&gt;github.com/spf13/viper.SetDefault -->
<g id="edge9" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults&#45;&gt;github.com/spf13/viper.SetDefault</title>
<g id="a_edge9"><a xlink:title="at config.go:81: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:82: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:85: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:88: calling [github.com/spf13/viper.SetDefault]&#10;at config.go:89: calling [github.com/spf13/viper.SetDefault]">
<path fill="none" stroke="#8b4513" d="M285.8764,-136.4613C295.3588,-140.8401 304.8871,-146.3101 312.7462,-153 358.2755,-191.7556 339.6829,-227.8806 385.7462,-266 391.7677,-270.983 398.7587,-275.2012 405.9643,-278.7444"/>
<polygon fill="#8b4513" stroke="#8b4513" points="404.5938,-281.9656 415.1493,-282.878 407.4666,-275.5823 404.5938,-281.9656"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig -->
<g id="node13" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig</title>
<g id="a_node13"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig | defined in config.go:19&#10;at config.go:61: calling [github.com/spf13/viper.AddConfigPath]&#10;at config.go:31: calling [(*github.com/sirupsen/logrus.Logger).Fatalf]&#10;at config.go:49: calling [(*github.com/sirupsen/logrus.Logger).Fatalf]&#10;at config.go:54: calling [(*github.com/sirupsen/logrus.Logger).Fatalf]&#10;at config.go:41: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:42: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:43: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:44: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:57: calling [(*github.com/sirupsen/logrus.Logger).Debugf]&#10;at config.go:72: calling [(*github.com/sirupsen/logrus.Logger).Debugf]&#10;at config.go:67: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults]&#10;at config.go:47: calling [gopkg.in/yaml.v3.Marshal]&#10;at config.go:70: calling [(*github.com/go&#45;i2p/logger.Logger).Warnf]&#10;at config.go:72: calling [github.com/spf13/viper.ConfigFileUsed]&#10;at config.go:63: calling [github.com/spf13/viper.SetConfigType]&#10;at config.go:25: calling [github.com/spf13/viper.SetConfigFile]&#10;at config.go:62: calling [github.com/spf13/viper.SetConfigName]&#10;at config.go:76: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig]&#10;at config.go:69: calling [github.com/spf13/viper.ReadInConfig]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M86.4951,-384C86.4951,-384 27.8345,-384 27.8345,-384 21.8345,-384 15.8345,-378 15.8345,-372 15.8345,-372 15.8345,-360 15.8345,-360 15.8345,-354 21.8345,-348 27.8345,-348 27.8345,-348 86.4951,-348 86.4951,-348 92.4951,-348 98.4951,-354 98.4951,-360 98.4951,-360 98.4951,-372 98.4951,-372 98.4951,-378 92.4951,-384 86.4951,-384"/>
<text text-anchor="middle" x="57.1648" y="-361.8" font-family="Verdana" font-size="14.00" fill="#000000">InitConfig</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig -->
<g id="edge22" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig</title>
<g id="a_edge22"><a xlink:title="at config.go:76: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.UpdateRouterConfig]">
<path fill="none" stroke="#000000" d="M59.6612,-347.7336C67.8983,-289.9377 95.897,-112.4308 134.3296,-71 142.0256,-62.7036 151.6642,-56.2674 161.9919,-51.2744"/>
<polygon fill="#000000" stroke="#000000" points="163.45,-54.457 171.2138,-47.2477 160.6487,-48.0419 163.45,-54.457"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig -->
<g id="edge5" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig</title>
<g id="a_edge5"><a xlink:title="at config.go:41: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:42: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:43: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]&#10;at config.go:44: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.DefaultRouterConfig]">
<path fill="none" stroke="#000000" d="M60.5914,-384.1687C69.7579,-427.0742 99.2234,-534.4829 171.3296,-580 188.2431,-590.6767 296.989,-593.0655 375.3532,-593.3684"/>
<polygon fill="#000000" stroke="#000000" points="375.7038,-596.8693 385.7135,-593.3972 375.7233,-589.8693 375.7038,-596.8693"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults -->
<g id="edge10" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults</title>
<g id="a_edge10"><a xlink:title="at config.go:67: calling [github.com/go&#45;i2p/go&#45;i2p/lib/config.setDefaults]">
<path fill="none" stroke="#000000" d="M62.41,-347.7554C74.8624,-307.4311 109.8568,-209.808 171.3296,-153 176.6761,-148.0592 182.9367,-143.8195 189.4828,-140.2058"/>
<polygon fill="#000000" stroke="#000000" points="191.1647,-143.2777 198.5273,-135.6591 188.0206,-137.0235 191.1647,-143.2777"/>
</a>
</g>
</g>
<!-- github.com/spf13/viper.SetConfigFile -->
<g id="node14" class="node">
<title>github.com/spf13/viper.SetConfigFile</title>
<g id="a_node14"><a xlink:title="github.com/spf13/viper.SetConfigFile | defined in viper.go:509">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M281.0929,-201C281.0929,-201 202.9829,-201 202.9829,-201 196.9829,-201 190.9829,-195 190.9829,-189 190.9829,-189 190.9829,-177 190.9829,-177 190.9829,-171 196.9829,-165 202.9829,-165 202.9829,-165 281.0929,-165 281.0929,-165 287.0929,-165 293.0929,-171 293.0929,-177 293.0929,-177 293.0929,-189 293.0929,-189 293.0929,-195 287.0929,-201 281.0929,-201"/>
<text text-anchor="middle" x="242.0379" y="-187.2" font-family="Verdana" font-size="14.00" fill="#000000">viper</text>
<text text-anchor="middle" x="242.0379" y="-170.4" font-family="Verdana" font-size="14.00" fill="#000000">SetConfigFile</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.SetConfigFile -->
<g id="edge20" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.SetConfigFile</title>
<g id="a_edge20"><a xlink:title="at config.go:25: calling [github.com/spf13/viper.SetConfigFile]">
<path fill="none" stroke="#8b4513" d="M66.7557,-347.6781C83.9212,-316.4408 122.6923,-252.5246 171.3296,-214 174.9135,-211.1613 178.7976,-208.5287 182.8383,-206.0977"/>
<polygon fill="#8b4513" stroke="#8b4513" points="184.8229,-208.9997 191.8786,-201.0961 181.4341,-202.8746 184.8229,-208.9997"/>
</a>
</g>
</g>
<!-- github.com/spf13/viper.ReadInConfig -->
<g id="node15" class="node">
<title>github.com/spf13/viper.ReadInConfig</title>
<g id="a_node15"><a xlink:title="github.com/spf13/viper.ReadInConfig | defined in viper.go:1632">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M281.8526,-262C281.8526,-262 202.2232,-262 202.2232,-262 196.2232,-262 190.2232,-256 190.2232,-250 190.2232,-250 190.2232,-238 190.2232,-238 190.2232,-232 196.2232,-226 202.2232,-226 202.2232,-226 281.8526,-226 281.8526,-226 287.8526,-226 293.8526,-232 293.8526,-238 293.8526,-238 293.8526,-250 293.8526,-250 293.8526,-256 287.8526,-262 281.8526,-262"/>
<text text-anchor="middle" x="242.0379" y="-248.2" font-family="Verdana" font-size="14.00" fill="#000000">viper</text>
<text text-anchor="middle" x="242.0379" y="-231.4" font-family="Verdana" font-size="14.00" fill="#000000">ReadInConfig</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.ReadInConfig -->
<g id="edge25" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.ReadInConfig</title>
<g id="a_edge25"><a xlink:title="at config.go:69: calling [github.com/spf13/viper.ReadInConfig]">
<path fill="none" stroke="#8b4513" d="M76.6135,-347.8716C98.4485,-328.1682 135.5252,-296.6121 171.3296,-275 176.255,-272.027 181.5164,-269.1794 186.8628,-266.4989"/>
<polygon fill="#8b4513" stroke="#8b4513" points="188.4024,-269.6422 195.8962,-262.1527 185.3675,-263.3343 188.4024,-269.6422"/>
</a>
</g>
</g>
<!-- github.com/spf13/viper.AddConfigPath -->
<g id="node16" class="node">
<title>github.com/spf13/viper.AddConfigPath</title>
<g id="a_node16"><a xlink:title="github.com/spf13/viper.AddConfigPath | defined in viper.go:574">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M285.9202,-323C285.9202,-323 198.1556,-323 198.1556,-323 192.1556,-323 186.1556,-317 186.1556,-311 186.1556,-311 186.1556,-299 186.1556,-299 186.1556,-293 192.1556,-287 198.1556,-287 198.1556,-287 285.9202,-287 285.9202,-287 291.9202,-287 297.9202,-293 297.9202,-299 297.9202,-299 297.9202,-311 297.9202,-311 297.9202,-317 291.9202,-323 285.9202,-323"/>
<text text-anchor="middle" x="242.0379" y="-309.2" font-family="Verdana" font-size="14.00" fill="#000000">viper</text>
<text text-anchor="middle" x="242.0379" y="-292.4" font-family="Verdana" font-size="14.00" fill="#000000">AddConfigPath</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.AddConfigPath -->
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.AddConfigPath</title>
<g id="a_edge3"><a xlink:title="at config.go:61: calling [github.com/spf13/viper.AddConfigPath]">
<path fill="none" stroke="#8b4513" d="M98.6539,-352.3104C121.9783,-344.6144 151.5964,-334.8417 177.8508,-326.1789"/>
<polygon fill="#8b4513" stroke="#8b4513" points="178.9537,-329.5007 187.3534,-323.0435 176.7603,-322.8532 178.9537,-329.5007"/>
</a>
</g>
</g>
<!-- github.com/spf13/viper.SetConfigName -->
<g id="node17" class="node">
<title>github.com/spf13/viper.SetConfigName</title>
<g id="a_node17"><a xlink:title="github.com/spf13/viper.SetConfigName | defined in viper.go:2174">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M287.2401,-384C287.2401,-384 196.8357,-384 196.8357,-384 190.8357,-384 184.8357,-378 184.8357,-372 184.8357,-372 184.8357,-360 184.8357,-360 184.8357,-354 190.8357,-348 196.8357,-348 196.8357,-348 287.2401,-348 287.2401,-348 293.2401,-348 299.2401,-354 299.2401,-360 299.2401,-360 299.2401,-372 299.2401,-372 299.2401,-378 293.2401,-384 287.2401,-384"/>
<text text-anchor="middle" x="242.0379" y="-370.2" font-family="Verdana" font-size="14.00" fill="#000000">viper</text>
<text text-anchor="middle" x="242.0379" y="-353.4" font-family="Verdana" font-size="14.00" fill="#000000">SetConfigName</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.SetConfigName -->
<g id="edge21" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.SetConfigName</title>
<g id="a_edge21"><a xlink:title="at config.go:62: calling [github.com/spf13/viper.SetConfigName]">
<path fill="none" stroke="#8b4513" d="M98.6539,-366C121.0164,-366 149.1643,-366 174.5862,-366"/>
<polygon fill="#8b4513" stroke="#8b4513" points="174.9165,-369.5001 184.9165,-366 174.9164,-362.5001 174.9165,-369.5001"/>
</a>
</g>
</g>
<!-- github.com/spf13/viper.SetConfigType -->
<g id="node18" class="node">
<title>github.com/spf13/viper.SetConfigType</title>
<g id="a_node18"><a xlink:title="github.com/spf13/viper.SetConfigType | defined in viper.go:2185">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M284.5817,-445C284.5817,-445 199.4941,-445 199.4941,-445 193.4941,-445 187.4941,-439 187.4941,-433 187.4941,-433 187.4941,-421 187.4941,-421 187.4941,-415 193.4941,-409 199.4941,-409 199.4941,-409 284.5817,-409 284.5817,-409 290.5817,-409 296.5817,-415 296.5817,-421 296.5817,-421 296.5817,-433 296.5817,-433 296.5817,-439 290.5817,-445 284.5817,-445"/>
<text text-anchor="middle" x="242.0379" y="-431.2" font-family="Verdana" font-size="14.00" fill="#000000">viper</text>
<text text-anchor="middle" x="242.0379" y="-414.4" font-family="Verdana" font-size="14.00" fill="#000000">SetConfigType</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.SetConfigType -->
<g id="edge14" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.SetConfigType</title>
<g id="a_edge14"><a xlink:title="at config.go:63: calling [github.com/spf13/viper.SetConfigType]">
<path fill="none" stroke="#8b4513" d="M98.6539,-379.6896C121.9783,-387.3856 151.5964,-397.1583 177.8508,-405.8211"/>
<polygon fill="#8b4513" stroke="#8b4513" points="176.7603,-409.1468 187.3534,-408.9565 178.9537,-402.4993 176.7603,-409.1468"/>
</a>
</g>
</g>
<!-- gopkg.in/yaml.v3.Marshal -->
<g id="node19" class="node">
<title>gopkg.in/yaml.v3.Marshal</title>
<g id="a_node19"><a xlink:title="gopkg.in/yaml.v3.Marshal | defined in yaml.go:218">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M264.9076,-506C264.9076,-506 219.1682,-506 219.1682,-506 213.1682,-506 207.1682,-500 207.1682,-494 207.1682,-494 207.1682,-482 207.1682,-482 207.1682,-476 213.1682,-470 219.1682,-470 219.1682,-470 264.9076,-470 264.9076,-470 270.9076,-470 276.9076,-476 276.9076,-482 276.9076,-482 276.9076,-494 276.9076,-494 276.9076,-500 270.9076,-506 264.9076,-506"/>
<text text-anchor="middle" x="242.0379" y="-492.2" font-family="Verdana" font-size="14.00" fill="#000000">yaml</text>
<text text-anchor="middle" x="242.0379" y="-475.4" font-family="Verdana" font-size="14.00" fill="#000000">Marshal</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;gopkg.in/yaml.v3.Marshal -->
<g id="edge11" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;gopkg.in/yaml.v3.Marshal</title>
<g id="a_edge11"><a xlink:title="at config.go:47: calling [gopkg.in/yaml.v3.Marshal]">
<path fill="none" stroke="#8b4513" d="M76.1343,-384.065C97.8401,-404.0469 135.0821,-436.2831 171.3296,-458 179.5648,-462.9339 188.7601,-467.4654 197.7243,-471.4305"/>
<polygon fill="#8b4513" stroke="#8b4513" points="196.3604,-474.6538 206.9323,-475.3507 199.1024,-468.2132 196.3604,-474.6538"/>
</a>
</g>
</g>
<!-- github.com/spf13/viper.ConfigFileUsed -->
<g id="node20" class="node">
<title>github.com/spf13/viper.ConfigFileUsed</title>
<g id="a_node20"><a xlink:title="github.com/spf13/viper.ConfigFileUsed | defined in viper.go:569">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M286.9707,-567C286.9707,-567 197.1051,-567 197.1051,-567 191.1051,-567 185.1051,-561 185.1051,-555 185.1051,-555 185.1051,-543 185.1051,-543 185.1051,-537 191.1051,-531 197.1051,-531 197.1051,-531 286.9707,-531 286.9707,-531 292.9707,-531 298.9707,-537 298.9707,-543 298.9707,-543 298.9707,-555 298.9707,-555 298.9707,-561 292.9707,-567 286.9707,-567"/>
<text text-anchor="middle" x="242.0379" y="-553.2" font-family="Verdana" font-size="14.00" fill="#000000">viper</text>
<text text-anchor="middle" x="242.0379" y="-536.4" font-family="Verdana" font-size="14.00" fill="#000000">ConfigFileUsed</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.ConfigFileUsed -->
<g id="edge13" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;github.com/spf13/viper.ConfigFileUsed</title>
<g id="a_edge13"><a xlink:title="at config.go:72: calling [github.com/spf13/viper.ConfigFileUsed]">
<path fill="none" stroke="#8b4513" d="M66.4064,-384.0067C83.3121,-415.3611 122.0575,-480.3233 171.3296,-519 174.4846,-521.4766 177.8743,-523.7853 181.4,-525.9314"/>
<polygon fill="#8b4513" stroke="#8b4513" points="179.9481,-529.1289 190.3879,-530.9344 183.3526,-523.0126 179.9481,-529.1289"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warnf -->
<g id="edge12" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warnf</title>
<g id="a_edge12"><a xlink:title="at config.go:70: calling [(*github.com/go&#45;i2p/logger.Logger).Warnf]">
<path fill="none" stroke="#8b4513" d="M58.2342,-347.7257C62.3308,-296.5636 81.7139,-151.7442 171.3296,-92 223.6254,-57.1359 257.9583,-61.2001 312.7462,-92 367.1635,-122.5916 336.4839,-173.6553 385.7462,-212 394.8465,-219.0835 406.2361,-223.8999 417.2313,-227.1698"/>
<polygon fill="#8b4513" stroke="#8b4513" points="416.5811,-230.6173 427.1411,-229.7586 418.3504,-223.8446 416.5811,-230.6173"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Fatalf -->
<g id="node22" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Fatalf</title>
<g id="a_node22"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Fatalf | defined in logger.go:189">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M259.5337,-733C259.5337,-733 224.5421,-733 224.5421,-733 218.5421,-733 212.5421,-727 212.5421,-721 212.5421,-721 212.5421,-709 212.5421,-709 212.5421,-703 218.5421,-697 224.5421,-697 224.5421,-697 259.5337,-697 259.5337,-697 265.5337,-697 271.5337,-703 271.5337,-709 271.5337,-709 271.5337,-721 271.5337,-721 271.5337,-727 265.5337,-733 259.5337,-733"/>
<text text-anchor="middle" x="242.0379" y="-719.2" font-family="Verdana" font-size="14.00" fill="#000000">logrus</text>
<text text-anchor="middle" x="242.0379" y="-702.4" font-family="Verdana" font-size="14.00" fill="#000000">Fatalf</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;(*github.com/sirupsen/logrus.Logger).Fatalf -->
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;(*github.com/sirupsen/logrus.Logger).Fatalf</title>
<g id="a_edge4"><a xlink:title="at config.go:31: calling [(*github.com/sirupsen/logrus.Logger).Fatalf]&#10;at config.go:49: calling [(*github.com/sirupsen/logrus.Logger).Fatalf]&#10;at config.go:54: calling [(*github.com/sirupsen/logrus.Logger).Fatalf]">
<path fill="none" stroke="#8b4513" d="M58.2044,-384.1411C62.2835,-438.0873 81.7586,-599.0854 171.3296,-685 180.1126,-693.4245 191.6201,-699.6551 202.793,-704.1854"/>
<polygon fill="#8b4513" stroke="#8b4513" points="201.8553,-707.5698 212.4488,-707.7413 204.2744,-701.0011 201.8553,-707.5698"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Debugf -->
<g id="node23" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debugf</title>
<g id="a_node23"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debugf | defined in logger.go:163">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M263.0197,-672C263.0197,-672 221.0561,-672 221.0561,-672 215.0561,-672 209.0561,-666 209.0561,-660 209.0561,-660 209.0561,-648 209.0561,-648 209.0561,-642 215.0561,-636 221.0561,-636 221.0561,-636 263.0197,-636 263.0197,-636 269.0197,-636 275.0197,-642 275.0197,-648 275.0197,-648 275.0197,-660 275.0197,-660 275.0197,-666 269.0197,-672 263.0197,-672"/>
<text text-anchor="middle" x="242.0379" y="-658.2" font-family="Verdana" font-size="14.00" fill="#000000">logrus</text>
<text text-anchor="middle" x="242.0379" y="-641.4" font-family="Verdana" font-size="14.00" fill="#000000">Debugf</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debugf -->
<g id="edge6" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/config.InitConfig&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debugf</title>
<g id="a_edge6"><a xlink:title="at config.go:57: calling [(*github.com/sirupsen/logrus.Logger).Debugf]&#10;at config.go:72: calling [(*github.com/sirupsen/logrus.Logger).Debugf]">
<path fill="none" stroke="#8b4513" d="M59.7631,-384.1644C66.3637,-425.5229 86.7448,-528.6433 134.3296,-600 146.392,-618.0884 152.3268,-621.4366 171.3296,-632 179.9196,-636.7751 189.6845,-640.6601 199.1566,-643.7608"/>
<polygon fill="#8b4513" stroke="#8b4513" points="198.2743,-647.1507 208.8601,-646.7126 200.3116,-640.4537 198.2743,-647.1507"/>
</a>
</g>
</g>

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 43 KiB

File diff suppressed because it is too large Load Diff

View File

@ -2,354 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/i2np"
## Usage
```go
const (
I2NP_MESSAGE_TYPE_DATABASE_STORE = 1
I2NP_MESSAGE_TYPE_DATABASE_LOOKUP = 2
I2NP_MESSAGE_TYPE_DATABASE_SEARCH_REPLY = 3
I2NP_MESSAGE_TYPE_DELIVERY_STATUS = 10
I2NP_MESSAGE_TYPE_GARLIC = 11
I2NP_MESSAGE_TYPE_TUNNEL_DATA = 18
I2NP_MESSAGE_TYPE_TUNNEL_GATEWAY = 19
I2NP_MESSAGE_TYPE_DATA = 20
I2NP_MESSAGE_TYPE_TUNNEL_BUILD = 21
I2NP_MESSAGE_TYPE_TUNNEL_BUILD_REPLY = 22
I2NP_MESSAGE_TYPE_VARIABLE_TUNNEL_BUILD = 23
I2NP_MESSAGE_TYPE_VARIABLE_TUNNEL_BUILD_REPLY = 24
)
```
```go
var ERR_BUILD_REQUEST_RECORD_NOT_ENOUGH_DATA = oops.Errorf("not enough i2np build request record data")
```
```go
var ERR_I2NP_NOT_ENOUGH_DATA = oops.Errorf("not enough i2np header data")
```
#### func ReadI2NPNTCPData
```go
func ReadI2NPNTCPData(data []byte, size int) ([]byte, error)
```
#### func ReadI2NPNTCPMessageChecksum
```go
func ReadI2NPNTCPMessageChecksum(data []byte) (int, error)
```
#### func ReadI2NPNTCPMessageExpiration
```go
func ReadI2NPNTCPMessageExpiration(data []byte) (datalib.Date, error)
```
#### func ReadI2NPNTCPMessageID
```go
func ReadI2NPNTCPMessageID(data []byte) (int, error)
```
#### func ReadI2NPNTCPMessageSize
```go
func ReadI2NPNTCPMessageSize(data []byte) (int, error)
```
#### func ReadI2NPSSUMessageExpiration
```go
func ReadI2NPSSUMessageExpiration(data []byte) (datalib.Date, error)
```
#### func ReadI2NPType
```go
func ReadI2NPType(data []byte) (int, error)
```
#### type BuildRequestRecord
```go
type BuildRequestRecord struct {
ReceiveTunnel tunnel.TunnelID
OurIdent common.Hash
NextTunnel tunnel.TunnelID
NextIdent common.Hash
LayerKey session_key.SessionKey
IVKey session_key.SessionKey
ReplyKey session_key.SessionKey
ReplyIV [16]byte
Flag int
RequestTime time.Time
SendMessageID int
Padding [29]byte
}
```
#### func ReadBuildRequestRecord
```go
func ReadBuildRequestRecord(data []byte) (BuildRequestRecord, error)
```
#### type BuildRequestRecordElGamal
```go
type BuildRequestRecordElGamal [528]byte
```
#### type BuildRequestRecordElGamalAES
```go
type BuildRequestRecordElGamalAES [528]byte
```
#### type BuildResponseRecord
```go
type BuildResponseRecord struct {
Hash common.Hash
Padding [495]byte
Reply byte
}
```
#### type BuildResponseRecordELGamal
```go
type BuildResponseRecordELGamal [528]byte
```
#### type BuildResponseRecordELGamalAES
```go
type BuildResponseRecordELGamalAES [528]byte
```
#### type Data
```go
type Data struct {
Length int
Data []byte
}
```
#### type DatabaseLookup
```go
type DatabaseLookup struct {
Key common.Hash
From common.Hash
Flags byte
ReplyTunnelID [4]byte
Size int
ExcludedPeers []common.Hash
ReplyKey session_key.SessionKey
ReplyTags []session_tag.SessionTag
}
```
#### type DatabaseSearchReply
```go
type DatabaseSearchReply struct {
Key common.Hash
Count int
PeerHashes []common.Hash
From common.Hash
}
```
#### type DatabaseStore
```go
type DatabaseStore struct {
Key common.Hash
Type byte
ReplyToken [4]byte
ReplyTunnelID [4]byte
ReplyGateway common.Hash
Data []byte
}
```
#### type DeliveryStatus
```go
type DeliveryStatus struct {
MessageID int
Timestamp time.Time
}
```
#### type Garlic
```go
type Garlic struct {
Count int
Cloves []GarlicClove
Certificate certificate.Certificate
MessageID int
Expiration time.Time
}
```
#### type GarlicClove
```go
type GarlicClove struct {
DeliveryInstructions GarlicCloveDeliveryInstructions
I2NPMessage I2NPMessage
CloveID int
Expiration time.Time
Certificate certificate.Certificate
}
```
#### type GarlicCloveDeliveryInstructions
```go
type GarlicCloveDeliveryInstructions struct {
Flag byte
SessionKey session_key.SessionKey
Hash common.Hash
TunnelID tunnel.TunnelID
Delay int
}
```
#### type GarlicElGamal
```go
type GarlicElGamal []byte
```
#### type I2NPMessage
```go
type I2NPMessage []byte
```
#### type I2NPNTCPHeader
```go
type I2NPNTCPHeader struct {
Type int
MessageID int
Expiration time.Time
Size int
Checksum int
Data []byte
}
```
#### func ReadI2NPNTCPHeader
```go
func ReadI2NPNTCPHeader(data []byte) (I2NPNTCPHeader, error)
```
Read an entire I2NP message and return the parsed header with embedded encrypted
data
#### type I2NPSSUHeader
```go
type I2NPSSUHeader struct {
Type int
Expiration time.Time
}
```
#### func ReadI2NPSSUHeader
```go
func ReadI2NPSSUHeader(data []byte) (I2NPSSUHeader, error)
```
#### type TunnelBuild
```go
type TunnelBuild [8]BuildRequestRecord
```
#### type TunnelBuildReply
```go
type TunnelBuildReply [8]BuildResponseRecord
```
#### type TunnelData
```go
type TunnelData [1028]byte
```
#### type TunnelGatway
```go
type TunnelGatway struct {
TunnelID tunnel.TunnelID
Length int
Data []byte
}
```
#### type VariableTunnelBuild
```go
type VariableTunnelBuild struct {
Count int
BuildRequestRecords []BuildRequestRecord
}
```
#### type VariableTunnelBuildReply
```go
type VariableTunnelBuildReply struct {
Count int
BuildResponseRecords []BuildResponseRecord
}
```
# i2np
--
import "github.com/go-i2p/go-i2p/lib/i2np"
![i2np.svg](i2np)
## Usage
```go

View File

@ -2,23 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/i2np/fuzz/header"
## Usage
#### func Fuzz
```go
func Fuzz(data []byte) int
```
# exportable
--
import "github.com/go-i2p/go-i2p/lib/i2np/fuzz/header"
![exportable.svg](exportable)
## Usage
#### func Fuzz

View File

@ -4,30 +4,22 @@
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="326pt" height="141pt"
viewBox="0.00 0.00 325.50 141.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 141)">
<svg width="318pt" height="98pt"
viewBox="0.00 0.00 317.50 98.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 98)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-141 325.505,-141 325.505,0 0,0"/>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-98 317.505,-98 317.505,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-133 317.505,-133 317.505,-8 8,-8"/>
<text text-anchor="middle" x="162.7525" y="-112.8" font-family="Arial" font-size="18.00" fill="#000000">exportable</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/i2np</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/i2np" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/i2np">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="135,-16 135,-95 309.505,-95 309.505,-16 135,-16"/>
<text text-anchor="middle" x="222.2525" y="-76.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">i2np</text>
</a>
</g>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-90 309.505,-90 309.505,-8 8,-8"/>
<text text-anchor="middle" x="158.7525" y="-69.8" font-family="Arial" font-size="18.00" fill="#000000">exportable</text>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/i2np/fuzz/header.Fuzz -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/i2np/fuzz/header.Fuzz</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/i2np/fuzz/header.Fuzz | defined in fuzz.go:5&#10;at fuzz.go:6: calling [github.com/go&#45;i2p/go&#45;i2p/lib/i2np.ReadI2NPNTCPHeader]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M58,-60C58,-60 28,-60 28,-60 22,-60 16,-54 16,-48 16,-48 16,-36 16,-36 16,-30 22,-24 28,-24 28,-24 58,-24 58,-24 64,-24 70,-30 70,-36 70,-36 70,-48 70,-48 70,-54 64,-60 58,-60"/>
<text text-anchor="middle" x="43" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">Fuzz</text>
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M58,-52C58,-52 28,-52 28,-52 22,-52 16,-46 16,-40 16,-40 16,-28 16,-28 16,-22 22,-16 28,-16 28,-16 58,-16 58,-16 64,-16 70,-22 70,-28 70,-28 70,-40 70,-40 70,-46 64,-52 58,-52"/>
<text text-anchor="middle" x="43" y="-29.8" font-family="Verdana" font-size="14.00" fill="#000000">Fuzz</text>
</a>
</g>
</g>
@ -35,8 +27,9 @@
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/i2np.ReadI2NPNTCPHeader</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/i2np.ReadI2NPNTCPHeader | defined in header.go:97">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M289.2583,-60C289.2583,-60 155.2467,-60 155.2467,-60 149.2467,-60 143.2467,-54 143.2467,-48 143.2467,-48 143.2467,-36 143.2467,-36 143.2467,-30 149.2467,-24 155.2467,-24 155.2467,-24 289.2583,-24 289.2583,-24 295.2583,-24 301.2583,-30 301.2583,-36 301.2583,-36 301.2583,-48 301.2583,-48 301.2583,-54 295.2583,-60 289.2583,-60"/>
<text text-anchor="middle" x="222.2525" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadI2NPNTCPHeader</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M289.2583,-52C289.2583,-52 155.2467,-52 155.2467,-52 149.2467,-52 143.2467,-46 143.2467,-40 143.2467,-40 143.2467,-28 143.2467,-28 143.2467,-22 149.2467,-16 155.2467,-16 155.2467,-16 289.2583,-16 289.2583,-16 295.2583,-16 301.2583,-22 301.2583,-28 301.2583,-28 301.2583,-40 301.2583,-40 301.2583,-46 295.2583,-52 289.2583,-52"/>
<text text-anchor="middle" x="222.2525" y="-38.2" font-family="Verdana" font-size="14.00" fill="#000000">i2np</text>
<text text-anchor="middle" x="222.2525" y="-21.4" font-family="Verdana" font-size="14.00" fill="#000000">ReadI2NPNTCPHeader</text>
</a>
</g>
</g>
@ -44,8 +37,8 @@
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/i2np/fuzz/header.Fuzz&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/i2np.ReadI2NPNTCPHeader</title>
<g id="a_edge1"><a xlink:title="at fuzz.go:6: calling [github.com/go&#45;i2p/go&#45;i2p/lib/i2np.ReadI2NPNTCPHeader]">
<path fill="none" stroke="#8b4513" d="M70.2246,-42C87.2023,-42 110.1106,-42 132.9875,-42"/>
<polygon fill="#8b4513" stroke="#8b4513" points="133.1223,-45.5001 143.1222,-42 133.1222,-38.5001 133.1223,-45.5001"/>
<path fill="none" stroke="#8b4513" d="M70.2246,-34C87.2023,-34 110.1106,-34 132.9875,-34"/>
<polygon fill="#8b4513" stroke="#8b4513" points="133.1223,-37.5001 143.1222,-34 133.1222,-30.5001 133.1223,-37.5001"/>
</a>
</g>
</g>

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 119 KiB

After

Width:  |  Height:  |  Size: 112 KiB

View File

@ -2,107 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/keys"
## Usage
#### type KeyStore
```go
type KeyStore interface {
KeyID() string
// GetKeys returns the public and private keys
GetKeys() (publicKey crypto.PublicKey, privateKey crypto.PrivateKey, err error)
// StoreKeys stores the keys
StoreKeys() error
}
```
KeyStore is an interface for storing and retrieving keys
#### type KeyStoreImpl
```go
type KeyStoreImpl struct {
}
```
#### func NewKeyStoreImpl
```go
func NewKeyStoreImpl(dir, name string, privateKey crypto.PrivateKey) *KeyStoreImpl
```
#### func (*KeyStoreImpl) GetKeys
```go
func (ks *KeyStoreImpl) GetKeys() (crypto.PublicKey, crypto.PrivateKey, error)
```
#### func (*KeyStoreImpl) KeyID
```go
func (ks *KeyStoreImpl) KeyID() string
```
#### func (*KeyStoreImpl) StoreKeys
```go
func (ks *KeyStoreImpl) StoreKeys() error
```
#### type RouterInfoKeystore
```go
type RouterInfoKeystore struct {
*sntp.RouterTimestamper
}
```
RouterInfoKeystore is an implementation of KeyStore for storing and retrieving
RouterInfo private keys and exporting RouterInfos
#### func NewRouterInfoKeystore
```go
func NewRouterInfoKeystore(dir, name string) (*RouterInfoKeystore, error)
```
NewRouterInfoKeystore creates a new RouterInfoKeystore with fresh and new
private keys it accepts a directory to store the keys in and a name for the keys
then it generates new private keys for the routerInfo if none exist
#### func (*RouterInfoKeystore) ConstructRouterInfo
```go
func (ks *RouterInfoKeystore) ConstructRouterInfo(addresses []*router_address.RouterAddress) (*router_info.RouterInfo, error)
```
#### func (*RouterInfoKeystore) GetKeys
```go
func (ks *RouterInfoKeystore) GetKeys() (crypto.PublicKey, crypto.PrivateKey, error)
```
#### func (*RouterInfoKeystore) KeyID
```go
func (ks *RouterInfoKeystore) KeyID() string
```
#### func (*RouterInfoKeystore) StoreKeys
```go
func (ks *RouterInfoKeystore) StoreKeys() error
```
# keys
--
import "github.com/go-i2p/go-i2p/lib/keys"
![keys.svg](keys)
## Usage
#### type KeyStore

View File

@ -4,245 +4,259 @@
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="684pt" height="1053pt"
viewBox="0.00 0.00 684.06 1053.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 1053)">
<svg width="699pt" height="783pt"
viewBox="0.00 0.00 698.59 783.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 783)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-1053 684.0564,-1053 684.0564,0 0,0"/>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-783 698.5894,-783 698.5894,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-1045 676.0564,-1045 676.0564,-8 8,-8"/>
<text text-anchor="middle" x="342.0282" y="-1024.8" font-family="Arial" font-size="18.00" fill="#000000">keys</text>
</g>
<g id="clust12" class="cluster">
<title>cluster_github.com/samber/oops</title>
<g id="a_clust12"><a xlink:href="/?f=github.com/samber/oops" xlink:title="package: github.com/samber/oops">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="525.0528,-189 525.0528,-268 599.2478,-268 599.2478,-189 525.0528,-189"/>
<text text-anchor="middle" x="562.1503" y="-249.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">oops</text>
</a>
</g>
</g>
<g id="clust10" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp</title>
<g id="a_clust10"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/util/time/sntp" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="472.9532,-16 472.9532,-181 651.3474,-181 651.3474,-16 472.9532,-16"/>
<text text-anchor="middle" x="562.1503" y="-162.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">sntp</text>
</a>
</g>
</g>
<g id="clust11" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper</title>
<g id="a_clust11"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/util/time/sntp" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M497.8887,-68C497.8887,-68 626.4119,-68 626.4119,-68 632.4119,-68 638.4119,-74 638.4119,-80 638.4119,-80 638.4119,-134 638.4119,-134 638.4119,-140 632.4119,-146 626.4119,-146 626.4119,-146 497.8887,-146 497.8887,-146 491.8887,-146 485.8887,-140 485.8887,-134 485.8887,-134 485.8887,-80 485.8887,-80 485.8887,-74 491.8887,-68 497.8887,-68"/>
<text text-anchor="middle" x="562.1503" y="-76.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*RouterTimestamper)</text>
</a>
</g>
</g>
<g id="clust9" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info</title>
<g id="a_clust9"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/router_info" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="498.2246,-363 498.2246,-442 626.076,-442 626.076,-363 498.2246,-363"/>
<text text-anchor="middle" x="562.1503" y="-423.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">router_info</text>
</a>
</g>
</g>
<g id="clust8" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity</title>
<g id="a_clust8"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/router_identity" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="488.1117,-276 488.1117,-355 636.1889,-355 636.1889,-276 488.1117,-276"/>
<text text-anchor="middle" x="562.1503" y="-336.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">router_identity</text>
</a>
</g>
</g>
<g id="clust6" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate</title>
<g id="a_clust6"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/key_certificate" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="456.2442,-772 456.2442,-1007 668.0564,-1007 668.0564,-772 456.2442,-772"/>
<text text-anchor="middle" x="562.1503" y="-988.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">key_certificate</text>
</a>
</g>
</g>
<g id="clust7" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate</title>
<g id="a_clust7"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/key_certificate" xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M515.2723,-780C515.2723,-780 609.0283,-780 609.0283,-780 615.0283,-780 621.0283,-786 621.0283,-792 621.0283,-792 621.0283,-907 621.0283,-907 621.0283,-913 615.0283,-919 609.0283,-919 609.0283,-919 515.2723,-919 515.2723,-919 509.2723,-919 503.2723,-913 503.2723,-907 503.2723,-907 503.2723,-792 503.2723,-792 503.2723,-786 509.2723,-780 515.2723,-780"/>
<text text-anchor="middle" x="562.1503" y="-788.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(KeyCertificate)</text>
</a>
</g>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-775 690.5894,-775 690.5894,-8 8,-8"/>
<text text-anchor="middle" x="349.2947" y="-754.8" font-family="Arial" font-size="18.00" fill="#000000">keys</text>
</g>
<g id="clust5" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/data</title>
<g id="a_clust5"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/data" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/data">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="486.1734,-685 486.1734,-764 638.1272,-764 638.1272,-685 486.1734,-685"/>
<text text-anchor="middle" x="562.1503" y="-745.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">data</text>
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate</title>
<g id="a_clust5"><a xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M535.0977,-451C535.0977,-451 634.2689,-451 634.2689,-451 640.2689,-451 646.2689,-457 646.2689,-463 646.2689,-463 646.2689,-578 646.2689,-578 646.2689,-584 640.2689,-590 634.2689,-590 634.2689,-590 535.0977,-590 535.0977,-590 529.0977,-590 523.0977,-584 523.0977,-578 523.0977,-578 523.0977,-463 523.0977,-463 523.0977,-457 529.0977,-451 535.0977,-451"/>
<text text-anchor="middle" x="584.6833" y="-459.5" font-family="Arial" font-size="15.00" fill="#222222">(KeyCertificate)</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/certificate" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="471.0156,-598 471.0156,-677 653.285,-677 653.285,-598 471.0156,-598"/>
<text text-anchor="middle" x="562.1503" y="-658.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">certificate</text>
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper</title>
<g id="a_clust4"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M515.4217,-365C515.4217,-365 654.9449,-365 654.9449,-365 660.9449,-365 666.9449,-371 666.9449,-377 666.9449,-377 666.9449,-431 666.9449,-431 666.9449,-437 660.9449,-443 654.9449,-443 654.9449,-443 515.4217,-443 515.4217,-443 509.4217,-443 503.4217,-437 503.4217,-431 503.4217,-431 503.4217,-377 503.4217,-377 503.4217,-371 509.4217,-365 515.4217,-365"/>
<text text-anchor="middle" x="585.1833" y="-373.5" font-family="Arial" font-size="15.00" fill="#222222">(*RouterTimestamper)</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore</title>
<g id="a_clust3"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M255.383,-450C255.383,-450 594.6391,-450 594.6391,-450 600.6391,-450 606.6391,-456 606.6391,-462 606.6391,-462 606.6391,-577 606.6391,-577 606.6391,-583 600.6391,-589 594.6391,-589 594.6391,-589 255.383,-589 255.383,-589 249.383,-589 243.383,-583 243.383,-577 243.383,-577 243.383,-462 243.383,-462 243.383,-456 249.383,-450 255.383,-450"/>
<text text-anchor="middle" x="425.0111" y="-458.5" font-family="Arial" font-size="15.00" fill="#222222">(*RouterInfoKeystore)</text>
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M266.6495,-598C266.6495,-598 617.1721,-598 617.1721,-598 623.1721,-598 629.1721,-604 629.1721,-610 629.1721,-610 629.1721,-725 629.1721,-725 629.1721,-731 623.1721,-737 617.1721,-737 617.1721,-737 266.6495,-737 266.6495,-737 260.6495,-737 254.6495,-731 254.6495,-725 254.6495,-725 254.6495,-610 254.6495,-610 254.6495,-604 260.6495,-598 266.6495,-598"/>
<text text-anchor="middle" x="441.9108" y="-606.5" font-family="Arial" font-size="15.00" fill="#222222">(*RouterInfoKeystore)</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl</title>
<g id="a_clust2"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M60.0344,-296C60.0344,-296 348.3578,-296 348.3578,-296 354.3578,-296 360.3578,-302 360.3578,-308 360.3578,-308 360.3578,-362 360.3578,-362 360.3578,-368 354.3578,-374 348.3578,-374 348.3578,-374 60.0344,-374 60.0344,-374 54.0344,-374 48.0344,-368 48.0344,-362 48.0344,-362 48.0344,-308 48.0344,-308 48.0344,-302 54.0344,-296 60.0344,-296"/>
<text text-anchor="middle" x="204.1961" y="-304.5" font-family="Arial" font-size="15.00" fill="#222222">(*KeyStoreImpl)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey | defined in routerinfo_keystore.go:81&#10;at routerinfo_keystore.go:84: calling [github.com/samber/oops.Errorf]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M368.409,-133C368.409,-133 274.2182,-133 274.2182,-133 268.2182,-133 262.2182,-127 262.2182,-121 262.2182,-121 262.2182,-109 262.2182,-109 262.2182,-103 268.2182,-97 274.2182,-97 274.2182,-97 368.409,-97 368.409,-97 374.409,-97 380.409,-103 380.409,-109 380.409,-109 380.409,-121 380.409,-121 380.409,-127 374.409,-133 368.409,-133"/>
<text text-anchor="middle" x="321.3136" y="-110.8" font-family="Verdana" font-size="14.00" fill="#000000">loadExistingKey</text>
</a>
</g>
</g>
<!-- github.com/samber/oops.Errorf -->
<g id="node19" class="node">
<title>github.com/samber/oops.Errorf</title>
<g id="a_node19"><a xlink:title="github.com/samber/oops.Errorf | defined in oops.go:34">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M579.3456,-233C579.3456,-233 544.955,-233 544.955,-233 538.955,-233 532.955,-227 532.955,-221 532.955,-221 532.955,-209 532.955,-209 532.955,-203 538.955,-197 544.955,-197 544.955,-197 579.3456,-197 579.3456,-197 585.3456,-197 591.3456,-203 591.3456,-209 591.3456,-209 591.3456,-221 591.3456,-221 591.3456,-227 585.3456,-233 579.3456,-233"/>
<text text-anchor="middle" x="562.1503" y="-210.8" font-family="Verdana" font-size="14.00" fill="#000000">Errorf</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge15" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge15"><a xlink:title="at routerinfo_keystore.go:84: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M364.9273,-133.1092C410.1688,-151.8944 480.2341,-180.9868 523.5347,-198.9661"/>
<polygon fill="#8b4513" stroke="#8b4513" points="522.2999,-202.243 532.8776,-202.8454 524.9843,-195.7782 522.2999,-202.243"/>
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M60.0344,-347C60.0344,-347 359.6243,-347 359.6243,-347 365.6243,-347 371.6243,-353 371.6243,-359 371.6243,-359 371.6243,-413 371.6243,-413 371.6243,-419 365.6243,-425 359.6243,-425 359.6243,-425 60.0344,-425 60.0344,-425 54.0344,-425 48.0344,-419 48.0344,-413 48.0344,-413 48.0344,-359 48.0344,-359 48.0344,-353 54.0344,-347 60.0344,-347"/>
<text text-anchor="middle" x="209.8294" y="-355.5" font-family="Arial" font-size="15.00" fill="#222222">(*KeyStoreImpl)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore -->
<g id="node2" class="node">
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore | defined in routerinfo_keystore.go:36&#10;at routerinfo_keystore.go:61: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper]&#10;at routerinfo_keystore.go:55: calling [github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey]&#10;at routerinfo_keystore.go:46: calling [github.com/go&#45;i2p/go&#45;i2p/lib/keys.generateNewKey]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M166.575,-133C166.575,-133 27.808,-133 27.808,-133 21.808,-133 15.808,-127 15.808,-121 15.808,-121 15.808,-109 15.808,-109 15.808,-103 21.808,-97 27.808,-97 27.808,-97 166.575,-97 166.575,-97 172.575,-97 178.575,-103 178.575,-109 178.575,-109 178.575,-121 178.575,-121 178.575,-127 172.575,-133 166.575,-133"/>
<text text-anchor="middle" x="97.1915" y="-110.8" font-family="Verdana" font-size="14.00" fill="#000000">NewRouterInfoKeystore</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey -->
<g id="edge8" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey</title>
<g id="a_edge8"><a xlink:title="at routerinfo_keystore.go:55: calling [github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey]">
<path fill="none" stroke="#000000" d="M178.4216,-115C202.5382,-115 228.7205,-115 252.0057,-115"/>
<polygon fill="#000000" stroke="#000000" points="252.1367,-118.5001 262.1367,-115 252.1367,-111.5001 252.1367,-118.5001"/>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore | defined in routerinfo_keystore.go:36&#10;at routerinfo_keystore.go:61: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper]&#10;at routerinfo_keystore.go:46: calling [github.com/go&#45;i2p/go&#45;i2p/lib/keys.generateNewKey]&#10;at routerinfo_keystore.go:55: calling [github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M166.575,-113C166.575,-113 27.808,-113 27.808,-113 21.808,-113 15.808,-107 15.808,-101 15.808,-101 15.808,-89 15.808,-89 15.808,-83 21.808,-77 27.808,-77 27.808,-77 166.575,-77 166.575,-77 172.575,-77 178.575,-83 178.575,-89 178.575,-89 178.575,-101 178.575,-101 178.575,-107 172.575,-113 166.575,-113"/>
<text text-anchor="middle" x="97.1915" y="-90.8" font-family="Verdana" font-size="14.00" fill="#000000">NewRouterInfoKeystore</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/keys.generateNewKey -->
<g id="node3" class="node">
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/keys.generateNewKey</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/keys.generateNewKey | defined in routerinfo_keystore.go:70">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M369.9723,-194C369.9723,-194 272.6549,-194 272.6549,-194 266.6549,-194 260.6549,-188 260.6549,-182 260.6549,-182 260.6549,-170 260.6549,-170 260.6549,-164 266.6549,-158 272.6549,-158 272.6549,-158 369.9723,-158 369.9723,-158 375.9723,-158 381.9723,-164 381.9723,-170 381.9723,-170 381.9723,-182 381.9723,-182 381.9723,-188 375.9723,-194 369.9723,-194"/>
<text text-anchor="middle" x="321.3136" y="-171.8" font-family="Verdana" font-size="14.00" fill="#000000">generateNewKey</text>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/keys.generateNewKey | defined in routerinfo_keystore.go:70">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M381.2388,-174C381.2388,-174 283.9214,-174 283.9214,-174 277.9214,-174 271.9214,-168 271.9214,-162 271.9214,-162 271.9214,-150 271.9214,-150 271.9214,-144 277.9214,-138 283.9214,-138 283.9214,-138 381.2388,-138 381.2388,-138 387.2388,-138 393.2388,-144 393.2388,-150 393.2388,-150 393.2388,-162 393.2388,-162 393.2388,-168 387.2388,-174 381.2388,-174"/>
<text text-anchor="middle" x="332.5801" y="-151.8" font-family="Verdana" font-size="14.00" fill="#000000">generateNewKey</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/keys.generateNewKey -->
<g id="edge9" class="edge">
<g id="edge15" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/keys.generateNewKey</title>
<g id="a_edge9"><a xlink:title="at routerinfo_keystore.go:46: calling [github.com/go&#45;i2p/go&#45;i2p/lib/keys.generateNewKey]">
<path fill="none" stroke="#000000" d="M163.5258,-133.0544C191.0064,-140.5339 222.9154,-149.2186 250.8184,-156.8131"/>
<polygon fill="#000000" stroke="#000000" points="249.9389,-160.201 260.5071,-159.4501 251.7773,-153.4467 249.9389,-160.201"/>
<g id="a_edge15"><a xlink:title="at routerinfo_keystore.go:46: calling [github.com/go&#45;i2p/go&#45;i2p/lib/keys.generateNewKey]">
<path fill="none" stroke="#000000" d="M166.8604,-113.0544C196.8229,-120.8191 231.7977,-129.8826 261.8743,-137.6769"/>
<polygon fill="#000000" stroke="#000000" points="261.3138,-141.1472 271.872,-140.2678 263.0698,-134.371 261.3138,-141.1472"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper -->
<g id="node17" class="node">
<g id="node3" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper</title>
<g id="a_node17"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper | defined in router_timestamper.go:55">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M631.545,-60C631.545,-60 492.7556,-60 492.7556,-60 486.7556,-60 480.7556,-54 480.7556,-48 480.7556,-48 480.7556,-36 480.7556,-36 480.7556,-30 486.7556,-24 492.7556,-24 492.7556,-24 631.545,-24 631.545,-24 637.545,-24 643.545,-30 643.545,-36 643.545,-36 643.545,-48 643.545,-48 643.545,-54 637.545,-60 631.545,-60"/>
<text text-anchor="middle" x="562.1503" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">NewRouterTimestamper</text>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper | defined in router_timestamper.go:55">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M401.9748,-52C401.9748,-52 263.1854,-52 263.1854,-52 257.1854,-52 251.1854,-46 251.1854,-40 251.1854,-40 251.1854,-28 251.1854,-28 251.1854,-22 257.1854,-16 263.1854,-16 263.1854,-16 401.9748,-16 401.9748,-16 407.9748,-16 413.9748,-22 413.9748,-28 413.9748,-28 413.9748,-40 413.9748,-40 413.9748,-46 407.9748,-52 401.9748,-52"/>
<text text-anchor="middle" x="332.5801" y="-38.2" font-family="Verdana" font-size="14.00" fill="#000000">sntp</text>
<text text-anchor="middle" x="332.5801" y="-21.4" font-family="Verdana" font-size="14.00" fill="#000000">NewRouterTimestamper</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper -->
<g id="edge5" class="edge">
<g id="edge10" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper</title>
<g id="a_edge5"><a xlink:title="at routerinfo_keystore.go:61: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper]">
<path fill="none" stroke="#8b4513" d="M178.582,-97.271C199.6359,-92.9673 222.3096,-88.5793 243.383,-85 319.6805,-72.041 406.7889,-60.5111 470.6433,-52.6608"/>
<polygon fill="#8b4513" stroke="#8b4513" points="471.1854,-56.1207 480.6866,-51.4328 470.3358,-49.1724 471.1854,-56.1207"/>
<g id="a_edge10"><a xlink:title="at routerinfo_keystore.go:61: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper]">
<path fill="none" stroke="#8b4513" d="M166.8604,-76.9456C194.0247,-69.9061 225.3088,-61.7989 253.3276,-54.538"/>
<polygon fill="#8b4513" stroke="#8b4513" points="254.2877,-57.9048 263.0899,-52.0081 252.5317,-51.1287 254.2877,-57.9048"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).StoreKeys -->
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey -->
<g id="node4" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).StoreKeys</title>
<g id="a_node4"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).StoreKeys | defined in types.go:56&#10;at types.go:65: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).KeyID]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M126.5063,-366C126.5063,-366 67.8767,-366 67.8767,-366 61.8767,-366 55.8767,-360 55.8767,-354 55.8767,-354 55.8767,-342 55.8767,-342 55.8767,-336 61.8767,-330 67.8767,-330 67.8767,-330 126.5063,-330 126.5063,-330 132.5063,-330 138.5063,-336 138.5063,-342 138.5063,-342 138.5063,-354 138.5063,-354 138.5063,-360 132.5063,-366 126.5063,-366"/>
<text text-anchor="middle" x="97.1915" y="-343.8" font-family="Verdana" font-size="14.00" fill="#000000">StoreKeys</text>
<title>github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey</title>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey | defined in routerinfo_keystore.go:81&#10;at routerinfo_keystore.go:84: calling [github.com/samber/oops.Errorf]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M379.6755,-113C379.6755,-113 285.4847,-113 285.4847,-113 279.4847,-113 273.4847,-107 273.4847,-101 273.4847,-101 273.4847,-89 273.4847,-89 273.4847,-83 279.4847,-77 285.4847,-77 285.4847,-77 379.6755,-77 379.6755,-77 385.6755,-77 391.6755,-83 391.6755,-89 391.6755,-89 391.6755,-101 391.6755,-101 391.6755,-107 385.6755,-113 379.6755,-113"/>
<text text-anchor="middle" x="332.5801" y="-90.8" font-family="Verdana" font-size="14.00" fill="#000000">loadExistingKey</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).KeyID -->
<g id="node5" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).KeyID</title>
<g id="a_node5"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).KeyID | defined in types.go:33">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M340.4021,-366C340.4021,-366 302.2251,-366 302.2251,-366 296.2251,-366 290.2251,-360 290.2251,-354 290.2251,-354 290.2251,-342 290.2251,-342 290.2251,-336 296.2251,-330 302.2251,-330 302.2251,-330 340.4021,-330 340.4021,-330 346.4021,-330 352.4021,-336 352.4021,-342 352.4021,-342 352.4021,-354 352.4021,-354 352.4021,-360 346.4021,-366 340.4021,-366"/>
<text text-anchor="middle" x="321.3136" y="-343.8" font-family="Verdana" font-size="14.00" fill="#000000">KeyID</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).StoreKeys&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).KeyID -->
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey -->
<g id="edge16" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).StoreKeys&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).KeyID</title>
<g id="a_edge16"><a xlink:title="at types.go:65: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).KeyID]">
<path fill="none" stroke="#000000" d="M138.5601,-348C178.8185,-348 239.6508,-348 279.9182,-348"/>
<polygon fill="#000000" stroke="#000000" points="279.9394,-351.5001 289.9393,-348 279.9393,-344.5001 279.9394,-351.5001"/>
<title>github.com/go&#45;i2p/go&#45;i2p/lib/keys.NewRouterInfoKeystore&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey</title>
<g id="a_edge16"><a xlink:title="at routerinfo_keystore.go:55: calling [github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey]">
<path fill="none" stroke="#000000" d="M178.5285,-95C206.0973,-95 236.6175,-95 263.1708,-95"/>
<polygon fill="#000000" stroke="#000000" points="263.5193,-98.5001 273.5192,-95 263.5192,-91.5001 263.5193,-98.5001"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo -->
<!-- github.com/samber/oops.Errorf -->
<g id="node5" class="node">
<title>github.com/samber/oops.Errorf</title>
<g id="a_node5"><a xlink:title="github.com/samber/oops.Errorf | defined in oops.go:34">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M601.8786,-52C601.8786,-52 567.488,-52 567.488,-52 561.488,-52 555.488,-46 555.488,-40 555.488,-40 555.488,-28 555.488,-28 555.488,-22 561.488,-16 567.488,-16 567.488,-16 601.8786,-16 601.8786,-16 607.8786,-16 613.8786,-22 613.8786,-28 613.8786,-28 613.8786,-40 613.8786,-40 613.8786,-46 607.8786,-52 601.8786,-52"/>
<text text-anchor="middle" x="584.6833" y="-38.2" font-family="Verdana" font-size="14.00" fill="#000000">oops</text>
<text text-anchor="middle" x="584.6833" y="-21.4" font-family="Verdana" font-size="14.00" fill="#000000">Errorf</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/keys.loadExistingKey&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge4"><a xlink:title="at routerinfo_keystore.go:84: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M391.6871,-80.6982C439.0475,-69.2387 504.1698,-53.4814 545.3431,-43.5189"/>
<polygon fill="#8b4513" stroke="#8b4513" points="546.3731,-46.8708 555.2695,-41.1171 544.7268,-40.0671 546.3731,-46.8708"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt -->
<g id="node6" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo</title>
<g id="a_node6"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo | defined in routerinfo_keystore.go:125&#10;at routerinfo_keystore.go:127: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys]&#10;at routerinfo_keystore.go:151: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate]&#10;at routerinfo_keystore.go:166: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity]&#10;at routerinfo_keystore.go:185: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.NewRouterInfo]&#10;at routerinfo_keystore.go:134: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt]&#10;at routerinfo_keystore.go:138: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt]&#10;at routerinfo_keystore.go:145: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateWithType]&#10;at routerinfo_keystore.go:129: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:136: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:140: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:147: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:153: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:162: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:173: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:194: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:156: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize]&#10;at routerinfo_keystore.go:157: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize]&#10;at routerinfo_keystore.go:177: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M379.1749,-581C379.1749,-581 263.4523,-581 263.4523,-581 257.4523,-581 251.4523,-575 251.4523,-569 251.4523,-569 251.4523,-557 251.4523,-557 251.4523,-551 257.4523,-545 263.4523,-545 263.4523,-545 379.1749,-545 379.1749,-545 385.1749,-545 391.1749,-551 391.1749,-557 391.1749,-557 391.1749,-569 391.1749,-569 391.1749,-575 385.1749,-581 379.1749,-581"/>
<text text-anchor="middle" x="321.3136" y="-558.8" font-family="Verdana" font-size="14.00" fill="#000000">ConstructRouterInfo</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys -->
<g id="node7" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys</title>
<g id="a_node7"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys | defined in routerinfo_keystore.go:91">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M586.6279,-581C586.6279,-581 537.6727,-581 537.6727,-581 531.6727,-581 525.6727,-575 525.6727,-569 525.6727,-569 525.6727,-557 525.6727,-557 525.6727,-551 531.6727,-545 537.6727,-545 537.6727,-545 586.6279,-545 586.6279,-545 592.6279,-545 598.6279,-551 598.6279,-557 598.6279,-557 598.6279,-569 598.6279,-569 598.6279,-575 592.6279,-581 586.6279,-581"/>
<text text-anchor="middle" x="562.1503" y="-558.8" font-family="Verdana" font-size="14.00" fill="#000000">GetKeys</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys -->
<g id="edge1" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys</title>
<g id="a_edge1"><a xlink:title="at routerinfo_keystore.go:127: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys]">
<path fill="none" stroke="#000000" d="M391.2971,-563C431.2409,-563 480.2213,-563 515.4818,-563"/>
<polygon fill="#000000" stroke="#000000" points="515.5008,-566.5001 525.5008,-563 515.5007,-559.5001 515.5008,-566.5001"/>
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt</title>
<g id="a_node6"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt | defined in integer.go:68">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M640.6371,-113C640.6371,-113 528.7295,-113 528.7295,-113 522.7295,-113 516.7295,-107 516.7295,-101 516.7295,-101 516.7295,-89 516.7295,-89 516.7295,-83 522.7295,-77 528.7295,-77 528.7295,-77 640.6371,-77 640.6371,-77 646.6371,-77 652.6371,-83 652.6371,-89 652.6371,-89 652.6371,-101 652.6371,-101 652.6371,-107 646.6371,-113 640.6371,-113"/>
<text text-anchor="middle" x="584.6833" y="-99.2" font-family="Verdana" font-size="14.00" fill="#000000">data</text>
<text text-anchor="middle" x="584.6833" y="-82.4" font-family="Verdana" font-size="14.00" fill="#000000">NewIntegerFromInt</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateWithType -->
<g id="node10" class="node">
<g id="node7" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateWithType</title>
<g id="a_node10"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateWithType | defined in certificate.go:252">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M633.4199,-642C633.4199,-642 490.8807,-642 490.8807,-642 484.8807,-642 478.8807,-636 478.8807,-630 478.8807,-630 478.8807,-618 478.8807,-618 478.8807,-612 484.8807,-606 490.8807,-606 490.8807,-606 633.4199,-606 633.4199,-606 639.4199,-606 645.4199,-612 645.4199,-618 645.4199,-618 645.4199,-630 645.4199,-630 645.4199,-636 639.4199,-642 633.4199,-642"/>
<text text-anchor="middle" x="562.1503" y="-619.8" font-family="Verdana" font-size="14.00" fill="#000000">NewCertificateWithType</text>
<g id="a_node7"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateWithType | defined in certificate.go:252">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M655.9529,-174C655.9529,-174 513.4137,-174 513.4137,-174 507.4137,-174 501.4137,-168 501.4137,-162 501.4137,-162 501.4137,-150 501.4137,-150 501.4137,-144 507.4137,-138 513.4137,-138 513.4137,-138 655.9529,-138 655.9529,-138 661.9529,-138 667.9529,-144 667.9529,-150 667.9529,-150 667.9529,-162 667.9529,-162 667.9529,-168 661.9529,-174 655.9529,-174"/>
<text text-anchor="middle" x="584.6833" y="-160.2" font-family="Verdana" font-size="14.00" fill="#000000">certificate</text>
<text text-anchor="middle" x="584.6833" y="-143.4" font-family="Verdana" font-size="14.00" fill="#000000">NewCertificateWithType</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate -->
<g id="node8" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate</title>
<g id="a_node8"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate | defined in key_certificate.go:395">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M670.4956,-235C670.4956,-235 498.871,-235 498.871,-235 492.871,-235 486.871,-229 486.871,-223 486.871,-223 486.871,-211 486.871,-211 486.871,-205 492.871,-199 498.871,-199 498.871,-199 670.4956,-199 670.4956,-199 676.4956,-199 682.4956,-205 682.4956,-211 682.4956,-211 682.4956,-223 682.4956,-223 682.4956,-229 676.4956,-235 670.4956,-235"/>
<text text-anchor="middle" x="584.6833" y="-221.2" font-family="Verdana" font-size="14.00" fill="#000000">key_certificate</text>
<text text-anchor="middle" x="584.6833" y="-204.4" font-family="Verdana" font-size="14.00" fill="#000000">KeyCertificateFromCertificate</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity -->
<g id="node9" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity</title>
<g id="a_node9"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity | defined in router_identity.go:55">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M638.7605,-296C638.7605,-296 530.6061,-296 530.6061,-296 524.6061,-296 518.6061,-290 518.6061,-284 518.6061,-284 518.6061,-272 518.6061,-272 518.6061,-266 524.6061,-260 530.6061,-260 530.6061,-260 638.7605,-260 638.7605,-260 644.7605,-260 650.7605,-266 650.7605,-272 650.7605,-272 650.7605,-284 650.7605,-284 650.7605,-290 644.7605,-296 638.7605,-296"/>
<text text-anchor="middle" x="584.6833" y="-282.2" font-family="Verdana" font-size="14.00" fill="#000000">router_identity</text>
<text text-anchor="middle" x="584.6833" y="-265.4" font-family="Verdana" font-size="14.00" fill="#000000">NewRouterIdentity</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.NewRouterInfo -->
<g id="node10" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.NewRouterInfo</title>
<g id="a_node10"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.NewRouterInfo | defined in router_info.go:370">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M628.5348,-357C628.5348,-357 540.8318,-357 540.8318,-357 534.8318,-357 528.8318,-351 528.8318,-345 528.8318,-345 528.8318,-333 528.8318,-333 528.8318,-327 534.8318,-321 540.8318,-321 540.8318,-321 628.5348,-321 628.5348,-321 634.5348,-321 640.5348,-327 640.5348,-333 640.5348,-333 640.5348,-345 640.5348,-345 640.5348,-351 634.5348,-357 628.5348,-357"/>
<text text-anchor="middle" x="584.6833" y="-343.2" font-family="Verdana" font-size="14.00" fill="#000000">router_info</text>
<text text-anchor="middle" x="584.6833" y="-326.4" font-family="Verdana" font-size="14.00" fill="#000000">NewRouterInfo</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).StoreKeys -->
<g id="node11" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).StoreKeys</title>
<g id="a_node11"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).StoreKeys | defined in types.go:56&#10;at types.go:65: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).KeyID]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M126.5063,-417C126.5063,-417 67.8767,-417 67.8767,-417 61.8767,-417 55.8767,-411 55.8767,-405 55.8767,-405 55.8767,-393 55.8767,-393 55.8767,-387 61.8767,-381 67.8767,-381 67.8767,-381 126.5063,-381 126.5063,-381 132.5063,-381 138.5063,-387 138.5063,-393 138.5063,-393 138.5063,-405 138.5063,-405 138.5063,-411 132.5063,-417 126.5063,-417"/>
<text text-anchor="middle" x="97.1915" y="-394.8" font-family="Verdana" font-size="14.00" fill="#000000">StoreKeys</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).KeyID -->
<g id="node12" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).KeyID</title>
<g id="a_node12"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).KeyID | defined in types.go:33">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M351.6686,-417C351.6686,-417 313.4916,-417 313.4916,-417 307.4916,-417 301.4916,-411 301.4916,-405 301.4916,-405 301.4916,-393 301.4916,-393 301.4916,-387 307.4916,-381 313.4916,-381 313.4916,-381 351.6686,-381 351.6686,-381 357.6686,-381 363.6686,-387 363.6686,-393 363.6686,-393 363.6686,-405 363.6686,-405 363.6686,-411 357.6686,-417 351.6686,-417"/>
<text text-anchor="middle" x="332.5801" y="-394.8" font-family="Verdana" font-size="14.00" fill="#000000">KeyID</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).StoreKeys&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).KeyID -->
<g id="edge6" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).StoreKeys&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).KeyID</title>
<g id="a_edge6"><a xlink:title="at types.go:65: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.KeyStoreImpl).KeyID]">
<path fill="none" stroke="#000000" d="M138.4624,-399C181.461,-399 248.436,-399 291.4006,-399"/>
<polygon fill="#000000" stroke="#000000" points="291.5116,-402.5001 301.5116,-399 291.5115,-395.5001 291.5116,-402.5001"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).StoreKeys -->
<g id="node13" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).StoreKeys</title>
<g id="a_node13"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).StoreKeys | defined in routerinfo_keystore.go:99&#10;at routerinfo_keystore.go:107: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).KeyID]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M361.8949,-729C361.8949,-729 303.2653,-729 303.2653,-729 297.2653,-729 291.2653,-723 291.2653,-717 291.2653,-717 291.2653,-705 291.2653,-705 291.2653,-699 297.2653,-693 303.2653,-693 303.2653,-693 361.8949,-693 361.8949,-693 367.8949,-693 373.8949,-699 373.8949,-705 373.8949,-705 373.8949,-717 373.8949,-717 373.8949,-723 367.8949,-729 361.8949,-729"/>
<text text-anchor="middle" x="332.5801" y="-706.8" font-family="Verdana" font-size="14.00" fill="#000000">StoreKeys</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).KeyID -->
<g id="node14" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).KeyID</title>
<g id="a_node14"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).KeyID | defined in routerinfo_keystore.go:111">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M603.7718,-729C603.7718,-729 565.5948,-729 565.5948,-729 559.5948,-729 553.5948,-723 553.5948,-717 553.5948,-717 553.5948,-705 553.5948,-705 553.5948,-699 559.5948,-693 565.5948,-693 565.5948,-693 603.7718,-693 603.7718,-693 609.7718,-693 615.7718,-699 615.7718,-705 615.7718,-705 615.7718,-717 615.7718,-717 615.7718,-723 609.7718,-729 603.7718,-729"/>
<text text-anchor="middle" x="584.6833" y="-706.8" font-family="Verdana" font-size="14.00" fill="#000000">KeyID</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).StoreKeys&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).KeyID -->
<g id="edge3" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).StoreKeys&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).KeyID</title>
<g id="a_edge3"><a xlink:title="at routerinfo_keystore.go:107: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).KeyID]">
<path fill="none" stroke="#000000" d="M373.9275,-711C420.6798,-711 496.3667,-711 543.1822,-711"/>
<polygon fill="#000000" stroke="#000000" points="543.2839,-714.5001 553.2838,-711 543.2838,-707.5001 543.2839,-714.5001"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo -->
<g id="node15" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo</title>
<g id="a_node15"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo | defined in routerinfo_keystore.go:125&#10;at routerinfo_keystore.go:127: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys]&#10;at routerinfo_keystore.go:129: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:136: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:140: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:147: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:153: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:162: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:173: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:194: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:185: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.NewRouterInfo]&#10;at routerinfo_keystore.go:145: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateWithType]&#10;at routerinfo_keystore.go:166: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity]&#10;at routerinfo_keystore.go:157: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize]&#10;at routerinfo_keystore.go:151: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate]&#10;at routerinfo_keystore.go:134: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt]&#10;at routerinfo_keystore.go:138: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt]&#10;at routerinfo_keystore.go:156: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize]&#10;at routerinfo_keystore.go:177: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M390.4414,-668C390.4414,-668 274.7188,-668 274.7188,-668 268.7188,-668 262.7188,-662 262.7188,-656 262.7188,-656 262.7188,-644 262.7188,-644 262.7188,-638 268.7188,-632 274.7188,-632 274.7188,-632 390.4414,-632 390.4414,-632 396.4414,-632 402.4414,-638 402.4414,-644 402.4414,-644 402.4414,-656 402.4414,-656 402.4414,-662 396.4414,-668 390.4414,-668"/>
<text text-anchor="middle" x="332.5801" y="-645.8" font-family="Verdana" font-size="14.00" fill="#000000">ConstructRouterInfo</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge2" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge2"><a xlink:title="at routerinfo_keystore.go:129: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:136: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:140: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:147: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:153: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:162: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:173: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:194: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M340.8224,-631.974C357.3427,-595.0726 394.565,-507.912 413.7772,-431 453.9757,-270.074 366.7231,-179.4557 486.7772,-65 502.6013,-49.9138 525.7299,-42.1675 545.5344,-38.1909"/>
<polygon fill="#8b4513" stroke="#8b4513" points="546.2873,-41.6123 555.5316,-36.4361 545.077,-34.7177 546.2873,-41.6123"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt -->
<g id="edge12" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt</title>
<g id="a_edge12"><a xlink:title="at routerinfo_keystore.go:134: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt]&#10;at routerinfo_keystore.go:138: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt]">
<path fill="none" stroke="#8b4513" d="M340.5424,-631.9008C356.5529,-594.8661 392.894,-507.4752 413.7772,-431 450.4946,-296.5389 386.6461,-222.9624 486.7772,-126 492.8071,-120.1609 499.9302,-115.4211 507.5407,-111.5736"/>
<polygon fill="#8b4513" stroke="#8b4513" points="508.9888,-114.7601 516.6622,-107.4546 506.1079,-108.3804 508.9888,-114.7601"/>
</a>
</g>
</g>
@ -250,170 +264,110 @@
<g id="edge7" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateWithType</title>
<g id="a_edge7"><a xlink:title="at routerinfo_keystore.go:145: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/certificate.NewCertificateWithType]">
<path fill="none" stroke="#8b4513" d="M391.2971,-580.7257C419.3719,-587.8366 451.9109,-596.0782 481.0125,-603.4491"/>
<polygon fill="#8b4513" stroke="#8b4513" points="480.1853,-606.8501 490.7386,-605.9126 481.9041,-600.0643 480.1853,-606.8501"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt -->
<g id="node11" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt</title>
<g id="a_node11"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt | defined in integer.go:68">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M618.1041,-729C618.1041,-729 506.1965,-729 506.1965,-729 500.1965,-729 494.1965,-723 494.1965,-717 494.1965,-717 494.1965,-705 494.1965,-705 494.1965,-699 500.1965,-693 506.1965,-693 506.1965,-693 618.1041,-693 618.1041,-693 624.1041,-693 630.1041,-699 630.1041,-705 630.1041,-705 630.1041,-717 630.1041,-717 630.1041,-723 624.1041,-729 618.1041,-729"/>
<text text-anchor="middle" x="562.1503" y="-706.8" font-family="Verdana" font-size="14.00" fill="#000000">NewIntegerFromInt</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt -->
<g id="edge6" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt</title>
<g id="a_edge6"><a xlink:title="at routerinfo_keystore.go:134: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt]&#10;at routerinfo_keystore.go:138: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/data.NewIntegerFromInt]">
<path fill="none" stroke="#8b4513" d="M336.7834,-581.3919C360.0168,-607.8264 406.5267,-656.3096 456.2442,-683 464.9784,-687.6889 474.5465,-691.6292 484.2469,-694.9313"/>
<polygon fill="#8b4513" stroke="#8b4513" points="483.3747,-698.3267 493.9652,-698.0248 485.498,-691.6565 483.3747,-698.3267"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate -->
<g id="node12" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate</title>
<g id="a_node12"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate | defined in key_certificate.go:395">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M647.9626,-972C647.9626,-972 476.338,-972 476.338,-972 470.338,-972 464.338,-966 464.338,-960 464.338,-960 464.338,-948 464.338,-948 464.338,-942 470.338,-936 476.338,-936 476.338,-936 647.9626,-936 647.9626,-936 653.9626,-936 659.9626,-942 659.9626,-948 659.9626,-948 659.9626,-960 659.9626,-960 659.9626,-966 653.9626,-972 647.9626,-972"/>
<text text-anchor="middle" x="562.1503" y="-949.8" font-family="Verdana" font-size="14.00" fill="#000000">KeyCertificateFromCertificate</text>
<path fill="none" stroke="#8b4513" d="M339.7144,-631.9698C354.36,-594.704 388.5591,-506.371 413.7772,-431 449.6932,-323.6553 407.3775,-267.6754 486.7772,-187 489.4348,-184.2997 492.3258,-181.8341 495.3931,-179.5828"/>
<polygon fill="#8b4513" stroke="#8b4513" points="497.3754,-182.4692 503.8852,-174.1102 493.5835,-176.5852 497.3754,-182.4692"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate -->
<g id="edge2" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate</title>
<g id="a_edge2"><a xlink:title="at routerinfo_keystore.go:151: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate]">
<path fill="none" stroke="#8b4513" d="M322.4636,-581.2135C327.197,-640.2585 350.3126,-828.1499 456.2442,-925 458.4206,-926.9898 460.7206,-928.845 463.1214,-930.5746"/>
<polygon fill="#8b4513" stroke="#8b4513" points="461.3213,-933.5776 471.6391,-935.9845 465.0743,-927.6686 461.3213,-933.5776"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize -->
<g id="node13" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize</title>
<g id="a_node13"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize | defined in key_certificate.go:336">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M593.6405,-911C593.6405,-911 530.6601,-911 530.6601,-911 524.6601,-911 518.6601,-905 518.6601,-899 518.6601,-899 518.6601,-887 518.6601,-887 518.6601,-881 524.6601,-875 530.6601,-875 530.6601,-875 593.6405,-875 593.6405,-875 599.6405,-875 605.6405,-881 605.6405,-887 605.6405,-887 605.6405,-899 605.6405,-899 605.6405,-905 599.6405,-911 593.6405,-911"/>
<text text-anchor="middle" x="562.1503" y="-888.8" font-family="Verdana" font-size="14.00" fill="#000000">CryptoSize</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize -->
<g id="edge11" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize</title>
<g id="a_edge11"><a xlink:title="at routerinfo_keystore.go:156: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize]">
<path fill="none" stroke="#8b4513" d="M324.0872,-581.3603C332.9772,-633.6863 365.6743,-784.8234 456.2442,-863 470.7692,-875.5374 490.192,-882.8551 508.4362,-887.1189"/>
<polygon fill="#8b4513" stroke="#8b4513" points="507.9098,-890.5841 518.4121,-889.1872 509.3309,-883.7299 507.9098,-890.5841"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize -->
<g id="node14" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize</title>
<g id="a_node14"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize | defined in key_certificate.go:308">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M600.9066,-850C600.9066,-850 523.394,-850 523.394,-850 517.394,-850 511.394,-844 511.394,-838 511.394,-838 511.394,-826 511.394,-826 511.394,-820 517.394,-814 523.394,-814 523.394,-814 600.9066,-814 600.9066,-814 606.9066,-814 612.9066,-820 612.9066,-826 612.9066,-826 612.9066,-838 612.9066,-838 612.9066,-844 606.9066,-850 600.9066,-850"/>
<text text-anchor="middle" x="562.1503" y="-827.8" font-family="Verdana" font-size="14.00" fill="#000000">SignatureSize</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize -->
<g id="edge12" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize</title>
<g id="a_edge12"><a xlink:title="at routerinfo_keystore.go:157: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize]">
<path fill="none" stroke="#8b4513" d="M329.4852,-581.0376C347.6673,-619.6179 394.7587,-711.3991 456.2442,-770 472.6871,-785.6715 493.803,-799.0432 512.8476,-809.3126"/>
<polygon fill="#8b4513" stroke="#8b4513" points="511.2307,-812.4167 521.7133,-813.9551 514.478,-806.2155 511.2307,-812.4167"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity -->
<g id="node15" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity</title>
<g id="a_node15"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity | defined in router_identity.go:55">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M616.2275,-320C616.2275,-320 508.0731,-320 508.0731,-320 502.0731,-320 496.0731,-314 496.0731,-308 496.0731,-308 496.0731,-296 496.0731,-296 496.0731,-290 502.0731,-284 508.0731,-284 508.0731,-284 616.2275,-284 616.2275,-284 622.2275,-284 628.2275,-290 628.2275,-296 628.2275,-296 628.2275,-308 628.2275,-308 628.2275,-314 622.2275,-320 616.2275,-320"/>
<text text-anchor="middle" x="562.1503" y="-297.8" font-family="Verdana" font-size="14.00" fill="#000000">NewRouterIdentity</text>
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate</title>
<g id="a_edge11"><a xlink:title="at routerinfo_keystore.go:151: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificateFromCertificate]">
<path fill="none" stroke="#8b4513" d="M339.3248,-631.7781C368.0663,-554.2094 479.2026,-255.1359 486.7772,-248 489.7579,-245.1919 492.992,-242.6381 496.4098,-240.3157"/>
<polygon fill="#8b4513" stroke="#8b4513" points="498.4764,-243.1572 505.2447,-235.006 494.8705,-237.1573 498.4764,-243.1572"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity -->
<g id="edge3" class="edge">
<g id="edge8" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity</title>
<g id="a_edge3"><a xlink:title="at routerinfo_keystore.go:166: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity]">
<path fill="none" stroke="#8b4513" d="M376.1419,-544.8743C381.6893,-541.5261 386.8772,-537.5978 391.2442,-533 448.6705,-472.5392 401.0856,-419.5365 456.2442,-357 468.1587,-343.4919 484.1948,-332.8154 500.179,-324.6052"/>
<polygon fill="#8b4513" stroke="#8b4513" points="502.0861,-327.5701 509.5528,-320.0534 499.0284,-321.2732 502.0861,-327.5701"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.NewRouterInfo -->
<g id="node16" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.NewRouterInfo</title>
<g id="a_node16"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.NewRouterInfo | defined in router_info.go:370">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M606.0018,-407C606.0018,-407 518.2988,-407 518.2988,-407 512.2988,-407 506.2988,-401 506.2988,-395 506.2988,-395 506.2988,-383 506.2988,-383 506.2988,-377 512.2988,-371 518.2988,-371 518.2988,-371 606.0018,-371 606.0018,-371 612.0018,-371 618.0018,-377 618.0018,-383 618.0018,-383 618.0018,-395 618.0018,-395 618.0018,-401 612.0018,-407 606.0018,-407"/>
<text text-anchor="middle" x="562.1503" y="-384.8" font-family="Verdana" font-size="14.00" fill="#000000">NewRouterInfo</text>
<g id="a_edge8"><a xlink:title="at routerinfo_keystore.go:166: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_identity.NewRouterIdentity]">
<path fill="none" stroke="#8b4513" d="M338.5426,-631.9132C359.8653,-568.2129 433.877,-355.5958 486.7772,-309 493.3874,-303.1776 501.0927,-298.4479 509.2244,-294.6061"/>
<polygon fill="#8b4513" stroke="#8b4513" points="510.7213,-297.7728 518.5508,-290.6348 507.9789,-291.3324 510.7213,-297.7728"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.NewRouterInfo -->
<g id="edge4" class="edge">
<g id="edge5" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.NewRouterInfo</title>
<g id="a_edge4"><a xlink:title="at routerinfo_keystore.go:185: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.NewRouterInfo]">
<path fill="none" stroke="#8b4513" d="M372.4368,-544.9314C379.0918,-541.4935 385.5609,-537.527 391.2442,-533 429.5572,-502.4824 419.0822,-475.9092 456.2442,-444 471.2309,-431.1317 489.7446,-420.2196 507.0792,-411.5916"/>
<polygon fill="#8b4513" stroke="#8b4513" points="509.0618,-414.5221 516.5584,-407.0353 506.0292,-408.213 509.0618,-414.5221"/>
<g id="a_edge5"><a xlink:title="at routerinfo_keystore.go:185: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.NewRouterInfo]">
<path fill="none" stroke="#8b4513" d="M336.7024,-631.6348C349.2815,-580.0653 392.2195,-433.0101 486.7772,-361 496.1976,-353.8259 507.5173,-348.9105 519.0637,-345.5601"/>
<polygon fill="#8b4513" stroke="#8b4513" points="519.9452,-348.9474 528.7793,-343.0986 518.226,-342.1618 519.9452,-348.9474"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys -->
<g id="node16" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys</title>
<g id="a_node16"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys | defined in routerinfo_keystore.go:91">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M609.1609,-668C609.1609,-668 560.2057,-668 560.2057,-668 554.2057,-668 548.2057,-662 548.2057,-656 548.2057,-656 548.2057,-644 548.2057,-644 548.2057,-638 554.2057,-632 560.2057,-632 560.2057,-632 609.1609,-632 609.1609,-632 615.1609,-632 621.1609,-638 621.1609,-644 621.1609,-644 621.1609,-656 621.1609,-656 621.1609,-662 615.1609,-668 609.1609,-668"/>
<text text-anchor="middle" x="584.6833" y="-645.8" font-family="Verdana" font-size="14.00" fill="#000000">GetKeys</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys -->
<g id="edge1" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys</title>
<g id="a_edge1"><a xlink:title="at routerinfo_keystore.go:127: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).GetKeys]">
<path fill="none" stroke="#000000" d="M402.4701,-650C445.626,-650 499.8217,-650 537.8465,-650"/>
<polygon fill="#000000" stroke="#000000" points="538.1201,-653.5001 548.1201,-650 538.12,-646.5001 538.1201,-653.5001"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime -->
<g id="node18" class="node">
<g id="node17" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime</title>
<g id="a_node18"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime | defined in router_timestamper.go:397">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M608.1745,-138C608.1745,-138 516.1261,-138 516.1261,-138 510.1261,-138 504.1261,-132 504.1261,-126 504.1261,-126 504.1261,-114 504.1261,-114 504.1261,-108 510.1261,-102 516.1261,-102 516.1261,-102 608.1745,-102 608.1745,-102 614.1745,-102 620.1745,-108 620.1745,-114 620.1745,-114 620.1745,-126 620.1745,-126 620.1745,-132 614.1745,-138 608.1745,-138"/>
<text text-anchor="middle" x="562.1503" y="-115.8" font-family="Verdana" font-size="14.00" fill="#000000">GetCurrentTime</text>
<g id="a_node17"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime | defined in router_timestamper.go:397">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M630.7075,-435C630.7075,-435 538.6591,-435 538.6591,-435 532.6591,-435 526.6591,-429 526.6591,-423 526.6591,-423 526.6591,-411 526.6591,-411 526.6591,-405 532.6591,-399 538.6591,-399 538.6591,-399 630.7075,-399 630.7075,-399 636.7075,-399 642.7075,-405 642.7075,-411 642.7075,-411 642.7075,-423 642.7075,-423 642.7075,-429 636.7075,-435 630.7075,-435"/>
<text text-anchor="middle" x="584.6833" y="-421.2" font-family="Verdana" font-size="14.00" fill="#000000">sntp</text>
<text text-anchor="middle" x="584.6833" y="-404.4" font-family="Verdana" font-size="14.00" fill="#000000">GetCurrentTime</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime -->
<g id="edge13" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime</title>
<g id="a_edge13"><a xlink:title="at routerinfo_keystore.go:177: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime]">
<path fill="none" stroke="#8b4513" d="M378.0275,-544.975C383.022,-541.6272 387.5671,-537.6712 391.2442,-533 440.175,-470.8405 410.2383,-247.3544 456.2442,-183 468.4284,-165.9565 486.7885,-152.7334 504.8166,-142.9019"/>
<polygon fill="#8b4513" stroke="#8b4513" points="506.8997,-145.7654 514.1793,-138.0676 503.6881,-139.5456 506.8997,-145.7654"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge10" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge10"><a xlink:title="at routerinfo_keystore.go:129: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:136: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:140: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:147: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:153: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:162: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:173: calling [github.com/samber/oops.Errorf]&#10;at routerinfo_keystore.go:194: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M377.3421,-544.9096C382.5336,-541.5689 387.3111,-537.6325 391.2442,-533 469.1721,-441.2132 381.7526,-364.5969 456.2442,-270 472.9923,-248.7316 500.2338,-234.8459 522.8938,-226.3474"/>
<polygon fill="#8b4513" stroke="#8b4513" points="524.3378,-229.5494 532.6038,-222.9219 522.009,-222.9482 524.3378,-229.5494"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).StoreKeys -->
<g id="node8" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).StoreKeys</title>
<g id="a_node8"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).StoreKeys | defined in routerinfo_keystore.go:99&#10;at routerinfo_keystore.go:107: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).KeyID]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M350.6284,-520C350.6284,-520 291.9988,-520 291.9988,-520 285.9988,-520 279.9988,-514 279.9988,-508 279.9988,-508 279.9988,-496 279.9988,-496 279.9988,-490 285.9988,-484 291.9988,-484 291.9988,-484 350.6284,-484 350.6284,-484 356.6284,-484 362.6284,-490 362.6284,-496 362.6284,-496 362.6284,-508 362.6284,-508 362.6284,-514 356.6284,-520 350.6284,-520"/>
<text text-anchor="middle" x="321.3136" y="-497.8" font-family="Verdana" font-size="14.00" fill="#000000">StoreKeys</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).KeyID -->
<g id="node9" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).KeyID</title>
<g id="a_node9"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).KeyID | defined in routerinfo_keystore.go:111">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M581.2388,-520C581.2388,-520 543.0618,-520 543.0618,-520 537.0618,-520 531.0618,-514 531.0618,-508 531.0618,-508 531.0618,-496 531.0618,-496 531.0618,-490 537.0618,-484 543.0618,-484 543.0618,-484 581.2388,-484 581.2388,-484 587.2388,-484 593.2388,-490 593.2388,-496 593.2388,-496 593.2388,-508 593.2388,-508 593.2388,-514 587.2388,-520 581.2388,-520"/>
<text text-anchor="middle" x="562.1503" y="-497.8" font-family="Verdana" font-size="14.00" fill="#000000">KeyID</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).StoreKeys&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).KeyID -->
<g id="edge14" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).StoreKeys&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).KeyID</title>
<g id="a_edge14"><a xlink:title="at routerinfo_keystore.go:107: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).KeyID]">
<path fill="none" stroke="#000000" d="M362.7149,-502C406.9153,-502 476.5456,-502 520.7468,-502"/>
<polygon fill="#000000" stroke="#000000" points="520.861,-505.5001 530.861,-502 520.8609,-498.5001 520.861,-505.5001"/>
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime</title>
<g id="a_edge14"><a xlink:title="at routerinfo_keystore.go:177: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime]">
<path fill="none" stroke="#8b4513" d="M341.0985,-631.8057C360.8147,-591.713 413.5611,-495.3295 486.7772,-445 495.8122,-438.7893 506.2153,-433.9444 516.7935,-430.1682"/>
<polygon fill="#8b4513" stroke="#8b4513" points="518.1029,-433.4226 526.5231,-426.9922 515.9306,-426.7682 518.1029,-433.4226"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize -->
<g id="node18" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize</title>
<g id="a_node18"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize | defined in key_certificate.go:336">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M626.3546,-521C626.3546,-521 543.012,-521 543.012,-521 537.012,-521 531.012,-515 531.012,-509 531.012,-509 531.012,-497 531.012,-497 531.012,-491 537.012,-485 543.012,-485 543.012,-485 626.3546,-485 626.3546,-485 632.3546,-485 638.3546,-491 638.3546,-497 638.3546,-497 638.3546,-509 638.3546,-509 638.3546,-515 632.3546,-521 626.3546,-521"/>
<text text-anchor="middle" x="584.6833" y="-507.2" font-family="Verdana" font-size="14.00" fill="#000000">key_certificate</text>
<text text-anchor="middle" x="584.6833" y="-490.4" font-family="Verdana" font-size="14.00" fill="#000000">CryptoSize</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize -->
<g id="edge13" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize</title>
<g id="a_edge13"><a xlink:title="at routerinfo_keystore.go:156: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).CryptoSize]">
<path fill="none" stroke="#8b4513" d="M352.0391,-631.8627C379.9286,-606.7254 433.7711,-561.3133 486.7772,-534 497.5495,-528.4492 509.5032,-523.6606 521.2517,-519.6209"/>
<polygon fill="#8b4513" stroke="#8b4513" points="522.6344,-522.8507 531.0416,-516.4033 520.4487,-516.2006 522.6344,-522.8507"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize -->
<g id="node19" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize</title>
<g id="a_node19"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize | defined in key_certificate.go:308">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M626.3546,-582C626.3546,-582 543.012,-582 543.012,-582 537.012,-582 531.012,-576 531.012,-570 531.012,-570 531.012,-558 531.012,-558 531.012,-552 537.012,-546 543.012,-546 543.012,-546 626.3546,-546 626.3546,-546 632.3546,-546 638.3546,-552 638.3546,-558 638.3546,-558 638.3546,-570 638.3546,-570 638.3546,-576 632.3546,-582 626.3546,-582"/>
<text text-anchor="middle" x="584.6833" y="-568.2" font-family="Verdana" font-size="14.00" fill="#000000">key_certificate</text>
<text text-anchor="middle" x="584.6833" y="-551.4" font-family="Verdana" font-size="14.00" fill="#000000">SignatureSize</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize -->
<g id="edge9" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/keys.RouterInfoKeystore).ConstructRouterInfo&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize</title>
<g id="a_edge9"><a xlink:title="at routerinfo_keystore.go:157: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/key_certificate.KeyCertificate).SignatureSize]">
<path fill="none" stroke="#8b4513" d="M377.778,-631.8922C408.3304,-619.9262 449.7078,-604.2499 486.7772,-592 497.9243,-588.3163 509.8762,-584.6597 521.4653,-581.2639"/>
<polygon fill="#8b4513" stroke="#8b4513" points="522.4569,-584.6206 531.0892,-578.4779 520.5103,-577.8967 522.4569,-584.6206"/>
</a>
</g>
</g>

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 37 KiB

View File

@ -2,193 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/netdb"
## Usage
```go
const CacheFileName = "sizecache.txt"
```
name of file to hold precomputed size of netdb
#### type Entry
```go
type Entry struct {
*router_info.RouterInfo
*lease_set.LeaseSet
}
```
netdb entry wraps a router info and provides serialization
#### func (*Entry) ReadFrom
```go
func (e *Entry) ReadFrom(r io.Reader) (err error)
```
#### func (*Entry) WriteTo
```go
func (e *Entry) WriteTo(w io.Writer) (err error)
```
#### type NetworkDatabase
```go
type NetworkDatabase interface {
// obtain a RouterInfo by its hash locally
// return a RouterInfo if we found it locally
// return nil if the RouterInfo cannot be found locally
GetRouterInfo(hash common.Hash) router_info.RouterInfo
// store a router info locally
StoreRouterInfo(ri router_info.RouterInfo)
// try obtaining more peers with a bootstrap instance until we get minRouters number of router infos
// returns error if bootstrap.GetPeers returns an error otherwise returns nil
Reseed(b bootstrap.Bootstrap, minRouters int) error
// return how many router infos we have
Size() int
// Recaculate size of netdb from backend
RecalculateSize() error
// ensure underlying resources exist , i.e. directories, files, configs
Ensure() error
}
```
i2p network database, storage of i2p RouterInfos
#### type Resolver
```go
type Resolver interface {
// resolve a router info by hash
// return a chan that yields the found RouterInfo or nil if it could not be found after timeout
Lookup(hash common.Hash, timeout time.Duration) chan router_info.RouterInfo
}
```
resolves unknown RouterInfos given the hash of their RouterIdentity
#### func KademliaResolver
```go
func KademliaResolver(netDb NetworkDatabase, pool *tunnel.Pool) (r Resolver)
```
create a new resolver that stores result into a NetworkDatabase and uses a
tunnel pool for the lookup
#### type StdNetDB
```go
type StdNetDB struct {
DB string
RouterInfos map[common.Hash]Entry
LeaseSets map[common.Hash]Entry
}
```
standard network database implementation using local filesystem skiplist
#### func NewStdNetDB
```go
func NewStdNetDB(db string) StdNetDB
```
#### func (*StdNetDB) CheckFilePathValid
```go
func (db *StdNetDB) CheckFilePathValid(fpath string) bool
```
#### func (*StdNetDB) Create
```go
func (db *StdNetDB) Create() (err error)
```
create base network database directory
#### func (*StdNetDB) Ensure
```go
func (db *StdNetDB) Ensure() (err error)
```
ensure that the network database exists
#### func (*StdNetDB) Exists
```go
func (db *StdNetDB) Exists() bool
```
return true if the network db directory exists and is writable
#### func (*StdNetDB) GetRouterInfo
```go
func (db *StdNetDB) GetRouterInfo(hash common.Hash) (chnl chan router_info.RouterInfo)
```
#### func (*StdNetDB) Path
```go
func (db *StdNetDB) Path() string
```
get netdb path
#### func (*StdNetDB) RecalculateSize
```go
func (db *StdNetDB) RecalculateSize() (err error)
```
recalculateSize recalculates cached size of netdb
#### func (*StdNetDB) Reseed
```go
func (db *StdNetDB) Reseed(b bootstrap.Bootstrap, minRouters int) (err error)
```
reseed if we have less than minRouters known routers returns error if reseed
failed
#### func (*StdNetDB) Save
```go
func (db *StdNetDB) Save() (err error)
```
#### func (*StdNetDB) SaveEntry
```go
func (db *StdNetDB) SaveEntry(e *Entry) (err error)
```
#### func (*StdNetDB) Size
```go
func (db *StdNetDB) Size() (routers int)
```
return how many routers we know about in our network database
#### func (*StdNetDB) SkiplistFile
```go
func (db *StdNetDB) SkiplistFile(hash common.Hash) (fpath string)
```
get the skiplist file that a RouterInfo with this hash would go in
# netdb
--
import "github.com/go-i2p/go-i2p/lib/netdb"
![netdb.svg](netdb)
## Usage
```go

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 79 KiB

View File

@ -2,38 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/netdb/reseed"
## Usage
```go
const (
I2pUserAgent = "Wget/1.11.4"
)
```
#### type Reseed
```go
type Reseed struct {
net.Dialer
}
```
#### func (Reseed) SingleReseed
```go
func (r Reseed) SingleReseed(uri string) ([]router_info.RouterInfo, error)
```
# reseed
--
import "github.com/go-i2p/go-i2p/lib/netdb/reseed"
![reseed.svg](reseed)
## Usage
```go

View File

@ -4,146 +4,83 @@
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="342pt" height="1242pt"
viewBox="0.00 0.00 342.39 1242.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 1242)">
<svg width="334pt" height="1052pt"
viewBox="0.00 0.00 334.39 1052.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 1052)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-1242 342.3928,-1242 342.3928,0 0,0"/>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-1052 334.3928,-1052 334.3928,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-1234 334.3928,-1234 334.3928,-8 8,-8"/>
<text text-anchor="middle" x="171.1964" y="-1213.8" font-family="Arial" font-size="18.00" fill="#000000">reseed</text>
</g>
<g id="clust11" class="cluster">
<title>cluster_github.com/sirupsen/logrus</title>
<g id="a_clust11"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="package: github.com/sirupsen/logrus">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="210.7406,-927 210.7406,-1109 304.8556,-1109 304.8556,-927 210.7406,-927"/>
<text text-anchor="middle" x="257.7981" y="-1090.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logrus</text>
</a>
</g>
</g>
<g id="clust12" class="cluster">
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust12"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M230.7406,-935C230.7406,-935 284.8556,-935 284.8556,-935 290.8556,-935 296.8556,-941 296.8556,-947 296.8556,-947 296.8556,-1062 296.8556,-1062 296.8556,-1068 290.8556,-1074 284.8556,-1074 284.8556,-1074 230.7406,-1074 230.7406,-1074 224.7406,-1074 218.7406,-1068 218.7406,-1062 218.7406,-1062 218.7406,-947 218.7406,-947 218.7406,-941 224.7406,-935 230.7406,-935"/>
<text text-anchor="middle" x="257.7981" y="-943.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust10" class="cluster">
<title>cluster_github.com/samber/oops</title>
<g id="a_clust10"><a xlink:href="/?f=github.com/samber/oops" xlink:title="package: github.com/samber/oops">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="220.7006,-840 220.7006,-919 294.8956,-919 294.8956,-840 220.7006,-840"/>
<text text-anchor="middle" x="257.7981" y="-900.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">oops</text>
</a>
</g>
</g>
<g id="clust8" class="cluster">
<title>cluster_github.com/go&#45;i2p/logger</title>
<g id="a_clust8"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="package: github.com/go&#45;i2p/logger">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="189.2034,-250 189.2034,-659 326.3928,-659 326.3928,-250 189.2034,-250"/>
<text text-anchor="middle" x="257.7981" y="-640.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logger</text>
</a>
</g>
</g>
<g id="clust9" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust9"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M218.6887,-302C218.6887,-302 296.9075,-302 296.9075,-302 302.9075,-302 308.9075,-308 308.9075,-314 308.9075,-314 308.9075,-612 308.9075,-612 308.9075,-618 302.9075,-624 296.9075,-624 296.9075,-624 218.6887,-624 218.6887,-624 212.6887,-624 206.6887,-618 206.6887,-612 206.6887,-612 206.6887,-314 206.6887,-314 206.6887,-308 212.6887,-302 218.6887,-302"/>
<text text-anchor="middle" x="257.7981" y="-310.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-1044 326.3928,-1044 326.3928,-8 8,-8"/>
<text text-anchor="middle" x="167.1964" y="-1023.8" font-family="Arial" font-size="18.00" fill="#000000">reseed</text>
</g>
<g id="clust6" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/su3</title>
<g id="a_clust6"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/su3" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/su3">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="202.9713,-16 202.9713,-242 312.6249,-242 312.6249,-16 202.9713,-16"/>
<text text-anchor="middle" x="257.7981" y="-223.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">su3</text>
</a>
</g>
</g>
<g id="clust7" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3</title>
<g id="a_clust7"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/su3" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M222.9713,-68C222.9713,-68 292.6249,-68 292.6249,-68 298.6249,-68 304.6249,-74 304.6249,-80 304.6249,-80 304.6249,-195 304.6249,-195 304.6249,-201 298.6249,-207 292.6249,-207 292.6249,-207 222.9713,-207 222.9713,-207 216.9713,-207 210.9713,-201 210.9713,-195 210.9713,-195 210.9713,-80 210.9713,-80 210.9713,-74 216.9713,-68 222.9713,-68"/>
<text text-anchor="middle" x="257.7981" y="-76.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*SU3)</text>
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed</title>
<g id="a_clust6"><a xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M28,-481C28,-481 120.2034,-481 120.2034,-481 126.2034,-481 132.2034,-487 132.2034,-493 132.2034,-493 132.2034,-547 132.2034,-547 132.2034,-553 126.2034,-559 120.2034,-559 120.2034,-559 28,-559 28,-559 22,-559 16,-553 16,-547 16,-547 16,-493 16,-493 16,-487 22,-481 28,-481"/>
<text text-anchor="middle" x="74.1017" y="-489.5" font-family="Arial" font-size="15.00" fill="#222222">(Reseed)</text>
</a>
</g>
</g>
<g id="clust5" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed</title>
<g id="a_clust5"><a xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M28,-515C28,-515 120.2034,-515 120.2034,-515 126.2034,-515 132.2034,-521 132.2034,-527 132.2034,-527 132.2034,-581 132.2034,-581 132.2034,-587 126.2034,-593 120.2034,-593 120.2034,-593 28,-593 28,-593 22,-593 16,-587 16,-581 16,-581 16,-527 16,-527 16,-521 22,-515 28,-515"/>
<text text-anchor="middle" x="74.1017" y="-523.5" font-family="Arial" font-size="15.00" fill="#222222">(Reseed)</text>
<title>cluster_github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip</title>
<g id="a_clust5"><a xlink:title="type: github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M229.5863,-928C229.5863,-928 286.0099,-928 286.0099,-928 292.0099,-928 298.0099,-934 298.0099,-940 298.0099,-940 298.0099,-994 298.0099,-994 298.0099,-1000 292.0099,-1006 286.0099,-1006 286.0099,-1006 229.5863,-1006 229.5863,-1006 223.5863,-1006 217.5863,-1000 217.5863,-994 217.5863,-994 217.5863,-940 217.5863,-940 217.5863,-934 223.5863,-928 229.5863,-928"/>
<text text-anchor="middle" x="257.7981" y="-936.5" font-family="Arial" font-size="15.00" fill="#222222">(Unzip)</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/router_info" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="192.7034,-1117 192.7034,-1196 322.8928,-1196 322.8928,-1117 192.7034,-1117"/>
<text text-anchor="middle" x="257.7981" y="-1177.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">router_info</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/eyedeekay/go&#45;unzip/pkg/unzip</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/eyedeekay/go-unzip/pkg/unzip" xlink:title="package: github.com/eyedeekay/go&#45;unzip/pkg/unzip">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="209.5863,-667 209.5863,-832 306.0099,-832 306.0099,-667 209.5863,-667"/>
<text text-anchor="middle" x="257.7981" y="-813.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">unzip</text>
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust4"><a xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M230.7406,-781C230.7406,-781 284.8556,-781 284.8556,-781 290.8556,-781 296.8556,-787 296.8556,-793 296.8556,-793 296.8556,-908 296.8556,-908 296.8556,-914 290.8556,-920 284.8556,-920 284.8556,-920 230.7406,-920 230.7406,-920 224.7406,-920 218.7406,-914 218.7406,-908 218.7406,-908 218.7406,-793 218.7406,-793 218.7406,-787 224.7406,-781 230.7406,-781"/>
<text text-anchor="middle" x="257.7981" y="-789.5" font-family="Arial" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/eyedeekay/go-unzip/pkg/unzip" xlink:title="type: github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M229.5863,-719C229.5863,-719 286.0099,-719 286.0099,-719 292.0099,-719 298.0099,-725 298.0099,-731 298.0099,-731 298.0099,-785 298.0099,-785 298.0099,-791 292.0099,-797 286.0099,-797 286.0099,-797 229.5863,-797 229.5863,-797 223.5863,-797 217.5863,-791 217.5863,-785 217.5863,-785 217.5863,-731 217.5863,-731 217.5863,-725 223.5863,-719 229.5863,-719"/>
<text text-anchor="middle" x="257.7981" y="-727.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(Unzip)</text>
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust3"><a xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M218.6887,-451C218.6887,-451 296.9075,-451 296.9075,-451 302.9075,-451 308.9075,-457 308.9075,-463 308.9075,-463 308.9075,-761 308.9075,-761 308.9075,-767 302.9075,-773 296.9075,-773 296.9075,-773 218.6887,-773 218.6887,-773 212.6887,-773 206.6887,-767 206.6887,-761 206.6887,-761 206.6887,-463 206.6887,-463 206.6887,-457 212.6887,-451 218.6887,-451"/>
<text text-anchor="middle" x="257.7981" y="-459.5" font-family="Arial" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.init -->
<g id="clust2" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3</title>
<g id="a_clust2"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M222.9713,-304C222.9713,-304 292.6249,-304 292.6249,-304 298.6249,-304 304.6249,-310 304.6249,-316 304.6249,-316 304.6249,-431 304.6249,-431 304.6249,-437 298.6249,-443 292.6249,-443 292.6249,-443 222.9713,-443 222.9713,-443 216.9713,-443 210.9713,-437 210.9713,-431 210.9713,-431 210.9713,-316 210.9713,-316 210.9713,-310 216.9713,-304 222.9713,-304"/>
<text text-anchor="middle" x="257.7981" y="-312.5" font-family="Arial" font-size="15.00" fill="#222222">(*SU3)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/su3.Read -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.init</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.init | defined in .:0&#10;at reseed.go:21: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M89.1017,-294C89.1017,-294 59.1017,-294 59.1017,-294 53.1017,-294 47.1017,-288 47.1017,-282 47.1017,-282 47.1017,-270 47.1017,-270 47.1017,-264 53.1017,-258 59.1017,-258 59.1017,-258 89.1017,-258 89.1017,-258 95.1017,-258 101.1017,-264 101.1017,-270 101.1017,-270 101.1017,-282 101.1017,-282 101.1017,-288 95.1017,-294 89.1017,-294"/>
<text text-anchor="middle" x="74.1017" y="-271.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
<title>github.com/go&#45;i2p/go&#45;i2p/lib/su3.Read</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/su3.Read | defined in su3.go:208">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M272.7981,-113C272.7981,-113 242.7981,-113 242.7981,-113 236.7981,-113 230.7981,-107 230.7981,-101 230.7981,-101 230.7981,-89 230.7981,-89 230.7981,-83 236.7981,-77 242.7981,-77 242.7981,-77 272.7981,-77 272.7981,-77 278.7981,-77 284.7981,-83 284.7981,-89 284.7981,-89 284.7981,-101 284.7981,-101 284.7981,-107 278.7981,-113 272.7981,-113"/>
<text text-anchor="middle" x="257.7981" y="-99.2" font-family="Verdana" font-size="14.00" fill="#000000">su3</text>
<text text-anchor="middle" x="257.7981" y="-82.4" font-family="Verdana" font-size="14.00" fill="#000000">Read</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="node9" class="node">
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node9"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M306.4876,-294C306.4876,-294 209.1086,-294 209.1086,-294 203.1086,-294 197.1086,-288 197.1086,-282 197.1086,-282 197.1086,-270 197.1086,-270 197.1086,-264 203.1086,-258 209.1086,-258 209.1086,-258 306.4876,-258 306.4876,-258 312.4876,-258 318.4876,-264 318.4876,-270 318.4876,-270 318.4876,-282 318.4876,-282 318.4876,-288 312.4876,-294 306.4876,-294"/>
<text text-anchor="middle" x="257.7981" y="-271.8" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge10" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge10"><a xlink:title="at reseed.go:21: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M101.2067,-276C123.8024,-276 157.0344,-276 187.0776,-276"/>
<polygon fill="#8b4513" stroke="#8b4513" points="187.124,-279.5001 197.124,-276 187.124,-272.5001 187.124,-279.5001"/>
<!-- github.com/samber/oops.Errorf -->
<g id="node2" class="node">
<title>github.com/samber/oops.Errorf</title>
<g id="a_node2"><a xlink:title="github.com/samber/oops.Errorf | defined in oops.go:34">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M274.9934,-174C274.9934,-174 240.6028,-174 240.6028,-174 234.6028,-174 228.6028,-168 228.6028,-162 228.6028,-162 228.6028,-150 228.6028,-150 228.6028,-144 234.6028,-138 240.6028,-138 240.6028,-138 274.9934,-138 274.9934,-138 280.9934,-138 286.9934,-144 286.9934,-150 286.9934,-150 286.9934,-162 286.9934,-162 286.9934,-168 280.9934,-174 274.9934,-174"/>
<text text-anchor="middle" x="257.7981" y="-160.2" font-family="Verdana" font-size="14.00" fill="#000000">oops</text>
<text text-anchor="middle" x="257.7981" y="-143.4" font-family="Verdana" font-size="14.00" fill="#000000">Errorf</text>
</a>
</g>
</g>
<!-- github.com/eyedeekay/go&#45;unzip/pkg/unzip.New -->
<g id="node2" class="node">
<title>github.com/eyedeekay/go&#45;unzip/pkg/unzip.New</title>
<g id="a_node2"><a xlink:title="github.com/eyedeekay/go&#45;unzip/pkg/unzip.New | defined in unzip.go:18">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M272.7981,-711C272.7981,-711 242.7981,-711 242.7981,-711 236.7981,-711 230.7981,-705 230.7981,-699 230.7981,-699 230.7981,-687 230.7981,-687 230.7981,-681 236.7981,-675 242.7981,-675 242.7981,-675 272.7981,-675 272.7981,-675 278.7981,-675 284.7981,-681 284.7981,-687 284.7981,-687 284.7981,-699 284.7981,-699 284.7981,-705 278.7981,-711 272.7981,-711"/>
<text text-anchor="middle" x="257.7981" y="-688.8" font-family="Verdana" font-size="14.00" fill="#000000">New</text>
</a>
</g>
</g>
<!-- (github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip).Extract -->
<g id="node3" class="node">
<title>(github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip).Extract</title>
<g id="a_node3"><a xlink:title="(github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip).Extract | defined in unzip.go:22">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M278.2231,-789C278.2231,-789 237.3731,-789 237.3731,-789 231.3731,-789 225.3731,-783 225.3731,-777 225.3731,-777 225.3731,-765 225.3731,-765 225.3731,-759 231.3731,-753 237.3731,-753 237.3731,-753 278.2231,-753 278.2231,-753 284.2231,-753 290.2231,-759 290.2231,-765 290.2231,-765 290.2231,-777 290.2231,-777 290.2231,-783 284.2231,-789 278.2231,-789"/>
<text text-anchor="middle" x="257.7981" y="-766.8" font-family="Verdana" font-size="14.00" fill="#000000">Extract</text>
<title>github.com/eyedeekay/go&#45;unzip/pkg/unzip.New</title>
<g id="a_node3"><a xlink:title="github.com/eyedeekay/go&#45;unzip/pkg/unzip.New | defined in unzip.go:18">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M273.4034,-235C273.4034,-235 242.1928,-235 242.1928,-235 236.1928,-235 230.1928,-229 230.1928,-223 230.1928,-223 230.1928,-211 230.1928,-211 230.1928,-205 236.1928,-199 242.1928,-199 242.1928,-199 273.4034,-199 273.4034,-199 279.4034,-199 285.4034,-205 285.4034,-211 285.4034,-211 285.4034,-223 285.4034,-223 285.4034,-229 279.4034,-235 273.4034,-235"/>
<text text-anchor="middle" x="257.7981" y="-221.2" font-family="Verdana" font-size="14.00" fill="#000000">unzip</text>
<text text-anchor="middle" x="257.7981" y="-204.4" font-family="Verdana" font-size="14.00" fill="#000000">New</text>
</a>
</g>
</g>
@ -151,62 +88,37 @@
<g id="node4" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.ReadRouterInfo</title>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.ReadRouterInfo | defined in router_info.go:233">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M302.9877,-1161C302.9877,-1161 212.6085,-1161 212.6085,-1161 206.6085,-1161 200.6085,-1155 200.6085,-1149 200.6085,-1149 200.6085,-1137 200.6085,-1137 200.6085,-1131 206.6085,-1125 212.6085,-1125 212.6085,-1125 302.9877,-1125 302.9877,-1125 308.9877,-1125 314.9877,-1131 314.9877,-1137 314.9877,-1137 314.9877,-1149 314.9877,-1149 314.9877,-1155 308.9877,-1161 302.9877,-1161"/>
<text text-anchor="middle" x="257.7981" y="-1138.8" font-family="Verdana" font-size="14.00" fill="#000000">ReadRouterInfo</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M302.9877,-296C302.9877,-296 212.6085,-296 212.6085,-296 206.6085,-296 200.6085,-290 200.6085,-284 200.6085,-284 200.6085,-272 200.6085,-272 200.6085,-266 206.6085,-260 212.6085,-260 212.6085,-260 302.9877,-260 302.9877,-260 308.9877,-260 314.9877,-266 314.9877,-272 314.9877,-272 314.9877,-284 314.9877,-284 314.9877,-290 308.9877,-296 302.9877,-296"/>
<text text-anchor="middle" x="257.7981" y="-282.2" font-family="Verdana" font-size="14.00" fill="#000000">router_info</text>
<text text-anchor="middle" x="257.7981" y="-265.4" font-family="Verdana" font-size="14.00" fill="#000000">ReadRouterInfo</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed -->
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.init -->
<g id="node5" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed</title>
<g id="a_node5"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed | defined in reseed.go:31&#10;at reseed.go:72: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Content]&#10;at reseed.go:108: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.ReadRouterInfo]&#10;at reseed.go:32: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:57: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:68: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:99: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:119: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:42: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:53: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:61: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:123: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:76: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:85: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:91: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:95: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:59: calling [github.com/go&#45;i2p/go&#45;i2p/lib/su3.Read]&#10;at reseed.go:74: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Signature]&#10;at reseed.go:89: calling [(github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip).Extract]&#10;at reseed.go:80: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at reseed.go:105: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at reseed.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at reseed.go:117: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at reseed.go:89: calling [github.com/eyedeekay/go&#45;unzip/pkg/unzip.New]&#10;at reseed.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:99: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:105: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:119: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:65: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at reseed.go:124: calling [github.com/samber/oops.Errorf]&#10;at reseed.go:96: calling [github.com/samber/oops.Errorf]&#10;at reseed.go:79: calling [(*github.com/sirupsen/logrus.Logger).Println]&#10;at reseed.go:42: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:53: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:61: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:76: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:85: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:91: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:105: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:117: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M112.3053,-585C112.3053,-585 35.8981,-585 35.8981,-585 29.8981,-585 23.8981,-579 23.8981,-573 23.8981,-573 23.8981,-561 23.8981,-561 23.8981,-555 29.8981,-549 35.8981,-549 35.8981,-549 112.3053,-549 112.3053,-549 118.3053,-549 124.3053,-555 124.3053,-561 124.3053,-561 124.3053,-573 124.3053,-573 124.3053,-579 118.3053,-585 112.3053,-585"/>
<text text-anchor="middle" x="74.1017" y="-562.8" font-family="Verdana" font-size="14.00" fill="#000000">SingleReseed</text>
<title>github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.init</title>
<g id="a_node5"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.init | defined in .:0&#10;at reseed.go:21: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M89.1017,-52C89.1017,-52 59.1017,-52 59.1017,-52 53.1017,-52 47.1017,-46 47.1017,-40 47.1017,-40 47.1017,-28 47.1017,-28 47.1017,-22 53.1017,-16 59.1017,-16 59.1017,-16 89.1017,-16 89.1017,-16 95.1017,-16 101.1017,-22 101.1017,-28 101.1017,-28 101.1017,-40 101.1017,-40 101.1017,-46 95.1017,-52 89.1017,-52"/>
<text text-anchor="middle" x="74.1017" y="-29.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;github.com/eyedeekay/go&#45;unzip/pkg/unzip.New -->
<g id="edge9" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;github.com/eyedeekay/go&#45;unzip/pkg/unzip.New</title>
<g id="a_edge9"><a xlink:title="at reseed.go:89: calling [github.com/eyedeekay/go&#45;unzip/pkg/unzip.New]">
<path fill="none" stroke="#8b4513" d="M100.4209,-585.0527C132.6134,-607.134 187.216,-644.5867 222.8908,-669.0566"/>
<polygon fill="#8b4513" stroke="#8b4513" points="221.3014,-672.2106 231.5277,-674.9808 225.2609,-666.438 221.3014,-672.2106"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip).Extract -->
<g id="edge7" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip).Extract</title>
<g id="a_edge7"><a xlink:title="at reseed.go:89: calling [(github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip).Extract]">
<path fill="none" stroke="#8b4513" d="M80.664,-585.1951C94.7563,-621.7155 131.4015,-704.2676 189.2034,-749 196.9844,-755.0217 206.4612,-759.42 215.8566,-762.624"/>
<polygon fill="#8b4513" stroke="#8b4513" points="214.9588,-766.0089 225.5436,-765.5485 216.982,-759.3076 214.9588,-766.0089"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.ReadRouterInfo -->
<g id="edge2" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.ReadRouterInfo</title>
<g id="a_edge2"><a xlink:title="at reseed.go:108: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.ReadRouterInfo]">
<path fill="none" stroke="#8b4513" d="M76.6054,-585.2128C87.9601,-666.0957 136.3556,-992.6229 189.2034,-1080 197.9899,-1094.5274 211.1083,-1107.7361 223.5269,-1118.264"/>
<polygon fill="#8b4513" stroke="#8b4513" points="221.5692,-1121.1834 231.5341,-1124.7822 225.9884,-1115.7547 221.5692,-1121.1834"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/su3.Read -->
<!-- github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="node6" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/su3.Read</title>
<g id="a_node6"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/su3.Read | defined in su3.go:208">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M272.7981,-60C272.7981,-60 242.7981,-60 242.7981,-60 236.7981,-60 230.7981,-54 230.7981,-48 230.7981,-48 230.7981,-36 230.7981,-36 230.7981,-30 236.7981,-24 242.7981,-24 242.7981,-24 272.7981,-24 272.7981,-24 278.7981,-24 284.7981,-30 284.7981,-36 284.7981,-36 284.7981,-48 284.7981,-48 284.7981,-54 278.7981,-60 272.7981,-60"/>
<text text-anchor="middle" x="257.7981" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">Read</text>
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node6"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M306.4876,-52C306.4876,-52 209.1086,-52 209.1086,-52 203.1086,-52 197.1086,-46 197.1086,-40 197.1086,-40 197.1086,-28 197.1086,-28 197.1086,-22 203.1086,-16 209.1086,-16 209.1086,-16 306.4876,-16 306.4876,-16 312.4876,-16 318.4876,-22 318.4876,-28 318.4876,-28 318.4876,-40 318.4876,-40 318.4876,-46 312.4876,-52 306.4876,-52"/>
<text text-anchor="middle" x="257.7981" y="-38.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="257.7981" y="-21.4" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/su3.Read -->
<g id="edge5" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/su3.Read</title>
<g id="a_edge5"><a xlink:title="at reseed.go:59: calling [github.com/go&#45;i2p/go&#45;i2p/lib/su3.Read]">
<path fill="none" stroke="#8b4513" d="M124.3063,-552.5798C127.2619,-550.3994 129.9451,-547.8894 132.2034,-545 165.3444,-502.5961 154.9794,-105.5348 189.2034,-64 197.0942,-54.4236 209.1723,-48.9656 221.0066,-45.8721"/>
<polygon fill="#8b4513" stroke="#8b4513" points="221.7395,-49.2947 230.7929,-43.7913 220.2836,-42.4477 221.7395,-49.2947"/>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge1"><a xlink:title="at reseed.go:21: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M101.2067,-34C123.8024,-34 157.0344,-34 187.0776,-34"/>
<polygon fill="#8b4513" stroke="#8b4513" points="187.124,-37.5001 197.124,-34 187.124,-30.5001 187.124,-37.5001"/>
</a>
</g>
</g>
@ -214,17 +126,9 @@
<g id="node7" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Content</title>
<g id="a_node7"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Content | defined in su3.go:197">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M280.1313,-138C280.1313,-138 235.4649,-138 235.4649,-138 229.4649,-138 223.4649,-132 223.4649,-126 223.4649,-126 223.4649,-114 223.4649,-114 223.4649,-108 229.4649,-102 235.4649,-102 235.4649,-102 280.1313,-102 280.1313,-102 286.1313,-102 292.1313,-108 292.1313,-114 292.1313,-114 292.1313,-126 292.1313,-126 292.1313,-132 286.1313,-138 280.1313,-138"/>
<text text-anchor="middle" x="257.7981" y="-115.8" font-family="Verdana" font-size="14.00" fill="#000000">Content</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Content -->
<g id="edge1" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Content</title>
<g id="a_edge1"><a xlink:title="at reseed.go:72: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Content]">
<path fill="none" stroke="#8b4513" d="M124.2229,-552.5138C127.1977,-550.3487 129.9082,-547.8602 132.2034,-545 187.5727,-476.0025 136.0167,-221.6937 189.2034,-151 195.4496,-142.6978 204.4315,-136.5625 213.8477,-132.0488"/>
<polygon fill="#8b4513" stroke="#8b4513" points="215.4675,-135.1643 223.3233,-128.0555 212.749,-128.7138 215.4675,-135.1643"/>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M280.1313,-374C280.1313,-374 235.4649,-374 235.4649,-374 229.4649,-374 223.4649,-368 223.4649,-362 223.4649,-362 223.4649,-350 223.4649,-350 223.4649,-344 229.4649,-338 235.4649,-338 235.4649,-338 280.1313,-338 280.1313,-338 286.1313,-338 292.1313,-344 292.1313,-350 292.1313,-350 292.1313,-362 292.1313,-362 292.1313,-368 286.1313,-374 280.1313,-374"/>
<text text-anchor="middle" x="257.7981" y="-360.2" font-family="Verdana" font-size="14.00" fill="#000000">su3</text>
<text text-anchor="middle" x="257.7981" y="-343.4" font-family="Verdana" font-size="14.00" fill="#000000">Content</text>
</a>
</g>
</g>
@ -232,8 +136,143 @@
<g id="node8" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Signature</title>
<g id="a_node8"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Signature | defined in su3.go:203">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M284.4525,-199C284.4525,-199 231.1437,-199 231.1437,-199 225.1437,-199 219.1437,-193 219.1437,-187 219.1437,-187 219.1437,-175 219.1437,-175 219.1437,-169 225.1437,-163 231.1437,-163 231.1437,-163 284.4525,-163 284.4525,-163 290.4525,-163 296.4525,-169 296.4525,-175 296.4525,-175 296.4525,-187 296.4525,-187 296.4525,-193 290.4525,-199 284.4525,-199"/>
<text text-anchor="middle" x="257.7981" y="-176.8" font-family="Verdana" font-size="14.00" fill="#000000">Signature</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M284.4525,-435C284.4525,-435 231.1437,-435 231.1437,-435 225.1437,-435 219.1437,-429 219.1437,-423 219.1437,-423 219.1437,-411 219.1437,-411 219.1437,-405 225.1437,-399 231.1437,-399 231.1437,-399 284.4525,-399 284.4525,-399 290.4525,-399 296.4525,-405 296.4525,-411 296.4525,-411 296.4525,-423 296.4525,-423 296.4525,-429 290.4525,-435 284.4525,-435"/>
<text text-anchor="middle" x="257.7981" y="-421.2" font-family="Verdana" font-size="14.00" fill="#000000">su3</text>
<text text-anchor="middle" x="257.7981" y="-404.4" font-family="Verdana" font-size="14.00" fill="#000000">Signature</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="node9" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_node9"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithField | defined in log.go:54">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M286.0726,-521C286.0726,-521 229.5236,-521 229.5236,-521 223.5236,-521 217.5236,-515 217.5236,-509 217.5236,-509 217.5236,-497 217.5236,-497 217.5236,-491 223.5236,-485 229.5236,-485 229.5236,-485 286.0726,-485 286.0726,-485 292.0726,-485 298.0726,-491 298.0726,-497 298.0726,-497 298.0726,-509 298.0726,-509 298.0726,-515 292.0726,-521 286.0726,-521"/>
<text text-anchor="middle" x="257.7981" y="-507.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="257.7981" y="-490.4" font-family="Verdana" font-size="14.00" fill="#000000">WithField</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="node10" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_node10"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithError | defined in log.go:66">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M286.3296,-582C286.3296,-582 229.2666,-582 229.2666,-582 223.2666,-582 217.2666,-576 217.2666,-570 217.2666,-570 217.2666,-558 217.2666,-558 217.2666,-552 223.2666,-546 229.2666,-546 229.2666,-546 286.3296,-546 286.3296,-546 292.3296,-546 298.3296,-552 298.3296,-558 298.3296,-558 298.3296,-570 298.3296,-570 298.3296,-576 292.3296,-582 286.3296,-582"/>
<text text-anchor="middle" x="257.7981" y="-568.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="257.7981" y="-551.4" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="node11" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_node11"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Error | defined in log.go:42">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M275.5644,-643C275.5644,-643 240.0318,-643 240.0318,-643 234.0318,-643 228.0318,-637 228.0318,-631 228.0318,-631 228.0318,-619 228.0318,-619 228.0318,-613 234.0318,-607 240.0318,-607 240.0318,-607 275.5644,-607 275.5644,-607 281.5644,-607 287.5644,-613 287.5644,-619 287.5644,-619 287.5644,-631 287.5644,-631 287.5644,-637 281.5644,-643 275.5644,-643"/>
<text text-anchor="middle" x="257.7981" y="-629.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="257.7981" y="-612.4" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="node12" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_node12"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithFields | defined in log.go:60">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M289.0172,-704C289.0172,-704 226.579,-704 226.579,-704 220.579,-704 214.579,-698 214.579,-692 214.579,-692 214.579,-680 214.579,-680 214.579,-674 220.579,-668 226.579,-668 226.579,-668 289.0172,-668 289.0172,-668 295.0172,-668 301.0172,-674 301.0172,-680 301.0172,-680 301.0172,-692 301.0172,-692 301.0172,-698 295.0172,-704 289.0172,-704"/>
<text text-anchor="middle" x="257.7981" y="-690.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="257.7981" y="-673.4" font-family="Verdana" font-size="14.00" fill="#000000">WithFields</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Warn -->
<g id="node13" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_node13"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Warn | defined in log.go:30">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M275.5644,-765C275.5644,-765 240.0318,-765 240.0318,-765 234.0318,-765 228.0318,-759 228.0318,-753 228.0318,-753 228.0318,-741 228.0318,-741 228.0318,-735 234.0318,-729 240.0318,-729 240.0318,-729 275.5644,-729 275.5644,-729 281.5644,-729 287.5644,-735 287.5644,-741 287.5644,-741 287.5644,-753 287.5644,-753 287.5644,-759 281.5644,-765 275.5644,-765"/>
<text text-anchor="middle" x="257.7981" y="-751.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="257.7981" y="-734.4" font-family="Verdana" font-size="14.00" fill="#000000">Warn</text>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Debug -->
<g id="node14" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_node14"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debug | defined in logger.go:221">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M276.6201,-851C276.6201,-851 238.9761,-851 238.9761,-851 232.9761,-851 226.9761,-845 226.9761,-839 226.9761,-839 226.9761,-827 226.9761,-827 226.9761,-821 232.9761,-815 238.9761,-815 238.9761,-815 276.6201,-815 276.6201,-815 282.6201,-815 288.6201,-821 288.6201,-827 288.6201,-827 288.6201,-839 288.6201,-839 288.6201,-845 282.6201,-851 276.6201,-851"/>
<text text-anchor="middle" x="257.7981" y="-837.2" font-family="Verdana" font-size="14.00" fill="#000000">logrus</text>
<text text-anchor="middle" x="257.7981" y="-820.4" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Println -->
<g id="node15" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Println</title>
<g id="a_node15"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Println | defined in logger.go:315">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M276.9132,-912C276.9132,-912 238.683,-912 238.683,-912 232.683,-912 226.683,-906 226.683,-900 226.683,-900 226.683,-888 226.683,-888 226.683,-882 232.683,-876 238.683,-876 238.683,-876 276.9132,-876 276.9132,-876 282.9132,-876 288.9132,-882 288.9132,-888 288.9132,-888 288.9132,-900 288.9132,-900 288.9132,-906 282.9132,-912 276.9132,-912"/>
<text text-anchor="middle" x="257.7981" y="-898.2" font-family="Verdana" font-size="14.00" fill="#000000">logrus</text>
<text text-anchor="middle" x="257.7981" y="-881.4" font-family="Verdana" font-size="14.00" fill="#000000">Println</text>
</a>
</g>
</g>
<!-- (github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip).Extract -->
<g id="node16" class="node">
<title>(github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip).Extract</title>
<g id="a_node16"><a xlink:title="(github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip).Extract | defined in unzip.go:22">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M278.2231,-998C278.2231,-998 237.3731,-998 237.3731,-998 231.3731,-998 225.3731,-992 225.3731,-986 225.3731,-986 225.3731,-974 225.3731,-974 225.3731,-968 231.3731,-962 237.3731,-962 237.3731,-962 278.2231,-962 278.2231,-962 284.2231,-962 290.2231,-968 290.2231,-974 290.2231,-974 290.2231,-986 290.2231,-986 290.2231,-992 284.2231,-998 278.2231,-998"/>
<text text-anchor="middle" x="257.7981" y="-984.2" font-family="Verdana" font-size="14.00" fill="#000000">unzip</text>
<text text-anchor="middle" x="257.7981" y="-967.4" font-family="Verdana" font-size="14.00" fill="#000000">Extract</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed -->
<g id="node17" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed</title>
<g id="a_node17"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed | defined in reseed.go:31&#10;at reseed.go:65: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]&#10;at reseed.go:79: calling [(*github.com/sirupsen/logrus.Logger).Println]&#10;at reseed.go:80: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at reseed.go:105: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at reseed.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at reseed.go:117: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at reseed.go:42: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:53: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:61: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:123: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:76: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:85: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:91: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:95: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:74: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Signature]&#10;at reseed.go:89: calling [github.com/eyedeekay/go&#45;unzip/pkg/unzip.New]&#10;at reseed.go:108: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.ReadRouterInfo]&#10;at reseed.go:32: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:57: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:68: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:99: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:119: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:42: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:53: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:61: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:76: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:85: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:91: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:105: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:117: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:124: calling [github.com/samber/oops.Errorf]&#10;at reseed.go:96: calling [github.com/samber/oops.Errorf]&#10;at reseed.go:89: calling [(github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip).Extract]&#10;at reseed.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:99: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:105: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:119: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:59: calling [github.com/go&#45;i2p/go&#45;i2p/lib/su3.Read]&#10;at reseed.go:72: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Content]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M112.3053,-551C112.3053,-551 35.8981,-551 35.8981,-551 29.8981,-551 23.8981,-545 23.8981,-539 23.8981,-539 23.8981,-527 23.8981,-527 23.8981,-521 29.8981,-515 35.8981,-515 35.8981,-515 112.3053,-515 112.3053,-515 118.3053,-515 124.3053,-521 124.3053,-527 124.3053,-527 124.3053,-539 124.3053,-539 124.3053,-545 118.3053,-551 112.3053,-551"/>
<text text-anchor="middle" x="74.1017" y="-528.8" font-family="Verdana" font-size="14.00" fill="#000000">SingleReseed</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/su3.Read -->
<g id="edge14" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/su3.Read</title>
<g id="a_edge14"><a xlink:title="at reseed.go:59: calling [github.com/go&#45;i2p/go&#45;i2p/lib/su3.Read]">
<path fill="none" stroke="#8b4513" d="M124.4105,-518.2617C127.3001,-516.1559 129.9431,-513.7496 132.2034,-511 159.7529,-477.4869 171.5539,-160.9886 197.2034,-126 203.2816,-117.7087 212.2268,-111.4726 221.3884,-106.8524"/>
<polygon fill="#8b4513" stroke="#8b4513" points="222.8323,-110.0408 230.5239,-102.7546 219.9673,-103.6539 222.8323,-110.0408"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge11" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge11"><a xlink:title="at reseed.go:124: calling [github.com/samber/oops.Errorf]&#10;at reseed.go:96: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M124.315,-518.1818C127.2269,-516.0948 129.9011,-513.7145 132.2034,-511 155.953,-482.9979 175.0425,-216.2755 197.2034,-187 202.9124,-179.4582 210.9755,-173.6019 219.3625,-169.1144"/>
<polygon fill="#8b4513" stroke="#8b4513" points="220.9695,-172.2258 228.4942,-164.7673 217.9607,-165.9054 220.9695,-172.2258"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;github.com/eyedeekay/go&#45;unzip/pkg/unzip.New -->
<g id="edge7" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;github.com/eyedeekay/go&#45;unzip/pkg/unzip.New</title>
<g id="a_edge7"><a xlink:title="at reseed.go:89: calling [github.com/eyedeekay/go&#45;unzip/pkg/unzip.New]">
<path fill="none" stroke="#8b4513" d="M124.4464,-517.8762C127.2876,-515.8626 129.9131,-513.5822 132.2034,-511 152.1774,-488.4803 178.5084,-271.5922 197.2034,-248 203.3584,-240.2327 211.9839,-234.2276 220.8007,-229.6636"/>
<polygon fill="#8b4513" stroke="#8b4513" points="222.3624,-232.7975 229.9624,-225.4157 219.4178,-226.4469 222.3624,-232.7975"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.ReadRouterInfo -->
<g id="edge8" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.ReadRouterInfo</title>
<g id="a_edge8"><a xlink:title="at reseed.go:108: calling [github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.ReadRouterInfo]">
<path fill="none" stroke="#8b4513" d="M124.2808,-517.7252C127.1614,-515.7475 129.841,-513.5164 132.2034,-511 163.8166,-477.3253 163.5368,-351.553 195.117,-304.0394"/>
<polygon fill="#8b4513" stroke="#8b4513" points="197.9276,-306.1281 201.3993,-296.1182 192.4431,-301.7783 197.9276,-306.1281"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Content -->
<g id="edge15" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Content</title>
<g id="a_edge15"><a xlink:title="at reseed.go:72: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Content]">
<path fill="none" stroke="#8b4513" d="M124.3338,-516.8524C127.1291,-515.0906 129.7813,-513.1457 132.2034,-511 178.779,-469.7385 152.9865,-430.7798 197.2034,-387 202.2246,-382.0285 208.2061,-377.6881 214.4254,-373.9552"/>
<polygon fill="#8b4513" stroke="#8b4513" points="216.5336,-376.7912 223.6233,-368.9181 213.1713,-370.6516 216.5336,-376.7912"/>
</a>
</g>
</g>
@ -241,152 +280,80 @@
<g id="edge6" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Signature</title>
<g id="a_edge6"><a xlink:title="at reseed.go:74: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/su3.SU3).Signature]">
<path fill="none" stroke="#8b4513" d="M124.3485,-552.2102C127.2526,-550.1164 129.9159,-547.727 132.2034,-545 175.9556,-492.8434 156.1169,-303.4966 189.2034,-244 197.3904,-229.2781 210.2739,-216.105 222.6756,-205.6582"/>
<polygon fill="#8b4513" stroke="#8b4513" points="225.1061,-208.1948 230.7015,-199.198 220.7169,-202.7418 225.1061,-208.1948"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="node10" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_node10"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithField | defined in log.go:54">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M286.0726,-616C286.0726,-616 229.5236,-616 229.5236,-616 223.5236,-616 217.5236,-610 217.5236,-604 217.5236,-604 217.5236,-592 217.5236,-592 217.5236,-586 223.5236,-580 229.5236,-580 229.5236,-580 286.0726,-580 286.0726,-580 292.0726,-580 298.0726,-586 298.0726,-592 298.0726,-592 298.0726,-604 298.0726,-604 298.0726,-610 292.0726,-616 286.0726,-616"/>
<text text-anchor="middle" x="257.7981" y="-593.8" font-family="Verdana" font-size="14.00" fill="#000000">WithField</text>
<path fill="none" stroke="#8b4513" d="M124.249,-515.6554C127.0012,-514.2 129.6731,-512.6487 132.2034,-511 166.6974,-488.5238 163.5277,-468.6846 197.2034,-445 201.1431,-442.2291 205.4008,-439.6199 209.7694,-437.193"/>
<polygon fill="#8b4513" stroke="#8b4513" points="211.5749,-440.1988 218.8257,-432.4738 208.3401,-433.9911 211.5749,-440.1988"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge11" class="edge">
<g id="edge13" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge11"><a xlink:title="at reseed.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:99: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:105: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:119: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M124.2975,-575.4709C150.0871,-579.823 181.435,-585.1132 207.2718,-589.4733"/>
<polygon fill="#8b4513" stroke="#8b4513" points="206.8005,-592.9432 217.2435,-591.1561 207.9654,-586.0408 206.8005,-592.9432"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="node11" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_node11"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithError | defined in log.go:66">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M286.3296,-372C286.3296,-372 229.2666,-372 229.2666,-372 223.2666,-372 217.2666,-366 217.2666,-360 217.2666,-360 217.2666,-348 217.2666,-348 217.2666,-342 223.2666,-336 229.2666,-336 229.2666,-336 286.3296,-336 286.3296,-336 292.3296,-336 298.3296,-342 298.3296,-348 298.3296,-348 298.3296,-360 298.3296,-360 298.3296,-366 292.3296,-372 286.3296,-372"/>
<text text-anchor="middle" x="257.7981" y="-349.8" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
<g id="a_edge13"><a xlink:title="at reseed.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:99: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:105: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at reseed.go:119: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M124.2975,-524.8024C150.0871,-520.5906 181.435,-515.4711 207.2718,-511.2516"/>
<polygon fill="#8b4513" stroke="#8b4513" points="207.9384,-514.6892 217.2435,-509.6231 206.8101,-507.7807 207.9384,-514.6892"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge15" class="edge">
<g id="edge10" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge15"><a xlink:title="at reseed.go:42: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:53: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:61: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:76: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:85: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:91: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:105: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:117: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M124.429,-551.4226C127.2366,-549.5194 129.8625,-547.3875 132.2034,-545 185.0529,-491.0973 138.0638,-440.5275 189.2034,-385 194.4946,-379.2548 201.0538,-374.5026 208.0007,-370.5928"/>
<polygon fill="#8b4513" stroke="#8b4513" points="209.5913,-373.7106 216.9411,-366.0796 206.4368,-367.4617 209.5913,-373.7106"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="node12" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_node12"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Error | defined in log.go:42">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M272.7981,-433C272.7981,-433 242.7981,-433 242.7981,-433 236.7981,-433 230.7981,-427 230.7981,-421 230.7981,-421 230.7981,-409 230.7981,-409 230.7981,-403 236.7981,-397 242.7981,-397 242.7981,-397 272.7981,-397 272.7981,-397 278.7981,-397 284.7981,-403 284.7981,-409 284.7981,-409 284.7981,-421 284.7981,-421 284.7981,-427 278.7981,-433 272.7981,-433"/>
<text text-anchor="middle" x="257.7981" y="-410.8" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
<g id="a_edge10"><a xlink:title="at reseed.go:42: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:53: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:61: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:76: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:85: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:91: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:105: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at reseed.go:117: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M124.2975,-541.4709C150.0871,-545.823 181.435,-551.1132 207.2718,-555.4733"/>
<polygon fill="#8b4513" stroke="#8b4513" points="206.8005,-558.9432 217.2435,-557.1561 207.9654,-552.0408 206.8005,-558.9432"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge4" class="edge">
<g id="edge5" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge4"><a xlink:title="at reseed.go:42: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:53: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:61: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:123: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:76: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:85: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:91: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:95: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M124.2356,-550.7393C127.0549,-549.0053 129.7394,-547.0973 132.2034,-545 170.8659,-512.0912 151.5879,-480.1006 189.2034,-446 198.2645,-437.7856 209.8677,-431.4342 220.9435,-426.6815"/>
<polygon fill="#8b4513" stroke="#8b4513" points="222.4561,-429.847 230.4639,-422.9097 219.8778,-423.3391 222.4561,-429.847"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="node13" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_node13"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithFields | defined in log.go:60">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M289.0172,-494C289.0172,-494 226.579,-494 226.579,-494 220.579,-494 214.579,-488 214.579,-482 214.579,-482 214.579,-470 214.579,-470 214.579,-464 220.579,-458 226.579,-458 226.579,-458 289.0172,-458 289.0172,-458 295.0172,-458 301.0172,-464 301.0172,-470 301.0172,-470 301.0172,-482 301.0172,-482 301.0172,-488 295.0172,-494 289.0172,-494"/>
<text text-anchor="middle" x="257.7981" y="-471.8" font-family="Verdana" font-size="14.00" fill="#000000">WithFields</text>
<g id="a_edge5"><a xlink:title="at reseed.go:42: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:53: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:61: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:123: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:76: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:85: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:91: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at reseed.go:95: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M109.8907,-551.1062C134.4382,-563.5052 167.7666,-580.3004 197.2034,-595 204.0625,-598.4252 211.3659,-602.0554 218.4403,-605.563"/>
<polygon fill="#8b4513" stroke="#8b4513" points="217.3675,-608.9374 227.8821,-610.2394 220.4744,-602.6646 217.3675,-608.9374"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields -->
<g id="edge12" class="edge">
<g id="edge2" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithFields</title>
<g id="a_edge12"><a xlink:title="at reseed.go:65: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M124.1838,-548.8797C126.9237,-547.6274 129.6136,-546.3318 132.2034,-545 159.2798,-531.0759 162.5752,-521.7632 189.2034,-507 194.402,-504.1178 199.9187,-501.2812 205.4763,-498.5649"/>
<polygon fill="#8b4513" stroke="#8b4513" points="207.2923,-501.5769 214.8191,-494.1205 204.2852,-495.2557 207.2923,-501.5769"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Warn -->
<g id="node14" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_node14"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Warn | defined in log.go:30">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M273.388,-555C273.388,-555 242.2082,-555 242.2082,-555 236.2082,-555 230.2082,-549 230.2082,-543 230.2082,-543 230.2082,-531 230.2082,-531 230.2082,-525 236.2082,-519 242.2082,-519 242.2082,-519 273.388,-519 273.388,-519 279.388,-519 285.388,-525 285.388,-531 285.388,-531 285.388,-543 285.388,-543 285.388,-549 279.388,-555 273.388,-555"/>
<text text-anchor="middle" x="257.7981" y="-532.8" font-family="Verdana" font-size="14.00" fill="#000000">Warn</text>
<g id="a_edge2"><a xlink:title="at reseed.go:65: calling [(*github.com/go&#45;i2p/logger.Logger).WithFields]">
<path fill="none" stroke="#8b4513" d="M88.8873,-551.133C110.5855,-576.9001 153.2635,-624.4748 197.2034,-656 200.5833,-658.425 204.1887,-660.7535 207.8922,-662.9657"/>
<polygon fill="#8b4513" stroke="#8b4513" points="206.2227,-666.0424 216.6522,-667.9073 209.6621,-659.9455 206.2227,-666.0424"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn -->
<g id="edge8" class="edge">
<g id="edge4" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_edge8"><a xlink:title="at reseed.go:80: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at reseed.go:105: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at reseed.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at reseed.go:117: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]">
<path fill="none" stroke="#8b4513" d="M124.2975,-558.8024C154.5341,-553.8643 192.4114,-547.6785 220.0891,-543.1584"/>
<polygon fill="#8b4513" stroke="#8b4513" points="220.8551,-546.5797 230.1602,-541.5136 219.7268,-539.6712 220.8551,-546.5797"/>
</a>
</g>
</g>
<!-- github.com/samber/oops.Errorf -->
<g id="node15" class="node">
<title>github.com/samber/oops.Errorf</title>
<g id="a_node15"><a xlink:title="github.com/samber/oops.Errorf | defined in oops.go:34">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M274.9934,-884C274.9934,-884 240.6028,-884 240.6028,-884 234.6028,-884 228.6028,-878 228.6028,-872 228.6028,-872 228.6028,-860 228.6028,-860 228.6028,-854 234.6028,-848 240.6028,-848 240.6028,-848 274.9934,-848 274.9934,-848 280.9934,-848 286.9934,-854 286.9934,-860 286.9934,-860 286.9934,-872 286.9934,-872 286.9934,-878 280.9934,-884 274.9934,-884"/>
<text text-anchor="middle" x="257.7981" y="-861.8" font-family="Verdana" font-size="14.00" fill="#000000">Errorf</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge13" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge13"><a xlink:title="at reseed.go:124: calling [github.com/samber/oops.Errorf]&#10;at reseed.go:96: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M80.2807,-585.1365C94.9059,-626.4685 134.5594,-729.7346 189.2034,-803 199.5917,-816.9284 213.3454,-830.2644 225.8087,-841.051"/>
<polygon fill="#8b4513" stroke="#8b4513" points="223.861,-843.9865 233.7642,-847.7518 228.3705,-838.6326 223.861,-843.9865"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Debug -->
<g id="node16" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_node16"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debug | defined in logger.go:221">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M276.6201,-1066C276.6201,-1066 238.9761,-1066 238.9761,-1066 232.9761,-1066 226.9761,-1060 226.9761,-1054 226.9761,-1054 226.9761,-1042 226.9761,-1042 226.9761,-1036 232.9761,-1030 238.9761,-1030 238.9761,-1030 276.6201,-1030 276.6201,-1030 282.6201,-1030 288.6201,-1036 288.6201,-1042 288.6201,-1042 288.6201,-1054 288.6201,-1054 288.6201,-1060 282.6201,-1066 276.6201,-1066"/>
<text text-anchor="middle" x="257.7981" y="-1043.8" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
<g id="a_edge4"><a xlink:title="at reseed.go:80: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at reseed.go:105: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at reseed.go:110: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at reseed.go:117: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]">
<path fill="none" stroke="#8b4513" d="M82.2749,-551.2166C99.1511,-587.092 141.0238,-667.6832 197.2034,-717 203.4682,-722.4995 210.9203,-727.2565 218.4187,-731.2596"/>
<polygon fill="#8b4513" stroke="#8b4513" points="217.3403,-734.6309 227.8557,-735.9263 220.4433,-728.3562 217.3403,-734.6309"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge3" class="edge">
<g id="edge9" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge3"><a xlink:title="at reseed.go:32: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:57: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:68: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:99: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:119: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M76.5803,-585.1352C87.2199,-660.6832 131.1315,-949.6388 189.2034,-1018 196.6127,-1026.7221 207.0394,-1032.9932 217.5316,-1037.4676"/>
<polygon fill="#8b4513" stroke="#8b4513" points="216.5095,-1040.823 227.1009,-1041.0904 218.9879,-1034.2765 216.5095,-1040.823"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Println -->
<g id="node17" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Println</title>
<g id="a_node17"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Println | defined in logger.go:315">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M276.9132,-1005C276.9132,-1005 238.683,-1005 238.683,-1005 232.683,-1005 226.683,-999 226.683,-993 226.683,-993 226.683,-981 226.683,-981 226.683,-975 232.683,-969 238.683,-969 238.683,-969 276.9132,-969 276.9132,-969 282.9132,-969 288.9132,-975 288.9132,-981 288.9132,-981 288.9132,-993 288.9132,-993 288.9132,-999 282.9132,-1005 276.9132,-1005"/>
<text text-anchor="middle" x="257.7981" y="-982.8" font-family="Verdana" font-size="14.00" fill="#000000">Println</text>
<g id="a_edge9"><a xlink:title="at reseed.go:32: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:57: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:68: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:99: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at reseed.go:119: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M80.5099,-551.3118C96.0286,-594.0599 138.7033,-702.5924 197.2034,-779 205.3145,-789.594 215.7152,-799.7387 225.6021,-808.317"/>
<polygon fill="#8b4513" stroke="#8b4513" points="223.4591,-811.0879 233.3674,-814.8396 227.9613,-805.7278 223.4591,-811.0879"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/sirupsen/logrus.Logger).Println -->
<g id="edge14" class="edge">
<g id="edge3" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(*github.com/sirupsen/logrus.Logger).Println</title>
<g id="a_edge14"><a xlink:title="at reseed.go:79: calling [(*github.com/sirupsen/logrus.Logger).Println]">
<path fill="none" stroke="#8b4513" d="M76.5355,-585.177C84.595,-640.3185 114.2886,-809.0089 189.2034,-925 198.348,-939.1587 211.5308,-952.133 223.9007,-962.5126"/>
<polygon fill="#8b4513" stroke="#8b4513" points="221.8836,-965.3825 231.8616,-968.9451 226.2831,-959.9378 221.8836,-965.3825"/>
<g id="a_edge3"><a xlink:title="at reseed.go:79: calling [(*github.com/sirupsen/logrus.Logger).Println]">
<path fill="none" stroke="#8b4513" d="M76.1468,-551.1797C83.1258,-605.3574 110.5897,-767.9085 197.2034,-864 202.7295,-870.1308 209.7911,-875.1569 217.1278,-879.2228"/>
<polygon fill="#8b4513" stroke="#8b4513" points="215.9609,-882.5513 226.4734,-883.8701 219.0778,-876.2835 215.9609,-882.5513"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip).Extract -->
<g id="edge12" class="edge">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/netdb/reseed.Reseed).SingleReseed&#45;&gt;(github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip).Extract</title>
<g id="a_edge12"><a xlink:title="at reseed.go:89: calling [(github.com/eyedeekay/go&#45;unzip/pkg/unzip.Unzip).Extract]">
<path fill="none" stroke="#8b4513" d="M76.0723,-551.003C83.2139,-609.681 111.9703,-798.9326 197.2034,-926 204.5121,-936.8959 214.52,-947.0093 224.2969,-955.468"/>
<polygon fill="#8b4513" stroke="#8b4513" points="222.0997,-958.1929 232.0322,-961.8803 226.5671,-952.8038 222.0997,-958.1929"/>
</a>
</g>
</g>

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 36 KiB

View File

@ -2,73 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/router"
## Usage
#### type Router
```go
type Router struct {
// keystore for router info
*keys.RouterInfoKeystore
// multi-transport manager
*transport.TransportMuxer
}
```
i2p router type
#### func CreateRouter
```go
func CreateRouter(cfg *config.RouterConfig) (*Router, error)
```
CreateRouter creates a router with the provided configuration
#### func FromConfig
```go
func FromConfig(c *config.RouterConfig) (r *Router, err error)
```
create router from configuration
#### func (*Router) Close
```go
func (r *Router) Close() error
```
Close closes any internal state and finallizes router resources so that nothing
can start up again
#### func (*Router) Start
```go
func (r *Router) Start()
```
Start starts router mainloop
#### func (*Router) Stop
```go
func (r *Router) Stop()
```
Stop starts stopping internal state of router
#### func (*Router) Wait
```go
func (r *Router) Wait()
```
Wait blocks until router is fully stopped
# router
--
import "github.com/go-i2p/go-i2p/lib/router"
![router.svg](router)
## Usage
#### type Router

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 62 KiB

View File

@ -2,264 +2,74 @@
--
import "github.com/go-i2p/go-i2p/lib/su3"
Package su3 implements reading the SU3 file format.
SU3 files provide content that is signed by a known identity. They are used to
distribute many types of data, including reseed files, plugins, blocklists, and
more.
See: https://geti2p.net/spec/updates#su3-file-specification
The Read() function takes an io.Reader, and it returns a *SU3. The *SU3 contains
the SU3 file metadata, such as the type of the content and the signer ID. In
order to get the file contents, one must pass in the public key associated with
the file's signer, so that the signature can be validated. The content can still
be read without passing in the key, but after returning the full content the
error ErrInvalidSignature will be returned.
Example usage:
// Let's say we are reading an SU3 file from an HTTP body, which is an io.Reader.
su3File, err := su3.Read(body)
if err != nil {
// Handle error.
}
// Look up this signer's key.
key := somehow_lookup_the_key(su3File.SignerID)
// Read the content.
contentReader := su3File.Content(key)
bytes, err := ioutil.ReadAll(contentReader)
if errors.Is(err, su3.ErrInvalidSignature) {
// The signature is invalid, OR a nil key was provided.
} else if err != nil {
// Handle error.
}
If you want to parse from a []byte, you can wrap it like this:
mySU3FileBytes := []byte{0x00, 0x01, 0x02, 0x03}
su3File, err := su3.Read(bytes.NewReader(mySU3FileBytes))
One of the advantages of this library's design is that you can avoid buffering
the file contents in memory. Here's how you would stream from an HTTP body
directly to disk:
su3File, err := su3.Read(body)
if err != nil {
// Handle error.
}
// Look up this signer's key.
key := somehow_lookup_the_key(su3File.SignerID)
// Stream directly to disk.
f, err := os.Create("my_file.txt")
if err != nil {
// Handle error.
}
_, err := io.Copy(f, su3File.Content(key))
if errors.Is(err, su3.ErrInvalidSignature) {
// The signature is invalid, OR a nil key was provided.
// Don't trust the file, delete it!
} else if err != nil {
// Handle error.
}
Note: if you want to read the content, the Content() io.Reader must be read
*before* the Signature() io.Reader. If you read the signature first, the content
bytes will be thrown away. If you then attempt to read the content, you will get
an error. For clarification, see TestReadSignatureFirst.
## Usage
```go
var (
ErrMissingMagicBytes = oops.Errorf("missing magic bytes")
ErrMissingUnusedByte6 = oops.Errorf("missing unused byte 6")
ErrMissingFileFormatVersion = oops.Errorf("missing or incorrect file format version")
ErrMissingSignatureType = oops.Errorf("missing or invalid signature type")
ErrUnsupportedSignatureType = oops.Errorf("unsupported signature type")
ErrMissingSignatureLength = oops.Errorf("missing signature length")
ErrMissingUnusedByte12 = oops.Errorf("missing unused byte 12")
ErrMissingVersionLength = oops.Errorf("missing version length")
ErrVersionTooShort = oops.Errorf("version length too short")
ErrMissingUnusedByte14 = oops.Errorf("missing unused byte 14")
ErrMissingSignerIDLength = oops.Errorf("missing signer ID length")
ErrMissingContentLength = oops.Errorf("missing content length")
ErrMissingUnusedByte24 = oops.Errorf("missing unused byte 24")
ErrMissingFileType = oops.Errorf("missing or invalid file type")
ErrMissingUnusedByte26 = oops.Errorf("missing unused byte 26")
ErrMissingContentType = oops.Errorf("missing or invalid content type")
ErrMissingUnusedBytes28To39 = oops.Errorf("missing unused bytes 28-39")
ErrMissingVersion = oops.Errorf("missing version")
ErrMissingSignerID = oops.Errorf("missing signer ID")
ErrMissingContent = oops.Errorf("missing content")
ErrMissingSignature = oops.Errorf("missing signature")
ErrInvalidPublicKey = oops.Errorf("invalid public key")
ErrInvalidSignature = oops.Errorf("invalid signature")
)
```
#### type ContentType
```go
type ContentType string
```
```go
const (
UNKNOWN ContentType = "unknown"
ROUTER_UPDATE ContentType = "router_update"
PLUGIN ContentType = "plugin"
RESEED ContentType = "reseed"
NEWS ContentType = "news"
BLOCKLIST ContentType = "blocklist"
)
```
#### type FileType
```go
type FileType string
```
```go
const (
ZIP FileType = "zip"
XML FileType = "xml"
HTML FileType = "html"
XML_GZIP FileType = "xml.gz"
TXT_GZIP FileType = "txt.gz"
DMG FileType = "dmg"
EXE FileType = "exe"
)
```
#### type SU3
```go
type SU3 struct {
SignatureType SignatureType
SignatureLength uint16
ContentLength uint64
FileType FileType
ContentType ContentType
Version string
SignerID string
}
```
#### func Read
```go
func Read(reader io.Reader) (su3 *SU3, err error)
```
#### func (*SU3) Content
```go
func (su3 *SU3) Content(publicKey interface{}) io.Reader
```
#### func (*SU3) Signature
```go
func (su3 *SU3) Signature() io.Reader
```
#### type SignatureType
```go
type SignatureType string
```
```go
const (
DSA_SHA1 SignatureType = "DSA-SHA1"
ECDSA_SHA256_P256 SignatureType = "ECDSA-SHA256-P256"
ECDSA_SHA384_P384 SignatureType = "ECDSA-SHA384-P384"
ECDSA_SHA512_P521 SignatureType = "ECDSA-SHA512-P521"
RSA_SHA256_2048 SignatureType = "RSA-SHA256-2048"
RSA_SHA384_3072 SignatureType = "RSA-SHA384-3072"
RSA_SHA512_4096 SignatureType = "RSA-SHA512-4096"
EdDSA_SHA512_Ed25519ph SignatureType = "EdDSA-SHA512-Ed25519ph"
)
```
# su3
--
import "github.com/go-i2p/go-i2p/lib/su3"
Package su3 implements reading the SU3 file format.
SU3 files provide content that is signed by a known identity. They are used to
distribute many types of data, including reseed files, plugins, blocklists, and
more.
See: https://geti2p.net/spec/updates#su3-file-specification
The Read() function takes an io.Reader, and it returns a *SU3. The *SU3 contains
the SU3 file metadata, such as the type of the content and the signer ID. In
order to get the file contents, one must pass in the public key associated with
the file's signer, so that the signature can be validated. The content can still
be read without passing in the key, but after returning the full content the
error ErrInvalidSignature will be returned.
Example usage:
// Let's say we are reading an SU3 file from an HTTP body, which is an io.Reader.
su3File, err := su3.Read(body)
if err != nil {
// Handle error.
}
// Look up this signer's key.
key := somehow_lookup_the_key(su3File.SignerID)
// Read the content.
contentReader := su3File.Content(key)
bytes, err := ioutil.ReadAll(contentReader)
if errors.Is(err, su3.ErrInvalidSignature) {
// The signature is invalid, OR a nil key was provided.
} else if err != nil {
// Handle error.
}
If you want to parse from a []byte, you can wrap it like this:
mySU3FileBytes := []byte{0x00, 0x01, 0x02, 0x03}
su3File, err := su3.Read(bytes.NewReader(mySU3FileBytes))
One of the advantages of this library's design is that you can avoid buffering
the file contents in memory. Here's how you would stream from an HTTP body
directly to disk:
su3File, err := su3.Read(body)
if err != nil {
// Handle error.
}
// Look up this signer's key.
key := somehow_lookup_the_key(su3File.SignerID)
// Stream directly to disk.
f, err := os.Create("my_file.txt")
if err != nil {
// Handle error.
}
_, err := io.Copy(f, su3File.Content(key))
if errors.Is(err, su3.ErrInvalidSignature) {
// The signature is invalid, OR a nil key was provided.
// Don't trust the file, delete it!
} else if err != nil {
// Handle error.
}
Note: if you want to read the content, the Content() io.Reader must be read
*before* the Signature() io.Reader. If you read the signature first, the content
bytes will be thrown away. If you then attempt to read the content, you will get
an error. For clarification, see TestReadSignatureFirst.
![su3.svg](su3)
Package su3 implements reading the SU3 file format.
SU3 files provide content that is signed by a known identity. They are used to
distribute many types of data, including reseed files, plugins, blocklists, and
more.
See: https://geti2p.net/spec/updates#su3-file-specification
The Read() function takes an io.Reader, and it returns a *SU3. The *SU3 contains
the SU3 file metadata, such as the type of the content and the signer ID. In
order to get the file contents, one must pass in the public key associated with
the file's signer, so that the signature can be validated. The content can still
be read without passing in the key, but after returning the full content the
error ErrInvalidSignature will be returned.
Example usage:
// Let's say we are reading an SU3 file from an HTTP body, which is an io.Reader.
su3File, err := su3.Read(body)
if err != nil {
// Handle error.
}
// Look up this signer's key.
key := somehow_lookup_the_key(su3File.SignerID)
// Read the content.
contentReader := su3File.Content(key)
bytes, err := ioutil.ReadAll(contentReader)
if errors.Is(err, su3.ErrInvalidSignature) {
// The signature is invalid, OR a nil key was provided.
} else if err != nil {
// Handle error.
}
If you want to parse from a []byte, you can wrap it like this:
mySU3FileBytes := []byte{0x00, 0x01, 0x02, 0x03}
su3File, err := su3.Read(bytes.NewReader(mySU3FileBytes))
One of the advantages of this library's design is that you can avoid buffering
the file contents in memory. Here's how you would stream from an HTTP body
directly to disk:
su3File, err := su3.Read(body)
if err != nil {
// Handle error.
}
// Look up this signer's key.
key := somehow_lookup_the_key(su3File.SignerID)
// Stream directly to disk.
f, err := os.Create("my_file.txt")
if err != nil {
// Handle error.
}
_, err := io.Copy(f, su3File.Content(key))
if errors.Is(err, su3.ErrInvalidSignature) {
// The signature is invalid, OR a nil key was provided.
// Don't trust the file, delete it!
} else if err != nil {
// Handle error.
}
Note: if you want to read the content, the Content() io.Reader must be read
*before* the Signature() io.Reader. If you read the signature first, the content
bytes will be thrown away. If you then attempt to read the content, you will get
an error. For clarification, see TestReadSignatureFirst.
## Usage
```go

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 64 KiB

View File

@ -2,135 +2,12 @@
--
import "github.com/go-i2p/go-i2p/lib/transport"
*
i2np messages transports
## Usage
```go
var ErrNoTransportAvailable = oops.Errorf("no transports available")
```
error for when we have no transports available to use
#### type Transport
```go
type Transport interface {
// Accept accepts an incoming session.
Accept() (net.Conn, error)
// Addr returns an
Addr() net.Addr
// Set the router identity for this transport.
// will bind if the underlying socket is not already
// if the underlying socket is already bound update the RouterIdentity
// returns any errors that happen if they do
SetIdentity(ident router_info.RouterInfo) error
// Obtain a transport session with a router given its RouterInfo.
// If a session with this router is NOT already made attempt to create one and block until made or until an error happens
// returns an established TransportSession and nil on success
// returns nil and an error on error
GetSession(routerInfo router_info.RouterInfo) (TransportSession, error)
// return true if a routerInfo is compatible with this transport
Compatible(routerInfo router_info.RouterInfo) bool
// close the transport cleanly
// blocks until done
// returns an error if one happens
Close() error
// get the name of this tranport as a string
Name() string
}
```
#### type TransportMuxer
```go
type TransportMuxer struct {
}
```
muxes multiple transports into 1 Transport implements transport.Transport
#### func Mux
```go
func Mux(t ...Transport) (tmux *TransportMuxer)
```
mux a bunch of transports together
#### func (*TransportMuxer) Close
```go
func (tmux *TransportMuxer) Close() (err error)
```
close every transport that this transport muxer has
#### func (*TransportMuxer) Compatible
```go
func (tmux *TransportMuxer) Compatible(routerInfo router_info.RouterInfo) (compat bool)
```
is there a transport that we mux that is compatable with this router info?
#### func (*TransportMuxer) GetSession
```go
func (tmux *TransportMuxer) GetSession(routerInfo router_info.RouterInfo) (s TransportSession, err error)
```
get a transport session given a router info return session and nil if successful
return nil and ErrNoTransportAvailable if we failed to get a session
#### func (*TransportMuxer) Name
```go
func (tmux *TransportMuxer) Name() string
```
the name of this transport with the names of all the ones that we mux
#### func (*TransportMuxer) SetIdentity
```go
func (tmux *TransportMuxer) SetIdentity(ident router_info.RouterInfo) (err error)
```
set the identity for every transport
#### type TransportSession
```go
type TransportSession interface {
// queue an i2np message to be sent over the session
// will block as long as the send queue is full
// does not block if the queue is not full
QueueSendI2NP(msg i2np.I2NPMessage)
// return how many i2np messages are not completely sent yet
SendQueueSize() int
// blocking read the next fully recv'd i2np message from this session
ReadNextI2NP() (i2np.I2NPMessage, error)
// close the session cleanly
// returns any errors that happen while closing the session
Close() error
}
```
a session between 2 routers for tranmitting i2np messages securly
# transport
--
import "github.com/go-i2p/go-i2p/lib/transport"
*
i2np messages transports
![transport.svg](transport)
*
i2np messages transports
## Usage
```go

View File

@ -2,79 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/transport/messages"
## Usage
```go
const (
MessageTypeSessionRequest = 0x00
MessageTypeSessionCreated = 0x01
MessageTypeSessionConfirmed = 0x02
MessageTypeData = 0x03
)
```
#### type Message
```go
type Message interface {
// Type returns the message type
Type() MessageType
// Payload returns the message payload
Payload() []byte
// PayloadSize returns the message payload size
PayloadSize() int
}
```
#### type MessageType
```go
type MessageType uint8
```
#### type SessionRequest
```go
type SessionRequest struct {
XContent []byte // 32-byte X value
Padding []byte // padding of message 1
}
```
#### func (*SessionRequest) Payload
```go
func (sr *SessionRequest) Payload() []byte
```
Payload returns the message payload
#### func (*SessionRequest) PayloadSize
```go
func (sr *SessionRequest) PayloadSize() int
```
PayloadSize returns the message payload size
#### func (*SessionRequest) Type
```go
func (sr *SessionRequest) Type() MessageType
```
Type returns the message type
# ntcp
--
import "github.com/go-i2p/go-i2p/lib/transport/messages"
![ntcp.svg](ntcp)
## Usage
```go

View File

@ -2,329 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/transport/noise"
## Usage
```go
const (
NOISE_DH_CURVE25519 = 1
NOISE_CIPHER_CHACHAPOLY = 1
NOISE_CIPHER_AESGCM = 2
NOISE_HASH_SHA256 = 3
NOISE_PATTERN_XK = 11
MaxPayloadSize = 65537
)
```
```go
const NOISE_PROTOCOL_NAME = "NOISE"
```
```go
var ExampleNoiseListener net.Listener = exampleNoiseTransport
```
ExampleNoiseListener is not a real Noise Listener, do not use it. It is exported
so that it can be confirmed that the transport implements net.Listener
```go
var (
ExampleNoiseSession net.Conn = exampleNoiseSession.(*NoiseSession)
)
```
#### func NewNoiseTransportSession
```go
func NewNoiseTransportSession(ri router_info.RouterInfo) (transport.TransportSession, error)
```
#### type HandshakeState
```go
type HandshakeState struct {
*noise.HandshakeState
}
```
#### func NewHandshakeState
```go
func NewHandshakeState(staticKey noise.DHKey, isInitiator bool) (*HandshakeState, error)
```
#### func (*HandshakeState) GenerateEphemeral
```go
func (h *HandshakeState) GenerateEphemeral() (*noise.DHKey, error)
```
GenerateEphemeral creates the ephemeral keypair that will be used in handshake
This needs to be separate so NTCP2 can obfuscate it
#### func (*HandshakeState) ReadMessage
```go
func (h *HandshakeState) ReadMessage(message []byte) ([]byte, *noise.CipherState, *noise.CipherState, error)
```
#### func (*HandshakeState) SetEphemeral
```go
func (h *HandshakeState) SetEphemeral(key *noise.DHKey) error
```
SetEphemeral allows setting a potentially modified ephemeral key This is needed
for NTCP2's obfuscation layer
#### func (*HandshakeState) WriteMessage
```go
func (h *HandshakeState) WriteMessage(payload []byte) ([]byte, *noise.CipherState, *noise.CipherState, error)
```
#### type NoiseSession
```go
type NoiseSession struct {
router_info.RouterInfo
*noise.CipherState
*sync.Cond
*NoiseTransport // The parent transport, which "Dialed" the connection to the peer with whom we established the session
*HandshakeState
RecvQueue *cb.Queue
SendQueue *cb.Queue
VerifyCallback VerifyCallbackFunc
Conn net.Conn
}
```
#### func NewNoiseSession
```go
func NewNoiseSession(ri router_info.RouterInfo) (*NoiseSession, error)
```
#### func (*NoiseSession) Close
```go
func (s *NoiseSession) Close() error
```
#### func (*NoiseSession) ComposeInitiatorHandshakeMessage
```go
func (c *NoiseSession) ComposeInitiatorHandshakeMessage(
payload []byte,
ephemeralPrivate []byte,
) (
negotiationData,
handshakeMessage []byte,
handshakeState *noise.HandshakeState,
err error,
)
```
#### func (*NoiseSession) ComposeReceiverHandshakeMessage
```go
func (c *NoiseSession) ComposeReceiverHandshakeMessage(localStatic noise.DHKey, remoteStatic []byte, payload []byte, ephemeralPrivate []byte) (negData, msg []byte, state *noise.HandshakeState, err error)
```
#### func (*NoiseSession) LocalAddr
```go
func (s *NoiseSession) LocalAddr() net.Addr
```
#### func (*NoiseSession) QueueSendI2NP
```go
func (s *NoiseSession) QueueSendI2NP(msg i2np.I2NPMessage)
```
#### func (*NoiseSession) Read
```go
func (c *NoiseSession) Read(b []byte) (int, error)
```
#### func (*NoiseSession) ReadNextI2NP
```go
func (s *NoiseSession) ReadNextI2NP() (i2np.I2NPMessage, error)
```
#### func (*NoiseSession) RemoteAddr
```go
func (noise_session *NoiseSession) RemoteAddr() net.Addr
```
RemoteAddr implements net.Conn
#### func (*NoiseSession) RunIncomingHandshake
```go
func (c *NoiseSession) RunIncomingHandshake() error
```
#### func (*NoiseSession) RunOutgoingHandshake
```go
func (c *NoiseSession) RunOutgoingHandshake() error
```
#### func (*NoiseSession) SendQueueSize
```go
func (s *NoiseSession) SendQueueSize() int
```
#### func (*NoiseSession) SetDeadline
```go
func (noise_session *NoiseSession) SetDeadline(t time.Time) error
```
SetDeadline implements net.Conn
#### func (*NoiseSession) SetReadDeadline
```go
func (noise_session *NoiseSession) SetReadDeadline(t time.Time) error
```
SetReadDeadline implements net.Conn
#### func (*NoiseSession) SetWriteDeadline
```go
func (noise_session *NoiseSession) SetWriteDeadline(t time.Time) error
```
SetWriteDeadline implements net.Conn
#### func (*NoiseSession) Write
```go
func (c *NoiseSession) Write(b []byte) (int, error)
```
#### type NoiseTransport
```go
type NoiseTransport struct {
sync.Mutex
router_info.RouterInfo
Listener net.Listener
}
```
#### func NewNoiseTransport
```go
func NewNoiseTransport(netSocket net.Listener) *NoiseTransport
```
NewNoiseTransport create a NoiseTransport using a supplied net.Listener
#### func NewNoiseTransportSocket
```go
func NewNoiseTransportSocket() (*NoiseTransport, error)
```
NewNoiseTransportSocket creates a Noise transport socket with a random host and
port.
#### func (*NoiseTransport) Accept
```go
func (noopt *NoiseTransport) Accept() (net.Conn, error)
```
Accept a connection on a listening socket.
#### func (*NoiseTransport) Addr
```go
func (noopt *NoiseTransport) Addr() net.Addr
```
Addr of the transport, for now this is returning the IP:Port the transport is
listening on, but this might actually be the router identity
#### func (*NoiseTransport) Close
```go
func (noopt *NoiseTransport) Close() error
```
close the transport cleanly blocks until done returns an error if one happens
#### func (*NoiseTransport) Compatable
```go
func (noopt *NoiseTransport) Compatable(routerInfo router_info.RouterInfo) bool
```
Compatable return true if a routerInfo is compatable with this transport
#### func (*NoiseTransport) Compatible
```go
func (noopt *NoiseTransport) Compatible(routerInfo router_info.RouterInfo) bool
```
#### func (*NoiseTransport) GetSession
```go
func (noopt *NoiseTransport) GetSession(routerInfo router_info.RouterInfo) (transport.TransportSession, error)
```
Obtain a transport session with a router given its RouterInfo. If a session with
this router is NOT already made attempt to create one and block until made or
until an error happens returns an established TransportSession and nil on
success returns nil and an error on error
#### func (*NoiseTransport) Handshake
```go
func (c *NoiseTransport) Handshake(routerInfo router_info.RouterInfo) error
```
#### func (*NoiseTransport) HandshakeKey
```go
func (h *NoiseTransport) HandshakeKey() *noise.DHKey
```
#### func (*NoiseTransport) Name
```go
func (noopt *NoiseTransport) Name() string
```
Name of the transport TYPE, in this case `noise`
#### func (*NoiseTransport) SetIdentity
```go
func (noopt *NoiseTransport) SetIdentity(ident router_info.RouterInfo) (err error)
```
SetIdentity will set the router identity for this transport. will bind if the
underlying socket is not already if the underlying socket is already bound
update the RouterIdentity returns any errors that happen if they do
#### type VerifyCallbackFunc
```go
type VerifyCallbackFunc func(publicKey []byte, data []byte) error
```
# noise
--
import "github.com/go-i2p/go-i2p/lib/transport/noise"
![noise.svg](noise)
## Usage
```go

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 271 KiB

After

Width:  |  Height:  |  Size: 270 KiB

View File

@ -2,172 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/transport/ntcp"
## Usage
```go
const (
NOISE_DH_CURVE25519 = 1
NOISE_CIPHER_CHACHAPOLY = 1
NOISE_CIPHER_AESGCM = 2
NOISE_HASH_SHA256 = 3
NOISE_PATTERN_XK = 11
MaxPayloadSize = math.MaxUint16 - 16 - uint16Size /*data len*/
)
```
```go
const (
NTCP_PROTOCOL_VERSION = 2
NTCP_PROTOCOL_NAME = "NTCP2"
NTCP_MESSAGE_MAX_SIZE = 65537
)
```
#### type NTCP2Session
```go
type NTCP2Session struct {
*noise.NoiseSession
*NTCP2Transport
}
```
NTCP2Session extends the base noise.NoiseSession with NTCP2-specific
functionality
#### func NewNTCP2Session
```go
func NewNTCP2Session(noiseConfig router_info.RouterInfo) (*NTCP2Session, error)
```
NewNTCP2Session creates a new NTCP2 session using the existing noise
implementation
#### func (*NTCP2Session) ComposeInitiatorHandshakeMessage
```go
func (c *NTCP2Session) ComposeInitiatorHandshakeMessage(
localStatic noise.DHKey,
remoteStatic []byte,
payload []byte,
ephemeralPrivate []byte,
) (
negotiationData,
handshakeMessage []byte,
handshakeState *noise.HandshakeState,
err error,
)
```
Modify ComposeInitiatorHandshakeMessage in outgoing_handshake.go At the moment,
remoteStatic is stored in the NTCP2Session() and doesn't need to be passed as an
argument. You actually get it directly out of the remote RouterInfo, which the
NoiseSession also has access to. So maybe, the interface should change so that
we:
- A: get the localStatic out of the parent NTCP2Transport's routerInfo, which is the "local" routerInfo
- B: get the remoteStatic out of the NTCP2Session router, which is the "remote" routerInfo
#### func (*NTCP2Session) CreateSessionRequest
```go
func (s *NTCP2Session) CreateSessionRequest() (*SessionRequest, error)
```
#### func (*NTCP2Session) DeobfuscateEphemeral
```go
func (s *NTCP2Session) DeobfuscateEphemeral(obfuscatedEphemeralKey []byte) ([]byte, error)
```
DeobfuscateEphemeral reverses the key obfuscation
#### func (*NTCP2Session) ObfuscateEphemeral
```go
func (s *NTCP2Session) ObfuscateEphemeral(ephemeralKey []byte) ([]byte, error)
```
ObfuscateEphemeral implements NTCP2's key obfuscation using AES-256-CBC
#### type NTCP2Transport
```go
type NTCP2Transport struct {
*noise.NoiseTransport
*sntp.RouterTimestamper
}
```
NTCP2Transport is an ntcp2 transport implementing transport.NTCP2Transport
interface
#### func NewNTCP2Transport
```go
func NewNTCP2Transport(routerInfo *router_info.RouterInfo) (*NTCP2Transport, error)
```
#### func (*NTCP2Transport) Accept
```go
func (t *NTCP2Transport) Accept() (net.Conn, error)
```
#### func (*NTCP2Transport) Address
```go
func (t *NTCP2Transport) Address() (*router_address.RouterAddress, error)
```
#### func (*NTCP2Transport) Compatible
```go
func (t *NTCP2Transport) Compatible(routerInfo router_info.RouterInfo) bool
```
#### func (*NTCP2Transport) GetSession
```go
func (t *NTCP2Transport) GetSession(routerInfo router_info.RouterInfo) (transport.TransportSession, error)
```
#### func (*NTCP2Transport) Name
```go
func (t *NTCP2Transport) Name() string
```
#### type PaddingStrategy
```go
type PaddingStrategy interface {
AddPadding(message []byte) []byte
RemovePadding(message []byte) []byte
}
```
#### type SessionRequest
```go
type SessionRequest struct {
ObfuscatedKey []byte // 32 bytes
Timestamp uint32 // 4 bytes
Padding []byte // Random padding
}
```
# ntcp
--
import "github.com/go-i2p/go-i2p/lib/transport/ntcp"
![ntcp.svg](ntcp)
## Usage
```go

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 86 KiB

View File

@ -2,33 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/transport/obfs"
## Usage
#### func DeobfuscateEphemeralKey
```go
func DeobfuscateEphemeralKey(message []byte, aesKey *crypto.AESSymmetricKey) ([]byte, error)
```
DeobfuscateEphemeralKey decrypts the ephemeral public key in the message using
AES-256-CBC without padding
#### func ObfuscateEphemeralKey
```go
func ObfuscateEphemeralKey(message []byte, aesKey *crypto.AESSymmetricKey) ([]byte, error)
```
ObfuscateEphemeralKey encrypts the ephemeral public key in the message using
AES-256-CBC without padding
# obfs
--
import "github.com/go-i2p/go-i2p/lib/transport/obfs"
![obfs.svg](obfs)
## Usage
#### func DeobfuscateEphemeralKey

View File

@ -4,126 +4,113 @@
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="485pt" height="356pt"
viewBox="0.00 0.00 485.00 356.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 356)">
<svg width="479pt" height="279pt"
viewBox="0.00 0.00 479.00 279.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 279)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-356 485.0016,-356 485.0016,0 0,0"/>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-279 479.0016,-279 479.0016,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-348 485.0016,-348 485.0016,-8 8,-8"/>
<text text-anchor="middle" x="246.5008" y="-327.8" font-family="Arial" font-size="18.00" fill="#000000">obfs</text>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-271 479.0016,-271 479.0016,-8 8,-8"/>
<text text-anchor="middle" x="243.5008" y="-250.8" font-family="Arial" font-size="18.00" fill="#000000">obfs</text>
</g>
<g id="clust5" class="cluster">
<title>cluster_github.com/samber/oops</title>
<g id="a_clust5"><a xlink:href="/?f=github.com/samber/oops" xlink:title="package: github.com/samber/oops">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="337.8634,-231 337.8634,-310 412.0584,-310 412.0584,-231 337.8634,-231"/>
<text text-anchor="middle" x="374.9609" y="-291.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">oops</text>
<g id="clust3" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter</title>
<g id="a_clust3"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M286.3045,-155C286.3045,-155 458.6173,-155 458.6173,-155 464.6173,-155 470.6173,-161 470.6173,-167 470.6173,-167 470.6173,-221 470.6173,-221 470.6173,-227 464.6173,-233 458.6173,-233 458.6173,-233 286.3045,-233 286.3045,-233 280.3045,-233 274.3045,-227 274.3045,-221 274.3045,-221 274.3045,-167 274.3045,-167 274.3045,-161 280.3045,-155 286.3045,-155"/>
<text text-anchor="middle" x="372.4609" y="-163.5" font-family="Arial" font-size="15.00" fill="#222222">(*AESSymmetricEncrypter)</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/crypto</title>
<g id="a_clust2"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/crypto" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/crypto">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="273.9202,-16 273.9202,-223 477.0016,-223 477.0016,-16 273.9202,-16"/>
<text text-anchor="middle" x="375.4609" y="-204.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">crypto</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/crypto" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M294.3045,-110C294.3045,-110 456.6173,-110 456.6173,-110 462.6173,-110 468.6173,-116 468.6173,-122 468.6173,-122 468.6173,-176 468.6173,-176 468.6173,-182 462.6173,-188 456.6173,-188 456.6173,-188 294.3045,-188 294.3045,-188 288.3045,-188 282.3045,-182 282.3045,-176 282.3045,-176 282.3045,-122 282.3045,-122 282.3045,-116 288.3045,-110 294.3045,-110"/>
<text text-anchor="middle" x="375.4609" y="-118.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*AESSymmetricEncrypter)</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricDecrypter</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/crypto" xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricDecrypter">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M293.9202,-24C293.9202,-24 457.0016,-24 457.0016,-24 463.0016,-24 469.0016,-30 469.0016,-36 469.0016,-36 469.0016,-90 469.0016,-90 469.0016,-96 463.0016,-102 457.0016,-102 457.0016,-102 293.9202,-102 293.9202,-102 287.9202,-102 281.9202,-96 281.9202,-90 281.9202,-90 281.9202,-36 281.9202,-36 281.9202,-30 287.9202,-24 293.9202,-24"/>
<text text-anchor="middle" x="375.4609" y="-32.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*AESSymmetricDecrypter)</text>
<g id="a_clust2"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricDecrypter">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M285.9202,-16C285.9202,-16 459.0016,-16 459.0016,-16 465.0016,-16 471.0016,-22 471.0016,-28 471.0016,-28 471.0016,-82 471.0016,-82 471.0016,-88 465.0016,-94 459.0016,-94 459.0016,-94 285.9202,-94 285.9202,-94 279.9202,-94 273.9202,-88 273.9202,-82 273.9202,-82 273.9202,-28 273.9202,-28 273.9202,-22 279.9202,-16 285.9202,-16"/>
<text text-anchor="middle" x="372.4609" y="-24.5" font-family="Arial" font-size="15.00" fill="#222222">(*AESSymmetricDecrypter)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey | defined in obfs.go:9&#10;at obfs.go:11: calling [github.com/samber/oops.Errorf]&#10;at obfs.go:24: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter).EncryptNoPadding]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M175.166,-210C175.166,-210 34.7542,-210 34.7542,-210 28.7542,-210 22.7542,-204 22.7542,-198 22.7542,-198 22.7542,-186 22.7542,-186 22.7542,-180 28.7542,-174 34.7542,-174 34.7542,-174 175.166,-174 175.166,-174 181.166,-174 187.166,-180 187.166,-186 187.166,-186 187.166,-198 187.166,-198 187.166,-204 181.166,-210 175.166,-210"/>
<text text-anchor="middle" x="104.9601" y="-187.8" font-family="Verdana" font-size="14.00" fill="#000000">ObfuscateEphemeralKey</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter).EncryptNoPadding -->
<g id="node4" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter).EncryptNoPadding</title>
<g id="a_node4"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter).EncryptNoPadding | defined in aes.go:144">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M428.7741,-180C428.7741,-180 321.1477,-180 321.1477,-180 315.1477,-180 309.1477,-174 309.1477,-168 309.1477,-168 309.1477,-156 309.1477,-156 309.1477,-150 315.1477,-144 321.1477,-144 321.1477,-144 428.7741,-144 428.7741,-144 434.7741,-144 440.7741,-150 440.7741,-156 440.7741,-156 440.7741,-168 440.7741,-168 440.7741,-174 434.7741,-180 428.7741,-180"/>
<text text-anchor="middle" x="374.9609" y="-157.8" font-family="Verdana" font-size="14.00" fill="#000000">EncryptNoPadding</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter).EncryptNoPadding -->
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter).EncryptNoPadding</title>
<g id="a_edge3"><a xlink:title="at obfs.go:24: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter).EncryptNoPadding]">
<path fill="none" stroke="#8b4513" d="M187.4363,-182.836C223.006,-178.8838 264.339,-174.2913 299.1339,-170.4252"/>
<polygon fill="#8b4513" stroke="#8b4513" points="299.6827,-173.8859 309.235,-169.3029 298.9096,-166.9287 299.6827,-173.8859"/>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey | defined in obfs.go:9&#10;at obfs.go:24: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter).EncryptNoPadding]&#10;at obfs.go:11: calling [github.com/samber/oops.Errorf]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M175.166,-169C175.166,-169 34.7542,-169 34.7542,-169 28.7542,-169 22.7542,-163 22.7542,-157 22.7542,-157 22.7542,-145 22.7542,-145 22.7542,-139 28.7542,-133 34.7542,-133 34.7542,-133 175.166,-133 175.166,-133 181.166,-133 187.166,-139 187.166,-145 187.166,-145 187.166,-157 187.166,-157 187.166,-163 181.166,-169 175.166,-169"/>
<text text-anchor="middle" x="104.9601" y="-146.8" font-family="Verdana" font-size="14.00" fill="#000000">ObfuscateEphemeralKey</text>
</a>
</g>
</g>
<!-- github.com/samber/oops.Errorf -->
<g id="node5" class="node">
<g id="node2" class="node">
<title>github.com/samber/oops.Errorf</title>
<g id="a_node5"><a xlink:title="github.com/samber/oops.Errorf | defined in oops.go:34">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M392.1562,-275C392.1562,-275 357.7656,-275 357.7656,-275 351.7656,-275 345.7656,-269 345.7656,-263 345.7656,-263 345.7656,-251 345.7656,-251 345.7656,-245 351.7656,-239 357.7656,-239 357.7656,-239 392.1562,-239 392.1562,-239 398.1562,-239 404.1562,-245 404.1562,-251 404.1562,-251 404.1562,-263 404.1562,-263 404.1562,-269 398.1562,-275 392.1562,-275"/>
<text text-anchor="middle" x="374.9609" y="-252.8" font-family="Verdana" font-size="14.00" fill="#000000">Errorf</text>
<g id="a_node2"><a xlink:title="github.com/samber/oops.Errorf | defined in oops.go:34">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M389.1562,-147C389.1562,-147 354.7656,-147 354.7656,-147 348.7656,-147 342.7656,-141 342.7656,-135 342.7656,-135 342.7656,-123 342.7656,-123 342.7656,-117 348.7656,-111 354.7656,-111 354.7656,-111 389.1562,-111 389.1562,-111 395.1562,-111 401.1562,-117 401.1562,-123 401.1562,-123 401.1562,-135 401.1562,-135 401.1562,-141 395.1562,-147 389.1562,-147"/>
<text text-anchor="middle" x="371.9609" y="-133.2" font-family="Verdana" font-size="14.00" fill="#000000">oops</text>
<text text-anchor="middle" x="371.9609" y="-116.4" font-family="Verdana" font-size="14.00" fill="#000000">Errorf</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge2" class="edge">
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge2"><a xlink:title="at obfs.go:11: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M179.8118,-210.0198C230.4549,-222.2116 295.2931,-237.8208 335.9902,-247.6182"/>
<polygon fill="#8b4513" stroke="#8b4513" points="335.252,-251.0404 345.7935,-249.9782 336.8905,-244.2348 335.252,-251.0404"/>
<g id="a_edge4"><a xlink:title="at obfs.go:11: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M187.2478,-144.2198C235.5675,-140.2384 294.4375,-135.3877 332.531,-132.2489"/>
<polygon fill="#8b4513" stroke="#8b4513" points="333.0195,-135.7206 342.6983,-131.4111 332.4446,-128.7442 333.0195,-135.7206"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter).EncryptNoPadding -->
<g id="node5" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter).EncryptNoPadding</title>
<g id="a_node5"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter).EncryptNoPadding | defined in aes.go:144">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M425.7741,-225C425.7741,-225 318.1477,-225 318.1477,-225 312.1477,-225 306.1477,-219 306.1477,-213 306.1477,-213 306.1477,-201 306.1477,-201 306.1477,-195 312.1477,-189 318.1477,-189 318.1477,-189 425.7741,-189 425.7741,-189 431.7741,-189 437.7741,-195 437.7741,-201 437.7741,-201 437.7741,-213 437.7741,-213 437.7741,-219 431.7741,-225 425.7741,-225"/>
<text text-anchor="middle" x="371.9609" y="-211.2" font-family="Verdana" font-size="14.00" fill="#000000">crypto</text>
<text text-anchor="middle" x="371.9609" y="-194.4" font-family="Verdana" font-size="14.00" fill="#000000">EncryptNoPadding</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter).EncryptNoPadding -->
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.ObfuscateEphemeralKey&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter).EncryptNoPadding</title>
<g id="a_edge1"><a xlink:title="at obfs.go:24: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricEncrypter).EncryptNoPadding]">
<path fill="none" stroke="#8b4513" d="M187.2478,-168.2588C221.973,-175.542 262.147,-183.9679 296.1427,-191.0981"/>
<polygon fill="#8b4513" stroke="#8b4513" points="295.5127,-194.5421 306.0183,-193.1694 296.9497,-187.6911 295.5127,-194.5421"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.DeobfuscateEphemeralKey -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.DeobfuscateEphemeralKey</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.DeobfuscateEphemeralKey | defined in obfs.go:36&#10;at obfs.go:51: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricDecrypter).DecryptNoPadding]&#10;at obfs.go:38: calling [github.com/samber/oops.Errorf]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M181.8803,-114C181.8803,-114 28.0399,-114 28.0399,-114 22.0399,-114 16.0399,-108 16.0399,-102 16.0399,-102 16.0399,-90 16.0399,-90 16.0399,-84 22.0399,-78 28.0399,-78 28.0399,-78 181.8803,-78 181.8803,-78 187.8803,-78 193.8803,-84 193.8803,-90 193.8803,-90 193.8803,-102 193.8803,-102 193.8803,-108 187.8803,-114 181.8803,-114"/>
<text text-anchor="middle" x="104.9601" y="-91.8" font-family="Verdana" font-size="14.00" fill="#000000">DeobfuscateEphemeralKey</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricDecrypter).DecryptNoPadding -->
<g id="node3" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricDecrypter).DecryptNoPadding</title>
<g id="a_node3"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricDecrypter).DecryptNoPadding | defined in aes.go:162">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M429.0423,-94C429.0423,-94 320.8795,-94 320.8795,-94 314.8795,-94 308.8795,-88 308.8795,-82 308.8795,-82 308.8795,-70 308.8795,-70 308.8795,-64 314.8795,-58 320.8795,-58 320.8795,-58 429.0423,-58 429.0423,-58 435.0423,-58 441.0423,-64 441.0423,-70 441.0423,-70 441.0423,-82 441.0423,-82 441.0423,-88 435.0423,-94 429.0423,-94"/>
<text text-anchor="middle" x="374.9609" y="-71.8" font-family="Verdana" font-size="14.00" fill="#000000">DecryptNoPadding</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.DeobfuscateEphemeralKey&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricDecrypter).DecryptNoPadding -->
<g id="edge1" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.DeobfuscateEphemeralKey&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricDecrypter).DecryptNoPadding</title>
<g id="a_edge1"><a xlink:title="at obfs.go:51: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricDecrypter).DecryptNoPadding]">
<path fill="none" stroke="#8b4513" d="M194.1167,-89.3958C227.7974,-86.901 265.798,-84.0861 298.2411,-81.6829"/>
<polygon fill="#8b4513" stroke="#8b4513" points="298.8527,-85.1473 308.5668,-80.9181 298.3356,-78.1664 298.8527,-85.1473"/>
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.DeobfuscateEphemeralKey</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.DeobfuscateEphemeralKey | defined in obfs.go:36&#10;at obfs.go:38: calling [github.com/samber/oops.Errorf]&#10;at obfs.go:51: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricDecrypter).DecryptNoPadding]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M181.8803,-95C181.8803,-95 28.0399,-95 28.0399,-95 22.0399,-95 16.0399,-89 16.0399,-83 16.0399,-83 16.0399,-71 16.0399,-71 16.0399,-65 22.0399,-59 28.0399,-59 28.0399,-59 181.8803,-59 181.8803,-59 187.8803,-59 193.8803,-65 193.8803,-71 193.8803,-71 193.8803,-83 193.8803,-83 193.8803,-89 187.8803,-95 181.8803,-95"/>
<text text-anchor="middle" x="104.9601" y="-72.8" font-family="Verdana" font-size="14.00" fill="#000000">DeobfuscateEphemeralKey</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.DeobfuscateEphemeralKey&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge4" class="edge">
<g id="edge2" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.DeobfuscateEphemeralKey&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge4"><a xlink:title="at obfs.go:38: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M135.1467,-114.0001C184.6805,-143.5369 283.0997,-202.2237 337.1832,-234.4734"/>
<polygon fill="#8b4513" stroke="#8b4513" points="335.406,-237.4886 345.7875,-239.604 338.9911,-231.4763 335.406,-237.4886"/>
<g id="a_edge2"><a xlink:title="at obfs.go:38: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M194.2387,-94.3875C241.1517,-103.5241 296.2782,-114.2603 332.5523,-121.3249"/>
<polygon fill="#8b4513" stroke="#8b4513" points="332.2326,-124.8284 342.7173,-123.3046 333.5708,-117.9575 332.2326,-124.8284"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricDecrypter).DecryptNoPadding -->
<g id="node4" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricDecrypter).DecryptNoPadding</title>
<g id="a_node4"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricDecrypter).DecryptNoPadding | defined in aes.go:162">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M426.0423,-86C426.0423,-86 317.8795,-86 317.8795,-86 311.8795,-86 305.8795,-80 305.8795,-74 305.8795,-74 305.8795,-62 305.8795,-62 305.8795,-56 311.8795,-50 317.8795,-50 317.8795,-50 426.0423,-50 426.0423,-50 432.0423,-50 438.0423,-56 438.0423,-62 438.0423,-62 438.0423,-74 438.0423,-74 438.0423,-80 432.0423,-86 426.0423,-86"/>
<text text-anchor="middle" x="371.9609" y="-72.2" font-family="Verdana" font-size="14.00" fill="#000000">crypto</text>
<text text-anchor="middle" x="371.9609" y="-55.4" font-family="Verdana" font-size="14.00" fill="#000000">DecryptNoPadding</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.DeobfuscateEphemeralKey&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricDecrypter).DecryptNoPadding -->
<g id="edge3" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport/obfs.DeobfuscateEphemeralKey&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricDecrypter).DecryptNoPadding</title>
<g id="a_edge3"><a xlink:title="at obfs.go:51: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/crypto.AESSymmetricDecrypter).DecryptNoPadding]">
<path fill="none" stroke="#8b4513" d="M194.2387,-73.9906C227.0695,-72.884 263.9229,-71.6417 295.5223,-70.5766"/>
<polygon fill="#8b4513" stroke="#8b4513" points="295.7091,-74.0724 305.5855,-70.2374 295.4732,-67.0763 295.7091,-74.0724"/>
</a>
</g>
</g>

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -2,18 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/transport/ssu"
i2p ssu transport implementation
## Usage
# ssu
--
import "github.com/go-i2p/go-i2p/lib/transport/ssu"
i2p ssu transport implementation
![ssu.svg](ssu)
i2p ssu transport implementation
## Usage

View File

@ -4,86 +4,54 @@
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="363pt" height="755pt"
viewBox="0.00 0.00 362.52 755.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 755)">
<svg width="355pt" height="658pt"
viewBox="0.00 0.00 354.52 658.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 658)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-755 362.5176,-755 362.5176,0 0,0"/>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-658 354.5176,-658 354.5176,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="0,-8 0,-747 354.5176,-747 354.5176,-8 0,-8"/>
<text text-anchor="middle" x="177.2588" y="-726.8" font-family="Arial" font-size="18.00" fill="#000000">transport</text>
</g>
<g id="clust8" class="cluster">
<title>cluster_github.com/sirupsen/logrus</title>
<g id="a_clust8"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="package: github.com/sirupsen/logrus">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="231.2623,-459 231.2623,-580 324.5835,-580 324.5835,-459 231.2623,-459"/>
<text text-anchor="middle" x="277.9229" y="-561.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logrus</text>
</a>
</g>
</g>
<g id="clust9" class="cluster">
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust9"><a xlink:href="/?f=github.com/sirupsen/logrus" xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M251.2623,-467C251.2623,-467 304.5835,-467 304.5835,-467 310.5835,-467 316.5835,-473 316.5835,-479 316.5835,-479 316.5835,-533 316.5835,-533 316.5835,-539 310.5835,-545 304.5835,-545 304.5835,-545 251.2623,-545 251.2623,-545 245.2623,-545 239.2623,-539 239.2623,-533 239.2623,-533 239.2623,-479 239.2623,-479 239.2623,-473 245.2623,-467 251.2623,-467"/>
<text text-anchor="middle" x="277.9229" y="-475.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust7" class="cluster">
<title>cluster_github.com/samber/oops</title>
<g id="a_clust7"><a xlink:href="/?f=github.com/samber/oops" xlink:title="package: github.com/samber/oops">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="240.8254,-16 240.8254,-95 315.0204,-95 315.0204,-16 240.8254,-16"/>
<text text-anchor="middle" x="277.9229" y="-76.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">oops</text>
</a>
</g>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="0,-8 0,-650 346.5176,-650 346.5176,-8 0,-8"/>
<text text-anchor="middle" x="173.2588" y="-629.8" font-family="Arial" font-size="18.00" fill="#000000">transport</text>
</g>
<g id="clust5" class="cluster">
<title>cluster_github.com/go&#45;i2p/logger</title>
<g id="a_clust5"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="package: github.com/go&#45;i2p/logger">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="209.3282,-103 209.3282,-451 346.5176,-451 346.5176,-103 209.3282,-103"/>
<text text-anchor="middle" x="277.9229" y="-432.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">logger</text>
</a>
</g>
</g>
<g id="clust6" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust6"><a xlink:href="/?f=github.com/go-i2p/logger" xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M241.1578,-155C241.1578,-155 314.688,-155 314.688,-155 320.688,-155 326.688,-161 326.688,-167 326.688,-167 326.688,-404 326.688,-404 326.688,-410 320.688,-416 314.688,-416 314.688,-416 241.1578,-416 241.1578,-416 235.1578,-416 229.1578,-410 229.1578,-404 229.1578,-404 229.1578,-167 229.1578,-167 229.1578,-161 235.1578,-155 241.1578,-155"/>
<text text-anchor="middle" x="277.9229" y="-163.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info</title>
<g id="a_clust3"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/router_info" xlink:title="package: github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="224.8107,-588 224.8107,-709 332.0351,-709 332.0351,-588 224.8107,-588"/>
<text text-anchor="middle" x="278.4229" y="-690.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">router_info</text>
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo</title>
<g id="a_clust5"><a xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M238.4341,-533C238.4341,-533 317.4117,-533 317.4117,-533 323.4117,-533 329.4117,-539 329.4117,-545 329.4117,-545 329.4117,-599 329.4117,-599 329.4117,-605 323.4117,-611 317.4117,-611 317.4117,-611 238.4341,-611 238.4341,-611 232.4341,-611 226.4341,-605 226.4341,-599 226.4341,-599 226.4341,-545 226.4341,-545 226.4341,-539 232.4341,-533 238.4341,-533"/>
<text text-anchor="middle" x="277.9229" y="-541.5" font-family="Arial" font-size="15.00" fill="#222222">(RouterInfo)</text>
</a>
</g>
</g>
<g id="clust4" class="cluster">
<title>cluster_github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo</title>
<g id="a_clust4"><a xlink:href="/?f=github.com/go-i2p/go-i2p/lib/common/router_info" xlink:title="type: github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M244.8107,-596C244.8107,-596 312.0351,-596 312.0351,-596 318.0351,-596 324.0351,-602 324.0351,-608 324.0351,-608 324.0351,-662 324.0351,-662 324.0351,-668 318.0351,-674 312.0351,-674 312.0351,-674 244.8107,-674 244.8107,-674 238.8107,-674 232.8107,-668 232.8107,-662 232.8107,-662 232.8107,-608 232.8107,-608 232.8107,-602 238.8107,-596 244.8107,-596"/>
<text text-anchor="middle" x="278.4229" y="-604.5" font-family="Tahoma bold" font-size="15.00" fill="#222222">(RouterInfo)</text>
<title>cluster_*github.com/sirupsen/logrus.Logger</title>
<g id="a_clust4"><a xlink:title="type: *github.com/sirupsen/logrus.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M251.2623,-435C251.2623,-435 305.5835,-435 305.5835,-435 311.5835,-435 317.5835,-441 317.5835,-447 317.5835,-447 317.5835,-501 317.5835,-501 317.5835,-507 311.5835,-513 305.5835,-513 305.5835,-513 251.2623,-513 251.2623,-513 245.2623,-513 239.2623,-507 239.2623,-501 239.2623,-501 239.2623,-447 239.2623,-447 239.2623,-441 245.2623,-435 251.2623,-435"/>
<text text-anchor="middle" x="278.4229" y="-443.5" font-family="Arial" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_*github.com/go&#45;i2p/logger.Logger</title>
<g id="a_clust3"><a xlink:title="type: *github.com/go&#45;i2p/logger.Logger">
<path fill="#eed8ae" stroke="#000000" stroke-width=".5" d="M241.1578,-121C241.1578,-121 314.688,-121 314.688,-121 320.688,-121 326.688,-127 326.688,-133 326.688,-133 326.688,-370 326.688,-370 326.688,-376 320.688,-382 314.688,-382 314.688,-382 241.1578,-382 241.1578,-382 235.1578,-382 229.1578,-376 229.1578,-370 229.1578,-370 229.1578,-133 229.1578,-133 229.1578,-127 235.1578,-121 241.1578,-121"/>
<text text-anchor="middle" x="277.9229" y="-129.5" font-family="Arial" font-size="15.00" fill="#222222">(*Logger)</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer</title>
<g id="a_clust2"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M20,-224C20,-224 133.3282,-224 133.3282,-224 139.3282,-224 145.3282,-230 145.3282,-236 145.3282,-236 145.3282,-534 145.3282,-534 145.3282,-540 139.3282,-546 133.3282,-546 133.3282,-546 20,-546 20,-546 14,-546 8,-540 8,-534 8,-534 8,-236 8,-236 8,-230 14,-224 20,-224"/>
<text text-anchor="middle" x="76.6641" y="-232.5" font-family="Arial" font-size="15.00" fill="#222222">(*TransportMuxer)</text>
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M20,-201C20,-201 133.3282,-201 133.3282,-201 139.3282,-201 145.3282,-207 145.3282,-213 145.3282,-213 145.3282,-511 145.3282,-511 145.3282,-517 139.3282,-523 133.3282,-523 133.3282,-523 20,-523 20,-523 14,-523 8,-517 8,-511 8,-511 8,-213 8,-213 8,-207 14,-201 20,-201"/>
<text text-anchor="middle" x="76.6641" y="-209.5" font-family="Arial" font-size="15.00" fill="#222222">(*TransportMuxer)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport.Mux -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport.Mux</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/transport.Mux | defined in multi.go:18&#10;at multi.go:19: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:19: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:22: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M91.6641,-140C91.6641,-140 61.6641,-140 61.6641,-140 55.6641,-140 49.6641,-134 49.6641,-128 49.6641,-128 49.6641,-116 49.6641,-116 49.6641,-110 55.6641,-104 61.6641,-104 61.6641,-104 91.6641,-104 91.6641,-104 97.6641,-104 103.6641,-110 103.6641,-116 103.6641,-116 103.6641,-128 103.6641,-128 103.6641,-134 97.6641,-140 91.6641,-140"/>
<text text-anchor="middle" x="76.6641" y="-117.8" font-family="Verdana" font-size="14.00" fill="#000000">Mux</text>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/transport.Mux | defined in multi.go:18&#10;at multi.go:19: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:22: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:19: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M91.6641,-193C91.6641,-193 61.6641,-193 61.6641,-193 55.6641,-193 49.6641,-187 49.6641,-181 49.6641,-181 49.6641,-169 49.6641,-169 49.6641,-163 55.6641,-157 61.6641,-157 61.6641,-157 91.6641,-157 91.6641,-157 97.6641,-157 103.6641,-163 103.6641,-169 103.6641,-169 103.6641,-181 103.6641,-181 103.6641,-187 97.6641,-193 91.6641,-193"/>
<text text-anchor="middle" x="76.6641" y="-170.8" font-family="Verdana" font-size="14.00" fill="#000000">Mux</text>
</a>
</g>
</g>
@ -91,35 +59,37 @@
<g id="node10" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_node10"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithField | defined in log.go:54">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M306.1974,-286C306.1974,-286 249.6484,-286 249.6484,-286 243.6484,-286 237.6484,-280 237.6484,-274 237.6484,-274 237.6484,-262 237.6484,-262 237.6484,-256 243.6484,-250 249.6484,-250 249.6484,-250 306.1974,-250 306.1974,-250 312.1974,-250 318.1974,-256 318.1974,-262 318.1974,-262 318.1974,-274 318.1974,-274 318.1974,-280 312.1974,-286 306.1974,-286"/>
<text text-anchor="middle" x="277.9229" y="-263.8" font-family="Verdana" font-size="14.00" fill="#000000">WithField</text>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M306.1974,-374C306.1974,-374 249.6484,-374 249.6484,-374 243.6484,-374 237.6484,-368 237.6484,-362 237.6484,-362 237.6484,-350 237.6484,-350 237.6484,-344 243.6484,-338 249.6484,-338 249.6484,-338 306.1974,-338 306.1974,-338 312.1974,-338 318.1974,-344 318.1974,-350 318.1974,-350 318.1974,-362 318.1974,-362 318.1974,-368 312.1974,-374 306.1974,-374"/>
<text text-anchor="middle" x="277.9229" y="-360.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="277.9229" y="-343.4" font-family="Verdana" font-size="14.00" fill="#000000">WithField</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport.Mux&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge1" class="edge">
<g id="edge12" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport.Mux&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge1"><a xlink:title="at multi.go:19: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M103.881,-115.4535C127.0855,-111.5871 159.9812,-110.4029 181.3282,-128 220.2551,-160.0887 176.6793,-199.5418 209.3282,-238 214.5331,-244.1311 221.2292,-249.0509 228.3916,-252.9869"/>
<polygon fill="#8b4513" stroke="#8b4513" points="227.1103,-256.2553 237.6361,-257.4635 230.1612,-249.955 227.1103,-256.2553"/>
<g id="a_edge12"><a xlink:title="at multi.go:19: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M103.6944,-178.8224C117.3618,-181.8776 133.5102,-187.3274 145.3282,-197 196.1386,-238.5862 169.7687,-280.7318 217.3282,-326 220.8117,-329.3156 224.7321,-332.3384 228.8604,-335.0771"/>
<polygon fill="#8b4513" stroke="#8b4513" points="227.1789,-338.1499 237.5528,-340.3024 230.7854,-332.1505 227.1789,-338.1499"/>
</a>
</g>
</g>
<!-- (*github.com/sirupsen/logrus.Logger).Debug -->
<g id="node15" class="node">
<g id="node14" class="node">
<title>(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_node15"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debug | defined in logger.go:221">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M296.7449,-537C296.7449,-537 259.1009,-537 259.1009,-537 253.1009,-537 247.1009,-531 247.1009,-525 247.1009,-525 247.1009,-513 247.1009,-513 247.1009,-507 253.1009,-501 259.1009,-501 259.1009,-501 296.7449,-501 296.7449,-501 302.7449,-501 308.7449,-507 308.7449,-513 308.7449,-513 308.7449,-525 308.7449,-525 308.7449,-531 302.7449,-537 296.7449,-537"/>
<text text-anchor="middle" x="277.9229" y="-514.8" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
<g id="a_node14"><a xlink:title="(*github.com/sirupsen/logrus.Logger).Debug | defined in logger.go:221">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M296.7449,-505C296.7449,-505 259.1009,-505 259.1009,-505 253.1009,-505 247.1009,-499 247.1009,-493 247.1009,-493 247.1009,-481 247.1009,-481 247.1009,-475 253.1009,-469 259.1009,-469 259.1009,-469 296.7449,-469 296.7449,-469 302.7449,-469 308.7449,-475 308.7449,-481 308.7449,-481 308.7449,-493 308.7449,-493 308.7449,-499 302.7449,-505 296.7449,-505"/>
<text text-anchor="middle" x="277.9229" y="-491.2" font-family="Verdana" font-size="14.00" fill="#000000">logrus</text>
<text text-anchor="middle" x="277.9229" y="-474.4" font-family="Verdana" font-size="14.00" fill="#000000">Debug</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport.Mux&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge19" class="edge">
<g id="edge4" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport.Mux&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge19"><a xlink:title="at multi.go:19: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:22: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M92.5072,-140.3445C107.8253,-158.8705 130.7927,-188.8413 145.3282,-218 187.7219,-303.043 167.1631,-336.8435 209.3282,-422 222.0841,-447.7618 241.2825,-474.224 256.1275,-492.9879"/>
<polygon fill="#8b4513" stroke="#8b4513" points="253.403,-495.1851 262.3969,-500.7852 258.8583,-490.7987 253.403,-495.1851"/>
<g id="a_edge4"><a xlink:title="at multi.go:19: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:22: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M103.9715,-178.0534C117.883,-180.8976 134.17,-186.3907 145.3282,-197 178.201,-228.2556 197.3996,-347.2522 217.3282,-388 229.8426,-413.588 247.011,-441.1015 259.8787,-460.6131"/>
<polygon fill="#8b4513" stroke="#8b4513" points="256.9968,-462.6 265.456,-468.9791 262.8212,-458.7171 256.9968,-462.6"/>
</a>
</g>
</g>
@ -127,89 +97,91 @@
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport.init</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/transport.init | defined in .:0&#10;at errors.go:6: calling [github.com/samber/oops.Errorf]&#10;at multi.go:8: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M91.6641,-70C91.6641,-70 61.6641,-70 61.6641,-70 55.6641,-70 49.6641,-64 49.6641,-58 49.6641,-58 49.6641,-46 49.6641,-46 49.6641,-40 55.6641,-34 61.6641,-34 61.6641,-34 91.6641,-34 91.6641,-34 97.6641,-34 103.6641,-40 103.6641,-46 103.6641,-46 103.6641,-58 103.6641,-58 103.6641,-64 97.6641,-70 91.6641,-70"/>
<text text-anchor="middle" x="76.6641" y="-47.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="node9" class="node">
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node9"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M326.6124,-147C326.6124,-147 229.2334,-147 229.2334,-147 223.2334,-147 217.2334,-141 217.2334,-135 217.2334,-135 217.2334,-123 217.2334,-123 217.2334,-117 223.2334,-111 229.2334,-111 229.2334,-111 326.6124,-111 326.6124,-111 332.6124,-111 338.6124,-117 338.6124,-123 338.6124,-123 338.6124,-135 338.6124,-135 338.6124,-141 332.6124,-147 326.6124,-147"/>
<text text-anchor="middle" x="277.9229" y="-124.8" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge18" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge18"><a xlink:title="at multi.go:8: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M103.8068,-62.3846C133.7773,-73.851 182.8699,-92.6335 221.2996,-107.3364"/>
<polygon fill="#8b4513" stroke="#8b4513" points="220.2316,-110.6751 230.822,-110.9796 222.7329,-104.1373 220.2316,-110.6751"/>
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M91.6641,-57C91.6641,-57 61.6641,-57 61.6641,-57 55.6641,-57 49.6641,-51 49.6641,-45 49.6641,-45 49.6641,-33 49.6641,-33 49.6641,-27 55.6641,-21 61.6641,-21 61.6641,-21 91.6641,-21 91.6641,-21 97.6641,-21 103.6641,-27 103.6641,-33 103.6641,-33 103.6641,-45 103.6641,-45 103.6641,-51 97.6641,-57 91.6641,-57"/>
<text text-anchor="middle" x="76.6641" y="-34.8" font-family="Verdana" font-size="14.00" fill="#000000">init</text>
</a>
</g>
</g>
<!-- github.com/samber/oops.Errorf -->
<g id="node14" class="node">
<g id="node3" class="node">
<title>github.com/samber/oops.Errorf</title>
<g id="a_node14"><a xlink:title="github.com/samber/oops.Errorf | defined in oops.go:34">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M295.1182,-60C295.1182,-60 260.7276,-60 260.7276,-60 254.7276,-60 248.7276,-54 248.7276,-48 248.7276,-48 248.7276,-36 248.7276,-36 248.7276,-30 254.7276,-24 260.7276,-24 260.7276,-24 295.1182,-24 295.1182,-24 301.1182,-24 307.1182,-30 307.1182,-36 307.1182,-36 307.1182,-48 307.1182,-48 307.1182,-54 301.1182,-60 295.1182,-60"/>
<text text-anchor="middle" x="277.9229" y="-37.8" font-family="Verdana" font-size="14.00" fill="#000000">Errorf</text>
<g id="a_node3"><a xlink:title="github.com/samber/oops.Errorf | defined in oops.go:34">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M295.1182,-52C295.1182,-52 260.7276,-52 260.7276,-52 254.7276,-52 248.7276,-46 248.7276,-40 248.7276,-40 248.7276,-28 248.7276,-28 248.7276,-22 254.7276,-16 260.7276,-16 260.7276,-16 295.1182,-16 295.1182,-16 301.1182,-16 307.1182,-22 307.1182,-28 307.1182,-28 307.1182,-40 307.1182,-40 307.1182,-46 301.1182,-52 295.1182,-52"/>
<text text-anchor="middle" x="277.9229" y="-38.2" font-family="Verdana" font-size="14.00" fill="#000000">oops</text>
<text text-anchor="middle" x="277.9229" y="-21.4" font-family="Verdana" font-size="14.00" fill="#000000">Errorf</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport.init&#45;&gt;github.com/samber/oops.Errorf -->
<g id="edge5" class="edge">
<g id="edge11" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport.init&#45;&gt;github.com/samber/oops.Errorf</title>
<g id="a_edge5"><a xlink:title="at errors.go:6: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M103.8068,-50.6514C138.4765,-48.9287 198.7348,-45.9346 238.475,-43.9601"/>
<polygon fill="#8b4513" stroke="#8b4513" points="238.7904,-47.4488 248.6043,-43.4568 238.4429,-40.4574 238.7904,-47.4488"/>
<g id="a_edge11"><a xlink:title="at errors.go:6: calling [github.com/samber/oops.Errorf]">
<path fill="none" stroke="#8b4513" d="M103.8068,-38.3257C138.4765,-37.4644 198.7348,-35.9673 238.475,-34.98"/>
<polygon fill="#8b4513" stroke="#8b4513" points="238.6944,-38.4758 248.6043,-34.7284 238.5204,-31.4779 238.6944,-38.4758"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="node4" class="node">
<title>github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/logger.GetGoI2PLogger | defined in log.go:120">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M326.6124,-113C326.6124,-113 229.2334,-113 229.2334,-113 223.2334,-113 217.2334,-107 217.2334,-101 217.2334,-101 217.2334,-89 217.2334,-89 217.2334,-83 223.2334,-77 229.2334,-77 229.2334,-77 326.6124,-77 326.6124,-77 332.6124,-77 338.6124,-83 338.6124,-89 338.6124,-89 338.6124,-101 338.6124,-101 338.6124,-107 332.6124,-113 326.6124,-113"/>
<text text-anchor="middle" x="277.9229" y="-99.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="277.9229" y="-82.4" font-family="Verdana" font-size="14.00" fill="#000000">GetGoI2PLogger</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/transport.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger -->
<g id="edge16" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/transport.init&#45;&gt;github.com/go&#45;i2p/logger.GetGoI2PLogger</title>
<g id="a_edge16"><a xlink:title="at multi.go:8: calling [github.com/go&#45;i2p/logger.GetGoI2PLogger]">
<path fill="none" stroke="#8b4513" d="M103.9173,-44.9123C125.1259,-49.6571 155.2389,-56.7091 181.3282,-64 192.1517,-67.0247 203.5808,-70.4675 214.6411,-73.9321"/>
<polygon fill="#8b4513" stroke="#8b4513" points="213.6512,-77.2899 224.2413,-76.9723 215.7646,-70.6165 213.6512,-77.2899"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Name -->
<g id="node3" class="node">
<g id="node5" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Name</title>
<g id="a_node3"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Name | defined in multi.go:59&#10;at multi.go:60: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:67: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:67: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M93.5921,-416C93.5921,-416 59.7361,-416 59.7361,-416 53.7361,-416 47.7361,-410 47.7361,-404 47.7361,-404 47.7361,-392 47.7361,-392 47.7361,-386 53.7361,-380 59.7361,-380 59.7361,-380 93.5921,-380 93.5921,-380 99.5921,-380 105.5921,-386 105.5921,-392 105.5921,-392 105.5921,-404 105.5921,-404 105.5921,-410 99.5921,-416 93.5921,-416"/>
<text text-anchor="middle" x="76.6641" y="-393.8" font-family="Verdana" font-size="14.00" fill="#000000">Name</text>
<g id="a_node5"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Name | defined in multi.go:59&#10;at multi.go:60: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:67: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:67: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M93.5921,-454C93.5921,-454 59.7361,-454 59.7361,-454 53.7361,-454 47.7361,-448 47.7361,-442 47.7361,-442 47.7361,-430 47.7361,-430 47.7361,-424 53.7361,-418 59.7361,-418 59.7361,-418 93.5921,-418 93.5921,-418 99.5921,-418 105.5921,-424 105.5921,-430 105.5921,-430 105.5921,-442 105.5921,-442 105.5921,-448 99.5921,-454 93.5921,-454"/>
<text text-anchor="middle" x="76.6641" y="-431.8" font-family="Verdana" font-size="14.00" fill="#000000">Name</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Name&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge10" class="edge">
<g id="edge5" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Name&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge10"><a xlink:title="at multi.go:67: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M105.445,-388.4741C118.2973,-383.4742 133.2362,-376.586 145.3282,-368 179.4326,-343.7839 175.3763,-323.4295 209.3282,-299 215.2354,-294.7495 221.8185,-290.8814 228.5039,-287.4303"/>
<polygon fill="#8b4513" stroke="#8b4513" points="230.1716,-290.5112 237.6298,-282.9862 227.1068,-284.2178 230.1716,-290.5112"/>
<g id="a_edge5"><a xlink:title="at multi.go:67: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M105.5778,-423.848C117.9073,-418.5423 132.4025,-412.1399 145.3282,-406 161.1284,-398.4946 164.1892,-394.7461 180.3282,-388 195.4432,-381.682 212.2792,-375.7773 227.6541,-370.803"/>
<polygon fill="#8b4513" stroke="#8b4513" points="229.0413,-374.0348 237.5139,-367.6735 226.9236,-367.3628 229.0413,-374.0348"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Name&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge9" class="edge">
<g id="edge1" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Name&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge9"><a xlink:title="at multi.go:60: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:67: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M105.602,-409.746C118.0672,-415.1402 132.659,-421.91 145.3282,-429 181.0377,-448.984 219.4831,-475.7134 245.733,-494.8405"/>
<polygon fill="#8b4513" stroke="#8b4513" points="243.6752,-497.6717 253.8083,-500.7654 247.8161,-492.0278 243.6752,-497.6717"/>
<g id="a_edge1"><a xlink:title="at multi.go:60: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:67: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M105.6987,-445.6398C118.6022,-450.7652 133.511,-457.9071 145.3282,-467 164.8576,-482.0271 158.0737,-499.4195 180.3282,-510 198.1031,-518.4508 219.2138,-514.9507 237.2466,-508.4076"/>
<polygon fill="#8b4513" stroke="#8b4513" points="238.9395,-511.4991 246.9075,-504.5161 236.324,-505.0061 238.9395,-511.4991"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity -->
<g id="node4" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity</title>
<g id="a_node4"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity | defined in multi.go:27&#10;at multi.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at multi.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at multi.go:28: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:36: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:28: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:38: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:36: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M107.6,-294C107.6,-294 45.7282,-294 45.7282,-294 39.7282,-294 33.7282,-288 33.7282,-282 33.7282,-282 33.7282,-270 33.7282,-270 33.7282,-264 39.7282,-258 45.7282,-258 45.7282,-258 107.6,-258 107.6,-258 113.6,-258 119.6,-264 119.6,-270 119.6,-270 119.6,-282 119.6,-282 119.6,-288 113.6,-294 107.6,-294"/>
<text text-anchor="middle" x="76.6641" y="-271.8" font-family="Verdana" font-size="14.00" fill="#000000">SetIdentity</text>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close -->
<g id="node6" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close</title>
<g id="a_node6"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close | defined in multi.go:43&#10;at multi.go:49: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at multi.go:49: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at multi.go:44: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:54: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:51: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:49: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:51: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M92.5506,-393C92.5506,-393 60.7776,-393 60.7776,-393 54.7776,-393 48.7776,-387 48.7776,-381 48.7776,-381 48.7776,-369 48.7776,-369 48.7776,-363 54.7776,-357 60.7776,-357 60.7776,-357 92.5506,-357 92.5506,-357 98.5506,-357 104.5506,-363 104.5506,-369 104.5506,-369 104.5506,-381 104.5506,-381 104.5506,-387 98.5506,-393 92.5506,-393"/>
<text text-anchor="middle" x="76.6641" y="-370.8" font-family="Verdana" font-size="14.00" fill="#000000">Close</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge20" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge20"><a xlink:title="at multi.go:28: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:36: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M119.56,-266.6231C128.5526,-263.4925 137.6326,-259.3776 145.3282,-254 166.0971,-239.487 157.5674,-220.1319 180.3282,-209 196.7024,-200.9917 194.3631,-227.5937 209.3282,-238 215.0641,-241.9886 221.4153,-245.6248 227.8705,-248.8808"/>
<polygon fill="#8b4513" stroke="#8b4513" points="226.8081,-252.2507 237.3431,-253.3758 229.8092,-245.9266 226.8081,-252.2507"/>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge21" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge21"><a xlink:title="at multi.go:49: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:51: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M104.7507,-370.5642C125.5641,-367.4338 154.6509,-363.3875 180.3282,-361 195.5635,-359.5834 212.1768,-358.5444 227.3063,-357.7927"/>
<polygon fill="#8b4513" stroke="#8b4513" points="227.6822,-361.2791 237.5083,-357.3171 227.3562,-354.2867 227.6822,-361.2791"/>
</a>
</g>
</g>
@ -217,206 +189,210 @@
<g id="node11" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_node11"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).WithError | defined in log.go:66">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M306.4544,-225C306.4544,-225 249.3914,-225 249.3914,-225 243.3914,-225 237.3914,-219 237.3914,-213 237.3914,-213 237.3914,-201 237.3914,-201 237.3914,-195 243.3914,-189 249.3914,-189 249.3914,-189 306.4544,-189 306.4544,-189 312.4544,-189 318.4544,-195 318.4544,-201 318.4544,-201 318.4544,-213 318.4544,-213 318.4544,-219 312.4544,-225 306.4544,-225"/>
<text text-anchor="middle" x="277.9229" y="-202.8" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge2" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge2"><a xlink:title="at multi.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M119.4844,-267.1397C128.5796,-263.9737 137.7215,-259.7136 145.3282,-254 167.6031,-237.2689 155.737,-215.0909 180.3282,-202 194.4559,-194.4792 211.4241,-193.1802 227.2209,-194.5388"/>
<polygon fill="#8b4513" stroke="#8b4513" points="227.0412,-198.0427 237.3908,-195.7767 227.887,-191.094 227.0412,-198.0427"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="node12" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_node12"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Error | defined in log.go:42">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M292.9229,-347C292.9229,-347 262.9229,-347 262.9229,-347 256.9229,-347 250.9229,-341 250.9229,-335 250.9229,-335 250.9229,-323 250.9229,-323 250.9229,-317 256.9229,-311 262.9229,-311 262.9229,-311 292.9229,-311 292.9229,-311 298.9229,-311 304.9229,-317 304.9229,-323 304.9229,-323 304.9229,-335 304.9229,-335 304.9229,-341 298.9229,-347 292.9229,-347"/>
<text text-anchor="middle" x="277.9229" y="-324.8" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge11" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge11"><a xlink:title="at multi.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M119.5479,-263.4645C128.1782,-260.606 137.1166,-257.3998 145.3282,-254 161.8562,-247.157 166.3288,-226.2523 181.3282,-236 207.0203,-252.6966 187.5976,-277.398 209.3282,-299 218.0977,-307.7176 229.8221,-314.0989 241.0943,-318.6765"/>
<polygon fill="#8b4513" stroke="#8b4513" points="240.2046,-322.0785 250.7981,-322.2483 242.6226,-315.5094 240.2046,-322.0785"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge21" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge21"><a xlink:title="at multi.go:28: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:38: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:36: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M119.5559,-290.2748C128.7492,-294.6623 137.9149,-300.183 145.3282,-307 188.3844,-346.5929 178.1745,-372.4937 209.3282,-422 224.7608,-446.524 243.9126,-473.3432 258.0542,-492.5532"/>
<polygon fill="#8b4513" stroke="#8b4513" points="255.4036,-494.8551 264.1677,-500.8084 261.029,-490.6891 255.4036,-494.8551"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close -->
<g id="node5" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close</title>
<g id="a_node5"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close | defined in multi.go:43&#10;at multi.go:49: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at multi.go:44: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:54: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:51: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:49: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at multi.go:49: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:51: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M92.5506,-355C92.5506,-355 60.7776,-355 60.7776,-355 54.7776,-355 48.7776,-349 48.7776,-343 48.7776,-343 48.7776,-331 48.7776,-331 48.7776,-325 54.7776,-319 60.7776,-319 60.7776,-319 92.5506,-319 92.5506,-319 98.5506,-319 104.5506,-325 104.5506,-331 104.5506,-331 104.5506,-343 104.5506,-343 104.5506,-349 98.5506,-355 92.5506,-355"/>
<text text-anchor="middle" x="76.6641" y="-332.8" font-family="Verdana" font-size="14.00" fill="#000000">Close</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge16" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge16"><a xlink:title="at multi.go:49: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:51: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M104.6483,-327.4058C136.4112,-316.5162 188.8505,-298.5378 227.7355,-285.2063"/>
<polygon fill="#8b4513" stroke="#8b4513" points="228.9843,-288.4783 237.3087,-281.9243 226.7141,-281.8566 228.9843,-288.4783"/>
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M306.4544,-252C306.4544,-252 249.3914,-252 249.3914,-252 243.3914,-252 237.3914,-246 237.3914,-240 237.3914,-240 237.3914,-228 237.3914,-228 237.3914,-222 243.3914,-216 249.3914,-216 249.3914,-216 306.4544,-216 306.4544,-216 312.4544,-216 318.4544,-222 318.4544,-228 318.4544,-228 318.4544,-240 318.4544,-240 318.4544,-246 312.4544,-252 306.4544,-252"/>
<text text-anchor="middle" x="277.9229" y="-238.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="277.9229" y="-221.4" font-family="Verdana" font-size="14.00" fill="#000000">WithError</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge13" class="edge">
<g id="edge2" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge13"><a xlink:title="at multi.go:49: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M104.7705,-327.7355C117.7723,-322.7154 133.0241,-315.7366 145.3282,-307 179.4326,-282.7839 175.3763,-262.4295 209.3282,-238 215.1625,-233.802 221.6561,-229.9769 228.2563,-226.5583"/>
<polygon fill="#8b4513" stroke="#8b4513" points="229.824,-229.6879 237.2709,-222.1517 226.7497,-223.3991 229.824,-229.6879"/>
<g id="a_edge2"><a xlink:title="at multi.go:49: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M104.8296,-365.8181C117.8444,-360.8161 133.09,-353.8287 145.3282,-345 184.1222,-317.0138 179.4052,-294.1556 217.3282,-265 220.9027,-262.2519 224.7578,-259.6343 228.7304,-257.1694"/>
<polygon fill="#8b4513" stroke="#8b4513" points="230.676,-260.0865 237.5517,-252.0257 227.1499,-254.0394 230.676,-260.0865"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Warn -->
<g id="node13" class="node">
<g id="node12" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_node13"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Warn | defined in log.go:30">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M293.5128,-408C293.5128,-408 262.333,-408 262.333,-408 256.333,-408 250.333,-402 250.333,-396 250.333,-396 250.333,-384 250.333,-384 250.333,-378 256.333,-372 262.333,-372 262.333,-372 293.5128,-372 293.5128,-372 299.5128,-372 305.5128,-378 305.5128,-384 305.5128,-384 305.5128,-396 305.5128,-396 305.5128,-402 299.5128,-408 293.5128,-408"/>
<text text-anchor="middle" x="277.9229" y="-385.8" font-family="Verdana" font-size="14.00" fill="#000000">Warn</text>
<g id="a_node12"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Warn | defined in log.go:30">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M295.6892,-313C295.6892,-313 260.1566,-313 260.1566,-313 254.1566,-313 248.1566,-307 248.1566,-301 248.1566,-301 248.1566,-289 248.1566,-289 248.1566,-283 254.1566,-277 260.1566,-277 260.1566,-277 295.6892,-277 295.6892,-277 301.6892,-277 307.6892,-283 307.6892,-289 307.6892,-289 307.6892,-301 307.6892,-301 307.6892,-307 301.6892,-313 295.6892,-313"/>
<text text-anchor="middle" x="277.9229" y="-299.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="277.9229" y="-282.4" font-family="Verdana" font-size="14.00" fill="#000000">Warn</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn -->
<g id="edge6" class="edge">
<g id="edge13" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_edge6"><a xlink:title="at multi.go:49: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]">
<path fill="none" stroke="#8b4513" d="M104.818,-335.4984C126.2431,-335.1584 156.2211,-336.4266 181.3282,-344 195.0504,-348.1392 196.5217,-353.5636 209.3282,-360 219.4647,-365.0945 230.6629,-370.2024 241.0205,-374.7224"/>
<polygon fill="#8b4513" stroke="#8b4513" points="239.6726,-377.9526 250.2417,-378.6908 242.4398,-371.5227 239.6726,-377.9526"/>
<g id="a_edge13"><a xlink:title="at multi.go:49: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]">
<path fill="none" stroke="#8b4513" d="M104.6483,-363.8763C139.3984,-350.0632 198.8965,-326.4128 238.3182,-310.7428"/>
<polygon fill="#8b4513" stroke="#8b4513" points="239.8809,-313.8881 247.8808,-306.9417 237.2951,-307.3831 239.8809,-313.8881"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge12" class="edge">
<g id="edge20" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Close&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge12"><a xlink:title="at multi.go:44: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:54: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:51: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M104.8681,-346.5751C117.8913,-351.7629 133.1328,-358.9741 145.3282,-368 193.5179,-403.6658 236.7582,-459.4892 259.9797,-492.3372"/>
<polygon fill="#8b4513" stroke="#8b4513" points="257.3973,-494.7533 265.986,-500.957 263.1405,-490.7514 257.3973,-494.7533"/>
<g id="a_edge20"><a xlink:title="at multi.go:44: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:54: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:51: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M104.8019,-382.5665C118.4339,-387.4116 134.2158,-394.9159 145.3282,-406 171.9434,-432.5474 149.1455,-462.0054 180.3282,-483 196.707,-494.0275 218.3764,-495.8511 237.1352,-494.5621"/>
<polygon fill="#8b4513" stroke="#8b4513" points="237.5992,-498.0333 247.2053,-493.5644 236.909,-491.0674 237.5992,-498.0333"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession -->
<g id="node6" class="node">
<g id="node7" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession</title>
<g id="a_node6"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession | defined in multi.go:74&#10;at multi.go:75: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String]&#10;at multi.go:75: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:79: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:83: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:89: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:93: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at multi.go:83: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at multi.go:83: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at multi.go:75: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:79: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:89: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M108.1529,-477C108.1529,-477 45.1753,-477 45.1753,-477 39.1753,-477 33.1753,-471 33.1753,-465 33.1753,-465 33.1753,-453 33.1753,-453 33.1753,-447 39.1753,-441 45.1753,-441 45.1753,-441 108.1529,-441 108.1529,-441 114.1529,-441 120.1529,-447 120.1529,-453 120.1529,-453 120.1529,-465 120.1529,-465 120.1529,-471 114.1529,-477 108.1529,-477"/>
<text text-anchor="middle" x="76.6641" y="-454.8" font-family="Verdana" font-size="14.00" fill="#000000">GetSession</text>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String -->
<g id="node8" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String</title>
<g id="a_node8"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String | defined in router_info.go:155">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M295.1477,-666C295.1477,-666 260.6981,-666 260.6981,-666 254.6981,-666 248.6981,-660 248.6981,-654 248.6981,-654 248.6981,-642 248.6981,-642 248.6981,-636 254.6981,-630 260.6981,-630 260.6981,-630 295.1477,-630 295.1477,-630 301.1477,-630 307.1477,-636 307.1477,-642 307.1477,-642 307.1477,-654 307.1477,-654 307.1477,-660 301.1477,-666 295.1477,-666"/>
<text text-anchor="middle" x="277.9229" y="-643.8" font-family="Verdana" font-size="14.00" fill="#000000">String</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String -->
<g id="edge3" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String</title>
<g id="a_edge3"><a xlink:title="at multi.go:75: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String]">
<path fill="none" stroke="#8b4513" d="M120.4557,-475.2096C129.1064,-479.3732 137.8219,-484.3133 145.3282,-490 158.6746,-500.1111 223.2936,-579.7826 257.1428,-621.9772"/>
<polygon fill="#8b4513" stroke="#8b4513" points="254.4941,-624.2688 263.4781,-629.8847 259.957,-619.892 254.4941,-624.2688"/>
<g id="a_node7"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession | defined in multi.go:74&#10;at multi.go:83: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]&#10;at multi.go:93: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at multi.go:75: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String]&#10;at multi.go:75: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:79: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:89: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:75: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:79: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:83: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:89: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:83: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M108.1529,-332C108.1529,-332 45.1753,-332 45.1753,-332 39.1753,-332 33.1753,-326 33.1753,-320 33.1753,-320 33.1753,-308 33.1753,-308 33.1753,-302 39.1753,-296 45.1753,-296 45.1753,-296 108.1529,-296 108.1529,-296 114.1529,-296 120.1529,-302 120.1529,-308 120.1529,-308 120.1529,-320 120.1529,-320 120.1529,-326 114.1529,-332 108.1529,-332"/>
<text text-anchor="middle" x="76.6641" y="-309.8" font-family="Verdana" font-size="14.00" fill="#000000">GetSession</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge4" class="edge">
<g id="edge22" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge4"><a xlink:title="at multi.go:75: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:79: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:83: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:89: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M120.2855,-461.3133C141.3807,-460.0459 165.4978,-454.6951 181.3282,-439 226.3895,-394.3239 169.8311,-348.6633 209.3282,-299 214.3614,-292.6713 220.9687,-287.5909 228.0953,-283.5251"/>
<polygon fill="#8b4513" stroke="#8b4513" points="229.9496,-286.5108 237.3205,-278.9002 226.8124,-280.2531 229.9496,-286.5108"/>
<g id="a_edge22"><a xlink:title="at multi.go:75: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:79: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:83: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:89: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M120.3343,-323.1134C151.8702,-329.6945 194.5346,-338.598 227.5179,-345.4812"/>
<polygon fill="#8b4513" stroke="#8b4513" points="226.9161,-348.9309 237.4203,-347.5476 228.3462,-342.0785 226.9161,-348.9309"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge8" class="edge">
<g id="edge23" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge8"><a xlink:title="at multi.go:83: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M120.154,-446.5151C129.4277,-442.1948 138.478,-436.4857 145.3282,-429 205.7684,-362.9531 149.3034,-304.4246 209.3282,-238 214.6264,-232.1369 221.2488,-227.314 228.2742,-223.367"/>
<polygon fill="#8b4513" stroke="#8b4513" points="229.9543,-226.4399 237.3193,-218.8236 226.8122,-220.1847 229.9543,-226.4399"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge7" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge7"><a xlink:title="at multi.go:93: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M120.2741,-474.3401C140.7352,-478.6493 164.3027,-479.1122 181.3282,-466 219.9333,-436.2684 177.8519,-397.1963 209.3282,-360 217.5722,-350.2578 229.5084,-343.4373 241.1202,-338.727"/>
<polygon fill="#8b4513" stroke="#8b4513" points="242.5022,-341.9488 250.7096,-335.2488 240.1154,-335.3683 242.5022,-341.9488"/>
<g id="a_edge23"><a xlink:title="at multi.go:83: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M120.2654,-301.616C129.5345,-297.2916 138.5548,-291.5553 145.3282,-284 180.1409,-245.1686 138.31,-202.8914 180.3282,-172 197.8451,-159.1217 199.3009,-191.8465 217.3282,-204 220.9858,-206.4658 224.8752,-208.8542 228.8496,-211.1346"/>
<polygon fill="#8b4513" stroke="#8b4513" points="227.177,-214.2091 237.6291,-215.9428 230.5395,-208.0695 227.177,-214.2091"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn -->
<g id="edge14" class="edge">
<g id="edge6" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Warn</title>
<g id="a_edge14"><a xlink:title="at multi.go:83: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]">
<path fill="none" stroke="#8b4513" d="M114.1568,-477.0204C138.9891,-487.8398 169.1495,-498.5263 181.3282,-493 198.5374,-485.191 196.5367,-474.9109 209.3282,-461 223.39,-445.7076 239.5137,-428.9794 252.5942,-415.6034"/>
<polygon fill="#8b4513" stroke="#8b4513" points="255.4005,-417.7408 259.9056,-408.1514 250.4039,-412.8384 255.4005,-417.7408"/>
<g id="a_edge6"><a xlink:title="at multi.go:83: calling [(*github.com/go&#45;i2p/logger.Logger).Warn]">
<path fill="none" stroke="#8b4513" d="M120.4579,-299.6946C129.2991,-295.5311 138.0901,-290.3468 145.3282,-284 167.9657,-264.1502 154.1098,-240.8008 180.3282,-226 201.1346,-214.2544 198.2003,-250.6826 217.3282,-265 223.8698,-269.8965 231.3341,-274.3482 238.7356,-278.235"/>
<polygon fill="#8b4513" stroke="#8b4513" points="237.491,-281.5251 248.0031,-282.8472 240.6099,-275.2583 237.491,-281.5251"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="node13" class="node">
<title>(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_node13"><a xlink:title="(*github.com/go&#45;i2p/logger.Logger).Error | defined in log.go:42">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M295.6892,-191C295.6892,-191 260.1566,-191 260.1566,-191 254.1566,-191 248.1566,-185 248.1566,-179 248.1566,-179 248.1566,-167 248.1566,-167 248.1566,-161 254.1566,-155 260.1566,-155 260.1566,-155 295.6892,-155 295.6892,-155 301.6892,-155 307.6892,-161 307.6892,-167 307.6892,-167 307.6892,-179 307.6892,-179 307.6892,-185 301.6892,-191 295.6892,-191"/>
<text text-anchor="middle" x="277.9229" y="-177.2" font-family="Verdana" font-size="14.00" fill="#000000">logger</text>
<text text-anchor="middle" x="277.9229" y="-160.4" font-family="Verdana" font-size="14.00" fill="#000000">Error</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge8" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge8"><a xlink:title="at multi.go:93: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M120.3453,-301.6872C129.6112,-297.3598 138.6099,-291.6044 145.3282,-284 181.5467,-243.0047 136.4914,-198.722 180.3282,-166 196.6731,-153.7993 219.155,-154.5834 238.4214,-158.8558"/>
<polygon fill="#8b4513" stroke="#8b4513" points="237.5973,-162.2577 248.1539,-161.3577 239.3402,-155.4781 237.5973,-162.2577"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge22" class="edge">
<g id="edge15" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge22"><a xlink:title="at multi.go:75: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:79: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:89: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M120.4985,-476.5343C128.9673,-480.5437 137.6021,-485.0875 145.3282,-490 162.6172,-500.9929 161.1129,-512.8918 180.3282,-520 198.1296,-526.5852 219.0381,-527.2161 236.9263,-525.8426"/>
<polygon fill="#8b4513" stroke="#8b4513" points="237.4597,-529.3068 247.0632,-524.8322 236.7654,-522.3414 237.4597,-529.3068"/>
<g id="a_edge15"><a xlink:title="at multi.go:75: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:79: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:89: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M120.2652,-327.0554C129.5343,-331.5133 138.5546,-337.3712 145.3282,-345 179.6726,-383.681 143.7899,-419.3844 180.3282,-456 195.406,-471.1097 217.8094,-478.8653 237.3497,-482.8413"/>
<polygon fill="#8b4513" stroke="#8b4513" points="236.7959,-486.2977 247.2531,-484.595 238.0166,-479.4049 236.7959,-486.2977"/>
</a>
</g>
</g>
<!-- (github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String -->
<g id="node15" class="node">
<title>(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String</title>
<g id="a_node15"><a xlink:title="(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String | defined in router_info.go:155">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M309.4005,-603C309.4005,-603 246.4453,-603 246.4453,-603 240.4453,-603 234.4453,-597 234.4453,-591 234.4453,-591 234.4453,-579 234.4453,-579 234.4453,-573 240.4453,-567 246.4453,-567 246.4453,-567 309.4005,-567 309.4005,-567 315.4005,-567 321.4005,-573 321.4005,-579 321.4005,-579 321.4005,-591 321.4005,-591 321.4005,-597 315.4005,-603 309.4005,-603"/>
<text text-anchor="middle" x="277.9229" y="-589.2" font-family="Verdana" font-size="14.00" fill="#000000">router_info</text>
<text text-anchor="middle" x="277.9229" y="-572.4" font-family="Verdana" font-size="14.00" fill="#000000">String</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String -->
<g id="edge14" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).GetSession&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String</title>
<g id="a_edge14"><a xlink:title="at multi.go:75: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String]">
<path fill="none" stroke="#8b4513" d="M120.3602,-326.9718C129.6254,-331.4331 138.6201,-337.3135 145.3282,-345 181.2967,-386.2148 157.221,-413.4172 180.3282,-463 192.9292,-490.0387 198.9608,-495.4944 217.3282,-519 228.2489,-532.9757 241.4624,-547.5952 252.7598,-559.5123"/>
<polygon fill="#8b4513" stroke="#8b4513" points="250.4158,-562.1248 259.8637,-566.9194 255.4679,-557.2795 250.4158,-562.1248"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity -->
<g id="node8" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity</title>
<g id="a_node8"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity | defined in multi.go:27&#10;at multi.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]&#10;at multi.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).Error]&#10;at multi.go:28: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:36: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:28: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:38: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:36: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M107.6,-271C107.6,-271 45.7282,-271 45.7282,-271 39.7282,-271 33.7282,-265 33.7282,-259 33.7282,-259 33.7282,-247 33.7282,-247 33.7282,-241 39.7282,-235 45.7282,-235 45.7282,-235 107.6,-235 107.6,-235 113.6,-235 119.6,-241 119.6,-247 119.6,-247 119.6,-259 119.6,-259 119.6,-265 113.6,-271 107.6,-271"/>
<text text-anchor="middle" x="76.6641" y="-248.8" font-family="Verdana" font-size="14.00" fill="#000000">SetIdentity</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge17" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge17"><a xlink:title="at multi.go:28: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:36: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M118.389,-271.0008C127.3591,-275.1027 136.7257,-279.5643 145.3282,-284 178.2551,-300.9782 184.709,-308.4378 217.3282,-326 221.863,-328.4416 226.6233,-330.9274 231.3986,-333.3707"/>
<polygon fill="#8b4513" stroke="#8b4513" points="230.0412,-336.6062 240.5447,-337.9938 233.199,-330.359 230.0412,-336.6062"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError -->
<g id="edge9" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithError</title>
<g id="a_edge9"><a xlink:title="at multi.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).WithError]">
<path fill="none" stroke="#8b4513" d="M119.7005,-245.5061C128.9929,-242.2695 138.1653,-237.6352 145.3282,-231 175.6016,-202.9566 146.0876,-168.0325 180.3282,-145 206.0105,-127.7244 194.4988,-183.0992 217.3282,-204 220.6819,-207.0703 224.4079,-209.8984 228.3168,-212.4871"/>
<polygon fill="#8b4513" stroke="#8b4513" points="226.7209,-215.6117 237.0928,-217.7733 230.3327,-209.6154 226.7209,-215.6117"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error -->
<g id="edge10" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).Error</title>
<g id="a_edge10"><a xlink:title="at multi.go:32: calling [(*github.com/go&#45;i2p/logger.Logger).Error]">
<path fill="none" stroke="#8b4513" d="M119.6939,-246.4647C129.2081,-243.1966 138.4812,-238.3078 145.3282,-231 189.1804,-184.1965 129.7749,-130.4708 180.3282,-91 205.0222,-71.7195 193.152,-131.074 217.3282,-151 223.5222,-156.1051 231.0014,-160.0764 238.5596,-163.1486"/>
<polygon fill="#8b4513" stroke="#8b4513" points="237.4904,-166.4835 248.0848,-166.5768 239.861,-159.8971 237.4904,-166.4835"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge18" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).SetIdentity&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge18"><a xlink:title="at multi.go:28: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:38: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:36: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M119.7048,-265.1144C129.3346,-269.6432 138.658,-275.769 145.3282,-284 191.1584,-340.554 134.242,-387.6544 180.3282,-444 194.568,-461.4098 217.2689,-471.9793 237.1946,-478.28"/>
<polygon fill="#8b4513" stroke="#8b4513" points="236.4232,-481.7004 247.0021,-481.1204 238.3705,-474.9767 236.4232,-481.7004"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Compatible -->
<g id="node7" class="node">
<g id="node9" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Compatible</title>
<g id="a_node7"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Compatible | defined in multi.go:100&#10;at multi.go:101: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String]&#10;at multi.go:101: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:109: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:104: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:101: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:104: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M109.4929,-538C109.4929,-538 43.8353,-538 43.8353,-538 37.8353,-538 31.8353,-532 31.8353,-526 31.8353,-526 31.8353,-514 31.8353,-514 31.8353,-508 37.8353,-502 43.8353,-502 43.8353,-502 109.4929,-502 109.4929,-502 115.4929,-502 121.4929,-508 121.4929,-514 121.4929,-514 121.4929,-526 121.4929,-526 121.4929,-532 115.4929,-538 109.4929,-538"/>
<text text-anchor="middle" x="76.6641" y="-515.8" font-family="Verdana" font-size="14.00" fill="#000000">Compatible</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Compatible&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String -->
<g id="edge15" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Compatible&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String</title>
<g id="a_edge15"><a xlink:title="at multi.go:101: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String]">
<path fill="none" stroke="#8b4513" d="M94.3896,-538.1322C114.009,-557.425 147.2493,-587.882 180.3282,-608 198.6294,-619.1304 220.5827,-628.4408 239.0293,-635.2704"/>
<polygon fill="#8b4513" stroke="#8b4513" points="237.9993,-638.6193 248.5938,-638.7085 240.3673,-632.032 237.9993,-638.6193"/>
<g id="a_node9"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Compatible | defined in multi.go:100&#10;at multi.go:101: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String]&#10;at multi.go:101: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:109: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:104: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:101: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:104: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M109.4929,-515C109.4929,-515 43.8353,-515 43.8353,-515 37.8353,-515 31.8353,-509 31.8353,-503 31.8353,-503 31.8353,-491 31.8353,-491 31.8353,-485 37.8353,-479 43.8353,-479 43.8353,-479 109.4929,-479 109.4929,-479 115.4929,-479 121.4929,-485 121.4929,-491 121.4929,-491 121.4929,-503 121.4929,-503 121.4929,-509 115.4929,-515 109.4929,-515"/>
<text text-anchor="middle" x="76.6641" y="-492.8" font-family="Verdana" font-size="14.00" fill="#000000">Compatible</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Compatible&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField -->
<g id="edge23" class="edge">
<g id="edge19" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Compatible&#45;&gt;(*github.com/go&#45;i2p/logger.Logger).WithField</title>
<g id="a_edge23"><a xlink:title="at multi.go:101: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:104: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M121.6007,-504.0419C129.8884,-500.0999 138.1742,-495.4215 145.3282,-490 165.4659,-474.7391 170.6352,-468.8928 181.3282,-446 209.4744,-385.7414 168.1696,-351.2425 209.3282,-299 214.3892,-292.5761 221.0747,-287.4404 228.2881,-283.347"/>
<polygon fill="#8b4513" stroke="#8b4513" points="230.2313,-286.2895 237.6248,-278.701 227.1127,-280.0226 230.2313,-286.2895"/>
<g id="a_edge19"><a xlink:title="at multi.go:101: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]&#10;at multi.go:104: calling [(*github.com/go&#45;i2p/logger.Logger).WithField]">
<path fill="none" stroke="#8b4513" d="M121.5631,-479.5925C129.6832,-475.8305 137.9179,-471.5887 145.3282,-467 185.5762,-442.0768 226.5498,-405.7423 252.0844,-381.5106"/>
<polygon fill="#8b4513" stroke="#8b4513" points="254.6993,-383.8522 259.4953,-374.405 249.8548,-378.7995 254.6993,-383.8522"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Compatible&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug -->
<g id="edge17" class="edge">
<g id="edge7" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Compatible&#45;&gt;(*github.com/sirupsen/logrus.Logger).Debug</title>
<g id="a_edge17"><a xlink:title="at multi.go:101: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:109: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:104: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M86.8626,-538.1611C104.1375,-566.2971 141.2107,-615.7318 181.3282,-601 211.6368,-589.8702 238.9441,-564.5471 256.7283,-544.9649"/>
<polygon fill="#8b4513" stroke="#8b4513" points="259.5393,-547.0686 263.5198,-537.2499 254.2851,-542.4433 259.5393,-547.0686"/>
<g id="a_edge7"><a xlink:title="at multi.go:101: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:109: calling [(*github.com/sirupsen/logrus.Logger).Debug]&#10;at multi.go:104: calling [(*github.com/sirupsen/logrus.Logger).Debug]">
<path fill="none" stroke="#8b4513" d="M100.6393,-515.1742C121.5024,-528.7834 152.7884,-543.9486 181.3282,-537 202.8893,-531.7505 225.01,-520.7844 242.6332,-510.4562"/>
<polygon fill="#8b4513" stroke="#8b4513" points="244.6665,-513.3169 251.4122,-505.147 241.0441,-507.327 244.6665,-513.3169"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Compatible&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String -->
<g id="edge3" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/transport.TransportMuxer).Compatible&#45;&gt;(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String</title>
<g id="a_edge3"><a xlink:title="at multi.go:101: calling [(github.com/go&#45;i2p/go&#45;i2p/lib/common/router_info.RouterInfo).String]">
<path fill="none" stroke="#8b4513" d="M89.6192,-515.0706C107.1729,-537.8251 140.89,-575.7817 180.3282,-591 193.8369,-596.2127 209.1783,-597.2857 223.6313,-596.3988"/>
<polygon fill="#8b4513" stroke="#8b4513" points="224.3268,-599.8493 233.9595,-595.4379 223.6782,-592.8794 224.3268,-599.8493"/>
</a>
</g>
</g>

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 38 KiB

View File

@ -2,270 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/tunnel"
i2p garlic tunnel implementation
## Usage
```go
const (
DT_LOCAL = iota
DT_TUNNEL
DT_ROUTER
DT_UNUSED
)
```
```go
const (
FIRST_FRAGMENT = iota
FOLLOW_ON_FRAGMENT
)
```
```go
const (
FLAG_SIZE = 1
TUNNEL_ID_SIZE = 4
HASH_SIZE = 32
DELAY_SIZE = 1
MESSAGE_ID_SIZE = 4
EXTENDED_OPTIONS_MIN_SIZE = 2
SIZE_FIELD_SIZE = 2
)
```
#### type DecryptedTunnelMessage
```go
type DecryptedTunnelMessage [1028]byte
```
#### func (DecryptedTunnelMessage) Checksum
```go
func (decrypted_tunnel_message DecryptedTunnelMessage) Checksum() crypto.TunnelIV
```
#### func (DecryptedTunnelMessage) DeliveryInstructionsWithFragments
```go
func (decrypted_tunnel_message DecryptedTunnelMessage) DeliveryInstructionsWithFragments() []DeliveryInstructionsWithFragment
```
Returns a slice of DeliveryInstructionWithFragment structures, which all of the
Delivery Instructions in the tunnel message and their corresponding
MessageFragment structures.
#### func (DecryptedTunnelMessage) ID
```go
func (decrypted_tunnel_message DecryptedTunnelMessage) ID() TunnelID
```
#### func (DecryptedTunnelMessage) IV
```go
func (decrypted_tunnel_message DecryptedTunnelMessage) IV() crypto.TunnelIV
```
#### type DelayFactor
```go
type DelayFactor byte
```
#### type DeliveryInstructions
```go
type DeliveryInstructions []byte
```
#### func (DeliveryInstructions) Delay
```go
func (delivery_instructions DeliveryInstructions) Delay() (delay_factor DelayFactor, err error)
```
Return the DelayFactor if present and any errors encountered parsing the
DeliveryInstructions.
#### func (DeliveryInstructions) DeliveryType
```go
func (delivery_instructions DeliveryInstructions) DeliveryType() (byte, error)
```
Return the delivery type for these DeliveryInstructions, can be of type
DT_LOCAL, DT_TUNNEL, DT_ROUTER, or DT_UNUSED.
#### func (DeliveryInstructions) ExtendedOptions
```go
func (delivery_instructions DeliveryInstructions) ExtendedOptions() (data []byte, err error)
```
Return the Extended Options data if present, or an error if not present.
Extended Options in unimplemented in the Java router and the presence of
extended options will generate a warning.
#### func (DeliveryInstructions) FragmentNumber
```go
func (delivery_instructions DeliveryInstructions) FragmentNumber() (int, error)
```
Read the integer stored in the 6-1 bits of a FOLLOW_ON_FRAGMENT's flag,
indicating the fragment number.
#### func (DeliveryInstructions) FragmentSize
```go
func (delivery_instructions DeliveryInstructions) FragmentSize() (frag_size uint16, err error)
```
Return the size of the associated I2NP fragment and an error if the data is
unavailable.
#### func (DeliveryInstructions) Fragmented
```go
func (delivery_instructions DeliveryInstructions) Fragmented() (bool, error)
```
Returns true if the Delivery Instructions are fragmented or false if the
following data contains the entire message
#### func (DeliveryInstructions) HasDelay
```go
func (delivery_instructions DeliveryInstructions) HasDelay() (bool, error)
```
Check if the delay bit is set. This feature in unimplemented in the Java router.
#### func (DeliveryInstructions) HasExtendedOptions
```go
func (delivery_instructions DeliveryInstructions) HasExtendedOptions() (bool, error)
```
Check if the extended options bit is set. This feature in unimplemented in the
Java router.
#### func (DeliveryInstructions) HasHash
```go
func (delivery_instructions DeliveryInstructions) HasHash() (bool, error)
```
#### func (DeliveryInstructions) HasTunnelID
```go
func (delivery_instructions DeliveryInstructions) HasTunnelID() (bool, error)
```
Check if the DeliveryInstructions is of type DT_TUNNEL.
#### func (DeliveryInstructions) Hash
```go
func (delivery_instructions DeliveryInstructions) Hash() (hash common.Hash, err error)
```
Return the hash for these DeliveryInstructions, which varies by hash type.
If the type is DT_TUNNEL, hash is the SHA256 of the gateway router, if
the type is DT_ROUTER it is the SHA256 of the router.
#### func (DeliveryInstructions) LastFollowOnFragment
```go
func (delivery_instructions DeliveryInstructions) LastFollowOnFragment() (bool, error)
```
Read the value of the 0 bit of a FOLLOW_ON_FRAGMENT, which is set to 1 to
indicate the last fragment.
#### func (DeliveryInstructions) MessageID
```go
func (delivery_instructions DeliveryInstructions) MessageID() (msgid uint32, err error)
```
Return the I2NP Message ID or 0 and an error if the data is not available for
this DeliveryInstructions.
#### func (DeliveryInstructions) TunnelID
```go
func (delivery_instructions DeliveryInstructions) TunnelID() (tunnel_id uint32, err error)
```
Return the tunnel ID in this DeliveryInstructions or 0 and an error if the
DeliveryInstructions are not of type DT_TUNNEL.
#### func (DeliveryInstructions) Type
```go
func (delivery_instructions DeliveryInstructions) Type() (int, error)
```
Return if the DeliveryInstructions are of type FIRST_FRAGMENT or
FOLLOW_ON_FRAGMENT.
#### type DeliveryInstructionsWithFragment
```go
type DeliveryInstructionsWithFragment struct {
DeliveryInstructions DeliveryInstructions
MessageFragment []byte
}
```
#### type EncryptedTunnelMessage
```go
type EncryptedTunnelMessage crypto.TunnelData
```
#### func (EncryptedTunnelMessage) Data
```go
func (tm EncryptedTunnelMessage) Data() crypto.TunnelIV
```
#### func (EncryptedTunnelMessage) ID
```go
func (tm EncryptedTunnelMessage) ID() (tid TunnelID)
```
#### func (EncryptedTunnelMessage) IV
```go
func (tm EncryptedTunnelMessage) IV() crypto.TunnelIV
```
#### type Participant
```go
type Participant struct {
}
```
#### type Pool
```go
type Pool struct{}
```
a pool of tunnels which we have created
#### type TunnelID
```go
type TunnelID uint32
```
# tunnel
--
import "github.com/go-i2p/go-i2p/lib/tunnel"
i2p garlic tunnel implementation
![tunnel.svg](tunnel)
i2p garlic tunnel implementation
## Usage
```go

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 221 KiB

After

Width:  |  Height:  |  Size: 218 KiB

View File

@ -2,50 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/util"
## Usage
#### func CheckFileAge
```go
func CheckFileAge(fpath string, maxAge int) bool
```
Check if a file is more than maxAge minutes old returns false if
#### func CheckFileExists
```go
func CheckFileExists(fpath string) bool
```
Check if a file exists and is readable etc returns false if not
#### func CloseAll
```go
func CloseAll()
```
#### func Panicf
```go
func Panicf(format string, args ...interface{})
```
Panicf allows passing formated string to panic()
#### func RegisterCloser
```go
func RegisterCloser(c io.Closer)
```
# util
--
import "github.com/go-i2p/go-i2p/lib/util"
![util.svg](util)
## Usage
#### func CheckFileAge

View File

@ -2,41 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/util/signals"
## Usage
#### func Handle
```go
func Handle()
```
#### func RegisterInterruptHandler
```go
func RegisterInterruptHandler(f Handler)
```
#### func RegisterReloadHandler
```go
func RegisterReloadHandler(f Handler)
```
#### type Handler
```go
type Handler func()
```
# signals
--
import "github.com/go-i2p/go-i2p/lib/util/signals"
![signals.svg](signals)
## Usage
#### func Handle

View File

@ -2,126 +2,10 @@
--
import "github.com/go-i2p/go-i2p/lib/util/time/sntp"
## Usage
#### type DefaultNTPClient
```go
type DefaultNTPClient struct{}
```
#### func (*DefaultNTPClient) QueryWithOptions
```go
func (c *DefaultNTPClient) QueryWithOptions(host string, options ntp.QueryOptions) (*ntp.Response, error)
```
#### type NTPClient
```go
type NTPClient interface {
QueryWithOptions(host string, options ntp.QueryOptions) (*ntp.Response, error)
}
```
#### type RouterTimestamper
```go
type RouterTimestamper struct {
}
```
#### func NewRouterTimestamper
```go
func NewRouterTimestamper(client NTPClient) *RouterTimestamper
```
#### func (*RouterTimestamper) AddListener
```go
func (rt *RouterTimestamper) AddListener(listener UpdateListener)
```
#### func (*RouterTimestamper) GetCurrentTime
```go
func (rt *RouterTimestamper) GetCurrentTime() time.Time
```
#### func (*RouterTimestamper) RemoveListener
```go
func (rt *RouterTimestamper) RemoveListener(listener UpdateListener)
```
#### func (*RouterTimestamper) Start
```go
func (rt *RouterTimestamper) Start()
```
#### func (*RouterTimestamper) Stop
```go
func (rt *RouterTimestamper) Stop()
```
#### func (*RouterTimestamper) TimestampNow
```go
func (rt *RouterTimestamper) TimestampNow()
```
#### func (*RouterTimestamper) WaitForInitialization
```go
func (rt *RouterTimestamper) WaitForInitialization()
```
#### type UpdateListener
```go
type UpdateListener interface {
SetNow(now time.Time, stratum uint8)
}
```
UpdateListener is an interface that listeners must implement to receive time
updates.
#### type Zones
```go
type Zones struct {
}
```
#### func NewZones
```go
func NewZones() *Zones
```
#### func (*Zones) GetZone
```go
func (z *Zones) GetZone(countryCode string) string
```
# sntp
--
import "github.com/go-i2p/go-i2p/lib/util/time/sntp"
![sntp.svg](sntp)
## Usage
#### type DefaultNTPClient

View File

@ -4,72 +4,64 @@
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: gocallvis Pages: 1 -->
<svg width="1420pt" height="549pt"
viewBox="0.00 0.00 1420.13 549.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 549)">
<svg width="1420pt" height="539pt"
viewBox="0.00 0.00 1420.13 539.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(0 539)">
<title>gocallvis</title>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-549 1420.1336,-549 1420.1336,0 0,0"/>
<polygon fill="#d3d3d3" stroke="transparent" points="0,0 0,-539 1420.1336,-539 1420.1336,0 0,0"/>
<g id="clust1" class="cluster">
<title>cluster_focus</title>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-541 1412.1336,-541 1412.1336,-8 8,-8"/>
<text text-anchor="middle" x="710.0668" y="-520.8" font-family="Arial" font-size="18.00" fill="#000000">sntp</text>
</g>
<g id="clust5" class="cluster">
<title>cluster_github.com/beevik/ntp</title>
<g id="a_clust5"><a xlink:href="/?f=github.com/beevik/ntp" xlink:title="package: github.com/beevik/ntp">
<polygon fill="#ffffe0" stroke="#000000" stroke-width=".8" points="228.31,-424 228.31,-503 375.62,-503 375.62,-424 228.31,-424"/>
<text text-anchor="middle" x="301.965" y="-484.6" font-family="Tahoma bold" font-size="16.00" fill="#000000">ntp</text>
</a>
</g>
<polygon fill="#e6ecfa" stroke="#000000" stroke-width=".5" points="8,-8 8,-531 1412.1336,-531 1412.1336,-8 8,-8"/>
<text text-anchor="middle" x="710.0668" y="-510.8" font-family="Arial" font-size="18.00" fill="#000000">sntp</text>
</g>
<g id="clust4" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones</title>
<g id="a_clust4"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M1091.3404,-16C1091.3404,-16 1392.1336,-16 1392.1336,-16 1398.1336,-16 1404.1336,-22 1404.1336,-28 1404.1336,-28 1404.1336,-143 1404.1336,-143 1404.1336,-149 1398.1336,-155 1392.1336,-155 1392.1336,-155 1091.3404,-155 1091.3404,-155 1085.3404,-155 1079.3404,-149 1079.3404,-143 1079.3404,-143 1079.3404,-28 1079.3404,-28 1079.3404,-22 1085.3404,-16 1091.3404,-16"/>
<text text-anchor="middle" x="1241.737" y="-24.5" font-family="Arial" font-size="15.00" fill="#222222">(*Zones)</text>
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M1091.3404,-60C1091.3404,-60 1392.1336,-60 1392.1336,-60 1398.1336,-60 1404.1336,-66 1404.1336,-72 1404.1336,-72 1404.1336,-187 1404.1336,-187 1404.1336,-193 1398.1336,-199 1392.1336,-199 1392.1336,-199 1091.3404,-199 1091.3404,-199 1085.3404,-199 1079.3404,-193 1079.3404,-187 1079.3404,-187 1079.3404,-72 1079.3404,-72 1079.3404,-66 1085.3404,-60 1091.3404,-60"/>
<text text-anchor="middle" x="1241.737" y="-68.5" font-family="Arial" font-size="15.00" fill="#222222">(*Zones)</text>
</a>
</g>
</g>
<g id="clust3" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper</title>
<g id="a_clust3"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M32.6697,-216C32.6697,-216 1163.3285,-216 1163.3285,-216 1169.3285,-216 1175.3285,-222 1175.3285,-228 1175.3285,-228 1175.3285,-404 1175.3285,-404 1175.3285,-410 1169.3285,-416 1163.3285,-416 1163.3285,-416 32.6697,-416 32.6697,-416 26.6697,-416 20.6697,-410 20.6697,-404 20.6697,-404 20.6697,-228 20.6697,-228 20.6697,-222 26.6697,-216 32.6697,-216"/>
<text text-anchor="middle" x="597.9991" y="-224.5" font-family="Arial" font-size="15.00" fill="#222222">(*RouterTimestamper)</text>
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M32.6697,-207C32.6697,-207 1163.3285,-207 1163.3285,-207 1169.3285,-207 1175.3285,-213 1175.3285,-219 1175.3285,-219 1175.3285,-395 1175.3285,-395 1175.3285,-401 1169.3285,-407 1163.3285,-407 1163.3285,-407 32.6697,-407 32.6697,-407 26.6697,-407 20.6697,-401 20.6697,-395 20.6697,-395 20.6697,-219 20.6697,-219 20.6697,-213 26.6697,-207 32.6697,-207"/>
<text text-anchor="middle" x="597.9991" y="-215.5" font-family="Arial" font-size="15.00" fill="#222222">(*RouterTimestamper)</text>
</a>
</g>
</g>
<g id="clust2" class="cluster">
<title>cluster_*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.DefaultNTPClient</title>
<g id="a_clust2"><a xlink:title="type: *github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.DefaultNTPClient">
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M28,-424C28,-424 151.31,-424 151.31,-424 157.31,-424 163.31,-430 163.31,-436 163.31,-436 163.31,-490 163.31,-490 163.31,-496 157.31,-502 151.31,-502 151.31,-502 28,-502 28,-502 22,-502 16,-496 16,-490 16,-490 16,-436 16,-436 16,-430 22,-424 28,-424"/>
<text text-anchor="middle" x="89.655" y="-432.5" font-family="Arial" font-size="15.00" fill="#222222">(*DefaultNTPClient)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.getLocalCountryCode -->
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.getLocalCountryCode</title>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.getLocalCountryCode | defined in router_timestamper.go:393">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M1186.2513,-460C1186.2513,-460 1061.4169,-460 1061.4169,-460 1055.4169,-460 1049.4169,-454 1049.4169,-448 1049.4169,-448 1049.4169,-436 1049.4169,-436 1049.4169,-430 1055.4169,-424 1061.4169,-424 1061.4169,-424 1186.2513,-424 1186.2513,-424 1192.2513,-424 1198.2513,-430 1198.2513,-436 1198.2513,-436 1198.2513,-448 1198.2513,-448 1198.2513,-454 1192.2513,-460 1186.2513,-460"/>
<text text-anchor="middle" x="1123.8341" y="-437.8" font-family="Verdana" font-size="14.00" fill="#000000">getLocalCountryCode</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.checkIPv6Connectivity -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.checkIPv6Connectivity</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.checkIPv6Connectivity | defined in router_timestamper.go:371">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M964.834,-469C964.834,-469 833.0024,-469 833.0024,-469 827.0024,-469 821.0024,-463 821.0024,-457 821.0024,-457 821.0024,-445 821.0024,-445 821.0024,-439 827.0024,-433 833.0024,-433 833.0024,-433 964.834,-433 964.834,-433 970.834,-433 976.834,-439 976.834,-445 976.834,-445 976.834,-457 976.834,-457 976.834,-463 970.834,-469 964.834,-469"/>
<text text-anchor="middle" x="898.9182" y="-446.8" font-family="Verdana" font-size="14.00" fill="#000000">checkIPv6Connectivity</text>
<path fill="#b0c4de" stroke="#000000" stroke-width=".5" d="M28,-415C28,-415 151.31,-415 151.31,-415 157.31,-415 163.31,-421 163.31,-427 163.31,-427 163.31,-481 163.31,-481 163.31,-487 157.31,-493 151.31,-493 151.31,-493 28,-493 28,-493 22,-493 16,-487 16,-481 16,-481 16,-427 16,-427 16,-421 22,-415 28,-415"/>
<text text-anchor="middle" x="89.655" y="-423.5" font-family="Arial" font-size="15.00" fill="#222222">(*DefaultNTPClient)</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration -->
<g id="node3" class="node">
<g id="node1" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration | defined in router_timestamper.go:386">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M1158.2573,-208C1158.2573,-208 1089.4109,-208 1089.4109,-208 1083.4109,-208 1077.4109,-202 1077.4109,-196 1077.4109,-196 1077.4109,-184 1077.4109,-184 1077.4109,-178 1083.4109,-172 1089.4109,-172 1089.4109,-172 1158.2573,-172 1158.2573,-172 1164.2573,-172 1170.2573,-178 1170.2573,-184 1170.2573,-184 1170.2573,-196 1170.2573,-196 1170.2573,-202 1164.2573,-208 1158.2573,-208"/>
<text text-anchor="middle" x="1123.8341" y="-185.8" font-family="Verdana" font-size="14.00" fill="#000000">absDuration</text>
<g id="a_node1"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration | defined in router_timestamper.go:386">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M1158.2573,-52C1158.2573,-52 1089.4109,-52 1089.4109,-52 1083.4109,-52 1077.4109,-46 1077.4109,-40 1077.4109,-40 1077.4109,-28 1077.4109,-28 1077.4109,-22 1083.4109,-16 1089.4109,-16 1089.4109,-16 1158.2573,-16 1158.2573,-16 1164.2573,-16 1170.2573,-22 1170.2573,-28 1170.2573,-28 1170.2573,-40 1170.2573,-40 1170.2573,-46 1164.2573,-52 1158.2573,-52"/>
<text text-anchor="middle" x="1123.8341" y="-29.8" font-family="Verdana" font-size="14.00" fill="#000000">absDuration</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.getLocalCountryCode -->
<g id="node2" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.getLocalCountryCode</title>
<g id="a_node2"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.getLocalCountryCode | defined in router_timestamper.go:393">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M1186.2513,-451C1186.2513,-451 1061.4169,-451 1061.4169,-451 1055.4169,-451 1049.4169,-445 1049.4169,-439 1049.4169,-439 1049.4169,-427 1049.4169,-427 1049.4169,-421 1055.4169,-415 1061.4169,-415 1061.4169,-415 1186.2513,-415 1186.2513,-415 1192.2513,-415 1198.2513,-421 1198.2513,-427 1198.2513,-427 1198.2513,-439 1198.2513,-439 1198.2513,-445 1192.2513,-451 1186.2513,-451"/>
<text text-anchor="middle" x="1123.8341" y="-428.8" font-family="Verdana" font-size="14.00" fill="#000000">getLocalCountryCode</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.checkIPv6Connectivity -->
<g id="node3" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.checkIPv6Connectivity</title>
<g id="a_node3"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.checkIPv6Connectivity | defined in router_timestamper.go:371">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M964.834,-460C964.834,-460 833.0024,-460 833.0024,-460 827.0024,-460 821.0024,-454 821.0024,-448 821.0024,-448 821.0024,-436 821.0024,-436 821.0024,-430 827.0024,-424 833.0024,-424 833.0024,-424 964.834,-424 964.834,-424 970.834,-424 976.834,-430 976.834,-436 976.834,-436 976.834,-448 976.834,-448 976.834,-454 970.834,-460 964.834,-460"/>
<text text-anchor="middle" x="898.9182" y="-437.8" font-family="Verdana" font-size="14.00" fill="#000000">checkIPv6Connectivity</text>
</a>
</g>
</g>
@ -77,89 +69,126 @@
<g id="node4" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewZones</title>
<g id="a_node4"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewZones | defined in zones.go:19&#10;at zones.go:24: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).initialize]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M929.0586,-121C929.0586,-121 868.7778,-121 868.7778,-121 862.7778,-121 856.7778,-115 856.7778,-109 856.7778,-109 856.7778,-97 856.7778,-97 856.7778,-91 862.7778,-85 868.7778,-85 868.7778,-85 929.0586,-85 929.0586,-85 935.0586,-85 941.0586,-91 941.0586,-97 941.0586,-97 941.0586,-109 941.0586,-109 941.0586,-115 935.0586,-121 929.0586,-121"/>
<text text-anchor="middle" x="898.9182" y="-98.8" font-family="Verdana" font-size="14.00" fill="#000000">NewZones</text>
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M929.0586,-157C929.0586,-157 868.7778,-157 868.7778,-157 862.7778,-157 856.7778,-151 856.7778,-145 856.7778,-145 856.7778,-133 856.7778,-133 856.7778,-127 862.7778,-121 868.7778,-121 868.7778,-121 929.0586,-121 929.0586,-121 935.0586,-121 941.0586,-127 941.0586,-133 941.0586,-133 941.0586,-145 941.0586,-145 941.0586,-151 935.0586,-157 929.0586,-157"/>
<text text-anchor="middle" x="898.9182" y="-134.8" font-family="Verdana" font-size="14.00" fill="#000000">NewZones</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).initialize -->
<g id="node19" class="node">
<g id="node20" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).initialize</title>
<g id="a_node19"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).initialize | defined in zones.go:36&#10;at zones.go:51: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).readContinentFile]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M1148.3215,-86C1148.3215,-86 1099.3467,-86 1099.3467,-86 1093.3467,-86 1087.3467,-80 1087.3467,-74 1087.3467,-74 1087.3467,-62 1087.3467,-62 1087.3467,-56 1093.3467,-50 1099.3467,-50 1099.3467,-50 1148.3215,-50 1148.3215,-50 1154.3215,-50 1160.3215,-56 1160.3215,-62 1160.3215,-62 1160.3215,-74 1160.3215,-74 1160.3215,-80 1154.3215,-86 1148.3215,-86"/>
<text text-anchor="middle" x="1123.8341" y="-63.8" font-family="Verdana" font-size="14.00" fill="#000000">initialize</text>
<g id="a_node20"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).initialize | defined in zones.go:36&#10;at zones.go:51: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).readContinentFile]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M1148.3215,-130C1148.3215,-130 1099.3467,-130 1099.3467,-130 1093.3467,-130 1087.3467,-124 1087.3467,-118 1087.3467,-118 1087.3467,-106 1087.3467,-106 1087.3467,-100 1093.3467,-94 1099.3467,-94 1099.3467,-94 1148.3215,-94 1148.3215,-94 1154.3215,-94 1160.3215,-100 1160.3215,-106 1160.3215,-106 1160.3215,-118 1160.3215,-118 1160.3215,-124 1154.3215,-130 1148.3215,-130"/>
<text text-anchor="middle" x="1123.8341" y="-107.8" font-family="Verdana" font-size="14.00" fill="#000000">initialize</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewZones&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).initialize -->
<g id="edge4" class="edge">
<g id="edge15" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewZones&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).initialize</title>
<g id="a_edge4"><a xlink:title="at zones.go:24: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).initialize]">
<path fill="none" stroke="#000000" d="M941.2232,-96.4168C979.9704,-90.3872 1037.2175,-81.4787 1077.2557,-75.2482"/>
<polygon fill="#000000" stroke="#000000" points="1077.9539,-78.6818 1087.2968,-73.6857 1076.8775,-71.765 1077.9539,-78.6818"/>
<g id="a_edge15"><a xlink:title="at zones.go:24: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).initialize]">
<path fill="none" stroke="#000000" d="M941.2232,-133.9215C979.9704,-129.2701 1037.2175,-122.3979 1077.2557,-117.5915"/>
<polygon fill="#000000" stroke="#000000" points="1077.7853,-121.0531 1087.2968,-116.3861 1076.9509,-114.103 1077.7853,-121.0531"/>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper -->
<g id="node5" class="node">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper</title>
<g id="a_node5"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper | defined in router_timestamper.go:55&#10;at router_timestamper.go:61: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewZones]&#10;at router_timestamper.go:65: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M736.4082,-138C736.4082,-138 597.6188,-138 597.6188,-138 591.6188,-138 585.6188,-132 585.6188,-126 585.6188,-126 585.6188,-114 585.6188,-114 585.6188,-108 591.6188,-102 597.6188,-102 597.6188,-102 736.4082,-102 736.4082,-102 742.4082,-102 748.4082,-108 748.4082,-114 748.4082,-114 748.4082,-126 748.4082,-126 748.4082,-132 742.4082,-138 736.4082,-138"/>
<text text-anchor="middle" x="667.0135" y="-115.8" font-family="Verdana" font-size="14.00" fill="#000000">NewRouterTimestamper</text>
<g id="a_node5"><a xlink:title="github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper | defined in router_timestamper.go:55&#10;at router_timestamper.go:65: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig]&#10;at router_timestamper.go:61: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewZones]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M736.4082,-164C736.4082,-164 597.6188,-164 597.6188,-164 591.6188,-164 585.6188,-158 585.6188,-152 585.6188,-152 585.6188,-140 585.6188,-140 585.6188,-134 591.6188,-128 597.6188,-128 597.6188,-128 736.4082,-128 736.4082,-128 742.4082,-128 748.4082,-134 748.4082,-140 748.4082,-140 748.4082,-152 748.4082,-152 748.4082,-158 742.4082,-164 736.4082,-164"/>
<text text-anchor="middle" x="667.0135" y="-141.8" font-family="Verdana" font-size="14.00" fill="#000000">NewRouterTimestamper</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewZones -->
<g id="edge5" class="edge">
<g id="edge16" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewZones</title>
<g id="a_edge5"><a xlink:title="at router_timestamper.go:61: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewZones]">
<path fill="none" stroke="#000000" d="M748.4483,-114.0303C780.9942,-111.6445 817.5321,-108.9661 846.4526,-106.846"/>
<polygon fill="#000000" stroke="#000000" points="847.024,-110.3136 856.7413,-106.0918 846.5122,-103.3324 847.024,-110.3136"/>
<g id="a_edge16"><a xlink:title="at router_timestamper.go:61: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewZones]">
<path fill="none" stroke="#000000" d="M748.4483,-143.5419C780.9942,-142.5595 817.5321,-141.4566 846.4526,-140.5837"/>
<polygon fill="#000000" stroke="#000000" points="846.8515,-144.0733 856.7413,-140.2731 846.6402,-137.0765 846.8515,-144.0733"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig -->
<g id="node7" class="node">
<g id="node10" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig</title>
<g id="a_node7"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig | defined in router_timestamper.go:331&#10;at router_timestamper.go:348: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.getLocalCountryCode]&#10;at router_timestamper.go:357: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).GetZone]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M937.126,-286C937.126,-286 860.7104,-286 860.7104,-286 854.7104,-286 848.7104,-280 848.7104,-274 848.7104,-274 848.7104,-262 848.7104,-262 848.7104,-256 854.7104,-250 860.7104,-250 860.7104,-250 937.126,-250 937.126,-250 943.126,-250 949.126,-256 949.126,-262 949.126,-262 949.126,-274 949.126,-274 949.126,-280 943.126,-286 937.126,-286"/>
<text text-anchor="middle" x="898.9182" y="-263.8" font-family="Verdana" font-size="14.00" fill="#000000">updateConfig</text>
<g id="a_node10"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig | defined in router_timestamper.go:331&#10;at router_timestamper.go:348: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.getLocalCountryCode]&#10;at router_timestamper.go:357: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).GetZone]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M937.126,-338C937.126,-338 860.7104,-338 860.7104,-338 854.7104,-338 848.7104,-332 848.7104,-326 848.7104,-326 848.7104,-314 848.7104,-314 848.7104,-308 854.7104,-302 860.7104,-302 860.7104,-302 937.126,-302 937.126,-302 943.126,-302 949.126,-308 949.126,-314 949.126,-314 949.126,-326 949.126,-326 949.126,-332 943.126,-338 937.126,-338"/>
<text text-anchor="middle" x="898.9182" y="-315.8" font-family="Verdana" font-size="14.00" fill="#000000">updateConfig</text>
</a>
</g>
</g>
<!-- github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig -->
<g id="edge12" class="edge">
<g id="edge10" class="edge">
<title>github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.NewRouterTimestamper&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig</title>
<g id="a_edge12"><a xlink:title="at router_timestamper.go:65: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig]">
<path fill="none" stroke="#000000" d="M684.2314,-138.2078C711.018,-165.5021 765.4158,-216.9173 821.2106,-246 826.759,-248.8921 832.7343,-251.4444 838.8191,-253.6875"/>
<polygon fill="#000000" stroke="#000000" points="837.8309,-257.0483 848.4253,-256.9623 840.0896,-250.4227 837.8309,-257.0483"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.DefaultNTPClient).QueryWithOptions -->
<g id="node6" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.DefaultNTPClient).QueryWithOptions</title>
<g id="a_node6"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.DefaultNTPClient).QueryWithOptions | defined in router_timestamper.go:20&#10;at router_timestamper.go:21: calling [github.com/beevik/ntp.QueryWithOptions]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M143.4654,-494C143.4654,-494 35.8446,-494 35.8446,-494 29.8446,-494 23.8446,-488 23.8446,-482 23.8446,-482 23.8446,-470 23.8446,-470 23.8446,-464 29.8446,-458 35.8446,-458 35.8446,-458 143.4654,-458 143.4654,-458 149.4654,-458 155.4654,-464 155.4654,-470 155.4654,-470 155.4654,-482 155.4654,-482 155.4654,-488 149.4654,-494 143.4654,-494"/>
<text text-anchor="middle" x="89.655" y="-471.8" font-family="Verdana" font-size="14.00" fill="#000000">QueryWithOptions</text>
<g id="a_edge10"><a xlink:title="at router_timestamper.go:65: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig]">
<path fill="none" stroke="#000000" d="M698.2421,-164.1692C714.0193,-174.0679 732.9914,-187.1144 748.2106,-201 786.0037,-235.4814 779.7563,-260.0195 821.2106,-290 826.7217,-293.9857 832.8306,-297.5195 839.1317,-300.6329"/>
<polygon fill="#000000" stroke="#000000" points="837.904,-303.9201 848.4536,-304.8973 840.8159,-297.5545 837.904,-303.9201"/>
</a>
</g>
</g>
<!-- github.com/beevik/ntp.QueryWithOptions -->
<g id="node21" class="node">
<g id="node6" class="node">
<title>github.com/beevik/ntp.QueryWithOptions</title>
<g id="a_node21"><a xlink:title="github.com/beevik/ntp.QueryWithOptions | defined in ntp.go:432">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M355.7754,-468C355.7754,-468 248.1546,-468 248.1546,-468 242.1546,-468 236.1546,-462 236.1546,-456 236.1546,-456 236.1546,-444 236.1546,-444 236.1546,-438 242.1546,-432 248.1546,-432 248.1546,-432 355.7754,-432 355.7754,-432 361.7754,-432 367.7754,-438 367.7754,-444 367.7754,-444 367.7754,-456 367.7754,-456 367.7754,-462 361.7754,-468 355.7754,-468"/>
<text text-anchor="middle" x="301.965" y="-445.8" font-family="Verdana" font-size="14.00" fill="#000000">QueryWithOptions</text>
<g id="a_node6"><a xlink:title="github.com/beevik/ntp.QueryWithOptions | defined in ntp.go:432">
<path fill="#ffe4b5" stroke="#000000" stroke-width="1.5" d="M355.7754,-485C355.7754,-485 248.1546,-485 248.1546,-485 242.1546,-485 236.1546,-479 236.1546,-473 236.1546,-473 236.1546,-461 236.1546,-461 236.1546,-455 242.1546,-449 248.1546,-449 248.1546,-449 355.7754,-449 355.7754,-449 361.7754,-449 367.7754,-455 367.7754,-461 367.7754,-461 367.7754,-473 367.7754,-473 367.7754,-479 361.7754,-485 355.7754,-485"/>
<text text-anchor="middle" x="301.965" y="-471.2" font-family="Verdana" font-size="14.00" fill="#000000">ntp</text>
<text text-anchor="middle" x="301.965" y="-454.4" font-family="Verdana" font-size="14.00" fill="#000000">QueryWithOptions</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.DefaultNTPClient).QueryWithOptions -->
<g id="node7" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.DefaultNTPClient).QueryWithOptions</title>
<g id="a_node7"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.DefaultNTPClient).QueryWithOptions | defined in router_timestamper.go:20&#10;at router_timestamper.go:21: calling [github.com/beevik/ntp.QueryWithOptions]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M143.4654,-485C143.4654,-485 35.8446,-485 35.8446,-485 29.8446,-485 23.8446,-479 23.8446,-473 23.8446,-473 23.8446,-461 23.8446,-461 23.8446,-455 29.8446,-449 35.8446,-449 35.8446,-449 143.4654,-449 143.4654,-449 149.4654,-449 155.4654,-455 155.4654,-461 155.4654,-461 155.4654,-473 155.4654,-473 155.4654,-479 149.4654,-485 143.4654,-485"/>
<text text-anchor="middle" x="89.655" y="-462.8" font-family="Verdana" font-size="14.00" fill="#000000">QueryWithOptions</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.DefaultNTPClient).QueryWithOptions&#45;&gt;github.com/beevik/ntp.QueryWithOptions -->
<g id="edge14" class="edge">
<g id="edge6" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.DefaultNTPClient).QueryWithOptions&#45;&gt;github.com/beevik/ntp.QueryWithOptions</title>
<g id="a_edge14"><a xlink:title="at router_timestamper.go:21: calling [github.com/beevik/ntp.QueryWithOptions]">
<path fill="none" stroke="#8b4513" d="M155.3772,-467.9515C177.7612,-465.2103 202.965,-462.1238 226.0794,-459.2931"/>
<polygon fill="#8b4513" stroke="#8b4513" points="226.6874,-462.7449 236.1878,-458.0552 225.8365,-455.7968 226.6874,-462.7449"/>
<g id="a_edge6"><a xlink:title="at router_timestamper.go:21: calling [github.com/beevik/ntp.QueryWithOptions]">
<path fill="none" stroke="#8b4513" d="M155.3772,-467C177.7612,-467 202.965,-467 226.0794,-467"/>
<polygon fill="#8b4513" stroke="#8b4513" points="226.1878,-470.5001 236.1878,-467 226.1878,-463.5001 226.1878,-470.5001"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime -->
<g id="node8" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime</title>
<g id="a_node8"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime | defined in router_timestamper.go:276&#10;at router_timestamper.go:319: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).stampTime]&#10;at router_timestamper.go:303: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration]&#10;at router_timestamper.go:312: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration]&#10;at router_timestamper.go:304: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M929.8429,-277C929.8429,-277 867.9935,-277 867.9935,-277 861.9935,-277 855.9935,-271 855.9935,-265 855.9935,-265 855.9935,-253 855.9935,-253 855.9935,-247 861.9935,-241 867.9935,-241 867.9935,-241 929.8429,-241 929.8429,-241 935.8429,-241 941.8429,-247 941.8429,-253 941.8429,-253 941.8429,-265 941.8429,-265 941.8429,-271 935.8429,-277 929.8429,-277"/>
<text text-anchor="middle" x="898.9182" y="-254.8" font-family="Verdana" font-size="14.00" fill="#000000">queryTime</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration -->
<g id="edge17" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration</title>
<g id="a_edge17"><a xlink:title="at router_timestamper.go:303: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration]&#10;at router_timestamper.go:312: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration]&#10;at router_timestamper.go:304: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration]">
<path fill="none" stroke="#000000" d="M941.9142,-254.0925C954.2924,-250.8834 967.0278,-245.6182 976.6258,-237 1041.1664,-179.0478 985.4433,-114.3486 1049.6258,-56 1054.8365,-51.2629 1061.0237,-47.5433 1067.5692,-44.6232"/>
<polygon fill="#000000" stroke="#000000" points="1069.2496,-47.7281 1077.3435,-40.8915 1066.7528,-41.1885 1069.2496,-47.7281"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).stampTime -->
<g id="node9" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).stampTime</title>
<g id="a_node9"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).stampTime | defined in router_timestamper.go:323">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M1155.3229,-277C1155.3229,-277 1092.3453,-277 1092.3453,-277 1086.3453,-277 1080.3453,-271 1080.3453,-265 1080.3453,-265 1080.3453,-253 1080.3453,-253 1080.3453,-247 1086.3453,-241 1092.3453,-241 1092.3453,-241 1155.3229,-241 1155.3229,-241 1161.3229,-241 1167.3229,-247 1167.3229,-253 1167.3229,-253 1167.3229,-265 1167.3229,-265 1167.3229,-271 1161.3229,-277 1155.3229,-277"/>
<text text-anchor="middle" x="1123.8341" y="-254.8" font-family="Verdana" font-size="14.00" fill="#000000">stampTime</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).stampTime -->
<g id="edge13" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).stampTime</title>
<g id="a_edge13"><a xlink:title="at router_timestamper.go:319: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).stampTime]">
<path fill="none" stroke="#000000" d="M941.7526,-259C978.1397,-259 1030.5595,-259 1069.8194,-259"/>
<polygon fill="#000000" stroke="#000000" points="1070.0083,-262.5001 1080.0083,-259 1070.0083,-255.5001 1070.0083,-262.5001"/>
</a>
</g>
</g>
@ -167,237 +196,201 @@
<g id="edge1" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.getLocalCountryCode</title>
<g id="a_edge1"><a xlink:title="at router_timestamper.go:348: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.getLocalCountryCode]">
<path fill="none" stroke="#000000" d="M949.2861,-282.535C959.0176,-286.82 968.6526,-292.2328 976.6258,-299 1022.0787,-337.5781 1002.2441,-377.3308 1047.4553,-417.4837"/>
<polygon fill="#000000" stroke="#000000" points="1045.3444,-420.2793 1055.2899,-423.9314 1049.7925,-414.8743 1045.3444,-420.2793"/>
<path fill="none" stroke="#000000" d="M949.3331,-337.4698C958.6543,-341.432 968.1229,-345.9748 976.6258,-351 1010.2386,-370.8651 1012.3876,-388.6308 1048.8341,-410.0173"/>
<polygon fill="#000000" stroke="#000000" points="1047.2761,-413.1553 1057.7205,-414.9343 1050.6652,-407.0303 1047.2761,-413.1553"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).GetZone -->
<g id="node18" class="node">
<g id="node19" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).GetZone</title>
<g id="a_node18"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).GetZone | defined in zones.go:28">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M1148.3131,-147C1148.3131,-147 1099.3551,-147 1099.3551,-147 1093.3551,-147 1087.3551,-141 1087.3551,-135 1087.3551,-135 1087.3551,-123 1087.3551,-123 1087.3551,-117 1093.3551,-111 1099.3551,-111 1099.3551,-111 1148.3131,-111 1148.3131,-111 1154.3131,-111 1160.3131,-117 1160.3131,-123 1160.3131,-123 1160.3131,-135 1160.3131,-135 1160.3131,-141 1154.3131,-147 1148.3131,-147"/>
<text text-anchor="middle" x="1123.8341" y="-124.8" font-family="Verdana" font-size="14.00" fill="#000000">GetZone</text>
<g id="a_node19"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).GetZone | defined in zones.go:28">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M1148.3131,-191C1148.3131,-191 1099.3551,-191 1099.3551,-191 1093.3551,-191 1087.3551,-185 1087.3551,-179 1087.3551,-179 1087.3551,-167 1087.3551,-167 1087.3551,-161 1093.3551,-155 1099.3551,-155 1099.3551,-155 1148.3131,-155 1148.3131,-155 1154.3131,-155 1160.3131,-161 1160.3131,-167 1160.3131,-167 1160.3131,-179 1160.3131,-179 1160.3131,-185 1154.3131,-191 1148.3131,-191"/>
<text text-anchor="middle" x="1123.8341" y="-168.8" font-family="Verdana" font-size="14.00" fill="#000000">GetZone</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).GetZone -->
<g id="edge2" class="edge">
<g id="edge7" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).GetZone</title>
<g id="a_edge2"><a xlink:title="at router_timestamper.go:357: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).GetZone]">
<path fill="none" stroke="#000000" d="M949.0305,-264.8332C971.0415,-261.1253 995.8619,-253.4902 1013.6258,-238 1045.1651,-210.4976 1018.5362,-179.0098 1049.6258,-151 1057.338,-144.0518 1067.153,-139.2936 1077.0995,-136.0365"/>
<polygon fill="#000000" stroke="#000000" points="1078.334,-139.3254 1087.0168,-133.2543 1076.4431,-132.5856 1078.334,-139.3254"/>
<g id="a_edge7"><a xlink:title="at router_timestamper.go:357: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).GetZone]">
<path fill="none" stroke="#000000" d="M949.1949,-307.3083C959.1561,-303.0443 968.9059,-297.4111 976.6258,-290 1005.6323,-262.1538 982.6395,-233.7883 1012.6258,-207 1030.3677,-191.1503 1055.3391,-182.688 1077.1252,-178.1705"/>
<polygon fill="#000000" stroke="#000000" points="1077.9988,-181.5684 1087.1951,-176.3073 1076.7252,-174.6852 1077.9988,-181.5684"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery -->
<g id="node8" class="node">
<g id="node11" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery</title>
<g id="a_node8"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery | defined in router_timestamper.go:129&#10;at router_timestamper.go:149: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).secureRandBool]&#10;at router_timestamper.go:131: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.checkIPv6Connectivity]&#10;at router_timestamper.go:130: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig]&#10;at router_timestamper.go:141: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime]&#10;at router_timestamper.go:150: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M721.6312,-362C721.6312,-362 612.3958,-362 612.3958,-362 606.3958,-362 600.3958,-356 600.3958,-350 600.3958,-350 600.3958,-338 600.3958,-338 600.3958,-332 606.3958,-326 612.3958,-326 612.3958,-326 721.6312,-326 721.6312,-326 727.6312,-326 733.6312,-332 733.6312,-338 733.6312,-338 733.6312,-350 733.6312,-350 733.6312,-356 727.6312,-362 721.6312,-362"/>
<text text-anchor="middle" x="667.0135" y="-339.8" font-family="Verdana" font-size="14.00" fill="#000000">performTimeQuery</text>
<g id="a_node11"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery | defined in router_timestamper.go:129&#10;at router_timestamper.go:141: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime]&#10;at router_timestamper.go:150: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime]&#10;at router_timestamper.go:149: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).secureRandBool]&#10;at router_timestamper.go:130: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig]&#10;at router_timestamper.go:131: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.checkIPv6Connectivity]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M721.6312,-364C721.6312,-364 612.3958,-364 612.3958,-364 606.3958,-364 600.3958,-358 600.3958,-352 600.3958,-352 600.3958,-340 600.3958,-340 600.3958,-334 606.3958,-328 612.3958,-328 612.3958,-328 721.6312,-328 721.6312,-328 727.6312,-328 733.6312,-334 733.6312,-340 733.6312,-340 733.6312,-352 733.6312,-352 733.6312,-358 727.6312,-364 721.6312,-364"/>
<text text-anchor="middle" x="667.0135" y="-341.8" font-family="Verdana" font-size="14.00" fill="#000000">performTimeQuery</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.checkIPv6Connectivity -->
<g id="edge7" class="edge">
<g id="edge18" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.checkIPv6Connectivity</title>
<g id="a_edge7"><a xlink:title="at router_timestamper.go:131: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.checkIPv6Connectivity]">
<path fill="none" stroke="#000000" d="M700.1887,-362.133C731.0725,-378.6876 778.615,-403.3472 821.2106,-422 826.8372,-424.4639 832.7462,-426.9119 838.6872,-429.2808"/>
<polygon fill="#000000" stroke="#000000" points="837.4258,-432.5455 848.0137,-432.9293 839.976,-426.0266 837.4258,-432.5455"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig -->
<g id="edge9" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig</title>
<g id="a_edge9"><a xlink:title="at router_timestamper.go:130: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig]">
<path fill="none" stroke="#000000" d="M734.0434,-326.2901C738.8505,-324.8816 743.6124,-323.4442 748.2106,-322 779.4019,-312.2034 813.7485,-300.0084 841.7651,-289.6876"/>
<polygon fill="#000000" stroke="#000000" points="843.2327,-292.8765 851.3954,-286.1221 840.8022,-286.3119 843.2327,-292.8765"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime -->
<g id="node9" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime</title>
<g id="a_node9"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime | defined in router_timestamper.go:276&#10;at router_timestamper.go:319: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).stampTime]&#10;at router_timestamper.go:303: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration]&#10;at router_timestamper.go:312: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration]&#10;at router_timestamper.go:304: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M929.8429,-347C929.8429,-347 867.9935,-347 867.9935,-347 861.9935,-347 855.9935,-341 855.9935,-335 855.9935,-335 855.9935,-323 855.9935,-323 855.9935,-317 861.9935,-311 867.9935,-311 867.9935,-311 929.8429,-311 929.8429,-311 935.8429,-311 941.8429,-317 941.8429,-323 941.8429,-323 941.8429,-335 941.8429,-335 941.8429,-341 935.8429,-347 929.8429,-347"/>
<text text-anchor="middle" x="898.9182" y="-324.8" font-family="Verdana" font-size="14.00" fill="#000000">queryTime</text>
<g id="a_edge18"><a xlink:title="at router_timestamper.go:131: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.checkIPv6Connectivity]">
<path fill="none" stroke="#000000" d="M707.0278,-364.0762C738.0115,-377.9049 782.098,-397.2171 821.2106,-413 827.1696,-415.4046 833.4124,-417.8521 839.6589,-420.2544"/>
<polygon fill="#000000" stroke="#000000" points="838.8467,-423.6904 849.4376,-423.9798 841.3388,-417.149 838.8467,-423.6904"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime -->
<g id="edge17" class="edge">
<g id="edge8" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime</title>
<g id="a_edge17"><a xlink:title="at router_timestamper.go:141: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime]&#10;at router_timestamper.go:150: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime]">
<path fill="none" stroke="#000000" d="M733.7788,-339.6815C769.4301,-337.3755 812.6965,-334.577 845.998,-332.423"/>
<polygon fill="#000000" stroke="#000000" points="846.2404,-335.9147 855.9936,-331.7764 845.7885,-328.9293 846.2404,-335.9147"/>
<g id="a_edge8"><a xlink:title="at router_timestamper.go:141: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime]&#10;at router_timestamper.go:150: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime]">
<path fill="none" stroke="#000000" d="M733.7716,-328.905C738.6888,-327.3431 743.5464,-325.7038 748.2106,-324 781.8287,-311.7195 788.3537,-304.1921 821.2106,-290 829.3486,-286.4849 838.0229,-282.8839 846.5153,-279.4378"/>
<polygon fill="#000000" stroke="#000000" points="848.0177,-282.606 855.988,-275.6256 845.4043,-276.1122 848.0177,-282.606"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig -->
<g id="edge14" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig</title>
<g id="a_edge14"><a xlink:title="at router_timestamper.go:130: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).updateConfig]">
<path fill="none" stroke="#000000" d="M733.7788,-338.5146C766.8616,-334.8055 806.5018,-330.3613 838.6518,-326.7568"/>
<polygon fill="#000000" stroke="#000000" points="839.2614,-330.2104 848.8092,-325.618 838.4814,-323.254 839.2614,-330.2104"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).secureRandBool -->
<g id="node11" class="node">
<g id="node12" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).secureRandBool</title>
<g id="a_node11"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).secureRandBool | defined in router_timestamper.go:125">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M944.9466,-408C944.9466,-408 852.8898,-408 852.8898,-408 846.8898,-408 840.8898,-402 840.8898,-396 840.8898,-396 840.8898,-384 840.8898,-384 840.8898,-378 846.8898,-372 852.8898,-372 852.8898,-372 944.9466,-372 944.9466,-372 950.9466,-372 956.9466,-378 956.9466,-384 956.9466,-384 956.9466,-396 956.9466,-396 956.9466,-402 950.9466,-408 944.9466,-408"/>
<text text-anchor="middle" x="898.9182" y="-385.8" font-family="Verdana" font-size="14.00" fill="#000000">secureRandBool</text>
<g id="a_node12"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).secureRandBool | defined in router_timestamper.go:125">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M944.9466,-399C944.9466,-399 852.8898,-399 852.8898,-399 846.8898,-399 840.8898,-393 840.8898,-387 840.8898,-387 840.8898,-375 840.8898,-375 840.8898,-369 846.8898,-363 852.8898,-363 852.8898,-363 944.9466,-363 944.9466,-363 950.9466,-363 956.9466,-369 956.9466,-375 956.9466,-375 956.9466,-387 956.9466,-387 956.9466,-393 950.9466,-399 944.9466,-399"/>
<text text-anchor="middle" x="898.9182" y="-376.8" font-family="Verdana" font-size="14.00" fill="#000000">secureRandBool</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).secureRandBool -->
<g id="edge3" class="edge">
<g id="edge9" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).secureRandBool</title>
<g id="a_edge3"><a xlink:title="at router_timestamper.go:149: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).secureRandBool]">
<path fill="none" stroke="#000000" d="M733.7788,-357.2434C764.1938,-363.2764 800.1513,-370.4089 830.7354,-376.4754"/>
<polygon fill="#000000" stroke="#000000" points="830.3957,-379.9762 840.8856,-378.4888 831.7577,-373.11 830.3957,-379.9762"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration -->
<g id="edge16" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration</title>
<g id="a_edge16"><a xlink:title="at router_timestamper.go:303: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration]&#10;at router_timestamper.go:312: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration]&#10;at router_timestamper.go:304: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration]">
<path fill="none" stroke="#000000" d="M942.0155,-316.7584C953.8548,-312.2574 966.2725,-306.4 976.6258,-299 1017.6903,-269.6493 1007.4174,-239.6803 1049.6258,-212 1055.2126,-208.3362 1061.4284,-205.2657 1067.8181,-202.6962"/>
<polygon fill="#000000" stroke="#000000" points="1069.0411,-205.9758 1077.2513,-199.2794 1066.6571,-199.3943 1069.0411,-205.9758"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).stampTime -->
<g id="node10" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).stampTime</title>
<g id="a_node10"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).stampTime | defined in router_timestamper.go:323">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M1155.3229,-347C1155.3229,-347 1092.3453,-347 1092.3453,-347 1086.3453,-347 1080.3453,-341 1080.3453,-335 1080.3453,-335 1080.3453,-323 1080.3453,-323 1080.3453,-317 1086.3453,-311 1092.3453,-311 1092.3453,-311 1155.3229,-311 1155.3229,-311 1161.3229,-311 1167.3229,-317 1167.3229,-323 1167.3229,-323 1167.3229,-335 1167.3229,-335 1167.3229,-341 1161.3229,-347 1155.3229,-347"/>
<text text-anchor="middle" x="1123.8341" y="-324.8" font-family="Verdana" font-size="14.00" fill="#000000">stampTime</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).stampTime -->
<g id="edge15" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).queryTime&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).stampTime</title>
<g id="a_edge15"><a xlink:title="at router_timestamper.go:319: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).stampTime]">
<path fill="none" stroke="#000000" d="M941.7526,-329C978.1397,-329 1030.5595,-329 1069.8194,-329"/>
<polygon fill="#000000" stroke="#000000" points="1070.0083,-332.5001 1080.0083,-329 1070.0083,-325.5001 1070.0083,-332.5001"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce -->
<g id="node12" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce</title>
<g id="a_node12"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce | defined in router_timestamper.go:272&#10;at router_timestamper.go:273: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M500.9149,-386C500.9149,-386 452.5215,-386 452.5215,-386 446.5215,-386 440.5215,-380 440.5215,-374 440.5215,-374 440.5215,-362 440.5215,-362 440.5215,-356 446.5215,-350 452.5215,-350 452.5215,-350 500.9149,-350 500.9149,-350 506.9149,-350 512.9149,-356 512.9149,-362 512.9149,-362 512.9149,-374 512.9149,-374 512.9149,-380 506.9149,-386 500.9149,-386"/>
<text text-anchor="middle" x="476.7182" y="-363.8" font-family="Verdana" font-size="14.00" fill="#000000">runOnce</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery -->
<g id="edge18" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery</title>
<g id="a_edge18"><a xlink:title="at router_timestamper.go:273: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery]">
<path fill="none" stroke="#000000" d="M512.9592,-363.4293C534.7608,-360.6797 563.365,-357.0721 590.0004,-353.7129"/>
<polygon fill="#000000" stroke="#000000" points="590.6105,-357.1637 600.0939,-352.4399 589.7346,-350.2188 590.6105,-357.1637"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow -->
<g id="node13" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow</title>
<g id="a_node13"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow | defined in router_timestamper.go:119&#10;at router_timestamper.go:121: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M347.1672,-386C347.1672,-386 256.7628,-386 256.7628,-386 250.7628,-386 244.7628,-380 244.7628,-374 244.7628,-374 244.7628,-362 244.7628,-362 244.7628,-356 250.7628,-350 256.7628,-350 256.7628,-350 347.1672,-350 347.1672,-350 353.1672,-350 359.1672,-356 359.1672,-362 359.1672,-362 359.1672,-374 359.1672,-374 359.1672,-380 353.1672,-386 347.1672,-386"/>
<text text-anchor="middle" x="301.965" y="-363.8" font-family="Verdana" font-size="14.00" fill="#000000">TimestampNow</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce -->
<g id="edge10" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce</title>
<g id="a_edge10"><a xlink:title="at router_timestamper.go:121: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce]">
<path fill="none" stroke="#000000" d="M359.1857,-368C377.8039,-368 398.5042,-368 417.2807,-368"/>
<polygon fill="#000000" stroke="#000000" points="430.5192,-371.5 440.5192,-368 430.5192,-364.5 430.5192,-371.5"/>
<polyline fill="none" stroke="#000000" points="430.5192,-368 425.5192,-368.0001 "/>
<ellipse fill="none" stroke="#000000" cx="421.5192" cy="-368.0001" rx="4" ry="4"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime -->
<g id="node14" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime</title>
<g id="a_node14"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime | defined in router_timestamper.go:397&#10;at router_timestamper.go:400: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M135.6792,-386C135.6792,-386 43.6308,-386 43.6308,-386 37.6308,-386 31.6308,-380 31.6308,-374 31.6308,-374 31.6308,-362 31.6308,-362 31.6308,-356 37.6308,-350 43.6308,-350 43.6308,-350 135.6792,-350 135.6792,-350 141.6792,-350 147.6792,-356 147.6792,-362 147.6792,-362 147.6792,-374 147.6792,-374 147.6792,-380 141.6792,-386 135.6792,-386"/>
<text text-anchor="middle" x="89.655" y="-363.8" font-family="Verdana" font-size="14.00" fill="#000000">GetCurrentTime</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow -->
<g id="edge11" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow</title>
<g id="a_edge11"><a xlink:title="at router_timestamper.go:400: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow]">
<path fill="none" stroke="#000000" d="M147.9505,-368C174.7367,-368 206.6648,-368 234.487,-368"/>
<polygon fill="#000000" stroke="#000000" points="234.5344,-371.5001 244.5344,-368 234.5343,-364.5001 234.5344,-371.5001"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).validateResponse -->
<g id="node15" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).validateResponse</title>
<g id="a_node15"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).validateResponse | defined in verification.go:10&#10;at verification.go:28: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M138.6256,-286C138.6256,-286 40.6844,-286 40.6844,-286 34.6844,-286 28.6844,-280 28.6844,-274 28.6844,-274 28.6844,-262 28.6844,-262 28.6844,-256 34.6844,-250 40.6844,-250 40.6844,-250 138.6256,-250 138.6256,-250 144.6256,-250 150.6256,-256 150.6256,-262 150.6256,-262 150.6256,-274 150.6256,-274 150.6256,-280 144.6256,-286 138.6256,-286"/>
<text text-anchor="middle" x="89.655" y="-263.8" font-family="Verdana" font-size="14.00" fill="#000000">validateResponse</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).validateResponse&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration -->
<g id="edge6" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).validateResponse&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration</title>
<g id="a_edge6"><a xlink:title="at verification.go:28: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration]">
<path fill="none" stroke="#000000" d="M125.453,-249.8939C166.855,-230.6609 237.5896,-203 301.965,-203 301.965,-203 301.965,-203 898.9182,-203 956.2509,-203 1021.6676,-198.7379 1067.1138,-195.0945"/>
<polygon fill="#000000" stroke="#000000" points="1067.6758,-198.5603 1077.3571,-194.2567 1067.1051,-191.5836 1067.6758,-198.5603"/>
<g id="a_edge9"><a xlink:title="at router_timestamper.go:149: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).secureRandBool]">
<path fill="none" stroke="#000000" d="M733.7788,-356.0765C764.1938,-360.6668 800.1513,-366.0937 830.7354,-370.7096"/>
<polygon fill="#000000" stroke="#000000" points="830.4753,-374.2099 840.8856,-372.2415 831.5199,-367.2883 830.4753,-374.2099"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).run -->
<g id="node16" class="node">
<g id="node13" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).run</title>
<g id="a_node16"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).run | defined in router_timestamper.go:215&#10;at router_timestamper.go:218: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M491.7182,-325C491.7182,-325 461.7182,-325 461.7182,-325 455.7182,-325 449.7182,-319 449.7182,-313 449.7182,-313 449.7182,-301 449.7182,-301 449.7182,-295 455.7182,-289 461.7182,-289 461.7182,-289 491.7182,-289 491.7182,-289 497.7182,-289 503.7182,-295 503.7182,-301 503.7182,-301 503.7182,-313 503.7182,-313 503.7182,-319 497.7182,-325 491.7182,-325"/>
<text text-anchor="middle" x="476.7182" y="-302.8" font-family="Verdana" font-size="14.00" fill="#000000">run</text>
<g id="a_node13"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).run | defined in router_timestamper.go:215&#10;at router_timestamper.go:218: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M491.7182,-399C491.7182,-399 461.7182,-399 461.7182,-399 455.7182,-399 449.7182,-393 449.7182,-387 449.7182,-387 449.7182,-375 449.7182,-375 449.7182,-369 455.7182,-363 461.7182,-363 461.7182,-363 491.7182,-363 491.7182,-363 497.7182,-363 503.7182,-369 503.7182,-375 503.7182,-375 503.7182,-387 503.7182,-387 503.7182,-393 497.7182,-399 491.7182,-399"/>
<text text-anchor="middle" x="476.7182" y="-376.8" font-family="Verdana" font-size="14.00" fill="#000000">run</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).run&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery -->
<g id="edge13" class="edge">
<g id="edge2" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).run&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery</title>
<g id="a_edge13"><a xlink:title="at router_timestamper.go:218: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery]">
<path fill="none" stroke="#000000" d="M503.9829,-312.3012C526.61,-316.7007 559.9243,-323.1782 590.5502,-329.1329"/>
<polygon fill="#000000" stroke="#000000" points="589.8981,-332.5716 600.3823,-331.0446 591.2341,-325.7002 589.8981,-332.5716"/>
<g id="a_edge2"><a xlink:title="at router_timestamper.go:218: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery]">
<path fill="none" stroke="#000000" d="M503.9829,-375.9854C526.512,-371.8417 559.6361,-365.7494 590.1523,-360.1367"/>
<polygon fill="#000000" stroke="#000000" points="591.1804,-363.5064 600.3823,-358.2551 589.9141,-356.6218 591.1804,-363.5064"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce -->
<g id="node14" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce</title>
<g id="a_node14"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce | defined in router_timestamper.go:272&#10;at router_timestamper.go:273: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M500.9149,-338C500.9149,-338 452.5215,-338 452.5215,-338 446.5215,-338 440.5215,-332 440.5215,-326 440.5215,-326 440.5215,-314 440.5215,-314 440.5215,-308 446.5215,-302 452.5215,-302 452.5215,-302 500.9149,-302 500.9149,-302 506.9149,-302 512.9149,-308 512.9149,-314 512.9149,-314 512.9149,-326 512.9149,-326 512.9149,-332 506.9149,-338 500.9149,-338"/>
<text text-anchor="middle" x="476.7182" y="-315.8" font-family="Verdana" font-size="14.00" fill="#000000">runOnce</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery -->
<g id="edge3" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery</title>
<g id="a_edge3"><a xlink:title="at router_timestamper.go:273: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).performTimeQuery]">
<path fill="none" stroke="#000000" d="M512.9592,-324.9516C534.7608,-327.9303 563.365,-331.8385 590.0004,-335.4777"/>
<polygon fill="#000000" stroke="#000000" points="589.7122,-338.9708 600.0939,-336.8568 590.6598,-332.0352 589.7122,-338.9708"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow -->
<g id="node15" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow</title>
<g id="a_node15"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow | defined in router_timestamper.go:119&#10;at router_timestamper.go:121: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M347.1672,-338C347.1672,-338 256.7628,-338 256.7628,-338 250.7628,-338 244.7628,-332 244.7628,-326 244.7628,-326 244.7628,-314 244.7628,-314 244.7628,-308 250.7628,-302 256.7628,-302 256.7628,-302 347.1672,-302 347.1672,-302 353.1672,-302 359.1672,-308 359.1672,-314 359.1672,-314 359.1672,-326 359.1672,-326 359.1672,-332 353.1672,-338 347.1672,-338"/>
<text text-anchor="middle" x="301.965" y="-315.8" font-family="Verdana" font-size="14.00" fill="#000000">TimestampNow</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce -->
<g id="edge11" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce</title>
<g id="a_edge11"><a xlink:title="at router_timestamper.go:121: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).runOnce]">
<path fill="none" stroke="#000000" d="M359.1857,-320C377.8039,-320 398.5042,-320 417.2807,-320"/>
<polygon fill="#000000" stroke="#000000" points="430.5192,-323.5 440.5192,-320 430.5192,-316.5 430.5192,-323.5"/>
<polyline fill="none" stroke="#000000" points="430.5192,-320 425.5192,-320.0001 "/>
<ellipse fill="none" stroke="#000000" cx="421.5192" cy="-320.0001" rx="4" ry="4"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).Start -->
<g id="node17" class="node">
<g id="node16" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).Start</title>
<g id="a_node17"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).Start | defined in router_timestamper.go:69&#10;at router_timestamper.go:75: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).run]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M316.965,-325C316.965,-325 286.965,-325 286.965,-325 280.965,-325 274.965,-319 274.965,-313 274.965,-313 274.965,-301 274.965,-301 274.965,-295 280.965,-289 286.965,-289 286.965,-289 316.965,-289 316.965,-289 322.965,-289 328.965,-295 328.965,-301 328.965,-301 328.965,-313 328.965,-313 328.965,-319 322.965,-325 316.965,-325"/>
<text text-anchor="middle" x="301.965" y="-302.8" font-family="Verdana" font-size="14.00" fill="#000000">Start</text>
<g id="a_node16"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).Start | defined in router_timestamper.go:69&#10;at router_timestamper.go:75: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).run]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M316.965,-399C316.965,-399 286.965,-399 286.965,-399 280.965,-399 274.965,-393 274.965,-387 274.965,-387 274.965,-375 274.965,-375 274.965,-369 280.965,-363 286.965,-363 286.965,-363 316.965,-363 316.965,-363 322.965,-363 328.965,-369 328.965,-375 328.965,-375 328.965,-387 328.965,-387 328.965,-393 322.965,-399 316.965,-399"/>
<text text-anchor="middle" x="301.965" y="-376.8" font-family="Verdana" font-size="14.00" fill="#000000">Start</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).Start&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).run -->
<g id="edge8" class="edge">
<g id="edge4" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).Start&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).run</title>
<g id="a_edge8"><a xlink:title="at router_timestamper.go:75: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).run]">
<path fill="none" stroke="#000000" d="M329.2702,-307C355.1753,-307 394.7342,-307 426.3574,-307"/>
<polygon fill="#000000" stroke="#000000" points="439.6048,-310.5 449.6048,-307 439.6047,-303.5 439.6048,-310.5"/>
<polyline fill="none" stroke="#000000" points="439.6048,-307 434.6048,-307.0001 "/>
<ellipse fill="none" stroke="#000000" cx="430.6048" cy="-307.0001" rx="4" ry="4"/>
<g id="a_edge4"><a xlink:title="at router_timestamper.go:75: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).run]">
<path fill="none" stroke="#000000" d="M329.2702,-381C355.1753,-381 394.7342,-381 426.3574,-381"/>
<polygon fill="#000000" stroke="#000000" points="439.6048,-384.5 449.6048,-381 439.6047,-377.5 439.6048,-384.5"/>
<polyline fill="none" stroke="#000000" points="439.6048,-381 434.6048,-381.0001 "/>
<ellipse fill="none" stroke="#000000" cx="430.6048" cy="-381.0001" rx="4" ry="4"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).validateResponse -->
<g id="node17" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).validateResponse</title>
<g id="a_node17"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).validateResponse | defined in verification.go:10&#10;at verification.go:28: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration]">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M138.6256,-277C138.6256,-277 40.6844,-277 40.6844,-277 34.6844,-277 28.6844,-271 28.6844,-265 28.6844,-265 28.6844,-253 28.6844,-253 28.6844,-247 34.6844,-241 40.6844,-241 40.6844,-241 138.6256,-241 138.6256,-241 144.6256,-241 150.6256,-247 150.6256,-253 150.6256,-253 150.6256,-265 150.6256,-265 150.6256,-271 144.6256,-277 138.6256,-277"/>
<text text-anchor="middle" x="89.655" y="-254.8" font-family="Verdana" font-size="14.00" fill="#000000">validateResponse</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).validateResponse&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration -->
<g id="edge5" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).validateResponse&#45;&gt;github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration</title>
<g id="a_edge5"><a xlink:title="at verification.go:28: calling [github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.absDuration]">
<path fill="none" stroke="#000000" d="M100.4525,-240.807C128.0129,-196.9517 205.6372,-89 301.965,-89 301.965,-89 301.965,-89 898.9182,-89 915.7442,-89 1006.7672,-65.4742 1067.7373,-49.1952"/>
<polygon fill="#000000" stroke="#000000" points="1068.8677,-52.516 1077.6226,-46.5492 1067.0576,-45.754 1068.8677,-52.516"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime -->
<g id="node18" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime</title>
<g id="a_node18"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime | defined in router_timestamper.go:397&#10;at router_timestamper.go:400: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow]">
<path fill="#add8e6" stroke="#000000" stroke-width="1.5" d="M135.6792,-338C135.6792,-338 43.6308,-338 43.6308,-338 37.6308,-338 31.6308,-332 31.6308,-326 31.6308,-326 31.6308,-314 31.6308,-314 31.6308,-308 37.6308,-302 43.6308,-302 43.6308,-302 135.6792,-302 135.6792,-302 141.6792,-302 147.6792,-308 147.6792,-314 147.6792,-314 147.6792,-326 147.6792,-326 147.6792,-332 141.6792,-338 135.6792,-338"/>
<text text-anchor="middle" x="89.655" y="-315.8" font-family="Verdana" font-size="14.00" fill="#000000">GetCurrentTime</text>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow -->
<g id="edge12" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).GetCurrentTime&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow</title>
<g id="a_edge12"><a xlink:title="at router_timestamper.go:400: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.RouterTimestamper).TimestampNow]">
<path fill="none" stroke="#000000" d="M147.9505,-320C174.7367,-320 206.6648,-320 234.487,-320"/>
<polygon fill="#000000" stroke="#000000" points="234.5344,-323.5001 244.5344,-320 234.5343,-316.5001 234.5344,-323.5001"/>
</a>
</g>
</g>
<!-- (*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).readContinentFile -->
<g id="node20" class="node">
<g id="node21" class="node">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).readContinentFile</title>
<g id="a_node20"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).readContinentFile | defined in zones.go:54">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M1384.1792,-86C1384.1792,-86 1282.9968,-86 1282.9968,-86 1276.9968,-86 1270.9968,-80 1270.9968,-74 1270.9968,-74 1270.9968,-62 1270.9968,-62 1270.9968,-56 1276.9968,-50 1282.9968,-50 1282.9968,-50 1384.1792,-50 1384.1792,-50 1390.1792,-50 1396.1792,-56 1396.1792,-62 1396.1792,-62 1396.1792,-74 1396.1792,-74 1396.1792,-80 1390.1792,-86 1384.1792,-86"/>
<text text-anchor="middle" x="1333.588" y="-63.8" font-family="Verdana" font-size="14.00" fill="#000000">readContinentFile</text>
<g id="a_node21"><a xlink:title="(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).readContinentFile | defined in zones.go:54">
<path fill="#add8e6" stroke="#000000" stroke-width=".5" d="M1384.1792,-130C1384.1792,-130 1282.9968,-130 1282.9968,-130 1276.9968,-130 1270.9968,-124 1270.9968,-118 1270.9968,-118 1270.9968,-106 1270.9968,-106 1270.9968,-100 1276.9968,-94 1282.9968,-94 1282.9968,-94 1384.1792,-94 1384.1792,-94 1390.1792,-94 1396.1792,-100 1396.1792,-106 1396.1792,-106 1396.1792,-118 1396.1792,-118 1396.1792,-124 1390.1792,-130 1384.1792,-130"/>
<text text-anchor="middle" x="1333.588" y="-107.8" font-family="Verdana" font-size="14.00" fill="#000000">readContinentFile</text>
</a>
</g>
</g>
@ -405,8 +398,8 @@
<g id="edge19" class="edge">
<title>(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).initialize&#45;&gt;(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).readContinentFile</title>
<g id="a_edge19"><a xlink:title="at zones.go:51: calling [(*github.com/go&#45;i2p/go&#45;i2p/lib/util/time/sntp.Zones).readContinentFile]">
<path fill="none" stroke="#000000" d="M1160.3704,-68C1187.9205,-68 1226.6146,-68 1260.4451,-68"/>
<polygon fill="#000000" stroke="#000000" points="1260.7704,-71.5001 1270.7704,-68 1260.7703,-64.5001 1260.7704,-71.5001"/>
<path fill="none" stroke="#000000" d="M1160.3704,-112C1187.9205,-112 1226.6146,-112 1260.4451,-112"/>
<polygon fill="#000000" stroke="#000000" points="1260.7704,-115.5001 1270.7704,-112 1260.7703,-108.5001 1260.7704,-115.5001"/>
</a>
</g>
</g>

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB