Skip to content

Instantly share code, notes, and snippets.

@AndyNovo
Last active November 5, 2022 07:01
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AndyNovo/eb1866333e7f8b4746a441b84d5c1e67 to your computer and use it in GitHub Desktop.
Save AndyNovo/eb1866333e7f8b4746a441b84d5c1e67 to your computer and use it in GitHub Desktop.
MineStax mc86 Interpreter Just Wire It Up.

Minestax is a 6-instruction language which is a stack of stacks.

  • i inserts a block of the current color onto the active stack
  • c toggles the current color between black and white
  • l makes the stack to the left of the active one the new active one (shifts the index left)
  • r makes the stack to the right of the active one the new active one (shifts the index right)
  • d duplicates the current stack and copies it one to the left (activating the new stack)
  • s stacks the active stack on top of the next stack on the right (pops the active stack and drops it onto the next stack)

So if you wanted make a stack of 16 white blocks you could use iiiiiiiiiiiiiiii OR iidsdsds (makes a stack of 2, dupes and stacks to make 4, again to get 8 and finally 16).

Concrete powder is used for the simplicity of dropping blocks of various colors.

In the source.mcd book each page is a MineStax instruction that will draw a CTF flag (takes about an hour to print).

See the mc86_README.md to understand more about the mc86 architecture.

/give @p minecraft:writable_book 1
/give @p minecraft:writable_book{pages:["/item replace entity @e[type=armor_stand,nbt={\"Tags\":[\"idx\"]}] armor.head from entity @e[type=armor_stand,nbt={\"Tags\":[\"idx\"]},limit=1] weapon.offhand","/item replace entity @e[type=armor_stand,nbt={\"Tags\":[\"idx\"]}] weapon.offhand from entity @e[type=armor_stand,nbt={\"Tags\":[\"idx\"]},limit=1] weapon.mainhand","/item replace entity @e[type=armor_stand,nbt={\"Tags\":[\"idx\"]}] weapon.mainhand from entity @e[type=armor_stand,nbt={\"Tags\":[\"idx\"]},limit=1] armor.head","/data remove block ~-4 ~ ~ Items[1].tag.pages[0]","/data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[10].tag.pages","/say colorswap"]} 1
/item replace entity @e[type=armor_stand,nbt={"Tags":["idx"]}] armor.head from entity @e[type=armor_stand,nbt={"Tags":["idx"]},limit=1] weapon.offhand
/item replace entity @e[type=armor_stand,nbt={"Tags":["idx"]}] weapon.offhand from entity @e[type=armor_stand,nbt={"Tags":["idx"]},limit=1] weapon.mainhand
/item replace entity @e[type=armor_stand,nbt={"Tags":["idx"]}] weapon.mainhand from entity @e[type=armor_stand,nbt={"Tags":["idx"]},limit=1] armor.head
/data remove block ~-4 ~ ~ Items[1].tag.pages[0]
/data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[10].tag.pages
/say colorswap
/give @p minecraft:written_book{title:"Init CPU",author:"UD Cyberscholars",generation:0,pages:[
"{\"text\":\"Click Here First\\n\",\"color\":\"dark_green\",\"bold\":true,\"underlined\":true,\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"Creating RAM\"},\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/setblock ~1 ~ ~ minecraft:lime_shulker_box\"},
\"extra\":[
{\"text\":\"Click Here Second\\n\",\"color\":\"dark_green\",\"bold\":true,\"underlined\":true,\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"Start Timing Belt\"},\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/setblock ~2 ~1 ~ minecraft:command_block[facing=up]{powered:0b,Command:\\\"setblock ~ ~-1 ~ air\\\"}\"}},
{\"text\":\"Click Here Third\\n\",\"color\":\"dark_green\",\"bold\":true,\"underlined\":true,\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"Finishing Timing Belt\"},\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/setblock ~2 ~2 ~ minecraft:chain_command_block[facing=up]{powered:0b,auto:1b,conditionMet:0b,Command:\\\"execute if data block ~-1 ~-2 ~ Items[0].tag.pages[0] run setblock ~ ~-2 ~ redstone_block\\\"}\"}},
{\"text\":\"Click Here Fourth\\n\",\"color\":\"dark_green\",\"bold\":true,\"underlined\":true,\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"Start CPU\"},\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/setblock ~3 ~ ~ minecraft:command_block[facing=east]{powered:0b,Command:\\\"data modify block ~2 ~ ~ Command set from block ~-2 ~ ~ Items[0].tag.pages[0]\\\"}\"}},
{\"text\":\"Click Here Fifth\\n\",\"color\":\"dark_green\",\"bold\":true,\"underlined\":true,\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"Finishing CPU\"},\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/setblock ~4 ~ ~ minecraft:chain_command_block[facing=east]{powered:0b,auto:1b,conditionMet:0b,Command:\\\"data remove block ~-3 ~ ~ Items[0].tag.pages[0]\\\"}\"}},
{\"text\":\"Click Here Sixth\\n\",\"color\":\"dark_green\",\"bold\":true,\"underlined\":true,\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"Placing ALU\"},\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/setblock ~5 ~ ~ minecraft:chain_command_block[facing=east]{powered:0b,auto:1b,conditionMet:0b}\"}}]}"]} 1
/give @p minecraft:writable_book{pages:["/execute at @e[type=minecraft:armor_stand,nbt={\"Tags\":[\"idx\"]}] run clone ~ ~ ~ ~ ~64 ~ ~ ~ ~-1 replace","/data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[8].tag.pages","/say done dupe"]} 1
/execute at @e[type=minecraft:armor_stand,nbt={"Tags":["idx"]}] run clone ~ ~ ~ ~ ~64 ~ ~ ~ ~-1 replace
/data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[8].tag.pages
/say done dupe
/give @p minecraft:writable_book{pages:['x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[4].tag.pages','say delay s']} 1
/give @p minecraft:writable_book{pages:['x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[5].tag.pages','say delay d']} 1
/give @p minecraft:writable_book{pages:['x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[7].tag.pages','say delay s']} 1
/give @p minecraft:writable_book{pages:["/execute as @e[type=armor_stand,nbt={\"Tags\":[\"idx\"]}] if entity @s[nbt={\"ArmorItems\":[{},{},{},{id:\"minecraft:black_concrete_powder\",Count:1b}]}] at @s run setblock ~ ~-1 ~ black_concrete_powder replace","/execute as @e[type=armor_stand,nbt={\"Tags\":[\"idx\"]}] if entity @s[nbt={\"ArmorItems\":[{},{},{},{id:\"minecraft:white_concrete_powder\",Count:1b}]}] at @s run setblock ~ ~-1 ~ white_concrete_powder replace","/execute if data block ~-4 ~ ~ Items[1].tag.pages[0] run data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[3].tag.pages","/say done with floor"]} 1
/execute as @e[type=armor_stand,nbt={"Tags":["idx"]}] if entity @s[nbt={"ArmorItems":[{},{},{},{id:"minecraft:black_concrete_powder",Count:1b}]}] at @s run setblock ~ ~-1 ~ black_concrete_powder replace
/execute as @e[type=armor_stand,nbt={"Tags":["idx"]}] if entity @s[nbt={"ArmorItems":[{},{},{},{id:"minecraft:white_concrete_powder",Count:1b}]}] at @s run setblock ~ ~-1 ~ white_concrete_powder replace
/execute if data block ~-4 ~ ~ Items[1].tag.pages[0] run data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[3].tag.pages
/say done with floor
/give @p minecraft:writable_book{pages:["/execute at @e[type=armor_stand,nbt={\"Tags\":[\"idx\"]}] run clone ~ ~-1 ~ ~ ~-1 ~ ~ ~32 ~","/data remove block ~-4 ~ ~ Items[1].tag.pages[0]","/execute if data block ~-4 ~ ~ Items[1].tag.pages[0] run data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[3].tag.pages","/say done insert"]} 1
/execute at @e[type=armor_stand,nbt={"Tags":["idx"]}] run clone ~ ~-1 ~ ~ ~-1 ~ ~ ~32 ~
/data remove block ~-4 ~ ~ Items[1].tag.pages[0]
/execute if data block ~-4 ~ ~ Items[1].tag.pages[0] run data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[3].tag.pages
/say done insert
/give @p minecraft:writable_book{pages:["/say Welcome to Minestax","/scoreboard objectives add udctf dummy","/scoreboard players set 1 udctf 1","/scoreboard players set 0 udctf 0","/execute at @e[type=minecraft:armor_stand,nbt={\"Tags\":[\"idx\"]}] run fill ~ ~ ~ ~ ~64 ~200 air replace","/kill @e[type=minecraft:armor_stand,nbt={\"Tags\":[\"idx\"]}]","/summon minecraft:armor_stand ~10 ~ ~ {CustomNameVisible:1b,CustomName:\"\\\"idx\\\"\",Tags:[\"idx\"],HandItems:[{id:white_concrete_powder,Count:1b},{id:black_concrete_powder,Count:1b}]}","/execute at @e[type=minecraft:armor_stand,nbt={\"Tags\":[\"idx\"]}] run setblock ~ ~-1 ~ minecraft:white_concrete_powder replace"]} 1
/say Welcome to Minestax
/scoreboard objectives add udctf dummy
/scoreboard players set 1 udctf 1
/scoreboard players set 0 udctf 0
/execute at @e[type=minecraft:armor_stand,nbt={"Tags":["idx"]}] run fill ~ ~ ~ ~ ~64 ~200 air replace
/kill @e[type=minecraft:armor_stand,nbt={"Tags":["idx"]}]
/summon minecraft:armor_stand ~10 ~ ~ {CustomNameVisible:1b,CustomName:"\"idx\"",Tags:["idx"],HandItems:[{id:white_concrete_powder,Count:1b},{id:black_concrete_powder,Count:1b}]}
/execute at @e[type=minecraft:armor_stand,nbt={"Tags":["idx"]}] run setblock ~ ~-1 ~ minecraft:white_concrete_powder replace
/give @p minecraft:writable_book{pages:["/execute as @e[type=minecraft:armor_stand,nbt={\"Tags\":[\"idx\"]}] at @s run tp @s ~ ~ ~-1","/data remove block ~-4 ~ ~ Items[1].tag.pages[0]","/execute if data block ~-4 ~ ~ Items[1].tag.pages[0] run data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[10].tag.pages","/say Shift LEFT"]} 1
/execute as @e[type=minecraft:armor_stand,nbt={"Tags":["idx"]}] at @s run tp @s ~ ~ ~-1
/data remove block ~-4 ~ ~ Items[1].tag.pages[0]
/execute if data block ~-4 ~ ~ Items[1].tag.pages[0] run data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[10].tag.pages
/say Shift LEFT
/give @p minecraft:writable_book{pages:["/data modify block ~-4 ~ ~ Items[2].tag.pages set value ['c']","/execute store success score @p udctf run data modify block ~-4 ~ ~ Items[2].tag.pages[0] set from block ~-4 ~ ~ Items[1].tag.pages[0]","/execute if score @p udctf = 0 udctf run data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[12].tag.pages","/data modify block ~-4 ~ ~ Items[2].tag.pages[0] set value 'i'","/execute store success score @p udctf run data modify block ~-4 ~ ~ Items[2].tag.pages[0] set from block ~-4 ~ ~ Items[1].tag.pages[0]","/execute if score @p udctf = 0 udctf run data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[6].tag.pages","/data modify block ~-4 ~ ~ Items[2].tag.pages[0] set value 'd'","/execute store success score @p udctf run data modify block ~-4 ~ ~ Items[2].tag.pages[0] set from block ~-4 ~ ~ Items[1].tag.pages[0]","/execute if score @p udctf = 0 udctf run data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[11].tag.pages","/data modify block ~-4 ~ ~ Items[2].tag.pages[0] set value 's'","/execute store success score @p udctf run data modify block ~-4 ~ ~ Items[2].tag.pages[0] set from block ~-4 ~ ~ Items[1].tag.pages[0]","/execute if score @p udctf = 0 udctf run data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[13].tag.pages","/data modify block ~-4 ~ ~ Items[2].tag.pages[0] set value 'l'","/execute store success score @p udctf run data modify block ~-4 ~ ~ Items[2].tag.pages[0] set from block ~-4 ~ ~ Items[1].tag.pages[0]","/execute if score @p udctf = 0 udctf run data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[8].tag.pages","/data modify block ~-4 ~ ~ Items[2].tag.pages[0] set value 'r'","/execute store success score @p udctf run data modify block ~-4 ~ ~ Items[2].tag.pages[0] set from block ~-4 ~ ~ Items[1].tag.pages[0]","/execute if score @p udctf = 0 udctf run data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[9].tag.pages","/say You should never see this"]} 1
/data modify block ~-4 ~ ~ Items[2].tag.pages set value ['c']
/execute store success score @p udctf run data modify block ~-4 ~ ~ Items[2].tag.pages[0] set from block ~-4 ~ ~ Items[1].tag.pages[0]
/execute if score @p udctf = 0 udctf run data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[12].tag.pages
/data modify block ~-4 ~ ~ Items[2].tag.pages[0] set value 'i'
/execute store success score @p udctf run data modify block ~-4 ~ ~ Items[2].tag.pages[0] set from block ~-4 ~ ~ Items[1].tag.pages[0]
/execute if score @p udctf = 0 udctf run data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[6].tag.pages
/data modify block ~-4 ~ ~ Items[2].tag.pages[0] set value 'd'
/execute store success score @p udctf run data modify block ~-4 ~ ~ Items[2].tag.pages[0] set from block ~-4 ~ ~ Items[1].tag.pages[0]
/execute if score @p udctf = 0 udctf run data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[11].tag.pages
/data modify block ~-4 ~ ~ Items[2].tag.pages[0] set value 's'
/execute store success score @p udctf run data modify block ~-4 ~ ~ Items[2].tag.pages[0] set from block ~-4 ~ ~ Items[1].tag.pages[0]
/execute if score @p udctf = 0 udctf run data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[13].tag.pages
/data modify block ~-4 ~ ~ Items[2].tag.pages[0] set value 'l'
/execute store success score @p udctf run data modify block ~-4 ~ ~ Items[2].tag.pages[0] set from block ~-4 ~ ~ Items[1].tag.pages[0]
/execute if score @p udctf = 0 udctf run data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[8].tag.pages
/data modify block ~-4 ~ ~ Items[2].tag.pages[0] set value 'r'
/execute store success score @p udctf run data modify block ~-4 ~ ~ Items[2].tag.pages[0] set from block ~-4 ~ ~ Items[1].tag.pages[0]
/execute if score @p udctf = 0 udctf run data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[9].tag.pages
/say You should never see this

mc86 Architecture

mc86 is a CPU architecture designed to run in any vanilla minecraft world. Programs in mc86 are books with one minecraft command per page.
The processor runs 20 commands per second and destroys the pages of books while processing (so make back-ups as you work). The instruction set is any valid minecraft command which has a rich community of resources (string and integer operations are tricky but you do get a wide array of block operations which are interesting).

The .mcd file format is a single minecraft command that will give the active player a code-filled book. Typically one copies an mcd command into a command block and activates it.

To create an mc86 processor in your world simply run the CREATECPU.mcd command receive a clickable book and stand still while you click each line. (Visual demo in this video: https://www.youtube.com/watch?v=mqOSgJ0NM_Q )

The mc86 runs the instructions in the first slot of its RAM (the top left inventory spot of the green shulker chest).

As a low-level chip there are many ways to run programs, design operating systems, etc.

The .pages files just have one instruction per line for sanity checking the .mcd files.

MineStax in mc86 (as a CTF problem)

For this problem I've made a new, esoteric interpreted language. Since MineStax is not written in mc86 I decided to place the MineStax instructions in a book in slot 1.

There is an init.mcd program which should run before you execute any instructions and a loop.mcd program which parses the instructions to find which of the 6 instructions is next.

For each of the 6 instructions we've implemented an .mcd book which enacts that instruction:

  • *_op.mcd is the name of the book for each of the 6 operations
  • an armor stand named idx is used for the active stack
  • idx holds white and black concrete and uses the helmet slot to swap the two
  • the active color should be a block underneath idx any time the color changes or idx moves
  • a floor.mcd utility program will update the block beneath idx
  • there are 3 delay utilities which just no-op the CPU for a little while before calling the corresponding program (this gives concrete time to fall)
  • there should be an empty book in slot 3 (2 when zero-indexed) which is used purely for string comparisons
  • NEVER RUN the main loop without the first 3 slots in RAM occupied.
  • At the end of each program the program will jump to the next program by copying one of the books in RAM into the active slot.

To solve this challenge simply put the books in the right places and carefully run the CPU in the right order.

Also I invite you to make some MineStax art and perhaps mimick the structure of MineStax to make other interpreted languages for the mc86.

/give @p minecraft:writable_book{pages:["/execute as @e[type=minecraft:armor_stand,nbt={\"Tags\":[\"idx\"]}] at @s run tp @s ~ ~ ~1","/data remove block ~-4 ~ ~ Items[1].tag.pages[0]","/execute if data block ~-4 ~ ~ Items[1].tag.pages[0] run data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[10].tag.pages","/say ALL DONE!"]} 1
/execute as @e[type=minecraft:armor_stand,nbt={"Tags":["idx"]}] at @s run tp @s ~ ~ ~1
/data remove block ~-4 ~ ~ Items[1].tag.pages[0]
/execute if data block ~-4 ~ ~ Items[1].tag.pages[0] run data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[10].tag.pages
/say ALL DONE!
/give @p minecraft:writable_book{pages:["/execute at @e[type=minecraft:armor_stand,nbt={\"Tags\":[\"idx\"]}] run clone ~ ~ ~ ~ ~32 ~ ~ ~32 ~1 replace","/execute at @e[type=minecraft:armor_stand,nbt={\"Tags\":[\"idx\"]}] run fill ~ ~ ~ ~ ~32 ~ air replace","/execute if data block ~-4 ~ ~ Items[1].tag.pages[0] run data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[9].tag.pages","/say STACKED"]} 1
/execute at @e[type=minecraft:armor_stand,nbt={"Tags":["idx"]}] run clone ~ ~ ~ ~ ~32 ~ ~ ~32 ~1 replace
/execute at @e[type=minecraft:armor_stand,nbt={"Tags":["idx"]}] run fill ~ ~ ~ ~ ~32 ~ air replace
/execute if data block ~-4 ~ ~ Items[1].tag.pages[0] run data modify block ~-4 ~ ~ Items[0].tag.pages set from block ~-4 ~ ~ Items[9].tag.pages
/say STACKED
/give @p minecraft:writable_book{pages:['l','i','i','d','s','d','s','d','s','s','l','l','i','i','d','s','i','i','i','s','c','l','i','s','c','l','i','i','d','s','d','s','s','l','l','i','i','i','s','c','l','i','i','d','s','d','s','i','i','s','c','l','i','i','i','s','l','l','c','i','i','d','s','i','i','s','c','l','i','i','i','s','c','l','i','i','d','s','i','i','s','c','l','i','s','l','l','c','i','s','c','l','i','i','d','s','d','s','i','i','i','i','i','s','c','l','i','s','c','l','i','s','l','l','i','i','d','s','d','s','d','s','s','l','r','d','l','l','i','i','i','s','c','l','i','i','d','s','d','s','i','i','i','s','c','l','i','i','s','l','l','i','i','i','s','c','l','i','s','c','l','i','i','d','s','i','i','s','c','l','i','s','c','l','i','i','d','s','i','s','l','r','d','l','r','d','l','l','i','i','i','s','c','l','i','i','d','s','d','s','s','c','l','i','i','d','s','i','s','l','l','i','i','d','s','d','s','d','s','s','l','r','d','l','r','d','l','l','i','i','i','s','c','l','i','i','d','s','d','s','i','i','i','s','c','l','i','i','s','l','l','i','i','d','s','d','s','d','s','s','l','l','i','i','d','s','d','s','i','i','s','c','l','i','s','c','l','i','i','d','s','i','s','l','r','d','l','l','i','i','i','s','c','l','i','i','d','s','i','i','i','s','c','l','i','i','d','s','i','i','s','l','l','i','i','i','s','c','l','i','i','d','s','d','s','s','c','l','i','i','d','s','i','s','l','l','i','i','d','s','d','s','d','s','s','l','l','i','i','d','s','i','s','c','l','i','i','d','s','i','i','i','s','c','l','i','i','d','s','s','l','l','i','i','d','s','s','c','l','i','i','d','s','d','s','i','i','s','c','l','i','i','s','l','l','i','i','i','s','c','l','i','s','c','l','i','i','d','s','d','s','i','s','c','l','i','s','c','l','i','i','s','l','r','d','l','r','d','l','l','i','i','i','s','c','l','i','i','d','s','d','s','i','i','i','s','c','l','i','i','s','l','l','i','i','d','s','i','s','c','l','i','i','d','s','i','i','i','s','c','l','i','i','d','s','s','l','l','i','i','d','s','d','s','d','s','s','l','l','i','i','d','s','d','s','i','s','c','l','i','i','s','c','l','i','i','d','s','i','s','l','l','i','i','d','s','i','i','s','c','l','i','i','i','s','c','l','i','i','d','s','i','i','i','s','l','l','i','i','i','s','c','l','i','i','i','s','c','l','i','i','d','s','d','s','i','i','s','l','l','i','i','d','s','i','s','c','l','i','i','s','c','l','i','i','d','s','d','s','i','s','l','l','i','i','d','s','d','s','s','c','l','i','i','i','s','c','l','i','i','d','s','i','s','l','l','i','i','d','s','i','i','i','s','c','l','i','i','i','s','c','l','i','i','d','s','i','i','s','l','l','i','i','d','s','s','c','l','i','i','i','s','c','l','i','i','d','s','d','s','i','s','l','l','i','i','i','s','c','l','i','i','i','s','c','l','i','i','d','s','d','s','i','i','s','l','l','i','i','d','s','i','i','s','c','l','i','i','i','s','c','l','i','i','d','s','i','i','i','s','l','l','i','i','d','s','d','s','i','s','c','l','i','i','s','c','l','i','i','d','s','i','s','l','l','c','i','s','c','l','i','i','d','s','d','s','i','i','i','i','i','i','i','s','l','r','d','l','r','d','l','r','d','l','r','d','l','r','d','l','r','d','l','r','d','l','r','d','l','l','i','i','d','s','d','s','i','i','s','c','l','i','s','c','l','i','i','d','s','i','s','l','l','i','i','d','s','i','i','i','s','c','l','i','i','i','s','c','l','i','i','d','s','i','i','s','l','l','i','i','d','s','s','c','l','i','i','i','s','c','l','i','i','d','s','d','s','i','s','l','l','i','i','d','s','s','c','l','i','i','s','c','l','i','i','d','s','d','s','i','i','s','l','l','i','i','d','s','i','i','i','s','c','l','i','i','i','s','c','l','i','i','d','s','i','i','s','l','l','i','i','d','s','d','s','s','c','l','i','i','i','s','c','l','i','i','d','s','i','s','l','l','i','i','d','s','i','s','c','l','i','i','i','s','c','l','i','i','d','s','d','s','s','l','l','i','i','i','s','c','l','i','i','i','s','c','l','i','i','d','s','d','s','i','i','s','l','l','i','i','d','s','i','s','c','l','i','i','i','s','c','l','i','i','d','s','d','s','s','l','l','i','i','d','s','d','s','s','c','l','i','i','i','s','c','l','i','i','d','s','i','s','l','l','i','i','d','s','d','s','d','s','s','l','r','d','l','l','i','i','d','s','s','c','l','i','i','d','s','s','c','l','i','s','c','l','i','i','d','s','i','s','c','l','i','i','s','l','l','i','i','i','s','c','l','i','s','c','l','i','i','d','s','s','c','l','i','s','c','l','i','i','d','s','s','c','l','i','s','c','l','i','i','s','l','r','d','l','l','i','i','i','s','c','l','i','s','c','l','i','i','d','s','d','s','i','s','c','l','i','s','c','l','i','i','s','l','l','i','i','i','s','c','l','i','i','i','s','c','l','i','i','d','s','i','i','s','c','l','i','i','s','c','l','i','i','s','l','l','i','i','d','s','i','s','c','l','i','s','c','l','i','i','d','s','d','s','i','i','s','l','l','i','i','d','s','d','s','d','s','s','l','r','d','l','l','i','i','i','s','c','l','i','i','d','s','d','s','s','c','l','i','i','d','s','i','s','l','l','i','i','d','s','d','s','i','i','s','c','l','i','s','c','l','i','i','d','s','i','s','l','r','d','l','r','d','l','l','i','i','i','s','c','l','i','i','d','s','d','s','s','c','l','i','i','d','s','i','s','l','l','i','i','d','s','d','s','d','s','s','l','l','c','i','s','c','l','i','i','d','s','d','s','i','i','i','i','i','i','i','s','l','r','d','l','r','d','l','r','d','l','r','d','l','r','d','l','r','d','l','r','d','l','r','d','l','l','i','i','d','s','d','s','d','s','s','l','l','i','i','i','s','c','l','i','i','s','c','l','i','i','s','c','l','i','i','d','s','s','c','l','i','i','d','s','i','s','l','l','i','i','i','s','c','l','i','s','c','l','i','i','i','s','c','l','i','s','c','l','i','i','s','c','l','i','s','c','l','i','i','d','s','i','s','l','r','d','l','r','d','l','l','i','i','d','s','s','c','l','i','i','d','s','i','i','s','c','l','i','i','d','s','i','i','s','l','l','i','i','d','s','d','s','d','s','s','l','r','d','l','l','i','i','i','s','c','l','i','i','d','s','d','s','i','i','i','s','c','l','i','i','s','l','l','i','i','d','s','d','s','d','s','s','l','r','d','l','r','d','l','l','i','i','d','s','s','c','l','i','i','d','s','d','s','i','i','s','c','l','i','i','s','l','l','i','i','i','s','c','l','i','s','c','l','i','i','d','s','d','s','i','s','c','l','i','s','c','l','i','i','s','l','r','d','l','r','d','l','l','i','i','i','s','c','l','i','i','s','c','l','i','i','d','s','i','i','i','s','c','l','i','i','s','c','l','i','i','s','l','l','i','i','d','s','i','s','c','l','i','i','d','s','i','i','i','s','c','l','i','i','d','s','s','l','l','i','i','d','s','d','s','d','s','s','l','r','d','l','l','i','i','i','s','c','l','i','i','d','s','d','s','s','c','l','i','i','d','s','i','s','l','l','i','i','d','s','d','s','i','i','s','c','l','i','s','c','l','i','i','d','s','i','s','l','r','d','l','r','d','l','l','i','i','i','s','c','l','i','i','d','s','d','s','i','i','i','s','c','l','i','i','s','l','l','i','i','d','s','d','s','d','s','s','l','l','i','i','d','s','d','s','i','i','s','c','l','i','s','c','l','i','i','d','s','i','s','l','l','i','i','d','s','i','i','i','s','c','l','i','i','i','s','c','l','i','i','d','s','i','i','s','l','l','i','i','d','s','s','c','l','i','i','i','s','c','l','i','i','d','s','d','s','i','s','l','l','i','i','i','s','c','l','i','i','i','s','c','l','i','i','d','s','d','s','i','i','s','l','l','i','i','d','s','i','i','i','s','c','l','i','i','s','c','l','i','i','d','s','i','i','i','s','l','l','i','i','d','s','d','s','s','c','l','i','i','i','s','c','l','i','i','d','s','i','s','l','l','i','i','d','s','i','s','c','l','i','i','i','s','c','l','i','i','d','s','d','s','s','l','l','i','i','i','s','c','l','i','i','i','s','c','l','i','i','d','s','d','s','i','i','s','l','l','i','i','d','s','i','s','c','l','i','i','i','s','c','l','i','i','d','s','d','s','s','l','l','i','i','d','s','d','s','s','c','l','i','i','i','s','c','l','i','i','d','s','i','s','l','l','i','i','d','s','d','s','d','s','s','l','l','c','i','s','c','l','i','i','d','s','d','s','i','i','i','i','i','i','i','s','l','r','d','l','r','d','l','r','d','l','r','d','l','r','d','l','r','d','l','r','d','l','l','i','i','d','s','d','s','d','s','s','l','l','i','i','d','s','i','s','c','l','i','s','c','l','i','i','d','s','d','s','i','i','s','l','l','i','i','i','s','c','l','i','i','d','s','d','s','i','i','i','s','c','l','i','i','s','l','l','i','i','i','s','c','l','i','i','d','s','d','s','i','i','s','c','l','i','i','i','s','l','l','i','i','d','s','i','s','c','l','i','s','c','l','i','i','i','s','c','l','i','i','i','s','c','l','i','i','d','s','s','l','l','i','i','d','s','i','s','c','l','i','s','c','l','i','i','s','c','l','i','i','s','c','l','i','i','d','s','i','i','s','l','l','i','i','d','s','i','s','c','l','i','i','i','s','c','l','i','i','d','s','d','s','s','l','l','i','i','d','s','i','s','c','l','i','s','c','l','i','i','d','s','d','s','i','i','s','l','l','i','i','d','s','d','s','d','s','s','l','l','c','i','s','c','l','i','i','d','s','d','s','i','i','i','i','i','i','i','s','l','l','c','i','s','c','l','i','i','d','s','d','s','i','i','i','i','i','s','c','l','i','s','c','l','i','s','l','l','i','s','c','l','i','i','d','s','i','i','s','c','l','i','s','c','l','i','i','d','s','i','i','s','c','l','i','i','s','l','l','i','i','d','s','i','i','i','s','c','l','i','i','s','c','l','i','i','d','s','i','i','i','s','l','l','i','i','d','s','i','i','i','s','c','l','i','s','c','l','i','i','d','s','d','s','s','l','l','i','i','d','s','d','s','d','s','s','l','l','i','i','d','s','d','s','i','i','i','i','i','s','c','l','i','s','c','l','i','i','s','l','l','i','i','d','s','d','s','s','c','l','i','s','c','l','i','i','d','s','s','c','l','i','s','c','l','i','i','s','l','r','d','l','r','d','l','r','d','l','l','i','i','i','s','c','l','i','i','d','s','d','s','i','i','i','s','c','l','i','i','s','l','l','i','i','d','s','d','s','d','s','s','l','r','d','l','l','i','i','d','s','d','s','i','i','i','i','i','s','c','l','i','s','c','l','i','i','s','l','r','d','l','l','i','i','i','s','c','l','i','i','d','s','d','s','i','i','i','s','c','l','i','i','s','l','l','i','i','d','s','d','s','i','i','i','i','i','s','c','l','i','s','c','l','i','i','s','l','r','d','l','r','d','l','l','i','i','d','s','d','s','d','s','s','l','l','i','i','d','s','i','s','c','l','i','s','c','l','i','i','d','s','i','s','c','l','i','s','c','l','i','i','d','s','s','l','l','i','i','i','s','c','l','i','i','s','c','l','i','i','d','s','i','i','i','s','c','l','i','i','s','c','l','i','i','s','l','l','i','i','i','s','c','l','i','s','c','l','i','i','d','s','d','s','i','s','c','l','i','s','c','l','i','i','s','l','r','d','l','r','d','l','l','i','i','i','s','c','l','i','i','d','s','d','s','s','c','l','i','s','c','l','i','i','s','c','l','i','i','s','l','l','i','i','d','s','i','s','c','l','i','i','d','s','i','i','i','s','c','l','i','i','d','s','s','l','l','i','i','d','s','d','s','d','s','s','l','r','d','l','l','i','i','d','s','s','c','l','i','i','d','s','d','s','i','s','c','l','i','i','i','s','l','l','i','i','i','s','c','l','i','s','c','l','i','i','d','s','d','s','i','s','c','l','i','s','c','l','i','i','s','l','r','d','l','r','d','l','r','d','l','l','i','i','i','s','c','l','i','i','d','s','d','s','i','i','i','s','c','l','i','i','s','l','l','i','i','d','s','d','s','d','s','s','l','r','d','l','l','i','i','d','s','i','i','s','c','l','i','i','d','s','d','s','s','c','l','i','i','s','l','l','i','i','d','s','s','c','l','i','i','d','s','d','s','i','i','s','c','l','i','i','s','l','l','i','i','i','s','c','l','i','s','c','l','i','i','d','s','d','s','i','i','i','i','s','l','r','d','l','r','d','l','l','i','i','i','s','c','l','i','i','s','c','l','i','i','d','s','d','s','i','i','i','s','l','l','i','i','d','s','s','c','l','i','i','d','s','d','s','i','i','s','c','l','i','i','s']} 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment