yard 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of yard might be problematic. Click here for more details.

Files changed (121) hide show
  1. data/ChangeLog +585 -1
  2. data/README.md +10 -2
  3. data/benchmarks/yri_cache.rb +19 -0
  4. data/bin/yri +1 -26
  5. data/docs/WhatsNew.md +99 -0
  6. data/lib/rubygems_plugin.rb +2 -0
  7. data/lib/yard.rb +2 -2
  8. data/lib/yard/autoload.rb +9 -4
  9. data/lib/yard/cli/base.rb +26 -0
  10. data/lib/yard/cli/yard_graph.rb +2 -9
  11. data/lib/yard/cli/yardoc.rb +93 -33
  12. data/lib/yard/cli/yri.rb +128 -0
  13. data/lib/yard/code_objects/base.rb +16 -5
  14. data/lib/yard/code_objects/class_object.rb +11 -4
  15. data/lib/yard/code_objects/method_object.rb +11 -1
  16. data/lib/yard/code_objects/proxy.rb +5 -2
  17. data/lib/yard/code_objects/root_object.rb +1 -0
  18. data/lib/yard/core_ext/file.rb +1 -1
  19. data/lib/yard/core_ext/hash.rb +15 -0
  20. data/lib/yard/core_ext/module.rb +2 -2
  21. data/lib/yard/core_ext/string.rb +66 -0
  22. data/lib/yard/core_ext/symbol_hash.rb +1 -1
  23. data/lib/yard/docstring.rb +5 -5
  24. data/lib/yard/handlers/base.rb +10 -4
  25. data/lib/yard/handlers/processor.rb +3 -4
  26. data/lib/yard/handlers/ruby/attribute_handler.rb +3 -2
  27. data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +2 -2
  28. data/lib/yard/handlers/ruby/legacy/method_handler.rb +7 -1
  29. data/lib/yard/handlers/ruby/method_handler.rb +7 -1
  30. data/lib/yard/logging.rb +11 -1
  31. data/lib/yard/parser/c_parser.rb +407 -0
  32. data/lib/yard/parser/ruby/ast_node.rb +2 -2
  33. data/lib/yard/parser/ruby/legacy/ruby_lex.rb +3 -4
  34. data/lib/yard/parser/source_parser.rb +18 -7
  35. data/lib/yard/rake/yardoc_task.rb +1 -1
  36. data/lib/yard/registry.rb +83 -29
  37. data/lib/yard/registry_store.rb +213 -0
  38. data/lib/yard/serializers/base.rb +1 -1
  39. data/lib/yard/serializers/yardoc_serializer.rb +113 -0
  40. data/lib/yard/tags/library.rb +4 -0
  41. data/lib/yard/tags/overload_tag.rb +16 -5
  42. data/lib/yard/tags/tag.rb +1 -2
  43. data/lib/yard/templates/engine.rb +3 -3
  44. data/lib/yard/templates/helpers/html_helper.rb +50 -16
  45. data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +1 -3
  46. data/lib/yard/templates/helpers/html_syntax_highlight_helper18.rb +1 -3
  47. data/lib/yard/templates/helpers/method_helper.rb +11 -4
  48. data/lib/yard/templates/helpers/text_helper.rb +24 -2
  49. data/lib/yard/verifier.rb +3 -3
  50. data/spec/cli/yardoc_spec.rb +33 -6
  51. data/spec/cli/yri_spec.rb +30 -0
  52. data/spec/code_objects/base_spec.rb +7 -0
  53. data/spec/code_objects/class_object_spec.rb +6 -1
  54. data/spec/code_objects/method_object_spec.rb +25 -0
  55. data/spec/core_ext/hash_spec.rb +10 -0
  56. data/spec/core_ext/module_spec.rb +1 -1
  57. data/spec/core_ext/string_spec.rb +50 -12
  58. data/spec/handlers/attribute_handler_spec.rb +4 -0
  59. data/spec/handlers/examples/method_handler_001.rb.txt +9 -0
  60. data/spec/handlers/method_handler_spec.rb +22 -4
  61. data/spec/parser/c_parser_spec.rb +22 -0
  62. data/spec/parser/examples/array.c.txt +3887 -0
  63. data/spec/parser/source_parser_spec.rb +29 -7
  64. data/spec/registry_spec.rb +93 -72
  65. data/spec/registry_store_spec.rb +184 -0
  66. data/spec/serializers/file_system_serializer_spec.rb +96 -75
  67. data/spec/spec_helper.rb +2 -2
  68. data/spec/tags/overload_tag_spec.rb +18 -0
  69. data/spec/templates/examples/class001.html +32 -30
  70. data/spec/templates/examples/method001.html +4 -1
  71. data/spec/templates/examples/method002.html +7 -2
  72. data/spec/templates/examples/method002.txt +1 -1
  73. data/spec/templates/examples/method003.html +30 -8
  74. data/spec/templates/examples/method003.txt +4 -4
  75. data/spec/templates/examples/method004.html +44 -0
  76. data/spec/templates/examples/method004.txt +10 -0
  77. data/spec/templates/examples/method005.html +99 -0
  78. data/spec/templates/examples/method005.txt +33 -0
  79. data/spec/templates/examples/module001.dot +1 -1
  80. data/spec/templates/examples/module001.html +391 -37
  81. data/spec/templates/examples/module001.txt +1 -1
  82. data/spec/templates/helpers/base_helper_spec.rb +2 -2
  83. data/spec/templates/helpers/html_helper_spec.rb +83 -0
  84. data/spec/templates/helpers/method_helper_spec.rb +47 -0
  85. data/spec/templates/helpers/shared_signature_examples.rb +102 -0
  86. data/spec/templates/helpers/text_helper_spec.rb +31 -0
  87. data/spec/templates/method_spec.rb +43 -18
  88. data/spec/templates/module_spec.rb +22 -1
  89. data/spec/templates/spec_helper.rb +10 -1
  90. data/spec/yard_spec.rb +4 -3
  91. data/templates/default/class/html/constructor_details.erb +1 -1
  92. data/templates/default/docstring/html/returns_void.erb +1 -0
  93. data/templates/default/docstring/setup.rb +9 -4
  94. data/templates/default/docstring/text/returns_void.erb +1 -0
  95. data/templates/default/fulldoc/html/css/style.css +4 -2
  96. data/templates/default/fulldoc/html/full_list.erb +2 -2
  97. data/templates/default/fulldoc/html/js/app.js +1 -1
  98. data/templates/default/fulldoc/html/setup.rb +14 -6
  99. data/templates/default/layout/dot/setup.rb +1 -1
  100. data/templates/default/layout/html/breadcrumb.erb +2 -2
  101. data/templates/default/layout/html/index.erb +2 -2
  102. data/templates/default/layout/html/setup.rb +5 -5
  103. data/templates/default/method/html/header.erb +6 -4
  104. data/templates/default/method_details/html/method_signature.erb +2 -1
  105. data/templates/default/method_details/html/source.erb +1 -1
  106. data/templates/default/method_details/setup.rb +2 -1
  107. data/templates/default/method_details/text/setup.rb +1 -1
  108. data/templates/default/module/html/attribute_details.erb +4 -4
  109. data/templates/default/module/html/attribute_summary.erb +3 -3
  110. data/templates/default/module/html/box_info.erb +2 -2
  111. data/templates/default/module/html/defines.erb +1 -1
  112. data/templates/default/module/html/inherited_constants.erb +1 -1
  113. data/templates/default/module/html/inherited_methods.erb +1 -1
  114. data/templates/default/module/html/item_summary.erb +13 -4
  115. data/templates/default/module/html/method_details_list.erb +5 -4
  116. data/templates/default/module/html/method_summary.erb +5 -4
  117. data/templates/default/module/html/methodmissing.erb +1 -1
  118. data/templates/default/module/setup.rb +14 -5
  119. data/templates/default/tags/html/overload.erb +3 -2
  120. data/templates/default/tags/setup.rb +4 -0
  121. metadata +23 -2
@@ -0,0 +1,33 @@
1
+ ------------------------------------------------------------- Method: #m
2
+ (Defined in: (stdin))
3
+
4
+ root.m(a) -> void
5
+ root.m(b)
6
+ ------------------------------------------------------------------------
7
+
8
+
9
+ Overloads:
10
+ ----------
11
+
12
+ ------------------------------------------------------------------------
13
+ root.m(a) -> void
14
+ ------------------------------------------------------------------------
15
+
16
+ This method returns an undefined value.
17
+
18
+
19
+
20
+ ------------------------------------------------------------------------
21
+ root.m(b)
22
+ ------------------------------------------------------------------------
23
+
24
+
25
+ Parameters:
26
+ -----------
27
+
28
+ (String) b - hi
29
+
30
+
31
+
32
+
33
+
@@ -1,4 +1,4 @@
1
- A [label="{module A|+ \#attr1 [RW]\l+ \#attr2 [R]\l|+ a\l+ \#a\l}" rank=sink];
1
+ A [label="{module A|+ \#attr1 [RW]\l+ \#attr2 [R]\l+ \#attr3 [RW]\l|+ a\l+ \#a\l+ \#test_multi_overload\l+ \#test_overload\l+ \#void_meth\ \:\ void\l}" rank=sink];
2
2
  A_Y [label="{class Y||}" rank=sink];
3
3
  subgraph cluster_A_Y {
4
4
  label = "Y"; labelloc=b;
@@ -64,14 +64,19 @@
64
64
 
65
65
 
66
66
 
67
- <h2>Attribute Summary</h2>
67
+ <h2>Instance Attribute Summary</h2>
68
68
  <ul class="summary">
69
69
 
70
70
  <li class="public ">
71
- <span class="summary_signature"><a title="#attr1 (instance method)">- (Object) <strong>attr1</strong> </a>
72
-
71
+ <span class="summary_signature">
72
+
73
+ <a title="#attr1 (instance method)">- <strong>attr1</strong> </a>
74
+
75
+
76
+
73
77
  </span>
74
78
 
79
+
75
80
 
76
81
 
77
82
 
@@ -80,16 +85,21 @@
80
85
 
81
86
 
82
87
 
83
- <span class="summary_desc">Returns the value of attribute +attr1+.</span>
88
+ <span class="summary_desc">Returns the value of attribute attr1.</span>
84
89
 
85
90
  </li>
86
91
 
87
92
 
88
93
  <li class="public ">
89
- <span class="summary_signature"><a title="#attr2 (instance method)">- (Object) <strong>attr2</strong> </a>
90
-
94
+ <span class="summary_signature">
95
+
96
+ <a title="#attr2 (instance method)">- <strong>attr2</strong> </a>
97
+
98
+
99
+
91
100
  </span>
92
101
 
102
+
93
103
  <span class="note title readonly">readonly</span>
94
104
 
95
105
 
@@ -98,7 +108,30 @@
98
108
 
99
109
 
100
110
 
101
- <span class="summary_desc">Returns the value of attribute +attr2+.</span>
111
+ <span class="summary_desc">Returns the value of attribute attr2.</span>
112
+
113
+ </li>
114
+
115
+
116
+ <li class="public ">
117
+ <span class="summary_signature">
118
+
119
+ <a title="#attr3 (instance method)">- <strong>attr3</strong> </a>
120
+
121
+
122
+
123
+ </span>
124
+
125
+
126
+
127
+
128
+
129
+
130
+
131
+
132
+
133
+
134
+ <span class="summary_desc"></span>
102
135
 
103
136
  </li>
104
137
 
@@ -106,17 +139,71 @@
106
139
  </ul>
107
140
 
108
141
 
109
- <h2>Method Summary</h2>
142
+ <h2>Class Method Summary</h2>
143
+
110
144
  <ul class="summary">
111
145
 
112
146
  <li class="public ">
113
- <span class="summary_signature"><a title="a (class method)">+ (Object) <strong>a</strong> </a>
147
+ <span class="summary_signature">
148
+
149
+ <a title="a (class method)">+ <strong>a</strong> </a>
150
+
151
+
152
+
153
+ </span>
154
+
155
+
156
+
157
+
158
+
159
+
160
+
161
+ <span class="summary_desc"></span>
162
+
163
+ </li>
164
+
165
+
166
+ </ul>
167
+
168
+ <h2>Instance Method Summary</h2>
169
+
170
+ <ul class="summary">
171
+
172
+ <li class="public ">
173
+ <span class="summary_signature">
174
+
175
+ <a title="#a (instance method)">- <strong>a</strong> </a>
176
+
177
+
178
+
179
+ (also: #b)
180
+
181
+ </span>
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+ <span class="summary_desc"></span>
114
190
 
191
+ </li>
192
+
193
+
194
+ <li class="public ">
195
+ <span class="summary_signature">
196
+
197
+ <a title="#test_multi_overload (instance method)">- <strong>test_multi_overload</strong>(*args) </a>
198
+
199
+
200
+
115
201
  </span>
116
202
 
117
203
 
118
204
 
119
205
 
206
+
120
207
 
121
208
 
122
209
  <span class="summary_desc"></span>
@@ -125,15 +212,38 @@
125
212
 
126
213
 
127
214
  <li class="public ">
128
- <span class="summary_signature"><a title="#a (instance method)">- (Object) <strong>a</strong> </a>
215
+ <span class="summary_signature">
216
+
217
+ <a title="#test_overload (instance method)">- <strong>test_overload</strong>(a) </a>
218
+
219
+
220
+
221
+ </span>
222
+
223
+
224
+
225
+
129
226
 
130
- (also: #b)
227
+
228
+
229
+ <span class="summary_desc">hello2.</span>
131
230
 
231
+ </li>
232
+
233
+
234
+ <li class="public ">
235
+ <span class="summary_signature">
236
+
237
+ <a title="#void_meth (instance method)">- <strong>void_meth</strong> </a>
238
+
239
+
240
+
132
241
  </span>
133
242
 
134
243
 
135
244
 
136
245
 
246
+
137
247
 
138
248
 
139
249
  <span class="summary_desc"></span>
@@ -143,7 +253,6 @@
143
253
 
144
254
  </ul>
145
255
 
146
-
147
256
 
148
257
 
149
258
 
@@ -152,8 +261,8 @@
152
261
  <h3 class="inherited">Methods included from B</h3>
153
262
  <p class="inherited">#c, #d</p>
154
263
 
155
- <div id="attr_details">
156
- <h2>Attribute Details</h2>
264
+ <div id="instance_attr_details" class="attr_details">
265
+ <h2>Instance Attribute Details</h2>
157
266
 
158
267
 
159
268
  <span id="attr1=-instance_method"></span>
@@ -161,13 +270,13 @@
161
270
  <div class="method_details first">
162
271
  <p class="signature first" id="attr1-instance_method">
163
272
 
164
- - (<tt>Object</tt>) <strong>attr1</strong>
273
+ - <strong>attr1</strong>
165
274
 
166
275
 
167
276
 
168
277
  </p><div class="docstring">
169
278
  <div class="discussion">
170
- Returns the value of attribute +attr1+
279
+ Returns the value of attribute attr1
171
280
 
172
281
  </div>
173
282
  </div>
@@ -179,12 +288,12 @@
179
288
  <pre class="lines">
180
289
 
181
290
 
182
- 8
183
- 9
184
- 10</pre>
291
+ 10
292
+ 11
293
+ 12</pre>
185
294
  </td>
186
295
  <td>
187
- <pre class="code"><span class="info file"># File '(stdin)', line 8</span>
296
+ <pre class="code"><span class="info file"># File '(stdin)', line 10</span>
188
297
 
189
298
  def attr1
190
299
  @attr1
@@ -200,13 +309,13 @@ end</pre>
200
309
  <div class="method_details ">
201
310
  <p class="signature " id="attr2-instance_method">
202
311
 
203
- - (<tt>Object</tt>) <strong>attr2</strong> <span class="extras">(readonly)</span>
312
+ - <strong>attr2</strong> <span class="extras">(readonly)</span>
204
313
 
205
314
 
206
315
 
207
316
  </p><div class="docstring">
208
317
  <div class="discussion">
209
- Returns the value of attribute +attr2+
318
+ Returns the value of attribute attr2
210
319
 
211
320
  </div>
212
321
  </div>
@@ -218,12 +327,12 @@ end</pre>
218
327
  <pre class="lines">
219
328
 
220
329
 
221
- 9
222
- 10
223
- 11</pre>
330
+ 11
331
+ 12
332
+ 13</pre>
224
333
  </td>
225
334
  <td>
226
- <pre class="code"><span class="info file"># File '(stdin)', line 9</span>
335
+ <pre class="code"><span class="info file"># File '(stdin)', line 11</span>
227
336
 
228
337
  def attr2
229
338
  @attr2
@@ -233,16 +342,127 @@ end</pre>
233
342
  </table>
234
343
  </div>
235
344
 
345
+
346
+ <span id="attr3=-instance_method"></span>
347
+ <span id="attr3-instance_method"></span>
348
+ <div class="method_details ">
349
+ <p class="signature " id="attr3-instance_method">
350
+
351
+
352
+ <span class="overload">- (<tt>String</tt>) <strong>attr3</strong> </span>
353
+
354
+ <span class="overload">- <strong>attr3=</strong>(value) </span>
355
+
356
+
357
+
358
+
359
+ </p><div class="docstring">
360
+ <div class="discussion">
361
+
362
+
363
+ </div>
364
+ </div>
365
+ <div class="tags">
366
+
367
+ <h3>Overloads:</h3>
368
+ <ul class="overload">
369
+
370
+
371
+ <li class="overload_item">
372
+ <span class="signature">- (<tt>String</tt>) <strong>attr3</strong> </span>
373
+ <div class="docstring">
374
+ <div class="discussion">
375
+ A string
376
+
377
+ </div>
378
+ </div>
379
+ <div class="tags">
380
+ <h3>Returns:</h3>
381
+ <ul class="return">
382
+
383
+ <li>
384
+
385
+ <span class='type'>(<tt>String</tt>)</span>
386
+
387
+
388
+
389
+
390
+ &mdash;
391
+ a string
392
+
393
+ </li>
394
+
395
+ </ul>
396
+
397
+ </div>
398
+ </li>
399
+
400
+
401
+ <li class="overload_item">
402
+ <span class="signature">- <strong>attr3=</strong>(value) </span>
403
+ <div class="docstring">
404
+ <div class="discussion">
405
+ <p class="note returns_void">This method returns an undefined value.</p>
406
+
407
+ </div>
408
+ </div>
409
+ <div class="tags">
410
+ <h3>Parameters:</h3>
411
+ <ul class="param">
412
+
413
+ <li>
414
+
415
+ <span class='type'>(<tt>String</tt>)</span>
416
+
417
+
418
+ <span class='name'>value</span>
419
+
420
+
421
+
422
+ &mdash;
423
+ sets the string
424
+
425
+ </li>
426
+
427
+ </ul>
428
+
429
+ </div>
430
+ </li>
431
+
432
+ </ul>
433
+
434
+ </div><table class="source_code">
435
+ <tr>
436
+ <td>
437
+ <pre class="lines">
438
+
439
+
440
+ 18
441
+ 19
442
+ 20</pre>
443
+ </td>
444
+ <td>
445
+ <pre class="code"><span class="info file"># File '(stdin)', line 18</span>
446
+
447
+ def attr3
448
+ @attr3
449
+ end</pre>
450
+ </td>
451
+ </tr>
452
+ </table>
453
+ </div>
454
+
236
455
  </div>
237
456
 
238
457
 
239
- <div id="method_details">
240
- <h2>Method Details</h2>
458
+ <div id="class_method_details" class="method_details_list">
459
+ <h2>Class Method Details</h2>
460
+
241
461
 
242
462
  <div class="method_details first">
243
463
  <p class="signature first" id="a-class_method">
244
464
 
245
- + (<tt>Object</tt>) <strong>a</strong>
465
+ + <strong>a</strong>
246
466
 
247
467
 
248
468
 
@@ -252,10 +472,10 @@ end</pre>
252
472
  <pre class="lines">
253
473
 
254
474
 
255
- 11</pre>
475
+ 20</pre>
256
476
  </td>
257
477
  <td>
258
- <pre class="code"><span class="info file"># File '(stdin)', line 11</span>
478
+ <pre class="code"><span class="info file"># File '(stdin)', line 20</span>
259
479
 
260
480
  def self.a; end</pre>
261
481
  </td>
@@ -263,15 +483,21 @@ def self.a; end</pre>
263
483
  </table>
264
484
  </div>
265
485
 
266
- <div class="method_details ">
267
- <p class="signature " id="a-instance_method">
486
+ </div>
487
+
488
+ <div id="instance_method_details" class="method_details_list">
489
+ <h2>Instance Method Details</h2>
490
+
491
+
492
+ <div class="method_details first">
493
+ <p class="signature first" id="a-instance_method">
268
494
 
269
- - (<tt>Object</tt>) <strong>a</strong>
495
+ - <strong>a</strong>
270
496
 
271
497
 
272
498
 
273
499
  <span class="aliases">Also known as:
274
- <span class="names">b</span>
500
+ <span class="names"><span id='b-instance_method'>b</span></span>
275
501
  </span>
276
502
 
277
503
  </p><table class="source_code">
@@ -280,15 +506,143 @@ def self.a; end</pre>
280
506
  <pre class="lines">
281
507
 
282
508
 
283
- 12</pre>
509
+ 21</pre>
284
510
  </td>
285
511
  <td>
286
- <pre class="code"><span class="info file"># File '(stdin)', line 12</span>
512
+ <pre class="code"><span class="info file"># File '(stdin)', line 21</span>
287
513
 
288
514
  def a; end</pre>
289
515
  </td>
290
516
  </tr>
291
517
  </table>
518
+ </div>
519
+
520
+ <div class="method_details ">
521
+ <p class="signature " id="test_multi_overload-instance_method">
522
+
523
+
524
+ <span class="overload">- <strong>test_multi_overload</strong>(a) </span>
525
+
526
+ <span class="overload">- <strong>test_multi_overload</strong>(a, b) </span>
527
+
528
+
529
+
530
+
531
+ </p><div class="docstring">
532
+ <div class="discussion">
533
+
534
+
535
+ </div>
536
+ </div>
537
+ <div class="tags">
538
+
539
+ </div><table class="source_code">
540
+ <tr>
541
+ <td>
542
+ <pre class="lines">
543
+
544
+
545
+ 31</pre>
546
+ </td>
547
+ <td>
548
+ <pre class="code"><span class="info file"># File '(stdin)', line 31</span>
549
+
550
+ def test_multi_overload(*args) end</pre>
551
+ </td>
552
+ </tr>
553
+ </table>
554
+ </div>
555
+
556
+ <div class="method_details ">
557
+ <p class="signature " id="test_overload-instance_method">
558
+
559
+ - <strong>test_overload</strong>(a)
560
+
561
+
562
+
563
+ </p><div class="docstring">
564
+ <div class="discussion">
565
+
566
+
567
+ </div>
568
+ </div>
569
+ <div class="tags">
570
+
571
+ <div class="docstring">
572
+ <div class="discussion">
573
+ hello2
574
+
575
+ </div>
576
+ </div>
577
+ <div class="tags">
578
+ <h3>Parameters:</h3>
579
+ <ul class="param">
580
+
581
+ <li>
582
+
583
+ <span class='type'>(<tt>String</tt>)</span>
584
+
585
+
586
+ <span class='name'>a</span>
587
+
588
+
589
+
590
+ &mdash;
591
+ hi
592
+
593
+ </li>
594
+
595
+ </ul>
596
+
597
+ </div>
598
+
599
+ </div><table class="source_code">
600
+ <tr>
601
+ <td>
602
+ <pre class="lines">
603
+
604
+
605
+ 27</pre>
606
+ </td>
607
+ <td>
608
+ <pre class="code"><span class="info file"># File '(stdin)', line 27</span>
609
+
610
+ def test_overload(*args) end</pre>
611
+ </td>
612
+ </tr>
613
+ </table>
614
+ </div>
615
+
616
+ <div class="method_details ">
617
+ <p class="signature " id="void_meth-instance_method">
618
+
619
+ - <strong>void_meth</strong>
620
+
621
+
622
+
623
+ </p><div class="docstring">
624
+ <div class="discussion">
625
+ <p class="note returns_void">This method returns an undefined value.</p>
626
+
627
+ </div>
628
+ </div>
629
+ <div class="tags">
630
+
631
+ </div><table class="source_code">
632
+ <tr>
633
+ <td>
634
+ <pre class="lines">
635
+
636
+
637
+ 34</pre>
638
+ </td>
639
+ <td>
640
+ <pre class="code"><span class="info file"># File '(stdin)', line 34</span>
641
+
642
+ def void_meth; end</pre>
643
+ </td>
644
+ </tr>
645
+ </table>
292
646
  </div>
293
647
 
294
648
  </div>