<snapdata remixID="9870324"><project name="Devouse speed calculater" app="Snap! 6, https://snap.berkeley.edu" version="1"><notes>Please see inside.&#xD;This project will calculate the speed of your device.</notes><thumbnail>data:image/png;base64,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</thumbnail><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="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" scheduled="false" id="1"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAOhUlEQVR4Xu3VwQkAAAjEMN1/abewn7jAQRC64wgQIECAAIF3gX1fNEiAAAECBAiMAHsCAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQIHLFxAWmhEwHPAAAAAElFTkSuQmCC</pentrails><costumes><list struct="atomic" id="2"></list></costumes><sounds><list struct="atomic" id="3"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites><watcher scope="Sprite" s="xPosition" style="normal" x="10" y="10" color="74,108,212"/><sprite name="Sprite" idx="1" x="178" y="83" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" costume="0" color="80,80,80,1" pen="tip" id="9"><costumes><list struct="atomic" id="10"></list></costumes><sounds><list struct="atomic" id="11"></list></sounds><blocks></blocks><variables></variables><scripts><script x="128" y="268"><block s="receiveGo"></block><custom-block s="delete var %mult%txt"><list><l>computer speed</l></list></custom-block><block s="doGotoObject"><l><option>random position</option></l></block><block s="doSayFor"><l>See inside to see how this works</l><l>2</l></block><block s="doSayFor"><l>I will now calculate your computer speed</l><l>2</l></block><block s="doForever"><script><block s="bubble"><custom-block s="computer speed | recalculate? %b"><l><bool>false</bool></l></custom-block></block></script></block></script></scripts></sprite></sprites></stage><hidden></hidden><headers></headers><code></code><blocks><block-definition s="alert %&apos;Text&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%txt">Hello world!</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>a</l></list><l>alert(a)</l></block><list><block var="Text"/></list></block></script></block-definition><block-definition s="ask %&apos;Text&apos;" type="predicate" category="other"><header></header><code></code><translations></translations><inputs><input type="%txt">Are you sure?</input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>a</l></list><l>return window.confirm(a);</l></block><list><block var="Text"/></list></block></block></script></block-definition><block-definition s="get text %&apos;text&apos;" type="reporter" category="other"><header></header><code></code><translations></translations><inputs><input type="%txt">What is your name?</input></inputs><script><block s="doDeclareVariables"><list><l>product</l></list></block><block s="doSetVar"><l>product</l><block s="evaluate"><block s="reportJSFunction"><list><l>a</l></list><l>return window.prompt("Project asking for input\n" + a);</l></block><list><block var="text"/></list></block></block><block s="doReport"><block s="reportIfElse"><block s="reportEquals"><block var="product"/><l></l></block><l>Error: no text was given</l><block var="product"/></block></block></script></block-definition><block-definition s="ask %&apos;text&apos; and with out put %&apos;answer&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%txt">What&apos;s your name?</input><input type="%upvar"></input></inputs><script><block s="doSetVar"><l>answer</l><custom-block s="get text %txt"><block var="text"/></custom-block></block></script></block-definition><block-definition s="Alert date" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>alert (Date())</l></block><list></list></block></script><scripts><script x="106.744140625" y="50"><custom-block s="Alert date"></custom-block></script></scripts></block-definition><block-definition s="Print" type="command" category="other"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><l>window.print()</l></block><list></list></block></script></block-definition><block-definition s="open website %&apos;text&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%txt">https://snap.berkeley.edu</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>a</l></list><l> window.open(a)</l></block><list><block var="text"/></list></block></script></block-definition><block-definition s="Open %&apos;text&apos; %&apos;c&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%code">Some HTML.</input><input type="%s">Tab Name</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>b</l><l>c</l></list><l>var myWindow;&#xD;&#xD; myWindow = window.open("", "myWindow", "width=200,height=100");&#xD;  myWindow.document.write("&lt;title&gt;" + c + "&lt;/title&gt;" + b + "");</l></block><list><block var="text"/><block var="c"/></list></block></script><scripts><script x="86.45703125" y="235.50000000000006"><block var="a"/></script><script x="51.8984375" y="247.83333333333331"><block var="text1"/></script></scripts></block-definition><block-definition s="notifcation %&apos;Text&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%txt">Hello world!</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>a</l></list><l>&#xD;  if (!("Notification" in window)) {&#xD;    alert("This browser does not support desktop notification");&#xD;  }&#xD;&#xD;  else if (Notification.permission === "granted") {&#xD;    // If it&apos;s okay let&apos;s create a notification&#xD;    var notification = new Notification(a);&#xD;  }&#xD;&#xD; &#xD;  else if (Notification.permission !== "denied") {&#xD;    Notification.requestPermission().then(function (permission) {&#xD;     &#xD;      if (permission === "granted") {&#xD;        var notification = new Notification(a);&#xD;      }&#xD;    });&#xD;  }&#xD;&#xD;  </l></block><list><block var="Text"/></list></block></script></block-definition><block-definition s="username" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list></list><l>var ide = this.parentThatIsA(IDE_Morph);&#xD;return ide.cloud.username;</l></block><list></list></block></block></script></block-definition><block-definition s="// %&apos;text&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s">Comment</input></inputs></block-definition><block-definition s="// %&apos;text&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%mlt">Multi Line Comment</input></inputs></block-definition><block-definition s="Cursor %&apos;dropdown&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">pointer<options>default&#xD;context-menu&#xD;pointer&#xD;alias&#xD;all-scroll&#xD;cell&#xD;crosshair&#xD;grab&#xD;grabbing&#xD;help&#xD;not-allowed&#xD;progress&#xD;text&#xD;wait&#xD;copy&#xD;zoom-in&#xD;zoom-out</options></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list></list><block s="reportJoinWords"><list><l>document.head.innerHTML+=&apos;&lt;style&gt;body{cursor:</l><block var="dropdown"/><l>;}&lt;/style&gt;&apos;;</l></list></block></block><list><block var="dropdown"/></list></block></script></block-definition><block-definition s="computer speed | recalculate? %&apos;recalculate&apos;" type="reporter" category="control"><header></header><code></code><translations></translations><inputs><input type="%b">false</input></inputs><script><block s="doIf"><block s="reportOr"><block s="reportNot"><custom-block s="does var %s exist?"><l>computer speed</l></custom-block></block><block var="recalculate"/></block><script><block s="doIf"><block s="reportAnd"><block var="recalculate"/><custom-block s="does var %s exist?"><l>computer speed</l></custom-block></block><script><custom-block s="delete var %mult%txt"><list><l>computer speed</l></list></custom-block></script></block><block s="doDeclareVariables"><list><l>x</l><l>y</l><l>speed</l></list></block><block s="doSetVar"><l>x</l><block s="xPosition"></block></block><block s="doSetVar"><l>y</l><block s="yPosition"></block></block><block s="gotoXY"><l>0</l><l>0</l></block><block s="doWarp"><script><block s="doRepeat"><l>1000000</l><script><block s="changeXPosition"><l>0.0001</l></block></script></block></script></block><block s="doSetVar"><l>speed</l><block s="reportProduct"><block s="reportRound"><block s="xPosition"></block></block><l>1000</l></block></block><custom-block s="create %s var %mult%txt"><l>global</l><list><l>computer speed</l></list></custom-block><custom-block s="set var %s to %s"><l>computer speed</l><block var="speed"/></custom-block><block s="gotoXY"><block var="x"/><block var="y"/></block></script></block><block s="doReport"><custom-block s="var %s"><l>computer speed</l></custom-block></block></script></block-definition><block-definition s="create %&apos;scope&apos; var %&apos;names&apos;" type="command" category="variables"><comment x="0" y="0" w="146" collapsed="false">This block creates  new variables on the selected scope: global (for all sprites), sprite (for this sprite only) or script (only for that blocks stack) with the names given (in &apos;names&apos; list).&#xD;&#xD;If there is already a variable with that name in that scope, it does nothing: no errors and no overwrites.</comment><header></header><code></code><translations>pt:cria as variáveis _ _&#xD;ca:crea les _ variables _&#xD;es:crear las _ variables _&#xD;de:erstellen _ var _&#xD;</translations><inputs><input type="%s" readonly="true">global<options>global&#xD;sprite&#xD;script</options></input><input type="%mult%txt"></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="scope"/><l>script</l></block><script><block s="doForEach"><l>each item</l><block var="names"/><script><block s="doRun"><block s="reportJSFunction"><list><l>varName</l><l>proc</l></list><l>if ((typeof varName) != "string" || varName === "") {&#xD;    throw new Error("name isn&apos;t a string: " + varName);&#xD;}&#xD;if (!proc.homeContext.variables.vars[varName]) proc.homeContext.variables.addVar(varName);</l></block><list><block var="each item"/></list></block></script></block></script><script><block s="doDeclareVariables"><list><l>global</l></list></block><block s="doIfElse"><block s="reportEquals"><block var="scope"/><l>sprite</l></block><script><block s="doSetVar"><l>global</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><script><block s="doSetVar"><l>global</l><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block><block s="doForEach"><l>each item</l><block var="names"/><script><block s="doRun"><block s="reportJSFunction"><list><l>varName</l><l>global</l><l>proc</l></list><l>if ((typeof varName) != "string" || varName === "") {&#xD;    throw new Error("name isn&apos;t a string: " + varName);&#xD;}&#xD;if (global &amp;&amp; !proc.homeContext.variables.parentFrame.parentFrame.vars[varName]) this.addVariable(varName, true);&#xD;if (!global &amp;&amp; !proc.homeContext.variables.parentFrame.vars[varName]) this.addVariable(varName, false);</l></block><list><block var="each item"/><block var="global"/></list></block></script></block><block s="doRun"><block s="reportJSFunction"><list></list><l>var ide = this.parentThatIsA(IDE_Morph);&#xD;ide.flushBlocksCache(&apos;variables&apos;); // b/c of inheritance&#xD;ide.refreshPalette();</l></block><list></list></block></script></block></script></block-definition><block-definition s="delete var %&apos;names&apos;" type="command" category="variables"><comment x="0" y="0" w="217" collapsed="false">This block deletes all the variables with the names given (inside input list).&#xD;&#xD;Each name will make only one variable deletion, and this will be the variable found following the scope order: &apos;script&apos; -&gt; &apos;sprite&apos; -&gt; &apos;global&apos;.&#xD;&#xD;If we have a &quot;testing&quot; sprite variable and also a &quot;testing&quot; global one, deleting &quot;testing&quot; will delete only the sprite one (Yes! we can also do &quot;delete var (testing, testing)&quot; to delete both.&#xD;&#xD;If one variable does not exists (in any scope) an error happens, stopping block action in that point. You can check it before with the &quot;does var (name) exists?&quot;block. </comment><header></header><code></code><translations>pt:remove as variáveis _&#xD;ca:esborra les variables _&#xD;es:borrar variables _&#xD;de:löschen var _&#xD;</translations><inputs><input type="%mult%txt"></input></inputs><script><block s="doForEach"><l>each item</l><block var="names"/><script><block s="doRun"><block s="reportJSFunction"><list><l>varName</l><l>proc</l></list><l>if ((typeof varName) != "string" || varName === "") {&#xD;    throw new Error("name isn&apos;t a string: " + varName);&#xD;}&#xD;if (typeof proc.homeContext.variables.vars[varName] !== &apos;undefined&apos;) {&#xD;    delete proc.homeContext.variables.vars[varName];&#xD;} else if (this.deletableVariableNames().indexOf(varName) != -1) {&#xD;    this.deleteVariable(varName);&#xD;} else {&#xD;    throw new Error("variable doesn&apos;t exist: " + varName);&#xD;}</l></block><list><block var="each item"/></list></block></script></block><block s="doRun"><block s="reportJSFunction"><list></list><l>var ide = this.parentThatIsA(IDE_Morph);&#xD;ide.flushBlocksCache(&apos;variables&apos;); // b/c of inheritance&#xD;ide.refreshPalette();</l></block><list></list></block></script></block-definition><block-definition s="set var %&apos;name&apos; to %&apos;value&apos;" type="command" category="variables"><comment x="0" y="0" w="240.4931640625" collapsed="false">This block sets the given value (last input) to the variable named with the name givent (var input).&#xD;&#xD;It looks for that variable following the scope order &apos;script&apos; -&gt; &apos;sprite&apos; -&gt; &apos;global&apos; (the first match it finds).&#xD;&#xD;If that variable does not exist (in any scope) an error happens, stopping their script. You can check it before using the &quot;does var (name) exists?&quot; block. </comment><header></header><code></code><translations>ca:assigna a _ el valor _&#xD;es:asignar a _ el valor _&#xD;pt:altera _ para _&#xD;de:setze var _ auf _&#xD;</translations><inputs><input type="%s"><options>§_getVarNamesDict</options></input><input type="%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>varName</l><l>value</l><l>proc</l></list><l>if ((typeof varName) != "string") {&#xD;    throw new Error("name isn&apos;t a string: " + varName);&#xD;}&#xD;proc.homeContext.variables.setVar(varName, value);</l></block><list><block var="name"/><block var="value"/></list></block></script></block-definition><block-definition s="var %&apos;name&apos;" type="reporter" category="variables"><comment w="178.00000000000003" collapsed="false">This block reports the value of the variable with the name given.&#xD;&#xD;It looks for that variable following the scope order &apos;script&apos; -&gt; &apos;sprite&apos; -&gt; &apos;global&apos; (the first match it finds).&#xD;&#xD;If that variable does not exist (in any scope) an error happens, stopping their script. You can check it before using the &quot;does var (name) exists?&quot; block. </comment><header></header><code></code><translations>pt:o valor de _&#xD;</translations><inputs><input type="%s"><options>§_getVarNamesDict</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>varName</l><l>proc</l></list><l>if ((typeof varName) != "string") {&#xD;    throw new Error("name isn&apos;t a string: " + varName);&#xD;}&#xD;return proc.homeContext.variables.getVar(varName);</l></block><list><block var="name"/></list></block></block></script></block-definition><block-definition s="does var %&apos;name&apos; exist?" type="predicate" category="variables"><comment x="0" y="0" w="146" collapsed="false">This block reports &quot;true&quot; if there is a variable with this given name (input slot) in that context.&#xD;&#xD;It can be a global, sprite or script variable.&#xD;&#xD;Otherwise it reports &quot;false&quot;.</comment><header></header><code></code><translations>pt:a variável _ existe&#xD;ca:existeix la variable _ ?&#xD;es:existe la variable _ ?&#xD;de:existiert var _ ?&#xD;</translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>varName</l><l>proc</l></list><l>if ((typeof varName) != "string" || varName === "") {&#xD;    throw new Error("name isn&apos;t a string: " + varName);&#xD;}&#xD;return proc.homeContext.variables.silentFind(varName)? true:false;</l></block><list><block var="name"/></list></block></block></script></block-definition><block-definition s="show var %&apos;name&apos;" type="command" category="variables"><comment x="0" y="0" w="181" collapsed="false">This block turns on (show) the watcher view on stage (if it was not already activated) of the variable with the given name (slot input).&#xD;&#xD;It can only access to the closest variable scope (if there different variables with the same name in different scopes) following the order &apos;script&apos; -&gt; &apos;sprite&apos; -&gt; &apos;global&apos;.&#xD;&#xD;No errors if that variable does not exist.</comment><header></header><code></code><translations>ca:mostra la variable _&#xD;es:mostrar variable _&#xD;pt:mostra a variável _&#xD;de:zeige var _&#xD;</translations><inputs><input type="%s"><options>§_getVarNamesDict</options></input></inputs><script><block s="doIf"><custom-block s="does var %s exist?"><block var="name"/></custom-block><script><block s="doRun"><block s="reportJSFunction"><list><l>varName</l><l>proc</l></list><l>    var varFrame = proc.homeContext.variables,&#xD;        stage,&#xD;        watcher,&#xD;        target,&#xD;        label,&#xD;        others,&#xD;        isGlobal,&#xD;        name = varName;&#xD;&#xD;    if (name instanceof Context) {&#xD;        if (name.expression.selector === &apos;reportGetVar&apos;) {&#xD;            name = name.expression.blockSpec;&#xD;        } else {&#xD;            proc.doChangePrimitiveVisibility(name.expression, false);&#xD;            return;&#xD;        }&#xD;    }&#xD;    if (proc.homeContext.receiver) {&#xD;        stage = proc.homeContext.receiver.parentThatIsA(StageMorph);&#xD;        if (stage) {&#xD;            target = varFrame.silentFind(name);&#xD;            if (!target) {return; }&#xD;            // first try to find an existing (hidden) watcher&#xD;            watcher = detect(&#xD;                stage.children,&#xD;                morph =&gt; morph instanceof WatcherMorph &amp;&amp;&#xD;                    morph.target === target &amp;&amp;&#xD;                        morph.getter === name&#xD;            );&#xD;            if (watcher !== null) {&#xD;                watcher.show();&#xD;                watcher.fixLayout(); // re-hide hidden parts&#xD;                return;&#xD;            }&#xD;            // if no watcher exists, create a new one&#xD;            isGlobal = contains(&#xD;                proc.homeContext.receiver.globalVariables().names(),&#xD;                varName&#xD;            );&#xD;            if (isGlobal || target.owner) {&#xD;                label = name;&#xD;            } else {&#xD;                label = name + &apos; &apos; + localize(&apos;(temporary)&apos;);&#xD;            }&#xD;            watcher = new WatcherMorph(&#xD;                label,&#xD;                SpriteMorph.prototype.blockColor.variables,&#xD;                target,&#xD;                name&#xD;            );&#xD;            watcher.setPosition(stage.position().add(10));&#xD;            others = stage.watchers(watcher.left());&#xD;            if (others.length &gt; 0) {&#xD;                watcher.setTop(others[others.length - 1].bottom());&#xD;            }&#xD;            stage.add(watcher);&#xD;            watcher.fixLayout();&#xD;        }&#xD;    }</l></block><list><block var="name"/></list></block></script></block></script></block-definition><block-definition s="hide var %&apos;name&apos;" type="command" category="variables"><comment x="0" y="0" w="181" collapsed="false">This block turns off (hide) the watcher view on stage (if it was not already activated) of the variable with the given name (slot input).&#xD;&#xD;It can only access to the closest variable scope (if there different variables with the same name in different scopes) following the order &apos;script&apos; -&gt; &apos;sprite&apos; -&gt; &apos;global&apos;.&#xD;&#xD;No errors if that variable does not exist.</comment><header></header><code></code><translations>ca:amaga la variable _&#xD;es:esconder variable _&#xD;pt:esconde a variável _&#xD;de:verstecke var _&#xD;</translations><inputs><input type="%s"><options>§_getVarNamesDict</options></input></inputs><script><block s="doIf"><custom-block s="does var %s exist?"><block var="name"/></custom-block><script><block s="doRun"><block s="reportJSFunction"><list><l>varName</l><l>proc</l></list><l>    // to delete all temporary watchers, use the primitive "hide" with no inputs&#xD;    var varFrame = proc.homeContext.variables,&#xD;        stage,&#xD;        watcher,&#xD;        target,&#xD;        name = varName;&#xD;&#xD;    if (name instanceof Context) {&#xD;        if (name.expression.selector === &apos;reportGetVar&apos;) {&#xD;            name = name.expression.blockSpec;&#xD;        } else {&#xD;            proc.doChangePrimitiveVisibility(name.expression, true);&#xD;            return;&#xD;        }&#xD;    }&#xD;    if (!name) {&#xD;        proc.doRemoveTemporaries();&#xD;        return;&#xD;    }&#xD;    if (proc.homeContext.receiver) {&#xD;        stage = proc.homeContext.receiver.parentThatIsA(StageMorph);&#xD;        if (stage) {&#xD;            target = varFrame.find(name);&#xD;            watcher = detect(&#xD;                stage.children,&#xD;                morph =&gt; morph instanceof WatcherMorph &amp;&amp;&#xD;                    morph.target === target &amp;&amp;&#xD;                        morph.getter === name&#xD;            );&#xD;            if (watcher !== null) {&#xD;                if (watcher.isTemporary()) {&#xD;                    watcher.destroy();&#xD;                } else {&#xD;                    watcher.hide();&#xD;                }&#xD;            }&#xD;        }&#xD;    }&#xD;</l></block><list><block var="name"/></list></block></script></block></script></block-definition><block-definition s="the %&apos;block&apos; block" type="reporter" category="control"><header></header><code></code><translations></translations><inputs><input type="%repRing"></input></inputs></block-definition></blocks><variables><variable name="computer speed"><l>100000</l></variable></variables></project><media name="Devouse speed calculater" app="Snap! 6, https://snap.berkeley.edu" version="1"></media></snapdata>