mirror of
https://github.com/restic/restic.git
synced 2026-07-11 09:45:08 +00:00
Move "doc" to root dir
This commit is contained in:
@@ -1,489 +0,0 @@
|
||||
This document gives a high-level overview of the design and repository layout
|
||||
of the restic backup program.
|
||||
|
||||
Terminology
|
||||
===========
|
||||
|
||||
This section introduces terminology used in this document.
|
||||
|
||||
*Repository*: All data produced during a backup is sent to and stored in a
|
||||
repository in a structured form, for example in a file system hierarchy with
|
||||
several subdirectories. A repository implementation must be able to fulfill a
|
||||
number of operations, e.g. list the contents.
|
||||
|
||||
*Blob*: A Blob combines a number of data bytes with identifying information
|
||||
like the SHA-256 hash of the data and its length.
|
||||
|
||||
*Pack*: A Pack combines one or more Blobs, e.g. in a single file.
|
||||
|
||||
*Snapshot*: A Snapshot stands for the state of a file or directory that has
|
||||
been backed up at some point in time. The state here means the content and meta
|
||||
data like the name and modification time for the file or the directory and its
|
||||
contents.
|
||||
|
||||
*Storage ID*: A storage ID is the SHA-256 hash of the content stored in the
|
||||
repository. This ID is required in order to load the file from the repository.
|
||||
|
||||
Repository Format
|
||||
=================
|
||||
|
||||
All data is stored in a restic repository. A repository is able to store data
|
||||
of several different types, which can later be requested based on an ID. This
|
||||
so-called "storage ID" is the SHA-256 hash of the content of a file. All files
|
||||
in a repository are only written once and never modified afterwards. This
|
||||
allows accessing and even writing to the repository with multiple clients in
|
||||
parallel. Only the delete operation removes data from the repository.
|
||||
|
||||
At the time of writing, the only implemented repository type is based on
|
||||
directories and files. Such repositories can be accessed locally on the same
|
||||
system or via the integrated SFTP client (or any other storage back end).
|
||||
The directory layout is the same for both access methods.
|
||||
This repository type is described in the following section.
|
||||
|
||||
Repositories consist of several directories and a file called `config`. For
|
||||
all other files stored in the repository, the name for the file is the lower
|
||||
case hexadecimal representation of the storage ID, which is the SHA-256 hash of
|
||||
the file's contents. This allows for easy verification of files for accidental
|
||||
modifications, like disk read errors, by simply running the program `sha256sum`
|
||||
and comparing its output to the file name. If the prefix of a filename is
|
||||
unique amongst all the other files in the same directory, the prefix may be
|
||||
used instead of the complete filename.
|
||||
|
||||
Apart from the files stored within the `keys` directory, all files are encrypted
|
||||
with AES-256 in counter mode (CTR). The integrity of the encrypted data is
|
||||
secured by a Poly1305-AES message authentication code (sometimes also referred
|
||||
to as a "signature").
|
||||
|
||||
In the first 16 bytes of each encrypted file the initialisation vector (IV) is
|
||||
stored. It is followed by the encrypted data and completed by the 16 byte
|
||||
MAC. The format is: `IV || CIPHERTEXT || MAC`. The complete encryption
|
||||
overhead is 32 bytes. For each file, a new random IV is selected.
|
||||
|
||||
The file `config` is encrypted this way and contains a JSON document like the
|
||||
following:
|
||||
|
||||
{
|
||||
"version": 1,
|
||||
"id": "5956a3f67a6230d4a92cefb29529f10196c7d92582ec305fd71ff6d331d6271b",
|
||||
"chunker_polynomial": "25b468838dcb75"
|
||||
}
|
||||
|
||||
After decryption, restic first checks that the version field contains a version
|
||||
number that it understands, otherwise it aborts. At the moment, the version is
|
||||
expected to be 1. The field `id` holds a unique ID which consists of 32
|
||||
random bytes, encoded in hexadecimal. This uniquely identifies the repository,
|
||||
regardless if it is accessed via SFTP or locally. The field
|
||||
`chunker_polynomial` contains a parameter that is used for splitting large
|
||||
files into smaller chunks (see below).
|
||||
|
||||
The basic layout of a sample restic repository is shown here:
|
||||
|
||||
/tmp/restic-repo
|
||||
├── config
|
||||
├── data
|
||||
│ ├── 21
|
||||
│ │ └── 2159dd48f8a24f33c307b750592773f8b71ff8d11452132a7b2e2a6a01611be1
|
||||
│ ├── 32
|
||||
│ │ └── 32ea976bc30771cebad8285cd99120ac8786f9ffd42141d452458089985043a5
|
||||
│ ├── 59
|
||||
│ │ └── 59fe4bcde59bd6222eba87795e35a90d82cd2f138a27b6835032b7b58173a426
|
||||
│ ├── 73
|
||||
│ │ └── 73d04e6125cf3c28a299cc2f3cca3b78ceac396e4fcf9575e34536b26782413c
|
||||
│ [...]
|
||||
├── index
|
||||
│ ├── c38f5fb68307c6a3e3aa945d556e325dc38f5fb68307c6a3e3aa945d556e325d
|
||||
│ └── ca171b1b7394d90d330b265d90f506f9984043b342525f019788f97e745c71fd
|
||||
├── keys
|
||||
│ └── b02de829beeb3c01a63e6b25cbd421a98fef144f03b9a02e46eff9e2ca3f0bd7
|
||||
├── locks
|
||||
├── snapshots
|
||||
│ └── 22a5af1bdc6e616f8a29579458c49627e01b32210d09adb288d1ecda7c5711ec
|
||||
└── tmp
|
||||
|
||||
A repository can be initialized with the `restic init` command, e.g.:
|
||||
|
||||
$ restic -r /tmp/restic-repo init
|
||||
|
||||
Pack Format
|
||||
-----------
|
||||
|
||||
All files in the repository except Key and Pack files just contain raw data,
|
||||
stored as `IV || Ciphertext || MAC`. Pack files may contain one or more Blobs
|
||||
of data.
|
||||
|
||||
A Pack's structure is as follows:
|
||||
|
||||
EncryptedBlob1 || ... || EncryptedBlobN || EncryptedHeader || Header_Length
|
||||
|
||||
At the end of the Pack file is a header, which describes the content. The
|
||||
header is encrypted and authenticated. `Header_Length` is the length of the
|
||||
encrypted header encoded as a four byte integer in little-endian encoding.
|
||||
Placing the header at the end of a file allows writing the blobs in a
|
||||
continuous stream as soon as they are read during the backup phase. This
|
||||
reduces code complexity and avoids having to re-write a file once the pack is
|
||||
complete and the content and length of the header is known.
|
||||
|
||||
All the blobs (`EncryptedBlob1`, `EncryptedBlobN` etc.) are authenticated and
|
||||
encrypted independently. This enables repository reorganisation without having
|
||||
to touch the encrypted Blobs. In addition it also allows efficient indexing,
|
||||
for only the header needs to be read in order to find out which Blobs are
|
||||
contained in the Pack. Since the header is authenticated, authenticity of the
|
||||
header can be checked without having to read the complete Pack.
|
||||
|
||||
After decryption, a Pack's header consists of the following elements:
|
||||
|
||||
Type_Blob1 || Length(EncryptedBlob1) || Hash(Plaintext_Blob1) ||
|
||||
[...]
|
||||
Type_BlobN || Length(EncryptedBlobN) || Hash(Plaintext_Blobn) ||
|
||||
|
||||
This is enough to calculate the offsets for all the Blobs in the Pack. Length
|
||||
is the length of a Blob as a four byte integer in little-endian format. The
|
||||
type field is a one byte field and labels the content of a blob according to
|
||||
the following table:
|
||||
|
||||
Type | Meaning
|
||||
-----|---------
|
||||
0 | data
|
||||
1 | tree
|
||||
|
||||
All other types are invalid, more types may be added in the future.
|
||||
|
||||
For reconstructing the index or parsing a pack without an index, first the last
|
||||
four bytes must be read in order to find the length of the header. Afterwards,
|
||||
the header can be read and parsed, which yields all plaintext hashes, types,
|
||||
offsets and lengths of all included blobs.
|
||||
|
||||
Indexing
|
||||
--------
|
||||
|
||||
Index files contain information about Data and Tree Blobs and the Packs they
|
||||
are contained in and store this information in the repository. When the local
|
||||
cached index is not accessible any more, the index files can be downloaded and
|
||||
used to reconstruct the index. The files are encrypted and authenticated like
|
||||
Data and Tree Blobs, so the outer structure is `IV || Ciphertext || MAC` again.
|
||||
The plaintext consists of a JSON document like the following:
|
||||
|
||||
{
|
||||
"supersedes": [
|
||||
"ed54ae36197f4745ebc4b54d10e0f623eaaaedd03013eb7ae90df881b7781452"
|
||||
],
|
||||
"packs": [
|
||||
{
|
||||
"id": "73d04e6125cf3c28a299cc2f3cca3b78ceac396e4fcf9575e34536b26782413c",
|
||||
"blobs": [
|
||||
{
|
||||
"id": "3ec79977ef0cf5de7b08cd12b874cd0f62bbaf7f07f3497a5b1bbcc8cb39b1ce",
|
||||
"type": "data",
|
||||
"offset": 0,
|
||||
"length": 25
|
||||
},{
|
||||
"id": "9ccb846e60d90d4eb915848add7aa7ea1e4bbabfc60e573db9f7bfb2789afbae",
|
||||
"type": "tree",
|
||||
"offset": 38,
|
||||
"length": 100
|
||||
},
|
||||
{
|
||||
"id": "d3dc577b4ffd38cc4b32122cabf8655a0223ed22edfd93b353dc0c3f2b0fdf66",
|
||||
"type": "data",
|
||||
"offset": 150,
|
||||
"length": 123
|
||||
}
|
||||
]
|
||||
}, [...]
|
||||
]
|
||||
}
|
||||
|
||||
This JSON document lists Packs and the blobs contained therein. In this
|
||||
example, the Pack `73d04e61` contains two data Blobs and one Tree blob, the
|
||||
plaintext hashes are listed afterwards.
|
||||
|
||||
The field `supersedes` lists the storage IDs of index files that have been
|
||||
replaced with the current index file. This happens when index files are
|
||||
repacked, for example when old snapshots are removed and Packs are recombined.
|
||||
|
||||
There may be an arbitrary number of index files, containing information on
|
||||
non-disjoint sets of Packs. The number of packs described in a single file is
|
||||
chosen so that the file size is kept below 8 MiB.
|
||||
|
||||
Keys, Encryption and MAC
|
||||
------------------------
|
||||
|
||||
All data stored by restic in the repository is encrypted with AES-256 in
|
||||
counter mode and authenticated using Poly1305-AES. For encrypting new data first
|
||||
16 bytes are read from a cryptographically secure pseudorandom number generator
|
||||
as a random nonce. This is used both as the IV for counter mode and the nonce
|
||||
for Poly1305. This operation needs three keys: A 32 byte for AES-256 for
|
||||
encryption, a 16 byte AES key and a 16 byte key for Poly1305. For details see
|
||||
the original paper [The Poly1305-AES message-authentication
|
||||
code](http://cr.yp.to/mac/poly1305-20050329.pdf) by Dan Bernstein.
|
||||
The data is then encrypted with AES-256 and afterwards a message authentication
|
||||
code (MAC) is computed over the ciphertext, everything is then stored as
|
||||
IV || CIPHERTEXT || MAC.
|
||||
|
||||
The directory `keys` contains key files. These are simple JSON documents which
|
||||
contain all data that is needed to derive the repository's master encryption and
|
||||
message authentication keys from a user's password. The JSON document from the
|
||||
repository can be pretty-printed for example by using the Python module `json`
|
||||
(shortened to increase readability):
|
||||
|
||||
$ python -mjson.tool /tmp/restic-repo/keys/b02de82*
|
||||
{
|
||||
"hostname": "kasimir",
|
||||
"username": "fd0"
|
||||
"kdf": "scrypt",
|
||||
"N": 65536,
|
||||
"r": 8,
|
||||
"p": 1,
|
||||
"created": "2015-01-02T18:10:13.48307196+01:00",
|
||||
"data": "tGwYeKoM0C4j4/9DFrVEmMGAldvEn/+iKC3te/QE/6ox/V4qz58FUOgMa0Bb1cIJ6asrypCx/Ti/pRXCPHLDkIJbNYd2ybC+fLhFIJVLCvkMS+trdywsUkglUbTbi+7+Ldsul5jpAj9vTZ25ajDc+4FKtWEcCWL5ICAOoTAxnPgT+Lh8ByGQBH6KbdWabqamLzTRWxePFoYuxa7yXgmj9A==",
|
||||
"salt": "uW4fEI1+IOzj7ED9mVor+yTSJFd68DGlGOeLgJELYsTU5ikhG/83/+jGd4KKAaQdSrsfzrdOhAMftTSih5Ux6w==",
|
||||
}
|
||||
|
||||
When the repository is opened by restic, the user is prompted for the
|
||||
repository password. This is then used with `scrypt`, a key derivation function
|
||||
(KDF), and the supplied parameters (`N`, `r`, `p` and `salt`) to derive 64 key
|
||||
bytes. The first 32 bytes are used as the encryption key (for AES-256) and the
|
||||
last 32 bytes are used as the message authentication key (for Poly1305-AES).
|
||||
These last 32 bytes are divided into a 16 byte AES key `k` followed by 16 bytes
|
||||
of secret key `r`. The key `r` is then masked for use with Poly1305 (see the
|
||||
paper for details).
|
||||
|
||||
Those message authentication keys (`k` and `r`) are used to compute a MAC over
|
||||
the bytes contained in the JSON field `data` (after removing the Base64
|
||||
encoding and not including the last 32 byte). If the password is incorrect or
|
||||
the key file has been tampered with, the computed MAC will not match the last
|
||||
16 bytes of the data, and restic exits with an error. Otherwise, the data is
|
||||
decrypted with the encryption key derived from `scrypt`. This yields a JSON
|
||||
document which contains the master encryption and message authentication keys
|
||||
for this repository (encoded in Base64). The command `restic cat masterkey` can
|
||||
be used as follows to decrypt and pretty-print the master key:
|
||||
|
||||
$ restic -r /tmp/restic-repo cat masterkey
|
||||
{
|
||||
"mac": {
|
||||
"k": "evFWd9wWlndL9jc501268g==",
|
||||
"r": "E9eEDnSJZgqwTOkDtOp+Dw=="
|
||||
},
|
||||
"encrypt": "UQCqa0lKZ94PygPxMRqkePTZnHRYh1k1pX2k2lM2v3Q=",
|
||||
}
|
||||
|
||||
All data in the repository is encrypted and authenticated with these master keys.
|
||||
For encryption, the AES-256 algorithm in Counter mode is used. For message
|
||||
authentication, Poly1305-AES is used as described above.
|
||||
|
||||
A repository can have several different passwords, with a key file for each.
|
||||
This way, the password can be changed without having to re-encrypt all data.
|
||||
|
||||
Snapshots
|
||||
---------
|
||||
|
||||
A snapshots represents a directory with all files and sub-directories at a
|
||||
given point in time. For each backup that is made, a new snapshot is created. A
|
||||
snapshot is a JSON document that is stored in an encrypted file below the
|
||||
directory `snapshots` in the repository. The filename is the storage ID. This
|
||||
string is unique and used within restic to uniquely identify a snapshot.
|
||||
|
||||
The command `restic cat snapshot` can be used as follows to decrypt and
|
||||
pretty-print the contents of a snapshot file:
|
||||
|
||||
$ restic -r /tmp/restic-repo cat snapshot 22a5af1b
|
||||
enter password for repository:
|
||||
{
|
||||
"time": "2015-01-02T18:10:50.895208559+01:00",
|
||||
"tree": "2da81727b6585232894cfbb8f8bdab8d1eccd3d8f7c92bc934d62e62e618ffdf",
|
||||
"dir": "/tmp/testdata",
|
||||
"hostname": "kasimir",
|
||||
"username": "fd0",
|
||||
"uid": 1000,
|
||||
"gid": 100
|
||||
}
|
||||
|
||||
Here it can be seen that this snapshot represents the contents of the directory
|
||||
`/tmp/testdata`. The most important field is `tree`.
|
||||
|
||||
All content within a restic repository is referenced according to its SHA-256
|
||||
hash. Before saving, each file is split into variable sized Blobs of data. The
|
||||
SHA-256 hashes of all Blobs are saved in an ordered list which then represents
|
||||
the content of the file.
|
||||
|
||||
In order to relate these plaintext hashes to the actual location within a Pack
|
||||
file , an index is used. If the index is not available, the header of all data
|
||||
Blobs can be read.
|
||||
|
||||
Trees and Data
|
||||
--------------
|
||||
|
||||
A snapshot references a tree by the SHA-256 hash of the JSON string
|
||||
representation of its contents. Trees and data are saved in pack files in a
|
||||
subdirectory of the directory `data`.
|
||||
|
||||
The command `restic cat tree` can be used to inspect the tree referenced above:
|
||||
|
||||
$ restic -r /tmp/restic-repo cat tree b8138ab08a4722596ac89c917827358da4672eac68e3c03a8115b88dbf4bfb59
|
||||
enter password for repository:
|
||||
{
|
||||
"nodes": [
|
||||
{
|
||||
"name": "testdata",
|
||||
"type": "dir",
|
||||
"mode": 493,
|
||||
"mtime": "2014-12-22T14:47:59.912418701+01:00",
|
||||
"atime": "2014-12-06T17:49:21.748468803+01:00",
|
||||
"ctime": "2014-12-22T14:47:59.912418701+01:00",
|
||||
"uid": 1000,
|
||||
"gid": 100,
|
||||
"user": "fd0",
|
||||
"inode": 409704562,
|
||||
"content": null,
|
||||
"subtree": "b26e315b0988ddcd1cee64c351d13a100fedbc9fdbb144a67d1b765ab280b4dc"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
A tree contains a list of entries (in the field `nodes`) which contain meta
|
||||
data like a name and timestamps. When the entry references a directory, the
|
||||
field `subtree` contains the plain text ID of another tree object.
|
||||
|
||||
When the command `restic cat tree` is used, the storage hash is needed to print
|
||||
a tree. The tree referenced above can be dumped as follows:
|
||||
|
||||
$ restic -r /tmp/restic-repo cat tree 8b238c8811cc362693e91a857460c78d3acf7d9edb2f111048691976803cf16e
|
||||
enter password for repository:
|
||||
{
|
||||
"nodes": [
|
||||
{
|
||||
"name": "testfile",
|
||||
"type": "file",
|
||||
"mode": 420,
|
||||
"mtime": "2014-12-06T17:50:23.34513538+01:00",
|
||||
"atime": "2014-12-06T17:50:23.338468713+01:00",
|
||||
"ctime": "2014-12-06T17:50:23.34513538+01:00",
|
||||
"uid": 1000,
|
||||
"gid": 100,
|
||||
"user": "fd0",
|
||||
"inode": 416863351,
|
||||
"size": 1234,
|
||||
"links": 1,
|
||||
"content": [
|
||||
"50f77b3b4291e8411a027b9f9b9e64658181cc676ce6ba9958b95f268cb1109d"
|
||||
]
|
||||
},
|
||||
[...]
|
||||
]
|
||||
}
|
||||
|
||||
This tree contains a file entry. This time, the `subtree` field is not present
|
||||
and the `content` field contains a list with one plain text SHA-256 hash.
|
||||
|
||||
The command `restic cat data` can be used to extract and decrypt data given a
|
||||
plaintext ID, e.g. for the data mentioned above:
|
||||
|
||||
$ restic -r /tmp/restic-repo cat blob 50f77b3b4291e8411a027b9f9b9e64658181cc676ce6ba9958b95f268cb1109d | sha256sum
|
||||
enter password for repository:
|
||||
50f77b3b4291e8411a027b9f9b9e64658181cc676ce6ba9958b95f268cb1109d -
|
||||
|
||||
As can be seen from the output of the program `sha256sum`, the hash matches the
|
||||
plaintext hash from the map included in the tree above, so the correct data has
|
||||
been returned.
|
||||
|
||||
Locks
|
||||
-----
|
||||
|
||||
The restic repository structure is designed in a way that allows parallel
|
||||
access of multiple instance of restic and even parallel writes. However, there
|
||||
are some functions that work more efficient or even require exclusive access of
|
||||
the repository. In order to implement these functions, restic processes are
|
||||
required to create a lock on the repository before doing anything.
|
||||
|
||||
Locks come in two types: Exclusive and non-exclusive locks. At most one
|
||||
process can have an exclusive lock on the repository, and during that time
|
||||
there must not be any other locks (exclusive and non-exclusive). There may be
|
||||
multiple non-exclusive locks in parallel.
|
||||
|
||||
A lock is a file in the subdir `locks` whose filename is the storage ID of
|
||||
the contents. It is encrypted and authenticated the same way as other files
|
||||
in the repository and contains the following JSON structure:
|
||||
|
||||
{
|
||||
"time": "2015-06-27T12:18:51.759239612+02:00",
|
||||
"exclusive": false,
|
||||
"hostname": "kasimir",
|
||||
"username": "fd0",
|
||||
"pid": 13607,
|
||||
"uid": 1000,
|
||||
"gid": 100
|
||||
}
|
||||
|
||||
The field `exclusive` defines the type of lock. When a new lock is to be
|
||||
created, restic checks all locks in the repository. When a lock is found, it
|
||||
is tested if the lock is stale, which is the case for locks with timestamps
|
||||
older than 30 minutes. If the lock was created on the same machine, even for
|
||||
younger locks it is tested whether the process is still alive by sending a
|
||||
signal to it. If that fails, restic assumes that the process is dead and
|
||||
considers the lock to be stale.
|
||||
|
||||
When a new lock is to be created and no other conflicting locks are
|
||||
detected, restic creates a new lock, waits, and checks if other locks
|
||||
appeared in the repository. Depending on the type of the other locks and the
|
||||
lock to be created, restic either continues or fails.
|
||||
|
||||
Backups and Deduplication
|
||||
=========================
|
||||
|
||||
For creating a backup, restic scans the source directory for all files,
|
||||
sub-directories and other entries. The data from each file is split into
|
||||
variable length Blobs cut at offsets defined by a sliding window of 64 byte.
|
||||
The implementation uses Rabin Fingerprints for implementing this Content
|
||||
Defined Chunking (CDC). An irreducible polynomial is selected at random and
|
||||
saved in the file `config` when a repository is initialized, so that watermark
|
||||
attacks are much harder.
|
||||
|
||||
Files smaller than 512 KiB are not split, Blobs are of 512 KiB to 8 MiB in
|
||||
size. The implementation aims for 1 MiB Blob size on average.
|
||||
|
||||
For modified files, only modified Blobs have to be saved in a subsequent
|
||||
backup. This even works if bytes are inserted or removed at arbitrary positions
|
||||
within the file.
|
||||
|
||||
Threat Model
|
||||
============
|
||||
|
||||
The design goals for restic include being able to securely store backups in a
|
||||
location that is not completely trusted, e.g. a shared system where others can
|
||||
potentially access the files or (in the case of the system administrator) even
|
||||
modify or delete them.
|
||||
|
||||
General assumptions:
|
||||
|
||||
* The host system a backup is created on is trusted. This is the most basic
|
||||
requirement, and essential for creating trustworthy backups.
|
||||
|
||||
The restic backup program guarantees the following:
|
||||
|
||||
* Accessing the unencrypted content of stored files and metadata should not
|
||||
be possible without a password for the repository. Everything except the
|
||||
metadata included for informational purposes in the key files is encrypted and
|
||||
authenticated.
|
||||
|
||||
* Modifications (intentional or unintentional) can be detected automatically
|
||||
on several layers:
|
||||
|
||||
1. For all accesses of data stored in the repository it is checked whether
|
||||
the cryptographic hash of the contents matches the storage ID (the
|
||||
file's name). This way, modifications (bad RAM, broken harddisk) can be
|
||||
detected easily.
|
||||
|
||||
2. Before decrypting any data, the MAC on the encrypted data is
|
||||
checked. If there has been a modification, the MAC check will
|
||||
fail. This step happens even before the data is decrypted, so data that
|
||||
has been tampered with is not decrypted at all.
|
||||
|
||||
However, the restic backup program is not designed to protect against attackers
|
||||
deleting files at the storage location. There is nothing that can be done about
|
||||
this. If this needs to be guaranteed, get a secure location without any access
|
||||
from third parties. If you assume that attackers have write access to your
|
||||
files at the storage location, attackers are able to figure out (e.g. based on
|
||||
the timestamps of the stored files) which files belong to what snapshot. When
|
||||
only these files are deleted, the particular snapshot vanished and all
|
||||
snapshots depending on data that has been added in the snapshot cannot be
|
||||
restored completely. Restic is not designed to detect this attack.
|
||||
@@ -1,38 +0,0 @@
|
||||
# Maintainer: Florian Daniel <fd@noxa.de>
|
||||
# Contributor: Eldar Tsraev <elts@culab.org>
|
||||
# Contributor: Andreas Guth <andreas.guth@rwth-aachen.de>
|
||||
# Contributor: Alexander Neumann <alexander@bumpern.de>
|
||||
options=(!strip)
|
||||
pkgname=restic-git
|
||||
pkgver=v0.1.0.r172.g1f1b8e1
|
||||
pkgrel=1
|
||||
pkgdesc="restic is a program that does backups right."
|
||||
arch=('i686' 'x86_64')
|
||||
url="https://github.com/restic/restic"
|
||||
license=('BSD')
|
||||
depends=('glibc')
|
||||
makedepends=('git' 'go>=1.3')
|
||||
provides=('restic')
|
||||
conflicts=('restic')
|
||||
source=("${pkgname}::git+https://github.com/restic/restic")
|
||||
md5sums=('SKIP')
|
||||
|
||||
importpath='github.com/restic/restic'
|
||||
|
||||
pkgver() {
|
||||
cd "$pkgname"
|
||||
git describe --long | sed 's/\([^-]*-g\)/r\1/;s/-/./g'
|
||||
}
|
||||
|
||||
build() {
|
||||
cd "$pkgname"
|
||||
go run build.go
|
||||
}
|
||||
|
||||
package() {
|
||||
install -Dm755 "$pkgname/restic" "$pkgdir/usr/bin/restic"
|
||||
install -Dm644 "$pkgname/LICENSE" "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
|
||||
install -Dm644 "$pkgname/README.md" "$pkgdir/usr/share/doc/$pkgname/README"
|
||||
}
|
||||
|
||||
# vim:set ts=2 sw=2 et:
|
||||
Binary file not shown.
@@ -1,93 +0,0 @@
|
||||
Copyright (c) 2011, Eduardo Tunni (http://www.tipo.net.ar),
|
||||
with Reserved Font Name "Lemon"
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 15 KiB |
@@ -1,120 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="103"
|
||||
height="103"
|
||||
id="svg3535"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.5 r10040"
|
||||
sodipodi:docname="logo.svg"
|
||||
inkscape:export-filename="logo.png"
|
||||
inkscape:export-xdpi="349.51456"
|
||||
inkscape:export-ydpi="349.51456">
|
||||
<defs
|
||||
id="defs3537">
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath140">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 0,595.28 841.89,0 L 841.89,0 0,0 0,595.28 z"
|
||||
id="path142" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="7.919596"
|
||||
inkscape:cx="53.009547"
|
||||
inkscape:cy="51.204256"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="g3620"
|
||||
showgrid="false"
|
||||
width="90px"
|
||||
inkscape:window-width="1596"
|
||||
inkscape:window-height="1143"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="36"
|
||||
inkscape:window-maximized="0"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<metadata
|
||||
id="metadata3540">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(5.2850168,-944.1263)">
|
||||
<g
|
||||
id="g3620"
|
||||
transform="translate(3.2448674e-6,-12.49996)">
|
||||
<g
|
||||
transform="translate(-560.16052,929.29226)"
|
||||
id="g3631">
|
||||
<g
|
||||
id="Layer_4">
|
||||
<path
|
||||
d="m 657.875,116.143 c 0,1.887 -1.53,3.417 -3.417,3.417 h -96.165 c -1.887,0 -3.417,-1.53 -3.417,-3.417 V 41.525 c 0,-1.887 1.53,-3.417 3.417,-3.417 h 96.165 c 1.887,0 3.417,1.53 3.417,3.417 v 74.618 z"
|
||||
id="path3185"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#0000b4" />
|
||||
</g>
|
||||
<path
|
||||
id="path146-4_1_"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 569.292,68.376 15.938,-17.188 43.125,3.438 17.5,13.75 -39.479,36.875 -37.084,-36.875 z"
|
||||
style="fill:#ddb100" />
|
||||
<path
|
||||
id="path150-0_1_"
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 606.375,100.955 c -4.682,-0.095 -32.359,-30.489 -32.299,-32.55 0.059,-2.06 10.916,-10.29 13.612,-11.487 2.696,-1.198 9.148,-1.25 9.148,-1.25 h 19.079 c -2.561,0 7.561,0.069 10.735,1.9 3.175,1.831 13.282,8.836 13.275,10.838 -0.009,2.001 -28.868,32.644 -33.55,32.549 M 630.33,49.73 c -2.445,-0.885 -12.566,-1.25 -12.566,-1.25 h -22.776 c 0,0 -9.751,0.416 -12.568,1.25 -2.816,0.834 -20.211,16.823 -20.42,18.75 -0.209,1.927 39.444,42.709 44.375,42.709 4.931,0 44.271,-40.261 44.375,-42.709 0.104,-2.448 -17.976,-17.865 -20.42,-18.75"
|
||||
style="fill:#cc2a2a" />
|
||||
<text
|
||||
y="87.125298"
|
||||
x="592.3125"
|
||||
font-size="37.5"
|
||||
id="text3189"
|
||||
style="font-size:37.5px;fill:#cc2a2a;font-family:Lemon-Regular">
|
||||
<tspan
|
||||
id="tspan3619"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Lemon;-inkscape-font-specification:Lemon">R</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot3675"
|
||||
style="font-size:8px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
|
||||
transform="translate(-3.2448674e-6,974.8622)"><flowRegion
|
||||
id="flowRegion3677"><rect
|
||||
id="rect3679"
|
||||
width="127.27922"
|
||||
height="112.63201"
|
||||
x="-131.82491"
|
||||
y="-8.2373343" /></flowRegion><flowPara
|
||||
id="flowPara3681"></flowPara></flowRoot> </g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 4.5 KiB |
@@ -1,884 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="210mm"
|
||||
height="297mm"
|
||||
id="svg4198"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.5 r10040"
|
||||
sodipodi:docname="structure.svg">
|
||||
<defs
|
||||
id="defs3">
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Mend"
|
||||
orient="auto"
|
||||
refY="0.0"
|
||||
refX="0.0"
|
||||
id="Arrow2Mend"
|
||||
style="overflow:visible;">
|
||||
<path
|
||||
id="path5383"
|
||||
style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
|
||||
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
|
||||
transform="scale(0.6) rotate(180) translate(0,0)" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Lend"
|
||||
orient="auto"
|
||||
refY="0.0"
|
||||
refX="0.0"
|
||||
id="Arrow2Lend"
|
||||
style="overflow:visible;">
|
||||
<path
|
||||
id="path5377"
|
||||
style="fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
|
||||
d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
|
||||
transform="scale(1.1) rotate(180) translate(1,0)" />
|
||||
</marker>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
inkscape:document-units="mm"
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.3810888"
|
||||
inkscape:cx="278.75145"
|
||||
inkscape:cy="788.04056"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
units="mm"
|
||||
inkscape:window-width="1362"
|
||||
inkscape:window-height="729"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="18"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:snap-grids="false"
|
||||
inkscape:snap-to-guides="true">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid4204"
|
||||
empspacing="10"
|
||||
visible="true"
|
||||
enabled="true"
|
||||
snapvisiblegridlinesonly="true"
|
||||
dotted="false"
|
||||
spacingx="1mm"
|
||||
spacingy="1mm"
|
||||
units="mm" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<rect
|
||||
rx="3.5432446"
|
||||
ry="3.5432444"
|
||||
y="125.31244"
|
||||
x="337.60443"
|
||||
height="8.6873627"
|
||||
width="31.788435"
|
||||
id="rect5239-1"
|
||||
style="fill:#ccff99;fill-opacity:1;stroke:#000000;stroke-width:0.99921262;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none" />
|
||||
<rect
|
||||
rx="3.5432446"
|
||||
ry="3.5432444"
|
||||
y="450.72906"
|
||||
x="266.07547"
|
||||
height="8.6873627"
|
||||
width="31.788435"
|
||||
id="rect5342"
|
||||
style="fill:#fdd99b;fill-opacity:1;stroke:#000000;stroke-width:0.99921262;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none" />
|
||||
<rect
|
||||
style="fill:#986601;fill-opacity:1;stroke:#000000;stroke-width:0.99921262;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none"
|
||||
id="rect5344"
|
||||
width="31.788435"
|
||||
height="8.6873627"
|
||||
x="270.97147"
|
||||
y="460.72906"
|
||||
ry="3.5432444"
|
||||
rx="3.5432446" />
|
||||
<rect
|
||||
style="fill:#ccff99;fill-opacity:1;stroke:#000000;stroke-width:0.99921262;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none"
|
||||
id="rect5324"
|
||||
width="31.788435"
|
||||
height="8.6873627"
|
||||
x="270.67154"
|
||||
y="430.52609"
|
||||
ry="3.5432444"
|
||||
rx="3.5432446" />
|
||||
<rect
|
||||
rx="3.5432446"
|
||||
ry="3.5432444"
|
||||
y="420.34509"
|
||||
x="265.94748"
|
||||
height="8.6873627"
|
||||
width="31.788435"
|
||||
id="rect5326"
|
||||
style="fill:#339900;fill-opacity:1;stroke:#000000;stroke-width:0.99921262;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none" />
|
||||
<rect
|
||||
style="fill:#fdd99b;fill-opacity:1;stroke:#000000;stroke-width:0.99921262;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none"
|
||||
id="rect5303"
|
||||
width="31.788435"
|
||||
height="8.6873627"
|
||||
x="265.94748"
|
||||
y="390.34506"
|
||||
ry="3.5432444"
|
||||
rx="3.5432446" />
|
||||
<rect
|
||||
rx="3.5432446"
|
||||
ry="3.5432444"
|
||||
y="400.34506"
|
||||
x="270.84348"
|
||||
height="8.6873627"
|
||||
width="31.788435"
|
||||
id="rect5301"
|
||||
style="fill:#986601;fill-opacity:1;stroke:#000000;stroke-width:0.99921262;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="88.58268"
|
||||
y="184.25194"
|
||||
id="text3797"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3799"
|
||||
x="88.58268"
|
||||
y="184.25194"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace">data/</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="88.58268"
|
||||
y="77.952728"
|
||||
id="text3801"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3803"
|
||||
x="88.58268"
|
||||
y="77.952728"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace">keys/</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="88.58268"
|
||||
y="113.3858"
|
||||
id="text3809"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3811"
|
||||
x="88.58268"
|
||||
y="113.3858"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace">snapshots/</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="88.58268"
|
||||
y="276.37793"
|
||||
id="text3813"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3815"
|
||||
x="88.58268"
|
||||
y="276.37793"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace">trees/</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="88.58268"
|
||||
y="148.81886"
|
||||
id="text3817"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3819"
|
||||
x="88.58268"
|
||||
y="148.81886"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace">maps/</tspan></text>
|
||||
<rect
|
||||
rx="3.5432444"
|
||||
ry="3.5432444"
|
||||
y="120.47243"
|
||||
x="99.212608"
|
||||
height="14.17323"
|
||||
width="42.519684"
|
||||
id="rect3840"
|
||||
style="fill:#f0a513;fill-opacity:1;stroke:#000000;stroke-opacity:0" />
|
||||
<text
|
||||
sodipodi:linespacing="125%"
|
||||
id="text3842"
|
||||
y="131.10234"
|
||||
x="102.75592"
|
||||
style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace"
|
||||
y="131.10234"
|
||||
x="102.75592"
|
||||
id="tspan3844"
|
||||
sodipodi:role="line">6e4065</tspan></text>
|
||||
<rect
|
||||
style="fill:#aaccee;fill-opacity:1;stroke:#000000;stroke-opacity:0"
|
||||
id="rect3864"
|
||||
width="42.519684"
|
||||
height="14.17323"
|
||||
x="99.212608"
|
||||
y="155.9055"
|
||||
ry="3.5432444"
|
||||
rx="3.5432444" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="102.75592"
|
||||
y="166.53545"
|
||||
id="text3866"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3868"
|
||||
x="102.75592"
|
||||
y="166.53545"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace">b35a97</tspan></text>
|
||||
<rect
|
||||
rx="3.5432444"
|
||||
ry="3.5432444"
|
||||
y="201.96844"
|
||||
x="120.47243"
|
||||
height="14.17323"
|
||||
width="42.519684"
|
||||
id="rect3880"
|
||||
style="fill:#986601;fill-opacity:1;stroke:#000000;stroke-opacity:0" />
|
||||
<text
|
||||
sodipodi:linespacing="125%"
|
||||
id="text3882"
|
||||
y="212.59839"
|
||||
x="124.01575"
|
||||
style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace"
|
||||
y="212.59839"
|
||||
x="124.01575"
|
||||
id="tspan3884"
|
||||
sodipodi:role="line">1bde93</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="109.84253"
|
||||
y="198.42513"
|
||||
id="text3964"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3966"
|
||||
x="109.84253"
|
||||
y="198.42513"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace">1b/</tspan></text>
|
||||
<rect
|
||||
style="fill:#986601;fill-opacity:1;stroke:#000000;stroke-opacity:0"
|
||||
id="rect3975"
|
||||
width="42.519684"
|
||||
height="14.17323"
|
||||
x="120.47243"
|
||||
y="230.31494"
|
||||
ry="3.5432444"
|
||||
rx="3.5432444" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="124.01574"
|
||||
y="240.94489"
|
||||
id="text3977"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3979"
|
||||
x="124.01574"
|
||||
y="240.94489"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace">47808f</tspan></text>
|
||||
<text
|
||||
sodipodi:linespacing="125%"
|
||||
id="text3981"
|
||||
y="226.77159"
|
||||
x="109.84253"
|
||||
style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
xml:space="preserve"><tspan
|
||||
y="226.77159"
|
||||
x="109.84253"
|
||||
id="tspan3983"
|
||||
sodipodi:role="line"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace">47/</tspan></text>
|
||||
<rect
|
||||
rx="3.5432444"
|
||||
ry="3.5432444"
|
||||
y="248.03148"
|
||||
x="120.47245"
|
||||
height="14.17323"
|
||||
width="42.519684"
|
||||
id="rect3987"
|
||||
style="fill:#986601;fill-opacity:1;stroke:#000000;stroke-opacity:0" />
|
||||
<text
|
||||
sodipodi:linespacing="125%"
|
||||
id="text3989"
|
||||
y="258.66144"
|
||||
x="124.01575"
|
||||
style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace"
|
||||
y="258.66144"
|
||||
x="124.01575"
|
||||
id="tspan3991"
|
||||
sodipodi:role="line">47853a</tspan></text>
|
||||
<rect
|
||||
style="fill:#ccff99;fill-opacity:1;stroke:#000000;stroke-opacity:0"
|
||||
id="rect4039"
|
||||
width="42.519684"
|
||||
height="14.17323"
|
||||
x="120.47243"
|
||||
y="294.09445"
|
||||
ry="3.5432444"
|
||||
rx="3.5432444" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="124.01575"
|
||||
y="304.7244"
|
||||
id="text4041"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4043"
|
||||
x="124.01575"
|
||||
y="304.7244"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace">967de5</tspan></text>
|
||||
<text
|
||||
sodipodi:linespacing="125%"
|
||||
id="text4045"
|
||||
y="290.55115"
|
||||
x="109.84253"
|
||||
style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace"
|
||||
y="290.55115"
|
||||
x="109.84253"
|
||||
id="tspan4047"
|
||||
sodipodi:role="line">9f/</tspan></text>
|
||||
<rect
|
||||
rx="3.5432444"
|
||||
ry="3.5432444"
|
||||
y="322.44095"
|
||||
x="120.47243"
|
||||
height="14.17323"
|
||||
width="42.519684"
|
||||
id="rect4051"
|
||||
style="fill:#ccff99;fill-opacity:1;stroke:#000000;stroke-opacity:0" />
|
||||
<text
|
||||
sodipodi:linespacing="125%"
|
||||
id="text4053"
|
||||
y="333.07089"
|
||||
x="124.01574"
|
||||
style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace"
|
||||
y="333.07089"
|
||||
x="124.01574"
|
||||
id="tspan4055"
|
||||
sodipodi:role="line">a0c69f</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="109.84253"
|
||||
y="318.89764"
|
||||
id="text4057"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace"
|
||||
sodipodi:role="line"
|
||||
id="tspan4059"
|
||||
x="109.84253"
|
||||
y="318.89764">a0/</tspan></text>
|
||||
<rect
|
||||
style="fill:#ccff99;fill-opacity:1;stroke:#000000;stroke-opacity:0"
|
||||
id="rect4063"
|
||||
width="42.519684"
|
||||
height="14.17323"
|
||||
x="120.47243"
|
||||
y="350.78732"
|
||||
ry="3.5432444"
|
||||
rx="3.5432444" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="124.01575"
|
||||
y="361.41727"
|
||||
id="text4065"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4067"
|
||||
x="124.01575"
|
||||
y="361.41727"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace">beb505</tspan></text>
|
||||
<text
|
||||
sodipodi:linespacing="125%"
|
||||
id="text4069"
|
||||
y="347.24402"
|
||||
x="109.84253"
|
||||
style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
xml:space="preserve"><tspan
|
||||
y="347.24402"
|
||||
x="109.84253"
|
||||
id="tspan4071"
|
||||
sodipodi:role="line"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace">be/</tspan></text>
|
||||
<g
|
||||
id="g4085"
|
||||
transform="translate(53.149608,-372.04724)">
|
||||
<path
|
||||
transform="translate(0,308.26769)"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4073"
|
||||
d="m 24.80315,131.10236 0,7.08661 7.086614,0"
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
transform="translate(0,308.26769)"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4075"
|
||||
d="m 24.80315,138.18897 0,35.43307 7.086614,0"
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
transform="translate(0,308.26769)"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4079"
|
||||
d="m 24.80315,173.62204 c 0.262467,0.51087 0.262467,0.51087 0,0 l 0,35.43307 7.086614,0"
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
transform="translate(0,308.26769)"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4081"
|
||||
d="m 24.80315,209.05511 0,35.43307 7.086614,0"
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
transform="translate(0,308.26769)"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4083"
|
||||
d="m 24.80315,244.48818 0,92.12599 7.086614,0"
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 99.212598,187.79524 0,7.08661 7.086612,0"
|
||||
id="path4116"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 99.212598,194.88186 0,28.34646 7.086612,0"
|
||||
id="path4118"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 99.212597,279.92123 0,7.08662 7.086613,0"
|
||||
id="path4120"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 99.212597,287.00785 0,28.34646 7.086613,0"
|
||||
id="path4122"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 99.212597,315.35431 0,28.34645 7.086613,0"
|
||||
id="path4126"
|
||||
inkscape:connector-curvature="0" />
|
||||
<text
|
||||
sodipodi:linespacing="125%"
|
||||
id="text4128"
|
||||
y="375.59052"
|
||||
x="88.58268"
|
||||
style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace"
|
||||
y="375.59052"
|
||||
x="88.58268"
|
||||
id="tspan4130"
|
||||
sodipodi:role="line">tmp/</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="88.58268"
|
||||
y="389.76376"
|
||||
id="text4132"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4134"
|
||||
x="88.58268"
|
||||
y="389.76376"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace">locks/</tspan></text>
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 77.952758,272.83462 0,99.2126 7.08661,0"
|
||||
id="path4140"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 77.952758,372.04722 0,14.17322 7.08661,0"
|
||||
id="path4144"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 77.952758,386.22044 0,14.17323 7.08661,0"
|
||||
id="path4146"
|
||||
inkscape:connector-curvature="0" />
|
||||
<text
|
||||
sodipodi:linespacing="125%"
|
||||
id="text4156"
|
||||
y="403.93698"
|
||||
x="88.58268"
|
||||
style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace"
|
||||
y="403.93698"
|
||||
x="88.58268"
|
||||
id="tspan4158"
|
||||
sodipodi:role="line">version</tspan></text>
|
||||
<g
|
||||
id="g4485"
|
||||
transform="translate(-17.71652,7.0866626)">
|
||||
<rect
|
||||
style="fill:#ffeeaa;fill-opacity:1;stroke:none"
|
||||
id="rect7169"
|
||||
width="42.519684"
|
||||
height="14.17323"
|
||||
x="116.92913"
|
||||
y="77.95269"
|
||||
ry="3.5432444"
|
||||
rx="3.5432444" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="120.47243"
|
||||
y="88.582603"
|
||||
id="text7171"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan7173"
|
||||
x="120.47243"
|
||||
y="88.582603"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace">c913e0</tspan></text>
|
||||
</g>
|
||||
<rect
|
||||
style="fill:#339900;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-opacity:0"
|
||||
id="rect4607"
|
||||
width="31.404444"
|
||||
height="8.6214886"
|
||||
x="276.1517"
|
||||
y="124.92723"
|
||||
ry="3.5432446"
|
||||
rx="3.5432446" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Monaco;-inkscape-font-specification:Monaco"
|
||||
x="219.68503"
|
||||
y="92.125961"
|
||||
id="text4528"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68503"
|
||||
y="92.125961"
|
||||
id="tspan4552"
|
||||
style="font-size:8px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace">{time: 2015-01-01T13:12:13.40,</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68503"
|
||||
y="102.12596"
|
||||
id="tspan4538"
|
||||
style="font-size:8px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace"> dir: /data,</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68503"
|
||||
y="112.12596"
|
||||
id="tspan4540"
|
||||
style="font-size:8px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace"> hostname: kasimir,</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68503"
|
||||
y="122.12596"
|
||||
id="tspan4542"
|
||||
style="font-size:8px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace"> username: hans,</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68503"
|
||||
y="132.12596"
|
||||
id="tspan4546"
|
||||
style="font-size:8px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace"> tree: {id: 486f6c, sid: 967de5},</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68503"
|
||||
y="142.12596"
|
||||
id="tspan4556"
|
||||
style="font-size:8px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace"> [...]</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68503"
|
||||
y="152.12596"
|
||||
id="tspan4560"
|
||||
style="font-size:8px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace">}</tspan></text>
|
||||
<rect
|
||||
style="fill:#f0a513;fill-opacity:1;stroke:#000000;stroke-width:0.99999988;stroke-opacity:0"
|
||||
id="rect4519"
|
||||
width="177.16533"
|
||||
height="21.259836"
|
||||
x="212.59842"
|
||||
y="60.236198"
|
||||
ry="3.5432441"
|
||||
rx="3.5432444" />
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:1.77165354;stroke-miterlimit:2;stroke-opacity:1;stroke-dasharray:none"
|
||||
id="rect4511"
|
||||
width="177.16534"
|
||||
height="106.29922"
|
||||
x="212.59839"
|
||||
y="60.236198"
|
||||
rx="3.5432441"
|
||||
ry="3.5432444" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="219.68501"
|
||||
y="74.409424"
|
||||
id="text4513"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4515"
|
||||
x="219.68501"
|
||||
y="74.409424">snapshot</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:10px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="272.83466"
|
||||
y="74.409424"
|
||||
id="text4521"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4523"
|
||||
x="272.83466"
|
||||
y="74.409424"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Monospace;-inkscape-font-specification:Monospace">6e4065</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:8px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
|
||||
x="432.28345"
|
||||
y="92.125946"
|
||||
id="text5187"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
x="432.28345"
|
||||
y="92.125946"
|
||||
id="tspan5216" /></text>
|
||||
<rect
|
||||
style="fill:#339900;fill-opacity:1;stroke:#000000;stroke-width:0.99921262;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none"
|
||||
id="rect5328"
|
||||
width="31.788435"
|
||||
height="8.6873627"
|
||||
x="290.65253"
|
||||
y="290.55115"
|
||||
ry="3.5432444"
|
||||
rx="3.5432446" />
|
||||
<rect
|
||||
style="fill:#fdd99b;fill-opacity:1;stroke:#000000;stroke-width:0.99921262;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none"
|
||||
id="rect5316"
|
||||
width="31.788435"
|
||||
height="8.6873627"
|
||||
x="333.17938"
|
||||
y="350.39966"
|
||||
ry="3.5432444"
|
||||
rx="3.5432446" />
|
||||
<rect
|
||||
rx="3.5432446"
|
||||
ry="3.5432444"
|
||||
y="350.5314"
|
||||
x="294.73447"
|
||||
height="8.6873627"
|
||||
width="31.788435"
|
||||
id="rect5314"
|
||||
style="fill:#fdd99b;fill-opacity:1;stroke:#000000;stroke-width:0.99921262;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none" />
|
||||
<rect
|
||||
rx="3.5432439"
|
||||
ry="3.5432444"
|
||||
y="201.96848"
|
||||
x="212.5984"
|
||||
height="21.259878"
|
||||
width="212.59843"
|
||||
id="rect5259"
|
||||
style="fill:#339900;fill-opacity:1;stroke:#000000;stroke-width:0.99921262;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none" />
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:1.77165353;stroke-miterlimit:2;stroke-opacity:1;stroke-dasharray:none"
|
||||
id="rect5253"
|
||||
width="212.59843"
|
||||
height="294.09451"
|
||||
x="212.59842"
|
||||
y="201.96849"
|
||||
rx="3.5432439"
|
||||
ry="3.5432451" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
|
||||
x="219.68504"
|
||||
y="216.14169"
|
||||
id="text5255"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5257"
|
||||
x="219.68504"
|
||||
y="216.14169"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Sans;-inkscape-font-specification:Sans">tree</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
|
||||
x="248.03149"
|
||||
y="216.14169"
|
||||
id="text5261"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan5263"
|
||||
x="248.03149"
|
||||
y="216.14169">486f6c</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:8px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
|
||||
x="219.68504"
|
||||
y="237.40155"
|
||||
id="text5265"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68504"
|
||||
y="237.40155"
|
||||
id="tspan5269">{ nodes: [</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68504"
|
||||
y="247.40155"
|
||||
id="tspan3211"> {</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68504"
|
||||
y="257.40155"
|
||||
id="tspan3241"> name: testdir1,</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68504"
|
||||
y="267.40155"
|
||||
id="tspan5271"> type: dir,</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68504"
|
||||
y="277.40155"
|
||||
id="tspan5273"> mode: 0755,</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68504"
|
||||
y="287.40155"
|
||||
id="tspan5275"> user: hans,</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68504"
|
||||
y="297.40155"
|
||||
id="tspan5281"> subtree: a8838f}</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68504"
|
||||
y="307.40155"
|
||||
id="tspan5283"> },{</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68504"
|
||||
y="317.40155"
|
||||
id="tspan3239"> name: testfile,</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68504"
|
||||
y="327.40155"
|
||||
id="tspan5285"> type: file,</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68504"
|
||||
y="337.40155"
|
||||
id="tspan5287"> mode: 0640,</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68504"
|
||||
y="347.40155"
|
||||
id="tspan5289"> user: hans,</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68504"
|
||||
y="357.40155"
|
||||
id="tspan5291"> content: [50f77b, ea0cc4, [...]]</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68504"
|
||||
y="367.40155"
|
||||
id="tspan3251"> }],</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68504"
|
||||
y="377.40155"
|
||||
id="tspan3255"> map:[</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68504"
|
||||
y="387.40155"
|
||||
id="tspan3496"> {</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68504"
|
||||
y="397.40155"
|
||||
id="tspan3522"> id: 50f77b,</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68504"
|
||||
y="407.40155"
|
||||
id="tspan3498"> sid: 1bde93</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68504"
|
||||
y="417.40155"
|
||||
id="tspan3500"> },{</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68504"
|
||||
y="427.40155"
|
||||
id="tspan3502"> id: a8838f,</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68504"
|
||||
y="437.40155"
|
||||
id="tspan3504"> sid: a0c69f</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68504"
|
||||
y="447.40155"
|
||||
id="tspan3506"> },{</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68504"
|
||||
y="457.40155"
|
||||
id="tspan3508"> id: ea0cc4,</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68504"
|
||||
y="467.40155"
|
||||
id="tspan3510"> sid: 47853a</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68504"
|
||||
y="477.40155"
|
||||
id="tspan3512"> }, [...]</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="219.68504"
|
||||
y="487.40155"
|
||||
id="tspan3514">]}</tspan></text>
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
|
||||
d="m 301.18111,170.07873 0,28.34645"
|
||||
id="path6665"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:1.77165354;stroke-miterlimit:2;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
id="rect4052"
|
||||
width="102.75591"
|
||||
height="350.78741"
|
||||
x="70.866142"
|
||||
y="60.236198"
|
||||
rx="3.5432441"
|
||||
ry="3.5432446" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.9992126;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow2Lend)"
|
||||
d="M 148.8189,127.55903 209.05512,70.86612"
|
||||
id="path4834"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 36 KiB |
@@ -1,25 +0,0 @@
|
||||
# This file is a script for GAP and tests a list of polynomials in hexadecimal
|
||||
# for irreducibility over F_2
|
||||
|
||||
# create x over F_2 = GF(2)
|
||||
x := Indeterminate(GF(2), "x");
|
||||
|
||||
# test if polynomial is irreducible, i.e. the number of factors is one
|
||||
IrredPoly := function (poly)
|
||||
return (Length(Factors(poly)) = 1);
|
||||
end;;
|
||||
|
||||
# create a polynomial in x from the hexadecimal representation of the
|
||||
# coefficients
|
||||
Hex2Poly := function (s)
|
||||
return ValuePol(CoefficientsQadic(IntHexString(s), 2), x);
|
||||
end;;
|
||||
|
||||
# list of candidates, in hex
|
||||
candidates := [ "3DA3358B4DC173" ];
|
||||
|
||||
# create real polynomials
|
||||
L := List(candidates, Hex2Poly);
|
||||
|
||||
# filter and display the list of irreducible polynomials contained in L
|
||||
Display(Filtered(L, x -> (IrredPoly(x))));
|
||||
Reference in New Issue
Block a user