nelumba 0.0.13
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +6 -0
- data/.travis.yml +9 -0
- data/Gemfile +20 -0
- data/README.md +242 -0
- data/Rakefile +7 -0
- data/assets/lotus_logo_purple.png +0 -0
- data/assets/lotus_logo_purple.svg +262 -0
- data/lib/nelumba.rb +47 -0
- data/lib/nelumba/activity.rb +250 -0
- data/lib/nelumba/application.rb +11 -0
- data/lib/nelumba/article.rb +11 -0
- data/lib/nelumba/atom/account.rb +50 -0
- data/lib/nelumba/atom/address.rb +56 -0
- data/lib/nelumba/atom/author.rb +176 -0
- data/lib/nelumba/atom/category.rb +41 -0
- data/lib/nelumba/atom/comment.rb +96 -0
- data/lib/nelumba/atom/entry.rb +216 -0
- data/lib/nelumba/atom/feed.rb +198 -0
- data/lib/nelumba/atom/generator.rb +40 -0
- data/lib/nelumba/atom/link.rb +79 -0
- data/lib/nelumba/atom/name.rb +57 -0
- data/lib/nelumba/atom/organization.rb +62 -0
- data/lib/nelumba/atom/person.rb +179 -0
- data/lib/nelumba/atom/portable_contacts.rb +117 -0
- data/lib/nelumba/atom/source.rb +179 -0
- data/lib/nelumba/atom/thread.rb +60 -0
- data/lib/nelumba/audio.rb +39 -0
- data/lib/nelumba/badge.rb +11 -0
- data/lib/nelumba/binary.rb +52 -0
- data/lib/nelumba/bookmark.rb +30 -0
- data/lib/nelumba/category.rb +49 -0
- data/lib/nelumba/collection.rb +34 -0
- data/lib/nelumba/comment.rb +47 -0
- data/lib/nelumba/crypto.rb +144 -0
- data/lib/nelumba/device.rb +11 -0
- data/lib/nelumba/discover.rb +362 -0
- data/lib/nelumba/event.rb +57 -0
- data/lib/nelumba/feed.rb +173 -0
- data/lib/nelumba/file.rb +43 -0
- data/lib/nelumba/generator.rb +53 -0
- data/lib/nelumba/group.rb +11 -0
- data/lib/nelumba/identity.rb +63 -0
- data/lib/nelumba/image.rb +30 -0
- data/lib/nelumba/link.rb +56 -0
- data/lib/nelumba/note.rb +34 -0
- data/lib/nelumba/notification.rb +229 -0
- data/lib/nelumba/object.rb +251 -0
- data/lib/nelumba/person.rb +306 -0
- data/lib/nelumba/place.rb +34 -0
- data/lib/nelumba/product.rb +30 -0
- data/lib/nelumba/publisher.rb +44 -0
- data/lib/nelumba/question.rb +30 -0
- data/lib/nelumba/review.rb +30 -0
- data/lib/nelumba/service.rb +11 -0
- data/lib/nelumba/subscription.rb +117 -0
- data/lib/nelumba/version.rb +3 -0
- data/lib/nelumba/video.rb +43 -0
- data/nelumba.gemspec +28 -0
- data/spec/activity_spec.rb +116 -0
- data/spec/application_spec.rb +136 -0
- data/spec/article_spec.rb +136 -0
- data/spec/atom/comment_spec.rb +455 -0
- data/spec/atom/feed_spec.rb +684 -0
- data/spec/audio_spec.rb +164 -0
- data/spec/badge_spec.rb +136 -0
- data/spec/binary_spec.rb +218 -0
- data/spec/bookmark.rb +150 -0
- data/spec/collection_spec.rb +152 -0
- data/spec/comment_spec.rb +128 -0
- data/spec/crypto_spec.rb +126 -0
- data/spec/device_spec.rb +136 -0
- data/spec/event_spec.rb +239 -0
- data/spec/feed_spec.rb +252 -0
- data/spec/file_spec.rb +190 -0
- data/spec/group_spec.rb +136 -0
- data/spec/helper.rb +10 -0
- data/spec/identity_spec.rb +67 -0
- data/spec/image_spec.rb +150 -0
- data/spec/link_spec.rb +30 -0
- data/spec/note_spec.rb +163 -0
- data/spec/notification_spec.rb +89 -0
- data/spec/person_spec.rb +244 -0
- data/spec/place_spec.rb +162 -0
- data/spec/product_spec.rb +150 -0
- data/spec/question_spec.rb +156 -0
- data/spec/review_spec.rb +149 -0
- data/spec/service_spec.rb +136 -0
- data/spec/video_spec.rb +164 -0
- data/test/example_feed.atom +393 -0
- data/test/example_feed_empty_author.atom +336 -0
- data/test/example_feed_false_connected.atom +359 -0
- data/test/example_feed_link_without_href.atom +134 -0
- data/test/example_page.html +4 -0
- data/test/mime_type_bug_feed.atom +874 -0
- metadata +288 -0
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
# Specify your gem's dependencies in ostatus.gemspec
|
4
|
+
gemspec
|
5
|
+
|
6
|
+
group :test do
|
7
|
+
gem "rake" # rakefile
|
8
|
+
gem "minitest", "4.7.0" # test framework (specified here for prior rubies)
|
9
|
+
gem "ansi" # minitest colors
|
10
|
+
gem "turn" # minitest output
|
11
|
+
gem "mocha" # stubs
|
12
|
+
end
|
13
|
+
|
14
|
+
platforms :rbx do
|
15
|
+
gem "json"
|
16
|
+
gem "racc"
|
17
|
+
gem "rubysl"
|
18
|
+
end
|
19
|
+
|
20
|
+
gem "nelumba-i18n", :git => "git://github.com/hotsh/nelumba-i18n.git"
|
data/README.md
ADDED
@@ -0,0 +1,242 @@
|
|
1
|
+
# Nelumba
|
2
|
+
|
3
|
+
[![Build Status](https://travis-ci.org/hotsh/nelumba.png?branch=master)](https://travis-ci.org/hotsh/nelumba)
|
4
|
+
|
5
|
+
This gem implements federated protocols which let your website connect and interact with any website implementing a federated space.
|
6
|
+
Users of a federated service can communicate, produce and consume with users of all sites within that federation as one large community while also allowing them
|
7
|
+
to host such websites on their own servers or choice of hosting provider.
|
8
|
+
Specifically, this gem deals with handling the data streams and the technologies that are related to Nelumba/pump.io such as ActivityStreams, PortableContacts, Webfinger, PubSubHubbub, and Salmon.
|
9
|
+
|
10
|
+
One such application of this library (in its older form) is [rstat.us](https://rstat.us), which is a Twitter-like service that you can host yourself.
|
11
|
+
|
12
|
+
## Related libraries
|
13
|
+
|
14
|
+
* [nelumba-i18n](https://github.com/hotsh/nelumba-i18n) - Localization for activity-streams social applications.
|
15
|
+
* [nelumba-mongodb](https://github.com/hotsh/nelumba-mongodb) - Persistence layer for nelumba objects.
|
16
|
+
* [rack-nelumba](https://github.com/hotsh/rack-nelumba) - Rack middleware to provide nelumba controllers for HTTP access to nelumba data.
|
17
|
+
* [nelumba-site](https://github.com/hotsh/nelumba-site) - A Nelumba based, full-featured website.
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
Currently, only the immutable interface is available.
|
22
|
+
|
23
|
+
```
|
24
|
+
require 'nelumba'
|
25
|
+
|
26
|
+
author = Nelumba::Person.new(:uri => "https://rstat.us/users/wilkie",
|
27
|
+
:email => "wilkie@xomb.org",
|
28
|
+
:name => "wilkie")
|
29
|
+
|
30
|
+
blog_post = Nelumba::Activity.new(:activity => :post,
|
31
|
+
:title => "Nelumba gem",
|
32
|
+
:actor => author,
|
33
|
+
:content => "Long blog post",
|
34
|
+
:content_type => "text/html",
|
35
|
+
:id => "1",
|
36
|
+
:uri => "http://blog.davewilkinsonii.com/posts/ostatus_gem",
|
37
|
+
:published => Time.now)
|
38
|
+
|
39
|
+
feed = Nelumba::Feed.new(:title => "wilkie writes a thing",
|
40
|
+
:url => "http://blog.davewilkinsonii.com",
|
41
|
+
:rights => "CC0",
|
42
|
+
:hubs => ["http://hub.davewilkinsonii.com"],
|
43
|
+
:authors => [author],
|
44
|
+
:published => Time.now,
|
45
|
+
:entries => [blog_post])
|
46
|
+
```
|
47
|
+
|
48
|
+
To generate an Atom representation:
|
49
|
+
|
50
|
+
```
|
51
|
+
feed.to_atom
|
52
|
+
```
|
53
|
+
|
54
|
+
To generate a collection of Nelumba objects from Atom:
|
55
|
+
|
56
|
+
```
|
57
|
+
Nelumba.feed_from_url("https://rstat.us/users/wilkieii/feed")
|
58
|
+
```
|
59
|
+
|
60
|
+
## Object Documentation
|
61
|
+
|
62
|
+
### Feed
|
63
|
+
|
64
|
+
The Feed is the aggregate. It holds a collection of entries written by a set of authors or contributors. It's the container for content.
|
65
|
+
|
66
|
+
#### Usage
|
67
|
+
|
68
|
+
```
|
69
|
+
author = Nelumba::Person.new(:name => "Kelly")
|
70
|
+
feed = Nelumba::Feed.new(:title => "My Feed",
|
71
|
+
:id => "1",
|
72
|
+
:url => "http://example.com/feeds/1",
|
73
|
+
:authors => [author])
|
74
|
+
```
|
75
|
+
|
76
|
+
#### Fields
|
77
|
+
```
|
78
|
+
id => The unique identifier for this feed.
|
79
|
+
url => The url that represents this feed.
|
80
|
+
title => The title for this feed. Defaults: "Untitled"
|
81
|
+
title_type => The content type for the title.
|
82
|
+
subtitle => The subtitle for this feed.
|
83
|
+
subtitle_type => The content type for the subtitle.
|
84
|
+
authors => The list of Nelumba::Person's for this feed.
|
85
|
+
Defaults: []
|
86
|
+
contributors => The list of Nelumba::Person's that contributed to this
|
87
|
+
feed. Defaults: []
|
88
|
+
entries => The list of Nelumba::Activity's for this feed.
|
89
|
+
Defaults: []
|
90
|
+
icon => The url of the icon that represents this feed. It
|
91
|
+
should have an aspect ratio of 1 horizontal to 1
|
92
|
+
vertical and optimized for presentation at a
|
93
|
+
small size.
|
94
|
+
logo => The url of the logo that represents this feed. It
|
95
|
+
should have an aspect ratio of 2 horizontal to 1
|
96
|
+
vertical.
|
97
|
+
categories => An array of Nelumba::Category's that describe how to
|
98
|
+
categorize and describe the content of the feed.
|
99
|
+
Defaults: []
|
100
|
+
rights => A String depicting the rights of entries without
|
101
|
+
explicit rights of their own. SHOULD NOT be machine
|
102
|
+
interpreted.
|
103
|
+
updated => The DateTime representing when this feed was last
|
104
|
+
modified.
|
105
|
+
published => The DateTime representing when this feed was originally
|
106
|
+
published.
|
107
|
+
salmon_url => The url of the salmon endpoint, if one exists, for this
|
108
|
+
feed.
|
109
|
+
links => An array of Nelumba::Link that adds relations to other
|
110
|
+
resources.
|
111
|
+
generator => An Nelumba::Generator representing the agent
|
112
|
+
responsible for generating this feed.
|
113
|
+
```
|
114
|
+
|
115
|
+
### Activity
|
116
|
+
|
117
|
+
Something that is done by a person. It has a verb, which suggests what was done
|
118
|
+
(e.g. :follow, or :unfollow, or :post) and it has an object, which is the
|
119
|
+
content. The content type is what the entity represents and governs how to
|
120
|
+
interpret the object. It can be a :note or :post or :image, etc.
|
121
|
+
|
122
|
+
#### Usage
|
123
|
+
```
|
124
|
+
entry = Nelumba::Activity.new(:type => :note,
|
125
|
+
:title => "wilkie's Daily Update",
|
126
|
+
:content => "My day is going really well!",
|
127
|
+
:id => "123",
|
128
|
+
:url => "http://example.com/entries/123")
|
129
|
+
```
|
130
|
+
|
131
|
+
#### Fields
|
132
|
+
```
|
133
|
+
:title => The title of the entry. Defaults: "Untitled"
|
134
|
+
:actor => An Nelumba::Person responsible for generating this entry.
|
135
|
+
:content => The content of the entry. Defaults: ""
|
136
|
+
:content_type => The MIME type of the content.
|
137
|
+
:published => The DateTime depicting when the entry was originally
|
138
|
+
published.
|
139
|
+
:updated => The DateTime depicting when the entry was modified.
|
140
|
+
:url => The canonical url of the entry.
|
141
|
+
:id => The unique id that identifies this entry.
|
142
|
+
:activity => The activity this entry represents. Either a single string
|
143
|
+
denoting what type of object this entry represents, or an
|
144
|
+
entire Nelumba::Activity when a more detailed description is
|
145
|
+
appropriate.
|
146
|
+
:in_reply_to => An Nelumba::Activity for which this entry is a response.
|
147
|
+
Or an array of Nelumba::Activity's that this entry is a
|
148
|
+
response to. Use this when this Activity is a reply
|
149
|
+
to an existing Activity.
|
150
|
+
```
|
151
|
+
|
152
|
+
### Person
|
153
|
+
|
154
|
+
This represents a person that creates or contributes content in the feed.
|
155
|
+
Feed and Activity can both have one or more Persons or Contributors. One can
|
156
|
+
represent a great deal of information about a person.
|
157
|
+
|
158
|
+
#### Usage
|
159
|
+
|
160
|
+
```
|
161
|
+
author = Nelumba::Person.new(:name => "wilkie",
|
162
|
+
:uri => "https://rstat.us/users/wilkie",
|
163
|
+
:email => "wilkie@xomb.org",
|
164
|
+
:preferredUsername => "wilkie",
|
165
|
+
:organization => {:name => "Hackers of the Severed Hand",
|
166
|
+
:department => "Software",
|
167
|
+
:title => "Founder"},
|
168
|
+
:gender => "androgynous",
|
169
|
+
:display_name => "Dave Wilkinson",
|
170
|
+
:birthday => Time.new(1987, 2, 9))
|
171
|
+
```
|
172
|
+
|
173
|
+
#### Fields
|
174
|
+
|
175
|
+
```
|
176
|
+
:name => The name of the author. Defaults: "anonymous"
|
177
|
+
:id => The identifier that uniquely identifies the
|
178
|
+
contact.
|
179
|
+
:nickname => The nickname of the contact.
|
180
|
+
:gender => The gender of the contact.
|
181
|
+
:note => A note for this contact.
|
182
|
+
:display_name => The display name for this contact.
|
183
|
+
:preferred_username => The preferred username for this contact.
|
184
|
+
:updated => A DateTime representing when this contact was
|
185
|
+
last updated.
|
186
|
+
:published => A DateTime representing when this contact was
|
187
|
+
originally created.
|
188
|
+
:birthday => A DateTime representing a birthday for this
|
189
|
+
contact.
|
190
|
+
:anniversary => A DateTime representing an anniversary for this
|
191
|
+
contact.
|
192
|
+
:extended_name => A Hash representing the name of the contact.
|
193
|
+
:formatted => The full name of the contact
|
194
|
+
:family_name => The family name. "Last name" in Western contexts.
|
195
|
+
:given_name => The given name. "First name" in Western contexts.
|
196
|
+
:middle_name => The middle name.
|
197
|
+
:honorific_prefix => "Title" in Western contexts. (e.g. "Mr." "Mrs.")
|
198
|
+
:honorific_suffix => "Suffix" in Western contexts. (e.g. "Esq.")
|
199
|
+
:organization => A Hash representing the organization of which the
|
200
|
+
contact belongs.
|
201
|
+
:name => The name of the organization (e.g. company, school,
|
202
|
+
etc) This field is required. Will be used for sorting.
|
203
|
+
:department => The department within the organization.
|
204
|
+
:title => The title or role within the organization.
|
205
|
+
:type => The type of organization. Canonical values include
|
206
|
+
"job" or "school"
|
207
|
+
:start_date => A DateTime representing when the contact joined
|
208
|
+
the organization.
|
209
|
+
:end_date => A DateTime representing when the contact left the
|
210
|
+
organization.
|
211
|
+
:location => The physical location of this organization.
|
212
|
+
:description => A free-text description of the role this contact
|
213
|
+
played in this organization.
|
214
|
+
:account => A Hash describing the authorative account for the
|
215
|
+
author.
|
216
|
+
:domain => The top-most authoriative domain for this account. (e.g.
|
217
|
+
"twitter.com") This is the primary field. Is required.
|
218
|
+
Used for sorting.
|
219
|
+
:username => An alphanumeric username, typically chosen by the user.
|
220
|
+
:userid => A user id, typically assigned, that uniquely refers to
|
221
|
+
the user.
|
222
|
+
:address => A Hash describing the address of the contact.
|
223
|
+
:formatted => A formatted representating of the address. May
|
224
|
+
contain newlines.
|
225
|
+
:street_address => The full street address. May contain newlines.
|
226
|
+
:locality => The city or locality component.
|
227
|
+
:region => The state or region component.
|
228
|
+
:postal_code => The zipcode or postal code component.
|
229
|
+
:country => The country name component.
|
230
|
+
:uri => The uri that uniquely identifies this author.
|
231
|
+
:email => The email of the author.
|
232
|
+
```
|
233
|
+
|
234
|
+
## TODO
|
235
|
+
|
236
|
+
* General cleanup and abstraction of elements of Atom et al that aren't very consistent or useful.
|
237
|
+
* Add a persistence layer and allow this to be mixed with Rails and Sinatra style models.
|
238
|
+
* Add rails/sinatra aides to allow rapid development of Nelumba powered websites.
|
239
|
+
* Add already written osub/opub functionality to allow this gem to subscribe directly to other Nelumba powered websites.
|
240
|
+
* Add Webfinger user identity and verification written in the Salmon library and pull the remaining logic out of rstat.us.
|
241
|
+
* Add JSON backend.
|
242
|
+
* Write a PuSH hub to aid in small-scale deployment. (Possibly as a detached project. Nelumba talks to the hub via a socket.)
|
data/Rakefile
ADDED
Binary file
|
@@ -0,0 +1,262 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2
|
+
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
3
|
+
|
4
|
+
<svg
|
5
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
6
|
+
xmlns:cc="http://creativecommons.org/ns#"
|
7
|
+
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
8
|
+
xmlns:svg="http://www.w3.org/2000/svg"
|
9
|
+
xmlns="http://www.w3.org/2000/svg"
|
10
|
+
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
11
|
+
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
12
|
+
width="411.54999"
|
13
|
+
height="411.54999"
|
14
|
+
id="svg5725"
|
15
|
+
version="1.1"
|
16
|
+
inkscape:version="0.48.2 r9819"
|
17
|
+
sodipodi:docname="New document 59">
|
18
|
+
<defs
|
19
|
+
id="defs5727" />
|
20
|
+
<sodipodi:namedview
|
21
|
+
id="base"
|
22
|
+
pagecolor="#ffffff"
|
23
|
+
bordercolor="#666666"
|
24
|
+
borderopacity="1.0"
|
25
|
+
inkscape:pageopacity="0.0"
|
26
|
+
inkscape:pageshadow="2"
|
27
|
+
inkscape:zoom="0.35"
|
28
|
+
inkscape:cx="229.34674"
|
29
|
+
inkscape:cy="126.4625"
|
30
|
+
inkscape:document-units="px"
|
31
|
+
inkscape:current-layer="layer1"
|
32
|
+
showgrid="false"
|
33
|
+
fit-margin-top="10"
|
34
|
+
fit-margin-left="10"
|
35
|
+
fit-margin-right="10"
|
36
|
+
fit-margin-bottom="10"
|
37
|
+
inkscape:window-width="1920"
|
38
|
+
inkscape:window-height="1058"
|
39
|
+
inkscape:window-x="-8"
|
40
|
+
inkscape:window-y="-8"
|
41
|
+
inkscape:window-maximized="1" />
|
42
|
+
<metadata
|
43
|
+
id="metadata5730">
|
44
|
+
<rdf:RDF>
|
45
|
+
<cc:Work
|
46
|
+
rdf:about="">
|
47
|
+
<dc:format>image/svg+xml</dc:format>
|
48
|
+
<dc:type
|
49
|
+
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
50
|
+
<dc:title></dc:title>
|
51
|
+
</cc:Work>
|
52
|
+
</rdf:RDF>
|
53
|
+
</metadata>
|
54
|
+
<g
|
55
|
+
inkscape:label="Layer 1"
|
56
|
+
inkscape:groupmode="layer"
|
57
|
+
id="layer1"
|
58
|
+
transform="translate(-145.65325,-247.27465)">
|
59
|
+
<g
|
60
|
+
transform="matrix(-2.6456033e-8,1.5070386,-1.5070386,-2.6456033e-8,1540.9511,-56.394592)"
|
61
|
+
id="g4799-0-7-6-0-0"
|
62
|
+
style="fill:#441650;stroke:#ddafe9"
|
63
|
+
inkscape:export-filename="C:\Users\wilkie\Pictures\lotus_avatar.png"
|
64
|
+
inkscape:export-xdpi="10.57"
|
65
|
+
inkscape:export-ydpi="10.57">
|
66
|
+
<path
|
67
|
+
sodipodi:nodetypes="ccacccc"
|
68
|
+
inkscape:connector-curvature="0"
|
69
|
+
id="path4648-5-0-7-0-9-8"
|
70
|
+
d="m 314.30878,699.69468 c -3.36113,3.36113 -13.98266,11.85868 -7.9375,35.08303 10.35109,-6.17393 21.61773,-8.80467 32.96875,-8.55714 11.3068,0.24656 23.65603,3.92474 32.4375,9.9473 6.04516,-23.22435 -4.17012,-33.11206 -7.53125,-36.47319 -11.56406,-14.53668 -22.15345,-18.95866 -25.125,-30.53125 -3.13528,11.45869 -14.70913,19.33728 -24.8125,30.53125 z"
|
71
|
+
style="fill:#441650;stroke:#ddafe9;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
72
|
+
<path
|
73
|
+
sodipodi:nodetypes="ccacccc"
|
74
|
+
inkscape:connector-curvature="0"
|
75
|
+
id="path4648-5-7-1-7-3-4-8"
|
76
|
+
d="m 404.02684,724.21119 c -4.59139,-1.23026 -17.26125,-6.18 -34.35155,10.66743 10.52233,5.87735 18.43393,14.31917 23.89508,24.27321 5.43987,9.91526 8.42909,22.44909 7.60413,33.06535 23.13546,-6.37691 26.59083,-20.16746 27.82109,-24.75885 6.8071,-17.28311 5.34195,-28.66478 13.87833,-37.02451 -11.49115,3.01411 -24.10114,-3.06984 -38.84708,-6.22263 z"
|
77
|
+
style="fill:#441650;stroke:#ddafe9;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
78
|
+
<path
|
79
|
+
sodipodi:nodetypes="ccacccc"
|
80
|
+
inkscape:connector-curvature="0"
|
81
|
+
id="path4648-5-7-5-46-7-8-7-0"
|
82
|
+
d="m 427.64223,813.60848 c -1.23026,-4.59139 -3.27859,-18.03868 -26.41404,-24.4156 0.17123,12.05128 -3.1838,23.12384 -9.07368,32.83035 -5.86693,9.6687 -15.22694,18.52436 -24.83337,23.11805 17.0903,16.84744 30.76095,12.9446 35.35234,11.71435 18.37116,-2.74644 27.4954,-9.70613 39.00333,-6.49327 -8.35587,-8.44458 -9.39201,-22.40712 -14.03458,-36.75388 z"
|
83
|
+
style="fill:#441650;stroke:#ddafe9;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
84
|
+
<path
|
85
|
+
sodipodi:nodetypes="ccacccc"
|
86
|
+
inkscape:connector-curvature="0"
|
87
|
+
id="path4648-5-7-5-4-0-3-0-8-6"
|
88
|
+
d="m 361.52776,878.92821 c 3.36113,-3.36113 13.98266,-11.85869 7.93751,-35.08303 -10.3511,6.17393 -21.61773,8.80467 -32.96876,8.55714 -11.3068,-0.24657 -23.65603,-3.92474 -32.4375,-9.94731 -6.04516,23.22435 4.17012,33.11207 7.53125,36.4732 11.56406,14.53667 22.15345,18.95865 25.125,30.53124 3.13528,-11.45869 14.70913,-19.33728 24.8125,-30.53124 z"
|
89
|
+
style="fill:#441650;stroke:#ddafe9;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
90
|
+
<path
|
91
|
+
sodipodi:nodetypes="ccacccc"
|
92
|
+
inkscape:connector-curvature="0"
|
93
|
+
id="path4648-5-7-5-4-1-7-3-1-3-8"
|
94
|
+
d="m 272.0597,854.6617 c 4.59139,1.23026 17.26125,6.17999 34.35155,-10.66743 -10.52233,-5.87735 -18.43394,-14.31917 -23.89508,-24.27322 -5.43987,-9.91526 -8.42909,-22.44909 -7.60413,-33.06535 -23.13546,6.37691 -26.59083,20.16746 -27.82109,24.75885 -6.8071,17.28311 -5.34195,28.66478 -13.87833,37.02451 11.49115,-3.01411 24.10114,3.06984 38.84708,6.22264 z"
|
95
|
+
style="fill:#441650;stroke:#ddafe9;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
96
|
+
<path
|
97
|
+
sodipodi:nodetypes="ccacccc"
|
98
|
+
inkscape:connector-curvature="0"
|
99
|
+
id="path4648-5-7-5-4-1-2-1-5-2-5-1"
|
100
|
+
d="m 248.63238,764.90272 c 1.23026,4.59139 3.27859,18.03868 26.41404,24.4156 -0.17123,-12.05128 3.18379,-23.12384 9.07368,-32.83035 5.86694,-9.6687 15.22694,-18.52435 24.83337,-23.11805 -17.09029,-16.84744 -30.76095,-12.9446 -35.35234,-11.71434 -18.37116,2.74643 -27.4954,9.70612 -39.00333,6.49327 8.35587,8.44457 9.39201,22.40711 14.03458,36.75387 z"
|
101
|
+
style="fill:#441650;stroke:#ddafe9;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
102
|
+
</g>
|
103
|
+
<g
|
104
|
+
transform="matrix(0.65174623,1.1288576,-1.1288576,0.65174623,1022.0797,-443.02901)"
|
105
|
+
id="g4799-0-7-1-9"
|
106
|
+
style="fill:#ddafe9;stroke:#672178"
|
107
|
+
inkscape:export-filename="C:\Users\wilkie\Pictures\lotus_avatar.png"
|
108
|
+
inkscape:export-xdpi="10.57"
|
109
|
+
inkscape:export-ydpi="10.57">
|
110
|
+
<path
|
111
|
+
sodipodi:nodetypes="ccacccc"
|
112
|
+
inkscape:connector-curvature="0"
|
113
|
+
id="path4648-5-0-7-2-8"
|
114
|
+
d="m 314.30878,699.69468 c -3.36113,3.36113 -13.98266,11.85868 -7.9375,35.08303 10.35109,-6.17393 21.61773,-8.80467 32.96875,-8.55714 11.3068,0.24656 23.65603,3.92474 32.4375,9.9473 6.04516,-23.22435 -4.17012,-33.11206 -7.53125,-36.47319 -11.56406,-14.53668 -22.15345,-18.95866 -25.125,-30.53125 -3.13528,11.45869 -14.70913,19.33728 -24.8125,30.53125 z"
|
115
|
+
style="fill:#ddafe9;stroke:#672178;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
116
|
+
<path
|
117
|
+
sodipodi:nodetypes="ccacccc"
|
118
|
+
inkscape:connector-curvature="0"
|
119
|
+
id="path4648-5-7-1-7-0-9"
|
120
|
+
d="m 404.02684,724.21119 c -4.59139,-1.23026 -17.26125,-6.18 -34.35155,10.66743 10.52233,5.87735 18.43393,14.31917 23.89508,24.27321 5.43987,9.91526 8.42909,22.44909 7.60413,33.06535 23.13546,-6.37691 26.59083,-20.16746 27.82109,-24.75885 6.8071,-17.28311 5.34195,-28.66478 13.87833,-37.02451 -11.49115,3.01411 -24.10114,-3.06984 -38.84708,-6.22263 z"
|
121
|
+
style="fill:#ddafe9;stroke:#672178;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
122
|
+
<path
|
123
|
+
sodipodi:nodetypes="ccacccc"
|
124
|
+
inkscape:connector-curvature="0"
|
125
|
+
id="path4648-5-7-5-46-7-1-7"
|
126
|
+
d="m 427.64223,813.60848 c -1.23026,-4.59139 -3.27859,-18.03868 -26.41404,-24.4156 0.17123,12.05128 -3.1838,23.12384 -9.07368,32.83035 -5.86693,9.6687 -15.22694,18.52436 -24.83337,23.11805 17.0903,16.84744 30.76095,12.9446 35.35234,11.71435 18.37116,-2.74644 27.4954,-9.70613 39.00333,-6.49327 -8.35587,-8.44458 -9.39201,-22.40712 -14.03458,-36.75388 z"
|
127
|
+
style="fill:#ddafe9;stroke:#672178;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
128
|
+
<path
|
129
|
+
sodipodi:nodetypes="ccacccc"
|
130
|
+
inkscape:connector-curvature="0"
|
131
|
+
id="path4648-5-7-5-4-0-3-6-2"
|
132
|
+
d="m 361.52776,878.92821 c 3.36113,-3.36113 13.98266,-11.85869 7.93751,-35.08303 -10.3511,6.17393 -21.61773,8.80467 -32.96876,8.55714 -11.3068,-0.24657 -23.65603,-3.92474 -32.4375,-9.94731 -6.04516,23.22435 4.17012,33.11207 7.53125,36.4732 11.56406,14.53667 22.15345,18.95865 25.125,30.53124 3.13528,-11.45869 14.70913,-19.33728 24.8125,-30.53124 z"
|
133
|
+
style="fill:#ddafe9;stroke:#672178;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
134
|
+
<path
|
135
|
+
sodipodi:nodetypes="ccacccc"
|
136
|
+
inkscape:connector-curvature="0"
|
137
|
+
id="path4648-5-7-5-4-1-7-3-4-2"
|
138
|
+
d="m 272.0597,854.6617 c 4.59139,1.23026 17.26125,6.17999 34.35155,-10.66743 -10.52233,-5.87735 -18.43394,-14.31917 -23.89508,-24.27322 -5.43987,-9.91526 -8.42909,-22.44909 -7.60413,-33.06535 -23.13546,6.37691 -26.59083,20.16746 -27.82109,24.75885 -6.8071,17.28311 -5.34195,28.66478 -13.87833,37.02451 11.49115,-3.01411 24.10114,3.06984 38.84708,6.22264 z"
|
139
|
+
style="fill:#ddafe9;stroke:#672178;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
140
|
+
<path
|
141
|
+
sodipodi:nodetypes="ccacccc"
|
142
|
+
inkscape:connector-curvature="0"
|
143
|
+
id="path4648-5-7-5-4-1-2-1-5-0-8"
|
144
|
+
d="m 248.63238,764.90272 c 1.23026,4.59139 3.27859,18.03868 26.41404,24.4156 -0.17123,-12.05128 3.18379,-23.12384 9.07368,-32.83035 5.86694,-9.6687 15.22694,-18.52435 24.83337,-23.11805 -17.09029,-16.84744 -30.76095,-12.9446 -35.35234,-11.71434 -18.37116,2.74643 -27.4954,9.70612 -39.00333,6.49327 8.35587,8.44457 9.39201,22.40711 14.03458,36.75387 z"
|
145
|
+
style="fill:#ddafe9;stroke:#672178;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
146
|
+
</g>
|
147
|
+
<g
|
148
|
+
id="g4799-6-2"
|
149
|
+
style="fill:#bc5fd3;stroke:#672178"
|
150
|
+
transform="translate(13.327535,-336.34786)"
|
151
|
+
inkscape:export-filename="C:\Users\wilkie\Pictures\lotus_avatar.png"
|
152
|
+
inkscape:export-xdpi="10.57"
|
153
|
+
inkscape:export-ydpi="10.57">
|
154
|
+
<path
|
155
|
+
sodipodi:nodetypes="ccacccc"
|
156
|
+
inkscape:connector-curvature="0"
|
157
|
+
id="path4648-5-1-8"
|
158
|
+
d="m 314.30878,699.69468 c -3.36113,3.36113 -13.98266,11.85868 -7.9375,35.08303 10.35109,-6.17393 21.61773,-8.80467 32.96875,-8.55714 11.3068,0.24656 23.65603,3.92474 32.4375,9.9473 6.04516,-23.22435 -4.17012,-33.11206 -7.53125,-36.47319 -11.56406,-14.53668 -22.15345,-18.95866 -25.125,-30.53125 -3.13528,11.45869 -14.70913,19.33728 -24.8125,30.53125 z"
|
159
|
+
style="fill:#bc5fd3;stroke:#672178;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
160
|
+
<path
|
161
|
+
sodipodi:nodetypes="ccacccc"
|
162
|
+
inkscape:connector-curvature="0"
|
163
|
+
id="path4648-5-7-8-9"
|
164
|
+
d="m 404.02684,724.21119 c -4.59139,-1.23026 -17.26125,-6.18 -34.35155,10.66743 10.52233,5.87735 18.43393,14.31917 23.89508,24.27321 5.43987,9.91526 8.42909,22.44909 7.60413,33.06535 23.13546,-6.37691 26.59083,-20.16746 27.82109,-24.75885 6.8071,-17.28311 5.34195,-28.66478 13.87833,-37.02451 -11.49115,3.01411 -24.10114,-3.06984 -38.84708,-6.22263 z"
|
165
|
+
style="fill:#bc5fd3;stroke:#672178;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
166
|
+
<path
|
167
|
+
sodipodi:nodetypes="ccacccc"
|
168
|
+
inkscape:connector-curvature="0"
|
169
|
+
id="path4648-5-7-5-9-0"
|
170
|
+
d="m 427.64223,813.60848 c -1.23026,-4.59139 -3.27859,-18.03868 -26.41404,-24.4156 0.17123,12.05128 -3.1838,23.12384 -9.07368,32.83035 -5.86693,9.6687 -15.22694,18.52436 -24.83337,23.11805 17.0903,16.84744 30.76095,12.9446 35.35234,11.71435 18.37116,-2.74644 27.4954,-9.70613 39.00333,-6.49327 -8.35587,-8.44458 -9.39201,-22.40712 -14.03458,-36.75388 z"
|
171
|
+
style="fill:#bc5fd3;stroke:#672178;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
172
|
+
<path
|
173
|
+
sodipodi:nodetypes="ccacccc"
|
174
|
+
inkscape:connector-curvature="0"
|
175
|
+
id="path4648-5-7-5-4-8-7"
|
176
|
+
d="m 361.52776,878.92821 c 3.36113,-3.36113 13.98266,-11.85869 7.93751,-35.08303 -10.3511,6.17393 -21.61773,8.80467 -32.96876,8.55714 -11.3068,-0.24657 -23.65603,-3.92474 -32.4375,-9.94731 -6.04516,23.22435 4.17012,33.11207 7.53125,36.4732 11.56406,14.53667 22.15345,18.95865 25.125,30.53124 3.13528,-11.45869 14.70913,-19.33728 24.8125,-30.53124 z"
|
177
|
+
style="fill:#bc5fd3;stroke:#672178;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
178
|
+
<path
|
179
|
+
sodipodi:nodetypes="ccacccc"
|
180
|
+
inkscape:connector-curvature="0"
|
181
|
+
id="path4648-5-7-5-4-1-4-8"
|
182
|
+
d="m 272.0597,854.6617 c 4.59139,1.23026 17.26125,6.17999 34.35155,-10.66743 -10.52233,-5.87735 -18.43394,-14.31917 -23.89508,-24.27322 -5.43987,-9.91526 -8.42909,-22.44909 -7.60413,-33.06535 -23.13546,6.37691 -26.59083,20.16746 -27.82109,24.75885 -6.8071,17.28311 -5.34195,28.66478 -13.87833,37.02451 11.49115,-3.01411 24.10114,3.06984 38.84708,6.22264 z"
|
183
|
+
style="fill:#bc5fd3;stroke:#672178;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
184
|
+
<path
|
185
|
+
sodipodi:nodetypes="ccacccc"
|
186
|
+
inkscape:connector-curvature="0"
|
187
|
+
id="path4648-5-7-5-4-1-2-14-1"
|
188
|
+
d="m 248.63238,764.90272 c 1.23026,4.59139 3.27859,18.03868 26.41404,24.4156 -0.17123,-12.05128 3.18379,-23.12384 9.07368,-32.83035 5.86694,-9.6687 15.22694,-18.52435 24.83337,-23.11805 -17.09029,-16.84744 -30.76095,-12.9446 -35.35234,-11.71434 -18.37116,2.74643 -27.4954,9.70612 -39.00333,6.49327 8.35587,8.44457 9.39201,22.40711 14.03458,36.75387 z"
|
189
|
+
style="fill:#bc5fd3;stroke:#672178;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
190
|
+
</g>
|
191
|
+
<g
|
192
|
+
transform="matrix(0.8660254,0.5,-0.5,0.8660254,453.27246,-399.62181)"
|
193
|
+
id="g4799-0-3-5"
|
194
|
+
style="fill:#672178;stroke:#ddafe9"
|
195
|
+
inkscape:export-filename="C:\Users\wilkie\Pictures\lotus_avatar.png"
|
196
|
+
inkscape:export-xdpi="10.57"
|
197
|
+
inkscape:export-ydpi="10.57">
|
198
|
+
<path
|
199
|
+
sodipodi:nodetypes="ccacccc"
|
200
|
+
inkscape:connector-curvature="0"
|
201
|
+
id="path4648-5-0-9-8"
|
202
|
+
d="m 314.30878,699.69468 c -3.36113,3.36113 -13.98266,11.85868 -7.9375,35.08303 10.35109,-6.17393 21.61773,-8.80467 32.96875,-8.55714 11.3068,0.24656 23.65603,3.92474 32.4375,9.9473 6.04516,-23.22435 -4.17012,-33.11206 -7.53125,-36.47319 -11.56406,-14.53668 -22.15345,-18.95866 -25.125,-30.53125 -3.13528,11.45869 -14.70913,19.33728 -24.8125,30.53125 z"
|
203
|
+
style="fill:#672178;stroke:#ddafe9;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
204
|
+
<path
|
205
|
+
sodipodi:nodetypes="ccacccc"
|
206
|
+
inkscape:connector-curvature="0"
|
207
|
+
id="path4648-5-7-1-8-6"
|
208
|
+
d="m 404.02684,724.21119 c -4.59139,-1.23026 -17.26125,-6.18 -34.35155,10.66743 10.52233,5.87735 18.43393,14.31917 23.89508,24.27321 5.43987,9.91526 8.42909,22.44909 7.60413,33.06535 23.13546,-6.37691 26.59083,-20.16746 27.82109,-24.75885 6.8071,-17.28311 5.34195,-28.66478 13.87833,-37.02451 -11.49115,3.01411 -24.10114,-3.06984 -38.84708,-6.22263 z"
|
209
|
+
style="fill:#672178;stroke:#ddafe9;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
210
|
+
<path
|
211
|
+
sodipodi:nodetypes="ccacccc"
|
212
|
+
inkscape:connector-curvature="0"
|
213
|
+
id="path4648-5-7-5-46-8-1"
|
214
|
+
d="m 427.64223,813.60848 c -1.23026,-4.59139 -3.27859,-18.03868 -26.41404,-24.4156 0.17123,12.05128 -3.1838,23.12384 -9.07368,32.83035 -5.86693,9.6687 -15.22694,18.52436 -24.83337,23.11805 17.0903,16.84744 30.76095,12.9446 35.35234,11.71435 18.37116,-2.74644 27.4954,-9.70613 39.00333,-6.49327 -8.35587,-8.44458 -9.39201,-22.40712 -14.03458,-36.75388 z"
|
215
|
+
style="fill:#672178;stroke:#ddafe9;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
216
|
+
<path
|
217
|
+
sodipodi:nodetypes="ccacccc"
|
218
|
+
inkscape:connector-curvature="0"
|
219
|
+
id="path4648-5-7-5-4-0-0-2"
|
220
|
+
d="m 361.52776,878.92821 c 3.36113,-3.36113 13.98266,-11.85869 7.93751,-35.08303 -10.3511,6.17393 -21.61773,8.80467 -32.96876,8.55714 -11.3068,-0.24657 -23.65603,-3.92474 -32.4375,-9.94731 -6.04516,23.22435 4.17012,33.11207 7.53125,36.4732 11.56406,14.53667 22.15345,18.95865 25.125,30.53124 3.13528,-11.45869 14.70913,-19.33728 24.8125,-30.53124 z"
|
221
|
+
style="fill:#672178;stroke:#ddafe9;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
222
|
+
<path
|
223
|
+
sodipodi:nodetypes="ccacccc"
|
224
|
+
inkscape:connector-curvature="0"
|
225
|
+
id="path4648-5-7-5-4-1-7-8-4"
|
226
|
+
d="m 272.0597,854.6617 c 4.59139,1.23026 17.26125,6.17999 34.35155,-10.66743 -10.52233,-5.87735 -18.43394,-14.31917 -23.89508,-24.27322 -5.43987,-9.91526 -8.42909,-22.44909 -7.60413,-33.06535 -23.13546,6.37691 -26.59083,20.16746 -27.82109,24.75885 -6.8071,17.28311 -5.34195,28.66478 -13.87833,37.02451 11.49115,-3.01411 24.10114,3.06984 38.84708,6.22264 z"
|
227
|
+
style="fill:#672178;stroke:#ddafe9;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
228
|
+
<path
|
229
|
+
sodipodi:nodetypes="ccacccc"
|
230
|
+
inkscape:connector-curvature="0"
|
231
|
+
id="path4648-5-7-5-4-1-2-1-7-2"
|
232
|
+
d="m 248.63238,764.90272 c 1.23026,4.59139 3.27859,18.03868 26.41404,24.4156 -0.17123,-12.05128 3.18379,-23.12384 9.07368,-32.83035 5.86694,-9.6687 15.22694,-18.52435 24.83337,-23.11805 -17.09029,-16.84744 -30.76095,-12.9446 -35.35234,-11.71434 -18.37116,2.74643 -27.4954,9.70612 -39.00333,6.49327 8.35587,8.44457 9.39201,22.40711 14.03458,36.75387 z"
|
233
|
+
style="fill:#672178;stroke:#ddafe9;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
234
|
+
</g>
|
235
|
+
<path
|
236
|
+
sodipodi:type="arc"
|
237
|
+
style="fill:#ddafe9;stroke:#cd87de;stroke-width:5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
238
|
+
id="path2985-2-5-7-5"
|
239
|
+
sodipodi:cx="385.3732"
|
240
|
+
sodipodi:cy="533.64886"
|
241
|
+
sodipodi:rx="63.134533"
|
242
|
+
sodipodi:ry="63.134533"
|
243
|
+
d="m 448.50773,533.64886 a 63.134533,63.134533 0 1 1 -126.26906,0 63.134533,63.134533 0 1 1 126.26906,0 z"
|
244
|
+
transform="translate(-34.169945,-80.733702)"
|
245
|
+
inkscape:export-filename="C:\Users\wilkie\Pictures\lotus_avatar.png"
|
246
|
+
inkscape:export-xdpi="10.57"
|
247
|
+
inkscape:export-ydpi="10.57" />
|
248
|
+
<path
|
249
|
+
sodipodi:type="arc"
|
250
|
+
style="fill:#d5e5ff;stroke:#5f5fd3;stroke-width:13;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
251
|
+
id="path2985-5-8-8-8"
|
252
|
+
sodipodi:cx="385.3732"
|
253
|
+
sodipodi:cy="533.64886"
|
254
|
+
sodipodi:rx="63.134533"
|
255
|
+
sodipodi:ry="63.134533"
|
256
|
+
d="m 448.50773,533.64886 a 63.134533,63.134533 0 1 1 -126.26906,0 63.134533,63.134533 0 1 1 126.26906,0 z"
|
257
|
+
transform="matrix(0.87075378,0,0,0.87075378,15.863104,-11.627123)"
|
258
|
+
inkscape:export-filename="C:\Users\wilkie\Pictures\lotus_avatar.png"
|
259
|
+
inkscape:export-xdpi="10.57"
|
260
|
+
inkscape:export-ydpi="10.57" />
|
261
|
+
</g>
|
262
|
+
</svg>
|