<snapdata remixID="14610389"><project name="TurtleBlocks!" app="Snap! 11.0.8, https://snap.berkeley.edu" version="2"><notes>TurtleBlocks is a collection of utility blocks I made for whatever you need them for! Most of them are supposed to feel like real blocks!</notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAAEDUlEQVR4AeyVMUpkQRRFH4qhZqauxEwUzUV0AwoauBYDA1egiLGIaOZKTM00MZthlAYnqP5/uqZ+3ap7GqSb+r+q3j33gEu/+ECgIoGl4AOBigQQsCJ8ro5AQCyoSgABq+LncgTEgaoEfAWsip3LZwQQcEaC7yoEELAKdi6dEUDAGQm+qxBAwCrYuXRGAAFnJPiuQgABq2CveqnU5QgoVYffMAjo17lUYgSUqsNvGAT061wqMQJK1eE3DAL6dS6VeFIBpZIzjAQBBJSowXcIBPTtXiI5AkrU4DsEAvp2L5EcASVq8B0CASfpnktSBBAwRYb1SQgg4CSYuSRFAAFTZFifhAACToKZS1IEEDBFhvVJCCDgJJh9LxlKjoBDhHhelAACFsXL4UMEEHCIEM+LEkDAong5fIgAAg4R4nlRAghYFC+HDxHoV8Ch5DyXIICAEjX4DoGAvt1LJEdAiRp8h0BA3+4lkiOgRA2+QyBgf903lQgBm6qrv2ERsL9Om0qEgE3V1d+wCNhfp00lQsCm6upvWATsr9OmEv1XAZtKzrASBBBQogbfIRDQt3uJ5AgoUYPvEAjo271EcgSUqMF3CARMdH93dxdXV1fx+vqaeOPnMr8XJYCACXI7Ozvx/Pwc5+fnsbm5GZeXl19Cfn5+JnawvAgBBExQW1tbi7Ozs/j4+Ij19fV4enqKh4eHODo6it3d3bi5uYnr6+vEbpbHEkDAsaR+vLe09I1teXn5xyo/FyHwTXKRnZ3veX9///q3u7q6Gm9vb7G9vR17e3txe3sb9/f3cXh4GAcHB51TKB8PAROMHx8fY2trKy4uLuLl5SVOT0/j+Pg4VlZWEjtYXoQAAiao7e/vx8nJSWxsbCTeYPkPgdw/BMwlyP4sAgiYhY/NuQQQMJcg+7MIIGAWPjbnEkDAXILszyKAgFn42JxLoF0Bc5OzX4IAAkrU4DsEAvp2L5EcASVq8B0CAX27l0iOgBI1+A6BgO1139XECNhVne2FQcD2OutqYgTsqs72wiBge511NTECdlVne2EQsL3Oupr4nwTsKjlhJAggoEQNvkMgoG/3EskRUKIG3yEQ0Ld7ieQIKFGD7xAIOKp7XipFAAFLkeXcUQQQcBQmXipFAAFLkeXcUQQQcBQmXipFAAFLkeXcUQQQcBQm35dKJ0fA0oQ5fy4BBJyLh4elCSBgacKcP5cAAs7Fw8PSBBCwNGHOn0sAAefi4WFpAroClk7O+RIEEFCiBt8hENC3e4nkCChRg+8QCOjbvURyBJSowXcIBNTr3moiBLSqWy8sAup1YjURAlrVrRcWAfU6sZoIAa3q1guLgHqdWE30l4BWyQkrQQABJWrwHQIBfbuXSI6AEjX4DoGAvt1LJP8NAAD//xndqVEAAAAGSURBVAMAXMi6j8soxA8AAAAASUVORK5CYII=</thumbnail><scenes select="1"><scene name="TurtleBlocks!"><notes>TurtleBlocks is a collection of utility blocks I made for whatever you need them for! Most of them are supposed to feel like real blocks!</notes><hidden></hidden><headers></headers><code></code><blocks><block-definition s="round %&apos;number&apos; to the nearest %&apos;precision&apos;" type="reporter" category="operators"><comment x="0" y="0" w="90" collapsed="false">Allows you to round a number with a chooseable precision. Choose one from the menu or type one yourself.</comment><header></header><code></code><translations></translations><inputs><input type="%n" initial="1">12</input><input type="%n" initial="1">10<options>§_dynamicMenu</options></input></inputs><script><block s="doReport"><block s="reportVariadicProduct"><list><block s="reportRound"><block s="reportQuotient"><block var="number"/><block var="precision"/></block></block><block var="precision"/></list></block></block></script><scripts><script x="10" y="223.33402203856735"><block s="receiveSlotEvent"><l>precision</l><l><option>menu</option></l></block><block s="doDeclareVariables"><list><l>result</l></list></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doWarp"><script><block s="doFor"><l>pre decimal</l><l>-1</l><block s="reportDifference"><block s="reportTextAttribute"><l><option>length</option></l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="number"/><l>.</l></block></block></block><l>1</l></block><script><block s="doAddToList"><block s="reportJoinWords"><block s="reportCONS"><l>1</l><block s="reportReshape"><l>0</l><list><block var="pre decimal"/></list></block></block></block><block var="result"/></block></script></block><block s="doIf"><block s="reportVariadicGreaterThanOrEquals"><list><block s="reportListAttribute"><l><option>length</option></l><block s="reportTextSplit"><block var="number"/><l>.</l></block></block><l>2</l></list></block><script><block s="doAddToList"><l>&#126;</l><block var="result"/></block><block s="doFor"><l>post decimal</l><l>0</l><block s="reportTextAttribute"><l><option>length</option></l><block s="reportListItem"><l>2</l><block s="reportTextSplit"><block var="number"/><l>.</l></block></block></block><script><block s="doAddToList"><block s="reportNewList"><list><block s="reportJoinWords"><block s="reportConcatenatedLists"><list><block s="reportCONS"><l>1</l><block s="reportReshape"><l>0</l><list><block var="post decimal"/></list></block></block><block s="reportNewList"><list><l>th</l></list></block></list></block></block><block s="reportQuotient"><l>1</l><block s="reportJoinWords"><block s="reportCONS"><l>1</l><block s="reportReshape"><l>0</l><list><block var="post decimal"/></list></block></block></block></block></list></block><block var="result"/></block></script></block></script><list></list></block></script></block><block s="doReport"><block var="result"/></block></script></scripts></block-definition><block-definition s="typewriter %&apos;type&apos; %&apos;text&apos; delay %&apos;delay&apos; $nl then wait %&apos;secs&apos; secs" type="command" category="looks"><comment x="0" y="0" w="295" collapsed="false">Creates a speech bubble where the letters come in one at a time, instead of all at once. Choose the type (say/think), the delay, and the extra wait.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1">say<options>say&#xD;think</options></input><input type="%txt">Hello!</input><input type="%n">0.1</input><input type="%n">1</input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportVariadicOr"><list><block s="reportIsA"><block var="text"/><l><option>text</option></l></block><block s="reportIsA"><block var="text"/><l><option>number</option></l></block></list></block></block><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block s="reportJoinWords"><list><l>expecting a text but getting a </l><block s="reportTypeOf"><block var="text"/></block></list></block></list></block></script><list></list></block><block s="doDeclareVariables"><list><l>textlist</l></list></block><block s="doSetVar"><l>textlist</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportJoinWords"><block s="reportLetter"><l></l><block var="text"/></block></block></autolambda><list></list></block><block s="reportNumbers"><l>1</l><block s="reportNumbers"><l>1</l><block s="reportTextAttribute"><l><option>length</option></l><block var="text"/></block></block></block></block></block><block s="doForEach"><l>speech</l><block var="textlist"/><script><block s="doRun"><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="type"/><l>say</l></list></block><block s="reifyScript"><script><block s="doSayFor"><l></l><l></l></block></script><list></list></block><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="type"/><l>think</l></list></block><block s="reifyScript"><script><block s="doThinkFor"><l></l><l></l></block></script><list></list></block><l></l></block></block><list><block var="speech"/><block var="delay"/></list></block></script></block><block s="doRun"><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="type"/><l>say</l></list></block><block s="reifyScript"><script><block s="doSayFor"><l></l><l></l></block></script><list></list></block><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="type"/><l>think</l></list></block><block s="reifyScript"><script><block s="doThinkFor"><l></l><l></l></block></script><list></list></block><l></l></block></block><list><block var="speech"/><block s="reportDifference"><block var="secs"/><block var="delay"/></block></list></block></script></block-definition><block-definition s="rewind sound %&apos;sound&apos;" type="command" category="sound"><comment x="0" y="0" w="90" collapsed="false">Plays the sound backwards.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>§_soundsMenu</options></input></inputs><script><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block s="reifyScript"><script><block s="doSetVar"><l>sound</l><block s="reportIfElse"><block s="reportIsA"><block var="sound"/><l><option>list</option></l></block><block s="reportNewSoundFromSamples"><block s="reportListAttribute"><l><option>reverse</option></l><block var="sound"/></block><l>44100</l></block><block s="reportNewSoundFromSamples"><block s="reportListAttribute"><l><option>reverse</option></l><block s="reportGetSoundAttribute"><l><option>samples</option></l><block var="sound"/></block></block><block s="reportGetSoundAttribute"><l><option>sample rate</option></l><block var="sound"/></block></block></block></block><block s="playSound"><block var="sound"/></block></script><list></list></block><block s="reifyScript"><script></script><list></list></block><l></l></list></block></script></block-definition><block-definition s="rewind sound %&apos;sound&apos; until done" type="command" category="sound"><comment x="0" y="0" w="90" collapsed="false">Play the sound in reverse and waits it&apos;s duration.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true"><options>§_soundsMenu</options></input></inputs><script><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block s="reifyScript"><script><block s="doSetVar"><l>sound</l><block s="reportIfElse"><block s="reportIsA"><block var="sound"/><l><option>list</option></l></block><block s="reportNewSoundFromSamples"><block s="reportListAttribute"><l><option>reverse</option></l><block var="sound"/></block><l>44100</l></block><block s="reportNewSoundFromSamples"><block s="reportListAttribute"><l><option>reverse</option></l><block s="reportGetSoundAttribute"><l><option>samples</option></l><block var="sound"/></block></block><block s="reportGetSoundAttribute"><l><option>sample rate</option></l><block var="sound"/></block></block></block></block><block s="doPlaySoundUntilDone"><block var="sound"/></block></script><list></list></block><block s="reifyScript"><script></script><list></list></block><l></l></list></block></script></block-definition><block-definition s="item x: %&apos;x&apos; y: %&apos;y&apos; in table %&apos;list&apos;" type="reporter" category="lists" space="true"><comment x="0" y="0" w="90" collapsed="false">This block allows you to navigate a 2D list as a 2D list rather than a list of lists, by specifying the X and Y of the item</comment><header></header><code></code><translations></translations><inputs><input type="%s" initial="1">A<options>A=A&#xD;last=$_last&#xD;random=$_random</options></input><input type="%n" initial="1">1<options>1=1&#xD;last=$_last&#xD;random=$_random</options></input><input type="%l" initial="1"></input></inputs><script><block s="doIf"><block s="reportVariadicOr"><list><block s="reportVariadicLessThan"><list><block s="reportListAttribute"><l><option>rank</option></l><block var="list"/></block><l>2</l></list></block><block s="reportNot"><block s="reportIsA"><block var="list"/><l><option>list</option></l></block></block></list></block><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block s="reportJoinWords"><list><l>expecting a table but getting a </l><block s="reportTypeOf"><block var="list"/></block></list></block></list></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="y"/><l>random</l></list></block><script><block s="doSetVar"><l>y</l><block s="reportRandom"><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block></block></block></script><list><block s="reportVariadicEquals"><list><block var="y"/><l>last</l></list></block><script><block s="doSetVar"><l>y</l><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block></block></script></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="x"/><l>random</l></list></block><script><block s="doSetVar"><l>x</l><block s="reportRandom"><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block s="reportListItem"><block var="y"/><block var="list"/></block></block></block></block></script><list><block s="reportVariadicEquals"><list><block var="x"/><l>last</l></list></block><script><block s="doSetVar"><l>x</l><block s="reportListAttribute"><l><option>length</option></l><block s="reportListItem"><block var="y"/><block var="list"/></block></block></block></script></list></block><block s="doIf"><block s="reportIsA"><block var="x"/><l><option>text</option></l></block><script><block s="doIf"><block s="reportNot"><block s="reportVariadicAnd"><list><block s="reportVariadicAnd"><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportListContainsItem"><block s="reportNewList"><list><l>A</l><l>B</l><l>C</l><l>D</l><l>E</l><l>F</l><l>G</l><l>H</l><l>I</l><l>J</l><l>K</l><l>L</l><l>M</l><l>N</l><l>O</l><l>P</l><l>Q</l><l>R</l><l>S</l><l>T</l><l>U</l><l>V</l><l>W</l><l>X</l><l>Y</l><l>Z</l></list></block><l></l></block></autolambda><list></list></block><block s="reportTextSplit"><block var="x"/><l></l></block></block></block><block s="reportVariadicEquals"><block s="reportTextSplit"><block var="x"/><l></l></block></block></list></block></block><script><block s="doReport"><l></l></block></script><list></list></block><block s="doSetVar"><l>x</l><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><block s="reportDifference"><block s="reportTextAttribute"><l><option>length</option></l><block var="x"/></block><l>1</l></block><l>26</l></list></block><block s="reportListIndex"><block s="reportLetter"><l>1</l><block var="x"/></block><block s="reportNewList"><list><l>A</l><l>B</l><l>C</l><l>D</l><l>E</l><l>F</l><l>G</l><l>H</l><l>I</l><l>J</l><l>K</l><l>L</l><l>M</l><l>N</l><l>O</l><l>P</l><l>Q</l><l>R</l><l>S</l><l>T</l><l>U</l><l>V</l><l>W</l><l>X</l><l>Y</l><l>Z</l></list></block></block></list></block></block></script><list></list></block><block s="doReport"><block s="reportListItem"><block var="y"/><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><block var="x"/><l/></block></autolambda><list></list></block><block var="list"/></block></block></block></script></block-definition><block-definition s="keys pressed" type="reporter" category="sensing"><comment x="0" y="0" w="90" collapsed="false">Reports all the detected keys the user is pressing.</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportAtomicKeep"><block s="reifyPredicate"><autolambda><block s="reportKeyPressed"><l></l></block></autolambda><list></list></block><block s="reportNewList"><list><l>0</l><l>1</l><l>2</l><l>3</l><l>4</l><l>5</l><l>6</l><l>7</l><l>8</l><l>9</l><l>a</l><l>b</l><l>c</l><l>d</l><l>e</l><l>f</l><l>g</l><l>h</l><l>i</l><l>j</l><l>k</l><l>l</l><l>m</l><l>n</l><l>o</l><l>p</l><l>q</l><l>r</l><l>s</l><l>t</l><l>u</l><l>v</l><l>w</l><l>x</l><l>y</l><l>z</l><l>f1</l><l>f2</l><l>f3</l><l>f4</l><l>f5</l><l>f6</l><l>f7</l><l>f8</l><l>f9</l><l>f10</l><l>f11</l><l>f12</l><l>f13</l><l>f14</l><l>f15</l><l>f16</l><l>f17</l><l>f18</l><l>f19</l><l>f20</l><l>enter</l><l>tab</l><l>space</l><l>arrowdown</l><l>arrowleft</l><l>arrowright</l><l>arrowup</l><l>end</l><l>home</l><l>pagedown</l><l>pageup</l><l>backspace</l><l>clear</l><l>copy</l><l>crsel</l><l>cut</l><l>delete</l><l>eraseeof</l><l>exsel</l><l>insert</l><l>paste</l><l>redo</l><l>undo</l><l>accept</l><l>again</l><l>attn</l><l>cancel</l><l>contextmenu</l><l>escape</l><l>execute</l><l>find</l><l>finish</l><l>help</l><l>pause</l><l>play</l><l>props</l><l>select</l><l>zoomin</l><l>zoomout</l><l>brightnessdown</l><l>brightnessup</l><l>eject</l><l>logoff</l><l>power</l><l>poweroff</l><l>printscreen</l><l>hibernate</l><l>standby</l><l>wakeup</l><l>allcandidates</l><l>alphanumeric</l><l>codeinput</l><l>compose</l><l>convert</l><l>dead</l><l>finalmode</l><l>groupfirst</l><l>grouplast</l><l>groupnext</l><l>groupprevious</l><l>modechange</l><l>nonconvert</l><l>previouscandidate</l><l>process</l><l>singlecandidate</l><l>hangulmode</l><l>hanjamode</l><l>junjamode</l><l>kanamode</l><l>kanjimode</l><l>hiragana</l><l>katakana</l><l>hiraganakatakana</l><l>zenkaku</l><l>hankaku</l><l>zenkakuhankaku</l><l>alt</l><l>altgraph</l><l>capslock</l><l>control</l><l>fn</l><l>fnlock</l><l>meta</l><l>numlock</l><l>scrolllock</l><l>shift</l><l>symbol</l><l>symbollock</l><l>hyper</l><l>super</l><l>audiobalanceleft</l><l>audiobalanceright</l><l>audiobassboostdown</l><l>audiobassboosttoggle</l><l>audiobassboostup</l><l>audiofaderfront</l><l>audiofaderrear</l><l>audiovolumedown</l><l>audiovolumemute</l><l>audiovolumeup</l><l>captiontoggle</l><l>subtitle</l><l>microphonemute</l><l>microphonevolumedown</l><l>microphonevolumemute</l><l>microphonevolumeup</l><l>mediaplay</l><l>mediapause</l><l>mediastop</l><l>medianexttrack</l><l>mediaprevioustrack</l><l>mediatracknext</l><l>mediatrackprevious</l><l>mediaplaypause</l><l>mediarecord</l><l>mediafastforward</l><l>mediarewind</l><l>mediaaudiotrack</l><l>channeldown</l><l>channelup</l><l>lightbulb</l><l>print</l><l>save</l><l>browserback</l><l>browserforward</l><l>browserhome</l><l>browserrefresh</l><l>browsersearch</l><l>browserstop</l><l>browserfavorites</l><l>mail</l><l>calculator</l><l>calendar</l><l>camera</l><l>dashboard</l><l>history</l><l>music</l><l>notes</l><l>photo</l><l>screensaver</l><l>spreadsheet</l><l>video</l><l>webcam</l><l>appswitch</l><l>call</l><l>camerafocus</l><l>endcall</l><l>goback</l><l>gohome</l><l>headsethook</l><l>lastnumberredial</l><l>notification</l><l>mannermode</l><l>voicedial</l><l>tv</l><l>tvantennacable</l><l>tvaudiodescription</l><l>tvaudiodescriptionmixdown</l><l>tvaudiodescriptionmixup</l><l>tvcontentsmenu</l><l>tvdataservice</l><l>tvinput</l><l>tvinputcomponent1</l><l>tvinputcomponent2</l><l>tvinputcomposite1</l><l>tvinputcomposite2</l><l>tvinputhdmi1</l><l>tvinputhdmi2</l><l>tvinputhdmi3</l><l>tvinputhdmi4</l><l>tvinputvga1</l><l>tvmediacontext</l><l>tvnetwork</l><l>tvnumberentry</l><l>tvpower</l><l>tvradioservice</l><l>tvsatellite</l><l>tvsatellitebs</l><l>tvsatellitecs</l><l>tvsatellitetoggle</l><l>tvterrestrialanalog</l><l>tvterrestrialdigital</l><l>tvtimer</l><l>avrinput</l><l>avrpower</l><l>colorselectionblue</l><l>colorselectiongreen</l><l>colorselectionred</l><l>colorselectionyellow</l><l>closedcaptiontoggle</l><l>componentorder</l><l>dimmer</l><l>displayswap</l><l>dvr</l><l>exit</l><l>favoriteclear0</l><l>favoriteclear1</l><l>favoriteclear2</l><l>favoriteclear3</l><l>favoriterecall0</l><l>favoriterecall1</l><l>favoriterecall2</l><l>favoriterecall3</l><l>favoritestore0</l><l>favoritestore1</l><l>favoritestore2</l><l>favoritestore3</l><l>guide</l><l>guidenextday</l><l>guidepreviousday</l><l>info</l><l>instantreplay</l><l>link</l><l>listprogram</l><l>livecontent</l><l>lock</l><l>mediaapps</l><l>medialast</l><l>mediaskipbackward</l><l>mediaskipforward</l><l>mediastepbackward</l><l>mediastepforward</l><l>mediatopmenu</l><l>navigatein</l><l>navigatenext</l><l>navigateout</l><l>navigateprevious</l><l>nextfavoritechannel</l><l>nextuserprofile</l><l>onscreenmeasurementdisplay</l><l>prevfavoritechannel</l><l>previoususerprofile</l><l>playbackspeeddown</l><l>playbackspeedup</l><l>randomorder</l><l>recordspeednext</l><l>rfbypass</l><l>scanchannelstoggle</l><l>screenmodenext</l><l>settings</l><l>splitscreentoggle</l><l>stbinput</l><l>stbpower</l><l>teletext</l><l>videomodenext</l><l>wink</l><l>zoomtoggle</l><l>volumedown</l><l>volumemute</l><l>volumeup</l><l>unidentified</l><l>&#126;</l><l>!</l><l>@</l><l>#</l><l>$</l><l>%</l><l>^</l><l>&amp;</l><l>*</l><l>(</l><l>)</l><l>_</l><l>+</l><l>`</l><l>-</l><l>=</l><l>[</l><l>]</l><l>\</l><l>;</l><l>&apos;</l><l>,</l><l>.</l><l>/</l><l>{</l><l>}</l><l>|</l><l>:</l><l>"</l><l>&lt;</l><l>&gt;</l><l>?</l></list></block></block></block></script></block-definition><block-definition s="%&apos;base&apos; ↑↑ %&apos;height&apos;" type="reporter" category="operators"><comment x="0" y="0" w="90" collapsed="false">This block gets the tetration of the input. The bignums library is recommended.</comment><header></header><code></code><translations></translations><inputs><input type="%n" initial="1"></input><input type="%n" initial="1"></input></inputs><script><block s="doIf"><block s="reportVariadicNotEquals"><list><block var="height"/><block s="reportRound"><block var="height"/></block></list></block><script><block s="doApplyExtension"><l>err_error(msg)</l><list><l>Non-integer value used</l></list></block></script><list><block s="reportNot"><block s="reportIsA"><block var="height"/><l><option>number</option></l></block></block><script><block s="doReport"><block s="reportDifference"><l>.</l><l>.</l></block></block></script><block s="reportVariadicLessThan"><list><block var="height"/><l>0</l></list></block><script><block s="doReport"><block s="reportMonadic"><l><option>neg</option></l><custom-block s="%n ↑↑ %n"><block var="base"/><block s="reportMonadic"><l><option>abs</option></l><block var="height"/></block></custom-block></block></block></script><block s="reportVariadicEquals"><list><block var="height"/><l>0</l></list></block><script><block s="doReport"><l>1</l></block></script></list></block><block s="doReport"><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="height"/><l>1</l></list></block><block var="base"/><block s="reportPower"><block var="base"/><custom-block s="%n ↑↑ %n"><block var="base"/><block s="reportDifference"><block var="height"/><l>1</l></block></custom-block></block></block></block></script></block-definition><block-definition s="assoc %&apos;value&apos; from %&apos;list&apos; $arrowRight $nl %&apos;result&apos; from %&apos;finder&apos;" type="reporter" category="lists"><comment x="0" y="0" w="135" collapsed="false">Finds the first row where the first number&apos;s corresponding item matches the text and reports the item from that row with the index of the second value (or the entire row if &quot;all&quot; is selected)</comment><header></header><code></code><translations></translations><inputs><input type="%s" initial="1">thing</input><input type="%l" initial="1"></input><input type="%n" initial="1"><options>all=$_all</options></input><input type="%n" initial="1"></input></inputs><script><block s="doIf"><block s="reportVariadicOr"><list><block s="reportVariadicLessThan"><list><block s="reportListAttribute"><l><option>rank</option></l><block var="list"/></block><l>2</l></list></block><block s="reportNot"><block s="reportIsA"><block var="list"/><l><option>list</option></l></block></block></list></block><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block s="reportJoinWords"><list><l>expecting a table but getting a </l><block s="reportTypeOf"><block var="list"/></block></list></block></list></block></script><list></list></block><block s="doReport"><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="result"/><l>all</l></list></block><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><block s="reportListItem"><block var="finder"/><l/></block><block var="value"/></list></block></autolambda><list></list></block><block var="list"/></block><block s="reportListItem"><block var="result"/><block s="reportFindFirst"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><block s="reportListItem"><block var="finder"/><l/></block><block var="value"/></list></block></autolambda><list></list></block><block var="list"/></block></block></block></block></script></block-definition><block-definition s="indices of %&apos;value&apos; in %&apos;list&apos;" type="reporter" category="lists" space="true"><comment x="0" y="0" w="125.83333333333336" collapsed="false">Reports all indexes of the input in the list. Different from index of, because this reports all instances in a list format, rather than just the first one.</comment><header></header><code></code><translations></translations><inputs><input type="%s" initial="1">thing</input><input type="%l" initial="1"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="list"/><l><option>list</option></l></block></block><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block s="reportJoinWords"><list><l>expecting a list but getting a </l><block s="reportTypeOf"><block var="list"/></block></list></block></list></block></script><list><block s="reportNot"><block s="reportListContainsItem"><block var="list"/><block var="value"/></block></block><script><block s="doReport"><block s="reportNewList"><list><l>0</l></list></block></block></script></list></block><block s="doDeclareVariables"><list><l>#</l><l>indices</l></list></block><block s="doSetVar"><l>#</l><l>0</l></block><block s="doSetVar"><l>indices</l><block s="reportNewList"><list></list></block></block><block s="doWarp"><script><block s="doForEach"><l>item</l><block var="list"/><script><block s="doChangeVar"><l>#</l><l>1</l></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="item"/><block var="value"/></list></block><script><block s="doAddToList"><block var="#"/><block var="indices"/></block></script><list></list></block></script></block></script></block><block s="doReport"><block var="indices"/></block></script></block-definition><block-definition s="%&apos;priority list&apos; on top of %&apos;list&apos;" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">Reports a list where all the items in the second list which have an index in the first list get replaced, and the rest remain unchanged.</comment><header></header><code></code><translations></translations><inputs><input type="%l" initial="1"></input><input type="%l" initial="1"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="list"/><l><option>list</option></l></block></block><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block s="reportJoinWords"><list><l>expecting a list but getting a </l><block s="reportTypeOf"><block var="list"/></block></list></block></list></block></script><list></list></block><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportVariadicLessThanOrEquals"><list><block var="index"/><block s="reportListAttribute"><l><option>length</option></l><block var="priority list"/></block></list></block><block s="reportListItem"><block var="index"/><block var="priority list"/></block><block var="value"/></block></autolambda><list><l>value</l><l>index</l></list></block><block var="list"/></block></block></script></block-definition><block-definition s="%&apos;predicate&apos; applies to %&apos;type&apos; in %&apos;list&apos; ?" type="predicate" category="lists" space="true"><comment x="0" y="0" w="186" collapsed="false">Reports if the predicate applies to at least one of the list items. Put a blank input and that is where the items will go. If you choose &quot;all&quot;, it will only report true if the predicate applies to the entire list.</comment><header></header><code></code><translations></translations><inputs><input type="%predRing" initial="1"></input><input type="%s" readonly="true" irreplaceable="true" expand="entirely" initial="1" max="1">any<options>any&#xD;all</options></input><input type="%l" initial="1"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="list"/><l><option>list</option></l></block></block><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block s="reportJoinWords"><list><l>expecting a list but getting a </l><block s="reportTypeOf"><block var="list"/></block></list></block></list></block></script><list></list></block><block s="doDeclareVariables"><list><l>pred</l><l>implicit?</l></list></block><block s="doSetVar"><l>implicit?</l><block s="reportListIsEmpty"><block s="reportAttributeOf"><l><option>input names</option></l><block var="predicate"/></block></block></block><block s="doIf"><block s="reportNot"><block s="reportListIsEmpty"><block var="list"/></block></block><script><block s="doWarp"><script><block s="doFor"><l>idx</l><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><script><block s="doSetVar"><l>pred</l><block s="reportIfElse"><block var="implicit?"/><block s="evaluate"><block var="predicate"/><list><block s="reportListItem"><block var="idx"/><block var="list"/></block></list></block><block s="evaluate"><block var="predicate"/><list><block s="reportListItem"><block var="idx"/><block var="list"/></block><block var="idx"/><block var="list"/></list></block></block></block><block s="doSetVar"><l>pred</l><block s="reportIfElse"><block s="reportIsA"><block var="pred"/><l><option>Boolean</option></l></block><block var="pred"/><block s="reportBoolean"><l><bool>false</bool></l></block></block></block><block s="doIf"><block s="reportVariadicAnd"><list><block s="reportVariadicEquals"><list><block var="type"/><l>any</l></list></block><block var="pred"/></list></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicAnd"><list><block s="reportVariadicEquals"><list><block var="type"/><l>all</l></list></block><block s="reportNot"><block var="pred"/></block></list></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block></script></block></script></block></script><list></list></block><block s="doReport"><block s="reportVariadicEquals"><list><block var="type"/><l>all</l></list></block></block></script></block-definition><block-definition s="order %&apos;list&apos; $arrowRight %&apos;ring&apos; %&apos;inputs&apos;" type="reporter" category="lists"><comment x="0" y="0" w="255.4276580810544" collapsed="false">This block sorts the list, Where the ring input is how to sort it, and the inputs are what to sort it by. The list is sorted by finding all the items in which their 𝗺𝗮𝗽𝗽𝗲𝗱 version matches any one of the inputs (from left to right.) Items without a corresponding input get grouped at the end of their list in their original order (except for the &#xD;𝘀𝗼𝗿𝘁𝗲𝗱 ones). For alphabetical or numerical order, please use [𝚜𝚘𝚛𝚝𝚎𝚍] 𝚘𝚏 ☰.</comment><header></header><code></code><translations></translations><inputs><input type="%l" initial="1"></input><input type="%repRing" initial="1"></input><input type="%mult%s" initial="1"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="list"/><l><option>list</option></l></block></block><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block s="reportJoinWords"><list><l>expecting a list but getting a </l><block s="reportTypeOf"><block var="list"/></block></list></block></list></block></script><list></list></block><block s="doDeclareVariables"><list><l>mapped list</l><l>result</l></list></block><block s="doSetVar"><l>mapped list</l><block s="reportMap"><block var="ring"/><block var="list"/></block></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doWarp"><script><block s="doForEach"><l>grouping</l><block var="inputs"/><script><block s="doForEach"><l>kept</l><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><block s="reportListItem"><block var="index"/><block var="mapped list"/></block><block var="grouping"/></list></block></autolambda><list><l>value</l><l>index</l></list></block><block var="list"/></block><script><block s="doAddToList"><block var="kept"/><block var="result"/></block></script></block></script></block><block s="doForEach"><l>kept</l><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportListContainsItem"><block var="inputs"/><block s="reportListItem"><block var="index"/><block var="mapped list"/></block></block></block></autolambda><list><l>value</l><l>index</l></list></block><block var="list"/></block><script><block s="doAddToList"><block var="kept"/><block var="result"/></block></script></block></script></block><block s="doReport"><block var="result"/></block></script></block-definition><block-definition s="create %&apos;shape&apos; size %&apos;size&apos;" type="command" category="pen"><comment x="0" y="0" w="135" collapsed="false">Creates a square or a circle depending on the dropdown at a certain size.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1">square<options>square&#xD;circle</options></input><input type="%n" initial="1">100</input></inputs><script><block s="doDeclareVariables"><list><l>pen down</l><l>x</l><l>y</l><l>dir</l></list></block><block s="doSetVar"><l>pen down</l><block s="getPenDown"></block></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>size</l><block s="reportVariadicMax"><list><l>10</l><block var="size"/></list></block></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="shape"/><l>square</l></list></block><script><block s="doWarp"><script><block s="up"></block><block s="changeXPosition"><block s="reportMonadic"><l><option>neg</option></l><block s="reportQuotient"><block var="size"/><l>2</l></block></block></block><block s="changeYPosition"><block s="reportQuotient"><block var="size"/><l>2</l></block></block><block s="down"></block><block s="changeXPosition"><block var="size"/></block><block s="changeYPosition"><block s="reportMonadic"><l><option>neg</option></l><block var="size"/></block></block><block s="changeXPosition"><block s="reportMonadic"><l><option>neg</option></l><block var="size"/></block></block><block s="changeYPosition"><block var="size"/></block><block s="up"></block></script></block></script><list><block s="reportVariadicEquals"><list><block var="shape"/><l>circle</l></list></block><script><block s="doSetVar"><l>size</l><block s="reportVariadicProduct"><list><block var="size"/><l>0.5</l></list></block></block><block s="doWarp"><script><block s="doFor"><l>i</l><l>0</l><l>360</l><script><block s="gotoXY"><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><block s="reportMonadic"><l><option>sin</option></l><block var="i"/></block><block var="size"/></list></block><block var="x"/></list></block><block s="reportVariadicSum"><list><block s="reportVariadicProduct"><list><block s="reportMonadic"><l><option>cos</option></l><block var="i"/></block><block var="size"/></list></block><block var="y"/></list></block></block><block s="down"></block></script></block></script></block></script></list></block><block s="up"></block><block s="gotoXY"><block var="x"/><block var="y"/></block><block s="setHeading"><block var="dir"/></block><block s="doIfElse"><block var="pen down"/><script><block s="down"></block></script><script><block s="up"></block></script></block></script></block-definition><block-definition s="primitive %&apos;primitive&apos; %&apos;inputs&apos;" type="command" category="other" space="true"><comment x="0" y="0" w="90" collapsed="false">Run a primitive with inputs.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1"><options>§_primitivesMenu</options></input><input type="%mult%s" initial="1"></input></inputs><script><block s="doDefineBlock"><l>block</l><block s="reportJoinWords"><block s="reportConcatenatedLists"><list><block s="reportNewList"><list><l>primitive </l><block var="primitive"/><l> </l></list></block><block s="reportReshape"><l>_ </l><list><block s="reportListAttribute"><l><option>length</option></l><block var="inputs"/></block></list></block></list></block></block><block s="reportJoinWords"><list><block s="reifyScript"><script><block s="doPrimitive"><l><bool>true</bool></l><l></l></block></script><list></list></block><block s="reportBoolean"><l><bool>true</bool></l></block><block var="primitive"/></list></block></block><block s="doDeleteBlock"><block var="block"/></block><block s="doDeclareVariables"><list><l>error</l></list></block><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block s="reifyScript"><script><block s="doRun"><block var="block"/><block var="inputs"/></block></script><list></list></block><block s="reifyScript"><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block var="error"/></list></block></script><list></list></block><l>error</l></list></block><block s="doApplyExtension"><l>err_reset</l><list></list></block></script></block-definition><block-definition s="prіmitive %&apos;primitive&apos; %&apos;inputs&apos;" type="reporter" category="other"><comment x="0" y="0" w="90" collapsed="false">Call a primitive with inputs.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1"><options>§_primitivesMenu</options></input><input type="%mult%s" initial="1"></input></inputs><script><block s="doDeclareVariables"><list><l>index</l><l>value</l></list></block><block s="doDefineBlock"><l>block</l><block s="reportJoinWords"><block s="reportConcatenatedLists"><list><block s="reportNewList"><list><l>primitive </l><block var="primitive"/><l> </l></list></block><block s="reportReshape"><l>_ </l><list><block s="reportListAttribute"><l><option>length</option></l><block var="inputs"/></block></list></block></list></block></block><block s="reportJoinWords"><list><block s="reifyScript"><script><block s="doPrimitive"><l><bool>true</bool></l><l></l></block></script><list></list></block><block s="reportBoolean"><l><bool>true</bool></l></block><block var="primitive"/></list></block></block><block s="doSetVar"><l>index</l><block s="reportListIndex"><block var="block"/><block s="reportGet"><l><option>blocks</option></l></block></block></block><block s="doSetBlockAttribute"><l><option>type</option></l><block var="block"/><l>2</l></block><block s="doSetVar"><l>block</l><block s="reportListItem"><block var="index"/><block s="reportGet"><l><option>blocks</option></l></block></block></block><block s="doDeleteBlock"><block var="block"/></block><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block s="reifyScript"><script><block s="doSetVar"><l>value</l><block s="evaluate"><block var="block"/><block var="inputs"/></block></block></script><list></list></block><block s="reifyScript"><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block var="error"/></list></block></script><list></list></block><l>error</l></list></block><block s="doApplyExtension"><l>err_reset</l><list></list></block><block s="doReport"><block var="value"/></block></script></block-definition><block-definition s="%&apos;avg&apos; of %&apos;list&apos; %&apos;weights&apos;" type="reporter" category="operators" space="true"><comment x="0" y="0" w="179" collapsed="false">This block allows you to average out data sets in many ways.&#xD;Mean: Adds all off the numbers together and divides them by the 𝗮𝗺𝗼𝘂𝗻𝘁 of numbers in the data set.&#xD;Median: Sorts all the numbers from least to greatest, then finds the middle number. If there are two middle numbers, it will report the 𝗺𝗲𝗮𝗻 of the two numbers.&#xD;Mode: Finds the most common number in the data set. This means the mode may contain 𝗻𝗼𝗻𝗲 or 𝗺𝘂𝗹𝘁𝗶𝗽𝗹𝗲 modes. Unlike the rest, the mode can use strings in its data.&#xD;Range: Takes the 𝗯𝗶𝗴𝗴𝗲𝘀𝘁 number in the data set and subtracts the 𝘀𝗺𝗮𝗹𝗹𝗲𝘀𝘁 one from it.&#xD;Midrange: Takes the biggest and smallest numbers, but instead of subtracting, The midrange finds the 𝗺𝗲𝗮𝗻 of said numbers.&#xD;Outliers: Finds all the numbers which are vastly 𝗵𝗶𝗴𝗵𝗲𝗿 or 𝗹𝗼𝘄𝗲𝗿 than the rest, using the interquartile range.&#xD;Variance: Calculates the mean, subtracts it from each item of the list, squares that, and finally means that. Figures out how 𝗱𝗶𝘀𝘁𝗿𝗶𝗯𝘂𝘁𝗲𝗱 the list is.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1">mean<options>mean&#xD;median&#xD;mode&#xD;range&#xD;midrange&#xD;&#126;&#xD;outliers&#xD;variance</options></input><input type="%l" initial="1"></input><input type="%mult%n" expand="weights:"></input></inputs><script><block s="doIf"><block s="reportVariadicNotEquals"><list><block var="avg"/><l>mean</l></list></block><script><block s="doSetVar"><l>list</l><block s="reportListAttribute"><l><option>sorted</option></l><block var="list"/></block></block></script><list></list></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="list"/><l><option>list</option></l></block></block><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block s="reportJoinWords"><list><l>expecting a list but getting a </l><block s="reportTypeOf"><block var="list"/></block></list></block></list></block></script><list><block s="reportVariadicAnd"><list><block s="reportVariadicNotEquals"><list><block var="avg"/><l>mode</l></list></block><block s="evaluate"><block s="reifyReporter"><script><block s="doDeclareVariables"><list><l>value</l></list></block><block s="doWarp"><script><block s="doForEach"><l>n</l><block var="list"/><script><block s="doSetVar"><l>value</l><block s="reportVariadicSum"><list><l>0</l><block var="n"/></list></block></block><block s="doIf"><block s="reportNot"><block s="reportVariadicIsIdentical"><list><block var="value"/><block var="value"/></list></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block></script></block></script></block><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><list></list></block></list></block><script><block s="doReport"><block s="reportModulus"><l>1</l><l>0</l></block></block></script><block s="reportListIsEmpty"><block var="list"/></block><script><block s="doReport"><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="avg"/><l>mode</l></list></block><l></l><l>0</l></block></block></script><block s="reportVariadicEquals"><list><block var="avg"/><l>mean</l></list></block><script><block s="doIfElse"><block s="reportListIsEmpty"><block var="weights"/></block><script><block s="doReport"><block s="reportQuotient"><block s="reportVariadicSum"><block var="list"/></block><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block></block></block></script><script><block s="doReport"><block s="evaluate"><block s="reportEnvironment"><l><option>script</option></l></block><list><l>mean</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportVariadicProduct"><list><block var="value"/><block s="reportIfElse"><block s="reportVariadicLessThanOrEquals"><list><block var="index"/><block s="reportListAttribute"><l><option>length</option></l><block var="weights"/></block></list></block><block s="reportListItem"><block var="index"/><block var="weights"/></block><l>1</l></block></list></block></autolambda><list><l>value</l><l>index</l></list></block><block var="list"/></block><block s="reportNewList"><list></list></block></list></block></block></script></block></script><block s="reportVariadicEquals"><list><block var="avg"/><l>median</l></list></block><script><block s="doReport"><block s="reportIfElse"><block s="reportVariadicEquals"><list><block s="reportQuotient"><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><l>2</l></block><block s="reportRound"><block s="reportQuotient"><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><l>2</l></block></block></list></block><block s="evaluate"><block s="reportEnvironment"><l><option>script</option></l></block><list><l>mean</l><block s="reportNewList"><list><block s="reportListItem"><block s="reportQuotient"><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><l>2</l></block><block var="list"/></block><block s="reportListItem"><block s="reportVariadicSum"><list><block s="reportQuotient"><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><l>2</l></block><l>1</l></list></block><block var="list"/></block></list></block><block s="reportNewList"><list></list></block></list></block><block s="reportListItem"><block s="reportQuotient"><block s="reportVariadicSum"><list><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><l>1</l></list></block><l>2</l></block><block var="list"/></block></block></block></script><block s="reportVariadicEquals"><list><block var="avg"/><l>mode</l></list></block><script><block s="doDeclareVariables"><list><l>modes</l></list></block><block s="doSetVar"><l>modes</l><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><block s="reportListItem"><l>2</l><l/></block><block s="reportListItem"><l>2</l><block s="reportListItem"><l>1</l><block s="reportListAttribute"><l><option>distribution</option></l><block var="list"/></block></block></block></list></block></autolambda><list></list></block><block s="reportListAttribute"><l><option>distribution</option></l><block var="list"/></block></block></block><block s="doReport"><block s="reportIfElse"><block s="reportVariadicEquals"><list><block s="reportListItem"><l>2</l><block s="reportListItem"><l>1</l><block s="reportListAttribute"><l><option>distribution</option></l><block var="list"/></block></block></block><l>1</l></list></block><l></l><block var="modes"/></block></block></script><block s="reportVariadicEquals"><list><block var="avg"/><l>range</l></list></block><script><block s="doReport"><block s="reportDifference"><block s="reportListItem"><l><option>last</option></l><block var="list"/></block><block s="reportListItem"><l>1</l><block var="list"/></block></block></block></script><block s="reportVariadicEquals"><list><block var="avg"/><l>midrange</l></list></block><script><block s="doReport"><block s="evaluate"><block s="reportEnvironment"><l><option>script</option></l></block><list><l>mean</l><block s="reportNewList"><list><block s="reportListItem"><l>1</l><block var="list"/></block><block s="reportListItem"><l><option>last</option></l><block var="list"/></block></list></block><block s="reportNewList"><list></list></block></list></block></block></script><block s="reportVariadicEquals"><list><block var="avg"/><l>outliers</l></list></block><script><block s="doDeclareVariables"><list><l>Q1</l><l>Q3</l><l>get median</l></list></block><block s="doSetVar"><l></l><l>0</l></block><block s="doSetVar"><l>Q1</l><block s="reportIfElse"><block s="reportVariadicEquals"><list><block s="reportQuotient"><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><l>2</l></block><block s="reportRound"><block s="reportQuotient"><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><l>2</l></block></block></list></block><block s="evaluate"><block s="reportEnvironment"><l><option>script</option></l></block><list><l>median</l><block s="reportListItem"><block s="reportNumbers"><l>1</l><block s="reportQuotient"><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><l>2</l></block></block><block var="list"/></block></list></block><block s="evaluate"><block s="reportEnvironment"><l><option>script</option></l></block><list><l>median</l><block s="reportListItem"><block s="reportNumbers"><l>1</l><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><l>2</l></block></block></block><block var="list"/></block></list></block></block></block><block s="doSetVar"><l>Q3</l><block s="reportIfElse"><block s="reportVariadicEquals"><list><block s="reportQuotient"><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><l>2</l></block><block s="reportRound"><block s="reportQuotient"><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><l>2</l></block></block></list></block><block s="evaluate"><block s="reportEnvironment"><l><option>script</option></l></block><list><l>median</l><block s="reportListItem"><block s="reportNumbers"><block s="reportVariadicSum"><list><block s="reportQuotient"><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><l>2</l></block><l>1</l></list></block><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block></block><block var="list"/></block></list></block><block s="evaluate"><block s="reportEnvironment"><l><option>script</option></l></block><list><l>median</l><block s="reportListItem"><block s="reportNumbers"><block s="reportVariadicSum"><list><block s="reportMonadic"><l><option>ceiling</option></l><block s="reportQuotient"><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><l>2</l></block></block><l>1</l></list></block><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block></block><block var="list"/></block></list></block></block></block><block s="doReport"><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportVariadicOr"><list><block s="reportVariadicLessThan"><list><block var="item"/><block s="reportDifference"><block var="Q1"/><block s="reportVariadicProduct"><list><l>1.5</l><block s="reportDifference"><block var="Q3"/><block var="Q1"/></block></list></block></block></list></block><block s="reportVariadicGreaterThan"><list><block var="item"/><block s="reportVariadicSum"><list><block var="Q3"/><block s="reportVariadicProduct"><list><l>1.5</l><block s="reportDifference"><block var="Q3"/><block var="Q1"/></block></list></block></list></block></list></block></list></block></autolambda><list></list></block><block var="list"/></block></block></script><block s="reportVariadicEquals"><list><block var="avg"/><l>variance</l></list></block><script><block s="doDeclareVariables"><list><l>mean</l></list></block><block s="doSetVar"><l>mean</l><block s="evaluate"><block s="reportEnvironment"><l><option>script</option></l></block><list><l>mean</l><block var="list"/><block s="reportNewList"><list></list></block></list></block></block><block s="doReport"><block s="evaluate"><block s="reportEnvironment"><l><option>script</option></l></block><list><l>mean</l><custom-block s="%s of %l %mult%n"><l>mean</l><block s="reportPower"><block s="reportDifference"><block var="list"/><block var="mean"/></block><l>2</l></block><list></list></custom-block><block s="reportNewList"><list></list></block></list></block></block></script></list></block><block s="doReport"><l>0</l></block></script><scripts><script x="655.9328776041668" y="1256.8333333333335"><block s="receiveSlotEvent"><l>weights</l><l><option>edited</option></l></block><block s="doIf"><block s="reportNot"><block s="reportVariadicEquals"><list><block var="avg"/><l>mean</l></list></block></block><script><block s="doSetSlot"><l>weights</l><block s="reportNewList"><list></list></block></block></script><list></list></block></script><script x="659.5071777343758" y="1377.5333333333356"><block s="receiveSlotEvent"><l>avg</l><l><option>edited</option></l></block><block s="doIf"><block s="reportNot"><block s="reportVariadicEquals"><list><block var="avg"/><l>mean</l></list></block></block><script><block s="doSetSlot"><l>weights</l><block s="reportNewList"><list></list></block></block></script><list></list></block></script></scripts></block-definition><block-definition s="%&apos;1&apos; loop %&apos;2&apos;" type="reporter" category="operators" space="true"><comment x="0" y="0" w="90" collapsed="false">A version of 𝚖𝚘𝚍 in which the minimum value is 1 instead of 0, allowing list looping.</comment><header></header><code></code><translations></translations><inputs><input type="%n" initial="1"></input><input type="%n" initial="1"></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportVariadicEquals"><list><block s="reportModulus"><block var="1"/><block var="2"/></block><l>0</l></list></block><block var="2"/><block s="reportModulus"><block var="1"/><block var="2"/></block></block></block></script></block-definition><block-definition s="how many items %&apos;pred&apos; in %&apos;list&apos;" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">Reports how many items have the predicate satisfied.</comment><header></header><code></code><translations></translations><inputs><input type="%predRing" initial="1"></input><input type="%l" initial="1"></input></inputs><script><block s="doDeclareVariables"><list><l>#</l><l>call</l><l>implicit?</l></list></block><block s="doSetVar"><l>#</l><l>0</l></block><block s="doSetVar"><l>implicit?</l><block s="reportListIsEmpty"><block s="reportAttributeOf"><l><option>input names</option></l><block var="pred"/></block></block></block><block s="doIf"><block s="reportNot"><block s="reportListIsEmpty"><block var="list"/></block></block><script><block s="doWarp"><script><block s="doFor"><l>i</l><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><script><block s="doSetVar"><l>call</l><block s="reportIfElse"><block var="implicit?"/><block s="evaluate"><block var="pred"/><list><block s="reportListItem"><block var="i"/><block var="list"/></block></list></block><block s="evaluate"><block var="pred"/><list><block s="reportListItem"><block var="i"/><block var="list"/></block><block var="i"/><block var="list"/></list></block></block></block><block s="doSetVar"><l>call</l><block s="reportIfElse"><block s="reportIsA"><block var="call"/><l><option>Boolean</option></l></block><block var="call"/><block s="reportBoolean"><l><bool>false</bool></l></block></block></block><block s="doIf"><block var="call"/><script><block s="doChangeVar"><l>#</l><l>1</l></block></script><list></list></block></script></block></script></block></script><list></list></block><block s="doReport"><block var="#"/></block></script></block-definition><block-definition s="repeat for %&apos;secs&apos; secs %&apos;action&apos;" type="command" category="control" space="true"><comment x="0" y="0" w="90" collapsed="false">Runs a script for a specified amount of seconds. The script will halt instantly when the target is reached.</comment><header></header><code></code><translations></translations><inputs><input type="%n" initial="1">3</input><input type="%ca" irreplaceable="true" initial="1"></input></inputs><script><block s="doDeclareVariables"><list><l>secs passed?</l></list></block><block s="doSetVar"><l>secs passed?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="fork"><block s="reifyScript"><script><block s="doWait"><l></l></block><block s="doSetVar"><l>secs passed?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><list><block var="secs"/></list></block><block s="doDeclareVariables"><list><l>loop runner</l></list><comment w="66.66666666666667" collapsed="false">Thanks @ego-lay_atman-bay&#xD;and @dardoro</comment></block><block s="doSetVar"><l>loop runner</l><block s="newClone"><l><option>Turtle sprite</option></l></block></block><block s="doTellTo"><block var="loop runner"/><block s="reifyScript"><script><block s="hide"></block><block s="fork"><block s="reifyScript"><script><block s="doForever"><script><block s="doRun"><block var="action"/><list></list></block></script></block></script><list></list></block><list></list></block></script><list></list></block><list></list></block><block s="doWaitUntil"><block var="secs passed?"/></block><block s="doTellTo"><block var="loop runner"/><block s="reifyScript"><script><block s="doStopThis"><l><option>other scripts in sprite</option></l></block><block s="removeClone"></block></script><list></list></block><list></list></block></script></block-definition><block-definition s="%&apos;bools&apos;" type="predicate" category="operators" space="true"><comment x="0" y="0" w="90" collapsed="false">Reports true if any of the booleans are true, but reports false if all of them are true.</comment><header></header><code></code><translations></translations><inputs><input type="%mult%b" readonly="true" separator="xor" collapse="any but not all" initial="2"></input></inputs><script><block s="doDeclareVariables"><list><l>any</l></list></block><block s="doSetVar"><l>any</l><block s="reportVariadicOr"><block var="bools"/></block></block><block s="doIf"><block s="reportVariadicAnd"><block var="bools"/></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><block s="doReport"><block var="any"/></block></script></block-definition><block-definition s="for each %&apos;upvars&apos; in %&apos;data&apos; %&apos;action&apos;" type="command" category="lists" space="true"><comment x="0" y="0" w="220.57851239669418" collapsed="false">Like 𝚏𝚘𝚛 𝚎𝚊𝚌𝚑 (𝚒𝚝𝚎𝚖) 𝚒𝚗 ☰ {} but it supports multiple variables: Along with item, there&apos;s support for the index, and the source list. Leave the upvars empty also to use implicit empty slots.</comment><header></header><code></code><translations></translations><inputs><input type="%mult%upvar" readonly="true" irreplaceable="true" initial="1" max="3">item&#xD;index&#xD;list&#xD;</input><input type="%l" readonly="true"></input><input type="%ca" readonly="true" irreplaceable="true"></input></inputs><script><block s="doDeclareVariables"><list><l>idx</l><l>implicit?</l></list></block><block s="doIf"><block s="reportVariadicGreaterThan"><list><block s="reportListAttribute"><l><option>length</option></l><block var="upvars"/></block><l>2</l></list></block><script><block s="doTellTo"><block s="reportEnvironment"><l><option>caller</option></l></block><block s="reifyScript"><script><block s="doApplyExtension"><l>var_set(name, val)</l><list><l></l><l></l></list></block></script><list></list></block><list><block s="reportListItem"><l>3</l><block var="upvars"/></block><block var="data"/></list></block></script><list></list></block><block s="doSetVar"><l>implicit?</l><block s="reportListIsEmpty"><block var="upvars"/></block></block><block s="doForEach"><l>itm</l><block var="data"/><script><block s="doChangeVar"><l>idx</l><l>1</l></block><block s="doIf"><block s="reportVariadicGreaterThan"><list><block s="reportListAttribute"><l><option>length</option></l><block var="upvars"/></block><l>1</l></list></block><script><block s="doTellTo"><block s="reportEnvironment"><l><option>caller</option></l></block><block s="reifyScript"><script><block s="doSetVar"><l></l><l></l></block></script><list></list></block><list><block s="reportListItem"><l>2</l><block var="upvars"/></block><block var="idx"/></list></block></script><list></list></block><block s="doIf"><block s="reportNot"><block var="implicit?"/></block><script><block s="doTellTo"><block s="reportEnvironment"><l><option>caller</option></l></block><block s="reifyScript"><script><block s="doSetVar"><l></l><l></l></block></script><list></list></block><list><block s="reportListItem"><l>1</l><block var="upvars"/></block><block var="itm"/></list></block></script><list></list></block><block s="doRun"><block var="action"/><block s="reportIfElse"><block var="implicit?"/><block s="reportNewList"><list><block var="itm"/></list></block><block s="reportNewList"><list></list></block></block></block></script></block></script></block-definition><block-definition s="generate code with length %&apos;length&apos; %&apos;charset&apos;" type="reporter" category="operators" space="true"><comment x="0" y="0" w="214.20416259765616" collapsed="false">Generates a random code from the selected length that you chose. The charset is usually Base64 characters, but you can also input your own.</comment><header></header><code></code><translations></translations><inputs><input type="%n">15</input><input type="%group%mlt" irreplaceable="true" expand="charset" max="1">ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890-_</input></inputs><script><block s="doDeclareVariables"><list><l>text</l></list></block><block s="doIfElse"><block s="reportListIsEmpty"><block var="charset"/></block><script><block s="doSetVar"><l>charset</l><block s="reportNewList"><list><l>A</l><l>B</l><l>C</l><l>D</l><l>E</l><l>F</l><l>G</l><l>H</l><l>I</l><l>J</l><l>K</l><l>L</l><l>M</l><l>N</l><l>O</l><l>P</l><l>Q</l><l>R</l><l>S</l><l>T</l><l>U</l><l>V</l><l>W</l><l>X</l><l>Y</l><l>Z</l><l>a</l><l>b</l><l>c</l><l>d</l><l>e</l><l>f</l><l>g</l><l>h</l><l>i</l><l>j</l><l>k</l><l>l</l><l>m</l><l>n</l><l>o</l><l>p</l><l>q</l><l>r</l><l>s</l><l>t</l><l>u</l><l>v</l><l>w</l><l>x</l><l>y</l><l>z</l><l>1</l><l>2</l><l>3</l><l>4</l><l>5</l><l>6</l><l>7</l><l>8</l><l>9</l><l>0</l><l>-</l><l>_</l></list></block></block></script><script><block s="doSetVar"><l>charset</l><block s="reportListAttribute"><l><option>uniques</option></l><block s="reportTextSplit"><block s="reportListItem"><l>1</l><block var="charset"/></block><l><option>letter</option></l></block></block></block></script></block><block s="doWarp"><script><block s="doSetVar"><l>text</l><l></l></block><block s="doRepeat"><block var="length"/><script><block s="doSetVar"><l>text</l><block s="reportJoinWords"><list><block var="text"/><block s="reportListItem"><l><option>random</option></l><block var="charset"/></block></list></block></block></script></block></script></block><block s="doReport"><block var="text"/></block></script></block-definition><block-definition s="%&apos;type&apos; home" type="command" category="motion"><comment x="0" y="0" w="176.66666666666669" collapsed="false">When pushing a position, the sprite&apos;s current position get&apos;s saved. When popping a position, the sprite will go to the current pushed position. Popping the position before pushing the position takes the sprite to the center (0,0).</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1">set<options>set&#xD;travel to&#xD;reset</options></input></inputs><script><block s="doDeclareVariables"><list><l>home undeclared?</l></list></block><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block s="reifyScript"><script><block s="doRun"><block var="_tblocks*home_"/><list></list></block><block s="doSetVar"><l>home undeclared?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><block s="reifyScript"><script><block s="doSetVar"><l>home undeclared?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><l></l></list></block><block s="doApplyExtension"><l>err_reset</l><list></list></block><block s="doIf"><block var="home undeclared?"/><script><block s="doApplyExtension"><l>var_declare(scope, name)</l><list><l>sprite</l><l>_tblocks*home_</l></list></block><block s="doApplyExtension"><l>ide_hide(block)</l><list><block s="reifyReporter"><autolambda><block var="_tblocks*home_"/></autolambda><list></list></block></list></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="type"/><l>set</l></list></block><script><block s="doSetVar"><l>_tblocks*home_</l><block s="getPosition"></block></block></script><list><block s="reportVariadicEquals"><list><block var="type"/><l>travel to</l></list></block><script><block s="doGotoObject"><block var="_tblocks*home_"/></block></script><block s="reportVariadicEquals"><list><block var="type"/><l>reset</l></list></block><script><block s="doSetVar"><l>_tblocks*home_</l><block s="reportReshape"><l>0</l><list><l>2</l></list></block></block></script></list></block></script></block-definition><block-definition s="switch %&apos;switch&apos; %&apos;cases&apos; default %&apos;default&apos;" type="command" category="control" space="true"><comment x="0" y="0" w="132.4" collapsed="false">First, this block takes anything as input. If the case matches the reporter&apos;s value, it runs the case script.&#xD;If the reporter doesn&apos;t match a case, the default script is run.</comment><header></header><code></code><translations></translations><inputs><input type="%n" readonly="true" initial="1">   </input><input type="%group%s%cs" irreplaceable="true" expand="case&#xD;​" initial="2"></input><input type="%cs" irreplaceable="true" initial="1"></input></inputs><script><block s="doDeclareVariables"><list><l>uncased?</l></list></block><block s="doSetVar"><l>uncased?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="doForEach"><l>case</l><block var="cases"/><script><block s="doIf"><block s="reportVariadicEquals"><list><block var="switch"/><block s="reportListItem"><l>1</l><block var="case"/></block></list></block><script><block s="doSetVar"><l>uncased?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block><block s="doRun"><block s="reportListItem"><l>2</l><block var="case"/></block><list></list></block></script><list></list></block></script></block><block s="doIf"><block var="uncased?"/><script><block s="doRun"><block var="default"/><list></list></block></script><list></list></block></script><scripts><script x="248.12363281249998" y="115.01666666666694"><block s="receiveSlotEvent"><l>switch</l><l><option>edited</option></l></block><block s="doSetSlot"><l>switch</l><l>   </l></block></script></scripts></block-definition><block-definition s="glide %&apos;secs&apos; secs to %&apos;input&apos;" type="command" category="motion" space="true"><comment x="0" y="0" w="90" collapsed="false">Like the glide block, but it goes to the center of the stage, a random position, the mouse-pointer, or a sprite, instead of to an XY destination.</comment><header></header><code></code><translations></translations><inputs><input type="%n" initial="1">1</input><input type="%s" readonly="true" initial="1">random position<options>§_destinationsMenu</options></input></inputs><script><block s="doIf"><block s="reportVariadicEquals"><list><block var="input"/><l>random position</l></list></block><script><block s="doGlide"><block var="secs"/><block s="reportRandom"><block s="reportAttributeOf"><l><option>left</option></l><block s="reportGet"><l><option>stage</option></l></block></block><block s="reportAttributeOf"><l><option>right</option></l><block s="reportGet"><l><option>stage</option></l></block></block></block><block s="reportRandom"><block s="reportAttributeOf"><l><option>top</option></l><block s="reportGet"><l><option>stage</option></l></block></block><block s="reportAttributeOf"><l><option>bottom</option></l><block s="reportGet"><l><option>stage</option></l></block></block></block></block></script><list><block s="reportVariadicEquals"><list><block var="input"/><l>center</l></list></block><script><block s="doGlide"><block var="secs"/><l>0</l><l>0</l></block></script><block s="reportVariadicEquals"><list><block var="input"/><l>mouse-pointer</l></list></block><script><block s="doGlide"><block var="secs"/><block s="reportMouseX"></block><block s="reportMouseY"></block></block></script><block s="reportIsA"><block var="input"/><l><option>list</option></l></block><script><block s="doGlide"><block var="secs"/><block s="reportListItem"><l>1</l><block var="input"/></block><block s="reportListItem"><l>2</l><block var="input"/></block></block></script><block s="reportObject"><block var="input"/></block><script><block s="doGlide"><block var="secs"/><block s="reportAttributeOf"><l><option>x position</option></l><block var="input"/></block><block s="reportAttributeOf"><l><option>y position</option></l><block var="input"/></block></block></script></list></block></script></block-definition><block-definition s="all but %&apos;num&apos; of %&apos;list&apos;" type="reporter" category="lists" space="true"><comment x="0" y="0" w="217.0182913643975" collapsed="false">The reporter version of &#xD;𝚍𝚎𝚕𝚎𝚝𝚎 () 𝚘𝚏 ☰.</comment><header></header><code></code><translations></translations><inputs><input type="%idx" initial="1">1<options>1&#xD;last=$_last&#xD;random=$_random&#xD;&#126;&#xD;parent=$_parent</options></input><input type="%l" initial="1"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="list"/><l><option>list</option></l></block></block><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block s="reportJoinWords"><list><l>expecting a list but getting a </l><block s="reportTypeOf"><block var="list"/></block></list></block></list></block></script><list></list></block><block s="doSetVar"><l>list</l><block s="reportMap"><block s="reifyReporter"><script></script><list></list></block><block var="list"/></block></block><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="num"/><l>random</l></list></block><script><block s="doDeleteFromList"><block s="reportRandom"><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block></block><block var="list"/></block><block s="doReport"><block var="list"/></block></script><script><block s="doDeleteFromList"><block var="num"/><block var="list"/></block><block s="doReport"><block var="list"/></block></script></block></script></block-definition><block-definition s="%&apos;input&apos; put at %&apos;number&apos; of %&apos;list&apos;" type="reporter" category="lists"><comment x="0" y="0" w="119.28571428571429" collapsed="false">The reporter version of &#xD;𝚒𝚗𝚜𝚎𝚛𝚝 [] 𝚊𝚝 () 𝚘𝚏 ☰.</comment><header></header><code></code><translations></translations><inputs><input type="%s" initial="1">thing</input><input type="%idx" initial="1">1<options>1&#xD;last=$_last&#xD;random=$_random&#xD;&#126;&#xD;parent=$_parent</options></input><input type="%l" initial="1"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="list"/><l><option>list</option></l></block></block><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block s="reportJoinWords"><list><l>expecting a list but getting a </l><block s="reportTypeOf"><block var="list"/></block></list></block></list></block></script><list></list></block><block s="doSetVar"><l>list</l><block s="reportMap"><block s="reifyReporter"><script></script><list></list></block><block var="list"/></block></block><block s="doInsertInList"><block var="input"/><block var="number"/><block var="list"/></block><block s="doReport"><block var="list"/></block></script></block-definition><block-definition s="slice %&apos;list&apos; by %&apos;nums&apos;" type="reporter" category="lists" space="true"><comment x="0" y="0" w="146" collapsed="false">Reports a shallow copy of the list. Specify multiple start &amp; end parameters, or none for a plain copy. Inputs in the negatives loop around, e.g. 0 is the last item and -1 is the second last.</comment><header></header><code></code><translations></translations><inputs><input type="%l" initial="1"></input><input type="%mult%n" initial="2">2&#xD;-1</input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="nums"/></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><script></script><list></list></block><block var="list"/></block></block></script><list></list></block><block s="doDeclareVariables"><list><l>loop</l></list></block><block s="doSetVar"><l>loop</l><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportVariadicEquals"><list><block s="reportModulus"><l></l><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block></block><l>0</l></list></block><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><block s="reportModulus"><l></l><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block></block></block></autolambda><list></list></block></block><block s="doSetVar"><l>nums</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportNot"><block s="reportIsA"><l></l><l><option>number</option></l></block></block><block s="reportVariadicOr"><list><block s="reportListIndex"><block s="reportListItem"><l></l><block var="list"/></block><block var="list"/></block><block s="evaluate"><block var="loop"/><list><l></l></list></block></list></block><block s="evaluate"><block var="loop"/><list><l></l></list></block></block></autolambda><list></list></block><l/></block></autolambda><list></list></block><block s="reportIfElse"><block s="reportVariadicEquals"><list><block s="reportModulus"><block s="reportListAttribute"><l><option>length</option></l><block var="nums"/></block><l>2</l></block><l>0</l></list></block><block s="reportReshape"><block var="nums"/><list><block s="reportQuotient"><block s="reportListAttribute"><l><option>length</option></l><block var="nums"/></block><l>2</l></block><l>2</l></list></block><block s="reportReshape"><block s="reportConcatenatedLists"><list><block var="nums"/><block s="reportListItem"><l><option>last</option></l><block var="nums"/></block></list></block><list><block s="reportQuotient"><block s="reportListAttribute"><l><option>length</option></l><block var="nums"/></block><l>2</l></block><l>2</l></list></block></block></block></block><block s="doDeclareVariables"><list><l>result</l></list></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doWarp"><script><block s="doForEach"><l>number tuple</l><block var="nums"/><script><block s="doSetVar"><l>result</l><block s="reportConcatenatedLists"><list><block var="result"/><block s="reportListItem"><block s="evaluate"><block s="reifyReporter"><autolambda><block s="reportNumbers"><l></l><l></l></block></autolambda><list></list></block><block var="number tuple"/></block><block var="list"/></block></list></block></block></script></block></script></block><block s="doReport"><block var="result"/></block></script></block-definition><block-definition s="%&apos;text&apos; %&apos;type&apos; %&apos;substring&apos; ?" type="predicate" category="operators" space="true"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1">hello world</input><input type="%s" readonly="true" irreplaceable="true" initial="1">contains<options>contains&#xD;starts with&#xD;ends with</options></input><input type="%s" initial="1">hello</input></inputs><script><block s="doReport"><block s="errorObsolete"></block></block></script></block-definition><block-definition s="trim %&apos;string&apos;" type="reporter" category="operators"><comment x="0" y="0" w="90" collapsed="false">Reports the string but any whitespace at the start or end is removed.</comment><header></header><code></code><translations></translations><inputs><input type="%s" initial="1">  hello world  </input></inputs><script><block s="doIf"><block s="reportIsA"><block var="string"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="trim %s"><l></l></custom-block></autolambda><list></list></block><block var="string"/></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportJoinWords"><block s="reportTextSplit"><block var="string"/><l><option>word</option></l></block></block><l></l></list></block><script><block s="doReport"><l></l></block></script><list></list></block><block s="doDeclareVariables"><list><l>start</l><l>end</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>start</l><l>0</l></block><block s="doUntil"><block s="reportVariadicGreaterThan"><list><block s="reportTextAttribute"><l><option>length</option></l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block s="reportLetter"><block var="start"/><block var="string"/></block><l><option>word</option></l></block></block></block><l>0</l></list></block><script><block s="doChangeVar"><l>start</l><l>1</l></block></script></block><block s="doSetVar"><l>end</l><block s="reportTextAttribute"><l><option>length</option></l><block var="string"/></block></block><block s="doUntil"><block s="reportVariadicGreaterThan"><list><block s="reportTextAttribute"><l><option>length</option></l><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block s="reportLetter"><block var="end"/><block var="string"/></block><l><option>word</option></l></block></block></block><l>0</l></list></block><script><block s="doChangeVar"><l>end</l><l>-1</l></block></script></block></script></block><block s="doReport"><block s="reportJoinWords"><block s="reportLetter"><block s="reportNumbers"><block var="start"/><block var="end"/></block><block var="string"/></block></block></block></script></block-definition><block-definition s="switch %&apos;switch&apos; $nl %&apos;cases&apos; $nl default %&apos;default&apos;" type="reporter" category="control"><comment x="0" y="0" w="132.4" collapsed="false">Like the SWITCH block but a reporter. Takes a switch as input, and if it matches each value, it reports that. Otherwise, it reports the default.</comment><header></header><code></code><translations></translations><inputs><input type="%n" readonly="true" initial="1">   </input><input type="%group%s%anyUE" irreplaceable="true" expand="case&#xD;then&#xD;$nl" initial="2"></input><input type="%anyUE" irreplaceable="true" initial="1"></input></inputs><script><block s="doForEach"><l>case</l><block var="cases"/><script><block s="doIf"><block s="reportVariadicEquals"><list><block var="switch"/><block s="reportListItem"><l>1</l><block var="case"/></block></list></block><script><block s="doReport"><block s="evaluate"><block s="reportListItem"><l>2</l><block var="case"/></block><list></list></block></block></script><list></list></block></script></block><block s="doReport"><block s="evaluate"><block var="default"/><list></list></block></block></script><scripts><script x="248.1236328125" y="115.01666666666712"><block s="receiveSlotEvent"><l>switch</l><l><option>edited</option></l></block><block s="doSetSlot"><l>switch</l><l>   </l></block></script></scripts></block-definition><block-definition s="hex of %&apos;color&apos;" type="reporter" category="pen" space="true"><comment x="0" y="0" w="90" collapsed="false">Reports the hex code of a color. If the color is opaque, the hex part will be 6 characters long. Otherwise, it will inclue the transparency in the result and the hex part will be 8 characters.</comment><header></header><code></code><translations></translations><inputs><input type="%clr" initial="1">rgba(145,26,68,1)</input></inputs><script><block s="doDeclareVariables"><list><l>tmp</l><l>current</l><l>hexlist</l><l>result</l><l>rgba</l><l>8digit?</l></list></block><block s="doSetVar"><l>hexlist</l><block s="reportConcatenatedLists"><list><block s="reportNumbers"><l>1</l><l>9</l></block><block s="reportUnicodeAsLetter"><block s="reportNumbers"><l>97</l><l>102</l></block></block></list></block></block><block s="doSetVar"><l>tmp</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>rgba</l><block s="reportColorAttribute"><l><option>r-g-b-a</option></l><block var="color"/></block></block><block s="doSetVar"><l>8digit?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportListItem"><l><option>last</option></l><block var="rgba"/></block><l>255</l></list></block><script><block s="doDeleteFromList"><l><option>last</option></l><block var="rgba"/></block><block s="doSetVar"><l>8digit?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><block s="doSetVar"><l>rgba</l><block s="reportRound"><block var="rgba"/></block></block><block s="doForEach"><l>channel</l><block var="rgba"/><script><block s="doDeleteFromList"><l><option>all</option></l><block var="tmp"/></block><block s="doSetVar"><l>current</l><block var="channel"/></block><block s="doIfElse"><block s="reportVariadicLessThan"><list><block var="channel"/><l>16</l></list></block><script><block s="doAddToList"><block s="reportJoinWords"><list><l>0</l><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="channel"/><l>0</l></list></block><l>0</l><block s="reportListItem"><block var="channel"/><block var="hexlist"/></block></block></list></block><block var="result"/></block></script><script><block s="doWarp"><script><block s="doUntil"><block s="reportVariadicEquals"><list><block var="current"/><l>0</l></list></block><script><block s="doAddToList"><block s="reportListItem"><block s="reportModulus"><block var="current"/><l>16</l></block><block var="hexlist"/></block><block var="tmp"/></block><block s="doSetVar"><l>current</l><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block var="current"/><l>16</l></block></block></block></script></block></script></block><block s="doAddToList"><block s="reportJoinWords"><block s="reportListAttribute"><l><option>reverse</option></l><block var="tmp"/></block></block><block var="result"/></block></script></block></script></block><block s="doIf"><block s="reportVariadicAnd"><list><block var="8digit?"/><block s="reportVariadicEquals"><list><block s="reportTextAttribute"><l><option>length</option></l><block s="reportListItem"><l>4</l><block var="result"/></block></block><l>1</l></list></block></list></block><script><block s="doReplaceInList"><l>4</l><block var="result"/><block s="reportJoinWords"><list><block s="reportListItem"><l>4</l><block var="result"/></block><l>0</l></list></block></block></script><list></list></block><block s="doReport"><block s="reportJoinWords"><list><l>#</l><block var="result"/></list></block></block></script></block-definition><block-definition s="is %&apos;things&apos; ?" type="predicate" category="operators" space="true"><comment x="0" y="0" w="90" collapsed="false">The opposite of IS _ IDENTICAL: reports if the two things are not identical. Any more inputs only detects if the neighboring (1 input slot before or after) is identical.</comment><header></header><code></code><translations></translations><inputs><input type="%mult%s" separator="unidentical to" collapse="all neighbours unidentical" initial="2"></input></inputs><script><block s="doIf"><block s="reportVariadicLessThan"><list><block s="reportListAttribute"><l><option>length</option></l><block var="things"/></block><l>2</l></list></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><block s="doReport"><block s="reportVariadicAnd"><list><block s="reportNot"><block s="reportVariadicIsIdentical"><list><block s="reportListItem"><l>1</l><block var="things"/></block><block s="reportListItem"><l>2</l><block var="things"/></block></list></block></block><custom-block s="is %mult%s ?"><block s="reportCDR"><block var="things"/></block></custom-block></list></block></block></script></block-definition><block-definition s="is %&apos;n&apos; %&apos;type&apos; ?" type="predicate" category="operators" space="true"><comment x="0" y="0" w="90" collapsed="false">Reports a flag of a number.</comment><header></header><code></code><translations></translations><inputs><input type="%n" initial="1"></input><input type="%s" readonly="true" irreplaceable="true" initial="1">prime<options>negative&#xD;an integer&#xD;prime&#xD;even&#xD;odd&#xD;NaN&#xD;finite</options></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="n"/><l><option>list</option></l></block><script><block s="doDeclareVariables"><list><l>self</l></list></block><block s="doSetVar"><l>self</l><block s="reportEnvironment"><l><option>script</option></l></block></block><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="self"/><list><l></l><block var="type"/></list></block></autolambda><list></list></block><block var="n"/></block></block></script><list></list></block><block s="doSetVar"><l>n</l><block s="reportVariadicProduct"><list><block var="n"/><l>1</l></list></block></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="type"/><l>negative</l></list></block><script><block s="doReport"><block s="reportVariadicLessThan"><list><block var="n"/><l>0</l></list></block></block></script><list><block s="reportVariadicEquals"><list><block var="type"/><l>an integer</l></list></block><script><block s="doReport"><block s="reportVariadicEquals"><list><block s="reportModulus"><block var="n"/><l>1</l></block><l>0</l></list></block></block></script><block s="reportVariadicEquals"><list><block var="type"/><l>prime</l></list></block><script><block s="doIf"><block s="reportVariadicOr"><list><block s="reportVariadicLessThan"><list><block var="n"/><l>2</l></list></block><block s="reportVariadicNotEquals"><list><block s="reportModulus"><block var="n"/><l>1</l></block><l>0</l></list></block></list></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list><block s="reportVariadicEquals"><list><block var="n"/><l>2</l></list></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></list></block><block s="doWarp"><script><block s="doFor"><l>i</l><l>2</l><block s="reportDifference"><block var="n"/><l>1</l></block><script><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportModulus"><block s="reportQuotient"><block var="n"/><block var="i"/></block><l>1</l></block><l>0</l></list></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block></script></block></script></block><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><block s="reportVariadicEquals"><list><block var="type"/><l>even</l></list></block><script><block s="doReport"><block s="reportVariadicEquals"><list><block s="reportModulus"><block var="n"/><l>2</l></block><l>0</l></list></block></block></script><block s="reportVariadicEquals"><list><block var="type"/><l>odd</l></list></block><script><block s="doReport"><block s="reportVariadicEquals"><list><block s="reportModulus"><block var="n"/><l>2</l></block><l>1</l></list></block></block></script><block s="reportVariadicEquals"><list><block var="type"/><l>NaN</l></list></block><script><block s="doReport"><block s="reportNot"><block s="reportVariadicIsIdentical"><list><block var="n"/><block var="n"/></list></block></block></block></script><block s="reportVariadicEquals"><list><block var="type"/><l>finite</l></list></block><script><block s="doReport"><block s="reportVariadicAnd"><list><block s="reportVariadicNotEquals"><list><block var="n"/><l>-Infinity</l></list></block><block s="reportVariadicNotEquals"><list><block var="n"/><l>Infinity</l></list></block></list></block></block></script><block s="reportVariadicEquals"><list><block var="type"/><l>whole</l></list></block><script><block s="doReport"><block s="reportVariadicAnd"><list><block s="reportVariadicEquals"><list><block s="reportModulus"><block var="n"/><l>1</l></block><l>0</l></list></block><block s="reportVariadicGreaterThan"><list><block var="n"/><l>0</l></list></block></list></block></block></script></list></block><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></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="false" penlog="false" volume="100" pan="0" lines="round" ternary="true" hyperops="true" codify="false" inheritance="true" sublistIDs="false" id="4315"><pentrails>data:image/png;base64,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</pentrails><costumes><list struct="atomic" id="4316"></list></costumes><sounds><list struct="atomic" id="4317"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="TurtleBlocks!" idx="1" x="0" y="0" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="80,80,80,1" pen="tip" id="4322"><costumes><list struct="atomic" id="4323"></list></costumes><sounds><list struct="atomic" id="4324"></list></sounds><blocks></blocks><variables><variable name="_tblocks*home_" hidden="true"><list struct="atomic" id="4327">0,1.0231815394945443e-12</list></variable></variables><scripts><script x="20" y="20"><custom-block s="glide %n secs to %s"><l>1</l><l><option>random position</option></l></custom-block></script><script x="20" y="60"><custom-block s="%s home"><l>set</l></custom-block></script><script x="20" y="100"><custom-block s="typewriter %s %txt delay %n %br then wait %n secs"><l>say</l><l>Hello!</l><l>0.1</l><l>1</l></custom-block></script><script x="20" y="154"><custom-block s="rewind sound %s"><l></l></custom-block></script><script x="20" y="194"><custom-block s="rewind sound %s until done"><l></l></custom-block></script><script x="20" y="234"><custom-block s="create %s size %n"><l>square</l><l>100</l></custom-block></script><script x="20" y="274"><custom-block s="hex of %clr"><color>145,26,68,1</color></custom-block></script><script x="20" y="307"><custom-block s="repeat for %n secs %ca"><l>3</l><script></script></custom-block></script><script x="20" y="365"><custom-block s="switch %n %group%s%cs default %cs"><l>   </l><list><l></l><script></script></list><script></script></custom-block></script><script x="20" y="479.83333333333326"><custom-block s="switch %n %br %group%s%anyUE %br default %anyUE"><l>   </l><list><l></l><l></l></list><l></l></custom-block></script><script x="20" y="553.8333333333333"><custom-block s="keys pressed"></custom-block></script><script x="20" y="583.6666666666665"><custom-block s="round %n to the nearest %n"><l>12</l><l>10</l></custom-block></script><script x="20" y="616.6666666666667"><custom-block s="%n ↑↑ %n"><l>2</l><l>4</l></custom-block></script><script x="20" y="649.6666666666667"><custom-block s="%s of %l %mult%n"><l>mean</l><l/><list></list></custom-block></script><script x="20" y="683.6666666666667"><custom-block s="%n loop %n"><l></l><l></l></custom-block></script><script x="20" y="716.6666666666667"><custom-block s="is %n %s ?"><l></l><l>prime</l></custom-block></script><script x="20" y="750.6666666666667"><custom-block s="%mult%b"><list><l/><l/></list></custom-block></script><script x="20" y="781.6666666666667"><custom-block s="generate code with length %n %group%mlt"><l>15</l><list></list></custom-block></script><script x="20" y="814.666666666667"><custom-block s="%s %s %s ?"><l>hello world</l><l>contains</l><l>hello</l></custom-block></script><script x="20" y="848.666666666667"><custom-block s="trim %s"><l>  hello world  </l></custom-block></script><script x="20" y="881.666666666667"><custom-block s="is %mult%s ?"><list><l></l><l></l></list></custom-block></script><script x="20" y="914.6666666666667"><custom-block s="item x: %s y: %n in table %l"><l>A</l><l>1</l><l/></custom-block></script><script x="20" y="947.666666666667"><custom-block s="assoc %s from %l $arrowRight %br %n from %n"><l>thing</l><l/><l></l><l></l></custom-block></script><script x="20" y="994.666666666667"><custom-block s="indices of %s in %l"><l>thing</l><l/></custom-block></script><script x="20" y="1027.6666666666667"><custom-block s="%l on top of %l"><l/><l/></custom-block></script><script x="20" y="1057.6666666666667"><custom-block s="%predRing applies to %s in %l ?"><block s="reifyPredicate"><script></script><list></list></block><l>any</l><l/></custom-block></script><script x="20" y="1092.666666666667"><custom-block s="order %l $arrowRight %repRing %mult%s"><l/><block s="reifyReporter"><script></script><list></list></block><list><l></l></list></custom-block></script><script x="20" y="1127.6666666666667"><custom-block s="how many items %predRing in %l"><block s="reifyPredicate"><script></script><list></list></block><l/></custom-block></script><script x="20" y="1162.6666666666667"><custom-block s="for each %mult%upvar in %l %ca"><list><l>item</l></list><l/><script></script></custom-block></script><script x="20" y="1225.5"><custom-block s="all but %idx of %l"><l>1</l><l/></custom-block></script><script x="20" y="1258.5000000000005"><custom-block s="%s put at %idx of %l"><l>thing</l><l>1</l><l/></custom-block></script><script x="20" y="1291.5000000000005"><custom-block s="slice %l by %mult%n"><l/><list><l>2</l><l>-1</l></list></custom-block></script><script x="20" y="1324.5000000000005"><custom-block s="primitive %s %mult%s"><l></l><list><l></l></list></custom-block></script><script x="20" y="1364.5000000000005"><custom-block s="prіmitive %s %mult%s"><l></l><list><l></l></list></custom-block></script></scripts></sprite><watcher scope="Stage" s="reportThreadCount" style="normal" x="10" y="10" color="4,148,220" hidden="true"/></sprites></stage><variables></variables></scene><scene name="TurtleBlocks! Extras"><notes>A version of turtleblocks with less important blocks.</notes><hidden></hidden><headers></headers><code></code><blocks><block-definition s="letters from %&apos;start&apos; to %&apos;finish&apos;" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">Get a list of letters&#xD;from a range. 1-26 is A-Z and then it resets. </comment><header></header><code></code><translations></translations><inputs><input type="%n" initial="1">1</input><input type="%n" initial="1">26</input></inputs><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportVariadicEquals"><list><block s="reportModulus"><l></l><l>26</l></block><l>0</l></list></block><l>z</l><block s="reportListItem"><block s="reportModulus"><l></l><l>26</l></block><block s="reportUnicodeAsLetter"><block s="reportNumbers"><l>97</l><l>122</l></block></block></block></block></autolambda><list></list></block><block s="reportNumbers"><block var="start"/><block var="finish"/></block></block></block></script></block-definition><block-definition s="is %&apos;list&apos; made up of %&apos;value&apos; ?" type="predicate" category="lists" space="true"><comment x="0" y="0" w="90" collapsed="false">Reports if all items of the list are equal to the value.</comment><header></header><code></code><translations></translations><inputs><input type="%l" initial="1"></input><input type="%s" initial="1"></input></inputs><script><block s="doReport"><block s="reportVariadicEquals"><block s="reportCONS"><block var="value"/><block var="list"/></block></block></block></script></block-definition><block-definition s="new costume from colors %&apos;list&apos;" type="reporter" category="looks"><comment x="0" y="0" w="90" collapsed="false">Create a new costume purely based on colors instead of pixels, width, and height.&#xD;1 color = 1 pixel.</comment><header></header><code></code><translations></translations><inputs><input type="%l" initial="1"></input></inputs><script><block s="doIf"><block s="reportVariadicOr"><list><block s="reportListContainsItem"><block s="reportListAttribute"><l><option>dimensions</option></l><block var="list"/></block><l>0</l></block><block s="reportVariadicLessThan"><list><block s="reportListAttribute"><l><option>rank</option></l><block var="list"/></block><l>2</l></list></block></list></block><script><block s="doApplyExtension"><l>err_error(msg)</l><list><l>cannot handle zero width or height</l></list></block></script><list></list></block><block s="doReport"><block s="reportNewCostume"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportColorAttribute"><l><option>r-g-b-a</option></l><block var="value"/></block></autolambda><list><l>value</l></list></block><block s="reportListAttribute"><l><option>flatten</option></l><block var="list"/></block></block><block s="reportListItem"><l>2</l><block s="reportListAttribute"><l><option>dimensions</option></l><block var="list"/></block></block><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block></block></block></script></block-definition><block-definition s="deep map %&apos;ring&apos; over %&apos;list&apos;" type="reporter" category="lists" space="true"><comment x="0" y="0" w="90" collapsed="false">Keep items from all items of the list, including sublists.</comment><header></header><code></code><translations></translations><inputs><input type="%repRing" readonly="true" irreplaceable="true"></input><input type="%l" readonly="true"></input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>index</l></list></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doWarp"><script><block s="doForEach"><l>item</l><block var="list"/><script><block s="doChangeVar"><l>index</l><l>1</l></block><block s="doAddToList"><block s="reportIfElse"><block s="reportIsA"><block var="item"/><l><option>list</option></l></block><custom-block s="deep map %repRing over %l"><block var="ring"/><block var="item"/></custom-block><block s="reportIfElse"><block s="reportListIsEmpty"><block s="reportAttributeOf"><l><option>input names</option></l><block var="ring"/></block></block><block s="evaluate"><block var="ring"/><list><block var="item"/></list></block><block s="evaluate"><block var="ring"/><list><block var="item"/><block var="index"/><block var="list"/></list></block></block></block><block var="result"/></block></script></block></script></block><block s="doReport"><block var="result"/></block></script></block-definition><block-definition s="bubble %&apos;type&apos;" type="reporter" category="looks"><comment x="0" y="0" w="150.8" collapsed="false">When you put in &quot;content&quot;, it returns what the sprite is saying/thinking/asking. &#xD;When you put in &quot;type&quot;, it reports the type of bubble that you&apos;re using. (0 if you don&apos;t have a speech bubble, 1 if you have a say bubble, 2 if you have a thought bubble, and 3 if you have a question bubble.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1">content<options>content&#xD;type</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>type</l></list><l>let bubble = this.talkBubble();&#xD;if(!bubble) { // base cases&#xD;switch (type) {&#xD;case "content":&#xD;return "";&#xD;case "type":&#xD;return 0;&#xD;};&#xD;};&#xD;&#xD;switch (type) {&#xD;case "content":&#xD;return bubble.contents;&#xD;case "type":&#xD;if (this instanceof StageMorph) {&#xD;return 1;&#xD;} else if (bubble.isThought) {&#xD;return 2;&#xD;} else if (bubble.isQuestion) {&#xD;return 3;&#xD;} else {&#xD;return 1;&#xD;};&#xD;};</l></block><list><block var="type"/></list></block></block></script></block-definition><block-definition s="assert %&apos;x&apos; as %&apos;type&apos;" type="command" category="control"><comment x="0" y="0" w="90" collapsed="false">If the input matches the type, nothing happens. However, if the input doesn&apos;t match the types, it will throw an error: expecting a &lt;type&gt; but getting a &lt;type of input&gt;.</comment><header></header><code></code><translations></translations><inputs><input type="%s" initial="1">5</input><input type="%s" readonly="true" initial="1">number<options>§_typesMenu</options></input></inputs><script><block s="doIf"><block s="reportVariadicEquals"><list><block var="type"/><l>script</l></list></block><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="x"/><l><option>script</option></l></block></block><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block s="reportJoinWords"><list><l>expecting a command / reporter / predicate but getting a </l><block s="reportTypeOf"><block var="x"/></block></list></block></list></block></script><list></list></block></script><list></list></block><block s="doIf"><block s="reportVariadicAnd"><list><block s="reportIsA"><block var="type"/><l><option>list</option></l></block><block s="reportNot"><block s="reportListContainsItem"><block var="type"/><block s="reportTypeOf"><block var="x"/></block></block></block></list></block><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block s="reportJoinWords"><list><l>expecting a </l><block s="reportCombine"><block var="type"/><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l> / </l><l></l></list></block></autolambda><list></list></block></block><l> but getting a </l><block s="reportTypeOf"><block var="x"/></block></list></block></list></block></script><list><block s="reportNot"><block s="evaluate"><block s="reifyReporter"><autolambda><block s="reportIsA"><block var="x"/><l></l></block></autolambda><list></list></block><list><block var="type"/></list></block></block><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block s="reportJoinWords"><list><l>expecting a </l><block var="type"/><l> but getting a </l><block s="reportTypeOf"><block var="x"/></block></list></block></list></block></script></list></block></script></block-definition><block-definition s="assert items of %&apos;list&apos; as %&apos;type&apos;" type="command" category="control"><comment x="0" y="0" w="169.9999999999999" collapsed="false">Asserts each item of a list as a certain type or list of types. If it finds at least 1 item not matching the type, it will error. Otherwise the script will resume as normal.</comment><header></header><code></code><translations></translations><inputs><input type="%l" initial="1"></input><input type="%s" readonly="true" initial="1">number<options>§_typesMenu</options></input></inputs><script><block s="doIf"><block s="reportVariadicEquals"><list><block var="type"/><l>script</l></list></block><script><block s="doWarp"><script><block s="doForEach"><l>item</l><block var="list"/><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="item"/><l><option>script</option></l></block></block><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block s="reportJoinWords"><list><l>expecting a command / reporter / predicate but getting a </l><block s="reportTypeOf"><block var="item"/></block></list></block></list></block></script><list></list></block></script></block></script></block></script><list><block s="reportIsA"><block var="type"/><l><option>list</option></l></block><script><block s="doWarp"><script><block s="doForEach"><l>item</l><block var="list"/><script><block s="doIf"><block s="reportNot"><block s="reportListContainsItem"><block var="type"/><block s="reportTypeOf"><block var="item"/></block></block></block><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block s="reportJoinWords"><list><l>expecting a </l><block s="reportCombine"><block var="type"/><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l> / </l><l></l></list></block></autolambda><list></list></block></block><l> but getting a </l><block s="reportTypeOf"><block var="item"/></block></list></block></list></block></script><list></list></block></script></block></script></block></script><l><bool>true</bool></l><script><block s="doWarp"><script><block s="doForEach"><l>item</l><block var="list"/><script><block s="doIf"><block s="reportNot"><block s="evaluate"><block s="reifyReporter"><autolambda><block s="reportIsA"><block var="item"/><l></l></block></autolambda><list></list></block><list><block var="type"/></list></block></block><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block s="reportJoinWords"><list><l>expecting a </l><block var="type"/><l> but getting a </l><block s="reportTypeOf"><block var="item"/></block></list></block></list></block></script><list></list></block></script></block></script></block></script></list></block></script></block-definition><block-definition s="if %&apos;condition&apos; then %&apos;true case&apos; %&apos;else ifs&apos; else %&apos;false case&apos;" type="reporter" category="control" space="true"><comment x="0" y="0" w="90" collapsed="false">A variadic version&#xD;of the 𝚒𝚏 &lt;&gt; 𝚝𝚑𝚎𝚗 [] 𝚎𝚕𝚜𝚎 [] block which allows for 𝚎𝚕𝚜𝚎 𝚒𝚏 &lt;&gt; inputs.&#xD;</comment><header></header><code></code><translations></translations><inputs><input type="%b" readonly="true"></input><input type="%anyUE"></input><input type="%group%b%anyUE" irreplaceable="true" expand="else if&#xD;then"></input><input type="%anyUE" initial="1"></input></inputs><script><block s="doIfElse"><block var="condition"/><script><block s="doReport"><block s="evaluate"><block var="true case"/><list></list></block></block></script><script><block s="doForEach"><l>case</l><block var="else ifs"/><script><block s="doIf"><block s="reportListItem"><l>1</l><block var="case"/></block><script><block s="doReport"><block s="evaluate"><block s="reportListItem"><l>2</l><block var="case"/></block><list></list></block></block></script><list></list></block></script></block><block s="doReport"><block s="evaluate"><block var="false case"/><list></list></block></block></script></block></script></block-definition><block-definition s="set %&apos;variable&apos; layout to %&apos;option&apos;" type="command" category="variables"><comment x="0" y="0" w="90" collapsed="false">Sets the layout of a variable watcher, to normal, large, or slider.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1"><options>§_getVarNamesDict</options></input><input type="%s" readonly="true" irreplaceable="true" initial="1">normal<options>normal&#xD;large&#xD;slider</options></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>varName</l><l>option</l></list><l>let stage = this.parentThatIsA(StageMorph);&#xD;let watcher = this.findVariableWatcher(varName, false) || this.findVariableWatcher(varName, true);&#xD;if (!watcher) {&#xD;throw new Error("a variable of name " + "&apos;" + varName + "&apos; \n does not exist in this context", {cause: "user"})&#xD;} else if (!(option == "normal" || option == "large" || option == "slider")) {&#xD;throw new Error("unsupported layout type: " + "&apos;" + option + "&apos;", {cause: "user"})&#xD;};&#xD;watcher.setStyle(option);</l></block><list><block var="variable"/><block var="option"/></list></block></script></block-definition><block-definition s="deep keep items %&apos;ring&apos; from %&apos;list&apos;" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">Keep items from all items of the list, including sublists.</comment><header></header><code></code><translations></translations><inputs><input type="%predRing" readonly="true" irreplaceable="true"></input><input type="%l" readonly="true"></input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>index</l></list></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doWarp"><script><block s="doForEach"><l>item</l><block var="list"/><script><block s="doChangeVar"><l>index</l><l>1</l></block><block s="doIf"><block s="reportIsA"><block var="item"/><l><option>list</option></l></block><script><block s="doAddToList"><custom-block s="deep keep items %predRing from %l"><block var="ring"/><block var="item"/></custom-block><block var="result"/></block></script><list><block s="reportIfElse"><block s="reportListIsEmpty"><block s="reportAttributeOf"><l><option>input names</option></l><block var="ring"/></block></block><block s="evaluate"><block var="ring"/><list><block var="item"/></list></block><block s="evaluate"><block var="ring"/><list><block var="item"/><block var="index"/><block var="list"/></list></block></block><script><block s="doAddToList"><block var="item"/><block var="result"/></block></script></list></block></script></block></script></block><block s="doReport"><block var="result"/></block></script></block-definition><block-definition s="launch %&apos;thread&apos; %&apos;script&apos;" type="command" category="control" space="true"><comment x="0" y="0" w="90" collapsed="false">Launch a new thread, however you can drag the thread upvar into a 𝚜𝚝𝚘𝚙 () block to stop the thread early.</comment><header></header><code></code><translations></translations><inputs><input type="%upvar" initial="1"></input><input type="%cmdRing" initial="1"></input></inputs><script><block s="doSetVar"><l>thread</l><block s="newClone"><l><option>Turtle sprite</option></l></block></block><block s="doTellTo"><block var="thread"/><block s="reifyScript"><script><block s="hide"></block><block s="fork"><block s="reifyScript"><script><block s="doRun"><block var="inner2 script"/><list></list></block><block s="doTellTo"><block var="inner sprite"/><block s="reifyScript"><script><block s="removeClone"></block></script><list></list></block><list></list></block></script><list><l>inner2 script</l><l>inner sprite</l></list></block><list><block var="inner script"/><block var="sprite"/></list></block></script><list><l>inner script</l><l>sprite</l></list></block><list><block var="script"/><block var="thread"/></list></block></script></block-definition><block-definition s="respond %&apos;new&apos;" type="command" category="sensing"><comment x="0" y="0" w="90" collapsed="false">This block terminates the current ask, and sets the answer to the input. </comment><header></header><code></code><translations></translations><inputs><input type="%s" initial="1">my name is...</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>response</l></list><l>let stage = this.parentThatIsA(StageMorph);&#xD;let prompter = stage.childThatIsA(StagePrompterMorph);&#xD;if (prompter) {&#xD;prompter.answer = response;&#xD;prompter.isDone = true;&#xD;} else {&#xD;stage.lastAnswer = response;&#xD;};</l></block><list><block var="new"/></list></block></script></block-definition><block-definition s="stop %&apos;thread&apos;" type="command" category="control"><comment x="0" y="0" w="236.66666666666669" collapsed="false">Stops a currently running thread. Drag the thread upvar from the 𝚕𝚊𝚞𝚗𝚌𝚑 (𝚝𝚑𝚛𝚎𝚊𝚍) ({}) block into of the input.</comment><header></header><code></code><translations></translations><inputs><input type="%n" readonly="true" initial="1">   </input></inputs><script><block s="doTellTo"><block var="thread"/><block s="reifyScript"><script><block s="removeClone"></block></script><list></list></block><list></list></block></script><scripts><script x="34.36614583333335" y="117.94999999999999"><block s="receiveSlotEvent"><l>thread</l><l><option>edited</option></l></block><block s="doSetSlot"><l>thread</l><l>   </l></block></script></scripts></block-definition><block-definition s="battery %&apos;option&apos;" type="reporter" category="sensing" space="true"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1">level<options>level&#xD;charging?&#xD;charging time&#xD;discharging time</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>op</l><l>proc</l></list><l>let dict = {&#xD;__proto__: null,&#xD;level: "level",&#xD;"charging?": "charging",&#xD;"charging time": "chargingTime",&#xD;"discharging time": "dischargingTime"&#xD;};&#xD;if (!dict[op]){&#xD;return "";&#xD;} else if (!navigator.getBattery) {&#xD;return "";&#xD;};&#xD;let opName = dict[op];&#xD;if(!proc.battResult){&#xD;proc.battResult = {&#xD;value: undefined,&#xD;done: false&#xD;};&#xD;navigator.getBattery().then((mnger) =&gt; {&#xD;proc.battResult.done = true;&#xD;proc.battResult.value = opName === "level" ? mnger.level * 100 : mnger[opName];&#xD;});&#xD;} else if (proc.battResult.done) {&#xD;let tmp = proc.battResult.value&#xD;delete proc.battResult; // dispose after finished&#xD;return tmp;&#xD;};&#xD;proc.pushContext(&apos;doYield&apos;); // uhh this is apparently how to Snap! synchronize an async promise - redgeographysnap&#xD;proc.pushContext();</l></block><list><block var="option"/></list></block></block></script></block-definition><block-definition s="curry %&apos;reporter&apos;" type="reporter" category="control"><comment x="0" y="0" w="304.9484050675939" collapsed="false">This block transforms a function which takes multiple arguments into one that takes one argument, remembers that value when called, until all of the parameters are specified.&#xD;f(x, y)&#xD;turns into&#xD;f(x)(y)</comment><header></header><code></code><translations></translations><inputs><input type="%repRing" initial="1"></input></inputs><script><block s="doDeclareVariables"><list><l>get slots</l><l>arity</l><l>curry</l></list></block><block s="doSetVar"><l>get slots</l><block s="reifyScript"><script><block s="doIf"><block s="reportNot"><block s="reportListIsEmpty"><block s="reportAttributeOf"><l><option>input names</option></l><block var="x"/></block></block></block><script><block s="doReport"><block s="reportListAttribute"><l><option>length</option></l><block s="reportAttributeOf"><l><option>input names</option></l><block var="x"/></block></block></block></script><list></list></block><block s="doDeclareVariables"><list><l>split</l><l>i</l><l>y</l></list></block><block s="doSetVar"><l>split</l><block s="reportTextSplit"><block var="x"/><l><option>blocks</option></l></block></block><block s="doIf"><block s="reportNot"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="split"/></block><l><option>list</option></l></block></block><script><block s="doSetVar"><l>split</l><block s="reportNewList"><list><block var="split"/></list></block></block></script><list></list></block><block s="doWarp"><script><block s="doForEach"><l>part</l><block s="reportConcatenatedLists"><list><block var="split"/></list></block><script><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block s="reifyScript"><script><block s="doSetVar"><l>y</l><block s="reportBlockAttribute"><l><option>selector</option></l><block s="reportListItem"><l>1</l><block var="part"/></block></block></block></script><list></list></block><block s="reifyScript"><script><block s="doSetVar"><l>y</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><l></l></list></block><block s="doApplyExtension"><l>err_reset</l><list></list></block><block s="doChangeVar"><l>i</l><l>1</l></block><block s="doIf"><block s="reportVariadicIsIdentical"><list><block var="y"/><l>reportJSFunction</l></list></block><script><block s="doDeleteFromList"><block var="i"/><block var="split"/></block></script><list></list></block></script></block></script></block><block s="doReport"><block s="reportListAttribute"><l><option>length</option></l><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><block var="value"/><l></l></list></block></autolambda><list><l>value</l></list></block><block s="reportConcatenatedLists"><block var="split"/></block></block></block></block></script><list><l>x</l></list><comment w="90" collapsed="false">From my class/instance OOP library ;)</comment></block></block><block s="doSetVar"><l>arity</l><block s="evaluate"><block var="get slots"/><list><block var="reporter"/></list></block></block><block s="doSetVar"><l>curry</l><block s="reifyScript"><script><block s="doIf"><block s="reportVariadicGreaterThanOrEquals"><list><block s="reportListAttribute"><l><option>length</option></l><block s="reportEnvironment"><l><option>inputs</option></l></block></block><block var="arity"/></list></block><script><block s="doReport"><block s="evaluate"><block var="reporter"/><block s="reportEnvironment"><l><option>inputs</option></l></block></block></block></script><list></list></block><block s="doDeclareVariables"><list><l>inputs</l></list></block><block s="doSetVar"><l>inputs</l><block s="reportEnvironment"><l><option>inputs</option></l></block></block><block s="doReport"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="curry"/><block s="reportConcatenatedLists"><list><block var="inputs"/><block s="reportNewList"><list><block var="arg"/></list></block></list></block></block></autolambda><list><l>arg</l></list></block></block></script><list><l>x</l></list></block></block><block s="doReport"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="curry"/><list><l></l></list></block></autolambda><list></list></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="false" penlog="false" volume="100" pan="0" lines="round" ternary="true" hyperops="true" codify="false" inheritance="true" sublistIDs="false" id="5384"><pentrails>data:image/png;base64,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</pentrails><costumes><list struct="atomic" id="5385"></list></costumes><sounds><list struct="atomic" id="5386"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="TurtleBlocks! Extras" idx="1" x="0" y="0" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="80,80,80,1" pen="tip" id="5391"><costumes><list struct="atomic" id="5392"></list></costumes><sounds><list struct="atomic" id="5393"></list></sounds><blocks></blocks><variables></variables><scripts><comment x="10" y="10" w="240.8333333333334" collapsed="false">TurtleBlocks Extras&#xD;(Bonuses which don&apos;t fit with the main TurtleBlocks)</comment><script x="10" y="75.70588235294116"><custom-block s="new costume from colors %l"><l/></custom-block></script><script x="10" y="105.39215686274503"><custom-block s="bubble %s"><l>content</l></custom-block></script><script x="10" y="139.07843137254895"><custom-block s="assert %s as %s"><l>5</l><l><option>number</option></l></custom-block></script><script x="10" y="178.7647058823528"><custom-block s="assert items of %l as %s"><l/><l>number</l></custom-block></script><script x="10" y="218.45098039215668"><custom-block s="if %b then %anyUE %group%b%anyUE else %anyUE"><l/><l></l><list></list><l></l></custom-block></script><script x="10" y="251.15686274509784"><custom-block s="launch %upvar %cmdRing"><l>thread</l><block s="reifyScript"><script></script><list></list></block></custom-block></script><script x="10" y="294.6405228758168"><custom-block s="stop %n"><l>   </l></custom-block></script><script x="10" y="369.0326797385621"><custom-block s="respond %s"><l>my name is...</l></custom-block></script><script x="10" y="407.73856209150335"><custom-block s="battery %s"><l>level</l></custom-block></script><script x="10" y="441.42483660130733"><custom-block s="set %s layout to %s"><l></l><l>normal</l></custom-block></script><script x="10" y="481.1111111111113"><custom-block s="is %l made up of %s ?"><l/><l></l></custom-block></script><script x="10" y="513.8169934640523"><custom-block s="letters from %n to %n"><l>1</l><l>26</l></custom-block></script><script x="10" y="546.5228758169935"><custom-block s="deep map %repRing over %l"><block s="reifyReporter"><script></script><list></list></block><l/></custom-block></script><script x="10" y="581.2287581699345"><custom-block s="deep keep items %predRing from %l"><block s="reifyPredicate"><script></script><list></list></block><l/></custom-block></script><script x="10" y="334.3267973856208"><custom-block s="curry %repRing"><block s="reifyReporter"><script></script><list></list></block></custom-block></script></scripts></sprite></sprites></stage><variables></variables></scene><scene name="TurtleBlocks! More..."><notes></notes><palette><category name="Queues" color="209,87,255,1"/><category name="JavaScript Utilities &amp; More" color="255,134,0,1"/></palette><hidden></hidden><headers></headers><code></code><blocks><block-definition s="new counter" type="reporter" category="operators"><comment x="0" y="0" w="408.16914062499984" collapsed="false">Reports a script which creates a new counter. Use [] 𝚌𝚘𝚞𝚗𝚝𝚎𝚛 () or [] 𝚌𝚘𝚞𝚗𝚝𝚎𝚛 () () to increment, decrement, reset, get, set, increment by an ammount, or decrement by an ammount to a counter. Make sure to store the counter in a variable.</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doDeclareVariables"><list><l>counter</l></list></block><block s="doReport"><block s="reifyScript"><script><block s="doIf"><block s="reportVariadicEquals"><list><block var="message"/><l>increment</l></list></block><script><block s="doChangeVar"><l>counter</l><l>1</l></block></script><list><block s="reportVariadicEquals"><list><block var="message"/><l>decrement</l></list></block><script><block s="doChangeVar"><l>counter</l><l>-1</l></block></script><block s="reportVariadicEquals"><list><block var="message"/><l>reset</l></list></block><script><block s="doSetVar"><l>counter</l><l>0</l></block></script><block s="reportVariadicEquals"><list><block var="message"/><l>set</l></list></block><script><block s="doSetVar"><l>counter</l><block var="value"/></block></script><block s="reportVariadicEquals"><list><block var="message"/><l>increment-by</l></list></block><script><block s="doChangeVar"><l>counter</l><block var="value"/></block></script><block s="reportVariadicEquals"><list><block var="message"/><l>decrement-by</l></list></block><script><block s="doChangeVar"><l>counter</l><block s="reportMonadic"><l><option>neg</option></l><block var="value"/></block></block></script></list></block><block s="doReport"><block var="counter"/></block></script><list><l>message</l><l>value</l></list></block></block></script></block-definition><block-definition s="%&apos;type&apos; counter %&apos;counter&apos;" type="reporter" category="operators" space="true"><comment x="0" y="0" w="90" collapsed="false">When you put a counter into this block, it increments, decrements, resets, or gets a counter&apos;s value, reporting the value.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1">get<options>increment&#xD;decrement&#xD;reset&#xD;get</options></input><input type="%n" readonly="true" initial="1">   </input></inputs><script><block s="doReport"><block s="evaluate"><block var="counter"/><list><block var="type"/></list></block></block></script><scripts><script x="10" y="86.03333333333347"><block s="receiveSlotEvent"><l>counter</l><l><option>edited</option></l></block><block s="doSetSlot"><l>counter</l><l>   </l></block></script></scripts></block-definition><block-definition s="%&apos;ring&apos; with input names $nl %&apos;inputnames&apos;" type="reporter" category="other" space="true"><comment x="0" y="0" w="90" collapsed="false">Artificially add/remove/change input names from a ring.</comment><header></header><code></code><translations></translations><inputs><input type="%repRing" initial="1"></input><input type="%mult%s" initial="1"></input></inputs><script><block s="doIf"><block s="reportVariadicEquals"><list><block var="ring"/><block s="reifyReporter"><script></script><list></list></block></list></block><script><block s="doReport"><block s="evaluate"><block s="reportJoinWords"><list><block s="reifyReporter"><autolambda><block s="reifyReporter"><script></script><list></list></block></autolambda><list></list></block><l></l><block s="reportCONS"><block s="reportListAttribute"><l><option>length</option></l><block var="inputnames"/></block><block var="inputnames"/></block></list></block><list></list></block></block></script><list><block s="reportVariadicEquals"><list><block var="ring"/><block s="reifyPredicate"><script></script><list></list></block></list></block><script><block s="doReport"><block s="evaluate"><block s="reportJoinWords"><list><block s="reifyReporter"><autolambda><block s="reifyPredicate"><script></script><list></list></block></autolambda><list></list></block><l></l><block s="reportCONS"><block s="reportListAttribute"><l><option>length</option></l><block var="inputnames"/></block><block var="inputnames"/></block></list></block><list></list></block></block></script><block s="reportVariadicEquals"><list><block var="ring"/><block s="reifyScript"><script></script><list></list></block></list></block><script><block s="doReport"><block s="evaluate"><block s="reportJoinWords"><list><block s="reifyReporter"><autolambda><block s="reifyScript"><script></script><list></list></block></autolambda><list></list></block><l></l><block s="reportCONS"><block s="reportListAttribute"><l><option>length</option></l><block var="inputnames"/></block><block var="inputnames"/></block></list></block><list></list></block></block></script></list></block><block s="doDeclareVariables"><list><l>input length</l></list></block><block s="doSetVar"><l>input length</l><block s="reportListAttribute"><l><option>length</option></l><block s="reportAttributeOf"><l><option>input names</option></l><block var="ring"/></block></block></block><block s="doSetVar"><l>ring</l><block s="reportTextSplit"><block var="ring"/><l><option>blocks</option></l></block></block><block s="doSetVar"><l>ring</l><block s="reportIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="ring"/></block><l><option>list</option></l></block><block s="reportCONS"><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportVariadicLessThanOrEquals"><list><block var="index"/><block s="reportDifference"><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><block var="input length"/></block></list></block></autolambda><list><l>value</l><l>index</l><l>list</l></list></block><block s="reportListItem"><l>1</l><block var="ring"/></block></block><block s="reportCDR"><block var="ring"/></block></block><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportVariadicLessThanOrEquals"><list><block var="index"/><block s="reportDifference"><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><block var="input length"/></block></list></block></autolambda><list><l>value</l><l>index</l><l>list</l></list></block><block var="ring"/></block></block></block><block s="doReport"><block s="reportJoinWords"><block s="reportIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="ring"/></block><l><option>list</option></l></block><block s="reportCONS"><block s="reportConcatenatedLists"><list><block s="reportListItem"><l>1</l><block var="ring"/></block><block var="inputnames"/></list></block><block s="reportCDR"><block var="ring"/></block></block><block s="reportConcatenatedLists"><list><block var="ring"/><block var="inputnames"/></list></block></block></block></block></script></block-definition><block-definition s="is %&apos;color&apos; a %&apos;type&apos; ?" type="predicate" category="pen"><comment x="0" y="0" w="90" collapsed="false">Reports true if the color matches the selected ROYGBP color. Options for shades and hues also.</comment><header></header><code></code><translations></translations><inputs><input type="%clr" initial="1">rgba(145,26,68,1)</input><input type="%s" readonly="true" irreplaceable="true" initial="1">red<options>red&#xD;orange&#xD;yellow&#xD;green&#xD;blue&#xD;purple&#xD;&#126;&#xD;shade&#xD;hue</options></input></inputs><script><block s="doStopThis"><l><option>this block</option></l></block></script><scripts><comment x="176.3927734374996" y="161.8333333333332" w="90" collapsed="false">im going to implement CIEDE2000&#xD;&#xD;should i add the tertiary colors</comment></scripts></block-definition><block-definition s="%&apos;#1&apos; of %&apos;#2&apos;" type="reporter" category="lists" primitive="reportListAttribute"><comment x="0" y="0" w="142.5" collapsed="false">Same as [] 𝚘𝚏 ☰,&#xD;but with more options which are hidden from the main block.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true">$_length<options>length=$_length&#xD;size=$_size&#xD;rank=$_rank&#xD;dimensions=$_dimensions&#xD;flatten=$_flatten&#xD;columns=$_columns&#xD;transpose=$_transpose&#xD;uniques=$_uniques&#xD;distribution=$_distribution&#xD;sorted=$_sorted&#xD;shuffled=$_shuffled&#xD;reverse=$_reverse&#xD;Σ=$_Σ&#xD;&#126;&#xD;text=$_text&#xD;lines=$_lines&#xD;csv=$_csv&#xD;json=$_json</options></input><input type="%l" readonly="true"></input></inputs><script><block s="doPrimitive"><l><bool>true</bool></l><l>reportListAttribute</l></block></script></block-definition><block-definition s="%&apos;type&apos; counter %&apos;value&apos; %&apos;counter&apos;" type="reporter" category="operators"><comment x="0" y="0" w="133.33333333333334" collapsed="false">When you put a counter into this block, it increments, decrements, or sets a counters value to/by the input, reporting the new value.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1">set<options>set&#xD;increment-by&#xD;decrement-by</options></input><input type="%n" initial="1">3</input><input type="%n" readonly="true" initial="1">   </input></inputs><script><block s="doReport"><block s="evaluate"><block var="counter"/><list><block var="type"/><block var="value"/></list></block></block></script><scripts><script x="62.15885416666674" y="104.03333333333347"><block s="receiveSlotEvent"><l>counter</l><l><option>edited</option></l></block><block s="doSetSlot"><l>counter</l><l>   </l></block></script></scripts></block-definition><block-definition s="%&apos;compiled?&apos; sort %&apos;data&apos; ordering with %&apos;function&apos;" type="reporter" category="lists" space="true"><comment x="0" y="0" w="161.14285714285708" collapsed="false">Reports a sorted version of the list in its first input slot, using the comparison function in the second input slot.  For a list of numbers, using &lt; as the comparison function will sort from low to high; using &gt; will sort from high to low.</comment><header></header><code></code><translations>ca:ordena _ segons criteri _&#xD;</translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1"><options>🗲</options></input><input type="%l"></input><input type="%predRing"></input></inputs><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="compiled?"/><l>🗲</l></list></block><script><block s="doReport"><block s="reportApplyExtension"><l>lst_sort(list, fn)</l><list><block var="data"/><block var="function"/></list></block></block></script><script><block s="doDeclareVariables"><list><l>even items</l><l>odd items</l><l>merge</l><l>split</l><l>copy of data</l></list></block><block s="doSetVar"><l>copy of data</l><block s="reportMap"><block s="reifyReporter"><script><block s="doReport"><l></l></block></script><list></list></block><block var="data"/></block></block><block s="doSetVar"><l>split</l><block s="reifyScript"><script><block s="doSetVar"><l>even items</l><block s="reportNewList"><list></list></block></block><block s="doSetVar"><l>odd items</l><block s="reportNewList"><list></list></block></block><block s="doUntil"><block s="reportListIsEmpty"><block var="copy of data"/></block><script><block s="doAddToList"><block s="reportListItem"><l>1</l><block var="copy of data"/></block><block var="odd items"/></block><block s="doDeleteFromList"><l>1</l><block var="copy of data"/></block><block s="doIf"><block s="reportNot"><block s="reportListIsEmpty"><block var="copy of data"/></block></block><script><block s="doAddToList"><block s="reportListItem"><l>1</l><block var="copy of data"/></block><block var="even items"/></block><block s="doDeleteFromList"><l>1</l><block var="copy of data"/></block></script><list></list></block></script></block></script><list></list></block></block><block s="doSetVar"><l>merge</l><block s="reifyScript"><script><block s="doWarp"><script><block s="doIf"><block s="reportVariadicEquals"><list><block var="#1"/><block s="reportNewList"><list></list></block></list></block><script><block s="doReport"><block var="#2"/></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="#2"/><block s="reportNewList"><list></list></block></list></block><script><block s="doReport"><block var="#1"/></block></script><list></list></block><block s="doIfElse"><block s="evaluate"><block var="function"/><list><block s="reportListItem"><l>1</l><block var="#1"/></block><block s="reportListItem"><l>1</l><block var="#2"/></block></list></block><script><block s="doReport"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="#1"/></block><block s="evaluate"><block s="reportEnvironment"><l><option>script</option></l></block><list><block s="reportCDR"><block var="#1"/></block><block var="#2"/></list></block></block></block></script><script><block s="doReport"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="#2"/></block><block s="evaluate"><block s="reportEnvironment"><l><option>script</option></l></block><list><block var="#1"/><block s="reportCDR"><block var="#2"/></block></list></block></block></block></script></block></script></block></script><list><l>#1</l><l>#2</l></list></block></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="data"/><block s="reportNewList"><list></list></block></list></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportCDR"><block var="data"/></block><block s="reportNewList"><list></list></block></list></block><script><block s="doReport"><block var="data"/></block></script><list></list></block><block s="doRun"><block var="split"/><list></list></block><block s="doReport"><block s="evaluate"><block var="merge"/><list><custom-block s="%s sort %l ordering with %predRing"><l></l><block var="odd items"/><block var="function"/></custom-block><custom-block s="%s sort %l ordering with %predRing"><l></l><block var="even items"/><block var="function"/></custom-block></list></block></block></script></block></script></block-definition><block-definition s="%&apos;compiled?&apos; group %&apos;data&apos; by %&apos;fn&apos;" type="reporter" category="lists"><comment x="0" y="0" w="254.31347656250003" collapsed="false">First, GROUP applies the function over the list and groups the number of instances of each item. Then it finds all the items where the function applied to the item matches each grouping.</comment><header></header><code></code><translations>pt:o agrupamento dos itens de _ de acordo com _&#xD;ca:$flash agrupa _ per _&#xD;pl:$flash grupuj _ według _&#xD;</translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1"><options>🗲</options></input><input type="%l"></input><input type="%repRing"></input></inputs><script><block s="doIfElse"><block s="reportVariadicEquals"><list><block var="compiled?"/><l>🗲</l></list></block><script><block s="doReport"><block s="reportApplyExtension"><l>dta_group(list, fn)</l><list><block var="data"/><block var="fn"/></list></block></block></script><script><block s="doDeclareVariables"><list><l>idnt index</l><l>idnt uniques</l><l>keepitems</l><l>mapped</l></list></block><block s="doSetVar"><l>idnt index</l><block s="reifyScript"><script><block s="doWarp"><script><block s="doFor"><l>num</l><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><script><block s="doIf"><block s="reportVariadicIsIdentical"><list><block s="reportListItem"><block var="num"/><block var="list"/></block><block var="input"/></list></block><script><block s="doReport"><block var="num"/></block></script><list></list></block></script></block></script></block><block s="doReport"><l>0</l></block></script><list><l>input</l><l>list</l></list></block></block><block s="doSetVar"><l>idnt uniques</l><block s="reifyReporter"><autolambda><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportVariadicEquals"><list><block var="index"/><block s="evaluate"><block var="idnt index"/><list><block var="value"/><block var="list"/></list></block></list></block></autolambda><list><l>value</l><l>index</l></list></block><block var="list"/></block></autolambda><list><l>list</l></list></block></block><block s="doSetVar"><l>mapped</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="fn"/><list><l></l></list></block></autolambda><list></list></block><block var="data"/></block></block><block s="doReport"><block s="reportMap"><block s="reifyReporter"><script><block s="doSetVar"><l>keepitems</l><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="reportVariadicIsIdentical"><list><block s="evaluate"><block var="fn"/><list><l></l></list></block><block var="value"/></list></block></autolambda><list></list></block><block var="data"/></block></block><block s="doReport"><block s="reportNewList"><list><block var="value"/><block s="reportListAttribute"><l><option>length</option></l><block var="keepitems"/></block><block var="keepitems"/></list></block></block></script><list><l>value</l><l>index</l><l>list</l></list></block><block s="evaluate"><block var="idnt uniques"/><list><block var="mapped"/></list></block></block></block></script></block></script></block-definition><block-definition s="vector costume? %&apos;input&apos;" type="predicate" category="looks"><comment x="0" y="0" w="90" collapsed="false">Reports if the input is a vector costume (SVG).</comment><header></header><code></code><translations></translations><inputs><input type="%s" initial="1">5</input></inputs><script><block s="doReport"><block s="reportVariadicAnd"><list><block s="reportIsA"><block var="input"/><l><option>costume</option></l></block><block s="reportVariadicEquals"><list><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block s="reportJoinWords"><list><block var="input"/></list></block><l>(</l></block></block><l>an SVG_Costume</l></list></block></list></block></block></script></block-definition><block-definition s="$speechBubble %&apos;comment&apos;" type="command" category="other" space="true"><comment x="0" y="0" w="90" collapsed="false">Does nothing, but adds a comment to your script as a block. </comment><header></header><code></code><translations></translations><inputs><input type="%mlt" irreplaceable="true" initial="1">add your&#xD;comment here!</input></inputs></block-definition><block-definition s="$speechBubble %&apos;comment&apos; %&apos;script&apos;" type="command" category="other"><comment x="0" y="0" w="90" collapsed="false">Runs its script below, and adds a comment to it.</comment><header></header><code></code><translations></translations><inputs><input type="%mlt" irreplaceable="true" initial="1">add your&#xD;comment here!</input><input type="%cs" irreplaceable="true" initial="1"></input></inputs><script><block s="doRun"><block var="script"/><list></list></block></script></block-definition><block-definition s="$speechBubble %&apos;comment&apos; ​" type="hat" category="other"><comment x="0" y="0" w="90" collapsed="false">Never runs the below script, but commentates it.</comment><header></header><code></code><translations></translations><inputs><input type="%mlt" irreplaceable="true" initial="1">add your&#xD;comment here!</input></inputs><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block-definition><block-definition s="$speechBubble %&apos;comment&apos; %&apos;reporter&apos;" type="reporter" category="other" space="true"><comment x="0" y="0" w="90" collapsed="false">Reports its second value, but adds a comment to it.</comment><header></header><code></code><translations></translations><inputs><input type="%mlt" irreplaceable="true" initial="1">add your&#xD;comment here!</input><input type="%n" readonly="true" initial="1">   </input></inputs><script><block s="doIf"><block s="reportVariadicOr"><list><block s="reportIsA"><block s="reportListItem"><l>3</l><block s="reportTextSplit"><block s="reportEnvironment"><l><option>caller</option></l></block><l><option>blocks</option></l></block></block><l><option>number</option></l></block><block s="reportIsA"><block s="reportListItem"><l>3</l><block s="reportTextSplit"><block s="reportEnvironment"><l><option>caller</option></l></block><l><option>blocks</option></l></block></block><l><option>text</option></l></block></list></block><script><block s="doReport"><l></l></block></script><list></list></block><block s="doReport"><block var="reporter"/></block></script><scripts><script x="416.7578125" y="104.05833333333351"><block s="receiveSlotEvent"><l>reporter</l><l><option>edited</option></l></block><block s="doSetSlot"><l>reporter</l><l>   </l></block></script></scripts></block-definition><block-definition s="$speechBubble %&apos;comment&apos; %&apos;boolean&apos;" type="predicate" category="other"><comment x="0" y="0" w="90" collapsed="false">Reports its second value, but adds a comment to it.</comment><header></header><code></code><translations></translations><inputs><input type="%mlt" irreplaceable="true" initial="1">add your&#xD;comment here!</input><input type="%b" readonly="true" initial="1"></input></inputs><script><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportEnvironment"><l><option>caller</option></l></block><block s="reportJoinWords"><list><block s="reifyPredicate"><autolambda><custom-block s="$speechBubble %mlt %b"><l>add your&#xD;comment here!</l><l/></custom-block></autolambda><list></list></block><block var="comment"/></list></block></list></block><script><block s="doReport"><l></l></block></script><list></list></block><block s="doReport"><block var="boolean"/></block></script></block-definition><block-definition s="JavaScript definition %&apos;input&apos;" type="reporter" category="JavaScript Utilities &amp; More" space="true"><comment x="0" y="0" w="90" collapsed="false">Reports the JS definition of a primitive.</comment><header></header><code></code><translations></translations><inputs><input type="%s" initial="1"><options>§_dynamicMenu</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>prim</l><l>process</l></list><l>if (this[prim]) {&#xD;return this[prim]&#xD;} else if (process[prim]){&#xD;return process[prim]&#xD;} else if (SnapExtensions.primitives.get(prim)) {&#xD;return SnapExtensions.primitives.get(prim)&#xD;};</l></block><list><block var="input"/></list></block></block></script><scripts><script x="201.703125" y="372.1833333333345"><block s="receiveSlotEvent"><l>input</l><l><option>menu</option></l></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>let extensions = Array.from(SnapExtensions.primitives).map((extension) =&gt; extension[0]);&#xD;let primitives = Object.getOwnPropertyNames(SpriteMorph.prototype.blocks);&#xD;return new List (primitives.concat(extensions));</l></block><list></list></block></block></script></scripts></block-definition><block-definition s="%&apos;prim&apos; uses %&apos;test&apos; ?" type="predicate" category="JavaScript Utilities &amp; More"><comment x="0" y="0" w="90" collapsed="false">Allows finding how to access a primitive block definition, with this or proc.</comment><header></header><code></code><translations></translations><inputs><input type="%s" initial="1"><options>§_primitivesMenu</options></input><input type="%code" readonly="true" irreplaceable="true" initial="1">this<options>this&#xD;proc</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>prim</l><l>test</l><l>proc</l></list><l>if (this[prim]) {&#xD;return test == "this"; &#xD;} else if (proc[prim]) {&#xD;return test == "proc";&#xD;} else {&#xD;return false;&#xD;};</l></block><list><block var="prim"/><block var="test"/></list></block></block></script></block-definition><block-definition s="run function ( %&apos;args&apos; ) { %&apos;code&apos; } $arrowRight %&apos;params&apos;" type="command" category="JavaScript Utilities &amp; More" space="true"><comment x="0" y="0" w="90" collapsed="false">Runs a JS function.</comment><header></header><code></code><translations></translations><inputs><input type="%mult%s"></input><input type="%code" initial="1"></input><input type="%mult%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><block var="args"/><block var="code"/></block><block var="params"/></block></script></block-definition><block-definition s="call function ( %&apos;args&apos; ) { %&apos;code&apos; } $arrowRight %&apos;params&apos;" type="reporter" category="JavaScript Utilities &amp; More"><comment x="0" y="0" w="90" collapsed="false">Calls a JS function.</comment><header></header><code></code><translations></translations><inputs><input type="%mult%s"></input><input type="%code" initial="1"></input><input type="%mult%s"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><block var="args"/><block var="code"/></block><block var="params"/></block></block></script></block-definition><block-definition s="return %&apos;code&apos;" type="reporter" category="JavaScript Utilities &amp; More"><comment x="0" y="0" w="90" collapsed="false">Returns the body evaluated</comment><header></header><code></code><translations></translations><inputs><input type="%code" initial="1"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>x</l></list><l>let func = new Function("return " + x);&#xD;return func();</l></block><list><block var="code"/></list></block></block></script></block-definition><block-definition s="let %&apos;declarations&apos;" type="command" category="other" space="true"><comment x="0" y="0" w="146" collapsed="false">When this block is used, its variables get declared AND their values get initialized, instead of defaulting to 0.</comment><header></header><code></code><translations>de:deklariere _&#xD;</translations><inputs><input type="%group%upvar%s" irreplaceable="true" expand="$nl&#xD;$arrowLeft" initial="2" min="2">variable&#xD;thing</input></inputs><script><block s="doWarp"><script><block s="doForEach"><l>tuple</l><block var="declarations"/><script><block s="doTellTo"><block s="reportEnvironment"><l><option>caller</option></l></block><block s="reifyScript"><script><block s="doSetVar"><l></l><l></l></block></script><list></list></block><block var="tuple"/></block></script></block></script></block></script></block-definition><block-definition s="lеt %&apos;declarations&apos;" type="reporter" category="other"><comment x="0" y="0" w="146" collapsed="false">When this block is used, its variables get declared AND their values get initialized, instead of defaulting to 0. The value reported is the first value if only 1 variable is declared, it reports that variable&apos;s value, otherwise it reports a list of all values.</comment><header></header><code></code><translations>de:deklariere _&#xD;</translations><inputs><input type="%group%upvar%s" irreplaceable="true" expand="$nl&#xD;$arrowLeft" initial="2" min="2">variable&#xD;thing</input></inputs><script><block s="doWarp"><script><block s="doForEach"><l>tuple</l><block var="declarations"/><script><block s="doTellTo"><block s="reportEnvironment"><l><option>caller</option></l></block><block s="reifyScript"><script><block s="doSetVar"><l></l><l></l></block></script><list></list></block><block var="tuple"/></block></script></block></script></block><block s="doReport"><block s="reportIfElse"><block s="reportListIsEmpty"><block var="declarations"/></block><block s="reportNewList"><list></list></block><block s="reportIfElse"><block s="reportVariadicEquals"><list><block s="reportListAttribute"><l><option>length</option></l><block var="declarations"/></block><l>1</l></list></block><block s="reportListItem"><l>2</l><block s="reportListItem"><l>1</l><block var="declarations"/></block></block><block s="reportListItem"><l>2</l><block s="reportListAttribute"><l><option>columns</option></l><block var="declarations"/></block></block></block></block></block></script></block-definition><block-definition s="tree %&apos;num&apos; %&apos;fill&apos;" type="reporter" category="lists" space="true"><comment x="0" y="0" w="207" collapsed="false">Returns a new recursive tree: The second item is empty, the first item is the tree 1 length bigger. A 1-length tree returns 2 empty values, and less than that returns an empty list.</comment><header></header><code></code><translations></translations><inputs><input type="%n" initial="1">4</input><input type="%mult%s" irreplaceable="true" expand="with fill" max="1"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="num"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="tree %n %mult%s"><l></l><list><block s="reportListItem"><l>1</l><block var="fill"/></block></list></custom-block></autolambda><list></list></block><block var="num"/></block></block></script><list><block s="reportVariadicLessThanOrEquals"><list><block var="num"/><l>0</l></list></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script><block s="reportNot"><block s="reportIsA"><block var="num"/><l><option>number</option></l></block></block><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block s="reportJoinWords"><list><l>expecting a number / list but getting a </l><block s="reportTypeOf"><block var="num"/></block></list></block></list></block></script></list></block><block s="doReport"><block s="evaluate"><block s="reifyReporter"><autolambda><block s="reportNewList"><list><block s="reportIfElse"><block s="reportVariadicEquals"><list><block var="number"/><l>1</l></list></block><block s="reportListItem"><l>1</l><block var="fill"/></block><block s="evaluate"><block s="reportEnvironment"><l><option>script</option></l></block><list><block s="reportDifference"><block var="number"/><l>1</l></block></list></block></block><block s="reportListItem"><l>1</l><block var="fill"/></block></list></block></autolambda><list><l>number</l></list></block><list><block var="num"/></list></block></block></script></block-definition><block-definition s="error %&apos;input&apos;" type="reporter" category="control" space="true"><comment x="0" y="0" w="90" collapsed="false">Returns a new error with the message, which can be thrown later.</comment><header></header><code></code><translations></translations><inputs><input type="%s" initial="1">Something went wrong!</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>input</l></list><l>return new Error(input)</l></block><list><block var="input"/></list></block></block></script></block-definition><block-definition s="throw %&apos;error&apos;" type="command" category="control"><comment x="0" y="0" w="90" collapsed="false">Throws an error which was previously created.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" initial="1">⚠</input></inputs><script><block s="doIf"><block s="evaluate"><block s="reportJSFunction"><list><l>err</l></list><l>return err instanceof Error</l></block><list><block var="error"/></list></block><script><block s="doRun"><block s="reportJSFunction"><list><l>error</l></list><l>error.cause = "user"&#xD;throw error</l></block><list><block var="error"/></list></block></script><list><block s="reportVariadicEquals"><list><block s="reportEnvironment"><l><option>caller</option></l></block><block s="reifyScript"><script><custom-block s="throw %s"><l>⚠</l></custom-block></script><list></list></block></list></block><script><block s="doRun"><block s="reportJSFunction"><list></list><l>throw new Error ("", {cause: "user"})</l></block><list></list></block></script><l><bool>true</bool></l><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block s="reportJoinWords"><list><l>expecting an error but getting a </l><block s="reportTypeOf"><block var="error"/></block></list></block></list></block></script></list></block></script></block-definition><block-definition s="throw new %&apos;error&apos;" type="command" category="control"><comment x="0" y="0" w="90" collapsed="false">Throws a new error with the inputted message.</comment><header></header><code></code><translations></translations><inputs><input type="%s" initial="1">Something went wrong!</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>input</l></list><l>throw new Error (input, {cause: &apos;user&apos;})</l></block><list><block var="error"/></list></block></script></block-definition><block-definition s="queue %&apos;inputs&apos;" type="reporter" category="Queues"><comment x="0" y="0" w="90" collapsed="false">The main constructor of Queues. List some items, or put in an input list.</comment><header></header><code></code><translations></translations><inputs><input type="%mult%s"></input></inputs><script><block s="doReport"><block s="reportCONS"><block s="reportTextFunction"><l><option>select</option></l><l>queue</l></block><block var="inputs"/></block></block></script></block-definition><block-definition s="queue? %&apos;input&apos;" type="predicate" category="Queues"><comment x="0" y="0" w="90" collapsed="false">Reports if its input is a valid queue.</comment><header></header><code></code><translations></translations><inputs><input type="%s" initial="1"></input></inputs><script><block s="doReport"><block s="reportVariadicAnd"><list><block s="reportIsA"><block var="input"/><l><option>list</option></l></block><block s="reportVariadicEquals"><list><block s="reportListItem"><l>1</l><block var="input"/></block><block s="reportTextFunction"><l><option>select</option></l><l>queue</l></block></list></block></list></block></block></script></block-definition><block-definition s="enqueue %&apos;input&apos; $arrowRight %&apos;queue&apos;" type="command" category="Queues" space="true"><comment x="0" y="0" w="90" collapsed="false">Adds an input to a queue.</comment><header></header><code></code><translations></translations><inputs><input type="%s" initial="1"></input><input type="%l" initial="1"></input></inputs><script><block s="doIfElse"><custom-block s="queue? %s"><block var="queue"/></custom-block><script><block s="doAddToList"><block var="input"/><block var="queue"/></block></script><script><block s="doApplyExtension"><l>err_error(msg)</l><list><l>expecting a queue but not getting one</l></list></block></script></block></script></block-definition><block-definition s="dequeue %&apos;queue&apos;" type="reporter" category="Queues" space="true"><comment x="0" y="0" w="90" collapsed="false">Deletes the first (not already dequeued) item of the queue, then reports its value. Put ringified inside of a 𝚛𝚞𝚗 block if you don&apos;t care about it&apos;s return value. (FIFO)</comment><header></header><code></code><translations></translations><inputs><input type="%l" initial="1"></input></inputs><script><block s="doIf"><custom-block s="queue? %s"><block var="queue"/></custom-block><script><block s="doDeclareVariables"><list><l>old</l></list></block><block s="doSetVar"><l>old</l><block s="reportListItem"><l>2</l><block var="queue"/></block></block><block s="doDeleteFromList"><l>2</l><block var="queue"/></block><block s="doReport"><block var="old"/></block></script><list></list></block><block s="doApplyExtension"><l>err_error(msg)</l><list><l>expecting a queue but not getting one</l></list></block></script></block-definition><block-definition s="peek %&apos;queue&apos;" type="reporter" category="Queues"><comment x="0" y="0" w="90" collapsed="false">Reports the first non-dequeued item of the queue, without removing it.</comment><header></header><code></code><translations></translations><inputs><input type="%l" initial="1"></input></inputs><script><block s="doIf"><custom-block s="queue? %s"><block var="queue"/></custom-block><script><block s="doReport"><block s="reportListItem"><l>2</l><block var="queue"/></block></block></script><list></list></block><block s="doApplyExtension"><l>err_error(msg)</l><list><l>expecting a queue but not getting one</l></list></block></script></block-definition><block-definition s="is queue %&apos;queue&apos; empty?" type="predicate" category="Queues" space="true"><comment x="0" y="0" w="90" collapsed="false">Reports if the queue is empty.</comment><header></header><code></code><translations></translations><inputs><input type="%l" initial="1"></input></inputs><script><block s="doIf"><custom-block s="queue? %s"><block var="queue"/></custom-block><script><block s="doReport"><block s="reportVariadicEquals"><list><block var="queue"/><custom-block s="queue %mult%s"><list></list></custom-block></list></block></block></script><list></list></block><block s="doApplyExtension"><l>err_error(msg)</l><list><l>expecting a queue but not getting one</l></list></block></script></block-definition><block-definition s="object %&apos;type&apos; %&apos;obj&apos;" type="reporter" category="JavaScript Utilities &amp; More" space="true"><comment x="0" y="0" w="90" collapsed="false">Get keys, methods, or all properties of an object. If it&apos;s &quot;with values&quot;, then it reports a key-value pair of the names and properties of the object.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1">entries<options>keys&#xD;entries&#xD;values</options></input><input type="%obj" initial="1"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>obj</l><l>type</l></list><l>if (typeof obj !== "object") obj = Object(obj);&#xD;let result = [];&#xD;let object = obj;&#xD;while (!(object === null || object === undefined)){&#xD;result = result.concat(Reflect.ownKeys(object))&#xD;object = Object.getPrototypeOf(object);&#xD;};&#xD;result = new List([...(new Set(result))].filter((x) =&gt; x in obj));&#xD;switch (type) {&#xD;case "keys":&#xD;return result;&#xD;case "entries":&#xD;return result.map((x) =&gt; {&#xD;let lst = new List([x]);&#xD;try{lst.add(obj[x]);}catch{lst.add("")};&#xD;return lst;&#xD;});&#xD;case "values":&#xD;return result.map((x) =&gt; obj[x]);&#xD;default:&#xD;throw new Error("type not specified",{cause: "user"});&#xD;&#xD;};</l></block><list><block var="obj"/><block var="type"/></list></block></block></script></block-definition><block-definition s="%&apos;obj&apos; . %&apos;properties&apos;" type="reporter" category="JavaScript Utilities &amp; More"><comment x="0" y="0" w="90" collapsed="false">Returns a property of an object.</comment><header></header><code></code><translations></translations><inputs><input type="%obj" initial="1"></input><input type="%mult%s" irreplaceable="true" separator="." initial="1" min="1"><options>§_dynamicMenu</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>obj</l><l>properties</l></list><l>let prp = obj;&#xD;properties.itemsArray().forEach((x) =&gt; {prp = prp?.[x]});&#xD;return prp;</l></block><list><block var="obj"/><block var="properties"/></list></block></block></script></block-definition><block-definition s="ouroboros %&apos;list&apos;" type="reporter" category="lists" space="true"><comment x="0" y="0" w="90" collapsed="false">Reports a new list with itself at the end.</comment><header></header><code></code><translations></translations><inputs><input type="%mult%s" initial="1"></input></inputs><script><block s="doDeclareVariables"><list><l>copy</l></list></block><block s="doSetVar"><l>copy</l><block s="reportMap"><block s="reifyReporter"><script></script><list></list></block><block var="list"/></block></block><block s="doAddToList"><block var="copy"/><block var="copy"/></block><block s="doReport"><block var="copy"/></block></script></block-definition><block-definition s="is %&apos;list&apos; ouroboral?" type="predicate" category="lists"><comment x="0" y="0" w="90" collapsed="false">Reports if the list is ouroboral. This means that the list contains itself.</comment><header></header><code></code><translations></translations><inputs><input type="%l" initial="1"></input></inputs><script><block s="doDeclareVariables"><list><l>return value</l></list></block><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block s="reifyScript"><script><block s="doRun"><block s="reportListAttribute"><l><option>rank</option></l><block var="list"/></block><list></list></block><block s="doSetVar"><l>return value</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><block s="reifyScript"><script><block s="doSetVar"><l>return value</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><l></l></list></block><block s="doApplyExtension"><l>err_reset</l><list></list></block><block s="doReport"><block var="return value"/></block></script></block-definition><block-definition s="for %&apos;property&apos; in %&apos;obj&apos; %&apos;script&apos;" type="command" category="JavaScript Utilities &amp; More"><comment x="0" y="0" w="90" collapsed="false">Runs a script for each property in an object. The &quot;property&quot; upvar represents that property.</comment><header></header><code></code><translations></translations><inputs><input type="%upvar" initial="1"></input><input type="%obj" initial="1"></input><input type="%ca" irreplaceable="true" initial="1"></input></inputs><script><block s="doForEach"><l>item</l><block s="evaluate"><block s="reportJSFunction"><list><l>obj</l></list><l>let result = new List();&#xD;for(property in obj) {&#xD;result.add(property)&#xD;};&#xD;return result;</l></block><list><block var="obj"/></list></block><script><block s="doSetVar"><l>property</l><block var="item"/></block><block s="doRun"><block var="script"/><list></list></block></script></block></script></block-definition><block-definition s="typeof %&apos;x&apos;" type="reporter" category="JavaScript Utilities &amp; More" space="true"><comment x="0" y="0" w="90" collapsed="false">Either returns the constructor of an object&apos;s name, the JS type of the object, or if the value is an instance of a class. </comment><header></header><code></code><translations></translations><inputs><input type="%s" expand="$arrowRight" max="1"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>x</l></list><l>return typeof x;</l></block><list><block var="x"/></list></block></block></script></block-definition><block-definition s="%&apos;value&apos; instanceof %&apos;constructor&apos;" type="predicate" category="JavaScript Utilities &amp; More"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1"></input><input type="%s" initial="1"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>val</l><l>cnst</l></list><l>try{&#xD;return val instanceof eval(cnst)&#xD;} catch {return false;}</l></block><list><block var="value"/><block var="constructor"/></list></block></block></script></block-definition><block-definition s="switch to %&apos;type&apos; mode" type="command" category="JavaScript Utilities &amp; More" space="true"><comment x="0" y="0" w="90" collapsed="false">Switch to dev mode or user mode, without any weird error catching off or fill thingies.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1">dev<options>dev&#xD;user</options></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>type</l></list><l>let ide = this.parentThatIsA(IDE_Morph);&#xD;let func;&#xD;switch (type) {&#xD;case "dev":&#xD;func = function () {&#xD;    var world = this.world();&#xD;&#xD;    world.isDevMode = true;&#xD;    this.controlBar.updateLabel();&#xD;    this.isAutoFill = false;&#xD;    this.isDraggable = true;&#xD;    this.setExtent(world.extent().subtract(100));&#xD;    this.setPosition(world.position().add(20));&#xD;    this.flushBlocksCache();&#xD;    this.refreshPalette();&#xD;    this.categories.refreshEmpty();&#xD;    // enable non-DialogBoxMorphs to be dropped&#xD;    // onto the World in dev-mode&#xD;    delete world.reactToDropOf;&#xD;    this.showMessage("entering development mode.");&#xD;}&#xD;break;&#xD;case "user":&#xD;func = function () {&#xD;    var world = this.world();&#xD;&#xD;    world.isDevMode = false;&#xD;    this.controlBar.updateLabel();&#xD;    this.isAutoFill = true;&#xD;    this.isDraggable = false;&#xD;    this.reactToWorldResize(world.bounds.copy());&#xD;    this.siblings().forEach(morph =&gt; {&#xD;        if (morph instanceof DialogBoxMorph) {&#xD;            world.add(morph); // bring to front&#xD;        } else {&#xD;            morph.destroy();&#xD;        }&#xD;    });&#xD;    this.flushBlocksCache();&#xD;    this.refreshPalette();&#xD;    this.categories.refreshEmpty();&#xD;    // prevent non-DialogBoxMorphs from being dropped&#xD;    // onto the World in user-mode&#xD;    world.reactToDropOf = (morph) =&gt; {&#xD;        if (!(morph instanceof DialogBoxMorph ||&#xD;        		(morph instanceof MenuMorph))) {&#xD;            if (world.hand.grabOrigin) {&#xD;                morph.slideBackTo(world.hand.grabOrigin);&#xD;            } else {&#xD;                world.hand.grab(morph);&#xD;            }&#xD;        }&#xD;    };&#xD;    this.showMessage(&apos;entering user mode&apos;, 1);&#xD;}&#xD;break;&#xD;};&#xD;func.apply(ide);</l></block><list><block var="type"/></list></block></script></block-definition><block-definition s="array %&apos;inputs&apos;" type="reporter" category="JavaScript Utilities &amp; More"><comment x="0" y="0" w="90" collapsed="false">Returns a JS array with the inputs.</comment><header></header><code></code><translations></translations><inputs><input type="%mult%s"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>inputs</l></list><l>return inputs instanceof List ? inputs.itemsArray() : [...inputs];</l></block><list><block var="inputs"/></list></block></block></script></block-definition><block-definition s="%&apos;type&apos; at %&apos;rate&apos; Hz for %&apos;secs&apos; seconds" type="reporter" category="sound"><comment x="0" y="0" w="90" collapsed="false">Reports s SIN, SIGN(SIN), OR TAN of a new ascending number list from 1 to sample rate * secs, with the inputted sample rate.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1">hum<options>hum&#xD;beep&#xD;bip</options></input><input type="%n" initial="1">44100<options>22.05 kHz=22050&#xD;44.1 kHz=44100&#xD;48 kHz=48000&#xD;88.2 kHz=88200&#xD;96 kHz=96000</options></input><input type="%n" initial="1">1</input></inputs><script><block s="doIf"><block s="reportVariadicEquals"><list><block var="type"/><l>hum</l></list></block><script><block s="doReport"><block s="reportNewSoundFromSamples"><block s="reportMonadic"><l><option>sin</option></l><block s="reportNumbers"><l>1</l><block s="reportMonadic"><l><option>ceiling</option></l><block s="reportVariadicProduct"><list><block var="rate"/><block var="secs"/></list></block></block></block></block><block var="rate"/></block></block></script><list><block s="reportVariadicEquals"><list><block var="type"/><l>beep</l></list></block><script><block s="doReport"><block s="reportNewSoundFromSamples"><block s="reportMonadic"><l><option>sign</option></l><block s="reportMonadic"><l><option>sin</option></l><block s="reportNumbers"><l>1</l><block s="reportMonadic"><l><option>ceiling</option></l><block s="reportVariadicProduct"><list><block var="rate"/><block var="secs"/></list></block></block></block></block></block><block var="rate"/></block></block></script><block s="reportVariadicEquals"><list><block var="type"/><l>bip</l></list></block><script><block s="doReport"><block s="reportNewSoundFromSamples"><block s="reportMonadic"><l><option>tan</option></l><block s="reportNumbers"><l>1</l><block s="reportMonadic"><l><option>ceiling</option></l><block s="reportVariadicProduct"><list><block var="rate"/><block var="secs"/></list></block></block></block></block><block var="rate"/></block></block></script></list></block><block s="doReport"><l></l></block></script></block-definition><block-definition s="new %&apos;type&apos; block spec %&apos;spec&apos; selector %&apos;selector&apos; category %&apos;category&apos;" type="reporter" category="control" space="true"><comment x="0" y="0" w="90" collapsed="false">Returns a new command, reporter, predicate, hat, or cap based on the input, with the block spec, possible selector, and category that you inputted. Beware, it won&apos;t save with your project.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1">reporter<options>command&#xD;reporter&#xD;predicate&#xD;hat</options></input><input type="%s" initial="1">%mlfunc %lists</input><input type="%s" irreplaceable="true" expand="selector" initial="1" max="1">reportListCombination</input><input type="%s" readonly="true" irreplaceable="true" initial="1">lists<options>§_dynamicMenu</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>blockType</l><l>spec</l><l>cat</l><l>selector</l></list><l>let blockFn = blockType === "reporter" || blockType === "predicate" ? ReporterBlockMorph : (blockType === "hat" ? HatBlockMorph : CommandBlockMorph);&#xD;let block = new blockFn;&#xD;block.isPredicate = blockType === "predicate";&#xD;block.setSpec(spec);&#xD;block.category = cat;&#xD;block.selector = selector;&#xD;block.isStop = function(){return this.shouldStop};&#xD;block.shouldStop = blockType === "cap"&#xD;block.fixBlockColor();&#xD;return block.reify();</l></block><list><block var="type"/><block var="spec"/><block var="category"/><block var="selector"/></list></block></block></script><scripts><script x="10" y="274.99999999999983"><block s="receiveSlotEvent"><l>category</l><l><option>menu</option></l></block><block s="doReport"><block s="reportGet"><l><option>categories</option></l></block></block></script></scripts></block-definition><block-definition s="turn %&apos;block&apos; into a %&apos;type&apos;" type="reporter" category="control"><comment x="0" y="0" w="90" collapsed="false">Changes the block type of 1 block to another block type.</comment><header></header><code></code><translations></translations><inputs><input type="%repRing" initial="1"></input><input type="%s" readonly="true" irreplaceable="true" initial="1">command<options>command&#xD;reporter&#xD;predicate&#xD;hat&#xD;cap</options></input></inputs><script><block s="doIf"><block s="reportIsA"><block s="reportListItem"><l>1</l><block s="reportTextSplit"><block var="block"/><l><option>blocks</option></l></block></block><l><option>list</option></l></block><script><block s="doApplyExtension"><l>err_error(msg)</l><list><l>expecting one block; getting multiple</l></list></block></script><list></list></block><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>block</l><l>type</l><l>proc</l></list><l>let creator;&#xD;switch(type){&#xD;case "command":&#xD;case "cap":&#xD;creator = CommandBlockMorph;&#xD;break;&#xD;case "reporter":&#xD;case "predicate":&#xD;creator = ReporterBlockMorph;&#xD;break;&#xD;case "hat":&#xD;creator = HatBlockMorph;&#xD;break;&#xD;}&#xD;let expr = block.expression;&#xD;let properties = Object.getOwnPropertyNames(expr);&#xD;let newBlock = new creator;&#xD;properties.forEach((property) =&gt; newBlock[property] = expr[property]);&#xD;newBlock.isPredicate = type === "predicate";&#xD;newBlock.isStop = function () {&#xD;return this.shouldStop&#xD;};&#xD;newBlock.shouldStop = type === "cap";&#xD;newBlock.fixLayout();&#xD;let result = newBlock.reify();&#xD;result.inputs = block.inputs.slice();&#xD;return result;</l></block><list><block var="block"/><block var="type"/></list></block></block></script></block-definition><block-definition s="map %&apos;dictionary list&apos;" type="reporter" category="JavaScript Utilities &amp; More"><header></header><code></code><translations></translations><inputs><input type="%group%s%s" expand="$nl&#xD;:"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>list</l></list><l>let fail = function(x){throw new Error(x, {cause: "user"})};&#xD;return new Map(&#xD;list.itemsArray().map((el) =&gt; el instanceof List ? [el.at(1),el.at(2)] : fail("expecting a key-value; not getting one"))&#xD;);</l></block><list><block var="dictionary list"/></list></block></block></script></block-definition><block-definition s="set %&apos;inputs&apos;" type="reporter" category="JavaScript Utilities &amp; More"><comment x="0" y="0" w="90" collapsed="false">Returns a JS array with the inputs.</comment><header></header><code></code><translations></translations><inputs><input type="%mult%s"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>inputs</l></list><l>return new Set(inputs.itemsArray());</l></block><list><block var="inputs"/></list></block></block></script></block-definition><block-definition s="promise %&apos;fn&apos; %&apos;reject&apos;" type="reporter" category="control" space="true"><comment x="0" y="0" w="90" collapsed="false">add comment here...</comment><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%group%repRing" irreplaceable="true" expand="reject&#xD;" max="1"></input></inputs><script><block s="doDeclareVariables"><list><l>promise</l><l>rejectfn</l></list></block><block s="doSetVar"><l>promise</l><block s="reportNewList"><list><block s="evaluate"><block s="reifyReporter"><script><block s="doDeclareVariables"><list><l>undeclared?</l></list></block><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block s="reifyScript"><script><block s="doRun"><block var="_promise*id_"/><list></list></block><block s="doSetVar"><l>undeclared?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><block s="reifyScript"><script><block s="doSetVar"><l>undeclared?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><l></l></list></block><block s="doApplyExtension"><l>err_reset</l><list></list></block><block s="doIf"><block var="undeclared?"/><script><block s="doApplyExtension"><l>var_declare(scope, name)</l><list><l>global</l><l>_promise*id_</l></list></block><block s="doApplyExtension"><l>var_set(name, val)</l><list><l>_promise*id_</l><block s="reportNewList"><list><l>promise</l></list></block></list></block><block s="doApplyExtension"><l>ide_hide(block)</l><list><block s="reifyReporter"><autolambda><block var="_promise*id_"/></autolambda><list></list></block></list></block></script><list></list></block><block s="doReport"><block var="_promise*id_"/></block></script><list></list></block><list></list></block><l></l><l>pending</l></list></block></block><block s="doSetVar"><l>rejectfn</l><block s="reportIfElse"><block s="reportListIsEmpty"><block var="reject"/></block><block s="reifyReporter"><script></script><list></list></block><block s="reportListItem"><l>1</l><block var="reject"/></block></block></block><block s="fork"><block s="reifyScript"><script><block s="doDeclareVariables"><list><l>error</l><l>inner-err</l></list></block><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block s="reifyScript"><script><block s="doReplaceInList"><l>2</l><block var="promise"/><block s="evaluate"><block var="fn"/><list></list></block></block><block s="doReplaceInList"><l>3</l><block var="promise"/><l>resolved</l></block></script><list></list></block><block s="reifyScript"><script><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block s="reifyScript"><script><block s="doReplaceInList"><l>2</l><block var="promise"/><block s="evaluate"><block var="rejectfn"/><list><block var="error"/></list></block></block><block s="doReplaceInList"><l>3</l><block var="promise"/><l>rejected</l></block></script><list></list></block><block s="reifyScript"><script><block s="doReplaceInList"><l>2</l><block var="promise"/><block var="inner-err"/></block><block s="doReplaceInList"><l>3</l><block var="promise"/><l>rejected</l></block></script><list></list></block><l>inner-err</l></list></block><block s="doApplyExtension"><l>err_reset</l><list></list></block></script><list></list></block><l>error</l></list></block><block s="doApplyExtension"><l>err_reset</l><list></list></block></script><list></list></block><list></list></block><block s="doReport"><block var="promise"/></block></script></block-definition><block-definition s="is %&apos;promise&apos; %&apos;type&apos; ?" type="predicate" category="control" space="true"><header></header><code></code><translations></translations><inputs><input type="%n" readonly="true">   </input><input type="%s" readonly="true" irreplaceable="true" initial="1">pending<options>pending&#xD;resolved&#xD;rejected</options></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportVariadicAnd"><list><block s="reportIsA"><block var="promise"/><l><option>list</option></l></block><block s="reportVariadicEquals"><list><block s="reportListAttribute"><l><option>length</option></l><block var="promise"/></block><l>3</l></list></block><block s="reportVariadicIsIdentical"><list><block s="reportListItem"><l>1</l><block var="promise"/></block><block s="evaluate"><block s="reifyReporter"><script><block s="doDeclareVariables"><list><l>undeclared?</l></list></block><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block s="reifyScript"><script><block s="doRun"><block var="_promise*id_"/><list></list></block><block s="doSetVar"><l>undeclared?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><block s="reifyScript"><script><block s="doSetVar"><l>undeclared?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><l></l></list></block><block s="doApplyExtension"><l>err_reset</l><list></list></block><block s="doIf"><block var="undeclared?"/><script><block s="doApplyExtension"><l>var_declare(scope, name)</l><list><l>global</l><l>_promise*id_</l></list></block><block s="doApplyExtension"><l>var_set(name, val)</l><list><l>_promise*id_</l><block s="reportNewList"><list><l>promise</l></list></block></list></block><block s="doApplyExtension"><l>ide_hide(block)</l><list><block s="reifyReporter"><autolambda><block var="_promise*id_"/></autolambda><list></list></block></list></block></script><list></list></block><block s="doReport"><block var="_promise*id_"/></block></script><list></list></block><list></list></block></list></block><block s="reportListContainsItem"><block s="reportNewList"><list><l>pending</l><l>resolved</l><l>rejected</l></list></block><block s="reportListItem"><l>3</l><block var="promise"/></block></block></list></block></block><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block s="reportJoinWords"><list><l>expecting a promise but getting a </l><block s="reportTypeOf"><block var="promise"/></block></list></block></list></block></script><list></list></block><block s="doReport"><block s="reportVariadicEquals"><list><block s="reportListItem"><l>2</l><block var="promise"/></block><block var="type"/></list></block></block></script><scripts><script x="344.38671875" y="630.8333333333334"><block s="receiveSlotEvent"><l>promise</l><l><option>edited</option></l></block><block s="doSetSlot"><l>promise</l><l>   </l></block></script></scripts></block-definition><block-definition s="await %&apos;promise&apos;" type="reporter" category="control"><header></header><code></code><translations></translations><inputs><input type="%n" readonly="true">   </input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportVariadicAnd"><list><block s="reportIsA"><block var="promise"/><l><option>list</option></l></block><block s="reportVariadicEquals"><list><block s="reportListAttribute"><l><option>length</option></l><block var="promise"/></block><l>3</l></list></block><block s="reportVariadicIsIdentical"><list><block s="reportListItem"><l>1</l><block var="promise"/></block><block s="evaluate"><block s="reifyReporter"><script><block s="doDeclareVariables"><list><l>undeclared?</l></list></block><block s="doApplyExtension"><l>err_try(cmd, catch, err)</l><list><block s="reifyScript"><script><block s="doRun"><block var="_promise*id_"/><list></list></block><block s="doSetVar"><l>undeclared?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><block s="reifyScript"><script><block s="doSetVar"><l>undeclared?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list></list></block><l></l></list></block><block s="doApplyExtension"><l>err_reset</l><list></list></block><block s="doIf"><block var="undeclared?"/><script><block s="doApplyExtension"><l>var_declare(scope, name)</l><list><l>global</l><l>_promise*id_</l></list></block><block s="doApplyExtension"><l>var_set(name, val)</l><list><l>_promise*id_</l><block s="reportNewList"><list><l>promise</l></list></block></list></block><block s="doApplyExtension"><l>ide_hide(block)</l><list><block s="reifyReporter"><autolambda><block var="_promise*id_"/></autolambda><list></list></block></list></block></script><list></list></block><block s="doReport"><block var="_promise*id_"/></block></script><list></list></block><list></list></block></list></block><block s="reportListContainsItem"><block s="reportNewList"><list><l>pending</l><l>resolved</l><l>rejected</l></list></block><block s="reportListItem"><l>3</l><block var="promise"/></block></block></list></block></block><script><block s="doApplyExtension"><l>err_error(msg)</l><list><block s="reportJoinWords"><list><l>expecting a promise but getting a </l><block s="reportTypeOf"><block var="promise"/></block></list></block></list></block></script><list></list></block><block s="doWaitUntil"><block s="reportNot"><block s="reportVariadicEquals"><list><block s="reportListItem"><l>3</l><block var="promise"/></block><l>pending</l></list></block></block></block><block s="doReport"><block s="reportListItem"><l>2</l><block var="promise"/></block></block></script><scripts><script x="446.5498046875" y="600.0166666666668"><block s="receiveSlotEvent"><l>promise</l><l><option>edited</option></l></block><block s="doSetSlot"><l>promise</l><l>   </l></block></script></scripts></block-definition><block-definition s="%&apos;HOF&apos; $arrowRight %&apos;array&apos; %&apos;arrow&apos;" type="reporter" category="JavaScript Utilities &amp; More" space="true"><comment x="0" y="0" w="90" collapsed="false">Returns a HOF function on an array. Choose the HOF, array, and function. For forEach, make sure to put in a run block. </comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1">map<options>map&#xD;flatMap&#xD;&#126;&#xD;filter&#xD;&#126;&#xD;find&#xD;findLast&#xD;findLastIndex&#xD;findIndex&#xD;&#126;&#xD;every&#xD;some&#xD;&#126;&#xD;reduce&#xD;reduceRight&#xD;&#126;&#xD;forEach&#xD;&#126;&#xD;toSorted&#xD;sort&#xD;&#126;&#xD;groupBy</options></input><input type="%obj" initial="1"></input><input type="%code" initial="1"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>arrow</l><l>array</l><l>hof</l></list><l>let arrowResult = eval(arrow);&#xD;let result;&#xD;let hofsReturningArray = ["map","flatMap","filter","toSorted","groupBy"]&#xD;if (!(array[Symbol.iterator])) {&#xD;throw new Error("expecting an array; not getting one",{cause: "user"});&#xD;} else if (!(arrowResult instanceof Function)) {&#xD;throw new Error("expecting a function; not getting one",{cause: "user"});&#xD;} else if (hof === "groupBy"){&#xD; // Create a special case for groupBy - redgeographysnap&#xD;result = [...Map.groupBy(array, arrowResult)];&#xD;} else {&#xD;result = (Array.isArray(array) ? array : [...array])[hof](arrowResult);&#xD;};&#xD;&#xD;if (hofsReturningArray.includes(hof)) {&#xD;return new (array.constructor)(result)&#xD;} else {&#xD;return result === undefined ? "" : result;&#xD;};</l></block><list><block var="arrow"/><block var="array"/><block var="HOF"/></list></block></block></script></block-definition><block-definition s="%&apos;type&apos; %&apos;array&apos; $arrowRight list" type="reporter" category="JavaScript Utilities &amp; More" space="true"><comment x="0" y="0" w="90" collapsed="false">Returns a new Snap! list based on the array input.</comment><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1">shallow<options>shallow&#xD;deep</options></input><input type="%obj" initial="1"></input></inputs><script><block s="doIf"><block s="reportVariadicEquals"><list><block var="type"/><l>shallow</l></list></block><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>array</l></list><l>return new List(array)</l></block><list><block var="array"/></list></block></block></script><list><block s="reportVariadicEquals"><list><block var="type"/><l>deep</l></list></block><script><block s="doDeclareVariables"><list><l>deep map</l><l>list-has-no-arrays</l><l>result list</l></list></block><block s="doSetVar"><l>deep map</l><block s="reifyReporter"><script><block s="doIf"><block s="reportListIsEmpty"><block var="list"/></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script><list></list></block><block s="doDeclareVariables"><list><l>implicit?</l><l>result</l><l>item</l></list></block><block s="doSetVar"><l>implicit?</l><block s="reportListIsEmpty"><block s="reportAttributeOf"><l><option>input names</option></l><block var="fn"/></block></block></block><block s="doSetVar"><l>result</l><block s="reportNewList"><list></list></block></block><block s="doWarp"><script><block s="doFor"><l>i</l><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="list"/></block><script><block s="doSetVar"><l>item</l><block s="reportListItem"><block var="i"/><block var="list"/></block></block><block s="doAddToList"><block s="reportIfElse"><block s="reportIsA"><block var="item"/><l><option>list</option></l></block><block s="evaluate"><block s="reportEnvironment"><l><option>script</option></l></block><list><block var="fn"/><block var="item"/></list></block><block s="evaluate"><block var="fn"/><block s="reportIfElse"><block var="implicit?"/><block s="reportNewList"><list><block var="item"/></list></block><block s="reportNewList"><list><block var="item"/><block var="i"/><block var="list"/></list></block></block></block></block><block var="result"/></block></script></block></script></block><block s="doReport"><block var="result"/></block></script><list><l>fn</l><l>list</l></list></block></block><block s="doSetVar"><l>list-has-no-arrays</l><block s="reifyReporter"><script><block s="doWarp"><script><block s="doForEach"><l>item</l><block s="reportListAttribute"><l><option>flatten</option></l><block var="list"/></block><script><block s="doIf"><block s="evaluate"><block s="reportJSFunction"><list><l>value</l></list><l>return value instanceof Array</l></block><list><block var="item"/></list></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block></script></block></script></block><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><list><l>list</l></list></block></block><block s="doSetVar"><l>result list</l><block s="reportIfElse"><block s="reportIsA"><block var="array"/><l><option>list</option></l></block><block var="array"/><custom-block s="%s %obj $arrowRight list"><l>shallow</l><block var="array"/></custom-block></block></block><block s="doUntil"><block s="evaluate"><block var="list-has-no-arrays"/><list><block var="result list"/></list></block><script><block s="doSetVar"><l>result list</l><block s="evaluate"><block var="deep map"/><list><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="evaluate"><block s="reportJSFunction"><list><l>x</l></list><l>return x instanceof Array</l></block><list><block var="value"/></list></block><custom-block s="%s %obj $arrowRight list"><l>shallow</l><block var="value"/></custom-block><block var="value"/></block></autolambda><list><l>value</l></list></block><block var="result list"/></list></block></block></script></block><block s="doReport"><block var="result list"/></block></script></list></block><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block-definition><block-definition s="user %&apos;type&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1">name<options>name&#xD;id</options></input></inputs><script><block s="doDeclareVariables"><list><l>request</l></list></block><block s="doSetVar"><l>request</l><block s="reportTextSplit"><block s="reportApplyExtension"><l>xhr_request(mth, url, dta, hdrs)</l><list><l>GET</l><l>/users/c</l><l></l><block s="reportNewList"><list></list></block></list></block><l><option>json</option></l></block></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="type"/><l>name</l></list></block><script><block s="doReport"><block s="reportListItem"><l>username</l><block var="request"/></block></block></script><list><block s="reportVariadicEquals"><list><block var="type"/><l>id</l></list></block><script><block s="doReport"><block s="reportListItem"><l>id</l><block var="request"/></block></block></script></list></block><block s="doReport"><l></l></block></script></block-definition><block-definition s="scripts of %&apos;ring&apos;" type="reporter" category="control" space="true"><header></header><code></code><translations></translations><inputs><input type="%repRing" initial="1"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>blk</l></list><l>try {&#xD;let expr = blk.expression;&#xD;let definition = expr.isGlobal ? expr.definition : this.getMethod(expr.semanticSpec);&#xD;return new List(definition.scripts).map((elm) =&gt; elm.reify());&#xD;} catch {&#xD;return new List();&#xD;};</l></block><list><block var="ring"/></list></block></block></script></block-definition><block-definition s="new %&apos;constructor&apos; $arrowRight %&apos;parameters&apos; $nl %&apos;extras&apos;" type="reporter" category="JavaScript Utilities &amp; More" space="true"><comment x="0" y="0" w="166" collapsed="false">Returns a new instance of a class, with all the specified parameters in the class definition. You can also manually set extras&#xD;via their name and value.</comment><header></header><code></code><translations></translations><inputs><input type="%s" initial="1"></input><input type="%mult%s"></input><input type="%group%s%s" expand="$nl&#xD;="></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>constructorName</l><l>params</l><l>others</l></list><l>try {&#xD;let creatorFn = new Function("return " + constructorName);&#xD;let parms = params.itemsArray();&#xD;let creator = creatorFn();&#xD;let result = new creator(...parms);&#xD;others.itemsArray().map((thing) =&gt; thing.itemsArray()).forEach((thing) =&gt; result[thing[0]] = thing[1]);&#xD;return result;&#xD;} catch (err){&#xD;if (err.message.includes("a constructor")) {&#xD;throw new Error ("&apos;" + constructorName + "&apos;" + " isn&apos;t a valid constructor", {cause: "user"});&#xD;} else {&#xD;err.cause = "user";&#xD;throw err;&#xD;};&#xD;}</l></block><list><block var="constructor"/><block var="parameters"/><block var="extras"/></list></block></block></script></block-definition><block-definition s="blockify %&apos;fn&apos;" type="reporter" category="JavaScript Utilities &amp; More" space="true"><comment x="0" y="0" w="90" collapsed="false">Takes a function&apos;s arguments and body and puts it into a new JavaScript Function block</comment><header></header><code></code><translations></translations><inputs><input type="%obj" initial="1"></input></inputs><script><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportEnvironment"><l><option>caller</option></l></block><block s="reifyReporter"><autolambda><custom-block s="blockify %obj"><l/></custom-block></autolambda><list></list></block></list></block><script><block s="doReport"><block s="reifyReporter"><autolambda><block s="reportJSFunction"><list></list><l></l></block></autolambda><list></list></block></block></script><list></list></block><block s="doDeclareVariables"><list><l>params</l><l>body</l></list></block><block s="doSetVar"><l>fn</l><block s="reportJoinWords"><list><block var="fn"/></list></block></block><block s="doSetVar"><l>params</l><block s="reportTextSplit"><block s="reportJoinWords"><block s="reportTextSplit"><block s="reportJoinWords"><block s="reportLetter"><block s="reportNumbers"><block s="reportVariadicSum"><list><block s="reportApplyExtension"><l>txt_indexof(sub, txt)</l><list><l>(</l><block var="fn"/></list></block><l>1</l></list></block><block s="reportDifference"><block s="reportApplyExtension"><l>txt_indexof(sub, txt)</l><list><l>)</l><block var="fn"/></list></block><l>1</l></block></block><block var="fn"/></block></block><l><option>word</option></l></block></block><l>,</l></block></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="params"/><block s="reportNewList"><list><l></l></list></block></list></block><script><block s="doSetVar"><l>params</l><block s="reportNewList"><list></list></block></block></script><list></list></block><block s="doSetVar"><l>body</l><block s="reportLetter"><block s="reportNumbers"><block s="reportVariadicSum"><list><block s="reportApplyExtension"><l>txt_indexof(sub, txt)</l><list><l>{</l><block var="fn"/></list></block><l>1</l></list></block><block s="reportDifference"><block s="reportTextAttribute"><l><option>length</option></l><block var="fn"/></block><l>1</l></block></block><block var="fn"/></block></block><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportListItem"><l>1</l><block var="body"/></block><block s="reportUnicodeAsLetter"><l>10</l></block></list></block><script><block s="doDeleteFromList"><l>1</l><block var="body"/></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block s="reportListItem"><l><option>last</option></l><block var="body"/></block><block s="reportUnicodeAsLetter"><l>10</l></block></list></block><script><block s="doDeleteFromList"><l><option>last</option></l><block var="body"/></block></script><list></list></block><block s="doReport"><block s="reportJoinWords"><list><block s="reifyReporter"><autolambda><block s="reportJSFunction"><list></list><l></l></block></autolambda><list></list></block><block s="reportIfElse"><block s="reportListIsEmpty"><block var="params"/></block><block var="params"/><block s="reportCONS"><block s="reportListAttribute"><l><option>length</option></l><block var="params"/></block><block var="params"/></block></block><block s="reportJoinWords"><block var="body"/></block></list></block></block></script></block-definition><block-definition s="load %&apos;type&apos; from url %&apos;url&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1">costume<options>costume&#xD;sound</options></input><input type="%s" initial="1"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>url</l><l>type</l><l>proc</l></list><l>if (!proc.data) {&#xD;let err = ((x) =&gt; {throw new Error(x, {cause: "user"})});&#xD;proc.data = new (type === "costume" ? Image : type === "sound" ? Audio : err("can&apos;t load data without costume/sound type"))&#xD;proc.data.loaded = false;&#xD;proc.data.crossOrigin = "anonymous";&#xD;proc.data.errored = false;&#xD;proc.data[["onload","onloadeddata"].at(type === "sound")] = () =&gt; {&#xD;proc.data.loaded = true;&#xD;};&#xD;proc.data.onerror = () =&gt; {&#xD;proc.data.errored = true;&#xD;proc.data.loaded = true;&#xD;};&#xD;proc.data.src = url;&#xD;} else if (proc.data.loaded) {&#xD;let tmp = proc.data;&#xD;let errored = proc.data.errored;&#xD;delete proc.data;&#xD;delete tmp.loaded;&#xD;delete tmp.errored;&#xD;return errored? "" : new (type === "costume" ? Costume : Sound)(tmp, type);&#xD;};&#xD;proc.pushContext("doYield");&#xD;proc.pushContext();&#xD;</l></block><list><block var="url"/><block var="type"/></list></block></block></script></block-definition><block-definition s="( %&apos;params&apos; ) =&gt; %&apos;a&apos; %&apos;body&apos; %&apos;b&apos;" type="reporter" category="JavaScript Utilities &amp; More"><comment x="0" y="0" w="90" collapsed="false">Creates a new arrow function, with implicit, parentheses, or curly braces, next to the body.</comment><header></header><code></code><translations></translations><inputs><input type="%mult%s" initial="1"></input><input type="%s" readonly="true" irreplaceable="true" initial="1">(<options>(&#xD;{</options></input><input type="%code" initial="1"></input><input type="%s" readonly="true" irreplaceable="true" initial="1">)<options>§_dynamicMenu</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>parms</l><l>seperatorA</l><l>seperatorB</l><l>body</l></list><l>try {&#xD;return eval("(" + parms.itemsArray() + ") =&gt; " + seperatorA + body + seperatorB);&#xD;} catch (error) {&#xD;error.cause = "user";&#xD;throw error;&#xD;}</l></block><list><block var="params"/><block var="a"/><block var="b"/><block var="body"/></list></block></block></script><scripts><script x="20" y="230.16666666666669"><block s="receiveSlotEvent"><l>b</l><l><option>menu</option></l></block><block s="doReport"><block s="reportNewList"><list><l>)</l><l>}</l></list></block></block></script><script x="20" y="307.1666666666667"><block s="receiveSlotEvent"><l>b</l><l><option>edited</option></l></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="b"/><l></l></list></block><script><block s="doSetSlot"><l>a</l><l></l></block></script><list><block s="reportVariadicEquals"><list><block var="b"/><l>)</l></list></block><script><block s="doSetSlot"><l>a</l><l>(</l></block></script><block s="reportVariadicEquals"><list><block var="b"/><l>}</l></list></block><script><block s="doSetSlot"><l>a</l><l>{</l></block></script></list></block></script><script x="20" y="515.6666666666667"><block s="receiveSlotEvent"><l>a</l><l><option>edited</option></l></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="a"/><l></l></list></block><script><block s="doSetSlot"><l>b</l><l></l></block></script><list><block s="reportVariadicEquals"><list><block var="a"/><l>(</l></list></block><script><block s="doSetSlot"><l>b</l><l>)</l></block></script><block s="reportVariadicEquals"><list><block var="a"/><l>{</l></list></block><script><block s="doSetSlot"><l>b</l><l>}</l></block></script></list></block></script></scripts></block-definition><block-definition s="$blitz flatten %&apos;list&apos; %&apos;lvl&apos; levels" type="reporter" category="lists" space="true"><comment x="0" y="0" w="90" collapsed="false">Atomically flattens the list to the specified level, or rank 1 if &quot;full&quot; is selected</comment><header></header><code></code><translations></translations><inputs><input type="%l" initial="1"></input><input type="%n" initial="1">1<options>full=$_full</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>lst</l><l>lvl</l><l>proc</l></list><l>try{&#xD;if (Array.isArray(lvl) &amp;&amp; lvl[0] === "full") lvl = Infinity;&#xD;proc.assertType(lst, "list");&#xD;proc.assertType(lvl, "number", "");&#xD;let convert = function(x){&#xD;if (x instanceof List){&#xD;return x.itemsArray().map(convert)&#xD;};&#xD;return x;&#xD;};&#xD;let convertBack = function(x){&#xD;if (Array.isArray(x)){&#xD;return new List(x.map(convertBack));&#xD;};&#xD;return x;&#xD;};&#xD;&#xD;let deepConverted = lst.map(convert).itemsArray().slice();&#xD;let flattened = deepConverted.flat(lvl);&#xD;return new List(flattened.map(convertBack));&#xD;} catch (err) {&#xD;err.cause = "user";&#xD;throw err;&#xD;};</l></block><list><block var="list"/><block var="lvl"/></list></block></block></script></block-definition><block-definition s="$𝜋" type="reporter" category="operators" space="true"><comment x="0" y="0" w="188" collapsed="false">Reports Pi&#xD;(Circumfrence/Diameter of any circle)</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><l>3.141592653589793</l></block></script></block-definition><block-definition s="$𝜏" type="reporter" category="operators"><comment x="0" y="0" w="357" collapsed="false">Reports Tau, circumfrence/radius of any circle, or 2𝜋.</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><l>6.283185307179586</l></block></script></block-definition><block-definition s="$𝑒" type="reporter" category="operators"><comment x="0" y="0" w="90" collapsed="false">Reports the constant e, the exp of 1, or&#xD;&#xD;(∞&#xD; 𝚺 1 / 𝒾!&#xD; 𝒾 = 1) + 1</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><l>2.718281828459045</l></block></script></block-definition><block-definition s="$𝑖" type="reporter" category="operators"><comment x="0" y="0" w="90" collapsed="false">Reports the constant i, which is ²√-1, or the imaginary number.</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><l>0+1i</l></block></script><scripts><script x="238.0000000000001" y="86.8"><block s="doDeclareVariables"><list><l>on?</l><l>i</l></list></block><block s="doSetVar"><l>on?</l><block s="reportVariadicNotEquals"><list><block s="reportJoinWords"><list><l>foo</l><block s="reportPower"><l>144</l><l>144</l></block></list></block><l>fooInfinity</l></list></block></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/biginteger.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/schemeNumber.js</l></list></block><block s="doApplyExtension"><l>src_load(url)</l><list><l>libraries/bignums.js</l></list></block><block s="doApplyExtension"><l>big_switch(bool)</l><list><block s="reportBoolean"><l><bool>true</bool></l></block></list></block><block s="doSetVar"><l>i</l><block s="reportMonadic"><l><option>sqrt</option></l><l>-1</l></block></block><block s="doApplyExtension"><l>big_switch(bool)</l><list><block var="on?"/></list></block><block s="doReport"><block var="i"/></block></script></scripts></block-definition><block-definition s="assign %&apos;var&apos; with %&apos;dyadic&apos; %&apos;value&apos;" type="command" category="variables"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" irreplaceable="true" initial="1"><options>§_getVarNamesDict</options></input><input type="%repRing" initial="1"></input><input type="%s" initial="1"></input></inputs><script><block s="doTellTo"><block s="reportEnvironment"><l><option>caller</option></l></block><block s="reifyScript"><script><block s="doSetVar"><l></l><l></l></block></script><list></list></block><list><block var="var"/><block s="evaluate"><block var="dyadic"/><list><block s="reportAttributeOf"><block s="reportTextFunction"><l><option>unselect</option></l><block var="var"/></block><block s="reportEnvironment"><l><option>caller</option></l></block></block><block var="value"/></list></block></list></block></script></block-definition><block-definition s="$𝜑" type="reporter" category="operators"><comment x="0" y="0" w="90" collapsed="false">Reports the golden ratio: Any number from the fibonacci sequence divided by the number before it gets closer and closer to the golden ratio.</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><l>1.618033988749895</l></block></script><scripts><script x="20" y="175.00000000000006"><block s="reifyReporter"><autolambda><block s="reportQuotient"><block s="reportDifference"><block s="reportPower"><custom-block s="$𝜑"></custom-block><block var="n"/></block><block s="reportPower"><block s="reportMonadic"><l><option>neg</option></l><custom-block s="$𝜑"></custom-block></block><block s="reportMonadic"><l><option>neg</option></l><block var="n"/></block></block></block><block s="reportMonadic"><l><option>sqrt</option></l><l>5</l></block></block></autolambda><list><l>n</l></list><comment w="90" collapsed="true">Fibonacci #s</comment></block></script></scripts></block-definition><block-definition s="$𝜓" type="reporter" category="operators"><comment x="0" y="0" w="160" collapsed="false">Reports the reciprocal fibonacci constant, or Psi. If you take n from the fibonacci sequence starting at 1 and sum their reciprocals, it will get closer and closer to this number.</comment><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><l>3.359885666243178</l></block></script></block-definition><block-definition s="Γ %&apos;n&apos;" type="reporter" category="operators" space="true"><header></header><code></code><translations></translations><inputs><input type="%n" initial="1"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="n"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reportEnvironment"><l><option>script</option></l></block><block var="n"/></block></block></script><list><block s="reportVariadicLessThanOrEquals"><list><block var="n"/><l>0</l></list></block><script><block s="doReport"><l>NaN</l></block></script><block s="reportVariadicEquals"><list><block s="reportModulus"><block var="n"/><l>1</l></block><l>0</l></list></block><script><block s="doReport"><block s="evaluate"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportVariadicEquals"><list><l></l><l>0</l></list></block><l>1</l><block s="reportVariadicProduct"><list><l></l><block s="evaluate"><block s="reportEnvironment"><l><option>script</option></l></block><list><block s="reportDifference"><l></l><l>1</l></block></list></block></list></block></block></autolambda><list></list></block><list><block s="reportDifference"><block var="n"/><l>1</l></block></list></block></block></script></list></block><block s="doDeclareVariables"><list><l>coefficients</l><l>pi</l><l>x</l><l>y</l></list></block><block s="doSetVar"><l>pi</l><l>3.141592653589793</l></block><block s="doSetVar"><l>coefficients</l><block s="reportNewList"><list><l>0.9999999999998099</l><l>676.5203681218851</l><l>-1259.1392167224028</l><l>771.3234287776531</l><l>-176.6150291621406</l><l>12.507343278686905</l><l>-0.13857109526572012</l><l>0.000009984369578019572</l><l>1.5056327351493116e-7</l></list></block></block><block s="doChangeVar"><l>n</l><l>-1</l></block><block s="doSetVar"><l>x</l><block s="reportListItem"><l>1</l><block var="coefficients"/></block></block><block s="doSetVar"><l>y</l><block s="reportVariadicSum"><list><block var="n"/><l>7.5</l></list></block></block><block s="doWarp"><script><block s="doFor"><l>i</l><l>2</l><l>9</l><script><block s="doChangeVar"><l>x</l><block s="reportQuotient"><block s="reportListItem"><block var="i"/><block var="coefficients"/></block><block s="reportVariadicSum"><list><block var="n"/><block s="reportDifference"><block var="i"/><l>1</l></block></list></block></block></block></script></block></script></block><block s="doReport"><block s="reportVariadicProduct"><list><block s="reportMonadic"><l><option>sqrt</option></l><block s="reportVariadicProduct"><list><l>2</l><block var="pi"/></list></block></block><block s="reportPower"><block var="y"/><block s="reportVariadicSum"><list><block var="n"/><l>0.5</l></list></block></block><block s="reportMonadic"><l><option>e^</option></l><block s="reportMonadic"><l><option>neg</option></l><block var="y"/></block></block><block var="x"/></list></block></block></script></block-definition><block-definition s="%&apos;n&apos; !" type="reporter" category="operators" space="true"><header></header><code></code><translations></translations><inputs><input type="%n" initial="1"></input></inputs><script><block s="doReport"><custom-block s="Γ %n"><block s="reportVariadicSum"><list><block var="n"/><l>1</l></list></block></custom-block></block></script></block-definition><block-definition s="T %&apos;n&apos;" type="reporter" category="operators"><header></header><code></code><translations></translations><inputs><input type="%n" initial="1"></input></inputs><script><block s="doIf"><block s="reportIsA"><block var="n"/><l><option>list</option></l></block><script><block s="doReport"><block s="reportMap"><block s="reportEnvironment"><l><option>script</option></l></block><block var="n"/></block></block></script><list><block s="reportVariadicLessThan"><list><block var="n"/><l>0</l></list></block><script><block s="doReport"><l>NaN</l></block></script></list></block><block s="doReport"><block s="reportQuotient"><block s="reportVariadicProduct"><list><block var="n"/><block s="reportVariadicSum"><list><block var="n"/><l>1</l></list></block></list></block><l>2</l></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="false" penlog="false" volume="100" pan="0" lines="round" ternary="true" hyperops="true" codify="false" inheritance="true" sublistIDs="false" id="8806"><pentrails>data:image/png;base64,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</pentrails><costumes><list struct="atomic" id="8807"></list></costumes><sounds><list struct="atomic" id="8808"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="TurtleBlocks! More..." idx="1" x="-8" y="-4" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="80,80,80,1" pen="tip" id="8813"><costumes><list struct="atomic" id="8814"></list></costumes><sounds><list struct="atomic" id="8815"></list></sounds><blocks></blocks><variables></variables><scripts><comment x="20" y="20" w="141.66666666666669" collapsed="false">TurtleBlocks More...&#xD;(Not really TurtleBlocks, put here for convenience)</comment><script x="20" y="98"><custom-block s="%s at %n Hz for %n seconds"><l>hum</l><l>44100</l><l>1</l></custom-block></script><script x="20" y="132.00000000000006"><custom-block s="user %s"><l>name</l></custom-block></script><script x="20" y="166"><custom-block s="load %s from url %s"><l>costume</l><l></l></custom-block></script><script x="20" y="200"><custom-block s="new counter"></custom-block></script><script x="20" y="229.83333333333348"><custom-block s="%s counter %n"><l>get</l><l>   </l></custom-block></script><script x="20" y="263.8333333333335"><custom-block s="%s counter %n %n"><l>set</l><l>3</l><l>   </l></custom-block></script><script x="20" y="297.8333333333334"><custom-block s="assign %s with %repRing %s"><l></l><block s="reifyReporter"><script></script><list></list></block><l></l></custom-block></script><script x="20" y="338.8333333333334"><custom-block s="tree %n %mult%s"><l>4</l><list></list></custom-block></script><script x="20" y="371.83333333333337"><custom-block s="%s of %l"><l><option>Σ</option></l><l/></custom-block></script><script x="20" y="405.8333333333335"><custom-block s="%repRing with input names %br %mult%s"><block s="reifyReporter"><script></script><list></list></block><list></list></custom-block></script><script x="20" y="452.83333333333326"><custom-block s="queue %mult%s"><list><l></l></list></custom-block></script><script x="20" y="485.83333333333326"><custom-block s="queue? %s"><l></l></custom-block></script><script x="20" y="518.8333333333331"><custom-block s="enqueue %s $arrowRight %l"><l></l><l/></custom-block></script><script x="20" y="557.833333333333"><custom-block s="dequeue %l"><l/></custom-block></script><script x="20" y="587.8333333333331"><custom-block s="peek %l"><l/></custom-block></script><script x="20" y="617.8333333333334"><custom-block s="is queue %l empty?"><l/></custom-block></script><comment x="20" y="647.8333333333334" w="153.33333333333334" collapsed="false">Planned for TurtleBlocks, not implemented yet</comment><script x="20" y="713.8333333333335"><custom-block s="is %clr a %s ?"><color>145,26,68,1</color><l>red</l></custom-block></script><comment x="20" y="747.8333333333335" w="90" collapsed="false">Promises V1 (Old)</comment><script x="20" y="801.8333333333334"><custom-block s="promise %repRing %group%repRing"><block s="reifyReporter"><script></script><list></list></block><list></list></custom-block></script><script x="20" y="836.8333333333336"><custom-block s="is %n %s ?"><l>   </l><l>pending</l></custom-block></script><script x="20" y="870.8333333333336"><custom-block s="await %n"><l>   </l></custom-block></script><comment x="20" y="904.8333333333337" w="90" collapsed="false">Comment blocks</comment><script x="20" y="958.8333333333337"><custom-block s="$speechBubble %mlt"><l>add your&#xD;comment here!</l></custom-block></script><script x="20" y="1009.8333333333335"><custom-block s="$speechBubble %mlt %cs"><l>add your&#xD;comment here!</l><script></script></custom-block></script><script x="20" y="1079.8333333333333"><custom-block s="$speechBubble %mlt ​"><l>add your&#xD;comment here!</l></custom-block></script><script x="20" y="1142.8333333333335"><custom-block s="$speechBubble %mlt %n"><l>add your&#xD;comment here!</l><l>   </l></custom-block></script><script x="20" y="1187.8333333333335"><custom-block s="$speechBubble %mlt %b"><l>add your&#xD;comment here!</l><l/></custom-block></script><comment x="20" y="1232.8333333333335" w="90" collapsed="false">JS stuff</comment><script x="20" y="1286.8333333333337"><custom-block s="JavaScript definition %s"><l></l></custom-block></script><script x="20" y="1319.8333333333337"><custom-block s="%s uses %code ?"><l></l><l>this</l></custom-block></script><script x="20" y="1353.8333333333337"><custom-block s="run function ( %mult%s ) { %code } $arrowRight %mult%s"><list></list><l></l><list></list></custom-block></script><script x="20" y="1392.8333333333337"><custom-block s="call function ( %mult%s ) { %code } $arrowRight %mult%s"><list></list><l></l><list></list></custom-block></script><script x="20" y="1425.8333333333337"><custom-block s="return %code"><l></l></custom-block></script><script x="20" y="1458.8333333333337"><custom-block s="object %s %obj"><l>entries</l><l/></custom-block></script><script x="20" y="1492.8333333333337"><custom-block s="%obj . %mult%s"><l/><list><l></l></list></custom-block></script><script x="20" y="1525.8333333333337"><custom-block s="for %upvar in %obj %ca"><l>property</l><l/><script></script></custom-block></script><script x="20" y="1588.6666666666667"><custom-block s="typeof %s"><l></l></custom-block></script><script x="20" y="1621.6666666666672"><custom-block s="%s instanceof %s"><l></l><l></l></custom-block></script><script x="20" y="1654.6666666666667"><custom-block s="switch to %s mode"><l>user</l></custom-block></script><script x="20" y="1694.6666666666667"><custom-block s="array %mult%s"><list></list></custom-block></script><script x="20" y="1725.6666666666667"><custom-block s="map %group%s%s"><list></list></custom-block></script><script x="20" y="1756.6666666666667"><custom-block s="set %mult%s"><list></list></custom-block></script><script x="20" y="1787.6666666666667"><custom-block s="%s $arrowRight %obj %code"><l>map</l><l/><l></l></custom-block></script><script x="20" y="1821.6666666666667"><custom-block s="%s %obj $arrowRight list"><l>shallow</l><l/></custom-block></script><script x="20" y="1855.6666666666667"><custom-block s="new %s $arrowRight %mult%s %br %group%s%s"><l></l><list></list><list></list></custom-block></script><script x="20" y="1900.6666666666667"><custom-block s="return %code"><l></l></custom-block></script><script x="20" y="1933.6666666666667"><custom-block s="blockify %obj"><l/></custom-block></script><script x="20" y="1965.6666666666665"><custom-block s="( %mult%s ) =&gt; %s %code %s"><list><l></l></list><l>(</l><l></l><l>)</l></custom-block></script></scripts></sprite></sprites></stage><variables><variable name="_promise*id_" hidden="true"><list struct="atomic" id="8975">promise</list></variable></variables></scene></scenes></project><media name="TurtleBlocks!" app="Snap! 11.0.8, https://snap.berkeley.edu" version="2"></media></snapdata>