~hp/moony.lv2

c1422eb36d08d67dd0473397d6ffb81ab641d8f9 — Hanspeter Portner 1 year, 11 days ago man
add manual
1 files changed, 4880 insertions(+), 0 deletions(-)

A index.md
A  => index.md +4880 -0
@@ 1,4880 @@
---
toc: false
---

<head>
	<title>Moony Manual</title>
	<meta name="author" content="Hanspeter Portner" />
	<meta charset="UTF-8" />
	<link rel="icon" type="image/png" href="moony_logo.png" />
	<style type="text/css">
html, body {
	font-family:sans-serif;
	font-size:14px;
	color:#dddddd;
  background-color:#343434;
	padding:0;
	margin:0;
}

.api-menu {
	position:fixed;
	top:0;
	height:100%;
	left:0;
	width:20%;
	overflow-x:auto;
	overflow-y:auto;
}

.api-body {
	margin-left:20%;
	width:80%;
}

.api-section {
	background-color: #2d2d2d;
	margin:1em;
	padding:1em;
}

a {
	color:#dddddd;
}

a:visited {
	color:#dddddd;
}

a:hover {
	color:#343434;
	background-color:#dddddd;
}

dl {
	border:1px solid #414141;
}

dt {
	font-family:monospace;
	padding-left:1em;
	padding-right:1em;
	padding-top:0.5em;
	padding-bottom:0.5em;
	font-weight:bold;
}

dt.func {
	border-bottom:1px solid #414141;
	color:#00aeef;
	font-weight:bold;
	background-color:#262626;
}

dt.attr {
	border-bottom:1px solid #414141;
	color:#ff6600;
	font-weight:bold;
	background-color:#262626;
}

dt.ret {
	border-top:1px dashed #414141;
	font-weight:bold;
}

dd {
	padding-left:1em;
	padding-right:1em;
	padding-top:0.5em;
	padding-bottom:0.5em;
	font-style:italic;
}

pre {
	background-color:#262626;
	padding:1em;
	border:1px solid #414141;
}
</style>
</head>

<body>

<div class="api-menu">
	<h1>Moony.lv2</h1>
	<h4>0.41.1
</h4>
	<h2>Reference manual</h2>

	<ul>
		<li><a href="#introduction">Introduction</a>
		</li>

		<li><a href="#variants">Plugin Variants</a>
			<ul>
				<li><a href="#variants-c1xc1">C1 x C1</a></li>
				<li><a href="#variants-c2xc2">C2 x C2</a></li>
				<li><a href="#variants-c4xc4">C4 x C4</a></li>
				<li><a href="#variants-a1xa1">A1 x A1</a></li>
				<li><a href="#variants-a2xa2">A2 x A2</a></li>
				<li><a href="#variants-a4xa4">A4 x A4</a></li>
				<li><a href="#variants-c1a1xc1a1">C1+A1 x C1+A1</a></li>
				<li><a href="#variants-c2a1xc2a1">C2+A1 x C2+A1</a></li>
				<li><a href="#variants-c4a1xc4a1">C4+A1 x C4+A1</a></li>
			</ul>
		</li>

		<li><a href="#lua-libraries">Lua libraries</a>
		</li>

		<li><a href="#log-and-debug">Log &amp; Debug</a>
		</li>

		<li><a href="#callbacks">Callbacks</a>
			<ul>
				<li><a href="#callbacks-run">run</a></li>
				<li><a href="#callbacks-once">once</a></li>
				<li><a href="#callbacks-stash">stash</a></li>
				<li><a href="#callbacks-apply">apply</a></li>
				<li><a href="#callbacks-save">save</a></li>
				<li><a href="#callbacks-restore">restore</a></li>
			</ul>
		</li>

		<li><a href="#urid">Map &amp; Unmap</a>
			<ul>
				<li><a href="#urid-map">Map</a></li>
				<li><a href="#urid-unmap">Unmap</a></li>
				<li><a href="#urid-mapper">Mapper</a></li>
				<li><a href="#urid-voicemap">Blank</a></li>
			</ul>
		</li>

		<li><a href="#forge">Forge</a>
			<ul>
				<li><a href="#forge-primitive">Primitive</a>
					<ul>
						<li><a href="#forge-bool">Bool</a></li>
						<li><a href="#forge-int">Int</a></li>
						<li><a href="#forge-long">Long</a></li>
						<li><a href="#forge-float">Float</a></li>
						<li><a href="#forge-double">Double</a></li>
						<li><a href="#forge-urid">URID</a></li>
						<li><a href="#forge-uri">URI</a></li>
						<li><a href="#forge-string">String</a></li>
						<li><a href="#forge-path">Path</a></li>
						<li><a href="#forge-literal">Literal</a></li>
						<li><a href="#forge-chunk">Chunk</a></li>
						<li><a href="#forge-midi">MIDI</a></li>
						<li><a href="#forge-raw">Raw</a></li>
						<li><a href="#forge-typed">Typed</a></li>
						<li><a href="#forge-atom">Atom</a></li>
					</ul>
				</li>
				<li><a href="#forge-container">Container</a>
					<ul>
						<li><a href="#forge-sequence">Sequence</a>
							<ul>
								<li><a href="#forge-frame-time">Frame Time</a></li>
								<li><a href="#forge-beat-time">Beat Time</a></li>
								<li><a href="#forge-time">Time</a></li>
							</ul>
						</li>
						<li><a href="#forge-object">Object</a>
							<ul>
								<li><a href="#forge-key">Key</a></li>
							</ul>
						</li>
						<li><a href="#forge-tuple">Tuple</a></li>
						<li><a href="#forge-vector">Vector</a></li>
						<li><a href="#forge-pop">Pop</a></li>
						<li><a href="#forge-autopop">Autopop</a></li>
					</ul>
				</li>
				<li><a href="#forge-osc">OSC</a>
					<ul>
						<li><a href="#forge-bundle">Bundle</a></li>
						<li><a href="#forge-message">Message</a>
							<ul>
								<li><a href="#forge-impulse">Impulse</a></li>
								<li><a href="#forge-char">Char</a></li>
								<li><a href="#forge-rgba">RGBA</a></li>
								<li><a href="#forge-timetag">Timetag</a></li>
							</ul>
						</li>
					</ul>
				</li>
				<li><a href="#forge-patch-patch">Patch</a>
					<ul>
						<li><a href="#forge-patch">Patch</a>
							<ul>
								<li><a href="#forge-add">Add</a></li>
								<li><a href="#forge-remove">Remove</a></li>
							</ul>
						</li>
						<li><a href="#forge-get">Get</a></li>
						<li><a href="#forge-set">Set</a></li>
						<li><a href="#forge-put">Put</a></li>
						<li><a href="#forge-ack">Ack</a></li>
						<li><a href="#forge-error">Error</a></li>
						<li><a href="#forge-delete">Delete</a></li>
						<li><a href="#forge-copy">Copy</a></li>
						<li><a href="#forge-move">Move</a></li>
						<li><a href="#forge-insert">Insert</a></li>
					</ul>
				</li>
				<li><a href="#forge-canvas">Canvas</a>
					<ul>
						<li><a href="#forge-graph">Graph</a>
							<ul>
								<li><a href="#forge-beginPath">BeginPath</a></li>
								<li><a href="#forge-closePath">ClosePath</a></li>
								<li><a href="#forge-arc">Arc</a></li>
								<li><a href="#forge-curveTo">CurveTo</a></li>
								<li><a href="#forge-lineTo">LineTo</a></li>
								<li><a href="#forge-moveTo">MoveTo</a></li>
								<li><a href="#forge-rectangle">Rectangle</a></li>
								<li><a href="#forge-polyLine">PolyLine</a></li>
								<li><a href="#forge-style">Style</a></li>
								<li><a href="#forge-lineWidth">LineWidth</a></li>
								<li><a href="#forge-lineDash">LineDash</a></li>
								<li><a href="#forge-lineCap">LineCap</a></li>
								<li><a href="#forge-lineJoin">LineJoin</a></li>
								<li><a href="#forge-miterLimit">MiterLimit</a></li>
								<li><a href="#forge-stroke">Stroke</a></li>
								<li><a href="#forge-fill">Fill</a></li>
								<li><a href="#forge-clip">Clip</a></li>
								<li><a href="#forge-save">Save</a></li>
								<li><a href="#forge-restore">Restore</a></li>
								<li><a href="#forge-translate">Translate</a></li>
								<li><a href="#forge-scale">Scale</a></li>
								<li><a href="#forge-rotate">Rotate</a></li>
								<li><a href="#forge-transform">Transform</a></li>
								<li><a href="#forge-reset">Reset</a></li>
								<li><a href="#forge-fontSize">FontSize</a></li>
								<li><a href="#forge-fillText">FillText</a></li>
							</ul>
						</li>
					</ul>
				</li>
			</ul>
		</li>

		<li><a href="#atom">Atom</a>
			<ul>
				<li><a href="#atom-primitive">Primitive</a>
					<ul>
						<li><a href="#atom-nil">Nil</a></li>
						<li><a href="#atom-bool">Bool</a></li>
						<li><a href="#atom-int">Int</a></li>
						<li><a href="#atom-long">Long</a></li>
						<li><a href="#atom-float">Float</a></li>
						<li><a href="#atom-double">Double</a></li>
						<li><a href="#atom-urid">URID</a></li>
						<li><a href="#atom-uri">URI</a></li>
						<li><a href="#atom-string">String</a></li>
						<li><a href="#atom-path">Path</a></li>
						<li><a href="#atom-literal">Literal</a></li>
						<li><a href="#atom-chunk">Chunk</a></li>
						<li><a href="#atom-midi">MIDI</a></li>
					</ul>
				</li>
				<li><a href="#atom-container">Container</a>
					<ul>
						<li><a href="#atom-sequence">Sequence</a></li>
						<li><a href="#atom-tuple">Tuple</a></li>
						<li><a href="#atom-object">Object</a></li>
						<li><a href="#atom-vector">Vector</a></li>
					</ul>
				</li>
			</ul>
		</li>

		<li><a href="#stash">Stash</a></li>

		<li><a href="#options">Options</a></li>

		<li><a href="#responder">Responder</a>
			<ul>
				<li><a href="#responder-midi">MIDIResponder</a></li>
				<li><a href="#responder-osc">OSCResponder</a></li>
				<li><a href="#responder-time">TimeResponder</a></li>
				<li><a href="#responder-state">StateResponder</a>
					<ul>
						<li><a href="#responder-parameter">Parameter</a></li>
					</ul>
				</li>
			</ul>
		</li>

		<li><a href="#util">Utilities</a>
			<ul>
				<li><a href="#util-midi2cps">midi2cps</a></li>
				<li><a href="#util-cps2midi">cps2midi</a></li>
				<li><a href="#util-note">Note</a></li>
				<li><a href="#util-aes128">AES-128</a>
					<ul>
						<li><a href="#util-aes128-encode">Encode</a></li>
						<li><a href="#util-aes128-decode">Decode</a></li>
					</ul>
				</li>
				<li><a href="#util-base64">Base64</a>
					<ul>
						<li><a href="#util-base64-encode">Encode</a></li>
						<li><a href="#util-base64-decode">Decode</a></li>
					</ul>
				</li>
				<li><a href="#util-ascii85">Ascii85</a>
					<ul>
						<li><a href="#util-ascii85-encode">Encode</a></li>
						<li><a href="#util-ascii85-decode">Decode</a></li>
					</ul>
				</li>
			</ul>
		</li>

		<li><a href="#constants">Constants</a></li>

		<li><a href="#license">License</a>
		</li>
	</ul>
</div>

<div class="api-body">

	<div>
		<img src="moony_logo.png" alt="Moony logo" style="display:block; margin:0 auto;" />
	</div>

	<div class="api-section">
	<h1 id="introduction">Introduction</h1>
		<p>The design goal of the plugin bundle was to create a tool to easily add realtime programmable logic glue in LV2 plugin graphs.</p>

		<p>To have plugins which do a specific task efficiently is great, especially for audio plugins. LV2 stands apart from other audio plugin specifications with its extentable event system based on Atoms. As events can be much more varied in nature and represent pretty much anything (NOT ONLY MIDI), it would be useful to have a tool to create arbitrary event filters for a given setup on-the-fly.</p>

		<p>For a given setup, one may need a special event filter only once and it seems to be overkill to write a native LV2 event filter in C/C++ just for that. It would also be nice to have a tool for fast prototyping of new event filters.</p>

		<p>A scripting language seems to be ideal for these cases, where the user can write an event filter on a higher level of abstraction on-the-fly. The scripting language needs to be realtime safe, though, which restricts the choices dramatically.</p>

		<p>One such scripting language is <a href="https://lua.org">Lua</a>. It is small, fast, easily embeddable and realtime-safe if coupled to a realtime-safe memory allocator like TLSF.</p>

		<p>The Moony plugins can handle LV2 control and atom event ports, only. They do not handle LV2 audio ports. Control port values are internally handled as simple floating point numbers, whereas the atom event ports build on top of the LV2 <a href="http://lv2plug.in/doc/html/group__atom.html">atom</a> and <a href="http://lv2plug.in/doc/html/group__forge.html">atom forge</a> C headers.</p>
	</div>

	<div class="api-section">
	<h1 id="variants">Plugin Variants</h1>
		<p>The Moony plugin bundle ships with multiple plugin variants, whereas all of them share the same
			API but with different configurations of input and output ports. Depending on the users's usage
			scenario, one or the other variant may be preferable.</p>
		<p>Plugin variants only differ in number of control and atom event input and output ports. Apart
			from this difference, they can often be used interchangeably.</p>
	</div>

		<div class="api-section">
		<h2 id="variants-c1xc1">C1 x C1</h2>
		<p>This plugin variant features a single control port input and a single control port output.</p>

		<pre><code><span style="color:#555555;">-- C1 x C1 prototype 'run' function</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">run</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">n</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">control</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">notify</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">return</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
		</div>

		<div class="api-section">
		<h2 id="variants-c2xc2">C2 x C2</h2>
		<p>This plugin variant features two control port inputs and two control port outputs.</p>

		<pre><code><span style="color:#555555;">-- C2 x C2 prototype 'run' function</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">run</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">n</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">control</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">notify</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c2</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">return</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c2</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
		</div>

		<div class="api-section">
		<h2 id="variants-c4xc4">C4 x C4</h2>
		<p>This plugin variant features four control port inputs and four control port outputs.</p>

		<pre><code><span style="color:#555555;">-- C4 x C4 prototype 'run' function</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">run</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">n</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">control</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">notify</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c3</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c4</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">return</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c3</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c4</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
		</div>

		<div class="api-section">
		<h2 id="variants-a1xa1">A1 x A1</h2>
		<p>This plugin variant features a single atom port input and a single atom port output.</p>

		<pre><code><span style="color:#555555;">-- A1 x A1 prototype 'run' function</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">run</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">n</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">control</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">notify</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
		</div>

		<div class="api-section">
		<h2 id="variants-a2xa2">A2 x A2</h2>
		<p>This plugin variant features two atom port inputs and two atom port outputs.</p>

		<pre><code><span style="color:#555555;">-- A2 x A2 prototype 'run' function</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">run</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">n</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">control</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">notify</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge2</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
		</div>

		<div class="api-section">
		<h2 id="variants-a4xa4">A4 x A4</h2>
		<p>This plugin variant features four atom port inputs and four atom port outputs.</p>

		<pre><code><span style="color:#555555;">-- A4 x A4 prototype 'run' function</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">run</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">n</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">control</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">notify</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq3</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge3</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq4</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge4</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
		</div>

		<div class="api-section">
		<h2 id="variants-c1a1xc1a1">C1+A1 x C1+A1</h2>
		<p>This plugin variant features a single control port input and a single control port output
			with a single atom port input and a single atom port output.</p>

		<pre><code><span style="color:#555555;">-- C1+A1 x C1+A1 prototype 'run' function</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">run</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">n</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">control</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">notify</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">return</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
		</div>

		<div class="api-section">
		<h2 id="variants-c2a1xc2a1">C2+A1 x C2+A1</h2>
		<p>This plugin variant features two control port inputs and two control port outputs
			with a single atom port input and a single atom port output.</p>

		<pre><code><span style="color:#555555;">-- C2+A1 x C2+A1 prototype 'run' function</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">run</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">n</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">control</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">notify</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c2</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">return</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c2</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
		</div>

		<div class="api-section">
		<h2 id="variants-c4a1xc4a1">C4+A1 x C4+A1</h2>
		<p>This plugin variant features four control port inputs and four control port outputs
			with a single atom port input and a single atom port output.</p>

		<pre><code><span style="color:#555555;">-- C4+A1 x C4+A1 prototype 'run' function</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">run</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">n</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">control</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">notify</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c3</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c4</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">return</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c3</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">c4</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
		</div>

	<div class="api-section">
		<h1 id="lua-libraries">Lua libraries</h1>
		<p><i>Moony</i> runs its Lua interpreter in sandboxed mode, e.g. because of its
		real-time requirements, <i>Moony</i> cannot provide any access to blocking functions
		like file I/O and pipes. Only the following standard Lua libraries are enabled:</p>

		<ul>
			<li><a href="https://www.lua.org/manual/5.3/manual.html#6.1">base</a></li>
			<li><a href="https://www.lua.org/manual/5.3/manual.html#6.2">coroutine</a></li>
			<li><a href="https://www.lua.org/manual/5.3/manual.html#6.6">table</a></li>
			<li><a href="https://www.lua.org/manual/5.3/manual.html#6.4">string</a></li>
			<li><a href="https://www.lua.org/manual/5.3/manual.html#6.7">math</a></li>
			<li><a href="https://www.lua.org/manual/5.3/manual.html#6.5">utf8</a></li>
			<li><a href="https://www.lua.org/manual/5.3/manual.html#6.10">debug</a></li>
		</ul>

		<p>The following standard Lua libraries are disabled:</p>

		<ul>
			<li><a href="https://www.lua.org/manual/5.3/manual.html#6.8">io</a></li>
			<li><a href="https://www.lua.org/manual/5.3/manual.html#6.3">package</a></li>
			<li><a href="https://www.lua.org/manual/5.3/manual.html#6.9">os</a></li>
		</ul>

		<p>The following <a href="https://www.lua.org/manual/5.3/manual.html#6.1">base</a> functions are disabled:</p>

		<ul>
			<li><a href="https://www.lua.org/manual/5.3/manual.html#pdf-loadfile">loadfile</a></li>
			<li><a href="https://www.lua.org/manual/5.3/manual.html#pdf-dofile">dofile</a></li>
		</ul>

		<p>The following <a href="https://www.lua.org/manual/5.3/manual.html#6.7">math</a> functions are disabled (use the dedicated random utility library instead):</p>

		<ul>
			<li><a href="https://www.lua.org/manual/5.3/manual.html#pdf-math.random">math.random</a></li>
			<li><a href="https://www.lua.org/manual/5.3/manual.html#pdf-math.randomseed">math.randomseed</a></li>
		</ul>

		<p>Additionally to the standard libraries, <i>Moony</i> ships the
		following commonly used utility libraries:</p>

		<ul>
			<li><a href="http://www.inf.puc-rio.br/~roberto/lpeg/">lpeg</a></li>
			<li><a href="http://webserver2.tecgraf.puc-rio.br/~lhf/ftp/lua/#lbase64">base64</a></li>
			<li><a href="http://webserver2.tecgraf.puc-rio.br/~lhf/ftp/lua/#lascii85">ascii85</a></li>
			<li><a href="http://webserver2.tecgraf.puc-rio.br/~lhf/ftp/lua/#lmathx">mathx</a></li>
			<li><a href="http://webserver2.tecgraf.puc-rio.br/~lhf/ftp/lua/#lcomplex">complex</a></li>
			<li><a href="http://webserver2.tecgraf.puc-rio.br/~lhf/ftp/lua/#lrandom">random</a></li>
		</ul>
	</div>

	<div class="api-section">
	<h1 id="log-and-debug">Log &amp; Debug</h1>
		<p>Whenever you want to log or debug something while developing your scripts, you can easily dump any value via Lua's <b>print</b> function. The print's output will be shown on the UI and also be sent to the host's log backend, e.g. to a log window or console.</p>

	<pre><code><span style="color:#555555;">-- sends 'hello world' to the UI and the host's log backend</span><span style="color:#dddddd;">

</span><span style="color:#00aeef;">print</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'hello world'</span><span style="color:#ffffff;">)</span></code></pre>
	</div>

	<div class="api-section">
	<h1 id="callbacks">Callbacks</h1>
	<p>Moony can run user defined callbacks at different positions in its
	processing graph. If the user provides an implementation for a specific
	callback, Moony will run the latter. If the plugin does not need a specific
	callback, the latter can simply be omitted. The implementations of all
	callbacks are thus optional.</p>
	</div>

		<div class="api-section">
		<h2 id="callbacks-run">run</h2>
		<p>The <b>run</b> callback function is the main callback function and thus the most
		important one. It is called once per period by the plugin host. The period size,
		e.g. the number of audio samples the function is called for may be chosen
		arbitrary by the host. Do not expect it to be constant.</p>

		<p>Depending on the plugin variant, the <b>run</b> function takes variable amount
		of arguments. All variants have the first and last two arguments in common, though.</p>

		<p>If a plugin has input event ports, sequence objects (Lua userdata) will be
		given to the <b>run</b> function whose events can be iterated over.</p>

		<p>If a plugin has output event ports, forge objects (Lua userdata) will be
		given to the <b>run</b> function which can be filled with arbitrary atom event
		structures.</p>

		<p>If a plugin has input control ports, those values will be given to the <b>run</b>
		function as native Lua numbers.</p>

		<p>If a plugin has output control ports, the <b>run</b> function is expected to
		return native Lua numbers, missing return values will be set to 0.0.</p>

		<dl>
			<dt class="func">function run(n, control, notify, seq1, forge1, ..., c1, ...)</dt>
			<dt>n (integer)</dt>
				<dd>number of audio samples of current period</dd>
			<dt>{control, notify} (userdata, userdata)</dt>
				<dd>pair of atom sequence and atom forge object for communication with UI</dd>
			<dt>{seq, forge} [x] (userdata, userdata)</dt>
				<dd>pairs of atom sequence and atom forge objects, with x=[0, 1, 2, 4]</dd>
			<dt>c [x] (number)</dt>
				<dd>control port inputs, with x=[0, 1, 2, 4]</dd>
			<dt class="ret">(number)</dt>
				<dd>control port outputs, with x=[0, 1, 2, 4]</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- 'run' callback prototype for moony#a1xa1</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">run</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">n</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">control</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">notify</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- here we will process events</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
		</div>

		<div class="api-section">
		<h2 id="callbacks-once">once</h2>
		<p>The <b>once</b> function exists for pure convenience only. It has exactly the
		same form as the <b>run</b> function, but is called only once after the whole
		script code is loaded or updated.</p>

		<p>The <b>once</b> function will run directly before the <b>run</b> function,
		it therefore is no replacement for the latter in a given update period, but
		and extension to it.</p>

		<p>Put logic here that needs to run once after script code update, e.g. registering
		a new <a href="#state-responder">StateResponder</a>.</p>

		<dl>
			<dt class="func">function once(n, control, notify, seq1, forge1, ..., c1, ...)</dt>
			<dt>n (integer)</dt>
				<dd>number of audio samples of current period</dd>
			<dt>{control, notify} (userdata, userdata)</dt>
				<dd>pair of atom sequence and atom forge object for communication with UI</dd>
			<dt>{seq, forge} [x] (userdata, userdata)</dt>
				<dd>pairs of atom sequence and atom forge objects, with x=[0, 1, 2, 4]</dd>
			<dt>c [x] (number)</dt>
				<dd>control port inputs, with x=[0, 1, 2, 4]</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- 'once' callback prototype for moony#a1xa1</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">once</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">n</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">control</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">notify</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- here we will run logic once right after a code update</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">-- send all-notes-off MIDI message on all channels</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">channel</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0xf</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">time</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">midi</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">MIDI</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Controller</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">|</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">channel</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">MIDI</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">AllNotesOff</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
		</div>

		<div class="api-section">
		<h2 id="callbacks-stash">stash</h2>
		<p>When script code is reloaded, plugin state inside Lua virtual machine
		potentially is lost. In order to preserve state across a script code reload,
		arbitrary state can be serialized and parked in temporary memory.
		Such a temporary serialized state can later be deserialized via
		<a href="#callbacks-apply">apply</a>.</p>

		<p>The <b>stash</b> function is directly called before switching to the new
		script code.</p>

		<dl>
			<dt class="func">function stash(forge)</dt>
			<dt>forge (userdata)</dt>
				<dd>atom forge object to serialize to</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- 'stash' callback prototype</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- a simple flag</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">myflag</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">true</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- serialize single boolean flag</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">bool</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">myflag</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">apply</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Bool</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">-- deserialize single boolean flag</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">myflag</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">myflag</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">true</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
		</div>

		<div class="api-section">
		<h2 id="callbacks-apply">apply</h2>
		<p>When script code is reloaded, plugin state inside Lua virtual machine
		potentially is lost. In order to preserve state across a script code reload,
		arbitrary state previously serialized by <a href="#callbacks-stash">stash</a>
		can be deserialized from temporary memory.</p>

		<p>The <b>apply</b> function is directly called after switching to the new 
		script code.</p>

		<dl>
			<dt class="func">function apply(atom)</dt>
			<dt>atom (userdata)</dt>
				<dd>atom object to deserialize from</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- 'apply' callback prototype</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- table that holds active notes</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">active_notes</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ffffff;">{</span><span style="color:#dddddd;">
  </span><span style="color:#fbfb00;">60</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">64</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">67</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">72</span><span style="color:#dddddd;">
</span><span style="color:#ffffff;">}</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">tup</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">tuple</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">-- serialize active notes to atom tuple</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">i</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">v</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">ipairs</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">active_notes</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">v</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

  </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">apply</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Tuple</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">-- clear active notes table</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">active_notes</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ffffff;">{</span><span style="color:#ffffff;">}</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">-- deserialize active notes from atom tuple</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">i</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">v</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">foreach</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">v</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Int</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

    </span><span style="color:#dddddd;">active_notes</span><span style="color:#ffffff;">[</span><span style="color:#dddddd;">i</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">v</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">active_notes</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">4</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
		</div>

		<div class="api-section">
		<h2 id="callbacks-save">save</h2>
		<p>The <b>save</b> function works analogously to <a href="#callbacks-stash">stash</a>,
		but instead of serializing to temporary memory before a script code reload,
		<b>save</b> serializes to disk upon a state save request issued by the host.</p>

		<p>State serialized to disk by <b>save</b> is preserved across plugin instantiations
		and truly is the same as a preset.</p>

		<dl>
			<dt class="func">function save(forge)</dt>
			<dt>forge (userdata)</dt>
				<dd>atom forge object to serialize to</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- 'save' callback prototype</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'urn:uuid:6f7e2445-ae5f-4e2e-ae11-9a5cfb1b5d1e#'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- state</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">state</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ffffff;">{</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">foo</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ffffff;">{</span><span style="color:#dddddd;">
    </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">RDFS</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">range</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Int</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
    </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">RDF</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">value</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">12</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">}</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">bar</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ffffff;">{</span><span style="color:#dddddd;">
    </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">RDFS</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">range</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Chunk</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
    </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">RDF</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">value</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">string</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">char</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0x0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x2</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">}</span><span style="color:#dddddd;">
</span><span style="color:#ffffff;">}</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">save</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">obj</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">object</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">-- serialize state to atom object</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">k</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">v</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">pairs</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">state</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">obj</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">key</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">k</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">typed</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">v</span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">RDFS</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">range</span><span style="color:#ffffff;">]</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">v</span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">RDF</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">value</span><span style="color:#ffffff;">]</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

  </span><span style="color:#dddddd;">obj</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">restore</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Object</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">-- deserialize state from atom object</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">k</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">v</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">pairs</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">state</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
    </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">itm</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">[</span><span style="color:#dddddd;">k</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;">

    </span><span style="color:#00698f;">if</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">itm</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">then</span><span style="color:#dddddd;">
      </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">itm</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">v</span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">RDFS</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">range</span><span style="color:#ffffff;">]</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
      </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">itm</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">v</span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">RDF</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">value</span><span style="color:#ffffff;">]</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

      </span><span style="color:#dddddd;">v</span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">RDF</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">value</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">itm</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;">
    </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
		</div>

		<div class="api-section">
		<h2 id="callbacks-restore">restore</h2>
		<p>The <b>restore</b> function works analogously to <a href="#callbacks-apply">apply</a>,
		but instead of deserializing from temporary memory after a script code reload,
		<b>restore</b> deserializes from disk upon a state reload request issued by the host.</p>

		<p>If defined, the function is called upon each code reload with the most recently
		saved state directly after <b>apply</b> and before <b>once</b> or <b>run</b>.</p>

		<dl>
			<dt class="func">function restore(atom)</dt>
			<dt>atom (userdata)</dt>
				<dd>atom object to deserialize from</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- 'restore' callback prototype</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'urn:uuid:8fdd61cd-9c12-4366-b208-8306b37cb981#'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- 3D positional state</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">state</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ffffff;">{</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">position</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ffffff;">{</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.3</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.9</span><span style="color:#dddddd;"> </span><span style="color:#ffffff;">}</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">rotation</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ffffff;">{</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">-</span><span style="color:#8dff0a;">math</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">pi</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">math</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">pi</span><span style="color:#cc0000;">/</span><span style="color:#fbfb00;">2</span><span style="color:#dddddd;"> </span><span style="color:#ffffff;">}</span><span style="color:#dddddd;">
</span><span style="color:#ffffff;">}</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">save</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">obj</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">object</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">-- serialize state to atom object</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">k</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">v</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">pairs</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">state</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
    </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">vec</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">obj</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">key</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">k</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">vector</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Float</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">autopop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
      </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">i</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">w</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">ipairs</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">v</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
        </span><span style="color:#dddddd;">vec</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">float</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">w</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
      </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">
    </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

  </span><span style="color:#dddddd;">obj</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">restore</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Object</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">-- deserialize state from atom object</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">k</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">v</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">pairs</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">state</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
    </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">itm</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">[</span><span style="color:#dddddd;">k</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;">

    </span><span style="color:#00698f;">if</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">itm</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">then</span><span style="color:#dddddd;">
      </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">itm</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Vector</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
      </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">itm</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">childType</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Float</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

      </span><span style="color:#dddddd;">state</span><span style="color:#ffffff;">[</span><span style="color:#dddddd;">k</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ffffff;">{</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">itm</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">unpack</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#ffffff;">}</span><span style="color:#dddddd;">
      </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">state</span><span style="color:#ffffff;">[</span><span style="color:#dddddd;">k</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">3</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
		</div>

		<div class="api-section">
		<h1 id="urid">Map &amp; Unmap</h1>
		<p>LV2 references objects and their properties by URIs, usually rather long,
		unique string identifiers. When comparing URIs, whole strings need to be
		compared, which is inefficient. In LV2, an URI thus can be mapped to a simple
		integer URID, greatly increasing efficiency of comparisons. Unmapping from
		URID to original URI is supported, too.</p>

		<p>Moony directly mirrors mapping and unmapping of the underlying low-level
		implementation, but additionally caches every newly queried URI or URID
		for faster lookup inside script code. Cached URIs and URIDs are not preserved
		across script code updates, though.</p>
		</div>

		<div class="api-section">
		<h2 id="urid-map">Map</h2>
		<p>Map an URI to its corresponding URID. <b>Map</b> is a first-class Lua
		table acting as a cache for all queried URIDs and can also be called as
		function.</p>

		<dl>
			<dt class="func">Map:__call(URI) | Map(URI) | Map:__index(URI) | Map[URI]</dt>
			<dt>URI (string)</dt>
				<dd>URI to be mapped</dd>
			<dt class="ret">(integer)</dt>
				<dd>mapped URID</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- Map can be indexed or called as function</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">prefix</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'http://example.com#'</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">foo_urid</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Map</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">prefix</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">.</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'foo'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">bar_urid</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Map</span><span style="color:#ffffff;">[</span><span style="color:#dddddd;">prefix</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">.</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'bar'</span><span style="color:#ffffff;">]</span></code></pre>
		</div>

		<div class="api-section">
		<h2 id="urid-unmap">Unmap</h2>
		<p>Unmap an URID to its original URI. <b>Unmap</b> is a first-class Lua
		table acting as a cache for all queried URIs and can also be called as
		function.</p>

		<dl>
			<dt class="func">Unmap:__call(URID) | Unmap(URID) | Unmap:__index(URID) | Unmap[URID]</dt>
			<dt>URID (integer)</dt>
				<dd>URID to be unmapped</dd>
			<dt class="ret">(string)</dt>
				<dd>unmapped URI</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- Unmap can be indexed or called as function</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">prefix</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'http://example.com#'</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">foo_urid</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Map</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">prefix</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">.</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'foo'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">bar_urid</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Map</span><span style="color:#ffffff;">[</span><span style="color:#dddddd;">prefix</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">.</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'bar'</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">foo_uri</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Unmap</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">foo_urid</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">bar_uri</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Unmap</span><span style="color:#ffffff;">[</span><span style="color:#dddddd;">bar_urid</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;">

</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">prefix</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">.</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'foo'</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">foo_uri</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">prefix</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">.</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'bar'</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">bar_uri</span><span style="color:#ffffff;">)</span></code></pre>
		</div>

		<div class="api-section">
		<h2 id="urid-mapper">Mapper</h2>
		<p>A convenience wrapper and syntactic sugar around <a href="#urid-map">Map</a>.
		Simplifies creating multiple mappings which share a common URI prefix.</p>

		<p>Returns a table which can be queried by indexing with the URI postfix.
		The query is equivalent to a mapping of concatenated URI prefix and postfix.</p>

		<p>This is especially useful when dealing with custom properties and the
		<a href="#responder-state">StateResponder</a>.</p>

		<dl>
			<dt class="func">Mapper(prefix)</dt>
			<dt>prefix (string)</dt>
				<dd>prefix string to be appended to</dd>
			<dt class="ret">(table)</dt>
				<dd>Mapper table</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- Mapper is a convenience wrapper over Map</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">prefix</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'urn:uuid:d178f397-3179-4c38-9d25-31d60ffc5788#'</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">mapper</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">prefix</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">bar_urid</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Map</span><span style="color:#ffffff;">[</span><span style="color:#dddddd;">prefix</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">.</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'bar'</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;">

</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">mapper</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">bar</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">bar_urid</span><span style="color:#ffffff;">)</span></code></pre>
		</div>

		<div class="api-section">
		<h2 id="urid-voicemap">Blank</h2>
		<p>Returns a unique, non-colliding integer ID to be used in event messaging.
		Especially useful for <a href="#forge-patch">Patch</a> messages or custom
		event systems where there is a need to track event properties over space
		and time.</p>

		<dl>
			<dt class="func">Blank()</dt>
			<dt class="ret">(integer)</dt>
				<dd>unique integer ID</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- Blank returns unique integer IDs</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">cache</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ffffff;">{</span><span style="color:#ffffff;">}</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">i</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">100</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">id</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Blank</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#cc0000;">not</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">cache</span><span style="color:#ffffff;">[</span><span style="color:#dddddd;">id</span><span style="color:#ffffff;">]</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">cache</span><span style="color:#ffffff;">[</span><span style="color:#dddddd;">id</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">true</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
		</div>

	<!-- Forge -->
	<div class="api-section">
	<h1 id="forge">Forge</h1>
	<p>A forge object is used to serialize arbitrary complex atoms, both simple
	primitives and nested containers.</p>
	</div>

		<!-- Forge Primitive -->
		<div class="api-section">
		<h2 id="forge-primitive">Primitive</h2>
		<p>Atom types that contain single data as part of their body are referred to
		as primitives.</p>
		</div>

			<!-- Forge Bool -->
			<div class="api-section">
			<h3 id="forge-bool">Bool</h3>
			<p>Forge a boolean atom, e.g. of type Atom.Bool.</p>

			<dl>
				<dt class="func">forge:bool(value)</dt>
				<dt>value (boolean)</dt>
					<dd>boolean value to forge</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Bool</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">stash_tuple</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">bool</span><span style="color:#ffffff;">(</span><span style="color:#ff6600;">true</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">bool</span><span style="color:#ffffff;">(</span><span style="color:#ff6600;">false</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Forge Int -->
			<div class="api-section">
			<h3 id="forge-int">Int</h3>
			<p>Forge an integer atom, e.g. of type Atom.Int.</p>

			<dl>
				<dt class="func">forge:int(value)</dt>
				<dt>value (integer)</dt>
					<dd>integer value to forge</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Int</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Forge Long -->
			<div class="api-section">
			<h3 id="forge-long">Long</h3>
			<p>Forge long integer atom, e.g. of type Atom.Long.</p>

			<dl>
				<dt class="func">forge:long(value)</dt>
				<dt>value (integer)</dt>
					<dd>integer value to forge</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Long</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">long</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Forge Float -->
			<div class="api-section">
			<h3 id="forge-float">Float</h3>
			<p>Forge single-precision float atom, e.g. of type Atom.Float.</p>

			<dl>
				<dt class="func">forge:float(value)</dt>
				<dt>value (number)</dt>
					<dd>number value to forge</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Float</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">float</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12.5</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Forge Double -->
			<div class="api-section">
			<h3 id="forge-double">Double</h3>
			<p>Forge double-precision float atom, e.g. of type Atom.Double.</p>

			<dl>
				<dt class="func">forge:double(value)</dt>
				<dt>value (number)</dt>
					<dd>number value to forge</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Double</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">double</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12.5</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Forge URID -->
			<div class="api-section">
			<h3 id="forge-urid">URID</h3>
			<p>Forge URID atom, e.g. of type Atom.URID.</p>

			<dl>
				<dt class="func">forge:urid(value)</dt>
				<dt>value (integer)</dt>
					<dd>URID value to forge</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge URID</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">uri</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'urn:uuid:887c5b2e-89f9-4f1d-aa7c-0ac240ea11b5#foo'</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urid</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Map</span><span style="color:#ffffff;">[</span><span style="color:#dddddd;">uri</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">urid</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urid</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Forge URI -->
			<div class="api-section">
			<h3 id="forge-uri">URI</h3>
			<p>Forge URI atom, e.g. of type Atom.URI.</p>

			<dl>
				<dt class="func">forge:uri(value)</dt>
				<dt>value (string)</dt>
					<dd>URI value to forge</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge URI</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">uri</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'urn:uuid:1f2eb75a-29dc-446b-a8eb-c22d20144a85#foo'</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">uri</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">uri</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Forge String -->
			<div class="api-section">
			<h3 id="forge-string">String</h3>
			<p>Forge string atom, e.g. of type Atom.String.</p>

			<dl>
				<dt class="func">forge:string(value)</dt>
				<dt>value (string)</dt>
					<dd>string value to forge</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge String</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">string</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'hello world'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Forge Path -->
			<div class="api-section">
			<h3 id="forge-path">Path</h3>
			<p>Forge path atom, e.g. of type Atom.Path.</p>

			<dl>
				<dt class="func">forge:path(value)</dt>
				<dt>value (string)</dt>
					<dd>string value to forge</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Path</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">path</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'/tmp/xyz'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Forge Literal -->
			<div class="api-section">
			<h3 id="forge-literal">Literal</h3>
			<p>Forge literal atom, e.g. of type Atom.Literal.</p>

			<dl>
				<dt class="func">forge:literal(value, datatype=nil, language=nil)</dt>
				<dt>value (string)</dt>
					<dd>string value to forge</dd>
				<dt>datatype (integer)</dt>
					<dd>datatype of literal as integer URID, defaults to 0</dd>
				<dt>language (integer)</dt>
					<dd>language of literal as integer URID, defaults to 0</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Literal</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">rus</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Map</span><span style="color:#ffffff;">[</span><span style="color:#58c554;">'http://lexvo.org/id/iso639-3/rus'</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- Russian language</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">stash_tuple</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">literal</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'902A7F'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">MIDI</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">MidiEvent</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- MIDI encoded as hexidecimal text</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">literal</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'Приве́т!'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">nil</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">rus</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- 'hello!'</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Forge Chunk -->
			<div class="api-section">
			<h3 id="forge-chunk">Chunk</h3>
			<p>Forge chunk atom, e.g. of type Atom.Chunk.</p>

			<dl>
				<dt class="func">forge:chunk(value)</dt>
				<dt>value (string)</dt>
					<dd>byte string value to forge</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<dl>
				<dt class="func">forge:chunk(value)</dt>
				<dt>value (table)</dt>
					<dd>table with individual values to forge</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<dl>
				<dt class="func">forge:chunk(...)</dt>
				<dt>... (integer)</dt>
					<dd>individual values to forge</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Chunk</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">stash_tuple</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">chunk</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">string</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">char</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0x1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x3</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">chunk</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">{</span><span style="color:#fbfb00;">0x1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x3</span><span style="color:#ffffff;">}</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">chunk</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0x1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x3</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Forge MIDI -->
			<div class="api-section">
			<h3 id="forge-midi">MIDI</h3>
			<p>Forge MIDI atom, e.g. of type MIDI.MidiEvent.</p>

			<dl>
				<dt class="func">forge:midi(value)</dt>
				<dt>value (string)</dt>
					<dd>byte string value to forge</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<dl>
				<dt class="func">forge:midi(value)</dt>
				<dt>value (table)</dt>
					<dd>table with individual values to forge</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<dl>
				<dt class="func">forge:midi(...)</dt>
				<dt>... (integer)</dt>
					<dd>individual values to forge</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge MIDI</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">stash_tuple</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">midi</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">string</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">char</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">MIDI</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">NoteOn</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">69</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x7f</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">midi</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">{</span><span style="color:#8dff0a;">MIDI</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">NoteOn</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">69</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x7f</span><span style="color:#ffffff;">}</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">midi</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">MIDI</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">NoteOn</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">69</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x7f</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Forge Raw -->
			<div class="api-section">
			<h3 id="forge-raw">Raw</h3>
			<p>Forge a custom atom of arbitrary type.</p>

			<dl>
				<dt class="func">forge:raw(type, value)</dt>
				<dt>type (integer)</dt>
					<dd>type of atom as integer URID</dd>
				<dt>value (string)</dt>
					<dd>byte string value to forge</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<dl>
				<dt class="func">forge:raw(type, value)</dt>
				<dt>type (integer)</dt>
					<dd>type of atom as integer URID</dd>
				<dt>value (table)</dt>
					<dd>table with individual values to forge</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<dl>
				<dt class="func">forge:raw(type, ...)</dt>
				<dt>type (integer)</dt>
					<dd>type of atom as integer URID</dd>
				<dt>... (integer)</dt>
					<dd>individual values to forge</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Raw</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">byt</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ffffff;">{</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- stores individual bytes of zero-terminated string 'LV2'</span><span style="color:#dddddd;">
  </span><span style="color:#8dff0a;">string</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">byte</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'L'</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#8dff0a;">string</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">byte</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'V'</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#8dff0a;">string</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">byte</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'2'</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#8dff0a;">string</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">byte</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'\0'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#ffffff;">}</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">stash_tuple</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">raw</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">String</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">string</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">char</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">table</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">unpack</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">byt</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">raw</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">String</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">byt</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">raw</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">String</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">table</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">unpack</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">byt</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Forge Typed -->
			<div class="api-section">
			<h3 id="forge-typed">Typed</h3>
			<p>Forge an atom of arbitrary type.</p>

			<dl>
				<dt class="func">forge:typed(type, ...)</dt>
				<dt>type (integer)</dt>
					<dd>type of atom as integer URID</dd>
				<dt>... (boolean | integer | number | string | table)</dt>
					<dd>value(s) to forge, see native forge functions documentation</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Typed</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">stash_tuple</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">typed</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Int</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- equivalent to forge:int(...)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">typed</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Float</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">12.5</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- equivalent to forge:float(...)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">typed</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">String</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'LV2 rocks!'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- equivalent to forge:string(...)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Forge Atom -->
			<div class="api-section">
			<h3 id="forge-atom">Atom</h3>
			<p>Forge an unchanged atom. Useful for cloning whole atoms.</p>

			<dl>
				<dt class="func">forge:atom(value)</dt>
				<dt>value (userdata)</dt>
					<dd>atom to forge</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Atom</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- forge integer atom</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">stash_tuple</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- forge prepared integer atom in whole</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">apply_tuple</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">tup</span><span style="color:#ffffff;">[</span><span style="color:#fbfb00;">1</span><span style="color:#ffffff;">]</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">atom</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">tup</span><span style="color:#ffffff;">[</span><span style="color:#fbfb00;">1</span><span style="color:#ffffff;">]</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- check if integer atom has been forged in whole</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">check</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">tup</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">tup</span><span style="color:#ffffff;">[</span><span style="color:#fbfb00;">1</span><span style="color:#ffffff;">]</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

		<!-- Forge Container -->
		<div class="api-section">
		<h2 id="forge-container">Container</h2>
		<p>Atom types that contain nested atoms as part of their body are referred to
		as containers.</p>
		</div>

			<!-- Forge Sequence -->
			<div class="api-section">
			<h3 id="forge-sequence">Sequence</h3>
			<p>Forge a sequence atom, e.g. an atom of type Atom.Sequence.</p>

			<dl>
				<dt class="func">forge:sequence(unit=0)</dt>
				<dt>unit (integer)</dt>
					<dd>event time unit as integer URID, defaults to 0, can either be Atom.frameTime or Atom.beatTime</dd>
				<dt class="ret">(userdata)</dt>
					<dd>derived container forge object, needs to be finalized with <a href="#forge-pop">Pop</a></dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Sequence</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">stash_tuple</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">sequence</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- create derived container forge object</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">time</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">frameTime</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">1</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">13</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- finalize container</span><span style="color:#dddddd;">

  </span><span style="color:#dddddd;">seq</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">sequence</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">frameTime</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- create derived container forge object</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">time</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">frameTime</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">1</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">13</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- finalize container</span><span style="color:#dddddd;">

  </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">sequence</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">beatTime</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">autopop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- create iterator for derived container forge object</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">time</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.0</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">beatTime</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">1.0</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">13</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- finalize container</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

				<!-- Forge Frame Time-->
				<div class="api-section">
				<h4 id="forge-frame-time">Frame Time</h4>
				<p>Forge frame time of event. Use this on sequences with unit 0 or Atom.frameTime.</p>

				<dl>
					<dt class="func">forge:frameTime(frames)</dt>
					<dt>frames (integer)</dt>
						<dd>frame time of event</dd>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>
				</div>

				<!-- Forge Beat Time-->
				<div class="api-section">
				<h4 id="forge-beat-time">Beat Time</h4>
				<p>Forge beat time of event. Use this on sequences with unit Atom.beatTime.</p>

				<dl>
					<dt class="func">forge:beatTime(beats)</dt>
					<dt>beats (number)</dt>
						<dd>beat time of event</dd>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>
				</div>

				<!-- Forge Time-->
				<div class="api-section">
				<h4 id="forge-time">Time</h4>
				<p>Forge frame or beat time of event. Can be used as syntactic sugar instead of
				<a href="#forge-frame-time">Frame Time</a> or <a href="#forge-beat-time">Beat Time</a>.</p>

				<dl>
					<dt class="func">forge:time(timestamp)</dt>
					<dt>timestamp (integer | number)</dt>
						<dd>frame time (integer) or beat time (number) of event</dd>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>
				</div>

			<!-- Forge Object -->
			<div class="api-section">
			<h3 id="forge-object">Object</h3>
			<p>Forge an object atom, e.g. an atom of type Atom.Object.</p>

			<dl>
				<dt class="func">forge:object(otype=0, id=0)</dt>
				<dt>otype (integer)</dt>
					<dd>object type as integer URID, defaults to 0</dd>
				<dt>id (integer)</dt>
					<dd>object ID as integer URID, defaults to 0</dd>
				<dt class="ret">(userdata)</dt>
					<dd>derived container forge object, needs to be finalized with <a href="#forge-pop">Pop</a></dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Object</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'urn:uuid:efc85bf7-0246-486f-948b-0cfbcae4e1053#'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">stash_tuple</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">obj</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">object</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">FooBar</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- create derived container forge object</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">obj</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">key</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">foo</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- without context</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">obj</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">key</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">bar</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">long</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">13</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- with context</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">obj</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- finalize container</span><span style="color:#dddddd;">

  </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">obj</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">object</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">FooBar</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">autopop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- create iterator for derived container forge object</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">obj</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">key</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">foo</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- without context</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">obj</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">key</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">bar</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">long</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">13</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- with context</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- finalize container</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

				<!-- Forge Key -->
				<div class="api-section">
				<h4 id="forge-key">Key</h4>
				<p>Forge key of object property.</p>

				<dl>
					<dt class="func">forge:key(value, context=0)</dt>
					<dt>value (integer)</dt>
						<dd>key of property as integer URID</dd>
					<dt>context (integer)</dt>
						<dd>context of property as integer URID, defaults to 0</dd>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>
				</div>

			<!-- Forge Tuple -->
			<div class="api-section">
			<h3 id="forge-tuple">Tuple</h3>
			<p>Forge a tuple atom, e.g. an atom of type Atom.Tuple.</p>

			<dl>
				<dt class="func">forge:tuple()</dt>
				<dt class="ret">(userdata)</dt>
					<dd>derived container forge object, needs to be finalized with <a href="#forge-pop">Pop</a></dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Tuple</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">stash_tuple</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">tup</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">tuple</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- create derived container forge object</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">long</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">13</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">float</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">13.5</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">double</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">14.5</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">string</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'this is an element of an atom tuple'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">bool</span><span style="color:#ffffff;">(</span><span style="color:#ff6600;">true</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- finalize container</span><span style="color:#dddddd;">

  </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">tup</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">tuple</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">autopop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- create iterator for derived container forge object</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">long</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">13</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">float</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">13.5</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">double</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">14.5</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">string</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'this is an element of an atom tuple'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">bool</span><span style="color:#ffffff;">(</span><span style="color:#ff6600;">true</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- finalize container</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Forge Vector -->
			<div class="api-section">
			<h3 id="forge-vector">Vector</h3>
			<p>Forge a vector atom, e.g. an atom of type Atom.Vector.</p>

			<dl>
				<dt class="func">forge:vector(type)</dt>
					<dt>type (integer)</dt>
						<dd>child type as integer URID, valid are: Atom.Bool, Atom.Int, Atom.Float, Atom.Long, Atom.Double, Atom.URID</dd>
				<dt class="ret">(userdata)</dt>
					<dd>derived container forge object, needs to be finalized with <a href="#forge-pop">Pop</a></dd>
			</dl>

			<dl>
				<dt class="func">forge:vector(type, tab)</dt>
					<dt>type (integer)</dt>
						<dd>child type as integer URID, valid are: Atom.Bool, Atom.Int, Atom.Float, Atom.Long, Atom.Double, Atom.URID</dd>
					<dt>tab (table)</dt>
						<dd>table with values of matching vector child type</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<dl>
				<dt class="func">forge:vector(type, ...)</dt>
					<dt>type (integer)</dt>
						<dd>child type as integer URID, valid are: Atom.Bool, Atom.Int, Atom.Float, Atom.Long, Atom.Double, Atom.URID</dd>
					<dt>... (integer | number)</dt>
						<dd>argument list with values of matching vector child type</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Vector</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">vBool</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ffffff;">{</span><span style="color:#dddddd;">
  </span><span style="color:#ff6600;">true</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">false</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">true</span><span style="color:#dddddd;">
</span><span style="color:#ffffff;">}</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">stash_tuple</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">vector</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Int</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">1</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">2</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">3</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">4</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">5</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">vector</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Int</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#ffffff;">{</span><span style="color:#fbfb00;">1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">3</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">4</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">5</span><span style="color:#ffffff;">}</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">vector</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Int</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">3</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">4</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">5</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

  </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">vec</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">vector</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Bool</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">autopop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
    </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">i</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">v</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">ipairs</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">vBool</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
      </span><span style="color:#dddddd;">vec</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">bool</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">v</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">vector</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Bool</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">vBool</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">vector</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Bool</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">table</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">unpack</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">vBool</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Forge Pop -->
			<div class="api-section">
			<h3 id="forge-pop">Pop</h3>
			<p>Finalize any derived container forge object.</p>

			<dl>
				<dt class="func">forge:pop()</dt>
				<dt class="ret">(userdata)</dt>
					<dd>parent container forge object</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Pop</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">tup</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">tuple</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">1</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">2</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">apply</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">2</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Forge AutoPop -->
			<div class="api-section">
			<h3 id="forge-autopop">Autopop</h3>
			<p>Finalize any derived container forge object automatically via a for-iterator-construction.</p>

			<dl>
				<dt class="func">forge:autopop()</dt>
				<dt class="ret">(function, userdata)</dt>
					<dd>iterator function, parent container forge object</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Autopop</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">tup</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">tuple</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">autopop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">1</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">2</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">apply</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">2</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

		<!-- Forge OSC -->
		<div class="api-section">
		<h2 id="forge-osc">OSC</h2>
		<p>Atom types that contain Open Sound Control bundles or messages as part of their body.</p>
		</div>

			<!-- Forge Bundle -->
			<div class="api-section">
			<h3 id="forge-bundle">Bundle</h3>
			<p>Forge a OSC bundle atom, e.g. an atom object of type OSC.Bundle.</p>

			<dl>
				<dt class="func">forge:bundle(timestamp=1)</dt>
				<dt>timestamp (integer | number)</dt>
					<dd>absolute timestamp in frames (integer) or relative timestamp (number) in seconds, defaults to 1 aka immediate</dd>
				<dt class="ret">(userdata)</dt>
					<dd>derived container forge object, needs to be finalized with <a href="#forge-pop">Pop</a></dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Bundle</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">stash_tuple</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- schedule bundle for immediate dispatch</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">bndl</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">bundle</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- create derived container forge object</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">bndl</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">message</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'/hello'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'s'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'world'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">bndl</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- finalize container</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">-- schedule bundle for dispatch @ Sep 19, 2016 02.09.16.015811000 UTC</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">bndl</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">bundle</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0xdb89c74c040c3199</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">bndl</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">message</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'/hello'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'s'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'world'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">bndl</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">-- schedule bundle for dispatch in 0.1s</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">bndl</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">bundle</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.1</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">bndl</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">message</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'/hello'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'s'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'world'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">bndl</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Forge Message -->
			<div class="api-section">
			<h3 id="forge-message">Message</h3>
			<p>Forge a OSC message atom, e.g. an atom object of type OSC.Message.
			Supported OSC argument types are: 'i', 'f', 's', 'b', 'h', 'd', 't',
			'm', 'S', 'c', 'r', 'T', 'F', 'N', 'I'</p>

			<dl>
				<dt class="func">forge:message(path, format, ...)</dt>
				<dt>path (string)</dt>
					<dd>OSC path as string</dd>
				<dt>format (string)</dt>
					<dd>OSC format as string</dd>
				<dt>... (integer | number | string)</dt>
					<dd>variable arguments according to format</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Message</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- schedule bundle for immediate dispatch</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">bndl</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">bundle</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- create derived container forge object</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">bndl</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">message</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'/hello'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'ifs'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">2016</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">12.5</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'hello'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">bndl</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">message</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'/hello'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'b'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">string</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">char</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0x1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x3</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">bndl</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">message</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'/hello'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'hdS'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">2017</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">13.5</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Param</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">sampleRate</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">bndl</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">message</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'/hello'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'t'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0xdb89c74c040c3199</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">bndl</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">message</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'/hello'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'TFNI'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">bndl</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">message</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'/hello'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'m'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">string</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">char</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">MIDI</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">NoteOn</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">69</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x7f</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">bndl</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">message</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'/hello'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'cr'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">string</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">byte</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'s'</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0xff00ff00</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">bndl</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- finalize container)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

				<!-- Forge Impulse -->
				<div class="api-section">
				<h4 id="forge-impulse">Impulse</h4>
				<p>Forge Impulse argument of OSC message.</p>

				<dl>
					<dt class="func">forge:impulse()</dt>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>
				</div>

				<!-- Forge Char -->
				<div class="api-section">
				<h4 id="forge-char">Char</h4>
				<p>Forge Char argument of OSC message.</p>

				<dl>
					<dt class="func">forge:char(ch)</dt>
					<dt>ch (integer)</dt>
						<dd>character as integer</dd>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>
				</div>

				<!-- Forge RGBA -->
				<div class="api-section">
				<h4 id="forge-rgba">RGBA</h4>
				<p>Forge RGBA color argument of OSC message.</p>

				<dl>
					<dt class="func">forge:rgba(col)</dt>
					<dt>col (integer)</dt>
						<dd>color as 32-bit unsigned integer</dd>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>
				</div>

				<!-- Forge Timetag -->
				<div class="api-section">
				<h4 id="forge-timetag">Timetag</h4>
				<p>Forge Timetag argument of OSC message.</p>

				<dl>
					<dt class="func">forge:timetag(timestamp)</dt>
					<dt>timestamp (integer | number)</dt>
						<dd>absolute timestamp in frames (integer) or relative timestamp (number) in seconds, defaults to 1 aka immediate</dd>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge custom OSC arguments</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">obj</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">object</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">OSC</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Message</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">autopop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">obj</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">key</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">OSC</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">messagePath</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">string</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'/custom'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">tup</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">obj</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">key</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">OSC</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">messageArguments</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">tuple</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">autopop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
      </span><span style="color:#555555;">-- forge 'i', 'f', 's', 'b' OSC arguments</span><span style="color:#dddddd;">
      </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- 'i'nteger</span><span style="color:#dddddd;">
      </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">float</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">1.5</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- 'f'loat</span><span style="color:#dddddd;">
      </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">string</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'foo'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- 's'tring</span><span style="color:#dddddd;">
      </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">chunk</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">string</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">char</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0x1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x2</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- 'b'lob</span><span style="color:#dddddd;">

      </span><span style="color:#555555;">-- forge 'h', 'd', 't' OSC arguments</span><span style="color:#dddddd;">
      </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">long</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">13</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- 'h'</span><span style="color:#dddddd;">
      </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">double</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">1.6</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- 'd'ouble</span><span style="color:#dddddd;">
      </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">timetag</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.1</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- 't', 100ms from now</span><span style="color:#dddddd;">

      </span><span style="color:#555555;">-- forge 'N', 'I', 'T', 'F' OSC arguments</span><span style="color:#dddddd;">
      </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">raw</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- empty atom, 'N'il</span><span style="color:#dddddd;">
      </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">impulse</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- 'I'mpulse</span><span style="color:#dddddd;">
      </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">bool</span><span style="color:#ffffff;">(</span><span style="color:#ff6600;">true</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- 'T'rue</span><span style="color:#dddddd;">
      </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">bool</span><span style="color:#ffffff;">(</span><span style="color:#ff6600;">false</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- 'F'alse</span><span style="color:#dddddd;">

      </span><span style="color:#555555;">-- forge 'c', 'r', 'm', 'S' OSC arguments</span><span style="color:#dddddd;">
      </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">char</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">string</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">byte</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'c'</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- 'c'char</span><span style="color:#dddddd;">
      </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">rgba</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0xbb0000ff</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- reddish, 'r'gba</span><span style="color:#dddddd;">
      </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">midi</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">MIDI</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">NoteOn</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Note</span><span style="color:#ffffff;">[</span><span style="color:#58c554;">'C-0'</span><span style="color:#ffffff;">]</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">64</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- 'm'idi</span><span style="color:#dddddd;">
      </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">urid</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Param</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">sampleRate</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- 'S'ymbol</span><span style="color:#dddddd;">
    </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

		<!-- Forge Patch -->
		<div class="api-section">
		<h2 id="forge-patch-patch">Patch</h2>
		<p>Atom types that contain Patch messages as part of their body.</p>
		</div>

			<!-- Forge Patch-->
			<div class="api-section">
			<h3 id="forge-patch">Patch</h3>
			<p>Forge a patch patch atom, e.g. an atom object of type Patch.Patch.</p>

			<dl>
				<dt class="func">forge:patch(subject=0, sequenceNumber=0)</dt>
				<dt>subject (integer)</dt>
					<dd>patch subject as integer URID, defaults to 0</dd>
				<dt>sequenceNumber (integer)</dt>
					<dd>patch sequence number as integer, defaults to 0</dd>
				<dt class="ret">(userdata)</dt>
					<dd>derived container forge object, needs to be finalized with <a href="#forge-pop">Pop</a></dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Patch</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'urn:uuid:29f87e4f-fa45-4f91-aa88-767053006a0d#'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">patch</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">patch</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">subj</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1002</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- with subject and sequence number</span><span style="color:#dddddd;">

    </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">rem</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">patch</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">remove</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- equivalent to patch:object(Patch.remove)</span><span style="color:#dddddd;">
      </span><span style="color:#dddddd;">rem</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">key</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">foo</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">urid</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">wildcard</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
      </span><span style="color:#dddddd;">rem</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">key</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">bar</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">urid</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">wildcard</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">rem</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

    </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">add</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">patch</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">add</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- equivalent to patch:object(Patch.add)</span><span style="color:#dddddd;">
      </span><span style="color:#dddddd;">add</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">key</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">foo</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
      </span><span style="color:#dddddd;">add</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">key</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">bar</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">float</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12.5</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">add</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

  </span><span style="color:#dddddd;">patch</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

				<!-- Forge Add -->
				<div class="api-section">
				<h4 id="forge-add">Add</h4>
				<p>Forge add property of patch property.</p>

				<dl>
					<dt class="func">forge:add()</dt>
					<dt class="ret">(userdata)</dt>
						<dd>derived container forge object, needs to be finalized with <a href="#forge-pop">Pop</a></dd>
				</dl>
				</div>

				<!-- Forge Add -->
				<div class="api-section">
				<h4 id="forge-remove">Remove</h4>
				<p>Forge remove property of patch property.</p>

				<dl>
					<dt class="func">forge:remove()</dt>
					<dt class="ret">(userdata)</dt>
						<dd>derived container forge object, needs to be finalized with <a href="#forge-pop">Pop</a></dd>
				</dl>
				</div>

			<!-- Forge Get -->
			<div class="api-section">
			<h3 id="forge-get">Get</h3>
			<p>Forge a patch get atom, e.g. an atom object of type Patch.Get.</p>

			<dl>
				<dt class="func">forge:get(property, subject=0, sequenceNumber=0)</dt>
				<dt>property (integer)</dt>
					<dd>patch property as integer URID</dd>
				<dt>subject (integer)</dt>
					<dd>patch subject as integer URID, defaults to 0</dd>
				<dt>sequenceNumber (integer)</dt>
					<dd>patch sequence number as integer, defaults to 0</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self container object</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Get</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'urn:uuid:5b172c1f-9152-4d4e-ad68-84965792b931#'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">stash_tuple</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">get</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">prop</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- without subject and sequence number</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">get</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">prop</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">nil</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1001</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- without subject</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">get</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">prop</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">subj</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1002</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- with subject and sequence number</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Forge Set -->
			<div class="api-section">
			<h3 id="forge-set">Set</h3>
			<p>Forge a patch set atom, e.g. an atom object of type Patch.Set.</p>

			<dl>
				<dt class="func">forge:set(property, subject=0, sequenceNumber=0)</dt>
				<dt>property (integer)</dt>
					<dd>patch property as integer URID</dd>
				<dt>subject (integer)</dt>
					<dd>patch subject as integer URID, defaults to 0</dd>
				<dt>sequenceNumber (integer)</dt>
					<dd>patch sequence number as integer, defaults to 0</dd>
				<dt class="ret">(userdata)</dt>
					<dd>derived container forge object, needs to be finalized with <a href="#forge-pop">Pop</a></dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Set</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'urn:uuid:29c714c1-0c7b-4434-81d6-82ee8a4d64b8#'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">stash_tuple</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">set</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">set</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">prop</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- without subject and sequence number</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">set</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">set</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

  </span><span style="color:#dddddd;">set</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">set</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">prop</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">subj</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1002</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- with subject and sequence number</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">set</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">float</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">set</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Forge Put -->
			<div class="api-section">
			<h3 id="forge-put">Put</h3>
			<p>Forge a patch put atom, e.g. an atom object of type Patch.Put.</p>

			<dl>
				<dt class="func">forge:put(subject=0, sequenceNumber=0)</dt>
				<dt>subject (integer)</dt>
					<dd>patch subject as integer URID, defaults to 0</dd>
				<dt>sequenceNumber (integer)</dt>
					<dd>patch sequence number as integer, defaults to 0</dd>
				<dt class="ret">(userdata)</dt>
					<dd>derived container forge object, needs to be finalized with <a href="#forge-pop">Pop</a></dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Put</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'urn:uuid:dabe2235-2405-46e6-a26c-90dbe34d9bf3#'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">stash_tuple</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">put</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">put</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- without subject and sequence number</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">put</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">key</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">foo</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">put</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">key</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">bar</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">float</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12.5</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">put</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

  </span><span style="color:#dddddd;">put</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">put</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">subj</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1002</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- with subject and sequence number</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">put</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">key</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">foo</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">put</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">key</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">bar</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">float</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12.5</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">put</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Forge Ack -->
			<div class="api-section">
			<h3 id="forge-ack">Ack</h3>
			<p>Forge an ack patch atom, e.g. an atom object of type Patch.Ack.</p>

			<dl>
				<dt class="func">forge:ack(subject=0, sequenceNumber=0)</dt>
				<dt>subject (integer)</dt>
					<dd>patch subject as integer URID, defaults to 0</dd>
				<dt>sequenceNumber (integer)</dt>
					<dd>patch sequence number as integer, defaults to 0</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Ack</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'urn:uuid:f35c0f85-5b7f-4434-912d-8bf982711b30#'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">ack</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">subj</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1002</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- with subject and sequence number</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Forge Error -->
			<div class="api-section">
			<h3 id="forge-error">Error</h3>
			<p>Forge an error patch atom, e.g. an atom object of type Patch.Error.</p>

			<dl>
				<dt class="func">forge:error(subject=0, sequenceNumber=0)</dt>
				<dt>subject (integer)</dt>
					<dd>patch subject as integer URID, defaults to 0</dd>
				<dt>sequenceNumber (integer)</dt>
					<dd>patch sequence number as integer, defaults to 0</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Error</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'urn:uuid:93ea103c-75ff-47e2-b89b-fc79173bedee#'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">error</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">subj</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1002</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- with subject and sequence number</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Forge Delete -->
			<div class="api-section">
			<h3 id="forge-delete">Delete</h3>
			<p>Forge a delete patch atom, e.g. an atom object of type Patch.Delete.</p>

			<dl>
				<dt class="func">forge:delete(subject, sequenceNumber=0)</dt>
				<dt>subject (integer)</dt>
					<dd>patch subject as integer URID</dd>
				<dt>sequenceNumber (integer)</dt>
					<dd>patch sequence number as integer, defaults to 0</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Delete</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'urn:uuid:cea077fc-b822-4143-b5c5-34c0f7d9f016#'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">delete</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">subj</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1002</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- with sequence number</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Forge Copy -->
			<div class="api-section">
			<h3 id="forge-copy">Copy</h3>
			<p>Forge a copy patch atom, e.g. an atom object of type Patch.Copy.</p>

			<dl>
				<dt class="func">forge:copy(subject, destination, sequenceNumber=0)</dt>
				<dt>subject (integer)</dt>
					<dd>patch subject as integer URID</dd>
				<dt>destination (integer)</dt>
					<dd>patch destination as integer URID</dd>
				<dt>sequenceNumber (integer)</dt>
					<dd>patch sequence number as integer, defaults to 0</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Copy</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'urn:uuid:3d4de1a6-a5fa-463d-a59c-c7778a6b18e9#'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">copy</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">subj</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">dest</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1002</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- with sequence number</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Forge Move -->
			<div class="api-section">
			<h3 id="forge-move">Move</h3>
			<p>Forge a move patch atom, e.g. an atom object of type Patch.Move.</p>

			<dl>
				<dt class="func">forge:move(subject, destination, sequenceNumber=0)</dt>
				<dt>subject (integer)</dt>
					<dd>patch subject as integer URID</dd>
				<dt>destination (integer)</dt>
					<dd>patch destination as integer URID</dd>
				<dt>sequenceNumber (integer)</dt>
					<dd>patch sequence number as integer, defaults to 0</dd>
				<dt class="ret">(userdata)</dt>
					<dd>self forge object</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Move</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'urn:uuid:6370dea9-a41a-4347-80f0-75d9fcccc28a#'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">move</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">subj</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">dest</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1002</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- with sequence number</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Forge Insert -->
			<div class="api-section">
			<h3 id="forge-insert">Insert</h3>
			<p>Forge a patch insert atom, e.g. an atom object of type Patch.Insert.</p>

			<dl>
				<dt class="func">forge:insert(subject=0, sequenceNumber=0)</dt>
				<dt>subject (integer)</dt>
					<dd>patch subject as integer URID, defaults to 0</dd>
				<dt>sequenceNumber (integer)</dt>
					<dd>patch sequence number as integer, defaults to 0</dd>
				<dt class="ret">(userdata)</dt>
					<dd>derived container forge object, needs to be finalized with <a href="#forge-pop">Pop</a></dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Forge Insert</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'urn:uuid:16e7ed0d-20ee-45ef-8268-ed931a998a4f#'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">stash_tuple</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">insert</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">insert</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- without subject and sequence number</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">insert</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">key</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">foo</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">insert</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">key</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">bar</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">float</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12.5</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">insert</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

  </span><span style="color:#dddddd;">insert</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">insert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">subj</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1002</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- with subject and sequence number</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">insert</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">key</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">foo</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">insert</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">key</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">bar</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">float</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12.5</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">insert</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

		<!-- Forge Canvas -->
		<div class="api-section">
		<h2 id="forge-canvas">Canvas</h2>
		<p>Atom types that contain Canvas messages as part of their body.
			Modeled after the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API">HTML5 Canvas API</a>.
			But the vector drawing instructions into an atom:Tuple and store it as property Canvas:graph.
		</div>

				<!-- Forge BeginPath -->
				<div class="api-section">
				<h3 id="forge-beginPath">BeginPath</h3>
				<p>Forge an atom object of type Canvas.BeginPath. Manually begin a new path.
					Not needed for instructions that inherently begin a new path by themeselves:
					Canvas.MoveTo, Canvas.Arc, Canvas.Rectangle.</p>

				<dl>
					<dt class="func">forge:beginPath()</dt>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge BeginPath</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">beginPath</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

				<!-- Forge ClosePath -->
				<div class="api-section">
				<h3 id="forge-closePath">ClosePath</h3>
				<p>Forge an atom object of type Canvas.ClosePath. Close a previously begun path.</p>

				<dl>
					<dt class="func">forge:closePath()</dt>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge ClosePath</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">closePath</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

				<!-- Forge Arc -->
				<div class="api-section">
				<h3 id="forge-arc">Arc</h3>
				<p>Forge an atom object of type Canvas.Arc. Create an Arc structure.</p>

				<dl>
					<dt class="func">forge:arc(x, y, r, a=0, b=2*Pi)</dt>
					<dt>x (number)</dt>
						<dd>x coordinate of center</dd>
					<dt>y (number)</dt>
						<dd>y coordinate of center</dd>
					<dt>r (number)</dt>
						<dd>radius</dd>
					<dt>a (number)</dt>
						<dd>starting angle in radians, defaults to 0</dd>
					<dt>b (number)</dt>
						<dd>ending angle in radians, defaults to 2*Pi</dd>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge Arc</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">arc</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.5</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.5</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.1</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">stroke</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">arc</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.5</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.5</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">math</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">pi</span><span style="color:#cc0000;">/</span><span style="color:#fbfb00;">4</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">math</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">pi</span><span style="color:#cc0000;">/</span><span style="color:#fbfb00;">2</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">stroke</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

				<!-- Forge CurveTo -->
				<div class="api-section">
				<h3 id="forge-curveTo">CurveTo</h3>
				<p>Forge an atom object of type Canvas.CurveTo. Append a spline curve segment to path.</p>

				<dl>
					<dt class="func">forge:curveTo(x1, y1, x2, y2, x3, y3)</dt>
					<dt>x1 (number)</dt>
						<dd>x coordinate of spline point 1</dd>
					<dt>y1 (number)</dt>
						<dd>y1 coordinate of spline point 1</dd>
					<dt>x2 (number)</dt>
						<dd>x coordinate of spline point 2</dd>
					<dt>y2 (number)</dt>
						<dd>y2 coordinate of spline point 2</dd>
					<dt>x3 (number)</dt>
						<dd>x coordinate of spline point 3</dd>
					<dt>y3 (number)</dt>
						<dd>y3 coordinate of spline point 3</dd>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge CurveTo</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">beginPath</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">moveTo</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.0</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">curveTo</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.4</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.3</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.9</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">closePath</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">stroke</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

				<!-- Forge LineTo -->
				<div class="api-section">
				<h3 id="forge-lineTo">LineTo</h3>
				<p>Forge an atom object of type Canvas.LineTo. Append line segment to path.</p>

				<dl>
					<dt class="func">forge:lineTo(x, y)</dt>
					<dt>x (number)</dt>
						<dd>x coordinate of line point</dd>
					<dt>y (number)</dt>
						<dd>y coordinate of line point</dd>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge LineTo </span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">beginPath</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">moveTo</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.0</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">lineTo</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">1.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1.0</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">closePath</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">stroke</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

				<!-- Forge MoveTo -->
				<div class="api-section">
				<h3 id="forge-moveTo">MoveTo</h3>
				<p>Forge an atom object of type Canvas.MoveTo. Move to given point and begin new path.</p>

				<dl>
					<dt class="func">forge:moveTo(x, y)</dt>
					<dt>x (number)</dt>
						<dd>x coordinate of point</dd>
					<dt>y (number)</dt>
						<dd>y coordinate of point</dd>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge MoveTo</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">moveTo</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

				<!-- Forge Rectangle -->
				<div class="api-section">
				<h3 id="forge-rectangle">Rectangle</h3>
				<p>Forge an atom object of type Canvas.Rectangle. Create rectangle.</p>

				<dl>
					<dt class="func">forge:rectangle(x, y, w, h)</dt>
					<dt>x (number)</dt>
						<dd>x coordinate of top left point</dd>
					<dt>y (number)</dt>
						<dd>y coordinate of top left point</dd>
					<dt>w (number)</dt>
						<dd>width of rectangle</dd>
					<dt>h (number)</dt>
						<dd>height of rectangle</dd>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge Rectangle</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">rectangle</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.8</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.8</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">fill</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

				<!-- Forge PolyLine -->
				<div class="api-section">
				<h3 id="forge-polyLine">PolyLine</h3>
				<p>Forge an atom object of type Canvas.PolyLine. Create polyline.</p>

				<dl>
					<dt class="func">forge:polyLine(x1, y1, ...)</dt>
					<dt>x1 (number)</dt>
						<dd>x coordinate of first point</dd>
					<dt>y1 (number)</dt>
						<dd>y coordinate of first poine</dd>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge PolyLine</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">beginPath</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">polyLine</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.9</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.5</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.9</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">closePath</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">fill</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

				<!-- Forge Style -->
				<div class="api-section">
				<h3 id="forge-style">Style</h3>
				<p>Forge an atom object of type Canvas.Style. Set current stroke and fill color.</p>

				<dl>
					<dt class="func">forge:style(color)</dt>
					<dt>color (integer)</dt>
						<dd>color in ARGB format</dd>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge Style</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">rectangle</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">style</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0xffffffff</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">fill</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- opaque white</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">rectangle</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">style</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0xff0000ff</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">fill</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- opaque red</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">rectangle</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.3</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.3</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">style</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0x00ff0080</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">fill</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- half-transparent green</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

				<!-- Forge LineWidth -->
				<div class="api-section">
				<h3 id="forge-lineWidth">LineWidth</h3>
				<p>Forge an atom object of type Canvas.LineWidth. Set current line width.</p>

				<dl>
					<dt class="func">forge:lineWidth(width)</dt>
					<dt>width (number)</dt>
						<dd>line width</dd>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge LineWidth</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">rectangle</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">lineWidth</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.01</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">stroke</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">rectangle</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">lineWidth</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.04</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">stroke</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

				<!-- Forge LineDash -->
				<div class="api-section">
				<h3 id="forge-lineDash">LineDash</h3>
				<p>Forge an atom object of type Canvas.LineDash. Set current line dash style.</p>

				<dl>
					<dt class="func">forge:lineDash(dashLen, spaceLen)</dt>
					<dt>dashLen (number)</dt>
						<dd>length of dash lines</dd>
					<dt>spaceLen (number)</dt>
						<dd>length of space between dash lines</dd>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge LineDash</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">rectangle</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">lineDash</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.01</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.01</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">stroke</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">rectangle</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">lineDash</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.01</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.04</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">stroke</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

				<!-- Forge LineCap -->
				<div class="api-section">
				<h3 id="forge-lineCap">LineCap</h3>
				<p>Forge an atom object of type Canvas.LineCap. Set current line cap style.</p>

				<dl>
					<dt class="func">forge:lineCap(cap)</dt>
					<dt>cap (integer)</dt>
						<dd>line cap type URID: Canvas.lineCapButt, Canvas.lineCapRound, Canvas.lineCapSquare</dd>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge LineCap</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">tri</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">x</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">y</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">s</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">cap</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">moveTo</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">x</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">y</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">lineTo</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">x</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">+</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">s</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">y</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">lineTo</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">x</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">+</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">s</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">y</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">+</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">s</span><span style="color:#cc0000;">/</span><span style="color:#fbfb00;">2</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">lineCap</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">cap</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">stroke</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">lineWidth</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.05</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">tri</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.3</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.4</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Canvas</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">lineCapButt</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">tri</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.4</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Canvas</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">lineCapRound</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">tri</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.3</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.4</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Canvas</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">lineCapSquare</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

				<!-- Forge LineJoin -->
				<div class="api-section">
				<h3 id="forge-lineJoin">LineJoin</h3>
				<p>Forge an atom object of type Canvas.LineJoin. Set current line join style.</p>

				<dl>
					<dt class="func">forge:lineJoin(join)</dt>
					<dt>join (integer)</dt>
						<dd>line join type URID: Canvas.lineJoinMiter, Canvas.lineJoinRound, Canvas.lineJoinBevel</dd>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge LineJoin</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">tri</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">x</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">y</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">s</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">join</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">moveTo</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">x</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">y</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">lineTo</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">x</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">+</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">s</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">y</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">lineTo</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">x</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">+</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">s</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">y</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">+</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">s</span><span style="color:#cc0000;">/</span><span style="color:#fbfb00;">2</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">lineJoin</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">join</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">stroke</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">lineWidth</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.05</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">tri</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.3</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.4</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Canvas</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">lineJoinMiter</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">tri</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.4</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Canvas</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">lineJoinRound</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">tri</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.3</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.4</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Canvas</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">lineJoinBevel</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

				<!-- Forge MiterLimit -->
				<div class="api-section">
				<h3 id="forge-miterLimit">MiterLimit</h3>
				<p>Forge an atom object of type Canvas.MiterLimit. Set current line join miter limit.</p>

				<dl>
					<dt class="func">forge:miterLimit(limit)</dt>
					<dt>limit (number)</dt>
						<dd>miter limit</dd>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge MiterLimit</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">tri</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">x</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">y</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">s</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">limit</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">moveTo</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">x</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">y</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">lineTo</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">x</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">+</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">s</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">y</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">lineTo</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">x</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">+</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">s</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">y</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">+</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">s</span><span style="color:#cc0000;">/</span><span style="color:#fbfb00;">2</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">lineJoin</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Canvas</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">lineJoinMiter</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">miterLimit</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">limit</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">stroke</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">lineWidth</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.05</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">tri</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.3</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.4</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1.0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">tri</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.4</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">2.0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

				<!-- Forge Stroke -->
				<div class="api-section">
				<h3 id="forge-stroke">Stroke</h3>
				<p>Forge an atom object of type Canvas.Stroke. Stroke current path.</p>

				<dl>
					<dt class="func">forge:stroke()</dt>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge Stroke</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">rectangle</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1.0</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">stroke</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

				<!-- Forge Fill -->
				<div class="api-section">
				<h3 id="forge-fill">Fill</h3>
				<p>Forge an atom object of type Canvas.Fill. Fill current path.</p>

				<dl>
					<dt class="func">forge:fill()</dt>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge Fill</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">rectangle</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1.0</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">fill</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

				<!-- Forge Clip -->
				<div class="api-section">
				<h3 id="forge-clip">Clip</h3>
				<p>Forge an atom object of type Canvas.Clip. Set current path as clip mask.</p>

				<dl>
					<dt class="func">forge:clip()</dt>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge Clip</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">save</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">arc</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.25</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.25</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.25</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">clip</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">rectangle</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.25</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.25</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.5</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.5</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">fill</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">restore</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

				<!-- Forge Save -->
				<div class="api-section">
				<h3 id="forge-save">Save</h3>
				<p>Forge an atom object of type Canvas.Save. Push/save current state.</p>

				<dl>
					<dt class="func">forge:save()</dt>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge Save</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">save</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">translate</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.5</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.5</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">rotate</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">math</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">pi</span><span style="color:#cc0000;">/</span><span style="color:#fbfb00;">4</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">rectangle</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">-0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">-0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">stroke</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">restore</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">rectangle</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.4</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.4</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">stroke</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

				<!-- Forge Restore -->
				<div class="api-section">
				<h3 id="forge-restore">Restore</h3>
				<p>Forge an atom object of type Canvas.Restore. Pop/restore previously saved state.</p>

				<dl>
					<dt class="func">forge:restore()</dt>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge Restore</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">save</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">translate</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.5</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.5</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">rotate</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">math</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">pi</span><span style="color:#cc0000;">/</span><span style="color:#fbfb00;">4</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">rectangle</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">-0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">-0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">stroke</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">restore</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">rectangle</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.4</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.4</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">stroke</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

				<!-- Forge Translate -->
				<div class="api-section">
				<h3 id="forge-translate">Translate</h3>
				<p>Forge an atom object of type Canvas.Translate. Translate current render matrix.</p>

				<dl>
					<dt class="func">forge:translate(tx, ty)</dt>
					<dt>tx (number)</dt>
						<dd>x coordinate offset of translocation</dd>
					<dt>ty (number)</dt>
						<dd>y coordinate offset of translocation</dd>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge Translate</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">save</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">translate</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.4</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.4</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">rectangle</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">fill</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">restore</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

				<!-- Forge Scale -->
				<div class="api-section">
				<h3 id="forge-scale">Scale</h3>
				<p>Forge an atom object of type Canvas.Scale. Scale current render matrix.</p>

				<dl>
					<dt class="func">forge:scale(sx, sy)</dt>
					<dt>sx (number)</dt>
						<dd>x coordinate scaling factor</dd>
					<dt>sy (number)</dt>
						<dd>y coordinate scaling factor</dd>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge Scale</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">save</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">scale</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">2.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">2.0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">rectangle</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.5</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.5</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">fill</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">restore</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

				<!-- Forge Rotate -->
				<div class="api-section">
				<h3 id="forge-rotate">Rotate</h3>
				<p>Forge an atom object of type Canvas.Rotate. Rotate current render matrix.</p>

				<dl>
					<dt class="func">forge:rotate(a)</dt>
					<dt>a (number)</dt>
						<dd>angle of rotation in radians</dd>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge Rotate</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">save</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">translate</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.4</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.4</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">rotate</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">math</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">pi</span><span style="color:#cc0000;">/</span><span style="color:#fbfb00;">4</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- rotate by 45 degrees</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">rectangle</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">-0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">-0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">fill</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">restore</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

				<!-- Forge Transform -->
				<div class="api-section">
				<h3 id="forge-transform">Transform</h3>
				<p>Forge an atom object of type Canvas.Transform. Set current render matrix.</p>

				<dl>
					<dt class="func">forge:transform(a)</dt>
					<dt>xx (number)</dt>
						<dd>multiplier for x in: x' = xx*x + xy*y + x0</dd>
					<dt>xy (number)</dt>
						<dd>multiplier for y in: x' = xx*x + xy*y + x0</dd>
					<dt>x0 (number)</dt>
						<dd>constant in: x' = xx*x + xy*y + x0</dd>
					<dt>yx (number)</dt>
						<dd>multiplier for y in: y' = yy*y + yx*x + y0</dd>
					<dt>yx (number)</dt>
						<dd>multiplier for x in: y' = yy*y + yx*x + y0</dd>
					<dt>y0 (number)</dt>
						<dd>constant in: y' = yy*y + yx*x + y0</dd>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge Transform</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">save</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">transform</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">-1.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- mirror on x-asix</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">rectangle</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">-0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">-0.1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">fill</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">restore</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

				<!-- Forge Reset -->
				<div class="api-section">
				<h3 id="forge-reset">Reset</h3>
				<p>Forge an atom object of type Canvas.Reset. Reset current render matrix to identity configuration.</p>

				<dl>
					<dt class="func">forge:reset()</dt>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge Reset</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">translate</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.4</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.4</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">rectangle</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">fill</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">reset</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">rectangle</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.2</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">fill</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

				<!-- Forge FontSize -->
				<div class="api-section">
				<h3 id="forge-fontSize">FontSize</h3>
				<p>Forge an atom object of type Canvas.FontSize. Set font size.</p>

				<dl>
					<dt class="func">forge:fontSize(size)</dt>
					<dt>size (number)</dt>
						<dd>size of font</dd>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge FontSize</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">moveTo</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.5</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.5</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">fontSize</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.1</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">fillText</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'Hello'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

				<!-- Forge FillText -->
				<div class="api-section">
				<h3 id="forge-fillText">FillText</h3>
				<p>Forge an atom object of type Canvas.FillText. Fill/draw text at current position.</p>

				<dl>
					<dt class="func">forge:fillText(text)</dt>
					<dt>text (string)</dt>
						<dd>text to fill/draw</dd>
					<dt class="ret">(userdata)</dt>
						<dd>self forge object</dd>
				</dl>

				<pre><code><span style="color:#555555;">-- Forge FillText</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">moveTo</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.5</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.5</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">fontSize</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.1</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">style</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0xff0000ff</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">fillText</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'Hello'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
				</div>

	<div class="api-section">
	<h1 id="atom">Atom</h1>
	<p>Instead of deserializing all LV2 event data to corresponding Lua types,
	Moony instead presents a proxy object to the user in form of a Lua userdata.
	This is needed because there are more LV2 atom types than native Lua types.
	It turns out to be more efficient, too, as the user usually wants to filter
	events before looking at their payload.</p>

	<p>All atom types have some common attributes they can be queried for:</p>

	<dl>
		<dt class="attr">atom.__len | #atom</dt>
		<dt class="ret">(integer)</dt>
			<dd>size of atom body</dd>
	</dl>

	<dl>
		<dt class="attr">atom.type</dt>
		<dt class="ret">(integer)</dt>
			<dd>URID of atom type</dd>
	</dl>

	<dl>
		<dt class="attr">atom.raw</dt>
		<dt class="ret">(string)</dt>
			<dd>raw byte string of atom body</dd>
	</dl>

	<dl>
		<dt class="func">atom.__tostring | tostring(atom)</dt>
		<dt class="ret">(string)</dt>
			<dd>string representation of atom</dd>
	</dl>
	</div>

		<!-- Atom Primitive -->
		<div class="api-section">
		<h2 id="atom-primitive">Primitive</h2>
		<p>Atom types that contain single data as part of their body are referred to
		as primitives.</p>
		</div>

			<!-- Atom Nil -->
			<div class="api-section">
			<h3 id="atom-nil">Nil</h3>
			<p>An empty atom, e.g. of type and size 0.</p>

			<dl>
				<dt class="attr">nil.__len | #nil</dt>
				<dt class="ret">(integer)</dt>
					<dd>size of atom body</dd>
			</dl>

			<dl>
				<dt class="attr">nil.type</dt>
				<dt class="ret">(integer)</dt>
					<dd>URID of atom type</dd>
			</dl>

			<dl>
				<dt class="attr">nil.body</dt>
				<dt class="ret">(nil)</dt>
					<dd>atom body as Lua nil</dd>
			</dl>

			<dl>
				<dt class="func">nil.__tostring | tostring(nil)</dt>
				<dt class="ret">(string)</dt>
					<dd>string representation of atom</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Atom Nil</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- serialize</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">apply</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- attributes</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query size of atom body</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">print</span><span style="color:#ffffff;">(</span><span style="color:#00aeef;">tostring</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- convert to string</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query type of atom</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">nil</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- get atom body</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Atom Bool -->
			<div class="api-section">
			<h3 id="atom-bool">Bool</h3>
			<p>A boolean atom, e.g. of type Atom.Bool and size 4.</p>

			<dl>
				<dt class="attr">bool.__len | #bool</dt>
				<dt class="ret">(integer)</dt>
					<dd>size of atom body</dd>
			</dl>

			<dl>
				<dt class="attr">bool.type</dt>
				<dt class="ret">(integer)</dt>
					<dd>URID of atom type</dd>
			</dl>

			<dl>
				<dt class="attr">bool.body</dt>
				<dt class="ret">(boolean)</dt>
					<dd>atom body as Lua boolean</dd>
			</dl>

			<dl>
				<dt class="func">bool.__tostring | tostring(bool)</dt>
				<dt class="ret">(string)</dt>
					<dd>string representation of atom</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Atom Bool</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- serialize</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">bool</span><span style="color:#ffffff;">(</span><span style="color:#ff6600;">true</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">apply</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- attributes</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">4</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query size of atom body</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">print</span><span style="color:#ffffff;">(</span><span style="color:#00aeef;">tostring</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- convert to string</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Bool</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query type of atom</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">true</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- get atom body</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Atom Int -->
			<div class="api-section">
			<h3 id="atom-int">Int</h3>
			<p>An integer atom, e.g. of type Atom.Int and size 4.</p>

			<dl>
				<dt class="attr">int.__len | #int</dt>
				<dt class="ret">(integer)</dt>
					<dd>size of atom body</dd>
			</dl>

			<dl>
				<dt class="attr">int.type</dt>
				<dt class="ret">(integer)</dt>
					<dd>URID of atom type</dd>
			</dl>

			<dl>
				<dt class="attr">int.body</dt>
				<dt class="ret">(integer)</dt>
					<dd>atom body as Lua integer</dd>
			</dl>

			<dl>
				<dt class="func">int.__tostring | tostring(int)</dt>
				<dt class="ret">(string)</dt>
					<dd>string representation of atom</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Atom Int</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- serialize</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">apply</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- attributes</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">4</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query size of atom body</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">print</span><span style="color:#ffffff;">(</span><span style="color:#00aeef;">tostring</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- convert to string</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Int</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query type of atom</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- get atom body</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Atom Long -->
			<div class="api-section">
			<h3 id="atom-long">Long</h3>
			<p>A long integer atom, e.g. of type Atom.Long and size 8.</p>

			<dl>
				<dt class="attr">long.__len | #long</dt>
				<dt class="ret">(integer)</dt>
					<dd>size of atom body</dd>
			</dl>

			<dl>
				<dt class="attr">long.type</dt>
				<dt class="ret">(integer)</dt>
					<dd>URID of atom type</dd>
			</dl>

			<dl>
				<dt class="attr">long.body</dt>
				<dt class="ret">(integer)</dt>
					<dd>atom body as Lua integer</dd>
			</dl>

			<dl>
				<dt class="func">long.__tostring | tostring(long)</dt>
				<dt class="ret">(string)</dt>
					<dd>string representation of atom</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Atom Long</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- serialize</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">long</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">13</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">apply</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- attributes</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">8</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query size of atom body</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">print</span><span style="color:#ffffff;">(</span><span style="color:#00aeef;">tostring</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- convert to string</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Long</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query type of atom</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">13</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- get atom body</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Atom Float -->
			<div class="api-section">
			<h3 id="atom-float">Float</h3>
			<p>A single-precision float atom, e.g. of type Atom.Float and size 4.</p>

			<dl>
				<dt class="attr">float.__len | #float</dt>
				<dt class="ret">(integer)</dt>
					<dd>size of atom body</dd>
			</dl>

			<dl>
				<dt class="attr">float.type</dt>
				<dt class="ret">(integer)</dt>
					<dd>URID of atom type</dd>
			</dl>

			<dl>
				<dt class="attr">float.body</dt>
				<dt class="ret">(number)</dt>
					<dd>atom body as Lua number</dd>
			</dl>

			<dl>
				<dt class="func">float.__tostring | tostring(float)</dt>
				<dt class="ret">(string)</dt>
					<dd>string representation of atom</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Atom Float</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- serialize</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">float</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">1.5</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">apply</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- attributes</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">4</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query size of atom body</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">print</span><span style="color:#ffffff;">(</span><span style="color:#00aeef;">tostring</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- convert to string</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Float</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query type of atom</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1.5</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- get atom body</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Atom Double -->
			<div class="api-section">
			<h3 id="atom-double">Double</h3>
			<p>A double-precision float atom, e.g. of type Atom.Double and size 8.</p>

			<dl>
				<dt class="attr">double.__len | #double</dt>
				<dt class="ret">(integer)</dt>
					<dd>size of atom body</dd>
			</dl>

			<dl>
				<dt class="attr">double.type</dt>
				<dt class="ret">(integer)</dt>
					<dd>URID of atom type</dd>
			</dl>

			<dl>
				<dt class="attr">double.body</dt>
				<dt class="ret">(number)</dt>
					<dd>atom body as Lua number</dd>
			</dl>

			<dl>
				<dt class="func">double.__tostring | tostring(double)</dt>
				<dt class="ret">(string)</dt>
					<dd>string representation of atom</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Atom Double</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- serialize</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">double</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">1.6</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">apply</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- attributes</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">8</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query size of atom body</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">print</span><span style="color:#ffffff;">(</span><span style="color:#00aeef;">tostring</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- convert to string</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Double</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query type of atom</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1.6</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- get atom body</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Atom URID -->
			<div class="api-section">
			<h3 id="atom-urid">URID</h3>
			<p>An URID atom, e.g. of type Atom.URID and size 4.</p>

			<dl>
				<dt class="attr">urid.__len | #urid</dt>
				<dt class="ret">(integer)</dt>
					<dd>size of atom body</dd>
			</dl>

			<dl>
				<dt class="attr">urid.type</dt>
				<dt class="ret">(integer)</dt>
					<dd>URID of atom type</dd>
			</dl>

			<dl>
				<dt class="attr">urid.body</dt>
				<dt class="ret">(integer)</dt>
					<dd>atom body as Lua integer</dd>
			</dl>

			<dl>
				<dt class="func">urid.__tostring | tostring(urid)</dt>
				<dt class="ret">(string)</dt>
					<dd>string representation of atom</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Atom URID</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urid</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Map</span><span style="color:#ffffff;">[</span><span style="color:#58c554;">'urn:uuid:6d82e244-ee66-403f-aea1-26b3d9823820#foo'</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- serialize</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">urid</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urid</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">apply</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- attributes</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">4</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query size of atom body</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">print</span><span style="color:#ffffff;">(</span><span style="color:#00aeef;">tostring</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- convert to string</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">URID</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query type of atom</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urid</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- get atom body</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Atom URI -->
			<div class="api-section">
			<h3 id="atom-uri">URI</h3>
			<p>An URI atom, e.g. of type Atom.URI and variable size. Atom size
			denotes to string size plus zero byte terminator.</p>

			<dl>
				<dt class="attr">uri.__len | #uri</dt>
				<dt class="ret">(integer)</dt>
					<dd>size of atom body</dd>
			</dl>

			<dl>
				<dt class="attr">uri.type</dt>
				<dt class="ret">(integer)</dt>
					<dd>URID of atom type</dd>
			</dl>

			<dl>
				<dt class="attr">uri.body</dt>
				<dt class="ret">(string)</dt>
					<dd>atom body as Lua string</dd>
			</dl>

			<dl>
				<dt class="func">uri.__tostring | tostring(uri)</dt>
				<dt class="ret">(string)</dt>
					<dd>string representation of atom</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Atom URI</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">uri</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'urn:uuid:022ec18a-0a02-4a19-ad7a-a10403a0c4c3#foo'</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- serialize</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">uri</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">uri</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">apply</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- attributes</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">uri</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">+</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query size of atom body</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">print</span><span style="color:#ffffff;">(</span><span style="color:#00aeef;">tostring</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- convert to string</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">URI</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query type of atom</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">uri</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- get atom body</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Atom String -->
			<div class="api-section">
			<h3 id="atom-string">String</h3>
			<p>A string atom, e.g. of type Atom.String and variable size. Atom size
			denotes to string size plus zero byte terminator.</p>

			<dl>
				<dt class="attr">string.__len | #string</dt>
				<dt class="ret">(integer)</dt>
					<dd>size of atom body</dd>
			</dl>

			<dl>
				<dt class="attr">string.type</dt>
				<dt class="ret">(integer)</dt>
					<dd>URID of atom type</dd>
			</dl>

			<dl>
				<dt class="attr">string.body</dt>
				<dt class="ret">(string)</dt>
					<dd>atom body as Lua string</dd>
			</dl>

			<dl>
				<dt class="func">string.__tostring | tostring(string)</dt>
				<dt class="ret">(string)</dt>
					<dd>string representation of atom</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Atom String</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">str</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'hello world'</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- serialize</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">string</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">str</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">apply</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- attributes</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">str</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">+</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query size of atom body</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">print</span><span style="color:#ffffff;">(</span><span style="color:#00aeef;">tostring</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- convert to string</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">String</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query type of atom</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">str</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- get atom body</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Atom Path -->
			<div class="api-section">
			<h3 id="atom-path">Path</h3>
			<p>A path atom, e.g. of type Atom.Path and variable size. Atom size
			denotes to string size plus zero byte terminator.</p>

			<dl>
				<dt class="attr">path.__len | #path</dt>
				<dt class="ret">(integer)</dt>
					<dd>size of atom body</dd>
			</dl>

			<dl>
				<dt class="attr">path.type</dt>
				<dt class="ret">(integer)</dt>
					<dd>URID of atom type</dd>
			</dl>

			<dl>
				<dt class="attr">path.body</dt>
				<dt class="ret">(string)</dt>
					<dd>atom body as Lua string</dd>
			</dl>

			<dl>
				<dt class="func">path.__tostring | tostring(path)</dt>
				<dt class="ret">(string)</dt>
					<dd>string representation of atom</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Atom Path</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">tmp</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'/tmp/xyz'</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- serialize</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">path</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">tmp</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">apply</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- attributes</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">tmp</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">+</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query size of atom body</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">print</span><span style="color:#ffffff;">(</span><span style="color:#00aeef;">tostring</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- convert to string</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Path</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query type of atom</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">tmp</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- get atom body</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Atom Literal -->
			<div class="api-section">
			<h3 id="atom-literal">Literal</h3>
			<p>A literal atom, e.g. of type Atom.Literal and variable size. Atom size
			denotes to string size plus zero byte terminator. Atom literals may have
			either a data type or language attribute.</p>

			<dl>
				<dt class="attr">literal.__len | #literal</dt>
				<dt class="ret">(integer)</dt>
					<dd>size of atom body</dd>
			</dl>

			<dl>
				<dt class="attr">literal.type</dt>
				<dt class="ret">(integer)</dt>
					<dd>URID of atom type</dd>
			</dl>

			<dl>
				<dt class="attr">literal.body</dt>
				<dt class="ret">(string)</dt>
					<dd>atom body as Lua string</dd>
			</dl>

			<dl>
				<dt class="attr">literal.datatype</dt>
				<dt class="ret">(integer)</dt>
					<dd>URID of data type</dd>
			</dl>

			<dl>
				<dt class="attr">literal.body</dt>
				<dt class="ret">(integer)</dt>
					<dd>URID of language</dd>
			</dl>

			<dl>
				<dt class="func">literal.__tostring | tostring(literal)</dt>
				<dt class="ret">(string)</dt>
					<dd>string representation of atom</dd>
			</dl>

			<dl>
				<dt class="func">literal:unpack()</dt>
				<dt class="ret">(string, integer, integer)</dt>
					<dd>atom body as Lua string, URID of data type, URID of language</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Atom  Literal</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">lit</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'Hallo Welt'</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'urn:uuid:c2f619db-3eef-411c-82c9-ffe0df1c10fc3'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">datatype</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">datatype</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">lang</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">lang</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- serialize</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">literal</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">lit</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">datatype</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">lang</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">apply</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- attributes</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">4</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">+</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">4</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">+</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">lit</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">+</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query size of atom body</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">print</span><span style="color:#ffffff;">(</span><span style="color:#00aeef;">tostring</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- convert to string</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Literal</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query type of atom</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">datatype</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">datatype</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query datatype of literal</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">lang</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">lang</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query datatype of literal</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">lit</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- get atom body</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">-- unpacking all attributes</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">lit2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">datatype2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">lang2</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">unpack</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">lit2</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">lit</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">datatype2</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">datatype</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">lang2</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">lang</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Atom Chunk-->
			<div class="api-section">
			<h3 id="atom-chunk">Chunk</h3>
			<p>A chunk atom, e.g. of type Atom.Chunk and variable size. Atom size
			denotes to byte size of atom body.</p>

			<dl>
				<dt class="attr">chunk.__len | #chunk</dt>
				<dt class="ret">(integer)</dt>
					<dd>size of atom body</dd>
			</dl>

			<dl>
				<dt class="attr">chunk.type</dt>
				<dt class="ret">(integer)</dt>
					<dd>URID of atom type</dd>
			</dl>

			<dl>
				<dt class="attr">chunk.body</dt>
				<dt class="ret">(string)</dt>
					<dd>atom body as Lua byte string</dd>
			</dl>

			<dl>
				<dt class="func">chunk.__tostring | tostring(chunk)</dt>
				<dt class="ret">(string)</dt>
					<dd>string representation of atom</dd>
			</dl>

			<dl>
				<dt class="func">chunk:unpack(from=1, to=#chunk)</dt>
				<dt>from (nil | integer)</dt>
					<dd>start byte position to unpack from, defaults to 1</dd>
				<dt>to (nil | integer)</dt>
					<dd>end byte position to unpack from, defaults to body size<dd>
				<dt class="ret">(integer, integer, ...)</dt>
					<dd>atom body unpacked bytewise as Lua integers</dd>
			</dl>

			<dl>
				<dt class="func">chunk:__index(idx) | chunk[idx]</dt>
				<dt>idx (integer)</dt>
					<dd>byte position to query for</dd>
				<dt class="ret">(integer)</dt>
					<dd>byte at position idx of atom body as Lua integer</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Atom Chunk</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">byt</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">string</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">char</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0x1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x3</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- serialize</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">chunk</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">byt</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">apply</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- attributes</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">byt</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query size of atom body</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">print</span><span style="color:#ffffff;">(</span><span style="color:#00aeef;">tostring</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- convert to string</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Chunk</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query type of atom</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">byt</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- get atom body</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">-- unpacking all bytes</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">byt1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">byt2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">byt3</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">unpack</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- equivalent to atom:unpack(1, #atom)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">byt1</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x1</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">byt2</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x2</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">byt3</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x3</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">-- indexing individual bytes</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">[</span><span style="color:#fbfb00;">1</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x1</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">[</span><span style="color:#fbfb00;">2</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x2</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">[</span><span style="color:#fbfb00;">3</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x3</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Atom MIDI -->
			<div class="api-section">
			<h3 id="atom-midi">MIDI</h3>
			<p>A MIDI atom, e.g. of type MIDI.MidiEvent and variable size. Atom size
			denotes to byte size of atom body. A MIDI atom is an equivalent to a
			Chunk atom and thus features the same class attributes and methods.</p>

			<dl>
				<dt class="attr">midi.__len | #midi</dt>
				<dt class="ret">(integer)</dt>
					<dd>size of atom body</dd>
			</dl>

			<dl>
				<dt class="attr">midi.type</dt>
				<dt class="ret">(integer)</dt>
					<dd>URID of atom type</dd>
			</dl>

			<dl>
				<dt class="attr">midi.body</dt>
				<dt class="ret">(string)</dt>
					<dd>atom body as Lua byte string</dd>
			</dl>

			<dl>
				<dt class="func">midi.__tostring | tostring(midi)</dt>
				<dt class="ret">(string)</dt>
					<dd>string representation of atom</dd>
			</dl>

			<dl>
				<dt class="func">midi:unpack(from=1, to=#midi)</dt>
				<dt>from (nil | integer)</dt>
					<dd>start byte position to unpack from, defaults to 1</dd>
				<dt>to (nil | integer)</dt>
					<dd>end byte position to unpack from, defaults to body size<dd>
				<dt class="ret">(integer, integer, ...)</dt>
					<dd>atom body unpacked bytewise as Lua integers</dd>
			</dl>

			<dl>
				<dt class="func">midi:__index(idx) | midi[idx]</dt>
				<dt>idx (integer)</dt>
					<dd>byte position to query for</dd>
				<dt class="ret">(integer)</dt>
					<dd>byte at position idx of atom body as Lua integer</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Atom MIDI</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">byt</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">string</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">char</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">MIDI</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">NoteOn</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">69</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">64</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- serialize</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">midi</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">byt</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">apply</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- attributes</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">byt</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query size of atom body</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">print</span><span style="color:#ffffff;">(</span><span style="color:#00aeef;">tostring</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- convert to string</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">MIDI</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">MidiEvent</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query type of atom</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">byt</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- get atom body</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">-- unpack all bytes</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">byt1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">byt2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">byt3</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">unpack</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- equivalent to atom:unpack(1, #atom)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">byt1</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">MIDI</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">NoteOn</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">byt2</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">69</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">byt3</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">64</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">-- indexing individual bytes</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">[</span><span style="color:#fbfb00;">1</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">MIDI</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">NoteOn</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">[</span><span style="color:#fbfb00;">2</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">69</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">[</span><span style="color:#fbfb00;">3</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">64</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

		<div class="api-section">
		<h2 id="atom-container">Container</h2>
		<p>Atom types that contain nested atoms as part of their body are referred to
		as containers.</p>
		</div>

			<!-- Atom Sequence -->
			<div class="api-section">
			<h3 id="atom-sequence">Sequence</h3>
			<p>A Sequence atom, e.g. of type Atom.Sequence and variable size. Atom size
			denotes to number of events contained in atom body. An atom sequence
			consists of individual atom events, each with a time stamp and event
			pyaload.</p>

			<dl>
				<dt class="attr">seq.__len | #seq</dt>
				<dt class="ret">(integer)</dt>
					<dd>number of events</dd>
			</dl>

			<dl>
				<dt class="attr">seq.type</dt>
				<dt class="ret">(integer)</dt>
					<dd>URID of atom type</dd>
			</dl>

			<dl>
				<dt class="attr">seq.unit</dt>
				<dt class="ret">(integer)</dt>
					<dd>URID of event time unit</dd>
			</dl>

			<dl>
				<dt class="func">seq.__tostring | tostring(seq)</dt>
				<dt class="ret">(string)</dt>
					<dd>string representation of atom</dd>
			</dl>

			<dl>
				<dt class="func">seq:foreach()</dt>
				<dt class="ret">(integer | number, userdata)</dt>
					<dd>iterates over all atom events returning frame or beat time and event atom.</dd>
			</dl>

			<dl>
				<dt class="func">seq:foreach(...)</dt>
				<dt>... (userdata)</dt>
					<dd>additional sequence(s) to multiplex and iterate over.</dd>
				<dt class="ret">(integer | number, userdata, userdata)</dt>
					<dd>multiplexes and iterates over all atom events from all sequences returning frame or beat time, event atom and source sequence atom.</dd>
			</dl>

			<dl>
				<dt class="func">seq:__index(idx) | seq[idx]</dt>
				<dt>idx (integer)</dt>
					<dd>event position to query for</dd>
				<dt class="ret">(userdata)</dt>
					<dd>event atom at position idx</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Atom Sequence</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- serialize</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">sequence</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">frameTime</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">time</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">apply</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">seq</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- attributes</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">seq</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query number of events</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">print</span><span style="color:#ffffff;">(</span><span style="color:#00aeef;">tostring</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">seq</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- convert to string</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Sequence</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query type of atom</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">unit</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">frameTime</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query event time unit</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">-- iterate over</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">frames</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">foreach</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">frames</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">-- indexing</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq</span><span style="color:#ffffff;">[</span><span style="color:#fbfb00;">1</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Atom Tuple -->
			<div class="api-section">
			<h3 id="atom-tuple">Tuple</h3>
			<p>A Tuple atom, e.g. of type Atom.Tuple and variable size. Atom size
			denotes to number of items contained in atom body. An atom tuple
			consists of individual atom items.</p>

			<dl>
				<dt class="attr">tup.__len | #tup</dt>
				<dt class="ret">(integer)</dt>
					<dd>number of items</dd>
			</dl>

			<dl>
				<dt class="attr">tup.type</dt>
				<dt class="ret">(integer)</dt>
					<dd>URID of atom type</dd>
			</dl>

			<dl>
				<dt class="func">tup.__tostring | tostring(tup)</dt>
				<dt class="ret">(string)</dt>
					<dd>string representation of atom</dd>
			</dl>

			<dl>
				<dt class="func">tup:unpack(from=1, to=#tup)</dt>
				<dt>from (nil | integer)</dt>
					<dd>start position to unpack from, defaults to 1</dd>
				<dt>to (nil | integer)</dt>
					<dd>end position to unpack from, defaults to body size<dd>
				<dt class="ret">(userdata, ...)</dt>
					<dd>atom items unpacked from tuple</dd>
			</dl>

			<dl>
				<dt class="func">tup:foreach()</dt>
				<dt class="ret">(integer, userdata)</dt>
					<dd>iterates over all atom items returning index and atom item.</dd>
			</dl>

			<dl>
				<dt class="func">tup:__index(idx) | tup[idx]</dt>
				<dt>idx (integer)</dt>
					<dd>item position to query for</dd>
				<dt class="ret">(userdata)</dt>
					<dd>atom item at position idx</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Atom Tuple</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- serialize</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">tup</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">tuple</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">apply</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">tup</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- attributes</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">tup</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query number of items</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">print</span><span style="color:#ffffff;">(</span><span style="color:#00aeef;">tostring</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">tup</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- convert to string</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Tuple</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query type of atom</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">-- iterate over</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">i</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">foreach</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">i</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">-- unpack</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">a1</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">tup</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">unpack</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">a1</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">-- indexing</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">a1</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">tup</span><span style="color:#ffffff;">[</span><span style="color:#fbfb00;">1</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">a1</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Atom Object -->
			<div class="api-section">
			<h3 id="atom-object">Object</h3>
			<p>An Object atom, e.g. of type Atom.Object and variable size. Atom size
			denotes to number of properties contained in atom body. An atom object
			consists of individual properties.</p>

			<dl>
				<dt class="attr">obj.__len | #obj</dt>
				<dt class="ret">(integer)</dt>
					<dd>number of properties</dd>
			</dl>

			<dl>
				<dt class="attr">obj.type</dt>
				<dt class="ret">(integer)</dt>
					<dd>URID of atom type</dd>
			</dl>

			<dl>
				<dt class="attr">obj.id</dt>
				<dt class="ret">(integer)</dt>
					<dd>URID of atom object ID</dd>
			</dl>

			<dl>
				<dt class="attr">obj.otype</dt>
				<dt class="ret">(integer)</dt>
					<dd>URID of atom object type</dd>
			</dl>

			<dl>
				<dt class="func">obj.__tostring | tostring(obj)</dt>
				<dt class="ret">(string)</dt>
					<dd>string representation of atom</dd>
			</dl>

			<dl>
				<dt class="func">obj:foreach()</dt>
				<dt class="ret">(integer, userdata, integer)</dt>
					<dd>iterates over all properties returning property key, atom and context.</dd>
			</dl>

			<dl>
				<dt class="func">obj:__index(key) | obj[key]</dt>
				<dt>key (integer)</dt>
					<dd>URID of key to query for</dd>
				<dt class="ret">(userdata)</dt>
					<dd>property atom for key</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Atom Object</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'urn:uuid:b110d31d-98c6-48bc-93d1-e326c9829be9#'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- serialize</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">obj</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">object</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">otype</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">id</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">obj</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">key</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">key</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">obj</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">apply</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">obj</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- attributes</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">obj</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query number of properties</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">print</span><span style="color:#ffffff;">(</span><span style="color:#00aeef;">tostring</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">obj</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- convert to string</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">obj</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Object</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query type of atom</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">obj</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">id</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">id</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query id of object atom</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">obj</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">otype</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">otype</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query type of object atom</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">-- iterate over</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">k</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">obj</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">foreach</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">k</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">key</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">ctx</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">-- indexing</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">obj</span><span style="color:#ffffff;">[</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">key</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

			<!-- Atom Vector -->
			<div class="api-section">
			<h3 id="atom-vector">Vector</h3>
			<p>A Vector atom, e.g. of type Atom.Vector and variable size. Atom size
			denotes to number of items contained in atom body. An atom vector
			consists of equally typed atom items.</p>

			<dl>
				<dt class="attr">vec.__len | #vec</dt>
				<dt class="ret">(integer)</dt>
					<dd>number of items</dd>
			</dl>

			<dl>
				<dt class="attr">vec.type</dt>
				<dt class="ret">(integer)</dt>
					<dd>URID of atom type</dd>
			</dl>

			<dl>
				<dt class="attr">vec.childSize</dt>
				<dt class="ret">(integer)</dt>
					<dd>atom vector child size</dd>
			</dl>

			<dl>
				<dt class="attr">vec.childType</dt>
				<dt class="ret">(integer)</dt>
					<dd>URID of atom vector child type</dd>
			</dl>

			<dl>
				<dt class="func">vec.__tostring | tostring(vec)</dt>
				<dt class="ret">(string)</dt>
					<dd>string representation of atom</dd>
			</dl>

			<dl>
				<dt class="func">vec:unpack(from=1, to=#vec)</dt>
				<dt>from (nil | integer)</dt>
					<dd>start position to unpack from, defaults to 1</dd>
				<dt>to (nil | integer)</dt>
					<dd>end position to unpack from, defaults to body size<dd>
				<dt class="ret">(userdata, ...)</dt>
					<dd>atom items unpacked from vector</dd>
			</dl>

			<dl>
				<dt class="func">vec:foreach()</dt>
				<dt class="ret">(integer, userdata)</dt>
					<dd>iterates over all vector items returning index and atom.</dd>
			</dl>

			<dl>
				<dt class="func">vec:__index(idx) | vec[idx]</dt>
				<dt>idx (integer)</dt>
					<dd>position to query for</dd>
				<dt class="ret">(userdata)</dt>
					<dd>atom of item at position idx</dd>
			</dl>

			<pre><code><span style="color:#555555;">-- Atom Vector</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- serialize</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">vector</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Int</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">13</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">14</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">apply</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">vec</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- attributes</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">vec</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">3</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query number of items</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">print</span><span style="color:#ffffff;">(</span><span style="color:#00aeef;">tostring</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">vec</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- convert to string</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">vec</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Vector</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query type of atom</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">vec</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">childSize</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">4</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query child size of atom</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">vec</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">childType</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Int</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- query child type of atom</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">-- iterate over</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">i</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">vec</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">foreach</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
    </span><span style="color:#00698f;">if</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">i</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">then</span><span style="color:#dddddd;">
      </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00698f;">elseif</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">i</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">2</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">then</span><span style="color:#dddddd;">
      </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">13</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00698f;">elseif</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">i</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">3</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">then</span><span style="color:#dddddd;">
      </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">14</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">-- unpack</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">v1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">v2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">v3</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">vec</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">unpack</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">v1</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">v2</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">13</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">v3</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">14</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">-- indexing</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">v1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">v2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">v3</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">vec</span><span style="color:#ffffff;">[</span><span style="color:#fbfb00;">1</span><span style="color:#ffffff;">]</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">vec</span><span style="color:#ffffff;">[</span><span style="color:#fbfb00;">2</span><span style="color:#ffffff;">]</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">vec</span><span style="color:#ffffff;">[</span><span style="color:#fbfb00;">3</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">v1</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">v2</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">13</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">v3</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">14</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
			</div>

	<!-- Stash -->
	<div class="api-section">
	<h1 id="stash">Stash</h1>
	<p>Sometimes it may be useful to not only be able to serialize atoms to forge
	objects provided to the user via one of the callback functions, but to be able
	to temporarily serialize some atoms to memory for later dispatch.</p>

	<p>For these usage scenarios there is the stash object, which according to
	its name, functions as temporary stash. It is a special object in the way
	that it can either be an atom object (with all its attributes and methods)
	or a forge object (with all its methods), depending on whether it is in its
	reading or writing mode.</p>

	<p>After creating a new stash, it is in its writing mode and thus can be used
	just like a forge object. After finishing the serialization procedure, the
	stash object may be switched into its reading mode and be used just like
	an atom object.</p>

		<dl>
			<dt class="func">stash:read()</dt>
			<dt class="ret">(userdata)</dt>
				<dd>reference to self as atom object to read from</dd>
		</dl>

		<dl>
			<dt class="func">stash:write()</dt>
			<dt class="ret">(userdata)</dt>
				<dd>reference to self as forge object to write to</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- Stash</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- a new stash defaults to writing mode - equivalent to forge object</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">io</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Stash</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#dddddd;">io</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- switch to reading mode - equivalent to atom object</span><span style="color:#dddddd;">
</span><span style="color:#dddddd;">io</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">read</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">io</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- switch to writing mode - automatically clears previous content</span><span style="color:#dddddd;">
</span><span style="color:#dddddd;">io</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">write</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#dddddd;">io</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">int</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">13</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- switch to reading mode</span><span style="color:#dddddd;">
</span><span style="color:#dddddd;">io</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">read</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">io</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">13</span><span style="color:#ffffff;">)</span></code></pre>
		</div>

	<!-- Options -->
	<div class="api-section">
	<h1 id="options">Options</h1>
	<p>Sometimes it is useful to know the sample rate (e.g. for timing) and size of
	sequence buffers and minimal and maximal to expect audio block frames.
	If the host exports those values, they may be queried via the options table.</p>

		<dl>
			<dt class="func">Options:__call(URID) | Options(URID) | Options:__index(URID) | Options[URID]</dt>
			<dt>URID (integer)</dt>
				<dd>key to index options table with as integer URID, e.g. valid keys are:
				Param.sampleRate, Buf_Size.sequenceSize, Buf_Size.minBlockLength, Buf_Size.maxBlockLength, Ui.updateRate</dd>
			<dt class="ret">(userdata)</dt>
				<dd>value of indexed key as atom object</dd>
		</dl>

		<dl>
			<dt class="func">Options:__pairs()</dt>
			<dt class="ret">(integer | userdata)</dt>
				<dd>iterates over all options, returning option key and atom userdata.</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- Options</span><span style="color:#dddddd;">


</span><span style="color:#555555;">-- only available if exported by host</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">sampleRate</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Options</span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">Param</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">sampleRate</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">sampleRate</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">48000</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">sequenceSize</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Options</span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">Buf_Size</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">sequenceSize</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">minBlockLength</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Options</span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">Buf_Size</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">minBlockLength</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">maxBlockLength</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Options</span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">Buf_Size</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">maxBlockLength</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">updateRate</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Options</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Ui</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">updateRate</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  
</span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urid</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">pairs</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Options</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">print</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Unmap</span><span style="color:#ffffff;">[</span><span style="color:#dddddd;">urid</span><span style="color:#ffffff;">]</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
	</div>

	<!-- Responder -->
	<div class="api-section">
	<h1 id="responder">Responder</h1>
	<p>Responders are convenience wrappers to ease development of frequently used
	logic event handling schemes via callbacks.</p>

	<p>Moony offers simple responders for MIDI and OSC handling and more complex
	responders for time and state handling.</p>

	<p>By using responder objects, common problems like event filtering and
	sequencing can be written with much less and more understandable code.</p>

	<p>The StateResponder can be used to build simple user interfaces to make
	any moony script available to non-coders around the world.</p>

	</div>

		<!-- MIDIResponder -->
		<div class="api-section">
		<h2 id="responder-midi">MIDIResponder</h2>
		<p>Runs callbacks for received MIDI messages.</p>

		<dl>
			<dt class="func">MIDIResponder(responder, through=false)</dt>
			<dt>responder (table)</dt>
				<dd>table with responder callbacks</dd>
			<dt>through (boolean)</dt>
				<dd>flag whether to let unhandled messages through, defaults to false</dd>
			<dt class="ret">(userdata)</dt>
				<dd>MIDIResponder object</dd>
		</dl>

		<dl>
			<dt class="func">midiR:__call(frames, forge, atom) | midiR(frames, forge, atom)</dt>
			<dt>frames (integer)</dt>
				<dd>frame time of event</dd>
			<dt>forge (userdata)</dt>
				<dd>forge object</dd>
			<dt>atom (userdata)</dt>
				<dd>atom body of event</dd>
			<dt class="ret">(boolean)</dt>
				<dd>flag whether the event was handled, e.g. whether is was any MIDI at all</dd>
		</dl>

		<dl>
			<dt class="attr">midiR.through</dt>
			<dt class="ret">(boolean)</dt>
				<dd>flag whether to let unhandled messages through</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- MIDIResponder</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- define MIDI responder object with callbacks</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">midiR</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">MIDIResponder</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">{</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- listen for NoteOn messages</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">MIDI</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">NoteOn</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">function</span><span style="color:#ffffff;">(</span><span style="color:#fdc251;">self</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">frames</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">chan</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">note</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">vel</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">frames</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">chan</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x1</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">note</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">69</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">vel</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x7f</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

    </span><span style="color:#555555;">-- send NoteOn message</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">time</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">frames</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">midi</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">MIDI</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">NoteOn</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">|</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">chan</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">note</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">+</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">vel</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- increase note by 1</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- listen for NoteOff messages</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">MIDI</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">NoteOff</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">function</span><span style="color:#ffffff;">(</span><span style="color:#fdc251;">self</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">frames</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">chan</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">note</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">vel</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">frames</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">chan</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x1</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">note</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">69</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">vel</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

    </span><span style="color:#555555;">-- send NoteOff message</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">time</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">frames</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">midi</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">MIDI</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">NoteOff</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">|</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">chan</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">note</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">+</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">vel</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- increase note by 1</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">
</span><span style="color:#ffffff;">}</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">false</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- block all MIDI messages not explicitly handled by responder</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- check dynamically changing through flag</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">midiR</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">through</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">false</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#dddddd;">midiR</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">through</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">true</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- route all MIDI messages not explicitely handled by responder</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">midiR</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">through</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">true</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#dddddd;">midiR</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">through</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">false</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- block again</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- forge test messages</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">stash_sequence</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">time</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">midi</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">MIDI</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">NoteOn</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">|</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">69</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x7f</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">time</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">1</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">midi</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">MIDI</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">NoteOff</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">|</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">69</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">time</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">2</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">midi</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">MIDI</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Bender</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">|</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x7f</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- process test messages with responder</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">apply_sequence</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">n</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">frames</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">foreach</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
    </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">handled</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">midiR</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">frames</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">handled</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">true</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- check responder output</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">check</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">seq</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#cc0000;">#</span><span style="color:#dddddd;">seq</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">2</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- only NoteOn and NoteOff have gone through</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
		</div>

		<!-- OSCResponder -->
		<div class="api-section">
		<h2 id="responder-osc">OSCResponder</h2>
		<p>Runs callbacks for received OSC messages.</p>

		<dl>
			<dt class="func">OSCResponder(responder)</dt>
			<dt>responder (table)</dt>
				<dd>table with responder callbacks</dd>
			<dt>through (boolean)</dt>
				<dd>flag whether to let unhandled messages through, defaults to false</dd>
			<dt class="ret">(userdata)</dt>
				<dd>OSCResponder object</dd>
		</dl>

		<dl>
			<dt class="func">oscR:__call(frames, forge, atom) | oscR(frames, forge, atom)</dt>
			<dt>frames (integer)</dt>
				<dd>frame time of event</dd>
			<dt>forge (userdata)</dt>
				<dd>forge object</dd>
			<dt>atom (userdata)</dt>
				<dd>atom body of event</dd>
			<dt class="ret">(boolean)</dt>
				<dd>flag whether the event was handled, e.g. whether is was any OSC at all</dd>
			<dt class="ret">(boolean)</dt>
				<dd>flag whether any path could be matched</dd>
		</dl>

		<dl>
			<dt class="attr">oscR.through</dt>
			<dt class="ret">(boolean)</dt>
				<dd>flag whether to let unhandled messages through</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- OSCResponder</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- define OSC responder object with callbacks</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">oscR</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">OSCResponder</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">{</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- listen for '/ping'</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#58c554;">'/ping'</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">function</span><span style="color:#ffffff;">(</span><span style="color:#fdc251;">self</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">frames</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">fmt</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">var1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">var2</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">frames</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">fmt</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'if'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">var1</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">12</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">var2</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">12.5</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

    </span><span style="color:#555555;">-- send a '/pong'</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">time</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">frames</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">message</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'/pong'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">fmt</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">var1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">var2</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">
</span><span style="color:#ffffff;">}</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">true</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- route through not matched OSC messages</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- check dynamically changing through flag</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">oscR</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">through</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">true</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#dddddd;">oscR</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">through</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">false</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- block all OSC messages not explicitely handled by responder</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">oscR</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">through</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">false</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#dddddd;">oscR</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">through</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">true</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- route again</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- forge test messages</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">stash_sequence</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">time</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">message</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'/ping'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'if'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">12</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">12.5</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- process test messages with responder</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">apply_sequence</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">n</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">frames</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">foreach</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">frames</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">otype</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">OSC</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Message</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">OSC</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">messagePath</span><span style="color:#ffffff;">]</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'/ping'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

    </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">handled</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">matched</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">oscR</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">frames</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">handled</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">true</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">matched</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">true</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- check responder output</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">check</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">seq</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">frames</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">foreach</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">frames</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">otype</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">OSC</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Message</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">OSC</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">messagePath</span><span style="color:#ffffff;">]</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'/pong'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
		</div>

		<!-- TimeResponder -->
		<div class="api-section">
		<h2 id="responder-time">TimeResponder</h2>
		<p>Runs callbacks for received Time messages.</p>

		<dl>
			<dt class="func">TimeResponder(responder, multiplier=1.0)</dt>
			<dt>responder (table)</dt>
				<dd>table with responder callbacks</dd>
			<dt>multiplier (number)</dt>
				<dd>virtual multiplier to scale time signal with, defaults to 1.0</dd>
			<dt class="ret">(userdata)</dt>
				<dd>TimeResponder object</dd>
		</dl>

		<dl>
			<dt class="func">timeR:__call(from, to, forge, atom) | timeR(from, to, forge, atom)</dt>
			<dt>from (integer)</dt>
				<dd>frame time of last event or period beginning</dd>
			<dt>to (integer)</dt>
				<dd>frame time of current event or period ending</dd>
			<dt>forge (userdata)</dt>
				<dd>forge object</dd>
			<dt>atom (userdata)</dt>
				<dd>atom body of event</dd>
			<dt class="ret">(boolean)</dt>
				<dd>flag whether the event was handled, e.g. whether is was any Time event at all</dd>
		</dl>

		<dl>
			<dt class="func">timeR:__index(key) | timeR[key]</dt>
			<dt>key (integer)</dt>
				<dd>time position property key as integer URID, valid keys are: Time:speed, Time:bar, Time.barBeat, Time.beatUnit, Time.beatsPerBar, Time.beatsPerMinute, Time.frame, Time.framesPerSecond</dd>
			<dt class="ret">(integer | number)</dt>
				<dd>time position property value</dd>
		</dl>

		<dl>
			<dt class="func">timeR:stash(forge)</dt>
			<dt>forge (userdata)</dt>
				<dd>forge object to stash responder state to</dd>
			<dt class="ret">(userdata)</dt>
				<dd>self forge object</dd>
		</dl>

		<dl>
			<dt class="func">timeR:apply(atom)</dt>
			<dt>atom (userdata)</dt>
				<dd>atom object to apply responder state from</dd>
			<dt class="ret">(boolean)</dt>
				<dd>flag whether state has been applied successfully</dd>
		</dl>

		<dl>
			<dt class="attr">timeR.multiplier</dt>
			<dt class="ret">(number)</dt>
				<dd>virtual multiplier to scale time signal with</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- TimeResponder</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- define time responder object with callbacks</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">timeR</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">TimeResponder</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">{</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- listen for speed change</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">speed</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">function</span><span style="color:#ffffff;">(</span><span style="color:#fdc251;">self</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">frames</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">speed</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;"> </span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">speed</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">or</span><span style="color:#dddddd;"> </span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">speed</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1.0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

    </span><span style="color:#fdc251;">self</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">rolling</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">speed</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">~</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.0</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- listen for bar change</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">bar</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">function</span><span style="color:#ffffff;">(</span><span style="color:#fdc251;">self</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">frames</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">bar</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">bar</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- listen for barBeat change</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">barBeat</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">function</span><span style="color:#ffffff;">(</span><span style="color:#fdc251;">self</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">frames</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">barBeat</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00698f;">if</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">then</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- forge==nil in timeR:apply()</span><span style="color:#dddddd;">
      </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">barBeat</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

      </span><span style="color:#555555;">-- send NoteOn message at each whole beat</span><span style="color:#dddddd;">
      </span><span style="color:#00698f;">if</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">math</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">tointeger</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">barBeat</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">then</span><span style="color:#dddddd;">
        </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">time</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">frames</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">midi</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">MIDI</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">NoteOn</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">69</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x7f</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
      </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">
    </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- listen for beatUnit change</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">beatUnit</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">function</span><span style="color:#ffffff;">(</span><span style="color:#fdc251;">self</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">frames</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">beatUnit</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">beatUnit</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">4</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- listen for beatsPerBar change</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">beatsPerBar</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">function</span><span style="color:#ffffff;">(</span><span style="color:#fdc251;">self</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">frames</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">beatsPerBar</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">beatsPerBar</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">4.0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- listen for beatsPerMinute change</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">beatsPerMinute</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">function</span><span style="color:#ffffff;">(</span><span style="color:#fdc251;">self</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">frames</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">beatsPerMinute</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">beatsPerMinute</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">120.0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- listen for frame change</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">frame</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">function</span><span style="color:#ffffff;">(</span><span style="color:#fdc251;">self</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">frames</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">frame</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">frame</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#555555;">-- listen for framesPerSecond change</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">framesPerSecond</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">function</span><span style="color:#ffffff;">(</span><span style="color:#fdc251;">self</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">frames</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">framesPerSecond</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">framesPerSecond</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">48000.0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">rolling</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">false</span><span style="color:#dddddd;">
</span><span style="color:#ffffff;">}</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1.0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- index current transport state, can be called at any time</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">timeR</span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">speed</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">timeR</span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">bar</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">timeR</span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">barBeat</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">timeR</span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">beatUnit</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">4</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">timeR</span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">beatsPerBar</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">4.0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">timeR</span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">beatsPerMinute</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">120.0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">timeR</span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">frame</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">timeR</span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">framesPerSecond</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">48000.0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">timeR</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">multiplier</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1.0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- push current responder state to temporary stash</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">timeR</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- pop and apply current responder state from temporary stash</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">apply</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">handled</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">timeR</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">apply</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">handled</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">true</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- forge test messages</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">stash_sequence</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">obj</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">time</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">object</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Position</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#dddddd;">obj</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">key</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">speed</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">float</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">1.0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- start transport</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">obj</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">pop</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- process test messages with responder</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">apply_sequence</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">n</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">from</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- frame time of 'last event' aka 'period beginning'</span><span style="color:#dddddd;">

  </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">to</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">foreach</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
    </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">handled</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">timeR</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">from</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">to</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">handled</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">true</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

    </span><span style="color:#dddddd;">from</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">to</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- update frame time of 'last event'</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

  </span><span style="color:#dddddd;">timeR</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">from</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">n</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- we must call time responder until 'period ending'</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- check responder output</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">check</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">seq</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">frames</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">foreach</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">frames</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">MIDI</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">MidiEvent</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">string</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">char</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">MIDI</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">NoteOn</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">69</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x7f</span><span style="color:#ffffff;">)</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
		</div>

		<!-- StateResponder -->
		<div class="api-section">
		<h2 id="responder-state">StateResponder</h2>
		<p>Runs callbacks for state handling via patch messages.</p>

		<dl>
			<dt class="func">StateResponder(responder)</dt>
			<dt>responder (table)</dt>
				<dd>table with responder callbacks</dd>
			<dt class="ret">(userdata)</dt>
				<dd>StateResponder object</dd>
		</dl>

		<dl>
			<dt class="func">stateR:__call(frames, forge, atom) | stateR(frames, forge, atom)</dt>
			<dt>frames (integer)</dt>
				<dd>frame time of current event</dd>
			<dt>forge (userdata)</dt>
				<dd>forge object</dd>
			<dt>atom (userdata)</dt>
				<dd>atom body of event</dd>
			<dt class="ret">(boolean)</dt>
				<dd>flag whether the event was handled, e.g. whether is was any patch event at all</dd>
		</dl>

		<dl>
			<dt class="func">stateR:register(frames, forge)</dt>
			<dt>frames (integer)</dt>
				<dd>frame time of current event, usually 0 aka start of period</dd>
			<dt>forge (userdata)</dt>
				<dd>forge object to register state to</dd>
			<dt class="ret">(userdata)</dt>
				<dd>self forge object</dd>
		</dl>

		<dl>
			<dt class="func">stateR:sync(frames, forge)</dt>
			<dt>frames (integer)</dt>
				<dd>frame time of current event</dd>
			<dt>forge (userdata)</dt>
				<dd>forge object to sync state to</dd>
			<dt class="ret">(userdata)</dt>
				<dd>self forge object</dd>
		</dl>

		<dl>
			<dt class="func">stateR:stash(forge)</dt>
			<dt>forge (userdata)</dt>
				<dd>forge object to stash responder state to</dd>
			<dt class="ret">(userdata)</dt>
				<dd>self forge object</dd>
		</dl>

		<dl>
			<dt class="func">stateR:apply(atom)</dt>
			<dt>atom (userdata)</dt>
				<dd>atom object to apply responder state from</dd>
			<dt class="ret">(boolean)</dt>
				<dd>flag whether state has been applied successfully</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- StateResponder</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'urn:uuid:e359d24c-e1fe-4b3b-bbda-b58f4b04234d#'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- define read-only parameter</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">period</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Parameter</span><span style="color:#ffffff;">{</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">RDFS</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">label</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'Period'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">RDFS</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">comment</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'set period'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">RDFS</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">range</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Float</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">LV2</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">minimum</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">LV2</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">maximum</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">10.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">unit</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">s</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">RDF</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">value</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">5.0</span><span style="color:#dddddd;">
</span><span style="color:#ffffff;">}</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- define read-write parameter</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">frequency</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Parameter</span><span style="color:#ffffff;">{</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">RDFS</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">label</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'Frequency'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">RDFS</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">comment</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'set frequency'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">RDFS</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">range</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Int</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">LV2</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">minimum</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">LV2</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">maximum</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">48000</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">unit</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">hz</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">RDF</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">value</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">44100</span><span style="color:#dddddd;">
</span><span style="color:#ffffff;">}</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- define state responder object with callbacks</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">stateR</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">StateResponder</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">{</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">readable</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ffffff;">{</span><span style="color:#dddddd;">
    </span><span style="color:#ffffff;">[</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">period</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">period</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">}</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">writable</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ffffff;">{</span><span style="color:#dddddd;">
    </span><span style="color:#ffffff;">[</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">frequency</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">frequency</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">}</span><span style="color:#dddddd;">
</span><span style="color:#ffffff;">}</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- push current responder state to temporary stash</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">stateR</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- pop and apply current responder state from temporary stash</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">apply</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">handled</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">stateR</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">apply</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">handled</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">true</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- save current responder state to disk</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">save</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">stateR</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- restore current responder state from disk</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">restore</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">handled</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">stateR</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">apply</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">handled</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">true</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- register state upon code reload</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">once</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">n</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">control</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">notify</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">stateR</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">register</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- forge test messages</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">stash_sequence</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">time</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">get</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">period</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- process test messages with responder</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">apply_sequence</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">n</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">frames</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">foreach</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">frames</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">otype</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Get</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

    </span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">handled</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">stateR</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">frames</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">forge</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">handled</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ff6600;">true</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- check responder output</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">check</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">seq</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">frames</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">seq</span><span style="color:#cc0000;">:</span><span style="color:#00aeef;">foreach</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">frames</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">otype</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Set</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">property</span><span style="color:#ffffff;">]</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">urn</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">period</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">atom</span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">value</span><span style="color:#ffffff;">]</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">5.0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
		</div>

		<!-- Parameter -->
		<div class="api-section">
		<h2 id="responder-parameter">Parameter</h2>
		<p>Adds convenience accessor metamethods to any parameter property table.</p>

		<dl>
			<dt class="func">Parameter(param)</dt>
			<dt>param (table)</dt>
				<dd>table with parameter properties</dd>
			<dt class="ret">(table)</dt>
				<dd>table with parameter properties plus metamethods</dd>
		</dl>

		<dl>
			<dt class="func">param:__call(value, frames=nil, forge=nil) | param(value, frames=nil, forge=nil)</dt>
			<dt>value (integer | number | string | boolean)</dt>
				<dd>new value to set parameter to</dd>
			<dt>frames (integer)</dt>
				<dd>frame time value is set on, defaults to nil</dd>
			<dt>forge (userdata)</dt>
				<dd>forge to send patch messages to, defaults to nil</dd>
		</dl>

		<dl>
			<dt class="func">param:__call() | param()</dt>
			<dt class="ret">(integer | number | string | boolean)</dt>
				<dd>current value parameter is set to</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- Parameter</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">foo</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Parameter</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">{</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">RDFS</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">label</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'Foo'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">RDFS</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">range</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Float</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">LV2</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">minimum</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">LV2</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">maximum</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">1.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">RDF</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">value</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.5</span><span style="color:#dddddd;">
</span><span style="color:#ffffff;">}</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">bar</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Parameter</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">{</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">RDFS</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">label</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'Bar'</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">RDFS</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">range</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Int</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">LV2</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">minimum</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">LV2</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">maximum</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">10</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">RDF</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">value</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">5</span><span style="color:#dddddd;">
</span><span style="color:#ffffff;">}</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">function</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">stash</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">forge</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">foo</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.5</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">foo</span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">RDF</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">value</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.5</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

  </span><span style="color:#dddddd;">foo</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">0.8</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">foo</span><span style="color:#ffffff;">(</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.8</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

  </span><span style="color:#dddddd;">foo</span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">RDF</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">value</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.9</span><span style="color:#dddddd;">
  </span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">foo</span><span style="color:#ffffff;">[</span><span style="color:#8dff0a;">RDF</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">value</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0.9</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

  </span><span style="color:#555555;">--TODO</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span></code></pre>
		</div>

	<!-- Utilities -->
	<div class="api-section">
	<h1 id="util">Utilities</h1>
	<p>Various hopefully useful utility functions.</p>
	</div>

		<!-- midi2cps -->
		<div class="api-section">
		<h2 id="util-midi2cps">midi2cps</h2>
		<p>Conversion from MIDI note to Hertz.</p>

		<dl>
			<dt class="func">midi2cps(note, base=69.0, noct=12.0, fref=440.0)</dt>
			<dt>note (number)</dt>
				<dd>MIDI note, fractions are allowed</dd>
			<dt>base (number)</dt>
				<dd>MIDI base note corresponding to reference frequency, defaults to 69.0 (A-5)</dd>
			<dt>noct (number)</dt>
				<dd>number of notes per octave, default to 12.0</dd>
			<dt>fref (number)</dt>
				<dd>reference frequency corresponding to MIDI base note, defaults to 440.0 Hz (A-5)</dd>
			<dt class="ret">(number)</dt>
				<dd>corresponding frequency in Hz</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- midi2cps</span><span style="color:#dddddd;">

</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#00aeef;">midi2cps</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">69.0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">440.0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- relative to 'A-5'==440 Hz</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#00aeef;">midi2cps</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">60.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">60</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">12</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">400</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">400.0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- relative to 'C-5'==400 Hz</span></code></pre>
		</div>

		<!-- cps2midi -->
		<div class="api-section">
		<h2 id="util-cps2midi">cps2midi</h2>
		<p>Conversion from Hertz to MIDI note.</p>

		<dl>
			<dt class="func">cps2midi(cps, base=69.0, noct=12.0, fref=440.0)</dt>
			<dt>cps (number)</dt>
				<dd>frequency in Hz</dd>
			<dt>base (number)</dt>
				<dd>MIDI base note corresponding to reference frequency, defaults to 69.0 (A-5)</dd>
			<dt>noct (number)</dt>
				<dd>number of notes per octave, default to 12.0</dd>
			<dt>fref (number)</dt>
				<dd>reference frequency corresponding to MIDI base note, defaults to 440.0 Hz (A-5)</dd>
			<dt class="ret">(number)</dt>
				<dd>corresponding MIDI note</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- cps2midi</span><span style="color:#dddddd;">

</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#00aeef;">cps2midi</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">440.0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">69.0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- relative to 'A-5'==400 Hz</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#00aeef;">cps2midi</span><span style="color:#ffffff;">(</span><span style="color:#fbfb00;">400.0</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">60</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">12</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">400</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">60.0</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#555555;">-- relative to 'C-5'==400 Hz</span></code></pre>
		</div>

		<!-- Note -->
		<div class="api-section">
		<h2 id="util-note">Note</h2>
		<p>Conversion from MIDI note number to note name and vice-versa.</p>

		<dl>
			<dt class="func">Note.__index(note) | Note[note]</dt>
			<dt>note (integer)</dt>
				<dd>MIDI Note number</dd>
			<dt class="ret">(string)</dt>
				<dd>MIDI note name</dd>
		</dl>

		<dl>
			<dt class="func">Note.__index(name) | Note[name]</dt>
			<dt>name (string)</dt>
				<dd>MIDI Note name</dd>
			<dt class="ret">(integer)</dt>
				<dd>MIDI note number</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- Note</span><span style="color:#dddddd;">

</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Note</span><span style="color:#ffffff;">[</span><span style="color:#fbfb00;">60</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'C+4'</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Note</span><span style="color:#ffffff;">[</span><span style="color:#58c554;">'A+4'</span><span style="color:#ffffff;">]</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">69</span><span style="color:#ffffff;">)</span></code></pre>
		</div>

		<!-- aes128 -->
		<div class="api-section">
		<h2 id="util-aes128">AES-128</h2>
		</div>

		<!-- aes128.encode -->
		<div class="api-section">
		<h3 id="util-aes128-encode">Encode</h3>
		<p>AES-128 encryption of byte strings.</p>

		<dl>
			<dt class="func">aes128.encode(value, pass)</dt>
			<dt>value (string)</dt>
				<dd>clear text byte string to encode</dd>
			<dt>pass (string)</dt>
				<dd>128-bit passphrase, either as raw byte string or as hex-encoded string</dd>
			<dt class="ret">(string, integer)</dt>
				<dd>corresponding secret byte string, length of encoded clear text</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- encrypt</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">pass</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'2b7e151628aed2a6abf7158809cf4f3c'</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">value</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'hello world'</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">secret</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">len</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">aes128</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">encode</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">value</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">pass</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">aes128</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">decode</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">secret</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">pass</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">len</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">value</span><span style="color:#ffffff;">)</span></code></pre>
		</div>

		<!-- aes128.decode -->
		<div class="api-section">
		<h3 id="util-aes128-decode">Decode</h3>
		<p>AES-128 decryption of byte strings.</p>

		<dl>
			<dt class="func">aes128.decode(value, pass)</dt>
			<dt>value (string)</dt>
				<dd>secret byte string to decode </dd>
			<dt>pass (string)</dt>
				<dd>128-bit passphrase, either as raw byte string or as hex-encoded string</dd>
			<dt>len (integer)</dt>
				<dd>length of encoded clear text</dd>
			<dt class="ret">(string)</dt>
				<dd>corresponding clear text byte string</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- decrypt</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">pass</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">string</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">char</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">
  </span><span style="color:#fbfb00;">0x2b</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x7e</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x15</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x16</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x28</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0xae</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0xd2</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0xa6</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#fbfb00;">0xab</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0xf7</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x15</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x88</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x09</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0xcf</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x4f</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#fbfb00;">0x3c</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">value</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'hello world'</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">secret</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">len</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">aes128</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">encode</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">value</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">pass</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">aes128</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">decode</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">secret</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">pass</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">len</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">value</span><span style="color:#ffffff;">)</span></code></pre>
	</div>

		<!-- base64 -->
		<div class="api-section">
		<h2 id="util-base64">Base64</h2>
		</div>

		<!-- base64.encode -->
		<div class="api-section">
		<h3 id="util-base64-encode">Encode</h3>
		<p>Base64 encoding of byte strings.</p>

		<dl>
			<dt class="func">base64.encode(value)</dt>
			<dt>value (string)</dt>
				<dd>clear text byte string to encode</dd>
			<dt class="ret">(string)</dt>
				<dd>corresponding encoded string</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- encode</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">value</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'hello world'</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">encoded</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">base64</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">encode</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">value</span><span style="color:#ffffff;">)</span></code></pre>
		</div>

		<!-- base64.decode -->
		<div class="api-section">
		<h3 id="util-base64-decode">Decode</h3>
		<p>Base64 decoding of byte strings.</p>

		<dl>
			<dt class="func">base64.decode(value)</dt>
			<dt>value (string)</dt>
				<dd>encoded string to decode </dd>
			<dt class="ret">(string)</dt>
				<dd>corresponding clear text byte string</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- decode</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">value</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'hello world'</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">encoded</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">base64</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">encode</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">value</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">base64</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">decode</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">encoded</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">value</span><span style="color:#ffffff;">)</span></code></pre>
	</div>

		<!-- ascii85 -->
		<div class="api-section">
		<h2 id="util-ascii85">Ascii85</h2>
		</div>

		<!-- ascii85.encode -->
		<div class="api-section">
		<h3 id="util-ascii85-encode">Encode</h3>
		<p>Ascii85 encoding of byte strings.</p>

		<dl>
			<dt class="func">ascii85.encode(value)</dt>
			<dt>value (string)</dt>
				<dd>clear text byte string to encode</dd>
			<dt class="ret">(string)</dt>
				<dd>corresponding encoded string</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- encode</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">value</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'hello world'</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">encoded</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">ascii85</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">encode</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">value</span><span style="color:#ffffff;">)</span></code></pre>
		</div>

		<!-- ascii85.decode -->
		<div class="api-section">
		<h3 id="util-ascii85-decode">Decode</h3>
		<p>Ascii85 decoding of byte strings.</p>

		<dl>
			<dt class="func">ascii85.decode(value)</dt>
			<dt>value (string)</dt>
				<dd>encoded string to decode </dd>
			<dt class="ret">(string)</dt>
				<dd>corresponding clear text byte string</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- decode</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">value</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#58c554;">'hello world'</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">encoded</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">ascii85</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">encode</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">value</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">ascii85</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">decode</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">encoded</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">value</span><span style="color:#ffffff;">)</span></code></pre>
	</div>

	<!-- Constants -->
	<div class="api-section">
	<h1 id="constants">Constants</h1>
	<p>Frequently used URID values and all MIDI message and controller constants
	are premapped and conveniently accessible in their own tables.</p>

		<dl>
			<dt class="func">(table):__index(key) | (table)[key]</dt>
			<dt>key (string)</dt>
				<dd>key to index constants table with</dd>
			<dt class="ret">(integer)</dt>
				<dd>corresponding URID or integer for given key</dd>
		</dl>

		<pre><code><span style="color:#555555;">-- Constants</span><span style="color:#dddddd;">

</span><span style="color:#00698f;">local</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#ffffff;">{</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">lv2</span><span style="color:#dddddd;">   </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'http://lv2plug.in/ns/lv2core#'</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">param</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'http://lv2plug.in/ns/ext/parameters#'</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">atom</span><span style="color:#dddddd;">  </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'http://lv2plug.in/ns/ext/atom#'</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">time</span><span style="color:#dddddd;">  </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'http://lv2plug.in/ns/ext/time#'</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">midi</span><span style="color:#dddddd;">  </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'http://lv2plug.in/ns/ext/midi#'</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">bufsz</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'http://lv2plug.in/ns/ext/buf-size#'</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">patch</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'http://lv2plug.in/ns/ext/patch#'</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">units</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'http://lv2plug.in/ns/extensions/units#'</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">osc</span><span style="color:#dddddd;">   </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'http://open-music-kontrollers.ch/lv2/osc#'</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">rdf</span><span style="color:#dddddd;">   </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'http://www.w3.org/1999/02/22-rdf-syntax-ns#'</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">rdfs</span><span style="color:#dddddd;">  </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'http://www.w3.org/2000/01/rdf-schema#'</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">moony</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'http://open-music-kontrollers.ch/lv2/moony#'</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
  </span><span style="color:#dddddd;">lua</span><span style="color:#dddddd;">   </span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">Mapper</span><span style="color:#ffffff;">(</span><span style="color:#58c554;">'http://lua.org#'</span><span style="color:#ffffff;">)</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;">
</span><span style="color:#ffffff;">}</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- Atom URID constants</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Bool</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">atom</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Bool</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Int</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">atom</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Int</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Long</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">atom</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Long</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Float</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">atom</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Float</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Double</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">atom</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Double</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">URID</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">atom</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">URID</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">URI</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">atom</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">URI</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">String</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">atom</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">String</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Literal</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">atom</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Literal</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Path</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">atom</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Path</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Chunk</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">atom</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Chunk</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Property</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">atom</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Property</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Object</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">atom</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Object</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Sequence</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">atom</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Sequence</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Tuple</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">atom</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Tuple</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Vector</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">atom</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Vector</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">beatTime</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">atom</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">beatTime</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">frameTime</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">atom</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">frameTime</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">childType</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">atom</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">childType</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- Time URID constants</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Position</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">time</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Position</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">barBeat</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">time</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">barBeat</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">bar</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">time</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">bar</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">beat</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">time</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">beat</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">beatUnit</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">time</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">beatUnit</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">beatsPerBar</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">time</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">beatsPerBar</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">beatsPerMinute</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">time</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">beatsPerMinute</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">frame</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">time</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">frame</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">framesPerSecond</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">time</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">framesPerSecond</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Time</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">speed</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">time</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">speed</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- MIDI URID constants</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">MIDI</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">MidiEvent</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">midi</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">MidiEvent</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- MIDI message and controller constants</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">for</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">k</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">v</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">in</span><span style="color:#dddddd;"> </span><span style="color:#00aeef;">pairs</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">MIDI</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">do</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">if</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">k</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">~</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#8dff0a;">MIDI</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">MidiEvent</span><span style="color:#dddddd;"> </span><span style="color:#00698f;">then</span><span style="color:#dddddd;">
    </span><span style="color:#00aeef;">print</span><span style="color:#ffffff;">(</span><span style="color:#dddddd;">k</span><span style="color:#cc0000;">,</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">v</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
  </span><span style="color:#00698f;">end</span><span style="color:#dddddd;">
</span><span style="color:#00698f;">end</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- OSC URID constants</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">OSC</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Event</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">osc</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Event</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">OSC</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Packet</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">osc</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Packet</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">OSC</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Bundle</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">osc</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Bundle</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">OSC</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">bundleTimetag</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">osc</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">bundleTimetag</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">OSC</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">bundleItems</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">osc</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">bundleItems</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">OSC</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Message</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">osc</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Message</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">OSC</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">messagePath</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">osc</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">messagePath</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">OSC</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">messageArguments</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">osc</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">messageArguments</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">OSC</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Timetag</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">osc</span><span style="color:#cc0000;">.</span><span style="color:#8dff0a;">Time</span><span style="color:#dddddd;">tag</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">OSC</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">timetagIntegral</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">osc</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">timetagIntegral</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">OSC</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">timetagFraction</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">osc</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">timetagFraction</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">OSC</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Nil</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">osc</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Nil</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">OSC</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Impulse</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">osc</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Impulse</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">OSC</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Char</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">osc</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Char</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">OSC</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">RGBA</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">osc</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">RGBA</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- LV2 Param URID constants</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Param</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">sampleRate</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">param</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">sampleRate</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- LV2 LV2 URID constants</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">LV2</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">minimum</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">lv2</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">minimum</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">LV2</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">maximum</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">lv2</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">maximum</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">LV2</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">scalePoint</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">lv2</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">scalePoint</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- Buffer size URID constants</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Buf_Size</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">minBlockLength</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">bufsz</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">minBlockLength</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Buf_Size</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">maxBlockLength</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">bufsz</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">maxBlockLength</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Buf_Size</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">sequenceSize</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">bufsz</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">sequenceSize</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- Patch URID constants</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Ack</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Ack</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Delete</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Delete</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Copy</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Copy</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Error</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Error</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Get</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Get</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Message</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Message</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Move</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Move</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Insert</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Insert</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Patch</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#8dff0a;">Patch</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Post</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Post</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Put</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Put</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Request</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Request</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Response</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Response</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Set</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Set</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">add</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">add</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">accept</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">accept</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">body</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">context</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">context</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">destination</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">destination</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">property</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">property</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">readable</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">readable</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">remove</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">remove</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">request</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">request</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">subject</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">subject</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">sequenceNumber</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">sequenceNumber</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">value</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">value</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">wildcard</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">wildcard</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Patch</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">writable</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#00aeef;">patch</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">writable</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- RDF URID constants</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">RDF</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">value</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">rdf</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">value</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">RDF</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">rdf</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">type</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- RDFS URID constants</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">RDFS</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">label</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">rdfs</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">label</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">RDFS</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">range</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">rdfs</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">range</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">RDFS</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">comment</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">rdfs</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">comment</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- Units URID constants</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Conversion</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Conversion</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">Unit</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">Unit</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">bar</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">bar</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">beat</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">beat</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">bpm</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">bpm</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">cent</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">cent</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">cm</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">cm</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">coef</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">coef</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">conversion</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">conversion</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">db</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">db</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">degree</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">degree</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">frame</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">frame</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">hz</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">hz</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">inch</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">inch</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">khz</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">khz</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">km</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">km</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">m</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">m</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">mhz</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">mhz</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">midiNote</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">midiNote</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">midiController</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">midiController</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">mile</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">mile</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">min</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">min</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">mm</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">mm</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">ms</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">ms</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">name</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">name</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">oct</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">oct</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">pc</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">pc</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">prefixConversion</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">prefixConversion</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">render</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">render</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">s</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">s</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">semitone12TET</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">semitone12TET</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">symbol</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">symbol</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">unit</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">units</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">unit</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- Moony URID constants</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Moony</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">color</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">moony</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">color</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Moony</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">syntax</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">moony</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">syntax</span><span style="color:#ffffff;">)</span><span style="color:#dddddd;">

</span><span style="color:#555555;">-- Lua URID constants</span><span style="color:#dddddd;">
</span><span style="color:#00aeef;">assert</span><span style="color:#ffffff;">(</span><span style="color:#8dff0a;">Lua</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">lang</span><span style="color:#dddddd;"> </span><span style="color:#cc0000;">=</span><span style="color:#cc0000;">=</span><span style="color:#dddddd;"> </span><span style="color:#dddddd;">ctx</span><span style="color:#cc0000;">.</span><span style="color:#dddddd;">lua</span><span style="color:#cc0000;">.</span><span style="color:#ff6600;">lang</span><span style="color:#ffffff;">)</span></code></pre>
	</div>

	<div class="api-section">
	<h1 id="license">License</h1>
		<p>Copyright &copy; 2015-2021 Hanspeter Portner
		(<a href="mailto:dev@open-music-kontrollers.ch">dev@open-music-kontrollers.ch</a>)</p>

		<p>This is free software: you can redistribute it and/or modify
		it under the terms of the Artistic License 2.0 as published by
		The Perl Foundation.</p>

		<p>This source is distributed in the hope that it will be useful,
		but WITHOUT ANY WARRANTY; without even the implied warranty of
		MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
		Artistic License 2.0 for more details.</p>

		<p>You should have received a copy of the Artistic License 2.0
		along the source as a COPYING file. If not, obtain it from
		<a href="http://www.perlfoundation.org/artistic_license_2_0"> http://www.perlfoundation.org/artistic_license_2_0</a>.</p>
	</div>

</div>