jira_cards 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b2dfc2f40758812ba339be9218660486eb9dd4e1
4
+ data.tar.gz: 3ee10786b920a74cdab3ea4a2a7f161d1eb152aa
5
+ SHA512:
6
+ metadata.gz: 5f12cc734c520f760ef66a3c74f97e9f99b7cb21de32f410453cd2fccaaedc8bf32781e64a3d5cac6310a719192e216ba7b4a57ce1e91c14dfc12d40048612d3
7
+ data.tar.gz: 9bfb442a72720c29cae361360caded548cbb2978b412a7db5f985499f3b881be15f9e54e6334add08e9ee890f1e37fe9f2addbc8e018e420138f774036b70b14
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2013 YOURNAME
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,43 @@
1
+ [![Build Status](https://travis-ci.org/schasse/jira_cards.svg?branch=master)](https://travis-ci.org/schasse/jira_cards)
2
+ [![Coverage Status](https://coveralls.io/repos/schasse/jira_cards/badge.png)](https://coveralls.io/r/schasse/jira_cards)
3
+ [![Dependency Status](https://gemnasium.com/schasse/jira_cards.svg)](https://gemnasium.com/schasse/jira_cards)
4
+ [![Code Climate](https://codeclimate.com/github/schasse/jira_cards/badges/gpa.svg)](https://codeclimate.com/github/schasse/jira_cards)
5
+
6
+ jira_cards
7
+ =========
8
+ converts your jira issues to a printable pdf.
9
+
10
+ ## Installation
11
+ The recommended way of installing jira_cards is via RubyGems:
12
+ `gem install jira_cards`
13
+
14
+ ## Configuration
15
+ You can configure jira_cards with a config file located in the current folder of execution or your home directory:
16
+ ```
17
+ # ~/.jira_cards
18
+ user: john
19
+ password: top_secret
20
+ ```
21
+ ```
22
+ # ./.jira_cards
23
+ domain: jira.atlassian.com
24
+ ```
25
+
26
+ Alternatively you can control the configuration with the following environment variables:
27
+ ```
28
+ JIRA_CARDS_DOMAIN
29
+ JIRA_CARDS_USER
30
+ JIRA_CARDS_PASSWORD
31
+ JIRA_CARDS_QUERY
32
+ JIRA_CARDS_OUTPUT
33
+ ```
34
+
35
+ ## examples
36
+ ```
37
+ jira_cards --query 'key = P-123' --output output.pdf
38
+ ```
39
+ ```
40
+ DOMAIN=jira.atlassian.com QUERY='project = P' jira_cards
41
+ ```
42
+
43
+ For all available options use `jira_cards --help`.
data/bin/jira_cards ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require 'jira_cards'
3
+ JiraCards::Config.load ARGV
4
+ JiraCards::Runner.invoke
@@ -0,0 +1,2 @@
1
+ domain: jira.atlassian.com
2
+ output: jira_issues.pdf
data/lib/jira_cards.rb ADDED
@@ -0,0 +1,18 @@
1
+ require 'json'
2
+ require 'restclient'
3
+ require 'cgi'
4
+ require 'active_support/configurable'
5
+ require 'active_support/core_ext/hash'
6
+ require 'yaml'
7
+ require 'prawn-svg'
8
+ require 'erb'
9
+ require 'optparse'
10
+
11
+ module JiraCards
12
+ PATH = File.expand_path '../..', __FILE__
13
+ LIB_PATH = File.expand_path '..', __FILE__
14
+ RESOURCES_PATH = File.expand_path '../../resources', __FILE__
15
+ CONFIG_PATH = File.expand_path '../../config', __FILE__
16
+ end
17
+
18
+ Dir[JiraCards::LIB_PATH + '/**/*.rb'].each { |file| require file }
@@ -0,0 +1,90 @@
1
+ module JiraCards
2
+ class Config < Struct.new(:argv)
3
+ include ActiveSupport::Configurable
4
+
5
+ DEFAULT_CONFIG = File.expand_path 'default.yml', JiraCards::CONFIG_PATH
6
+ HOME_CONFIG = File.expand_path '~/.jira_cards'
7
+ LOCAL_CONFIG = File.expand_path '.jira_cards'
8
+
9
+ AVAILABLE_OPTIONS = {
10
+ domain: 'The jira domain.',
11
+ user: 'Username for basic auth.',
12
+ password: 'Password for basic auth.',
13
+ query: 'A query defined in jql (jira query language).',
14
+ output: 'Output file name.'
15
+ }
16
+
17
+ AVAILABLE_OPTIONS.keys.each do |config|
18
+ config_accessor config
19
+ end
20
+
21
+ class << self
22
+ def load(argv = nil)
23
+ config = new argv
24
+ AVAILABLE_OPTIONS.keys.each do |option|
25
+ option_value = config.options[option] ||
26
+ config.local_config[option.to_s] ||
27
+ config.home_config[option.to_s] ||
28
+ ENV['JIRA_CARDS' + option.to_s.upcase] ||
29
+ config.default_config[option.to_s]
30
+ send "#{option}=", option_value
31
+ end
32
+ end
33
+
34
+ def reset
35
+ AVAILABLE_OPTIONS.keys.each do |option|
36
+ send "#{option}=", nil
37
+ end
38
+ end
39
+ end
40
+
41
+ def default_config
42
+ @defaule_config ||= YAML.load File.read DEFAULT_CONFIG
43
+ end
44
+
45
+ def home_config
46
+ @home_config ||=
47
+ (File.exist?(HOME_CONFIG) && YAML.load(File.read(HOME_CONFIG))) || {}
48
+ end
49
+
50
+ def local_config
51
+ @local_config ||=
52
+ (File.exist?(LOCAL_CONFIG) && YAML.load(File.read(LOCAL_CONFIG))) || {}
53
+ end
54
+
55
+ def options
56
+ unless @options
57
+ @options = {}
58
+ option_parser.parse argv
59
+ end
60
+ @options
61
+ end
62
+
63
+ private
64
+
65
+ def option_parser
66
+ OptionParser.new do |opts|
67
+ opts.banner = 'Usage: jira_cards [options]'
68
+
69
+ AVAILABLE_OPTIONS.each do |option, description|
70
+ add_option opts, option, description
71
+ end
72
+
73
+ opts.on_tail('--version', 'Show version.') do
74
+ puts JiraCards::VERSION
75
+ exit
76
+ end
77
+ end
78
+ end
79
+
80
+ def add_option(opts, option, description)
81
+ opts.on(
82
+ "-#{option.to_s.chars.first}",
83
+ "--#{option} #{option.to_s.upcase}",
84
+ description) do |option_value|
85
+
86
+ @options[option] = option_value
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,15 @@
1
+ unless {}.respond_to? :compact
2
+ class Hash
3
+ # Returns a hash with non +nil+ values.
4
+ #
5
+ # hash = { a: true, b: false, c: nil}
6
+ # hash.compact # => { a: true, b: false}
7
+ # hash # => { a: true, b: false, c: nil}
8
+ # { c: nil }.compact # => {}
9
+ def compact
10
+ # rubocop:disable Style/RedundantSelf
11
+ self.select { |_, value| !value.nil? }
12
+ # rubocop:enable Style/RedundantSelf
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,65 @@
1
+ module JiraCards
2
+ module JiraApi
3
+ class Issue
4
+ def self.where(jira_query)
5
+ criteria.where(jira_query)
6
+ end
7
+
8
+ def self.count
9
+ criteria.count
10
+ end
11
+
12
+ private
13
+
14
+ def self.criteria
15
+ @criteria ||= Criteria.new(api_end_point)
16
+ end
17
+
18
+ def self.api_end_point
19
+ 'https://' + JiraCards::Config.domain + '/rest/api/2/search/'
20
+ end
21
+ end
22
+
23
+ class Criteria < Struct.new(:api_end_point)
24
+ include Enumerable
25
+
26
+ BATCH_SIZE = 50
27
+
28
+ def where(jira_query)
29
+ @query = (@query || '') + jira_query.to_s
30
+ self
31
+ end
32
+
33
+ def each(&block)
34
+ objects.each(&block)
35
+ end
36
+
37
+ def count
38
+ batch(1)['total']
39
+ end
40
+
41
+ private
42
+
43
+ def objects
44
+ @objects ||= offsets.map { |offset| batch(offset)['issues'] }.flatten
45
+ end
46
+
47
+ def get(params: {})
48
+ JSON.parse resource.get params: params.merge(jql: @query).compact
49
+ end
50
+
51
+ def batch(offset)
52
+ get(params: { startAt: offset, maxResults: BATCH_SIZE })
53
+ end
54
+
55
+ def offsets
56
+ (0..(count - 1)).step(BATCH_SIZE)
57
+ end
58
+
59
+ def resource
60
+ @resource ||= RestClient::Resource.new(
61
+ api_end_point, JiraCards::Config.user, JiraCards::Config.password)
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,21 @@
1
+ module JiraCards
2
+ class PdfCreator < Struct.new(:svgs)
3
+ def create_pdf
4
+ Prawn::Document.generate(JiraCards::Config.output) do |pdf|
5
+ svgs.each do |svg|
6
+ append_page pdf, svg
7
+ pdf.start_new_page unless pdf.page_count == svgs.size
8
+ end
9
+ end
10
+ end
11
+
12
+ private
13
+
14
+ def append_page(pdf, svg)
15
+ pdf.svg(
16
+ svg,
17
+ at: [pdf.bounds.left, pdf.bounds.top],
18
+ width: pdf.bounds.width)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,23 @@
1
+ module JiraCards
2
+ class Runner
3
+ class << self
4
+ def invoke
5
+ create_pdf_from rendered_templates_from jira_issues
6
+ end
7
+
8
+ private
9
+
10
+ def create_pdf_from(templates)
11
+ PdfCreator.new(templates).create_pdf
12
+ end
13
+
14
+ def rendered_templates_from(jira_issues)
15
+ TemplateRenderer.new(jira_issues).rendered_templates
16
+ end
17
+
18
+ def jira_issues
19
+ JiraApi::Issue.where JiraCards::Config.query
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,40 @@
1
+ module JiraCards
2
+ class TemplateRenderer < Struct.new(:issues)
3
+ TEMPLATE_PATH = File.expand_path(
4
+ '9_issues_for_dina4.svg', JiraCards::RESOURCES_PATH)
5
+
6
+ def rendered_templates
7
+ issue_summaries.each_slice(9).map do |issue_summaries_slice|
8
+ rendered_template issue_summaries_slice
9
+ end.flatten
10
+ end
11
+
12
+ private
13
+
14
+ def rendered_template(issue_summaries_slice)
15
+ @issues =
16
+ issue_summaries_slice +
17
+ (9 - issue_summaries_slice.length).times.map { { summary: [] } }
18
+ ERB.new(template_file_contents.clone).result binding
19
+ end
20
+
21
+ def issue_summaries
22
+ issues.map do |issue|
23
+ {
24
+ key: CGI.escapeHTML(issue['key']),
25
+ summary: aligned(issue['fields']['summary'])
26
+ }
27
+ end
28
+ end
29
+
30
+ def template_file_contents
31
+ @template_file_contents ||= CGI.unescapeHTML File.read TEMPLATE_PATH
32
+ end
33
+
34
+ def aligned(issue_summary)
35
+ issue_summary.chars.each_slice(40).map do |summary_slice|
36
+ CGI.escapeHTML(summary_slice.join)
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,3 @@
1
+ module JiraCards
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,1160 @@
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="744.09448819"
13
+ height="1052.3622047"
14
+ id="svg2"
15
+ version="1.1"
16
+ inkscape:version="0.48.4 r9939"
17
+ sodipodi:docname="dina4_6_template.svg">
18
+ <defs
19
+ id="defs4" />
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="1.4142136"
28
+ inkscape:cx="390.4784"
29
+ inkscape:cy="240.55292"
30
+ inkscape:document-units="px"
31
+ inkscape:current-layer="layer1"
32
+ showgrid="true"
33
+ inkscape:window-width="1366"
34
+ inkscape:window-height="747"
35
+ inkscape:window-x="0"
36
+ inkscape:window-y="21"
37
+ inkscape:window-maximized="1"
38
+ inkscape:snap-global="true">
39
+ <inkscape:grid
40
+ type="xygrid"
41
+ id="grid2985"
42
+ empspacing="5"
43
+ visible="true"
44
+ enabled="true"
45
+ snapvisiblegridlinesonly="true"
46
+ units="mm"
47
+ spacingx="56mm"
48
+ spacingy="88mm"
49
+ originx="15mm"
50
+ originy="15mm" />
51
+ </sodipodi:namedview>
52
+ <metadata
53
+ id="metadata7">
54
+ <rdf:RDF>
55
+ <cc:Work
56
+ rdf:about="">
57
+ <dc:format>image/svg+xml</dc:format>
58
+ <dc:type
59
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
60
+ <dc:title />
61
+ </cc:Work>
62
+ </rdf:RDF>
63
+ </metadata>
64
+ <g
65
+ inkscape:label="Layer 1"
66
+ inkscape:groupmode="layer"
67
+ id="layer1">
68
+ <rect
69
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
70
+ id="rect2987"
71
+ width="198.4252"
72
+ height="311.81104"
73
+ x="-251.57481"
74
+ y="-375.59055"
75
+ transform="scale(-1,-1)" />
76
+ <rect
77
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
78
+ id="rect2987-3"
79
+ width="198.4252"
80
+ height="311.81104"
81
+ x="251.5748"
82
+ y="63.779503" />
83
+ <rect
84
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
85
+ id="rect2987-2"
86
+ width="198.4252"
87
+ height="311.81104"
88
+ x="53.149605"
89
+ y="375.59052" />
90
+ <rect
91
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
92
+ id="rect2987-9"
93
+ width="198.4252"
94
+ height="311.81104"
95
+ x="251.5748"
96
+ y="375.59052" />
97
+ <rect
98
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
99
+ id="rect2987-0"
100
+ width="198.4252"
101
+ height="311.81104"
102
+ x="450"
103
+ y="375.59052" />
104
+ <rect
105
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
106
+ id="rect2987-05"
107
+ width="198.4252"
108
+ height="311.81104"
109
+ x="450"
110
+ y="687.40155" />
111
+ <rect
112
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
113
+ id="rect2987-6"
114
+ width="198.4252"
115
+ height="311.81104"
116
+ x="251.5748"
117
+ y="687.40155" />
118
+ <rect
119
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
120
+ id="rect2987-67"
121
+ width="198.4252"
122
+ height="311.81104"
123
+ x="53.149605"
124
+ y="687.40155" />
125
+ <flowRoot
126
+ xml:space="preserve"
127
+ id="flowRoot3941"
128
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><flowRegion
129
+ id="flowRegion3943"><rect
130
+ id="rect3945"
131
+ width="115.15739"
132
+ height="123.23861"
133
+ x="97.984795"
134
+ y="203.83405" /></flowRegion><flowPara
135
+ id="flowPara3947">hello , </flowPara></flowRoot> <text
136
+ xml:space="preserve"
137
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
138
+ x="657.60931"
139
+ y="189.69191"
140
+ id="text3279"
141
+ sodipodi:linespacing="125%"><tspan
142
+ sodipodi:role="line"
143
+ id="tspan3281" /></text>
144
+ <rect
145
+ style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
146
+ id="rect2987-1"
147
+ width="198.4252"
148
+ height="311.81104"
149
+ x="449.99426"
150
+ y="63.78133" />
151
+ <g
152
+ id="g4044"
153
+ transform="matrix(0,1,-1,0,768.89372,-329.52003)">
154
+ <text
155
+ sodipodi:linespacing="125%"
156
+ id="text3210"
157
+ y="146.36218"
158
+ x="403"
159
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
160
+ xml:space="preserve"><tspan
161
+ style="font-size:20px;font-weight:bold;-inkscape-font-specification:Sans Bold"
162
+ y="146.36218"
163
+ x="403"
164
+ id="tspan3212"
165
+ sodipodi:role="line">&lt;%= @issues[0][:key] %&gt;</tspan></text>
166
+ <text
167
+ sodipodi:linespacing="125%"
168
+ id="text3214"
169
+ y="173.36218"
170
+ x="404"
171
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
172
+ xml:space="preserve"><tspan
173
+ style="font-size:16px"
174
+ y="173.36218"
175
+ x="404"
176
+ id="tspan3216"
177
+ sodipodi:role="line">&lt;%= @issues[0][:summary][0] %&gt;</tspan></text>
178
+ <text
179
+ sodipodi:linespacing="125%"
180
+ id="text3214-3"
181
+ y="191.36218"
182
+ x="404"
183
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
184
+ xml:space="preserve"><tspan
185
+ style="font-size:16px"
186
+ y="191.36218"
187
+ x="404"
188
+ id="tspan3216-2"
189
+ sodipodi:role="line">&lt;%= @issues[0][:summary][1] %&gt;</tspan></text>
190
+ <text
191
+ sodipodi:linespacing="125%"
192
+ id="text3214-2"
193
+ y="209.36218"
194
+ x="404"
195
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
196
+ xml:space="preserve"><tspan
197
+ style="font-size:16px"
198
+ y="209.36218"
199
+ x="404"
200
+ id="tspan3216-9"
201
+ sodipodi:role="line">&lt;%= @issues[0][:summary][2] %&gt;</tspan></text>
202
+ <text
203
+ sodipodi:linespacing="125%"
204
+ id="text3214-33"
205
+ y="227.36218"
206
+ x="404"
207
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
208
+ xml:space="preserve"><tspan
209
+ style="font-size:16px"
210
+ y="227.36218"
211
+ x="404"
212
+ id="tspan3216-3"
213
+ sodipodi:role="line">&lt;%= @issues[0][:summary][3] %&gt;</tspan></text>
214
+ <text
215
+ sodipodi:linespacing="125%"
216
+ id="text3214-0"
217
+ y="245.36218"
218
+ x="404"
219
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
220
+ xml:space="preserve"><tspan
221
+ style="font-size:16px"
222
+ y="245.36218"
223
+ x="404"
224
+ id="tspan3216-38"
225
+ sodipodi:role="line">&lt;%= @issues[0][:summary][4] %&gt;</tspan></text>
226
+ <text
227
+ sodipodi:linespacing="125%"
228
+ id="text3214-4"
229
+ y="263.36218"
230
+ x="404"
231
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
232
+ xml:space="preserve"><tspan
233
+ style="font-size:16px"
234
+ y="263.36218"
235
+ x="404"
236
+ id="tspan3216-8"
237
+ sodipodi:role="line">&lt;%= @issues[0][:summary][5] %&gt;</tspan></text>
238
+ <text
239
+ sodipodi:linespacing="125%"
240
+ id="text3214-7"
241
+ y="283.36218"
242
+ x="404"
243
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
244
+ xml:space="preserve"><tspan
245
+ style="font-size:16px"
246
+ y="283.36218"
247
+ x="404"
248
+ id="tspan3216-93"
249
+ sodipodi:role="line">&lt;%= @issues[0][:summary][6] %&gt;</tspan></text>
250
+ <text
251
+ sodipodi:linespacing="125%"
252
+ id="text3214-70"
253
+ y="301.36218"
254
+ x="404"
255
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
256
+ xml:space="preserve"><tspan
257
+ style="font-size:16px"
258
+ y="301.36218"
259
+ x="404"
260
+ id="tspan3216-4"
261
+ sodipodi:role="line">&lt;%= @issues[0][:summary][7] %&gt;</tspan></text>
262
+ </g>
263
+ <g
264
+ id="g4044-4"
265
+ transform="matrix(0,1,-1,0,570.46852,-329.52003)">
266
+ <text
267
+ sodipodi:linespacing="125%"
268
+ id="text3210-0"
269
+ y="146.36218"
270
+ x="403"
271
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
272
+ xml:space="preserve"><tspan
273
+ style="font-size:20px;font-weight:bold;-inkscape-font-specification:Sans Bold"
274
+ y="146.36218"
275
+ x="403"
276
+ id="tspan3212-9"
277
+ sodipodi:role="line">&lt;%= @issues[3][:key] %&gt;</tspan></text>
278
+ <text
279
+ sodipodi:linespacing="125%"
280
+ id="text3214-05"
281
+ y="173.36218"
282
+ x="404"
283
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
284
+ xml:space="preserve"><tspan
285
+ style="font-size:16px"
286
+ y="173.36218"
287
+ x="404"
288
+ id="tspan3216-933"
289
+ sodipodi:role="line">&lt;%= @issues[3][:summary][0] %&gt;</tspan></text>
290
+ <text
291
+ sodipodi:linespacing="125%"
292
+ id="text3214-3-1"
293
+ y="191.36218"
294
+ x="404"
295
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
296
+ xml:space="preserve"><tspan
297
+ style="font-size:16px"
298
+ y="191.36218"
299
+ x="404"
300
+ id="tspan3216-2-9"
301
+ sodipodi:role="line">&lt;%= @issues[3][:summary][1] %&gt;</tspan></text>
302
+ <text
303
+ sodipodi:linespacing="125%"
304
+ id="text3214-2-1"
305
+ y="209.36218"
306
+ x="404"
307
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
308
+ xml:space="preserve"><tspan
309
+ style="font-size:16px"
310
+ y="209.36218"
311
+ x="404"
312
+ id="tspan3216-9-6"
313
+ sodipodi:role="line">&lt;%= @issues[3][:summary][2] %&gt;</tspan></text>
314
+ <text
315
+ sodipodi:linespacing="125%"
316
+ id="text3214-33-5"
317
+ y="227.36218"
318
+ x="404"
319
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
320
+ xml:space="preserve"><tspan
321
+ style="font-size:16px"
322
+ y="227.36218"
323
+ x="404"
324
+ id="tspan3216-3-3"
325
+ sodipodi:role="line">&lt;%= @issues[3][:summary][3] %&gt;</tspan></text>
326
+ <text
327
+ sodipodi:linespacing="125%"
328
+ id="text3214-0-0"
329
+ y="245.36218"
330
+ x="404"
331
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
332
+ xml:space="preserve"><tspan
333
+ style="font-size:16px"
334
+ y="245.36218"
335
+ x="404"
336
+ id="tspan3216-38-2"
337
+ sodipodi:role="line">&lt;%= @issues[3][:summary][4] %&gt;</tspan></text>
338
+ <text
339
+ sodipodi:linespacing="125%"
340
+ id="text3214-4-6"
341
+ y="263.36218"
342
+ x="404"
343
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
344
+ xml:space="preserve"><tspan
345
+ style="font-size:16px"
346
+ y="263.36218"
347
+ x="404"
348
+ id="tspan3216-8-3"
349
+ sodipodi:role="line">&lt;%= @issues[3][:summary][5] %&gt;</tspan></text>
350
+ <text
351
+ sodipodi:linespacing="125%"
352
+ id="text3214-7-7"
353
+ y="283.36218"
354
+ x="404"
355
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
356
+ xml:space="preserve"><tspan
357
+ style="font-size:16px"
358
+ y="283.36218"
359
+ x="404"
360
+ id="tspan3216-93-7"
361
+ sodipodi:role="line">&lt;%= @issues[3][:summary][6] %&gt;</tspan></text>
362
+ <text
363
+ sodipodi:linespacing="125%"
364
+ id="text3214-70-7"
365
+ y="301.36218"
366
+ x="404"
367
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
368
+ xml:space="preserve"><tspan
369
+ style="font-size:16px"
370
+ y="301.36218"
371
+ x="404"
372
+ id="tspan3216-4-3"
373
+ sodipodi:role="line">&lt;%= @issues[3][:summary][7] %&gt;</tspan></text>
374
+ </g>
375
+ <g
376
+ id="g4044-2"
377
+ transform="matrix(0,1,-1,0,372.04332,-329.52003)">
378
+ <text
379
+ sodipodi:linespacing="125%"
380
+ id="text3210-08"
381
+ y="146.36218"
382
+ x="403"
383
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
384
+ xml:space="preserve"><tspan
385
+ style="font-size:20px;font-weight:bold;-inkscape-font-specification:Sans Bold"
386
+ y="146.36218"
387
+ x="403"
388
+ id="tspan3212-2"
389
+ sodipodi:role="line">&lt;%= @issues[6][:key] %&gt;</tspan></text>
390
+ <text
391
+ sodipodi:linespacing="125%"
392
+ id="text3214-40"
393
+ y="173.36218"
394
+ x="404"
395
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
396
+ xml:space="preserve"><tspan
397
+ style="font-size:16px"
398
+ y="173.36218"
399
+ x="404"
400
+ id="tspan3216-1"
401
+ sodipodi:role="line">&lt;%= @issues[6][:summary][0] %&gt;</tspan></text>
402
+ <text
403
+ sodipodi:linespacing="125%"
404
+ id="text3214-3-2"
405
+ y="191.36218"
406
+ x="404"
407
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
408
+ xml:space="preserve"><tspan
409
+ style="font-size:16px"
410
+ y="191.36218"
411
+ x="404"
412
+ id="tspan3216-2-1"
413
+ sodipodi:role="line">&lt;%= @issues[6][:summary][1] %&gt;</tspan></text>
414
+ <text
415
+ sodipodi:linespacing="125%"
416
+ id="text3214-2-7"
417
+ y="209.36218"
418
+ x="404"
419
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
420
+ xml:space="preserve"><tspan
421
+ style="font-size:16px"
422
+ y="209.36218"
423
+ x="404"
424
+ id="tspan3216-9-2"
425
+ sodipodi:role="line">&lt;%= @issues[6][:summary][2] %&gt;</tspan></text>
426
+ <text
427
+ sodipodi:linespacing="125%"
428
+ id="text3214-33-0"
429
+ y="227.36218"
430
+ x="404"
431
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
432
+ xml:space="preserve"><tspan
433
+ style="font-size:16px"
434
+ y="227.36218"
435
+ x="404"
436
+ id="tspan3216-3-8"
437
+ sodipodi:role="line">&lt;%= @issues[6][:summary][3] %&gt;</tspan></text>
438
+ <text
439
+ sodipodi:linespacing="125%"
440
+ id="text3214-0-9"
441
+ y="245.36218"
442
+ x="404"
443
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
444
+ xml:space="preserve"><tspan
445
+ style="font-size:16px"
446
+ y="245.36218"
447
+ x="404"
448
+ id="tspan3216-38-1"
449
+ sodipodi:role="line">&lt;%= @issues[6][:summary][4] %&gt;</tspan></text>
450
+ <text
451
+ sodipodi:linespacing="125%"
452
+ id="text3214-4-3"
453
+ y="263.36218"
454
+ x="404"
455
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
456
+ xml:space="preserve"><tspan
457
+ style="font-size:16px"
458
+ y="263.36218"
459
+ x="404"
460
+ id="tspan3216-8-33"
461
+ sodipodi:role="line">&lt;%= @issues[6][:summary][5] %&gt;</tspan></text>
462
+ <text
463
+ sodipodi:linespacing="125%"
464
+ id="text3214-7-4"
465
+ y="283.36218"
466
+ x="404"
467
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
468
+ xml:space="preserve"><tspan
469
+ style="font-size:16px"
470
+ y="283.36218"
471
+ x="404"
472
+ id="tspan3216-93-6"
473
+ sodipodi:role="line">&lt;%= @issues[6][:summary][6] %&gt;</tspan></text>
474
+ <text
475
+ sodipodi:linespacing="125%"
476
+ id="text3214-70-1"
477
+ y="301.36218"
478
+ x="404"
479
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
480
+ xml:space="preserve"><tspan
481
+ style="font-size:16px"
482
+ y="301.36218"
483
+ x="404"
484
+ id="tspan3216-4-9"
485
+ sodipodi:role="line">&lt;%= @issues[6][:summary][7] %&gt;</tspan></text>
486
+ </g>
487
+ <g
488
+ id="g4044-21"
489
+ transform="matrix(0,1,-1,0,372.04332,-17.709004)">
490
+ <text
491
+ sodipodi:linespacing="125%"
492
+ id="text3210-4"
493
+ y="146.36218"
494
+ x="403"
495
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
496
+ xml:space="preserve"><tspan
497
+ style="font-size:20px;font-weight:bold;-inkscape-font-specification:Sans Bold"
498
+ y="146.36218"
499
+ x="403"
500
+ id="tspan3212-0"
501
+ sodipodi:role="line">&lt;%= @issues[7][:key] %&gt;</tspan></text>
502
+ <text
503
+ sodipodi:linespacing="125%"
504
+ id="text3214-43"
505
+ y="173.36218"
506
+ x="404"
507
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
508
+ xml:space="preserve"><tspan
509
+ style="font-size:16px"
510
+ y="173.36218"
511
+ x="404"
512
+ id="tspan3216-7"
513
+ sodipodi:role="line">&lt;%= @issues[7][:summary][0] %&gt;</tspan></text>
514
+ <text
515
+ sodipodi:linespacing="125%"
516
+ id="text3214-3-3"
517
+ y="191.36218"
518
+ x="404"
519
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
520
+ xml:space="preserve"><tspan
521
+ style="font-size:16px"
522
+ y="191.36218"
523
+ x="404"
524
+ id="tspan3216-2-6"
525
+ sodipodi:role="line">&lt;%= @issues[7][:summary][1] %&gt;</tspan></text>
526
+ <text
527
+ sodipodi:linespacing="125%"
528
+ id="text3214-2-13"
529
+ y="209.36218"
530
+ x="404"
531
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
532
+ xml:space="preserve"><tspan
533
+ style="font-size:16px"
534
+ y="209.36218"
535
+ x="404"
536
+ id="tspan3216-9-4"
537
+ sodipodi:role="line">&lt;%= @issues[7][:summary][2] %&gt;</tspan></text>
538
+ <text
539
+ sodipodi:linespacing="125%"
540
+ id="text3214-33-59"
541
+ y="227.36218"
542
+ x="404"
543
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
544
+ xml:space="preserve"><tspan
545
+ style="font-size:16px"
546
+ y="227.36218"
547
+ x="404"
548
+ id="tspan3216-3-6"
549
+ sodipodi:role="line">&lt;%= @issues[7][:summary][3] %&gt;</tspan></text>
550
+ <text
551
+ sodipodi:linespacing="125%"
552
+ id="text3214-0-6"
553
+ y="245.36218"
554
+ x="404"
555
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
556
+ xml:space="preserve"><tspan
557
+ style="font-size:16px"
558
+ y="245.36218"
559
+ x="404"
560
+ id="tspan3216-38-17"
561
+ sodipodi:role="line">&lt;%= @issues[7][:summary][4] %&gt;</tspan></text>
562
+ <text
563
+ sodipodi:linespacing="125%"
564
+ id="text3214-4-4"
565
+ y="263.36218"
566
+ x="404"
567
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
568
+ xml:space="preserve"><tspan
569
+ style="font-size:16px"
570
+ y="263.36218"
571
+ x="404"
572
+ id="tspan3216-8-6"
573
+ sodipodi:role="line">&lt;%= @issues[7][:summary][5] %&gt;</tspan></text>
574
+ <text
575
+ sodipodi:linespacing="125%"
576
+ id="text3214-7-9"
577
+ y="283.36218"
578
+ x="404"
579
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
580
+ xml:space="preserve"><tspan
581
+ style="font-size:16px"
582
+ y="283.36218"
583
+ x="404"
584
+ id="tspan3216-93-4"
585
+ sodipodi:role="line">&lt;%= @issues[7][:summary][6] %&gt;</tspan></text>
586
+ <text
587
+ sodipodi:linespacing="125%"
588
+ id="text3214-70-5"
589
+ y="301.36218"
590
+ x="404"
591
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
592
+ xml:space="preserve"><tspan
593
+ style="font-size:16px"
594
+ y="301.36218"
595
+ x="404"
596
+ id="tspan3216-4-39"
597
+ sodipodi:role="line">&lt;%= @issues[7][:summary][7] %&gt;</tspan></text>
598
+ </g>
599
+ <g
600
+ id="g4044-8"
601
+ transform="matrix(0,1,-1,0,570.46852,-17.709004)">
602
+ <text
603
+ sodipodi:linespacing="125%"
604
+ id="text3210-6"
605
+ y="146.36218"
606
+ x="403"
607
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
608
+ xml:space="preserve"><tspan
609
+ style="font-size:20px;font-weight:bold;-inkscape-font-specification:Sans Bold"
610
+ y="146.36218"
611
+ x="403"
612
+ id="tspan3212-4"
613
+ sodipodi:role="line">&lt;%= @issues[4][:key] %&gt;</tspan></text>
614
+ <text
615
+ sodipodi:linespacing="125%"
616
+ id="text3214-79"
617
+ y="173.36218"
618
+ x="404"
619
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
620
+ xml:space="preserve"><tspan
621
+ style="font-size:16px"
622
+ y="173.36218"
623
+ x="404"
624
+ id="tspan3216-39"
625
+ sodipodi:role="line">&lt;%= @issues[4][:summary][0] %&gt;</tspan></text>
626
+ <text
627
+ sodipodi:linespacing="125%"
628
+ id="text3214-3-0"
629
+ y="191.36218"
630
+ x="404"
631
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
632
+ xml:space="preserve"><tspan
633
+ style="font-size:16px"
634
+ y="191.36218"
635
+ x="404"
636
+ id="tspan3216-2-99"
637
+ sodipodi:role="line">&lt;%= @issues[4][:summary][1] %&gt;</tspan></text>
638
+ <text
639
+ sodipodi:linespacing="125%"
640
+ id="text3214-2-72"
641
+ y="209.36218"
642
+ x="404"
643
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
644
+ xml:space="preserve"><tspan
645
+ style="font-size:16px"
646
+ y="209.36218"
647
+ x="404"
648
+ id="tspan3216-9-8"
649
+ sodipodi:role="line">&lt;%= @issues[4][:summary][2] %&gt;</tspan></text>
650
+ <text
651
+ sodipodi:linespacing="125%"
652
+ id="text3214-33-08"
653
+ y="227.36218"
654
+ x="404"
655
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
656
+ xml:space="preserve"><tspan
657
+ style="font-size:16px"
658
+ y="227.36218"
659
+ x="404"
660
+ id="tspan3216-3-9"
661
+ sodipodi:role="line">&lt;%= @issues[4][:summary][3] %&gt;</tspan></text>
662
+ <text
663
+ sodipodi:linespacing="125%"
664
+ id="text3214-0-64"
665
+ y="245.36218"
666
+ x="404"
667
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
668
+ xml:space="preserve"><tspan
669
+ style="font-size:16px"
670
+ y="245.36218"
671
+ x="404"
672
+ id="tspan3216-38-4"
673
+ sodipodi:role="line">&lt;%= @issues[4][:summary][4] %&gt;</tspan></text>
674
+ <text
675
+ sodipodi:linespacing="125%"
676
+ id="text3214-4-5"
677
+ y="263.36218"
678
+ x="404"
679
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
680
+ xml:space="preserve"><tspan
681
+ style="font-size:16px"
682
+ y="263.36218"
683
+ x="404"
684
+ id="tspan3216-8-30"
685
+ sodipodi:role="line">&lt;%= @issues[4][:summary][5] %&gt;</tspan></text>
686
+ <text
687
+ sodipodi:linespacing="125%"
688
+ id="text3214-7-72"
689
+ y="283.36218"
690
+ x="404"
691
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
692
+ xml:space="preserve"><tspan
693
+ style="font-size:16px"
694
+ y="283.36218"
695
+ x="404"
696
+ id="tspan3216-93-63"
697
+ sodipodi:role="line">&lt;%= @issues[4][:summary][6] %&gt;</tspan></text>
698
+ <text
699
+ sodipodi:linespacing="125%"
700
+ id="text3214-70-2"
701
+ y="301.36218"
702
+ x="404"
703
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
704
+ xml:space="preserve"><tspan
705
+ style="font-size:16px"
706
+ y="301.36218"
707
+ x="404"
708
+ id="tspan3216-4-0"
709
+ sodipodi:role="line">&lt;%= @issues[4][:summary][7] %&gt;</tspan></text>
710
+ </g>
711
+ <g
712
+ id="g4044-0"
713
+ transform="matrix(0,1,-1,0,768.89372,-17.709004)">
714
+ <text
715
+ sodipodi:linespacing="125%"
716
+ id="text3210-5"
717
+ y="146.36218"
718
+ x="403"
719
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
720
+ xml:space="preserve"><tspan
721
+ style="font-size:20px;font-weight:bold;-inkscape-font-specification:Sans Bold"
722
+ y="146.36218"
723
+ x="403"
724
+ id="tspan3212-09"
725
+ sodipodi:role="line">&lt;%= @issues[1][:key] %&gt;</tspan></text>
726
+ <text
727
+ sodipodi:linespacing="125%"
728
+ id="text3214-36"
729
+ y="173.36218"
730
+ x="404"
731
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
732
+ xml:space="preserve"><tspan
733
+ style="font-size:16px"
734
+ y="173.36218"
735
+ x="404"
736
+ id="tspan3216-82"
737
+ sodipodi:role="line">&lt;%= @issues[1][:summary][0] %&gt;</tspan></text>
738
+ <text
739
+ sodipodi:linespacing="125%"
740
+ id="text3214-3-19"
741
+ y="191.36218"
742
+ x="404"
743
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
744
+ xml:space="preserve"><tspan
745
+ style="font-size:16px"
746
+ y="191.36218"
747
+ x="404"
748
+ id="tspan3216-2-4"
749
+ sodipodi:role="line">&lt;%= @issues[1][:summary][1] %&gt;</tspan></text>
750
+ <text
751
+ sodipodi:linespacing="125%"
752
+ id="text3214-2-10"
753
+ y="209.36218"
754
+ x="404"
755
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
756
+ xml:space="preserve"><tspan
757
+ style="font-size:16px"
758
+ y="209.36218"
759
+ x="404"
760
+ id="tspan3216-9-3"
761
+ sodipodi:role="line">&lt;%= @issues[1][:summary][2] %&gt;</tspan></text>
762
+ <text
763
+ sodipodi:linespacing="125%"
764
+ id="text3214-33-3"
765
+ y="227.36218"
766
+ x="404"
767
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
768
+ xml:space="preserve"><tspan
769
+ style="font-size:16px"
770
+ y="227.36218"
771
+ x="404"
772
+ id="tspan3216-3-86"
773
+ sodipodi:role="line">&lt;%= @issues[1][:summary][3] %&gt;</tspan></text>
774
+ <text
775
+ sodipodi:linespacing="125%"
776
+ id="text3214-0-4"
777
+ y="245.36218"
778
+ x="404"
779
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
780
+ xml:space="preserve"><tspan
781
+ style="font-size:16px"
782
+ y="245.36218"
783
+ x="404"
784
+ id="tspan3216-38-7"
785
+ sodipodi:role="line">&lt;%= @issues[1][:summary][4] %&gt;</tspan></text>
786
+ <text
787
+ sodipodi:linespacing="125%"
788
+ id="text3214-4-2"
789
+ y="263.36218"
790
+ x="404"
791
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
792
+ xml:space="preserve"><tspan
793
+ style="font-size:16px"
794
+ y="263.36218"
795
+ x="404"
796
+ id="tspan3216-8-0"
797
+ sodipodi:role="line">&lt;%= @issues[1][:summary][5] %&gt;</tspan></text>
798
+ <text
799
+ sodipodi:linespacing="125%"
800
+ id="text3214-7-3"
801
+ y="283.36218"
802
+ x="404"
803
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
804
+ xml:space="preserve"><tspan
805
+ style="font-size:16px"
806
+ y="283.36218"
807
+ x="404"
808
+ id="tspan3216-93-73"
809
+ sodipodi:role="line">&lt;%= @issues[1][:summary][6] %&gt;</tspan></text>
810
+ <text
811
+ sodipodi:linespacing="125%"
812
+ id="text3214-70-3"
813
+ y="301.36218"
814
+ x="404"
815
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
816
+ xml:space="preserve"><tspan
817
+ style="font-size:16px"
818
+ y="301.36218"
819
+ x="404"
820
+ id="tspan3216-4-6"
821
+ sodipodi:role="line">&lt;%= @issues[1][:summary][7] %&gt;</tspan></text>
822
+ </g>
823
+ <g
824
+ id="g4044-6"
825
+ transform="matrix(0,1,-1,0,768.89372,294.10202)">
826
+ <text
827
+ sodipodi:linespacing="125%"
828
+ id="text3210-2"
829
+ y="146.36218"
830
+ x="403"
831
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
832
+ xml:space="preserve"><tspan
833
+ style="font-size:20px;font-weight:bold;-inkscape-font-specification:Sans Bold"
834
+ y="146.36218"
835
+ x="403"
836
+ id="tspan3212-1"
837
+ sodipodi:role="line">&lt;%= @issues[2][:key] %&gt;</tspan></text>
838
+ <text
839
+ sodipodi:linespacing="125%"
840
+ id="text3214-04"
841
+ y="173.36218"
842
+ x="404"
843
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
844
+ xml:space="preserve"><tspan
845
+ style="font-size:16px"
846
+ y="173.36218"
847
+ x="404"
848
+ id="tspan3216-27"
849
+ sodipodi:role="line">&lt;%= @issues[2][:summary][0] %&gt;</tspan></text>
850
+ <text
851
+ sodipodi:linespacing="125%"
852
+ id="text3214-3-6"
853
+ y="191.36218"
854
+ x="404"
855
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
856
+ xml:space="preserve"><tspan
857
+ style="font-size:16px"
858
+ y="191.36218"
859
+ x="404"
860
+ id="tspan3216-2-3"
861
+ sodipodi:role="line">&lt;%= @issues[2][:summary][1] %&gt;</tspan></text>
862
+ <text
863
+ sodipodi:linespacing="125%"
864
+ id="text3214-2-0"
865
+ y="209.36218"
866
+ x="404"
867
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
868
+ xml:space="preserve"><tspan
869
+ style="font-size:16px"
870
+ y="209.36218"
871
+ x="404"
872
+ id="tspan3216-9-21"
873
+ sodipodi:role="line">&lt;%= @issues[2][:summary][2] %&gt;</tspan></text>
874
+ <text
875
+ sodipodi:linespacing="125%"
876
+ id="text3214-33-4"
877
+ y="227.36218"
878
+ x="404"
879
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
880
+ xml:space="preserve"><tspan
881
+ style="font-size:16px"
882
+ y="227.36218"
883
+ x="404"
884
+ id="tspan3216-3-4"
885
+ sodipodi:role="line">&lt;%= @issues[2][:summary][3] %&gt;</tspan></text>
886
+ <text
887
+ sodipodi:linespacing="125%"
888
+ id="text3214-0-00"
889
+ y="245.36218"
890
+ x="404"
891
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
892
+ xml:space="preserve"><tspan
893
+ style="font-size:16px"
894
+ y="245.36218"
895
+ x="404"
896
+ id="tspan3216-38-70"
897
+ sodipodi:role="line">&lt;%= @issues[2][:summary][4] %&gt;</tspan></text>
898
+ <text
899
+ sodipodi:linespacing="125%"
900
+ id="text3214-4-40"
901
+ y="263.36218"
902
+ x="404"
903
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
904
+ xml:space="preserve"><tspan
905
+ style="font-size:16px"
906
+ y="263.36218"
907
+ x="404"
908
+ id="tspan3216-8-8"
909
+ sodipodi:role="line">&lt;%= @issues[2][:summary][5] %&gt;</tspan></text>
910
+ <text
911
+ sodipodi:linespacing="125%"
912
+ id="text3214-7-0"
913
+ y="283.36218"
914
+ x="404"
915
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
916
+ xml:space="preserve"><tspan
917
+ style="font-size:16px"
918
+ y="283.36218"
919
+ x="404"
920
+ id="tspan3216-93-67"
921
+ sodipodi:role="line">&lt;%= @issues[2][:summary][6] %&gt;</tspan></text>
922
+ <text
923
+ sodipodi:linespacing="125%"
924
+ id="text3214-70-4"
925
+ y="301.36218"
926
+ x="404"
927
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
928
+ xml:space="preserve"><tspan
929
+ style="font-size:16px"
930
+ y="301.36218"
931
+ x="404"
932
+ id="tspan3216-4-7"
933
+ sodipodi:role="line">&lt;%= @issues[2][:summary][7] %&gt;</tspan></text>
934
+ </g>
935
+ <g
936
+ id="g4044-03"
937
+ transform="matrix(0,1,-1,0,570.46852,294.10202)">
938
+ <text
939
+ sodipodi:linespacing="125%"
940
+ id="text3210-25"
941
+ y="146.36218"
942
+ x="403"
943
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
944
+ xml:space="preserve"><tspan
945
+ style="font-size:20px;font-weight:bold;-inkscape-font-specification:Sans Bold"
946
+ y="146.36218"
947
+ x="403"
948
+ id="tspan3212-08"
949
+ sodipodi:role="line">&lt;%= @issues[5][:key] %&gt;</tspan></text>
950
+ <text
951
+ sodipodi:linespacing="125%"
952
+ id="text3214-71"
953
+ y="173.36218"
954
+ x="404"
955
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
956
+ xml:space="preserve"><tspan
957
+ style="font-size:16px"
958
+ y="173.36218"
959
+ x="404"
960
+ id="tspan3216-823"
961
+ sodipodi:role="line">&lt;%= @issues[5][:summary][0] %&gt;</tspan></text>
962
+ <text
963
+ sodipodi:linespacing="125%"
964
+ id="text3214-3-5"
965
+ y="191.36218"
966
+ x="404"
967
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
968
+ xml:space="preserve"><tspan
969
+ style="font-size:16px"
970
+ y="191.36218"
971
+ x="404"
972
+ id="tspan3216-2-0"
973
+ sodipodi:role="line">&lt;%= @issues[5][:summary][1] %&gt;</tspan></text>
974
+ <text
975
+ sodipodi:linespacing="125%"
976
+ id="text3214-2-6"
977
+ y="209.36218"
978
+ x="404"
979
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
980
+ xml:space="preserve"><tspan
981
+ style="font-size:16px"
982
+ y="209.36218"
983
+ x="404"
984
+ id="tspan3216-9-7"
985
+ sodipodi:role="line">&lt;%= @issues[5][:summary][2] %&gt;</tspan></text>
986
+ <text
987
+ sodipodi:linespacing="125%"
988
+ id="text3214-33-39"
989
+ y="227.36218"
990
+ x="404"
991
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
992
+ xml:space="preserve"><tspan
993
+ style="font-size:16px"
994
+ y="227.36218"
995
+ x="404"
996
+ id="tspan3216-3-39"
997
+ sodipodi:role="line">&lt;%= @issues[5][:summary][3] %&gt;</tspan></text>
998
+ <text
999
+ sodipodi:linespacing="125%"
1000
+ id="text3214-0-94"
1001
+ y="245.36218"
1002
+ x="404"
1003
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
1004
+ xml:space="preserve"><tspan
1005
+ style="font-size:16px"
1006
+ y="245.36218"
1007
+ x="404"
1008
+ id="tspan3216-38-6"
1009
+ sodipodi:role="line">&lt;%= @issues[5][:summary][4] %&gt;</tspan></text>
1010
+ <text
1011
+ sodipodi:linespacing="125%"
1012
+ id="text3214-4-1"
1013
+ y="263.36218"
1014
+ x="404"
1015
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
1016
+ xml:space="preserve"><tspan
1017
+ style="font-size:16px"
1018
+ y="263.36218"
1019
+ x="404"
1020
+ id="tspan3216-8-06"
1021
+ sodipodi:role="line">&lt;%= @issues[5][:summary][5] %&gt;</tspan></text>
1022
+ <text
1023
+ sodipodi:linespacing="125%"
1024
+ id="text3214-7-1"
1025
+ y="283.36218"
1026
+ x="404"
1027
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
1028
+ xml:space="preserve"><tspan
1029
+ style="font-size:16px"
1030
+ y="283.36218"
1031
+ x="404"
1032
+ id="tspan3216-93-2"
1033
+ sodipodi:role="line">&lt;%= @issues[5][:summary][6] %&gt;</tspan></text>
1034
+ <text
1035
+ sodipodi:linespacing="125%"
1036
+ id="text3214-70-58"
1037
+ y="301.36218"
1038
+ x="404"
1039
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
1040
+ xml:space="preserve"><tspan
1041
+ style="font-size:16px"
1042
+ y="301.36218"
1043
+ x="404"
1044
+ id="tspan3216-4-64"
1045
+ sodipodi:role="line">&lt;%= @issues[5][:summary][7] %&gt;</tspan></text>
1046
+ </g>
1047
+ <g
1048
+ id="g4044-09"
1049
+ transform="matrix(0,1,-1,0,372.04332,294.10202)">
1050
+ <text
1051
+ sodipodi:linespacing="125%"
1052
+ id="text3210-66"
1053
+ y="146.36218"
1054
+ x="403"
1055
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
1056
+ xml:space="preserve"><tspan
1057
+ style="font-size:20px;font-weight:bold;-inkscape-font-specification:Sans Bold"
1058
+ y="146.36218"
1059
+ x="403"
1060
+ id="tspan3212-15"
1061
+ sodipodi:role="line">&lt;%= @issues[8][:key] %&gt;</tspan></text>
1062
+ <text
1063
+ sodipodi:linespacing="125%"
1064
+ id="text3214-35"
1065
+ y="173.36218"
1066
+ x="404"
1067
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
1068
+ xml:space="preserve"><tspan
1069
+ style="font-size:16px"
1070
+ y="173.36218"
1071
+ x="404"
1072
+ id="tspan3216-5"
1073
+ sodipodi:role="line">&lt;%= @issues[8][:summary][0] %&gt;</tspan></text>
1074
+ <text
1075
+ sodipodi:linespacing="125%"
1076
+ id="text3214-3-7"
1077
+ y="191.36218"
1078
+ x="404"
1079
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
1080
+ xml:space="preserve"><tspan
1081
+ style="font-size:16px"
1082
+ y="191.36218"
1083
+ x="404"
1084
+ id="tspan3216-2-8"
1085
+ sodipodi:role="line">&lt;%= @issues[8][:summary][1] %&gt;</tspan></text>
1086
+ <text
1087
+ sodipodi:linespacing="125%"
1088
+ id="text3214-2-3"
1089
+ y="209.36218"
1090
+ x="404"
1091
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
1092
+ xml:space="preserve"><tspan
1093
+ style="font-size:16px"
1094
+ y="209.36218"
1095
+ x="404"
1096
+ id="tspan3216-9-87"
1097
+ sodipodi:role="line">&lt;%= @issues[8][:summary][2] %&gt;</tspan></text>
1098
+ <text
1099
+ sodipodi:linespacing="125%"
1100
+ id="text3214-33-2"
1101
+ y="227.36218"
1102
+ x="404"
1103
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
1104
+ xml:space="preserve"><tspan
1105
+ style="font-size:16px"
1106
+ y="227.36218"
1107
+ x="404"
1108
+ id="tspan3216-3-36"
1109
+ sodipodi:role="line">&lt;%= @issues[8][:summary][3] %&gt;</tspan></text>
1110
+ <text
1111
+ sodipodi:linespacing="125%"
1112
+ id="text3214-0-62"
1113
+ y="245.36218"
1114
+ x="404"
1115
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
1116
+ xml:space="preserve"><tspan
1117
+ style="font-size:16px"
1118
+ y="245.36218"
1119
+ x="404"
1120
+ id="tspan3216-38-8"
1121
+ sodipodi:role="line">&lt;%= @issues[8][:summary][4] %&gt;</tspan></text>
1122
+ <text
1123
+ sodipodi:linespacing="125%"
1124
+ id="text3214-4-28"
1125
+ y="263.36218"
1126
+ x="404"
1127
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
1128
+ xml:space="preserve"><tspan
1129
+ style="font-size:16px"
1130
+ y="263.36218"
1131
+ x="404"
1132
+ id="tspan3216-8-9"
1133
+ sodipodi:role="line">&lt;%= @issues[8][:summary][5] %&gt;</tspan></text>
1134
+ <text
1135
+ sodipodi:linespacing="125%"
1136
+ id="text3214-7-2"
1137
+ y="283.36218"
1138
+ x="404"
1139
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
1140
+ xml:space="preserve"><tspan
1141
+ style="font-size:16px"
1142
+ y="283.36218"
1143
+ x="404"
1144
+ id="tspan3216-93-61"
1145
+ sodipodi:role="line">&lt;%= @issues[8][:summary][6] %&gt;</tspan></text>
1146
+ <text
1147
+ sodipodi:linespacing="125%"
1148
+ id="text3214-70-41"
1149
+ y="301.36218"
1150
+ x="404"
1151
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
1152
+ xml:space="preserve"><tspan
1153
+ style="font-size:16px"
1154
+ y="301.36218"
1155
+ x="404"
1156
+ id="tspan3216-4-1"
1157
+ sodipodi:role="line">&lt;%= @issues[8][:summary][7] %&gt;</tspan></text>
1158
+ </g>
1159
+ </g>
1160
+ </svg>