githubchart 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +2 -0
  5. data/.travis.yml +14 -0
  6. data/Gemfile +4 -0
  7. data/Gemfile.lock +81 -0
  8. data/LICENSE +22 -0
  9. data/README.md +25 -0
  10. data/Rakefile +19 -0
  11. data/bin/githubchart +27 -0
  12. data/examples/chart.svg +6 -0
  13. data/examples/other_user.svg +6 -0
  14. data/githubchart.gemspec +27 -0
  15. data/lib/githubchart.rb +95 -0
  16. data/lib/githubchart/svg.rb +98 -0
  17. data/spec/spec_helper.rb +10 -0
  18. data/vendor/cache/ast-1.1.0.gem +0 -0
  19. data/vendor/cache/basiccache-0.0.25.gem +0 -0
  20. data/vendor/cache/coveralls-0.7.0.gem +0 -0
  21. data/vendor/cache/curb-0.8.5.gem +0 -0
  22. data/vendor/cache/diff-lcs-1.2.5.gem +0 -0
  23. data/vendor/cache/docile-1.1.1.gem +0 -0
  24. data/vendor/cache/fuubar-1.2.1.gem +0 -0
  25. data/vendor/cache/githubstats-0.2.3.gem +0 -0
  26. data/vendor/cache/hashr-0.0.22.gem +0 -0
  27. data/vendor/cache/json-1.8.1.gem +0 -0
  28. data/vendor/cache/mime-types-2.0.gem +0 -0
  29. data/vendor/cache/multi_json-1.8.2.gem +0 -0
  30. data/vendor/cache/parser-2.1.0.pre2.gem +0 -0
  31. data/vendor/cache/powerpack-0.0.9.gem +0 -0
  32. data/vendor/cache/rainbow-1.1.4.gem +0 -0
  33. data/vendor/cache/rake-10.1.0.gem +0 -0
  34. data/vendor/cache/rasem-0.6.1.gem +0 -0
  35. data/vendor/cache/rest-client-1.6.7.gem +0 -0
  36. data/vendor/cache/rspec-2.14.1.gem +0 -0
  37. data/vendor/cache/rspec-core-2.14.7.gem +0 -0
  38. data/vendor/cache/rspec-expectations-2.14.4.gem +0 -0
  39. data/vendor/cache/rspec-instafail-0.2.4.gem +0 -0
  40. data/vendor/cache/rspec-mocks-2.14.4.gem +0 -0
  41. data/vendor/cache/rubocop-0.15.0.gem +0 -0
  42. data/vendor/cache/ruby-progressbar-1.2.0.gem +0 -0
  43. data/vendor/cache/simplecov-0.8.2.gem +0 -0
  44. data/vendor/cache/simplecov-html-0.8.0.gem +0 -0
  45. data/vendor/cache/slop-3.4.7.gem +0 -0
  46. data/vendor/cache/term-ansicolor-1.2.2.gem +0 -0
  47. data/vendor/cache/thor-0.18.1.gem +0 -0
  48. data/vendor/cache/tins-0.13.1.gem +0 -0
  49. data/vendor/cache/travis-lint-1.7.0.gem +0 -0
  50. metadata +221 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: bdac5ac1afcbbc3eaee06bb5f4b634f87ba9548e
4
+ data.tar.gz: 9887848ec0fffee018df3bc674bd0f6344ce170b
5
+ SHA512:
6
+ metadata.gz: cdc40915ac56a0174dea41543ace55d266b076aae01cad2fdbb49d8ee9f606ffa88f65ad5351ad8b00cc14d3fd3ba8b0a7b0bf853e524ed2db406befe453df2a
7
+ data.tar.gz: fae313f0eda227cc99f0bf481e44ad67263d25e624fad596d574988b8957a150864b2aed44a2d1e4a420092373f366d9fdd7a5fed1d3149eb337b818abd1967c
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ pkg/*.gem
2
+ coverage/
3
+ .coveralls.yml
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format Fuubar
2
+ --color
data/.rubocop.yml ADDED
@@ -0,0 +1,2 @@
1
+ Encoding:
2
+ Enabled: false
data/.travis.yml ADDED
@@ -0,0 +1,14 @@
1
+ language: ruby
2
+ cache: bundler
3
+ rvm:
4
+ - ruby-head
5
+ - 2.0.0
6
+ - 1.9.3
7
+ notifications:
8
+ email: false
9
+ irc:
10
+ channels:
11
+ - ircs://irc.oftc.net:6697#akerl
12
+ channel_key: sekrit
13
+ template:
14
+ - '%{repository}/%{branch}/%{build_number}: %{message} -- %{build_url}'
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
data/Gemfile.lock ADDED
@@ -0,0 +1,81 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ githubchart (0.0.1)
5
+ githubstats
6
+ rasem
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ ast (1.1.0)
12
+ basiccache (0.0.25)
13
+ coveralls (0.7.0)
14
+ multi_json (~> 1.3)
15
+ rest-client
16
+ simplecov (>= 0.7)
17
+ term-ansicolor
18
+ thor
19
+ curb (0.8.5)
20
+ diff-lcs (1.2.5)
21
+ docile (1.1.1)
22
+ fuubar (1.2.1)
23
+ rspec (~> 2.0)
24
+ rspec-instafail (~> 0.2.0)
25
+ ruby-progressbar (~> 1.0)
26
+ githubstats (0.2.3)
27
+ basiccache (< 2)
28
+ curb
29
+ json
30
+ hashr (0.0.22)
31
+ json (1.8.1)
32
+ mime-types (2.0)
33
+ multi_json (1.8.2)
34
+ parser (2.1.0.pre2)
35
+ ast (~> 1.1)
36
+ slop (~> 3.4, >= 3.4.5)
37
+ powerpack (0.0.9)
38
+ rainbow (1.1.4)
39
+ rake (10.1.0)
40
+ rasem (0.6.1)
41
+ rest-client (1.6.7)
42
+ mime-types (>= 1.16)
43
+ rspec (2.14.1)
44
+ rspec-core (~> 2.14.0)
45
+ rspec-expectations (~> 2.14.0)
46
+ rspec-mocks (~> 2.14.0)
47
+ rspec-core (2.14.7)
48
+ rspec-expectations (2.14.4)
49
+ diff-lcs (>= 1.1.3, < 2.0)
50
+ rspec-instafail (0.2.4)
51
+ rspec-mocks (2.14.4)
52
+ rubocop (0.15.0)
53
+ parser (~> 2.0)
54
+ powerpack (~> 0.0.6)
55
+ rainbow (>= 1.1.4)
56
+ ruby-progressbar (1.2.0)
57
+ simplecov (0.8.2)
58
+ docile (~> 1.1.0)
59
+ multi_json
60
+ simplecov-html (~> 0.8.0)
61
+ simplecov-html (0.8.0)
62
+ slop (3.4.7)
63
+ term-ansicolor (1.2.2)
64
+ tins (~> 0.8)
65
+ thor (0.18.1)
66
+ tins (0.13.1)
67
+ travis-lint (1.7.0)
68
+ hashr (~> 0.0.22)
69
+
70
+ PLATFORMS
71
+ ruby
72
+
73
+ DEPENDENCIES
74
+ coveralls
75
+ fuubar
76
+ githubchart!
77
+ parser (~> 2.1.0.pre1)
78
+ rake
79
+ rspec
80
+ rubocop
81
+ travis-lint
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2013 Les Aker
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
22
+
data/README.md ADDED
@@ -0,0 +1,25 @@
1
+ GithubChart
2
+ ============
3
+
4
+ [![Gem Version](https://badge.fury.io/rb/githubchart.png)](http://badge.fury.io/rb/githubchart)
5
+ [![Dependency Status](https://gemnasium.com/akerl/githubchart.png)](https://gemnasium.com/akerl/githubchart)
6
+ [![Code Climate](https://codeclimate.com/github/akerl/githubchart.png)](https://codeclimate.com/github/akerl/githubchart)
7
+ [![Coverage Status](https://coveralls.io/repos/akerl/githubchart/badge.png?branch=master)](https://coveralls.io/r/akerl/githubchart?branch=master)
8
+ [![Build Status](https://travis-ci.org/akerl/githubchart.png?branch=master)](https://travis-ci.org/akerl/githubchart)
9
+
10
+ Generates an SVG of your Github contributions:
11
+
12
+ ![Example image](http://akerl.github.io/githubchart/chart.svg)
13
+
14
+ ## Usage
15
+
16
+ Run `githubchart path/to/svg` to generate an SVG. To override the default username (pulled from your local shell or .gitconfig), use `github_chart -u username path/to/svg`
17
+
18
+ ## Installation
19
+
20
+ gem install githubchart
21
+
22
+ ## License
23
+
24
+ GithubChart is released under the MIT License. See the bundled LICENSE file for details.
25
+
data/Rakefile ADDED
@@ -0,0 +1,19 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+ require 'rubocop/rake_task'
4
+
5
+ desc 'Run tests'
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ desc 'Run Rubocop on the gem'
9
+ Rubocop::RakeTask.new(:rubocop) do |task|
10
+ task.patterns = ['lib/**/*.rb', 'spec/**/*.rb', 'bin/**/*']
11
+ task.fail_on_error = true
12
+ end
13
+
14
+ desc 'Run travis-lint on .travis.yml'
15
+ task :travislint do
16
+ fail 'There is an issue with your .travis.yml' unless system('travis-lint')
17
+ end
18
+
19
+ task default: [:spec, :travislint, :rubocop, :build, :install]
data/bin/githubchart ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'githubchart'
4
+ require 'optparse'
5
+
6
+ options = {}
7
+ OptionParser.new do |opts|
8
+ opts.banner =
9
+ "Usage: githubchart (-u username) (-t type) path/for/new/image\n"
10
+ opts.banner << 'Supported types: ' + GithubChart.supported.join(' ')
11
+ opts.on('-uNAME', '--user=NAME') { |user| options[:user] = user }
12
+ opts.on('-tTYPE', '--type=TYPE') do |type|
13
+ abort 'That type is not supported' unless GithubChart.supports? type
14
+ options[:type] = type.to_sym
15
+ end
16
+ end.parse!
17
+
18
+ SVG_Path = ARGV.shift
19
+
20
+ if SVG_Path.nil?
21
+ puts 'Please provide the target location for the SVG'
22
+ exit 1
23
+ end
24
+
25
+ Chart = GithubChart.new(options[:user]).svg
26
+
27
+ File.open(SVG_Path, 'w') { |file| file << Chart }
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg width="715" height="104" version="1.1"
5
+ xmlns="http://www.w3.org/2000/svg">
6
+ <rect x="27" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="40" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="53" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="66" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="79" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="92" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="105" y="14" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="118" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="131" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="144" y="14" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="157" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="170" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="183" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="196" y="14" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="209" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="222" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="235" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="248" y="14" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="261" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="274" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="287" y="14" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="300" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="313" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="326" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="339" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="352" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="365" y="14" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="378" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="391" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="404" y="14" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="417" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="430" y="14" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="443" y="14" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="456" y="14" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="469" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="482" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="495" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="508" y="14" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="521" y="14" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="534" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="547" y="14" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="560" y="14" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="573" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="586" y="14" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="599" y="14" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="612" y="14" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="625" y="14" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="638" y="14" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="651" y="14" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="664" y="14" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="677" y="14" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="690" y="14" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="703" y="14" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="27" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="40" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="53" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="66" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="79" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="92" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="105" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="118" y="27" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="131" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="144" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="157" y="27" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="170" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="183" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="196" y="27" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="209" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="222" y="27" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="235" y="27" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="248" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="261" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="274" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="287" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="300" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="313" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="326" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="339" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="352" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="365" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="378" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="391" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="404" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="417" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="430" y="27" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="443" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="456" y="27" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="469" y="27" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="482" y="27" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="495" y="27" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="508" y="27" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="521" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="534" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="547" y="27" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="560" y="27" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="573" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="586" y="27" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="599" y="27" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="612" y="27" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="625" y="27" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="638" y="27" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="651" y="27" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="664" y="27" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="677" y="27" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="690" y="27" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="27" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="40" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="53" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="66" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="79" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="92" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="105" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="118" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="131" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="144" y="40" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="157" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="170" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="183" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="196" y="40" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="209" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="222" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="235" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="248" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="261" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="274" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="287" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="300" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="313" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="326" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="339" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="352" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="365" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="378" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="391" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="404" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="417" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="430" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="443" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="456" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="469" y="40" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="482" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="495" y="40" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="508" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="521" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="534" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="547" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="560" y="40" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="573" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="586" y="40" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="599" y="40" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="612" y="40" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="625" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="638" y="40" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="651" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="664" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="677" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="690" y="40" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="27" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="40" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="53" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="66" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="79" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="92" y="53" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="105" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="118" y="53" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="131" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="144" y="53" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="157" y="53" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="170" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="183" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="196" y="53" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="209" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="222" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="235" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="248" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="261" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="274" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="287" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="300" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="313" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="326" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="339" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="352" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="365" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="378" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="391" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="404" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="417" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="430" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="443" y="53" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="456" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="469" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="482" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="495" y="53" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="508" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="521" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="534" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="547" y="53" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="560" y="53" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="573" y="53" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="586" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="599" y="53" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="612" y="53" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="625" y="53" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="638" y="53" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="651" y="53" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="664" y="53" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="677" y="53" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="690" y="53" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="27" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="40" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="53" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="66" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="79" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="92" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="105" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="118" y="66" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="131" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="144" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="157" y="66" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="170" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="183" y="66" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="196" y="66" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="209" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="222" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="235" y="66" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="248" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="261" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="274" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="287" y="66" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="300" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="313" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="326" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="339" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="352" y="66" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="365" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="378" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="391" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="404" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="417" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="430" y="66" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="443" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="456" y="66" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="469" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="482" y="66" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="495" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="508" y="66" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="521" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="534" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="547" y="66" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="560" y="66" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="573" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="586" y="66" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="599" y="66" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="612" y="66" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="625" y="66" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="638" y="66" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="651" y="66" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="664" y="66" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="677" y="66" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="690" y="66" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="27" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="40" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="53" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="66" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="79" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="92" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="105" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="118" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="131" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="144" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="157" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="170" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="183" y="79" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="196" y="79" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="209" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="222" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="235" y="79" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="248" y="79" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="261" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="274" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="287" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="300" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="313" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="326" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="339" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="352" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="365" y="79" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="378" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="391" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="404" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="417" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="430" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="443" y="79" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="456" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="469" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="482" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="495" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="508" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="521" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="534" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="547" y="79" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="560" y="79" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="573" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="586" y="79" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="599" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="612" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="625" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="638" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="651" y="79" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="664" y="79" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="677" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="690" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="14" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="27" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="40" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="53" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="66" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="79" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="92" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="105" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="118" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="131" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="144" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="157" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="170" y="92" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="183" y="92" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="196" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="209" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="222" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="235" y="92" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="248" y="92" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="261" y="92" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="274" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="287" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="300" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="313" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="326" y="92" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="339" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="352" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="365" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="378" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="391" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="404" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="417" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="430" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="443" y="92" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="456" y="92" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="469" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="482" y="92" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="495" y="92" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="508" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="521" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="534" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="547" y="92" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="560" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="573" y="92" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="586" y="92" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="599" y="92" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="612" y="92" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="625" y="92" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="638" y="92" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="651" y="92" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="664" y="92" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="677" y="92" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="690" y="92" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><text x="4" y="101" style="fill:#ccc;text-anchor:middle;text-align:center;font:9px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:none;"><tspan x="4" dy="0em">S</tspan></text><text x="4" y="23" style="fill:#ccc;text-anchor:middle;text-align:center;font:9px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:none;"><tspan x="4" dy="0em">S</tspan></text><text x="4" y="36" style="fill:#ccc;text-anchor:middle;text-align:center;font:9px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:display;"><tspan x="4" dy="0em">M</tspan></text><text x="4" y="49" style="fill:#ccc;text-anchor:middle;text-align:center;font:9px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:none;"><tspan x="4" dy="0em">T</tspan></text><text x="4" y="62" style="fill:#ccc;text-anchor:middle;text-align:center;font:9px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:display;"><tspan x="4" dy="0em">W</tspan></text><text x="4" y="75" style="fill:#ccc;text-anchor:middle;text-align:center;font:9px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:none;"><tspan x="4" dy="0em">T</tspan></text><text x="4" y="88" style="fill:#ccc;text-anchor:middle;text-align:center;font:9px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:display;"><tspan x="4" dy="0em">F</tspan></text><text x="40" y="9" style="fill:#aaa;text-align:center;font:10px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:block;"><tspan x="40" dy="0em">Nov</tspan></text><text x="92" y="9" style="fill:#aaa;text-align:center;font:10px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:block;"><tspan x="92" dy="0em">Dec</tspan></text><text x="157" y="9" style="fill:#aaa;text-align:center;font:10px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:block;"><tspan x="157" dy="0em">Jan</tspan></text><text x="222" y="9" style="fill:#aaa;text-align:center;font:10px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:block;"><tspan x="222" dy="0em">Feb</tspan></text><text x="274" y="9" style="fill:#aaa;text-align:center;font:10px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:block;"><tspan x="274" dy="0em">Mar</tspan></text><text x="339" y="9" style="fill:#aaa;text-align:center;font:10px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:block;"><tspan x="339" dy="0em">Apr</tspan></text><text x="391" y="9" style="fill:#aaa;text-align:center;font:10px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:block;"><tspan x="391" dy="0em">May</tspan></text><text x="443" y="9" style="fill:#aaa;text-align:center;font:10px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:block;"><tspan x="443" dy="0em">Jun</tspan></text><text x="508" y="9" style="fill:#aaa;text-align:center;font:10px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:block;"><tspan x="508" dy="0em">Jul</tspan></text><text x="560" y="9" style="fill:#aaa;text-align:center;font:10px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:block;"><tspan x="560" dy="0em">Aug</tspan></text><text x="612" y="9" style="fill:#aaa;text-align:center;font:10px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:block;"><tspan x="612" dy="0em">Sep</tspan></text><text x="677" y="9" style="fill:#aaa;text-align:center;font:10px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:block;"><tspan x="677" dy="0em">Oct</tspan></text></svg>
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg width="715" height="104" version="1.1"
5
+ xmlns="http://www.w3.org/2000/svg">
6
+ <rect x="27" y="14" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="40" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="53" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="66" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="79" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="92" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="105" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="118" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="131" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="144" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="157" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="170" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="183" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="196" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="209" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="222" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="235" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="248" y="14" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="261" y="14" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="274" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="287" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="300" y="14" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="313" y="14" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="326" y="14" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="339" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="352" y="14" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="365" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="378" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="391" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="404" y="14" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="417" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="430" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="443" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="456" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="469" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="482" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="495" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="508" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="521" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="534" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="547" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="560" y="14" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="573" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="586" y="14" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="599" y="14" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="612" y="14" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="625" y="14" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="638" y="14" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="651" y="14" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="664" y="14" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="677" y="14" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="690" y="14" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="703" y="14" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="27" y="27" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="40" y="27" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="53" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="66" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="79" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="92" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="105" y="27" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="118" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="131" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="144" y="27" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="157" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="170" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="183" y="27" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="196" y="27" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="209" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="222" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="235" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="248" y="27" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="261" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="274" y="27" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="287" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="300" y="27" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="313" y="27" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="326" y="27" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="339" y="27" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="352" y="27" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="365" y="27" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="378" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="391" y="27" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="404" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="417" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="430" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="443" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="456" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="469" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="482" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="495" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="508" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="521" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="534" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="547" y="27" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="560" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="573" y="27" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="586" y="27" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="599" y="27" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="612" y="27" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="625" y="27" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="638" y="27" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="651" y="27" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="664" y="27" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="677" y="27" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="690" y="27" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="27" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="40" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="53" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="66" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="79" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="92" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="105" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="118" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="131" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="144" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="157" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="170" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="183" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="196" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="209" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="222" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="235" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="248" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="261" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="274" y="40" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="287" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="300" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="313" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="326" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="339" y="40" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="352" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="365" y="40" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="378" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="391" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="404" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="417" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="430" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="443" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="456" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="469" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="482" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="495" y="40" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="508" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="521" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="534" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="547" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="560" y="40" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="573" y="40" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="586" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="599" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="612" y="40" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="625" y="40" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="638" y="40" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="651" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="664" y="40" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="677" y="40" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="690" y="40" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="27" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="40" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="53" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="66" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="79" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="92" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="105" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="118" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="131" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="144" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="157" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="170" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="183" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="196" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="209" y="53" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="222" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="235" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="248" y="53" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="261" y="53" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="274" y="53" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="287" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="300" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="313" y="53" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="326" y="53" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="339" y="53" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="352" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="365" y="53" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="378" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="391" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="404" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="417" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="430" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="443" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="456" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="469" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="482" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="495" y="53" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="508" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="521" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="534" y="53" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="547" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="560" y="53" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="573" y="53" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="586" y="53" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="599" y="53" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="612" y="53" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="625" y="53" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="638" y="53" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="651" y="53" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="664" y="53" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="677" y="53" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="690" y="53" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="27" y="66" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="40" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="53" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="66" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="79" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="92" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="105" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="118" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="131" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="144" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="157" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="170" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="183" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="196" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="209" y="66" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="222" y="66" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="235" y="66" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="248" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="261" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="274" y="66" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="287" y="66" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="300" y="66" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="313" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="326" y="66" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="339" y="66" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="352" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="365" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="378" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="391" y="66" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="404" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="417" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="430" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="443" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="456" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="469" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="482" y="66" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="495" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="508" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="521" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="534" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="547" y="66" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="560" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="573" y="66" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="586" y="66" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="599" y="66" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="612" y="66" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="625" y="66" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="638" y="66" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="651" y="66" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="664" y="66" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="677" y="66" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="690" y="66" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="27" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="40" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="53" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="66" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="79" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="92" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="105" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="118" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="131" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="144" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="157" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="170" y="79" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="183" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="196" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="209" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="222" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="235" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="248" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="261" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="274" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="287" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="300" y="79" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="313" y="79" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="326" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="339" y="79" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="352" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="365" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="378" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="391" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="404" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="417" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="430" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="443" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="456" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="469" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="482" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="495" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="508" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="521" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="534" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="547" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="560" y="79" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="573" y="79" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="586" y="79" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="599" y="79" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="612" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="625" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="638" y="79" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="651" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="664" y="79" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="677" y="79" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="690" y="79" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="14" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="27" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="40" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="53" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="66" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="79" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="92" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="105" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="118" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="131" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="144" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="157" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="170" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="183" y="92" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="196" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="209" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="222" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="235" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="248" y="92" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="261" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="274" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="287" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="300" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="313" y="92" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="326" y="92" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="339" y="92" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="352" y="92" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="365" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="378" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="391" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="404" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="417" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="430" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="443" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="456" y="92" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="469" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="482" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="495" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="508" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="521" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="534" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="547" y="92" width="11" height="11" rx="0" ry="0" style="fill:#eeeeee;"/><rect x="560" y="92" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="573" y="92" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="586" y="92" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="599" y="92" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="612" y="92" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="625" y="92" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><rect x="638" y="92" width="11" height="11" rx="0" ry="0" style="fill:#8cc665;"/><rect x="651" y="92" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="664" y="92" width="11" height="11" rx="0" ry="0" style="fill:#1e6823;"/><rect x="677" y="92" width="11" height="11" rx="0" ry="0" style="fill:#d6e685;"/><rect x="690" y="92" width="11" height="11" rx="0" ry="0" style="fill:#44a340;"/><text x="4" y="101" style="fill:#ccc;text-anchor:middle;text-align:center;font:9px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:none;"><tspan x="4" dy="0em">S</tspan></text><text x="4" y="23" style="fill:#ccc;text-anchor:middle;text-align:center;font:9px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:none;"><tspan x="4" dy="0em">S</tspan></text><text x="4" y="36" style="fill:#ccc;text-anchor:middle;text-align:center;font:9px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:display;"><tspan x="4" dy="0em">M</tspan></text><text x="4" y="49" style="fill:#ccc;text-anchor:middle;text-align:center;font:9px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:none;"><tspan x="4" dy="0em">T</tspan></text><text x="4" y="62" style="fill:#ccc;text-anchor:middle;text-align:center;font:9px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:display;"><tspan x="4" dy="0em">W</tspan></text><text x="4" y="75" style="fill:#ccc;text-anchor:middle;text-align:center;font:9px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:none;"><tspan x="4" dy="0em">T</tspan></text><text x="4" y="88" style="fill:#ccc;text-anchor:middle;text-align:center;font:9px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:display;"><tspan x="4" dy="0em">F</tspan></text><text x="40" y="9" style="fill:#aaa;text-align:center;font:10px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:block;"><tspan x="40" dy="0em">Nov</tspan></text><text x="92" y="9" style="fill:#aaa;text-align:center;font:10px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:block;"><tspan x="92" dy="0em">Dec</tspan></text><text x="157" y="9" style="fill:#aaa;text-align:center;font:10px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:block;"><tspan x="157" dy="0em">Jan</tspan></text><text x="222" y="9" style="fill:#aaa;text-align:center;font:10px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:block;"><tspan x="222" dy="0em">Feb</tspan></text><text x="274" y="9" style="fill:#aaa;text-align:center;font:10px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:block;"><tspan x="274" dy="0em">Mar</tspan></text><text x="339" y="9" style="fill:#aaa;text-align:center;font:10px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:block;"><tspan x="339" dy="0em">Apr</tspan></text><text x="391" y="9" style="fill:#aaa;text-align:center;font:10px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:block;"><tspan x="391" dy="0em">May</tspan></text><text x="443" y="9" style="fill:#aaa;text-align:center;font:10px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:block;"><tspan x="443" dy="0em">Jun</tspan></text><text x="508" y="9" style="fill:#aaa;text-align:center;font:10px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:block;"><tspan x="508" dy="0em">Jul</tspan></text><text x="560" y="9" style="fill:#aaa;text-align:center;font:10px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:block;"><tspan x="560" dy="0em">Aug</tspan></text><text x="612" y="9" style="fill:#aaa;text-align:center;font:10px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:block;"><tspan x="612" dy="0em">Sep</tspan></text><text x="677" y="9" style="fill:#aaa;text-align:center;font:10px Helvetica, arial, freesans, clean, sans-serif;white-space:nowrap;display:block;"><tspan x="677" dy="0em">Oct</tspan></text></svg>
@@ -0,0 +1,27 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'githubchart'
3
+ s.version = '0.0.1'
4
+ s.date = Time.now.strftime("%Y-%m-%d")
5
+ s.summary = 'Generate an SVG of Github contributions data'
6
+ s.description = "Uses GithubStats to grab Github contributions scores and converts that into an SVG"
7
+ s.authors = ['Les Aker']
8
+ s.email = 'me@lesaker.org'
9
+ s.homepage = 'https://github.com/akerl/githubchart'
10
+ s.license = 'MIT'
11
+
12
+ s.files = `git ls-files`.split
13
+ s.test_files = `git ls-files spec/*`.split
14
+ s.executables = ['githubchart']
15
+
16
+ s.add_runtime_dependency 'githubstats'
17
+ s.add_runtime_dependency 'rasem'
18
+
19
+ s.add_development_dependency 'rubocop'
20
+ s.add_development_dependency 'travis-lint'
21
+ s.add_development_dependency 'rake'
22
+ s.add_development_dependency 'coveralls'
23
+ s.add_development_dependency 'rspec'
24
+ s.add_development_dependency 'fuubar'
25
+ s.add_development_dependency 'parser', '~> 2.1.0.pre1'
26
+ end
27
+
@@ -0,0 +1,95 @@
1
+ require 'githubstats'
2
+ require 'matrix'
3
+
4
+ ##
5
+ # Graphing tool for creating Github-style contribution charts
6
+
7
+ module GithubChart
8
+ class << self
9
+ ##
10
+ # Helper to create new charts
11
+
12
+ def new(*args)
13
+ self::Chart.new(*args)
14
+ end
15
+
16
+ ##
17
+ # Helper to list supported types
18
+
19
+ def supported
20
+ @supported ||= []
21
+ end
22
+
23
+ ##
24
+ # Helper to check for type support
25
+
26
+ def supports?(type)
27
+ supported.include? type.to_sym
28
+ end
29
+
30
+ protected
31
+
32
+ ##
33
+ # Add support for a type
34
+
35
+ def add_support(type)
36
+ @supported ||= []
37
+ @supported << type.to_sym
38
+ end
39
+ end
40
+
41
+ ##
42
+ # Default colors for gradient
43
+
44
+ COLORS = ['#eeeeee', '#d6e685', '#8cc665', '#44a340', '#1e6823']
45
+
46
+ ##
47
+ # Object for parsing and outputing Github stats data
48
+
49
+ class Chart
50
+ attr_reader :stats
51
+ attr_accessor :colors
52
+
53
+ ##
54
+ # Create a new chart object
55
+ # Passes the username through to GithubStats
56
+ # Uses colors rather than default, if provided
57
+
58
+ def initialize(params = {})
59
+ params = { username: params } unless params.is_a? Hash
60
+ @stats = GithubStats.new(params['username'])
61
+ @colors = params['colors'] || GithubChart::COLORS
62
+ end
63
+
64
+ private
65
+
66
+ ##
67
+ # Convert the data into a matrix of weeks
68
+ # The fill value is used to pad the front and backdd
69
+
70
+ def matrix(fill_value = -1)
71
+ Matrix[*@stats.pad(fill_value).each_slice(7).to_a.transpose]
72
+ end
73
+ end
74
+ end
75
+
76
+ ##
77
+ # Add helper methods to Integer
78
+
79
+ class ::Integer
80
+ ##
81
+ # Add ordinalize to simplify converting to spoken string
82
+
83
+ def ordinalize
84
+ return self if self == 0
85
+ return "#{self}th" if (11..13).include?(abs % 100)
86
+ case abs % 10
87
+ when 1 then "#{self}st"
88
+ when 2 then "#{self}nd"
89
+ when 3 then "#{self}rd"
90
+ else "#{self}th"
91
+ end
92
+ end
93
+ end
94
+
95
+ require 'githubchart/svg'
@@ -0,0 +1,98 @@
1
+ require 'rasem'
2
+
3
+ ##
4
+ # Add SVG support to GithubChart
5
+
6
+ module GithubChart
7
+ ##
8
+ # Declare SVG support
9
+
10
+ add_support(:svg)
11
+
12
+ ##
13
+ # Convert stats into SVG
14
+
15
+ class Chart
16
+ def svg
17
+ grid = matrix
18
+ chart = Rasem::SVGImage.new(13 * grid.column_size + 13,
19
+ 13 * grid.row_size + 13)
20
+ svg_add_points grid, chart
21
+ svg_add_weekdays grid, chart
22
+ svg_add_months grid, chart
23
+ chart.close
24
+ chart.output
25
+ end
26
+
27
+ private
28
+
29
+ # rubocop:disable SymbolName
30
+
31
+ ##
32
+ # Define style for weekday labels
33
+
34
+ SVG_WEEKDAY_STYLE = {
35
+ :fill => '#ccc',
36
+ :'text-anchor' => 'middle',
37
+ :'text-align' => 'center',
38
+ :font => '9px Helvetica, arial, freesans, clean, sans-serif',
39
+ :'white-space' => 'nowrap',
40
+ :display => 'display',
41
+ }
42
+
43
+ ##
44
+ # Define Style for month labels
45
+
46
+ SVG_MONTH_STYLE = {
47
+ :fill => '#aaa',
48
+ :'text-align' => 'center',
49
+ :font => '10px Helvetica, arial, freesans, clean, sans-serif',
50
+ :'white-space' => 'nowrap',
51
+ :display => 'block',
52
+ }
53
+
54
+ # rubocop:enable SymbolName
55
+
56
+ def svg_add_points(grid, chart)
57
+ grid.each_with_index do |point, y, x|
58
+ next if point.score == -1
59
+ chart.rectangle(
60
+ (x * 13) + 14, (y * 13) + 14, 11, 11,
61
+ fill: @colors[@stats.quartile(point.score)]
62
+ )
63
+ end
64
+ end
65
+
66
+ def svg_add_weekdays(grid, chart)
67
+ grid.column(0).each do |point|
68
+ index = point.date.wday
69
+ letter = point.date.strftime('%a')[0]
70
+ style = SVG_WEEKDAY_STYLE.clone
71
+ style[:display] = 'none' unless [1, 3, 5].include? index
72
+ chart.text(4, 13 * index + 23, letter, style)
73
+ end
74
+ end
75
+
76
+ def svg_get_month_offsets(grid) # rubocop:disable MethodLength
77
+ offsets = grid.group_by { |x| x.date.strftime('%Y%U') }
78
+ offsets = offsets.map { |k, v| v.first.date.strftime('%b') }
79
+ offsets = offsets.reduce([]) do |acc, x|
80
+ acc << [x, 0] if acc.last.nil?
81
+ acc << [x, acc.last[1]] if acc.last[0] != x
82
+ acc.last[1] += 1
83
+ acc
84
+ end
85
+ offsets.each_index do |i|
86
+ offsets[-1 - i][1] = (offsets[-2 - i] || [0, 0])[1]
87
+ end
88
+ offsets
89
+ end
90
+
91
+ def svg_add_months(grid, chart)
92
+ svg_get_month_offsets(grid).each do |month, offset|
93
+ next if offset == 0
94
+ chart.text(13 * offset + 14, 9, month, SVG_MONTH_STYLE)
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,10 @@
1
+ require 'simplecov'
2
+ require 'coveralls'
3
+
4
+ SimpleCov.formatter = Coveralls::SimpleCov::Formatter
5
+ SimpleCov.start do
6
+ add_filter '/spec/'
7
+ end
8
+
9
+ require 'rspec'
10
+ require 'githubchart'
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
metadata ADDED
@@ -0,0 +1,221 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: githubchart
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Les Aker
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-12-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: githubstats
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rasem
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubocop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: travis-lint
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: coveralls
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: fuubar
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: parser
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 2.1.0.pre1
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 2.1.0.pre1
139
+ description: Uses GithubStats to grab Github contributions scores and converts that
140
+ into an SVG
141
+ email: me@lesaker.org
142
+ executables:
143
+ - githubchart
144
+ extensions: []
145
+ extra_rdoc_files: []
146
+ files:
147
+ - ".gitignore"
148
+ - ".rspec"
149
+ - ".rubocop.yml"
150
+ - ".travis.yml"
151
+ - Gemfile
152
+ - Gemfile.lock
153
+ - LICENSE
154
+ - README.md
155
+ - Rakefile
156
+ - bin/githubchart
157
+ - examples/chart.svg
158
+ - examples/other_user.svg
159
+ - githubchart.gemspec
160
+ - lib/githubchart.rb
161
+ - lib/githubchart/svg.rb
162
+ - spec/spec_helper.rb
163
+ - vendor/cache/ast-1.1.0.gem
164
+ - vendor/cache/basiccache-0.0.25.gem
165
+ - vendor/cache/coveralls-0.7.0.gem
166
+ - vendor/cache/curb-0.8.5.gem
167
+ - vendor/cache/diff-lcs-1.2.5.gem
168
+ - vendor/cache/docile-1.1.1.gem
169
+ - vendor/cache/fuubar-1.2.1.gem
170
+ - vendor/cache/githubstats-0.2.3.gem
171
+ - vendor/cache/hashr-0.0.22.gem
172
+ - vendor/cache/json-1.8.1.gem
173
+ - vendor/cache/mime-types-2.0.gem
174
+ - vendor/cache/multi_json-1.8.2.gem
175
+ - vendor/cache/parser-2.1.0.pre2.gem
176
+ - vendor/cache/powerpack-0.0.9.gem
177
+ - vendor/cache/rainbow-1.1.4.gem
178
+ - vendor/cache/rake-10.1.0.gem
179
+ - vendor/cache/rasem-0.6.1.gem
180
+ - vendor/cache/rest-client-1.6.7.gem
181
+ - vendor/cache/rspec-2.14.1.gem
182
+ - vendor/cache/rspec-core-2.14.7.gem
183
+ - vendor/cache/rspec-expectations-2.14.4.gem
184
+ - vendor/cache/rspec-instafail-0.2.4.gem
185
+ - vendor/cache/rspec-mocks-2.14.4.gem
186
+ - vendor/cache/rubocop-0.15.0.gem
187
+ - vendor/cache/ruby-progressbar-1.2.0.gem
188
+ - vendor/cache/simplecov-0.8.2.gem
189
+ - vendor/cache/simplecov-html-0.8.0.gem
190
+ - vendor/cache/slop-3.4.7.gem
191
+ - vendor/cache/term-ansicolor-1.2.2.gem
192
+ - vendor/cache/thor-0.18.1.gem
193
+ - vendor/cache/tins-0.13.1.gem
194
+ - vendor/cache/travis-lint-1.7.0.gem
195
+ homepage: https://github.com/akerl/githubchart
196
+ licenses:
197
+ - MIT
198
+ metadata: {}
199
+ post_install_message:
200
+ rdoc_options: []
201
+ require_paths:
202
+ - lib
203
+ required_ruby_version: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ version: '0'
208
+ required_rubygems_version: !ruby/object:Gem::Requirement
209
+ requirements:
210
+ - - ">="
211
+ - !ruby/object:Gem::Version
212
+ version: '0'
213
+ requirements: []
214
+ rubyforge_project:
215
+ rubygems_version: 2.0.3
216
+ signing_key:
217
+ specification_version: 4
218
+ summary: Generate an SVG of Github contributions data
219
+ test_files:
220
+ - spec/spec_helper.rb
221
+ has_rdoc: