{
	"patcher" : 	{
		"fileversion" : 1,
		"appversion" : 		{
			"major" : 8,
			"minor" : 1,
			"revision" : 2,
			"architecture" : "x64",
			"modernui" : 1
		}
,
		"classnamespace" : "box",
		"rect" : [ 60.0, 382.0, 672.0, 648.0 ],
		"bglocked" : 0,
		"openinpresentation" : 0,
		"default_fontsize" : 12.0,
		"default_fontface" : 0,
		"default_fontname" : "Arial",
		"gridonopen" : 1,
		"gridsize" : [ 15.0, 15.0 ],
		"gridsnaponopen" : 1,
		"objectsnaponopen" : 1,
		"statusbarvisible" : 2,
		"toolbarvisible" : 1,
		"lefttoolbarpinned" : 0,
		"toptoolbarpinned" : 0,
		"righttoolbarpinned" : 0,
		"bottomtoolbarpinned" : 0,
		"toolbars_unpinned_last_save" : 0,
		"tallnewobj" : 0,
		"boxanimatetime" : 200,
		"enablehscroll" : 1,
		"enablevscroll" : 1,
		"devicewidth" : 0.0,
		"description" : "",
		"digest" : "",
		"tags" : "",
		"style" : "",
		"subpatcher_template" : "",
		"boxes" : [ 			{
				"box" : 				{
					"id" : "obj-2",
					"maxclass" : "newobj",
					"numinlets" : 0,
					"numoutlets" : 0,
					"patcher" : 					{
						"fileversion" : 1,
						"appversion" : 						{
							"major" : 8,
							"minor" : 1,
							"revision" : 2,
							"architecture" : "x64",
							"modernui" : 1
						}
,
						"classnamespace" : "box",
						"rect" : [ 641.0, 228.0, 534.0, 447.0 ],
						"bglocked" : 0,
						"openinpresentation" : 0,
						"default_fontsize" : 12.0,
						"default_fontface" : 0,
						"default_fontname" : "Arial",
						"gridonopen" : 1,
						"gridsize" : [ 15.0, 15.0 ],
						"gridsnaponopen" : 1,
						"objectsnaponopen" : 1,
						"statusbarvisible" : 2,
						"toolbarvisible" : 1,
						"lefttoolbarpinned" : 0,
						"toptoolbarpinned" : 0,
						"righttoolbarpinned" : 0,
						"bottomtoolbarpinned" : 0,
						"toolbars_unpinned_last_save" : 0,
						"tallnewobj" : 0,
						"boxanimatetime" : 200,
						"enablehscroll" : 1,
						"enablevscroll" : 1,
						"devicewidth" : 0.0,
						"description" : "",
						"digest" : "",
						"tags" : "",
						"style" : "",
						"subpatcher_template" : "",
						"boxes" : [ 							{
								"box" : 								{
									"id" : "obj-24",
									"linecount" : 3,
									"maxclass" : "comment",
									"numinlets" : 1,
									"numoutlets" : 0,
									"patching_rect" : [ 288.0, 38.0, 157.0, 47.0 ],
									"presentation_linecount" : 3,
									"text" : "Just a mini lisp that only handles simple math expressions so far (+, *, -, /)"
								}

							}
, 							{
								"box" : 								{
									"id" : "obj-23",
									"maxclass" : "message",
									"numinlets" : 2,
									"numoutlets" : 1,
									"outlettype" : [ "" ],
									"patching_rect" : [ 27.0, 70.0, 44.0, 22.0 ],
									"text" : "(+ 1 2)"
								}

							}
, 							{
								"box" : 								{
									"id" : "obj-21",
									"maxclass" : "message",
									"numinlets" : 2,
									"numoutlets" : 1,
									"outlettype" : [ "" ],
									"patching_rect" : [ 27.0, 100.0, 98.0, 22.0 ],
									"text" : "(+ (* 2 3 ) (/ 9 3))"
								}

							}
, 							{
								"box" : 								{
									"id" : "obj-14",
									"maxclass" : "message",
									"numinlets" : 2,
									"numoutlets" : 1,
									"outlettype" : [ "" ],
									"patching_rect" : [ 27.0, 145.0, 35.0, 22.0 ],
									"text" : "reset"
								}

							}
, 							{
								"box" : 								{
									"id" : "obj-71",
									"maxclass" : "comment",
									"numinlets" : 1,
									"numoutlets" : 0,
									"patching_rect" : [ 72.0, 361.0, 95.0, 20.0 ],
									"text" : "result"
								}

							}
, 							{
								"box" : 								{
									"id" : "obj-65",
									"maxclass" : "comment",
									"numinlets" : 1,
									"numoutlets" : 0,
									"patching_rect" : [ 27.0, 38.0, 157.0, 20.0 ],
									"text" : "some example expressions:"
								}

							}
, 							{
								"box" : 								{
									"id" : "obj-16",
									"linecount" : 2,
									"maxclass" : "comment",
									"numinlets" : 1,
									"numoutlets" : 0,
									"patching_rect" : [ 115.0, 213.0, 357.0, 33.0 ],
									"text" : "convert to stream of bytes in audio signal (thanks Timo for the tip)\nclick~ can handle up to 256 characters per expression"
								}

							}
, 							{
								"box" : 								{
									"id" : "obj-15",
									"maxclass" : "comment",
									"numinlets" : 1,
									"numoutlets" : 0,
									"patching_rect" : [ 122.0, 146.0, 196.0, 20.0 ],
									"text" : "convert to sequence of ASCII bytes"
								}

							}
, 							{
								"box" : 								{
									"fontface" : 0,
									"fontname" : "Arial",
									"fontsize" : 18.0,
									"id" : "obj-13",
									"maxclass" : "number~",
									"mode" : 2,
									"numinlets" : 2,
									"numoutlets" : 2,
									"outlettype" : [ "signal", "float" ],
									"patching_rect" : [ 72.0, 330.0, 110.0, 29.0 ],
									"sig" : 0.0
								}

							}
, 							{
								"box" : 								{
									"id" : "obj-10",
									"maxclass" : "newobj",
									"numinlets" : 1,
									"numoutlets" : 4,
									"outlettype" : [ "signal", "signal", "signal", "signal" ],
									"patcher" : 									{
										"fileversion" : 1,
										"appversion" : 										{
											"major" : 8,
											"minor" : 1,
											"revision" : 2,
											"architecture" : "x64",
											"modernui" : 1
										}
,
										"classnamespace" : "dsp.gen",
										"rect" : [ 68.0, 78.0, 630.0, 848.0 ],
										"bglocked" : 0,
										"openinpresentation" : 0,
										"default_fontsize" : 12.0,
										"default_fontface" : 0,
										"default_fontname" : "Arial",
										"gridonopen" : 1,
										"gridsize" : [ 15.0, 15.0 ],
										"gridsnaponopen" : 1,
										"objectsnaponopen" : 1,
										"statusbarvisible" : 2,
										"toolbarvisible" : 1,
										"lefttoolbarpinned" : 0,
										"toptoolbarpinned" : 0,
										"righttoolbarpinned" : 0,
										"bottomtoolbarpinned" : 0,
										"toolbars_unpinned_last_save" : 0,
										"tallnewobj" : 0,
										"boxanimatetime" : 200,
										"enablehscroll" : 1,
										"enablevscroll" : 1,
										"devicewidth" : 0.0,
										"description" : "",
										"digest" : "",
										"tags" : "",
										"style" : "",
										"subpatcher_template" : "",
										"boxes" : [ 											{
												"box" : 												{
													"id" : "obj-2",
													"maxclass" : "newobj",
													"numinlets" : 1,
													"numoutlets" : 0,
													"patching_rect" : [ 450.0, 794.714388966560364, 35.0, 22.0 ],
													"text" : "out 4"
												}

											}
, 											{
												"box" : 												{
													"id" : "obj-9",
													"maxclass" : "newobj",
													"numinlets" : 1,
													"numoutlets" : 0,
													"patching_rect" : [ 306.095307052135468, 794.714388966560364, 35.0, 22.0 ],
													"text" : "out 3"
												}

											}
, 											{
												"box" : 												{
													"id" : "obj-6",
													"maxclass" : "newobj",
													"numinlets" : 1,
													"numoutlets" : 0,
													"patching_rect" : [ 139.428619027137756, 794.714388966560364, 35.0, 22.0 ],
													"text" : "out 2"
												}

											}
, 											{
												"box" : 												{
													"id" : "obj-1",
													"maxclass" : "newobj",
													"numinlets" : 0,
													"numoutlets" : 1,
													"outlettype" : [ "" ],
													"patching_rect" : [ 18.0, 15.0, 28.0, 22.0 ],
													"text" : "in 1"
												}

											}
, 											{
												"box" : 												{
													"code" : "// byte-interpreter state:\r\nHistory s;\r\n// stack space to store intermediate results:\r\nData stack(100);\r\n// current stack size:\r\nHistory z;\r\n// stack of indices to unevaluated expressions:\r\nData funs(100);\r\n// current function stack size:\r\nHistory f;\r\n// input byte to parse:\r\nb = in1;\r\n\r\nif (s == 0) {\r\n\tif (b == 40) {\r\n\t\t// go wait for an operator\r\n\t\ts = 1;\r\n\t} else \r\n\tif (b == 41) {\r\n\t\t// time to apply the function:\r\n\t\t// pop the function off the stack:\r\n\t\tfz = peek(funs, f);\r\n\t\top = peek(stack, fz);\r\n\t\tf -= 1;\r\n\t\t// use arguments from index fz+1 up to z:\r\n\t\tres = 0;\r\n\t\tif (op == 43) {\r\n\t\t\tfor (i=fz+1; i<=z; i+=1) {\r\n\t\t\t\tres += peek(stack, i);\r\n\t\t\t}\r\n\t\t} else if (op == 45) {\r\n\t\t\tfor (i=fz+1; i<=z; i+=1) {\r\n\t\t\t\tres -= peek(stack, i);\r\n\t\t\t}\r\n\t\t} else if (op == 42) {\r\n\t\t\tres = 1;\r\n\t\t\tfor (i=fz+1; i<=z; i+=1) {\r\n\t\t\t\tres *= peek(stack, i);\r\n\t\t\t}\r\n\t\t} else if (op == 47) {\r\n\t\t\tres = peek(stack, fz+1);\r\n\t\t\tfor (i=fz+2; i<=z; i+=1) {\r\n\t\t\t\tres /= peek(stack, i);\r\n\t\t\t}\r\n\t\t} \r\n\t\t// now replace function with its result\r\n\t\tpoke(stack, res, fz);\r\n\t\t// new stack index\r\n\t\tz = fz;\r\n\t} else\r\n\tif (b >= 48 && b <= 57) {\r\n\t\t// capture digit to stack:\r\n\t\tz += 1;\r\n\t\tpoke(stack, b-48, z);\r\n\t}\r\n} else \r\nif (s == 1) {\r\n\t// waiting for operator\r\n\tif (b != 0) {\r\n\t\t// push operator to stack\r\n\t\tz += 1;\r\n\t\tpoke(stack, b, z);\r\n\t\t// remember where this is\r\n\t\tf += 1;\r\n\t\tpoke(funs, z, f);\r\n\t\ts = 0; // done\r\n\t}\r\n}\r\n\r\n\r\n// output whatever is the last item on the stack:\r\nout1 = peek(stack, z, boundmode=\"clamp\");\r\n// debug info:\r\nout2, out3, out4 = z, f, s;",
													"fontface" : 0,
													"fontname" : "<Monospaced>",
													"fontsize" : 12.0,
													"id" : "obj-3",
													"maxclass" : "codebox",
													"numinlets" : 1,
													"numoutlets" : 4,
													"outlettype" : [ "", "", "", "" ],
													"patching_rect" : [ 18.0, 43.0, 579.0, 740.0 ]
												}

											}
, 											{
												"box" : 												{
													"id" : "obj-4",
													"maxclass" : "newobj",
													"numinlets" : 1,
													"numoutlets" : 0,
													"patching_rect" : [ 18.0, 791.0, 35.0, 22.0 ],
													"text" : "out 1"
												}

											}
 ],
										"lines" : [ 											{
												"patchline" : 												{
													"destination" : [ "obj-3", 0 ],
													"source" : [ "obj-1", 0 ]
												}

											}
, 											{
												"patchline" : 												{
													"destination" : [ "obj-2", 0 ],
													"source" : [ "obj-3", 3 ]
												}

											}
, 											{
												"patchline" : 												{
													"destination" : [ "obj-4", 0 ],
													"source" : [ "obj-3", 0 ]
												}

											}
, 											{
												"patchline" : 												{
													"destination" : [ "obj-6", 0 ],
													"source" : [ "obj-3", 1 ]
												}

											}
, 											{
												"patchline" : 												{
													"destination" : [ "obj-9", 0 ],
													"source" : [ "obj-3", 2 ]
												}

											}
 ]
									}
,
									"patching_rect" : [ 72.0, 269.0, 113.0, 22.0 ],
									"text" : "gen~ @title minilisp"
								}

							}
, 							{
								"box" : 								{
									"id" : "obj-8",
									"maxclass" : "newobj",
									"numinlets" : 1,
									"numoutlets" : 1,
									"outlettype" : [ "" ],
									"patching_rect" : [ 105.0, 177.0, 72.0, 22.0 ],
									"text" : "prepend set"
								}

							}
, 							{
								"box" : 								{
									"id" : "obj-7",
									"maxclass" : "newobj",
									"numinlets" : 1,
									"numoutlets" : 2,
									"outlettype" : [ "bang", "" ],
									"patching_rect" : [ 72.0, 177.0, 29.5, 22.0 ],
									"text" : "t b l"
								}

							}
, 							{
								"box" : 								{
									"id" : "obj-6",
									"maxclass" : "newobj",
									"numinlets" : 1,
									"numoutlets" : 1,
									"outlettype" : [ "signal" ],
									"patching_rect" : [ 72.0, 213.0, 39.0, 22.0 ],
									"text" : "click~"
								}

							}
, 							{
								"box" : 								{
									"id" : "obj-1",
									"maxclass" : "newobj",
									"numinlets" : 3,
									"numoutlets" : 1,
									"outlettype" : [ "list" ],
									"patching_rect" : [ 72.0, 146.0, 40.0, 22.0 ],
									"text" : "atoi"
								}

							}
 ],
						"lines" : [ 							{
								"patchline" : 								{
									"destination" : [ "obj-7", 0 ],
									"midpoints" : [ 81.5, 161.0, 81.5, 161.0 ],
									"source" : [ "obj-1", 0 ]
								}

							}
, 							{
								"patchline" : 								{
									"destination" : [ "obj-13", 0 ],
									"source" : [ "obj-10", 0 ]
								}

							}
, 							{
								"patchline" : 								{
									"destination" : [ "obj-10", 0 ],
									"midpoints" : [ 36.5, 259.75, 81.5, 259.75 ],
									"source" : [ "obj-14", 0 ]
								}

							}
, 							{
								"patchline" : 								{
									"destination" : [ "obj-1", 0 ],
									"midpoints" : [ 36.5, 133.5, 81.5, 133.5 ],
									"source" : [ "obj-21", 0 ]
								}

							}
, 							{
								"patchline" : 								{
									"destination" : [ "obj-1", 0 ],
									"midpoints" : [ 36.5, 133.0, 81.5, 133.0 ],
									"source" : [ "obj-23", 0 ]
								}

							}
, 							{
								"patchline" : 								{
									"destination" : [ "obj-10", 0 ],
									"source" : [ "obj-6", 0 ]
								}

							}
, 							{
								"patchline" : 								{
									"destination" : [ "obj-6", 0 ],
									"source" : [ "obj-7", 0 ]
								}

							}
, 							{
								"patchline" : 								{
									"destination" : [ "obj-8", 0 ],
									"source" : [ "obj-7", 1 ]
								}

							}
, 							{
								"patchline" : 								{
									"destination" : [ "obj-6", 0 ],
									"source" : [ "obj-8", 0 ]
								}

							}
 ]
					}
,
					"patching_rect" : [ 554.0, 598.0, 59.0, 22.0 ],
					"saved_object_attributes" : 					{
						"description" : "",
						"digest" : "",
						"globalpatchername" : "",
						"tags" : ""
					}
,
					"text" : "p minilisp"
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-71",
					"maxclass" : "comment",
					"numinlets" : 1,
					"numoutlets" : 0,
					"patching_rect" : [ 191.0, 608.0, 95.0, 20.0 ],
					"text" : "result"
				}

			}
, 			{
				"box" : 				{
					"fontface" : 0,
					"fontname" : "Arial",
					"fontsize" : 12.0,
					"id" : "obj-69",
					"maxclass" : "number~",
					"mode" : 2,
					"numinlets" : 2,
					"numoutlets" : 2,
					"outlettype" : [ "signal", "float" ],
					"patching_rect" : [ 243.5, 521.0, 46.0, 22.0 ],
					"sig" : 0.0
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-68",
					"maxclass" : "message",
					"numinlets" : 2,
					"numoutlets" : 1,
					"outlettype" : [ "" ],
					"patching_rect" : [ 227.4375, 257.0, 29.5, 22.0 ],
					"text" : "="
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-67",
					"maxclass" : "comment",
					"numinlets" : 1,
					"numoutlets" : 0,
					"patching_rect" : [ 42.0, 288.0, 142.0, 20.0 ],
					"text" : "incremental expressions:"
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-66",
					"maxclass" : "comment",
					"numinlets" : 1,
					"numoutlets" : 0,
					"patching_rect" : [ 117.0, 257.0, 67.0, 20.0 ],
					"text" : "clear state:"
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-65",
					"maxclass" : "comment",
					"numinlets" : 1,
					"numoutlets" : 0,
					"patching_rect" : [ 27.0, 229.0, 157.0, 20.0 ],
					"text" : "some example expressions:"
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-63",
					"maxclass" : "message",
					"numinlets" : 2,
					"numoutlets" : 1,
					"outlettype" : [ "" ],
					"patching_rect" : [ 191.0, 257.0, 29.5, 22.0 ],
					"text" : "C"
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-62",
					"maxclass" : "message",
					"numinlets" : 2,
					"numoutlets" : 1,
					"outlettype" : [ "" ],
					"patching_rect" : [ 336.75, 288.0, 39.0, 22.0 ],
					"text" : "0.825"
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-61",
					"maxclass" : "message",
					"numinlets" : 2,
					"numoutlets" : 1,
					"outlettype" : [ "" ],
					"patching_rect" : [ 300.3125, 288.0, 29.5, 22.0 ],
					"text" : "7"
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-60",
					"maxclass" : "message",
					"numinlets" : 2,
					"numoutlets" : 1,
					"outlettype" : [ "" ],
					"patching_rect" : [ 263.875, 288.0, 29.5, 22.0 ],
					"text" : "6"
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-59",
					"maxclass" : "message",
					"numinlets" : 2,
					"numoutlets" : 1,
					"outlettype" : [ "" ],
					"patching_rect" : [ 227.4375, 288.0, 29.5, 22.0 ],
					"text" : "3"
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-58",
					"maxclass" : "message",
					"numinlets" : 2,
					"numoutlets" : 1,
					"outlettype" : [ "" ],
					"patching_rect" : [ 191.0, 288.0, 29.5, 22.0 ],
					"text" : "12"
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-55",
					"maxclass" : "message",
					"numinlets" : 2,
					"numoutlets" : 1,
					"outlettype" : [ "" ],
					"patching_rect" : [ 492.0, 288.0, 29.5, 22.0 ],
					"text" : "/"
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-51",
					"maxclass" : "message",
					"numinlets" : 2,
					"numoutlets" : 1,
					"outlettype" : [ "" ],
					"patching_rect" : [ 455.5625, 288.0, 29.5, 22.0 ],
					"text" : "*"
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-47",
					"maxclass" : "message",
					"numinlets" : 2,
					"numoutlets" : 1,
					"outlettype" : [ "" ],
					"patching_rect" : [ 382.6875, 288.0, 29.5, 22.0 ],
					"text" : "+"
				}

			}
, 			{
				"box" : 				{
					"fontname" : "Arial Bold Italic",
					"fontsize" : 24.0,
					"id" : "obj-38",
					"maxclass" : "comment",
					"numinlets" : 1,
					"numoutlets" : 0,
					"patching_rect" : [ 27.0, 16.0, 370.0, 33.0 ],
					"text" : "Interpreter (calculator) in gen~"
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-36",
					"linecount" : 11,
					"maxclass" : "comment",
					"numinlets" : 1,
					"numoutlets" : 0,
					"patching_rect" : [ 27.0, 53.0, 535.952445149421692, 154.0 ],
					"text" : "This is a minimal example of a concantenative stack-oriented language, like Forth\nA lot of early digital calculators worked like this\nsee https://en.wikipedia.org/wiki/Stack-oriented_programming\nand https://en.wikipedia.org/wiki/Concatenative_programming_language\n\nA calculator interpreter seems absurd, why on earth would you do this in gen~? \nApart from a learning exercise, the basic principle of interpretation might be applied to more musical tasks, such as generative grammars and fractal/recursive expressions to schedule sonic grains, for example, or simply for doing things like parsing serial byte streams encoded in signals (which, for example, could include parsing MIDI byte streams)\nGraham Wakefield 2020"
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-35",
					"maxclass" : "comment",
					"numinlets" : 1,
					"numoutlets" : 0,
					"patching_rect" : [ 289.5, 521.0, 95.0, 20.0 ],
					"text" : "stack size"
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-32",
					"maxclass" : "message",
					"numinlets" : 2,
					"numoutlets" : 1,
					"outlettype" : [ "" ],
					"patching_rect" : [ 191.0, 229.0, 66.0, 22.0 ],
					"text" : "6 7 *"
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-28",
					"maxclass" : "message",
					"numinlets" : 2,
					"numoutlets" : 1,
					"outlettype" : [ "" ],
					"patching_rect" : [ 288.0, 229.0, 70.0, 22.0 ],
					"text" : "1.2 60 * 2 +"
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-20",
					"maxclass" : "message",
					"numinlets" : 2,
					"numoutlets" : 1,
					"outlettype" : [ "" ],
					"patching_rect" : [ 419.125, 288.0, 29.5, 22.0 ],
					"text" : "-"
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-16",
					"linecount" : 2,
					"maxclass" : "comment",
					"numinlets" : 1,
					"numoutlets" : 0,
					"patching_rect" : [ 234.0, 433.5, 357.0, 33.0 ],
					"text" : "convert to stream of bytes in audio signal (thanks Timo for the tip)\nclick~ can handle up to 256 characters per expression"
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-15",
					"maxclass" : "comment",
					"numinlets" : 1,
					"numoutlets" : 0,
					"patching_rect" : [ 241.0, 352.0, 196.0, 20.0 ],
					"text" : "convert to sequence of ASCII bytes"
				}

			}
, 			{
				"box" : 				{
					"fontface" : 0,
					"fontname" : "Arial",
					"fontsize" : 18.0,
					"id" : "obj-13",
					"maxclass" : "number~",
					"mode" : 2,
					"numinlets" : 2,
					"numoutlets" : 2,
					"outlettype" : [ "signal", "float" ],
					"patching_rect" : [ 191.0, 577.0, 110.0, 29.0 ],
					"sig" : 0.0
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-11",
					"maxclass" : "message",
					"numinlets" : 2,
					"numoutlets" : 1,
					"outlettype" : [ "" ],
					"patching_rect" : [ 309.0, 403.0, 282.0, 22.0 ],
					"text" : "67"
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-10",
					"maxclass" : "newobj",
					"numinlets" : 1,
					"numoutlets" : 3,
					"outlettype" : [ "signal", "signal", "signal" ],
					"patcher" : 					{
						"fileversion" : 1,
						"appversion" : 						{
							"major" : 8,
							"minor" : 1,
							"revision" : 2,
							"architecture" : "x64",
							"modernui" : 1
						}
,
						"classnamespace" : "dsp.gen",
						"rect" : [ 831.0, 78.0, 750.0, 922.0 ],
						"bglocked" : 0,
						"openinpresentation" : 0,
						"default_fontsize" : 12.0,
						"default_fontface" : 0,
						"default_fontname" : "Arial",
						"gridonopen" : 1,
						"gridsize" : [ 15.0, 15.0 ],
						"gridsnaponopen" : 1,
						"objectsnaponopen" : 1,
						"statusbarvisible" : 2,
						"toolbarvisible" : 1,
						"lefttoolbarpinned" : 0,
						"toptoolbarpinned" : 0,
						"righttoolbarpinned" : 0,
						"bottomtoolbarpinned" : 0,
						"toolbars_unpinned_last_save" : 0,
						"tallnewobj" : 0,
						"boxanimatetime" : 200,
						"enablehscroll" : 1,
						"enablevscroll" : 1,
						"devicewidth" : 0.0,
						"description" : "",
						"digest" : "",
						"tags" : "",
						"style" : "",
						"subpatcher_template" : "",
						"boxes" : [ 							{
								"box" : 								{
									"id" : "obj-9",
									"maxclass" : "newobj",
									"numinlets" : 1,
									"numoutlets" : 0,
									"patching_rect" : [ 538.095307052135468, 805.714388966560364, 35.0, 22.0 ],
									"text" : "out 3"
								}

							}
, 							{
								"box" : 								{
									"id" : "obj-6",
									"maxclass" : "newobj",
									"numinlets" : 1,
									"numoutlets" : 0,
									"patching_rect" : [ 371.428619027137756, 805.714388966560364, 35.0, 22.0 ],
									"text" : "out 2"
								}

							}
, 							{
								"box" : 								{
									"id" : "obj-1",
									"maxclass" : "newobj",
									"numinlets" : 0,
									"numoutlets" : 1,
									"outlettype" : [ "" ],
									"patching_rect" : [ 18.0, 15.0, 28.0, 22.0 ],
									"text" : "in 1"
								}

							}
, 							{
								"box" : 								{
									"code" : "// byte-interpreter state:\r\nHistory s;\r\n// stack space to store intermediate results:\r\nData stack(100);\r\n// current stack size:\r\nHistory z;\r\n// temporary register space while parsing\r\nHistory r1, r2; \r\n// input byte to parse:\r\nb = in1;\r\n// interret input according to current state:\r\nif (s==0) {\r\n\t// waiting on new expression\r\n\tif (b >= 48 && b <= 57) {\r\n\t\t// digit\r\n\t\tr1 = b-48;\r\n\t\ts = 1;\r\n\t} else \r\n\tif (b == 46) {\r\n\t\t// decimal point, switch to decimal parser:\r\n\t\tr1, r2 = 0, 1;\r\n\t\ts = 2;\r\n\t} else\r\n\tif (b == 43) {\r\n\t\t// add:\r\n\t\tif (z >= 2) {\r\n\t\t\t// pop two values off the stack & push new result\r\n\t\t\tx = peek(stack, z-2);\r\n\t\t\ty = peek(stack, z-1);\r\n\t\t\tpoke(stack, x + y, z-2);\r\n\t\t\tz -= 1; // update new stack size\r\n\t\t\ts = 0; // done\r\n\t\t} else {\r\n\t\t\ts = -1; // error\r\n\t\t}\r\n\t} else\r\n\tif (b == 45) {\r\n\t\t// add:\r\n\t\tif (z >= 2) {\r\n\t\t\t// pop two values off the stack & push new result\r\n\t\t\tx = peek(stack, z-2);\r\n\t\t\ty = peek(stack, z-1);\r\n\t\t\tpoke(stack, x - y, z-2);\r\n\t\t\tz -= 1; // update new stack size\r\n\t\t\ts = 0; // done\r\n\t\t} else {\r\n\t\t\ts = -1; // error\r\n\t\t}\r\n\t} else\r\n\tif (b == 42) {\r\n\t\t// add:\r\n\t\tif (z >= 2) {\r\n\t\t\t// pop two values off the stack & push new result\r\n\t\t\tx = peek(stack, z-2);\r\n\t\t\ty = peek(stack, z-1);\r\n\t\t\tpoke(stack, x * y, z-2);\r\n\t\t\tz -= 1; // update new stack size\r\n\t\t\ts = 0; // done\r\n\t\t} else {\r\n\t\t\ts = -1; // error\r\n\t\t}\r\n\t} else\r\n\tif (b == 47) {\r\n\t\t// add:\r\n\t\tif (z >= 2) {\r\n\t\t\t// pop two values off the stack & push new result\r\n\t\t\tx = peek(stack, z-2);\r\n\t\t\ty = peek(stack, z-1);\r\n\t\t\tpoke(stack, x / y, z-2);\r\n\t\t\tz -= 1; // update new stack size\r\n\t\t\ts = 0; // done\r\n\t\t} else {\r\n\t\t\ts = -1; // error\r\n\t\t}\r\n\t} else\r\n\tif (b == 67) { // C\r\n\t\t// C means clear state:\r\n\t\tpoke(stack, 0, 0);\r\n\t\ts, z = 0;\r\n\t} else \r\n\tif (b == 61) { // =\r\n\t\t// = means shift down to stack index 1:\r\n\t\tpoke(stack, peek(stack, z-1), 0);\r\n\t\ts, z = 0, min(z, 1);\r\n\t}\t\r\n} else \r\nif (s==1) {\r\n\t// waiting for more digits:\r\n\tif (b >= 48 && b <= 57) {\r\n\t\t// digit\r\n\t\tr1 = r1*10 + (b-48);\r\n\t\t// stay here, because we might have more digits yet\r\n\t} else if (b == 46) {\r\n\t\t// decimal point, switch to decimal parser:\r\n\t\tr2 = 1;\r\n\t\ts = 2;\r\n\t} else {\r\n\t\t// done with digit, store it in the stack:\r\n\t\tpoke(stack, r1, z);\r\n\t\tz += 1;\r\n\t\ts = 0; // done\r\n\t}\r\n} else \r\nif (s==2) {\r\n\t// waiting for more decimal digits:\r\n\tif (b >= 48 && b <= 57) {\r\n\t\t// digit\r\n\t\tr2 = r2 * 0.1; // decimal power\r\n\t\tr1 = r1 + (b-48) * r2;\r\n\t\t// stay here, because we might have more digits yet\r\n\t} else {\r\n\t\t// done with digit, store it in the stack:\r\n\t\tpoke(stack, r1, z);\r\n\t\tz += 1;\r\n\t\ts = 0; // done\r\n\t}\r\n} else \r\nif (s==-1) {\r\n\t// error state, output NaN and wait for zero input:\r\n\tif (b == 0) {\r\n\t\t// reset:\r\n\t\ts, z = 0;\r\n\t} else {\r\n\t\tpoke(stack, -999, 0);\r\n\t\tz = 1;\r\n\t}\r\n}\r\n// output whatever is the last item on the stack:\r\nout1 = peek(stack, z-1, boundmode=\"clamp\");\r\n// debug info:\r\nout2, out3 = z, s;",
									"fontface" : 0,
									"fontname" : "<Monospaced>",
									"fontsize" : 12.0,
									"id" : "obj-3",
									"maxclass" : "codebox",
									"numinlets" : 1,
									"numoutlets" : 3,
									"outlettype" : [ "", "", "" ],
									"patching_rect" : [ 18.0, 43.0, 579.0, 740.0 ]
								}

							}
, 							{
								"box" : 								{
									"id" : "obj-4",
									"maxclass" : "newobj",
									"numinlets" : 1,
									"numoutlets" : 0,
									"patching_rect" : [ 18.0, 791.0, 35.0, 22.0 ],
									"text" : "out 1"
								}

							}
 ],
						"lines" : [ 							{
								"patchline" : 								{
									"destination" : [ "obj-3", 0 ],
									"source" : [ "obj-1", 0 ]
								}

							}
, 							{
								"patchline" : 								{
									"destination" : [ "obj-4", 0 ],
									"source" : [ "obj-3", 0 ]
								}

							}
, 							{
								"patchline" : 								{
									"destination" : [ "obj-6", 0 ],
									"source" : [ "obj-3", 1 ]
								}

							}
, 							{
								"patchline" : 								{
									"destination" : [ "obj-9", 0 ],
									"source" : [ "obj-3", 2 ]
								}

							}
 ]
					}
,
					"patching_rect" : [ 191.0, 495.0, 124.0, 22.0 ],
					"text" : "gen~ @title calculator"
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-8",
					"maxclass" : "newobj",
					"numinlets" : 1,
					"numoutlets" : 1,
					"outlettype" : [ "" ],
					"patching_rect" : [ 224.0, 403.0, 72.0, 22.0 ],
					"text" : "prepend set"
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-7",
					"maxclass" : "newobj",
					"numinlets" : 1,
					"numoutlets" : 2,
					"outlettype" : [ "bang", "" ],
					"patching_rect" : [ 191.0, 403.0, 29.5, 22.0 ],
					"text" : "t b l"
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-6",
					"maxclass" : "newobj",
					"numinlets" : 1,
					"numoutlets" : 1,
					"outlettype" : [ "signal" ],
					"patching_rect" : [ 191.0, 439.0, 39.0, 22.0 ],
					"text" : "click~"
				}

			}
, 			{
				"box" : 				{
					"id" : "obj-1",
					"maxclass" : "newobj",
					"numinlets" : 3,
					"numoutlets" : 1,
					"outlettype" : [ "list" ],
					"patching_rect" : [ 191.0, 352.0, 40.0, 22.0 ],
					"text" : "atoi"
				}

			}
 ],
		"lines" : [ 			{
				"patchline" : 				{
					"destination" : [ "obj-11", 1 ],
					"midpoints" : [ 200.5, 387.0, 581.5, 387.0 ],
					"order" : 0,
					"source" : [ "obj-1", 0 ]
				}

			}
, 			{
				"patchline" : 				{
					"destination" : [ "obj-7", 0 ],
					"midpoints" : [ 200.5, 387.0, 200.5, 387.0 ],
					"order" : 1,
					"source" : [ "obj-1", 0 ]
				}

			}
, 			{
				"patchline" : 				{
					"destination" : [ "obj-13", 0 ],
					"source" : [ "obj-10", 0 ]
				}

			}
, 			{
				"patchline" : 				{
					"destination" : [ "obj-69", 0 ],
					"source" : [ "obj-10", 1 ]
				}

			}
, 			{
				"patchline" : 				{
					"destination" : [ "obj-1", 0 ],
					"midpoints" : [ 428.625, 330.5, 200.5, 330.5 ],
					"source" : [ "obj-20", 0 ]
				}

			}
, 			{
				"patchline" : 				{
					"destination" : [ "obj-1", 0 ],
					"midpoints" : [ 297.5, 330.0, 200.5, 330.0 ],
					"source" : [ "obj-28", 0 ]
				}

			}
, 			{
				"patchline" : 				{
					"destination" : [ "obj-1", 0 ],
					"midpoints" : [ 200.5, 301.0, 200.5, 301.0 ],
					"source" : [ "obj-32", 0 ]
				}

			}
, 			{
				"patchline" : 				{
					"destination" : [ "obj-1", 0 ],
					"midpoints" : [ 392.1875, 330.5, 200.5, 330.5 ],
					"source" : [ "obj-47", 0 ]
				}

			}
, 			{
				"patchline" : 				{
					"destination" : [ "obj-1", 0 ],
					"midpoints" : [ 465.0625, 330.5, 200.5, 330.5 ],
					"source" : [ "obj-51", 0 ]
				}

			}
, 			{
				"patchline" : 				{
					"destination" : [ "obj-1", 0 ],
					"midpoints" : [ 501.5, 330.5, 200.5, 330.5 ],
					"source" : [ "obj-55", 0 ]
				}

			}
, 			{
				"patchline" : 				{
					"destination" : [ "obj-1", 0 ],
					"midpoints" : [ 200.5, 330.5, 200.5, 330.5 ],
					"source" : [ "obj-58", 0 ]
				}

			}
, 			{
				"patchline" : 				{
					"destination" : [ "obj-1", 0 ],
					"midpoints" : [ 236.9375, 330.5, 200.5, 330.5 ],
					"source" : [ "obj-59", 0 ]
				}

			}
, 			{
				"patchline" : 				{
					"destination" : [ "obj-10", 0 ],
					"source" : [ "obj-6", 0 ]
				}

			}
, 			{
				"patchline" : 				{
					"destination" : [ "obj-1", 0 ],
					"midpoints" : [ 273.375, 330.5, 200.5, 330.5 ],
					"source" : [ "obj-60", 0 ]
				}

			}
, 			{
				"patchline" : 				{
					"destination" : [ "obj-1", 0 ],
					"midpoints" : [ 309.8125, 330.5, 200.5, 330.5 ],
					"source" : [ "obj-61", 0 ]
				}

			}
, 			{
				"patchline" : 				{
					"destination" : [ "obj-1", 0 ],
					"midpoints" : [ 346.25, 330.5, 200.5, 330.5 ],
					"source" : [ "obj-62", 0 ]
				}

			}
, 			{
				"patchline" : 				{
					"destination" : [ "obj-1", 0 ],
					"midpoints" : [ 200.5, 315.0, 200.5, 315.0 ],
					"source" : [ "obj-63", 0 ]
				}

			}
, 			{
				"patchline" : 				{
					"destination" : [ "obj-1", 0 ],
					"midpoints" : [ 236.9375, 329.0, 200.5, 329.0 ],
					"source" : [ "obj-68", 0 ]
				}

			}
, 			{
				"patchline" : 				{
					"destination" : [ "obj-6", 0 ],
					"source" : [ "obj-7", 0 ]
				}

			}
, 			{
				"patchline" : 				{
					"destination" : [ "obj-8", 0 ],
					"source" : [ "obj-7", 1 ]
				}

			}
, 			{
				"patchline" : 				{
					"destination" : [ "obj-6", 0 ],
					"source" : [ "obj-8", 0 ]
				}

			}
 ],
		"dependency_cache" : [  ],
		"autosave" : 0
	}

}
