ricardoo27-writeexcel 0.6.12.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (245) hide show
  1. data/.document +5 -0
  2. data/.gitattributes +1 -0
  3. data/README.rdoc +136 -0
  4. data/Rakefile +52 -0
  5. data/VERSION +1 -0
  6. data/charts/chartex.rb +316 -0
  7. data/charts/demo1.rb +46 -0
  8. data/charts/demo101.bin +0 -0
  9. data/charts/demo2.rb +65 -0
  10. data/charts/demo201.bin +0 -0
  11. data/charts/demo3.rb +117 -0
  12. data/charts/demo301.bin +0 -0
  13. data/charts/demo4.rb +119 -0
  14. data/charts/demo401.bin +0 -0
  15. data/charts/demo5.rb +48 -0
  16. data/charts/demo501.bin +0 -0
  17. data/examples/a_simple.rb +43 -0
  18. data/examples/autofilter.rb +265 -0
  19. data/examples/bigfile.rb +30 -0
  20. data/examples/chart_area.rb +121 -0
  21. data/examples/chart_bar.rb +120 -0
  22. data/examples/chart_column.rb +120 -0
  23. data/examples/chart_line.rb +120 -0
  24. data/examples/chart_pie.rb +108 -0
  25. data/examples/chart_scatter.rb +121 -0
  26. data/examples/chart_stock.rb +148 -0
  27. data/examples/chess.rb +142 -0
  28. data/examples/colors.rb +129 -0
  29. data/examples/comments1.rb +27 -0
  30. data/examples/comments2.rb +352 -0
  31. data/examples/copyformat.rb +52 -0
  32. data/examples/data_validate.rb +279 -0
  33. data/examples/date_time.rb +87 -0
  34. data/examples/defined_name.rb +32 -0
  35. data/examples/demo.rb +124 -0
  36. data/examples/diag_border.rb +36 -0
  37. data/examples/formats.rb +490 -0
  38. data/examples/formula_result.rb +30 -0
  39. data/examples/header.rb +137 -0
  40. data/examples/hide_sheet.rb +29 -0
  41. data/examples/hyperlink.rb +43 -0
  42. data/examples/images.rb +63 -0
  43. data/examples/indent.rb +31 -0
  44. data/examples/merge1.rb +40 -0
  45. data/examples/merge2.rb +45 -0
  46. data/examples/merge3.rb +66 -0
  47. data/examples/merge4.rb +83 -0
  48. data/examples/merge5.rb +80 -0
  49. data/examples/merge6.rb +67 -0
  50. data/examples/outline.rb +255 -0
  51. data/examples/outline_collapsed.rb +209 -0
  52. data/examples/panes.rb +113 -0
  53. data/examples/password_protection.rb +33 -0
  54. data/examples/properties.rb +34 -0
  55. data/examples/properties_jp.rb +33 -0
  56. data/examples/protection.rb +47 -0
  57. data/examples/regions.rb +53 -0
  58. data/examples/repeat.rb +43 -0
  59. data/examples/republic.png +0 -0
  60. data/examples/right_to_left.rb +27 -0
  61. data/examples/row_wrap.rb +53 -0
  62. data/examples/set_first_sheet.rb +14 -0
  63. data/examples/stats.rb +74 -0
  64. data/examples/stocks.rb +81 -0
  65. data/examples/store_formula.rb +15 -0
  66. data/examples/tab_colors.rb +31 -0
  67. data/examples/utf8.rb +15 -0
  68. data/examples/write_arrays.rb +83 -0
  69. data/html/en/doc_en.html +5946 -0
  70. data/html/images/a_simple.jpg +0 -0
  71. data/html/images/area1.jpg +0 -0
  72. data/html/images/bar1.jpg +0 -0
  73. data/html/images/chart_area.xls +0 -0
  74. data/html/images/column1.jpg +0 -0
  75. data/html/images/data_validation.jpg +0 -0
  76. data/html/images/line1.jpg +0 -0
  77. data/html/images/pie1.jpg +0 -0
  78. data/html/images/regions.jpg +0 -0
  79. data/html/images/scatter1.jpg +0 -0
  80. data/html/images/stats.jpg +0 -0
  81. data/html/images/stock1.jpg +0 -0
  82. data/html/images/stocks.jpg +0 -0
  83. data/html/index.html +16 -0
  84. data/html/style.css +433 -0
  85. data/lib/writeexcel.rb +1159 -0
  86. data/lib/writeexcel/biffwriter.rb +223 -0
  87. data/lib/writeexcel/caller_info.rb +12 -0
  88. data/lib/writeexcel/cell_range.rb +332 -0
  89. data/lib/writeexcel/chart.rb +1968 -0
  90. data/lib/writeexcel/charts/area.rb +154 -0
  91. data/lib/writeexcel/charts/bar.rb +177 -0
  92. data/lib/writeexcel/charts/column.rb +156 -0
  93. data/lib/writeexcel/charts/external.rb +66 -0
  94. data/lib/writeexcel/charts/line.rb +154 -0
  95. data/lib/writeexcel/charts/pie.rb +169 -0
  96. data/lib/writeexcel/charts/scatter.rb +192 -0
  97. data/lib/writeexcel/charts/stock.rb +213 -0
  98. data/lib/writeexcel/col_info.rb +87 -0
  99. data/lib/writeexcel/colors.rb +68 -0
  100. data/lib/writeexcel/comments.rb +460 -0
  101. data/lib/writeexcel/compatibility.rb +65 -0
  102. data/lib/writeexcel/convert_date_time.rb +117 -0
  103. data/lib/writeexcel/data_validations.rb +370 -0
  104. data/lib/writeexcel/debug_info.rb +41 -0
  105. data/lib/writeexcel/embedded_chart.rb +35 -0
  106. data/lib/writeexcel/excelformula.y +139 -0
  107. data/lib/writeexcel/excelformulaparser.rb +587 -0
  108. data/lib/writeexcel/format.rb +1575 -0
  109. data/lib/writeexcel/formula.rb +987 -0
  110. data/lib/writeexcel/helper.rb +78 -0
  111. data/lib/writeexcel/image.rb +218 -0
  112. data/lib/writeexcel/olewriter.rb +305 -0
  113. data/lib/writeexcel/outline.rb +24 -0
  114. data/lib/writeexcel/properties.rb +242 -0
  115. data/lib/writeexcel/shared_string_table.rb +153 -0
  116. data/lib/writeexcel/storage_lite.rb +984 -0
  117. data/lib/writeexcel/workbook.rb +2478 -0
  118. data/lib/writeexcel/worksheet.rb +6925 -0
  119. data/lib/writeexcel/worksheets.rb +25 -0
  120. data/lib/writeexcel/write_file.rb +63 -0
  121. data/test/excelfile/Chart1.xls +0 -0
  122. data/test/excelfile/Chart2.xls +0 -0
  123. data/test/excelfile/Chart3.xls +0 -0
  124. data/test/excelfile/Chart4.xls +0 -0
  125. data/test/excelfile/Chart5.xls +0 -0
  126. data/test/helper.rb +31 -0
  127. data/test/perl_output/Chart1.xls.data +0 -0
  128. data/test/perl_output/Chart2.xls.data +0 -0
  129. data/test/perl_output/Chart3.xls.data +0 -0
  130. data/test/perl_output/Chart4.xls.data +0 -0
  131. data/test/perl_output/Chart5.xls.data +0 -0
  132. data/test/perl_output/README +31 -0
  133. data/test/perl_output/a_simple.xls +0 -0
  134. data/test/perl_output/autofilter.xls +0 -0
  135. data/test/perl_output/biff_add_continue_testdata +0 -0
  136. data/test/perl_output/chart_area.xls +0 -0
  137. data/test/perl_output/chart_bar.xls +0 -0
  138. data/test/perl_output/chart_column.xls +0 -0
  139. data/test/perl_output/chart_line.xls +0 -0
  140. data/test/perl_output/chess.xls +0 -0
  141. data/test/perl_output/colors.xls +0 -0
  142. data/test/perl_output/comments0.xls +0 -0
  143. data/test/perl_output/comments1.xls +0 -0
  144. data/test/perl_output/comments2.xls +0 -0
  145. data/test/perl_output/data_validate.xls +0 -0
  146. data/test/perl_output/date_time.xls +0 -0
  147. data/test/perl_output/defined_name.xls +0 -0
  148. data/test/perl_output/demo.xls +0 -0
  149. data/test/perl_output/demo101.bin +0 -0
  150. data/test/perl_output/demo201.bin +0 -0
  151. data/test/perl_output/demo301.bin +0 -0
  152. data/test/perl_output/demo401.bin +0 -0
  153. data/test/perl_output/demo501.bin +0 -0
  154. data/test/perl_output/diag_border.xls +0 -0
  155. data/test/perl_output/f_font_biff +0 -0
  156. data/test/perl_output/f_font_key +1 -0
  157. data/test/perl_output/f_xf_biff +0 -0
  158. data/test/perl_output/file_font_biff +0 -0
  159. data/test/perl_output/file_font_key +1 -0
  160. data/test/perl_output/file_xf_biff +0 -0
  161. data/test/perl_output/formula_result.xls +0 -0
  162. data/test/perl_output/headers.xls +0 -0
  163. data/test/perl_output/hidden.xls +0 -0
  164. data/test/perl_output/hide_zero.xls +0 -0
  165. data/test/perl_output/hyperlink.xls +0 -0
  166. data/test/perl_output/images.xls +0 -0
  167. data/test/perl_output/indent.xls +0 -0
  168. data/test/perl_output/merge1.xls +0 -0
  169. data/test/perl_output/merge2.xls +0 -0
  170. data/test/perl_output/merge3.xls +0 -0
  171. data/test/perl_output/merge4.xls +0 -0
  172. data/test/perl_output/merge5.xls +0 -0
  173. data/test/perl_output/merge6.xls +0 -0
  174. data/test/perl_output/ole_write_header +0 -0
  175. data/test/perl_output/outline.xls +0 -0
  176. data/test/perl_output/outline_collapsed.xls +0 -0
  177. data/test/perl_output/panes.xls +0 -0
  178. data/test/perl_output/password_protection.xls +0 -0
  179. data/test/perl_output/protection.xls +0 -0
  180. data/test/perl_output/regions.xls +0 -0
  181. data/test/perl_output/right_to_left.xls +0 -0
  182. data/test/perl_output/set_first_sheet.xls +0 -0
  183. data/test/perl_output/stats.xls +0 -0
  184. data/test/perl_output/stocks.xls +0 -0
  185. data/test/perl_output/store_formula.xls +0 -0
  186. data/test/perl_output/tab_colors.xls +0 -0
  187. data/test/perl_output/unicode_cyrillic.xls +0 -0
  188. data/test/perl_output/utf8.xls +0 -0
  189. data/test/perl_output/workbook1.xls +0 -0
  190. data/test/perl_output/workbook2.xls +0 -0
  191. data/test/perl_output/ws_colinfo +1 -0
  192. data/test/perl_output/ws_store_colinfo +0 -0
  193. data/test/perl_output/ws_store_dimensions +0 -0
  194. data/test/perl_output/ws_store_filtermode +0 -0
  195. data/test/perl_output/ws_store_filtermode_off +0 -0
  196. data/test/perl_output/ws_store_filtermode_on +0 -0
  197. data/test/perl_output/ws_store_selection +0 -0
  198. data/test/perl_output/ws_store_window2 +1 -0
  199. data/test/republic.png +0 -0
  200. data/test/test_00_IEEE_double.rb +13 -0
  201. data/test/test_01_add_worksheet.rb +10 -0
  202. data/test/test_02_merge_formats.rb +49 -0
  203. data/test/test_04_dimensions.rb +388 -0
  204. data/test/test_05_rows.rb +175 -0
  205. data/test/test_06_extsst.rb +74 -0
  206. data/test/test_11_date_time.rb +475 -0
  207. data/test/test_12_date_only.rb +525 -0
  208. data/test/test_13_date_seconds.rb +477 -0
  209. data/test/test_21_escher.rb +624 -0
  210. data/test/test_22_mso_drawing_group.rb +741 -0
  211. data/test/test_23_note.rb +57 -0
  212. data/test/test_24_txo.rb +74 -0
  213. data/test/test_25_position_object.rb +80 -0
  214. data/test/test_26_autofilter.rb +309 -0
  215. data/test/test_27_autofilter.rb +126 -0
  216. data/test/test_28_autofilter.rb +156 -0
  217. data/test/test_29_process_jpg.rb +670 -0
  218. data/test/test_30_validation_dval.rb +74 -0
  219. data/test/test_31_validation_dv_strings.rb +123 -0
  220. data/test/test_32_validation_dv_formula.rb +203 -0
  221. data/test/test_40_property_types.rb +188 -0
  222. data/test/test_41_properties.rb +235 -0
  223. data/test/test_42_set_properties.rb +434 -0
  224. data/test/test_50_name_stored.rb +295 -0
  225. data/test/test_51_name_print_area.rb +353 -0
  226. data/test/test_52_name_print_titles.rb +450 -0
  227. data/test/test_53_autofilter.rb +199 -0
  228. data/test/test_60_chart_generic.rb +574 -0
  229. data/test/test_61_chart_subclasses.rb +84 -0
  230. data/test/test_62_chart_formats.rb +268 -0
  231. data/test/test_63_chart_area_formats.rb +645 -0
  232. data/test/test_biff.rb +71 -0
  233. data/test/test_big_workbook.rb +17 -0
  234. data/test/test_compatibility.rb +12 -0
  235. data/test/test_example_match.rb +3246 -0
  236. data/test/test_format.rb +1189 -0
  237. data/test/test_formula.rb +61 -0
  238. data/test/test_ole.rb +102 -0
  239. data/test/test_storage_lite.rb +116 -0
  240. data/test/test_workbook.rb +146 -0
  241. data/test/test_worksheet.rb +106 -0
  242. data/utils/add_magic_comment.rb +80 -0
  243. data/writeexcel.gemspec +278 -0
  244. data/writeexcel.rdoc +1425 -0
  245. metadata +292 -0
@@ -0,0 +1,126 @@
1
+ # -*- coding: utf-8 -*-
2
+ ##########################################################################
3
+ # test_27_autofilter.rb
4
+ #
5
+ # Tests for the token extraction method used to parse autofilter expressions.
6
+ #
7
+ # reverse('©'), September 2005, John McNamara, jmcnamara@cpan.org
8
+ #
9
+ # original written in Perl by John McNamara
10
+ # converted to Ruby by Hideo Nakamura, cxn03651@msj.biglobe.ne.jp
11
+ #
12
+ #########################################################################
13
+ require 'helper'
14
+ require 'stringio'
15
+
16
+ class TC_27_autofilter < Test::Unit::TestCase
17
+
18
+ def test_27_autofilter
19
+ @tests.each do |test|
20
+ expression = test[0]
21
+ expected = test[1]
22
+ result = @worksheet.__send__("extract_filter_tokens", expression)
23
+
24
+ testname = expression || 'none'
25
+
26
+ assert_equal(expected, result, testname)
27
+ end
28
+ end
29
+
30
+ def setup
31
+ @workbook = WriteExcel.new(StringIO.new)
32
+ @worksheet = @workbook.add_worksheet
33
+ @tests = [
34
+ [
35
+ nil,
36
+ [],
37
+ ],
38
+
39
+ [
40
+ '',
41
+ [],
42
+ ],
43
+
44
+ [
45
+ '0 < 2000',
46
+ [0, '<', 2000],
47
+ ],
48
+
49
+ [
50
+ 'x < 2000',
51
+ ['x', '<', 2000],
52
+ ],
53
+
54
+ [
55
+ 'x > 2000',
56
+ ['x', '>', 2000],
57
+ ],
58
+
59
+ [
60
+ 'x == 2000',
61
+ ['x', '==', 2000],
62
+ ],
63
+
64
+ [
65
+ 'x > 2000 and x < 5000',
66
+ ['x', '>', 2000, 'and', 'x', '<', 5000],
67
+ ],
68
+
69
+ [
70
+ 'x = "foo"',
71
+ ['x', '=', 'foo'],
72
+ ],
73
+
74
+ [
75
+ 'x = foo',
76
+ ['x', '=', 'foo'],
77
+ ],
78
+
79
+ [
80
+ 'x = "foo bar"',
81
+ ['x', '=', 'foo bar'],
82
+ ],
83
+
84
+ [
85
+ 'x = "foo "" bar"',
86
+ ['x', '=', 'foo " bar'],
87
+ ],
88
+
89
+ [
90
+ 'x = "foo bar" or x = "bar foo"',
91
+ ['x', '=', 'foo bar', 'or', 'x', '=', 'bar foo'],
92
+ ],
93
+
94
+ [
95
+ 'x = "foo "" bar" or x = "bar "" foo"',
96
+ ['x', '=', 'foo " bar', 'or', 'x', '=', 'bar " foo'],
97
+ ],
98
+
99
+ [
100
+ 'x = """"""""',
101
+ ['x', '=', '"""'],
102
+ ],
103
+
104
+ [
105
+ 'x = Blanks',
106
+ ['x', '=', 'Blanks'],
107
+ ],
108
+
109
+ [
110
+ 'x = NonBlanks',
111
+ ['x', '=', 'NonBlanks'],
112
+ ],
113
+
114
+ [
115
+ 'top 10 %',
116
+ ['top', 10, '%'],
117
+ ],
118
+
119
+ [
120
+ 'top 10 items',
121
+ ['top', 10, 'items'],
122
+ ],
123
+
124
+ ]
125
+ end
126
+ end
@@ -0,0 +1,156 @@
1
+ # -*- coding: utf-8 -*-
2
+ ##########################################################################
3
+ # test_28_autofilter.rb
4
+ #
5
+ # Tests for the token parsing methods used to parse autofilter expressions.
6
+ #
7
+ # reverse('©'), September 2005, John McNamara, jmcnamara@cpan.org
8
+ #
9
+ # original written in Perl by John McNamara
10
+ # converted to Ruby by Hideo Nakamura, cxn03651@msj.biglobe.ne.jp
11
+ #
12
+ #########################################################################
13
+ require 'helper'
14
+ require 'stringio'
15
+
16
+ class TC_28_autofilter < Test::Unit::TestCase
17
+
18
+ def test_28_autofilter
19
+ @tests.each do |test|
20
+ expression = test[0]
21
+ expected = test[1]
22
+ tokens = @worksheet.__send__("extract_filter_tokens", expression)
23
+ result = @worksheet.__send__("parse_filter_expression", expression, tokens)
24
+
25
+ testname = expression || 'none'
26
+
27
+ assert_equal(expected, result, testname)
28
+ end
29
+ end
30
+
31
+ def setup
32
+ @workbook = WriteExcel.new(StringIO.new)
33
+ @worksheet = @workbook.add_worksheet
34
+ @tests = [
35
+ [
36
+ 'x = 2000',
37
+ [2, 2000],
38
+ ],
39
+
40
+ [
41
+ 'x == 2000',
42
+ [2, 2000],
43
+ ],
44
+
45
+ [
46
+ 'x =~ 2000',
47
+ [2, 2000],
48
+ ],
49
+
50
+ [
51
+ 'x eq 2000',
52
+ [2, 2000],
53
+ ],
54
+
55
+ [
56
+ 'x <> 2000',
57
+ [5, 2000],
58
+ ],
59
+
60
+ [
61
+ 'x != 2000',
62
+ [5, 2000],
63
+ ],
64
+
65
+ [
66
+ 'x ne 2000',
67
+ [5, 2000],
68
+ ],
69
+
70
+ [
71
+ 'x !~ 2000',
72
+ [5, 2000],
73
+ ],
74
+
75
+ [
76
+ 'x > 2000',
77
+ [4, 2000],
78
+ ],
79
+
80
+ [
81
+ 'x < 2000',
82
+ [1, 2000],
83
+ ],
84
+
85
+ [
86
+ 'x >= 2000',
87
+ [6, 2000],
88
+ ],
89
+
90
+ [
91
+ 'x <= 2000',
92
+ [3, 2000],
93
+ ],
94
+
95
+ [
96
+ 'x > 2000 and x < 5000',
97
+ [4, 2000, 0, 1, 5000],
98
+ ],
99
+
100
+ [
101
+ 'x > 2000 && x < 5000',
102
+ [4, 2000, 0, 1, 5000],
103
+ ],
104
+
105
+ [
106
+ 'x > 2000 or x < 5000',
107
+ [4, 2000, 1, 1, 5000],
108
+ ],
109
+
110
+ [
111
+ 'x > 2000 || x < 5000',
112
+ [4, 2000, 1, 1, 5000],
113
+ ],
114
+
115
+ [
116
+ 'x = Blanks',
117
+ [2, 'blanks'],
118
+ ],
119
+
120
+ [
121
+ 'x = NonBlanks',
122
+ [2, 'nonblanks'],
123
+ ],
124
+
125
+ [
126
+ 'x <> Blanks',
127
+ [2, 'nonblanks'],
128
+ ],
129
+
130
+ [
131
+ 'x <> NonBlanks',
132
+ [2, 'blanks'],
133
+ ],
134
+
135
+ [
136
+ 'Top 10 Items',
137
+ [30, 10],
138
+ ],
139
+
140
+ [
141
+ 'Top 20 %',
142
+ [31, 20],
143
+ ],
144
+
145
+ [
146
+ 'Bottom 5 Items',
147
+ [32, 5],
148
+ ],
149
+
150
+ [
151
+ 'Bottom 101 %',
152
+ [33, 101],
153
+ ],
154
+ ]
155
+ end
156
+ end
@@ -0,0 +1,670 @@
1
+ # -*- coding: utf-8 -*-
2
+ ##########################################################################
3
+ # test_29_process_jpg.rb
4
+ #
5
+ # Tests for the JPEG width and height processing.
6
+ #
7
+ # reverse('©'), September 2005, John McNamara, jmcnamara@cpan.org
8
+ #
9
+ # original written in Perl by John McNamara
10
+ # converted to Ruby by Hideo Nakamura, cxn03651@msj.biglobe.ne.jp
11
+ #
12
+ #########################################################################
13
+ require 'helper'
14
+ require 'stringio'
15
+
16
+ class TC_29_process_jpg < Test::Unit::TestCase
17
+
18
+ def setup
19
+ @image = Writeexcel::Image.new(nil, nil, nil, nil)
20
+ @type = 5 # Excel Blip type (MSOBLIPTYPE).
21
+ end
22
+
23
+ def test_valid_jpg_image_1
24
+ testname = '3w x 5h jpeg image.'
25
+
26
+ data = %w(
27
+ FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 00 60
28
+ 00 60 00 00 FF DB 00 43 00 06 04 05 06 05 04 06
29
+ 06 05 06 07 07 06 08 0A 10 0A 0A 09 09 0A 14 0E
30
+ 0F 0C 10 17 14 18 18 17 14 16 16 1A 1D 25 1F 1A
31
+ 1B 23 1C 16 16 20 2C 20 23 26 27 29 2A 29 19 1F
32
+ 2D 30 2D 28 30 25 28 29 28 FF DB 00 43 01 07 07
33
+ 07 0A 08 0A 13 0A 0A 13 28 1A 16 1A 28 28 28 28
34
+ 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
35
+ 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
36
+ 28 28 28 28 28 28 28 28 28 28 28 28 28 28 FF C0
37
+ 00 11 08 00 05 00 03 03 01 22 00 02 11 01 03 11
38
+ 01 FF C4 00 15 00 01 01 00 00 00 00 00 00 00 00
39
+ 00 00 00 00 00 00 00 07 FF C4 00 14 10 01 00 00
40
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF C4
41
+ 00 15 01 01 01 00 00 00 00 00 00 00 00 00 00 00
42
+ 00 00 00 06 08 FF C4 00 14 11 01 00 00 00 00 00
43
+ 00 00 00 00 00 00 00 00 00 00 00 FF DA 00 0C 03
44
+ 01 00 02 11 03 11 00 3F 00 9D 00 1C A4 5F FF D9
45
+ )
46
+ @image.__send__("process_jpg", [data.join('')].pack('H*'))
47
+ assert_equal(@type, @image.type)
48
+ assert_equal(3, @image.width)
49
+ assert_equal(5, @image.height)
50
+ end
51
+
52
+ def test_valid_jpg_image_2
53
+ testname = '5w x 3h jpeg image.'
54
+
55
+ data = %w(
56
+ FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 00 60
57
+ 00 60 00 00 FF DB 00 43 00 06 04 05 06 05 04 06
58
+ 06 05 06 07 07 06 08 0A 10 0A 0A 09 09 0A 14 0E
59
+ 0F 0C 10 17 14 18 18 17 14 16 16 1A 1D 25 1F 1A
60
+ 1B 23 1C 16 16 20 2C 20 23 26 27 29 2A 29 19 1F
61
+ 2D 30 2D 28 30 25 28 29 28 FF DB 00 43 01 07 07
62
+ 07 0A 08 0A 13 0A 0A 13 28 1A 16 1A 28 28 28 28
63
+ 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
64
+ 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
65
+ 28 28 28 28 28 28 28 28 28 28 28 28 28 28 FF C0
66
+ 00 11 08 00 03 00 05 03 01 22 00 02 11 01 03 11
67
+ 01 FF C4 00 15 00 01 01 00 00 00 00 00 00 00 00
68
+ 00 00 00 00 00 00 00 07 FF C4 00 14 10 01 00 00
69
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF C4
70
+ 00 15 01 01 01 00 00 00 00 00 00 00 00 00 00 00
71
+ 00 00 00 06 08 FF C4 00 14 11 01 00 00 00 00 00
72
+ 00 00 00 00 00 00 00 00 00 00 00 FF DA 00 0C 03
73
+ 01 00 02 11 03 11 00 3F 00 9D 00 1C A4 5F FF D9
74
+ )
75
+
76
+ @image.__send__("process_jpg", [data.join('')].pack('H*'))
77
+ assert_equal(@type, @image.type)
78
+ assert_equal(5, @image.width)
79
+ assert_equal(3, @image.height)
80
+ end
81
+
82
+ def test_valid_jpg_image_3_ffco_marker_missing
83
+ testname = 'FFCO marker missing in image.'
84
+
85
+ data = %w(
86
+ FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 00 60
87
+ 00 60 00 00 FF DB 00 43 00 06 04 05 06 05 04 06
88
+ 06 05 06 07 07 06 08 0A 10 0A 0A 09 09 0A 14 0E
89
+ 0F 0C 10 17 14 18 18 17 14 16 16 1A 1D 25 1F 1A
90
+ 1B 23 1C 16 16 20 2C 20 23 26 27 29 2A 29 19 1F
91
+ 2D 30 2D 28 30 25 28 29 28 FF DB 00 43 01 07 07
92
+ 07 0A 08 0A 13 0A 0A 13 28 1A 16 1A 28 28 28 28
93
+ 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
94
+ 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
95
+ 28 28 28 28 28 28 28 28 28 28 28 28 28 28 FF C1
96
+ 00 11 08 00 03 00 05 03 01 22 00 02 11 01 03 11
97
+ 01 FF C4 00 15 00 01 01 00 00 00 00 00 00 00 00
98
+ 00 00 00 00 00 00 00 07 FF C4 00 14 10 01 00 00
99
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF C4
100
+ 00 15 01 01 01 00 00 00 00 00 00 00 00 00 00 00
101
+ 00 00 00 06 08 FF C4 00 14 11 01 00 00 00 00 00
102
+ 00 00 00 00 00 00 00 00 00 00 00 FF DA 00 0C 03
103
+ 01 00 02 11 03 11 00 3F 00 9D 00 1C A4 5F FF D9
104
+ )
105
+
106
+ assert_raise(RuntimeError, " \t" + testname) {
107
+ @image.__send__("process_jpg", [data.join('')].pack('H*'))
108
+ }
109
+ end
110
+
111
+ def test_invalid_jpeg_image
112
+ testname = 'empty image'
113
+ image = ''
114
+
115
+ assert_raise(RuntimeError, " \t" + testname) {
116
+ @image.__send__("process_jpg", image)
117
+ }
118
+ end
119
+
120
+ ###############################################################################
121
+ #
122
+ # Test 5. Progressive DCT-based JPEG image.
123
+ #
124
+ def test_progressive_dct_based_jpeg_image
125
+ testname = '35w x 35h progressive jpeg image.'
126
+ data = %w(
127
+ FF D8 FF E0 00 10 4A 46 49 46 00 01 02 01 00 96
128
+ 00 96 00 00 FF E1 04 E7 45 78 69 66 00 00 4D 4D
129
+ 00 2A 00 00 00 08 00 07 01 12 00 03 00 00 00 01
130
+ 00 01 00 00 01 1A 00 05 00 00 00 01 00 00 00 62
131
+ 01 1B 00 05 00 00 00 01 00 00 00 6A 01 28 00 03
132
+ 00 00 00 01 00 02 00 00 01 31 00 02 00 00 00 14
133
+ 00 00 00 72 01 32 00 02 00 00 00 14 00 00 00 86
134
+ 87 69 00 04 00 00 00 01 00 00 00 9C 00 00 00 C8
135
+ 00 00 00 96 00 00 00 01 00 00 00 96 00 00 00 01
136
+ 41 64 6F 62 65 20 50 68 6F 74 6F 73 68 6F 70 20
137
+ 37 2E 30 00 32 30 30 38 3A 30 39 3A 30 39 20 32
138
+ 32 3A 32 33 3A 31 32 00 00 00 00 03 A0 01 00 03
139
+ 00 00 00 01 FF FF 00 00 A0 02 00 04 00 00 00 01
140
+ 00 00 00 23 A0 03 00 04 00 00 00 01 00 00 00 23
141
+ 00 00 00 00 00 00 00 06 01 03 00 03 00 00 00 01
142
+ 00 06 00 00 01 1A 00 05 00 00 00 01 00 00 01 16
143
+ 01 1B 00 05 00 00 00 01 00 00 01 1E 01 28 00 03
144
+ 00 00 00 01 00 02 00 00 02 01 00 04 00 00 00 01
145
+ 00 00 01 26 02 02 00 04 00 00 00 01 00 00 03 B9
146
+ 00 00 00 00 00 00 00 48 00 00 00 01 00 00 00 48
147
+ 00 00 00 01 FF D8 FF E0 00 10 4A 46 49 46 00 01
148
+ 02 01 00 48 00 48 00 00 FF ED 00 0C 41 64 6F 62
149
+ 65 5F 43 4D 00 02 FF EE 00 0E 41 64 6F 62 65 00
150
+ 64 80 00 00 00 01 FF DB 00 84 00 0C 08 08 08 09
151
+ 08 0C 09 09 0C 11 0B 0A 0B 11 15 0F 0C 0C 0F 15
152
+ 18 13 13 15 13 13 18 11 0C 0C 0C 0C 0C 0C 11 0C
153
+ 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C
154
+ 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 01 0D 0B 0B 0D
155
+ 0E 0D 10 0E 0E 10 14 0E 0E 0E 14 14 0E 0E 0E 0E
156
+ 14 11 0C 0C 0C 0C 0C 11 11 0C 0C 0C 0C 0C 0C 11
157
+ 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C
158
+ 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C FF C0 00 11
159
+ 08 00 23 00 23 03 01 22 00 02 11 01 03 11 01 FF
160
+ DD 00 04 00 03 FF C4 01 3F 00 00 01 05 01 01 01
161
+ 01 01 01 00 00 00 00 00 00 00 03 00 01 02 04 05
162
+ 06 07 08 09 0A 0B 01 00 01 05 01 01 01 01 01 01
163
+ 00 00 00 00 00 00 00 01 00 02 03 04 05 06 07 08
164
+ 09 0A 0B 10 00 01 04 01 03 02 04 02 05 07 06 08
165
+ 05 03 0C 33 01 00 02 11 03 04 21 12 31 05 41 51
166
+ 61 13 22 71 81 32 06 14 91 A1 B1 42 23 24 15 52
167
+ C1 62 33 34 72 82 D1 43 07 25 92 53 F0 E1 F1 63
168
+ 73 35 16 A2 B2 83 26 44 93 54 64 45 C2 A3 74 36
169
+ 17 D2 55 E2 65 F2 B3 84 C3 D3 75 E3 F3 46 27 94
170
+ A4 85 B4 95 C4 D4 E4 F4 A5 B5 C5 D5 E5 F5 56 66
171
+ 76 86 96 A6 B6 C6 D6 E6 F6 37 47 57 67 77 87 97
172
+ A7 B7 C7 D7 E7 F7 11 00 02 02 01 02 04 04 03 04
173
+ 05 06 07 07 06 05 35 01 00 02 11 03 21 31 12 04
174
+ 41 51 61 71 22 13 05 32 81 91 14 A1 B1 42 23 C1
175
+ 52 D1 F0 33 24 62 E1 72 82 92 43 53 15 63 73 34
176
+ F1 25 06 16 A2 B2 83 07 26 35 C2 D2 44 93 54 A3
177
+ 17 64 45 55 36 74 65 E2 F2 B3 84 C3 D3 75 E3 F3
178
+ 46 94 A4 85 B4 95 C4 D4 E4 F4 A5 B5 C5 D5 E5 F5
179
+ 56 66 76 86 96 A6 B6 C6 D6 E6 F6 27 37 47 57 67
180
+ 77 87 97 A7 B7 C7 FF DA 00 0C 03 01 00 02 11 03
181
+ 11 00 3F 00 F5 54 0B 33 71 AB 79 AC BF 75 83 53
182
+ 5B 01 7B 84 F1 B9 95 EE 73 54 F2 1C E6 D1 63 9B
183
+ F4 9A C7 16 FC 40 5C F7 49 B7 1A FA 19 51 BF 23
184
+ 1B 2C B4 3A EC 7B 2D 65 76 6E 23 DC FD 06 FB 58
185
+ FF 00 A4 CB 92 53 1E B9 F5 9B 3E 96 DB 8D 83 D3
186
+ B2 85 A7 DB 56 53 D8 1B 5C E9 EE 0F 7E E6 37 FE
187
+ B8 AF FD 5B FD AA 71 9E EE A2 CB 6A 26 36 D7 7B
188
+ C5 8F 07 5D EE DE 27 F4 7F 43 E9 21 E5 D5 85 8D
189
+ 59 39 B9 04 56 EE 45 D9 6F F7 79 7A 6D 1E FF 00
190
+ EA AB 9D 0A C3 67 4D AC 9A AC C7 01 CF 0C A6 D2
191
+ 4B DA D0 E7 7A 61 FE A4 BF E8 7E FA 4A 74 12 49
192
+ 24 94 FF 00 FF D0 F5 2B DA 5D 4D 8D 1C B9 A4 7D
193
+ E1 66 F4 FB BA 7F 50 C3 C7 17 D4 CF 59 B5 33 F4
194
+ 57 06 97 00 47 2D 9F CC 74 7D 26 2D 55 CC 7D 61
195
+ CD 7F 40 38 66 BA 99 76 16 4D CE AD EC B8 4B 69
196
+ 2E 06 C6 7A 76 0F 73 37 D9 EC D8 EF EC 24 A7 61
197
+ 95 74 7C 70 6F 6B 28 AF 61 FE 72 1B 20 8F DD 77
198
+ D2 44 E9 97 8C 8C 63 7B 5A E6 36 CB 2C 21 AE D1
199
+ D0 1E EA F5 1F D8 58 1F 57 FA 95 DD 6B 23 25 B5
200
+ D5 5E 23 31 F6 13 63 1A 1E F9 70 73 76 56 F7 7B
201
+ 6A FE 6F 7F D0 FC F5 D3 63 D1 56 3D 2C A6 A6 ED
202
+ AD 82 1A 12 52 44 92 49 25 3F FF D1 F5 55 47 AD
203
+ C7 EC AC AD DE 84 7A 6E 9F B5 4F A3 11 FE 1B 67
204
+ BF 67 F5 17 CC 69 24 A7 E9 6F AB BB 7F 66 55 B7
205
+ EC BB 60 47 D8 B7 7A 5C 7F C2 7E 93 FC F5 A8 BE
206
+ 55 49 25 3F 55 24 BE 55 49 25 3F FF D9 FF ED 09
207
+ 94 50 68 6F 74 6F 73 68 6F 70 20 33 2E 30 00 38
208
+ 42 49 4D 04 25 00 00 00 00 00 10 00 00 00 00 00
209
+ 00 00 00 00 00 00 00 00 00 00 00 38 42 49 4D 03
210
+ ED 00 00 00 00 00 10 00 96 00 00 00 01 00 01 00
211
+ 96 00 00 00 01 00 01 38 42 49 4D 04 26 00 00 00
212
+ 00 00 0E 00 00 00 00 00 00 00 00 00 00 3F 80 00
213
+ 00 38 42 49 4D 04 0D 00 00 00 00 00 04 00 00 00
214
+ 1E 38 42 49 4D 04 19 00 00 00 00 00 04 00 00 00
215
+ 1E 38 42 49 4D 03 F3 00 00 00 00 00 09 00 00 00
216
+ 00 00 00 00 00 01 00 38 42 49 4D 04 0A 00 00 00
217
+ 00 00 01 00 00 38 42 49 4D 27 10 00 00 00 00 00
218
+ 0A 00 01 00 00 00 00 00 00 00 01 38 42 49 4D 03
219
+ F5 00 00 00 00 00 48 00 2F 66 66 00 01 00 6C 66
220
+ 66 00 06 00 00 00 00 00 01 00 2F 66 66 00 01 00
221
+ A1 99 9A 00 06 00 00 00 00 00 01 00 32 00 00 00
222
+ 01 00 5A 00 00 00 06 00 00 00 00 00 01 00 35 00
223
+ 00 00 01 00 2D 00 00 00 06 00 00 00 00 00 01 38
224
+ 42 49 4D 03 F8 00 00 00 00 00 70 00 00 FF FF FF
225
+ FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
226
+ FF FF FF 03 E8 00 00 00 00 FF FF FF FF FF FF FF
227
+ FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 03
228
+ E8 00 00 00 00 FF FF FF FF FF FF FF FF FF FF FF
229
+ FF FF FF FF FF FF FF FF FF FF FF 03 E8 00 00 00
230
+ 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
231
+ FF FF FF FF FF FF FF 03 E8 00 00 38 42 49 4D 04
232
+ 08 00 00 00 00 00 10 00 00 00 01 00 00 02 40 00
233
+ 00 02 40 00 00 00 00 38 42 49 4D 04 1E 00 00 00
234
+ 00 00 04 00 00 00 00 38 42 49 4D 04 1A 00 00 00
235
+ 00 03 59 00 00 00 06 00 00 00 00 00 00 00 00 00
236
+ 00 00 23 00 00 00 23 00 00 00 12 00 54 00 43 00
237
+ 50 00 5F 00 43 00 69 00 72 00 63 00 6C 00 65 00
238
+ 5F 00 42 00 61 00 6C 00 6C 00 61 00 73 00 74 00
239
+ 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00
240
+ 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00
241
+ 00 00 23 00 00 00 23 00 00 00 00 00 00 00 00 00
242
+ 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00
243
+ 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00 01
244
+ 00 00 00 00 00 00 6E 75 6C 6C 00 00 00 02 00 00
245
+ 00 06 62 6F 75 6E 64 73 4F 62 6A 63 00 00 00 01
246
+ 00 00 00 00 00 00 52 63 74 31 00 00 00 04 00 00
247
+ 00 00 54 6F 70 20 6C 6F 6E 67 00 00 00 00 00 00
248
+ 00 00 4C 65 66 74 6C 6F 6E 67 00 00 00 00 00 00
249
+ 00 00 42 74 6F 6D 6C 6F 6E 67 00 00 00 23 00 00
250
+ 00 00 52 67 68 74 6C 6F 6E 67 00 00 00 23 00 00
251
+ 00 06 73 6C 69 63 65 73 56 6C 4C 73 00 00 00 01
252
+ 4F 62 6A 63 00 00 00 01 00 00 00 00 00 05 73 6C
253
+ 69 63 65 00 00 00 12 00 00 00 07 73 6C 69 63 65
254
+ 49 44 6C 6F 6E 67 00 00 00 00 00 00 00 07 67 72
255
+ 6F 75 70 49 44 6C 6F 6E 67 00 00 00 00 00 00 00
256
+ 06 6F 72 69 67 69 6E 65 6E 75 6D 00 00 00 0C 45
257
+ 53 6C 69 63 65 4F 72 69 67 69 6E 00 00 00 0D 61
258
+ 75 74 6F 47 65 6E 65 72 61 74 65 64 00 00 00 00
259
+ 54 79 70 65 65 6E 75 6D 00 00 00 0A 45 53 6C 69
260
+ 63 65 54 79 70 65 00 00 00 00 49 6D 67 20 00 00
261
+ 00 06 62 6F 75 6E 64 73 4F 62 6A 63 00 00 00 01
262
+ 00 00 00 00 00 00 52 63 74 31 00 00 00 04 00 00
263
+ 00 00 54 6F 70 20 6C 6F 6E 67 00 00 00 00 00 00
264
+ 00 00 4C 65 66 74 6C 6F 6E 67 00 00 00 00 00 00
265
+ 00 00 42 74 6F 6D 6C 6F 6E 67 00 00 00 23 00 00
266
+ 00 00 52 67 68 74 6C 6F 6E 67 00 00 00 23 00 00
267
+ 00 03 75 72 6C 54 45 58 54 00 00 00 01 00 00 00
268
+ 00 00 00 6E 75 6C 6C 54 45 58 54 00 00 00 01 00
269
+ 00 00 00 00 00 4D 73 67 65 54 45 58 54 00 00 00
270
+ 01 00 00 00 00 00 06 61 6C 74 54 61 67 54 45 58
271
+ 54 00 00 00 01 00 00 00 00 00 0E 63 65 6C 6C 54
272
+ 65 78 74 49 73 48 54 4D 4C 62 6F 6F 6C 01 00 00
273
+ 00 08 63 65 6C 6C 54 65 78 74 54 45 58 54 00 00
274
+ 00 01 00 00 00 00 00 09 68 6F 72 7A 41 6C 69 67
275
+ 6E 65 6E 75 6D 00 00 00 0F 45 53 6C 69 63 65 48
276
+ 6F 72 7A 41 6C 69 67 6E 00 00 00 07 64 65 66 61
277
+ 75 6C 74 00 00 00 09 76 65 72 74 41 6C 69 67 6E
278
+ 65 6E 75 6D 00 00 00 0F 45 53 6C 69 63 65 56 65
279
+ 72 74 41 6C 69 67 6E 00 00 00 07 64 65 66 61 75
280
+ 6C 74 00 00 00 0B 62 67 43 6F 6C 6F 72 54 79 70
281
+ 65 65 6E 75 6D 00 00 00 11 45 53 6C 69 63 65 42
282
+ 47 43 6F 6C 6F 72 54 79 70 65 00 00 00 00 4E 6F
283
+ 6E 65 00 00 00 09 74 6F 70 4F 75 74 73 65 74 6C
284
+ 6F 6E 67 00 00 00 00 00 00 00 0A 6C 65 66 74 4F
285
+ 75 74 73 65 74 6C 6F 6E 67 00 00 00 00 00 00 00
286
+ 0C 62 6F 74 74 6F 6D 4F 75 74 73 65 74 6C 6F 6E
287
+ 67 00 00 00 00 00 00 00 0B 72 69 67 68 74 4F 75
288
+ 74 73 65 74 6C 6F 6E 67 00 00 00 00 00 38 42 49
289
+ 4D 04 11 00 00 00 00 00 01 01 00 38 42 49 4D 04
290
+ 14 00 00 00 00 00 04 00 00 00 01 38 42 49 4D 04
291
+ 0C 00 00 00 00 03 D5 00 00 00 01 00 00 00 23 00
292
+ 00 00 23 00 00 00 6C 00 00 0E C4 00 00 03 B9 00
293
+ 18 00 01 FF D8 FF E0 00 10 4A 46 49 46 00 01 02
294
+ 01 00 48 00 48 00 00 FF ED 00 0C 41 64 6F 62 65
295
+ 5F 43 4D 00 02 FF EE 00 0E 41 64 6F 62 65 00 64
296
+ 80 00 00 00 01 FF DB 00 84 00 0C 08 08 08 09 08
297
+ 0C 09 09 0C 11 0B 0A 0B 11 15 0F 0C 0C 0F 15 18
298
+ 13 13 15 13 13 18 11 0C 0C 0C 0C 0C 0C 11 0C 0C
299
+ 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C
300
+ 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 01 0D 0B 0B 0D 0E
301
+ 0D 10 0E 0E 10 14 0E 0E 0E 14 14 0E 0E 0E 0E 14
302
+ 11 0C 0C 0C 0C 0C 11 11 0C 0C 0C 0C 0C 0C 11 0C
303
+ 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C
304
+ 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C FF C0 00 11 08
305
+ 00 23 00 23 03 01 22 00 02 11 01 03 11 01 FF DD
306
+ 00 04 00 03 FF C4 01 3F 00 00 01 05 01 01 01 01
307
+ 01 01 00 00 00 00 00 00 00 03 00 01 02 04 05 06
308
+ 07 08 09 0A 0B 01 00 01 05 01 01 01 01 01 01 00
309
+ 00 00 00 00 00 00 01 00 02 03 04 05 06 07 08 09
310
+ 0A 0B 10 00 01 04 01 03 02 04 02 05 07 06 08 05
311
+ 03 0C 33 01 00 02 11 03 04 21 12 31 05 41 51 61
312
+ 13 22 71 81 32 06 14 91 A1 B1 42 23 24 15 52 C1
313
+ 62 33 34 72 82 D1 43 07 25 92 53 F0 E1 F1 63 73
314
+ 35 16 A2 B2 83 26 44 93 54 64 45 C2 A3 74 36 17
315
+ D2 55 E2 65 F2 B3 84 C3 D3 75 E3 F3 46 27 94 A4
316
+ 85 B4 95 C4 D4 E4 F4 A5 B5 C5 D5 E5 F5 56 66 76
317
+ 86 96 A6 B6 C6 D6 E6 F6 37 47 57 67 77 87 97 A7
318
+ B7 C7 D7 E7 F7 11 00 02 02 01 02 04 04 03 04 05
319
+ 06 07 07 06 05 35 01 00 02 11 03 21 31 12 04 41
320
+ 51 61 71 22 13 05 32 81 91 14 A1 B1 42 23 C1 52
321
+ D1 F0 33 24 62 E1 72 82 92 43 53 15 63 73 34 F1
322
+ 25 06 16 A2 B2 83 07 26 35 C2 D2 44 93 54 A3 17
323
+ 64 45 55 36 74 65 E2 F2 B3 84 C3 D3 75 E3 F3 46
324
+ 94 A4 85 B4 95 C4 D4 E4 F4 A5 B5 C5 D5 E5 F5 56
325
+ 66 76 86 96 A6 B6 C6 D6 E6 F6 27 37 47 57 67 77
326
+ 87 97 A7 B7 C7 FF DA 00 0C 03 01 00 02 11 03 11
327
+ 00 3F 00 F5 54 0B 33 71 AB 79 AC BF 75 83 53 5B
328
+ 01 7B 84 F1 B9 95 EE 73 54 F2 1C E6 D1 63 9B F4
329
+ 9A C7 16 FC 40 5C F7 49 B7 1A FA 19 51 BF 23 1B
330
+ 2C B4 3A EC 7B 2D 65 76 6E 23 DC FD 06 FB 58 FF
331
+ 00 A4 CB 92 53 1E B9 F5 9B 3E 96 DB 8D 83 D3 B2
332
+ 85 A7 DB 56 53 D8 1B 5C E9 EE 0F 7E E6 37 FE B8
333
+ AF FD 5B FD AA 71 9E EE A2 CB 6A 26 36 D7 7B C5
334
+ 8F 07 5D EE DE 27 F4 7F 43 E9 21 E5 D5 85 8D 59
335
+ 39 B9 04 56 EE 45 D9 6F F7 79 7A 6D 1E FF 00 EA
336
+ AB 9D 0A C3 67 4D AC 9A AC C7 01 CF 0C A6 D2 4B
337
+ DA D0 E7 7A 61 FE A4 BF E8 7E FA 4A 74 12 49 24
338
+ 94 FF 00 FF D0 F5 2B DA 5D 4D 8D 1C B9 A4 7D E1
339
+ 66 F4 FB BA 7F 50 C3 C7 17 D4 CF 59 B5 33 F4 57
340
+ 06 97 00 47 2D 9F CC 74 7D 26 2D 55 CC 7D 61 CD
341
+ 7F 40 38 66 BA 99 76 16 4D CE AD EC B8 4B 69 2E
342
+ 06 C6 7A 76 0F 73 37 D9 EC D8 EF EC 24 A7 61 95
343
+ 74 7C 70 6F 6B 28 AF 61 FE 72 1B 20 8F DD 77 D2
344
+ 44 E9 97 8C 8C 63 7B 5A E6 36 CB 2C 21 AE D1 D0
345
+ 1E EA F5 1F D8 58 1F 57 FA 95 DD 6B 23 25 B5 D5
346
+ 5E 23 31 F6 13 63 1A 1E F9 70 73 76 56 F7 7B 6A
347
+ FE 6F 7F D0 FC F5 D3 63 D1 56 3D 2C A6 A6 ED AD
348
+ 82 1A 12 52 44 92 49 25 3F FF D1 F5 55 47 AD C7
349
+ EC AC AD DE 84 7A 6E 9F B5 4F A3 11 FE 1B 67 BF
350
+ 67 F5 17 CC 69 24 A7 E9 6F AB BB 7F 66 55 B7 EC
351
+ BB 60 47 D8 B7 7A 5C 7F C2 7E 93 FC F5 A8 BE 55
352
+ 49 25 3F 55 24 BE 55 49 25 3F FF D9 00 38 42 49
353
+ 4D 04 21 00 00 00 00 00 55 00 00 00 01 01 00 00
354
+ 00 0F 00 41 00 64 00 6F 00 62 00 65 00 20 00 50
355
+ 00 68 00 6F 00 74 00 6F 00 73 00 68 00 6F 00 70
356
+ 00 00 00 13 00 41 00 64 00 6F 00 62 00 65 00 20
357
+ 00 50 00 68 00 6F 00 74 00 6F 00 73 00 68 00 6F
358
+ 00 70 00 20 00 37 00 2E 00 30 00 00 00 01 00 38
359
+ 42 49 4D 04 06 00 00 00 00 00 07 00 08 01 01 00
360
+ 01 01 00 FF E1 12 48 68 74 74 70 3A 2F 2F 6E 73
361
+ 2E 61 64 6F 62 65 2E 63 6F 6D 2F 78 61 70 2F 31
362
+ 2E 30 2F 00 3C 3F 78 70 61 63 6B 65 74 20 62 65
363
+ 67 69 6E 3D 27 EF BB BF 27 20 69 64 3D 27 57 35
364
+ 4D 30 4D 70 43 65 68 69 48 7A 72 65 53 7A 4E 54
365
+ 63 7A 6B 63 39 64 27 3F 3E 0A 3C 3F 61 64 6F 62
366
+ 65 2D 78 61 70 2D 66 69 6C 74 65 72 73 20 65 73
367
+ 63 3D 22 43 52 22 3F 3E 0A 3C 78 3A 78 61 70 6D
368
+ 65 74 61 20 78 6D 6C 6E 73 3A 78 3D 27 61 64 6F
369
+ 62 65 3A 6E 73 3A 6D 65 74 61 2F 27 20 78 3A 78
370
+ 61 70 74 6B 3D 27 58 4D 50 20 74 6F 6F 6C 6B 69
371
+ 74 20 32 2E 38 2E 32 2D 33 33 2C 20 66 72 61 6D
372
+ 65 77 6F 72 6B 20 31 2E 35 27 3E 0A 3C 72 64 66
373
+ 3A 52 44 46 20 78 6D 6C 6E 73 3A 72 64 66 3D 27
374
+ 68 74 74 70 3A 2F 2F 77 77 77 2E 77 33 2E 6F 72
375
+ 67 2F 31 39 39 39 2F 30 32 2F 32 32 2D 72 64 66
376
+ 2D 73 79 6E 74 61 78 2D 6E 73 23 27 20 78 6D 6C
377
+ 6E 73 3A 69 58 3D 27 68 74 74 70 3A 2F 2F 6E 73
378
+ 2E 61 64 6F 62 65 2E 63 6F 6D 2F 69 58 2F 31 2E
379
+ 30 2F 27 3E 0A 0A 20 3C 72 64 66 3A 44 65 73 63
380
+ 72 69 70 74 69 6F 6E 20 61 62 6F 75 74 3D 27 75
381
+ 75 69 64 3A 34 37 38 34 61 35 39 66 2D 37 65 64
382
+ 66 2D 31 31 64 64 2D 39 61 37 39 2D 61 31 62 66
383
+ 63 38 33 61 61 63 63 36 27 0A 20 20 78 6D 6C 6E
384
+ 73 3A 78 61 70 4D 4D 3D 27 68 74 74 70 3A 2F 2F
385
+ 6E 73 2E 61 64 6F 62 65 2E 63 6F 6D 2F 78 61 70
386
+ 2F 31 2E 30 2F 6D 6D 2F 27 3E 0A 20 20 3C 78 61
387
+ 70 4D 4D 3A 44 6F 63 75 6D 65 6E 74 49 44 3E 61
388
+ 64 6F 62 65 3A 64 6F 63 69 64 3A 70 68 6F 74 6F
389
+ 73 68 6F 70 3A 34 37 38 34 61 35 39 64 2D 37 65
390
+ 64 66 2D 31 31 64 64 2D 39 61 37 39 2D 61 31 62
391
+ 66 63 38 33 61 61 63 63 36 3C 2F 78 61 70 4D 4D
392
+ 3A 44 6F 63 75 6D 65 6E 74 49 44 3E 0A 20 3C 2F
393
+ 72 64 66 3A 44 65 73 63 72 69 70 74 69 6F 6E 3E
394
+ 0A 0A 3C 2F 72 64 66 3A 52 44 46 3E 0A 3C 2F 78
395
+ 3A 78 61 70 6D 65 74 61 3E 0A 20 20 20 20 20 20
396
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
397
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
398
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
399
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
400
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
401
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0A 20
402
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
403
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
404
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
405
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
406
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
407
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
408
+ 20 20 20 0A 20 20 20 20 20 20 20 20 20 20 20 20
409
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
410
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
411
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
412
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
413
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
414
+ 20 20 20 20 20 20 20 20 0A 20 20 20 20 20 20 20
415
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
416
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
417
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
418
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
419
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
420
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 0A 20 20
421
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
422
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
423
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
424
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
425
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
426
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
427
+ 20 20 0A 20 20 20 20 20 20 20 20 20 20 20 20 20
428
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
429
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
430
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
431
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
432
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
433
+ 20 20 20 20 20 20 20 0A 20 20 20 20 20 20 20 20
434
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
435
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
436
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
437
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
438
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
439
+ 20 20 20 20 20 20 20 20 20 20 20 20 0A 20 20 20
440
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
441
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
442
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
443
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
444
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
445
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
446
+ 20 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20
447
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
448
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
449
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
450
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
451
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
452
+ 20 20 20 20 20 20 0A 20 20 20 20 20 20 20 20 20
453
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
454
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
455
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
456
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
457
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
458
+ 20 20 20 20 20 20 20 20 20 20 20 0A 20 20 20 20
459
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
460
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
461
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
462
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
463
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
464
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
465
+ 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
466
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
467
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
468
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
469
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
470
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
471
+ 20 20 20 20 20 0A 20 20 20 20 20 20 20 20 20 20
472
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
473
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
474
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
475
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
476
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
477
+ 20 20 20 20 20 20 20 20 20 20 0A 20 20 20 20 20
478
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
479
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
480
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
481
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
482
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
483
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0A
484
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
485
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
486
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
487
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
488
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
489
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
490
+ 20 20 20 20 0A 20 20 20 20 20 20 20 20 20 20 20
491
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
492
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
493
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
494
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
495
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
496
+ 20 20 20 20 20 20 20 20 20 0A 20 20 20 20 20 20
497
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
498
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
499
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
500
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
501
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
502
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0A 20
503
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
504
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
505
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
506
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
507
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
508
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
509
+ 20 20 20 0A 20 20 20 20 20 20 20 20 20 20 20 20
510
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
511
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
512
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
513
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
514
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
515
+ 20 20 20 20 20 20 20 20 0A 20 20 20 20 20 20 20
516
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
517
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
518
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
519
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
520
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
521
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 0A 20 20
522
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
523
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
524
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
525
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
526
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
527
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
528
+ 20 20 0A 20 20 20 20 20 20 20 20 20 20 20 20 20
529
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
530
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
531
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
532
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
533
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
534
+ 20 20 20 20 20 20 20 0A 20 20 20 20 20 20 20 20
535
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
536
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
537
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
538
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
539
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
540
+ 20 20 20 20 20 20 20 20 20 20 20 20 0A 20 20 20
541
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
542
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
543
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
544
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
545
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
546
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
547
+ 20 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20
548
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
549
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
550
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
551
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
552
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
553
+ 20 20 20 20 20 20 0A 20 20 20 20 20 20 20 20 20
554
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
555
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
556
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
557
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
558
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
559
+ 20 20 20 20 20 20 20 20 20 20 20 0A 20 20 20 20
560
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
561
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
562
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
563
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
564
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
565
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
566
+ 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
567
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
568
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
569
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
570
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
571
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
572
+ 20 20 20 20 20 0A 20 20 20 20 20 20 20 20 20 20
573
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
574
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
575
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
576
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
577
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
578
+ 20 20 20 20 20 20 20 20 20 20 0A 20 20 20 20 20
579
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
580
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
581
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
582
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
583
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
584
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0A
585
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
586
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
587
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
588
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
589
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
590
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
591
+ 20 20 20 20 0A 20 20 20 20 20 20 20 20 20 20 20
592
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
593
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
594
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
595
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
596
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
597
+ 20 20 20 20 20 20 20 20 20 0A 20 20 20 20 20 20
598
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
599
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
600
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
601
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
602
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
603
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0A 20
604
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
605
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
606
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
607
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
608
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
609
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
610
+ 20 20 20 0A 20 20 20 20 20 20 20 20 20 20 20 20
611
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
612
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
613
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
614
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
615
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
616
+ 20 20 20 20 20 20 20 20 0A 20 20 20 20 20 20 20
617
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
618
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
619
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
620
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
621
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
622
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 0A 20 20
623
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
624
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
625
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
626
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
627
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
628
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
629
+ 20 20 0A 20 20 20 20 20 20 20 20 20 20 20 20 20
630
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
631
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
632
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
633
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
634
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
635
+ 20 20 20 20 20 20 20 0A 20 20 20 20 20 20 20 20
636
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
637
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
638
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
639
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
640
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
641
+ 20 20 20 20 20 20 20 20 20 20 20 20 0A 20 20 20
642
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
643
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
644
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
645
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
646
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
647
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
648
+ 20 0A 20 20 20 20 20 20 20 20 20 20 20 20 20 20
649
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
650
+ 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
651
+ 20 20 20 20 20 20 20 20 20 0A 3C 3F 78 70 61 63
652
+ 6B 65 74 20 65 6E 64 3D 27 77 27 3F 3E FF EE 00
653
+ 21 41 64 6F 62 65 00 64 40 00 00 00 01 03 00 10
654
+ 03 02 03 06 00 00 00 00 00 00 00 00 00 00 00 00
655
+ FF DB 00 84 00 01 01 01 01 01 01 01 01 01 01 01
656
+ 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
657
+ 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
658
+ 02 02 02 02 02 02 02 02 02 02 02 03 03 03 03 03
659
+ 03 03 03 03 03 01 01 01 01 01 01 01 01 01 01 01
660
+ 02 02 01 02 02 03 03 03 03 03 03 03 03 03 03 03
661
+ 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03
662
+ 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03 03
663
+ 03 03 03 03 03 03 FF C2 00 11 08 00 23 00 23 03
664
+ )
665
+ @image.__send__("process_jpg", [data.join('')].pack('H*'))
666
+ assert_equal(@type, @image.type)
667
+ assert_equal(35, @image.width)
668
+ assert_equal(35, @image.height)
669
+ end
670
+ end