actionmailer 2.0.5 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of actionmailer might be problematic. Click here for more details.
- data/CHANGELOG +2 -5
- data/MIT-LICENSE +1 -1
- data/README +14 -10
- data/Rakefile +3 -4
- data/lib/action_mailer.rb +1 -1
- data/lib/action_mailer/adv_attr_accessor.rb +1 -1
- data/lib/action_mailer/base.rb +140 -100
- data/lib/action_mailer/helpers.rb +7 -7
- data/lib/action_mailer/part.rb +2 -2
- data/lib/action_mailer/quoting.rb +3 -1
- data/lib/action_mailer/test_case.rb +14 -22
- data/lib/action_mailer/vendor.rb +2 -2
- data/lib/action_mailer/vendor/text-format-0.6.3/text/format.rb +0 -0
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail.rb +1 -0
- data/lib/action_mailer/vendor/tmail-1.2.3/tmail/address.rb +426 -0
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/attachments.rb +2 -3
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/base64.rb +4 -10
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/compat.rb +8 -6
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/config.rb +2 -6
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/core_extensions.rb +14 -18
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/encode.rb +77 -19
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/header.rb +7 -10
- data/lib/action_mailer/vendor/tmail-1.2.3/tmail/index.rb +9 -0
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/interface.rb +20 -13
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/loader.rb +2 -0
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/mail.rb +97 -26
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/mailbox.rb +70 -10
- data/lib/action_mailer/vendor/tmail-1.2.3/tmail/main.rb +6 -0
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/mbox.rb +2 -0
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/net.rb +16 -15
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/obsolete.rb +7 -12
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/parser.rb +1 -0
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/port.rb +0 -0
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/quoting.rb +0 -0
- data/lib/action_mailer/vendor/tmail-1.2.3/tmail/require_arch.rb +58 -0
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/scanner.rb +3 -1
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/scanner_r.rb +15 -15
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/stringio.rb +1 -0
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/utils.rb +89 -32
- data/lib/action_mailer/vendor/{tmail-1.2.1 → tmail-1.2.3}/tmail/version.rb +4 -3
- data/lib/action_mailer/version.rb +2 -2
- data/test/delivery_method_test.rb +1 -1
- data/test/mail_helper_test.rb +1 -1
- data/test/mail_render_test.rb +1 -1
- data/test/mail_service_test.rb +48 -9
- data/test/quoting_test.rb +19 -32
- data/test/test_helper_test.rb +3 -9
- data/test/tmail_test.rb +1 -1
- data/test/url_test.rb +2 -2
- metadata +33 -53
- data/lib/action_mailer/vendor/tmail-1.2.1/tmail/Makefile +0 -19
- data/lib/action_mailer/vendor/tmail-1.2.1/tmail/address.rb +0 -245
- data/lib/action_mailer/vendor/tmail-1.2.1/tmail/facade.rb +0 -552
- data/lib/action_mailer/vendor/tmail-1.2.1/tmail/info.rb +0 -35
- data/lib/action_mailer/vendor/tmail-1.2.1/tmail/parser.y +0 -381
- data/lib/action_mailer/vendor/tmail-1.2.1/tmail/tmail.rb +0 -1
- data/test/fixtures/first_mailer/share.rhtml +0 -0
- data/test/fixtures/helper_mailer/use_example_helper.rhtml +0 -0
- data/test/fixtures/helper_mailer/use_helper.rhtml +0 -0
- data/test/fixtures/helper_mailer/use_helper_method.rhtml +0 -0
- data/test/fixtures/helper_mailer/use_mail_helper.rhtml +0 -0
- data/test/fixtures/path.with.dots/funky_path_mailer/multipart_with_template_path_with_dots.rhtml +0 -0
- data/test/fixtures/path.with.dots/multipart_with_template_path_with_dots.rhtml +0 -0
- data/test/fixtures/raw_base64_decoded_string +0 -0
- data/test/fixtures/raw_base64_encoded_string +0 -1
- data/test/fixtures/second_mailer/share.rhtml +0 -0
- data/test/fixtures/templates/signed_up.rhtml +0 -0
- data/test/fixtures/test_mailer/implicitly_multipart_example.ignored.rhtml +0 -0
- data/test/fixtures/test_mailer/implicitly_multipart_example.text.html.rhtml +0 -0
- data/test/fixtures/test_mailer/implicitly_multipart_example.text.plain.rhtml +0 -0
- data/test/fixtures/test_mailer/implicitly_multipart_example.text.yaml.rhtml +0 -0
- data/test/fixtures/test_mailer/signed_up.rhtml +0 -0
- data/test/fixtures/test_mailer/signed_up_with_url.rhtml +0 -0
@@ -1,35 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# info.rb
|
3
|
-
#
|
4
|
-
#--
|
5
|
-
# Copyright (c) 1998-2003 Minero Aoki <aamine@loveruby.net>
|
6
|
-
#
|
7
|
-
# Permission is hereby granted, free of charge, to any person obtaining
|
8
|
-
# a copy of this software and associated documentation files (the
|
9
|
-
# "Software"), to deal in the Software without restriction, including
|
10
|
-
# without limitation the rights to use, copy, modify, merge, publish,
|
11
|
-
# distribute, sublicense, and/or sell copies of the Software, and to
|
12
|
-
# permit persons to whom the Software is furnished to do so, subject to
|
13
|
-
# the following conditions:
|
14
|
-
#
|
15
|
-
# The above copyright notice and this permission notice shall be
|
16
|
-
# included in all copies or substantial portions of the Software.
|
17
|
-
#
|
18
|
-
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
19
|
-
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
20
|
-
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
21
|
-
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
22
|
-
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
23
|
-
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
24
|
-
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
25
|
-
#
|
26
|
-
# Note: Originally licensed under LGPL v2+. Using MIT license for Rails
|
27
|
-
# with permission of Minero Aoki.
|
28
|
-
#++
|
29
|
-
|
30
|
-
module TMail
|
31
|
-
|
32
|
-
Version = '0.10.7'
|
33
|
-
Copyright = 'Copyright (c) 1998-2002 Minero Aoki'
|
34
|
-
|
35
|
-
end
|
@@ -1,381 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# parser.y
|
3
|
-
#
|
4
|
-
# Copyright (c) 1998-2007 Minero Aoki
|
5
|
-
#
|
6
|
-
# This program is free software.
|
7
|
-
# You can distribute/modify this program under the terms of
|
8
|
-
# the GNU Lesser General Public License version 2.1.
|
9
|
-
#
|
10
|
-
|
11
|
-
class TMail::Parser
|
12
|
-
|
13
|
-
options no_result_var
|
14
|
-
|
15
|
-
rule
|
16
|
-
|
17
|
-
content : DATETIME datetime { val[1] }
|
18
|
-
| RECEIVED received { val[1] }
|
19
|
-
| MADDRESS addrs_TOP { val[1] }
|
20
|
-
| RETPATH retpath { val[1] }
|
21
|
-
| KEYWORDS keys { val[1] }
|
22
|
-
| ENCRYPTED enc { val[1] }
|
23
|
-
| MIMEVERSION version { val[1] }
|
24
|
-
| CTYPE ctype { val[1] }
|
25
|
-
| CENCODING cencode { val[1] }
|
26
|
-
| CDISPOSITION cdisp { val[1] }
|
27
|
-
| ADDRESS addr_TOP { val[1] }
|
28
|
-
| MAILBOX mbox { val[1] }
|
29
|
-
|
30
|
-
datetime : day DIGIT ATOM DIGIT hour zone
|
31
|
-
# 0 1 2 3 4 5
|
32
|
-
# date month year
|
33
|
-
{
|
34
|
-
t = Time.gm(val[3].to_i, val[2], val[1].to_i, 0, 0, 0)
|
35
|
-
(t + val[4] - val[5]).localtime
|
36
|
-
}
|
37
|
-
|
38
|
-
day : /* none */
|
39
|
-
| ATOM ','
|
40
|
-
|
41
|
-
hour : DIGIT ':' DIGIT
|
42
|
-
{
|
43
|
-
(val[0].to_i * 60 * 60) +
|
44
|
-
(val[2].to_i * 60)
|
45
|
-
}
|
46
|
-
| DIGIT ':' DIGIT ':' DIGIT
|
47
|
-
{
|
48
|
-
(val[0].to_i * 60 * 60) +
|
49
|
-
(val[2].to_i * 60) +
|
50
|
-
(val[4].to_i)
|
51
|
-
}
|
52
|
-
|
53
|
-
zone : ATOM
|
54
|
-
{
|
55
|
-
timezone_string_to_unixtime(val[0])
|
56
|
-
}
|
57
|
-
|
58
|
-
received : from by via with id for received_datetime
|
59
|
-
{
|
60
|
-
val
|
61
|
-
}
|
62
|
-
|
63
|
-
from : /* none */
|
64
|
-
| FROM received_domain
|
65
|
-
{
|
66
|
-
val[1]
|
67
|
-
}
|
68
|
-
|
69
|
-
by : /* none */
|
70
|
-
| BY received_domain
|
71
|
-
{
|
72
|
-
val[1]
|
73
|
-
}
|
74
|
-
|
75
|
-
received_domain
|
76
|
-
: domain
|
77
|
-
{
|
78
|
-
join_domain(val[0])
|
79
|
-
}
|
80
|
-
| domain '@' domain
|
81
|
-
{
|
82
|
-
join_domain(val[2])
|
83
|
-
}
|
84
|
-
| domain DOMLIT
|
85
|
-
{
|
86
|
-
join_domain(val[0])
|
87
|
-
}
|
88
|
-
|
89
|
-
via : /* none */
|
90
|
-
| VIA ATOM
|
91
|
-
{
|
92
|
-
val[1]
|
93
|
-
}
|
94
|
-
|
95
|
-
with : /* none */
|
96
|
-
{
|
97
|
-
[]
|
98
|
-
}
|
99
|
-
| with WITH ATOM
|
100
|
-
{
|
101
|
-
val[0].push val[2]
|
102
|
-
val[0]
|
103
|
-
}
|
104
|
-
|
105
|
-
id : /* none */
|
106
|
-
| ID msgid
|
107
|
-
{
|
108
|
-
val[1]
|
109
|
-
}
|
110
|
-
| ID ATOM
|
111
|
-
{
|
112
|
-
val[1]
|
113
|
-
}
|
114
|
-
|
115
|
-
for : /* none */
|
116
|
-
| FOR received_addrspec
|
117
|
-
{
|
118
|
-
val[1]
|
119
|
-
}
|
120
|
-
|
121
|
-
received_addrspec
|
122
|
-
: routeaddr
|
123
|
-
{
|
124
|
-
val[0].spec
|
125
|
-
}
|
126
|
-
| spec
|
127
|
-
{
|
128
|
-
val[0].spec
|
129
|
-
}
|
130
|
-
|
131
|
-
received_datetime
|
132
|
-
: /* none */
|
133
|
-
| ';' datetime
|
134
|
-
{
|
135
|
-
val[1]
|
136
|
-
}
|
137
|
-
|
138
|
-
addrs_TOP : addrs
|
139
|
-
| group_bare
|
140
|
-
| addrs commas group_bare
|
141
|
-
|
142
|
-
addr_TOP : mbox
|
143
|
-
| group
|
144
|
-
| group_bare
|
145
|
-
|
146
|
-
retpath : addrs_TOP
|
147
|
-
| '<' '>' { [ Address.new(nil, nil) ] }
|
148
|
-
|
149
|
-
addrs : addr
|
150
|
-
{
|
151
|
-
val
|
152
|
-
}
|
153
|
-
| addrs commas addr
|
154
|
-
{
|
155
|
-
val[0].push val[2]
|
156
|
-
val[0]
|
157
|
-
}
|
158
|
-
|
159
|
-
addr : mbox
|
160
|
-
| group
|
161
|
-
|
162
|
-
mboxes : mbox
|
163
|
-
{
|
164
|
-
val
|
165
|
-
}
|
166
|
-
| mboxes commas mbox
|
167
|
-
{
|
168
|
-
val[0].push val[2]
|
169
|
-
val[0]
|
170
|
-
}
|
171
|
-
|
172
|
-
mbox : spec
|
173
|
-
| routeaddr
|
174
|
-
| addr_phrase routeaddr
|
175
|
-
{
|
176
|
-
val[1].phrase = Decoder.decode(val[0])
|
177
|
-
val[1]
|
178
|
-
}
|
179
|
-
|
180
|
-
group : group_bare ';'
|
181
|
-
|
182
|
-
group_bare: addr_phrase ':' mboxes
|
183
|
-
{
|
184
|
-
AddressGroup.new(val[0], val[2])
|
185
|
-
}
|
186
|
-
| addr_phrase ':' { AddressGroup.new(val[0], []) }
|
187
|
-
|
188
|
-
addr_phrase
|
189
|
-
: local_head { val[0].join('.') }
|
190
|
-
| addr_phrase local_head { val[0] << ' ' << val[1].join('.') }
|
191
|
-
|
192
|
-
routeaddr : '<' routes spec '>'
|
193
|
-
{
|
194
|
-
val[2].routes.replace val[1]
|
195
|
-
val[2]
|
196
|
-
}
|
197
|
-
| '<' spec '>'
|
198
|
-
{
|
199
|
-
val[1]
|
200
|
-
}
|
201
|
-
|
202
|
-
routes : at_domains ':'
|
203
|
-
|
204
|
-
at_domains: '@' domain { [ val[1].join('.') ] }
|
205
|
-
| at_domains ',' '@' domain { val[0].push val[3].join('.'); val[0] }
|
206
|
-
|
207
|
-
spec : local '@' domain { Address.new( val[0], val[2] ) }
|
208
|
-
| local { Address.new( val[0], nil ) }
|
209
|
-
|
210
|
-
local: local_head
|
211
|
-
| local_head '.' { val[0].push ''; val[0] }
|
212
|
-
|
213
|
-
local_head: word
|
214
|
-
{ val }
|
215
|
-
| local_head dots word
|
216
|
-
{
|
217
|
-
val[1].times do
|
218
|
-
val[0].push ''
|
219
|
-
end
|
220
|
-
val[0].push val[2]
|
221
|
-
val[0]
|
222
|
-
}
|
223
|
-
|
224
|
-
domain : domword
|
225
|
-
{ val }
|
226
|
-
| domain dots domword
|
227
|
-
{
|
228
|
-
val[1].times do
|
229
|
-
val[0].push ''
|
230
|
-
end
|
231
|
-
val[0].push val[2]
|
232
|
-
val[0]
|
233
|
-
}
|
234
|
-
|
235
|
-
dots : '.' { 0 }
|
236
|
-
| '.' '.' { 1 }
|
237
|
-
|
238
|
-
word : atom
|
239
|
-
| QUOTED
|
240
|
-
| DIGIT
|
241
|
-
|
242
|
-
domword : atom
|
243
|
-
| DOMLIT
|
244
|
-
| DIGIT
|
245
|
-
|
246
|
-
commas : ','
|
247
|
-
| commas ','
|
248
|
-
|
249
|
-
msgid : '<' spec '>'
|
250
|
-
{
|
251
|
-
val[1] = val[1].spec
|
252
|
-
val.join('')
|
253
|
-
}
|
254
|
-
|
255
|
-
keys : phrase { val }
|
256
|
-
| keys ',' phrase { val[0].push val[2]; val[0] }
|
257
|
-
|
258
|
-
phrase : word
|
259
|
-
| phrase word { val[0] << ' ' << val[1] }
|
260
|
-
|
261
|
-
enc : word
|
262
|
-
{
|
263
|
-
val.push nil
|
264
|
-
val
|
265
|
-
}
|
266
|
-
| word word
|
267
|
-
{
|
268
|
-
val
|
269
|
-
}
|
270
|
-
|
271
|
-
version : DIGIT '.' DIGIT
|
272
|
-
{
|
273
|
-
[ val[0].to_i, val[2].to_i ]
|
274
|
-
}
|
275
|
-
|
276
|
-
ctype : TOKEN '/' TOKEN params opt_semicolon
|
277
|
-
{
|
278
|
-
[ val[0].downcase, val[2].downcase, decode_params(val[3]) ]
|
279
|
-
}
|
280
|
-
| TOKEN params opt_semicolon
|
281
|
-
{
|
282
|
-
[ val[0].downcase, nil, decode_params(val[1]) ]
|
283
|
-
}
|
284
|
-
|
285
|
-
params : /* none */
|
286
|
-
{
|
287
|
-
{}
|
288
|
-
}
|
289
|
-
| params ';' TOKEN '=' QUOTED
|
290
|
-
{
|
291
|
-
val[0][ val[2].downcase ] = ('"' + val[4].to_s + '"')
|
292
|
-
val[0]
|
293
|
-
}
|
294
|
-
| params ';' TOKEN '=' TOKEN
|
295
|
-
{
|
296
|
-
val[0][ val[2].downcase ] = val[4]
|
297
|
-
val[0]
|
298
|
-
}
|
299
|
-
|
300
|
-
cencode : TOKEN
|
301
|
-
{
|
302
|
-
val[0].downcase
|
303
|
-
}
|
304
|
-
|
305
|
-
cdisp : TOKEN params opt_semicolon
|
306
|
-
{
|
307
|
-
[ val[0].downcase, decode_params(val[1]) ]
|
308
|
-
}
|
309
|
-
|
310
|
-
opt_semicolon
|
311
|
-
:
|
312
|
-
| ';'
|
313
|
-
|
314
|
-
atom : ATOM
|
315
|
-
| FROM
|
316
|
-
| BY
|
317
|
-
| VIA
|
318
|
-
| WITH
|
319
|
-
| ID
|
320
|
-
| FOR
|
321
|
-
|
322
|
-
end
|
323
|
-
|
324
|
-
|
325
|
-
---- header
|
326
|
-
#
|
327
|
-
# parser.rb
|
328
|
-
#
|
329
|
-
# Copyright (c) 1998-2007 Minero Aoki
|
330
|
-
#
|
331
|
-
# This program is free software.
|
332
|
-
# You can distribute/modify this program under the terms of
|
333
|
-
# the GNU Lesser General Public License version 2.1.
|
334
|
-
#
|
335
|
-
|
336
|
-
require 'tmail/scanner'
|
337
|
-
require 'tmail/utils'
|
338
|
-
|
339
|
-
---- inner
|
340
|
-
|
341
|
-
include TextUtils
|
342
|
-
|
343
|
-
def self.parse( ident, str, cmt = nil )
|
344
|
-
new.parse(ident, str, cmt)
|
345
|
-
end
|
346
|
-
|
347
|
-
MAILP_DEBUG = false
|
348
|
-
|
349
|
-
def initialize
|
350
|
-
self.debug = MAILP_DEBUG
|
351
|
-
end
|
352
|
-
|
353
|
-
def debug=( flag )
|
354
|
-
@yydebug = flag && Racc_debug_parser
|
355
|
-
@scanner_debug = flag
|
356
|
-
end
|
357
|
-
|
358
|
-
def debug
|
359
|
-
@yydebug
|
360
|
-
end
|
361
|
-
|
362
|
-
def parse( ident, str, comments = nil )
|
363
|
-
@scanner = Scanner.new(str, ident, comments)
|
364
|
-
@scanner.debug = @scanner_debug
|
365
|
-
@first = [ident, ident]
|
366
|
-
result = yyparse(self, :parse_in)
|
367
|
-
comments.map! {|c| to_kcode(c) } if comments
|
368
|
-
result
|
369
|
-
end
|
370
|
-
|
371
|
-
private
|
372
|
-
|
373
|
-
def parse_in( &block )
|
374
|
-
yield @first
|
375
|
-
@scanner.scan(&block)
|
376
|
-
end
|
377
|
-
|
378
|
-
def on_error( t, val, vstack )
|
379
|
-
raise SyntaxError, "parse error on token #{racc_token2str t}"
|
380
|
-
end
|
381
|
-
|
@@ -1 +0,0 @@
|
|
1
|
-
require 'tmail'
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/test/fixtures/path.with.dots/funky_path_mailer/multipart_with_template_path_with_dots.rhtml
DELETED
File without changes
|
File without changes
|
Binary file
|
@@ -1 +0,0 @@
|
|
1
|
-
R0lGODlhSwF3APcAAP/////39/j29f/v7vfv7u/v7//m5f7k4vfl5f/e3vff3/Lh4f/a2PXb2N/f3/fW1v/V1PDU0/TTz/fPzv/MzO/OzfHLx/fHxv/Fw//Cv+7ExO/EwMzMzPi/vfW8tPG8vO28t/+3tee9vfe1svC1tb+/v+e1tfCzr/+uq+izrO+urueurv+mpt+ureerpe6lpeilpf+ZzOaknd2lpK+vr/+Zme+dneadnOCdnOealv+Rjd+alu+VleaVlN2VlPeNi8yZmdeUk/CLi+aNjN+PjeaMh8GUlNaPjf+ChfiDg9+Kgs+NivCEhJmZmfd/etGKh+aDg/97e96Dg92Eeu99euZ8fNWBf/9zc917ePdzc+V5dtd8eo+Pj+51ctB9e+dzct91cL98fO9sbf9mZs9zbNZxceZsauhqZN1rZt9qatRtZexkZdBtYtdqan9/f8JubuhiX95kYdZkYcxmZt9hWqpsbN5cWd5aU+VXUNRZWbxgYOBSS8lYTtRTUsBZV8dUSd1LUaVaWtxKQ85LS2ZmZtVHRN9DO71KStlCOtBAPb5ERMRCQtg7M+U0PMk9PdQ5OZVHR98xMdgxMdsvKrI6OswzM7s2MNsqKk9PT7Y1K6o3N90nHtYpIdApKbQvL9ckLN4hIcwnI7MtIt4gG+gdHdYiGbspJtMgILIpKc4gF9ccGLUkH84bG80dEL8gIMIfGD8/P8QbG4sqKqwiGcwYD4QpKcYYEKchGc4TD7MaFsUUFNcQBr0WEuANDaYdEuAKAMQQB7wREYwdGqAXEDMzM74OCbMQEM4JANYFAK0PD8YJAOAAAMQHB6QQEKYPALsIEbwHB3oZGZsQCrwIAJoQELUICK4JCbYIALQHD5YQCcwAAJUPD44QEKwIAKUJCcICApYOAKYHAL4AAJsICH0QEJwHALYAAIMODpMICJQIAa4AAIwJAIwICKYAAHEODoQICIMJAJkAAHwICB8fH3MICIwAAIMAAHwAAHQAAGYAAA8PDwAAAAAAAAAAAAAAAAAAACH5BAUUADEALAAAAABLAXcAAAj/AGMIHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGPKnEmzps2bOHPq3Mmzp8+fQIMKHUq0qNGjSJMqXcq0qdOnUKNKnUq1qtWrWLNq3cq1q9evYMOKHUu2rNmzaNOqXcu2LcUACBQ8mGDhwocPI07oTaHCBY4dO27MaNEggNvDVgVIkFFES5w7ghBdGlUqVStbzIABM9cuXjxUenAgQExaqQAFFzx4uIAAwIIbUBxDZnQJVOVWl61JQzfOs2dNQAyXHg4UwQcoey6p6sW8ERUFCHJUAfNYECNQmzaVCiZt27Zx1ML3/65XL1AE4uhzCrgARRAubdqQIVtGn36kDgRyaElDZ4+gRpG84o134xRooDTjbFOPPbJokN6DMgkAAhrvwQffMfL98kt9pFBAwA1ppHEGHowYI56BKI6DDjrc2MPgeRDGqJIAG+TBjDjiXHgMhhhmuOEyewhAAAxn9GFKNt8V6E2KBa74Djfv4AOJADJWWVIDZTCjjjniKDONMspos+OO8iGj4TK9hAAAAC4Yw00zSy4pzZIprojOO+fIg48RVvb5kQA5uNLOltMU+s2hYVooZob02bAmADPMQk0zyTRjqTRwwunNknbiiU8tCzTFQQlNuGGqG7DAQoOfQU3AhzqDqv9zjTnXiDMNoonqaOZ8VDwKgAaUTFppMpVmmqmKd+aJDxBNwbLPs9A+6warPgmwAy/txKqOrNfUeuuXuYqJIX1m+OqaHpZaYyml7DYT3jncnEMOOfQEIpxSHJQ6T7T7TEvtTgrMAWs73WxrjqzmFCrON2CCaSGZ8nVhLgAEPCGsN8l4k6k03bFzzjnukJOPLAU81ESqKKesMsqEuFECS85C6++/OFmgSLYFF3yNrNza+g24xzgM8TJQACAkAXEtQAARt1y86ZLboHPOO+TI4w490YjwkBv8du31s/oQ4kBKJUQ7M801fbBKPASrk3O33Ha78JfgJrpjfC8AYIFeLrj/0EMOI0AhKaUYe7MbNx5b7U7IfD7kAA2EdM1FCZRT7gYx/OrTREpmo22TCsnE003OPO886+nedln3hdrsYgECUFRRhRZgfIFGHEyYsYrTh79D9dXkuBPGRDTw+7JBNOjD7+Ynde75TDJ0NrrbbtOK8Om01vozol+Kqc0nCJzQBx3k03HHHnsUAgcepqzrLjXccDNvyCHXQZHxCHHQ9fElOf88TD7oTDgG6DbTlY5WCaOVzw6FKAuhAQBoYIQgJogIRDyCEZKYRCMMEYt1hSde8nKH1eRhv4ngDyFcixYmmiez/8GECNJTRzioV7oDzmoaCvTW9hIFggeMYhSSuMQm/2oDiiKqQhWbmAQrvIGOeKCjHu9wkT3kcY976OF+0eKfQRzQNRZKy4UuOYL0skVDA5oOgdi7RqGmYasuiaMTAlDCMlRRijqWgo6pyKNlWlEKW7SDPAuyRxWriI8rmjCLCtkXIvvXQjCuJIDxGOAMc3YwM6LxkrVKWBvFUQQBPEIbpWiFKnBzGVvgwha20AUwUAmMdgzylfi4xxuwCC0tGiRmtTSJ/xx5kuhFUpJlrOEZ04jGbtVKFwoQAXxYqUpbaKYYxQAGNJlRDGq2Q4qxvAc+5HEEWj7LlgXB5Td12UhemuQE3vglAUlnRmFisnSzAgMA2mCOZ0qzGNDAJz6hMf8NaBjTVq7MpjbPgQNv7gOcBMFctEq2EMoxxAEl4EBC/OcALmAiVYRYlTk3YoHQSXKd1GunJU/Hs4MdLBYKWIApzAHNfvbTmNlD4Ja2JA51aJOQ1NDaIXM50WjN4yCp2l9BCAEL5fGrp190gDihpblbfm2cBHmq5xpgiXo446PUY6cwt7ozk26raC2oJPbMQdaZetWr6qipPfDB1ls0wKAIFUjxdjmQpUJ1IJczarSQ2q8m6NVrmGCoQLigSH7NAxNjI8jlMkcItAVAD/FwhmSBOT2dcfWy22pHJVpDhkGd1WBmnaloD4ajeOQDH6hQAFwTIk59CNYgXDihQZpwVIT/RAtz82hCYjnghr8SA3l/bWxCkveswHpuB54px1WdMTrSve2y7SzYtlIAAARYwrOh/SxZt8tdmi7IE6PZ6V0LElumSlQhhNBrXGMgTr7uQ7gF4UBwDVI2aK1QIc6CxfMaELpyxKMc4WAuc527LZEKM2fdaEcbBACAFYB2u9ndFqwGli3fADIeiiDAamHr0/MqpL7jLUgKn8VX+BpEvotMaLQSixDlrbdKBPBDPXzTDuWObsBZNUc3DGzAnLXDFa0RQGclPDAK+8bCgLRHIKXYDj8MYMMDoQEu9eGG1yYExAdNyIj3wdezGWTL+i0Ibcs523381nMuiMeMadwNyTaX/8Ai1bGO3ZbgbnhgTQKAbIWPzOcjzxiQ5FHyPerRjjlUhF/ESNltuWDlD6f4y3u1LZkNUoC/slgglYbWTxHiLObRTAGouMeRy5Gtdgi4uVkNKc+6MefRZUsKvgoC2zrT51p7BtBLZhsZDv1U80YEy+vdcpcXEjloccEgxX6WRgvCRX08zwpKHnWp23yNATu31ameXjzyQABfaaAZpe4MrW2N5CXbI1te4DW0WmYq3zba0Tw9iLAl/UWFjLm4W4xWmIfaL89VYBj24HONp33qyuYYwXSORyUWYDQhCWABlIiHkcXNtj4DWskuInQ7nqDuu2L5vRABtpYjfRC60ve2QP9dsUGUd2lqvWHQaj4yAck4YOZmO9udcYUEKBYBCVhAAxfww6zDHe6K+znQUpx1QaEcgy3vw9MMETkKSW4Qk1ed6gO5N8gJQtv70swCwlDyn31DalLjrM1oR3jBZjjAeBjjAgBoAAlUAAMY2EAFcmAbhcVdaj4nWYoab8cMOp5lgrTWww19tIixHtVJl5zxAimsaw1feJp5wUVqJs+Rwz0watscwYNquzE+oLce9GAIQ4ACFISQhnAQvcJFvzXSk17qFhDelpmGFjHeffJ4Qxpaw15IbX//LE/rb9Of9gSu15zc19847YMiei5AAIATgEELswMDGNJgBjPkYuhGt/j/7DNeam/oVLyVH8jHCUGlxPt+8cCnd7+FD/kYcFH3A4ncsdG2gm7EIx0Xxny+8VGSJGAEGA7xkAsbIAA3YAdoYAa3EwflAweuMGvh53d/R3vZMgsVcHsHkWzKFnWKp1j1FwNWRxAFoG8JgQnRIlHNxntVIgBlUA3JIA2Zp3mbR3QyFGBu5mrxsAoaQADtUT53cD7ngz6d4Bl7Jn7jp2ThhgpvxXQqxlQt13shRoLx93j1dmXRYmIFMVfP0lhc44WsggCDEAy5YAzjAIABt2b+xTYARoBuJll/tAoSQABpIAlF6B8TFBkVZAiSQHG19mfm5iJE5wmhIoUDgWL4B29X/4hXJXiCA1FeIZgQkpdpiEctFVAJrOAKuVCD8SB2ZKeEZRduy1UO9WAJDSAAdLAJFFRBjIBBGTQJkxAJ1UBuyydFAdd37UAJ4YV+60WJYeiI6Qd/JCZ/XmYQLPgsyDd10OIsZ4Y2JvAIndAJntgM44GD/8VnZUdqzuAZf6AABLAHvYAIskiLk1BERVQKozAJxYCLF6eLr3cIGqaIlBcty5ZvxpYQIBh8CJGC0AJ1B3F/0SKQ1OIChVAIlRAK15hOF8aNo6aEZEAACoAIv3AJRLSOlGFHdbQJtjCIuKaLAQcrQ+cHFiFbA/lX+pCJjfcs+yZmw3d1zKgQIxaNCrGMYP8Dg1biAn3QB4OwkA15gzHXZ/5VD94QBABQAZKADD/EjhxZR6mgCnnER7owbuW2IIX4eoVWEfoTLfuXEMK4D/oQVzj5dGX2VwYpEPzylfFlVPpQhQcBhlvnOSagBnKQBwrJkLkAJzc4dkdnCRoAAB9wCrvwlHrECqSEG6iESlYZc/EoRelAdGxjaBPBAQrFVGl5j11YhR9XZTFQAFL2XlumOY3WNQbJAYq0kg9RWHDJKiKABWXQBngpCXoJimL3kAsyDmXQbSqAC4U5lZZBC8JJC4vJSs6EC/53a30pkvawDukgcUPXDukGEU1wmV+jD7DAkvZ3nS8ZAyCYOZvjdC7/iYJgg0uYcDwO0FvPQgzaOXL70J00EwFEgAVYIJs/aY2rUCnlcJtqpmSUQAJrcgNiskelVJyspBn2BAy3SIiP6SLOuQ7gBys+EBHi+TVxVaHHOBAF8J1hmFixhZ2pggluAHX1dWwlUJbRQmU6OZDF9zwE0ABDQgRSAAZt4JOV0AmxkJ/NgIpINwxPYABrogTwMZyrhAvF4EwIKk3UpE/QwAzQ4JgN6iLpsA7gMHQTNng5wQFElSpu0Jpc+JIF0ARbCgsZtaIIUTbNSDMbUAQS0AA40ANSUJ95MAiJ0AmhsAp7GYr2MA5vUAF4VgYLg6QIGk2ESk3QkE+Fwk8u1ZdN/2gP4PCg0akO1rACU1EAZkoRzsKW/zIAOWAHQyAAIrADcBqbc1qnsVAN2XILehCEa4IAcvANzOBMhAoM+VSrLqWoa4RA0/BHUdqc6fCrzhl9o2MM50caZTN5nqMAWjBBCiAhcDoFbSAHP6kKuOAKg2AFfuorTxAP9RRNtKoM/ISr1dAtmFRW4sCrWCmSVPqrUxqZg2IN6mAKDjIczpKM1CIBdoAIvXADRhMBK+ADM9oGbbAFObAB3fYoAvBwyqd33YKrMDUrEIZWZdWg+LCuUwoOU/qu6oANphCFpFE883CpMbIBiCAJy8BteIYAC7AA0GEuQrIAD9AAMKAO4YczMf+lXRG2JaFYiPCAsewKrO1gDdeADdWwcGvhV+/FUJmWmaxCAqDACbvQChYwMQiLNA1QARtAAi5AAnlQdONGRp8VYSZlDnoqkuzqnGdbDtWADUTrCL94Frn3ngLBgvBJMypwG99ABC5rtVgLAnR3AznQAzywCpK5hHy3JWWFs5zBnBZ7to+qtkQbDIPwZGnxcVwQOW8JRi9QStCACgxntRKgAX77Ai8QuKkXO2gwYTQLexdIY4hbVqOlDubGro8KrBgLodXwDLorB2tBkCnanv/SA0hqIksgABYAAlpbuj1QBLFDOxD4BYkATK/XuhdGRuLwWfUwSD+LttubDrkbDMH/UAZs8Z2q6UhQEE3GkAzb4Al5YbqqpwVfsH1xIIHk8wrRqZVLmHmAxzbcRbZVdLaOe7FTag26AL5Y0BYlsKWMFhG8JbIywQGaKhEQxQVMGxFYwE/Fsg1twAOxoX1pML92sIfogwgJVmp7F3tHt2T4sItp5Ur14LO167Nnuw7WwAu6oAtSsBFMeyqnko9UwYL2ioI8bCov9mtDfCpkWYwRUVHv1X4XUQbXUA2Esw2oQAVfML/mc4R8iAiGEAombMJFhsI3qItstcJr5rPci7YWuw7OcMOxkAMa4QZpioKZWgJjeBUcAAsRvEUuZsdz6RAFUALvRlvEUDmRc6HIWhEp/7jHE6EG5jAsTCQNfXAGWvyKsigJwYC/EhZ9+TvGLjJI+JAPhEal3CvDtAsPzhALuhALKpARmYZf+8BQkQO8TVEAu9cQZjYQmBMRxaOdZWNic9wRZVPEDiEArwLJ3sANroAHliwJQaSOoFDCZATGm5y/GUjGQ9eu22vK61AOsRALrNDKGEEILAi8+oB8XEPMSeEAmEDLiziXRUWhznYQsUWiI8E1GoEAi9AOlJIxA7INjGAIGISR6tiRrYC/ZJRZA4OB5sZWEld0pPyzv/qozqkLrNAJH4ARWprOCMFFXocJK1mvqJm5G0oMiSZYeWzSbkAIHLCh71kAzqJRNJBoxP9wuTFAA/tCOfsyLb2lD6uSx/2iVHKL0/MnEKhCDPPQ0pEDCzC9D6tSMhuKCfPAngdBW/vHRTNz1En9mUQ11RyQx/qAnV6Xf/twXtPi0kwd03KcuUYNC0j91SKdX1xH0yadz57QDpBcINwQC5FQ0E9ZCsWA0PibwiqMDw9davBaDg96u7U7peugC6dQCROAEYFVNkFcPP6iP565D7l1yJXGPBclEPLFPLtcMvVKW9PiVxKVgvoVyO+5KiwoNqz9mSaYWwUQW+cZA7ssEORcMsRgXKdd1IRgovuwx4ccAyUACzPT27q9QsON3MWtlkG82xywQqbdV/0CmoXH3L9dMpz/fWzH3XQhC91kSBELcF39jI3jwA7NsAm2YUfA2QonLNh+l3mDlA/3wMlkFA7VUA2Kzb2065zBcAqIoFoWQQPHpj/l3XTFbcdUNhD7sEIgDdP7VjYSNQ/w5dZ1FbKxVQJc5GlbVzbMwzUMlWgQLlxlo1GRIxB+VeL3BQscXnlOLdqc9p4wvsAx0OIC8dsmqFHnpT8+DOEgCs8x/jK0JVE63txqKVzF8zJcdDyLnM+KEA8ZkzFNwg2vUBlTqZiMKdh9x9BLlg/ntrrTti3Y8AzhsA7OicbAmgunUAhvOxH7JrcpZyq69c6e9uHqd1C0xWJhMxB/nn/Ipz/ME1uJpeHS/y3aZsngDJUqkSdctHU8gV4Q85BbCpHLczt5GM7iWVbpUGfoB/HLn4kJnjbpvD3Pm57jWUboRs1l3ol8w6wRBHAz/cxEK3IOzVAKwymcxaALtgANg/3lfubJa1UPJ0w91kC0zxAM1rAO8CDRA8wJgEC5FIEqKHPOLRbMR551+8BivUwIyMdFVx3dA4Hh7bft3jnPMRDosa7q5yXVED4tWI0q7SwQ4h7qyrPVJzaXZcMF8w4L9Y7c+X5e6YUQ9WzU53XvCbVC/x7w6O7oMZDqDL4Rj8XPhWMnLFKc0oSg8+21Vhmlh23C8Mq2/b3sBazN67oO3vAJdnAvEjzWzsKiY/9N1iRIEAUP8TddeE0eVcvt6rodZgpP4rzt84clEClO3oJMEDt/EGGK7WX2lZj9y0mPgn61aSb+gWVt71FWjP0m9a+14kue6HNrkxjhBfxcKcjCIu/QDEa68dTEDLzId5LJqCIZ8mRUMCRfDeALvjf832c7Dp/wBRZBCFo0y8hT1Ib3kvhc7o2F84s/8TxfV3PuL7089pKPaeQeWyVz9JgmUY+v9OdVPFjPP7PM+Z/JATTAAWsi+iY43T5f8wQR66ZfABIF8UAu9hHPfhsRBO2gMdiI8eeADtHUpOF6DXIf99Y8foRG5ogtqUT7vbwQ/RYdC96g5rZ7ClVQESVA9lz/E+ThXRB//OSDNd5CXwL6EI2IPhCYcGa0FWac//jYeeJGX3gsCOhADwtjk/5Rxf4zv+OxPFgAsY9QjBj6YBF0AMvBPmIAADTBFKPEPjcELRIssO/gRYKwiHF0s68EQYMIFcYQSJCLSIKYNhKiyFHmTJoELYzzlmzcOHQ9370j5w0YtGtEr6lrlzRpPKXtmMaDGq/eVHtV6zFtmlSdta3VvBYLFjaYrli6WJ1Ktg5eunXpTgmpGdcBTH2EBMQoQGjePn00LM7dC8vvRQ77mnBsos8NoZN49c3DxGWeXZIDCesjBqvJXkIOVjrouDEGsX2YShQ+HCOkRUKYDyeeBwsW/4fKM0MScgOrAEcasPbxhRV7cAzYsmnfZrx7oT7TF7n4Frj7Yt27Fpvsm/f6sfEYqAnSwD6QA+bZ+uqCjpv+ooBD7ZpJ6+kTKLti06aZw48Vq1L9TqFOraeq/bJqp5utsKnmmWfAGqssVh48hZNg7FkrHVd4UC9DDTeMwYES0LOogBIKWGg4mkTcTUT1VFRvxBBP01BE2jh8cUaMYPzLRRpl4gBEGWviwEYUOxxpx7h8iMebbeL76R153LHmG3XwQ6qp/pxSJyqpAmRKnSqV8rIba7BB0BhoiuGFF7J0MeusU06JJJZ17FnHlRGMxDNPgoqMQS89/wQ0UEEHJTRDBP8oiYcadtj5SR6g3GFHHHO8zHIpS51aSksAtYQKzG6qwUbBYJ7RRc01H3TzlE8+aSSUdOxZpYNCZyWosIqu45NWXXfltdc8W5BqmyadfFIea6i8FMsro5oKnnXUctbZZ9NJJ55y4gnHG2usMSasst58E5RLPomk3EYSkcaXDXwNtABYMGuOXXnnpbfXAMIIkJtG5XnSnXEkRWq/AZ/671mDDzY4WngWZthgasHBKRlj0mTFlVM6kcSQSlY5oV6PPwY5ZJD1qOqcc/il50lyzBEnWUsJnupZadVCuGaaGcYZ53XYySYbX25ZpZJHBHlBZKOPRjppPMM45557yHHnSXr/3PGmZYExZVZmm7c+OJ2eex5mmJ+BXsUSoQvBA441xMgCjUQwVDpuuedOWoRA8MGbHr3deccc/vyDii2ta0bn62zC9uXnVUTJJBNLFFHkjz/4oEPtMca4IvMoNtc8jjkGiWIAukcnvfReBWghDFmi0VtvgqMax/Cwb6FdFMYbX2QRyfngQw425mCDDTLUIB6NM9a4PHnlL8/8iijAAF6OMSgwvXrrr8eTAAuA0EMTYeSh56pmckHFFEccGaSPPvKwIw465CA+fuKHnz94NtDAf43jl2cec8yb3xwYhje8MaAAewdEYAItooEjvMGBZAjDE6wghjWkIQ1msGAa4mDB/zNo0INxaAP85KcG/OHPDCcUQwqzkEK2sS0LWdCc5jaHBS+AYQplwEIWahAABfbQh3MLwAzmQAYvPOEJSzCiFdaGwQxakIkXbKIF29CGMrTBhF8QwxfM8AUucrELX6RCF5xABSeUMQlRcAISopCEKVhhCm/EwhbSmIAf1tGOIAsADuZghSP00YhH1IIYvgiGNHyhkIcEwxcSmcg0gKEMjixDJCWphS9QUguXrEIXqkAFTnIyCU5IQiiRgIQkKOEJSkClEqaghB9EIQN3hGUse2WCOShhB0ToYy6P8EUtdIEKWgCDJStZyUta8pJYAMMW4rgFLzRTmZusQjSrAAUqMP/BmtYUQhKY8ANu4rIIRPgmEYigBB4goQayRGc6A6WAKtiSCEEggg+CcAR4ZqGTvyymFqqQT0zqUwtxBOgWBGoFglpBClBgAhQUWgQmFEEIDxUCD36gAx74YAc9yAERdpCDHuzABzXQgQ4MoE6SlnRDJyjCDXrgg5X6QJ5BEIITmDBGmepTmjeNJhRyWgUp9NSnPX2CFP6ohCEMQQhFFUIPeLBUHtQgBziQQQ5kcAMZVLWqO7ABSKlnUq529SIDeEEObNDRju7ArDgIZVpDmVCFttWtbj1oEaDwTSWI065HeGcQWMpUpfLABjawqgxc4ALBDtawLGBBDULgVcZytQH/L7ABDGxwA8pSdgY50AE3NcvNhspVrkUFrVFDC1oiDGGlpzVranGAg7/+9QUvMGwKXCDbFNTWtidAAQtQILrG9hadE4DBa18AA+LKYAYzAGlIlatc0Cb1qDwYAnSlq9QeVLe6ObgBdm+w2tUe97gueIEKZltbE6TgBCYAQXrVa4IRhCAELKCjb+V7RwuoILyvJW5+a7Bf/va3BkrNAQ8CDGCmLrW1gJ3sDWAgA+LOAAYzaAEMWjDhFZxAvRfG8AZAsIEOZKADKNjqfEXcwweowMQmhoF4W/ACxLbYxYidbIwPfGDICle4hnXBClww4QmbgAQk8AB6QfCBDRTZyEW2/4AGknwBDGCgwzwccZQPiIAfV/kEJ1iBCVCwZS53mcs1fq0NbGxj+4rXxCtQQZazbAI2e6ADb+6ACDSgZCVbwM4VsACe82yBCVDAzxkYqZQFXb0AfIAEhvbAj9HrXkY3utEjKPN9y3xiE1/5yj5mM5uHDGc40xnPFaiABEQtgQiQmtQPkAAFJAABCsR30K8e3QVUsIEP1HrTTcZ1rnU9ghOQwNJXHoGvq0yCIX8gvSIg8psv0IELNPsCFMgzqCMw7Qc8oAHXxja2GfCABDwAArAG99wS8IIOWOACRN4ABVjtZ3a3u92GPvShaz3vWtP6yM328wQuMAF+81vV045AA/8Cfm0FFLzgCDB4wROgAAbwNtwPN1oARjCCC1TgAkpmwAESkAAGdNzjH2dAAijAYWZ3QAMXMPLFL2DnfbO7396WQLUfsG2CN2ABClhAzhGwc57v3AAIOMABFOBwiBf9YxRAQQcmIIEKPGAATzfAAAwwdaobIOhXnwCfVz4Bi2e93+1etcwZ0ICxM0ABC094z3s+AAIggO0GIADcox5oo9edXgfoAAYoYG0DOAQAAQA84J8+eMIbQAITQPXhZe5txo+d42cv+NUlz/O2I4AAl8c8Adi+ec6z3e6fl9cA2q0Av5fe9KcHgAGqne2Nt37jChD61as+dalL/fKb1/zmBTBdgN0LIAC+/z3vBwBl0BdfVwmAAAMgcADUN9/0CJd80GdPdalHnfCEz33vf7994AM/8N8nvvHFP6gBZDwBAzC94AkfgOZX3/rWv378nx6A4Q8f8N4PvEMAP37+6ykgADs=
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|