<snapdata remixID="14419942"><project name="Villageon" app="Snap! 10.7.2, https://snap.berkeley.edu" version="2"><notes></notes><thumbnail>data:image/png;base64,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</thumbnail><scenes select="1"><scene name="Villageon"><notes></notes><hidden></hidden><headers></headers><code></code><blocks><block-definition s="costume from text %&apos;text&apos; size %&apos;size&apos;" type="reporter" category="looks"><header></header><code></code><translations>de:Kostüm aus Text _ Größe _&#xD;pt:um traje com o texto _ de tamanho _&#xD;ca:vestit amb el text _ i mida _&#xD;</translations><inputs><input type="%s">A</input><input type="%n">72</input></inputs><script><block s="doDeclareVariables"><list><l>costume</l><l>x</l><l>y</l><l>dir</l><l>cst</l><l>trails</l><l>pen state</l></list></block><block s="doSetVar"><l>x</l><block s="xPosition"></block></block><block s="doSetVar"><l>y</l><block s="yPosition"></block></block><block s="doSetVar"><l>dir</l><block s="direction"></block></block><block s="doSetVar"><l>cst</l><block s="reportGet"><l><option>costume</option></l></block></block><block s="doSetVar"><l>pen state</l><block s="getPenDown"></block></block><block s="up"></block><block s="doGotoObject"><l><option>center</option></l></block><block s="setHeading"><l>90</l></block><block s="doSwitchToCostume"><l><option>Turtle</option></l></block><block s="doSetVar"><l>trails</l><block s="reportPenTrailsAsCostume"></block></block><block s="clear"></block><block s="gotoXY"><block s="reportAttributeOf"><l><option>left</option></l><l>Stage</l></block><l>0</l></block><block s="write"><block var="text"/><block var="size"/></block><block s="gotoXY"><block s="reportAttributeOf"><l><option>left</option></l><l>Stage</l></block><l>0</l></block><block s="doSetVar"><l>costume</l><block s="reportPenTrailsAsCostume"></block></block><block s="clear"></block><block s="doApplyExtension"><l>obj_name(obj, name)</l><list><block var="costume"/><block s="reportJoinWords"><list><block var="text"/></list></block></list></block><block s="doGotoObject"><l><option>center</option></l></block><block s="doSwitchToCostume"><block var="trails"/></block><block s="doStamp"></block><block s="doSwitchToCostume"><block var="cst"/></block><block s="gotoXY"><block var="x"/><block var="y"/></block><block s="setHeading"><block var="dir"/></block><block s="doIf"><block var="pen state"/><script><block s="down"></block></script><list></list></block><block s="doReport"><block var="costume"/></block></script></block-definition><block-definition s="costume %&apos;cst&apos; with background RGBA %&apos;rgb&apos; padding %&apos;padding&apos;" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>§_costumesMenu</options></input><input type="%n">200</input><input type="%n">2</input></inputs><script><block s="doDeclareVariables"><list><l>old</l><l>clr</l><l>new</l><l>x</l><l>y</l><l>dir</l><l>trails</l><l>flat</l><l>old size</l><l>old pen state</l></list></block><block s="doSetVar"><l>x</l><block s="xPosition"></block></block><block s="doSetVar"><l>y</l><block s="yPosition"></block></block><block s="doSetVar"><l>dir</l><block s="direction"></block></block><block s="doSetVar"><l>old</l><block s="reportGet"><l><option>costume</option></l></block></block><block s="doSetVar"><l>clr</l><block s="getPenAttribute"><l><option>r-g-b-a</option></l></block></block><block s="doSetVar"><l>flat</l><block s="reportGlobalFlag"><l><option>flat line ends</option></l></block></block><block s="doSetVar"><l>old size</l><block s="getPenAttribute"><l><option>size</option></l></block></block><block s="doSetVar"><l>old pen state</l><block s="getPenDown"></block></block><block s="up"></block><block s="doGotoObject"><l><option>center</option></l></block><block s="doSetVar"><l>trails</l><block s="reportPenTrailsAsCostume"></block></block><block s="clear"></block><block s="gotoXY"><block s="reportMonadic"><l><option>neg</option></l><block s="reportVariadicSum"><list><block s="reportQuotient"><block s="reportGetImageAttribute"><l><option>width</option></l><block var="cst"/></block><l>2</l></block><block var="padding"/></list></block></block><l>0</l></block><block s="setHeading"><l>90</l></block><block s="doSetGlobalFlag"><l><option>flat line ends</option></l><l><bool>true</bool></l></block><block s="setSize"><block s="reportVariadicSum"><list><block s="reportGetImageAttribute"><l><option>height</option></l><block var="cst"/></block><block s="reportVariadicProduct"><list><block var="padding"/><l>2</l></list></block></list></block></block><block s="setPenColorDimension"><l><option>r-g-b(-a)</option></l><block var="rgb"/></block><block s="down"></block><block s="setXPosition"><block s="reportMonadic"><l><option>neg</option></l><block s="xPosition"></block></block></block><block s="up"></block><block s="doSwitchToCostume"><block var="cst"/></block><block s="doGotoObject"><l><option>center</option></l></block><block s="gotoXY"><block s="reportMonadic"><l><option>neg</option></l><block s="reportGet"><l><option>center x</option></l></block></block><block s="reportMonadic"><l><option>neg</option></l><block s="reportGet"><l><option>center y</option></l></block></block></block><block s="doStamp"></block><block s="doGotoObject"><l><option>center</option></l></block><block s="doSetVar"><l>new</l><block s="reportPenTrailsAsCostume"></block></block><block s="doApplyExtension"><l>obj_name(obj, name)</l><list><block var="new"/><block s="reportIfElse"><block s="reportListContainsItem"><block s="reportTextSplit"><block s="reportAttributeOf"><l><option>costume name</option></l><l>Sprite</l></block><l><option>word</option></l></block><l>button</l></block><block s="reportAttributeOf"><l><option>costume name</option></l><l>Sprite</l></block><block s="reportJoinWords"><list><block s="reportAttributeOf"><l><option>costume name</option></l><l>Sprite</l></block><l> button</l></list></block></block></list></block><block s="clear"></block><block s="doGotoObject"><l><option>center</option></l></block><block s="doSwitchToCostume"><block var="trails"/></block><block s="doStamp"></block><block s="doSwitchToCostume"><block var="old"/></block><block s="gotoXY"><block var="x"/><block var="y"/></block><block s="setHeading"><block var="dir"/></block><block s="setPenColorDimension"><l><option>r-g-b(-a)</option></l><block var="clr"/></block><block s="doSetGlobalFlag"><l><option>flat line ends</option></l><block var="flat"/></block><block s="setSize"><block var="old size"/></block><block s="doIf"><block var="old pen state"/><script><block s="down"></block></script><list></list></block><block s="doReport"><block var="new"/></block></script><scripts><script x="255" y="186.19999999999996"><custom-block s="costume %s with background RGBA %n padding %n"><custom-block s="costume %s with background RGBA %n padding %n"><custom-block s="costume from text %s size %n"><l>Snap!</l><l>36</l></custom-block><l>200</l><l>10</l></custom-block><l>100</l><l>2</l></custom-block></script><comment x="248.685546875" y="121.03333333333337" w="106" collapsed="false">Use this block to make &quot;clickable&quot; buttons:</comment></scripts></block-definition><block-definition s="export costume %&apos;costume&apos;" type="command" category="looks"><header></header><code></code><translations>pl:eksportuj kostium _&#xD;</translations><inputs><input type="%s" readonly="true"><options>§_costumesMenu</options></input></inputs><script><block s="doSetVar"><l>costume</l><block s="reportIfElse"><block s="reportIsA"><block var="costume"/><l><option>costume</option></l></block><block var="costume"/><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><block s="reportGetImageAttribute"><l><option>name</option></l><l></l></block><block var="costume"/></list></block></autolambda><list></list></block><block s="reportGet"><l><option>costumes</option></l></block></block></block></block><block s="doIf"><block s="reportIsA"><block var="costume"/><l><option>costume</option></l></block><script><block s="doApplyExtension"><l>cst_export(cst, name)</l><list><block var="costume"/><l></l></list></block></script><list></list></block></script></block-definition><block-definition s="set name of costume %&apos;costume&apos; to %&apos;name&apos;" type="command" category="looks"><header></header><code></code><translations>pl:ustaw nazwę kostiumu _ na _&#xD;</translations><inputs><input type="%s" readonly="true"><options>§_costumesMenu</options></input><input type="%s">thing</input></inputs><script><block s="doSetVar"><l>costume</l><block s="reportIfElse"><block s="reportIsA"><block var="costume"/><l><option>costume</option></l></block><block var="costume"/><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><block s="reportGetImageAttribute"><l><option>name</option></l><l></l></block><block var="costume"/></list></block></autolambda><list></list></block><block s="reportGet"><l><option>costumes</option></l></block></block></block></block><block s="doIf"><block s="reportIsA"><block var="costume"/><l><option>costume</option></l></block><script><block s="doApplyExtension"><l>obj_name(obj, name)</l><list><block var="costume"/><block var="name"/></list></block></script><list></list></block></script></block-definition><block-definition s="$camera snap" type="reporter" category="sensing"><comment x="0" y="0" w="216" collapsed="false">takes a snapshot with the webcam and reports it as a new costume, or zero if the user cancels</comment><header></header><code></code><translations>pt:$camera a imagem actual do vídeo&#xD;pl:$camera zdjęcie&#xD;</translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>callback</l><l>pic</l></list></block><block s="doSetVar"><l>callback</l><block s="reportApplyExtension"><l>mda_snap</l><list></list></block></block><block s="doWaitUntil"><block s="evaluate"><block s="reifyScript"><script><block s="doSetVar"><l>pic</l><block s="evaluate"><block var="callback"/><list></list></block></block><block s="doReport"><block s="reportNot"><block s="reportVariadicEquals"><list><block var="pic"/><block s="reportBoolean"><l><bool>false</bool></l></block></list></block></block></block></script><list></list></block><list></list></block></block><block s="doReport"><block var="pic"/></block></script></block-definition><block-definition s="export costume list %&apos;costumes&apos; base name %&apos;name&apos;" type="command" category="looks"><header></header><code></code><translations>pl:eksportuj listę kostiumu _ nazwa _&#xD;</translations><inputs><input type="%l"></input><input type="%s">frame</input></inputs><script><block s="doDeclareVariables"><list><l>count</l></list></block><block s="doSetVar"><l>count</l><block s="reportListAttribute"><l><option>length</option></l><block var="costumes"/></block></block><block s="doForEach"><l>item</l><block s="reportListAttribute"><l><option>reverse</option></l><block var="costumes"/></block><script><block s="doApplyExtension"><l>cst_export(cst, name)</l><list><block var="item"/><block s="reportJoinWords"><list><block var="name"/><l> (</l><block var="count"/><l>)</l></list></block></list></block><block s="doChangeVar"><l>count</l><l>-1</l></block><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportModulus"><block var="count"/><l>10</l></block><l>0</l></list></block><script><block s="doWait"><l>1</l></block></script><list></list></block></script></block></script></block-definition><block-definition s="grayscales of %&apos;costume&apos;" type="reporter" category="looks"><header></header><code></code><translations>pl:_ w skali szarości&#xD;</translations><inputs><input type="%s" readonly="true"><options>§_costumesMenu</options></input></inputs><script><block s="doReport"><block s="reportReshape"><block s="reportVariadicSum"><block s="reportListAttribute"><l><option>columns</option></l><block s="reportVariadicProduct"><list><block s="reportGetImageAttribute"><l><option>pixels</option></l><block var="costume"/></block><block s="reportNewList"><list><l>.3</l><l>.6</l><l>.1</l></list></block></list></block></block></block><list><block s="reportGetImageAttribute"><l><option>height</option></l><block var="costume"/></block><block s="reportGetImageAttribute"><l><option>width</option></l><block var="costume"/></block></list></block></block></script></block-definition><block-definition s="%&apos;filter&apos; filter on %&apos;costume&apos; alpha %&apos;alpha&apos;" type="reporter" category="looks"><header></header><code></code><translations>pl:filtr _ na _ kanał alfa _&#xD;</translations><inputs><input type="%s" readonly="true">blur<options>blur&#xD;sharpen&#xD;outline&#xD;emboss&#xD;edge={&#xD;left&#xD;right&#xD;top&#xD;bottom&#xD;}&#xD;Gauss</options></input><input type="%s" readonly="true">current<options>§_costumesMenu</options></input><input type="%b">true</input></inputs><script><block s="doDeclareVariables"><list><l>kernel</l><l>pixels</l><l>channels</l></list></block><block s="doSetVar"><l>kernel</l><block s="reportIfElse"><block s="reportVariadicGreaterThan"><list><block s="reportListAttribute"><l><option>rank</option></l><block var="filter"/></block><l>1</l></list></block><block var="filter"/><custom-block s="filter %s"><block var="filter"/></custom-block></block></block><block s="doSetVar"><l>pixels</l><block s="reportGetImageAttribute"><l><option>pixels</option></l><block var="costume"/></block></block><block s="doIf"><block var="alpha"/><script><block s="doSetVar"><l>channels</l><l>4</l></block></script><list><l><bool>true</bool></l><script><block s="doSetVar"><l>channels</l><l>3</l></block><block s="doSetVar"><l>pixels</l><block s="reportVariadicProduct"><list><block var="pixels"/><block s="reportNewList"><list><l>1</l><l>1</l><l>1</l></list></block></list></block><comment w="137" collapsed="true">remove alpha channel</comment></block></script></list></block><block s="doReport"><block s="reportNewCostume"><custom-block s="convolve matrix %l * kernel %l"><block s="reportReshape"><block var="pixels"/><list><block s="reportGetImageAttribute"><l><option>height</option></l><block var="costume"/></block><block s="reportGetImageAttribute"><l><option>width</option></l><block var="costume"/></block><block var="channels"/></list></block><block var="kernel"/></custom-block><l></l><l></l></block></block></script></block-definition><block-definition s="filter %&apos;name&apos;" type="reporter" category="looks"><header></header><code></code><translations>pl:filtr _&#xD;</translations><inputs><input type="%s" readonly="true">blur<options>blur&#xD;sharpen&#xD;outline&#xD;emboss&#xD;edge={&#xD;left&#xD;right&#xD;top&#xD;bottom&#xD;}&#xD;Gauss</options></input></inputs><script><block s="doIf"><block s="reportVariadicEquals"><list><block var="name"/><l>sharpen</l></list></block><script><block s="doReport"><custom-block s="kernel %br %n %n %n %br %n %n %n %br %n %n %n"><l>0</l><l>-1</l><l>0</l><l>-1</l><l>5</l><l>-1</l><l>0</l><l>-1</l><l>0</l></custom-block></block></script><list><block s="reportVariadicEquals"><list><block var="name"/><l>outline</l></list></block><script><block s="doReport"><custom-block s="kernel %br %n %n %n %br %n %n %n %br %n %n %n"><l>-1</l><l>-1</l><l>-1</l><l>-1</l><l>8</l><l>-1</l><l>-1</l><l>-1</l><l>-1</l></custom-block></block></script><block s="reportVariadicEquals"><list><block var="name"/><l>emboss</l></list></block><script><block s="doReport"><custom-block s="kernel %br %n %n %n %br %n %n %n %br %n %n %n"><l>-2</l><l>-1</l><l>0</l><l>-1</l><l>1</l><l>1</l><l>0</l><l>1</l><l>2</l></custom-block></block></script><block s="reportVariadicEquals"><list><block var="name"/><l>left</l></list></block><script><block s="doReport"><custom-block s="kernel %br %n %n %n %br %n %n %n %br %n %n %n"><l>-1</l><l>0</l><l>1</l><l>-2</l><l>0</l><l>2</l><l>-1</l><l>0</l><l>1</l></custom-block></block></script><block s="reportVariadicEquals"><list><block var="name"/><l>right</l></list></block><script><block s="doReport"><custom-block s="kernel %br %n %n %n %br %n %n %n %br %n %n %n"><l>1</l><l>0</l><l>-1</l><l>2</l><l>0</l><l>-2</l><l>1</l><l>0</l><l>-1</l></custom-block></block></script><block s="reportVariadicEquals"><list><block var="name"/><l>top</l></list></block><script><block s="doReport"><custom-block s="kernel %br %n %n %n %br %n %n %n %br %n %n %n"><l>-1</l><l>-2</l><l>-1</l><l>0</l><l>0</l><l>0</l><l>1</l><l>2</l><l>1</l></custom-block></block></script><block s="reportVariadicEquals"><list><block var="name"/><l>bottom</l></list></block><script><block s="doReport"><custom-block s="kernel %br %n %n %n %br %n %n %n %br %n %n %n"><l>1</l><l>2</l><l>1</l><l>0</l><l>0</l><l>0</l><l>-1</l><l>-2</l><l>-1</l></custom-block></block></script><block s="reportVariadicEquals"><list><block var="name"/><l>gauss</l></list></block><script><block s="doReport"><block s="reportQuotient"><block s="reportNewList"><list><block s="reportNewList"><list><l>1</l><l>4</l><l>7</l><l>4</l><l>1</l></list></block><block s="reportNewList"><list><l>4</l><l>16</l><l>26</l><l>16</l><l>4</l></list></block><block s="reportNewList"><list><l>7</l><l>26</l><l>41</l><l>26</l><l>7</l></list></block><block s="reportNewList"><list><l>4</l><l>16</l><l>26</l><l>16</l><l>4</l></list></block><block s="reportNewList"><list><l>1</l><l>4</l><l>7</l><l>4</l><l>1</l></list></block></list></block><l>273</l></block></block></script></list></block><block s="doReport"><custom-block s="kernel %br %n %n %n %br %n %n %n %br %n %n %n"><l>0.0625</l><l>0.125</l><l>0.0625</l><l>0.125</l><l>0.25</l><l>0.125</l><l>0.0625</l><l>0.125</l><l>0.0625</l><comment w="80" collapsed="false">blur</comment></custom-block></block></script></block-definition><block-definition s="rectangle costume %&apos;color&apos; width: %&apos;w&apos; height: %&apos;h&apos;" type="reporter" category="looks"><comment x="0" y="0" w="204.00000000000023" collapsed="false">make a rectangle costume with the given color, width and height. The color can be either specified by the color picker from the input slot, or it can be a list of r-g-b-a values.</comment><header></header><code></code><translations>pl:prostokątny kostium _ szerokość: _ wysokość: _&#xD;</translations><inputs><input type="%clr"></input><input type="%n">20</input><input type="%n">60</input></inputs><script><block s="doIf"><block s="reportIsA"><block var="color"/><l><option>list</option></l></block><script><block s="doSetVar"><l>color</l><block s="reportApplyExtension"><l>clr_rgba(r, g, b, a)</l><block s="reportIfElse"><block s="reportVariadicLessThan"><list><block s="reportListAttribute"><l><option>length</option></l><block var="color"/></block><l>4</l></list></block><block s="reportConcatenatedLists"><list><block s="reportReshape"><block var="color"/><list><l>3</l></list></block><block s="reportNewList"><list><l>255</l></list></block></list></block><block s="reportReshape"><block var="color"/><list><l>4</l></list></block></block></block></block></script><list></list></block><block s="doReport"><block s="reportNewCostume"><block s="reportReshape"><block s="reportVariadicProduct"><list><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportApplyExtension"><l>clr_channel(clr, rgba)</l><list><block var="color"/><l></l></list></block></autolambda><list></list></block><block s="reportNewList"><list><l>r</l><l>g</l><l>b</l><l>a</l></list></block></block><block s="reportNewList"><list><l>1</l><l>1</l><l>1</l><l>255</l></list></block></list></block><list><block s="reportVariadicProduct"><list><block s="reportVariadicMax"><list><block s="reportMonadic"><l><option>abs</option></l><block var="h"/></block><l>1</l></list></block><block s="reportVariadicMax"><list><block s="reportMonadic"><l><option>abs</option></l><block var="w"/></block><l>1</l></list></block></list></block><l>4</l></list></block><block s="reportVariadicMax"><list><block s="reportMonadic"><l><option>abs</option></l><block var="w"/></block><l>1</l></list></block><block s="reportVariadicMax"><list><block s="reportMonadic"><l><option>abs</option></l><block var="h"/></block><l>1</l></list></block></block></block></script></block-definition><block-definition s="kernel $nl %&apos;a1&apos; %&apos;b1&apos; %&apos;c1&apos; $nl %&apos;a2&apos; %&apos;b2&apos; %&apos;c2&apos; $nl %&apos;a3&apos; %&apos;b3&apos; %&apos;c3&apos;" type="reporter" category="lists"><header></header><code></code><translations>pl:jądro _ _ _ _ _ _ _ _ _ _ _ _&#xD;</translations><inputs><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="reportReshape"><block s="reportEnvironment"><l><option>inputs</option></l></block><list><l>3</l><l>3</l></list></block></block></script></block-definition><block-definition s="convolve matrix %&apos;matrix&apos; * kernel %&apos;kernel&apos;" type="reporter" category="operators"><header></header><code></code><translations>pl:przemnóż macierz _ * jądro _&#xD;</translations><inputs><input type="%l"></input><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>padding</l><l>channels</l><l>every coordinate</l><l>channel indices</l></list></block><block s="doSetVar"><l>padding</l><block s="reportQuotient"><block s="reportDifference"><block s="reportListItem"><block s="reportNewList"><list><l>1</l><l>2</l></list></block><block s="reportListAttribute"><l><option>dimensions</option></l><block var="kernel"/></block></block><l>1</l></block><l>2</l></block><comment w="119" collapsed="false">assume odd dimensions, typically 3x3 or 5x5</comment></block><block s="doSetVar"><l>channels</l><block s="reportListItem"><l>3</l><block s="reportListAttribute"><l><option>dimensions</option></l><block var="matrix"/></block></block></block><block s="doSetVar"><l>every coordinate</l><block s="reportCrossproduct"><block s="reportNumbers"><l>1</l><block s="reportListItem"><block s="reportNewList"><list><l>1</l><l>2</l></list></block><block s="reportListAttribute"><l><option>dimensions</option></l><block var="matrix"/></block></block></block></block></block><block s="doIfElse"><block s="reportVariadicGreaterThan"><list><block var="channels"/><l>0</l></list></block><script><block s="doSetVar"><l>channel indices</l><block s="reportNewList"><list><block s="reportReshape"><block s="reportNumbers"><l>1</l><block var="channels"/></block><list><block s="reportListAttribute"><l><option>length</option></l><block var="every coordinate"/></block><block var="channels"/></list></block></list></block></block><block s="doIf"><block s="reportVariadicLessThan"><list><block s="reportListAttribute"><l><option>dimensions</option></l><block var="kernel"/></block><l>3</l></list></block><script><block s="doSetVar"><l>kernel</l><block s="reportReshape"><custom-block s="stretch %l by %n"><block s="reportListAttribute"><l><option>flatten</option></l><block var="kernel"/></block><block var="channels"/></custom-block><block s="reportConcatenatedLists"><list><block s="reportListAttribute"><l><option>dimensions</option></l><block var="kernel"/></block><block s="reportNewList"><list><block var="channels"/></list></block></list></block></block></block></script><list></list><comment w="90" collapsed="false">reshape the kernel to match the input matrix&apos;s channels, if any</comment></block></script><script><block s="doSetVar"><l>channel indices</l><block s="reportNewList"><list></list></block></block></script></block><block s="doReport"><block s="reportReshape"><block s="reportVariadicSum"><block s="reportListAttribute"><l><option>columns</option></l><block s="reportVariadicSum"><block s="reportListAttribute"><l><option>columns</option></l><block s="reportVariadicProduct"><list><block s="reportListItem"><block s="reportListAttribute"><l><option>columns</option></l><block s="reportConcatenatedLists"><list><block s="reportListAttribute"><l><option>columns</option></l><block s="reportNumbers"><block s="reportDifference"><block var="every coordinate"/><block var="padding"/></block><block s="reportVariadicSum"><list><block var="every coordinate"/><block var="padding"/></list></block></block></block><block var="channel indices"/></list></block></block><block var="matrix"/></block><block var="kernel"/></list></block></block></block></block></block><block s="reportListAttribute"><l><option>dimensions</option></l><block var="matrix"/></block><comment w="80" collapsed="false">for every padded pixel create a partial copy of the input, item-multiply it with the kernel and take its overall sum (∑)</comment></block></block></script></block-definition><block-definition s="stretch %&apos;data&apos; by %&apos;factor&apos;" type="reporter" category="lists"><header></header><code></code><translations>pl:rozciągnij _ o _&#xD;de:strecke _ um _&#xD;</translations><inputs><input type="%l"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="reportListItem"><block s="reportMonadic"><l><option>ceiling</option></l><block s="reportQuotient"><block s="reportNumbers"><l>1</l><block s="reportVariadicProduct"><list><block s="reportListAttribute"><l><option>length</option></l><block var="data"/></block><block var="factor"/></list></block></block><block var="factor"/></block></block><block var="data"/></block></block></script></block-definition><block-definition s="compress %&apos;data&apos; by %&apos;factor&apos;" type="reporter" category="lists"><header></header><code></code><translations>de:stauche _ um _&#xD;</translations><inputs><input type="%l" initial="1"></input><input type="%n" initial="1"></input></inputs><script><block s="doReport"><custom-block s="stretch %l by %n"><block var="data"/><block s="reportQuotient"><l>1</l><block var="factor"/></block></custom-block></block></script></block-definition><block-definition s="write %&apos;text&apos; size %&apos;sz&apos; stats %&apos;stats&apos;" type="command" category="pen"><comment x="0" y="0" w="211.66666666666669" collapsed="false">Writes text onto the stage, and allows extra styling. You don&apos;t have to add stats.&#xD;&#xD;Created by Tethrarxitet!&#xD;pic goes hard feel free to screenshot</comment><header></header><code></code><translations>es:escribir _ con tamaña _ e información _&#xD;pt:escreva _ com tamanho _ e edita _&#xD;fr:écrire _ avec la taille _ et les modificateurs _&#xD;ru:напишите _ с размером _ и модами _&#xD;</translations><inputs><input type="%s">Hello!</input><input type="%n">12</input><input type="%n" readonly="true"></input></inputs><script><block s="write"><block var="text"/><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="stats"/><l>0</l></list></block><block var="sz"/><block s="reportJoinWords"><list><block s="reportIfElse"><block s="reportVariadicEquals"><list><block s="reportTypeOf"><block s="reportListItem"><l>2</l><block var="stats"/></block></block><l>Boolean</l></list></block><block s="reportIfElse"><block s="reportListItem"><l>2</l><block var="stats"/></block><l>bold </l><l></l></block><block s="reportJoinWords"><list><block s="reportListItem"><l>2</l><block var="stats"/></block><l> </l></list></block></block><block s="reportIfElse"><block s="reportListItem"><l>3</l><block var="stats"/></block><l>italic </l><l></l></block><block var="sz"/><l>px </l><block s="reportListItem"><l>1</l><block var="stats"/></block><l>,</l></list></block></block></block></script><scripts><script x="8.333333333333334" y="241.05555555555455"><custom-block s="write %s size %n stats %n"><l>Hello!</l><l>12</l><l></l></custom-block></script><script x="8.333333333333334" y="278.38888888888783"><custom-block s="text costume %s size %n stats %n"><l>Hello!</l><l>12</l><l></l></custom-block></script><script x="8.333333333333334" y="309.7222222222213"><custom-block s="font %s %br bold %b %br italic %b"><l>monospace</l><l/><l/></custom-block></script><script x="8.333333333333334" y="364.222222222221"><custom-block s="font %s %br weight %n %br italic %b"><l>monospace</l><l>500</l><l/></custom-block></script><comment x="249.9980468749998" y="253.0833333333322" w="90" collapsed="false">Dependencies and blocks that depend on this</comment></scripts></block-definition><block-definition s="text costume %&apos;text&apos; size %&apos;size&apos; stats %&apos;stats&apos;" type="reporter" category="pen"><header></header><code></code><translations>es:disfraz de texto _ tamaño _ e información _&#xD;pt:traje de texto _ com tamanho _ e edita _&#xD;fr:costume de texte _ avec taille _ et modificateurs _&#xD;ru:текст костюм _ с размером _ и модами _&#xD;</translations><inputs><input type="%s">Hello!</input><input type="%n">12</input><input type="%n" readonly="true"></input></inputs><script><block s="doDeclareVariables"><list><l>costume</l><l>x</l><l>y</l><l>dir</l><l>cst</l><l>trails</l><l>pen state</l></list></block><block s="doSetVar"><l>x</l><block s="xPosition"></block></block><block s="doSetVar"><l>y</l><block s="yPosition"></block></block><block s="doSetVar"><l>dir</l><block s="direction"></block></block><block s="doSetVar"><l>cst</l><block s="reportGet"><l><option>costume</option></l></block></block><block s="doSetVar"><l>pen state</l><block s="getPenDown"></block></block><block s="up"></block><block s="doGotoObject"><l><option>center</option></l></block><block s="setHeading"><l>90</l></block><block s="doSwitchToCostume"><l><option>Turtle</option></l></block><block s="doSetVar"><l>trails</l><block s="reportPenTrailsAsCostume"></block></block><block s="clear"></block><block s="gotoXY"><block s="reportAttributeOf"><l><option>left</option></l><l>Stage</l></block><l>0</l></block><custom-block s="write %s size %n stats %n"><block var="text"/><block var="size"/><block var="stats"/></custom-block><block s="gotoXY"><block s="reportAttributeOf"><l><option>left</option></l><l>Stage</l></block><l>0</l></block><block s="doSetVar"><l>costume</l><block s="reportPenTrailsAsCostume"></block></block><block s="clear"></block><block s="doApplyExtension"><l>obj_name(obj, name)</l><list><block var="costume"/><block s="reportJoinWords"><list><block var="text"/></list></block></list></block><block s="doGotoObject"><l><option>center</option></l></block><block s="doSwitchToCostume"><block var="trails"/></block><block s="doStamp"></block><block s="doSwitchToCostume"><block var="cst"/></block><block s="gotoXY"><block var="x"/><block var="y"/></block><block s="setHeading"><block var="dir"/></block><block s="doIf"><block var="pen state"/><script><block s="down"></block></script><list></list></block><block s="doReport"><block var="costume"/></block></script></block-definition><block-definition s="font %&apos;font&apos; $nl bold %&apos;it&apos; $nl italic %&apos;bd&apos;" type="reporter" category="pen"><comment x="0" y="0" w="173.33333333333334" collapsed="false">Creates a list of stats for the new write block to use.&#xD;&#xD;Created by Tethrarxitet!&#xD;tamale</comment><header></header><code></code><translations>pt:nome da fonte _ _ texto em negrito? _ _ oblíquo? _&#xD;es:nombre de fuente _ _ ¿negrita? _ _ ¿oblicuo? _&#xD;fr:nom de la police _ _ police en gras ? _ _ oblique ? _&#xD;ru:шриф _ _ жирный? _ _ курсив? _&#xD;</translations><inputs><input type="%s">monospace</input><input type="%b"></input><input type="%b"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block var="font"/><block var="it"/><block var="bd"/></list></block></block></script></block-definition><block-definition s="font %&apos;font&apos; $nl weight %&apos;it&apos; $nl italic %&apos;bd&apos;" type="reporter" category="pen"><comment x="0" y="0" w="173.33333333333334" collapsed="false">Creates a list of stats for the new write block to use.&#xD;&#xD;Created by Tethrarxitet!&#xD;tamale</comment><header></header><code></code><translations>es:nombre de la fuente _ _ espesor _ _ ¿oblicuo? _&#xD;pt:nome da fonte _ _ grossura _ _ oblíquo? _&#xD;fr:nom de la police _ _ épaisseur _ _ oblique ? _&#xD;ru:шриф _ _ жирность _ _ курсив? _&#xD;</translations><inputs><input type="%s">monospace</input><input type="%n">500</input><input type="%b"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block var="font"/><block var="it"/><block var="bd"/></list></block></block></script></block-definition><block-definition s="outline color: %&apos;clr&apos; width: %&apos;w&apos;" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs><input type="%clr" initial="1">5</input><input type="%n" initial="1">5</input></inputs><script><block s="doDeclareVariables"><list><l>costume</l><l>padding</l><l>color</l><l>halo</l><l>empty</l></list></block><block s="doSetVar"><l>padding</l><block var="w"/></block><block s="doSetVar"><l>empty</l><block s="reportNewList"><list><l>0</l><l>0</l><l>0</l><l>0</l></list></block></block><block s="doSetVar"><l>color</l><block s="reportVariadicProduct"><list><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportApplyExtension"><l>clr_channel(clr, rgba)</l><list><block var="clr"/><l></l></list></block></autolambda><list></list></block><block s="reportNewList"><list><l>r</l><l>g</l><l>b</l><l>a</l></list></block></block><block s="reportNewList"><list><l>1</l><l>1</l><l>1</l><l>255</l></list></block></list></block></block><block s="doSetVar"><l>costume</l><block s="reportGet"><l><option>costume</option></l></block></block><block s="clear"></block><block s="doSwitchToCostume"><block s="reportNewCostume"><block s="reportReshape"><l>0</l><block s="reportVariadicSum"><list><block s="reportNewList"><list><block s="reportGetImageAttribute"><l><option>height</option></l><l><option>current</option></l></block><block s="reportGetImageAttribute"><l><option>width</option></l><l><option>current</option></l></block></list></block><block s="reportVariadicProduct"><list><block var="padding"/><l>2</l></list></block></list></block></block><l></l><l></l></block></block><block s="doTellTo"><block s="newClone"><l><option>myself</option></l></block><block s="reifyScript"><script><block s="doSwitchToCostume"><block var="costume"/></block><block s="doSetVar"><l><option>my rotation style</option></l><l>0</l></block><block s="doWarp"><script><block s="doRepeat"><l>36</l><script><block s="forward"><block var="padding"/></block><block s="doPasteOn"><l></l></block><block s="forward"><block s="reportMonadic"><l><option>neg</option></l><block var="padding"/></block></block><block s="turn"><l>10</l></block></script></block></script></block><block s="doCutFrom"><l></l></block><block s="removeClone"></block></script><list></list></block><list><block s="reportGet"><l><option>self</option></l></block></list></block><block s="doSwitchToCostume"><block s="reportIfElse"><block s="reportVariadicLessThan"><list><block s="reportListItem"><l>1</l><block s="reportListAttribute"><l><option>columns</option></l><block s="reportGetImageAttribute"><l><option>pixels</option></l><l><option>current</option></l></block></block></block><l>1</l></list></block><block var="empty"/><block var="color"/></block></block><block s="doSetVar"><l>halo</l><block s="reportGet"><l><option>costume</option></l></block></block><block s="doSwitchToCostume"><block var="costume"/></block><block s="doReport"><block var="halo"/></block></script></block-definition><block-definition s="halo color: %&apos;clr&apos; width: %&apos;w&apos; while %&apos;test&apos;" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%clr" initial="1">2</input><input type="%n" initial="1">5</input><input type="%boolUE" initial="1"></input></inputs><script><block s="doDeclareVariables"><list><l>costume</l><l>halo</l></list></block><block s="doSetVar"><l>costume</l><custom-block s="outline color: %clr width: %n"><block var="clr"/><block var="w"/></custom-block></block><block s="doSetVar"><l>halo</l><block s="newClone"><l><option>Turtle sprite</option></l></block></block><block s="doTellTo"><block var="halo"/><block s="reifyScript"><script><block s="doSwitchToCostume"><block var="costume"/></block><block s="doSetVar"><l><option>my anchor</option></l><l></l></block></script><list></list></block><list><block s="reportGet"><l><option>self</option></l></block></list></block><block s="doWaitUntil"><block s="reportNot"><block s="evaluate"><block var="test"/><list></list></block></block></block><block s="doTellTo"><block var="halo"/><block s="reifyScript"><script><block s="removeClone"></block></script><list></list></block><list></list></block></script></block-definition><block-definition s="halo color: %&apos;clr&apos; width: %&apos;w&apos; for %&apos;time&apos; secs" type="command" category="looks"><header></header><code></code><translations></translations><inputs><input type="%clr" initial="1">2</input><input type="%n" initial="1">5</input><input type="%n" initial="1">2</input></inputs><script><block s="doDeclareVariables"><list><l>end</l></list></block><block s="doSetVar"><l>end</l><block s="reportVariadicSum"><list><block s="reportDate"><l><option>time in milliseconds</option></l></block><block s="reportVariadicProduct"><list><block var="time"/><l>1000</l></list></block></list></block></block><custom-block s="halo color: %clr width: %n while %boolUE"><block var="clr"/><block var="w"/><block s="reportVariadicLessThan"><list><block s="reportDate"><l><option>time in milliseconds</option></l></block><block var="end"/></list></block></custom-block></script></block-definition><block-definition s="Post to smerge..." type="command" category="other"><header></header><code></code><translations>de:Poste auf smerge...&#xD;</translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>var ide = window.world.root().children[0];&#xD;&#xD;new DialogBoxMorph(&#xD;	this,&#xD; function(message){&#xD;   var url = "https://smerge.imp.fu-berlin.de/sync/9df3f1a0-afe3-4956-8cbe-619b8a164282?ancestor=5978";&#xD;   if (window.newUrl){&#xD;      var url = window.newUrl;&#xD;   }&#xD;   url += "&amp;message="+message;&#xD;   var data = ide.getProjectXML();&#xD;   var r =  new XMLHttpRequest();&#xD;   r.open("POST", url, true);&#xD;   r.setRequestHeader("Content-Type", "application/xml");&#xD;		 r.onreadystatechange = function () {&#xD;  	  if(r.readyState === 4 &amp;&amp; r.status === 200) {&#xD;				   ide.showMessage("exported");&#xD;    			window.newUrl = JSON.parse(r.response)["url"];&#xD;      }&#xD;   }&#xD;   r.send(data);&#xD;   },&#xD;       this&#xD;    ).prompt(&#xD;      "What changes have you made?",&#xD;      "",&#xD;      window.world,&#xD;      null);</l></block><list></list></block></script></block-definition><block-definition s="block to costume $nl label: %&apos;a&apos; $nl RGB: %&apos;b&apos;" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs><input type="%txt" initial="1"></input><input type="%l" initial="1"></input></inputs><script><block s="doDeclareVariables"><list><l>c</l><l>d</l></list></block><block s="doSetVar"><l>c</l><block s="reportConcatenatedLists"><list><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportVariadicProduct"><list><l></l><l>0.75</l></list></block></autolambda><list></list></block><custom-block s="all but last of %l"><block var="b"/></custom-block></block><block s="reportNewList"><list><block s="reportListItem"><l><option>last</option></l><block var="b"/></block></list></block></list></block></block><block s="setPenColorDimension"><l><option>transparency</option></l><l>0</l></block><block s="doReport"><custom-block s="costume %s with background RGBA %n padding %n"><custom-block s="costume %s with background RGBA %n padding %n"><custom-block s="costume from text %s size %n"><block var="a"/><block s="reportJoinWords"><list><block var="blkF_S"/><l>px Helvetica, sans-serif</l></list></block></custom-block><block var="b"/><l>2</l></custom-block><block var="c"/><l>1</l></custom-block></block></script></block-definition><block-definition s="reverse %&apos;l&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l" initial="1"></input></inputs><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><block s="reportDifference"><block s="reportListAttribute"><l><option>length</option></l><block var="l"/></block><block s="reportDifference"><block var="ind"/><l>1</l></block></block><block var="l"/></block></autolambda><list><l>_</l><l>ind</l></list></block><block var="l"/></block></block></script></block-definition><block-definition s="all but last of %&apos;l&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l" initial="1"></input></inputs><script><block s="doReport"><custom-block s="reverse %l"><block s="reportCDR"><custom-block s="reverse %l"><block var="l"/></custom-block></block></custom-block></block></script></block-definition><block-definition s="Blocks %&apos;category&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1"></input></inputs><script><block s="gotoXY"><l>0</l><l>0</l></block><block s="doDeclareVariables"><list><l>cOffs</l><l>cost</l></list></block><block s="doSetVar"><l>cOffs</l><block s="reportDifference"><block s="reportQuotient"><block s="reportDifference"><block s="reportAttributeOf"><l><option>height</option></l><l>Stage</l></block><block s="reportGetImageAttribute"><l><option>height</option></l><l><option>current</option></l></block></block><l>2</l></block><l>90</l></block></block><block s="doForEach"><l>blk</l><custom-block s="value at key %s of %l"><l>blocks</l><custom-block s="value at key %s of %l"><block var="category"/><block var="Blocks"/></custom-block></custom-block><script><block s="doSetVar"><l>Clone</l><block s="newClone"><l><option>myself</option></l></block></block><block s="doTellTo"><block var="Clone"/><block s="reifyScript"><script><block s="doSetVar"><l>cost</l><custom-block s="block to costume %br label: %txt %br RGB: %l"><block s="reportListItem"><l>1</l><block var="blk"/></block><custom-block s="value at key %s of %l"><l>color</l><custom-block s="value at key %s of %l"><block var="category"/><block var="Blocks"/></custom-block></custom-block></custom-block></block><block s="doChangeVar"><l>Clone</l><l>1</l></block><block s="doSetVar"><l>my code</l><block s="reportListItem"><l>2</l><block var="blk"/></block></block><block s="doForEach"><l>key</l><custom-block s="keys of %l"><custom-block s="value at key %s of %l"><l>blocks</l><custom-block s="value at key %s of %l"><block var="category"/><block var="Blocks"/></custom-block></custom-block></custom-block><script><block s="doForEach"><l>item</l><block s="reportTextSplit"><block var="key"/><l> </l></block><script><block s="doIf"><block s="reportVariadicIsIdentical"><list><block var="item"/><l>%n</l></list></block><script><block s="doSetVar"><l>cost</l><custom-block s="overlay %s over %s offset x: %n y: %n"><custom-block s="rectangle costume %clr width: %n height: %n"><color>246,246,246,1</color><l>30</l><l>20</l></custom-block><block var="cost"/><l></l><l></l></custom-block></block></script><list></list></block></script></block></script></block><block s="doSwitchToCostume"><block var="cost"/></block><block s="doSetVar"><l>cost</l><custom-block s="block to costume %br label: %txt %br RGB: %l"><block s="reportListItem"><l>1</l><block var="blk"/></block><custom-block s="value at key %s of %l"><l>color</l><custom-block s="value at key %s of %l"><block var="category"/><block var="Blocks"/></custom-block></custom-block></custom-block></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="Clones"/><l>0</l></list></block><script></script><list></list></block><block s="gotoXY"><l>-189</l><block var="cOffs"/></block><block s="doChangeVar"><l>cOffs</l><block s="reportDifference"><l>-5</l><block s="reportGetImageAttribute"><l><option>height</option></l><l><option>current</option></l></block></block></block><block s="doIf"><block s="reportVariadicAnd"><list><block s="reportMouseDown"></block><block s="reportAskFor"><l>Sprite(12)</l><block s="reifyReporter"><autolambda><block s="reportVariadicAnd"><list><block s="reportTouchingObject"><l>Sprite</l></block><block s="reportTouchingColor"><color>246,246,246,1</color></block></list></block></autolambda><list></list></block><list></list></block></list></block><script></script><list></list></block></script><list></list></block><list><block var="blk"/></list></block><block s="doChangeVar"><l>Clones</l><l>1</l></block></script></block></script><scripts><script x="406.58056640625" y="181.20000000000005"><block s="reportDifference"><block s="reportQuotient"><block s="reportDifference"><block s="reportAttributeOf"><l><option>height</option></l><l>Stage</l></block><block s="reportGetImageAttribute"><l><option>height</option></l><l><option>current</option></l></block></block><l>2</l></block><l>90</l></block></script><script x="629.506103515625" y="281.6666666666669"><custom-block s="keys of %l"><l/></custom-block></script><script x="621.506103515625" y="385.8333333333334"><custom-block s="value at key %s of %l"><l></l><block var="Blocks"/></custom-block></script></scripts></block-definition><block-definition s="listify %&apos;jsonString&apos;" type="reporter" category="operators"><header></header><code></code><translations>pt:os dados JSON _ em formato de lista&#xD;</translations><inputs><input type="%mlt"></input></inputs><script><block s="doReport"><block s="reportTextSplit"><block var="jsonString"/><l><option>json</option></l></block></block></script></block-definition><block-definition s="value at key %&apos;key&apos; of %&apos;lst&apos;" type="reporter" category="operators"><header></header><code></code><translations>pt:o valor com chave _ em _&#xD;</translations><inputs><input type="%s"></input><input type="%l"></input></inputs><script><block s="doWarp"><script><block s="doForEach"><l>each item</l><block var="lst"/><script><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportListItem"><l>1</l><block var="each item"/></block><block var="key"/></list></block><script><block s="doReport"><block s="reportListItem"><l>2</l><block var="each item"/></block></block></script><list></list></block></script></block></script></block><block s="doReport"><l></l></block></script></block-definition><block-definition s="key: %&apos;key&apos; value: %&apos;value&apos;" type="reporter" category="operators"><header></header><code></code><translations>pt:um par (chave: _ , valor: _ )&#xD;</translations><inputs><input type="%s"></input><input type="%s"></input></inputs><script><block s="doReport"><block s="reportNewList"><list><block var="key"/><block var="value"/></list></block></block></script></block-definition><block-definition s="keys of %&apos;l&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%l" initial="1"></input></inputs><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>1</l><l/></block></autolambda><list></list></block><block var="l"/></block></block></script></block-definition><block-definition s="Interpret lisp %&apos;Lisp&apos; on %&apos;sprite&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%txt" initial="1"></input><input type="%obj" initial="1"></input></inputs><script><block s="doRun"><block s="reifyScript"><script><block s="doTellTo"><block var="sprite"/><block s="reifyScript"><script><block s="doRun"><custom-block s="parse code %code to blocks"><block var="Lisp"/></custom-block><list></list></block></script><list></list></block><list></list></block></script><list></list></block><list></list></block><block s="doIf"><block s="reportVariadicOr"><list><block s="reportIsA"><block var="Lisp"/><l><option>script</option></l></block><block s="reportIsA"><block var="Lisp"/><l><option>command</option></l></block></list></block><script><block s="doTellTo"><block var="sprite"/><block s="reifyScript"><script><block s="bubble"><block s="reportJoinWords"><list><l>ERROR:</l><l>LISP INPUT IS NOT LISP</l></list></block></block></script><list></list></block><list></list></block></script><list></list></block></script><scripts><script x="411.03925781250035" y="147.50000000000017"><block var="Blocks"/></script><script x="398.23251953125026" y="157.0499999999999"><block s="reportVariadicEquals"><list><l></l><l></l></list></block></script></scripts></block-definition><block-definition s="safely try %&apos;action&apos; then if %&apos;error&apos; %&apos;handler&apos;" type="command" category="control"><comment x="0" y="0" w="276" collapsed="false">Catch errors.&#xD;&#xD;Runs the first script.  If it succeeds, nothing else happens.&#xD;But if it has an error (something that would otherwise result&#xD;in a red halo around the block), then the second script is run,&#xD;with the text of the error message that would have been shown in the variable ERROR.</comment><header></header><code></code><translations>pt:tenta executar _ e, em caso de erro _ , executa _&#xD;ca:prova de forma segura _ i si _ _&#xD;</translations><inputs><input type="%cs"></input><input type="%upvar"></input><input type="%cs"></input></inputs><script><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block var="action"/><block var="handler"/><block var="error"/></list></block><block s="doApplyExtension"><l>err_reset</l><list></list></block></script></block-definition><block-definition s="error %&apos;msg&apos;" type="command" category="control"><comment x="0" y="0" w="268.6666666666667" collapsed="false">Throw an error.&#xD;&#xD;Makes a red halo appear around the script that runs it,&#xD;with the input text shown in a speech balloon next to&#xD;the script, just like any Snap! error.&#xD;&#xD;This is useful to put in the second script of SAFELY TRY&#xD;after some other instructions to undo the partial work of&#xD;the first script.</comment><header></header><code></code><translations>pt:lança o erro _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block var="msg"/></list></block></script></block-definition><block-definition s="safely try reporting %&apos;this&apos; then if %&apos;error&apos; report %&apos;that&apos;" type="reporter" category="control"><comment x="0" y="0" w="316.6666666666667" collapsed="false">Catch errors in a reporter.&#xD;&#xD;Evaluates its first input.  If that expression successfully reports a value, this block reports that value.  If the expression causes a Snap! error,&#xD;then the final input slot is evaluated with the text of what would have&#xD;been the error message in variable ERROR.  SAFELY TRY then reports the value of that final expression.&#xD;&#xD;Sometimes you&apos;ll want to throw an error in the final expression.  You&#xD;can put an ERROR block inside a CALL block to do that.</comment><header></header><code></code><translations>ca:prova de forma segura reportant _ i si _ reportant _&#xD;</translations><inputs><input type="%anyUE"></input><input type="%upvar"></input><input type="%anyUE"></input></inputs><script><block s="doDeclareVariables"><list><l>value</l></list></block><custom-block s="safely try %cs then if %upvar %cs"><script><block s="doSetVar"><l>value</l><block s="evaluate"><block var="this"/><list></list></block></block></script><l>err</l><script><block s="doSetVar"><l>error</l><block var="err"/></block><block s="doSetVar"><l>value</l><block s="evaluate"><block var="that"/><list></list></block></block></script></custom-block><block s="doReport"><block var="value"/></block></script></block-definition><block-definition s="%&apos;a&apos; is in palette?" type="predicate" category="other"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" initial="1"><options>§_objectsMenuWithSelf</options></input></inputs><script><block s="doReport"><custom-block s="safely try reporting %anyUE then if %upvar report %anyUE"><block s="reportAttributeOf"><l>inPalette</l><block var="a"/></block><l>error</l><block s="reportBoolean"><l><bool>true</bool></l></block></custom-block></block></script></block-definition><block-definition s="special %&apos;tags&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%mult%s" initial="1"></input></inputs></block-definition><block-definition s="%&apos;color&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%clr" initial="1"></input></inputs><script><block s="doReport"><block s="reportListItem"><block s="reportNumbers"><l>1</l><l>3</l></block><block s="reportTextSplit"><block s="reportJoinWords"><block s="reportLetter"><block s="reportNumbers"><l>6</l><block s="reportDifference"><block s="reportTextAttribute"><l><option>length</option></l><block s="reportJoinWords"><list><block var="color"/></list></block></block><l>1</l></block></block><block var="color"/></block></block><l>,</l></block></block></block></script></block-definition><block-definition s="overlay %&apos;c1&apos; over %&apos;c2&apos; offset x: %&apos;x&apos; y: %&apos;y&apos;" type="reporter" category="looks"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" initial="1"><options>§_costumesMenu</options></input><input type="%s" readonly="true" initial="1"><options>§_costumesMenu</options></input><input type="%n" initial="1"></input><input type="%n" initial="1"></input></inputs><script><block s="doDeclareVariables"><list><l>last</l><l>result</l></list></block><block s="doSetVar"><l>last</l><block s="reportGet"><l><option>costume</option></l></block></block><block s="doSwitchToCostume"><block var="c2"/></block><block s="doTellTo"><block s="newClone"><l><option>myself</option></l></block><block s="reifyScript"><script><block s="changeXPosition"><block var="X"/></block><block s="changeYPosition"><block var="Y"/></block><block s="doSwitchToCostume"><block var="C1"/></block><block s="doPasteOn"><block var="SPR"/></block><block s="removeClone"></block></script><list><l>X</l><l>Y</l><l>C1</l><l>SPR</l></list></block><list><block var="x"/><block var="y"/><block var="c1"/><block s="reportGet"><l><option>self</option></l></block></list></block><block s="doSetVar"><l>result</l><block s="reportGet"><l><option>costume</option></l></block></block><block s="doSwitchToCostume"><block var="last"/></block><block s="doReport"><block var="result"/></block></script></block-definition><block-definition s="costume from script: %&apos;script&apos;" type="reporter" category="looks"><comment x="0" y="0" w="259.8173828125" collapsed="false">Turns a ringified script into a script pic that can be used as a costume.</comment><header></header><code></code><translations></translations><inputs><input type="%repRing"></input></inputs><script><custom-block s="load script pic costume extension"></custom-block><block s="doReport"><block s="reportApplyExtension"><l>spc_script_to_costume(script)</l><list><block var="script"/></list></block></block></script></block-definition><block-definition s="load script pic costume extension" type="command" category="looks" helper="true"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/microworlds/script-pic-costume.js</l></list></block></script></block-definition><block-definition s="parse code %&apos;code&apos; to blocks" type="reporter" category="operators"><comment x="0" y="0" w="104" collapsed="false">turn LISP syntax text code into blocks</comment><header></header><code></code><translations>de:verwandle Code _ in Blöcke&#xD;</translations><inputs><input type="%code" initial="1">(+ 3 4)</input></inputs><script><block s="doReport"><block s="reportJoinWords"><block s="reportTextSplit"><block var="code"/><l><option>blocks</option></l></block></block></block></script></block-definition><block-definition s="encode blocks %&apos;script&apos; to text %&apos;lines&apos; pretty" type="reporter" category="operators"><comment x="0" y="0" w="106" collapsed="false">turn blocks into LISP syntax text code.</comment><header></header><code></code><translations>de:verwandle Blöcke _ in Code _ formatiert&#xD;</translations><inputs><input type="%repRing" initial="1"></input><input type="%b" initial="1">true</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reifyReporter"><autolambda><block s="reportListAttribute"><l></l><block s="reportTextSplit"><block var="script"/><l><option>blocks</option></l></block></block></autolambda><list></list></block><list><block s="reportIfElse"><block var="lines"/><l>lines</l><l>text</l></block></list></block></block></script></block-definition><block-definition s="Debug %&apos;text&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%txt" initial="1"></input></inputs><script><block s="bubble"><block s="reportJoinWords"><list><l>DEBUG:</l><block var="text"/></list></block></block></script></block-definition><block-definition s="$cloudOutline MQTT connect to %&apos;broker&apos; %&apos;options&apos;" type="command" category="other"><comment x="0" y="0" w="455" collapsed="false">Connect to a broker&#xD;&#xD;The options are not required but can be filled if needed&#xD;&#xD;1. username (some brokers need this)&#xD;2. password (some brokers need this)&#xD;3. keepalive (default time is 60 seconds but some brokers need a shorter time)&#xD;4. connection callback (ringed set of scripts to be run when connection is made or remade)&#xD;&#xD;ADVANCED: The brokers offered in the menu are accessed using default ports and  basepaths (if needed).  If accessing other brokers, the complete urls should be formed like this:&#xD;&#xD;siteURL:port/basepath &#xD;e.g mqtt.eclipseprojects.io:443/mqtt&#xD;&#xD;It is possible to have more than one connection to the same broker, for instance, using two different user/pass accounts simultaneously. To do this, add a connection id at the end of the broker:&#xD;&#xD;e.g mqtt.eclipseprojects.io:443/mqtt|1&#xD;</comment><header></header><code></code><translations></translations><inputs><input type="%s">broker.emqx.io<options>broker.emqx.io&#xD;mqtt.eclipseprojects.io&#xD;test.mosquitto.org&#xD;broker.xmqtt.net</options></input><input type="%mult%s" expand="username&#xD;password&#xD;keepalive&#xD;connection callback" max="4">​&#xD;​&#xD;60</input></inputs><script><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/mqtt.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/mqttExtension.js</l></list></block><block s="doSetVar"><l>options</l><custom-block s="sanitise options %l mask %l"><block var="options"/><l/></custom-block></block><block s="doDeclareVariables"><list><l>connection status</l><l>callback</l></list></block><block s="doSetVar"><l>connection status</l><l>connecting</l></block><block s="doSetVar"><l>callback</l><l></l></block><block s="doIf"><block s="reportIsA"><block s="reportListItem"><l>4</l><block var="options"/></block><l><option>command</option></l></block><script><block s="doSetVar"><l>callback</l><block s="reportListItem"><l>4</l><block var="options"/></block></block></script><list></list></block><block s="doSetVar"><l>options</l><block s="reportListAttribute"><l><option>json</option></l><block s="reportNewList"><list><block s="reportNewList"><list><l>username</l><block s="reportListItem"><l>1</l><block var="options"/></block></list></block><block s="reportNewList"><list><l>password</l><block s="reportListItem"><l>2</l><block var="options"/></block></list></block><block s="reportNewList"><list><l>keepalive</l><block s="reportListItem"><l>3</l><block var="options"/></block></list></block></list></block></block></block><block s="doApplyExtension"><l>mqt_connect(broker,callback,options)</l><list><block var="broker"/><block var="callback"/><block var="options"/></list></block><block s="doWaitUntil"><block s="reportNot"><block s="reportVariadicEquals"><list><block var="connection status"/><l>connecting</l></list></block></block></block><block s="doIf"><block s="reportNot"><block s="reportVariadicEquals"><list><block var="connection status"/><l>connected</l></list></block></block><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block var="connection status"/></list></block></script><list></list></block></script></block-definition><block-definition s="$cloudOutline MQTT subscribe to %&apos;broker&apos; topic %&apos;topic&apos; $nl on each message run %&apos;callback&apos; %&apos;options&apos;" type="command" category="other"><comment x="0" y="0" w="306.99999999999943" collapsed="false">Subscribe to a topic on a broker&#xD;&#xD;Make sure you have already run an MQTT connect block before using this one&#xD;&#xD;You should add a script to be run inside he grey ring.&#xD;&#xD;It will be run each time a message is received&#xD;&#xD;If you click on the arrow on the grey ring twice, you can use #1 and #2 inside your script.&#xD;&#xD;#1 will contain the received payload&#xD;&#xD;#2 will contain the received topic name&#xD;&#xD;The options are not required but can be filled if needed&#xD;&#xD;1. Subscribed QoS (0,1 or 2)  Note this will be downgraded if it exceeds the QoS of the stored message held on the broker &#xD;&#xD;2. Binary mode (boolean) Default (false) - payload is returned as text&#xD;&#xD;If true, payload returned as single column list of values in the range of 0 to 255..  </comment><header></header><code></code><translations></translations><inputs><input type="%s">broker.emqx.io<options>broker.emqx.io&#xD;mqtt.eclipseprojects.io&#xD;test.mosquitto.org&#xD;broker.xmqtt.net</options></input><input type="%s">name</input><input type="%cmdRing"></input><input type="%mult%s" expand="QoS&#xD;binary mode" max="2">0&#xD;false</input></inputs><script><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/mqtt.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/mqttExtension.js</l></list></block><block s="doSetVar"><l>options</l><custom-block s="sanitise options %l mask %l"><block var="options"/><block s="reportNewList"><list><l></l><block s="reportBoolean"><l><bool>true</bool></l></block></list></block></custom-block></block><block s="doSetVar"><l>options</l><block s="reportListAttribute"><l><option>json</option></l><block s="reportNewList"><list><block s="reportNewList"><list><l>qos</l><block s="reportListItem"><l>1</l><block var="options"/></block></list></block><block s="reportNewList"><list><l>mode</l><block s="reportListItem"><l>2</l><block var="options"/></block></list></block></list></block></block></block><block s="doApplyExtension"><l>mqt_sub(broker,topic,callback,options)</l><list><block var="broker"/><block var="topic"/><block var="callback"/><block var="options"/></list></block></script></block-definition><block-definition s="$cloudOutline MQTT publish to %&apos;broker&apos; topic %&apos;topic&apos; payload %&apos;payload&apos; %&apos;options&apos;" type="command" category="other"><comment x="0" y="0" w="455" collapsed="false">Publish a message to an MQTT broker&#xD;&#xD;The options are not required but can be filled if needed&#xD;&#xD;1. QoS (quality of service 0,1 or 2 - see  https://www.emqx.com/en/blog/introduction-to-mqtt-qos)&#xD;&#xD;2. Retain flag (boolean)&#xD;&#xD;3. Binary mode (boolean).    Default (false) - the payload is published as text&#xD;&#xD;If set to true then payload is expected to be a single column list of values in the 0 to 255 range and is published to the broker as a buffer of bytes.&#xD;&#xD;Note:  If the payload is a list and you don&apos;t set the buffer mode option, it will be automatically be converted into JSON and sent as text.&#xD;&#xD;</comment><header></header><code></code><translations></translations><inputs><input type="%s">broker.emqx.io<options>broker.emqx.io&#xD;mqtt.eclipseprojects.io&#xD;test.mosquitto.org&#xD;broker.xmqtt.net</options></input><input type="%s">name</input><input type="%mlt">hello</input><input type="%mult%s" expand="QoS&#xD;retain flag&#xD;binary mode" max="3">0&#xD;false&#xD;false</input></inputs><script><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/mqtt.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/mqttExtension.js</l></list></block><block s="doSetVar"><l>options</l><custom-block s="sanitise options %l mask %l"><block var="options"/><block s="reportNewList"><list><l></l><block s="reportBoolean"><l><bool>true</bool></l></block><block s="reportBoolean"><l><bool>true</bool></l></block></list></block></custom-block></block><block s="doSetVar"><l>options</l><block s="reportListAttribute"><l><option>json</option></l><block s="reportNewList"><list><block s="reportNewList"><list><l>qos</l><block s="reportListItem"><l>1</l><block var="options"/></block></list></block><block s="reportNewList"><list><l>retain</l><block s="reportListItem"><l>2</l><block var="options"/></block></list></block><block s="reportNewList"><list><l>mode</l><block s="reportListItem"><l>3</l><block var="options"/></block></list></block></list></block></block></block><block s="doIf"><block s="reportNot"><block s="reportListItem"><l>2</l><block s="reportListItem"><l>3</l><block s="reportTextSplit"><block var="options"/><l><option>json</option></l></block></block></block></block><script><block s="doIf"><block s="reportIsA"><block var="payload"/><l><option>list</option></l></block><script><block s="doSetVar"><l>payload</l><block s="reportListAttribute"><l><option>json</option></l><block var="payload"/></block></block></script><list></list></block><block s="doIf"><block s="reportIsA"><block var="payload"/><l><option>number</option></l></block><script><block s="doSetVar"><l>payload</l><block s="reportJoinWords"><list><block var="payload"/></list></block></block></script><list></list></block></script><list></list></block><block s="doApplyExtension"><l>mqt_pub(broker,topic,payload,options)</l><list><block var="broker"/><block var="topic"/><block var="payload"/><block var="options"/></list></block></script></block-definition><block-definition s="$cloudOutline MQTT unsubscribe from %&apos;broker&apos; topic %&apos;topic&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s">broker.emqx.io<options>broker.emqx.io&#xD;mqtt.eclipseprojects.io&#xD;test.mosquitto.org&#xD;broker.xmqtt.net</options></input><input type="%s">name</input></inputs><script><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/mqtt.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/mqttExtension.js</l></list></block><block s="doApplyExtension"><l>mqt_unsub(broker,topic)</l><list><block var="broker"/><block var="topic"/></list></block></script></block-definition><block-definition s="$cloudOutline MQTT disconnect from %&apos;broker&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s">all<options>all&#xD;broker.emqx.io&#xD;mqtt.eclipseprojects.io&#xD;test.mosquitto.org&#xD;broker.xmqtt.net</options></input></inputs><script><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/mqtt.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/mqttExtension.js</l></list></block><block s="doApplyExtension"><l>mqt_disconnect(broker)</l><list><block var="broker"/></list></block></script></block-definition><block-definition s="$cloudOutline MQTT response %&apos;broker&apos; topic %&apos;topic&apos; $nl reply %&apos;reply&apos; %&apos;options&apos;" type="command" category="other"><comment x="0" y="0" w="292.22207031250036" collapsed="false">Options:&#xD;&#xD;1. Sub binary mode (boolean) Default (false) - received payload is returned as text. &#xD;&#xD;If true then subscribed, received payload is returned as single column list of values in the range of 0 to 255..  Default (false) - it is returned as text&#xD;&#xD;2.  Pub binary mode (boolean).  Default (false) - the payload is published as text.&#xD;&#xD;If set to true then published payload is expected to be a single column list of values in the 0 to 255 range and is published to the broker as a buffer of bytes.&#xD;&#xD;Note:  If the payload is a list and you don&apos;t set the buffer mode option, it will be automatically be converted into JSON and sent as text&#xD;&#xD;</comment><header></header><code></code><translations></translations><inputs><input type="%s">broker.emqx.io<options>broker.emqx.io&#xD;mqtt.eclipseprojects.io&#xD;test.mosquitto.org&#xD;broker.xmqtt.net</options></input><input type="%s">name/#</input><input type="%repRing"></input><input type="%mult%s" expand="sub binary mode&#xD;pub binary mode" max="2">false&#xD;false</input></inputs><script><block s="doDeclareVariables"><list><l>resp</l><l>callbackTopic</l><l>error</l></list></block><block s="doSetVar"><l>options</l><custom-block s="sanitise options %l mask %l"><block var="options"/><block s="reportNewList"><list><block s="reportBoolean"><l><bool>true</bool></l></block><block s="reportBoolean"><l><bool>true</bool></l></block></list></block></custom-block></block><custom-block s="$cloudOutline MQTT subscribe to %s topic %s %br on each message run %cmdRing %mult%s"><block var="broker"/><block var="topic"/><block s="reifyScript"><script><block s="doIf"><block s="reportVariadicGreaterThan"><list><block s="reportApplyExtension"><l>txt_indexof(sub, txt)</l><list><l>/@</l><block var="received topic"/></list></block><l>0</l></list></block><script><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block s="reifyScript"><script><block s="doSetVar"><l>resp</l><block s="evaluate"><block var="reply"/><list><block var="received payload"/><block var="received topic"/></list></block></block></script><list></list></block><block s="reifyScript"><script><block s="doSetVar"><l>resp</l><block s="evaluate"><block var="reply"/><list></list></block></block></script><list></list></block><block var="error"/></list></block><block s="doApplyExtension"><l>err_reset</l><list></list></block><block s="doSetVar"><l>callbackTopic</l><block s="reportListItem"><l><option>last</option></l><block s="reportTextSplit"><block var="received topic"/><l>@</l></block></block></block><custom-block s="$cloudOutline MQTT publish to %s topic %s payload %mlt %mult%s"><block var="broker"/><block var="callbackTopic"/><block var="resp"/><list><l></l><l></l><block s="reportListItem"><l>2</l><block var="options"/></block></list></custom-block></script><list></list></block></script><list><l>received payload</l><l>received topic</l></list></block><list><l>0</l><block s="reportListItem"><l>1</l><block var="options"/></block></list></custom-block></script></block-definition><block-definition s="$cloudOutline MQTT request %&apos;broker&apos; topic %&apos;topic&apos; $nl response topic %&apos;rtopic&apos; payload %&apos;payload&apos; $nl on response run %&apos;callback&apos; %&apos;options&apos;" type="command" category="other"><comment x="0" y="0" w="242.99999999999997" collapsed="false">The options are not required but can be filled if needed.&#xD;&#xD;1. Append response topic (boolean): If true, the response topic is added at the end of the call topic after @ sign. The default condition (true) response topic is added.&#xD;&#xD;2. Sub binary mode (boolean) Default (false) - received payload is returned as text. &#xD;&#xD;If true,then the subscribed, received payload is returned as a single column list of values in the range of 0 to 255..  &#xD;&#xD;3.  Pub binary mode (boolean).  Default (false) - the payload is published as text.&#xD;&#xD;If set to true then published payload is expected to be a single column list of values in the 0 to 255 range and is published to the broker as a buffer of bytes.&#xD;&#xD;Note:  If the payload is a list and you don&apos;t set the buffer mode option, it will be automatically be converted into JSON and sent as text&#xD;&#xD;</comment><header></header><code></code><translations></translations><inputs><input type="%s">broker.emqx.io<options>broker.emqx.io&#xD;mqtt.eclipseprojects.io&#xD;test.mosquitto.org&#xD;broker.xmqtt.net</options></input><input type="%s">name</input><input type="%s">name2</input><input type="%mlt">hello</input><input type="%cmdRing"></input><input type="%mult%s" expand="append response topic&#xD;sub binary mode&#xD;pub binary mode&#xD;" max="3">true&#xD;false&#xD;false</input></inputs><script><block s="doDeclareVariables"><list><l>error</l><l>informTopic</l><l>topicCall</l></list></block><block s="doSetVar"><l>options</l><custom-block s="sanitise options %l mask %l"><block var="options"/><block s="reportNewList"><list><block s="reportBoolean"><l><bool>true</bool></l></block><block s="reportBoolean"><l><bool>true</bool></l></block><block s="reportBoolean"><l><bool>true</bool></l></block></list></block></custom-block></block><block s="doSetVar"><l>informTopic</l><block s="reportIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="options"/></block><l><option>Boolean</option></l></block><block s="reportListItem"><l>1</l><block var="options"/></block><block s="reportBoolean"><l><bool>true</bool></l></block></block></block><custom-block s="$cloudOutline MQTT subscribe to %s topic %s %br on each message run %cmdRing %mult%s"><block var="broker"/><block s="reportJoinWords"><list><block var="rtopic"/></list></block><block s="reifyScript"><script><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block s="reifyScript"><script><block s="doRun"><block var="callback"/><list><block var="received payload"/><block var="received topic"/></list></block></script><list></list></block><block s="reifyScript"><script><block s="doRun"><block var="callback"/><list></list></block></script><list></list></block><block var="error"/></list></block></script><list><l>received payload</l><l>received topic</l></list></block><list><l>0</l><block s="reportListItem"><l>2</l><block var="options"/></block></list></custom-block><block s="doIfElse"><block var="informTopic"/><script><block s="doSetVar"><l>topicCall</l><block s="reportJoinWords"><list><block var="topic"/><l>/</l><block s="reportJoinWords"><list><l>@</l><block var="rtopic"/></list></block></list></block></block></script><script><block s="doSetVar"><l>topicCall</l><block var="topic"/></block></script></block><custom-block s="$cloudOutline MQTT publish to %s topic %s payload %mlt %mult%s"><block var="broker"/><block var="topicCall"/><block var="payload"/><list><l></l><l></l><block s="reportListItem"><l>3</l><block var="options"/></block></list></custom-block></script></block-definition><block-definition s="$cloudOutline MQTT example response reporter payload %&apos;payload&apos; topic %&apos;topic&apos;" type="reporter" category="other"><comment x="0" y="0" w="90" collapsed="false">This is a simple echo example.&#xD;Topic can be used to filter the response.</comment><header></header><code></code><translations></translations><inputs><input type="%mlt">hello</input><input type="%txt">name</input></inputs><script><block s="doReport"><block var="payload"/></block></script></block-definition><block-definition s="$cloudOutline MQTT request %&apos;broker&apos; topic %&apos;topic&apos; $nl response topic %&apos;rtopic&apos; payload %&apos;payload&apos; %&apos;options&apos;" type="reporter" category="other"><comment x="0" y="0" w="343" collapsed="false">The response topic should be a unique value for each call e.g. use timer&#xD;&#xD;The options are not required but can be filled if needed&#xD;&#xD;1.  Timeout value - default is 3 seconds&#xD;&#xD;2.  Append response topic (boolean): If true, the response topic is added at the end of the call topic after @ sign. The default condition (true) response topic is added.&#xD;&#xD;3. Sub binary mode (boolean) Default (false) - received payload is returned as text. &#xD;&#xD;If true, subscribed, received payload returned as single column list of values in the range of 0 to 255..  Default (false) - it is returned as text&#xD;&#xD;4.  Pub binary mode (boolean).  Default (false) - the payload is published as text.&#xD;&#xD;If set to true then published payload is expected to be a single column list of values in the 0 to 255 range and is published to the broker as a buffer of bytes.&#xD;&#xD;Note:  If the payload is a list and you don&apos;t set the buffer mode option, it will be automatically be converted into JSON and sent as text&#xD;&#xD;</comment><header></header><code></code><translations></translations><inputs><input type="%s">broker.emqx.io<options>broker.emqx.io&#xD;mqtt.eclipseprojects.io&#xD;test.mosquitto.org&#xD;broker.xmqtt.net</options></input><input type="%s">name</input><input type="%s">name2</input><input type="%mlt">hello</input><input type="%mult%s" expand="timeout&#xD;append response topic&#xD;sub binary mode&#xD;pub binary mode&#xD;" max="4">3&#xD;true&#xD;false&#xD;false</input></inputs><script><block s="doDeclareVariables"><list><l>resp</l><l>semaphore</l><l>timer0</l><l>timeout</l><l>informTopic</l><l>topicCall</l></list></block><block s="doSetVar"><l>options</l><custom-block s="sanitise options %l mask %l"><block var="options"/><block s="reportNewList"><list><l></l><block s="reportBoolean"><l><bool>true</bool></l></block><block s="reportBoolean"><l><bool>true</bool></l></block><block s="reportBoolean"><l><bool>true</bool></l></block></list></block></custom-block></block><block s="doSetVar"><l>semaphore</l><l>0</l></block><block s="doSetVar"><l>timeout</l><block s="reportIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="options"/></block><l><option>number</option></l></block><block s="reportListItem"><l>1</l><block var="options"/></block><l>3</l></block></block><block s="doSetVar"><l>informTopic</l><block s="reportIfElse"><block s="reportIsA"><block s="reportListItem"><l>2</l><block var="options"/></block><l><option>Boolean</option></l></block><block s="reportListItem"><l>2</l><block var="options"/></block><block s="reportBoolean"><l><bool>true</bool></l></block></block></block><block s="doSetVar"><l>resp</l><l>timeout</l></block><custom-block s="$cloudOutline MQTT subscribe to %s topic %s %br on each message run %cmdRing %mult%s"><block var="broker"/><block s="reportJoinWords"><list><block var="rtopic"/></list></block><block s="reifyScript"><script><block s="doSetVar"><l>resp</l><block var="received payload"/></block><block s="doSetVar"><l>semaphore</l><l>1</l></block></script><list><l>received payload</l><l>received topic</l></list></block><list><l>0</l><block s="reportListItem"><l>3</l><block var="options"/></block></list></custom-block><block s="doIfElse"><block var="informTopic"/><script><block s="doSetVar"><l>topicCall</l><block s="reportJoinWords"><list><block var="topic"/><l>/</l><block s="reportJoinWords"><list><l>@</l><block var="rtopic"/></list></block></list></block></block></script><script><block s="doSetVar"><l>topicCall</l><block var="topic"/></block></script></block><custom-block s="$cloudOutline MQTT publish to %s topic %s payload %mlt %mult%s"><block var="broker"/><block var="topicCall"/><block var="payload"/><list><l>0</l><l>false</l><block s="reportListItem"><l>4</l><block var="options"/></block></list></custom-block><block s="doSetVar"><l>timer0</l><block s="reportDate"><l><option>time in milliseconds</option></l></block></block><block s="doWaitUntil"><block s="reportVariadicOr"><list><block s="reportVariadicEquals"><list><block var="semaphore"/><l>1</l></list></block><block s="reportVariadicGreaterThan"><list><block s="reportDifference"><block s="reportDate"><l><option>time in milliseconds</option></l></block><block var="timer0"/></block><block s="reportVariadicProduct"><list><block var="timeout"/><l>1000</l></list></block></list></block></list></block></block><custom-block s="$cloudOutline MQTT unsubscribe from %s topic %s"><block var="broker"/><block s="reportJoinWords"><list><block var="rtopic"/></list></block></custom-block><block s="doReport"><block var="resp"/></block></script></block-definition><block-definition s="MQTT Extension Examples" type="command" category="other"><comment x="0" y="0" w="385.9999999999999" collapsed="false">Open (edit) this block to look at examples how to use the MQTT Extension blocks&#xD;&#xD;Background documentation:&#xD;https://github.com/pixavier/mqtt4snap&#xD;&#xD;Last source code version (mqtt.xml and mqttExtension.js):&#xD;https://gitlab.com/cymplecy/Snap/-/tree/master/libraries</comment><header></header><code></code><translations></translations><inputs></inputs><scripts><comment x="489.99999999999955" y="215.19999999999987" w="222.99999999999997" collapsed="false">Step 0: Connect to the broker</comment><comment x="31.33333333333337" y="152.20000000000016" w="239.99999999999997" collapsed="false">PubSub Hello World!</comment><comment x="489.99999999999955" y="271.19999999999953" w="222" collapsed="false">Step 1: Subscribe to a topic</comment><script x="25.33333333333337" y="272.1999999999993"><custom-block s="$cloudOutline MQTT subscribe to %s topic %s %br on each message run %cmdRing %mult%s"><l>broker.emqx.io</l><l>name</l><block s="reifyScript"><script><block s="doSayFor"><block var="payload"/><l>2</l></block></script><list><l>payload</l><l>received topic</l></list></block><list></list></custom-block></script><script x="29.33333333333337" y="366.86666666666605"><custom-block s="$cloudOutline MQTT publish to %s topic %s payload %mlt %mult%s"><l>broker.emqx.io</l><l>name</l><l>hello</l><list></list></custom-block></script><comment x="492.99999999999955" y="357.1999999999993" w="222" collapsed="false">Step 2: Publish a message</comment><script x="33.99999999999966" y="484.19999999999976"><custom-block s="$cloudOutline MQTT subscribe to %s topic %s %br on each message run %cmdRing %mult%s"><l>broker.emqx.io</l><l>name1</l><block s="reifyScript"><script><custom-block s="$cloudOutline MQTT publish to %s topic %s payload %mlt %mult%s"><l>broker.emqx.io</l><l>name2</l><block var="payload"/><list></list></custom-block></script><list><l>payload</l><l>topic</l></list></block><list></list></custom-block></script><comment x="499" y="481.69999999999817" w="220" collapsed="false">Step 1: Activate the responder as a simple subscription</comment><script x="32.999999999999886" y="602.0333333333335"><block s="doSayFor"><custom-block s="$cloudOutline MQTT request %s topic %s %br response topic %s payload %mlt %mult%s"><l>broker.emqx.io</l><l>name1</l><l>name2</l><l>hello</l><list><l>3</l><l>false</l></list></custom-block><l>2</l></block></script><comment x="500" y="606.6999999999989" w="220" collapsed="false">Step 2: Send a request and wait the answer.</comment><comment x="504.99999999999955" y="131.19999999999993" w="191" collapsed="false">To execute the examples, single click on blocks, following the corresponding steps.</comment><comment x="499.66666666666697" y="756.3666666666654" w="224.00000000000003" collapsed="false">Step 2 bis: Send a request and do not wait for the answer</comment><comment x="24.33333333333337" y="871.1999999999987" w="356.99999999999994" collapsed="false">Synchronous client-server Hello World! with dynamic response topic (timer)</comment><comment x="510.99999999999955" y="930.700000000001" w="220" collapsed="false">Step 1: Activate the responder</comment><script x="34.33333333333337" y="1048.1999999999982"><block s="doSayFor"><custom-block s="$cloudOutline MQTT request %s topic %s %br response topic %s payload %mlt %mult%s"><l>broker.emqx.io</l><l>name</l><block s="getTimer"></block><l>hello</l><list></list></custom-block><l>2</l></block></script><comment x="510.99999999999955" y="1050.6999999999987" w="219.0000000000002" collapsed="false">Step 2: Send a request (timer acts as idCall) and wait for the answer</comment><comment x="31.999999999999886" y="1138.6999999999982" w="352.0000000000003" collapsed="false">Asynchronous client-server Hello World! with dynamic response topic (timer)</comment><script x="31.999999999999886" y="1207.0333333333313"><custom-block s="$cloudOutline MQTT request %s topic %s %br response topic %s payload %mlt %br on response run %cmdRing %mult%s"><l>broker.emqx.io</l><l>name</l><block s="getTimer"></block><l>hello</l><block s="reifyScript"><script><block s="doSayFor"><block var="payload"/><l>2</l></block></script><list><l>payload</l><l>topic</l></list></block><list></list></custom-block></script><comment x="514.9999999999995" y="1204.6999999999991" w="224.00000000000003" collapsed="false">Step 2 bis: Send a request (timer acts as idCall) and do not wait for the answer</comment><script x="28.99999999999966" y="225.2000000000001"><custom-block s="$cloudOutline MQTT connect to %s %mult%s"><l>broker.emqx.io</l><list></list></custom-block></script><script x="25.33333333333337" y="932.2000000000014"><custom-block s="$cloudOutline MQTT response %s topic %s %br reply %repRing %mult%s"><l>broker.emqx.io</l><l>name/#</l><block s="reifyReporter"><autolambda><custom-block s="$cloudOutline MQTT example response reporter payload %mlt topic %txt"><block var="payload"/><block var="topic"/></custom-block></autolambda><list><l>payload</l><l>topic</l></list></block><list></list></custom-block></script><comment x="26.999999999999886" y="685.6999999999982" w="372.0000000000004" collapsed="false">Asynchronous client-server Hello World! with static response topic (name2)</comment><script x="27.999999999999886" y="751.0333333333324"><custom-block s="$cloudOutline MQTT request %s topic %s %br response topic %s payload %mlt %br on response run %cmdRing %mult%s"><l>broker.emqx.io</l><l>name1</l><l>name2</l><l>hello</l><block s="reifyScript"><script><block s="doSayFor"><block var="payload"/><l>2</l></block></script><list><l>payload</l><l>topic</l></list></block><list><l>false</l></list></custom-block></script><comment x="28.999999999999886" y="412.36666666666696" w="361.99999999999994" collapsed="false">Synchronous client-server Hello World! with static response topic (name2)</comment></scripts></block-definition><block-definition s="sanitise options %&apos;data&apos; mask %&apos;mask&apos;" type="reporter" category="other" helper="true"><comment x="0" y="0" w="226" collapsed="false">Modify V10 variadic defaults to be able to work for blank and psuedo (false/true) boolean entries&#xD;&#xD;Blank defaults are set as zero width spaces which are removed when block is executed&#xD;&#xD;This is needed for the connect block&#xD;&#xD;The options are then checked to see if they should be boolean and if they are not aready a boolean value, then they are replaced with boolean true if default is text &quot;true&quot;, otherwise boolean false.</comment><header></header><code></code><translations></translations><inputs><input type="%l" initial="1"></input><input type="%l" initial="1"></input></inputs><script><block s="doDeclareVariables"><list><l>zero width space</l></list></block><block s="doSetVar"><l>zero width space</l><block s="reportUnicodeAsLetter"><l>8203</l></block></block><block s="doSetVar"><l>data</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportIsA"><block var="value"/><l><option>text</option></l></block><block s="reportCombine"><block s="reportTextSplit"><block var="value"/><block var="zero width space"/></block><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l></l><l></l></list></block></autolambda><list></list></block></block><block var="value"/></block></autolambda><list><l>value</l></list></block><block var="data"/></block></block><block s="doReport"><block s="reportListAttribute"><l><option>flatten</option></l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportVariadicAnd"><list><block s="reportIsA"><block s="reportListItem"><l>2</l><block var="value"/></block><l><option>Boolean</option></l></block><block s="reportNot"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="value"/></block><l><option>Boolean</option></l></block></block></list></block><block s="reportIfElse"><block s="reportVariadicEquals"><list><block s="reportListItem"><l>1</l><block var="value"/></block><l>true</l></list></block><block s="reportBoolean"><l><bool>true</bool></l></block><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="reportListItem"><l>1</l><block var="value"/></block></block></autolambda><list><l>value</l><l>index</l></list></block><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportNewList"><list><block var="value"/><block s="reportListItem"><block var="index"/><block var="mask"/></block></list></block></autolambda><list><l>value</l><l>index</l></list></block><block var="data"/></block></block></block></block></script></block-definition></blocks><primitives></primitives><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="true" penlog="false" volume="100" pan="0" lines="round" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" id="3293"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAB4KADAAQAAAABAAABaAAAAAAHwbojAAAL30lEQVR4Ae3QMQEAAADCoPVPbQwfiEBhwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGPgMDI3+AAEeFvcCAAAAAElFTkSuQmCC</pentrails><costumes><list struct="atomic" id="3294"></list></costumes><sounds><list struct="atomic" id="3295"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="2"><watcher var="Tokenized text" style="normal" x="10" y="10" color="243,118,29" extX="80" extY="70" hidden="true"/><watcher var="List" style="normal" x="10" y="103.000002" color="243,118,29" extX="80" extY="70" hidden="true"/><sprite name="Sprite" idx="1" x="-220" y="111" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="145,26,68,1" pen="tip" id="3302"><wear><ref mediaID="1"></ref></wear><costumes><list struct="atomic" id="3303"></list></costumes><sounds><list struct="atomic" id="3304"></list></sounds><blocks></blocks><variables></variables><scripts><script x="36" y="64.33333333333334"><block s="receiveGo"></block><block s="doSwitchToCostume"><l><option>Turtle</option></l></block><block s="doSetVar"><l>MenuOff</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doSetVar"><l>List</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>Tokenized text</l><block s="reportTextSplit"><l>VillageOn</l><l><option>letter</option></l></block></block><block s="doForEach"><l>item</l><block var="Tokenized text"/><script><block s="doWait"><l>0.05</l></block><block s="doAddToList"><block var="item"/><block var="List"/></block><block s="doSwitchToCostume"><custom-block s="costume from text %s size %n"><block s="reportJoinWords"><block var="List"/></block><l>72</l></custom-block></block></script></block><block s="doBroadcast"><l>ButtonShow</l><list></list></block><block s="doUntil"><block var="MenuOff"/><script><block s="doWait"><l>0.05</l></block><block s="changeEffect"><l><option>color</option></l><l>0.5</l></block></script></block></script><script x="184.6650390625" y="380"><block var="item"/></script><script x="80" y="471.8333333333337"><block s="doWarp"><script></script></block></script><script x="37" y="439.66666666666697"><block s="doStopThis"><l><option>this script</option></l></block></script><script x="259" y="353"><block s="changeEffect"><l><option>brightness</option></l><l>25</l></block></script></scripts></sprite><watcher var="MenuOff" style="normal" x="10" y="196.000004" color="243,118,29" hidden="true"/><watcher var="Costume" style="normal" x="10" y="217.00000599999998" color="243,118,29" hidden="true"/><sprite name="Sprite(2)" idx="2" x="14.20703125" y="-26" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="56.1,112.2,0,1" pen="tip" id="3368"><wear><ref mediaID="2"></ref></wear><costumes><list struct="atomic" id="3369"></list></costumes><sounds><list struct="atomic" id="3370"></list></sounds><blocks></blocks><variables></variables><scripts><script x="93" y="142"><block s="receiveMessage"><l>ButtonShow</l><list></list></block><block s="doUntil"><block s="reportVariadicLessThanOrEquals"><list><block s="getEffect"><l><option>ghost</option></l></block><l>0</l></list></block><script><block s="changeEffect"><l><option>ghost</option></l><l>-1</l></block></script></block><custom-block s="halo color: %clr width: %n while %boolUE"><color>25,0,11,1</color><l>5</l><l><bool>true</bool></l></custom-block></script><script x="10" y="10"><block s="receiveGo"></block><block s="doSwitchToCostume"><custom-block s="%s filter on %s alpha %b"><l>emboss</l><custom-block s="rectangle costume %clr width: %n height: %n"><color>54,255,26,1</color><l>100</l><l>60</l></custom-block><l><bool>true</bool></l></custom-block></block><block s="setEffect"><l><option>ghost</option></l><l>100</l></block></script><script x="22.3291015625" y="295.66666666666663"><block s="reportNewCostume"><l/><l>5</l><l>5</l></block></script><script x="12.3291015625" y="433.4999999999999"><custom-block s="grayscales of %s"><l></l></custom-block></script><script x="55" y="503.66666666666663"><custom-block s="grayscales of %s"><l><option>Turtle</option></l></custom-block></script><script x="593.603515625" y="138"><block var="Costume"/></script><script x="242" y="99.83333333333337"><custom-block s="costume %s with background RGBA %n padding %n"><l></l><l>90</l><l>5</l></custom-block></script><script x="215" y="426.0000000000001"><custom-block s="overlay %s over %s offset x: %n y: %n"><custom-block s="costume from text %s size %n"><l>Play</l><l>72</l></custom-block><l></l><l>0</l><l>0</l></custom-block></script><script x="260.58203125" y="487.0000000000001"><custom-block s="outline color: %clr width: %n"><color>31,0,5,1</color><l>9</l></custom-block></script></scripts></sprite></sprites></stage><variables><variable name="Tokenized text"><list struct="atomic" id="3434">V,i,l,l,a,g,e,O,n</list></variable><variable name="List"><list struct="atomic" id="3435">V,i,l,l,a,g,e,O,n</list></variable><variable name="MenuOff"><bool>false</bool></variable><variable name="Costume"><ref mediaID="3"></ref></variable></variables></scene></scenes></project><media name="Villageon" app="Snap! 10.7.2, https://snap.berkeley.edu" version="2"><costume name="VillageOn" center-x="0" center-y="49" image="data:image/png;base64,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" mediaID="1"/><costume name="costume" center-x="50" center-y="30" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAA8CAYAAACQPx/OAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAZKADAAQAAAABAAAAPAAAAAAn2FpLAAABTElEQVR4Ae3RQRECMRQE0YRCBUKQgxgkIQMHGFgbofbWqyB96H+a5DQ1b671Xr9xjG7/Aq/xGfcT4wzd/gW+85i3/TVqwAUC4RqCHIgAgRUC4RqCHIgAgRUC4RqCHIgAgRUC4RqCHIgAgRUC4RqCHIgAgRUC4RqCHIgAgRUC4RqCHIgAgRUC4RqCHIgAgRUC4RqCHIgAgRUC4RqCHIgAgRUC4RqCHIgAgRUC4RqCHIgAgRUC4RqCHIgAgRUC4RqCHIgAgRUC4RqCHIgAgRUC4RqCHIgAgRUC4RqCHIgAgRUC4RqCHIgAgRUC4RqCHIgAgRUC4RqCHIgAgRUC4RqCHIgAgRUC4RqCHIgAgRUC4RqCHIgAgRUC4RqCHIgAgRUC4RqCHIgAgRUC4RqCHIgAgRUC4RqCHIgAgRUC4RqCHIgA4VLhuR7r8tFj6wJ/TjkNle6yp2cAAAAASUVORK5CYII=" mediaID="2"/><costume name="costume" center-x="55" center-y="35" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAABGCAYAAAAtpKGgAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAbqADAAQAAAABAAAARgAAAACmln18AAABCklEQVR4Ae3TwQkAIBDEwNP+e1YfNjEQ4f4hcdfMnHc9zMDGeMP9BgqHfoXCFQ41gGK3uMKhBlDsFlc41ACK3eIKhxpAsVtc4VADKHaLKxxqAMVucYVDDaDYLa5wqAEUu8UVDjWAYre4wqEGUOwWVzjUAIrd4gqHGkCxW1zhUAModosrHGoAxW5xhUMNoNgtrnCoARS7xRUONYBit7jCoQZQ7BZXONQAit3iCocaQLFbXOFQAyh2iyscagDFbnGFQw2g2C2ucKgBFLvFFQ41gGK3uMKhBlDsFlc41ACK3eIKhxpAsVtc4VADKHaLKxxqAMVucYVDDaDYLa5wqAEUu8UVDjWAYrc4NNwFk/8Bi9bQJfoAAAAASUVORK5CYII=" mediaID="3"/></media></snapdata>