mail 2.6.4 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +74 -98
  3. data/lib/mail/attachments_list.rb +9 -5
  4. data/lib/mail/body.rb +42 -36
  5. data/lib/mail/check_delivery_params.rb +49 -10
  6. data/lib/mail/configuration.rb +2 -0
  7. data/lib/mail/core_extensions/smtp.rb +19 -16
  8. data/lib/mail/core_extensions/string.rb +0 -4
  9. data/lib/mail/elements/address.rb +37 -26
  10. data/lib/mail/elements/address_list.rb +10 -18
  11. data/lib/mail/elements/content_disposition_element.rb +8 -15
  12. data/lib/mail/elements/content_location_element.rb +5 -10
  13. data/lib/mail/elements/content_transfer_encoding_element.rb +5 -10
  14. data/lib/mail/elements/content_type_element.rb +8 -19
  15. data/lib/mail/elements/date_time_element.rb +6 -14
  16. data/lib/mail/elements/envelope_from_element.rb +14 -21
  17. data/lib/mail/elements/message_ids_element.rb +8 -12
  18. data/lib/mail/elements/mime_version_element.rb +6 -14
  19. data/lib/mail/elements/phrase_list.rb +6 -9
  20. data/lib/mail/elements/received_element.rb +9 -15
  21. data/lib/mail/encodings/7bit.rb +5 -15
  22. data/lib/mail/encodings/8bit.rb +2 -21
  23. data/lib/mail/encodings/base64.rb +11 -12
  24. data/lib/mail/encodings/binary.rb +3 -22
  25. data/lib/mail/encodings/identity.rb +24 -0
  26. data/lib/mail/encodings/quoted_printable.rb +6 -6
  27. data/lib/mail/encodings/transfer_encoding.rb +38 -29
  28. data/lib/mail/encodings/unix_to_unix.rb +2 -1
  29. data/lib/mail/encodings.rb +99 -43
  30. data/lib/mail/envelope.rb +1 -1
  31. data/lib/mail/field.rb +94 -59
  32. data/lib/mail/fields/bcc_field.rb +2 -2
  33. data/lib/mail/fields/cc_field.rb +1 -1
  34. data/lib/mail/fields/comments_field.rb +1 -1
  35. data/lib/mail/fields/common/address_container.rb +2 -2
  36. data/lib/mail/fields/common/common_address.rb +32 -7
  37. data/lib/mail/fields/common/common_field.rb +1 -10
  38. data/lib/mail/fields/common/parameter_hash.rb +1 -1
  39. data/lib/mail/fields/content_description_field.rb +1 -1
  40. data/lib/mail/fields/content_disposition_field.rb +3 -3
  41. data/lib/mail/fields/content_id_field.rb +2 -2
  42. data/lib/mail/fields/content_location_field.rb +1 -1
  43. data/lib/mail/fields/content_transfer_encoding_field.rb +1 -1
  44. data/lib/mail/fields/content_type_field.rb +3 -8
  45. data/lib/mail/fields/date_field.rb +2 -3
  46. data/lib/mail/fields/from_field.rb +1 -1
  47. data/lib/mail/fields/in_reply_to_field.rb +1 -1
  48. data/lib/mail/fields/keywords_field.rb +1 -1
  49. data/lib/mail/fields/message_id_field.rb +1 -1
  50. data/lib/mail/fields/mime_version_field.rb +1 -1
  51. data/lib/mail/fields/optional_field.rb +4 -1
  52. data/lib/mail/fields/received_field.rb +1 -1
  53. data/lib/mail/fields/references_field.rb +1 -1
  54. data/lib/mail/fields/reply_to_field.rb +1 -1
  55. data/lib/mail/fields/resent_bcc_field.rb +1 -1
  56. data/lib/mail/fields/resent_cc_field.rb +1 -1
  57. data/lib/mail/fields/resent_date_field.rb +0 -1
  58. data/lib/mail/fields/resent_from_field.rb +1 -1
  59. data/lib/mail/fields/resent_message_id_field.rb +1 -1
  60. data/lib/mail/fields/resent_sender_field.rb +1 -1
  61. data/lib/mail/fields/resent_to_field.rb +1 -1
  62. data/lib/mail/fields/return_path_field.rb +1 -1
  63. data/lib/mail/fields/sender_field.rb +1 -1
  64. data/lib/mail/fields/subject_field.rb +1 -1
  65. data/lib/mail/fields/to_field.rb +1 -1
  66. data/lib/mail/fields/unstructured_field.rb +21 -4
  67. data/lib/mail/header.rb +10 -8
  68. data/lib/mail/mail.rb +2 -10
  69. data/lib/mail/matchers/has_sent_mail.rb +21 -1
  70. data/lib/mail/message.rb +77 -66
  71. data/lib/mail/multibyte/chars.rb +31 -30
  72. data/lib/mail/multibyte.rb +64 -15
  73. data/lib/mail/network/delivery_methods/exim.rb +6 -10
  74. data/lib/mail/network/delivery_methods/file_delivery.rb +4 -8
  75. data/lib/mail/network/delivery_methods/logger_delivery.rb +37 -0
  76. data/lib/mail/network/delivery_methods/sendmail.rb +16 -11
  77. data/lib/mail/network/delivery_methods/smtp.rb +59 -53
  78. data/lib/mail/network/delivery_methods/smtp_connection.rb +10 -6
  79. data/lib/mail/network/delivery_methods/test_mailer.rb +5 -8
  80. data/lib/mail/network/retriever_methods/imap.rb +18 -5
  81. data/lib/mail/network/retriever_methods/pop3.rb +3 -1
  82. data/lib/mail/network/retriever_methods/test_retriever.rb +1 -1
  83. data/lib/mail/network.rb +1 -0
  84. data/lib/mail/parser_tools.rb +15 -0
  85. data/lib/mail/parsers/address_lists_parser.rb +33186 -112
  86. data/lib/mail/parsers/address_lists_parser.rl +172 -0
  87. data/lib/mail/parsers/content_disposition_parser.rb +888 -55
  88. data/lib/mail/parsers/content_disposition_parser.rl +82 -0
  89. data/lib/mail/parsers/content_location_parser.rb +800 -23
  90. data/lib/mail/parsers/content_location_parser.rl +71 -0
  91. data/lib/mail/parsers/content_transfer_encoding_parser.rb +510 -22
  92. data/lib/mail/parsers/content_transfer_encoding_parser.rl +64 -0
  93. data/lib/mail/parsers/content_type_parser.rb +1032 -54
  94. data/lib/mail/parsers/content_type_parser.rl +83 -0
  95. data/lib/mail/parsers/date_time_parser.rb +873 -26
  96. data/lib/mail/parsers/date_time_parser.rl +62 -0
  97. data/lib/mail/parsers/envelope_from_parser.rb +3564 -36
  98. data/lib/mail/parsers/envelope_from_parser.rl +82 -0
  99. data/lib/mail/parsers/message_ids_parser.rb +2843 -25
  100. data/lib/mail/parsers/message_ids_parser.rl +82 -0
  101. data/lib/mail/parsers/mime_version_parser.rb +493 -26
  102. data/lib/mail/parsers/mime_version_parser.rl +61 -0
  103. data/lib/mail/parsers/phrase_lists_parser.rb +874 -19
  104. data/lib/mail/parsers/phrase_lists_parser.rl +83 -0
  105. data/lib/mail/parsers/received_parser.rb +8743 -38
  106. data/lib/mail/parsers/received_parser.rl +84 -0
  107. data/lib/mail/parsers/rfc2045_content_transfer_encoding.rl +13 -0
  108. data/lib/mail/parsers/rfc2045_content_type.rl +25 -0
  109. data/lib/mail/parsers/rfc2045_mime.rl +16 -0
  110. data/lib/mail/parsers/rfc2183_content_disposition.rl +15 -0
  111. data/lib/mail/parsers/rfc3629_utf8.rl +19 -0
  112. data/lib/mail/parsers/rfc5234_abnf_core_rules.rl +22 -0
  113. data/lib/mail/parsers/rfc5322.rl +59 -0
  114. data/lib/mail/parsers/rfc5322_address.rl +72 -0
  115. data/lib/mail/parsers/{ragel/date_time.rl → rfc5322_date_time.rl} +8 -1
  116. data/lib/mail/parsers/rfc5322_lexical_tokens.rl +60 -0
  117. data/lib/mail/parsers.rb +16 -24
  118. data/lib/mail/part.rb +1 -1
  119. data/lib/mail/parts_list.rb +5 -6
  120. data/lib/mail/utilities.rb +63 -18
  121. data/lib/mail/version.rb +2 -2
  122. data/lib/mail/version_specific/ruby_1_8.rb +40 -3
  123. data/lib/mail/version_specific/ruby_1_9.rb +64 -9
  124. data/lib/mail.rb +3 -16
  125. metadata +30 -53
  126. data/CHANGELOG.rdoc +0 -787
  127. data/CONTRIBUTING.md +0 -60
  128. data/Dependencies.txt +0 -2
  129. data/Gemfile +0 -11
  130. data/Rakefile +0 -29
  131. data/TODO.rdoc +0 -9
  132. data/lib/mail/core_extensions/string/access.rb +0 -146
  133. data/lib/mail/core_extensions/string/multibyte.rb +0 -79
  134. data/lib/mail/multibyte/exceptions.rb +0 -9
  135. data/lib/mail/parsers/ragel/common.rl +0 -185
  136. data/lib/mail/parsers/ragel/parser_info.rb +0 -61
  137. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb +0 -14864
  138. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl +0 -37
  139. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb +0 -751
  140. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl +0 -37
  141. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb +0 -614
  142. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl +0 -37
  143. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb +0 -447
  144. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl +0 -37
  145. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb +0 -825
  146. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl +0 -37
  147. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb +0 -817
  148. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl +0 -37
  149. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb +0 -2149
  150. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl +0 -37
  151. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb +0 -1570
  152. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl +0 -37
  153. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb +0 -440
  154. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl +0 -37
  155. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb +0 -564
  156. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl +0 -37
  157. data/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl +0 -51
  158. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb +0 -5144
  159. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl +0 -37
  160. data/lib/mail/parsers/ragel/ruby/parser.rb.rl.erb +0 -37
  161. data/lib/mail/parsers/ragel/ruby.rb +0 -40
  162. data/lib/mail/parsers/ragel.rb +0 -18
@@ -1,66 +1,1044 @@
1
+
1
2
  # frozen_string_literal: true
3
+ require 'mail/utilities'
4
+ require 'mail/parser_tools'
5
+
6
+
7
+
8
+
2
9
  module Mail::Parsers
3
- class ContentTypeParser
4
- include Mail::Utilities
10
+ module ContentTypeParser
11
+ extend Mail::ParserTools
5
12
 
6
- def parse(s)
7
- actions, error = Ragel.parse(:content_type, s)
8
- if error
9
- raise Mail::Field::ParseError.new(Mail::ContentTypeElement, s, error)
10
- end
13
+ ContentTypeStruct = Struct.new(:main_type, :sub_type, :parameters, :error)
11
14
 
12
- content_type = ContentTypeStruct.new(nil,nil,[])
15
+
16
+ class << self
17
+ attr_accessor :_trans_keys
18
+ private :_trans_keys, :_trans_keys=
19
+ end
20
+ self._trans_keys = [
21
+ 0, 0, 33, 126, 33, 126,
22
+ 33, 126, 9, 126, 10,
23
+ 10, 9, 32, 33, 126,
24
+ 9, 126, 9, 40, 10, 10,
25
+ 9, 32, 1, 244, 1,
26
+ 244, 10, 10, 9, 32,
27
+ 10, 10, 9, 32, 9, 126,
28
+ 9, 126, 10, 10, 9,
29
+ 32, 9, 126, 0, 244,
30
+ 128, 191, 160, 191, 128, 191,
31
+ 128, 159, 144, 191, 128,
32
+ 191, 128, 143, 9, 40,
33
+ 10, 10, 9, 32, 9, 126,
34
+ 1, 244, 1, 244, 10,
35
+ 10, 9, 32, 0, 244,
36
+ 128, 191, 160, 191, 128, 191,
37
+ 128, 159, 144, 191, 128,
38
+ 191, 128, 143, 9, 126,
39
+ 9, 59, 9, 126, 9, 126,
40
+ 9, 126, 9, 126, 9,
41
+ 126, 0, 0, 0
42
+ ]
13
43
 
14
- content_type.parameters = []
44
+ class << self
45
+ attr_accessor :_key_spans
46
+ private :_key_spans, :_key_spans=
47
+ end
48
+ self._key_spans = [
49
+ 0, 94, 94, 94, 118, 1, 24, 94,
50
+ 118, 32, 1, 24, 244, 244, 1, 24,
51
+ 1, 24, 118, 118, 1, 24, 118, 245,
52
+ 64, 32, 64, 32, 48, 64, 16, 32,
53
+ 1, 24, 118, 244, 244, 1, 24, 245,
54
+ 64, 32, 64, 32, 48, 64, 16, 118,
55
+ 51, 118, 118, 118, 118, 118, 0
56
+ ]
15
57
 
58
+ class << self
59
+ attr_accessor :_index_offsets
60
+ private :_index_offsets, :_index_offsets=
61
+ end
62
+ self._index_offsets = [
63
+ 0, 0, 95, 190, 285, 404, 406, 431,
64
+ 526, 645, 678, 680, 705, 950, 1195, 1197,
65
+ 1222, 1224, 1249, 1368, 1487, 1489, 1514, 1633,
66
+ 1879, 1944, 1977, 2042, 2075, 2124, 2189, 2206,
67
+ 2239, 2241, 2266, 2385, 2630, 2875, 2877, 2902,
68
+ 3148, 3213, 3246, 3311, 3344, 3393, 3458, 3475,
69
+ 3594, 3646, 3765, 3884, 4003, 4122, 4241
70
+ ]
71
+
72
+ class << self
73
+ attr_accessor :_indicies
74
+ private :_indicies, :_indicies=
75
+ end
76
+ self._indicies = [
77
+ 0, 0, 0, 0, 0, 0, 0, 1,
78
+ 1, 0, 0, 0, 0, 0, 1, 0,
79
+ 0, 0, 0, 0, 0, 0, 0, 0,
80
+ 0, 1, 1, 1, 1, 1, 1, 1,
81
+ 0, 0, 0, 0, 0, 0, 0, 0,
82
+ 0, 0, 0, 0, 0, 0, 0, 0,
83
+ 0, 0, 0, 0, 0, 0, 0, 0,
84
+ 0, 0, 1, 1, 1, 0, 0, 0,
85
+ 0, 0, 0, 0, 0, 0, 0, 0,
86
+ 0, 0, 0, 0, 0, 0, 0, 0,
87
+ 0, 0, 0, 0, 0, 0, 0, 0,
88
+ 0, 0, 0, 0, 0, 0, 1, 2,
89
+ 2, 2, 2, 2, 2, 2, 1, 1,
90
+ 2, 2, 2, 2, 2, 3, 2, 2,
91
+ 2, 2, 2, 2, 2, 2, 2, 2,
92
+ 1, 1, 1, 1, 1, 1, 1, 2,
93
+ 2, 2, 2, 2, 2, 2, 2, 2,
94
+ 2, 2, 2, 2, 2, 2, 2, 2,
95
+ 2, 2, 2, 2, 2, 2, 2, 2,
96
+ 2, 1, 1, 1, 2, 2, 2, 2,
97
+ 2, 2, 2, 2, 2, 2, 2, 2,
98
+ 2, 2, 2, 2, 2, 2, 2, 2,
99
+ 2, 2, 2, 2, 2, 2, 2, 2,
100
+ 2, 2, 2, 2, 2, 1, 4, 4,
101
+ 4, 4, 4, 4, 4, 1, 1, 4,
102
+ 4, 4, 4, 4, 1, 4, 4, 4,
103
+ 4, 4, 4, 4, 4, 4, 4, 1,
104
+ 1, 1, 1, 1, 1, 1, 4, 4,
105
+ 4, 4, 4, 4, 4, 4, 4, 4,
106
+ 4, 4, 4, 4, 4, 4, 4, 4,
107
+ 4, 4, 4, 4, 4, 4, 4, 4,
108
+ 1, 1, 1, 4, 4, 4, 4, 4,
109
+ 4, 4, 4, 4, 4, 4, 4, 4,
110
+ 4, 4, 4, 4, 4, 4, 4, 4,
111
+ 4, 4, 4, 4, 4, 4, 4, 4,
112
+ 4, 4, 4, 4, 1, 5, 1, 1,
113
+ 1, 6, 1, 1, 1, 1, 1, 1,
114
+ 1, 1, 1, 1, 1, 1, 1, 1,
115
+ 1, 1, 1, 1, 5, 7, 7, 7,
116
+ 7, 7, 7, 7, 8, 1, 7, 7,
117
+ 7, 7, 7, 1, 7, 7, 7, 7,
118
+ 7, 7, 7, 7, 7, 7, 1, 9,
119
+ 1, 1, 1, 1, 1, 7, 7, 7,
120
+ 7, 7, 7, 7, 7, 7, 7, 7,
121
+ 7, 7, 7, 7, 7, 7, 7, 7,
122
+ 7, 7, 7, 7, 7, 7, 7, 1,
123
+ 1, 1, 7, 7, 7, 7, 7, 7,
124
+ 7, 7, 7, 7, 7, 7, 7, 7,
125
+ 7, 7, 7, 7, 7, 7, 7, 7,
126
+ 7, 7, 7, 7, 7, 7, 7, 7,
127
+ 7, 7, 7, 1, 10, 1, 5, 1,
128
+ 1, 1, 1, 1, 1, 1, 1, 1,
129
+ 1, 1, 1, 1, 1, 1, 1, 1,
130
+ 1, 1, 1, 1, 1, 5, 1, 11,
131
+ 11, 11, 11, 11, 11, 11, 1, 1,
132
+ 11, 11, 11, 11, 11, 1, 11, 11,
133
+ 11, 11, 11, 11, 11, 11, 11, 11,
134
+ 1, 1, 1, 12, 1, 1, 1, 11,
135
+ 11, 11, 11, 11, 11, 11, 11, 11,
136
+ 11, 11, 11, 11, 11, 11, 11, 11,
137
+ 11, 11, 11, 11, 11, 11, 11, 11,
138
+ 11, 1, 1, 1, 11, 11, 11, 11,
139
+ 11, 11, 11, 11, 11, 11, 11, 11,
140
+ 11, 11, 11, 11, 11, 11, 11, 11,
141
+ 11, 11, 11, 11, 11, 11, 11, 11,
142
+ 11, 11, 11, 11, 11, 1, 13, 1,
143
+ 1, 1, 14, 1, 1, 1, 1, 1,
144
+ 1, 1, 1, 1, 1, 1, 1, 1,
145
+ 1, 1, 1, 1, 1, 13, 15, 16,
146
+ 15, 15, 15, 15, 15, 17, 1, 15,
147
+ 15, 15, 15, 15, 1, 15, 15, 15,
148
+ 15, 15, 15, 15, 15, 15, 15, 1,
149
+ 1, 1, 15, 1, 1, 1, 15, 15,
150
+ 15, 15, 15, 15, 15, 15, 15, 15,
151
+ 15, 15, 15, 15, 15, 15, 15, 15,
152
+ 15, 15, 15, 15, 15, 15, 15, 15,
153
+ 1, 1, 1, 15, 15, 15, 15, 15,
154
+ 15, 15, 15, 15, 15, 15, 15, 15,
155
+ 15, 15, 15, 15, 15, 15, 15, 15,
156
+ 15, 15, 15, 15, 15, 15, 15, 15,
157
+ 15, 15, 15, 15, 1, 18, 1, 1,
158
+ 1, 19, 1, 1, 1, 1, 1, 1,
159
+ 1, 1, 1, 1, 1, 1, 1, 1,
160
+ 1, 1, 1, 1, 18, 1, 20, 1,
161
+ 1, 1, 1, 1, 21, 1, 22, 1,
162
+ 18, 1, 1, 1, 1, 1, 1, 1,
163
+ 1, 1, 1, 1, 1, 1, 1, 1,
164
+ 1, 1, 1, 1, 1, 1, 1, 18,
165
+ 1, 23, 23, 23, 23, 23, 23, 23,
166
+ 23, 23, 1, 23, 23, 24, 23, 23,
167
+ 23, 23, 23, 23, 23, 23, 23, 23,
168
+ 23, 23, 23, 23, 23, 23, 23, 23,
169
+ 23, 23, 25, 23, 23, 23, 23, 23,
170
+ 23, 23, 23, 23, 23, 23, 23, 23,
171
+ 23, 23, 23, 23, 23, 23, 23, 23,
172
+ 23, 23, 23, 23, 23, 23, 23, 23,
173
+ 23, 23, 23, 23, 23, 23, 23, 23,
174
+ 23, 23, 23, 23, 23, 23, 23, 23,
175
+ 23, 23, 23, 23, 23, 23, 23, 23,
176
+ 23, 23, 23, 23, 26, 23, 23, 23,
177
+ 23, 23, 23, 23, 23, 23, 23, 23,
178
+ 23, 23, 23, 23, 23, 23, 23, 23,
179
+ 23, 23, 23, 23, 23, 23, 23, 23,
180
+ 23, 23, 23, 23, 23, 23, 23, 23,
181
+ 1, 1, 1, 1, 1, 1, 1, 1,
182
+ 1, 1, 1, 1, 1, 1, 1, 1,
183
+ 1, 1, 1, 1, 1, 1, 1, 1,
184
+ 1, 1, 1, 1, 1, 1, 1, 1,
185
+ 1, 1, 1, 1, 1, 1, 1, 1,
186
+ 1, 1, 1, 1, 1, 1, 1, 1,
187
+ 1, 1, 1, 1, 1, 1, 1, 1,
188
+ 1, 1, 1, 1, 1, 1, 1, 1,
189
+ 1, 1, 27, 27, 27, 27, 27, 27,
190
+ 27, 27, 27, 27, 27, 27, 27, 27,
191
+ 27, 27, 27, 27, 27, 27, 27, 27,
192
+ 27, 27, 27, 27, 27, 27, 27, 27,
193
+ 28, 29, 29, 29, 29, 29, 29, 29,
194
+ 29, 29, 29, 29, 29, 30, 29, 29,
195
+ 31, 32, 32, 32, 33, 1, 34, 34,
196
+ 34, 34, 34, 34, 34, 34, 34, 1,
197
+ 34, 34, 35, 34, 34, 34, 34, 34,
198
+ 34, 34, 34, 34, 34, 34, 34, 34,
199
+ 34, 34, 34, 34, 34, 34, 34, 36,
200
+ 34, 34, 34, 34, 34, 34, 34, 34,
201
+ 34, 34, 34, 34, 34, 34, 34, 34,
202
+ 34, 34, 34, 34, 34, 34, 34, 34,
203
+ 34, 34, 34, 34, 34, 34, 34, 34,
204
+ 34, 34, 34, 34, 34, 34, 34, 34,
205
+ 34, 34, 34, 34, 34, 34, 34, 34,
206
+ 34, 34, 34, 34, 34, 34, 34, 34,
207
+ 34, 37, 34, 34, 34, 34, 34, 34,
208
+ 34, 34, 34, 34, 34, 34, 34, 34,
209
+ 34, 34, 34, 34, 34, 34, 34, 34,
210
+ 34, 34, 34, 34, 34, 34, 34, 34,
211
+ 34, 34, 34, 34, 34, 1, 1, 1,
212
+ 1, 1, 1, 1, 1, 1, 1, 1,
213
+ 1, 1, 1, 1, 1, 1, 1, 1,
214
+ 1, 1, 1, 1, 1, 1, 1, 1,
215
+ 1, 1, 1, 1, 1, 1, 1, 1,
216
+ 1, 1, 1, 1, 1, 1, 1, 1,
217
+ 1, 1, 1, 1, 1, 1, 1, 1,
218
+ 1, 1, 1, 1, 1, 1, 1, 1,
219
+ 1, 1, 1, 1, 1, 1, 1, 38,
220
+ 38, 38, 38, 38, 38, 38, 38, 38,
221
+ 38, 38, 38, 38, 38, 38, 38, 38,
222
+ 38, 38, 38, 38, 38, 38, 38, 38,
223
+ 38, 38, 38, 38, 38, 39, 40, 40,
224
+ 40, 40, 40, 40, 40, 40, 40, 40,
225
+ 40, 40, 41, 40, 40, 42, 43, 43,
226
+ 43, 44, 1, 45, 1, 34, 1, 1,
227
+ 1, 1, 1, 1, 1, 1, 1, 1,
228
+ 1, 1, 1, 1, 1, 1, 1, 1,
229
+ 1, 1, 1, 1, 34, 1, 46, 1,
230
+ 47, 1, 1, 1, 1, 1, 1, 1,
231
+ 1, 1, 1, 1, 1, 1, 1, 1,
232
+ 1, 1, 1, 1, 1, 1, 1, 47,
233
+ 1, 48, 1, 1, 1, 49, 1, 1,
234
+ 1, 1, 1, 1, 1, 1, 1, 1,
235
+ 1, 1, 1, 1, 1, 1, 1, 1,
236
+ 48, 7, 7, 7, 7, 7, 7, 7,
237
+ 50, 1, 7, 7, 7, 7, 7, 1,
238
+ 7, 7, 7, 7, 7, 7, 7, 7,
239
+ 7, 7, 1, 9, 1, 1, 1, 1,
240
+ 1, 7, 7, 7, 7, 7, 7, 7,
241
+ 7, 7, 7, 7, 7, 7, 7, 7,
242
+ 7, 7, 7, 7, 7, 7, 7, 7,
243
+ 7, 7, 7, 1, 1, 1, 7, 7,
244
+ 7, 7, 7, 7, 7, 7, 7, 7,
245
+ 7, 7, 7, 7, 7, 7, 7, 7,
246
+ 7, 7, 7, 7, 7, 7, 7, 7,
247
+ 7, 7, 7, 7, 7, 7, 7, 1,
248
+ 48, 1, 1, 1, 49, 1, 1, 1,
249
+ 1, 1, 1, 1, 1, 1, 1, 1,
250
+ 1, 1, 1, 1, 1, 1, 1, 48,
251
+ 7, 7, 7, 7, 7, 7, 7, 50,
252
+ 1, 7, 7, 7, 7, 7, 1, 7,
253
+ 7, 7, 7, 7, 7, 7, 7, 7,
254
+ 7, 1, 1, 1, 1, 1, 1, 1,
255
+ 7, 7, 7, 7, 7, 7, 7, 7,
256
+ 7, 7, 7, 7, 7, 7, 7, 7,
257
+ 7, 7, 7, 7, 7, 7, 7, 7,
258
+ 7, 7, 1, 1, 1, 7, 7, 7,
259
+ 7, 7, 7, 7, 7, 7, 7, 7,
260
+ 7, 7, 7, 7, 7, 7, 7, 7,
261
+ 7, 7, 7, 7, 7, 7, 7, 7,
262
+ 7, 7, 7, 7, 7, 7, 1, 51,
263
+ 1, 48, 1, 1, 1, 1, 1, 1,
264
+ 1, 1, 1, 1, 1, 1, 1, 1,
265
+ 1, 1, 1, 1, 1, 1, 1, 1,
266
+ 48, 1, 52, 1, 1, 1, 53, 1,
267
+ 1, 1, 1, 1, 1, 1, 1, 1,
268
+ 1, 1, 1, 1, 1, 1, 1, 1,
269
+ 1, 52, 54, 54, 54, 54, 54, 54,
270
+ 54, 55, 1, 54, 54, 54, 54, 54,
271
+ 1, 54, 54, 54, 54, 54, 54, 54,
272
+ 54, 54, 54, 1, 1, 1, 1, 1,
273
+ 1, 1, 54, 54, 54, 54, 54, 54,
274
+ 54, 54, 54, 54, 54, 54, 54, 54,
275
+ 54, 54, 54, 54, 54, 54, 54, 54,
276
+ 54, 54, 54, 54, 1, 1, 1, 54,
277
+ 54, 54, 54, 54, 54, 54, 54, 54,
278
+ 54, 54, 54, 54, 54, 54, 54, 54,
279
+ 54, 54, 54, 54, 54, 54, 54, 54,
280
+ 54, 54, 54, 54, 54, 54, 54, 54,
281
+ 1, 34, 34, 34, 34, 34, 34, 34,
282
+ 34, 34, 34, 34, 34, 34, 34, 34,
283
+ 34, 34, 34, 34, 34, 34, 34, 34,
284
+ 34, 34, 34, 34, 34, 34, 34, 34,
285
+ 34, 34, 34, 34, 34, 34, 34, 34,
286
+ 34, 34, 34, 34, 34, 34, 34, 34,
287
+ 34, 34, 34, 34, 34, 34, 34, 34,
288
+ 34, 34, 34, 34, 34, 34, 34, 34,
289
+ 34, 34, 34, 34, 34, 34, 34, 34,
290
+ 34, 34, 34, 34, 34, 34, 34, 34,
291
+ 34, 34, 34, 34, 34, 34, 34, 34,
292
+ 34, 34, 34, 34, 34, 34, 34, 34,
293
+ 34, 34, 34, 34, 34, 34, 34, 34,
294
+ 34, 34, 34, 34, 34, 34, 34, 34,
295
+ 34, 34, 34, 34, 34, 34, 34, 34,
296
+ 34, 34, 34, 34, 34, 34, 34, 34,
297
+ 34, 1, 1, 1, 1, 1, 1, 1,
298
+ 1, 1, 1, 1, 1, 1, 1, 1,
299
+ 1, 1, 1, 1, 1, 1, 1, 1,
300
+ 1, 1, 1, 1, 1, 1, 1, 1,
301
+ 1, 1, 1, 1, 1, 1, 1, 1,
302
+ 1, 1, 1, 1, 1, 1, 1, 1,
303
+ 1, 1, 1, 1, 1, 1, 1, 1,
304
+ 1, 1, 1, 1, 1, 1, 1, 1,
305
+ 1, 1, 1, 38, 38, 38, 38, 38,
306
+ 38, 38, 38, 38, 38, 38, 38, 38,
307
+ 38, 38, 38, 38, 38, 38, 38, 38,
308
+ 38, 38, 38, 38, 38, 38, 38, 38,
309
+ 38, 39, 40, 40, 40, 40, 40, 40,
310
+ 40, 40, 40, 40, 40, 40, 41, 40,
311
+ 40, 42, 43, 43, 43, 44, 1, 34,
312
+ 34, 34, 34, 34, 34, 34, 34, 34,
313
+ 34, 34, 34, 34, 34, 34, 34, 34,
314
+ 34, 34, 34, 34, 34, 34, 34, 34,
315
+ 34, 34, 34, 34, 34, 34, 34, 34,
316
+ 34, 34, 34, 34, 34, 34, 34, 34,
317
+ 34, 34, 34, 34, 34, 34, 34, 34,
318
+ 34, 34, 34, 34, 34, 34, 34, 34,
319
+ 34, 34, 34, 34, 34, 34, 34, 1,
320
+ 38, 38, 38, 38, 38, 38, 38, 38,
321
+ 38, 38, 38, 38, 38, 38, 38, 38,
322
+ 38, 38, 38, 38, 38, 38, 38, 38,
323
+ 38, 38, 38, 38, 38, 38, 38, 38,
324
+ 1, 38, 38, 38, 38, 38, 38, 38,
325
+ 38, 38, 38, 38, 38, 38, 38, 38,
326
+ 38, 38, 38, 38, 38, 38, 38, 38,
327
+ 38, 38, 38, 38, 38, 38, 38, 38,
328
+ 38, 38, 38, 38, 38, 38, 38, 38,
329
+ 38, 38, 38, 38, 38, 38, 38, 38,
330
+ 38, 38, 38, 38, 38, 38, 38, 38,
331
+ 38, 38, 38, 38, 38, 38, 38, 38,
332
+ 38, 1, 38, 38, 38, 38, 38, 38,
333
+ 38, 38, 38, 38, 38, 38, 38, 38,
334
+ 38, 38, 38, 38, 38, 38, 38, 38,
335
+ 38, 38, 38, 38, 38, 38, 38, 38,
336
+ 38, 38, 1, 40, 40, 40, 40, 40,
337
+ 40, 40, 40, 40, 40, 40, 40, 40,
338
+ 40, 40, 40, 40, 40, 40, 40, 40,
339
+ 40, 40, 40, 40, 40, 40, 40, 40,
340
+ 40, 40, 40, 40, 40, 40, 40, 40,
341
+ 40, 40, 40, 40, 40, 40, 40, 40,
342
+ 40, 40, 40, 1, 40, 40, 40, 40,
343
+ 40, 40, 40, 40, 40, 40, 40, 40,
344
+ 40, 40, 40, 40, 40, 40, 40, 40,
345
+ 40, 40, 40, 40, 40, 40, 40, 40,
346
+ 40, 40, 40, 40, 40, 40, 40, 40,
347
+ 40, 40, 40, 40, 40, 40, 40, 40,
348
+ 40, 40, 40, 40, 40, 40, 40, 40,
349
+ 40, 40, 40, 40, 40, 40, 40, 40,
350
+ 40, 40, 40, 40, 1, 40, 40, 40,
351
+ 40, 40, 40, 40, 40, 40, 40, 40,
352
+ 40, 40, 40, 40, 40, 1, 56, 1,
353
+ 1, 1, 57, 1, 1, 1, 1, 1,
354
+ 1, 1, 1, 1, 1, 1, 1, 1,
355
+ 1, 1, 1, 1, 1, 56, 1, 58,
356
+ 1, 1, 1, 1, 1, 59, 1, 60,
357
+ 1, 61, 1, 1, 1, 1, 1, 1,
358
+ 1, 1, 1, 1, 1, 1, 1, 1,
359
+ 1, 1, 1, 1, 1, 1, 1, 1,
360
+ 61, 1, 62, 1, 1, 1, 63, 1,
361
+ 1, 1, 1, 1, 1, 1, 1, 1,
362
+ 1, 1, 1, 1, 1, 1, 1, 1,
363
+ 1, 62, 54, 54, 54, 54, 54, 54,
364
+ 54, 64, 1, 54, 54, 54, 54, 54,
365
+ 1, 54, 54, 54, 54, 54, 54, 54,
366
+ 54, 54, 54, 1, 65, 1, 1, 1,
367
+ 1, 1, 54, 54, 54, 54, 54, 54,
368
+ 54, 54, 54, 54, 54, 54, 54, 54,
369
+ 54, 54, 54, 54, 54, 54, 54, 54,
370
+ 54, 54, 54, 54, 1, 1, 1, 54,
371
+ 54, 54, 54, 54, 54, 54, 54, 54,
372
+ 54, 54, 54, 54, 54, 54, 54, 54,
373
+ 54, 54, 54, 54, 54, 54, 54, 54,
374
+ 54, 54, 54, 54, 54, 54, 54, 54,
375
+ 1, 66, 66, 66, 66, 66, 66, 66,
376
+ 66, 66, 1, 66, 66, 67, 66, 66,
377
+ 66, 66, 66, 66, 66, 66, 66, 66,
378
+ 66, 66, 66, 66, 66, 66, 66, 66,
379
+ 66, 66, 66, 66, 66, 66, 66, 66,
380
+ 68, 69, 66, 66, 66, 66, 66, 66,
381
+ 66, 66, 66, 66, 66, 66, 66, 66,
382
+ 66, 66, 66, 66, 66, 66, 66, 66,
383
+ 66, 66, 66, 66, 66, 66, 66, 66,
384
+ 66, 66, 66, 66, 66, 66, 66, 66,
385
+ 66, 66, 66, 66, 66, 66, 66, 66,
386
+ 66, 66, 66, 66, 70, 66, 66, 66,
387
+ 66, 66, 66, 66, 66, 66, 66, 66,
388
+ 66, 66, 66, 66, 66, 66, 66, 66,
389
+ 66, 66, 66, 66, 66, 66, 66, 66,
390
+ 66, 66, 66, 66, 66, 66, 66, 66,
391
+ 1, 1, 1, 1, 1, 1, 1, 1,
392
+ 1, 1, 1, 1, 1, 1, 1, 1,
393
+ 1, 1, 1, 1, 1, 1, 1, 1,
394
+ 1, 1, 1, 1, 1, 1, 1, 1,
395
+ 1, 1, 1, 1, 1, 1, 1, 1,
396
+ 1, 1, 1, 1, 1, 1, 1, 1,
397
+ 1, 1, 1, 1, 1, 1, 1, 1,
398
+ 1, 1, 1, 1, 1, 1, 1, 1,
399
+ 1, 1, 71, 71, 71, 71, 71, 71,
400
+ 71, 71, 71, 71, 71, 71, 71, 71,
401
+ 71, 71, 71, 71, 71, 71, 71, 71,
402
+ 71, 71, 71, 71, 71, 71, 71, 71,
403
+ 72, 73, 73, 73, 73, 73, 73, 73,
404
+ 73, 73, 73, 73, 73, 74, 73, 73,
405
+ 75, 76, 76, 76, 77, 1, 78, 78,
406
+ 78, 78, 78, 78, 78, 78, 78, 1,
407
+ 78, 78, 79, 78, 78, 78, 78, 78,
408
+ 78, 78, 78, 78, 78, 78, 78, 78,
409
+ 78, 78, 78, 78, 78, 78, 78, 78,
410
+ 78, 78, 78, 78, 78, 80, 81, 78,
411
+ 78, 78, 78, 78, 78, 78, 78, 78,
412
+ 78, 78, 78, 78, 78, 78, 78, 78,
413
+ 78, 78, 78, 78, 78, 78, 78, 78,
414
+ 78, 78, 78, 78, 78, 78, 78, 78,
415
+ 78, 78, 78, 78, 78, 78, 78, 78,
416
+ 78, 78, 78, 78, 78, 78, 78, 78,
417
+ 78, 82, 78, 78, 78, 78, 78, 78,
418
+ 78, 78, 78, 78, 78, 78, 78, 78,
419
+ 78, 78, 78, 78, 78, 78, 78, 78,
420
+ 78, 78, 78, 78, 78, 78, 78, 78,
421
+ 78, 78, 78, 78, 78, 1, 1, 1,
422
+ 1, 1, 1, 1, 1, 1, 1, 1,
423
+ 1, 1, 1, 1, 1, 1, 1, 1,
424
+ 1, 1, 1, 1, 1, 1, 1, 1,
425
+ 1, 1, 1, 1, 1, 1, 1, 1,
426
+ 1, 1, 1, 1, 1, 1, 1, 1,
427
+ 1, 1, 1, 1, 1, 1, 1, 1,
428
+ 1, 1, 1, 1, 1, 1, 1, 1,
429
+ 1, 1, 1, 1, 1, 1, 1, 83,
430
+ 83, 83, 83, 83, 83, 83, 83, 83,
431
+ 83, 83, 83, 83, 83, 83, 83, 83,
432
+ 83, 83, 83, 83, 83, 83, 83, 83,
433
+ 83, 83, 83, 83, 83, 84, 85, 85,
434
+ 85, 85, 85, 85, 85, 85, 85, 85,
435
+ 85, 85, 86, 85, 85, 87, 88, 88,
436
+ 88, 89, 1, 90, 1, 78, 1, 1,
437
+ 1, 1, 1, 1, 1, 1, 1, 1,
438
+ 1, 1, 1, 1, 1, 1, 1, 1,
439
+ 1, 1, 1, 1, 78, 1, 78, 78,
440
+ 78, 78, 78, 78, 78, 78, 78, 78,
441
+ 78, 78, 78, 78, 78, 78, 78, 78,
442
+ 78, 78, 78, 78, 78, 78, 78, 78,
443
+ 78, 78, 78, 78, 78, 78, 78, 78,
444
+ 78, 78, 78, 78, 78, 78, 78, 78,
445
+ 78, 78, 78, 78, 78, 78, 78, 78,
446
+ 78, 78, 78, 78, 78, 78, 78, 78,
447
+ 78, 78, 78, 78, 78, 78, 78, 78,
448
+ 78, 78, 78, 78, 78, 78, 78, 78,
449
+ 78, 78, 78, 78, 78, 78, 78, 78,
450
+ 78, 78, 78, 78, 78, 78, 78, 78,
451
+ 78, 78, 78, 78, 78, 78, 78, 78,
452
+ 78, 78, 78, 78, 78, 78, 78, 78,
453
+ 78, 78, 78, 78, 78, 78, 78, 78,
454
+ 78, 78, 78, 78, 78, 78, 78, 78,
455
+ 78, 78, 78, 78, 78, 78, 1, 1,
456
+ 1, 1, 1, 1, 1, 1, 1, 1,
457
+ 1, 1, 1, 1, 1, 1, 1, 1,
458
+ 1, 1, 1, 1, 1, 1, 1, 1,
459
+ 1, 1, 1, 1, 1, 1, 1, 1,
460
+ 1, 1, 1, 1, 1, 1, 1, 1,
461
+ 1, 1, 1, 1, 1, 1, 1, 1,
462
+ 1, 1, 1, 1, 1, 1, 1, 1,
463
+ 1, 1, 1, 1, 1, 1, 1, 1,
464
+ 83, 83, 83, 83, 83, 83, 83, 83,
465
+ 83, 83, 83, 83, 83, 83, 83, 83,
466
+ 83, 83, 83, 83, 83, 83, 83, 83,
467
+ 83, 83, 83, 83, 83, 83, 84, 85,
468
+ 85, 85, 85, 85, 85, 85, 85, 85,
469
+ 85, 85, 85, 86, 85, 85, 87, 88,
470
+ 88, 88, 89, 1, 78, 78, 78, 78,
471
+ 78, 78, 78, 78, 78, 78, 78, 78,
472
+ 78, 78, 78, 78, 78, 78, 78, 78,
473
+ 78, 78, 78, 78, 78, 78, 78, 78,
474
+ 78, 78, 78, 78, 78, 78, 78, 78,
475
+ 78, 78, 78, 78, 78, 78, 78, 78,
476
+ 78, 78, 78, 78, 78, 78, 78, 78,
477
+ 78, 78, 78, 78, 78, 78, 78, 78,
478
+ 78, 78, 78, 78, 1, 83, 83, 83,
479
+ 83, 83, 83, 83, 83, 83, 83, 83,
480
+ 83, 83, 83, 83, 83, 83, 83, 83,
481
+ 83, 83, 83, 83, 83, 83, 83, 83,
482
+ 83, 83, 83, 83, 83, 1, 83, 83,
483
+ 83, 83, 83, 83, 83, 83, 83, 83,
484
+ 83, 83, 83, 83, 83, 83, 83, 83,
485
+ 83, 83, 83, 83, 83, 83, 83, 83,
486
+ 83, 83, 83, 83, 83, 83, 83, 83,
487
+ 83, 83, 83, 83, 83, 83, 83, 83,
488
+ 83, 83, 83, 83, 83, 83, 83, 83,
489
+ 83, 83, 83, 83, 83, 83, 83, 83,
490
+ 83, 83, 83, 83, 83, 83, 1, 83,
491
+ 83, 83, 83, 83, 83, 83, 83, 83,
492
+ 83, 83, 83, 83, 83, 83, 83, 83,
493
+ 83, 83, 83, 83, 83, 83, 83, 83,
494
+ 83, 83, 83, 83, 83, 83, 83, 1,
495
+ 85, 85, 85, 85, 85, 85, 85, 85,
496
+ 85, 85, 85, 85, 85, 85, 85, 85,
497
+ 85, 85, 85, 85, 85, 85, 85, 85,
498
+ 85, 85, 85, 85, 85, 85, 85, 85,
499
+ 85, 85, 85, 85, 85, 85, 85, 85,
500
+ 85, 85, 85, 85, 85, 85, 85, 85,
501
+ 1, 85, 85, 85, 85, 85, 85, 85,
502
+ 85, 85, 85, 85, 85, 85, 85, 85,
503
+ 85, 85, 85, 85, 85, 85, 85, 85,
504
+ 85, 85, 85, 85, 85, 85, 85, 85,
505
+ 85, 85, 85, 85, 85, 85, 85, 85,
506
+ 85, 85, 85, 85, 85, 85, 85, 85,
507
+ 85, 85, 85, 85, 85, 85, 85, 85,
508
+ 85, 85, 85, 85, 85, 85, 85, 85,
509
+ 85, 1, 85, 85, 85, 85, 85, 85,
510
+ 85, 85, 85, 85, 85, 85, 85, 85,
511
+ 85, 85, 1, 91, 1, 1, 1, 92,
512
+ 1, 1, 1, 1, 1, 1, 1, 1,
513
+ 1, 1, 1, 1, 1, 1, 1, 1,
514
+ 1, 1, 91, 93, 93, 93, 93, 93,
515
+ 93, 93, 94, 1, 93, 93, 93, 93,
516
+ 93, 1, 93, 93, 93, 93, 93, 93,
517
+ 93, 93, 93, 93, 1, 95, 1, 1,
518
+ 1, 1, 1, 93, 93, 93, 93, 93,
519
+ 93, 93, 93, 93, 93, 93, 93, 93,
520
+ 93, 93, 93, 93, 93, 93, 93, 93,
521
+ 93, 93, 93, 93, 93, 1, 1, 1,
522
+ 93, 93, 93, 93, 93, 93, 93, 93,
523
+ 93, 93, 93, 93, 93, 93, 93, 93,
524
+ 93, 93, 93, 93, 93, 93, 93, 93,
525
+ 93, 93, 93, 93, 93, 93, 93, 93,
526
+ 93, 1, 96, 1, 1, 1, 97, 1,
527
+ 1, 1, 1, 1, 1, 1, 1, 1,
528
+ 1, 1, 1, 1, 1, 1, 1, 1,
529
+ 1, 96, 1, 1, 1, 1, 1, 1,
530
+ 1, 98, 1, 1, 1, 1, 1, 1,
531
+ 1, 1, 1, 1, 1, 1, 1, 1,
532
+ 1, 1, 1, 1, 99, 1, 96, 1,
533
+ 1, 1, 97, 1, 1, 1, 1, 1,
534
+ 1, 1, 1, 1, 1, 1, 1, 1,
535
+ 1, 1, 1, 1, 1, 96, 7, 7,
536
+ 7, 7, 7, 7, 7, 98, 1, 7,
537
+ 7, 7, 7, 7, 1, 7, 7, 7,
538
+ 7, 7, 7, 7, 7, 7, 7, 1,
539
+ 99, 1, 1, 1, 1, 1, 7, 7,
540
+ 7, 7, 7, 7, 7, 7, 7, 7,
541
+ 7, 7, 7, 7, 7, 7, 7, 7,
542
+ 7, 7, 7, 7, 7, 7, 7, 7,
543
+ 1, 1, 1, 7, 7, 7, 7, 7,
544
+ 7, 7, 7, 7, 7, 7, 7, 7,
545
+ 7, 7, 7, 7, 7, 7, 7, 7,
546
+ 7, 7, 7, 7, 7, 7, 7, 7,
547
+ 7, 7, 7, 7, 1, 100, 1, 1,
548
+ 1, 101, 1, 1, 1, 1, 1, 1,
549
+ 1, 1, 1, 1, 1, 1, 1, 1,
550
+ 1, 1, 1, 1, 100, 54, 54, 54,
551
+ 54, 54, 54, 54, 102, 1, 54, 54,
552
+ 54, 54, 54, 1, 54, 54, 54, 54,
553
+ 54, 54, 54, 54, 54, 54, 1, 103,
554
+ 1, 1, 1, 1, 1, 54, 54, 54,
555
+ 54, 54, 54, 54, 54, 54, 54, 54,
556
+ 54, 54, 54, 54, 54, 54, 54, 54,
557
+ 54, 54, 54, 54, 54, 54, 54, 1,
558
+ 1, 1, 54, 54, 54, 54, 54, 54,
559
+ 54, 54, 54, 54, 54, 54, 54, 54,
560
+ 54, 54, 54, 54, 54, 54, 54, 54,
561
+ 54, 54, 54, 54, 54, 54, 54, 54,
562
+ 54, 54, 54, 1, 104, 1, 1, 1,
563
+ 105, 1, 1, 1, 1, 1, 1, 1,
564
+ 1, 1, 1, 1, 1, 1, 1, 1,
565
+ 1, 1, 1, 104, 106, 1, 106, 106,
566
+ 106, 106, 106, 107, 1, 106, 106, 106,
567
+ 106, 106, 1, 106, 106, 106, 106, 106,
568
+ 106, 106, 106, 106, 106, 1, 99, 1,
569
+ 106, 1, 1, 1, 106, 106, 106, 106,
570
+ 106, 106, 106, 106, 106, 106, 106, 106,
571
+ 106, 106, 106, 106, 106, 106, 106, 106,
572
+ 106, 106, 106, 106, 106, 106, 1, 1,
573
+ 1, 106, 106, 106, 106, 106, 106, 106,
574
+ 106, 106, 106, 106, 106, 106, 106, 106,
575
+ 106, 106, 106, 106, 106, 106, 106, 106,
576
+ 106, 106, 106, 106, 106, 106, 106, 106,
577
+ 106, 106, 1, 61, 1, 1, 1, 108,
578
+ 1, 1, 1, 1, 1, 1, 1, 1,
579
+ 1, 1, 1, 1, 1, 1, 1, 1,
580
+ 1, 1, 61, 7, 7, 7, 7, 7,
581
+ 7, 7, 109, 1, 7, 7, 7, 7,
582
+ 7, 1, 7, 7, 7, 7, 7, 7,
583
+ 7, 7, 7, 7, 1, 9, 1, 1,
584
+ 1, 1, 1, 7, 7, 7, 7, 7,
585
+ 7, 7, 7, 7, 7, 7, 7, 7,
586
+ 7, 7, 7, 7, 7, 7, 7, 7,
587
+ 7, 7, 7, 7, 7, 1, 1, 1,
588
+ 7, 7, 7, 7, 7, 7, 7, 7,
589
+ 7, 7, 7, 7, 7, 7, 7, 7,
590
+ 7, 7, 7, 7, 7, 7, 7, 7,
591
+ 7, 7, 7, 7, 7, 7, 7, 7,
592
+ 7, 1, 110, 1, 1, 1, 111, 1,
593
+ 1, 1, 1, 1, 1, 1, 1, 1,
594
+ 1, 1, 1, 1, 1, 1, 1, 1,
595
+ 1, 110, 54, 54, 54, 54, 54, 54,
596
+ 54, 112, 1, 54, 54, 54, 54, 54,
597
+ 1, 54, 54, 54, 54, 54, 54, 54,
598
+ 54, 54, 54, 1, 65, 1, 1, 1,
599
+ 1, 1, 54, 54, 54, 54, 54, 54,
600
+ 54, 54, 54, 54, 54, 54, 54, 54,
601
+ 54, 54, 54, 54, 54, 54, 54, 54,
602
+ 54, 54, 54, 54, 1, 1, 1, 54,
603
+ 54, 54, 54, 54, 54, 54, 54, 54,
604
+ 54, 54, 54, 54, 54, 54, 54, 54,
605
+ 54, 54, 54, 54, 54, 54, 54, 54,
606
+ 54, 54, 54, 54, 54, 54, 54, 54,
607
+ 1, 1, 0
608
+ ]
609
+
610
+ class << self
611
+ attr_accessor :_trans_targs
612
+ private :_trans_targs, :_trans_targs=
613
+ end
614
+ self._trans_targs = [
615
+ 2, 0, 2, 3, 47, 4, 5, 7,
616
+ 34, 18, 6, 7, 8, 9, 10, 51,
617
+ 12, 31, 9, 10, 12, 31, 11, 13,
618
+ 14, 48, 23, 24, 25, 26, 27, 28,
619
+ 29, 30, 13, 14, 48, 23, 24, 25,
620
+ 26, 27, 28, 29, 30, 15, 17, 49,
621
+ 19, 20, 22, 21, 19, 20, 7, 22,
622
+ 9, 10, 12, 31, 33, 52, 4, 5,
623
+ 34, 18, 36, 37, 36, 54, 39, 40,
624
+ 41, 42, 43, 44, 45, 46, 36, 37,
625
+ 36, 54, 39, 40, 41, 42, 43, 44,
626
+ 45, 46, 38, 4, 5, 47, 34, 18,
627
+ 49, 16, 50, 18, 49, 16, 50, 18,
628
+ 52, 32, 51, 53, 32, 53, 52, 32,
629
+ 53
630
+ ]
631
+
632
+ class << self
633
+ attr_accessor :_trans_actions
634
+ private :_trans_actions, :_trans_actions=
635
+ end
636
+ self._trans_actions = [
637
+ 1, 0, 0, 2, 3, 0, 0, 4,
638
+ 5, 0, 0, 0, 6, 7, 7, 7,
639
+ 7, 8, 0, 0, 0, 5, 0, 9,
640
+ 9, 10, 9, 9, 9, 9, 9, 9,
641
+ 9, 9, 0, 0, 11, 0, 0, 0,
642
+ 0, 0, 0, 0, 0, 0, 0, 0,
643
+ 0, 0, 5, 0, 12, 12, 13, 14,
644
+ 12, 12, 12, 14, 0, 0, 12, 12,
645
+ 14, 12, 15, 15, 16, 17, 15, 15,
646
+ 15, 15, 15, 15, 15, 15, 0, 0,
647
+ 5, 18, 0, 0, 0, 0, 0, 0,
648
+ 0, 0, 0, 19, 19, 0, 20, 19,
649
+ 21, 21, 22, 21, 23, 23, 24, 23,
650
+ 21, 21, 0, 25, 0, 5, 12, 12,
651
+ 14
652
+ ]
653
+
654
+ class << self
655
+ attr_accessor :_eof_actions
656
+ private :_eof_actions, :_eof_actions=
657
+ end
658
+ self._eof_actions = [
659
+ 0, 0, 0, 0, 0, 0, 0, 0,
660
+ 0, 0, 0, 0, 0, 0, 0, 0,
661
+ 0, 0, 0, 0, 0, 0, 0, 0,
662
+ 0, 0, 0, 0, 0, 0, 0, 0,
663
+ 0, 0, 0, 0, 0, 0, 0, 0,
664
+ 0, 0, 0, 0, 0, 0, 0, 19,
665
+ 21, 21, 23, 21, 0, 12, 0
666
+ ]
667
+
668
+ class << self
669
+ attr_accessor :start
670
+ end
671
+ self.start = 1;
672
+ class << self
673
+ attr_accessor :first_final
674
+ end
675
+ self.first_final = 47;
676
+ class << self
677
+ attr_accessor :error
678
+ end
679
+ self.error = 0;
680
+
681
+ class << self
682
+ attr_accessor :en_comment_tail
683
+ end
684
+ self.en_comment_tail = 35;
685
+ class << self
686
+ attr_accessor :en_main
687
+ end
688
+ self.en_main = 1;
689
+
690
+
691
+
692
+ def self.parse(data)
693
+ data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding)
694
+
695
+ return ContentTypeStruct.new('text', 'plain', []) if Mail::Utilities.blank?(data)
696
+ content_type = ContentTypeStruct.new(nil, nil, [])
697
+
698
+ # Parser state
16
699
  main_type_s = sub_type_s = param_attr_s = param_attr = nil
17
700
  qstr_s = qstr = param_val_s = nil
18
- actions.each_slice(2) do |action_id, p|
19
- action = Mail::Parsers::Ragel::ACTIONS[action_id]
20
- case action
21
-
22
- # Main Type
23
- when :main_type_s then main_type_s = p
24
- when :main_type_e then
25
- content_type.main_type = s[main_type_s..(p-1)]
26
- content_type.main_type.downcase!
27
-
28
- # Sub Type
29
- when :sub_type_s then sub_type_s = p
30
- when :sub_type_e
31
- content_type.sub_type = s[sub_type_s..(p-1)]
32
- content_type.sub_type.downcase!
33
-
34
- # Parameter Attribute
35
- when :param_attr_s then param_attr_s = p
36
- when :param_attr_e then param_attr = s[param_attr_s..(p-1)]
37
-
38
- # Quoted String.
39
- when :qstr_s then qstr_s = p
40
- when :qstr_e then qstr = s[qstr_s..(p-1)]
41
-
42
- # Parameter Value
43
- when :param_val_s then param_val_s = p
44
- when :param_val_e
45
- if param_attr.nil?
46
- raise Mail::Field::ParseError.new(Mail::ContentTypeElement, s, "no attribute for value")
47
- end
48
-
49
- # Use quoted s value if one exists, otherwise use parameter value
50
- if qstr
51
- value = qstr
52
- else
53
- value = s[param_val_s..(p-1)]
54
- end
55
-
56
- content_type.parameters << { param_attr => value }
57
- param_attr = nil
58
- qstr = nil
59
-
60
- else
61
- raise Mail::Field::ParseError.new(Mail::ContentTypeElement, s, "Failed to process unknown action: #{action}")
62
- end
701
+
702
+ # 5.1 Variables Used by Ragel
703
+ p = 0
704
+ eof = pe = data.length
705
+ stack = []
706
+
707
+
708
+ begin
709
+ p ||= 0
710
+ pe ||= data.length
711
+ cs = start
712
+ top = 0
713
+ end
714
+
715
+
716
+ begin
717
+ testEof = false
718
+ _slen, _trans, _keys, _inds, _acts, _nacts = nil
719
+ _goto_level = 0
720
+ _resume = 10
721
+ _eof_trans = 15
722
+ _again = 20
723
+ _test_eof = 30
724
+ _out = 40
725
+ while true
726
+ if _goto_level <= 0
727
+ if p == pe
728
+ _goto_level = _test_eof
729
+ next
730
+ end
731
+ if cs == 0
732
+ _goto_level = _out
733
+ next
734
+ end
735
+ end
736
+ if _goto_level <= _resume
737
+ _keys = cs << 1
738
+ _inds = _index_offsets[cs]
739
+ _slen = _key_spans[cs]
740
+ _wide = data[p].ord
741
+ _trans = if ( _slen > 0 &&
742
+ _trans_keys[_keys] <= _wide &&
743
+ _wide <= _trans_keys[_keys + 1]
744
+ ) then
745
+ _indicies[ _inds + _wide - _trans_keys[_keys] ]
746
+ else
747
+ _indicies[ _inds + _slen ]
748
+ end
749
+ cs = _trans_targs[_trans]
750
+ if _trans_actions[_trans] != 0
751
+ case _trans_actions[_trans]
752
+ when 1 then
753
+ begin
754
+ main_type_s = p end
755
+ when 2 then
756
+ begin
757
+ content_type.main_type = chars(data, main_type_s, p-1).downcase end
758
+ when 3 then
759
+ begin
760
+ sub_type_s = p end
761
+ when 19 then
762
+ begin
763
+ content_type.sub_type = chars(data, sub_type_s, p-1).downcase end
764
+ when 4 then
765
+ begin
766
+ param_attr_s = p end
767
+ when 6 then
768
+ begin
769
+ param_attr = chars(data, param_attr_s, p-1) end
770
+ when 9 then
771
+ begin
772
+ qstr_s = p end
773
+ when 11 then
774
+ begin
775
+ qstr = chars(data, qstr_s, p-1) end
776
+ when 7 then
777
+ begin
778
+ param_val_s = p end
779
+ when 21 then
780
+ begin
781
+
782
+ if param_attr.nil?
783
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
784
+ end
785
+
786
+ # Use quoted s value if one exists, otherwise use parameter value
787
+ value = qstr || chars(data, param_val_s, p-1)
788
+
789
+ content_type.parameters << { param_attr => value }
790
+ param_attr = nil
791
+ qstr = nil
792
+ end
793
+ when 12 then
794
+ begin
795
+ end
796
+ when 15 then
797
+ begin
798
+ end
799
+ when 5 then
800
+ begin
801
+ begin
802
+ stack[top] = cs
803
+ top+= 1
804
+ cs = 35
805
+ _goto_level = _again
806
+ next
807
+ end
808
+ end
809
+ when 18 then
810
+ begin
811
+ begin
812
+ top -= 1
813
+ cs = stack[top]
814
+ _goto_level = _again
815
+ next
816
+ end
817
+ end
818
+ when 20 then
819
+ begin
820
+ content_type.sub_type = chars(data, sub_type_s, p-1).downcase end
821
+ begin
822
+ begin
823
+ stack[top] = cs
824
+ top+= 1
825
+ cs = 35
826
+ _goto_level = _again
827
+ next
828
+ end
829
+ end
830
+ when 10 then
831
+ begin
832
+ qstr_s = p end
833
+ begin
834
+ qstr = chars(data, qstr_s, p-1) end
835
+ when 8 then
836
+ begin
837
+ param_val_s = p end
838
+ begin
839
+ begin
840
+ stack[top] = cs
841
+ top+= 1
842
+ cs = 35
843
+ _goto_level = _again
844
+ next
845
+ end
846
+ end
847
+ when 25 then
848
+ begin
849
+
850
+ if param_attr.nil?
851
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
852
+ end
853
+
854
+ # Use quoted s value if one exists, otherwise use parameter value
855
+ value = qstr || chars(data, param_val_s, p-1)
856
+
857
+ content_type.parameters << { param_attr => value }
858
+ param_attr = nil
859
+ qstr = nil
860
+ end
861
+ begin
862
+ begin
863
+ stack[top] = cs
864
+ top+= 1
865
+ cs = 35
866
+ _goto_level = _again
867
+ next
868
+ end
869
+ end
870
+ when 13 then
871
+ begin
872
+ end
873
+ begin
874
+ param_attr_s = p end
875
+ when 23 then
876
+ begin
877
+ end
878
+ begin
879
+
880
+ if param_attr.nil?
881
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
882
+ end
883
+
884
+ # Use quoted s value if one exists, otherwise use parameter value
885
+ value = qstr || chars(data, param_val_s, p-1)
886
+
887
+ content_type.parameters << { param_attr => value }
888
+ param_attr = nil
889
+ qstr = nil
890
+ end
891
+ when 14 then
892
+ begin
893
+ end
894
+ begin
895
+ begin
896
+ stack[top] = cs
897
+ top+= 1
898
+ cs = 35
899
+ _goto_level = _again
900
+ next
901
+ end
902
+ end
903
+ when 16 then
904
+ begin
905
+ end
906
+ begin
907
+ begin
908
+ stack[top] = cs
909
+ top+= 1
910
+ cs = 35
911
+ _goto_level = _again
912
+ next
913
+ end
914
+ end
915
+ when 17 then
916
+ begin
917
+ end
918
+ begin
919
+ begin
920
+ top -= 1
921
+ cs = stack[top]
922
+ _goto_level = _again
923
+ next
924
+ end
925
+ end
926
+ when 22 then
927
+ begin
928
+ begin
929
+ stack[top] = cs
930
+ top+= 1
931
+ cs = 35
932
+ _goto_level = _again
933
+ next
934
+ end
935
+ end
936
+ begin
937
+
938
+ if param_attr.nil?
939
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
940
+ end
941
+
942
+ # Use quoted s value if one exists, otherwise use parameter value
943
+ value = qstr || chars(data, param_val_s, p-1)
944
+
945
+ content_type.parameters << { param_attr => value }
946
+ param_attr = nil
947
+ qstr = nil
948
+ end
949
+ when 24 then
950
+ begin
951
+ end
952
+ begin
953
+ begin
954
+ stack[top] = cs
955
+ top+= 1
956
+ cs = 35
957
+ _goto_level = _again
958
+ next
959
+ end
960
+ end
961
+ begin
962
+
963
+ if param_attr.nil?
964
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
965
+ end
966
+
967
+ # Use quoted s value if one exists, otherwise use parameter value
968
+ value = qstr || chars(data, param_val_s, p-1)
969
+
970
+ content_type.parameters << { param_attr => value }
971
+ param_attr = nil
972
+ qstr = nil
973
+ end
974
+ end
975
+ end
976
+ end
977
+ if _goto_level <= _again
978
+ if cs == 0
979
+ _goto_level = _out
980
+ next
981
+ end
982
+ p += 1
983
+ if p != pe
984
+ _goto_level = _resume
985
+ next
986
+ end
987
+ end
988
+ if _goto_level <= _test_eof
989
+ if p == eof
990
+ case _eof_actions[cs]
991
+ when 19 then
992
+ begin
993
+ content_type.sub_type = chars(data, sub_type_s, p-1).downcase end
994
+ when 21 then
995
+ begin
996
+
997
+ if param_attr.nil?
998
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
999
+ end
1000
+
1001
+ # Use quoted s value if one exists, otherwise use parameter value
1002
+ value = qstr || chars(data, param_val_s, p-1)
1003
+
1004
+ content_type.parameters << { param_attr => value }
1005
+ param_attr = nil
1006
+ qstr = nil
1007
+ end
1008
+ when 12 then
1009
+ begin
1010
+ end
1011
+ when 23 then
1012
+ begin
1013
+ end
1014
+ begin
1015
+
1016
+ if param_attr.nil?
1017
+ raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
1018
+ end
1019
+
1020
+ # Use quoted s value if one exists, otherwise use parameter value
1021
+ value = qstr || chars(data, param_val_s, p-1)
1022
+
1023
+ content_type.parameters << { param_attr => value }
1024
+ param_attr = nil
1025
+ qstr = nil
1026
+ end
1027
+ end
1028
+ end
1029
+
1030
+ end
1031
+ if _goto_level <= _out
1032
+ break
1033
+ end
1034
+ end
1035
+ end
1036
+
1037
+
1038
+ if p != eof || cs < 47
1039
+ raise Mail::Field::IncompleteParseError.new(Mail::ContentTypeElement, data, p)
63
1040
  end
1041
+
64
1042
  content_type
65
1043
  end
66
1044
  end