actionpack 2.3.5 → 2.3.6

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 (587) hide show
  1. data/CHANGELOG +45 -0
  2. data/MIT-LICENSE +1 -1
  3. data/README +7 -7
  4. data/Rakefile +2 -2
  5. data/lib/action_controller.rb +2 -2
  6. data/lib/action_controller/assertions/response_assertions.rb +18 -9
  7. data/lib/action_controller/base.rb +14 -14
  8. data/lib/action_controller/caching/fragments.rb +6 -6
  9. data/lib/action_controller/cookies.rb +96 -0
  10. data/lib/action_controller/failsafe.rb +1 -0
  11. data/lib/action_controller/flash.rb +42 -0
  12. data/lib/action_controller/integration.rb +5 -1
  13. data/lib/action_controller/polymorphic_routes.rb +1 -1
  14. data/lib/action_controller/rack_lint_patch.rb +1 -1
  15. data/lib/action_controller/rescue.rb +2 -2
  16. data/lib/action_controller/response.rb +4 -7
  17. data/lib/action_controller/routing/route_set.rb +1 -0
  18. data/lib/action_controller/session/abstract_store.rb +6 -0
  19. data/lib/action_controller/session/cookie_store.rb +6 -0
  20. data/lib/action_controller/templates/rescues/_trace.erb +2 -2
  21. data/lib/action_controller/url_rewriter.rb +4 -1
  22. data/lib/action_pack.rb +1 -1
  23. data/lib/action_pack/version.rb +1 -1
  24. data/lib/action_view.rb +3 -3
  25. data/lib/action_view/helpers/active_record_helper.rb +11 -11
  26. data/lib/action_view/helpers/asset_tag_helper.rb +2 -2
  27. data/lib/action_view/helpers/capture_helper.rb +2 -2
  28. data/lib/action_view/helpers/date_helper.rb +12 -11
  29. data/lib/action_view/helpers/debug_helper.rb +2 -2
  30. data/lib/action_view/helpers/form_helper.rb +49 -12
  31. data/lib/action_view/helpers/form_options_helper.rb +3 -4
  32. data/lib/action_view/helpers/form_tag_helper.rb +7 -4
  33. data/lib/action_view/helpers/javascript_helper.rb +1 -1
  34. data/lib/action_view/helpers/number_helper.rb +1 -1
  35. data/lib/action_view/helpers/prototype_helper.rb +2 -2
  36. data/lib/action_view/helpers/raw_output_helper.rb +2 -2
  37. data/lib/action_view/helpers/sanitize_helper.rb +2 -10
  38. data/lib/action_view/helpers/tag_helper.rb +6 -5
  39. data/lib/action_view/helpers/text_helper.rb +5 -5
  40. data/lib/action_view/helpers/translation_helper.rb +6 -4
  41. data/lib/action_view/helpers/url_helper.rb +9 -11
  42. data/lib/action_view/partials.rb +2 -1
  43. data/lib/action_view/paths.rb +8 -0
  44. data/lib/action_view/renderable.rb +16 -2
  45. data/lib/action_view/template_handlers/erb.rb +3 -5
  46. data/lib/action_view/test_case.rb +2 -2
  47. data/test/abstract_unit.rb +3 -3
  48. data/test/controller/action_pack_assertions_test.rb +3 -1
  49. data/test/controller/assert_select_test.rb +1 -0
  50. data/test/controller/caching_test.rb +16 -2
  51. data/test/controller/cookie_test.rb +37 -1
  52. data/test/controller/flash_test.rb +28 -1
  53. data/test/controller/integration_test.rb +0 -1
  54. data/test/controller/localized_templates_test.rb +24 -0
  55. data/test/controller/output_escaping_test.rb +19 -0
  56. data/test/controller/rack_test.rb +1 -4
  57. data/test/controller/render_test.rb +11 -2
  58. data/test/controller/rescue_test.rb +8 -2
  59. data/test/controller/routing_test.rb +1 -0
  60. data/test/controller/send_file_test.rb +1 -1
  61. data/test/controller/session/cookie_store_test.rb +2 -2
  62. data/test/controller/url_rewriter_test.rb +10 -6
  63. data/test/fixtures/localized/hello_world.de.html +1 -0
  64. data/test/fixtures/localized/hello_world.en.html +1 -0
  65. data/test/fixtures/test/_customer_counter_with_as.erb +1 -0
  66. data/test/fixtures/test/_utf8_partial.html.erb +1 -0
  67. data/test/fixtures/test/_utf8_partial_magic.html.erb +2 -0
  68. data/test/fixtures/test/array_translation.erb +1 -0
  69. data/test/fixtures/test/scoped_array_translation.erb +1 -0
  70. data/test/fixtures/test/utf8.html.erb +4 -2
  71. data/test/fixtures/test/utf8_magic.html.erb +5 -0
  72. data/test/fixtures/test/utf8_magic_with_bare_partial.html.erb +5 -0
  73. data/test/template/active_record_helper_i18n_test.rb +9 -2
  74. data/test/template/asset_tag_helper_test.rb +0 -1
  75. data/test/template/date_helper_test.rb +118 -0
  76. data/test/template/erb_util_test.rb +12 -0
  77. data/test/template/form_helper_test.rb +57 -3
  78. data/test/template/form_tag_helper_test.rb +15 -9
  79. data/test/template/render_test.rb +47 -8
  80. data/test/template/text_helper_test.rb +26 -1
  81. data/test/template/translation_helper_test.rb +20 -2
  82. data/test/template/url_helper_test.rb +20 -1
  83. data/test/tmp/RackMultipart20100114-2850-18awt99-0 +1 -0
  84. data/test/tmp/RackMultipart20100114-2850-19mxvfk-0 +0 -0
  85. data/test/tmp/RackMultipart20100114-2850-1il5j9y-0 +1 -0
  86. data/test/tmp/RackMultipart20100114-2850-1kr4fph-0 +1 -0
  87. data/test/tmp/RackMultipart20100114-2850-1whjzgd-0 +0 -0
  88. data/test/tmp/RackMultipart20100114-2850-2oxu19-0 +1 -0
  89. data/test/tmp/RackMultipart20100114-2850-34lp5r-0 +0 -0
  90. data/test/tmp/RackMultipart20100114-2850-bqfazg-0 +1 -0
  91. data/test/tmp/RackMultipart20100114-2850-vbyi8g-0 +0 -0
  92. data/test/tmp/RackMultipart20100127-16318-140g9v4-0 +1 -0
  93. data/test/tmp/RackMultipart20100127-16318-1gc081d-0 +0 -0
  94. data/test/tmp/RackMultipart20100127-16318-1hs9edk-0 +0 -0
  95. data/test/tmp/RackMultipart20100127-16318-1xv7yvp-0 +1 -0
  96. data/test/tmp/RackMultipart20100127-16318-9eyfmo-0 +1 -0
  97. data/test/tmp/RackMultipart20100127-16318-o81drl-0 +0 -0
  98. data/test/tmp/RackMultipart20100127-16318-ubd6vm-0 +1 -0
  99. data/test/tmp/RackMultipart20100127-16318-xltjpf-0 +1 -0
  100. data/test/tmp/RackMultipart20100127-16318-z0s5v6-0 +0 -0
  101. data/test/tmp/RackMultipart20100131-1041-1fpxdo1-0 +1 -0
  102. data/test/tmp/RackMultipart20100131-1041-1hgld51-0 +1 -0
  103. data/test/tmp/RackMultipart20100131-1041-1sfw61g-0 +0 -0
  104. data/test/tmp/RackMultipart20100131-1041-1txiwx-0 +0 -0
  105. data/test/tmp/RackMultipart20100131-1041-3nxhtk-0 +1 -0
  106. data/test/tmp/RackMultipart20100131-1041-msmvjp-0 +1 -0
  107. data/test/tmp/RackMultipart20100131-1041-snlih6-0 +0 -0
  108. data/test/tmp/RackMultipart20100131-1041-utmx6r-0 +1 -0
  109. data/test/tmp/RackMultipart20100131-1041-vr2eir-0 +0 -0
  110. data/test/tmp/RackMultipart20100131-1200-116kivk-0 +1 -0
  111. data/test/tmp/RackMultipart20100131-1200-13yj0g7-0 +0 -0
  112. data/test/tmp/RackMultipart20100131-1200-1b0awcl-0 +1 -0
  113. data/test/tmp/RackMultipart20100131-1200-1qc4a1o-0 +0 -0
  114. data/test/tmp/RackMultipart20100131-1200-1sch05j-0 +1 -0
  115. data/test/tmp/RackMultipart20100131-1200-2wwvjw-0 +1 -0
  116. data/test/tmp/RackMultipart20100131-1200-4ybied-0 +0 -0
  117. data/test/tmp/RackMultipart20100131-1200-n4jwgg-0 +0 -0
  118. data/test/tmp/RackMultipart20100131-1200-nqwg4i-0 +1 -0
  119. data/test/tmp/RackMultipart20100131-1566-10hgtsj-0 +0 -0
  120. data/test/tmp/RackMultipart20100131-1566-1m2ix3r-0 +1 -0
  121. data/test/tmp/RackMultipart20100131-1566-1szdt3p-0 +0 -0
  122. data/test/tmp/RackMultipart20100131-1566-6cb9xb-0 +0 -0
  123. data/test/tmp/RackMultipart20100131-1566-aervb6-0 +1 -0
  124. data/test/tmp/RackMultipart20100131-1566-o57d30-0 +1 -0
  125. data/test/tmp/RackMultipart20100131-1566-q06s4u-0 +1 -0
  126. data/test/tmp/RackMultipart20100131-1566-r3eau5-0 +1 -0
  127. data/test/tmp/RackMultipart20100131-1566-rhvbsr-0 +0 -0
  128. data/test/tmp/RackMultipart20100131-2176-19tk67i-0 +0 -0
  129. data/test/tmp/RackMultipart20100131-2176-1iuhegu-0 +0 -0
  130. data/test/tmp/RackMultipart20100131-2176-1mfu303-0 +1 -0
  131. data/test/tmp/RackMultipart20100131-2176-1qv96rf-0 +1 -0
  132. data/test/tmp/RackMultipart20100131-2176-7rae4i-0 +1 -0
  133. data/test/tmp/RackMultipart20100131-2176-g7hqdt-0 +0 -0
  134. data/test/tmp/RackMultipart20100131-2176-spxexk-0 +1 -0
  135. data/test/tmp/RackMultipart20100131-2176-x57r68-0 +0 -0
  136. data/test/tmp/RackMultipart20100131-2176-xx8aqr-0 +1 -0
  137. data/test/tmp/RackMultipart20100131-2251-1kx4y7u-0 +1 -0
  138. data/test/tmp/RackMultipart20100131-2251-1p70d6c-0 +1 -0
  139. data/test/tmp/RackMultipart20100131-2251-1w181g4-0 +1 -0
  140. data/test/tmp/RackMultipart20100131-2251-9dl2hy-0 +1 -0
  141. data/test/tmp/RackMultipart20100131-2251-dd4aqa-0 +0 -0
  142. data/test/tmp/RackMultipart20100131-2251-dq1bs7-0 +0 -0
  143. data/test/tmp/RackMultipart20100131-2251-rjlwid-0 +0 -0
  144. data/test/tmp/RackMultipart20100131-2251-svv2my-0 +0 -0
  145. data/test/tmp/RackMultipart20100131-2251-znyywm-0 +1 -0
  146. data/test/tmp/RackMultipart20100131-2563-1b9atyq-0 +1 -0
  147. data/test/tmp/RackMultipart20100131-2563-1j4bk06-0 +1 -0
  148. data/test/tmp/RackMultipart20100131-2563-1nd3jkk-0 +0 -0
  149. data/test/tmp/RackMultipart20100131-2563-1ud0b43-0 +1 -0
  150. data/test/tmp/RackMultipart20100131-2563-2t9aus-0 +1 -0
  151. data/test/tmp/RackMultipart20100131-2563-4xhtq9-0 +0 -0
  152. data/test/tmp/RackMultipart20100131-2563-80xjuq-0 +1 -0
  153. data/test/tmp/RackMultipart20100131-2563-du6204-0 +0 -0
  154. data/test/tmp/RackMultipart20100131-2563-m2xw0u-0 +0 -0
  155. data/test/tmp/RackMultipart20100131-3324-1bz902a-0 +1 -0
  156. data/test/tmp/RackMultipart20100131-3324-1cj3c2q-0 +1 -0
  157. data/test/tmp/RackMultipart20100131-3324-1dcwnmh-0 +1 -0
  158. data/test/tmp/RackMultipart20100131-3324-1qu1vvo-0 +1 -0
  159. data/test/tmp/RackMultipart20100131-3324-1wksfd7-0 +0 -0
  160. data/test/tmp/RackMultipart20100131-3324-8bmth5-0 +0 -0
  161. data/test/tmp/RackMultipart20100131-3324-c0sen5-0 +1 -0
  162. data/test/tmp/RackMultipart20100131-3324-mhg9zb-0 +0 -0
  163. data/test/tmp/RackMultipart20100131-3324-mram2k-0 +0 -0
  164. data/test/tmp/RackMultipart20100131-3712-11l26yb-0 +1 -0
  165. data/test/tmp/RackMultipart20100131-3712-18qhzz9-0 +1 -0
  166. data/test/tmp/RackMultipart20100131-3712-19efkti-0 +1 -0
  167. data/test/tmp/RackMultipart20100131-3712-1s6qbc-0 +1 -0
  168. data/test/tmp/RackMultipart20100131-3712-948hce-0 +0 -0
  169. data/test/tmp/RackMultipart20100131-3712-rliyfc-0 +0 -0
  170. data/test/tmp/RackMultipart20100131-3712-tvfxgh-0 +1 -0
  171. data/test/tmp/RackMultipart20100131-3712-ywjidy-0 +0 -0
  172. data/test/tmp/RackMultipart20100131-3712-zwa1yl-0 +0 -0
  173. data/test/tmp/RackMultipart20100131-4098-12u1n7m-0 +1 -0
  174. data/test/tmp/RackMultipart20100131-4098-188dwav-0 +0 -0
  175. data/test/tmp/RackMultipart20100131-4098-1a2nulg-0 +0 -0
  176. data/test/tmp/RackMultipart20100131-4098-1c9gbau-0 +1 -0
  177. data/test/tmp/RackMultipart20100131-4098-2923tu-0 +0 -0
  178. data/test/tmp/RackMultipart20100131-4098-he7nm8-0 +0 -0
  179. data/test/tmp/RackMultipart20100131-4098-nw5pcp-0 +1 -0
  180. data/test/tmp/RackMultipart20100131-4098-plj7cd-0 +1 -0
  181. data/test/tmp/RackMultipart20100131-4098-wha9du-0 +1 -0
  182. data/test/tmp/RackMultipart20100131-4178-10rjsef-0 +0 -0
  183. data/test/tmp/RackMultipart20100131-4178-13qqazs-0 +0 -0
  184. data/test/tmp/RackMultipart20100131-4178-1hpjqkl-0 +0 -0
  185. data/test/tmp/RackMultipart20100131-4178-1idjtdl-0 +1 -0
  186. data/test/tmp/RackMultipart20100131-4178-1ke1zpq-0 +1 -0
  187. data/test/tmp/RackMultipart20100131-4178-6y51hb-0 +1 -0
  188. data/test/tmp/RackMultipart20100131-4178-98i2o0-0 +1 -0
  189. data/test/tmp/RackMultipart20100131-4178-9k4jj6-0 +0 -0
  190. data/test/tmp/RackMultipart20100131-4178-zcxa4g-0 +1 -0
  191. data/test/tmp/RackMultipart20100131-4297-1moo7v9-0 +0 -0
  192. data/test/tmp/RackMultipart20100131-4297-1yxib1r-0 +0 -0
  193. data/test/tmp/RackMultipart20100131-4297-b239su-0 +0 -0
  194. data/test/tmp/RackMultipart20100131-4297-ht0qby-0 +1 -0
  195. data/test/tmp/RackMultipart20100131-4297-ia5rov-0 +1 -0
  196. data/test/tmp/RackMultipart20100131-4297-m6gof0-0 +1 -0
  197. data/test/tmp/RackMultipart20100131-4297-nm3rvt-0 +0 -0
  198. data/test/tmp/RackMultipart20100131-4297-qla73p-0 +1 -0
  199. data/test/tmp/RackMultipart20100131-4297-ylrtmu-0 +1 -0
  200. data/test/tmp/RackMultipart20100131-4434-11fsv9d-0 +0 -0
  201. data/test/tmp/RackMultipart20100131-4434-19ycsmr-0 +1 -0
  202. data/test/tmp/RackMultipart20100131-4434-1h0ws4q-0 +1 -0
  203. data/test/tmp/RackMultipart20100131-4434-1lszvv8-0 +0 -0
  204. data/test/tmp/RackMultipart20100131-4434-1ocgqu3-0 +1 -0
  205. data/test/tmp/RackMultipart20100131-4434-1ukqdfd-0 +1 -0
  206. data/test/tmp/RackMultipart20100131-4434-cq7rvl-0 +1 -0
  207. data/test/tmp/RackMultipart20100131-4434-f7jbl4-0 +0 -0
  208. data/test/tmp/RackMultipart20100131-4434-vxlg5t-0 +0 -0
  209. data/test/tmp/RackMultipart20100131-4544-1bf8inz-0 +1 -0
  210. data/test/tmp/RackMultipart20100131-4544-1vj44nb-0 +0 -0
  211. data/test/tmp/RackMultipart20100131-4544-20mdip-0 +1 -0
  212. data/test/tmp/RackMultipart20100131-4544-89y67y-0 +0 -0
  213. data/test/tmp/RackMultipart20100131-4544-gdbsui-0 +1 -0
  214. data/test/tmp/RackMultipart20100131-4544-ko8plt-0 +0 -0
  215. data/test/tmp/RackMultipart20100131-4544-ojykbo-0 +1 -0
  216. data/test/tmp/RackMultipart20100131-4544-r8sahr-0 +0 -0
  217. data/test/tmp/RackMultipart20100131-4544-uluv8k-0 +1 -0
  218. data/test/tmp/RackMultipart20100131-4655-11ovmuw-0 +0 -0
  219. data/test/tmp/RackMultipart20100131-4655-12iht5p-0 +1 -0
  220. data/test/tmp/RackMultipart20100131-4655-142j0ug-0 +0 -0
  221. data/test/tmp/RackMultipart20100131-4655-15affqj-0 +0 -0
  222. data/test/tmp/RackMultipart20100131-4655-1gv4gb4-0 +1 -0
  223. data/test/tmp/RackMultipart20100131-4655-1gwchw7-0 +1 -0
  224. data/test/tmp/RackMultipart20100131-4655-1hvqx5t-0 +1 -0
  225. data/test/tmp/RackMultipart20100131-4655-1jhgk7a-0 +1 -0
  226. data/test/tmp/RackMultipart20100131-4655-1yktury-0 +0 -0
  227. data/test/tmp/RackMultipart20100131-5244-13z86ip-0 +0 -0
  228. data/test/tmp/RackMultipart20100131-5244-17vpiv6-0 +0 -0
  229. data/test/tmp/RackMultipart20100131-5244-1a9w3e-0 +1 -0
  230. data/test/tmp/RackMultipart20100131-5244-1ox8g0l-0 +1 -0
  231. data/test/tmp/RackMultipart20100131-5244-1qrzlqz-0 +1 -0
  232. data/test/tmp/RackMultipart20100131-5244-g3mpli-0 +0 -0
  233. data/test/tmp/RackMultipart20100131-5244-gcl80c-0 +0 -0
  234. data/test/tmp/RackMultipart20100131-5244-jqk7el-0 +1 -0
  235. data/test/tmp/RackMultipart20100131-5244-st1ldm-0 +1 -0
  236. data/test/tmp/RackMultipart20100131-5383-10si01q-0 +0 -0
  237. data/test/tmp/RackMultipart20100131-5383-16ye4w3-0 +1 -0
  238. data/test/tmp/RackMultipart20100131-5383-1imlta8-0 +0 -0
  239. data/test/tmp/RackMultipart20100131-5383-1r3gvaw-0 +0 -0
  240. data/test/tmp/RackMultipart20100131-5383-3wialw-0 +1 -0
  241. data/test/tmp/RackMultipart20100131-5383-k16uor-0 +1 -0
  242. data/test/tmp/RackMultipart20100131-5383-oz1b3a-0 +0 -0
  243. data/test/tmp/RackMultipart20100131-5383-una84e-0 +1 -0
  244. data/test/tmp/RackMultipart20100131-5383-zk1hmz-0 +1 -0
  245. data/test/tmp/RackMultipart20100131-5711-12j0qy5-0 +1 -0
  246. data/test/tmp/RackMultipart20100131-5711-1cozdic-0 +0 -0
  247. data/test/tmp/RackMultipart20100131-5711-1kebrgm-0 +0 -0
  248. data/test/tmp/RackMultipart20100131-5711-1q3jt9q-0 +0 -0
  249. data/test/tmp/RackMultipart20100131-5711-6sv1xg-0 +1 -0
  250. data/test/tmp/RackMultipart20100131-5711-esxrbg-0 +0 -0
  251. data/test/tmp/RackMultipart20100131-5711-jfbr34-0 +1 -0
  252. data/test/tmp/RackMultipart20100131-5711-q1e91g-0 +1 -0
  253. data/test/tmp/RackMultipart20100131-5711-tdauxm-0 +1 -0
  254. data/test/tmp/RackMultipart20100131-91110-1196t1f-0 +1 -0
  255. data/test/tmp/RackMultipart20100131-91110-11tfgc4-0 +1 -0
  256. data/test/tmp/RackMultipart20100131-91110-19e4l6u-0 +0 -0
  257. data/test/tmp/RackMultipart20100131-91110-1m6i8r4-0 +0 -0
  258. data/test/tmp/RackMultipart20100131-91110-1nv9cn8-0 +1 -0
  259. data/test/tmp/RackMultipart20100131-91110-6gbf58-0 +0 -0
  260. data/test/tmp/RackMultipart20100131-91110-b7iewa-0 +1 -0
  261. data/test/tmp/RackMultipart20100131-91110-b8kbab-0 +0 -0
  262. data/test/tmp/RackMultipart20100131-91110-rq2ytl-0 +1 -0
  263. data/test/tmp/RackMultipart20100131-91876-1848spe-0 +1 -0
  264. data/test/tmp/RackMultipart20100131-91876-1u8xsmd-0 +0 -0
  265. data/test/tmp/RackMultipart20100131-91876-1vlruve-0 +0 -0
  266. data/test/tmp/RackMultipart20100131-91876-cbcvg1-0 +1 -0
  267. data/test/tmp/RackMultipart20100131-91876-jv0zd7-0 +1 -0
  268. data/test/tmp/RackMultipart20100131-91876-laype7-0 +1 -0
  269. data/test/tmp/RackMultipart20100131-91876-mswlj3-0 +1 -0
  270. data/test/tmp/RackMultipart20100131-91876-se56ms-0 +0 -0
  271. data/test/tmp/RackMultipart20100131-91876-t14psz-0 +0 -0
  272. data/test/tmp/RackMultipart20100131-93665-1cv0oop-0 +1 -0
  273. data/test/tmp/RackMultipart20100131-93665-1n0c582-0 +0 -0
  274. data/test/tmp/RackMultipart20100131-93665-1obpgzg-0 +1 -0
  275. data/test/tmp/RackMultipart20100131-93665-1pgbkl0-0 +1 -0
  276. data/test/tmp/RackMultipart20100131-93665-1udk862-0 +1 -0
  277. data/test/tmp/RackMultipart20100131-93665-9xxo6q-0 +0 -0
  278. data/test/tmp/RackMultipart20100131-93665-eawsec-0 +0 -0
  279. data/test/tmp/RackMultipart20100131-93665-g5rmm9-0 +0 -0
  280. data/test/tmp/RackMultipart20100131-93665-kdm9y0-0 +1 -0
  281. data/test/tmp/RackMultipart20100131-96270-10h26kt-0 +0 -0
  282. data/test/tmp/RackMultipart20100131-96270-1dtgwke-0 +1 -0
  283. data/test/tmp/RackMultipart20100131-96270-1pib5qg-0 +0 -0
  284. data/test/tmp/RackMultipart20100131-96270-1tfonee-0 +1 -0
  285. data/test/tmp/RackMultipart20100131-96270-1xoj9si-0 +0 -0
  286. data/test/tmp/RackMultipart20100131-96270-5kzssn-0 +0 -0
  287. data/test/tmp/RackMultipart20100131-96270-5qgi09-0 +1 -0
  288. data/test/tmp/RackMultipart20100131-96270-dlgdff-0 +1 -0
  289. data/test/tmp/RackMultipart20100131-96270-uky8ij-0 +1 -0
  290. data/test/tmp/RackMultipart20100131-96373-140mlqp-0 +1 -0
  291. data/test/tmp/RackMultipart20100131-96373-16du1gs-0 +1 -0
  292. data/test/tmp/RackMultipart20100131-96373-181k6zk-0 +1 -0
  293. data/test/tmp/RackMultipart20100131-96373-1f1xgl8-0 +0 -0
  294. data/test/tmp/RackMultipart20100131-96373-1v4tnat-0 +1 -0
  295. data/test/tmp/RackMultipart20100131-96373-5iwxty-0 +0 -0
  296. data/test/tmp/RackMultipart20100131-96373-nrglr4-0 +1 -0
  297. data/test/tmp/RackMultipart20100131-96373-tj67zf-0 +0 -0
  298. data/test/tmp/RackMultipart20100131-96373-y7mw5e-0 +0 -0
  299. data/test/tmp/RackMultipart20100131-96488-1c52jwo-0 +0 -0
  300. data/test/tmp/RackMultipart20100131-96488-1g4n5g3-0 +0 -0
  301. data/test/tmp/RackMultipart20100131-96488-1ih9vjx-0 +1 -0
  302. data/test/tmp/RackMultipart20100131-96488-1m67bqh-0 +1 -0
  303. data/test/tmp/RackMultipart20100131-96488-1sff2qf-0 +1 -0
  304. data/test/tmp/RackMultipart20100131-96488-1vxr0sz-0 +0 -0
  305. data/test/tmp/RackMultipart20100131-96488-f1va0r-0 +1 -0
  306. data/test/tmp/RackMultipart20100131-96488-godmi4-0 +0 -0
  307. data/test/tmp/RackMultipart20100131-96488-v7puqu-0 +1 -0
  308. data/test/tmp/RackMultipart20100131-96889-10srx2y-0 +1 -0
  309. data/test/tmp/RackMultipart20100131-96889-14sujbg-0 +1 -0
  310. data/test/tmp/RackMultipart20100131-96889-1edgzzr-0 +0 -0
  311. data/test/tmp/RackMultipart20100131-96889-1jtlvx0-0 +0 -0
  312. data/test/tmp/RackMultipart20100131-96889-1leo16l-0 +0 -0
  313. data/test/tmp/RackMultipart20100131-96889-1nroez0-0 +0 -0
  314. data/test/tmp/RackMultipart20100131-96889-2z4au4-0 +1 -0
  315. data/test/tmp/RackMultipart20100131-96889-v6dj39-0 +1 -0
  316. data/test/tmp/RackMultipart20100131-96889-z2owq5-0 +1 -0
  317. data/test/tmp/RackMultipart20100131-97178-1kzzmnx-0 +0 -0
  318. data/test/tmp/RackMultipart20100131-97178-1p48git-0 +0 -0
  319. data/test/tmp/RackMultipart20100131-97178-1pak2jq-0 +0 -0
  320. data/test/tmp/RackMultipart20100131-97178-1vb21z0-0 +1 -0
  321. data/test/tmp/RackMultipart20100131-97178-3pstpf-0 +1 -0
  322. data/test/tmp/RackMultipart20100131-97178-ah9j8g-0 +0 -0
  323. data/test/tmp/RackMultipart20100131-97178-dzgylu-0 +1 -0
  324. data/test/tmp/RackMultipart20100131-97178-eh8uuk-0 +1 -0
  325. data/test/tmp/RackMultipart20100131-97178-mompd7-0 +1 -0
  326. data/test/tmp/RackMultipart20100131-97404-11op195-0 +0 -0
  327. data/test/tmp/RackMultipart20100131-97404-15vgv5a-0 +0 -0
  328. data/test/tmp/RackMultipart20100131-97404-1ipzwm0-0 +1 -0
  329. data/test/tmp/RackMultipart20100131-97404-1je7x2p-0 +1 -0
  330. data/test/tmp/RackMultipart20100131-97404-1mb6juq-0 +0 -0
  331. data/test/tmp/RackMultipart20100131-97404-1uhf75x-0 +1 -0
  332. data/test/tmp/RackMultipart20100131-97404-4bkht5-0 +0 -0
  333. data/test/tmp/RackMultipart20100131-97404-8wsyqb-0 +1 -0
  334. data/test/tmp/RackMultipart20100131-97404-p5bwvt-0 +1 -0
  335. data/test/tmp/RackMultipart20100131-97860-134h0yk-0 +1 -0
  336. data/test/tmp/RackMultipart20100131-97860-137z1v8-0 +1 -0
  337. data/test/tmp/RackMultipart20100131-97860-1fxatvg-0 +1 -0
  338. data/test/tmp/RackMultipart20100131-97860-1rkrzj1-0 +0 -0
  339. data/test/tmp/RackMultipart20100131-97860-5aahhh-0 +0 -0
  340. data/test/tmp/RackMultipart20100131-97860-bk11df-0 +0 -0
  341. data/test/tmp/RackMultipart20100131-97860-bpt71-0 +0 -0
  342. data/test/tmp/RackMultipart20100131-97860-k5kib2-0 +1 -0
  343. data/test/tmp/RackMultipart20100131-97860-yj6uro-0 +1 -0
  344. data/test/tmp/RackMultipart20100131-97900-12zytln-0 +1 -0
  345. data/test/tmp/RackMultipart20100131-97900-1hpjwgc-0 +0 -0
  346. data/test/tmp/RackMultipart20100131-97900-1kuj8ok-0 +1 -0
  347. data/test/tmp/RackMultipart20100131-97900-1wtlnbe-0 +1 -0
  348. data/test/tmp/RackMultipart20100131-97900-66d1fg-0 +0 -0
  349. data/test/tmp/RackMultipart20100131-97900-m7hm3n-0 +1 -0
  350. data/test/tmp/RackMultipart20100131-97900-n2a8fd-0 +0 -0
  351. data/test/tmp/RackMultipart20100131-97900-y9kwnp-0 +1 -0
  352. data/test/tmp/RackMultipart20100131-97900-yu52kd-0 +0 -0
  353. data/test/tmp/RackMultipart20100131-97937-1fxbun8-0 +1 -0
  354. data/test/tmp/RackMultipart20100131-97937-1qjxhia-0 +1 -0
  355. data/test/tmp/RackMultipart20100131-97937-1vwp4fj-0 +1 -0
  356. data/test/tmp/RackMultipart20100131-97937-aha3dl-0 +0 -0
  357. data/test/tmp/RackMultipart20100131-97937-asyrei-0 +1 -0
  358. data/test/tmp/RackMultipart20100131-97937-d8rmsv-0 +1 -0
  359. data/test/tmp/RackMultipart20100131-97937-g9oy2w-0 +0 -0
  360. data/test/tmp/RackMultipart20100131-97937-lt544p-0 +0 -0
  361. data/test/tmp/RackMultipart20100131-97937-mgf4qa-0 +0 -0
  362. data/test/tmp/RackMultipart20100131-98521-1fdcemt-0 +0 -0
  363. data/test/tmp/RackMultipart20100131-98521-1l33j9z-0 +1 -0
  364. data/test/tmp/RackMultipart20100131-98521-1ohobk0-0 +0 -0
  365. data/test/tmp/RackMultipart20100131-98521-45jwmb-0 +1 -0
  366. data/test/tmp/RackMultipart20100131-98521-7vu49l-0 +1 -0
  367. data/test/tmp/RackMultipart20100131-98521-9kzlxx-0 +1 -0
  368. data/test/tmp/RackMultipart20100131-98521-cycfj-0 +0 -0
  369. data/test/tmp/RackMultipart20100131-98521-hhd1bf-0 +1 -0
  370. data/test/tmp/RackMultipart20100131-98521-iqvlrq-0 +0 -0
  371. data/test/tmp/RackMultipart20100201-6555-1ce2ok5-0 +1 -0
  372. data/test/tmp/RackMultipart20100201-6555-2rd8zm-0 +0 -0
  373. data/test/tmp/RackMultipart20100201-6555-9brifb-0 +0 -0
  374. data/test/tmp/RackMultipart20100201-6555-dcf8h0-0 +1 -0
  375. data/test/tmp/RackMultipart20100201-6555-meb4gi-0 +1 -0
  376. data/test/tmp/RackMultipart20100201-6555-sci6i5-0 +0 -0
  377. data/test/tmp/RackMultipart20100201-6555-sox363-0 +1 -0
  378. data/test/tmp/RackMultipart20100201-6555-x9kyyz-0 +0 -0
  379. data/test/tmp/RackMultipart20100201-6555-zqn4x6-0 +1 -0
  380. data/test/tmp/RackMultipart20100204-40252-123q4em-0 +1 -0
  381. data/test/tmp/RackMultipart20100204-40252-1jzjes5-0 +0 -0
  382. data/test/tmp/RackMultipart20100204-40252-1reve0y-0 +0 -0
  383. data/test/tmp/RackMultipart20100204-40252-1u2b3qm-0 +1 -0
  384. data/test/tmp/RackMultipart20100204-40252-3un54m-0 +1 -0
  385. data/test/tmp/RackMultipart20100204-40252-a2oh9b-0 +0 -0
  386. data/test/tmp/RackMultipart20100204-40252-od0run-0 +1 -0
  387. data/test/tmp/RackMultipart20100204-40252-qbgvnt-0 +0 -0
  388. data/test/tmp/RackMultipart20100204-40252-tey6cp-0 +1 -0
  389. data/test/tmp/RackMultipart20100204-40512-15nitzo-0 +0 -0
  390. data/test/tmp/RackMultipart20100204-40512-18g0pdd-0 +0 -0
  391. data/test/tmp/RackMultipart20100204-40512-1brd1j2-0 +1 -0
  392. data/test/tmp/RackMultipart20100204-40512-1fz7mb1-0 +0 -0
  393. data/test/tmp/RackMultipart20100204-40512-1n1muze-0 +1 -0
  394. data/test/tmp/RackMultipart20100204-40512-1q3r24f-0 +1 -0
  395. data/test/tmp/RackMultipart20100204-40512-1tnhl3y-0 +1 -0
  396. data/test/tmp/RackMultipart20100204-40512-okgtu4-0 +0 -0
  397. data/test/tmp/RackMultipart20100204-40512-qn5sg0-0 +1 -0
  398. data/test/tmp/RackMultipart20100204-57419-15yya1x-0 +1 -0
  399. data/test/tmp/RackMultipart20100204-57419-19m1c3d-0 +0 -0
  400. data/test/tmp/RackMultipart20100204-57419-1n7d3i6-0 +1 -0
  401. data/test/tmp/RackMultipart20100204-57419-1npqntd-0 +0 -0
  402. data/test/tmp/RackMultipart20100204-57419-bklpgc-0 +1 -0
  403. data/test/tmp/RackMultipart20100204-57419-ei91e5-0 +0 -0
  404. data/test/tmp/RackMultipart20100204-57419-g1hqwp-0 +1 -0
  405. data/test/tmp/RackMultipart20100204-57419-t7ag5k-0 +0 -0
  406. data/test/tmp/RackMultipart20100204-57419-xiebhk-0 +1 -0
  407. data/test/tmp/RackMultipart20100204-57658-16cfrux-0 +1 -0
  408. data/test/tmp/RackMultipart20100204-57658-19wbkan-0 +1 -0
  409. data/test/tmp/RackMultipart20100204-57658-1qptexw-0 +0 -0
  410. data/test/tmp/RackMultipart20100204-57658-1u2bpg8-0 +0 -0
  411. data/test/tmp/RackMultipart20100204-57658-1v8jrhq-0 +0 -0
  412. data/test/tmp/RackMultipart20100204-57658-48l4m0-0 +1 -0
  413. data/test/tmp/RackMultipart20100204-57658-hpw0o9-0 +1 -0
  414. data/test/tmp/RackMultipart20100204-57658-l75jof-0 +1 -0
  415. data/test/tmp/RackMultipart20100204-57658-t3or19-0 +0 -0
  416. data/test/tmp/RackMultipart20100204-57712-101mfz2-0 +1 -0
  417. data/test/tmp/RackMultipart20100204-57712-136zsqs-0 +0 -0
  418. data/test/tmp/RackMultipart20100204-57712-16ge0ra-0 +1 -0
  419. data/test/tmp/RackMultipart20100204-57712-18dppuc-0 +0 -0
  420. data/test/tmp/RackMultipart20100204-57712-1aj6ady-0 +0 -0
  421. data/test/tmp/RackMultipart20100204-57712-1nqkndh-0 +1 -0
  422. data/test/tmp/RackMultipart20100204-57712-1pngw5w-0 +1 -0
  423. data/test/tmp/RackMultipart20100204-57712-6lo90o-0 +1 -0
  424. data/test/tmp/RackMultipart20100204-57712-ufq7x-0 +0 -0
  425. data/test/tmp/RackMultipart20100204-58321-10lc3a6-0 +1 -0
  426. data/test/tmp/RackMultipart20100204-58321-15o8a4o-0 +0 -0
  427. data/test/tmp/RackMultipart20100204-58321-1sos76-0 +1 -0
  428. data/test/tmp/RackMultipart20100204-58321-26876u-0 +1 -0
  429. data/test/tmp/RackMultipart20100204-58321-hnz5b8-0 +0 -0
  430. data/test/tmp/RackMultipart20100204-58321-lrmvfa-0 +1 -0
  431. data/test/tmp/RackMultipart20100204-58321-q0ak2g-0 +1 -0
  432. data/test/tmp/RackMultipart20100204-58321-sa8wal-0 +0 -0
  433. data/test/tmp/RackMultipart20100204-58321-z7jxeq-0 +0 -0
  434. data/test/tmp/RackMultipart20100204-59702-1fdw43n-0 +1 -0
  435. data/test/tmp/RackMultipart20100204-59702-2hf4ld-0 +1 -0
  436. data/test/tmp/RackMultipart20100204-59702-2ldyxj-0 +0 -0
  437. data/test/tmp/RackMultipart20100204-59702-aqevfm-0 +1 -0
  438. data/test/tmp/RackMultipart20100204-59702-dpbv5t-0 +0 -0
  439. data/test/tmp/RackMultipart20100204-59702-ec8276-0 +1 -0
  440. data/test/tmp/RackMultipart20100204-59702-jn6ncc-0 +1 -0
  441. data/test/tmp/RackMultipart20100204-59702-m8xobr-0 +0 -0
  442. data/test/tmp/RackMultipart20100204-59702-q89plk-0 +0 -0
  443. data/test/tmp/RackMultipart20100204-59747-14sdb6-0 +1 -0
  444. data/test/tmp/RackMultipart20100204-59747-15742uk-0 +1 -0
  445. data/test/tmp/RackMultipart20100204-59747-15lp9kl-0 +0 -0
  446. data/test/tmp/RackMultipart20100204-59747-1a7ub6i-0 +0 -0
  447. data/test/tmp/RackMultipart20100204-59747-1i77fp1-0 +1 -0
  448. data/test/tmp/RackMultipart20100204-59747-1mfl7gf-0 +0 -0
  449. data/test/tmp/RackMultipart20100204-59747-1qrkt89-0 +0 -0
  450. data/test/tmp/RackMultipart20100204-59747-6biaui-0 +1 -0
  451. data/test/tmp/RackMultipart20100204-59747-m7iqd0-0 +1 -0
  452. data/test/tmp/RackMultipart20100204-60097-1kgjis5-0 +0 -0
  453. data/test/tmp/RackMultipart20100204-60097-1odv8os-0 +1 -0
  454. data/test/tmp/RackMultipart20100204-60097-1p5yvyk-0 +0 -0
  455. data/test/tmp/RackMultipart20100204-60097-43si9w-0 +1 -0
  456. data/test/tmp/RackMultipart20100204-60097-awjfar-0 +1 -0
  457. data/test/tmp/RackMultipart20100204-60097-d7g9gf-0 +1 -0
  458. data/test/tmp/RackMultipart20100204-60097-fmxwtb-0 +0 -0
  459. data/test/tmp/RackMultipart20100204-60097-i8r8ph-0 +0 -0
  460. data/test/tmp/RackMultipart20100204-60097-yv1urn-0 +1 -0
  461. data/test/tmp/RackMultipart20100204-60773-14k87gs-0 +1 -0
  462. data/test/tmp/RackMultipart20100204-60773-15uh5fc-0 +1 -0
  463. data/test/tmp/RackMultipart20100204-60773-1b4gi3-0 +1 -0
  464. data/test/tmp/RackMultipart20100204-60773-1g0sg6r-0 +1 -0
  465. data/test/tmp/RackMultipart20100204-60773-1jgjbwl-0 +0 -0
  466. data/test/tmp/RackMultipart20100204-60773-1kk50pp-0 +0 -0
  467. data/test/tmp/RackMultipart20100204-60773-1xktk0q-0 +0 -0
  468. data/test/tmp/RackMultipart20100204-60773-jcuq05-0 +1 -0
  469. data/test/tmp/RackMultipart20100204-60773-og04od-0 +0 -0
  470. data/test/tmp/RackMultipart20100205-69480-169yh4u-0 +1 -0
  471. data/test/tmp/RackMultipart20100205-69480-16ry3sk-0 +0 -0
  472. data/test/tmp/RackMultipart20100205-69480-1dm58eb-0 +1 -0
  473. data/test/tmp/RackMultipart20100205-69480-1e6dfel-0 +1 -0
  474. data/test/tmp/RackMultipart20100205-69480-1knio7h-0 +0 -0
  475. data/test/tmp/RackMultipart20100205-69480-1rxthf1-0 +1 -0
  476. data/test/tmp/RackMultipart20100205-69480-1sqp1p6-0 +1 -0
  477. data/test/tmp/RackMultipart20100205-69480-k3c5xi-0 +0 -0
  478. data/test/tmp/RackMultipart20100205-69480-y0o7bs-0 +0 -0
  479. data/test/tmp/RackMultipart20100205-89390-12t4t4h-0 +0 -0
  480. data/test/tmp/RackMultipart20100205-89390-18sku49-0 +1 -0
  481. data/test/tmp/RackMultipart20100205-89390-1aeaxrj-0 +0 -0
  482. data/test/tmp/RackMultipart20100205-89390-1ej1o6b-0 +0 -0
  483. data/test/tmp/RackMultipart20100205-89390-1qbye80-0 +1 -0
  484. data/test/tmp/RackMultipart20100205-89390-1t2reiw-0 +0 -0
  485. data/test/tmp/RackMultipart20100205-89390-2j4ebh-0 +1 -0
  486. data/test/tmp/RackMultipart20100205-89390-cqkz93-0 +1 -0
  487. data/test/tmp/RackMultipart20100205-89390-ehlxym-0 +1 -0
  488. data/test/tmp/RackMultipart20100207-41099-1db1yc7-0 +0 -0
  489. data/test/tmp/RackMultipart20100207-41099-1enfwih-0 +0 -0
  490. data/test/tmp/RackMultipart20100207-41099-1hiqogn-0 +1 -0
  491. data/test/tmp/RackMultipart20100207-41099-1n21xz7-0 +0 -0
  492. data/test/tmp/RackMultipart20100207-41099-1ofbaxj-0 +0 -0
  493. data/test/tmp/RackMultipart20100207-41099-1pqhw0q-0 +1 -0
  494. data/test/tmp/RackMultipart20100207-41099-1s6zxzw-0 +1 -0
  495. data/test/tmp/RackMultipart20100207-41099-asxuq9-0 +1 -0
  496. data/test/tmp/RackMultipart20100207-41099-eowd6o-0 +1 -0
  497. data/test/tmp/RackMultipart20100209-65426-10ag1jr-0 +1 -0
  498. data/test/tmp/RackMultipart20100209-65426-13zm3yu-0 +0 -0
  499. data/test/tmp/RackMultipart20100209-65426-1otg9r6-0 +0 -0
  500. data/test/tmp/RackMultipart20100209-65426-1rdz5v6-0 +1 -0
  501. data/test/tmp/RackMultipart20100209-65426-1usq2ff-0 +1 -0
  502. data/test/tmp/RackMultipart20100209-65426-1wxs8n7-0 +1 -0
  503. data/test/tmp/RackMultipart20100209-65426-4uffbj-0 +1 -0
  504. data/test/tmp/RackMultipart20100209-65426-a5hra7-0 +0 -0
  505. data/test/tmp/RackMultipart20100209-65426-ylpq1h-0 +0 -0
  506. data/test/tmp/RackMultipart20100209-65558-1bghj62-0 +0 -0
  507. data/test/tmp/RackMultipart20100209-65558-1fbovnp-0 +1 -0
  508. data/test/tmp/RackMultipart20100209-65558-1hfwl02-0 +1 -0
  509. data/test/tmp/RackMultipart20100209-65558-b35wyr-0 +0 -0
  510. data/test/tmp/RackMultipart20100209-65558-esd0f1-0 +1 -0
  511. data/test/tmp/RackMultipart20100209-65558-gq26ri-0 +0 -0
  512. data/test/tmp/RackMultipart20100209-65558-mwizdx-0 +1 -0
  513. data/test/tmp/RackMultipart20100209-65558-ntlzq6-0 +1 -0
  514. data/test/tmp/RackMultipart20100209-65558-yoxcgc-0 +0 -0
  515. data/test/tmp/RackMultipart20100212-43647-12bo3g0-0 +0 -0
  516. data/test/tmp/RackMultipart20100212-43647-133b4b8-0 +1 -0
  517. data/test/tmp/RackMultipart20100212-43647-1b2g7f7-0 +1 -0
  518. data/test/tmp/RackMultipart20100212-43647-1et2ima-0 +0 -0
  519. data/test/tmp/RackMultipart20100212-43647-1thip8b-0 +1 -0
  520. data/test/tmp/RackMultipart20100212-43647-1x05hpf-0 +1 -0
  521. data/test/tmp/RackMultipart20100212-43647-cbseb3-0 +0 -0
  522. data/test/tmp/RackMultipart20100212-43647-mybv0k-0 +1 -0
  523. data/test/tmp/RackMultipart20100212-43647-scxg3k-0 +0 -0
  524. data/test/tmp/RackMultipart20100316-26215-15fvlkf-0 +1 -0
  525. data/test/tmp/RackMultipart20100316-26215-15ms9t8-0 +0 -0
  526. data/test/tmp/RackMultipart20100316-26215-196k138-0 +0 -0
  527. data/test/tmp/RackMultipart20100316-26215-1qbnikd-0 +1 -0
  528. data/test/tmp/RackMultipart20100316-26215-1tey31-0 +1 -0
  529. data/test/tmp/RackMultipart20100316-26215-dp0rwx-0 +0 -0
  530. data/test/tmp/RackMultipart20100316-26215-lmfp1-0 +1 -0
  531. data/test/tmp/RackMultipart20100316-26215-njsjmn-0 +0 -0
  532. data/test/tmp/RackMultipart20100316-26215-z39dzf-0 +1 -0
  533. data/test/tmp/mona_lisa.jpg20100114-2850-1t73ev7-0 +0 -0
  534. data/test/tmp/mona_lisa.jpg20100127-16318-1bffb05-0 +0 -0
  535. data/test/tmp/mona_lisa.jpg20100131-1041-1rvua2k-0 +0 -0
  536. data/test/tmp/mona_lisa.jpg20100131-1200-i3rods-0 +0 -0
  537. data/test/tmp/mona_lisa.jpg20100131-1566-18mcqh9-0 +0 -0
  538. data/test/tmp/mona_lisa.jpg20100131-2176-1t3bsp-0 +0 -0
  539. data/test/tmp/mona_lisa.jpg20100131-2251-1tz4wqa-0 +0 -0
  540. data/test/tmp/mona_lisa.jpg20100131-2563-ohvnnb-0 +0 -0
  541. data/test/tmp/mona_lisa.jpg20100131-3076-m9pk9y-0 +0 -0
  542. data/test/tmp/mona_lisa.jpg20100131-3324-9rpzdj-0 +0 -0
  543. data/test/tmp/mona_lisa.jpg20100131-3712-wf4b9m-0 +0 -0
  544. data/test/tmp/mona_lisa.jpg20100131-4098-l9cg9j-0 +0 -0
  545. data/test/tmp/mona_lisa.jpg20100131-4178-vk5vzl-0 +0 -0
  546. data/test/tmp/mona_lisa.jpg20100131-4297-ger5pb-0 +0 -0
  547. data/test/tmp/mona_lisa.jpg20100131-4434-1bacf3n-0 +0 -0
  548. data/test/tmp/mona_lisa.jpg20100131-4544-1mod9m0-0 +0 -0
  549. data/test/tmp/mona_lisa.jpg20100131-4655-14v218s-0 +0 -0
  550. data/test/tmp/mona_lisa.jpg20100131-5244-j05927-0 +0 -0
  551. data/test/tmp/mona_lisa.jpg20100131-5383-immke7-0 +0 -0
  552. data/test/tmp/mona_lisa.jpg20100131-5711-li3y72-0 +0 -0
  553. data/test/tmp/mona_lisa.jpg20100131-91110-1tcf6h5-0 +0 -0
  554. data/test/tmp/mona_lisa.jpg20100131-91876-1qvpsdp-0 +0 -0
  555. data/test/tmp/mona_lisa.jpg20100131-93665-e6omtk-0 +0 -0
  556. data/test/tmp/mona_lisa.jpg20100131-96270-l86z07-0 +0 -0
  557. data/test/tmp/mona_lisa.jpg20100131-96373-du21ld-0 +0 -0
  558. data/test/tmp/mona_lisa.jpg20100131-96488-14o5536-0 +0 -0
  559. data/test/tmp/mona_lisa.jpg20100131-96889-1gtncmi-0 +0 -0
  560. data/test/tmp/mona_lisa.jpg20100131-97178-1ppkuxt-0 +0 -0
  561. data/test/tmp/mona_lisa.jpg20100131-97404-kcrmpr-0 +0 -0
  562. data/test/tmp/mona_lisa.jpg20100131-97860-q1g3ex-0 +0 -0
  563. data/test/tmp/mona_lisa.jpg20100131-97900-1mp4tmq-0 +0 -0
  564. data/test/tmp/mona_lisa.jpg20100131-97937-o67sr4-0 +0 -0
  565. data/test/tmp/mona_lisa.jpg20100131-98521-jd7yia-0 +0 -0
  566. data/test/tmp/mona_lisa.jpg20100201-6555-1vw40l7-0 +0 -0
  567. data/test/tmp/mona_lisa.jpg20100204-40252-13zlhuo-0 +0 -0
  568. data/test/tmp/mona_lisa.jpg20100204-40512-nc3x8n-0 +0 -0
  569. data/test/tmp/mona_lisa.jpg20100204-57419-7yfe6o-0 +0 -0
  570. data/test/tmp/mona_lisa.jpg20100204-57658-b4op4h-0 +0 -0
  571. data/test/tmp/mona_lisa.jpg20100204-57712-11uqh50-0 +0 -0
  572. data/test/tmp/mona_lisa.jpg20100204-58321-ukp8q0-0 +0 -0
  573. data/test/tmp/mona_lisa.jpg20100204-59747-ov4w4c-0 +0 -0
  574. data/test/tmp/mona_lisa.jpg20100204-60097-1ekqjc6-0 +0 -0
  575. data/test/tmp/mona_lisa.jpg20100204-60773-1eh6ap6-0 +0 -0
  576. data/test/tmp/mona_lisa.jpg20100205-69480-tay2k2-0 +0 -0
  577. data/test/tmp/mona_lisa.jpg20100205-89390-16rh2ue-0 +0 -0
  578. data/test/tmp/mona_lisa.jpg20100205-91358-cdsa2g-0 +0 -0
  579. data/test/tmp/mona_lisa.jpg20100207-41099-llyyhb-0 +0 -0
  580. data/test/tmp/mona_lisa.jpg20100209-65426-pequnv-0 +0 -0
  581. data/test/tmp/mona_lisa.jpg20100209-65558-fbl6xv-0 +0 -0
  582. data/test/tmp/mona_lisa.jpg20100212-43647-l1vsxc-0 +0 -0
  583. data/test/tmp/mona_lisa.jpg20100316-26215-1jtjllg-0 +0 -0
  584. metadata +542 -18
  585. data/lib/action_view/erb/util.rb +0 -44
  586. data/lib/action_view/safe_buffer.rb +0 -28
  587. data/test/view/safe_buffer_test.rb +0 -36
@@ -14,6 +14,18 @@ class ErbUtilTest < Test::Unit::TestCase
14
14
  end
15
15
  end
16
16
  end
17
+
18
+ def test_html_escape_is_html_safe
19
+ escaped = h("<p>")
20
+ assert_equal "&lt;p&gt;", escaped
21
+ assert escaped.html_safe?
22
+ end
23
+
24
+ def test_html_escape_passes_html_escpe_unmodified
25
+ escaped = h("<p>".html_safe)
26
+ assert_equal "<p>", escaped
27
+ assert escaped.html_safe?
28
+ end
17
29
 
18
30
  def test_rest_in_ascii
19
31
  (0..127).to_a.map(&:chr).each do |chr|
@@ -92,6 +92,19 @@ class FormHelperTest < ActionView::TestCase
92
92
  tests ActionView::Helpers::FormHelper
93
93
 
94
94
  def setup
95
+ super
96
+
97
+ # Create "label" locale for testing I18n label helpers
98
+ I18n.backend.store_translations 'label', {
99
+ :helpers => {
100
+ :label => {
101
+ :post => {
102
+ :body => "Write entire text here"
103
+ }
104
+ }
105
+ }
106
+ }
107
+
95
108
  @post = Post.new
96
109
  @comment = Comment.new
97
110
  def @post.errors()
@@ -112,6 +125,10 @@ class FormHelperTest < ActionView::TestCase
112
125
  @post.secret = 1
113
126
  @post.written_on = Date.new(2004, 6, 15)
114
127
 
128
+ def Post.human_attribute_name(attribute)
129
+ attribute.to_s == "cost" ? "Total cost" : attribute.to_s.humanize
130
+ end
131
+
115
132
  @controller = Class.new do
116
133
  attr_reader :url_for_options
117
134
  def url_for(options)
@@ -137,6 +154,27 @@ class FormHelperTest < ActionView::TestCase
137
154
  assert_dom_equal('<label for="post_secret">Secret?</label>', label(:post, :secret?))
138
155
  end
139
156
 
157
+ def test_label_with_locales_strings
158
+ old_locale, I18n.locale = I18n.locale, :label
159
+ assert_dom_equal('<label for="post_body">Write entire text here</label>', label("post", "body"))
160
+ ensure
161
+ I18n.locale = old_locale
162
+ end
163
+
164
+ def test_label_with_human_attribute_name
165
+ old_locale, I18n.locale = I18n.locale, :label
166
+ assert_dom_equal('<label for="post_cost">Total cost</label>', label(:post, :cost))
167
+ ensure
168
+ I18n.locale = old_locale
169
+ end
170
+
171
+ def test_label_with_locales_symbols
172
+ old_locale, I18n.locale = I18n.locale, :label
173
+ assert_dom_equal('<label for="post_body">Write entire text here</label>', label(:post, :body))
174
+ ensure
175
+ I18n.locale = old_locale
176
+ end
177
+
140
178
  def test_label_with_for_attribute_as_symbol
141
179
  assert_dom_equal('<label for="my_for">Title</label>', label(:post, :title, nil, :for => "my_for"))
142
180
  end
@@ -1102,12 +1140,12 @@ class FormHelperTest < ActionView::TestCase
1102
1140
 
1103
1141
  class LabelledFormBuilder < ActionView::Helpers::FormBuilder
1104
1142
  (field_helpers - %w(hidden_field)).each do |selector|
1105
- src = <<-END_SRC
1143
+ src, line = <<-END_SRC, __LINE__ + 1
1106
1144
  def #{selector}(field, *args, &proc)
1107
- ("<label for='\#{field}'>\#{field.to_s.humanize}:</label> " + super + "<br/>").html_safe!
1145
+ ("<label for='\#{field}'>\#{field.to_s.humanize}:</label> " + super + "<br/>").html_safe
1108
1146
  end
1109
1147
  END_SRC
1110
- class_eval src, __FILE__, __LINE__
1148
+ class_eval src, __FILE__, line
1111
1149
  end
1112
1150
  end
1113
1151
 
@@ -1182,6 +1220,22 @@ class FormHelperTest < ActionView::TestCase
1182
1220
  assert_dom_equal expected, output_buffer
1183
1221
 
1184
1222
  end
1223
+
1224
+ def test_default_form_builder_without_object
1225
+
1226
+ form_for(:post) do |f|
1227
+ concat f.error_message_on('author_name')
1228
+ concat f.error_messages
1229
+ end
1230
+
1231
+ expected = %(<form action='http://www.example.com' method='post'>) +
1232
+ %(<div class='formError'>can't be empty</div>) +
1233
+ %(<div class="errorExplanation" id="errorExplanation"><h2>1 error prohibited this post from being saved</h2><p>There were problems with the following fields:</p><ul><li>Author name can't be empty</li></ul></div>) +
1234
+ %(</form>)
1235
+
1236
+ assert_dom_equal expected, output_buffer
1237
+
1238
+ end
1185
1239
 
1186
1240
  # Perhaps this test should be moved to prototype helper tests.
1187
1241
  def test_remote_form_for_with_labelled_builder
@@ -113,19 +113,19 @@ class FormTagHelperTest < ActionView::TestCase
113
113
  end
114
114
 
115
115
  def test_select_tag
116
- actual = select_tag "people", "<option>david</option>"
116
+ actual = select_tag "people", "<option>david</option>".html_safe
117
117
  expected = %(<select id="people" name="people"><option>david</option></select>)
118
118
  assert_dom_equal expected, actual
119
119
  end
120
120
 
121
121
  def test_select_tag_with_multiple
122
- actual = select_tag "colors", "<option>Red</option><option>Blue</option><option>Green</option>", :multiple => :true
122
+ actual = select_tag "colors", "<option>Red</option><option>Blue</option><option>Green</option>".html_safe, :multiple => :true
123
123
  expected = %(<select id="colors" multiple="multiple" name="colors"><option>Red</option><option>Blue</option><option>Green</option></select>)
124
124
  assert_dom_equal expected, actual
125
125
  end
126
126
 
127
127
  def test_select_tag_disabled
128
- actual = select_tag "places", "<option>Home</option><option>Work</option><option>Pub</option>", :disabled => :true
128
+ actual = select_tag "places", "<option>Home</option><option>Work</option><option>Pub</option>".html_safe, :disabled => :true
129
129
  expected = %(<select id="places" disabled="disabled" name="places"><option>Home</option><option>Work</option><option>Pub</option></select>)
130
130
  assert_dom_equal expected, actual
131
131
  end
@@ -135,6 +135,12 @@ class FormTagHelperTest < ActionView::TestCase
135
135
  assert_match VALID_HTML_ID, input_elem['id']
136
136
  end
137
137
 
138
+ def test_select_tag_with_array_options
139
+ assert_deprecated /array/ do
140
+ select_tag "people", ["<option>david</option>"]
141
+ end
142
+ end
143
+
138
144
  def test_text_area_tag_size_string
139
145
  actual = text_area_tag "body", "hello world", "size" => "20x40"
140
146
  expected = %(<textarea cols="20" id="body" name="body" rows="40">hello world</textarea>)
@@ -256,9 +262,9 @@ class FormTagHelperTest < ActionView::TestCase
256
262
  assert_dom_equal %(<input checked="checked" disabled="disabled" id="admin" name="admin" readonly="readonly" type="checkbox" value="1" />), check_box_tag("admin", 1, true, 'disabled' => true, :readonly => "yes")
257
263
  assert_dom_equal %(<input checked="checked" id="admin" name="admin" type="checkbox" value="1" />), check_box_tag("admin", 1, true, :disabled => false, :readonly => nil)
258
264
  assert_dom_equal %(<input type="checkbox" />), tag(:input, :type => "checkbox", :checked => false)
259
- assert_dom_equal %(<select id="people" multiple="multiple" name="people[]"><option>david</option></select>), select_tag("people", "<option>david</option>", :multiple => true)
260
- assert_dom_equal %(<select id="people_" multiple="multiple" name="people[]"><option>david</option></select>), select_tag("people[]", "<option>david</option>", :multiple => true)
261
- assert_dom_equal %(<select id="people" name="people"><option>david</option></select>), select_tag("people", "<option>david</option>", :multiple => nil)
265
+ assert_dom_equal %(<select id="people" multiple="multiple" name="people[]"><option>david</option></select>), select_tag("people", "<option>david</option>".html_safe, :multiple => true)
266
+ assert_dom_equal %(<select id="people_" multiple="multiple" name="people[]"><option>david</option></select>), select_tag("people[]", "<option>david</option>".html_safe, :multiple => true)
267
+ assert_dom_equal %(<select id="people" name="people"><option>david</option></select>), select_tag("people", "<option>david</option>".html_safe, :multiple => nil)
262
268
  end
263
269
 
264
270
  def test_stringify_symbol_keys
@@ -313,19 +319,19 @@ class FormTagHelperTest < ActionView::TestCase
313
319
  expected = %(<fieldset><legend>Your details</legend>Hello world!</fieldset>)
314
320
  assert_dom_equal expected, output_buffer
315
321
 
316
- self.output_buffer = ''
322
+ self.output_buffer = ''.html_safe
317
323
  field_set_tag { concat "Hello world!" }
318
324
 
319
325
  expected = %(<fieldset>Hello world!</fieldset>)
320
326
  assert_dom_equal expected, output_buffer
321
327
 
322
- self.output_buffer = ''
328
+ self.output_buffer = ''.html_safe
323
329
  field_set_tag('') { concat "Hello world!" }
324
330
 
325
331
  expected = %(<fieldset>Hello world!</fieldset>)
326
332
  assert_dom_equal expected, output_buffer
327
333
 
328
- self.output_buffer = ''
334
+ self.output_buffer = ''.html_safe
329
335
  field_set_tag('', :class => 'format') { concat "Hello world!" }
330
336
 
331
337
  expected = %(<fieldset class="format">Hello world!</fieldset>)
@@ -247,14 +247,6 @@ module RenderTestCases
247
247
  assert_equal %(<title>title</title>\n<div id="column">column</div>\n<div id="content">content</div>\n),
248
248
  @view.render(:file => "test/nested_layout.erb", :layout => "layouts/yield")
249
249
  end
250
-
251
- if '1.9'.respond_to?(:force_encoding)
252
- def test_render_utf8_template
253
- result = @view.render(:file => "test/utf8.html.erb", :layouts => "layouts/yield")
254
- assert_equal "Русский текст\n日本語のテキスト", result
255
- assert_equal Encoding::UTF_8, result.encoding
256
- end
257
- end
258
250
  end
259
251
 
260
252
  module TemplatesSetupTeardown
@@ -286,5 +278,52 @@ class ReloadableRenderTest < Test::Unit::TestCase
286
278
  def setup
287
279
  setup_view_paths_for(cache_templates = false)
288
280
  end
281
+
282
+ if '1.9'.respond_to?(:force_encoding)
283
+ def test_render_utf8_template_with_magic_comment
284
+ with_external_encoding Encoding::ASCII_8BIT do
285
+ result = @view.render(:file => "test/utf8_magic.html.erb", :layouts => "layouts/yield")
286
+ assert_equal Encoding::UTF_8, result.encoding
287
+ assert_equal "Русский текст\n\nUTF-8\nUTF-8\nUTF-8\n", result
288
+ end
289
+ end
290
+
291
+ def test_render_utf8_template_with_default_external_encoding
292
+ with_external_encoding Encoding::UTF_8 do
293
+ result = @view.render(:file => "test/utf8.html.erb", :layouts => "layouts/yield")
294
+ assert_equal Encoding::UTF_8, result.encoding
295
+ assert_equal "Русский текст\n\nUTF-8\nUTF-8\nUTF-8\n", result
296
+ end
297
+ end
298
+
299
+ def test_render_utf8_template_with_incompatible_external_encoding
300
+ with_external_encoding Encoding::SJIS do
301
+ begin
302
+ result = @view.render(:file => "test/utf8.html.erb", :layouts => "layouts/yield")
303
+ flunk 'Should have raised incompatible encoding error'
304
+ rescue ActionView::TemplateError => error
305
+ assert_match 'invalid byte sequence in Shift_JIS', error.original_exception.message
306
+ end
307
+ end
308
+ end
309
+
310
+ def test_render_utf8_template_with_partial_with_incompatible_encoding
311
+ with_external_encoding Encoding::SJIS do
312
+ begin
313
+ result = @view.render(:file => "test/utf8_magic_with_bare_partial.html.erb", :layouts => "layouts/yield")
314
+ flunk 'Should have raised incompatible encoding error'
315
+ rescue ActionView::TemplateError => error
316
+ assert_match 'invalid byte sequence in Shift_JIS', error.original_exception.message
317
+ end
318
+ end
319
+ end
320
+
321
+ def with_external_encoding(encoding)
322
+ old, Encoding.default_external = Encoding.default_external, encoding
323
+ yield
324
+ ensure
325
+ Encoding.default_external = old
326
+ end
327
+ end
289
328
  end
290
329
 
@@ -1,3 +1,4 @@
1
+ # encoding: us-ascii
1
2
  require 'abstract_unit'
2
3
  require 'testing_sandbox'
3
4
  begin
@@ -17,7 +18,7 @@ class TextHelperTest < ActionView::TestCase
17
18
  end
18
19
 
19
20
  def test_concat
20
- self.output_buffer = 'foo'
21
+ self.output_buffer = ActiveSupport::SafeBuffer.new('foo')
21
22
  assert_equal 'foobar', concat('bar')
22
23
  assert_equal 'foobar', output_buffer
23
24
  end
@@ -39,6 +40,14 @@ class TextHelperTest < ActionView::TestCase
39
40
  assert_equal %Q(<p class="test">para 1</p>\n\n<p class="test">para 2</p>), simple_format("para 1\n\npara 2", :class => 'test')
40
41
  end
41
42
 
43
+ def test_simple_format_should_be_html_safe
44
+ assert simple_format("<b> test with html tags </b>").html_safe?
45
+ end
46
+
47
+ def test_simple_format_should_not_escape_safe_input
48
+ assert_equal "<p><b> test with safe string </b></p>", simple_format("<b> test with safe string </b>".html_safe)
49
+ end
50
+
42
51
  def test_truncate
43
52
  assert_equal "Hello World!", truncate("Hello World!", :length => 12)
44
53
  assert_equal "Hello Wor...", truncate("Hello World!!", :length => 12)
@@ -224,6 +233,8 @@ class TextHelperTest < ActionView::TestCase
224
233
  assert_equal("2 counts", pluralize('2', "count"))
225
234
  assert_equal("1,066 counts", pluralize('1,066', "count"))
226
235
  assert_equal("1.25 counts", pluralize('1.25', "count"))
236
+ assert_equal("1.0 count", pluralize('1.0', "count"))
237
+ assert_equal("1.00 count", pluralize('1.00', "count"))
227
238
  assert_equal("2 counters", pluralize(2, "count", "counters"))
228
239
  assert_equal("0 counters", pluralize(nil, "count", "counters"))
229
240
  assert_equal("2 people", pluralize(2, "person"))
@@ -356,6 +367,20 @@ class TextHelperTest < ActionView::TestCase
356
367
  assert_equal %(<p>#{link10_result} Link</p>), auto_link("<p>#{link10_raw} Link</p>")
357
368
  end
358
369
 
370
+ def test_auto_link_other_protocols
371
+ silence_warnings do
372
+ begin
373
+ old_re_value = ActionView::Helpers::TextHelper::AUTO_LINK_RE
374
+ ActionView::Helpers::TextHelper.const_set :AUTO_LINK_RE, %r{(ftp://)[^\s<]+}
375
+ link_raw = 'ftp://example.com/file.txt'
376
+ link_result = generate_result(link_raw)
377
+ assert_equal %(Download #{link_result}), auto_link("Download #{link_raw}")
378
+ ensure
379
+ ActionView::Helpers::TextHelper.const_set :AUTO_LINK_RE, old_re_value
380
+ end
381
+ end
382
+ end
383
+
359
384
  def test_auto_link_already_linked
360
385
  linked1 = generate_result('Ruby On Rails', 'http://www.rubyonrails.com')
361
386
  linked2 = generate_result('www.rubyonrails.com', 'http://www.rubyonrails.com')
@@ -9,7 +9,7 @@ class TranslationHelperTest < Test::Unit::TestCase
9
9
  end
10
10
 
11
11
  def test_delegates_to_i18n_setting_the_raise_option
12
- I18n.expects(:translate).with(:foo, :locale => 'en', :raise => true)
12
+ I18n.expects(:translate).with(:foo, :locale => 'en', :raise => true).returns("")
13
13
  translate :foo, :locale => 'en'
14
14
  end
15
15
 
@@ -17,6 +17,18 @@ class TranslationHelperTest < Test::Unit::TestCase
17
17
  expected = '<span class="translation_missing">en, foo</span>'
18
18
  assert_equal expected, translate(:foo)
19
19
  end
20
+
21
+ def test_translation_of_an_array
22
+ I18n.expects(:translate).with(["foo", "bar"], :raise => true).returns(["foo", "bar"])
23
+ assert_equal "foobar", translate(["foo", "bar"])
24
+ end
25
+
26
+ def test_translation_of_an_array_with_html
27
+ expected = '<a href="#">foo</a><a href="#">bar</a>'
28
+ I18n.expects(:translate).with(["foo", "bar"], :raise => true).returns(['<a href="#">foo</a>', '<a href="#">bar</a>'])
29
+ @view = ActionView::Base.new(ActionController::Base.view_paths, {})
30
+ assert_equal expected, @view.render(:file => "test/array_translation")
31
+ end
20
32
 
21
33
  def test_delegates_localize_to_i18n
22
34
  @time = Time.utc(2008, 7, 8, 12, 18, 38)
@@ -26,7 +38,13 @@ class TranslationHelperTest < Test::Unit::TestCase
26
38
 
27
39
  def test_scoping_by_partial
28
40
  expects(:template).returns(stub(:path_without_format_and_extension => "people/index"))
29
- I18n.expects(:translate).with("people.index.foo", :locale => 'en', :raise => true)
41
+ I18n.expects(:translate).with("people.index.foo", :locale => 'en', :raise => true).returns("")
30
42
  translate ".foo", :locale => 'en'
31
43
  end
44
+
45
+ def test_scoping_by_partial_of_an_array
46
+ I18n.expects(:translate).with("test.scoped_array_translation.foo.bar", :raise => true).returns(["foo", "bar"])
47
+ @view = ActionView::Base.new(ActionController::Base.view_paths, {})
48
+ assert_equal "foobar", @view.render(:file => "test/scoped_array_translation")
49
+ end
32
50
  end
@@ -88,6 +88,10 @@ class UrlHelperTest < ActionView::TestCase
88
88
  )
89
89
  end
90
90
 
91
+ def test_button_to_returns_an_html_safe_string
92
+ assert button_to("Hello", "http://www.example.com").html_safe?
93
+ end
94
+
91
95
  def test_link_tag_with_straight_url
92
96
  assert_dom_equal "<a href=\"http://www.example.com\">Hello</a>", link_to("Hello", "http://www.example.com")
93
97
  end
@@ -344,7 +348,7 @@ class UrlHelperTest < ActionView::TestCase
344
348
  end
345
349
 
346
350
  def test_mail_to_with_img
347
- assert_dom_equal %(<a href="mailto:feedback@example.com"><img src="/feedback.png" /></a>), mail_to('feedback@example.com', '<img src="/feedback.png" />')
351
+ assert_dom_equal %(<a href="mailto:feedback@example.com"><img src="/feedback.png" /></a>), mail_to('feedback@example.com', '<img src="/feedback.png" />'.html_safe)
348
352
  end
349
353
 
350
354
  def test_mail_to_with_hex
@@ -562,6 +566,10 @@ class PolymorphicControllerTest < ActionView::TestCase
562
566
  render :inline => "<%= url_for([@workshop, @session]) %>\n<%= link_to('Session', [@workshop, @session]) %>"
563
567
  end
564
568
 
569
+ def show_workshop_of_nil_sessions
570
+ render :inline => "<%= workshop_sessions_path(nil) %>"
571
+ end
572
+
565
573
  def rescue_action(e) raise e end
566
574
  end
567
575
 
@@ -608,6 +616,16 @@ class PolymorphicControllerTest < ActionView::TestCase
608
616
  end
609
617
  end
610
618
 
619
+ def test_existing_nested_resource_with_nil_id
620
+ @controller = SessionsController.new
621
+
622
+ with_restful_routing do
623
+ assert_raise ActionController::RoutingError do
624
+ get :show_workshop_of_nil_sessions
625
+ end
626
+ end
627
+ end
628
+
611
629
  protected
612
630
  def with_restful_routing
613
631
  with_routing do |set|
@@ -615,6 +633,7 @@ class PolymorphicControllerTest < ActionView::TestCase
615
633
  map.resources :workshops do |w|
616
634
  w.resources :sessions
617
635
  end
636
+ map.show_workshop_of_nil_sessions 'sessions/show_workshop_of_nil_sessions', :controller => 'sessions', :action => 'show_workshop_of_nil_sessions'
618
637
  end
619
638
  yield
620
639
  end
@@ -0,0 +1 @@
1
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
@@ -0,0 +1 @@
1
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -0,0 +1 @@
1
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb