PageRenderTime 67ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 1ms

/examples/compiler/awib.bf

http://github.com/FabianM/Brainfuck
Brainfuck | 968 lines | 919 code | 49 blank | 0 comment | 2246 complexity | 844184ea573e195508a709fa5dd70461 MD5 | raw file
Possible License(s): Apache-2.0

Large files files are truncated, but you can click here to view the full file

  1. #define EOF char* /* !\
  2. cat >>/dev/null <<EOF
  3. set K {
  4. [
  5. awib-0.4
  6. ========
  7. Awib is a brainfuck compiler written in brainfuck. It is also polyglot
  8. in bash, Tcl and C. It is optimizing and portable. Awib is capable of
  9. compiling brainfuck source code into Linux executables (i386) and five
  10. programming languages: C, Tcl, Go, Ruby and Java.
  11. The bulk of awib is written by Mats Linander <matslina@gmail.com>.
  12. Project blog: http://awibiswritteninbrainfuck.blogspot.com/
  13. Repository: http://awib.googlecode.com/
  14. Usage
  15. -----
  16. Feed awib brainfuck source code as input and the compiled program
  17. will be written as output.
  18. Awib is a cross-compiler. The supported target platforms are
  19. listed below. By default, the target "lang_c" is chosen.
  20. To specify a target platform, insert a line on the form "@TARGET"
  21. (without the quotation marks and with "TARGET" suitably replaced)
  22. at the very beginning of the source code you wish to compile.
  23. Awib will then produce output accordingly.
  24. 386_linux - Linux executables for i386
  25. lang_c - C code
  26. lang_ruby - Ruby code
  27. lang_go - Go code
  28. lang_tcl - Tcl code
  29. lang_java - Java code
  30. For instance, the following input would produce an executable hello
  31. world-program for Linux:
  32. @386_linux
  33. ++++++[->++++++++++++<]>.----[--<+++>]<-.+++++++..+++.[--->+<]>-----.--
  34. -[-<+++>]<.---[--->++++<]>-.+++.------.--------.-[---<+>]<.[--->+<]>-.
  35. The following would produce a hello world-program in Ruby:
  36. @lang_ruby
  37. ++++++[->++++++++++++<]>.----[--<+++>]<-.+++++++..+++.[--->+<]>-----.--
  38. -[-<+++>]<.---[--->++++<]>-.+++.------.--------.-[---<+>]<.[--->+<]>-.
  39. And this file would give you the hello world-program in C:
  40. @lang_c
  41. ++++++[->++++++++++++<]>.----[--<+++>]<-.+++++++..+++.[--->+<]>-----.--
  42. -[-<+++>]<.---[--->++++<]>-.+++.------.--------.-[---<+>]<.[--->+<]>-.
  43. Optimizations
  44. -------------
  45. Awib is an optimizing compiler:
  46. - Sequences of '-','>','<' and '+' are contracted into single
  47. instructions. E.g. "----" is replaced with a single SUB(4).
  48. - Mutually cancelling instructions are reduced. E.g. "+++-->><" is
  49. equivalent to "+>" and is compiled accordingly.
  50. - Some common constructs are identified and replaced with single
  51. instructions. E.g. "[-]" is compiled into mem[p]=0.
  52. - Loops known to never be entered are removed. This is the case for
  53. loops opened at the very beginning of a program (when all cells are
  54. 0) and loops opened immediately after the closing of another loop.
  55. - Copy and multiplication loops are replaced with constant time
  56. operations. E.g. "[->>+++<<]" is compiled into mem[p+2]+=mem[p]*3
  57. followed by mem[p]=0.
  58. Requirements
  59. ------------
  60. Awib will run smoothly in any brainfuck environment where:
  61. - Cells are 8-bit or larger
  62. - The read instruction ',' (comma) issued after end of
  63. input results in 0 being written OR -1 being written
  64. OR no change being made to the cell at all.
  65. The vast majority of brainfuck environments meet these criteria.
  66. Since awib is polyglot, it is also possible to compile and/or run awib
  67. directly as C, tcl or bash. For instance, using gcc, the following
  68. will build an executable file called awib from awib-0.2.b.
  69. $ cp awib-0.2.b awib-0.2.c
  70. $ gcc awib-0.2.c -o awib.tmp
  71. $ ./awib.tmp < awib-0.2.b > awib-0.2.c
  72. $ gcc -O2 awib-0.2.c -o awib
  73. Using bash works fine, but is very very very slow:
  74. $ (echo "@386_linux"; cat awib.b) | bash awib.b > awib
  75. $ chmod +x awib
  76. And tcl:
  77. $ (echo "@386_linux"; cat awib.b) | tclsh awib.b > awib
  78. $ chmod +x awib
  79. Environment
  80. -----------
  81. Code compiled with awib will execute in an environment where:
  82. - Cells are 8-bit wrapping integers.
  83. - Issuing the read instruction ',' (comma) after
  84. end of input results in the current cell being
  85. left as is (no-change on EOF).
  86. - At least 2^16-1 = 65535 cells are available.
  87. - Operating beyond the available memory, in either
  88. direction, results in undefined behaviour.
  89. License
  90. -------
  91. This program is free software: you can redistribute it and/or modify
  92. it under the terms of the GNU General Public License as published by
  93. the Free Software Foundation, either version 3 of the License, or
  94. (at your option) any later version.
  95. This program is distributed in the hope that it will be useful,
  96. but WITHOUT ANY WARRANTY; without even the implied warranty of
  97. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  98. GNU General Public License for more details.
  99. You should have received a copy of the GNU General Public License
  100. along with this program. If not, see <http://www.gnu.org/licenses/>.
  101. Mats Linander, 2014-09-14
  102. ]*/
  103. EOF
  104. K="\
  105. >>>>>>>>>>>>>>>>>>>>++>>>>+[>[-],+[->+>+<<]>>[-<<+>>]+<[-[>+++++[-<------->]+< \
  106. -[-[-[-[--------------[--[-->>+<<[>>-<++[-<------ --->] +<[--[>+++++++ \
  107. ++[-<++++++++++>]<[-]]]]]]]]]]]<->]>[-<<<->>>]<<< ]>>>> [->+++++++++++ \
  108. +++++++++<<<<[-]>>>+[-<,+[-<+<+>>]+<<->[-[------- --[-[ ---[>++++[-<-- \
  109. -->]+<+[-----------[-[-[-[--------------[--[>++[- <---- ----->]+<--[-- \
  110. [>+++++++++[-<++++++++++>]<[-]]]]]]]]]]]]]]]+>[-<->]>>[->+< ]<<<[->>>+>->+ \
  111. <[>-]>[>]<[-<<->>]<<<<<]>>>]+>[<-]<[<]>[-<<<,>>>>]<<<<+[->+ <]>[-<<[<]<<<+ \
  112. >>>> [>]>]+++ +++++ +++++ +++ ++++> >>> [-<<<< \
  113. -> >>>]<< <+++ ++++ +<< <[<]< < <->>> \
  114. >[ >]>>[[ ->+> +<<] >[-< +>]+> -[-[ \
  115. -[ -[-[-[- [-[<-> [-]] <[-> ++++ +++++ [-> +>+ \
  116. +++++++++++< <]>>[ ->+ >+> +>+> +>+>+ >+>+< <<< \
  117. <<<<<]>>---- ----- -- > ++ >--- -->-- ------- -- \
  118. -->-- >----- -- - -- ->+++ +++++ ++>---- -- \
  119. --- --<<<< << < < <<<<] >]<[- >++++++ ++ \
  120. +[ ->+>++ + +++ + +++++ <<]>- >[->+>+ >+ \
  121. > +>+>+ >+>+<<< <<< <<]>>- ----- ----->+ +> \
  122. - ---->- ------- --- -->+++ +++++ >------ -- \
  123. - <<<<< <<<<<]> ]<[ ->++++ +++++ [->+> +++ \
  124. + +++ +++++<< ]>>[- >+>+>+ >+>+> +>+ >+> \
  125. +< <<<<<<<< ]>>-- ------- -->++ >--- \
  126. -- > -------- ----- >++++++ >++++ + ++++> \
  127. ---- --- --->++++ +++++ ++++<<< <<<<< <<< <]>]<[ \
  128. ->+++++++++++[->+>++++++++++<<]>>[->+>+>+>+>+>+>+>+>+>+>+<<<<<<<<<<<]>-->----- \
  129. -------->>------->--------------->++>+++++++++++>++++++>------>+<<<<<<<<<<<<<] \
  130. >]<[->>+++++++[->+++++++<]+++++++>[->++>++>++>++>++>++>++<<<<<<<]>++ ++++++++ \
  131. >->++++++++++++>+++++>--->+++++>+++++++++++++<<<<<<<<<<]>]<[->>++++ +++[->+ \
  132. ++++++<]++++++++++>[->++>++>++>++>++>++>++>++>++>++<<<<<<<<<<]>++ ++++++ \
  133. ++>->++++++++++++>+++++>--->++>+++++++++++++++++++>++++++++ +++> ++++++ \
  134. +++++>+++++++++++++++++++++++<<<<<<<<<<<<<]>]<[->>+++++++ [-> +++++ \
  135. ++<]++++++>[->++>++>++>++>++>++<<<<<<]>++++++++++>->+++++ ++++ +++> \
  136. +++++>--->+<<<<<<<<<]>]<[->>+++++++[->+++++++<]+++++++++> [->+ >+> \
  137. +>++>++>++>++>++>++<<<<<<<<<]>++>+++++++>+++++>--->+++++++ +++> ++ \
  138. +++++>++++++++++++>+++++++++++++++++++>++++++++++++++++++++ ++< < \
  139. <<<<<<<<<<]<<[->>+>>-<<<<]>>[-<<+>>]>+>[<++++[->++++<]>[-]]< [-<+ < \
  140. <<<[<]>[[-<+<+>>]<[>>[>]>>>>>[>]>+>[<-]<[<]>[-<<[<]<[-]<<<<[ <]<[ - \
  141. ]+>>[>]>>>>>[>]>>+<]>-<<<[<]<<<<<[<]<-]>>[>]>>>>>[>]>>[[-]<<< [<]< [- \
  142. ]>>[>]>>]<<+[<]<<<<<[<]>]<<<[[->>+<<]<]>>>[>]>>>>>[>]<[-<]<[-< <<<[<]<<<< \
  143. [-]>>>>>[>]>>[-<<<[<]<<<<+>>>>>[>]>>]+>]>]>>>[>]<[[-]<]<<<<-]< [-]<<[[-]<] \
  144. <<<+[->>>>+<<<<]>>>>->>>]<<<+[->>>>>>>+<<<<<<<]>>>>>>>-+[[-<+>] >+<]>[-<<->>] \
  145. <<[[->+>+ <<]>[-<+>]++++++[- \
  146. >------- <]+>-[-[-[-[----- \
  147. -------- -[--[<+++[->---- \
  148. ---<]+>- [--[<->>+++++++ \
  149. [-<+++++ ++++++++>]<++[- \
  150. ]]]]]]]] ]<<>[-++++++[-<- \
  151. ------>]+ <[-[-[-[-[--------------[--[--- ---------------- \
  152. ----------[--<<+<<<<-------[>>>>-]>>>>[>>>>]<<<<<<<<+++ ++++>>>>[<<---[> \
  153. >-]>>[>>]<<[->>>>+<<<<]+<<++[>>-]>>[>>]<<[->>>>+<<<<]<< +>>>>>>[-<<<<+<- \
  154. [>-]>[>]<<+>[->>>-<<<<-<[-]<<++>>]>>>>]<<<<]>>>[-<<<++ ++++++>>>>>]<<]> \
  155. [-+++<<<<<[>>>>>-<<<<<[->>>+<<<]]>>>--------[++++++++[ -<+>]<-------->> \
  156. >-<<]<-[+++++++++[-<<+>>]<<--------->>>>>-<<<]<<++++++ +++>>+<[>-]>[>]<[ \
  157. ->>>[-<+>]<<<]>>>[-]<<<+++++++>>[[-]+>>>>>+<<<<<[>>+<, [>-]>[>]<[-<<->>] \
  158. +<+[>-]>[>]<[-<<->>]<->+++++++++[-<---------->]+<-[>- ]>[>]<[->>>>>++++ \
  159. ++++[-<++++++++>]<[->++++<]<[->+>-<<]>+[-<+>]+>-[<->[ -]]<[-<[-]<+>>]<<< \
  160. <]+<--[>-]>[>]<[->>>>+<[>-<[->>+<<]]>>[-<<+>>]<<->[- <+<->++++++++[->++ \
  161. ++++++<]>[-<++++>]<->]<<<<]+++++++++[-<++++++++++>]< ++++[-]>>>>>+<[>-]> \
  162. [>]<<<[[->>>+<<<]>>[-]<<]>>>[-<<<+>>>]<<<>>[-<<<<<< [-]<<------->>>>>>] \
  163. <<<<<<]]>>>>[-]>[-]<<<]<]>[-<<<<<[->>+>+<<<]>>[-<<+ >>]<[->+>>+<<<]>[-<+ \
  164. >]++++++++++++++++[->>----------------<<]>>+[<<++++ ++++++++++++[->>++++ \
  165. ++++++++++++<<]+>>[-]]<------[<[-]>++++++[-]]<[->> +<<]++++++>+>[-<-<-- \
  166. ----<+>]>>]<]>[-<<<<<[->>+>+<<<]>>[-<<+>>]<[->+>>+ <<<]>[-<+>]++++++++++ \
  167. ++++++[->>----------------<<]>>+[<<++++++++++++++ ++[->>+++++++++++++++ \
  168. +<<]+>>[-]]<-----[<[-]>+++++[-]]<[->>+<<]+++++>+> [-<-<-----<+>]>>]<]>[< \
  169. <<++++>>>->]<]>[-<<<<<[->>+>+<<<]>>[-<<+>>]<[->+ >>+<<<]>[-<+>]>---[<++ \
  170. +>+++[-]+>[-]>]>[<++++++++++++++++[->---------- ------<]>+>+<[<<<+>>+++ \
  171. +++++++++++++[->++++++++++++++++<]>[-]>-<]>[-<< <<[-]<--->>>]<]]<]>[<<< \
  172. ++>>>->]<]>[-<<<<<[->>+>+<<<]>>[-<<+>>]<[->+>> +<<<]>[-<+>]>-[<+>+[-]+> \
  173. [-]>]>[<++++++++++++++++[->----------------<] >+>+<[<<<+>>++++++++++++ \
  174. ++++[->++++++++++++++++<]>[-]>-<]>[-<<<<[-]<- >>>]<]]<]>>+<<<+<-[>-]>[> \
  175. ]<<+>[<<<[>>-]>>[>>]<<[->-<]+>[-<-<[->+<<<+> >]+<<----[>>-]>>[>>]<<[-> \
  176. >>+<<<]+<<-------[>>-]>>[>>]<<[->>>+<<<]>[- <+<<->>>]+<<<+++++++++++>> \
  177. >>>[->>-<<<<-<[-]+<-[>-]>[>]<[-<<[-]]>]<]] >>>[>+<-<<<+<<---------[>>- \
  178. ]>>[>>]<<[>>>>-<<<<-<<+<<-[>>-]>>[>>]<<[- >>>+<<<]+<<--[>>-]>>[>>]<<[ \
  179. ->>>+<<<]<<+++>>>>>[-<<<<<[-]>[-]>>[-<<+ >>]]<]<<+++++++++>>>>>]+>[-< \
  180. <<<+< <<<---------[>>>>-]>>>>[>>>> ]<<<<<<<<+++++++++>>>>[<-[>-] \
  181. >[>]< <+>[<<-[>>-]>>[>>]<<<<+>>[- >>>-<<<<-<<<+++++++[->-------- \
  182. ----- ---<]>+[>-]>[>]+<[->-<]>[- <++++++++++++++++[-<+++++++++++ \
  183. +++++ >]>]<<<+++++++++>>]+<<--- [>>-]>>[>>]<<<<+++>>[->>>-<<<<-< \
  184. --<[> -]>[>]<[+++++++++++++++[ -<++++++++++++++++>]]<->]]]>>>>]< \
  185. [-<<< +<<--------[>>-]>>[>>]< <<<++++++++>>[->>>>>>>++++++++<<++ \
  186. +++++ +[-<++++++++++++++++> ]<-[-<+<+>>]<<<<<+<-------<<[>>-]>> \
  187. [>>]< <[->-<]>[-<+>]<[<<-[ >>-]>>[>>]<<[>>>>[->->>+<<<]+>[<-]<[ \
  188. <]>[- >>>[-<<+>>]<<<]>>> [-<<+<+>>>]<<<<<<+<-]+<<--[>>-]>>[>>] \
  189. <<[>> >>[->->>+<<<]+>[ <-]<[<]>[>>[<<-]<<[<<]>+>[-<<<<<-[>-]> \
  190. [>]<< +>[->>>->>>+<< <<<<]+>>>>]<[->>>>[-<<+>>]<<<<]>]>>>[-<< \
  191. +<+>> >]<<<<<<+<-] +<<--[>>-]>>[>>]<<[-<[->+>>>+>-[<-]<[<]>[ \
  192. -<<<< [->+<]>>> >]<<<<]>[-<+>]>+<]+<<-[>>-]>>[>>]<<[-<[->+> \
  193. >>+>> -[<<-] <<[<<]>>[-<<<<[->+<]>>>>]<<<<]>[-<+>]>+<]<[- \
  194. >>>>> >>>>+ <<<<<<<<<]<++++++[->>>>>>>>>+<<<<<<<<<]+<<[>>- \
  195. >>>+< <<]>>[ >>]<<[-]>>>>>>[[-<<+>>]>[[-<<+>>]<<<<+>>>>]<]>[- \
  196. <<+>> ]>[-<<+ >>]<<<<<---[<<<->>>+++[-]]<<<+]>>>>>>>>+>-------[< \
  197. -]<[< ]>>++++ +++<<<[->>+<<]+<<[-<+>>-<]>[>-]>[>]<[->>+<<]>+>---[< \
  198. -]<[< ]>>+++[- ]<<<<<[->>+<<]>>[-]>+>[<->->>[-]>[-]<<<<<<<<<+>+>+>+>+ \
  199. >>>>> >[<+>-[-- [--[-[++++++[-]<->]<[->>[<<+<[>-]>[>]<[-<<[-]>>]<+>>>-]< \
  200. <]>]< [->>[<<+<[>-]>[>]<[-<<[-]+>>]<->>>-]<<]>]<[<[>-]>[>]+<[->-<]>[+++++ \
  201. +++++ +++++[-<<<<++++++++++++++++>>>>]>[-<<<<<->>>>>]<]<]>]<[<[>-]>[>]+<[ \
  202. ->-<] >[->[-<<<<<+>>>>>]<]<]<<<[<+>>[<<-<[<]+ +++++++++>->++++++++++>-> \
  203. ->[>] >>>[+<<<<[<]<<<+>>>>[>]>>>>>-<<]>+<<-]< <[-<[<]++++++++++++>->+++ \
  204. +++++ ++++>->->[>]>>>[->>+<<<<<<[<]<<<+>>>>[ >]>>>]<<<]>[-<<[<]<+>>[> \
  205. ]>]]> [>[+>>-<<]>+<<-]>[->>+<<]<<+<+>>>>>>> ]<<<[-]<<<[-<]+++++++++ \
  206. >>>>> >>>>]<[->>>[[-<<<<<<<<<+>>>>>>>>>]>[ -<<<<<<<<<+>>>>>>>>>]>] \
  207. <<<]< <<<<<]>>>]]<[-]>,+[[-<+>]>+<]>[-<<- >>]<<]<<<< [<<]<+<<+>>> \
  208. >>[<< <[->>+<<]<[->>+<<]<[->>+<<]<[->>+< <]>>>>>>> [-<<<<<<+> \
  209. >>>>> ]<[->+<<<<<<<+>>>>>>]+>-------[-[< ->+++++++ +[-]]<[-< \
  210. <>>+< [>-<[->>+<<]]>>[-<<+>>]<<->[-<+<- >++++++++ [->++++ \
  211. ++++< ]>[-<++++>]<->]<<>>]>]<[<<[-<<-> >>>>+<<<] <<[[->>+ \
  212. <<]>> >>-<<<<]>>>[-<<-<+>>>]<<[[->>+ <<]>>>[-]< <<]>>[-<< \
  213. +>>]< <<[->+>>+<<<]>>[-<<+>>]>>>[-< <<+<<+>>>> >]<[-<<<< \
  214. <+>>> >>]<<>>>++++++++[-<++++++++> ]<[->++++< ]<[->+>-<< \
  215. ]>+[- <+>]+>-[<->[-]]<[-<[-]<+>>] <<<<<[->[- ]>[-]>[-<+< \
  216. +>>]< [->+<]>>[->+<<<+>>]>[-<+>] <<<<<]>>>> >]<<[[->>+<< \
  217. ]>>>+ <<<]>>[-<<+>>]<[[->+<]>> +<<]>[-<+> ]+>[<->[-]]<< \
  218. <>>[- <+>>>[>>]>[-]+<<<[<<]]> >]<<<<>>+< [>-<[->>+<<]]> \
  219. >[-<< +>>]<<->[-<+<->+++++++ +[->++++++ ++<]>[-<++++>]< \
  220. ->]<< >[>>+<]>[<]<<[[->>+< <]>>>+<<<] >>[-<<+>>]>[[-]< \
  221. +>]<< <>>[->>>[-]+<<<]<[- ]<[-]<[->+< ]<[->+<]>>>>>>>[- \
  222. <<<<+ >>>>]<<<<<<<<<[<< ]>+>[>>]>>> [-<[-]<[-]<<<[<<]> \
  223. ->[>> ]+++++++++++[->+ +++++>+++++ +++++>+++<<<]>+++.> \
  224. ++++. .---.+++.<---- -------.>>-. <+++.-------.------- \
  225. ----- .-.+++++++++ ++.--------- --.+++++++++++++.---- \
  226. ----- --.++.-.>. <--.++++++++ ++++++++.------------- \
  227. ----. ++.+++++ +++.------.++ +++++++++++++.-.>+.---[ \
  228. --->+ <]>.[- ]<<[-]<[-]>>> ]<<<<<[<<]>[<<[-[-[-[-[ \
  229. -[-[- [-[ [-]>>-<<]>>[++ +++++++[-<+<++++++<+++< \
  230. +++++ ++++++++<++++ ++++++++<+++++++++<++++ \
  231. +++++ +<+++++++++++< ++++<+++++++<++++++++<+ \
  232. +<+++ ++>>>>>>>>>>>>> ]<<<<<<<+++++.<-.+++.-. \
  233. +++.+ +.>>>>>++.<<<< +.>+++++++.>--.<.<<<+++ \
  234. +++.> >-.++++++.<<.<+ + +.>>>-.++.<+.-.<<<+++.> \
  235. >>.-- .>>++++.----.<- -- .>>>>>-.>.<<<<<<----.++ \
  236. ++.+++ .-.<.++.>>>>>.< <<<- ----.>.>.<.<<<.>>-.++++ \
  237. ++.<<.< <----.>>>+.-.>+.< +.-.< <<++++.>>>.--.>>++++.-- \
  238. --.<---. >>>>>.>.<<<<<<--- -.++++. +++.-.<.++.>>>>>.<<<<-- \
  239. ---.>.>.<.<<<.>>-.++++++.<< .<.<---- .>----.>>++++.>>++.++.< \
  240. +.>>--.<++++.<-.-.>>>>>.> ..<<<<---- .+++++.<-------.<--.--- \
  241. .>+.>>>.<<<.<+++.>--.>- -..>>.>++++ +++.<<<<+++++.>>>.<---- \
  242. ---.>>>.<<....<<<---- .<<+.>>>+.<++ +.----------.++.>>>.<<< \
  243. <+.>>>>>-------.>.< <....<<<<----. +++++.>>.>>.<<----.>>>. \
  244. >.<<....<<<<<<<+++ +.>>>.>>.+++++.- .<<<<<<++++.>>>>>>.--.< \
  245. ++++++++.----.<-.> >>>.<<<<----.>>>>> .>.<<....<<<<<<<<----.> \
  246. >>----.-.----.+++++ .-.<<<++++.>>>.--.>- ---.>.>-----.>>.<<++.>> \
  247. >.>..<<....<<+.+++++ .<+.<+++++++.---.>+.>> >.>+++++++.<<<<+++.<<<- \
  248. -----.<.>>----.++.>>> .-.<<<<<<.>>>>>>.--.<-.- ---.<++++.>>>>.<<<<---- \
  249. .<<++++.>>>>>>.<<<<<<<<----.>>>+++++.-.----.++++ +.-.<<<++++.>>>.--.>--- \
  250. -.>.>-----.>>.<<++.<<<<---.>>>>>>.<.>>>.<<...... ..<<--.>>>-----.<<<+.<< \
  251. .<+++++.>>>>>.<<<+.>>--.-----.<<<.>-------.>>>>- ------.-..--.++.<<<<++. \
  252. >>>>++++++.>.<<........<<++.>>>++.-------------. +++++++++++.>.-.<<<.<<< \
  253. +++.+.>>>-.<<<<<+++++.>>.>>>>>++.<<<<<.>>>>>--.> +.-.<<<+.<<<-.+.>>>-.<< \
  254. <<<.>>>>-.>>>++. <<<.>>>--.>+.<<....<++++++++++ .>>>..<<....<<+.+++++.< \
  255. +++++.<+++.---. >+.>>>.<<+.-------.<<.>+.>>> .<<+++.+++.-------.>>.+ \
  256. +++++++.+.---- -----.<--.>>>.<<........<- ------.<<<-.+.>>>-.<<<< \
  257. <.>>>-----.<<< ++.--------.+.>>>>>>>.>.< <....<++++++++++.>>>..< \
  258. <....<<++.+++ ++.<+++.<+++.---.>+.>>> .<<--.+.<--.>.<<.>++.>> \
  259. >.<<++.------ -.<<.>+.>>>.<<--.<---. <.>>+.<<<<-.<<.>>>---.- \
  260. -.>.>>.<<--.>- -----.++.>>>.<<<++++ .<<.>.<+.<+.>>>>>>.<--. \
  261. >>>.-.<<<<.<<-- .<++++.>>>>>.>+++++ ++.<<<<<+.<<-.<<.>>>++. \
  262. ------.+.>-.>>-.< <<<++++++.>>++++.> >+.<<<<--.<<.>>>+++++.- \
  263. -----.+.>----.>>-.< <<<++.>>>>++.<<< +.-.<-----. +++++.>--.+ \
  264. ++.>>>-.>>++++++++.+ .>-------.>+.<< ---------.. ..<++.>>>. \
  265. .<<....<<++.++.<<++++. <+.>>.>++.<+++ +.>>>.<<++ .------- \
  266. .<<.>-.>>>.<<+++.>>++++ ++++.+.------ ---.<--.>> >.-.<<< \
  267. <++.--.>--.>.<++.>>>+.-. <<....<<<<.<<. >>>>.<+.- ---.++ \
  268. +.<<<------.>>++++.<<++++. >>+++.<<.+++++. --------. >>>>>>> \
  269. .>+.-.<<<++.>.<<<-.--.>++.< ++.+++++.>>>.<< <<<<-.<. <----.> \
  270. ----.>>++.>>-----.++.<.>>.<+ +++.<-.-.>>>>.<< <----.<< <+.>>>>> \
  271. >.<--.++.>>>+.<<....<.>>>..<< ....<<----.++.<++ ++.<<-- .>>----- \
  272. ---.>++.<++++.>>>.<<++.<<+.>++++.-----.>>>.<<+.< <<<-.+ .>>>>>>.< \
  273. --.>>>.-.<<<<---.--.>--.>.<++.>>>+.-.<<....<<<<. <<++++ +.>+.>>>. \
  274. <+++++.>++.<----.<<<------.>>--.>----------.<+++.>++.<<<+.>> >>>>>.>+.- \
  275. .<<<++.>.<<<++++++.--.>.<++.+++++.>>>.<<<<<<-.<++++.<.>---- .>>+.>>--- \
  276. --.++.<.>>.<++++.<-.-.>>>>.<<<----.<<<+.>>>>>>.<--.++.>>>+. <<....<.>>> \
  277. ..<<....<<----.++.<++++.<<--.>>--------.>++.<++++.>>>.<<++ .<<+.>++++.- \
  278. ----.>>>.<<<-----.<<<<<<<--.>>>>-.+.>>>>>>.<--.>>>.[<]>[[ -]>]++++++++ \
  279. ++++++++[-<++++++++++++++++>]<-[-<<<<<<<<<<<<<<<+<+>>>>> >>>>>>>>>>>]< \
  280. <<<<<<<<<<<<<<<<<+<+>>>>>>>>>>>>>>>>>>>>>[<+>-[-[-[-[-[ -[-[-[-[-[-[-[ \
  281. [-]<[+++++[->+++++++++++++++<]>+++.-[--<+>]<---.-[-->+ ++<]>--.------[ \
  282. -<++>]<-.------------------.+[---->+++++<]>---.+++[- ----<++++>]<+.-[- \
  283. ->+<]>----.[-]<<<+<<+>>>>]>]<[++++++++.---[->++++++ ++++++++++++<]>+. \
  284. ------------------.+[----<+++++>]<---.--[----->++ <]>-.[-]<<<+>>]>]<[ \
  285. +++++[->+++++++++++++++<]>+++.-[--<+>]<---.-[--> +++<]>--.------[-<++ \
  286. >]<-.------------------.+[---->+++++<]>---.+++[ -----<++++>]<+.-[-->+ \
  287. <]>----.[-]<<<+<<+>>>>]>]<[++++++++.---[->++ ++++++++++++++++<]>+.-- \
  288. ----------------.+[----<+++++>]<---.--[---- ->++<]>+.[-]<<<+>>]>]<[+ \
  289. +++[->++++++<]>[-<++++<+++<+<++>>>>]<---- -------.<+.>+++.<++.<<+.> \
  290. ++++++++++.>+++++.>+++++++++.-----.<+++. <+.>>[[-]<]+>>+>>]>]<[-+++ \
  291. ++++++++++++++++++++++[-<+<+++++<++++< ++<+++>>>>>]<+++++++....<.> \
  292. >++++++++++..<....<-------------.++ .<+++++.>++++.<--------.>--.<+ \
  293. +++.>>.<++.-------.<++++.-----.>> .>[[-]<]<<<<<<<<<<<<<[<]<[->>[> \
  294. ]>>>>+<<<<<[<]<]<[->>>[>]>>>>>+ <<<<<<[<]<<]>+>+[>]>>>>>[>+++++++ \
  295. +[->++++++++++++<]>-.[-]++++ ++++++<<[->>->+<[>-]>[>]<[-<++++++ \
  296. ++++<+>>]<<<]++++++++++>>[ -<<->>]>++++++++++<<[->>->+<[>-]>[>] \
  297. <[-<++++++++++<+>>]<<< ]++++++++++>>[-<<->>]>++++++[-<+++++++ \
  298. +>]<<[>[-<+<+>>]<.[ -]<.[-]>]<[>>[-<<+>>]<<.[-]]>>[-]<<++++ \
  299. ++[-<++++++++> ]<.[-]<]+++++++++++++++++++++++++++++++++ \
  300. ++++++++[->++ +>+>++<<<]>>-.+.---------.<.<++++++++++.[[-] \
  301. >]>>>>>>>>>>>] >]<[-<<<<<<<<<<<<<<<<[[->>+>>>>>>>>+<<<<<<<<<< \
  302. ]<]>>>>>+<-[>-] >[>]<[+++++++++++++++[-<++++++++++++++++>]<-<->>] \
  303. <<<<<<[<]>->->[ >]>>>[-<<<<[<]<<+>>>[>]>>>>>>>>>+<<<<<<]>[-<<<<<[<] \
  304. <+>>[>]>>>>>>>>> >+<<<<<<]>>>>>>>>[>>++++++++++<<[->>->+<[>-]>[>]<[-<+++ \
  305. +++++++<+>>]<<<]+ +++++++++>>[-<<->>]>++++++++++<<[->>->+<[>-]>[>]<[-<++++++ \
  306. ++++<+>>]<<<]++++++++++>>[-<<->>]>++++++[-<++++++++>]<<[>[-<+<+>>]<[->>>>+<<<< \
  307. ]<[->>>>>>+<<<<<<]>]<[>>[-<<+>>]<<[->>>>>>+<<<<<<]]>>[-]<<++++++[-<++++++++>]< \
  308. [->>>>>>>>+<<<<<<<<]<[<]>[[-<<+>>]>]<<<]++++++++++++++++++++++++ ++++++[->++>+ \
  309. >++++>+++<<<<] >>++........ \
  310. >-.----------- ----.+.+++ \
  311. .-------.<++++ ++++.>+++ \
  312. +++++.>+.<+++. >++.<<--- \
  313. ----.<+.------ -------.- \
  314. ------.>>+++++ ++++++.>+ \
  315. +.>>>>>>>>>>>[ .[-<<<<<<<<<+>>>>>>>>>]]>[.[-<<<<<<<<< +>>>>>>>> \
  316. >]]>[.[-<<<<<<<<<+>>>>>>>>>]]<<<<<<<<<<<<<.>>>>>>>>>>>>>>[.[- <<<+>>>]] \
  317. >[.[-<<<+>>>]]>[.[-<<<+>>>]]<<<<<<<<<<<<<<<<<<<-.+.++++++++++ ++++++++.- \
  318. ----------------->>++.<<<++++++++++.>->-........>>.>>>>>[.[-> >>>>>>>>+< \
  319. <<<<<<<<]]>[.[->>>>>>>>>+<<<<<<<<<]]>[.[->>>>>>>>>+<<<<<<<<<] ]<<<<<<<.> \
  320. >>>>>>>[.[-<<<+>>>]]>[.[-<<<+>>>]]>[.[-<<<+>>>]]<<<<<<<<<<<< <.+.+++++++ \
  321. +++++++++++.<.>>....>.<<<..>>....>-------------.++.--------- .++++++++++ \
  322. +++.>++.<--.>++++.<<.>++.-------.>++++.-----.<<.>>-----.<<< <>>>>>>[.[- \
  323. ]]>[.[-]]>[.[-]]<<<<.>>>>>>>>>>>[.[-]]>[.[-]]>[.[-]]>[[-<+> ]++++++[-<-- \
  324. ------>]]>[[-<+>]++++++[-<-------->]]>[[-<+>]++++++[-<----- --->]]<<[->+ \
  325. +++++++++<]<[->++++++++++[->++++++++++<]<]<<<<<<[[->+<]+++ +++[->------ \
  326. --<]]<[[->+<]++++++[->--------<]]<[[->+<]++++++[->-------- <]]>>[->+++++ \
  327. +++++<]<[->++++++++++[->++++++++++<]<]<<<<<<<<++++++++.+.- --------.>+++ \
  328. +++++++++.<<<.[[-]>]>>>>>>>[-<<<<<<<<<<+>>>>>>>>>>]>>>>>> >[-<<<<<<<<<<< \
  329. <<<<<<<+>>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<+<-[>-]>[>]<[ ++++++++++++++ \
  330. +[-<++++++++++++++++>]<-<->>]>>>>>>>>>>>>>>>]>]<[+++++++ +.---[->+++++++ \
  331. ++++++++++++<]>--.--[-----<++>]<-.-[-->+++<]>--.[-]<<<+ <<+>>>>]>]<[+++ \
  332. +++++.---[->+++++++++++++++++++<]>--.--[-----<++>]<+.[ --->++++<]>+.[-] \
  333. <<<+<<+>>>>]>]<[++++++++.---[->++++++++++++++++++++<] >-.+[---<+>]<.+.[ \
  334. -]<<<<+>>>>]>]<[++++++++.---[->++++++++++++++++++<]>+ .---------------- \
  335. --.+[----<+++++>]<---.+++[----->++++<]>+.-[--<+>]<-. [--->++++<]>+.[-]< \
  336. <<+<<+>>>>]>]<[++++++++.---[->+++++++++++++++++++<] >.[---<+>]<++.+.[- \
  337. ]<<<<+>>>>]>]<[++++++++.---[->++++++++++++++++++<] >+.---------------- \
  338. --.+[----<+++++>]<---.+++[----->++++<]>+.-[--<+> ]<---.-[-->+++<]>--.[ \
  339. -]<<<+<<+>>>>]<<[->>++++++++++>>[-<<-<+>[<-]<[< ]>[->++++++++++>+<<]>> \
  340. >]++++++++++<<[->>-<<]<++++++++++>>[-<<-<+>[<- ]<[<]>[->++++++++++>+<< \
  341. ]>>>]++++++++++<<[->>-<<]<++++++[->++++++++<] >>[<[->+>+<<]>.[-]>.[-]< \
  342. ]>[<<[->>+<<]>>.[-]]<<[-]>>++++++[->+++++++ +<]>.[-]<<<<]<<[+++++[->+ \
  343. +++++++++<]>-.[-]++++++++++.[-]<]>>>>>>[- ]<<<<<<<<<<<<<<<<<<[->>+<<] \
  344. <[->>+<<]+<+>>>>>>>>>>>>>>>>>>>>>]>[-]> [-]++++++++++++++++++++[->+ \
  345. ++++++>+++>+>++++>++>++++++>+++++<<<<< <<]+++++++++.>>>>+++.>>+.--- \
  346. ---.+.>+.<-------.<++++++.>++.++++++ .-.<.>>+.++++++.<+.--.>----.<< \
  347. ------.+.<<<-.<<+.-.>-------------- -.<+.>.<.[[-]>]]<<]>>[-<+++++++ \
  348. >]<<]>>[-<++++++>]<<]>>[-<+++++>] <<]>>[-<++++>]<<]>>[-<+++>]<<]>[ \
  349. [->+<]>[-<<<<<<<<<<<<<<<<<+>>>> >>>>>>>>>>>>>]>[>>]>[-]>[-]<+++++ \
  350. +[-<++++++>]<+[<<]>++++++[-< ++++++>]<[[-<+<+>>]<<<<<<<<<<<<<<[- \
  351. >>+>>+<<<<]<[->>+>>+<<<<]< [->+>+<<]+>---[-[-[-[-[<->++++[-]]<[- \
  352. >>>>>>>>>>>>+>>-[-[-[- [-[-[-[-[-[-[-[-[-[<<->>[-<+>]]<+>]<+> \
  353. ]<+>]<+>]<+>]<+>]<+>]< +>]<+>]<+>]<+>]<+>]<+<[-<<<<++++[-<+++++ \
  354. +++>]<....<[->....<]<[- >++++++++++++++++[->...................... \
  355. ........................ ..................<]<]>>[-]>>>>>]<<<<<<<[-]> \
  356. [-]>>>>>>+>-[-[-[-[-[-[- [-[-[-[-[-[-[--------[--[--[-[---[--[--[---[-[ \
  357. <->++++++++++++++++++++++ ++++++++++++++++[-]]<[-++++[->++++++++<]>....--- \
  358. [-<++++>]<--.------------- .+++++++++++++++.+.---.----.--[--->+<]>----.[--<+++ \
  359. >]<.[---->+<]>--.++++[-<+++++++++>]<-.+[--------->+<]>----.++++[-<++++++++>]<+ \
  360. +.+++.-------.--[--->+<]>----.---[-<++++>]<-.+.----------------.+++++.+++++.-- \
  361. [--->+<]>----.---[-<++++>]<-. +.--- \
  362. -------------.+++++++++++ .+++ \
  363. +++.-.+[--------->+<]>--- .[-] \
  364. <]>]<[-+++++[->+++++++<]> .-- \
  365. .-[--<+++>]<-.-[-->+++++< ]>+ \
  366. +.--.-.+[-----<++>]<+.++[ ->++ \
  367. <]>.+++++++.+++++.[-----<+ +>]<+++.-[-->+++++<]>+.------------- ---- \
  368. .+++++++++.+++++++.-----------.[--------<+>]<---.[->++++++++++<]>+ +.--- \
  369. .++++++++++++.-.--------.+++.--.++++++++++++++.---.-------------. --[-- \
  370. -<+>]<-.---[->++++<]>-.+.----------------.+++++++++++.++++++.-.[- ---<+> \
  371. ]<+++.--[-->+++<]>.+++++[-<++>]<+.+++++++++.-----------.++++++++ ++++.- \
  372. ----------.+++++.+++++.-------.-[--->+<]>--.[ -<+++>]<++.++ +++++.+ \
  373. ++++.-------------.+++++++++++++++++.+++++++. [----------- >+<]>-.[ \
  374. -<++++++++++>]<++.---.++++++++++++.-.-------- .+++.--.+++ ++++++++ \
  375. +++.---.-------------.--[--->+<]>-.---[-<++++ >]<-.+.--- --------- \
  376. ----.+++++.+++++.--[--->+<]>----.--[--<+++>]< .+++++[-> ++<]>+.+++ \
  377. ++++++.-----------.++++++++++++.-----------. +++++.+++ ++.-------. \
  378. -[---<+>]<--.[->+++<]>++.+++++++.+++++.----- --------. +++++++++++ \
  379. ++++++.+++++++.[-----------<+>]<-..++++[->++ ++++++<] >.++.---.--- \
  380. ---------.[---<+>]<-.---[->++++<]>--.+++.--- ----.-- [---<+>]<---- \
  381. .-[->++++<]>-.------------------.+++++.--[-- -<+>]< ----.+++++[->+ \
  382. ++<]>.++++++.-.+++++++++.-[----<+>]<+.-[->++ ++<] >-.--[--------- \
  383. --<+>]<-.[->+++<]>++....---[-<++++>]<-.----- --- ------.+++++++++ \
  384. ++++++.[---->+<]>+++.----[-<++++>]<.[---->+< ]>++ ++.[--<+++>]<.[-- \
  385. -->+<]>--.[-<+++>]<++....---[->++++<]>-.---- ----- -----.++++++++++++ \
  386. +++.[----<+>]<+++.++++[->+++<]>+.--------.++ ++++++ .-[---<+>]<----.-[- \
  387. >++++<]>-.---[-----<++>]<.++[-->+++++<]>.+[ ---------<+>]<----.[->+++<]>+ \
  388. +....++[-<+++>]<.+++++++++.+++.[--->+<]>--- ---.-[-<++++>]<-.--------.--- \
  389. -----------.+++++++++++++++.[---->+<]>+++.+ ++[-<+++>]<.[--->+<]>---.[--< \
  390. +++>]<.++[-->+++++<]>.-[----<+>]<+.-[->+++ +<]>-.[---<+>]<-----.-[->+++< \
  391. ]>.[-------<++++>]<.------------.[-->+++++ <]>.------------------....--[- \
  392. ---<+++++>]<.-[---->+<]>+.-[-<++++>]<-.-- ----------------.+++++.------- \
  393. ----.+++++++++++++++.[--->+<]>------.+++ [-<+++>]<.[----->++++++<]>-.-[- \
  394. ---<+>]<+.-[->++++<]>-.---------------. -----------.+++++++++++++++..-- \
  395. ---------.+++++++++.----------.-[---<+ >]<-.++++[->+++<]>+.--------.+++ \
  396. +++++.-[---<+>]<----.[-->+++<]>.++[-- <+++++>]<.+[--------->+<]>----.[- \
  397. ]<]>]<[-+++++[->++++++++<]>+.------- --.+++++.-----.[--<+++>]<++.+++.+ \
  398. .[--->+++++<]>+++.[-]<++++++++++.[- ]]>]<[-+++++[->++++++++<]>+.------ \
  399. ---.+++++.-----.[--<+++>]<++.+++.+ .[--->+++++<]>+++.[-]<++++++++++.[- \
  400. ]]>]<[-++++++++++.[-]]>]<[-+++++ +[->+++++++++++++++<]>+++.---[------ \
  401. ---<+>]<.[-]]>]<[-+++++ +[->+ ++++++++++++++<]>+++.---[---------<+> \
  402. ]<.[-]]>]<[-+++++[->+ +++ ++++<]>+.---------.+++++.-----.[--<+++ \
  403. >]<++.+++.+.[--->++ +++ <]>++ +.---[---------<+>]<.[-]]>]<[- \
  404. +++++[->++++++++<]> +.- ------- -.+++++.-----.[--<+++>]<++. \
  405. +++.+. [--->+++++< ]>++ +.---[-- -------<+>]<.[-]]>]<[-+++++ \
  406. +[-> +++++++++++ ++++ <]>+++.[-- -<++>]<---.-----[->++<]>.++ \
  407. +++ ++.-------- ------.++++++++ +++++++.[----<+>]<+++.++++[- \
  408. >++ +<]>+.---- ----.++++++++. -[---<+>]<----.++++.+[->+++< \
  409. ]>.[ ---<+>]<--- --.--[->+++<]> +.++++++++++.-[-----<++++++> \
  410. ]<.- -------.++ .[--->+<]>---- --.++++++++.+++++[-<++>]<+.+ \
  411. +++++ +++++++++++ .---.+++++.- ---------.+.-[----->++++++<]> \
  412. .[--- -<+>]<++.++ ++.[->+++<]> +.--------.++++++++.-[---<+>] \
  413. <---- .++++.+[->+ ++<]>.----- -------------.[---<+>]<+.++++ \
  414. ++++++ +.--------- --.--[->+++ <]>+.+++++++++++++++++.---.++ \
  415. +++.-- --------.+ .-[-----<+ +++++>]<.[---->+<]>++.++++.[-< \
  416. +++>]<+ .--------.+ +++++++.-[- -->+<]>----.++++.+[-<+++>]<+.+ \
  417. ++[---- ->++++<]>+. [---<+>]<+.++ ++++++++.[-]]>]<[-++++++[->+++ \
  418. +++++++ +++++++++<]>+.----------- ---.+++++++++++++++.[----<+>]<+ \
  419. ++.+++++ [->+++<]>.[---<+>]<-----. --[->+++<]>+.++++++++++.-[----- \
  420. <++++++> ]<.--------.++.[--->+<]>- -----.++++.+[-<+++>]<+.--[-----> \
  421. ++<]>-.[- ]<]>]<[-++++++[->++++++++++ +++++<]>+++.[---<++>]<---.-----[ \
  422. ->++<]>.+ ++++++.--------------.++++++ +++++++++.[----<+>]<+++.++++[->++ \
  423. +<]>+.--------.++++++++.-[---<+>]<---- .++++.+[->+++<]>.[---<+>]<-----.- \
  424. -[->+++<]>+.++++++++++.-[-----<++++++ >]<.--------.++.[--->+<]>------.+ \
  425. +++++++.+++++[-<++>]<+.++++++++++++++ +++.---.+++++.----------.+.-[----- \
  426. >++++++<]>.[----<+>]<++.++++.[->+++< ]>+.--------.++++++++.-[---<+>]<--- \
  427. -.++++.+[->+++<]>.----------------- -.[---<+>]<+.+++++++++++.---------- \
  428. -.--[->+++<]>+.+++++++++++++++++.- --.+++++.----------.+.-[-----<++++++ \
  429. >]<.[---->+<]>++.++++.[-<+++>]<+.- -------.++++++++.-[--->+<]>----.++++ \
  430. .+[-<+++>]<+.+++[----->++++<]>+.[ ---< +>]<+.++++++++++.[-]]>]<[-+++++ \
  431. +[->+++++++++++++++++++<]>+.---- ----- -----.+++++++++++++++.[---- \
  432. <+>]<+++.+++++[->+++<]>.[---<+> ]<-- ---.--[->+++<]>+.++++++++++ \
  433. .-[-----<++++++>]<.--------.++ .[--- >+<]>------.++++.+[-<+++>]< \
  434. +.--[----->++<]>+.[-]<]>]<[-+ +++++[ ->++++++++++++++++++<]>.+++ \
  435. ++++.--------------.++++++++ ++++++ +.[----<+>]<+++.++++[->+++<] \
  436. >+.--------.++++++++.-[--- <+>]<-- --.++++.+[->+++<]>+.[----<+> \
  437. ]<++++.[-]]>]<[-++++++[-> +++++++ ++++++++++++++<]>-.+[------- \
  438. --<+>]<----.[-]]>]<[-++ ++++[->+ +++++++++++++++++++<]>-.----- \
  439. ----------.+.+++.---- ---.--[- --<+>]<-.-[->++++<]>-.+[----< \
  440. +++>]<--.++++++++++ +++++++.- --.+++++.----------.+.-[----- \
  441. >++++++<]>.[----< +>]<++.+++ +.[-> \
  442. +++<]>+.------- -.++++++++. -[-- \
  443. -<+>]<----.+ +++.+[->+++< ]> \
  444. +.+++[-----< ++++>]<+.[---> +< \
  445. ]>+.+.--[-<+ +>]<-.+[-->+<] >+ \
  446. .[--<+++>]<.+ +[-->+++++<]>.-[ -- \
  447. --<+>]<+.-[->+ +++<]>-.--[------ -----<+>]<-.[-]]>]<[-++ ++ \
  448. ++[->++++++++++ +++++++++<]>+.----- ---------.+++++++++++++++ .[ \
  449. ----<+>]<+++.----[->++++<]>.[----<+> ]<++++.--[->+++<]>+.++++ +++ \
  450. +++.-[-----<++++++>]<.--------.++.[ --->+<]>------.++++.+[-<+ ++> \
  451. ]<+.--[----->++<]>-.[-]<]>]<[-++++ ++[->+++++++++++++++++++<] >+. \
  452. --------------.+++++++++++++++.[-- --<+>]<+++.----[->++++<]> .[- \
  453. ---<+>]<++++.--[->+++<]>+.+++++++ +++.-[-----<++++++>]<.---- ---- \
  454. .++.[--->+<]>------.++++.+[-<+++ >]<+.--[----->++<]>+.[-]<]> ]<[- \
  455. ++++++[->+++++++++++++++++++<]> --.+++++.-.-.+[----<+>]<+++ .--[ \
  456. -->+++<]>.-[--<+++++>]<.+.-.-- -------.++++++++++++++++++. ----- \
  457. ------.---.+++++.---------.--[ --->+<]>-.++++.+[-<+++>]<.++ ++++. \
  458. -.[---->+<]>+++.--[-<+++>]<+. +++++++++++.+++++++++.+++.-- ---.- \
  459. -----------.++++++++++++++++ +++.[---->+<]>+++.+++++.---- [-<+++ \
  460. >]<.[--->+<]>-.--[-<+++>]<+ .+++++++++++++++++.---.+++++. ------ \
  461. ----.+.-[----->++++++<]>.[ ----<+>]<++.++++.[->+++<]>+.- ------ \
  462. -.++++++++.-[---<+>]<---- .++++.+[->+++<]>+.+++[-----<++ ++>]<+. \
  463. .---[--------->+<]>.[-]< ]>]<[-++++++[->+++++++++++++++ +++<]>. \
  464. +++++++.--------------. +++++++++++++++.[----<+>]<+++.+ +++[->++ \
  465. +<]>+.--------.+++++++ +.-[---<+>]<----.++++.+[->+++<] >+.[---- \
  466. <+>]<++++.--[->+++<]>+ .++++++++++.-[-----<++++++>]<.-- ------.++ \
  467. .[--->+<]>------.++++++ ++.+++++[-<++>]<+.++++++++++++++ +++.---.+ \
  468. ++++.----------.+.-[---- ->++++++<]>.[----<+>]<++.++++.[-> +++<]>+.-- \
  469. ------.++++++++.-[---<+>] <----.++++.+[->+++<]>+.+++[-----< ++++>]<+.[- \
  470. -->+<]>+.--[--<+++>]<.[-]]>]<[-++++++[->+++++++++++++++++++ <]>+.------ \
  471. --------.+++++++++++++++.[----<+>]<+++.+[->+++<]>.[---<+>]< -.--[->+++<] \
  472. >+.+[----<+++++>]<-.-------------.----.+++.-[--->+<]>-.+++ +.-[-<+++>]< \
  473. .+++++.--[--->+<]>----.[--<+++>]<+.--[->++<]>-.[---<++>]< ---.------[-> \
  474. ++<]>-.---.[---<+>]<--.-[->++++<]>-.+[----<+++>]<--.+[-- -->+++++<]>.+. \
  475. --.---------.+++++.-------.-[---<+>]<--.++++[->+++<]>.- ------.+++++++ \
  476. ++.-------.+++++++++++++.------------.--[---<+>]<--.++ ++.---[->+++<]> \
  477. .------.[---<++>]<-..------------.+[-->+++++<]>.-[---- <+>]<+.-[->++++< \
  478. ]>-.---------------.+++++++.--------------.++++++++++ +++++.[----<+>]<+ \
  479. ++.++++[->+++<]>+.--------.++++++++.-[---<+>]<----.+ +++.+[->+++<]>+.[ \
  480. ----<+>]<++++.--[->+++<]>+.+[----<+++++>]<.-------- --------.--.++++++ \
  481. +++++++.--[--->+<]>----.++++.---[-<+++>]<.[--->+<] >-.+++++.----[-<+++ \
  482. >]<.------.[--->++++<]>+.+[---------<+>]<----.[- ]]>]<[-++++++[->++++ \
  483. ++++++++++++++<]>.+++++++.--------------.++++++ +++++++++.[----<+>]<+ \
  484. ++.++++[->+++<]>+.--------.++++++++.-[---<+>]< ----.++++.+[->+++<]>+. \
  485. [----<+>]<++++.--[->+++<]>+.++++++++++.-[---- -<++++++>]<.--------.++ \
  486. .[--->+<]>------.++++++++.+++++[-<++>]<+.++ +++++++++++++++.---.++++ \
  487. +.----------.+.-[----->++++++<]>.[----<+>] <++.++++.[->+++<]>+.----- \
  488. ---.++++++++.-[---<+>]<----.++++.+[->+++ <]>+.+++[-----<++++>]<+.[-- \
  489. ->+<]>+.+++++++++++.[-]<]<<<<<<<<<<<<] >]<[->>>>>>>>>>>>+>>-[-[-[-[ \
  490. -[-[-[-[-[-[-[-[-[<<->>[-<+>]]<+>]<+> ]<+>]<+>]<+>]<+>]<+>]<+>]<+>] \
  491. <+>]<+>]<+>]<+<[-<<<<++++[-<+++++++ +>]<....<[->....<]<[->++++++++ \
  492. ++++++++[->...................... ................................ \
  493. ..........<]<]>>[-]>>>>>]<<<<<< <[-]>[-]>>>>>>+>-[-[-[-[-[-[-[-[- \
  494. [-[-[-[-[--------[--[--[-[---[- -[--[---[-[<->+++++++++++++++++++++ \
  495. +++++++++++++++++[-]]<[-++++++[- >+++++++++++++++++<]>-.+++++++++.---- \
  496. ------.[----------<+>]<.++++[->++ ++++++<]>++.+++.-------.+[---<+>]<+++. \
  497. +[->++<]>+.+.+[-----<++++>]<.+++++ .+++++.[-->+<]>+++++.------------.----[- \
  498. <+++>]<-.+.+[----->++++<]>.++++++++ +++.++++++.-.[--<+>]<-.-[---->+<]>.[-]<]>] \
  499. <[-+++++[->+++++++<]>.--.-[--<+++>]<-.-[-->+++++<]>++.--.-.+[-----<++>]<+.++[- \
  500. >++<]>.+++++++.+++++.[-----<++>]<+++.-[-->+++++<]>-.+++.-------------------.-- \
  501. [----<+++++>]<+.[----------->+<]>-.[-<++++++++++>]<.+.+.[--->+<]>--.---[-<++++ \
  502. >]<--.+++.-------.+[--->+<]>+++.-- ---[-<+++>]<.+++++.------------- \
  503. --.-[-->+<]>---.------------ .+++++[-<+++>]<.++++++.-.+[- \
  504. -->+<]>++.-[----<+>]<.[-> +++<]>++....++++[-<+++>]< \
  505. +.+[-->+<]>++++++.-[--< +++>]<+.+[-->+<]>++.-[- \
  506. <++>]<-.-[-->+<]>---- .++++++.[--<+++++>]<. \
  507. ------------------.. ..--[----->+++<]>-. \
  508. ---[-<++>]<.[-->+< ]>+ ++++.- ------------.+++++ \
  509. ++++++.+[------<+ >]<.[- ]]>]<[-++ +++[->++++++++<]> \
  510. +.----.++++++++ +++.[--<+ ++++>]<.[-- --->++<]>+.-..[- \
  511. ]++++++++++.[- ]<]>]<[-+++ ++[->++++++++ <]>+.----.+++++ \
  512. ++++++.[--<++ +++>]<.[---- ->++<]>+.-..[-] ++++++++++.[-] \
  513. <]>]<[-+++++ +++++.[-]]>]< [-++++++++++.[-] ]>]<[-+++++++ \
  514. +++.[-]]>]< [-+++++[->++++ ++++<]>+.----.+++ ++++++++.[-- \
  515. <+++++>]<.[ ----->++<]>+.-. .[-]++++++++++.[-]< ]>]<[-+++++[ \
  516. ->++++++++ <]>+.----.++++++ +++++.[--<+++++>]<.[ ----->++<]> \
  517. +.-..[-]+ +++++++++.[-]<]>] <[-++++++[->+++++++++ +<]>-.---- \
  518. [-<++>]< -.---------------- --.---[---->+++++<]>+ .--------- \
  519. -------- -.[---<++>]<-.-[--- >++<]>.----[-<+++>]<+. ---------- \
  520. ------- -.---[---->+++++<] >+.------------------. -[--<+>]< \
  521. ---.+[- ->+++++<]>-.------- -----------.+[----<+++++ >]<---.++ \
  522. +[---- ->++++<]>+.-[--<+>]< ----.[-]]>]<[-++++++[->+ ++++++++ \
  523. ++++++ +++<]>+++.+[--<+>]<+ ++++.-----[->++<]>.--[-- ---<++>] \
  524. <-.[-] ]>]<[-++++++[->++++++ ++++<]>-.----[-<++>]<-.- -------- \
  525. ----- ----.---[---->+++++< ]>+.------------------.[- --<++>]< \
  526. -.-[- -->++<]>.----[-<+++> ]<+.------------------.--- [---->++ \
  527. +++<] >+.------------------ .-[--<+>]<---.+[-->+++++<] >-.----- \
  528. ---- ---------.+[----<++++ +>]<---.+++[----->++++<]>+ .-[--<+ \
  529. >]<- ---.[-]]>]<[-++++++[ ->++++++++++++++++++<]>+++ .+[--<+ \
  530. >]<+ ++++.-----[->++<]>.- -[-----<++>]<+.[-]]>]<[-+++ +++[->+ \
  531. ++++ +++++++++++++<]>+.--- ---------------.+[----<++++ +>]<--- \
  532. .+++ [----->++++<]>+.[--- <++>]<-.[-]]>]<[-++++++[->+ +++++++ \
  533. ++++ +++++<]>-.+++++++++. ----------.[----------<+>]<. [-]]>]<[ \
  534. -+++ +++[->++++++++++++++ ++++++<]>-.---------------.+ .+++.--- \
  535. ---- .--[---<+>]<-.++++[ ->+++<]>+.------------------ .+[----< \
  536. ++++ +>]<---.+++[----->+ +++<]>+.[---<+>]<++.--[->++< ]>-.---- \
  537. ---- -----.[----<+>]<-- .[-]]>]<[-++++++[->+++++++++ ++++++++ \
  538. ++<] >--.--[-----<++>]< -.-[-->+++<]>--.[-]<]>]<[-++ ++++[->+ \
  539. ++++ ++++++++++++++<]>- -.--[-----<++>]<+.[--->++++< ]>+.[-]<] \
  540. >]<[ -++++++[->+++++++ +++++++++++<]>+++.++++++.-.- [-----<++ \
  541. >]<. ++[-->+++++<]>-.- ----.---------.+++++++++++.-- --------- \
  542. ---- .-[-----<++>]<. ------..----[->++<]>..-----[ -<++>]<-.- \
  543. ----- ------------.+[ ---->+++++<]>---.+++[-----<+ +++>]<+.-[ \
  544. -->+< ]>-----.-[---- <+>]<.[-]]>]<[-++++++[->++++ +++++++++++ \
  545. +++<] >+.---------- --------.+[----<+++++>]<---. +++[----->+ \
  546. +++<]> +.[---<++>]< -.-[--->++<]>.----[-<+++>]< +.---------- \
  547. ------ --.+[----> +++++<]>---.+++[-----<++++> ]<+.-[-->+<] \
  548. >-.[-]< ]>]<[-++++ +++++++++++++[-<+<+++<++++ <++++++<+++++ \
  549. <++++++ +<++>>>> >>>]<<<<---.>-------.<+++ +++.+++++.<+++ \
  550. +++++++. >>>--- --.<<-------.--.<<---.>++ +.<+++++.-----. \
  551. >>.>>---- --.+ .<--.<++++++++.<-------. >+++.<++.>>++.<< \
  552. ++++++.<< --.>+.>>--.--.<++.<-- ..<.>>--.>>..<++. \
  553. -----.+++. >>>-------.<<<<<<[[- ]>]]>]<[-++++++[-> \
  554. +++++++++++ +++++++<]>+.----- -------------.+[--- \
  555. -<+++++>]<-- -.+++[----->++ ++<]>+.[---<++>]<-.-[ \
  556. --->++<]>.---- [-<+++>]<+.---- --------------.+[----> \
  557. +++++<]>---.+++[-----<++++>]<+.-[-->+ <]>---.[-]<]<<<<<<<[]>[] \
  558. >[]>[]>[]>[]>[]>[]>[]>[]><<<<<<<<<<<<< <<]>]<[->>>>>>>>>>>>+>>-[- \
  559. [-[-[-[-[-[-[-[<<->>[-<+>]<+>]<+>]<+>] <+>]<+>]<+>]<+>]<+>]<+>]<+<[- \
  560. <<<<++++[-<++++++++>]<....<[->....<]<[- >++++++++++++++++[->............ \
  561. ........................................ ............<]<]>>[-]>>>>>]<<<<<<<[- \
  562. ]>[-]>>>>>>+>-[-[-[-[-[-[-[-[-[-------------[--[--[-[-----[-[<->++++++++++++++ \
  563. +++++++++++++++++++[-]]<[-++++++++++[->++++++++++<]>+++++.---.<++++[-<++++++++ \
  564. >]<.>>-------..+++++++++++++++.-------------.++++++++++++.--------.------..<<- \
  565. -[->++<]>+..-[--<+>]<++++.>>..++++++++++++++.------------.++++++++.+++++.----- \
  566. ----------..<<.----[->++<]>--.<++++++++++.[->---<]>++++....>++++++++++++++++++ \
  567. +.+++.------ -.<++++++++.>++ \
  568. +++.++++++.- -----.<++++++.> \
  569. .+.--------- -------.+++++.+ \
  570. ++++.<.>++++ .-------------. \
  571. ----.+++.<-- .>+++++++++++++ \
  572. ++.++++++.-- ----.<++.>.+.-- \
  573. ------------ --.+++++++++++. \
  574. ++++++.-.<.>+++.-----.---------.+++++++++++.---------- -----.[-]<----- \
  575. .-[---->+<]>.[-]<]>]<[-++++++++++[->++++++++++<]>+++++ .++++.+++.-.+++ \
  576. .++.++++++++++++[----<+>]<.[->++++<]>-------------.+++ +++.------.<+++ \
  577. +++++++.>---------------.+.+.<[-<+++>]<++.>>++++++++++ ++.+++.-------. \
  578. <<++++++++.>>-----.<<++++.>>++++++.<<---.+++++++++++++ ++++.++[------> \
  579. +<]>.[-<+++>]<++....>>--.<<[->++<]>---.>-------------- ----.<--------- \
  580. ----.>++.<------.++++++.>+++++++++++++++++++++++++++.- --------------- \
  581. --....<+++++++++++.++>++++++++++.[-]<.-------------.++ [----->+<]>.[-] \
  582. <]>]<[-++++++++++.[-]]>]<[-++++++++++.[-]]>]<[-+++++[- >++++++++<]>+.- \
  583. ---.+++++++++++.[--<+++++>]<.[----->++<]>+.-..[-]<]>]< [-+++++[->+++++ \
  584. +++<]>+.----.+++++++++++.[--<+++++>]<.[----->++<]>+.-. .[-]<]>]<[-++++ \
  585. +++++++[->++++++++++<]>-.------------------.++++++++++ +++++++++++.--- \
  586. ----------------.[---<++>]<-.-------------.[-]++++++++ ++.[-]]>]<[-+++ \
  587. +++++++.[-]]>]<[-++++++++++++[->++++++++++<]>-.------- --------.+.+++. \
  588. -------.-[----------<+++>]<++.--[--->+++++++++++<]>-.- --------------- \
  589. --.+++++++++++++++++++++.-------------------.---[---<+ +>]<--.[-]+++++ \
  590. +++++.[-]]>]<[-++++++++++[->+++++++++++<]>++.----[---- --------<+++++> \
  591. ]<--.++[--->++++<]>+.[-]<]>]<[-++++++++++[->++++++++++ +<]>++.----[--- \
  592. ---------<+++++>]<.[--->++++<]>+.[-]<]>]<[-++++++++++[ ->+++++++++++<] \
  593. >+.-[-----------<++++>]<.[-->+++++<]>-.+++++.+++++++++ +.----[-------- \
  594. ---<++++>]<.[-->+++++<]>+++++++++.------------------.+ +++++++++++++++ \
  595. +++++.-------------------.---[---------<++++>]<+..-[-- -->+<]>.[-]<]>] \
  596. <[-++++++++++[->+++++++++++<]>-.------------------.+++ +++++++++++++++ \
  597. +++.-------------------.[---<++>]<-.-[--->++<]>.[-<+++ >]<-----------. \
  598. ------------------.+++++++++++++++++++++.------------- ------.---[-->+ \
  599. <]>.[-]<]>] <[-++++++++++[- \
  600. >++++++++++ <]>-.<<<+++++++ \
  601. +[->+++++>+ +++++++<<]>>--- \
  602. .>++++++.<< .+++++++++.---- \
  603. ----.>--.>+ +++.----------- \
  604. -------.+++ +++++++++++++++ \
  605. +++.------- ------------.<+ \
  606. +.>++++++.<<---------.>>--.+++++++++++++.----------.<< .>>+++++++++++. \
  607. +++.--------------.< <++++++++.>>-.<<+.---------.>>++ ++++++++++.+++. \
  608. <<.>>-----.-------- ----------.+++++++++++++++++++ ++.------------ \
  609. -------.[-]<[-]<[- ]>++++++++++.[-]]>]<[-+++++++ +++[->+++++++++ \
  610. ++<]>-.----------- -------.+++++++++++++++++++ ++.------------ \
  611. -------.[---<++>] <-.-[--->++<]>.[-<+++>]<- ----------.---- \
  612. --------------.+ ++++++++++++++++++++.-------------------.---[--> \
  613. +<]>--.[-]<]<<< <<<<<<<<<]>]<[->>>>>>>>>>>>+>>-[-[-[-[-[-[-[-[ \
  614. -[-[-[-[-[<<->> [-<+>]]<+>]<+>]<+>]<+>]<+>]<+>]<+>]<+>]<+>]<+ \
  615. >]<+>]<+>]<+<[-<< <<++++[-<++++++++>]<..<[->..<]< [->++++++++ \
  616. ++++++++[->....... .........................<]<] >>[-]>>>>> \
  617. ]<<<<<<<[-]>[-]>>>>> >+>-[-[-[-[-[-[-[-[-[-[-[-[ -[------- \
  618. -[--[--[-[---[--[--[- --[-[<->++++++++++++++++++ ++++++++ \
  619. ++++++++++++[-]]<[-++++ ++[->++++++++++++++++++ +++<]> \
  620. -.+[---------<+>]<----.[ ->++++++++++<]>++.+++++ +++++ \
  621. +++++.-------.-----------. [---<+>]<-.++++[->+++<] >+.-- \
  622. ----------.++++++++.+++++.+ [---<+>]<+++.+.[->+++<]> .--[-- \
  623. ---------<+>]<-.[->+++<]>++. .---[-<++++>]<--.+++.--- ----.+ \
  624. [--->+<]>+++.---[-<+++>]<.+++ +.[----->++<]>.----[-<+ +>]<-.- \
  625. ----[-->+++<]>-.--------------- -.+++++.+++++.[-----<++> ]<.---- \
  626. --------.+++++[->+++<]>.++++.[-- ---<++>]<.----[->++<]>-. -----[-- \
  627. <+++>]<-.----------------.+++++++ ++++.++++++.-.+[--->+<]> ++.-[--- \
  628. -<+>]<.++++[->+++++++++<]>-.+[---------<+>]<----.[-]]>]<[- ++++++[-> \
  629. +++++++++++++++++++<]>--.---------------.++.++++++++.---- ------.++ \
  630. ++++.--.--[---<+>]<-.++++[->+++<]>+.------------.+++++++ +.+++++.[- \
  631. ----------<+>]<.+++[->++++++++<]>+.++++.+++.-.+++.++.[- ---<+>]<+++ \
  632. .++.+++[->+++<]>.++++.-[---<+>]<----.-[--->+<]>-.[-<++ ++++++++>]< \
  633. ++.+++++++++++++++.-------.-----------.[--->+<]>-.---[ -<++++>]<--. \
  634. +++.-------.+[--->+<]>+++.-----[-<+++>]<.+++++.--[--- >+<]>----.+++ \
  635. +++++++.-----[-<+++>]<.++++.[----->++<]>.[--<+++>]<+ .[-->+++<]>.+ \
  636. ++.-------.-[--<+>]<------.------------.+++++[->+++ <]>.++++++.-.[ \
  637. ----<+>]<+++.++++++++++.-----[->+++<]>.++++.[----- <++>]<.[-->+++< \
  638. ]>+.[--<+++>]<.+++.-------.-[----->++<]>+.[-<+++> ]<.--[---------- \
  639. ->+<]>-.[-<+++>]<++..--[->++++<]>--.++[-----<++ ++>]<+.++++++++++ \
  640. +++++++.[--->+<]>------.++++[-<+++>]<+.------- -----------.+[--> \
  641. +<]>++.[--<+++++>]<.------------------....--- ------.+++++.--[-- \
  642. -->+++++<]>+.-----.---------------.-[------- ---<+>]<.[->+++<]>+ \
  643. +..--[-<++++>]<--.++[----->++++<]>+.++++++ +++++++++++.[---<+>] \
  644. <------.----[->++++<]>.[----<+>]<++++.+++ [->+++<]>.+++++.+++++ \
  645. +.+[---------<+>]<---.[->+++<]>++..++++ [-<+++>]<+.----------- \
  646. -------.+[---->+++++<]>---.+++[-----< ++++>]<+.[--->++<]>-.--- \
  647. ----------.[----<+>]<--.[-]]>]<[-++ ++++++++.[-]]>]<[-+++++++ \
  648. +++.[-]]>]<[-++++++++++.[-]]>]<[- ++++++++++.[-]]>]<[-++++++ \
  649. ++++.[-]]>]<[-++++++++++.[-]]>] <[-+++++++++ +.[-]]>] \
  650. <[-++++++[->+++++++++++++++< ]>+++.-[--<+ >]<--- \
  651. .-[-->+++<]>--.------[-<+ +>]<-.----- ----- \
  652. --------.+[---->+++++< ]>---.+++[-- ---< \
  653. ++++>]<+.-[-->+<]> ----.[-]<]>]< [-+ \
  654. +++++[->+++++++ +++++++++++<]> +.- \
  655. ---------------- -.+[----<+++++>] <--- .- \
  656. -[----->++<]>-.[- ]<]>]<[-++++++[-> ++++++ ++ \
  657. +++++++<]>+++.-[- -<+>]<---.-[-->+++< ]>--.--- -- \
  658. -[-<++>]<-.------- -----------.+[---->++ +++<]>-- -. \
  659. +++[-----<++++>]<+. -[-->+<]>----.[-]<]>]<[- ++++++[- >+ \
  660. +++++++++++++++++<] >+.------------------.+[-- --<++++ +> \
  661. ]<---.--[----->++<]> +.[-]<]>]<[-++++++[->+++++++++ ++++++ ++ \
  662. +<]>+.--------------- ---.+[----<+++++>]<---.+++[----->+ +++ <]> \
  663. +.[---<++>]<-.[-]]>]<[-++++++[->++++++++++++++++++++ +<] >-. \
  664. +[---------<+>]<----.[-]]> ]<[-++++++[->++++++++

Large files files are truncated, but you can click here to view the full file