├── .gitignore ├── README.md ├── SUMMARY.md ├── atom.md ├── client_handshake.md ├── compression.md ├── crdt.md ├── frame.md ├── handshake.md ├── int.md ├── noop.md ├── object_handshake.md ├── op.md ├── order.md ├── peer_handshake.md ├── rdt.md ├── replica.md ├── spec-examples.md ├── test ├── 64x64.batt ├── op.batt ├── peer-basic.batt ├── spec.batt ├── stamp.batt └── tests.md ├── todo ├── coin.md ├── compaction.md ├── crypto.md ├── matrix.md └── types │ ├── counter.md │ └── object.md └── uid.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Node rules: 2 | ## Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 3 | .grunt 4 | 5 | ## Dependency directory 6 | ## Commenting this out is preferred by some people, see 7 | ## https://docs.npmjs.com/misc/faq#should-i-check-my-node_modules-folder-into-git 8 | node_modules 9 | 10 | # Book build output 11 | _book 12 | 13 | # eBook build output 14 | *.epub 15 | *.mobi 16 | *.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Swarm Replicated Object Notation 2.0.0 # 2 | [*see on GitBooks: PDF, ebook, etc*](https://gritzko.gitbooks.io/swarm-the-protocol) 3 | 4 | Swarm Replicated Object Notation is a distributed data serialization format. 5 | Implicitly, formats like XML or JSON assume a lump of state being delivered from a server to a client -- once and in one piece. 6 | RON aims to synchronize *replicas* by delivering a stream of changes -- continuously and incrementally. 7 | With RON, even an object's state is seen as a batch of compacted changes, with more changes coming. 8 | 9 | In the RON world, the source of truth is not some central storage, but a swarm of devices, each producing and processing data continuously. 10 | These devices cache their data and synchronize it in real time over faulty channels. 11 | 12 | Consider JSON. It expresses relations by element positioning: 13 | `{ "foo": {"bar": 1} }` (inside foo, bar equals 1). 14 | RON may express that state as: 15 | ``` 16 | .lww#time1-userA` :bar=1 17 | #root@time2-userB :foo>time1-userA 18 | ``` 19 | Those are two RON *ops*. 20 | First, some object has a field "bar" set to 1. 21 | Second, another object has a field "foo" set to the first object. 22 | RON ops are self-contained and context-independent. 23 | Each change is versioned and attributed (e.g. at time `time2`, `userB` set `foo` to `time1-userA`). 24 | 25 | With RON, every #object, @version, :location or .type has its own explicit [UUID](uid.md), so it can be referenced later unambiguously. 26 | That way, RON can relate pieces of data correctly. 27 | Suppose, in the above example, `bar` was changed to `2`. 28 | There is no way to convey that in plain JSON, short of serializing the entire new state. 29 | Incremental RON updates are straightforward: `.lww#time1-userA@time3-userA :bar=2`. If compressed: ```.lww#time1-userA`(3:bar=2```. 30 | 31 | Thanks to that UUID metadata, RON can: 32 | 33 | * serialize complex data graphs (beyond simple nesting), 34 | * maintain caches (thanks to object UUIDs), 35 | * perform incremental data updates (thanks to version UUIDs), 36 | * do offline writes (UUIDs are coordination-free), 37 | * resolve conflicts (using Last-Write-Wins, CRDT or other strategy), 38 | * blend data from different sources (UUIDs are global), 39 | * overcome network failures (UUIDs enabe acknowledgements and idempotency), 40 | * ...and so on and so forth. 41 | 42 | One may say, what metadata solves is [naming things and cache invalidation][2problems]. 43 | What RON solves is compressing that metadata. 44 | 45 | RON makes no strong assumptions about consistency guarantees: linearized, causal-order or gossip environments are all fine. 46 | Once all the object's ops are propagated to all the object's replicas, replicas converge to the same state. 47 | RON formal model makes this process correct. 48 | RON wire format makes this process efficient. 49 | 50 | 51 | ## Formal model 52 | 53 | Swarm RON formal model has four key components: 54 | 55 | 1. an [op](op.md) is an atomic unit of data change 56 | * ops are context-independent; an op specifies precisely its place, time and value 57 | * ops are immutable once created 58 | * ops assume [causally consistent][causal] delivery 59 | * an op is a tuple of four [UUIDs](uid.md) and one or more constants ([atoms](op.md)): 60 | 1. the data type UUID, 61 | 2. the object's UUID, 62 | 3. the op's own event UUID, 63 | 4. the location UUID, 64 | 5. constants are strings, integers, floats or references ([UUIDs](uid.md)). 65 | 2. a [frame](frame.md) is a batch of ops 66 | * an object's state is a frame 67 | * a "patch" (aka "delta", "diff") is also a frame 68 | * in general, data is seen as a [partially ordered][po] log of frames 69 | 3. a [reducer](reducer.md) is a RON term for a "data type" 70 | * a [reducer][re] is a pure function: `f(state_frame, change_frame) -> new_state_frame` 71 | * reducers define how object state is changed by new ops 72 | * reducers are: 73 | 1. associative, 74 | 2. commutative for concurrent ops, 75 | 3. optionally, idempotent. 76 | 4. a [mapper](mapper.md) translates a replicated object's inner state into other formats 77 | * mappers turn RON objects into JSON or XML documents, C++, JavaScript or other objects 78 | * mappers are one-way: RON metadata may be lost in conversion 79 | * mappers can be pipelined, e.g. one can build a full RON->JSON->HTML [MVC][mvc] app using just mappers. 80 | 81 | RON implies causal consistency by default. 82 | Although, nothing prevents it from running in a linearized [ACIDic][peterb] or gossip environment. 83 | That only relaxes (or restricts) the choice of reducers. 84 | 85 | ## Wire format 86 | 87 | Design goals for the RON wire format is to be reasonably readable and reasonably compact. 88 | No less human-readable than regular expressions. 89 | No less compact than (say) three times plain JSON 90 | (and at least three times more compact than JSON with comparable amounts of metadata). 91 | 92 | The syntax outline: 93 | 94 | 1. constants follow very predictable conventions: 95 | * integers `1` 96 | * e-notation floats: `3.1415`, `1e+6` 97 | * UTF-8 JSON-escaped strings: `"строка\n线\t\u7ebf\n라인"` 98 | * UUIDs `1D4ICC-XU5eRJ 1D4ICCE-XU5eRJ` 99 | 2. UUIDs use a compact custom serialization 100 | * RON UUIDs mostly correspond to v1 UUIDs (128 bit, globally unique, contains a timestamp and a process id) 101 | * RON UUIDs are Base64 to save space (compare [RFC4122][rfc4122] `123e4567-e89b-12d3-a456-426655440000` and RON `1D4ICC-XU5eRJ`) 102 | * also, RON UUIDs may vary in precision, like floats (no need to mention nanoseconds everywhere) 103 | 3. serialized ops use some punctuation, e.g. `.lww #1D4ICC-XU5eRJ :keyA @1D4ICC2-XU5eRJ "valueA"` 104 | * `.` starts a data type UUID 105 | * `#` starts an object UUID 106 | * `@` starts an op's own event UUID 107 | * `:` starts a location UUID 108 | * `=` starts an integer 109 | * `"` starts and ends a string 110 | * `^` starts a float (e-notation) 111 | * `>` starts an UUID, UUID array or a version vector (same format) 112 | * `!` marks a frame header 113 | * `?` marks a query header 114 | 4. frame format employs cross-columnar [compression](compression.md) 115 | * repeated UUIDs can be skipped altogether ("same as in the last op") 116 | * RON abbreviates similar UUIDs using [prefix compression](compression.md), e.g. `1D4ICCE-XU5eRJ` gets compressed to `{E` if preceded by `1D4ICC-XU5eRJ` 117 | 118 | Consider a simple JSON object: 119 | ``` 120 | {"keyA":"valueA", "keyB":"valueB"} 121 | ``` 122 | A RON frame for that object will have three ops: one frame header op and two key-value ops. 123 | In tabular form, that frame may look like: 124 | ``` 125 | type object event location value 126 | ----------------------------------------------------- 127 | .lww #1D4ICC-XU5eRJ @1D4ICCE-XU5eRJ :0 ! 128 | .lww #1D4ICC-XU5eRJ @1D4ICCE-XU5eRJ :keyA "valueA" 129 | .lww #1D4ICC-XU5eRJ @1D4ICC1-XU5eRJ :keyB "valueB" 130 | ``` 131 | There are lots of repeating bits here. 132 | We may skip repeating UUIDs and prefix-compress close UUIDs. 133 | The compressed frame will be just a bit longer than bare JSON: 134 | ``` 135 | .lww#1D4ICC-XU5eRJ`{E! :keyA"valueA" @{1:keyB"valueB" 136 | ``` 137 | That is impressive given the amount of metadata (and you can't replicate data correctly without the metadata). 138 | The frame takes less space than *two* [RFC4122 UUIDs][rfc4122]; but it contains *twelve* UUIDs (6 distinct UUIDs, 3 distinct timestamps) and also the data. 139 | The point becomes even clearer if we add the object UUID to JSON using the RFC4122 notation: 140 | ``` 141 | {"_id": "0651a600-2b49-11e6-8000-1696d3000000", "keyA":"valueA", "keyB":"valueB"} 142 | ``` 143 | 144 | We may take this to the extreme if we consider the case of a CRDT-based collaborative real-time editor. 145 | Then, every letter in the text has its own UUID. 146 | With RFC4122 UUIDs and JSON, that is simply ridiculous. That is painful to imagine! 147 | With RON, that is perfectly OK. 148 | So, let's be precise. Let's put UUIDs on everything. 149 | 150 | ## The math 151 | 152 | RON is [log-structured][log]: it stores data as a stream of changes first, everything else second (think [Kafka][kafka]). 153 | Algorithmically, RON is LSMT-friendly (think [BigTable and friends][lsmt]). 154 | RON is [information-centric][icn]: the data is addressed independently of its place of storage (think [git][git]). 155 | RON is CRDT-friendly; [Conflict-free Replicated Data Types][crdt] enable real-time data sync (think Google Docs). 156 | 157 | Swarm RON employs a variety of well-studied computer science models. 158 | The general flow of RON data synchronization follows the state machine replication model. 159 | Offline writability, real-time sync and conflict resolution are all possible thanks to [Commutative Replicated Data Types][crdt] and [partially ordered][po] op logs. 160 | UUIDs are essentially [Lamport logical timestamps][lamport], although they borrow a lot from RFC4122 UUIDs. 161 | RON wire format is a [regular language][regular]. 162 | That makes it (formally) simpler than either JSON or XML. 163 | 164 | The core contribution of the RON format is *practicality*. 165 | RON arranges primitives in a way to make metadata overhead acceptable. 166 | Metadata was a known hurdle in CRDT-based solutions, as compared to e.g. [OT-family][ot] algorithms. 167 | Small overhead enables such real-time apps as collaborative text editors where one op is one keystroke. 168 | Hopefully, it will enable some yet-unknown applications as well. 169 | 170 | Use Swarm RON! 171 | 172 | 173 | ## History 174 | 175 | * 2012-2013: started as a part of the Yandex Live Letters project 176 | * 2014 Feb: becomes a separate project 177 | * 2014 October: version 0.3 is demoed (per-object logs and version vectors, not really scalable) 178 | * 2015: version 0.4 is scrapped, the math is changed to avoid any version vector use 179 | * 2016 Feb: version 1.0 stabilizes (no v.vectors, new asymmetric client protocol) 180 | * 2016 May: version 1.1 gets peer-to-peer (server-to-server) sync 181 | * 2016 June: version 1.2 gets crypto (Merkle, entanglement) 182 | * 2016 October: functional generalizations (map/reduce) 183 | * 2016 December: cross-columnar compression 184 | * 2017 May: Swarm RON 2.0.0 185 | 186 | [2sided]: http://lexicon.ft.com/Term?term=two_sided-markets 187 | [super]: http://ilpubs.stanford.edu:8090/594/1/2003-33.pdf 188 | [opbased]: http://haslab.uminho.pt/sites/default/files/ashoker/files/opbaseddais14.pdf 189 | [cap]: https://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed 190 | [swarm]: https://gritzko.gitbooks.io/swarm-the-protocol/content/ 191 | [po]: https://en.wikipedia.org/wiki/Partially_ordered_set#Formal_definition 192 | [crdt]: https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type 193 | [icn]: http://www.networkworld.com/article/3060243/internet/demystifying-the-information-centric-network.html 194 | [kafka]: http://kafka.apache.org 195 | [git]: https://git-scm.com 196 | [log]: http://blog.notdot.net/2009/12/Damn-Cool-Algorithms-Log-structured-storage 197 | [re]: https://blogs.msdn.microsoft.com/csliu/2009/11/10/mapreduce-in-functional-programming-parallel-processing-perspectives/ 198 | [rfc4122]: https://tools.ietf.org/html/rfc4122 199 | [causal]: https://en.wikipedia.org/wiki/Causal_consistency 200 | [UUID]: https://en.wikipedia.org/wiki/Universally_unique_identifier 201 | [peterb]: https://martin.kleppmann.com/2014/11/isolation-levels.png 202 | [regular]: https://en.wikipedia.org/wiki/Regular_language 203 | [mvc]: https://en.wikipedia.org/wiki/Model–view–controller 204 | [ot]: https://en.wikipedia.org/wiki/Operational_transformation 205 | [lamport]: http://lamport.azurewebsites.net/pubs/time-clocks.pdf 206 | [2problems]: https://martinfowler.com/bliki/TwoHardThings.html 207 | [lsmt]: https://en.wikipedia.org/wiki/Log-structured_merge-tree 208 | -------------------------------------------------------------------------------- /SUMMARY.md: -------------------------------------------------------------------------------- 1 | # Table of Contents 2 | 3 | * [Table of Contents](SUMMARY.md) - this document 4 | * [Introduction](README.md) - what is the Swarm protocol 5 | * Data replication model 6 | * [Replicas](replica.md) - database replicas, full and partial 7 | * [Order](order.md) - op order (partial, local linear) 8 | * Protocol primitives 9 | * [Base64x64 numbers](64x64.md) - our sacred serialization format 10 | * [Stamps](stamp.md) - event/object ids for a distributed system 11 | * [Specifiers](spec.md) - compound event... descriptors 12 | * [Operations](op.md) - immutable ops are Swarm's blood cells 13 | * [Handshakes](handshake.md) - how sync sessions start and end 14 | * [Peer-to-peer handshakes](peer_handshake.md) - for full database replicas 15 | * [Client handshakes](client_handshake.md) - for clients, to connect to a database 16 | * [Object handshakes](object_handshake.md) - for clients, to fetch an object and subscribe to updates 17 | * [Replicated data types](rdt.md) - everything that can run on top of Swarm 18 | * [Last-write-wins object](types/object.md) - a very popular 19 | simple type 20 | * [CRDT](crdt.md) - our beloved and precious Conflict-free replicated data types 21 | * [Swarm coin](coin.md) - an example of a non-CRDT RDT with expicit 22 | inconsistencies, a crypto currency 23 | * [Crypto](crypto.md) - Swarm data integrity machinery 24 | * [Causality/integrity tracking](noop.md) - all-powerful noops 25 | * [Entanglement matrix](matrix.md) - like blockchain, but uses 26 | distributed math (not linear) 27 | -------------------------------------------------------------------------------- /atom.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gritzko/swarm-ron-docs/35f4490609fcb17643aab3f3edb5a9501d840252/atom.md -------------------------------------------------------------------------------- /client_handshake.md: -------------------------------------------------------------------------------- 1 | ## Client handshake ## 2 | 3 | A client connection is opened with a meta object handshake that also counts as a client handshake. 4 | It does not subscribe the client to any objects but the meta object. 5 | Other objects have to be subscribed to with separate [per-object handshakes](object_handshake.md). 6 | 7 | Note that a per-object handshake works one way only: the client subscribes to the object's updates. 8 | Any client-side [ops](op.md) are sent upstream unconditionally and in order. 9 | On reconnection, any unacknowledged ops are sent again, in order. 10 | The server may acknowledge client ops in two ways: 11 | 12 | * by echoing them back to the client or 13 | * by sending the *last received* op stamp in the return `.on` of the client handshake. 14 | 15 | For read-only clients, the return `.on` has a [timestamp](stamp.md) of `!~` (never). 16 | Rejected handshakes are responded with an `.off`. 17 | Note that the *last* received op stamp may not be the *max* received stamp if client trees are enabled (i.e. a client replica may fork off secondary client replicas with their own clocks). 18 | 19 | Both the initial upstream `.on` op and the return downstream `.on` are scoped to the client. 20 | In case the client did not receive a replica id yet, the initial `.on` may have an incomplete value (e.g. user bits set, peer and session bits empty). 21 | Then, the return `.on` must be scoped to the newly granted complete replica id. 22 | 23 | An example of a successful handshake by a new client receiving a replica id and database metadata: 24 | 25 | > /Swarm#database!0.on+0agn007= 26 | Password: test123 27 | < /Swarm#database!1CQAneD1+X~.~= 28 | !1CQAneD+X~.Access OwnWriteAllRead 29 | !1CQAneD1+X~.ReplicaIdScheme 163 30 | < /Swarm#database!1CQZ38+X~.on+Xagn0071xQ= 31 | Secret: 3ff470571abe2c93cadcd43362ed7756c9fc9ac0 32 | 33 | Note that the value format of `.on` pseudo-ops is not covered by this specification. 34 | Values are written this way for example purposes only. 35 | -------------------------------------------------------------------------------- /compression.md: -------------------------------------------------------------------------------- 1 | ## Compression 2 | 3 | Swarm RON makes extensive use of [UIDs](uid.md): every [op](op.md) has four. 4 | That creates the need to compress that metadata to limit the overhead. 5 | RON UID compression relies on the fact that nearby UIDs tend to share a lot of bits. 6 | RON employs a mix of two classic methods: prefix compression and columnar compression. 7 | 8 | Namely, [ints](int.md) are abbreviated as deltas to some previous ("default") ints. 9 | In the context of an op key part, UID ints default to the same UID ints of the previous op, e.g. object id origin to the previous object id origin (thus "columnar"). 10 | In the context of an op value part, UID ints default to respective ints of the previous UID. 11 | 12 | A Base64 RON serializer may use any of the following compression tricks: 13 | 14 | 1. VARLEN - skip tailing zeroes in every [int](int.md), e.g. `time123000-origin0000` becomes `time123-origin`, 15 | 2. SKIPTOK (op key only) - entirely skip tokens if they are equal to defaults, e.g. in an object state frame only the first op has type/object ids: `.lww#1D4ICC-XU5eRJ@1D4ICCE-XU5eRJ! :keyA"valueA" @{1:keyB"valueB"` 16 | 3. PREFIX - replace common prefixes by "bracket" symbols: `([{}])` for 4,5,6,7,8,9 chars respectively, e.g. `time1-orig time2-orig` becomes `time1-orig(2` 17 | 4. REDEFAULT (op key only) - use a different UUID as the default value for prefix compression, e.g. ```.lww#1D4ICC-XU5eRJ@`{E!``` where event id defaults to the object id (symbols `\|/` point to object, event and location ids of the last op; backtick points to the preceding id in the same op) 18 | 5. SKIPQUANT - skip unnecessary separators, e.g. `.lww#1D4ICC-XU5eRJ\{E\!` skips `@` as the UID after the object id should be the op id anyway. 19 | -------------------------------------------------------------------------------- /crdt.md: -------------------------------------------------------------------------------- 1 | # CRDT - Replicated Data Types 2 | 3 | Wikipedia has a generally good [introductory article][wiki] on CRDTs. 4 | Conflict-free replicated data types are subdivided into two main subtypes: op-based Commutative (C**m**RDT) and state-based Convergent (C**v**RDT). 5 | CvRDT was originally defined in terms of merging state snapshots. 6 | CmRDT was defined in terms of applying atomic ops to the state. 7 | 8 | Although the two types are [formally equivalent][eq], there is a great difference from the engineering perspective. 9 | The op-based subtype needs a "causal broadcast" layer that provides *exactly-once* delivery guarantees for mutations (ops). 10 | The state-based subtype needs more of per-object metadata to merge any two versions of that object. 11 | 12 | Despite the differences, there was a great deal of convergence between those two types. 13 | 14 | [wiki]: https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type 15 | [eq]: http://link.springer.com/chapter/10.1007%2F978-3-642-24550-3_29 16 | 17 | ## [CmRDT](#CmRDT) (op-based) 18 | 19 | The top difficulty of the op-based approach is the exactly-once op delivery. 20 | We believe that difficulty to be greatly exaggerated. 21 | From the standpoint of some abstract lossy message-passing environment that may be hard indeed. 22 | Practically, many of those problems are reliably solved in existing systems. 23 | The Swarm solves exactly-once delivery by combining: 24 | 25 | * unique [op identifiers](spec.md), 26 | * a log-structured storage engine and 27 | * a TCP-like reliable transport. 28 | 29 | Technically, the key advantage of CmRDT is the efficient propagation of mutations. 30 | One [op](op.md) only carries its change, and not the rest of the object's state. 31 | In line with the classic [state machine replication][smr] model, CmRDT may compress its op log into a state snapshot. 32 | 33 | The biggest win is architectural: orthogonality of concerns. 34 | Ops are immutable. 35 | The broadcast layer can store and forward ops based on generic type-independent rules. 36 | As the broadcast solves delivery issues, data type implementation is greatly simplified too. 37 | 38 | [smr]: https://en.wikipedia.org/wiki/State_machine_replication 39 | 40 | ## [CvRDT](#CvRDT) (state-based) 41 | 42 | CvRDTs are rather forgiving to the delivery order. 43 | Actually, the mutation delivery order does not matter at all. 44 | The cost of such a resilience is more of per-object metadata. 45 | Objects can only be delivered as a full state snapshot, including all of the metadata. 46 | That is especially painful for client-side use. 47 | Just imagine that your Google Doc re-downloads itself on every your keystroke (Google Docs is op-based, but [not CRDT](ot)). 48 | 49 | [Delta-enabled CvRDT][delta] resolve that inefficiency. 50 | Deltas take the middle ground between state and ops. 51 | They only carry the changed state. 52 | The cost of efficiency is the new requirement: *at-least-once* delivery. 53 | That puts "delta-enabled state-based" much closer to "snapshot-enabled op-based" in terms of abilities and requirements. 54 | 55 | Some less-severe issues remain: 56 | * delta handling is type-specific, 57 | * deltas are mutable, and 58 | * objects still carry metadata for state-to-state merge. 59 | 60 | The main deficiency of CvRDT is also architectural. 61 | There is no clear separation of concerns between the transport/broadcast layer and the CRDT/math layer. 62 | They entangle. 63 | 64 | [delta]: http://gsd.di.uminho.pt/members/cbm/ps/delta-crdt-draft16may2014.pdf 65 | [ot]: https://en.wikipedia.org/wiki/Operational_transformation 66 | -------------------------------------------------------------------------------- /frame.md: -------------------------------------------------------------------------------- 1 | ## Frames 2 | 3 | A frame is a non-empty array of [ops](op.md) (order is significant). 4 | Op frame processing is transactional: 5 | A frame is either processed in its entirety or not processed at all. 6 | While [ops](op.md) are immutable, frames of ops get routinely created and rehashed. 7 | 8 | Swarm RON frames provide: 9 | 1. lightweight transactional semantics, 10 | 2. frame-level op [compression](compression.md) that fully exploits the fact that close UIDs tend to be close numerically, 11 | 3. a great unifying abstraction: 12 | * an object's state is a frame; 13 | * [reducers](reducer.md) consume frames and produce frames, 14 | * a patch is a frame carrying a difference between two states, 15 | * an object graph snapshot is a frame too, 16 | * a single op travels around as a frame of one op. 17 | 18 | Apart from immutable payload ops, a frame may have its own *header* op. 19 | A header op consists of: 20 | 1. reducer id (the one that produced the frame), 21 | 2. object id (or 0 for omnivorous reducers), 22 | 3. end version (most often, the last reduced op id), 23 | 4. start version (actual for patches). 24 | 5. void value (`!`) 25 | -------------------------------------------------------------------------------- /handshake.md: -------------------------------------------------------------------------------- 1 | # Handshakes # 2 | 3 | Each object- or db-level log sync starts with a handshake. 4 | In that handshake, parties must introduce themselves (if necessary), describe the entity being subscribed to, their existing states, signal access modes (read/write), and so on. 5 | The full subscription life cycle has four stages: 6 | 7 | 1. handshake, 8 | 2. exchange of patches, 9 | 3. continuous update exchange, 10 | 4. closing handshake. 11 | 12 | Handshake is a two-phase request-response exchange of `.on` [pseudo-ops](op.md). 13 | The initiator of the handshake is also denoted as a *downstream*, the receiver as an *upstream*, message propagation directions are named accordingly (downstream is from the upstream to the downstream). 14 | Handshake's two `.on` messages are named "initial" and "return" `.on`. 15 | A typical per-object initial `.on` [spec](spec.md) looks like: 16 | 17 | > /Object#1CQQ3+XaUth1_K!1CQQ3+XaUth1_K.on+Xagn0071xQ 18 | 19 | It contains 20 | 21 | * the type `/Object` and the id `#1CQQ3+XaUth1_K` of the object being subscribed to; 22 | * [pseudo-op](op.md) `.on` scoped to the subscribing replica `Xagn0071xQ` (a scoped op is not relayed globally); 23 | * version stamp `!1CQQ3+XaUth1_K` of the recentmost op/state of that object received *from the same peer* before (`!0` if none). 24 | 25 | Note that Swarm op log is partially ordered. 26 | Hence, in the general case, a position in the log can only be described by a version vector. 27 | Swarm avoids VV use by relying on local de-facto arrival orders, which are linear. 28 | A position in a particular local log can be described by a single [logical timestamp](stamp.md). 29 | 30 | An active subscription is terminated by an `.off` operation 31 | having essentially the same attributes. 32 | 33 | The [value](op.md#value) of the `.on` op is unspecified; it may contain e.g. access credentials. 34 | In the case of `.off`, the value is understood as an error message. 35 | 36 | Three distinct types of handshakes are: 37 | 38 | * [peer handshake](peer_handshake.md) to subscribe to the entire database log, 39 | * [client handshake](client_handshake.md) to make a partial-dataset client subscription, and 40 | * [object handshake](object_handshake.md) to subscribe a client to a particular object. 41 | 42 | Database-level and object-level handshakes have the same syntax. 43 | Database subscriptions are made by subscribing to the metadata object of the database. 44 | That minimizes the overhead and the number of primitives. 45 | -------------------------------------------------------------------------------- /int.md: -------------------------------------------------------------------------------- 1 | ## RON integers, Base64x64 2 | 3 | Swarm RON employs lots of ids, timestamps and pre-defined constants all unified as 128-bit RON UIDs consisting of two 64-bit parts. 4 | 64-bit integers are well supported on all platforms, with the notable exception of JavaScript. JavaScript numbers are [dangerous to use][snowflake] in this context. 5 | Hence, in human-readable serializations (URL paths, file names) and in JavaScript code RON relies on Base64-serialized integers. 6 | 7 | Swarm RON Base64 variant satisfies two special requirements. 8 | First, RON has to do lots of causality-and-order comparisons with UIDs/timestamps. 9 | Hence, the natural alphanumeric ordering of Base64 strings must be the same as the original numeric order of integers. 10 | That rules out any common variety of Base64 from being used, as [Base64][base64] symbols do not go in their ASCII order. 11 | Second, full 64 bits is a bit too much sometimes, so a variable-length encoding is a must (see Google's [varints][varint]). 12 | Hence, RON employs the following "Base64x64" encoding: 13 | 14 | * 64-bit numbers are represented as ten Base64 chars (10x6=60, 4 higher bits are reserved), 15 | * our Base64 variety is `0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~` (non-standard), 16 | * *tailing* zeroes are skipped, e.g. `1230000000` is shortened to `123`. 17 | 18 | The tail-skip rule is a bit counter-intuitive, as the normal Arabic notation skips *leading* zeroes, e.g. Arabic 0000123 is 123. 19 | But this way, the numeric order of `uint64_t` matches the alphanumeric order of our Base64x64, which is not the case with Arabic numbers. 20 | This variable-length trick provides significant savings when Base64x64 numbers are concatenated. 21 | For example, an [op](op.md) has four [UIDs](uid.md), thus eight 64-bit integers (4x2x64=512 bits), plus separators. 22 | Still, it can be as short as `.db#test:1CQC2u3u+X` (19 chars). 23 | One 64-bit decimal number is up to 19 characters (9223372036854775807). 24 | 25 | So, Base64x64 is like [varint][varint], but for text-based formats and it preserves the order. It is mostly used for [UIDs](uid.md), timestamps and identifiers. 26 | 27 | [varint]: https://developers.google.com/protocol-buffers/docs/encoding#varints 28 | [snowflake]: https://dev.twitter.com/overview/api/twitter-ids-json-and-snowflake 29 | [hybrid]: https://www.cse.buffalo.edu/tech-reports/2014-04.pdf 30 | [base64]: https://tools.ietf.org/html/rfc4648#page-5 31 | -------------------------------------------------------------------------------- /noop.md: -------------------------------------------------------------------------------- 1 | # The mighty noop 2 | 3 | A no-op operation carries no state mutations by definition. 4 | Still, it can convey causality information and provide [integrity metadata](crypto.md) (hashes, signatures). 5 | A noop operation name is `.0`. 6 | A noop MAY its own unique stamp, like a regular op. 7 | Hence, noop affects object versions and version vectors. 8 | Still, it does not affect the state. 9 | A noop value consists of four optional parts, space-separated: 10 | 11 | * a comment (square-bracketed arbitrary [Base64](64x64.md)), 12 | * reference (a [stamp](stamp.md) of another op) 13 | * a hash (truncated SHA-256, 40 chars) 14 | * a signature (DSA, 54 chars) 15 | 16 | There are eight possible combinations of the three non-comment parts, hence 8 noop patterns: 17 | 18 | * 000 empty noop, 19 | * 001 a signature for an implicit [rolling hash](crypto.md), 20 | * 010 an explicit rolling hash, 21 | * 011 a signature for an explicit rolling hash, 22 | * 100 causal link (to an operation from another sequence), 23 | * 101 implicit *entanglement*: a causal link and a signature for the joint hash, 24 | * 110 causal link and an explicit joint hash, 25 | * 111 explicit *entanglement*: signed explicit joint hash. 26 | 27 | If a rolling hash is "implicit", the recipient is supposed to have it already, so it is not mentioned. 28 | A *referenced hash* is a rolling hash from another sequence; a noop references it by its stamp (patterns 100-111). 29 | A joint hash is a hash of a 80-char concatenation of: 30 | 31 | 1. the rolling hash of our sequence and 32 | 2. the referenced hash of another sequence. 33 | 34 | For example, in a 101 pattern noop, we reference an op from another sequence, then we sign the joint hash. 35 | It is generally recommended to reference noops, not just regular ops. 36 | That way, we are talking about an explicitly mentioned hash. 37 | Otherwise, the referenced rolling hash will have to be derived. 38 | 39 | 1x1 pattern noops essentially turn a Swarm op log into a cross-signed [Merkle tree][merkle]. 40 | In such a tree, eventually, all peers may cross-sign all the data. 41 | On top of entangling noops, we may build advanced constructs, such as [entanglement matrix](matrix.md). 42 | 43 | Some fine details. 44 | When we reference a noop, we reference the hash *mentioned* in that op, not the rolling hash of the noop itself. 45 | When we reference any other op, we reference the rolling hash *calculated* from that op. 46 | If the referenced noop has an implicit hash (it is not mentioned), we must take the rolling hash from the immediate preceding op of that sequence. 47 | 48 | A 0xx pattern noop MAY share the stamp with the preceding op, in case both the op and the noop are created by the same replica. 49 | That way, the noop will not change version ids or version vectors. 50 | In such a case, both definitions for the referenced hash match, as the noop mentions the rolling hash of the preceding op. 51 | 52 | [merkle]: https://en.wikipedia.org/wiki/Merkle_tree 53 | -------------------------------------------------------------------------------- /object_handshake.md: -------------------------------------------------------------------------------- 1 | ## Object handshake ## 2 | 3 | Per-object handshakes serve to subscribe a client replica to a particular object, its current state and future updates. 4 | The [stamp](stamp.md) of the initial `.on` pseudo-op signals the version of the object the client already has. 5 | It is the stamp of the object's op that was either received from the server or acknowledged by the server most recently. 6 | Special stamp values are `!0` for "nothing" and `!~` for the rare case of a write-only object. 7 | 8 | The stamp of the return `.on` is `!~` for read-only objects or any other value otherwise. 9 | That return stamp must be considered an acknowledgement in the case it was issued by the same client replica. 10 | 11 | Object handshakes obey the same request-response pattern as other handshakes, with one exception. 12 | In an object handshake, the *patch* (a catch-up op sequence) goes *before* the return `.on`. 13 | On receiving that return `.on`, a client knows that its object state is current. 14 | 15 | Successful no-changes subscription: 16 | 17 | > /Object#1CQQ3+XaUth1_K!1CQQ3+XaUth1_K.on+Xagn0071xQ 18 | < /Object#1CQQ3+XaUth1_K!1CQQ3+XaUth1_K.on+Xagn0071xQ 19 | 20 | Successful update subscription: 21 | 22 | > /Object#1CQQ3+XaUth1_K!1CQQ3+XaUth1_K.on+Xagn0071xQ 23 | < /Object#1CQQ3+XaUth1_K!1Cs7L+XaUth1_K.Key1 Value1 24 | < /Object#1CQQ3+XaUth1_K!1Cs7M+XaUth1_K.Key2 Value2 25 | < /Object#1CQQ3+XaUth1_K!1Cs7M+XaUth1_K.on+Xagn0071xQ 26 | 27 | On a [compressed connection](op.md), that exchange will likely look like: 28 | 29 | > #1CQQ3+XaUth1_K!1CQQ3+XaUth1_K.on 30 | < #1CQQ3+XaUth1_K!1Cs7L+XaUth1_K.Key1 Value1 31 | < !1Cs7M+XaUth1_K.Key2 Value2 32 | < .on 33 | 34 | A read-only subscription (compressed): 35 | 36 | > #1CQQ3+XaUth1_K!1CQQ3+XaUth1_K.on 37 | < #1CQQ3+XaUth1_K!1Csu_+XaUth1_K.FieldName Some text 38 | < !~.on 39 | -------------------------------------------------------------------------------- /op.md: -------------------------------------------------------------------------------- 1 | ## Ops 2 | 3 | A [op](op.md) is an atomic unit of data change, the ["hourglass waist"][waist] of the RON formal model. 4 | Ops are context-independent; each op specifies precisely its place, time and value. 5 | Ops are immutable once created. 6 | "Immutability changes [everything][pat]". 7 | The implied guarantee is that very op is delivered to every (object's) replica. 8 | Various [reducers](reducer.md) may have additional consistency requirements, e.g. [causal delivery][causal]. 9 | 10 | An op is a key-value pair of: 11 | 1. a [specifier](spec.md) and 12 | 2. some [atoms](atom.md). 13 | 14 | ### Key (specifier) 15 | 16 | A "specifier" is an op's descriptive identifier. 17 | The term itself is liberally borrowed from linguistics. 18 | A specifier is a tuple of four [UIDs](uid.md): 19 | 20 | 1. the data type UID (typically a transcendent [reducer id](reducer.md), like `inc`, `lww` or `txt`), 21 | 2. the object's own UID (typically, a creation [timestamp](uid.md); transcendent for "global" objects), 22 | 3. the op's own UID (a globally unique event *timestamp*; the only allowed transcendent values are special cases of zero `0`, never `~` and error `~~~~~~~~~~`), 23 | 4. the location UID (either an actual UID of a past operation identifying the location or a transcendent UID serving as "key", "method name", etc; the interpretation is up to the reducer), 24 | 25 | Strictly speaking, the op UID alone uniquely identifies an op. 26 | The rest of a specifier describes the op in the most formal and concise way possible. 27 | Thanks to UIDs, ops reference each other extensively: the object id itself is a reference to the object creation op, a location if often a reference to the op that created that location. 28 | 29 | For non-transcendent UIDs, an obvious consistency rule is `type_id <= object_id <= location_id <= op_id`. 30 | A referenced UID is always a past UID; due to properties of logical clocks, past UIDs have lesser values. 31 | 32 | The Base64 op serialization is made with the following separators: `.type-id#object-id@op-id:location-id` 33 | 34 | ### Values (atoms) 35 | 36 | Atoms are strings, integers, floats or references ([UIDs](uid.md)). 37 | For the text-based serialization, constants follow very predictable conventions: 38 | 1. integers `=1`, `=-3` (any integer up to JavaScript Number.MAX_SAFE_INTEGER), 39 | 2. e-notation floats: `^3.1415`, `^1e+6` (explicitly separated from integers due to the fact that float arithmetics is non-associative), 40 | 3. UTF-8 JSON-escaped strings: `"строка\n线\t\u7ebf\n라인"`, 41 | 4. UID references `>1D4ICC-XU5eRJ`, `>1D4ICC-XU5eRJ[E{` (either one UID or an array of UIDs using the [bracket notation](compression.md) for prefix compression), 42 | 5. void values of `!` and `?` mark [header ops](frame.md) and [subscription ops](subscription.md) that typically have no value. 43 | 44 | ``` 45 | Approx JSON - RON type mappings 46 | ------------------------------- 47 | 3.1415 =1 ^3.1415 48 | "string" "string" 49 | null >0 50 | {} >object-id 51 | [] >array-id 52 | true =1 53 | ``` 54 | 55 | ### Example 56 | 57 | When serialized, each of an op's eight [ints](int.md) is a Base64x64 string preceded by a non-base64 separator ( `.`, `#`, `@` and `:` for object type, object id, event stamp and event name respectively, `-` separates time values from origin ids). 58 | For example, let's read this specifier: 59 | 60 | ``` 61 | .lww #1D4ICCEc-XU5eRJ0K @1D4IDvD4\ :title "Alice in Wonderland" 62 | ``` 63 | 64 | * an object of type `lww` (a flat last-write-wins key-value object) 65 | * object id `1D4ICCEc-XU5eRJ0K`, i.e. created on Sun Jun 05 18:12:12 UTC 2016 (`1D4ICCEc`) by session `K` of the user `U5eRJ0` attached to the server `X` (assuming the `0163` [replica id scheme](replica.md)) 66 | * changed by the same replica on `1D4IDvD4`, Sun Jun 05 18:13:58 UTC 2016 (the repeated origin is abbreviated as a backreference `\`, see [compression](compression.md)) 67 | * the write targets the location (key) named `title` 68 | 69 | This specifier syntax is well fit to be a key in BigTable-like prefix-compressed ordered key-value stores. 70 | The metadata fits into the key, the data goes into the value. 71 | In this context, the alphanumeric order of specifiers is meaningful. 72 | It groups one object's operations together and it complies with the causal order within the object's scope (providing an arbitrary total order). 73 | 74 | ``` 75 | Some RON op patterns 76 | --------------------------------------------- 77 | .type#id @till:loc=value data change op 78 | .type#id @till:0 ! state frame header 79 | .type#id @0:from ? subscription 80 | .type#id @till:from ? patch query 81 | .type#id @till:from ! patch 82 | .type#id @0:0 ! zero state 83 | .type#id @0:0 >0 zero op 84 | .type#id @0:0 ? new subscription 85 | .type#id @~:0 >0 object closed 86 | .type#id @~~~~~~~~~~"msg" error 87 | .type#id @~~~~~~~~~~! ruined state 88 | 89 | ``` 90 | 91 | [waist]: https://www.iab.org/wp-content/IAB-uploads/2011/03/hourglass-london-ietf.pdf 92 | [causal]: https://en.wikipedia.org/wiki/Causal_consistency 93 | [pat]: http://cidrdb.org/cidr2015/Papers/CIDR15_Paper16.pdf 94 | -------------------------------------------------------------------------------- /order.md: -------------------------------------------------------------------------------- 1 | ## Storage and relay orders 2 | 3 | At its base, Swarm is a log replication protocol. 4 | It relays immutable ops while preserving the causal order. 5 | Formally, the protocol's guarantees are: 6 | 7 | * every op is delivered to every peer replica, 8 | * it is delivered exactly once and 9 | * in accordance with the [happened-before order][morelamport]. 10 | 11 | The general op relay rule is that all new ops are stored first, relayed second, in the same order as they were received. 12 | In case two replicas were temporarily disconnected, on reconnection the ops must be replayed in the same order (replay order is the relay order). 13 | Only concurrent ops can go in different orders at different replicas. 14 | 15 | Swarm guarantees are not that much different from TCP guarantees: exactly-once in-order delivery, in a certain scope. 16 | Of course, Swarm's scope is higher in the stack than TCP's. 17 | From the practical standpoint, 80% of the protocol's effort goes into gluing together segments of continuous TCP-like transmissions and continuous log-structured append-only storage writes. 18 | The objective is to give it all an appearance of a single continuous session. That way, Swarm implements the abstraction of a distributed partially-ordered op log. 19 | 20 | Swarm is partially-ordered, so there is no single total op order. 21 | For a given database, op orders vary at different replicas. 22 | Still, there are some useful and important linear orders too. 23 | 24 | *Replica order* is the order of [ops](op.md) generated by a single *origin* [replica](replica.md). A replica is considered a sequential process, its op ids are monotonous (later ops have higher ids). This order is global (same-origin ops go in exactly the same order at every replica). 25 | 26 | *Home peer order* is the order of [client](replica.md) ops as they arrive on their [home peer](replica.md). Essentially, a home peer is used to create a de-facto linear order for all the ops its clients generate. The peer's own ops belong to that order too. This order is consistent at every replica, except client replicas themselves (well, clients don't get the full op log anyway). 27 | 28 | *Arrival order* is the de-facto order of ops as they arrive on a certain replica. When peers sync, they talk in terms of each other's arrival orders. This is the most variable order of all: it is replica-specific. Another term for this is [*delivery order*][crdt]. It was also addressed earlier as relay and replay order -- they are all the same. A single Swarm replica can be seen as an arrival-order op log. 29 | 30 | A Swarm network is peers connected by an arbitrary graph of peering connections. 31 | Clients only connect to their respective home peers. 32 | Peer connections should form a connected graph, at least most of the time. 33 | That graph is not necessarily a tree. 34 | Hence, there is some redundancy in op relay. 35 | Normally, a peer gets every new op from every of its connected peers. 36 | For example, the next picture shows three peers connected in a ring (`a-b-c-a`) and an op propagation diagram for a new op created by `a`. 37 | Every peer receives the op twice, relays once. 38 | 39 | a---b a b c a abc peers 40 | \ / | _ _ op stored 41 | c | \_ \ / op relayed 42 | | / \_ 43 | time V / \ 44 | 45 | Even peer's own ops are echoed back by its connected peers; that serves as an acknowledgement. 46 | Hence, there is an incentive not to make the graph too dense. 47 | That redundancy does not affect the client side: as a client is only connected to its home peer, it gets every operation once. 48 | 49 | Op delivery guarantees can be further hardened by [crypto](crypto.md). 50 | [Cryptographic entanglement](matrix.md) ensures that no op was corrupted, omitted or injected in transit; it further allows all peers to cross-sign all the data and to ensure that every peer sees exactly the same data. 51 | 52 | [morelamport]: http://research.microsoft.com/en-us/um/people/lamport/pubs/time-clocks.pdf 53 | [crdt]: http://hal.upmc.fr/inria-00555588/document 54 | -------------------------------------------------------------------------------- /peer_handshake.md: -------------------------------------------------------------------------------- 1 | ## Peer handshake ## 2 | 3 | Peer handshake is for [full replicas](replica.md) that both possess the full op log of the database. 4 | It is essentially a server to server handshake, albeit nothing prevents a client from having a full replica too. 5 | Peer `.on` [ops](op.md) are scoped to their respective sending peers. 6 | Peer `.on` may not obey the request-response pattern; peers may send their handshakes independently. 7 | 8 | On receiving a peer on, replica sends back the section of the local log that the other peer missed and, once the catch-up phase is over, keeps relaying new ops as they arrive. 9 | A peer replica may choose to suppress echoed ops (i.e. don't send ops back to the same peer it received them from). 10 | 11 | A replica must maintain exactly the same op order when relaying ops live and when replaying them in a catch-up. 12 | The local arrival order is linear and persistent. 13 | 14 | The simplest example of a peer handshake is peers `X` and `Y` connecting for the first time to sync database `db`: 15 | 16 | > /Swarm#db!0.on+X 17 | < /Swarm#db!0.on+Y 18 | < ... op log 19 | > ... op log 20 | 21 | In a repeated handshake, peers mention the [timestamp](stamp.md) of the last op received from each other in the past: 22 | 23 | > /Swarm#database!1CRE6l29+A34h~s1.on+X 24 | < /Swarm#database!1CRE6K+Agritzk004.on+Y 25 | 26 | Although the op has the type-id of the metadata object (`/Swarm#database`), the stamp (`!1CRE6l29+A34h~s1`) may come from any op. 27 | Note that the last stamp is not necessarily the max stamp. 28 | 29 | ### Non-replica subscribers ### 30 | 31 | A peer handshake can be used by non-replica subscribers, i.e. various log consumers. 32 | Such subscribers may not have a replica id. 33 | Thus, their `.on` is scoped to `~`. 34 | Similarly, the response `.on` is read-only (the stamp is `!~`, the "never" value). 35 | 36 | > /Swarm#database!1CRE6l29+Or5az.on+~ 37 | < /Swarm#database!~.on+Y 38 | -------------------------------------------------------------------------------- /rdt.md: -------------------------------------------------------------------------------- 1 | # Replicated data types 2 | 3 | An RDT is a formal construct that describes anything that can work over a partially ordered op log. 4 | It can be a [CRDT](crdt.md) (either subtype), like [Counter](types/counter.md) or anything else. 5 | One popular example is RPC (remote procedure call) which employs scoped operations to avoid global op propagation. 6 | Another peculiar example is a Swarm-based [crypto currency](coin.md). 7 | 8 | General principles for every kind of RDT: 9 | 10 | 1. RDT objects have a state which is mutated by applying [ops](op.md) 11 | 2. the same set of ops produces the same state ("same" means bitwise identical) 12 | 3. reordering of concurrent ops does not affect the resulting state 13 | 4. external APIs of an RDT should be idiomatic to their language of implementation, hence they may vary from language to language 14 | 15 | A good RDT must have: 16 | 1. a clear mission and a discussion of tradeoffs, 17 | 2. proof of correctness, 18 | 3. test cases consisting of op sequences and resulting states (preferably concurrent cases too) 19 | 4. ideally, JavaScript, C++ and Java implementations. 20 | 21 | Each RDT type has an unique [*transcendent*](stamp.md) id. 22 | That is a single Base64x64 number, which is typically human-readable. 23 | For example, `Counter`. 24 | Hence, every [spec](spec.md) of every [op](op.md) of a [Counter](types/counter.md) object starts with `/Counter`. 25 | The other half of the type id is either empty (default) or abnormal. 26 | 27 | Abnormal halves are used to convey [type parameters](type-params.md), e.g. `/Counter+~x`. 28 | -------------------------------------------------------------------------------- /replica.md: -------------------------------------------------------------------------------- 1 | # Swarm replicas 2 | 3 | The Swarm core itself assumes the role of a *peer* as a node that keeps the full operation log of the database. 4 | Peers can serve *clients* that have either a full log or (most often) an arbitrary subset of objects. 5 | For the op forwarding logic, the nature of peers is irrelevant. 6 | It may be a centrally administered set of geo-distributed servers or a network with [dynamic membership](peerage.md). 7 | [Base64x64 replica ids](stamp.md) assume a hierarchic *naming scheme* consisting of up to four components (chunks), denoted by chunk lengths, like: 8 | * `0280` (2 chars for a peer id chunk, 8 for client id chunk) 9 | * `0262` (2 for peers, 6 for clients, 2 for a client's sessions) 10 | * `1261` (1 char for [primus id](peerage.md), 2 for peers, etc) 11 | 12 | Tailing chunks can be unfilled (zero) and thus omitted. 13 | A filled id chunk is never zero. 14 | For example, in the `0262` scheme, a client is identified with a 0+2+6=8 char long Base64x64 number, but that id does not correspond to any actual replica, as actual replicas have non-zero session ids. 15 | In the same scheme, a peer has an identifier of 2 chars, and that identifier corresponds to an actual replica with a certain [op](op.md) arrival order. 16 | 17 | ## Primuses 18 | 19 | Primuses is an optional layer of "true" peers, mostly meaningful in dynamic-membership networks. 20 | The term is borrowed from the Latin formula `primus inter pares`. 21 | Primuses must all recognize each other, e.g. cryptographically sign each other's signatures. 22 | Any primus MUST be able to connect to any other primus any time, should the need arise. 23 | Primuses may introduce new peers that can connect to any other peers. 24 | The all-know-all pattern has its scalability limits, hence primus id chunk is 0-2 chars. 25 | 26 | ## Peers 27 | 28 | Peers possess a full replica of a database and a full log. 29 | A peer MUST have at least one live connection to some other peer. 30 | Peers are generally not supposed to be offline, unless in the case of catastrophic failure of the underlying infrastructure. 31 | Peers MAY connect to more peers and MAY accept connections from other peers. 32 | Peers can serve clients. 33 | Peers are the most flexible joint in this tree; a peer id chunk may be 0 to 10 chars. 34 | 35 | ## Clients 36 | 37 | A client has a partial replica of a database and a filtered log, provided by some peer. 38 | Clients can only synchronize with their upstream peers. 39 | Although there is a special technique to [move a client replica](handover.md) to a different peer, that is an exceptional situation. 40 | Note that clients can have the same id, when connected to a different pee, e.g. Xclient and Yclient, depending on [database options](options.md). 41 | A client chunk length is 0 to 2 chars (more than enough to number every person on the planet and every their hair). 42 | 43 | ## Sessions 44 | 45 | The same client (e.g. a person) can have multiple devices or multiple browser sessions. 46 | A client can open multiple sessions, all connected to the same peer. 47 | Although all those replicas have the same access rights, they are still different replicas with their own local op logs. 48 | Hence, they have different replica ids. 49 | As all the client's sessions are connected to the same peer, it is possible to recycle session ids by invalidating long-unseen sessions. 50 | 1-2 chars is enough for a session id chunk. 51 | -------------------------------------------------------------------------------- /spec-examples.md: -------------------------------------------------------------------------------- 1 | # Common message spec examples # 2 | 3 | ### Subscriptions 4 | 5 | /Swarm#database!0.on+0user fresh client subscribes 6 | /Swarm#database!stamp+Yorigin.on+YuserSSN client reconn (scoped on) 7 | /Swarm#database!now+Y.on+YuserNEW client reon 8 | /Swarm#database!0+X.on+Y peer Y bootstraps from X 9 | /Swarm#database!bMarkTime+X.on+Y peer Y reconnects to X 10 | /Swarm#database!bMarkTime+X.0+Y log bookmark from X to Y 11 | /Object#stamp+XauthorSSN!0.on client object sub 12 | /Object#stamp+XauthorSSN!versn+YauthrZZN.on client object re-sub 13 | /Object#stamp+XauthorSSN!pastTime.on log segment request 14 | 15 | ### Ops 16 | 17 | /RPC#endpoint+Z!stamp+XauthrSSN.method+Z RPC call 18 | /RPC#endpoint+Z!stamp+X1.stamp+XauthrSSN RPC response 19 | /Object#id!stamp+YauthrSsn.field LWW object write 20 | /Object+~o#id+author!stamp+orig.field type parameters 21 | 22 | ### Messages 23 | 24 | /Message#up!stamp+Ysender.msg+0user message to a user 25 | 26 | ### Source ids 27 | 28 | ~+X upstream 29 | stamp+XuserSsn client incoming 30 | stamp outgoing 31 | stamp+X peer incoming 32 | stamp+~ pre-handshake 33 | 0 internally generated 34 | 35 | ### Key-value db 36 | 37 | /Type#id!0-initOp+author.~ 38 | /Type#id!stamp+origin.op 39 | /Type#id!stampOver-reorderd+orgn.op 40 | /Type#id!~-stamp.~ 41 | -------------------------------------------------------------------------------- /test/64x64.batt: -------------------------------------------------------------------------------- 1 | ; print zero: base64x64, decimal 2 | 0 3 | 0 4 | 5 | ; print infinity: 64x64, decimal 6 | ~ 7 | 1134907106097364992 8 | 9 | ; print a non-numeric value: inf+1 (64, dec) 10 | ~000000001 11 | 1134907106097364993 12 | 13 | ; print "on" in decimal, base64x64 14 | 932808072819113984 15 | on 16 | 17 | ; convert "on00" to decimal (the same) 18 | 932808072819113984 19 | 20 | ; print all base64x64 numbers 0 to 64*64 (inclusive) 21 | 0 22 | 0000000001 23 | 0000000002 24 | 0000000003 25 | 0000000004 26 | 0000000005 27 | 0000000006 28 | 0000000007 29 | 0000000008 30 | 0000000009 31 | 000000000A 32 | 000000000B 33 | 000000000C 34 | 000000000D 35 | 000000000E 36 | 000000000F 37 | 000000000G 38 | 000000000H 39 | 000000000I 40 | 000000000J 41 | 000000000K 42 | 000000000L 43 | 000000000M 44 | 000000000N 45 | 000000000O 46 | 000000000P 47 | 000000000Q 48 | 000000000R 49 | 000000000S 50 | 000000000T 51 | 000000000U 52 | 000000000V 53 | 000000000W 54 | 000000000X 55 | 000000000Y 56 | 000000000Z 57 | 000000000_ 58 | 000000000a 59 | 000000000b 60 | 000000000c 61 | 000000000d 62 | 000000000e 63 | 000000000f 64 | 000000000g 65 | 000000000h 66 | 000000000i 67 | 000000000j 68 | 000000000k 69 | 000000000l 70 | 000000000m 71 | 000000000n 72 | 000000000o 73 | 000000000p 74 | 000000000q 75 | 000000000r 76 | 000000000s 77 | 000000000t 78 | 000000000u 79 | 000000000v 80 | 000000000w 81 | 000000000x 82 | 000000000y 83 | 000000000z 84 | 000000000~ 85 | 000000001 86 | 0000000011 87 | 0000000012 88 | 0000000013 89 | 0000000014 90 | 0000000015 91 | 0000000016 92 | 0000000017 93 | 0000000018 94 | 0000000019 95 | 000000001A 96 | 000000001B 97 | 000000001C 98 | 000000001D 99 | 000000001E 100 | 000000001F 101 | 000000001G 102 | 000000001H 103 | 000000001I 104 | 000000001J 105 | 000000001K 106 | 000000001L 107 | 000000001M 108 | 000000001N 109 | 000000001O 110 | 000000001P 111 | 000000001Q 112 | 000000001R 113 | 000000001S 114 | 000000001T 115 | 000000001U 116 | 000000001V 117 | 000000001W 118 | 000000001X 119 | 000000001Y 120 | 000000001Z 121 | 000000001_ 122 | 000000001a 123 | 000000001b 124 | 000000001c 125 | 000000001d 126 | 000000001e 127 | 000000001f 128 | 000000001g 129 | 000000001h 130 | 000000001i 131 | 000000001j 132 | 000000001k 133 | 000000001l 134 | 000000001m 135 | 000000001n 136 | 000000001o 137 | 000000001p 138 | 000000001q 139 | 000000001r 140 | 000000001s 141 | 000000001t 142 | 000000001u 143 | 000000001v 144 | 000000001w 145 | 000000001x 146 | 000000001y 147 | 000000001z 148 | 000000001~ 149 | 000000002 150 | 0000000021 151 | 0000000022 152 | 0000000023 153 | 0000000024 154 | 0000000025 155 | 0000000026 156 | 0000000027 157 | 0000000028 158 | 0000000029 159 | 000000002A 160 | 000000002B 161 | 000000002C 162 | 000000002D 163 | 000000002E 164 | 000000002F 165 | 000000002G 166 | 000000002H 167 | 000000002I 168 | 000000002J 169 | 000000002K 170 | 000000002L 171 | 000000002M 172 | 000000002N 173 | 000000002O 174 | 000000002P 175 | 000000002Q 176 | 000000002R 177 | 000000002S 178 | 000000002T 179 | 000000002U 180 | 000000002V 181 | 000000002W 182 | 000000002X 183 | 000000002Y 184 | 000000002Z 185 | 000000002_ 186 | 000000002a 187 | 000000002b 188 | 000000002c 189 | 000000002d 190 | 000000002e 191 | 000000002f 192 | 000000002g 193 | 000000002h 194 | 000000002i 195 | 000000002j 196 | 000000002k 197 | 000000002l 198 | 000000002m 199 | 000000002n 200 | 000000002o 201 | 000000002p 202 | 000000002q 203 | 000000002r 204 | 000000002s 205 | 000000002t 206 | 000000002u 207 | 000000002v 208 | 000000002w 209 | 000000002x 210 | 000000002y 211 | 000000002z 212 | 000000002~ 213 | 000000003 214 | 0000000031 215 | 0000000032 216 | 0000000033 217 | 0000000034 218 | 0000000035 219 | 0000000036 220 | 0000000037 221 | 0000000038 222 | 0000000039 223 | 000000003A 224 | 000000003B 225 | 000000003C 226 | 000000003D 227 | 000000003E 228 | 000000003F 229 | 000000003G 230 | 000000003H 231 | 000000003I 232 | 000000003J 233 | 000000003K 234 | 000000003L 235 | 000000003M 236 | 000000003N 237 | 000000003O 238 | 000000003P 239 | 000000003Q 240 | 000000003R 241 | 000000003S 242 | 000000003T 243 | 000000003U 244 | 000000003V 245 | 000000003W 246 | 000000003X 247 | 000000003Y 248 | 000000003Z 249 | 000000003_ 250 | 000000003a 251 | 000000003b 252 | 000000003c 253 | 000000003d 254 | 000000003e 255 | 000000003f 256 | 000000003g 257 | 000000003h 258 | 000000003i 259 | 000000003j 260 | 000000003k 261 | 000000003l 262 | 000000003m 263 | 000000003n 264 | 000000003o 265 | 000000003p 266 | 000000003q 267 | 000000003r 268 | 000000003s 269 | 000000003t 270 | 000000003u 271 | 000000003v 272 | 000000003w 273 | 000000003x 274 | 000000003y 275 | 000000003z 276 | 000000003~ 277 | 000000004 278 | 0000000041 279 | 0000000042 280 | 0000000043 281 | 0000000044 282 | 0000000045 283 | 0000000046 284 | 0000000047 285 | 0000000048 286 | 0000000049 287 | 000000004A 288 | 000000004B 289 | 000000004C 290 | 000000004D 291 | 000000004E 292 | 000000004F 293 | 000000004G 294 | 000000004H 295 | 000000004I 296 | 000000004J 297 | 000000004K 298 | 000000004L 299 | 000000004M 300 | 000000004N 301 | 000000004O 302 | 000000004P 303 | 000000004Q 304 | 000000004R 305 | 000000004S 306 | 000000004T 307 | 000000004U 308 | 000000004V 309 | 000000004W 310 | 000000004X 311 | 000000004Y 312 | 000000004Z 313 | 000000004_ 314 | 000000004a 315 | 000000004b 316 | 000000004c 317 | 000000004d 318 | 000000004e 319 | 000000004f 320 | 000000004g 321 | 000000004h 322 | 000000004i 323 | 000000004j 324 | 000000004k 325 | 000000004l 326 | 000000004m 327 | 000000004n 328 | 000000004o 329 | 000000004p 330 | 000000004q 331 | 000000004r 332 | 000000004s 333 | 000000004t 334 | 000000004u 335 | 000000004v 336 | 000000004w 337 | 000000004x 338 | 000000004y 339 | 000000004z 340 | 000000004~ 341 | 000000005 342 | 0000000051 343 | 0000000052 344 | 0000000053 345 | 0000000054 346 | 0000000055 347 | 0000000056 348 | 0000000057 349 | 0000000058 350 | 0000000059 351 | 000000005A 352 | 000000005B 353 | 000000005C 354 | 000000005D 355 | 000000005E 356 | 000000005F 357 | 000000005G 358 | 000000005H 359 | 000000005I 360 | 000000005J 361 | 000000005K 362 | 000000005L 363 | 000000005M 364 | 000000005N 365 | 000000005O 366 | 000000005P 367 | 000000005Q 368 | 000000005R 369 | 000000005S 370 | 000000005T 371 | 000000005U 372 | 000000005V 373 | 000000005W 374 | 000000005X 375 | 000000005Y 376 | 000000005Z 377 | 000000005_ 378 | 000000005a 379 | 000000005b 380 | 000000005c 381 | 000000005d 382 | 000000005e 383 | 000000005f 384 | 000000005g 385 | 000000005h 386 | 000000005i 387 | 000000005j 388 | 000000005k 389 | 000000005l 390 | 000000005m 391 | 000000005n 392 | 000000005o 393 | 000000005p 394 | 000000005q 395 | 000000005r 396 | 000000005s 397 | 000000005t 398 | 000000005u 399 | 000000005v 400 | 000000005w 401 | 000000005x 402 | 000000005y 403 | 000000005z 404 | 000000005~ 405 | 000000006 406 | 0000000061 407 | 0000000062 408 | 0000000063 409 | 0000000064 410 | 0000000065 411 | 0000000066 412 | 0000000067 413 | 0000000068 414 | 0000000069 415 | 000000006A 416 | 000000006B 417 | 000000006C 418 | 000000006D 419 | 000000006E 420 | 000000006F 421 | 000000006G 422 | 000000006H 423 | 000000006I 424 | 000000006J 425 | 000000006K 426 | 000000006L 427 | 000000006M 428 | 000000006N 429 | 000000006O 430 | 000000006P 431 | 000000006Q 432 | 000000006R 433 | 000000006S 434 | 000000006T 435 | 000000006U 436 | 000000006V 437 | 000000006W 438 | 000000006X 439 | 000000006Y 440 | 000000006Z 441 | 000000006_ 442 | 000000006a 443 | 000000006b 444 | 000000006c 445 | 000000006d 446 | 000000006e 447 | 000000006f 448 | 000000006g 449 | 000000006h 450 | 000000006i 451 | 000000006j 452 | 000000006k 453 | 000000006l 454 | 000000006m 455 | 000000006n 456 | 000000006o 457 | 000000006p 458 | 000000006q 459 | 000000006r 460 | 000000006s 461 | 000000006t 462 | 000000006u 463 | 000000006v 464 | 000000006w 465 | 000000006x 466 | 000000006y 467 | 000000006z 468 | 000000006~ 469 | 000000007 470 | 0000000071 471 | 0000000072 472 | 0000000073 473 | 0000000074 474 | 0000000075 475 | 0000000076 476 | 0000000077 477 | 0000000078 478 | 0000000079 479 | 000000007A 480 | 000000007B 481 | 000000007C 482 | 000000007D 483 | 000000007E 484 | 000000007F 485 | 000000007G 486 | 000000007H 487 | 000000007I 488 | 000000007J 489 | 000000007K 490 | 000000007L 491 | 000000007M 492 | 000000007N 493 | 000000007O 494 | 000000007P 495 | 000000007Q 496 | 000000007R 497 | 000000007S 498 | 000000007T 499 | 000000007U 500 | 000000007V 501 | 000000007W 502 | 000000007X 503 | 000000007Y 504 | 000000007Z 505 | 000000007_ 506 | 000000007a 507 | 000000007b 508 | 000000007c 509 | 000000007d 510 | 000000007e 511 | 000000007f 512 | 000000007g 513 | 000000007h 514 | 000000007i 515 | 000000007j 516 | 000000007k 517 | 000000007l 518 | 000000007m 519 | 000000007n 520 | 000000007o 521 | 000000007p 522 | 000000007q 523 | 000000007r 524 | 000000007s 525 | 000000007t 526 | 000000007u 527 | 000000007v 528 | 000000007w 529 | 000000007x 530 | 000000007y 531 | 000000007z 532 | 000000007~ 533 | 000000008 534 | 0000000081 535 | 0000000082 536 | 0000000083 537 | 0000000084 538 | 0000000085 539 | 0000000086 540 | 0000000087 541 | 0000000088 542 | 0000000089 543 | 000000008A 544 | 000000008B 545 | 000000008C 546 | 000000008D 547 | 000000008E 548 | 000000008F 549 | 000000008G 550 | 000000008H 551 | 000000008I 552 | 000000008J 553 | 000000008K 554 | 000000008L 555 | 000000008M 556 | 000000008N 557 | 000000008O 558 | 000000008P 559 | 000000008Q 560 | 000000008R 561 | 000000008S 562 | 000000008T 563 | 000000008U 564 | 000000008V 565 | 000000008W 566 | 000000008X 567 | 000000008Y 568 | 000000008Z 569 | 000000008_ 570 | 000000008a 571 | 000000008b 572 | 000000008c 573 | 000000008d 574 | 000000008e 575 | 000000008f 576 | 000000008g 577 | 000000008h 578 | 000000008i 579 | 000000008j 580 | 000000008k 581 | 000000008l 582 | 000000008m 583 | 000000008n 584 | 000000008o 585 | 000000008p 586 | 000000008q 587 | 000000008r 588 | 000000008s 589 | 000000008t 590 | 000000008u 591 | 000000008v 592 | 000000008w 593 | 000000008x 594 | 000000008y 595 | 000000008z 596 | 000000008~ 597 | 000000009 598 | 0000000091 599 | 0000000092 600 | 0000000093 601 | 0000000094 602 | 0000000095 603 | 0000000096 604 | 0000000097 605 | 0000000098 606 | 0000000099 607 | 000000009A 608 | 000000009B 609 | 000000009C 610 | 000000009D 611 | 000000009E 612 | 000000009F 613 | 000000009G 614 | 000000009H 615 | 000000009I 616 | 000000009J 617 | 000000009K 618 | 000000009L 619 | 000000009M 620 | 000000009N 621 | 000000009O 622 | 000000009P 623 | 000000009Q 624 | 000000009R 625 | 000000009S 626 | 000000009T 627 | 000000009U 628 | 000000009V 629 | 000000009W 630 | 000000009X 631 | 000000009Y 632 | 000000009Z 633 | 000000009_ 634 | 000000009a 635 | 000000009b 636 | 000000009c 637 | 000000009d 638 | 000000009e 639 | 000000009f 640 | 000000009g 641 | 000000009h 642 | 000000009i 643 | 000000009j 644 | 000000009k 645 | 000000009l 646 | 000000009m 647 | 000000009n 648 | 000000009o 649 | 000000009p 650 | 000000009q 651 | 000000009r 652 | 000000009s 653 | 000000009t 654 | 000000009u 655 | 000000009v 656 | 000000009w 657 | 000000009x 658 | 000000009y 659 | 000000009z 660 | 000000009~ 661 | 00000000A 662 | 00000000A1 663 | 00000000A2 664 | 00000000A3 665 | 00000000A4 666 | 00000000A5 667 | 00000000A6 668 | 00000000A7 669 | 00000000A8 670 | 00000000A9 671 | 00000000AA 672 | 00000000AB 673 | 00000000AC 674 | 00000000AD 675 | 00000000AE 676 | 00000000AF 677 | 00000000AG 678 | 00000000AH 679 | 00000000AI 680 | 00000000AJ 681 | 00000000AK 682 | 00000000AL 683 | 00000000AM 684 | 00000000AN 685 | 00000000AO 686 | 00000000AP 687 | 00000000AQ 688 | 00000000AR 689 | 00000000AS 690 | 00000000AT 691 | 00000000AU 692 | 00000000AV 693 | 00000000AW 694 | 00000000AX 695 | 00000000AY 696 | 00000000AZ 697 | 00000000A_ 698 | 00000000Aa 699 | 00000000Ab 700 | 00000000Ac 701 | 00000000Ad 702 | 00000000Ae 703 | 00000000Af 704 | 00000000Ag 705 | 00000000Ah 706 | 00000000Ai 707 | 00000000Aj 708 | 00000000Ak 709 | 00000000Al 710 | 00000000Am 711 | 00000000An 712 | 00000000Ao 713 | 00000000Ap 714 | 00000000Aq 715 | 00000000Ar 716 | 00000000As 717 | 00000000At 718 | 00000000Au 719 | 00000000Av 720 | 00000000Aw 721 | 00000000Ax 722 | 00000000Ay 723 | 00000000Az 724 | 00000000A~ 725 | 00000000B 726 | 00000000B1 727 | 00000000B2 728 | 00000000B3 729 | 00000000B4 730 | 00000000B5 731 | 00000000B6 732 | 00000000B7 733 | 00000000B8 734 | 00000000B9 735 | 00000000BA 736 | 00000000BB 737 | 00000000BC 738 | 00000000BD 739 | 00000000BE 740 | 00000000BF 741 | 00000000BG 742 | 00000000BH 743 | 00000000BI 744 | 00000000BJ 745 | 00000000BK 746 | 00000000BL 747 | 00000000BM 748 | 00000000BN 749 | 00000000BO 750 | 00000000BP 751 | 00000000BQ 752 | 00000000BR 753 | 00000000BS 754 | 00000000BT 755 | 00000000BU 756 | 00000000BV 757 | 00000000BW 758 | 00000000BX 759 | 00000000BY 760 | 00000000BZ 761 | 00000000B_ 762 | 00000000Ba 763 | 00000000Bb 764 | 00000000Bc 765 | 00000000Bd 766 | 00000000Be 767 | 00000000Bf 768 | 00000000Bg 769 | 00000000Bh 770 | 00000000Bi 771 | 00000000Bj 772 | 00000000Bk 773 | 00000000Bl 774 | 00000000Bm 775 | 00000000Bn 776 | 00000000Bo 777 | 00000000Bp 778 | 00000000Bq 779 | 00000000Br 780 | 00000000Bs 781 | 00000000Bt 782 | 00000000Bu 783 | 00000000Bv 784 | 00000000Bw 785 | 00000000Bx 786 | 00000000By 787 | 00000000Bz 788 | 00000000B~ 789 | 00000000C 790 | 00000000C1 791 | 00000000C2 792 | 00000000C3 793 | 00000000C4 794 | 00000000C5 795 | 00000000C6 796 | 00000000C7 797 | 00000000C8 798 | 00000000C9 799 | 00000000CA 800 | 00000000CB 801 | 00000000CC 802 | 00000000CD 803 | 00000000CE 804 | 00000000CF 805 | 00000000CG 806 | 00000000CH 807 | 00000000CI 808 | 00000000CJ 809 | 00000000CK 810 | 00000000CL 811 | 00000000CM 812 | 00000000CN 813 | 00000000CO 814 | 00000000CP 815 | 00000000CQ 816 | 00000000CR 817 | 00000000CS 818 | 00000000CT 819 | 00000000CU 820 | 00000000CV 821 | 00000000CW 822 | 00000000CX 823 | 00000000CY 824 | 00000000CZ 825 | 00000000C_ 826 | 00000000Ca 827 | 00000000Cb 828 | 00000000Cc 829 | 00000000Cd 830 | 00000000Ce 831 | 00000000Cf 832 | 00000000Cg 833 | 00000000Ch 834 | 00000000Ci 835 | 00000000Cj 836 | 00000000Ck 837 | 00000000Cl 838 | 00000000Cm 839 | 00000000Cn 840 | 00000000Co 841 | 00000000Cp 842 | 00000000Cq 843 | 00000000Cr 844 | 00000000Cs 845 | 00000000Ct 846 | 00000000Cu 847 | 00000000Cv 848 | 00000000Cw 849 | 00000000Cx 850 | 00000000Cy 851 | 00000000Cz 852 | 00000000C~ 853 | 00000000D 854 | 00000000D1 855 | 00000000D2 856 | 00000000D3 857 | 00000000D4 858 | 00000000D5 859 | 00000000D6 860 | 00000000D7 861 | 00000000D8 862 | 00000000D9 863 | 00000000DA 864 | 00000000DB 865 | 00000000DC 866 | 00000000DD 867 | 00000000DE 868 | 00000000DF 869 | 00000000DG 870 | 00000000DH 871 | 00000000DI 872 | 00000000DJ 873 | 00000000DK 874 | 00000000DL 875 | 00000000DM 876 | 00000000DN 877 | 00000000DO 878 | 00000000DP 879 | 00000000DQ 880 | 00000000DR 881 | 00000000DS 882 | 00000000DT 883 | 00000000DU 884 | 00000000DV 885 | 00000000DW 886 | 00000000DX 887 | 00000000DY 888 | 00000000DZ 889 | 00000000D_ 890 | 00000000Da 891 | 00000000Db 892 | 00000000Dc 893 | 00000000Dd 894 | 00000000De 895 | 00000000Df 896 | 00000000Dg 897 | 00000000Dh 898 | 00000000Di 899 | 00000000Dj 900 | 00000000Dk 901 | 00000000Dl 902 | 00000000Dm 903 | 00000000Dn 904 | 00000000Do 905 | 00000000Dp 906 | 00000000Dq 907 | 00000000Dr 908 | 00000000Ds 909 | 00000000Dt 910 | 00000000Du 911 | 00000000Dv 912 | 00000000Dw 913 | 00000000Dx 914 | 00000000Dy 915 | 00000000Dz 916 | 00000000D~ 917 | 00000000E 918 | 00000000E1 919 | 00000000E2 920 | 00000000E3 921 | 00000000E4 922 | 00000000E5 923 | 00000000E6 924 | 00000000E7 925 | 00000000E8 926 | 00000000E9 927 | 00000000EA 928 | 00000000EB 929 | 00000000EC 930 | 00000000ED 931 | 00000000EE 932 | 00000000EF 933 | 00000000EG 934 | 00000000EH 935 | 00000000EI 936 | 00000000EJ 937 | 00000000EK 938 | 00000000EL 939 | 00000000EM 940 | 00000000EN 941 | 00000000EO 942 | 00000000EP 943 | 00000000EQ 944 | 00000000ER 945 | 00000000ES 946 | 00000000ET 947 | 00000000EU 948 | 00000000EV 949 | 00000000EW 950 | 00000000EX 951 | 00000000EY 952 | 00000000EZ 953 | 00000000E_ 954 | 00000000Ea 955 | 00000000Eb 956 | 00000000Ec 957 | 00000000Ed 958 | 00000000Ee 959 | 00000000Ef 960 | 00000000Eg 961 | 00000000Eh 962 | 00000000Ei 963 | 00000000Ej 964 | 00000000Ek 965 | 00000000El 966 | 00000000Em 967 | 00000000En 968 | 00000000Eo 969 | 00000000Ep 970 | 00000000Eq 971 | 00000000Er 972 | 00000000Es 973 | 00000000Et 974 | 00000000Eu 975 | 00000000Ev 976 | 00000000Ew 977 | 00000000Ex 978 | 00000000Ey 979 | 00000000Ez 980 | 00000000E~ 981 | 00000000F 982 | 00000000F1 983 | 00000000F2 984 | 00000000F3 985 | 00000000F4 986 | 00000000F5 987 | 00000000F6 988 | 00000000F7 989 | 00000000F8 990 | 00000000F9 991 | 00000000FA 992 | 00000000FB 993 | 00000000FC 994 | 00000000FD 995 | 00000000FE 996 | 00000000FF 997 | 00000000FG 998 | 00000000FH 999 | 00000000FI 1000 | 00000000FJ 1001 | 00000000FK 1002 | 00000000FL 1003 | 00000000FM 1004 | 00000000FN 1005 | 00000000FO 1006 | 00000000FP 1007 | 00000000FQ 1008 | 00000000FR 1009 | 00000000FS 1010 | 00000000FT 1011 | 00000000FU 1012 | 00000000FV 1013 | 00000000FW 1014 | 00000000FX 1015 | 00000000FY 1016 | 00000000FZ 1017 | 00000000F_ 1018 | 00000000Fa 1019 | 00000000Fb 1020 | 00000000Fc 1021 | 00000000Fd 1022 | 00000000Fe 1023 | 00000000Ff 1024 | 00000000Fg 1025 | 00000000Fh 1026 | 00000000Fi 1027 | 00000000Fj 1028 | 00000000Fk 1029 | 00000000Fl 1030 | 00000000Fm 1031 | 00000000Fn 1032 | 00000000Fo 1033 | 00000000Fp 1034 | 00000000Fq 1035 | 00000000Fr 1036 | 00000000Fs 1037 | 00000000Ft 1038 | 00000000Fu 1039 | 00000000Fv 1040 | 00000000Fw 1041 | 00000000Fx 1042 | 00000000Fy 1043 | 00000000Fz 1044 | 00000000F~ 1045 | 00000000G 1046 | 00000000G1 1047 | 00000000G2 1048 | 00000000G3 1049 | 00000000G4 1050 | 00000000G5 1051 | 00000000G6 1052 | 00000000G7 1053 | 00000000G8 1054 | 00000000G9 1055 | 00000000GA 1056 | 00000000GB 1057 | 00000000GC 1058 | 00000000GD 1059 | 00000000GE 1060 | 00000000GF 1061 | 00000000GG 1062 | 00000000GH 1063 | 00000000GI 1064 | 00000000GJ 1065 | 00000000GK 1066 | 00000000GL 1067 | 00000000GM 1068 | 00000000GN 1069 | 00000000GO 1070 | 00000000GP 1071 | 00000000GQ 1072 | 00000000GR 1073 | 00000000GS 1074 | 00000000GT 1075 | 00000000GU 1076 | 00000000GV 1077 | 00000000GW 1078 | 00000000GX 1079 | 00000000GY 1080 | 00000000GZ 1081 | 00000000G_ 1082 | 00000000Ga 1083 | 00000000Gb 1084 | 00000000Gc 1085 | 00000000Gd 1086 | 00000000Ge 1087 | 00000000Gf 1088 | 00000000Gg 1089 | 00000000Gh 1090 | 00000000Gi 1091 | 00000000Gj 1092 | 00000000Gk 1093 | 00000000Gl 1094 | 00000000Gm 1095 | 00000000Gn 1096 | 00000000Go 1097 | 00000000Gp 1098 | 00000000Gq 1099 | 00000000Gr 1100 | 00000000Gs 1101 | 00000000Gt 1102 | 00000000Gu 1103 | 00000000Gv 1104 | 00000000Gw 1105 | 00000000Gx 1106 | 00000000Gy 1107 | 00000000Gz 1108 | 00000000G~ 1109 | 00000000H 1110 | 00000000H1 1111 | 00000000H2 1112 | 00000000H3 1113 | 00000000H4 1114 | 00000000H5 1115 | 00000000H6 1116 | 00000000H7 1117 | 00000000H8 1118 | 00000000H9 1119 | 00000000HA 1120 | 00000000HB 1121 | 00000000HC 1122 | 00000000HD 1123 | 00000000HE 1124 | 00000000HF 1125 | 00000000HG 1126 | 00000000HH 1127 | 00000000HI 1128 | 00000000HJ 1129 | 00000000HK 1130 | 00000000HL 1131 | 00000000HM 1132 | 00000000HN 1133 | 00000000HO 1134 | 00000000HP 1135 | 00000000HQ 1136 | 00000000HR 1137 | 00000000HS 1138 | 00000000HT 1139 | 00000000HU 1140 | 00000000HV 1141 | 00000000HW 1142 | 00000000HX 1143 | 00000000HY 1144 | 00000000HZ 1145 | 00000000H_ 1146 | 00000000Ha 1147 | 00000000Hb 1148 | 00000000Hc 1149 | 00000000Hd 1150 | 00000000He 1151 | 00000000Hf 1152 | 00000000Hg 1153 | 00000000Hh 1154 | 00000000Hi 1155 | 00000000Hj 1156 | 00000000Hk 1157 | 00000000Hl 1158 | 00000000Hm 1159 | 00000000Hn 1160 | 00000000Ho 1161 | 00000000Hp 1162 | 00000000Hq 1163 | 00000000Hr 1164 | 00000000Hs 1165 | 00000000Ht 1166 | 00000000Hu 1167 | 00000000Hv 1168 | 00000000Hw 1169 | 00000000Hx 1170 | 00000000Hy 1171 | 00000000Hz 1172 | 00000000H~ 1173 | 00000000I 1174 | 00000000I1 1175 | 00000000I2 1176 | 00000000I3 1177 | 00000000I4 1178 | 00000000I5 1179 | 00000000I6 1180 | 00000000I7 1181 | 00000000I8 1182 | 00000000I9 1183 | 00000000IA 1184 | 00000000IB 1185 | 00000000IC 1186 | 00000000ID 1187 | 00000000IE 1188 | 00000000IF 1189 | 00000000IG 1190 | 00000000IH 1191 | 00000000II 1192 | 00000000IJ 1193 | 00000000IK 1194 | 00000000IL 1195 | 00000000IM 1196 | 00000000IN 1197 | 00000000IO 1198 | 00000000IP 1199 | 00000000IQ 1200 | 00000000IR 1201 | 00000000IS 1202 | 00000000IT 1203 | 00000000IU 1204 | 00000000IV 1205 | 00000000IW 1206 | 00000000IX 1207 | 00000000IY 1208 | 00000000IZ 1209 | 00000000I_ 1210 | 00000000Ia 1211 | 00000000Ib 1212 | 00000000Ic 1213 | 00000000Id 1214 | 00000000Ie 1215 | 00000000If 1216 | 00000000Ig 1217 | 00000000Ih 1218 | 00000000Ii 1219 | 00000000Ij 1220 | 00000000Ik 1221 | 00000000Il 1222 | 00000000Im 1223 | 00000000In 1224 | 00000000Io 1225 | 00000000Ip 1226 | 00000000Iq 1227 | 00000000Ir 1228 | 00000000Is 1229 | 00000000It 1230 | 00000000Iu 1231 | 00000000Iv 1232 | 00000000Iw 1233 | 00000000Ix 1234 | 00000000Iy 1235 | 00000000Iz 1236 | 00000000I~ 1237 | 00000000J 1238 | 00000000J1 1239 | 00000000J2 1240 | 00000000J3 1241 | 00000000J4 1242 | 00000000J5 1243 | 00000000J6 1244 | 00000000J7 1245 | 00000000J8 1246 | 00000000J9 1247 | 00000000JA 1248 | 00000000JB 1249 | 00000000JC 1250 | 00000000JD 1251 | 00000000JE 1252 | 00000000JF 1253 | 00000000JG 1254 | 00000000JH 1255 | 00000000JI 1256 | 00000000JJ 1257 | 00000000JK 1258 | 00000000JL 1259 | 00000000JM 1260 | 00000000JN 1261 | 00000000JO 1262 | 00000000JP 1263 | 00000000JQ 1264 | 00000000JR 1265 | 00000000JS 1266 | 00000000JT 1267 | 00000000JU 1268 | 00000000JV 1269 | 00000000JW 1270 | 00000000JX 1271 | 00000000JY 1272 | 00000000JZ 1273 | 00000000J_ 1274 | 00000000Ja 1275 | 00000000Jb 1276 | 00000000Jc 1277 | 00000000Jd 1278 | 00000000Je 1279 | 00000000Jf 1280 | 00000000Jg 1281 | 00000000Jh 1282 | 00000000Ji 1283 | 00000000Jj 1284 | 00000000Jk 1285 | 00000000Jl 1286 | 00000000Jm 1287 | 00000000Jn 1288 | 00000000Jo 1289 | 00000000Jp 1290 | 00000000Jq 1291 | 00000000Jr 1292 | 00000000Js 1293 | 00000000Jt 1294 | 00000000Ju 1295 | 00000000Jv 1296 | 00000000Jw 1297 | 00000000Jx 1298 | 00000000Jy 1299 | 00000000Jz 1300 | 00000000J~ 1301 | 00000000K 1302 | 00000000K1 1303 | 00000000K2 1304 | 00000000K3 1305 | 00000000K4 1306 | 00000000K5 1307 | 00000000K6 1308 | 00000000K7 1309 | 00000000K8 1310 | 00000000K9 1311 | 00000000KA 1312 | 00000000KB 1313 | 00000000KC 1314 | 00000000KD 1315 | 00000000KE 1316 | 00000000KF 1317 | 00000000KG 1318 | 00000000KH 1319 | 00000000KI 1320 | 00000000KJ 1321 | 00000000KK 1322 | 00000000KL 1323 | 00000000KM 1324 | 00000000KN 1325 | 00000000KO 1326 | 00000000KP 1327 | 00000000KQ 1328 | 00000000KR 1329 | 00000000KS 1330 | 00000000KT 1331 | 00000000KU 1332 | 00000000KV 1333 | 00000000KW 1334 | 00000000KX 1335 | 00000000KY 1336 | 00000000KZ 1337 | 00000000K_ 1338 | 00000000Ka 1339 | 00000000Kb 1340 | 00000000Kc 1341 | 00000000Kd 1342 | 00000000Ke 1343 | 00000000Kf 1344 | 00000000Kg 1345 | 00000000Kh 1346 | 00000000Ki 1347 | 00000000Kj 1348 | 00000000Kk 1349 | 00000000Kl 1350 | 00000000Km 1351 | 00000000Kn 1352 | 00000000Ko 1353 | 00000000Kp 1354 | 00000000Kq 1355 | 00000000Kr 1356 | 00000000Ks 1357 | 00000000Kt 1358 | 00000000Ku 1359 | 00000000Kv 1360 | 00000000Kw 1361 | 00000000Kx 1362 | 00000000Ky 1363 | 00000000Kz 1364 | 00000000K~ 1365 | 00000000L 1366 | 00000000L1 1367 | 00000000L2 1368 | 00000000L3 1369 | 00000000L4 1370 | 00000000L5 1371 | 00000000L6 1372 | 00000000L7 1373 | 00000000L8 1374 | 00000000L9 1375 | 00000000LA 1376 | 00000000LB 1377 | 00000000LC 1378 | 00000000LD 1379 | 00000000LE 1380 | 00000000LF 1381 | 00000000LG 1382 | 00000000LH 1383 | 00000000LI 1384 | 00000000LJ 1385 | 00000000LK 1386 | 00000000LL 1387 | 00000000LM 1388 | 00000000LN 1389 | 00000000LO 1390 | 00000000LP 1391 | 00000000LQ 1392 | 00000000LR 1393 | 00000000LS 1394 | 00000000LT 1395 | 00000000LU 1396 | 00000000LV 1397 | 00000000LW 1398 | 00000000LX 1399 | 00000000LY 1400 | 00000000LZ 1401 | 00000000L_ 1402 | 00000000La 1403 | 00000000Lb 1404 | 00000000Lc 1405 | 00000000Ld 1406 | 00000000Le 1407 | 00000000Lf 1408 | 00000000Lg 1409 | 00000000Lh 1410 | 00000000Li 1411 | 00000000Lj 1412 | 00000000Lk 1413 | 00000000Ll 1414 | 00000000Lm 1415 | 00000000Ln 1416 | 00000000Lo 1417 | 00000000Lp 1418 | 00000000Lq 1419 | 00000000Lr 1420 | 00000000Ls 1421 | 00000000Lt 1422 | 00000000Lu 1423 | 00000000Lv 1424 | 00000000Lw 1425 | 00000000Lx 1426 | 00000000Ly 1427 | 00000000Lz 1428 | 00000000L~ 1429 | 00000000M 1430 | 00000000M1 1431 | 00000000M2 1432 | 00000000M3 1433 | 00000000M4 1434 | 00000000M5 1435 | 00000000M6 1436 | 00000000M7 1437 | 00000000M8 1438 | 00000000M9 1439 | 00000000MA 1440 | 00000000MB 1441 | 00000000MC 1442 | 00000000MD 1443 | 00000000ME 1444 | 00000000MF 1445 | 00000000MG 1446 | 00000000MH 1447 | 00000000MI 1448 | 00000000MJ 1449 | 00000000MK 1450 | 00000000ML 1451 | 00000000MM 1452 | 00000000MN 1453 | 00000000MO 1454 | 00000000MP 1455 | 00000000MQ 1456 | 00000000MR 1457 | 00000000MS 1458 | 00000000MT 1459 | 00000000MU 1460 | 00000000MV 1461 | 00000000MW 1462 | 00000000MX 1463 | 00000000MY 1464 | 00000000MZ 1465 | 00000000M_ 1466 | 00000000Ma 1467 | 00000000Mb 1468 | 00000000Mc 1469 | 00000000Md 1470 | 00000000Me 1471 | 00000000Mf 1472 | 00000000Mg 1473 | 00000000Mh 1474 | 00000000Mi 1475 | 00000000Mj 1476 | 00000000Mk 1477 | 00000000Ml 1478 | 00000000Mm 1479 | 00000000Mn 1480 | 00000000Mo 1481 | 00000000Mp 1482 | 00000000Mq 1483 | 00000000Mr 1484 | 00000000Ms 1485 | 00000000Mt 1486 | 00000000Mu 1487 | 00000000Mv 1488 | 00000000Mw 1489 | 00000000Mx 1490 | 00000000My 1491 | 00000000Mz 1492 | 00000000M~ 1493 | 00000000N 1494 | 00000000N1 1495 | 00000000N2 1496 | 00000000N3 1497 | 00000000N4 1498 | 00000000N5 1499 | 00000000N6 1500 | 00000000N7 1501 | 00000000N8 1502 | 00000000N9 1503 | 00000000NA 1504 | 00000000NB 1505 | 00000000NC 1506 | 00000000ND 1507 | 00000000NE 1508 | 00000000NF 1509 | 00000000NG 1510 | 00000000NH 1511 | 00000000NI 1512 | 00000000NJ 1513 | 00000000NK 1514 | 00000000NL 1515 | 00000000NM 1516 | 00000000NN 1517 | 00000000NO 1518 | 00000000NP 1519 | 00000000NQ 1520 | 00000000NR 1521 | 00000000NS 1522 | 00000000NT 1523 | 00000000NU 1524 | 00000000NV 1525 | 00000000NW 1526 | 00000000NX 1527 | 00000000NY 1528 | 00000000NZ 1529 | 00000000N_ 1530 | 00000000Na 1531 | 00000000Nb 1532 | 00000000Nc 1533 | 00000000Nd 1534 | 00000000Ne 1535 | 00000000Nf 1536 | 00000000Ng 1537 | 00000000Nh 1538 | 00000000Ni 1539 | 00000000Nj 1540 | 00000000Nk 1541 | 00000000Nl 1542 | 00000000Nm 1543 | 00000000Nn 1544 | 00000000No 1545 | 00000000Np 1546 | 00000000Nq 1547 | 00000000Nr 1548 | 00000000Ns 1549 | 00000000Nt 1550 | 00000000Nu 1551 | 00000000Nv 1552 | 00000000Nw 1553 | 00000000Nx 1554 | 00000000Ny 1555 | 00000000Nz 1556 | 00000000N~ 1557 | 00000000O 1558 | 00000000O1 1559 | 00000000O2 1560 | 00000000O3 1561 | 00000000O4 1562 | 00000000O5 1563 | 00000000O6 1564 | 00000000O7 1565 | 00000000O8 1566 | 00000000O9 1567 | 00000000OA 1568 | 00000000OB 1569 | 00000000OC 1570 | 00000000OD 1571 | 00000000OE 1572 | 00000000OF 1573 | 00000000OG 1574 | 00000000OH 1575 | 00000000OI 1576 | 00000000OJ 1577 | 00000000OK 1578 | 00000000OL 1579 | 00000000OM 1580 | 00000000ON 1581 | 00000000OO 1582 | 00000000OP 1583 | 00000000OQ 1584 | 00000000OR 1585 | 00000000OS 1586 | 00000000OT 1587 | 00000000OU 1588 | 00000000OV 1589 | 00000000OW 1590 | 00000000OX 1591 | 00000000OY 1592 | 00000000OZ 1593 | 00000000O_ 1594 | 00000000Oa 1595 | 00000000Ob 1596 | 00000000Oc 1597 | 00000000Od 1598 | 00000000Oe 1599 | 00000000Of 1600 | 00000000Og 1601 | 00000000Oh 1602 | 00000000Oi 1603 | 00000000Oj 1604 | 00000000Ok 1605 | 00000000Ol 1606 | 00000000Om 1607 | 00000000On 1608 | 00000000Oo 1609 | 00000000Op 1610 | 00000000Oq 1611 | 00000000Or 1612 | 00000000Os 1613 | 00000000Ot 1614 | 00000000Ou 1615 | 00000000Ov 1616 | 00000000Ow 1617 | 00000000Ox 1618 | 00000000Oy 1619 | 00000000Oz 1620 | 00000000O~ 1621 | 00000000P 1622 | 00000000P1 1623 | 00000000P2 1624 | 00000000P3 1625 | 00000000P4 1626 | 00000000P5 1627 | 00000000P6 1628 | 00000000P7 1629 | 00000000P8 1630 | 00000000P9 1631 | 00000000PA 1632 | 00000000PB 1633 | 00000000PC 1634 | 00000000PD 1635 | 00000000PE 1636 | 00000000PF 1637 | 00000000PG 1638 | 00000000PH 1639 | 00000000PI 1640 | 00000000PJ 1641 | 00000000PK 1642 | 00000000PL 1643 | 00000000PM 1644 | 00000000PN 1645 | 00000000PO 1646 | 00000000PP 1647 | 00000000PQ 1648 | 00000000PR 1649 | 00000000PS 1650 | 00000000PT 1651 | 00000000PU 1652 | 00000000PV 1653 | 00000000PW 1654 | 00000000PX 1655 | 00000000PY 1656 | 00000000PZ 1657 | 00000000P_ 1658 | 00000000Pa 1659 | 00000000Pb 1660 | 00000000Pc 1661 | 00000000Pd 1662 | 00000000Pe 1663 | 00000000Pf 1664 | 00000000Pg 1665 | 00000000Ph 1666 | 00000000Pi 1667 | 00000000Pj 1668 | 00000000Pk 1669 | 00000000Pl 1670 | 00000000Pm 1671 | 00000000Pn 1672 | 00000000Po 1673 | 00000000Pp 1674 | 00000000Pq 1675 | 00000000Pr 1676 | 00000000Ps 1677 | 00000000Pt 1678 | 00000000Pu 1679 | 00000000Pv 1680 | 00000000Pw 1681 | 00000000Px 1682 | 00000000Py 1683 | 00000000Pz 1684 | 00000000P~ 1685 | 00000000Q 1686 | 00000000Q1 1687 | 00000000Q2 1688 | 00000000Q3 1689 | 00000000Q4 1690 | 00000000Q5 1691 | 00000000Q6 1692 | 00000000Q7 1693 | 00000000Q8 1694 | 00000000Q9 1695 | 00000000QA 1696 | 00000000QB 1697 | 00000000QC 1698 | 00000000QD 1699 | 00000000QE 1700 | 00000000QF 1701 | 00000000QG 1702 | 00000000QH 1703 | 00000000QI 1704 | 00000000QJ 1705 | 00000000QK 1706 | 00000000QL 1707 | 00000000QM 1708 | 00000000QN 1709 | 00000000QO 1710 | 00000000QP 1711 | 00000000QQ 1712 | 00000000QR 1713 | 00000000QS 1714 | 00000000QT 1715 | 00000000QU 1716 | 00000000QV 1717 | 00000000QW 1718 | 00000000QX 1719 | 00000000QY 1720 | 00000000QZ 1721 | 00000000Q_ 1722 | 00000000Qa 1723 | 00000000Qb 1724 | 00000000Qc 1725 | 00000000Qd 1726 | 00000000Qe 1727 | 00000000Qf 1728 | 00000000Qg 1729 | 00000000Qh 1730 | 00000000Qi 1731 | 00000000Qj 1732 | 00000000Qk 1733 | 00000000Ql 1734 | 00000000Qm 1735 | 00000000Qn 1736 | 00000000Qo 1737 | 00000000Qp 1738 | 00000000Qq 1739 | 00000000Qr 1740 | 00000000Qs 1741 | 00000000Qt 1742 | 00000000Qu 1743 | 00000000Qv 1744 | 00000000Qw 1745 | 00000000Qx 1746 | 00000000Qy 1747 | 00000000Qz 1748 | 00000000Q~ 1749 | 00000000R 1750 | 00000000R1 1751 | 00000000R2 1752 | 00000000R3 1753 | 00000000R4 1754 | 00000000R5 1755 | 00000000R6 1756 | 00000000R7 1757 | 00000000R8 1758 | 00000000R9 1759 | 00000000RA 1760 | 00000000RB 1761 | 00000000RC 1762 | 00000000RD 1763 | 00000000RE 1764 | 00000000RF 1765 | 00000000RG 1766 | 00000000RH 1767 | 00000000RI 1768 | 00000000RJ 1769 | 00000000RK 1770 | 00000000RL 1771 | 00000000RM 1772 | 00000000RN 1773 | 00000000RO 1774 | 00000000RP 1775 | 00000000RQ 1776 | 00000000RR 1777 | 00000000RS 1778 | 00000000RT 1779 | 00000000RU 1780 | 00000000RV 1781 | 00000000RW 1782 | 00000000RX 1783 | 00000000RY 1784 | 00000000RZ 1785 | 00000000R_ 1786 | 00000000Ra 1787 | 00000000Rb 1788 | 00000000Rc 1789 | 00000000Rd 1790 | 00000000Re 1791 | 00000000Rf 1792 | 00000000Rg 1793 | 00000000Rh 1794 | 00000000Ri 1795 | 00000000Rj 1796 | 00000000Rk 1797 | 00000000Rl 1798 | 00000000Rm 1799 | 00000000Rn 1800 | 00000000Ro 1801 | 00000000Rp 1802 | 00000000Rq 1803 | 00000000Rr 1804 | 00000000Rs 1805 | 00000000Rt 1806 | 00000000Ru 1807 | 00000000Rv 1808 | 00000000Rw 1809 | 00000000Rx 1810 | 00000000Ry 1811 | 00000000Rz 1812 | 00000000R~ 1813 | 00000000S 1814 | 00000000S1 1815 | 00000000S2 1816 | 00000000S3 1817 | 00000000S4 1818 | 00000000S5 1819 | 00000000S6 1820 | 00000000S7 1821 | 00000000S8 1822 | 00000000S9 1823 | 00000000SA 1824 | 00000000SB 1825 | 00000000SC 1826 | 00000000SD 1827 | 00000000SE 1828 | 00000000SF 1829 | 00000000SG 1830 | 00000000SH 1831 | 00000000SI 1832 | 00000000SJ 1833 | 00000000SK 1834 | 00000000SL 1835 | 00000000SM 1836 | 00000000SN 1837 | 00000000SO 1838 | 00000000SP 1839 | 00000000SQ 1840 | 00000000SR 1841 | 00000000SS 1842 | 00000000ST 1843 | 00000000SU 1844 | 00000000SV 1845 | 00000000SW 1846 | 00000000SX 1847 | 00000000SY 1848 | 00000000SZ 1849 | 00000000S_ 1850 | 00000000Sa 1851 | 00000000Sb 1852 | 00000000Sc 1853 | 00000000Sd 1854 | 00000000Se 1855 | 00000000Sf 1856 | 00000000Sg 1857 | 00000000Sh 1858 | 00000000Si 1859 | 00000000Sj 1860 | 00000000Sk 1861 | 00000000Sl 1862 | 00000000Sm 1863 | 00000000Sn 1864 | 00000000So 1865 | 00000000Sp 1866 | 00000000Sq 1867 | 00000000Sr 1868 | 00000000Ss 1869 | 00000000St 1870 | 00000000Su 1871 | 00000000Sv 1872 | 00000000Sw 1873 | 00000000Sx 1874 | 00000000Sy 1875 | 00000000Sz 1876 | 00000000S~ 1877 | 00000000T 1878 | 00000000T1 1879 | 00000000T2 1880 | 00000000T3 1881 | 00000000T4 1882 | 00000000T5 1883 | 00000000T6 1884 | 00000000T7 1885 | 00000000T8 1886 | 00000000T9 1887 | 00000000TA 1888 | 00000000TB 1889 | 00000000TC 1890 | 00000000TD 1891 | 00000000TE 1892 | 00000000TF 1893 | 00000000TG 1894 | 00000000TH 1895 | 00000000TI 1896 | 00000000TJ 1897 | 00000000TK 1898 | 00000000TL 1899 | 00000000TM 1900 | 00000000TN 1901 | 00000000TO 1902 | 00000000TP 1903 | 00000000TQ 1904 | 00000000TR 1905 | 00000000TS 1906 | 00000000TT 1907 | 00000000TU 1908 | 00000000TV 1909 | 00000000TW 1910 | 00000000TX 1911 | 00000000TY 1912 | 00000000TZ 1913 | 00000000T_ 1914 | 00000000Ta 1915 | 00000000Tb 1916 | 00000000Tc 1917 | 00000000Td 1918 | 00000000Te 1919 | 00000000Tf 1920 | 00000000Tg 1921 | 00000000Th 1922 | 00000000Ti 1923 | 00000000Tj 1924 | 00000000Tk 1925 | 00000000Tl 1926 | 00000000Tm 1927 | 00000000Tn 1928 | 00000000To 1929 | 00000000Tp 1930 | 00000000Tq 1931 | 00000000Tr 1932 | 00000000Ts 1933 | 00000000Tt 1934 | 00000000Tu 1935 | 00000000Tv 1936 | 00000000Tw 1937 | 00000000Tx 1938 | 00000000Ty 1939 | 00000000Tz 1940 | 00000000T~ 1941 | 00000000U 1942 | 00000000U1 1943 | 00000000U2 1944 | 00000000U3 1945 | 00000000U4 1946 | 00000000U5 1947 | 00000000U6 1948 | 00000000U7 1949 | 00000000U8 1950 | 00000000U9 1951 | 00000000UA 1952 | 00000000UB 1953 | 00000000UC 1954 | 00000000UD 1955 | 00000000UE 1956 | 00000000UF 1957 | 00000000UG 1958 | 00000000UH 1959 | 00000000UI 1960 | 00000000UJ 1961 | 00000000UK 1962 | 00000000UL 1963 | 00000000UM 1964 | 00000000UN 1965 | 00000000UO 1966 | 00000000UP 1967 | 00000000UQ 1968 | 00000000UR 1969 | 00000000US 1970 | 00000000UT 1971 | 00000000UU 1972 | 00000000UV 1973 | 00000000UW 1974 | 00000000UX 1975 | 00000000UY 1976 | 00000000UZ 1977 | 00000000U_ 1978 | 00000000Ua 1979 | 00000000Ub 1980 | 00000000Uc 1981 | 00000000Ud 1982 | 00000000Ue 1983 | 00000000Uf 1984 | 00000000Ug 1985 | 00000000Uh 1986 | 00000000Ui 1987 | 00000000Uj 1988 | 00000000Uk 1989 | 00000000Ul 1990 | 00000000Um 1991 | 00000000Un 1992 | 00000000Uo 1993 | 00000000Up 1994 | 00000000Uq 1995 | 00000000Ur 1996 | 00000000Us 1997 | 00000000Ut 1998 | 00000000Uu 1999 | 00000000Uv 2000 | 00000000Uw 2001 | 00000000Ux 2002 | 00000000Uy 2003 | 00000000Uz 2004 | 00000000U~ 2005 | 00000000V 2006 | 00000000V1 2007 | 00000000V2 2008 | 00000000V3 2009 | 00000000V4 2010 | 00000000V5 2011 | 00000000V6 2012 | 00000000V7 2013 | 00000000V8 2014 | 00000000V9 2015 | 00000000VA 2016 | 00000000VB 2017 | 00000000VC 2018 | 00000000VD 2019 | 00000000VE 2020 | 00000000VF 2021 | 00000000VG 2022 | 00000000VH 2023 | 00000000VI 2024 | 00000000VJ 2025 | 00000000VK 2026 | 00000000VL 2027 | 00000000VM 2028 | 00000000VN 2029 | 00000000VO 2030 | 00000000VP 2031 | 00000000VQ 2032 | 00000000VR 2033 | 00000000VS 2034 | 00000000VT 2035 | 00000000VU 2036 | 00000000VV 2037 | 00000000VW 2038 | 00000000VX 2039 | 00000000VY 2040 | 00000000VZ 2041 | 00000000V_ 2042 | 00000000Va 2043 | 00000000Vb 2044 | 00000000Vc 2045 | 00000000Vd 2046 | 00000000Ve 2047 | 00000000Vf 2048 | 00000000Vg 2049 | 00000000Vh 2050 | 00000000Vi 2051 | 00000000Vj 2052 | 00000000Vk 2053 | 00000000Vl 2054 | 00000000Vm 2055 | 00000000Vn 2056 | 00000000Vo 2057 | 00000000Vp 2058 | 00000000Vq 2059 | 00000000Vr 2060 | 00000000Vs 2061 | 00000000Vt 2062 | 00000000Vu 2063 | 00000000Vv 2064 | 00000000Vw 2065 | 00000000Vx 2066 | 00000000Vy 2067 | 00000000Vz 2068 | 00000000V~ 2069 | 00000000W 2070 | 00000000W1 2071 | 00000000W2 2072 | 00000000W3 2073 | 00000000W4 2074 | 00000000W5 2075 | 00000000W6 2076 | 00000000W7 2077 | 00000000W8 2078 | 00000000W9 2079 | 00000000WA 2080 | 00000000WB 2081 | 00000000WC 2082 | 00000000WD 2083 | 00000000WE 2084 | 00000000WF 2085 | 00000000WG 2086 | 00000000WH 2087 | 00000000WI 2088 | 00000000WJ 2089 | 00000000WK 2090 | 00000000WL 2091 | 00000000WM 2092 | 00000000WN 2093 | 00000000WO 2094 | 00000000WP 2095 | 00000000WQ 2096 | 00000000WR 2097 | 00000000WS 2098 | 00000000WT 2099 | 00000000WU 2100 | 00000000WV 2101 | 00000000WW 2102 | 00000000WX 2103 | 00000000WY 2104 | 00000000WZ 2105 | 00000000W_ 2106 | 00000000Wa 2107 | 00000000Wb 2108 | 00000000Wc 2109 | 00000000Wd 2110 | 00000000We 2111 | 00000000Wf 2112 | 00000000Wg 2113 | 00000000Wh 2114 | 00000000Wi 2115 | 00000000Wj 2116 | 00000000Wk 2117 | 00000000Wl 2118 | 00000000Wm 2119 | 00000000Wn 2120 | 00000000Wo 2121 | 00000000Wp 2122 | 00000000Wq 2123 | 00000000Wr 2124 | 00000000Ws 2125 | 00000000Wt 2126 | 00000000Wu 2127 | 00000000Wv 2128 | 00000000Ww 2129 | 00000000Wx 2130 | 00000000Wy 2131 | 00000000Wz 2132 | 00000000W~ 2133 | 00000000X 2134 | 00000000X1 2135 | 00000000X2 2136 | 00000000X3 2137 | 00000000X4 2138 | 00000000X5 2139 | 00000000X6 2140 | 00000000X7 2141 | 00000000X8 2142 | 00000000X9 2143 | 00000000XA 2144 | 00000000XB 2145 | 00000000XC 2146 | 00000000XD 2147 | 00000000XE 2148 | 00000000XF 2149 | 00000000XG 2150 | 00000000XH 2151 | 00000000XI 2152 | 00000000XJ 2153 | 00000000XK 2154 | 00000000XL 2155 | 00000000XM 2156 | 00000000XN 2157 | 00000000XO 2158 | 00000000XP 2159 | 00000000XQ 2160 | 00000000XR 2161 | 00000000XS 2162 | 00000000XT 2163 | 00000000XU 2164 | 00000000XV 2165 | 00000000XW 2166 | 00000000XX 2167 | 00000000XY 2168 | 00000000XZ 2169 | 00000000X_ 2170 | 00000000Xa 2171 | 00000000Xb 2172 | 00000000Xc 2173 | 00000000Xd 2174 | 00000000Xe 2175 | 00000000Xf 2176 | 00000000Xg 2177 | 00000000Xh 2178 | 00000000Xi 2179 | 00000000Xj 2180 | 00000000Xk 2181 | 00000000Xl 2182 | 00000000Xm 2183 | 00000000Xn 2184 | 00000000Xo 2185 | 00000000Xp 2186 | 00000000Xq 2187 | 00000000Xr 2188 | 00000000Xs 2189 | 00000000Xt 2190 | 00000000Xu 2191 | 00000000Xv 2192 | 00000000Xw 2193 | 00000000Xx 2194 | 00000000Xy 2195 | 00000000Xz 2196 | 00000000X~ 2197 | 00000000Y 2198 | 00000000Y1 2199 | 00000000Y2 2200 | 00000000Y3 2201 | 00000000Y4 2202 | 00000000Y5 2203 | 00000000Y6 2204 | 00000000Y7 2205 | 00000000Y8 2206 | 00000000Y9 2207 | 00000000YA 2208 | 00000000YB 2209 | 00000000YC 2210 | 00000000YD 2211 | 00000000YE 2212 | 00000000YF 2213 | 00000000YG 2214 | 00000000YH 2215 | 00000000YI 2216 | 00000000YJ 2217 | 00000000YK 2218 | 00000000YL 2219 | 00000000YM 2220 | 00000000YN 2221 | 00000000YO 2222 | 00000000YP 2223 | 00000000YQ 2224 | 00000000YR 2225 | 00000000YS 2226 | 00000000YT 2227 | 00000000YU 2228 | 00000000YV 2229 | 00000000YW 2230 | 00000000YX 2231 | 00000000YY 2232 | 00000000YZ 2233 | 00000000Y_ 2234 | 00000000Ya 2235 | 00000000Yb 2236 | 00000000Yc 2237 | 00000000Yd 2238 | 00000000Ye 2239 | 00000000Yf 2240 | 00000000Yg 2241 | 00000000Yh 2242 | 00000000Yi 2243 | 00000000Yj 2244 | 00000000Yk 2245 | 00000000Yl 2246 | 00000000Ym 2247 | 00000000Yn 2248 | 00000000Yo 2249 | 00000000Yp 2250 | 00000000Yq 2251 | 00000000Yr 2252 | 00000000Ys 2253 | 00000000Yt 2254 | 00000000Yu 2255 | 00000000Yv 2256 | 00000000Yw 2257 | 00000000Yx 2258 | 00000000Yy 2259 | 00000000Yz 2260 | 00000000Y~ 2261 | 00000000Z 2262 | 00000000Z1 2263 | 00000000Z2 2264 | 00000000Z3 2265 | 00000000Z4 2266 | 00000000Z5 2267 | 00000000Z6 2268 | 00000000Z7 2269 | 00000000Z8 2270 | 00000000Z9 2271 | 00000000ZA 2272 | 00000000ZB 2273 | 00000000ZC 2274 | 00000000ZD 2275 | 00000000ZE 2276 | 00000000ZF 2277 | 00000000ZG 2278 | 00000000ZH 2279 | 00000000ZI 2280 | 00000000ZJ 2281 | 00000000ZK 2282 | 00000000ZL 2283 | 00000000ZM 2284 | 00000000ZN 2285 | 00000000ZO 2286 | 00000000ZP 2287 | 00000000ZQ 2288 | 00000000ZR 2289 | 00000000ZS 2290 | 00000000ZT 2291 | 00000000ZU 2292 | 00000000ZV 2293 | 00000000ZW 2294 | 00000000ZX 2295 | 00000000ZY 2296 | 00000000ZZ 2297 | 00000000Z_ 2298 | 00000000Za 2299 | 00000000Zb 2300 | 00000000Zc 2301 | 00000000Zd 2302 | 00000000Ze 2303 | 00000000Zf 2304 | 00000000Zg 2305 | 00000000Zh 2306 | 00000000Zi 2307 | 00000000Zj 2308 | 00000000Zk 2309 | 00000000Zl 2310 | 00000000Zm 2311 | 00000000Zn 2312 | 00000000Zo 2313 | 00000000Zp 2314 | 00000000Zq 2315 | 00000000Zr 2316 | 00000000Zs 2317 | 00000000Zt 2318 | 00000000Zu 2319 | 00000000Zv 2320 | 00000000Zw 2321 | 00000000Zx 2322 | 00000000Zy 2323 | 00000000Zz 2324 | 00000000Z~ 2325 | 00000000_ 2326 | 00000000_1 2327 | 00000000_2 2328 | 00000000_3 2329 | 00000000_4 2330 | 00000000_5 2331 | 00000000_6 2332 | 00000000_7 2333 | 00000000_8 2334 | 00000000_9 2335 | 00000000_A 2336 | 00000000_B 2337 | 00000000_C 2338 | 00000000_D 2339 | 00000000_E 2340 | 00000000_F 2341 | 00000000_G 2342 | 00000000_H 2343 | 00000000_I 2344 | 00000000_J 2345 | 00000000_K 2346 | 00000000_L 2347 | 00000000_M 2348 | 00000000_N 2349 | 00000000_O 2350 | 00000000_P 2351 | 00000000_Q 2352 | 00000000_R 2353 | 00000000_S 2354 | 00000000_T 2355 | 00000000_U 2356 | 00000000_V 2357 | 00000000_W 2358 | 00000000_X 2359 | 00000000_Y 2360 | 00000000_Z 2361 | 00000000__ 2362 | 00000000_a 2363 | 00000000_b 2364 | 00000000_c 2365 | 00000000_d 2366 | 00000000_e 2367 | 00000000_f 2368 | 00000000_g 2369 | 00000000_h 2370 | 00000000_i 2371 | 00000000_j 2372 | 00000000_k 2373 | 00000000_l 2374 | 00000000_m 2375 | 00000000_n 2376 | 00000000_o 2377 | 00000000_p 2378 | 00000000_q 2379 | 00000000_r 2380 | 00000000_s 2381 | 00000000_t 2382 | 00000000_u 2383 | 00000000_v 2384 | 00000000_w 2385 | 00000000_x 2386 | 00000000_y 2387 | 00000000_z 2388 | 00000000_~ 2389 | 00000000a 2390 | 00000000a1 2391 | 00000000a2 2392 | 00000000a3 2393 | 00000000a4 2394 | 00000000a5 2395 | 00000000a6 2396 | 00000000a7 2397 | 00000000a8 2398 | 00000000a9 2399 | 00000000aA 2400 | 00000000aB 2401 | 00000000aC 2402 | 00000000aD 2403 | 00000000aE 2404 | 00000000aF 2405 | 00000000aG 2406 | 00000000aH 2407 | 00000000aI 2408 | 00000000aJ 2409 | 00000000aK 2410 | 00000000aL 2411 | 00000000aM 2412 | 00000000aN 2413 | 00000000aO 2414 | 00000000aP 2415 | 00000000aQ 2416 | 00000000aR 2417 | 00000000aS 2418 | 00000000aT 2419 | 00000000aU 2420 | 00000000aV 2421 | 00000000aW 2422 | 00000000aX 2423 | 00000000aY 2424 | 00000000aZ 2425 | 00000000a_ 2426 | 00000000aa 2427 | 00000000ab 2428 | 00000000ac 2429 | 00000000ad 2430 | 00000000ae 2431 | 00000000af 2432 | 00000000ag 2433 | 00000000ah 2434 | 00000000ai 2435 | 00000000aj 2436 | 00000000ak 2437 | 00000000al 2438 | 00000000am 2439 | 00000000an 2440 | 00000000ao 2441 | 00000000ap 2442 | 00000000aq 2443 | 00000000ar 2444 | 00000000as 2445 | 00000000at 2446 | 00000000au 2447 | 00000000av 2448 | 00000000aw 2449 | 00000000ax 2450 | 00000000ay 2451 | 00000000az 2452 | 00000000a~ 2453 | 00000000b 2454 | 00000000b1 2455 | 00000000b2 2456 | 00000000b3 2457 | 00000000b4 2458 | 00000000b5 2459 | 00000000b6 2460 | 00000000b7 2461 | 00000000b8 2462 | 00000000b9 2463 | 00000000bA 2464 | 00000000bB 2465 | 00000000bC 2466 | 00000000bD 2467 | 00000000bE 2468 | 00000000bF 2469 | 00000000bG 2470 | 00000000bH 2471 | 00000000bI 2472 | 00000000bJ 2473 | 00000000bK 2474 | 00000000bL 2475 | 00000000bM 2476 | 00000000bN 2477 | 00000000bO 2478 | 00000000bP 2479 | 00000000bQ 2480 | 00000000bR 2481 | 00000000bS 2482 | 00000000bT 2483 | 00000000bU 2484 | 00000000bV 2485 | 00000000bW 2486 | 00000000bX 2487 | 00000000bY 2488 | 00000000bZ 2489 | 00000000b_ 2490 | 00000000ba 2491 | 00000000bb 2492 | 00000000bc 2493 | 00000000bd 2494 | 00000000be 2495 | 00000000bf 2496 | 00000000bg 2497 | 00000000bh 2498 | 00000000bi 2499 | 00000000bj 2500 | 00000000bk 2501 | 00000000bl 2502 | 00000000bm 2503 | 00000000bn 2504 | 00000000bo 2505 | 00000000bp 2506 | 00000000bq 2507 | 00000000br 2508 | 00000000bs 2509 | 00000000bt 2510 | 00000000bu 2511 | 00000000bv 2512 | 00000000bw 2513 | 00000000bx 2514 | 00000000by 2515 | 00000000bz 2516 | 00000000b~ 2517 | 00000000c 2518 | 00000000c1 2519 | 00000000c2 2520 | 00000000c3 2521 | 00000000c4 2522 | 00000000c5 2523 | 00000000c6 2524 | 00000000c7 2525 | 00000000c8 2526 | 00000000c9 2527 | 00000000cA 2528 | 00000000cB 2529 | 00000000cC 2530 | 00000000cD 2531 | 00000000cE 2532 | 00000000cF 2533 | 00000000cG 2534 | 00000000cH 2535 | 00000000cI 2536 | 00000000cJ 2537 | 00000000cK 2538 | 00000000cL 2539 | 00000000cM 2540 | 00000000cN 2541 | 00000000cO 2542 | 00000000cP 2543 | 00000000cQ 2544 | 00000000cR 2545 | 00000000cS 2546 | 00000000cT 2547 | 00000000cU 2548 | 00000000cV 2549 | 00000000cW 2550 | 00000000cX 2551 | 00000000cY 2552 | 00000000cZ 2553 | 00000000c_ 2554 | 00000000ca 2555 | 00000000cb 2556 | 00000000cc 2557 | 00000000cd 2558 | 00000000ce 2559 | 00000000cf 2560 | 00000000cg 2561 | 00000000ch 2562 | 00000000ci 2563 | 00000000cj 2564 | 00000000ck 2565 | 00000000cl 2566 | 00000000cm 2567 | 00000000cn 2568 | 00000000co 2569 | 00000000cp 2570 | 00000000cq 2571 | 00000000cr 2572 | 00000000cs 2573 | 00000000ct 2574 | 00000000cu 2575 | 00000000cv 2576 | 00000000cw 2577 | 00000000cx 2578 | 00000000cy 2579 | 00000000cz 2580 | 00000000c~ 2581 | 00000000d 2582 | 00000000d1 2583 | 00000000d2 2584 | 00000000d3 2585 | 00000000d4 2586 | 00000000d5 2587 | 00000000d6 2588 | 00000000d7 2589 | 00000000d8 2590 | 00000000d9 2591 | 00000000dA 2592 | 00000000dB 2593 | 00000000dC 2594 | 00000000dD 2595 | 00000000dE 2596 | 00000000dF 2597 | 00000000dG 2598 | 00000000dH 2599 | 00000000dI 2600 | 00000000dJ 2601 | 00000000dK 2602 | 00000000dL 2603 | 00000000dM 2604 | 00000000dN 2605 | 00000000dO 2606 | 00000000dP 2607 | 00000000dQ 2608 | 00000000dR 2609 | 00000000dS 2610 | 00000000dT 2611 | 00000000dU 2612 | 00000000dV 2613 | 00000000dW 2614 | 00000000dX 2615 | 00000000dY 2616 | 00000000dZ 2617 | 00000000d_ 2618 | 00000000da 2619 | 00000000db 2620 | 00000000dc 2621 | 00000000dd 2622 | 00000000de 2623 | 00000000df 2624 | 00000000dg 2625 | 00000000dh 2626 | 00000000di 2627 | 00000000dj 2628 | 00000000dk 2629 | 00000000dl 2630 | 00000000dm 2631 | 00000000dn 2632 | 00000000do 2633 | 00000000dp 2634 | 00000000dq 2635 | 00000000dr 2636 | 00000000ds 2637 | 00000000dt 2638 | 00000000du 2639 | 00000000dv 2640 | 00000000dw 2641 | 00000000dx 2642 | 00000000dy 2643 | 00000000dz 2644 | 00000000d~ 2645 | 00000000e 2646 | 00000000e1 2647 | 00000000e2 2648 | 00000000e3 2649 | 00000000e4 2650 | 00000000e5 2651 | 00000000e6 2652 | 00000000e7 2653 | 00000000e8 2654 | 00000000e9 2655 | 00000000eA 2656 | 00000000eB 2657 | 00000000eC 2658 | 00000000eD 2659 | 00000000eE 2660 | 00000000eF 2661 | 00000000eG 2662 | 00000000eH 2663 | 00000000eI 2664 | 00000000eJ 2665 | 00000000eK 2666 | 00000000eL 2667 | 00000000eM 2668 | 00000000eN 2669 | 00000000eO 2670 | 00000000eP 2671 | 00000000eQ 2672 | 00000000eR 2673 | 00000000eS 2674 | 00000000eT 2675 | 00000000eU 2676 | 00000000eV 2677 | 00000000eW 2678 | 00000000eX 2679 | 00000000eY 2680 | 00000000eZ 2681 | 00000000e_ 2682 | 00000000ea 2683 | 00000000eb 2684 | 00000000ec 2685 | 00000000ed 2686 | 00000000ee 2687 | 00000000ef 2688 | 00000000eg 2689 | 00000000eh 2690 | 00000000ei 2691 | 00000000ej 2692 | 00000000ek 2693 | 00000000el 2694 | 00000000em 2695 | 00000000en 2696 | 00000000eo 2697 | 00000000ep 2698 | 00000000eq 2699 | 00000000er 2700 | 00000000es 2701 | 00000000et 2702 | 00000000eu 2703 | 00000000ev 2704 | 00000000ew 2705 | 00000000ex 2706 | 00000000ey 2707 | 00000000ez 2708 | 00000000e~ 2709 | 00000000f 2710 | 00000000f1 2711 | 00000000f2 2712 | 00000000f3 2713 | 00000000f4 2714 | 00000000f5 2715 | 00000000f6 2716 | 00000000f7 2717 | 00000000f8 2718 | 00000000f9 2719 | 00000000fA 2720 | 00000000fB 2721 | 00000000fC 2722 | 00000000fD 2723 | 00000000fE 2724 | 00000000fF 2725 | 00000000fG 2726 | 00000000fH 2727 | 00000000fI 2728 | 00000000fJ 2729 | 00000000fK 2730 | 00000000fL 2731 | 00000000fM 2732 | 00000000fN 2733 | 00000000fO 2734 | 00000000fP 2735 | 00000000fQ 2736 | 00000000fR 2737 | 00000000fS 2738 | 00000000fT 2739 | 00000000fU 2740 | 00000000fV 2741 | 00000000fW 2742 | 00000000fX 2743 | 00000000fY 2744 | 00000000fZ 2745 | 00000000f_ 2746 | 00000000fa 2747 | 00000000fb 2748 | 00000000fc 2749 | 00000000fd 2750 | 00000000fe 2751 | 00000000ff 2752 | 00000000fg 2753 | 00000000fh 2754 | 00000000fi 2755 | 00000000fj 2756 | 00000000fk 2757 | 00000000fl 2758 | 00000000fm 2759 | 00000000fn 2760 | 00000000fo 2761 | 00000000fp 2762 | 00000000fq 2763 | 00000000fr 2764 | 00000000fs 2765 | 00000000ft 2766 | 00000000fu 2767 | 00000000fv 2768 | 00000000fw 2769 | 00000000fx 2770 | 00000000fy 2771 | 00000000fz 2772 | 00000000f~ 2773 | 00000000g 2774 | 00000000g1 2775 | 00000000g2 2776 | 00000000g3 2777 | 00000000g4 2778 | 00000000g5 2779 | 00000000g6 2780 | 00000000g7 2781 | 00000000g8 2782 | 00000000g9 2783 | 00000000gA 2784 | 00000000gB 2785 | 00000000gC 2786 | 00000000gD 2787 | 00000000gE 2788 | 00000000gF 2789 | 00000000gG 2790 | 00000000gH 2791 | 00000000gI 2792 | 00000000gJ 2793 | 00000000gK 2794 | 00000000gL 2795 | 00000000gM 2796 | 00000000gN 2797 | 00000000gO 2798 | 00000000gP 2799 | 00000000gQ 2800 | 00000000gR 2801 | 00000000gS 2802 | 00000000gT 2803 | 00000000gU 2804 | 00000000gV 2805 | 00000000gW 2806 | 00000000gX 2807 | 00000000gY 2808 | 00000000gZ 2809 | 00000000g_ 2810 | 00000000ga 2811 | 00000000gb 2812 | 00000000gc 2813 | 00000000gd 2814 | 00000000ge 2815 | 00000000gf 2816 | 00000000gg 2817 | 00000000gh 2818 | 00000000gi 2819 | 00000000gj 2820 | 00000000gk 2821 | 00000000gl 2822 | 00000000gm 2823 | 00000000gn 2824 | 00000000go 2825 | 00000000gp 2826 | 00000000gq 2827 | 00000000gr 2828 | 00000000gs 2829 | 00000000gt 2830 | 00000000gu 2831 | 00000000gv 2832 | 00000000gw 2833 | 00000000gx 2834 | 00000000gy 2835 | 00000000gz 2836 | 00000000g~ 2837 | 00000000h 2838 | 00000000h1 2839 | 00000000h2 2840 | 00000000h3 2841 | 00000000h4 2842 | 00000000h5 2843 | 00000000h6 2844 | 00000000h7 2845 | 00000000h8 2846 | 00000000h9 2847 | 00000000hA 2848 | 00000000hB 2849 | 00000000hC 2850 | 00000000hD 2851 | 00000000hE 2852 | 00000000hF 2853 | 00000000hG 2854 | 00000000hH 2855 | 00000000hI 2856 | 00000000hJ 2857 | 00000000hK 2858 | 00000000hL 2859 | 00000000hM 2860 | 00000000hN 2861 | 00000000hO 2862 | 00000000hP 2863 | 00000000hQ 2864 | 00000000hR 2865 | 00000000hS 2866 | 00000000hT 2867 | 00000000hU 2868 | 00000000hV 2869 | 00000000hW 2870 | 00000000hX 2871 | 00000000hY 2872 | 00000000hZ 2873 | 00000000h_ 2874 | 00000000ha 2875 | 00000000hb 2876 | 00000000hc 2877 | 00000000hd 2878 | 00000000he 2879 | 00000000hf 2880 | 00000000hg 2881 | 00000000hh 2882 | 00000000hi 2883 | 00000000hj 2884 | 00000000hk 2885 | 00000000hl 2886 | 00000000hm 2887 | 00000000hn 2888 | 00000000ho 2889 | 00000000hp 2890 | 00000000hq 2891 | 00000000hr 2892 | 00000000hs 2893 | 00000000ht 2894 | 00000000hu 2895 | 00000000hv 2896 | 00000000hw 2897 | 00000000hx 2898 | 00000000hy 2899 | 00000000hz 2900 | 00000000h~ 2901 | 00000000i 2902 | 00000000i1 2903 | 00000000i2 2904 | 00000000i3 2905 | 00000000i4 2906 | 00000000i5 2907 | 00000000i6 2908 | 00000000i7 2909 | 00000000i8 2910 | 00000000i9 2911 | 00000000iA 2912 | 00000000iB 2913 | 00000000iC 2914 | 00000000iD 2915 | 00000000iE 2916 | 00000000iF 2917 | 00000000iG 2918 | 00000000iH 2919 | 00000000iI 2920 | 00000000iJ 2921 | 00000000iK 2922 | 00000000iL 2923 | 00000000iM 2924 | 00000000iN 2925 | 00000000iO 2926 | 00000000iP 2927 | 00000000iQ 2928 | 00000000iR 2929 | 00000000iS 2930 | 00000000iT 2931 | 00000000iU 2932 | 00000000iV 2933 | 00000000iW 2934 | 00000000iX 2935 | 00000000iY 2936 | 00000000iZ 2937 | 00000000i_ 2938 | 00000000ia 2939 | 00000000ib 2940 | 00000000ic 2941 | 00000000id 2942 | 00000000ie 2943 | 00000000if 2944 | 00000000ig 2945 | 00000000ih 2946 | 00000000ii 2947 | 00000000ij 2948 | 00000000ik 2949 | 00000000il 2950 | 00000000im 2951 | 00000000in 2952 | 00000000io 2953 | 00000000ip 2954 | 00000000iq 2955 | 00000000ir 2956 | 00000000is 2957 | 00000000it 2958 | 00000000iu 2959 | 00000000iv 2960 | 00000000iw 2961 | 00000000ix 2962 | 00000000iy 2963 | 00000000iz 2964 | 00000000i~ 2965 | 00000000j 2966 | 00000000j1 2967 | 00000000j2 2968 | 00000000j3 2969 | 00000000j4 2970 | 00000000j5 2971 | 00000000j6 2972 | 00000000j7 2973 | 00000000j8 2974 | 00000000j9 2975 | 00000000jA 2976 | 00000000jB 2977 | 00000000jC 2978 | 00000000jD 2979 | 00000000jE 2980 | 00000000jF 2981 | 00000000jG 2982 | 00000000jH 2983 | 00000000jI 2984 | 00000000jJ 2985 | 00000000jK 2986 | 00000000jL 2987 | 00000000jM 2988 | 00000000jN 2989 | 00000000jO 2990 | 00000000jP 2991 | 00000000jQ 2992 | 00000000jR 2993 | 00000000jS 2994 | 00000000jT 2995 | 00000000jU 2996 | 00000000jV 2997 | 00000000jW 2998 | 00000000jX 2999 | 00000000jY 3000 | 00000000jZ 3001 | 00000000j_ 3002 | 00000000ja 3003 | 00000000jb 3004 | 00000000jc 3005 | 00000000jd 3006 | 00000000je 3007 | 00000000jf 3008 | 00000000jg 3009 | 00000000jh 3010 | 00000000ji 3011 | 00000000jj 3012 | 00000000jk 3013 | 00000000jl 3014 | 00000000jm 3015 | 00000000jn 3016 | 00000000jo 3017 | 00000000jp 3018 | 00000000jq 3019 | 00000000jr 3020 | 00000000js 3021 | 00000000jt 3022 | 00000000ju 3023 | 00000000jv 3024 | 00000000jw 3025 | 00000000jx 3026 | 00000000jy 3027 | 00000000jz 3028 | 00000000j~ 3029 | 00000000k 3030 | 00000000k1 3031 | 00000000k2 3032 | 00000000k3 3033 | 00000000k4 3034 | 00000000k5 3035 | 00000000k6 3036 | 00000000k7 3037 | 00000000k8 3038 | 00000000k9 3039 | 00000000kA 3040 | 00000000kB 3041 | 00000000kC 3042 | 00000000kD 3043 | 00000000kE 3044 | 00000000kF 3045 | 00000000kG 3046 | 00000000kH 3047 | 00000000kI 3048 | 00000000kJ 3049 | 00000000kK 3050 | 00000000kL 3051 | 00000000kM 3052 | 00000000kN 3053 | 00000000kO 3054 | 00000000kP 3055 | 00000000kQ 3056 | 00000000kR 3057 | 00000000kS 3058 | 00000000kT 3059 | 00000000kU 3060 | 00000000kV 3061 | 00000000kW 3062 | 00000000kX 3063 | 00000000kY 3064 | 00000000kZ 3065 | 00000000k_ 3066 | 00000000ka 3067 | 00000000kb 3068 | 00000000kc 3069 | 00000000kd 3070 | 00000000ke 3071 | 00000000kf 3072 | 00000000kg 3073 | 00000000kh 3074 | 00000000ki 3075 | 00000000kj 3076 | 00000000kk 3077 | 00000000kl 3078 | 00000000km 3079 | 00000000kn 3080 | 00000000ko 3081 | 00000000kp 3082 | 00000000kq 3083 | 00000000kr 3084 | 00000000ks 3085 | 00000000kt 3086 | 00000000ku 3087 | 00000000kv 3088 | 00000000kw 3089 | 00000000kx 3090 | 00000000ky 3091 | 00000000kz 3092 | 00000000k~ 3093 | 00000000l 3094 | 00000000l1 3095 | 00000000l2 3096 | 00000000l3 3097 | 00000000l4 3098 | 00000000l5 3099 | 00000000l6 3100 | 00000000l7 3101 | 00000000l8 3102 | 00000000l9 3103 | 00000000lA 3104 | 00000000lB 3105 | 00000000lC 3106 | 00000000lD 3107 | 00000000lE 3108 | 00000000lF 3109 | 00000000lG 3110 | 00000000lH 3111 | 00000000lI 3112 | 00000000lJ 3113 | 00000000lK 3114 | 00000000lL 3115 | 00000000lM 3116 | 00000000lN 3117 | 00000000lO 3118 | 00000000lP 3119 | 00000000lQ 3120 | 00000000lR 3121 | 00000000lS 3122 | 00000000lT 3123 | 00000000lU 3124 | 00000000lV 3125 | 00000000lW 3126 | 00000000lX 3127 | 00000000lY 3128 | 00000000lZ 3129 | 00000000l_ 3130 | 00000000la 3131 | 00000000lb 3132 | 00000000lc 3133 | 00000000ld 3134 | 00000000le 3135 | 00000000lf 3136 | 00000000lg 3137 | 00000000lh 3138 | 00000000li 3139 | 00000000lj 3140 | 00000000lk 3141 | 00000000ll 3142 | 00000000lm 3143 | 00000000ln 3144 | 00000000lo 3145 | 00000000lp 3146 | 00000000lq 3147 | 00000000lr 3148 | 00000000ls 3149 | 00000000lt 3150 | 00000000lu 3151 | 00000000lv 3152 | 00000000lw 3153 | 00000000lx 3154 | 00000000ly 3155 | 00000000lz 3156 | 00000000l~ 3157 | 00000000m 3158 | 00000000m1 3159 | 00000000m2 3160 | 00000000m3 3161 | 00000000m4 3162 | 00000000m5 3163 | 00000000m6 3164 | 00000000m7 3165 | 00000000m8 3166 | 00000000m9 3167 | 00000000mA 3168 | 00000000mB 3169 | 00000000mC 3170 | 00000000mD 3171 | 00000000mE 3172 | 00000000mF 3173 | 00000000mG 3174 | 00000000mH 3175 | 00000000mI 3176 | 00000000mJ 3177 | 00000000mK 3178 | 00000000mL 3179 | 00000000mM 3180 | 00000000mN 3181 | 00000000mO 3182 | 00000000mP 3183 | 00000000mQ 3184 | 00000000mR 3185 | 00000000mS 3186 | 00000000mT 3187 | 00000000mU 3188 | 00000000mV 3189 | 00000000mW 3190 | 00000000mX 3191 | 00000000mY 3192 | 00000000mZ 3193 | 00000000m_ 3194 | 00000000ma 3195 | 00000000mb 3196 | 00000000mc 3197 | 00000000md 3198 | 00000000me 3199 | 00000000mf 3200 | 00000000mg 3201 | 00000000mh 3202 | 00000000mi 3203 | 00000000mj 3204 | 00000000mk 3205 | 00000000ml 3206 | 00000000mm 3207 | 00000000mn 3208 | 00000000mo 3209 | 00000000mp 3210 | 00000000mq 3211 | 00000000mr 3212 | 00000000ms 3213 | 00000000mt 3214 | 00000000mu 3215 | 00000000mv 3216 | 00000000mw 3217 | 00000000mx 3218 | 00000000my 3219 | 00000000mz 3220 | 00000000m~ 3221 | 00000000n 3222 | 00000000n1 3223 | 00000000n2 3224 | 00000000n3 3225 | 00000000n4 3226 | 00000000n5 3227 | 00000000n6 3228 | 00000000n7 3229 | 00000000n8 3230 | 00000000n9 3231 | 00000000nA 3232 | 00000000nB 3233 | 00000000nC 3234 | 00000000nD 3235 | 00000000nE 3236 | 00000000nF 3237 | 00000000nG 3238 | 00000000nH 3239 | 00000000nI 3240 | 00000000nJ 3241 | 00000000nK 3242 | 00000000nL 3243 | 00000000nM 3244 | 00000000nN 3245 | 00000000nO 3246 | 00000000nP 3247 | 00000000nQ 3248 | 00000000nR 3249 | 00000000nS 3250 | 00000000nT 3251 | 00000000nU 3252 | 00000000nV 3253 | 00000000nW 3254 | 00000000nX 3255 | 00000000nY 3256 | 00000000nZ 3257 | 00000000n_ 3258 | 00000000na 3259 | 00000000nb 3260 | 00000000nc 3261 | 00000000nd 3262 | 00000000ne 3263 | 00000000nf 3264 | 00000000ng 3265 | 00000000nh 3266 | 00000000ni 3267 | 00000000nj 3268 | 00000000nk 3269 | 00000000nl 3270 | 00000000nm 3271 | 00000000nn 3272 | 00000000no 3273 | 00000000np 3274 | 00000000nq 3275 | 00000000nr 3276 | 00000000ns 3277 | 00000000nt 3278 | 00000000nu 3279 | 00000000nv 3280 | 00000000nw 3281 | 00000000nx 3282 | 00000000ny 3283 | 00000000nz 3284 | 00000000n~ 3285 | 00000000o 3286 | 00000000o1 3287 | 00000000o2 3288 | 00000000o3 3289 | 00000000o4 3290 | 00000000o5 3291 | 00000000o6 3292 | 00000000o7 3293 | 00000000o8 3294 | 00000000o9 3295 | 00000000oA 3296 | 00000000oB 3297 | 00000000oC 3298 | 00000000oD 3299 | 00000000oE 3300 | 00000000oF 3301 | 00000000oG 3302 | 00000000oH 3303 | 00000000oI 3304 | 00000000oJ 3305 | 00000000oK 3306 | 00000000oL 3307 | 00000000oM 3308 | 00000000oN 3309 | 00000000oO 3310 | 00000000oP 3311 | 00000000oQ 3312 | 00000000oR 3313 | 00000000oS 3314 | 00000000oT 3315 | 00000000oU 3316 | 00000000oV 3317 | 00000000oW 3318 | 00000000oX 3319 | 00000000oY 3320 | 00000000oZ 3321 | 00000000o_ 3322 | 00000000oa 3323 | 00000000ob 3324 | 00000000oc 3325 | 00000000od 3326 | 00000000oe 3327 | 00000000of 3328 | 00000000og 3329 | 00000000oh 3330 | 00000000oi 3331 | 00000000oj 3332 | 00000000ok 3333 | 00000000ol 3334 | 00000000om 3335 | 00000000on 3336 | 00000000oo 3337 | 00000000op 3338 | 00000000oq 3339 | 00000000or 3340 | 00000000os 3341 | 00000000ot 3342 | 00000000ou 3343 | 00000000ov 3344 | 00000000ow 3345 | 00000000ox 3346 | 00000000oy 3347 | 00000000oz 3348 | 00000000o~ 3349 | 00000000p 3350 | 00000000p1 3351 | 00000000p2 3352 | 00000000p3 3353 | 00000000p4 3354 | 00000000p5 3355 | 00000000p6 3356 | 00000000p7 3357 | 00000000p8 3358 | 00000000p9 3359 | 00000000pA 3360 | 00000000pB 3361 | 00000000pC 3362 | 00000000pD 3363 | 00000000pE 3364 | 00000000pF 3365 | 00000000pG 3366 | 00000000pH 3367 | 00000000pI 3368 | 00000000pJ 3369 | 00000000pK 3370 | 00000000pL 3371 | 00000000pM 3372 | 00000000pN 3373 | 00000000pO 3374 | 00000000pP 3375 | 00000000pQ 3376 | 00000000pR 3377 | 00000000pS 3378 | 00000000pT 3379 | 00000000pU 3380 | 00000000pV 3381 | 00000000pW 3382 | 00000000pX 3383 | 00000000pY 3384 | 00000000pZ 3385 | 00000000p_ 3386 | 00000000pa 3387 | 00000000pb 3388 | 00000000pc 3389 | 00000000pd 3390 | 00000000pe 3391 | 00000000pf 3392 | 00000000pg 3393 | 00000000ph 3394 | 00000000pi 3395 | 00000000pj 3396 | 00000000pk 3397 | 00000000pl 3398 | 00000000pm 3399 | 00000000pn 3400 | 00000000po 3401 | 00000000pp 3402 | 00000000pq 3403 | 00000000pr 3404 | 00000000ps 3405 | 00000000pt 3406 | 00000000pu 3407 | 00000000pv 3408 | 00000000pw 3409 | 00000000px 3410 | 00000000py 3411 | 00000000pz 3412 | 00000000p~ 3413 | 00000000q 3414 | 00000000q1 3415 | 00000000q2 3416 | 00000000q3 3417 | 00000000q4 3418 | 00000000q5 3419 | 00000000q6 3420 | 00000000q7 3421 | 00000000q8 3422 | 00000000q9 3423 | 00000000qA 3424 | 00000000qB 3425 | 00000000qC 3426 | 00000000qD 3427 | 00000000qE 3428 | 00000000qF 3429 | 00000000qG 3430 | 00000000qH 3431 | 00000000qI 3432 | 00000000qJ 3433 | 00000000qK 3434 | 00000000qL 3435 | 00000000qM 3436 | 00000000qN 3437 | 00000000qO 3438 | 00000000qP 3439 | 00000000qQ 3440 | 00000000qR 3441 | 00000000qS 3442 | 00000000qT 3443 | 00000000qU 3444 | 00000000qV 3445 | 00000000qW 3446 | 00000000qX 3447 | 00000000qY 3448 | 00000000qZ 3449 | 00000000q_ 3450 | 00000000qa 3451 | 00000000qb 3452 | 00000000qc 3453 | 00000000qd 3454 | 00000000qe 3455 | 00000000qf 3456 | 00000000qg 3457 | 00000000qh 3458 | 00000000qi 3459 | 00000000qj 3460 | 00000000qk 3461 | 00000000ql 3462 | 00000000qm 3463 | 00000000qn 3464 | 00000000qo 3465 | 00000000qp 3466 | 00000000qq 3467 | 00000000qr 3468 | 00000000qs 3469 | 00000000qt 3470 | 00000000qu 3471 | 00000000qv 3472 | 00000000qw 3473 | 00000000qx 3474 | 00000000qy 3475 | 00000000qz 3476 | 00000000q~ 3477 | 00000000r 3478 | 00000000r1 3479 | 00000000r2 3480 | 00000000r3 3481 | 00000000r4 3482 | 00000000r5 3483 | 00000000r6 3484 | 00000000r7 3485 | 00000000r8 3486 | 00000000r9 3487 | 00000000rA 3488 | 00000000rB 3489 | 00000000rC 3490 | 00000000rD 3491 | 00000000rE 3492 | 00000000rF 3493 | 00000000rG 3494 | 00000000rH 3495 | 00000000rI 3496 | 00000000rJ 3497 | 00000000rK 3498 | 00000000rL 3499 | 00000000rM 3500 | 00000000rN 3501 | 00000000rO 3502 | 00000000rP 3503 | 00000000rQ 3504 | 00000000rR 3505 | 00000000rS 3506 | 00000000rT 3507 | 00000000rU 3508 | 00000000rV 3509 | 00000000rW 3510 | 00000000rX 3511 | 00000000rY 3512 | 00000000rZ 3513 | 00000000r_ 3514 | 00000000ra 3515 | 00000000rb 3516 | 00000000rc 3517 | 00000000rd 3518 | 00000000re 3519 | 00000000rf 3520 | 00000000rg 3521 | 00000000rh 3522 | 00000000ri 3523 | 00000000rj 3524 | 00000000rk 3525 | 00000000rl 3526 | 00000000rm 3527 | 00000000rn 3528 | 00000000ro 3529 | 00000000rp 3530 | 00000000rq 3531 | 00000000rr 3532 | 00000000rs 3533 | 00000000rt 3534 | 00000000ru 3535 | 00000000rv 3536 | 00000000rw 3537 | 00000000rx 3538 | 00000000ry 3539 | 00000000rz 3540 | 00000000r~ 3541 | 00000000s 3542 | 00000000s1 3543 | 00000000s2 3544 | 00000000s3 3545 | 00000000s4 3546 | 00000000s5 3547 | 00000000s6 3548 | 00000000s7 3549 | 00000000s8 3550 | 00000000s9 3551 | 00000000sA 3552 | 00000000sB 3553 | 00000000sC 3554 | 00000000sD 3555 | 00000000sE 3556 | 00000000sF 3557 | 00000000sG 3558 | 00000000sH 3559 | 00000000sI 3560 | 00000000sJ 3561 | 00000000sK 3562 | 00000000sL 3563 | 00000000sM 3564 | 00000000sN 3565 | 00000000sO 3566 | 00000000sP 3567 | 00000000sQ 3568 | 00000000sR 3569 | 00000000sS 3570 | 00000000sT 3571 | 00000000sU 3572 | 00000000sV 3573 | 00000000sW 3574 | 00000000sX 3575 | 00000000sY 3576 | 00000000sZ 3577 | 00000000s_ 3578 | 00000000sa 3579 | 00000000sb 3580 | 00000000sc 3581 | 00000000sd 3582 | 00000000se 3583 | 00000000sf 3584 | 00000000sg 3585 | 00000000sh 3586 | 00000000si 3587 | 00000000sj 3588 | 00000000sk 3589 | 00000000sl 3590 | 00000000sm 3591 | 00000000sn 3592 | 00000000so 3593 | 00000000sp 3594 | 00000000sq 3595 | 00000000sr 3596 | 00000000ss 3597 | 00000000st 3598 | 00000000su 3599 | 00000000sv 3600 | 00000000sw 3601 | 00000000sx 3602 | 00000000sy 3603 | 00000000sz 3604 | 00000000s~ 3605 | 00000000t 3606 | 00000000t1 3607 | 00000000t2 3608 | 00000000t3 3609 | 00000000t4 3610 | 00000000t5 3611 | 00000000t6 3612 | 00000000t7 3613 | 00000000t8 3614 | 00000000t9 3615 | 00000000tA 3616 | 00000000tB 3617 | 00000000tC 3618 | 00000000tD 3619 | 00000000tE 3620 | 00000000tF 3621 | 00000000tG 3622 | 00000000tH 3623 | 00000000tI 3624 | 00000000tJ 3625 | 00000000tK 3626 | 00000000tL 3627 | 00000000tM 3628 | 00000000tN 3629 | 00000000tO 3630 | 00000000tP 3631 | 00000000tQ 3632 | 00000000tR 3633 | 00000000tS 3634 | 00000000tT 3635 | 00000000tU 3636 | 00000000tV 3637 | 00000000tW 3638 | 00000000tX 3639 | 00000000tY 3640 | 00000000tZ 3641 | 00000000t_ 3642 | 00000000ta 3643 | 00000000tb 3644 | 00000000tc 3645 | 00000000td 3646 | 00000000te 3647 | 00000000tf 3648 | 00000000tg 3649 | 00000000th 3650 | 00000000ti 3651 | 00000000tj 3652 | 00000000tk 3653 | 00000000tl 3654 | 00000000tm 3655 | 00000000tn 3656 | 00000000to 3657 | 00000000tp 3658 | 00000000tq 3659 | 00000000tr 3660 | 00000000ts 3661 | 00000000tt 3662 | 00000000tu 3663 | 00000000tv 3664 | 00000000tw 3665 | 00000000tx 3666 | 00000000ty 3667 | 00000000tz 3668 | 00000000t~ 3669 | 00000000u 3670 | 00000000u1 3671 | 00000000u2 3672 | 00000000u3 3673 | 00000000u4 3674 | 00000000u5 3675 | 00000000u6 3676 | 00000000u7 3677 | 00000000u8 3678 | 00000000u9 3679 | 00000000uA 3680 | 00000000uB 3681 | 00000000uC 3682 | 00000000uD 3683 | 00000000uE 3684 | 00000000uF 3685 | 00000000uG 3686 | 00000000uH 3687 | 00000000uI 3688 | 00000000uJ 3689 | 00000000uK 3690 | 00000000uL 3691 | 00000000uM 3692 | 00000000uN 3693 | 00000000uO 3694 | 00000000uP 3695 | 00000000uQ 3696 | 00000000uR 3697 | 00000000uS 3698 | 00000000uT 3699 | 00000000uU 3700 | 00000000uV 3701 | 00000000uW 3702 | 00000000uX 3703 | 00000000uY 3704 | 00000000uZ 3705 | 00000000u_ 3706 | 00000000ua 3707 | 00000000ub 3708 | 00000000uc 3709 | 00000000ud 3710 | 00000000ue 3711 | 00000000uf 3712 | 00000000ug 3713 | 00000000uh 3714 | 00000000ui 3715 | 00000000uj 3716 | 00000000uk 3717 | 00000000ul 3718 | 00000000um 3719 | 00000000un 3720 | 00000000uo 3721 | 00000000up 3722 | 00000000uq 3723 | 00000000ur 3724 | 00000000us 3725 | 00000000ut 3726 | 00000000uu 3727 | 00000000uv 3728 | 00000000uw 3729 | 00000000ux 3730 | 00000000uy 3731 | 00000000uz 3732 | 00000000u~ 3733 | 00000000v 3734 | 00000000v1 3735 | 00000000v2 3736 | 00000000v3 3737 | 00000000v4 3738 | 00000000v5 3739 | 00000000v6 3740 | 00000000v7 3741 | 00000000v8 3742 | 00000000v9 3743 | 00000000vA 3744 | 00000000vB 3745 | 00000000vC 3746 | 00000000vD 3747 | 00000000vE 3748 | 00000000vF 3749 | 00000000vG 3750 | 00000000vH 3751 | 00000000vI 3752 | 00000000vJ 3753 | 00000000vK 3754 | 00000000vL 3755 | 00000000vM 3756 | 00000000vN 3757 | 00000000vO 3758 | 00000000vP 3759 | 00000000vQ 3760 | 00000000vR 3761 | 00000000vS 3762 | 00000000vT 3763 | 00000000vU 3764 | 00000000vV 3765 | 00000000vW 3766 | 00000000vX 3767 | 00000000vY 3768 | 00000000vZ 3769 | 00000000v_ 3770 | 00000000va 3771 | 00000000vb 3772 | 00000000vc 3773 | 00000000vd 3774 | 00000000ve 3775 | 00000000vf 3776 | 00000000vg 3777 | 00000000vh 3778 | 00000000vi 3779 | 00000000vj 3780 | 00000000vk 3781 | 00000000vl 3782 | 00000000vm 3783 | 00000000vn 3784 | 00000000vo 3785 | 00000000vp 3786 | 00000000vq 3787 | 00000000vr 3788 | 00000000vs 3789 | 00000000vt 3790 | 00000000vu 3791 | 00000000vv 3792 | 00000000vw 3793 | 00000000vx 3794 | 00000000vy 3795 | 00000000vz 3796 | 00000000v~ 3797 | 00000000w 3798 | 00000000w1 3799 | 00000000w2 3800 | 00000000w3 3801 | 00000000w4 3802 | 00000000w5 3803 | 00000000w6 3804 | 00000000w7 3805 | 00000000w8 3806 | 00000000w9 3807 | 00000000wA 3808 | 00000000wB 3809 | 00000000wC 3810 | 00000000wD 3811 | 00000000wE 3812 | 00000000wF 3813 | 00000000wG 3814 | 00000000wH 3815 | 00000000wI 3816 | 00000000wJ 3817 | 00000000wK 3818 | 00000000wL 3819 | 00000000wM 3820 | 00000000wN 3821 | 00000000wO 3822 | 00000000wP 3823 | 00000000wQ 3824 | 00000000wR 3825 | 00000000wS 3826 | 00000000wT 3827 | 00000000wU 3828 | 00000000wV 3829 | 00000000wW 3830 | 00000000wX 3831 | 00000000wY 3832 | 00000000wZ 3833 | 00000000w_ 3834 | 00000000wa 3835 | 00000000wb 3836 | 00000000wc 3837 | 00000000wd 3838 | 00000000we 3839 | 00000000wf 3840 | 00000000wg 3841 | 00000000wh 3842 | 00000000wi 3843 | 00000000wj 3844 | 00000000wk 3845 | 00000000wl 3846 | 00000000wm 3847 | 00000000wn 3848 | 00000000wo 3849 | 00000000wp 3850 | 00000000wq 3851 | 00000000wr 3852 | 00000000ws 3853 | 00000000wt 3854 | 00000000wu 3855 | 00000000wv 3856 | 00000000ww 3857 | 00000000wx 3858 | 00000000wy 3859 | 00000000wz 3860 | 00000000w~ 3861 | 00000000x 3862 | 00000000x1 3863 | 00000000x2 3864 | 00000000x3 3865 | 00000000x4 3866 | 00000000x5 3867 | 00000000x6 3868 | 00000000x7 3869 | 00000000x8 3870 | 00000000x9 3871 | 00000000xA 3872 | 00000000xB 3873 | 00000000xC 3874 | 00000000xD 3875 | 00000000xE 3876 | 00000000xF 3877 | 00000000xG 3878 | 00000000xH 3879 | 00000000xI 3880 | 00000000xJ 3881 | 00000000xK 3882 | 00000000xL 3883 | 00000000xM 3884 | 00000000xN 3885 | 00000000xO 3886 | 00000000xP 3887 | 00000000xQ 3888 | 00000000xR 3889 | 00000000xS 3890 | 00000000xT 3891 | 00000000xU 3892 | 00000000xV 3893 | 00000000xW 3894 | 00000000xX 3895 | 00000000xY 3896 | 00000000xZ 3897 | 00000000x_ 3898 | 00000000xa 3899 | 00000000xb 3900 | 00000000xc 3901 | 00000000xd 3902 | 00000000xe 3903 | 00000000xf 3904 | 00000000xg 3905 | 00000000xh 3906 | 00000000xi 3907 | 00000000xj 3908 | 00000000xk 3909 | 00000000xl 3910 | 00000000xm 3911 | 00000000xn 3912 | 00000000xo 3913 | 00000000xp 3914 | 00000000xq 3915 | 00000000xr 3916 | 00000000xs 3917 | 00000000xt 3918 | 00000000xu 3919 | 00000000xv 3920 | 00000000xw 3921 | 00000000xx 3922 | 00000000xy 3923 | 00000000xz 3924 | 00000000x~ 3925 | 00000000y 3926 | 00000000y1 3927 | 00000000y2 3928 | 00000000y3 3929 | 00000000y4 3930 | 00000000y5 3931 | 00000000y6 3932 | 00000000y7 3933 | 00000000y8 3934 | 00000000y9 3935 | 00000000yA 3936 | 00000000yB 3937 | 00000000yC 3938 | 00000000yD 3939 | 00000000yE 3940 | 00000000yF 3941 | 00000000yG 3942 | 00000000yH 3943 | 00000000yI 3944 | 00000000yJ 3945 | 00000000yK 3946 | 00000000yL 3947 | 00000000yM 3948 | 00000000yN 3949 | 00000000yO 3950 | 00000000yP 3951 | 00000000yQ 3952 | 00000000yR 3953 | 00000000yS 3954 | 00000000yT 3955 | 00000000yU 3956 | 00000000yV 3957 | 00000000yW 3958 | 00000000yX 3959 | 00000000yY 3960 | 00000000yZ 3961 | 00000000y_ 3962 | 00000000ya 3963 | 00000000yb 3964 | 00000000yc 3965 | 00000000yd 3966 | 00000000ye 3967 | 00000000yf 3968 | 00000000yg 3969 | 00000000yh 3970 | 00000000yi 3971 | 00000000yj 3972 | 00000000yk 3973 | 00000000yl 3974 | 00000000ym 3975 | 00000000yn 3976 | 00000000yo 3977 | 00000000yp 3978 | 00000000yq 3979 | 00000000yr 3980 | 00000000ys 3981 | 00000000yt 3982 | 00000000yu 3983 | 00000000yv 3984 | 00000000yw 3985 | 00000000yx 3986 | 00000000yy 3987 | 00000000yz 3988 | 00000000y~ 3989 | 00000000z 3990 | 00000000z1 3991 | 00000000z2 3992 | 00000000z3 3993 | 00000000z4 3994 | 00000000z5 3995 | 00000000z6 3996 | 00000000z7 3997 | 00000000z8 3998 | 00000000z9 3999 | 00000000zA 4000 | 00000000zB 4001 | 00000000zC 4002 | 00000000zD 4003 | 00000000zE 4004 | 00000000zF 4005 | 00000000zG 4006 | 00000000zH 4007 | 00000000zI 4008 | 00000000zJ 4009 | 00000000zK 4010 | 00000000zL 4011 | 00000000zM 4012 | 00000000zN 4013 | 00000000zO 4014 | 00000000zP 4015 | 00000000zQ 4016 | 00000000zR 4017 | 00000000zS 4018 | 00000000zT 4019 | 00000000zU 4020 | 00000000zV 4021 | 00000000zW 4022 | 00000000zX 4023 | 00000000zY 4024 | 00000000zZ 4025 | 00000000z_ 4026 | 00000000za 4027 | 00000000zb 4028 | 00000000zc 4029 | 00000000zd 4030 | 00000000ze 4031 | 00000000zf 4032 | 00000000zg 4033 | 00000000zh 4034 | 00000000zi 4035 | 00000000zj 4036 | 00000000zk 4037 | 00000000zl 4038 | 00000000zm 4039 | 00000000zn 4040 | 00000000zo 4041 | 00000000zp 4042 | 00000000zq 4043 | 00000000zr 4044 | 00000000zs 4045 | 00000000zt 4046 | 00000000zu 4047 | 00000000zv 4048 | 00000000zw 4049 | 00000000zx 4050 | 00000000zy 4051 | 00000000zz 4052 | 00000000z~ 4053 | 00000000~ 4054 | 00000000~1 4055 | 00000000~2 4056 | 00000000~3 4057 | 00000000~4 4058 | 00000000~5 4059 | 00000000~6 4060 | 00000000~7 4061 | 00000000~8 4062 | 00000000~9 4063 | 00000000~A 4064 | 00000000~B 4065 | 00000000~C 4066 | 00000000~D 4067 | 00000000~E 4068 | 00000000~F 4069 | 00000000~G 4070 | 00000000~H 4071 | 00000000~I 4072 | 00000000~J 4073 | 00000000~K 4074 | 00000000~L 4075 | 00000000~M 4076 | 00000000~N 4077 | 00000000~O 4078 | 00000000~P 4079 | 00000000~Q 4080 | 00000000~R 4081 | 00000000~S 4082 | 00000000~T 4083 | 00000000~U 4084 | 00000000~V 4085 | 00000000~W 4086 | 00000000~X 4087 | 00000000~Y 4088 | 00000000~Z 4089 | 00000000~_ 4090 | 00000000~a 4091 | 00000000~b 4092 | 00000000~c 4093 | 00000000~d 4094 | 00000000~e 4095 | 00000000~f 4096 | 00000000~g 4097 | 00000000~h 4098 | 00000000~i 4099 | 00000000~j 4100 | 00000000~k 4101 | 00000000~l 4102 | 00000000~m 4103 | 00000000~n 4104 | 00000000~o 4105 | 00000000~p 4106 | 00000000~q 4107 | 00000000~r 4108 | 00000000~s 4109 | 00000000~t 4110 | 00000000~u 4111 | 00000000~v 4112 | 00000000~w 4113 | 00000000~x 4114 | 00000000~y 4115 | 00000000~z 4116 | 00000000~~ 4117 | 00000001 4118 | -------------------------------------------------------------------------------- /test/op.batt: -------------------------------------------------------------------------------- 1 | ; empty-value op 2 | /Swarm#database.on 3 | 4 | ; single line value op 5 | /Object#1CQZ38+Y~!1CQa4+Xusernm1Q.NumbrField 123 6 | 7 | ; multiline op (check defaults, same object, \n\n termination) 8 | /Swarm#database!1CQAneD1+X~.~= 9 | !1CQAneD+X~.Access OwnWriteAllRead 10 | !1CQAneD1+X~.ReplicaIdScheme 163 11 | !1CQa5+Xusernm1Q.Multiline= 12 | First line 13 | Second line 14 | Indented third line 15 | 16 | 17 | ; explicit length op 18 | !1CQa6+Xusernm1Q.Buffer=A 19 | raw buffer 20 | -------------------------------------------------------------------------------- /test/peer-basic.batt: -------------------------------------------------------------------------------- 1 | ; 2 | ; handshake: db options, ssn id grant, clocks, 3 | ; state snapshot, replica id scheme, spec abbrev 4 | ; (testusr password is "1") 5 | ; 6 | > /Swarm#test!0.on+0testusr m3G5qluaUSe543n/CtQJvP6soXWs0oIW5wU4BpPM9ms= 7 | > 8 | < /Swarm#test!00003+R.~+Rtestusr01= 9 | < !00001+R.Clock "Logical" 10 | < !00002+R.ClockLen 5 11 | < !00003+R.DBIdScheme "0172" 12 | < .on+Rtestusr01 13 | 14 | ; 15 | ; create an object: state push, abbrev 16 | ; 17 | > /LWWObject#00002+Rtestusr01!00002+Rtestusr01.~= 18 | > !00002.Key "value" 19 | > .on+Rtestusr01 20 | > 21 | /LWWObject#00002+Rtestusr01!00002+Rtestusr01.on+Rtestusr01 22 | 23 | ; 24 | ; just a mutation 25 | ; 26 | > /LWWObject#00002+Rtestusr01!00003+Rtestusr01.Key "new value" 27 | > 28 | /LWWObject#00002+Rtestusr01!00003+Rtestusr01.Key "new value" 29 | 30 | ; 31 | ; resubscription to get the patch 32 | ; 33 | > /LWWObject#00002+Rtestusr01!00002+Rtestusr01.on+Rtestusr01 34 | > 35 | /LWWObject#00002+Rtestusr01!00003+Rtestusr01.Key+Rtestusr01 "new value" 36 | .on+Rtestusr01 37 | 38 | ; 39 | ; resubscription to get the snapshot 40 | ; 41 | > /LWWObject#00002+Rtestusr01!0.on+Rtestusr01 42 | > 43 | /LWWObject#00002+Rtestusr01!00003+Rtestusr01.~+Rtestusr01 !00003+Rtestusr01.Key "new value" 44 | .on+Rtestusr01 45 | 46 | ; error-wrong replica id 47 | > /LWWObject#00002+Rtestusr01!00004+Rwrngusr01.Key "rejected value" 48 | > 49 | /LWWObject#00002+Rtestusr01!00004+Rwrngusr01.~~~~~~~~~~+Rtestusr01 WRONG ORIGIN 50 | 51 | ; error - state push 52 | > /LWWObject#00002+Rtestusr01!00004+Rtestusr01.~ 53 | > 54 | /LWWObject#00002+Rtestusr01!00004+Rtestusr01.~~~~~~~~~~+Rtestusr01 NO STATE PUSH 55 | 56 | ; warning - op replay 57 | > /LWWObject#00002+Rtestusr01!00003+Rtestusr01.Key "new value" 58 | > 59 | /LWWObject#00002+Rtestusr01!00003+Rtestusr01.~~~~~~~~~~+Rtestusr01 OP REPLAY 60 | 61 | ; wrong scope 62 | > /LWWObject#00002+Rtestusr01!0.on+RwrngusrXX 63 | > 64 | /LWWObject#00002+Rtestusr01!0.~~~~~~~~~~+Rtestusr01 WRONG SCOPE 65 | 66 | ; 67 | ; subscription to an unknown object 68 | ; 69 | > /LWWObject#00005+Rtestusr01!0.on+Rtestusr01 70 | > 71 | /LWWObject#00005+Rtestusr01!0.on+Rtestusr01 72 | 73 | ; 74 | ; non-existing unsubscription (no problem, who cares) 75 | ; 76 | > /LWWObject#00007+Rtestusr01!0.off+Rtestusr01 77 | > 78 | /LWWObject#00007+Rtestusr01!0.off+Rtestusr01 79 | 80 | ; unsubscription 81 | > /LWWObject#00002+Rtestusr01!0.off+Rtestusr01 82 | > 83 | /LWWObject#00002+Rtestusr01!0.off+Rtestusr01 84 | 85 | ; connection end 86 | > /Swarm#test!0.off+Rtestusr01 87 | > 88 | /Swarm#test!00003+Rtestusr01.off+Rtestusr01 89 | 90 | -------------------------------------------------------------------------------- /test/spec.batt: -------------------------------------------------------------------------------- 1 | ; print a zero spec (noop) - must be an empty line 2 | 3 | 4 | ; read-only subscription, all transcendents 5 | /Object#id!~.on 6 | 7 | ; initial state, normalize the tailing 0 in 1CQAn0+author 8 | /Object#1CQAn+author!1CQAn+author.~ 9 | 10 | ; defaults - all same object 11 | /Object#1CQAn+author!1CQAn+author.~ 12 | !1CQk5+author.field 13 | .on 14 | 15 | ; parse /Type.op with no defaults - fill missing tokens with zeroes 16 | /Type#0!0.op 17 | 18 | -------------------------------------------------------------------------------- /test/stamp.batt: -------------------------------------------------------------------------------- 1 | ; zero (is-zero: true), named zero 2 | 0 3 | 0+my 4 | 5 | ; is-transcendent: true 6 | transcndnt 7 | 8 | ; never, named never 9 | ~ 10 | ~+my 11 | 12 | ; parent-of true 13 | 1CQAneD+parnt 14 | 1CQAnek+parntCHILD 15 | 16 | ; 1 Jan 2010 00:00:01 UTC 17 | 000001+my 18 | 19 | ; Fri May 27 20:50:00 UTC 2016: scan and print both formats 20 | 1CQKn+my 21 | Fri May 27 20:50:00 UTC 2016 22 | 23 | ; parse 1CQKn00000+my: the same timestamp untrimmed 24 | Fri May 27 20:50:00 UTC 2016 25 | 26 | ; is-abnormal: true (not a timestamp) 27 | ~abc+author 28 | 29 | ; is-transcendent: true (the right half is not an origin) 30 | Object+~3 31 | 32 | ; parse Object+0: zero origin is skipped, transcendent: true 33 | Object 34 | 35 | ; is-error: true, is-transcendent: false, is-abnormal: true, is-zero: false 36 | ~~~~~~~~~~+origin 37 | -------------------------------------------------------------------------------- /test/tests.md: -------------------------------------------------------------------------------- 1 | # Swarm protocol tests 2 | 3 | These tests have an objective of: 4 | 5 | * basic case coverage for the protocol syntax and 6 | * providing examples. 7 | 8 | Every Swarm implementation is expected to read and write all the 9 | listed cases correctly. 10 | 11 | ## BATT format 12 | 13 | The format is a rather simplistic one. It does blackbox testing 14 | of line-based input/output, so `batt` script syntax is as close 15 | to plain text file as possible: 16 | 17 | * comment lines start with `;` 18 | * input lines start with `>` 19 | * expected output lines start with `<` or nothing (default) 20 | * in case of multiple input/output streams, marks are extended to 21 | * `stream_id>` for input and 22 | * `stream_id<` for output (base64 ids). 23 | 24 | The test runner reads a `.batt` file line by line, so 25 | 26 | 1. input lines are sent to the tested program 27 | 2. output lines are expected to be read from the program, 28 | 3. previously unseen stream ids trigger new stream creation. 29 | 30 | Normally, "streams" are TCP connections to a certain host/port 31 | where the tested program is listening. Single stream test cases 32 | can run using stdin/stdout. For example, a simple test case 33 | for the `cat` command: 34 | 35 | ; echoes a string 36 | >test 37 | 40 | 41 | ; echoes two lines 42 | >one 43 | >two 44 | one 45 |