<snapdata remixID="11475239"><project name="Canvas" app="Snap! 7, https://snap.berkeley.edu" version="2"><notes></notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAACJUlEQVR4Xu3SwQkAMAwDsWb/oZvSJe4jL2A4NPftmAJRgQEwKu/2FwAQhLQAgGl+5wAykBYAMM3vHEAG0gIApvmdA8hAWgDANL9zABlICwCY5ncOIANpAQDT/M4BZCAtAGCa3zmADKQFAEzzOweQgbQAgGl+5wAykBYAMM3vHEAG0gIApvmdA8hAWgDANL9zABlICwCY5ncOIANpAQDT/M4BZCAtAGCa3zmADKQFAEzzOweQgbQAgGl+5wAykBYAMM3vHEAG0gIApvmdA8hAWgDANL9zABlICwCY5ncOIANpAQDT/M4BZCAtAGCa3zmADKQFAEzzOweQgbQAgGl+5wAykBYAMM3vHEAG0gIApvmdA8hAWgDANL9zABlICwCY5ncOIANpAQDT/M4BZCAtAGCa3zmADKQFAEzzOweQgbQAgGl+5wAykBYAMM3vHEAG0gIApvmdA8hAWgDANL9zABlICwCY5ncOIANpAQDT/M4BZCAtAGCa3zmADKQFAEzzOweQgbQAgGl+5wAykBYAMM3vHEAG0gIApvmdA8hAWgDANL9zABlICwCY5ncOIANpAQDT/M4BZCAtAGCa3zmADKQFAEzzOweQgbQAgGl+5wAykBYAMM3vHEAG0gIApvmdA8hAWgDANL9zABlICwCY5ncOIANpAQDT/M4BZCAtAGCa3zmADKQFAEzzOweQgbQAgGl+5wAykBYAMM3vHEAG0gIApvmdL4Lj3qhM9vcMAAAAAElFTkSuQmCC</thumbnail><scenes select="1"><scene name="Canvas"><notes></notes><palette><category name="Canvas" color="41,41,41,1"/></palette><hidden></hidden><headers></headers><code></code><blocks><block-definition s="draw %&apos;ctx&apos; %&apos;script&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%cs"></input></inputs><script><block s="doSetVar"><l>ctx</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>return this.parentThatIsA(StageMorph).penTrails().getContext(&apos;2d&apos;);</l></block><list></list></block></block><block s="doRun"><block var="script"/><list></list></block><block s="doRun"><block s="reportJSFunction"><list></list><l>this.parentThatIsA(StageMorph).changed();</l></block><list></list></block></script></block-definition><block-definition s="template (c) %&apos;m&apos; %&apos;p&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%mult%s"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>b</l><l>p</l></list><l>p.asArray().forEach(_ =&gt; b.addInput(_));&#xD;return b;</l></block><list><block s="reportJoinWords"><block s="reportConcatenatedLists"><list><block s="reportNewList"><list><custom-block s="%cmdRing [ %n ] add %n inputs"><block s="reifyScript"><script><block s="doRun"><block s="reifyScript"><script></script><list></list></block><list><l></l></list></block></script><list></list></block><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="p"/></block></custom-block><block s="reportJoinWords"><block s="reportConcatenatedLists"><list><block s="reportNewList"><list><custom-block s="%cmdRing [ %n ] add %n inputs"><block s="reifyReporter"><autolambda><block s="reportJSFunction"><list><l></l></list><l></l></block></autolambda><list></list></block><l>0</l><block s="reportListAttribute"><l><option>length</option></l><block var="p"/></block></custom-block><l>ctx</l></list></block><block var="p"/><block s="reportNewList"><list><block s="reportJoinWords"><list><l>ctx.</l><block var="m"/><l>(</l><block s="reportIfElse"><block s="reportListAttribute"><l><option>length</option></l><block var="p"/></block><block s="reportCombine"><block var="p"/><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l>, </l><l></l></list></block></autolambda><list></list></block></block><l></l></block><l>);</l></list></block></list></block></list></block></block><block s="reifyReporter"><autolambda><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block></autolambda><list></list></block></list></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><block s="reifyReporter"><autolambda><block var=" "/></autolambda><list></list></block><l></l></list></block></autolambda><list></list></block><block var="p"/></block></list></block></block><block var="p"/></list></block></block></script></block-definition><block-definition s="%&apos;block&apos; [ %&apos;slot&apos; ] add %&apos;n&apos; inputs" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%cmdRing"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>c</l><l>i</l><l>n</l></list><l>var b = c.expression,&#xD;    m = b.inputs()[i];&#xD;&#xD;while (n-- &gt; 0) m.addInput();&#xD;&#xD;return b.reify();</l></block><list><block var="block"/><block var="slot"/><block var="n"/></list></block></block></script></block-definition><block-definition s="template (r) %&apos;m&apos; %&apos;p&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input><input type="%mult%s"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>b</l><l>p</l></list><l>p.asArray().forEach(_ =&gt; b.addInput(_));&#xD;return b;</l></block><list><block s="reportJoinWords"><list><block s="reifyScript"><script><block s="doReport"><l></l></block></script><list></list></block><block s="reportJoinWords"><block s="reportConcatenatedLists"><list><block s="reportNewList"><list><custom-block s="%cmdRing [ %n ] add %n inputs"><block s="reifyReporter"><autolambda><block s="evaluate"><block s="reifyReporter"><script></script><list></list></block><list><l></l></list></block></autolambda><list></list></block><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="p"/></block></custom-block><block s="reportJoinWords"><block s="reportConcatenatedLists"><list><block s="reportNewList"><list><custom-block s="%cmdRing [ %n ] add %n inputs"><block s="reifyReporter"><autolambda><block s="reportJSFunction"><list><l></l></list><l></l></block></autolambda><list></list></block><l>0</l><block s="reportListAttribute"><l><option>length</option></l><block var="p"/></block></custom-block><l>ctx</l></list></block><block var="p"/><block s="reportNewList"><list><block s="reportJoinWords"><list><l>return ctx.</l><block var="m"/><l>(</l><block s="reportIfElse"><block s="reportListAttribute"><l><option>length</option></l><block var="p"/></block><block s="reportCombine"><block var="p"/><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l>, </l><l></l></list></block></autolambda><list></list></block></block><l></l></block><l>);</l></list></block></list></block></list></block></block><block s="reifyReporter"><autolambda><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block></autolambda><list></list></block></list></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><block s="reifyReporter"><autolambda><block var=" "/></autolambda><list></list></block><l></l></list></block></autolambda><list></list></block><block var="p"/></block></list></block></block></list></block><block var="p"/></list></block></block></script></block-definition><block-definition s="template (sp) %&apos;p&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportJoinWords"><list><block s="reifyScript"><script><block s="doRun"><block s="reifyScript"><script></script><list></list></block><list><l></l><l></l></list></block></script><list><l>#1</l></list></block><block s="reportJoinWords"><list><block s="reifyReporter"><autolambda><block s="reportJSFunction"><list><l></l><l></l></list><l></l></block></autolambda><list></list></block><l>ctx</l><block var="p"/><block s="reportJoinWords"><list><l>ctx.</l><block var="p"/><l> = </l><block var="p"/><l>;</l></list></block></list></block><block s="reifyReporter"><autolambda><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block></autolambda><list></list></block><block s="reportJoinWords"><list><block s="reifyReporter"><autolambda><block var=" "/></autolambda><list></list></block><block var="p"/></list></block><block var="p"/></list></block></block></script><scripts><script x="96" y="401"><custom-block s="template (gp) %s"><l>lineWidth</l></custom-block></script></scripts></block-definition><block-definition s="template (gp) %&apos;p&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="reportJoinWords"><list><block s="reifyScript"><script><block s="doReport"><l></l></block></script><list></list></block><block s="reportJoinWords"><list><block s="reifyReporter"><autolambda><block s="evaluate"><block s="reifyReporter"><script></script><list></list></block><list><l></l></list></block></autolambda><list></list></block><block s="reportJoinWords"><list><block s="reifyReporter"><autolambda><block s="reportJSFunction"><list><l></l></list><l></l></block></autolambda><list></list></block><l>ctx</l><block s="reportJoinWords"><list><l>return ctx.</l><block var="p"/><l>;</l></list></block></list></block><block s="reifyReporter"><autolambda><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block></autolambda><list></list></block></list></block></list></block></block></script><scripts><script x="178" y="286.99999999999994"><custom-block s="template (gp) %s"><l>lineWidth</l></custom-block></script></scripts></block-definition><block-definition s="ctx %&apos;property&apos;" type="reporter" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%s"><options>canvas&#xD;fillStyle&#xD;font&#xD;globalAlpha&#xD;globalCompositeOperation&#xD;imageSmoothingEnabled&#xD;lineCap&#xD;lineDashOffset&#xD;lineJoin&#xD;lineWidth&#xD;miterLimit&#xD;shadowBlur&#xD;shadowColor&#xD;shadowOffsetX&#xD;shadowOffsetY&#xD;strokeStyle&#xD;textAlign&#xD;textBaseline</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>ctx</l><l>prop</l></list><l>return ctx[prop];</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="property"/></list></block></block></script></block-definition><block-definition s="ctx %&apos;property&apos; = %&apos;value&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%s"><options>fillStyle&#xD;font&#xD;globalAlpha&#xD;globalCompositeOperation&#xD;imageSmoothingEnabled&#xD;lineCap&#xD;lineDashOffset&#xD;lineJoin&#xD;lineWidth&#xD;miterLimit&#xD;shadowBlur&#xD;shadowColor&#xD;shadowOffsetX&#xD;shadowOffsetY&#xD;strokeStyle&#xD;textAlign&#xD;textBaseline</options></input><input type="%s"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>ctx</l><l>prop</l><l>val</l></list><l>return ctx[prop] = val;</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="property"/><block var="value"/></list></block></block></script></block-definition><block-definition s="arc %&apos;x&apos; %&apos;y&apos; %&apos;radius&apos; %&apos;startAngle&apos; %&apos;endAngle&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">x</input><input type="%n">y</input><input type="%n">radius</input><input type="%n">startAngle</input><input type="%n">endAngle</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>x</l><l>y</l><l>radius</l><l>startAngle</l><l>endAngle</l></list><l>ctx.arc(x, y, radius, startAngle, endAngle);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="x"/><block var="y"/><block var="radius"/><block var="startAngle"/><block var="endAngle"/></list></block></script></block-definition><block-definition s="arc %&apos;x&apos; %&apos;y&apos; %&apos;radius&apos; %&apos;startAngle&apos; %&apos;endAngle&apos; %&apos;counterclockwise&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">x</input><input type="%n">y</input><input type="%n">radius</input><input type="%n">startAngle</input><input type="%n">endAngle</input><input type="%n">counterclockwise</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>x</l><l>y</l><l>radius</l><l>startAngle</l><l>endAngle</l><l>counterclockwise</l></list><l>ctx.arc(x, y, radius, startAngle, endAngle, counterclockwise);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="x"/><block var="y"/><block var="radius"/><block var="startAngle"/><block var="endAngle"/><block var="counterclockwise"/></list></block></script></block-definition><block-definition s="arcTo %&apos;x1&apos; %&apos;y1&apos; %&apos;x2&apos; %&apos;y2&apos; %&apos;radius&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">x1</input><input type="%n">y1</input><input type="%n">x2</input><input type="%n">y2</input><input type="%n">radius</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>x1</l><l>y1</l><l>x2</l><l>y2</l><l>radius</l></list><l>ctx.arcTo(x1, y1, x2, y2, radius);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="x1"/><block var="y1"/><block var="x2"/><block var="y2"/><block var="radius"/></list></block></script></block-definition><block-definition s="beginPath" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l></list><l>ctx.beginPath();</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block></list></block></script></block-definition><block-definition s="bezierCurveTo %&apos;cp1x&apos; %&apos;cp1y&apos; %&apos;cp2x&apos; %&apos;cp2y&apos; %&apos;x&apos; %&apos;y&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">cp1x</input><input type="%n">cp1y</input><input type="%n">cp2x</input><input type="%n">cp2y</input><input type="%n">x</input><input type="%n">y</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>cp1x</l><l>cp1y</l><l>cp2x</l><l>cp2y</l><l>x</l><l>y</l></list><l>ctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="cp1x"/><block var="cp1y"/><block var="cp2x"/><block var="cp2y"/><block var="x"/><block var="y"/></list></block></script></block-definition><block-definition s="clearRect %&apos;x&apos; %&apos;y&apos; %&apos;width&apos; %&apos;height&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">x</input><input type="%n">y</input><input type="%n">width</input><input type="%n">height</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>x</l><l>y</l><l>width</l><l>height</l></list><l>ctx.clearRect(x, y, width, height);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="x"/><block var="y"/><block var="width"/><block var="height"/></list></block></script></block-definition><block-definition s="clip" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l></list><l>ctx.clip();</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block></list></block></script></block-definition><block-definition s="clip %&apos;path&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">path</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>path</l></list><l>ctx.clip(path);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="path"/></list></block></script></block-definition><block-definition s="clip %&apos;fillRule&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">fillRule</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>fillRule</l></list><l>ctx.clip(fillRule);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="fillRule"/></list></block></script></block-definition><block-definition s="clip %&apos;path&apos; %&apos;fillRule&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">path</input><input type="%n">fillRule</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>path</l><l>fillRule</l></list><l>ctx.clip(path, fillRule);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="path"/><block var="fillRule"/></list></block></script></block-definition><block-definition s="closePath" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l></list><l>ctx.closePath();</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block></list></block></script></block-definition><block-definition s="createConicGradient %&apos;startAngle&apos; %&apos;x&apos; %&apos;y&apos;" type="reporter" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">startAngle</input><input type="%n">x</input><input type="%n">y</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>ctx</l><l>startAngle</l><l>x</l><l>y</l></list><l>return ctx.createConicGradient(startAngle, x, y);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="startAngle"/><block var="x"/><block var="y"/></list></block></block></script></block-definition><block-definition s="createImageData %&apos;width&apos; %&apos;height&apos;" type="reporter" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">width</input><input type="%n">height</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>ctx</l><l>width</l><l>height</l></list><l>return ctx.createImageData(width, height);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="width"/><block var="height"/></list></block></block></script></block-definition><block-definition s="createImageData %&apos;imagedata&apos;" type="reporter" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">imagedata</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>ctx</l><l>imagedata</l></list><l>return ctx.createImageData(imagedata);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="imagedata"/></list></block></block></script></block-definition><block-definition s="createLinearGradient %&apos;x0&apos; %&apos;y0&apos; %&apos;x1&apos; %&apos;y1&apos;" type="reporter" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">x0</input><input type="%n">y0</input><input type="%n">x1</input><input type="%n">y1</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>ctx</l><l>x0</l><l>y0</l><l>x1</l><l>y1</l></list><l>return ctx.createLinearGradient(x0, y0, x1, y1);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="x0"/><block var="y0"/><block var="x1"/><block var="y1"/></list></block></block></script></block-definition><block-definition s="createPattern %&apos;image&apos; %&apos;repetition&apos;" type="reporter" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">image</input><input type="%n">repetition</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>ctx</l><l>image</l><l>repetition</l></list><l>return ctx.createPattern(image, repetition);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="image"/><block var="repetition"/></list></block></block></script></block-definition><block-definition s="createRadialGradient %&apos;x0&apos; %&apos;y0&apos; %&apos;r0&apos; %&apos;x1&apos; %&apos;y1&apos; %&apos;r1&apos;" type="reporter" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">x0</input><input type="%n">y0</input><input type="%n">r0</input><input type="%n">x1</input><input type="%n">y1</input><input type="%n">r1</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>ctx</l><l>x0</l><l>y0</l><l>r0</l><l>x1</l><l>y1</l><l>r1</l></list><l>return ctx.createRadialGradient(x0, y0, r0, x1, y1, r1);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="x0"/><block var="y0"/><block var="r0"/><block var="x1"/><block var="y1"/><block var="r1"/></list></block></block></script></block-definition><block-definition s="drawFocusIfNeeded %&apos;element&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">element</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>element</l></list><l>ctx.drawFocusIfNeeded(element);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="element"/></list></block></script></block-definition><block-definition s="drawFocusIfNeeded %&apos;path&apos; %&apos;element&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">path</input><input type="%n">element</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>path</l><l>element</l></list><l>ctx.drawFocusIfNeeded(path, element);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="path"/><block var="element"/></list></block></script></block-definition><block-definition s="drawImage %&apos;image&apos; %&apos;dx&apos; %&apos;dy&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">image</input><input type="%n">dx</input><input type="%n">dy</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>image</l><l>dx</l><l>dy</l></list><l>ctx.drawImage(image, dx, dy);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="image"/><block var="dx"/><block var="dy"/></list></block></script></block-definition><block-definition s="drawImage %&apos;image&apos; %&apos;dx&apos; %&apos;dy&apos; %&apos;dWidth&apos; %&apos;dHeight&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">image</input><input type="%n">dx</input><input type="%n">dy</input><input type="%n">dWidth</input><input type="%n">dHeight</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>image</l><l>dx</l><l>dy</l><l>dWidth</l><l>dHeight</l></list><l>ctx.drawImage(image, dx, dy, dWidth, dHeight);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="image"/><block var="dx"/><block var="dy"/><block var="dWidth"/><block var="dHeight"/></list></block></script></block-definition><block-definition s="drawImage %&apos;image&apos; %&apos;sx&apos; %&apos;sy&apos; %&apos;sWidth&apos; %&apos;sHeight&apos; %&apos;dx&apos; %&apos;dy&apos; %&apos;dWidth&apos; %&apos;dHeight&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">image</input><input type="%n">sx</input><input type="%n">sy</input><input type="%n">sWidth</input><input type="%n">sHeight</input><input type="%n">dx</input><input type="%n">dy</input><input type="%n">dWidth</input><input type="%n">dHeight</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>image</l><l>sx</l><l>sy</l><l>sWidth</l><l>sHeight</l><l>dx</l><l>dy</l><l>dWidth</l><l>dHeight</l></list><l>ctx.drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="image"/><block var="sx"/><block var="sy"/><block var="sWidth"/><block var="sHeight"/><block var="dx"/><block var="dy"/><block var="dWidth"/><block var="dHeight"/></list></block></script></block-definition><block-definition s="ellipse %&apos;x&apos; %&apos;y&apos; %&apos;radiusX&apos; %&apos;radiusY&apos; %&apos;rotation&apos; %&apos;startAngle&apos; %&apos;endAngle&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">x</input><input type="%n">y</input><input type="%n">radiusX</input><input type="%n">radiusY</input><input type="%n">rotation</input><input type="%n">startAngle</input><input type="%n">endAngle</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>x</l><l>y</l><l>radiusX</l><l>radiusY</l><l>rotation</l><l>startAngle</l><l>endAngle</l></list><l>ctx.ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="x"/><block var="y"/><block var="radiusX"/><block var="radiusY"/><block var="rotation"/><block var="startAngle"/><block var="endAngle"/></list></block></script></block-definition><block-definition s="ellipse %&apos;x&apos; %&apos;y&apos; %&apos;radiusX&apos; %&apos;radiusY&apos; %&apos;rotation&apos; %&apos;startAngle&apos; %&apos;endAngle&apos; %&apos;counterclockwise&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">x</input><input type="%n">y</input><input type="%n">radiusX</input><input type="%n">radiusY</input><input type="%n">rotation</input><input type="%n">startAngle</input><input type="%n">endAngle</input><input type="%n">counterclockwise</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>x</l><l>y</l><l>radiusX</l><l>radiusY</l><l>rotation</l><l>startAngle</l><l>endAngle</l><l>counterclockwise</l></list><l>ctx.ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, counterclockwise);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="x"/><block var="y"/><block var="radiusX"/><block var="radiusY"/><block var="rotation"/><block var="startAngle"/><block var="endAngle"/><block var="counterclockwise"/></list></block></script></block-definition><block-definition s="fill" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l></list><l>ctx.fill();</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block></list></block></script></block-definition><block-definition s="fill %&apos;path&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">path</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>path</l></list><l>ctx.fill(path);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="path"/></list></block></script></block-definition><block-definition s="fill %&apos;fillRule&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">fillRule</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>fillRule</l></list><l>ctx.fill(fillRule);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="fillRule"/></list></block></script></block-definition><block-definition s="fill %&apos;path&apos; %&apos;fillRule&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">path</input><input type="%n">fillRule</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>path</l><l>fillRule</l></list><l>ctx.fill(path, fillRule);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="path"/><block var="fillRule"/></list></block></script></block-definition><block-definition s="fillRect %&apos;x&apos; %&apos;y&apos; %&apos;width&apos; %&apos;height&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">x</input><input type="%n">y</input><input type="%n">width</input><input type="%n">height</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>x</l><l>y</l><l>width</l><l>height</l></list><l>ctx.fillRect(x, y, width, height);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="x"/><block var="y"/><block var="width"/><block var="height"/></list></block></script></block-definition><block-definition s="fillText %&apos;text&apos; %&apos;x&apos; %&apos;y&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">text</input><input type="%n">x</input><input type="%n">y</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>text</l><l>x</l><l>y</l></list><l>ctx.fillText(text, x, y);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="text"/><block var="x"/><block var="y"/></list></block></script></block-definition><block-definition s="fillText %&apos;text&apos; %&apos;x&apos; %&apos;y&apos; %&apos;maxWidth&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">text</input><input type="%n">x</input><input type="%n">y</input><input type="%n">maxWidth</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>text</l><l>x</l><l>y</l><l>maxWidth</l></list><l>ctx.fillText(text, x, y, maxWidth);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="text"/><block var="x"/><block var="y"/><block var="maxWidth"/></list></block></script></block-definition><block-definition s="getContextAttributes" type="reporter" category="Canvas"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>ctx</l></list><l>return ctx.getContextAttributes();</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block></list></block></block></script></block-definition><block-definition s="getImageData %&apos;sx&apos; %&apos;sy&apos; %&apos;sw&apos; %&apos;sh&apos;" type="reporter" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">sx</input><input type="%n">sy</input><input type="%n">sw</input><input type="%n">sh</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>ctx</l><l>sx</l><l>sy</l><l>sw</l><l>sh</l></list><l>return ctx.getImageData(sx, sy, sw, sh);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="sx"/><block var="sy"/><block var="sw"/><block var="sh"/></list></block></block></script></block-definition><block-definition s="getLineDash" type="reporter" category="Canvas"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>ctx</l></list><l>return ctx.getLineDash();</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block></list></block></block></script></block-definition><block-definition s="getTransform" type="reporter" category="Canvas"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>ctx</l></list><l>return ctx.getTransform();</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block></list></block></block></script></block-definition><block-definition s="isPointInPath %&apos;x&apos; %&apos;y&apos;" type="reporter" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">x</input><input type="%n">y</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>ctx</l><l>x</l><l>y</l></list><l>return ctx.isPointInPath(x, y);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="x"/><block var="y"/></list></block></block></script></block-definition><block-definition s="isPointInPath %&apos;x&apos; %&apos;y&apos; %&apos;fillRule&apos;" type="reporter" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">x</input><input type="%n">y</input><input type="%n">fillRule</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>ctx</l><l>x</l><l>y</l><l>fillRule</l></list><l>return ctx.isPointInPath(x, y, fillRule);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="x"/><block var="y"/><block var="fillRule"/></list></block></block></script></block-definition><block-definition s="isPointInPath %&apos;path&apos; %&apos;x&apos; %&apos;y&apos;" type="reporter" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">path</input><input type="%n">x</input><input type="%n">y</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>ctx</l><l>path</l><l>x</l><l>y</l></list><l>return ctx.isPointInPath(path, x, y);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="path"/><block var="x"/><block var="y"/></list></block></block></script></block-definition><block-definition s="isPointInPath %&apos;path&apos; %&apos;x&apos; %&apos;y&apos; %&apos;fillRule&apos;" type="reporter" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">path</input><input type="%n">x</input><input type="%n">y</input><input type="%n">fillRule</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>ctx</l><l>path</l><l>x</l><l>y</l><l>fillRule</l></list><l>return ctx.isPointInPath(path, x, y, fillRule);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="path"/><block var="x"/><block var="y"/><block var="fillRule"/></list></block></block></script></block-definition><block-definition s="isPointInStroke %&apos;x&apos; %&apos;y&apos;" type="reporter" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">x</input><input type="%n">y</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>ctx</l><l>x</l><l>y</l></list><l>return ctx.isPointInStroke(x, y);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="x"/><block var="y"/></list></block></block></script></block-definition><block-definition s="isPointInStroke %&apos;path&apos; %&apos;x&apos; %&apos;y&apos;" type="reporter" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">path</input><input type="%n">x</input><input type="%n">y</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>ctx</l><l>path</l><l>x</l><l>y</l></list><l>return ctx.isPointInStroke(path, x, y);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="path"/><block var="x"/><block var="y"/></list></block></block></script></block-definition><block-definition s="lineTo %&apos;x&apos; %&apos;y&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">x</input><input type="%n">y</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>x</l><l>y</l></list><l>ctx.lineTo(x, y);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="x"/><block var="y"/></list></block></script></block-definition><block-definition s="measureText %&apos;text&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">text</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>text</l></list><l>ctx.measureText(text);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="text"/></list></block></script></block-definition><block-definition s="moveTo %&apos;x&apos; %&apos;y&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">x</input><input type="%n">y</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>x</l><l>y</l></list><l>ctx.moveTo(x, y);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="x"/><block var="y"/></list></block></script></block-definition><block-definition s="putImageData %&apos;imageData&apos; %&apos;dx&apos; %&apos;dy&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">imageData</input><input type="%n">dx</input><input type="%n">dy</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>imageData</l><l>dx</l><l>dy</l></list><l>ctx.putImageData(imageData, dx, dy);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="imageData"/><block var="dx"/><block var="dy"/></list></block></script></block-definition><block-definition s="putImageData %&apos;imageData&apos; %&apos;dx&apos; %&apos;dy&apos; %&apos;dirtyX&apos; %&apos;dirtyY&apos; %&apos;dirtyWidth&apos; %&apos;dirtyHeight&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">imageData</input><input type="%n">dx</input><input type="%n">dy</input><input type="%n">dirtyX</input><input type="%n">dirtyY</input><input type="%n">dirtyWidth</input><input type="%n">dirtyHeight</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>imageData</l><l>dx</l><l>dy</l><l>dirtyX</l><l>dirtyY</l><l>dirtyWidth</l><l>dirtyHeight</l></list><l>ctx.putImageData(imageData, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="imageData"/><block var="dx"/><block var="dy"/><block var="dirtyX"/><block var="dirtyY"/><block var="dirtyWidth"/><block var="dirtyHeight"/></list></block></script></block-definition><block-definition s="quadraticCurveTo %&apos;cpx&apos; %&apos;cpy&apos; %&apos;x&apos; %&apos;y&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">cpx</input><input type="%n">cpy</input><input type="%n">x</input><input type="%n">y</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>cpx</l><l>cpy</l><l>x</l><l>y</l></list><l>ctx.quadraticCurveTo(cpx, cpy, x, y);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="cpx"/><block var="cpy"/><block var="x"/><block var="y"/></list></block></script></block-definition><block-definition s="rect %&apos;x&apos; %&apos;y&apos; %&apos;width&apos; %&apos;height&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">x</input><input type="%n">y</input><input type="%n">width</input><input type="%n">height</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>x</l><l>y</l><l>width</l><l>height</l></list><l>ctx.rect(x, y, width, height);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="x"/><block var="y"/><block var="width"/><block var="height"/></list></block></script></block-definition><block-definition s="restore" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l></list><l>ctx.restore();</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block></list></block></script></block-definition><block-definition s="rotate %&apos;angle&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">angle</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>angle</l></list><l>ctx.rotate(angle);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="angle"/></list></block></script></block-definition><block-definition s="save" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l></list><l>ctx.save();</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block></list></block></script></block-definition><block-definition s="scale %&apos;x&apos; %&apos;y&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">x</input><input type="%n">y</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>x</l><l>y</l></list><l>ctx.scale(x, y);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="x"/><block var="y"/></list></block></script></block-definition><block-definition s="setLineDash %&apos;segments&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">segments</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>segments</l></list><l>ctx.setLineDash(segments);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="segments"/></list></block></script></block-definition><block-definition s="setTransform %&apos;a&apos; %&apos;b&apos; %&apos;c&apos; %&apos;d&apos; %&apos;e&apos; %&apos;f&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">a</input><input type="%n">b</input><input type="%n">c</input><input type="%n">d</input><input type="%n">e</input><input type="%n">f</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>a</l><l>b</l><l>c</l><l>d</l><l>e</l><l>f</l></list><l>ctx.setTransform(a, b, c, d, e, f);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="a"/><block var="b"/><block var="c"/><block var="d"/><block var="e"/><block var="f"/></list></block></script></block-definition><block-definition s="setTransform %&apos;matrix&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">matrix</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>matrix</l></list><l>ctx.setTransform(matrix);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="matrix"/></list></block></script></block-definition><block-definition s="stroke" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l></list><l>ctx.stroke();</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block></list></block></script></block-definition><block-definition s="stroke %&apos;path&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">path</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>path</l></list><l>ctx.stroke(path);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="path"/></list></block></script></block-definition><block-definition s="strokeRect %&apos;x&apos; %&apos;y&apos; %&apos;width&apos; %&apos;height&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">x</input><input type="%n">y</input><input type="%n">width</input><input type="%n">height</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>x</l><l>y</l><l>width</l><l>height</l></list><l>ctx.strokeRect(x, y, width, height);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="x"/><block var="y"/><block var="width"/><block var="height"/></list></block></script></block-definition><block-definition s="strokeText %&apos;text&apos; %&apos;x&apos; %&apos;y&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">text</input><input type="%n">x</input><input type="%n">y</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>text</l><l>x</l><l>y</l></list><l>ctx.strokeText(text, x, y);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="text"/><block var="x"/><block var="y"/></list></block></script></block-definition><block-definition s="strokeText %&apos;text&apos; %&apos;x&apos; %&apos;y&apos; %&apos;maxWidth&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">text</input><input type="%n">x</input><input type="%n">y</input><input type="%n">maxWidth</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>text</l><l>x</l><l>y</l><l>maxWidth</l></list><l>ctx.strokeText(text, x, y, maxWidth);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="text"/><block var="x"/><block var="y"/><block var="maxWidth"/></list></block></script></block-definition><block-definition s="transform %&apos;a&apos; %&apos;b&apos; %&apos;c&apos; %&apos;d&apos; %&apos;e&apos; %&apos;f&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">a</input><input type="%n">b</input><input type="%n">c</input><input type="%n">d</input><input type="%n">e</input><input type="%n">f</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>a</l><l>b</l><l>c</l><l>d</l><l>e</l><l>f</l></list><l>ctx.transform(a, b, c, d, e, f);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="a"/><block var="b"/><block var="c"/><block var="d"/><block var="e"/><block var="f"/></list></block></script></block-definition><block-definition s="translate %&apos;x&apos; %&apos;y&apos;" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%n">x</input><input type="%n">y</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>ctx</l><l>x</l><l>y</l></list><l>ctx.translate(x, y);</l></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>ctx</l></list></block><block var="x"/><block var="y"/></list></block></script></block-definition><block-definition s="costume %&apos;ctx&apos; %&apos;script&apos;" type="reporter" category="Canvas"><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%cs"></input></inputs><script><block s="clear"></block><block s="doSetVar"><l>ctx</l><block s="evaluate"><block s="reportJSFunction"><list></list><l>return this.parentThatIsA(StageMorph).penTrails().getContext(&apos;2d&apos;);</l></block><list></list></block></block><block s="doRun"><block var="script"/><list></list></block><block s="doRun"><block s="reportJSFunction"><list></list><l>this.parentThatIsA(StageMorph).changed();</l></block><list></list></block><block s="doDeclareVariables"><list><l>trails</l></list></block><block s="doSetVar"><l>trails</l><block s="reportPenTrailsAsCostume"></block></block><block s="clear"></block><block s="doReport"><block var="trails"/></block></script><scripts><script x="105" y="413.33333333333354"><block s="doRun"><block s="reportJSFunction"><list></list><l>this.parentThatIsA(StageMorph).changed();</l></block><list></list></block></script><script x="44" y="305.8333333333334"><block s="doSetVar"><l>new costume</l><l>0</l></block></script><script x="234.98333358764648" y="306.8333333333334"><block var="new costume"/></script><script x="85" y="354.6666666666668"><block s="doSwitchToCostume"><block var="trails"/></block><block s="doStamp"></block><block s="doSwitchToCostume"><block var="costume"/></block></script><script x="307" y="350.6666666666667"><block s="doSetVar"><l>costume</l><block s="reportGet"><l><option>costume</option></l></block></block></script></scripts></block-definition><block-definition s="stage change" type="command" category="Canvas"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>this.parentThatIsA(StageMorph).changed();</l></block><list></list></block></script></block-definition></blocks><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="true" hyperops="true" codify="false" inheritance="true" sublistIDs="false" id="2036"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAOhUlEQVR4Xu3VwQkAAAjEMN1/abewn7jAQRC64wgQIECAAIF3gX1fNEiAAAECBAiMAHsCAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQIHLFxAWmhEwHPAAAAAElFTkSuQmCC</pentrails><costumes><list struct="atomic" id="2037"></list></costumes><sounds><list struct="atomic" id="2038"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="Sprite" idx="1" x="290.7363896848126" y="-15.833810888252003" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="80,80,80,1" pen="tip" id="2043"><costumes><list struct="atomic" id="2044"></list></costumes><sounds><list struct="atomic" id="2045"></list></sounds><blocks></blocks><variables></variables><scripts><script x="12" y="10"><block s="doSwitchToCostume"><custom-block s="costume %upvar %cs"><l>ctx</l><script><custom-block s="ctx %s = %s"><l>lineWidth</l><l>10</l></custom-block><custom-block s="strokeRect %n %n %n %n"><l>75</l><l>140</l><l>150</l><l>110</l></custom-block><custom-block s="fillRect %n %n %n %n"><l>130</l><l>190</l><l>40</l><l>60</l></custom-block><custom-block s="beginPath"></custom-block><custom-block s="moveTo %n %n"><l>50</l><l>140</l></custom-block><custom-block s="lineTo %n %n"><l>150</l><l>60</l></custom-block><custom-block s="lineTo %n %n"><l>250</l><l>140</l></custom-block><custom-block s="closePath"></custom-block><custom-block s="stroke"></custom-block></script></custom-block></block></script><script x="10" y="239.00000000000028"><custom-block s="draw %upvar %cs"><l>ctx</l><script><block s="doFor"><l>y</l><l>0</l><l>23</l><script><block s="doFor"><l>x</l><l>0</l><l>30</l><script><custom-block s="ctx %s = %s"><l>fillStyle</l><block s="reportJoinWords"><list><l>rgb(</l><block s="reportRandom"><l>0</l><l>255</l></block><l>, </l><block s="reportRandom"><l>0</l><l>255</l></block><l>, </l><block s="reportRandom"><l>0</l><l>255</l></block><l>)</l></list></block></custom-block><custom-block s="fillRect %n %n %n %n"><block s="reportVariadicProduct"><list><block var="x"/><l>16</l></list></block><block s="reportVariadicProduct"><list><block var="y"/><l>16</l></list></block><l>16</l><l>16</l></custom-block><custom-block s="stage change"></custom-block></script></block></script></block></script></custom-block></script><script x="966" y="110.50000000000034"><block s="doForEach"><l>inp</l><block s="reportTextSplit"><l>arc(x, y, radius, startAngle, endAngle)&#xD;arc(x, y, radius, startAngle, endAngle, counterclockwise)&#xD;arcTo(x1, y1, x2, y2, radius)&#xD;beginPath()&#xD;bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)&#xD;clearRect(x, y, width, height)&#xD;clip()&#xD;clip(path)&#xD;clip(fillRule)&#xD;clip(path, fillRule)&#xD;closePath()&#xD;r|createConicGradient(startAngle, x, y)&#xD;r|createImageData(width, height)&#xD;r|createImageData(imagedata)&#xD;r|createLinearGradient(x0, y0, x1, y1)&#xD;r|createPattern(image, repetition)&#xD;r|createRadialGradient(x0, y0, r0, x1, y1, r1)&#xD;drawFocusIfNeeded(element)&#xD;drawFocusIfNeeded(path, element)&#xD;drawImage(image, dx, dy)&#xD;drawImage(image, dx, dy, dWidth, dHeight)&#xD;drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight)&#xD;ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle)&#xD;ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, counterclockwise)&#xD;fill()&#xD;fill(path)&#xD;fill(fillRule)&#xD;fill(path, fillRule)&#xD;fillRect(x, y, width, height)&#xD;fillText(text, x, y)&#xD;fillText(text, x, y, maxWidth)&#xD;r|getContextAttributes()&#xD;r|getImageData(sx, sy, sw, sh)&#xD;r|getLineDash()&#xD;r|getTransform()&#xD;p|isPointInPath(x, y)&#xD;p|isPointInPath(x, y, fillRule)&#xD;p|isPointInPath(path, x, y)&#xD;p|isPointInPath(path, x, y, fillRule)&#xD;p|isPointInStroke(x, y)&#xD;p|isPointInStroke(path, x, y)&#xD;lineTo(x, y)&#xD;measureText(text)&#xD;moveTo(x, y)&#xD;putImageData(imageData, dx, dy)&#xD;putImageData(imageData, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight)&#xD;quadraticCurveTo(cpx, cpy, x, y)&#xD;rect(x, y, width, height)&#xD;restore()&#xD;rotate(angle)&#xD;save()&#xD;scale(x, y)&#xD;setLineDash(segments)&#xD;setTransform(a, b, c, d, e, f)&#xD;setTransform(matrix)&#xD;stroke()&#xD;stroke(path)&#xD;strokeRect(x, y, width, height)&#xD;strokeText(text, x, y)&#xD;strokeText(text, x, y, maxWidth)&#xD;transform(a, b, c, d, e, f)&#xD;translate(x, y)</l><l><option>line</option></l></block><script><block s="doSetVar"><l>inp</l><block s="reportTextSplit"><block var="inp"/><l>|</l></block></block><block s="doDeclareVariables"><list><l>method</l><l>parameters</l><l>type</l><l>body</l></list></block><block s="doSetVar"><l>type</l><block s="reportIfElse"><block s="reportGreaterThan"><block s="reportListAttribute"><l><option>length</option></l><block var="inp"/></block><l>1</l></block><block s="reportIfElse"><block s="reportEquals"><block s="reportListItem"><l><option>last</option></l><block var="inp"/></block><l>p</l></block><l>predicate</l><l>reporter</l></block><l>command</l></block></block><block s="doSetVar"><l>inp</l><block s="reportListItem"><l><option>last</option></l><block var="inp"/></block></block><block s="doSetVar"><l>method</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="inp"/><l>(</l></block></block></block><block s="doSetVar"><l>parameters</l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block s="reportListItem"><l>2</l><block s="reportTextSplit"><block var="inp"/><l>(</l></block></block><l>)</l></block></block></block><block s="doSetVar"><l>parameters</l><block s="reportIfElse"><block s="reportStringSize"><block var="parameters"/></block><block s="reportTextSplit"><block var="parameters"/><l>, </l></block><block s="reportNewList"><list></list></block></block></block><block s="doSetVar"><l>body</l><block s="reportIfElse"><block s="reportEquals"><block var="type"/><l>command</l></block><custom-block s="template (c) %s %mult%s"><block var="method"/><block var="parameters"/></custom-block><custom-block s="template (r) %s %mult%s"><block var="method"/><block var="parameters"/></custom-block></block></block><block s="doRun"><block s="reportJSFunction"><list><l>method</l><l>parameters</l><l>type</l><l>body</l></list><l>parameters = parameters.asArray();&#xD;&#xD;var ide = this.parentThatIsA(IDE_Morph),&#xD;    stage = ide.stage;&#xD;&#xD;var spec = method + parameters.reduce((a, v) =&gt; a + &apos; %\&apos;&apos; + v +&apos;\&apos;&apos;, &apos;&apos;),&#xD;    def = new CustomBlockDefinition(spec);&#xD;&#xD;def.isGlobal = true;&#xD;def.category = &apos;Canvas&apos;;&#xD;&#xD;parameters.forEach(_ =&gt; def.declarations.set(_, [&apos;%n&apos;, _, &apos;&apos;, false]));&#xD;&#xD;def.type = type;&#xD;def.body = body;&#xD;&#xD;stage.globalBlocks.push(def);&#xD;&#xD;ide.flushBlocksCache();&#xD;ide.refreshPalette();</l></block><list><block var="method"/><block var="parameters"/><block var="type"/><block var="body"/></list></block></script></block></script><comment x="862" y="109.00000000000006" w="90" collapsed="false">dont run, this is how i &apos;generated&apos; the blocks (no way i was doint that manually :P )</comment></scripts></sprite></sprites></stage><variables></variables></scene></scenes></project><media name="Canvas" app="Snap! 7, https://snap.berkeley.edu" version="2"></media></snapdata>