<snapdata remixID="11085306"><project name="Lab 4.3 Starter" app="Snap! 7, https://snap.berkeley.edu" version="2"><notes></notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAAAAXNSR0IArs4c6QAAFFtJREFUeF7tnWdwFdcZhj9RVBBCdGSKBKIYkKk23VRjjGmODdgChCdkPCa/4sQzCT8y4yTjXx7icUz+2YnxENxwbByaTDXGdNN7EaKYLpookhAYMs/xnHvv6gJakFa6e+93Zu6onT179t1X3573K2fj7t69e1e0KQLVhECcErCakNfTGgSUgEqEakXgngTcvn27ZGRkSM2aNat0ciUlJXLlyhV5/PHHq/S8erLqQyCMgGvWrDHkq67GkvT06dPSv3//6pqCnrcKEXAQcNu2bdKwYUNz+k2bNsnGjRulb9++0rJlSzl8+LDs3LkzMLXExESZMGGCzJ071/S5evWq7Nu3T954440KTx8r2K5dO6lbt26Fx9IBIhsBBwEvXLhgiESbNWuWdO/eXfLy8qRPnz6ybNky6dixo6SlpcnmzZslOztbZs6caR6XWK3JkyfLJ598IpMmTZL4+PgKXzVz6d27d4XH0QEiGwEHAS9fviyXLl0KWEDI1rZtW5k3b540b95cGjdubKzSqVOnTL9x48bJwoULpUmTJoYsEHLGjBlSXFxc4as+e/asDBgwoMLj6ACRjYCDgJDq4sWLEhcXJzxi69SpU2WzP3fmtNROSDTWlPOfO3dOCVhl6FffiRwEhHx8aHlbVkvjlX+RlPg42ZvaXzLatq90VXzm1ElJKdgtTW6dkbQxb0pB+3EBJM6fPy9PP/109SGjZ64SBMLWgJaA27/5UEZfmidbev5ZMvuONJO5dbNENv93tsidnx88ubga0jf7dblZWipFRUWmb/369aVWrVqB4xAa/IzVbbZ0hrQePEGOpo92EHDgwIFVAoKepPoQCCNgQUGBmc3OBf+SjNs/Sdrkd+T27duGLKdy50rj3PckLq78CTfK/pMc6zBcGjRoYDpfu3ZNUlNTzfeFhYWSlJRkfH6rVq2SgVkZ0jvprOS3GmUewTREiBKwfJz93sNBQMgXJOC/ZVBGghR2yxHECYLk2opPpc7i9wLX3GjSDKmRnCo16zWUm8f2yuWv/+n4W367YQG3Duq6Xr165u9Hjx41JOzSpYvMmTPHuHFGJBySvBa/WFpLwEGDBvkdX51/OQg4CMi6K5SAQzOT5XrPV+XmzZuSkJAgN1Z9HkZAxk96YoAU7Vojl774u4OAR9oOlRMnTkiHDh2MFU1JSQkQEMuIyPnss8+Mgh6ZlCeHmz/nIODgwYP1BkY5AmEERH3Sdi/6SIa0SZZrPaYaorCWK149z0HAun1HS9HudZI6Yqpcnh+0fhyPdczLHGJcNzSsqCXgsWPHpFmzZobYW7duNS6eUcn5cjDt2QDcrA2VgFHOvrLJCJAvSMDZMqRNHUNA224d2SHNrx53hcqt9C5yNrl5QHj8/PPPxoraR/BPP/1k1oes9SDjmJRjcqDZcAcBhwwZ4upc2sm/CDgsIM5fPrQ9iz82BLzaPSdwdSWn8+XAnJlyp7SkvCe79Jv2phQ2CYbTsKA2QoIFZB1oGwQcl3pC9jUZFvgdFnPo0KH+RVZn7gqBMAKeOXPGHLh3yccyuHUdWV+ru3kEt2nTRm6umy8pISKk/tjpcvv8CUnI7CpFu9dK8Z51gZPyCD6YMdBYNxqWLjk52XwPAfnY1rRpU/lVg5Oyt3GQcChkJaCre+jrTg4CQr6yBESEfP/99ybsVrDoozARAvGSsvo5BAiIQMAD6U8b9UxD3NjICuQ7fjz4KCeU91Kj07KnUfCRCwGHDQtaRF+jrJO/LwIOApIGxYe2L3eODG6dJB/lJcqNGzckJydHZNNCBwFbvPW5FB/cIvHN28nZ937rOAkE3N9qgLF0WVlZQq4fvj8a5CtrAcc3PiO7GgTdLrhpnnnmGb11UY6Ag4AkGVgC7v/2FwJezMoOQHB9xVxJW/uxK0gavPJHYwFRuDTWlqEELGsBJzY9JzvrByMfEHD48KAocXVS7eQ7BMIICAlploAXOr8SuKjHHntMkjZ+JXdLH5ztElcrXs5lPSdXr10z/j+aVcB8j28wlIC4al5JK5AdqcHYLwR89tmgW8Z3yOqEXSHgIODJkyeFD+3A0rkyuHWiFHR62WSnECIr3rtBSue+JbVdxOLavP62HGvWNWD18PmRYcM4hOV27NhhxuVDEuyk5hdlW0owC5o+SkBX99DXnRwExDdnCXhw2VwZlJEomxKekj179sjLL78sdzb+T5IX/yNwwTXrN5W03/1Tzrw7Xe7cuBK2Btz9WB9p1aqV+T2WNdQK8kiGlCQp8LcpLS/L1rr9AmNAwBEjRvgaXJ18+QiEEZDHI+3Q8k8MAc93nCi5ubkyZcoUKVr9hYOAie17SMMJf5ALc96W0lOHwwi4K623IVf79u2NCLlfpjSp/FPTC+XHOn2C683r1+W554KhufIvRXv4EQEHASFfkICfmmSEtTW6mXAahUq31893ErBjL0lonSWF34YLE1QwBCQOzGP20KFDUrt2bYMR1m/JkiUBvPr16yevZlyVzUnBFHyUtxLQj5R6uDk7CIgw4GMIs/wXAp7tMD4wYp1j2yXly7+6OkPS1L/J4UZZgcIiCBWaDzh79mzh8/7775u14a/bXJdNib0CGdH0HzkymB3j6qTayXcIhBHQ+ufyVn4mA9MT5WTmOGO9iOU+8cQTlXqBWEIsJBV4v2lbJBvinwyMT+ju+eefr9Tz6WCRh4CDgKEhsryVn8vA9ATZGN/TPIJ5fCIMbNnmihUrZNSoUVJaWhp2VURTOnXqZBJOaTb2Wza0hgBBDVPE9Fr7Ellfu6eDgIyvLboRcBCQBAGbJHBk1RfSv0VNudJ1irz77rvy2muvBXL7gAQCQj4IyaOVOl5ULY/wXr16mXJNdlgg/ksYbteuXYaw9KFZ8lH6uX79enn98VJZV6tHICMa0aIEjG7ycXVhBMzPzzdXnf/dF9Ki5KgUdMkRkgUaNWokR44cMSWY5u/5+UK6FFYR4ZKenm6+7t271/jv6Icz+c6dO+YRTjknURGyXEjDosi9W7du5mti8XmZ0CFefqjRLYA4BBw9OlgjEv23Ijav0EHA/fv3G7eJJeCk20vlP0kvSWJ6V1M81LVr1weihCUjfGYLke7VuUaNGubvNskVsdF5yzvSaeSrsiYuOD4+Q60JiX5SOgj4448/GqKhgo+vWyDZJQuE+qPvb3eQ9Mx2lV6WefbUSUkrypf0WoUSP/z3svruLyKHf4Jp06ZFP/p6heHbs7ELAi0jPV3qHV4sd29crhKYbnZ/Rc4XFhnyUQ+MOtYW/Qjcc3s21CuukXspXC8hoWxTK+G8RDjyxtYNKiPvnsTUjJSAMXW7I+9ilYCRd09iakZKwJi63ZF3sUrAyLsnMTUjJWBM3e7Iu1glYOTdk5iakRIwpm535F1szBDw1q1bJhGCxIoHNYqmiFXbXRwi75ZF14x8S0CiNOzYQEYNCQ582N2V7BySJkgRI4mW+Da5iStXrjS7/Hfu3NncwaVLl5pdG8h1ZNcuoj/Xr1832dlEgcj04RwQkkweirUID1KgFbp7P3XUlKsSP6cxDuekqP7LL780mUFkCJF88eSTwYTb6KLRo1+NbwkIMbjRhO/Y/JKEWTJrIAjbiEAKXidBniK5iJCLjTDtdnG8A+XAgQMmjYzKvS1btpgUMshGGhnfk37GppqMTT9Sy9g9jJfo2LdIlSXg8uXLTS00hONvY8eOFbKM+KcIrQp89FsWXUf6loBYJ/IMsVhm78LiYrMREskMbAVCwiuJsCTYkofII5gNlmwjd5HMbfrZXRs4HquJtePlPIwLISE7x2JheWFPz549AxV+EB6rigWmcX4+kJqcSSw04/OPoC0cAd8SUG9mdCCgBIyO++jbq1AC+vbWRcfEfU1AFCcixCrQit4S1nfs4MX6j4YYQYCUfWMUa0v6PerLFFkTotJZN7J2bdGiRWDqrEupv2EdiTq3r8iw4qmi1xhpx/uagKtXrzauFEjCzUSlUlLAjUMwIBwgC0VQKFJuOmSCsLhmaIgU3g6AfxDVzMbodlPNDz/80LxKAhFDNR+FUuz0ylfOyXv0+BnCcD7mwLkYP1TwHDx40PEO5AULFkiPHj3MiyBR27beGtLhHkIxo76ZMwqfvnaPnUgjUEXn41sC4lbhRYlYBj72/XIAAjlI60fpopRxmeAfRL3ibsHi2BchbtiwwfyMJcKNQx/b8B3aGmcIBtFQ07hVqHGGWLhlIAiWCj8hP0Ok0IIqLJ4lNWMz5u7du+Wpp54yL+oZP368sDEUY2OFITFzRs1j5ekbrRs1+ZaAWDoegVgIyMcN4wZSBI/PDouG1cIHCEG/+uorY4WwLlgwnNL2MctNhwyWZJaAWEaIiWXD0llfIO4ZXDUcAwkhJo9kaqSpi+YYOz5jlSUg72XGovGIZ+zMzExzHL5LfJvUSjMG87Z9bTlsRS1OpB3vWwI+LJCQgPWi3aX1YY/X/t4gEDME9AY+HbWiCCgBK4qgHl8hBHxLQMJjqGA2v7RuE4sEypc4LrHf0EZSAAv7R22sHREZ7JWIaHiQMmWdiOBBDLH9CGs4O092kEAls+aL9eZbAnLjyIbBbYJbA/cKi3ZIAvF4Bx3rPdZ9CAUULj/bhT/CAfFi1Sq7tOIWQbwgXIjvMhaukD59+phzkQWDKHjhhRcM+dm/kOPMThLHjxtBETruN998EziW7BoIiXBCdbNbrN2LkbkzX9Qwx8dS8y0BsYAffPCBSXdCveJ6IZEAJYylWbZsmclawQ3DDYZ4kMuKESwQfj+2HqZBJEtWjoF0kI1jIBjknD59usyfP9+kWi1atMgQkIwaFC9WjePtuNnZ2cZdg4+PcfAnzpo1y3wlkYI5YUGZA1ac80NA+0LHWCGhbwlYFTcIPyDk0zc2eYe2EtA7bHVkFwgoAV2ApF28QyBqCUio7lGTBQjbcWzZJAfWbkRXWKcxPutNwmY01DFrQBJktblHwLcERIQQXkPxIj5IRLAJAMRaUb6EtMhKJkaL+IAcKFUEiU0gwBVCX7YVJgxGBjPqdeLEieZYSAjhcOHQBzVMHJn1IaE4QoKICcJ29EWJ4wZiLggL+mi7PwK+JWCoGwa3CSrYZrjwN+uGsRkyfMUn98MPP5gsFhQqlg6SQjxcLBCOxAKIA8nWrFljrJotWKLWhGwV3muybt0685V9sElEQO1SdQcJiePyPa4fxg1NRFAyOhHwLQGxgN99951xLOP05dFoEwBwy1CrgWXiEcnPWKrWrVsb3x5JBSQgQBwIw99JCMByYRmxiJCZviQ5kFVDPzJlSEpgXHx4pGlR3EQSAn9nDtSV8DjmdyRKkABxvzdEKRnLbFKugNwbASwij218g7b4SLGqHAR8awEr5/J1lOpGQAlY3Xcgxs/vWwKyfmONRruXu4VkBMTGw7SyNSGMj3ix6zvS5FkDlre9x8OcM9b7+paApL2Tqk5DiLBGsy9DJPPEFv6QTIAw4G+4YVDMiAKb4v6gmhDitJZ8KGFcLIgPlG1ozUesk6gi1+9bApIwgMpkuwtcHihYiEjSwJgxY4wbBjcI1hFrad/WSco+ynby5MkGtwfVhGDtICgWD78f6hcSQ/DQlPuK3IBYP9a3BMQisYMVvjysHX5AHpE4pYlY4NMjb89GKnCl4DahP1YNtwsNy3m/mhBepGijHRCZD9kv6lyuvH8b3xKw8iDQkaoTASVgdaKv5w5/VZdioghUJQK+tYBko5AAwBqNcBet7A4E9wKS7GS2ZEMVs3YM3WzyfsBzDhIcECNua0JQ6QgYQno2MxpFzrkZi0aSA64e1DXiiDg0cWnKARBTpO6zZmWuNuObTOrQvoxPX5IqCDX6rfmWgIgKRAIxV9wqFIpzE1C8KFWSBEJrLEihR0RAVlQzKnbt2rWBd9MRbkO4IGQQJiQQoKxRvtSScD7OVV5NyIsvvmg4wPmJR5OJA4mYF+NRJkAsmrnTEET4Gu3OCPguiW1DRjJwcPtwPSh7kiO4htC+zNVm35QtwvIDGX1LQNQoFoQkA6rOcK1YcmElsIa2xgILZusxICuEgBjcUN4EDwkgIMdAYiyj3QUBKwsp6JuTk1NuTYj1L5Itwzikd2ENUeAQinoVCEdtCL/nOsjIwUpybubBPwdZO5QC4LfkWHyZuILsjqu2L0ofpzvzJdvHb823BKxsoK31i9ZdqCobr8oaTwlYWUjqOI+EgBLwkWDTgyoLgagiIOKCtSBCQps/EPAtAUl7530eZDCjEhESfI+6JD0egUIfG4pDkVqVbIuN7HZsKFxUJzsXIBpsYRFxYr7HBYLrhIJ0u6spsWaEAYrU7oYA+cnURhihohkXVwoqFReOxo/D/yl8S0CSEYgFQyI+1G6QMk/RkK3jwC0BgfAZfv311+ZVCbhUIBEKFTWMXw73CsfYmhArRHC5oIIhFdYVVYpy5YUzqFN+TxwZAqJq8fvhJiFLh99ZsjIGx9BHmxMB3xIQ14p9uQyWhw8uFtwYgwYNktzcXOOyoOH2wMGLo9ZuOEn9Br45joN89MFSQT7cHjR8cJwHouFvs0kI9m1IWEtIxzH0ow9uESwgriBIjpW0llZTuKLIAj7IkhAZgBRYN22RjYBvLWBkw6qzc4uAEtAtUtrPEwSUgJ7AqoO6RUAJ6BYp7ecJAkpAT2DVQd0ioAR0i5T28wQBJaAnsOqgbhFQArpFSvt5goAS0BNYdVC3CCgB3SKl/TxBQAnoCaw6qFsElIBukdJ+niCgBPQEVh3ULQJKQLdIaT9PEFACegKrDuoWASWgW6S0nycIKAE9gVUHdYuAEtAtUtrPEwSUgJ7AqoO6RUAJ6BYp7ecJAkpAT2DVQd0ioAR0i5T28wQBJaAnsOqgbhFQArpFSvt5goAS0BNYdVC3CCgB3SKl/TxBQAnoCaw6qFsElIBukdJ+niCgBPQEVh3ULQJKQLdIaT9PEFACegKrDuoWASWgW6S0nycI/B/Ol8o+KhEG1gAAAABJRU5ErkJggg==</thumbnail><scenes select="1"><scene name="Lab 4.3 Starter"><notes></notes><hidden></hidden><headers></headers><code></code><blocks><block-definition s="Sum of %&apos;List of numbers&apos;" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">add code here to report the sum of all the numbers in the list.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doFor"><l>i</l><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="List of numbers"/></block><script><block s="doReport"><block s="reportCombine"><block s="reportNewList"><list><l>89</l><l>67</l><l>5</l><l>90</l><l>-2</l><l>0</l><l>190</l><l>8</l></list></block><block s="reifyReporter"><autolambda><block s="reportSum"><l></l><l></l></block></autolambda><list></list></block></block></block></script></block></script></block-definition><block-definition s="Average of %&apos;List of Numbers&apos;" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">add code to report the average of all the numbers in the list.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doFor"><l>i</l><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="List of Numbers"/></block><script><block s="doReport"><block s="reportQuotient"><custom-block s="Sum of %l"><block var="List of Numbers"/></custom-block><block s="reportListAttribute"><l><option>length</option></l><block var="List of Numbers"/></block></block></block></script></block></script></block-definition><block-definition s="includes negative? %&apos;List of Numbers&apos;" type="predicate" category="lists"><comment x="0" y="0" w="90" collapsed="false">add code to report true if the list contains at least one negative number, and false if all numbers are non-negative.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doForEach"><l>item</l><block var="List of Numbers"/><script><block s="doIf"><block s="reportListContainsItem"><block var="List of Numbers"/><block s="reportLessThan"><block var="item"/><l>0</l></block></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block></script></block><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block-definition><block-definition s="is increasing? %&apos;List of Numbers&apos;" type="predicate" category="lists"><comment x="0" y="0" w="90" collapsed="false">add code to report true if each value in the list is greater than or equal to the one before it..</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>a</l></list></block><block s="doSetVar"><l>a</l><block s="reportListItem"><l>1</l><block var="List of Numbers"/></block></block><block s="doForEach"><l>item</l><block var="List of Numbers"/><script><block s="doIf"><block s="reportLessThan"><block var="item"/><block var="a"/></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block><block s="doSetVar"><l>a</l><block var="item"/></block></script></block><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block-definition><block-definition s="Maximum of %&apos;List of Numbers&apos;" type="reporter" category="lists"><comment w="90" collapsed="false">add code to report the largest number in the list..</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>a</l></list></block><block s="doSetVar"><l>a</l><block s="reportListItem"><l>1</l><block var="List of Numbers"/></block></block><block s="doForEach"><l>item</l><block var="List of Numbers"/><script><block s="doIf"><block s="reportLessThan"><block var="a"/><block var="item"/></block><script><block s="doSetVar"><l>a</l><block var="item"/></block></script></block></script></block><block s="doReport"><block var="a"/></block></script></block-definition><block-definition s="make all positive %&apos;List of Numbers&apos;" type="reporter" category="lists"><comment x="0" y="0" w="90" collapsed="false">add code to report a new LIST that is the same as the argument, except all negative numbers have been replaced by their absolute value. .</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportMonadic"><l><option>abs</option></l><l></l></block></autolambda><list></list></block><block var="List of Numbers"/></block></block></script></block-definition><block-definition s="only evens %&apos;List of Numbers&apos;" type="reporter" category="lists"><comment w="90" collapsed="false">add code to report a new LIST that contains only the even numbers from the argument list..</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doDeclareVariables"><list><l>return list</l></list></block><block s="doSetVar"><l>return list</l><block s="reportNewList"><list></list></block></block><block s="doForEach"><l>item</l><block var="List of Numbers"/><script><block s="doIf"><block s="reportEquals"><block s="reportModulus"><block var="item"/><l>2</l></block><l>0</l></block><script><block s="doAddToList"><block var="item"/><block var="return list"/></block></script></block></script></block><block s="doReport"><block var="return list"/></block></script></block-definition><block-definition s="all but first letter of %&apos;string&apos;" type="reporter" category="operators"><comment x="0" y="0" w="199" collapsed="false">Takes a text string as input, and reports a new text string containing all but the first character of the input.</comment><header></header><code></code><translations>pt:_ sem o primeiro caractere&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>i</l></list></block><block s="doWarp"><script><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="string"/></block><l>0</l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportSum"><l>0</l><l>0</l></block></block></block></script></block><block s="doSetVar"><l>result</l><l></l></block><block s="doSetVar"><l>i</l><l>2</l></block><block s="doUntil"><block s="reportGreaterThan"><block var="i"/><block s="reportStringSize"><block var="string"/></block></block><script><block s="doSetVar"><l>result</l><block s="reportJoinWords"><list><block var="result"/><block s="reportLetter"><block var="i"/><block var="string"/></block></list></block></block><block s="doChangeVar"><l>i</l><l>1</l></block></script></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="all but first word of %&apos;sentence&apos;" type="reporter" category="operators"><comment x="0" y="0" w="223.00000099999997" collapsed="false">Takes a text string as input, divides it into words treating one or more spaces as a word separator (only spaces count; punctuation is part of the word) and reports a text string containing all but the first word, with one space between words and no spaces at the beginning or end. (Note: consider using SENTENCE-&gt;LIST and processing the resulting list instead of doing recursion on sentences in text string form.  List operations are faster.)</comment><header></header><code></code><translations>pt:_ sem a primeira palavra&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>index</l><l>bf</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>bf</l><l></l></block><block s="doSetVar"><l>index</l><l>1</l></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportJoinWords"><list><l>empty </l><l>sentence</l></list></block></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportJoinWords"><list><l>empty </l><l>sentence</l></list></block></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><script><block s="doReport"><l></l></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><block s="doReport"><l></l></block></script></block><block s="doUntil"><block s="reportGreaterThan"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><script><block s="doSetVar"><l>bf</l><block s="reportJoinWords"><list><block var="bf"/><block s="reportLetter"><block var="index"/><block var="sentence"/></block></list></block></block><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doReport"><block var="bf"/></block></script></block></script></block-definition><block-definition s="all but last letter of %&apos;string&apos;" type="reporter" category="operators"><comment x="0" y="0" w="218" collapsed="false">Takes a text string as input, and reports a new text string containing all but the last letter of the input.</comment><header></header><code></code><translations>pt:_ sem o último caractere&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>result</l><l>i</l></list></block><block s="doWarp"><script><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="string"/></block><l>0</l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportSum"><l>0</l><l>0</l></block></block></block></script></block><block s="doSetVar"><l>result</l><l></l></block><block s="doSetVar"><l>i</l><l>1</l></block><block s="doUntil"><block s="reportEquals"><block var="i"/><block s="reportStringSize"><block var="string"/></block></block><script><block s="doSetVar"><l>result</l><block s="reportJoinWords"><list><block var="result"/><block s="reportLetter"><block var="i"/><block var="string"/></block></list></block></block><block s="doChangeVar"><l>i</l><l>1</l></block></script></block><block s="doReport"><block var="result"/></block></script></block></script></block-definition><block-definition s="all but last word of %&apos;sentence&apos;" type="reporter" category="operators"><comment x="0" y="0" w="211.99999999999997" collapsed="false">Takes a text string as input, divides it into words treating one or more spaces as a word separator (only spaces count; punctuation is part of the word) and reports a text string containing all but the last word, with one space between words and no spaces at the beginning or end.  (Note: consider using SENTENCE-&gt;LIST and processing the resulting list instead of doing recursion on sentences in text string form.  List operations are faster.)</comment><header></header><code></code><translations>pt:_ sem a última palavra&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>index</l><l>bl</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>bl</l><l></l></block><block s="doSetVar"><l>index</l><block s="reportStringSize"><block var="sentence"/></block></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportJoinWords"><list><l>empty </l><l>sentence</l></list></block></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><l>1</l></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportJoinWords"><list><l>empty </l><l>sentence</l></list></block></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><l>1</l></block><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doIf"><block s="reportEquals"><block var="index"/><l>1</l></block><script><block s="doReport"><l></l></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><l>1</l></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><block s="doReport"><l></l></block></script></block><block s="doUntil"><block s="reportLessThan"><block var="index"/><l>1</l></block><script><block s="doSetVar"><l>bl</l><block s="reportJoinWords"><list><block s="reportLetter"><block var="index"/><block var="sentence"/></block><block var="bl"/></list></block></block><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doReport"><block var="bl"/></block></script></block></script></block-definition><block-definition s="first word of %&apos;sentence&apos;" type="reporter" category="operators"><comment x="0" y="0" w="236.00000000000003" collapsed="false">Takes a text string as input, divides it into words treating one or more spaces as a word separator (only spaces count; punctuation is part of the word) and reports a text string containing only the first word, with no spaces before or after it.</comment><header></header><code></code><translations>pt:a primeira palavra de _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>index</l><l>first</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>first</l><l></l></block><block s="doSetVar"><l>index</l><l>1</l></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportJoinWords"><list><l>empty </l><l>sentence</l></list></block></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportJoinWords"><list><l>empty </l><l>sentence</l></list></block></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doSetVar"><l>first</l><block s="reportJoinWords"><list><block var="first"/><block s="reportLetter"><block var="index"/><block var="sentence"/></block></list></block></block><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doSetVar"><l>first</l><block s="reportJoinWords"><list><block var="first"/><block s="reportLetter"><block var="index"/><block var="sentence"/></block></list></block></block></script></block><block s="doReport"><block var="first"/></block></script></block></script></block-definition><block-definition s="last letter of %&apos;word&apos;" type="reporter" category="operators"><comment x="0" y="0" w="260" collapsed="false">Takes a text string as input, and reports the last character in the string.</comment><header></header><code></code><translations>pt:o último caractere de _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportLetter"><block s="reportStringSize"><block var="word"/></block><block var="word"/></block></block></script></block-definition><block-definition s="last word of %&apos;sentence&apos;" type="reporter" category="operators"><comment x="0" y="0" w="262" collapsed="false">Takes a text string as input, divides it into words treating one or more spaces as a word separator (only spaces count; punctuation is part of the word) and reports a text string containing only the last word of the input, with no spaces before or after it.</comment><header></header><code></code><translations>pt:a última palavra de _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>index</l><l>last</l></list></block><block s="doWarp"><script><block s="doSetVar"><l>last</l><l></l></block><block s="doSetVar"><l>index</l><block s="reportStringSize"><block var="sentence"/></block></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportJoinWords"><list><l>empty </l><l>sentence</l></list></block></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><l>1</l></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block s="reportJoinWords"><list><l>empty </l><l>sentence</l></list></block></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><l>1</l></block><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doSetVar"><l>last</l><block s="reportJoinWords"><list><block s="reportLetter"><block var="index"/><block var="sentence"/></block><block var="last"/></list></block></block><block s="doChangeVar"><l>index</l><l>-1</l></block></script></block><block s="doIf"><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block><script><block s="doSetVar"><l>last</l><block s="reportJoinWords"><list><block s="reportLetter"><block var="index"/><block var="sentence"/></block><block var="last"/></list></block></block></script></block><block s="doReport"><block var="last"/></block></script></block></script></block-definition><block-definition s="empty word? %&apos;word&apos;" type="predicate" category="operators"><comment x="0" y="0" w="208.00000000000003" collapsed="false">Takes a text string as input, and reports TRUE if the string has no characters in it of any kind, otherwise false.</comment><header></header><code></code><translations>pt:a palavra _ está vazia&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportEquals"><block s="reportStringSize"><block var="word"/></block><l>0</l></block></block></script></block-definition><block-definition s="empty sentence? %&apos;sentence&apos;" type="predicate" category="operators"><comment x="0" y="0" w="221" collapsed="false">Takes a text string as input, and reports TRUE if the input contains no characters other than spaces (therefore, no words when the string is considered as a sentence), otherwise FALSE.</comment><header></header><code></code><translations>pt:a frase _ está vazia&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doDeclareVariables"><list><l>index</l></list></block><block s="doSetVar"><l>index</l><l>1</l></block><block s="doIf"><block s="reportEquals"><block s="reportStringSize"><block var="sentence"/></block><l>0</l></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block><block s="doUntil"><block s="reportOr"><block s="reportEquals"><block var="index"/><block s="reportStringSize"><block var="sentence"/></block></block><block s="reportNot"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></block><script><block s="doChangeVar"><l>index</l><l>1</l></block></script></block><block s="doReport"><block s="reportEquals"><block s="reportLetter"><block var="index"/><block var="sentence"/></block><l> </l></block></block></script></block-definition><block-definition s="join words %&apos;words&apos;" type="reporter" category="operators"><header></header><code></code><translations>de:füge Wörter zusammen _&#xD;ca:uneix les paraules _&#xD;es:unir las palabras _&#xD;fr:fusionne les mots _&#xD;pt:uma frase com as palavras _&#xD;</translations><inputs><input type="%mult%txt"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block s="reportCDR"><block var="words"/></block></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="words"/></block></block></script></block><block s="doIf"><block s="reportEquals"><l></l><block s="reportListItem"><l>1</l><block var="words"/></block></block><script><block s="doReport"><custom-block s="join words %mult%txt"><block s="reportCDR"><block var="words"/></block></custom-block></block></script></block><block s="doIf"><block s="reportEquals"><l></l><block s="reportListItem"><l>2</l><block var="words"/></block></block><script><block s="doReport"><custom-block s="join words %mult%txt"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="words"/></block><block s="reportCDR"><block s="reportCDR"><block var="words"/></block></block></block></custom-block></block></script></block><block s="doReport"><block s="reportJoinWords"><list><block s="reportListItem"><l>1</l><block var="words"/></block><l> </l><custom-block s="join words %mult%txt"><block s="reportCDR"><block var="words"/></block></custom-block></list></block></block></script></block-definition><block-definition s="list $arrowRight sentence %&apos;data&apos;" type="reporter" category="operators"><header></header><code></code><translations>de:Liste $arrowRight Satz _&#xD;ca:llista $arrowRight frase _&#xD;es:lista $arrowRight frase _&#xD;fr:liste $arrowRight phrase _&#xD;pt:uma frase com as palavras em _&#xD;</translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><custom-block s="join words %mult%txt"><block var="data"/></custom-block></block></script></block-definition><block-definition s="word $arrowRight list %&apos;word&apos;" type="reporter" category="operators"><comment x="0" y="0" w="146.42857142857144" collapsed="false">report a list in which each item is one letter from the input word</comment><header></header><code></code><translations>de:Wort $arrowRight Liste _&#xD;ca:paraula $arrowRight llista _&#xD;es:palabra $arrowRight lista _&#xD;fr:mot $arrowRight liste _&#xD;pt:uma lista com os caracteres da palavra _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportTextSplit"><block var="word"/><l><option>letter</option></l></block></block></script></block-definition><block-definition s="list $arrowRight word %&apos;list&apos;" type="reporter" category="operators"><comment x="0" y="0" w="158.57142857142858" collapsed="false">join all the items of the input list&#xD;into a single word, and report it</comment><header></header><code></code><translations>de:Liste $arrowRight Wort _&#xD;ca:llista $arrowRight paraula _&#xD;es:lista $arrowRight palabra _&#xD;fr:liste $arrowRight mot _&#xD;pt:uma palavra com os caracteres em _&#xD;</translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportJoinWords"><block var="list"/></block></block></script></block-definition><block-definition s="USE BIGNUMS %&apos;bool&apos;" type="command" category="operators"><comment x="0" y="0" w="303.3333333333333" collapsed="false">call with True to turn on the entire Scheme numeric tower, including infinite-precision integers, exact rationals, and complex numbers; call with False to restore native JavaScript arithmetic.</comment><header></header><code></code><translations>pt:altera utilização de aritmética do Scheme para _&#xD;</translations><inputs><input type="%b"></input></inputs><script><block s="doDeclareVariables"><list><l>isDone</l></list></block><block s="doSetVar"><l>isDone</l><block s="reportJSFunction"><list><l>useBigNums</l></list><l>var done = false;&#xD;&#xD;function initialize (callback) {&#xD;    var bigScript = document.createElement(&apos;script&apos;);&#xD;    bigScript.src = &apos;//snap.berkeley.edu/snap/libraries/biginteger.js&apos;;&#xD;    bigScript.onload = loadScheme;&#xD;    document.head.appendChild(bigScript);&#xD;&#xD;    function loadScheme () {&#xD;        var schemeScript = document.createElement(&apos;script&apos;);&#xD;        schemeScript.src = &apos;//snap.berkeley.edu/snap/libraries/schemeNumber.js&apos;;&#xD;        schemeScript.onload = finish;&#xD;        document.head.appendChild(schemeScript);&#xD;    }&#xD;&#xD;    function finish () {&#xD;        makeGlobalObject();&#xD;        callback();&#xD;    }&#xD;}&#xD;&#xD;function makeGlobalObject () {&#xD;    window.bigNumbers = {&#xD;        originalEvaluate: InputSlotMorph.prototype.evaluate,&#xD;        originalChangeVar: VariableFrame.prototype.changeVar,&#xD;        originalPrims: {&#xD;            reportBasicSum: Process.prototype.reportBasicSum,&#xD;            reportBasicDifference: Process.prototype.reportBasicDifference,&#xD;            reportBasicProduct: Process.prototype.reportBasicProduct,&#xD;            reportBasicQuotient: Process.prototype.reportBasicQuotient,&#xD;            reportBasicPower: Process.prototype.reportBasicPower,&#xD;            reportBasicModulus: Process.prototype.reportBasicModulus,&#xD;            reportBasicAtan2: Process.prototype.reportBasicAtan2,&#xD;            reportRound: Process.prototype.reportRound,&#xD;            reportBasicMin: Process.prototype.reportBasicMin,&#xD;            reportBasicMax: Process.prototype.reportBasicMax,&#xD;            reportBasicRandom: Process.prototype.reportBasicRandom,&#xD;            reportBasicLessThan: Process.prototype.reportBasicLessThan,&#xD;            reportBasicGreaterThan: Process.prototype.reportBasicGreaterThan,&#xD;            reportEquals: Process.prototype.reportEquals,&#xD;            reportIsIdentical: Process.prototype.reportIsIdentical,&#xD;            reportMonadic: Process.prototype.reportMonadic&#xD;        }&#xD;    };&#xD;}&#xD;&#xD;function loadBlocks () {&#xD;    var fn = SchemeNumber.fn;&#xD;    var originalPrims = window.bigNumbers.originalPrims;&#xD;    if (useBigNums) {&#xD;        InputSlotMorph.prototype.evaluate = function () {&#xD;            var contents = this.contents();&#xD;&#xD;            if (this.selectedBlock) {&#xD;                    return this.selectedBlock;&#xD;            }&#xD;&#xD;            if (this.constant) {&#xD;                return this.constant;&#xD;            }&#xD;            if (this.isNumeric) {&#xD;                return parseNumber(contents.text || &apos;0&apos;);&#xD;            }&#xD;            return contents.text;&#xD;        };&#xD;        VariableFrame.prototype.changeVar = function (name, delta, sender) {&#xD;            var frame = this.find(name),&#xD;                value,&#xD;                newValue;&#xD;            if (frame) {&#xD;                value = parseNumber(frame.vars[name].value);&#xD;                newValue = Number.isNaN(value) ? delta : fn[&apos;+&apos;](value, parseNumber(delta));&#xD;                if (sender instanceof SpriteMorph &amp;&amp;&#xD;                        (frame.owner instanceof SpriteMorph) &amp;&amp;&#xD;                        (sender !== frame.owner)) {&#xD;                    sender.shadowVar(name, newValue);&#xD;                } else {&#xD;                    frame.vars[name].value = newValue;&#xD;                }&#xD;&#xD;            }&#xD;        };&#xD;        Object.assign(Process.prototype, {&#xD;            reportBasicSum: function (a, b) {&#xD;                a = parseNumber(a);&#xD;                b = parseNumber(b);&#xD;                if (Number.isNaN(a) || Number.isNaN(b)) return NaN;&#xD;                return fn[&apos;+&apos;](a, b);&#xD;            },&#xD;            reportBasicDifference: function (a, b) {&#xD;                a = parseNumber(a);&#xD;                b = parseNumber(b);&#xD;                if (Number.isNaN(a) || Number.isNaN(b)) return NaN;&#xD;                return fn[&apos;-&apos;](a, b);&#xD;            },&#xD;            reportBasicProduct: function (a, b) {&#xD;                a = parseNumber(a);&#xD;                b = parseNumber(b);&#xD;                if (Number.isNaN(a) || Number.isNaN(b)) return NaN;&#xD;                return fn[&apos;*&apos;](a, b);&#xD;            },&#xD;            reportBasicQuotient: function (a, b) {&#xD;                a = parseNumber(a);&#xD;                b = parseNumber(b);&#xD;                if (fn[&apos;=&apos;](b, &apos;0&apos;) &amp;&amp; !fn[&apos;=&apos;](a, &apos;0&apos;)) {&#xD;                      return (fn[&apos;&lt;&apos;](a, &apos;0&apos;) ? SchemeNumber(&apos;-inf.0&apos;) : SchemeNumber(&apos;+inf.0&apos;))&#xD;                };&#xD;                if (Number.isNaN(a) || Number.isNaN(b) || fn[&apos;=&apos;](b, &apos;0&apos;)) return NaN;&#xD;                return fn[&apos;/&apos;](a, b);&#xD;            },&#xD;            reportBasicPower: function (a, b) {&#xD;                a = parseNumber(a);&#xD;                b = parseNumber(b);&#xD;                if (Number.isNaN(a) || Number.isNaN(b)) return NaN;&#xD;                return fn[&apos;expt&apos;](a, b);&#xD;            },&#xD;            reportBasicModulus: function (a, b) {&#xD;                a = parseNumber(a);&#xD;                b = parseNumber(b);&#xD;                if (Number.isNaN(a) || Number.isNaN(b)) return NaN;&#xD;                var result = fn.mod(a, b);&#xD;                if (fn[&apos;&lt;&apos;](b, &apos;0&apos;) &amp;&amp; fn[&apos;&gt;&apos;](result, &apos;0&apos;)) {&#xD;                    result = fn[&apos;+&apos;](result, b);&#xD;                }&#xD;                return result;&#xD;            },&#xD;           reportBasicAtan2: function (a, b) {&#xD;                a = parseNumber(a);&#xD;                b = parseNumber(b);&#xD;                if (Number.isNaN(a) || Number.isNaN(b)) return NaN;&#xD;                return degrees(fn.atan2(a, b));&#xD;          },&#xD;          reportRound: function (n) {&#xD;             if (this.enableHyperOps) {&#xD;                 if (n instanceof List) {&#xD;                     return n.map(each =&gt; this.reportRound(each));&#xD;                 }&#xD;               }&#xD;           n = parseNumber(n);&#xD;           if (Number.isNaN(n)) return NaN;&#xD;           x = fn.round(n);&#xD;           if (fn["integer?"](x)) return fn["exact"](x);&#xD;           return x;&#xD;           },  &#xD;           reportBasicMin: function (a, b) {&#xD;                x = parseNumber(a);&#xD;                y = parseNumber(b);&#xD;                if (Number.isNaN(x) || Number.isNaN(y)) {&#xD;                  return a&lt;b ? a : b;&#xD;                }&#xD;                return fn[&apos;&lt;&apos;](x, y) ? x : y;&#xD;            },&#xD;           reportBasicMax: function (a, b) {&#xD;                x = parseNumber(a);&#xD;                y = parseNumber(b);&#xD;                if (Number.isNaN(x) || Number.isNaN(y)) {&#xD;                  return a&gt;b ? a : b;&#xD;                }&#xD;                return fn[&apos;&gt;&apos;](x, y) ? x : y;&#xD;            },&#xD;            reportBasicRandom: function (min, max) {&#xD;                var floor = parseNumber(min),&#xD;                    ceil = parseNumber(max);&#xD;                if (Number.isNaN(floor) || Number.isNaN(ceil)) return NaN;&#xD;                if (!fn[&apos;=&apos;](fn.mod(floor, &apos;1&apos;), &apos;0&apos;) || !fn[&apos;=&apos;](fn.mod(ceil, &apos;1&apos;), &apos;0&apos;)) {&#xD;                    // One of the numbers isn&apos;t whole. Include the decimal.&#xD;                    return fn[&apos;+&apos;](&#xD;                        fn[&apos;*&apos;](&#xD;                            Math.random(),&#xD;                            fn[&apos;-&apos;](ceil, floor)&#xD;                        ),&#xD;                        floor&#xD;                    );&#xD;                }&#xD;                var size = Math.ceil(max.toString(10).length/14);&#xD;                const array = new Uint32Array(size);&#xD;                window.crypto.getRandomValues(array);&#xD;                var digits="";&#xD;                for (i=0;i&lt;size;i++) {&#xD;                    digits = digits + array[i].toString();&#xD;               } &#xD;               return fn.floor(&#xD;                    fn[&apos;+&apos;](&#xD;                        // fn[&apos;*&apos;](&#xD;                         //   Math.random(),&#xD;                            fn.mod(parseNumber(digits),&#xD;                                 fn[&apos;+&apos;](&#xD;                                     fn[&apos;-&apos;](ceil, floor),&#xD;                                     &apos;1&apos;&#xD;                                 )&#xD;                             ),&#xD;                        floor&#xD;                    )&#xD;                );&#xD;            },&#xD;            reportBasicLessThan: function (a, b) {&#xD;                x = parseNumber(a);&#xD;                y = parseNumber(b);&#xD;                if (Number.isNaN(x) || Number.isNaN(y)) return a&lt;b;&#xD;                return fn[&apos;&lt;&apos;](x, y);&#xD;            },&#xD;            reportBasicGreaterThan: function (a, b) {&#xD;                x = parseNumber(a);&#xD;                y = parseNumber(b);&#xD;                if (Number.isNaN(x) || Number.isNaN(y)) return a&gt;b;&#xD;                return fn[&apos;&gt;&apos;](x, y);&#xD;            },&#xD;            reportEquals: function (a, b) {&#xD;                x = parseNumber(a);&#xD;                y = parseNumber(b);&#xD;                if (Number.isNaN(x) || Number.isNaN(y)) return snapEquals(a, b);&#xD;                return fn[&apos;=&apos;](x, y);&#xD;            },&#xD;            reportIsIdentical: function (a, b) {&#xD;                x = parseNumber(a);&#xD;                y = parseNumber(b);&#xD;                if (Number.isNaN(x) || Number.isNaN(y)) return originalPrims.reportIsIdentical(a, b);&#xD;                return fn[&apos;=&apos;](x, y);&#xD;            },&#xD;            reportMonadic: function (fname, n) {&#xD;                if (this.enableHyperOps) {&#xD;                    if (n instanceof List) {&#xD;                        return n.map(each =&gt; this.reportMonadic(fname, each));&#xD;                    }&#xD;                }&#xD;&#xD;                n = parseNumber(n);&#xD;                if (Number.isNaN(n)) return NaN;&#xD;&#xD;                switch (Process.prototype.inputOption(fname)) {&#xD;                case &apos;abs&apos;:&#xD;                    return fn.abs(n);&#xD;                case &apos;neg&apos;:&#xD;                    return fn[&apos;-&apos;](n);&#xD;                case &apos;sign&apos;:&#xD;                     if (fn[&apos;=&apos;](n,SchemeNumber(&apos;0&apos;))) return SchemeNumber(&apos;0&apos;);&#xD;                     return fn[&apos;/&apos;](n, fn.abs(n));&#xD;                case &apos;ceiling&apos;:&#xD;                    return fn.ceiling(n);&#xD;                case &apos;floor&apos;:&#xD;                    return fn.floor(n);&#xD;                case &apos;sqrt&apos;:&#xD;                    return sqrt(n);&#xD;                case &apos;sin&apos;:&#xD;                    return fn.sin(radians(n));&#xD;                case &apos;cos&apos;:&#xD;                    return fn.cos(radians(n));&#xD;                case &apos;tan&apos;:&#xD;                    return fn.tan(radians(n));&#xD;                case &apos;asin&apos;:&#xD;                    return degrees(fn.asin(n));&#xD;                case &apos;acos&apos;:&#xD;                    return degrees(fn.acos(n));&#xD;                case &apos;atan&apos;:&#xD;                    return degrees(fn.atan(n));&#xD;                case &apos;ln&apos;:&#xD;                    return fn.log(n);&#xD;                case &apos;log&apos;:&#xD;                    return fn.log(n, &apos;10&apos;);&#xD;                case &apos;lg&apos;:&#xD;                    return fn.log(n, &apos;2&apos;);&#xD;                case &apos;e^&apos;:&#xD;                    return fn.exp(n);&#xD;                case &apos;10^&apos;:&#xD;                    return fn.expt(&apos;10&apos;, n);&#xD;                case &apos;2^&apos;:&#xD;                    return fn.expt(&apos;2&apos;, n);&#xD;                case &apos;id&apos;:&#xD;                    return n;&#xD;                default:&#xD;                    return SchemeNumber(&apos;0&apos;);&#xD;                }&#xD;            }&#xD;        });&#xD;    } else {&#xD;        InputSlotMorph.prototype.evaluate = window.bigNumbers.originalEvaluate;&#xD;        VariableFrame.prototype.changeVar = window.bigNumbers.originalChangeVar;&#xD;        Object.assign(Process.prototype, originalPrims);&#xD;    }&#xD;    done = true;&#xD;}&#xD;&#xD;function parseNumber (n) {&#xD;    var fn = SchemeNumber.fn;&#xD;    if (!fn[&apos;number?&apos;](n)) {&#xD;        n = &apos;&apos; + n;&#xD;        try {&#xD;            return parseENotation(n) || SchemeNumber(n);&#xD;        } catch (err) {&#xD;            return NaN;&#xD;        }&#xD;    }&#xD;    return n;&#xD;}&#xD;&#xD;function parseENotation (n) {&#xD;    var fn = SchemeNumber.fn;&#xD;&#xD;    var numbers = n.match(/^(-?\d+\.?\d*|-?\.\d+)e(-?\d+)$/i);&#xD;    if (!numbers) return null;&#xD;&#xD;    var coefficient = numbers[1];&#xD;    var exponent = numbers[2];&#xD;    return fn[&apos;*&apos;](&#xD;        coefficient,&#xD;        fn.expt(&apos;10&apos;, exponent)&#xD;    );&#xD;}&#xD;&#xD;function sqrt (n) {&#xD;    var fn = SchemeNumber.fn;&#xD;&#xD;    if (!fn[&apos;exact?&apos;](n) || !fn[&apos;rational?&apos;](n) || fn[&apos;&lt;&apos;](n,&apos;0&apos;)) return fn.sqrt(n);&#xD;&#xD;    var rootNumerator = fn[&apos;exact-integer-sqrt&apos;](fn.numerator(n));&#xD;    if (!fn[&apos;=&apos;](rootNumerator[1], &apos;0&apos;)) return fn.sqrt(n);&#xD;&#xD;    var rootDenominator = fn[&apos;exact-integer-sqrt&apos;](fn.denominator(n));&#xD;    if (!fn[&apos;=&apos;](rootDenominator[1], &apos;0&apos;)) return fn.sqrt(n);&#xD;&#xD;    return fn[&apos;/&apos;](rootNumerator[0], rootDenominator[0]);&#xD;}&#xD;&#xD;&#xD;function isDone () {&#xD;    return done;&#xD;}&#xD;&#xD;if (window.bigNumbers) {&#xD;    loadBlocks();&#xD;} else {&#xD;    initialize(loadBlocks);&#xD;}&#xD;&#xD;return isDone;</l></block></block><block s="doWaitUntil"><block s="evaluate"><block var="isDone"/><list><block var="bool"/></list></block></block></script></block-definition><block-definition s="%&apos;n&apos; !" type="reporter" category="operators"><comment x="0" y="0" w="190.66666666666666" collapsed="false">The factorial function, to make very large numbers, to demo bignums.</comment><header></header><code></code><translations></translations><inputs><input type="%n"></input></inputs><script><block s="doReport"><block s="reportIfElse"><block s="reportEquals"><block var="n"/><l>0</l></block><l>1</l><block s="reportProduct"><block var="n"/><custom-block s="%n !"><block s="reportDifference"><block var="n"/><l>1</l></block></custom-block></block></block></block></script></block-definition><block-definition s="Hummingbird %&apos;sensor&apos; %&apos;port&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%txt" readonly="true">Light<options>Distance (cm)&#xD;Dial&#xD;Light&#xD;Sound&#xD;Other (V)</options></input><input type="%n" readonly="true">1<options>1&#xD;2&#xD;3</options></input></inputs><script><block s="doDeclareVariables"><list><l>value</l></list></block><block s="doIf"><block s="reportEquals"><block var="sensor"/><l>Other (V)</l></block><script><block s="doSetVar"><l>sensor</l><l>Other</l></block></script></block><block s="doIf"><block s="reportEquals"><block var="sensor"/><l>Distance (cm)</l></block><script><block s="doSetVar"><l>sensor</l><l>Distance</l></block></script></block><block s="doSetVar"><l>value</l><block s="reportURL"><block s="reportJoinWords"><list><l>http://127.0.0.1:30061/hummingbird/in/</l><block var="sensor"/><l>/</l><block var="port"/></list></block></block></block><block s="doIfElse"><block s="reportNot"><block s="reportEquals"><block var="value"/><l>Not Connected</l></block></block><script><block s="doIf"><block s="reportEquals"><block var="sensor"/><l>Distance</l></block><script><block s="doReport"><block s="reportRound"><block s="reportProduct"><l>1.17</l><block var="value"/></block></block><comment w="90" collapsed="false">117/100 Scaling factor</comment></block></script></block><block s="doIf"><block s="reportEquals"><block var="sensor"/><l>Other</l></block><script><block s="doReport"><block s="reportQuotient"><block s="reportRound"><block s="reportProduct"><block s="reportProduct"><l>0.01294</l><block var="value"/></block><l>100</l></block></block><l>100</l></block><comment w="102" collapsed="false">3.3/255 scale factor</comment></block></script></block><block s="doIf"><block s="reportEquals"><block var="sensor"/><l>Sound</l><comment w="155" collapsed="true">If connected, adjust sound level</comment></block><script><block s="doReport"><block s="reportRound"><block s="reportProduct"><l>0.784</l><block var="value"/><comment w="140" collapsed="false">200/255 Scaling factor</comment></block></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="sensor"/><l>Light</l></block><script><block s="doReport"><block s="reportRound"><block s="reportProduct"><l>0.392</l><block var="value"/><comment w="140" collapsed="false">100/255 Scaling factor</comment></block></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="sensor"/><l>Dial</l></block><script><block s="doReport"><block s="reportRound"><block s="reportProduct"><l>0.435</l><block var="value"/><comment w="140" collapsed="false">100/230 Scaling factor</comment></block></block></block></script></block></script><script><block s="doReport"><l>Not Connected</l></block></script></block></script></block-definition><block-definition s="Hummingbird Play Note %&apos;note&apos; for %&apos;beats&apos; beats" type="command" category="sound"><header></header><code></code><translations>ko:Hummingbird _ 번 음을 _ 박자로 연주하기&#xD;de:Hummingbird Spiele Note _ für _ Schläge&#xD;pt:Hummingbird Toque Notas _ por _ Batidas&#xD;fr:Hummingbird Jouer la note _ pour _ battement(s)&#xD;nl:Hummingbird Speel Noot _ voor _ Beats&#xD;zh_CN:Hummingbird 演奏 音阶 _ 于 _ 拍&#xD;zh_TW:Hummingbird 演奏 音階 _ 於 _ 拍&#xD;ar:Hummingbird تشغيل الموسيقى  _ _&#xD;dk:Hummingbird Spil tone _ i _ slag&#xD;he:Hummingbird נגן תו   _  במשך  _   פעימות&#xD;es:Hummingbird Emitir un sonido _ por _ pulsos&#xD;ca:Hummingbird Toca nota _ durant _ temps&#xD;fi:Hummingbird Soita sävel _  _ iskun ajan&#xD;sv:Hummingbird Spela not _ _&#xD;</translations><inputs><input type="%n">60</input><input type="%n">0.5</input></inputs><script><block s="doIf"><block s="reportGreaterThan"><block var="note"/><l>135</l></block><script><block s="doSetVar"><l>note</l><l>135</l></block></script></block><block s="doIf"><block s="reportGreaterThan"><l>32</l><block var="note"/></block><script><block s="doSetVar"><l>note</l><l>32</l></block></script></block><block s="doIf"><block s="reportGreaterThan"><block var="beats"/><l>16</l></block><script><block s="doSetVar"><l>beats</l><l>16</l></block></script></block><block s="doIf"><block s="reportGreaterThan"><l>0</l><block var="beats"/></block><script><block s="doSetVar"><l>beats</l><l>0</l></block></script></block><block s="doSetVar"><l>beats</l><block s="reportRound"><block s="reportProduct"><block s="reportQuotient"><l>60000</l><block s="getTempo"></block></block><block var="beats"/></block><comment w="242" collapsed="false">BPM = tempo&#xD;60 * 1000/BPM = BPMS  beats per millisecond&#xD;beats = Duration in ms  = BPMS * number of beats</comment></block></block><block s="doRun"><block s="reifyReporter"><autolambda><block s="reportURL"><block s="reportJoinWords"><list><l>http://127.0.0.1:30061/hummingbird/out/playnote/</l><block var="note"/><l>/</l><block var="beats"/></list></block></block></autolambda><list></list></block><list></list></block><block s="doWait"><block s="reportQuotient"><block var="beats"/><l>1000</l></block><comment w="205" collapsed="false">block for number of seconds</comment></block></script></block-definition><block-definition s="micro:bit %&apos;device&apos; %&apos;dim&apos;" type="reporter" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true">Accelerometer (m/s²)<options>Accelerometer (m/s²)&#xD;Magnetometer (µT)</options></input><input type="%txt" readonly="true">X<options>X&#xD;Y&#xD;Z</options></input></inputs><script><block s="doIf"><block s="reportEquals"><block var="device"/><l>Accelerometer (m/s²)</l></block><script><block s="doSetVar"><l>device</l><l>Accelerometer</l></block></script></block><block s="doIf"><block s="reportEquals"><block var="device"/><l>Magnetometer (µT)</l></block><script><block s="doSetVar"><l>device</l><l>Magnetometer</l></block></script></block><block s="doReport"><block s="reportURL"><block s="reportJoinWords"><list><l>http://127.0.0.1:30061/hummingbird/in/</l><block var="device"/><l>/</l><block var="dim"/></list></block></block></block></script></block-definition><block-definition s="micro:bit Button %&apos;button&apos;" type="predicate" category="sensing"><header></header><code></code><translations>ko:micro:bit 버튼 _&#xD;de:micro:bit Knopf _&#xD;pt:micro:bit Tecla _&#xD;fr:micro:bit Bouton _&#xD;nl:micro:bit Knop _&#xD;zh_CN:micro:bit 按钮 _&#xD;zh_TW:micro:bit 按鈕 _&#xD;ar:micro:bit زر _&#xD;dk:micro:bit Knap _&#xD;he:micro:bit לחצן  _&#xD;es:micro:bit Pulsador _&#xD;ca:micro:bit Botó _&#xD;fi:micro:bit Painike _&#xD;sv:micro:bit Knapp _&#xD;</translations><inputs><input type="%txt" readonly="true">A<options>A&#xD;B</options></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block s="reportURL"><block s="reportJoinWords"><list><l>http://127.0.0.1:30061/hummingbird/in/button/</l><block var="button"/></list></block></block><l>true</l></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block-definition><block-definition s="micro:bit Compass" type="reporter" category="sensing"><header></header><code></code><translations>ko:micro:bit 나침반 센서&#xD;de:micro:bit Kompass&#xD;pt:micro:bit Bússola&#xD;fr:micro:bit Compas&#xD;nl:micro:bit Kompas&#xD;zh_CN:micro:bit 指南针&#xD;zh_TW:micro:bit 指南針&#xD;ar:micro:bit بوصلة&#xD;dk:micro:bit Kompas&#xD;he:micro:bit מצפן&#xD;es:micro:bit Brujula&#xD;ca:micro:bit Brúixola&#xD;fi:micro:bit Kompassi&#xD;sv:micro:bit Kompass&#xD;</translations><inputs></inputs><script><block s="doReport"><block s="reportURL"><block s="reportJoinWords"><list><l>http://127.0.0.1:30061/hummingbird/in/</l><l>Compass</l></list></block></block></block></script></block-definition><block-definition s="micro:bit %&apos;dim&apos;" type="predicate" category="sensing"><header></header><code></code><translations></translations><inputs><input type="%txt" readonly="true">Screen Up<options>Screen Up&#xD;Screen Down&#xD;Tilt Left&#xD;Tilt Right&#xD;Logo Up&#xD;Logo Down&#xD;Shake</options></input></inputs><script><block s="doIfElse"><block s="reportEquals"><block s="reportURL"><block s="reportJoinWords"><list><l>http://127.0.0.1:30061/hummingbird/in/orientation/</l><block var="dim"/></list></block></block><l>true</l></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block></script></block-definition><block-definition s="stop all" type="command" category="control"><header></header><code></code><translations>ko:모두 멈추기&#xD;de:stoppe alles&#xD;pt:pare todos&#xD;fr:stop tout&#xD;nl:stop alle&#xD;zh_CN:停止 全部&#xD;zh_TW:停止 全部&#xD;ar:توقف الكل&#xD;dk:stop alle&#xD;he:להפסיק הכל&#xD;es:detener todo&#xD;ca:atura tot&#xD;fi:pysäytä kaikki&#xD;sv:stop allt&#xD;</translations><inputs></inputs><script><block s="doReport"><block s="reportURL"><block s="reportJoinWords"><list><l>http://127.0.0.1:30061/hummingbird/out/stopall</l></list></block></block></block></script></block-definition><block-definition s="Hummingbird Position Servo %&apos;port&apos; %&apos;position&apos; °" type="command" category="motion"><header></header><code></code><translations>ko:Hummingbird 위치 제어 서보 _ _ °&#xD;de:Hummingbird Position Servo _ _ °&#xD;pt:Hummingbird Posição do Servo _ _ °&#xD;fr:Hummingbird Position Servo _ _ °&#xD;nl:Hummingbird Positie-Servo _ _ °&#xD;zh_CN:Hummingbird 位置伺服 _ _ °&#xD;zh_TW:Hummingbird 位置伺服 _ _ °&#xD;ar:Hummingbird موقف محرك سيرفو المؤازر  _ _&#xD;dk:Hummingbird Positionsservo _ _ °&#xD;he:Hummingbird סרוו כיוון     _ _&#xD;es:Hummingbird Servo de posicion _ _ °&#xD;ca:Hummingbird Servo posicional _ _ °&#xD;fi:Hummingbird Asentoservo _ _ °&#xD;sv:Hummingbird Positionsservo _ _ °&#xD;</translations><inputs><input type="%n" readonly="true">1<options>1&#xD;2&#xD;3&#xD;4</options></input><input type="%n">90</input></inputs><script><block s="doIf"><block s="reportLessThan"><block var="position"/><l>0</l></block><script><block s="doSetVar"><l>position</l><l>0</l></block></script></block><block s="doIf"><block s="reportGreaterThan"><block var="position"/><l>180</l></block><script><block s="doSetVar"><l>position</l><l>180</l></block></script></block><block s="doSetVar"><l>position</l><block s="reportRound"><block s="reportProduct"><block var="position"/><l>1.41</l></block></block><comment w="228" collapsed="false">254/180 Scaling Factor</comment></block><block s="doRun"><block s="reportJSFunction"><list><l>portnum</l><l>position</l></list><l>var realPort = portnum-1;&#xD;////////////////////////////////////////////////////////////////////////////////&#xD;// In order to avoid sending more messages than the app can handle, whenever we&#xD;// send a message we also save it in a persistent global variable. When the&#xD;// message is processed in the app, the callback checks if the global variable&#xD;// still matches what it was changed to. If it was, it deletes the global&#xD;// variable. Otherwise the message is resent with new data.&#xD;//&#xD;// When this block is called it checks if the global value has been set. If it&#xD;// has, it sends a message. Otherwise it just updates the value and lets the&#xD;// callback handle it.&#xD;&#xD;&#xD;// We can&apos;t run code beforehand to define values so we must check each block&#xD;// call if they are set.&#xD;if (window.birdbrain === undefined || window.birdbrain.servos === undefined) {&#xD;    window.birdbrain = window.birdbrain || {};&#xD;    window.birdbrain.servos = {&#xD;        // By attaching this function to a global variable, it is only&#xD;        // defined once instead of every time this block is called, improving&#xD;        // performance significantly.&#xD;        setServoAngle: function (port, angle) {&#xD;            function callback() {&#xD;                if (window.birdbrain.servos[port] === angle) {&#xD;                    delete window.birdbrain.servos[port];&#xD;                }&#xD;                else {&#xD;                    window.birdbrain.servos.setServoAngle(port, window.birdbrain.servos[port]);&#xD;                }&#xD;            }&#xD;&#xD;            //Create a new XMLHttpRequest object&#xD;            var xhr = new XMLHttpRequest();&#xD;            var actualPort = port+1;         &#xD;            var thisURL = "http://127.0.0.1:30061/hummingbird/out/servo/" + actualPort + "/" + angle;&#xD;            //console.log("thisURL: " + thisURL);&#xD;            xhr.open("GET", thisURL, true);&#xD;            xhr.onload = function (e) {&#xD;              if (xhr.readyState === 4) {&#xD;                if (xhr.status === 200) {&#xD;                  callback();&#xD;                } else {&#xD;                  console.error(xhr.statusText);&#xD;                }&#xD;              }&#xD;            };&#xD;            xhr.onerror = function (e) {&#xD;              console.error(xhr.statusText);&#xD;            };&#xD;            xhr.send(null);          &#xD;            &#xD;        }&#xD;    };&#xD;}&#xD;&#xD;//var realAngle = Math.floor(ang*1.25);&#xD;&#xD;//realAngle = Math.max(Math.min(realAngle,225.0),0.0);&#xD;&#xD;if (window.birdbrain.servos[realPort] === undefined) {&#xD;    window.birdbrain.servos.setServoAngle(realPort, position);&#xD;}&#xD;&#xD;window.birdbrain.servos[realPort] = position;</l></block><list><block var="port"/><block var="position"/></list></block><block s="doWait"><l>0</l></block></script><scripts><script x="187.14285714285717" y="82.28571428571428"><block s="doReport"><block s="reportURL"><block s="reportJoinWords"><list><l>http://127.0.0.1:30061/hummingbird/out/servo/</l><l></l><l>/</l><l></l></list></block></block></block></script></scripts></block-definition><block-definition s="Hummingbird Rotation Servo %&apos;port&apos; %&apos;speed&apos; %" type="command" category="motion"><header></header><code></code><translations>ko:Hummingbird 회전속도 제어 서보 _ _ %&#xD;de:Hummingbird Drehung Servo _ _ %&#xD;pt:Hummingbird Rotação do Servo _ _ %&#xD;fr:Hummingbird Rotation Servo _ _ %&#xD;nl:Hummingbird Draai-Servo _ _ %&#xD;zh_CN:Hummingbird 旋转伺服 _ _ %&#xD;zh_TW:Hummingbird 旋轉伺服 _ _ %&#xD;ar:Hummingbird فتحة دوران المحرك المؤازر  _ _&#xD;dk:Hummingbird Rotationsservo _ _ %&#xD;he:Hummingbird סרוו סיבובים    _ _ %&#xD;es:Hummingbird Servo de rotacion _ _ %&#xD;ca:Hummingbird Servo rotacional _ _ %&#xD;fi:Hummingbird Kiertoservo _ _ %&#xD;sv:Hummingbird Rotationsservo _ _ %&#xD;</translations><inputs><input type="%n" readonly="true">1<options>1&#xD;2&#xD;3&#xD;4</options></input><input type="%n">0</input></inputs><script><block s="doIf"><block s="reportLessThan"><block var="speed"/><l>-100</l></block><script><block s="doSetVar"><l>speed</l><l>-100</l></block></script></block><block s="doIf"><block s="reportGreaterThan"><block var="speed"/><l>100</l></block><script><block s="doSetVar"><l>speed</l><l>100</l></block></script></block><block s="doIfElse"><block s="reportAnd"><block s="reportGreaterThan"><block var="speed"/><l>-10</l></block><block s="reportLessThan"><block var="speed"/><l>10</l></block></block><script><block s="doSetVar"><l>speed</l><l>255</l></block></script><script><block s="doSetVar"><l>speed</l><block s="reportRound"><block s="reportSum"><block s="reportQuotient"><block s="reportProduct"><block var="speed"/><l>23</l></block><l>100</l></block><l>122</l></block></block></block></script></block><block s="doRun"><block s="reportJSFunction"><list><l>portnum</l><l>speed</l></list><l>var realPort = portnum-1;&#xD;////////////////////////////////////////////////////////////////////////////////&#xD;// In order to avoid sending more messages than the app can handle, whenever we&#xD;// send a message we also save it in a persistent global variable. When the&#xD;// message is processed in the app, the callback checks if the global variable&#xD;// still matches what it was changed to. If it was, it deletes the global&#xD;// variable. Otherwise the message is resent with new data.&#xD;//&#xD;// When this block is called it checks if the global value has been set. If it&#xD;// has, it sends a message. Otherwise it just updates the value and lets the&#xD;// callback handle it.&#xD;&#xD;&#xD;// We can&apos;t run code beforehand to define values so we must check each block&#xD;// call if they are set.&#xD;if (window.birdbrain === undefined || window.birdbrain.rotationServos === undefined) {&#xD;    window.birdbrain = window.birdbrain || {};&#xD;    window.birdbrain.rotationServos = {&#xD;        // By attaching this function to a global variable, it is only&#xD;        // defined once instead of every time this block is called, improving&#xD;        // performance significantly.&#xD;        setServoSpeed: function (port, speed) {&#xD;            function callback() {&#xD;                if (window.birdbrain.rotationServos[port] === speed) {&#xD;                    delete window.birdbrain.rotationServos[port];&#xD;                }&#xD;                else {&#xD;                    window.birdbrain.rotationServos.setServoSpeed(port, window.birdbrain.rotationServos[port]);&#xD;                }&#xD;            }&#xD;&#xD;            //Create a new XMLHttpRequest object&#xD;            var xhr = new XMLHttpRequest();&#xD;            var actualPort = port+1;         &#xD;            var thisURL = "http://127.0.0.1:30061/hummingbird/out/rotation/" + actualPort + "/" + speed;&#xD;            //console.log("thisURL: " + thisURL);&#xD;            xhr.open("GET", thisURL, true);&#xD;            xhr.onload = function (e) {&#xD;              if (xhr.readyState === 4) {&#xD;                if (xhr.status === 200) {&#xD;                  callback();&#xD;                } else {&#xD;                  console.error(xhr.statusText);&#xD;                }&#xD;              }&#xD;            };&#xD;            xhr.onerror = function (e) {&#xD;              console.error(xhr.statusText);&#xD;            };&#xD;            xhr.send(null);          &#xD;            &#xD;        }&#xD;    };&#xD;}&#xD;&#xD;if (window.birdbrain.rotationServos[realPort] === undefined) {&#xD;    window.birdbrain.rotationServos.setServoSpeed(realPort, speed);&#xD;}&#xD;&#xD;window.birdbrain.rotationServos[realPort] = speed;</l></block><list><block var="port"/><block var="speed"/></list></block></script></block-definition><block-definition s="Hummingbird LED %&apos;port&apos; %&apos;intensity&apos; %" type="command" category="looks"><header></header><code></code><translations>ko:Hummingbird LED _ _ %&#xD;de:Hummingbird LED _ _ %&#xD;pt:Hummingbird LED _ _ %&#xD;fr:Hummingbird LED _ _ %&#xD;nl:Hummingbird LED _ _ %&#xD;zh_CN:Hummingbird LED _ _ %&#xD;zh_TW:Hummingbird LED _ _ %&#xD;ar:Hummingbird ضوء _ _&#xD;dk:Hummingbird LED _ _ %&#xD;he:Hummingbird לד   % _ _&#xD;es:Hummingbird LED _ _ %&#xD;ca:Hummingbird LED _ _ %&#xD;fi:Hummingbird LED _ _ %&#xD;sv:Hummingbird LED _ _ %&#xD;</translations><inputs><input type="%n" readonly="true">1<options>1&#xD;2&#xD;3</options></input><input type="%n">0</input></inputs><script><block s="doIf"><block s="reportLessThan"><block var="intensity"/><l>0</l></block><script><block s="doSetVar"><l>intensity</l><l>0</l></block></script></block><block s="doIf"><block s="reportGreaterThan"><block var="intensity"/><l>100</l></block><script><block s="doSetVar"><l>intensity</l><l>100</l></block></script></block><block s="doRun"><block s="reportJSFunction"><list><l>portnum,intensitynum</l></list><l>//var hummingbirdAppID = "lfloofocohhfeeoohpokmljiinfmpenj";&#xD;var realPort = portnum-1;&#xD;////////////////////////////////////////////////////////////////////////////////&#xD;// In order to avoid sending more messages than the app can handle, whenever we&#xD;// send a message we also save it in a persistent global variable. When the&#xD;// message is processed in the app, the callback checks if the global variable&#xD;// still matches what it was changed to. If it was, it deletes the global&#xD;// variable. Otherwise the message is resent with new data.&#xD;//&#xD;// When this block is called it checks if the global value has been set. If it&#xD;// has, it sends a message. Otherwise it just updates the value and lets the&#xD;// callback handle it.&#xD;&#xD;&#xD;// We can&apos;t run code beforehand to define values so we must check each block&#xD;// call if they are set.&#xD;if (window.birdbrain === undefined || window.birdbrain.LEDs === undefined) {&#xD;    window.birdbrain = window.birdbrain || {};&#xD;    window.birdbrain.LEDs = {&#xD;        // By attaching this function to a global variable, it is only&#xD;        // defined once instead of every time this block is called, improving&#xD;        // performance significantly.&#xD;        setLEDIntensity: function(port, intensity) {&#xD;            function callback() {&#xD;                if (window.birdbrain.LEDs[port] === intensity) {&#xD;                    delete window.birdbrain.LEDs[port];&#xD;                }&#xD;                else {&#xD;                    window.birdbrain.LEDs.setLEDIntensity(port, window.birdbrain.LEDs[port]);&#xD;                }&#xD;            }&#xD;            /*&#xD;            var report = {&#xD;                message:"L".charCodeAt(0),&#xD;                port: port.toString().charCodeAt(0),&#xD;                intensity: intensity&#xD;            };&#xD;            chrome.runtime.sendMessage(hummingbirdAppID, report, callback);&#xD;            */&#xD;&#xD;            //Create a new XMLHttpRequest object&#xD;            var xhr = new XMLHttpRequest();&#xD;            var actualPort = port+1;&#xD;            var ledURL = "http://127.0.0.1:30061/hummingbird/out/led/" + actualPort + "/" + intensity;&#xD;            xhr.open("GET", ledURL, true);&#xD;            xhr.onload = function (e) {&#xD;              if (xhr.readyState === 4) {&#xD;                if (xhr.status === 200) {&#xD;                  callback();&#xD;                } else {&#xD;                  console.error(xhr.statusText);&#xD;                }&#xD;              }&#xD;            };&#xD;            xhr.onerror = function (e) {&#xD;              console.error(xhr.statusText);&#xD;            };&#xD;            xhr.send(null);&#xD;&#xD;        }&#xD;    }&#xD;}&#xD;&#xD;var realIntensity = Math.floor(intensitynum*2.55);&#xD;&#xD;realIntensity = Math.max(Math.min(realIntensity,255.0),0.0);&#xD;&#xD;if (window.birdbrain.LEDs[realPort] === undefined) {&#xD;  window.birdbrain.LEDs.setLEDIntensity(realPort, realIntensity);&#xD;}&#xD;&#xD;window.birdbrain.LEDs[realPort] = realIntensity;</l></block><list><block var="port"/><block var="intensity"/></list></block><block s="doWait"><l>0</l></block></script><scripts><script x="396.42857142857144" y="46.57142857142853"><block s="doReport"><block s="reportURL"><block s="reportJoinWords"><list><l>http://127.0.0.1:30061/hummingbird/out/led/</l><block var="port"/><l>/</l><block var="intensity"/></list></block></block></block></script><script x="396.42857142857144" y="100.28571428571436"><block s="doSetVar"><l>intensity</l><block s="reportRound"><block s="reportProduct"><block var="intensity"/><l>2.55</l><comment w="90" collapsed="false">Scale factor 255/100</comment></block></block></block></script></scripts></block-definition><block-definition s="Hummingbird Tri-LED %&apos;port&apos; R %&apos;redLED&apos; % G %&apos;greenLED&apos; % B %&apos;blueLED&apos; %" type="command" category="looks"><header></header><code></code><translations>ko:Hummingbird 삼색 LED _ 빨강 _ % 초록 _ % 파랑 _ %&#xD;de:Hummingbird Dreifarben-LED _ R _ % G _ % B _ %&#xD;pt:Hummingbird LED Tricolor _ R _ % G _ % B _ %&#xD;fr:Hummingbird Tri-LED _ R _ % G _ % B _ %&#xD;nl:Hummingbird Tri-LED _ R _ % G _ % B _ %&#xD;zh_CN:Hummingbird 三色LED _ 红 _ % 绿 _ % 蓝 _ %&#xD;zh_TW:Hummingbird 三色LED _ 紅 _ % 綠 _ % 藍 _ %&#xD;ar:Hummingbird ضوء الصمام الثلاثي  _ _ _ _&#xD;dk:Hummingbird Tri-LED _ R _ % G _ % B _ %&#xD;he:Hummingbird לד שלושה צבעים       % _ R   _   %  G _  %   B  _&#xD;es:Hummingbird Led tricolor _ R _ % G _ % B _ %&#xD;ca:Hummingbird Tri-LED _ vermell _ % verd _ % blau _ %&#xD;fi:Hummingbird Tri-LED _ R _ % G _ % B _ %&#xD;sv:Hummingbird Tri-LED _ R _ % G _ % B _ %&#xD;</translations><inputs><input type="%n" readonly="true">1<options>1&#xD;2</options></input><input type="%n">0</input><input type="%n">0</input><input type="%n">0</input></inputs><script><block s="doIf"><block s="reportLessThan"><block var="redLED"/><l>0</l></block><script><block s="doSetVar"><l>redLED</l><l>0</l></block></script></block><block s="doIf"><block s="reportGreaterThan"><block var="redLED"/><l>100</l></block><script><block s="doSetVar"><l>redLED</l><l>100</l></block></script></block><block s="doIf"><block s="reportLessThan"><block var="greenLED"/><l>0</l></block><script><block s="doSetVar"><l>greenLED</l><l>0</l></block></script></block><block s="doIf"><block s="reportGreaterThan"><block var="greenLED"/><l>100</l></block><script><block s="doSetVar"><l>greenLED</l><l>100</l></block></script></block><block s="doIf"><block s="reportLessThan"><block var="blueLED"/><l>0</l></block><script><block s="doSetVar"><l>blueLED</l><l>0</l></block></script></block><block s="doIf"><block s="reportGreaterThan"><block var="blueLED"/><l>100</l></block><script><block s="doSetVar"><l>blueLED</l><l>100</l></block></script></block><block s="doRun"><block s="reportJSFunction"><list><l>portnum</l><l>rednum</l><l>greennum</l><l>bluenum</l></list><l>var realPort = portnum-1;&#xD;////////////////////////////////////////////////////////////////////////////////&#xD;// In order to avoid sending more messages than the app can handle, whenever we&#xD;// send a message we also save it in a persistent global variable. When the&#xD;// message is processed in the app, the callback checks if the global variable&#xD;// still matches what it was changed to. If it was, it deletes the global&#xD;// variable. Otherwise the message is resent with new data.&#xD;//&#xD;// When this block is called it checks if the global value has been set. If it&#xD;// has, it sends a message. Otherwise it just updates the value and lets the&#xD;// callback handle it.&#xD;&#xD;&#xD;// We can&apos;t run code beforehand to define values so we must check each block&#xD;// call if they are set.&#xD;if (window.birdbrain === undefined || window.birdbrain.triLEDs === undefined) {&#xD;    window.birdbrain = window.birdbrain || {};&#xD;    window.birdbrain.triLEDs = {&#xD;        // By attaching this function to a global variable, it is only&#xD;        // defined once instead of every time this block is called, improving&#xD;        // performance significantly.&#xD;        setLEDIntensities: function(port, intensities) {&#xD;            function callback() {&#xD;                if (JSON.stringify(window.birdbrain.triLEDs[port]) === JSON.stringify(intensities)) {&#xD;                    delete window.birdbrain.triLEDs[port];&#xD;                }&#xD;                else {&#xD;                    window.birdbrain.triLEDs.setLEDIntensities(port, window.birdbrain.triLEDs[port]);&#xD;                }&#xD;            }&#xD;&#xD;            //Create a new XMLHttpRequest object&#xD;            var xhr = new XMLHttpRequest();&#xD;            var actualPort = port+1;&#xD;            /*  Note RGB:&#xD;                red: intensities[0],&#xD;                green: intensities[1],&#xD;                blue: intensities[2]  &#xD;            */&#xD;            &#xD;            var thisURL = "http://127.0.0.1:30061/hummingbird/out/triled/" + actualPort + "/" + intensities[0] + "/" + intensities[1] + "/" + intensities[2];&#xD;            //console.log("thisURL: " + thisURL);&#xD;            xhr.open("GET", thisURL, true);&#xD;            xhr.onload = function (e) {&#xD;              if (xhr.readyState === 4) {&#xD;                if (xhr.status === 200) {&#xD;                  callback();&#xD;                } else {&#xD;                  console.error(xhr.statusText);&#xD;                }&#xD;              }&#xD;            };&#xD;            xhr.onerror = function (e) {&#xD;              console.error(xhr.statusText);&#xD;            };&#xD;            xhr.send(null);&#xD;        }&#xD;    }&#xD;}&#xD;&#xD;var realIntensities = [rednum, greennum, bluenum].map(function(intensity) {&#xD;    return Math.floor(Math.max(Math.min(intensity*2.55, 255), 0));&#xD;});&#xD;&#xD;if (window.birdbrain.triLEDs[realPort] === undefined) {&#xD;    window.birdbrain.triLEDs.setLEDIntensities(realPort, realIntensities);&#xD;}&#xD;&#xD;window.birdbrain.triLEDs[realPort] = realIntensities;&#xD;</l></block><list><block var="port"/><block var="redLED"/><block var="greenLED"/><block var="blueLED"/></list></block><block s="doWait"><l>0</l></block></script><scripts><script x="251.42857142857144" y="108.85714285714293"><block s="doSetVar"><l>redLED</l><block s="reportRound"><block s="reportProduct"><block var="redLED"/><l>2.55</l><comment w="90" collapsed="false">Scale factor 255/100</comment></block></block></block><block s="doSetVar"><l>blueLED</l><block s="reportRound"><block s="reportProduct"><block var="blueLED"/><l>2.55</l><comment w="90" collapsed="false">Scale factor 255/100</comment></block></block></block><block s="doSetVar"><l>greenLED</l><block s="reportRound"><block s="reportProduct"><block var="greenLED"/><l>2.55</l><comment w="90" collapsed="false">Scale factor 255/100</comment></block></block></block><block s="doReport"><block s="reportURL"><block s="reportJoinWords"><list><l>http://127.0.0.1:30061/hummingbird/out/triled/</l><l></l><l>/</l><l></l><l>/</l><l></l><l>/</l><l></l></list></block></block></block></script></scripts></block-definition><block-definition s="micro:bit Print %&apos;string&apos;" type="command" category="looks"><header></header><code></code><translations>ko:micro:bit 출력 _&#xD;de:micro:bit Drucke _&#xD;pt:micro:bit Imprimir _&#xD;fr:micro:bit Imprimer _&#xD;nl:micro:bit Schrijf _&#xD;zh_CN:micro:bit 打印 _&#xD;zh_TW:micro:bit 打印 _&#xD;ar:micro:bit طباعة _&#xD;dk:micro:bit Vis _&#xD;he:micro:bit הדפס  _&#xD;es:micro:bit Imprimir _&#xD;ca:micro:bit Escriu _&#xD;fi:micro:bit Näytä teksti _&#xD;sv:micro:bit Visa text _&#xD;</translations><inputs><input type="%txt">Hello</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>string</l></list><l>////////////////////////////////////////////////////////////////////////////////&#xD;// In order to avoid sending more messages than the app can handle, whenever we&#xD;// send a message we also save it in a persistent global variable. When the&#xD;// message is processed in the app, the callback checks if the global variable&#xD;// still matches what it was changed to. If it was, it deletes the global&#xD;// variable. Otherwise the message is resent with new data.&#xD;//&#xD;// When this block is called it checks if the global value has been set. If it&#xD;// has, it sends a message. Otherwise it just updates the value and lets the&#xD;// callback handle it.&#xD;&#xD;// Encode any special characters in the URL&#xD;string = encodeURIComponent(string);&#xD;&#xD;&#xD;// We can&apos;t run code beforehand to define values so we must check each block&#xD;// call if they are set.&#xD;if (window.birdbrain === undefined || window.birdbrain.printObj === undefined) {&#xD;    window.birdbrain = window.birdbrain || {};&#xD;    window.birdbrain.printObj = {&#xD;        // By attaching this function to a global variable, it is only&#xD;        // defined once instead of every time this block is called, improving&#xD;        // performance significantly.&#xD;        printString: function(string) {&#xD;            function callback() {&#xD;                if (window.birdbrain.printObj.stringToPrint === string) {&#xD;                    delete window.birdbrain.printObj.stringToPrint;&#xD;                }&#xD;                else {&#xD;                    window.birdbrain.printObj.printString(window.birdbrain.printObj.stringToPrint);&#xD;                }&#xD;            }&#xD;            /*&#xD;            var report = {&#xD;                message:"L".charCodeAt(0),&#xD;                port: port.toString().charCodeAt(0),&#xD;                intensity: intensity&#xD;            };&#xD;            chrome.runtime.sendMessage(hummingbirdAppID, report, callback);&#xD;            */&#xD;&#xD;            //Create a new XMLHttpRequest object&#xD;            var xhr = new XMLHttpRequest();&#xD;            var printURL = "http://127.0.0.1:30061/hummingbird/out/print/" + string;&#xD;            xhr.open("GET", printURL, true);&#xD;            xhr.onload = function (e) {&#xD;              if (xhr.readyState === 4) {&#xD;                if (xhr.status === 200) {&#xD;                  callback();&#xD;                } else {&#xD;                  console.error(xhr.statusText);&#xD;                }&#xD;              }&#xD;            };&#xD;            xhr.onerror = function (e) {&#xD;              console.error(xhr.statusText);&#xD;            };&#xD;            xhr.send(null);&#xD;&#xD;        }&#xD;    }&#xD;}&#xD;&#xD;//TODO Turn &apos;/&apos; chars into % &#xD;&#xD;if (window.birdbrain.printObj.stringToPrint === undefined) {&#xD;  window.birdbrain.printObj.printString(string);&#xD;}&#xD;&#xD;window.birdbrain.printObj.stringToPrint = string;</l></block><list><block var="string"/></list></block><block s="doWait"><l>0</l></block></script><scripts><script x="310.9999990000001" y="47"><block s="doReport"><block s="reportURL"><block s="reportJoinWords"><list><l>http://127.0.0.1:30061/hummingbird/out/print/</l><block var="string"/></list></block></block></block></script><script x="335" y="1024.8333343333334"><block var="intensity"/></script></scripts></block-definition><block-definition s="micro:bit Display $nl %&apos;r1c1&apos; %&apos;r1c2&apos; %&apos;r1c3&apos; %&apos;r1c4&apos; %&apos;r1c5&apos; $nl %&apos;r2c1&apos; %&apos;r2c2&apos; %&apos;r2c3&apos; %&apos;r2c4&apos; %&apos;r2c5&apos; $nl %&apos;r3c1&apos; %&apos;r3c2&apos; %&apos;r3c3&apos; %&apos;r3c4&apos; %&apos;r3c5&apos; $nl %&apos;r4c1&apos; %&apos;r4c2&apos; %&apos;r4c3&apos; %&apos;r4c4&apos; %&apos;r4c5&apos; $nl %&apos;r5c1&apos; %&apos;r5c2&apos; %&apos;r5c3&apos; %&apos;r5c4&apos; %&apos;r5c5&apos;" type="command" category="looks"><header></header><code></code><translations>ko:micro:bit 보이기 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;de:micro:bit LED Anzeige _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;pt:micro:bit Visor _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;fr:micro:bit Display _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;nl:micro:bit Scherm _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;zh_CN:micro:bit 显示 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;zh_TW:micro:bit 顯示 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;ar:micro:bit عرض _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;dk:micro:bit Display _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;he:micro:bit מסך _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;es:micro:bit Monitor _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;ca:micro:bit Pantalla _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;fi:micro:bit Näytä _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;sv:micro:bit Skärm _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _&#xD;</translations><inputs><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input><input type="%b">false</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>r1c1, r1c2, r1c3, r1c4, r1c5, r2c1, r2c2, r2c3, r2c4, r2c5, r3c1, r3c2, r3c3, r3c4, r3c5, r4c1, r4c2, r4c3, r4c4, r4c5, r5c1, r5c2, r5c3, r5c4, r5c5 </l></list><l>////////////////////////////////////////////////////////////////////////////////&#xD;// In order to avoid sending more messages than the app can handle, whenever we&#xD;// send a message we also save it in a persistent global variable. When the&#xD;// message is processed in the app, the callback checks if the global variable&#xD;// still matches what it was changed to. If it was, it deletes the global&#xD;// variable. Otherwise the message is resent with new data.&#xD;//&#xD;// When this block is called it checks if the global value has been set. If it&#xD;// has, it sends a message. Otherwise it just updates the value and lets the&#xD;// callback handle it.&#xD;&#xD;// Create url representation from inputs&#xD;var symbolString =  r1c1 + "\/"+ r1c2 + "\/"+ r1c3 + "\/"+ r1c4 + "\/"+ r1c5 + "\/" +&#xD;                    r2c1 + "\/"+ r2c2 + "\/"+ r2c3 + "\/"+ r2c4 + "\/"+ r2c5 + "\/" +&#xD;                    r3c1 + "\/"+ r3c2 + "\/"+ r3c3 + "\/"+ r3c4 + "\/"+ r3c5 + "\/" +&#xD;                    r4c1 + "\/"+ r4c2 + "\/"+ r4c3 + "\/"+ r4c4 + "\/"+ r4c5 + "\/" +&#xD;                    r5c1 + "\/"+ r5c2 + "\/"+ r5c3 + "\/"+ r5c4 + "\/"+ r5c5 ;&#xD;&#xD;//r1c1, r1c2, r1c3, r1c4, r1c5, r2c1, r2c2, r2c3, r2c4, r2c5, r3c1, r3c2, r3c3, r3c4, r3c5, r4c1, r4c2, r4c3, r4c4, r4c5, r5c1, r5c2, r5c3, r5c4, r5c5 &#xD;&#xD;// We can&apos;t run code beforehand to define values so we must check each block&#xD;// call if they are set.&#xD;if (window.birdbrain === undefined || window.birdbrain.symbolObj === undefined) {&#xD;    window.birdbrain = window.birdbrain || {};&#xD;    window.birdbrain.symbolObj = {&#xD;        // By attaching this function to a global variable, it is only&#xD;        // defined once instead of every time this block is called, improving&#xD;        // performance significantly.&#xD;        printSymbol: function(symbol) {&#xD;            function callback() {&#xD;                if (window.birdbrain.symbolObj.symbolToPrint === symbol) {  // Check if arrays are equal&#xD;                    delete window.birdbrain.symbolObj.symbolToPrint;&#xD;                }&#xD;                else {&#xD;                    window.birdbrain.symbolObj.printSymbol(window.birdbrain.symbolObj.symbolToPrint);&#xD;                }&#xD;            }&#xD;&#xD;            //Create a new XMLHttpRequest object&#xD;            var xhr = new XMLHttpRequest();&#xD;            var symbolURL = "http://127.0.0.1:30061/hummingbird/out/symbol/A/" + symbol;&#xD;            xhr.open("GET", symbolURL, true);&#xD;            xhr.onload = function (e) {&#xD;              if (xhr.readyState === 4) {&#xD;                if (xhr.status === 200) {&#xD;                  callback();&#xD;                } else {&#xD;                  console.error(xhr.statusText);&#xD;                }&#xD;              }&#xD;            };&#xD;            xhr.onerror = function (e) {&#xD;              console.error(xhr.statusText);&#xD;            };&#xD;            xhr.send(null);&#xD;&#xD;        }&#xD;    }&#xD;}&#xD;&#xD;if (window.birdbrain.symbolObj.symbolToPrint === undefined) {&#xD;  window.birdbrain.symbolObj.printSymbol(symbolString);&#xD;}&#xD;&#xD;window.birdbrain.symbolObj.symbolToPrint = symbolString;&#xD;&#xD;&#xD;</l></block><list><block var="r1c1"/><block var="r1c2"/><block var="r1c3"/><block var="r1c4"/><block var="r1c5"/><block var="r2c1"/><block var="r2c2"/><block var="r2c3"/><block var="r2c4"/><block var="r2c5"/><block var="r3c1"/><block var="r3c2"/><block var="r3c3"/><block var="r3c4"/><block var="r3c5"/><block var="r4c1"/><block var="r4c2"/><block var="r4c3"/><block var="r4c4"/><block var="r4c5"/><block var="r5c1"/><block var="r5c2"/><block var="r5c3"/><block var="r5c4"/><block var="r5c5"/></list></block><block s="doWait"><l></l></block></script><scripts><script x="731" y="16"><block s="doReport"><block s="reportURL"><block s="reportJoinWords"><list><l>http://127.0.0.1:30061/hummingbird/out/symbol/A/</l><block var="11"/><l>/</l><block var="12"/><l>/</l><block var="r1c3"/><l>/</l><block var="r1c4"/><l>/</l><block var="r1c5"/><l>/</l><block var="r2c1"/><l>/</l><block var="r2c2"/><l>/</l><block var="r2c3"/><l>/</l><block var="r2c4"/><l>/</l><block var="25"/><l>/</l><block var="31"/><l>/</l><block var="r3c2"/><l>/</l><block var="33"/><l>/</l><block var="34"/><l>/</l><block var="35"/><l>/</l><block var="41"/><l>/</l><block var="42"/><l>/</l><block var="43"/><l>/</l><block var="44"/><l>/</l><block var="45"/><l>/</l><block var="51"/><l>/</l><block var="52"/><l>/</l><block var="53"/><l>/</l><block var="54"/><l>/</l><block var="55"/></list></block></block></block></script></scripts></block-definition><block-definition s="$flash analyze %&apos;data&apos;" type="reporter" category="lists"><comment x="0" y="0" w="149" collapsed="false">returns a frequency analysis of the argument list, represented as a two-column table, where the first column contains the unique values and the second column their occurrences</comment><header></header><code></code><translations>pt:$flash as frequências dos itens de _&#xD;</translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>list</l></list><l>var dict = new Map(),&#xD;    result = [],&#xD;    data = list.itemsArray(),&#xD;    len = data.length,&#xD;    i;&#xD;for (i = 0; i &lt; len; i += 1) {&#xD;    if (dict.has(data[i])) {&#xD;        dict.set(data[i], dict.get(data[i]) + 1);&#xD;    } else {&#xD;        dict.set(data[i], 1);&#xD;    }&#xD;}&#xD;dict.forEach(function (value, key) {&#xD;    result.push(new List([key, value]));&#xD;});&#xD;return new List(result);</l></block><list><block var="data"/></list></block></block></script></block-definition><block-definition s="$flash group %&apos;data&apos; by %&apos;fn&apos;" type="reporter" category="lists"><header></header><code></code><translations>pt:o agrupamento dos itens de _ de acordo com _&#xD;</translations><inputs><input type="%l"></input><input type="%repRing"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>fn</l><l>proc</l></list><l>return proc.reportAtomicGroup(data, fn);</l></block><list><block var="data"/><block var="fn"/></list></block></block></script></block-definition><block-definition s="$flash sort %&apos;data&apos; by %&apos;fn&apos;" type="reporter" category="lists"><header></header><code></code><translations>pt:uma ordenação de _ com critério _&#xD;</translations><inputs><input type="%l"></input><input type="%predRing"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>fn</l><l>proc</l></list><l>return proc.reportAtomicSort(data, fn);</l></block><list><block var="data"/><block var="fn"/></list></block></block></script></block-definition><block-definition s="histogram of %&apos;data&apos; from: %&apos;floor&apos; to: %&apos;ceiling&apos; interval: %&apos;interval&apos;" type="reporter" category="lists"><header></header><code></code><translations>pt:o histograma de _ entre _ e _ com intervalo _&#xD;</translations><inputs><input type="%l"></input><input type="%n"></input><input type="%n"></input><input type="%n">1</input></inputs><script><block s="doReport"><custom-block s="fill %l key: %repRing from: %n to: %n interval: %repRing with: %repRing"><custom-block s="$flash sort %l by %predRing"><custom-block s="$flash analyze %l"><block var="data"/></custom-block><block s="reifyPredicate"><autolambda><block s="reportLessThan"><block s="reportListItem"><l>1</l><l/></block><block s="reportListItem"><l>1</l><l/></block></block></autolambda><list></list></block></custom-block><block s="reifyReporter"><autolambda><block s="reportListItem"><l>1</l><l/></block></autolambda><list></list></block><block var="floor"/><block var="ceiling"/><block s="reifyReporter"><autolambda><block s="reportSum"><l></l><block var="interval"/></block></autolambda><list></list></block><block s="reifyReporter"><autolambda><block s="reportNewList"><list><l></l><l>0</l></list></block></autolambda><list></list></block></custom-block></block></script></block-definition><block-definition s="histogram of %&apos;data&apos; grouped by: %&apos;key&apos; from: %&apos;floor&apos; to: %&apos;ceiling&apos; interval: %&apos;interval&apos;" type="reporter" category="lists"><header></header><code></code><translations>pt:o histograma de _ agrupado de acordo com _ entre _ e _ com passo _&#xD;</translations><inputs><input type="%l"></input><input type="%repRing"></input><input type="%n"></input><input type="%n"></input><input type="%repRing"></input></inputs><script><block s="doReport"><custom-block s="fill %l key: %repRing from: %n to: %n interval: %repRing with: %repRing"><custom-block s="$flash sort %l by %predRing"><custom-block s="$flash group %l by %repRing"><block var="data"/><block var="key"/></custom-block><block s="reifyPredicate"><autolambda><block s="reportLessThan"><block s="reportListItem"><l>1</l><l/></block><block s="reportListItem"><l>1</l><l/></block></block></autolambda><list></list></block></custom-block><block s="reifyReporter"><autolambda><block s="reportListItem"><l>1</l><l/></block></autolambda><list></list></block><block var="floor"/><block var="ceiling"/><block var="interval"/><block s="reifyReporter"><autolambda><block s="reportNewList"><list><l></l><l>0</l><block s="reportNewList"><list></list></block></list></block></autolambda><list></list></block></custom-block></block></script></block-definition><block-definition s="fill %&apos;data&apos; key: %&apos;key&apos; from: %&apos;floor&apos; to: %&apos;ceiling&apos; interval: %&apos;interval&apos; with: %&apos;generator&apos;" type="reporter" category="lists"><comment x="0" y="0" w="103" collapsed="false">add missing entries to a sorted list. Used for histograms</comment><header></header><code></code><translations>pt:os itens de _ com a chave _ entre _ e _ com passo _ completados por _&#xD;</translations><inputs><input type="%l"></input><input type="%repRing"></input><input type="%n"></input><input type="%n"></input><input type="%repRing"></input><input type="%repRing"></input></inputs><script><block s="doIf"><block s="reportGreaterThan"><block var="floor"/><block var="ceiling"/></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="data"/><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block s="reportCONS"><block s="evaluate"><block var="generator"/><list><block var="floor"/></list></block><custom-block s="fill %l key: %repRing from: %n to: %n interval: %repRing with: %repRing"><block var="data"/><block var="key"/><block s="evaluate"><block var="interval"/><list><block var="floor"/></list></block><block var="ceiling"/><block var="interval"/><block var="generator"/></custom-block></block></block></script></block><block s="doIf"><block s="reportLessThan"><block s="evaluate"><block var="key"/><list><block s="reportListItem"><l>1</l><block var="data"/></block></list></block><block var="floor"/></block><script><block s="doReport"><custom-block s="fill %l key: %repRing from: %n to: %n interval: %repRing with: %repRing"><block s="reportCDR"><block var="data"/></block><block var="key"/><block var="floor"/><block var="ceiling"/><block var="interval"/><block var="generator"/></custom-block></block></script></block><block s="doIf"><block s="reportEquals"><block s="evaluate"><block var="key"/><list><block s="reportListItem"><l>1</l><block var="data"/></block></list></block><block var="floor"/></block><script><block s="doReport"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="data"/></block><custom-block s="fill %l key: %repRing from: %n to: %n interval: %repRing with: %repRing"><block s="reportCDR"><block var="data"/></block><block var="key"/><block s="evaluate"><block var="interval"/><list><block var="floor"/></list></block><block var="ceiling"/><block var="interval"/><block var="generator"/></custom-block></block></block></script></block><block s="doReport"><block s="reportCONS"><block s="evaluate"><block var="generator"/><list><block var="floor"/></list></block><custom-block s="fill %l key: %repRing from: %n to: %n interval: %repRing with: %repRing"><block var="data"/><block var="key"/><block s="evaluate"><block var="interval"/><list><block var="floor"/></list></block><block var="ceiling"/><block var="interval"/><block var="generator"/></custom-block></block></block></script></block-definition><block-definition s="pipe %&apos;value&apos; $arrowRight %&apos;pipe&apos;" type="reporter" category="control"><header></header><code></code><translations>pt:a aplicação a _ de _&#xD;</translations><inputs><input type="%s"></input><input type="%mult%repRing"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="pipe"/></block><script><block s="doReport"><block var="value"/></block></script></block><block s="doReport"><custom-block s="pipe %s $arrowRight %mult%repRing"><block s="evaluate"><block s="reportListItem"><l>1</l><block var="pipe"/></block><list><block var="value"/></list></block><block s="reportCDR"><block var="pipe"/></block></custom-block></block></script></block-definition><block-definition s="%&apos;text&apos; $arrowRight lower case" type="reporter" category="operators"><header></header><code></code><translations>pt:_ em minúsculas&#xD;</translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>txt</l></list><l>return txt.toLowerCase()</l></block><list><block var="text"/></list></block></block></script></block-definition><block-definition s="plot %&apos;data&apos; %&apos;style&apos; at x: %&apos;left&apos; y: %&apos;bottom&apos; width: %&apos;width&apos; height: %&apos;height&apos;" type="command" category="pen"><header></header><code></code><translations>pt:desenha gráfico de barras de _ em (x: _ , y: _ ) com largura _ e altura _&#xD;</translations><inputs><input type="%l"></input><input type="%s" readonly="true">bars<options>bars&#xD;lines&#xD;pie chart</options></input><input type="%n">-200</input><input type="%n">-100</input><input type="%n">400</input><input type="%n">200</input></inputs><script><block s="doIfElse"><block s="reportEquals"><block var="style"/><l>pie chart</l></block><script><block s="doDeclareVariables"><list><l>x</l><l>y</l><l>r</l><l>total</l><l>start</l><l>end</l><l>state</l><l>pen size</l><l>heading</l></list></block><block s="doSetVar"><l>x</l><block s="reportSum"><block var="left"/><block s="reportQuotient"><block var="width"/><l>2</l></block></block></block><block s="doSetVar"><l>y</l><block s="reportSum"><block var="bottom"/><block s="reportQuotient"><block var="height"/><l>2</l></block></block></block><block s="doSetVar"><l>r</l><block s="reportIfElse"><block s="reportLessThan"><block var="height"/><block var="width"/></block><block s="reportQuotient"><block var="height"/><l>2</l></block><block s="reportQuotient"><block var="width"/><l>2</l></block></block></block><block s="doSetVar"><l>total</l><block s="reportCombine"><block var="data"/><block s="reifyReporter"><autolambda><block s="reportSum"><l></l><l></l></block></autolambda><list></list></block></block></block><block s="doSetVar"><l>state</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="reportNewList"><list><l></l><block s="getPenAttribute"><l></l></block></list></block></autolambda><list></list></block><block s="reportNewList"><list><l>hue</l><l>saturation</l><l>brightness</l></list></block></block></block><block s="doSetVar"><l>pen size</l><block s="getPenAttribute"><l><option>size</option></l></block></block><block s="doSetVar"><l>heading</l><block s="direction"></block></block><block s="setPenColorDimension"><l><option>hue</option></l><l>0</l></block><block s="setPenColorDimension"><l><option>brightness</option></l><l>80</l></block><block s="setPenColorDimension"><l><option>saturation</option></l><l>80</l></block><block s="doWarp"><script><block s="doForEach"><l>slice</l><block var="data"/><script><block s="doChangeVar"><l>end</l><block s="reportProduct"><block s="reportQuotient"><block var="slice"/><block var="total"/></block><l>360</l></block></block><block s="gotoXY"><block var="x"/><block var="y"/></block><block s="down"></block><block s="doFor"><l>i</l><block var="start"/><block var="end"/><script><block s="gotoXY"><block s="reportSum"><block var="x"/><block s="reportProduct"><block var="r"/><block s="reportMonadic"><l><option>sin</option></l><block var="i"/></block></block></block><block s="reportSum"><block var="y"/><block s="reportProduct"><block var="r"/><block s="reportMonadic"><l><option>cos</option></l><block var="i"/></block></block></block></block></script></block><block s="gotoXY"><block var="x"/><block var="y"/></block><block s="up"></block><block s="setHeading"><block var="start"/></block><block s="turn"><block s="reportQuotient"><block s="reportDifference"><block var="end"/><block var="start"/></block><l>2</l></block></block><block s="forward"><block s="reportQuotient"><block var="r"/><l>2</l></block></block><block s="floodFill"></block><block s="changePenColorDimension"><l><option>hue</option></l><block s="reportQuotient"><l>100</l><block s="reportListAttribute"><l><option>length</option></l><block var="data"/></block></block></block><block s="doSetVar"><l>start</l><block var="end"/></block></script></block><block s="doForEach"><l>setting</l><block var="state"/><script><block s="setPenColorDimension"><block s="reportListItem"><l>1</l><block var="setting"/></block><block s="reportListItem"><l>2</l><block var="setting"/></block></block></script></block></script></block><block s="setSize"><block var="pen size"/></block><block s="setHeading"><block var="heading"/></block></script><script><block s="doDeclareVariables"><list><l>ratio</l><l>step</l><l>flat line ends</l><l>col</l><l>sorted</l><l>min</l></list></block><block s="doSetVar"><l>sorted</l><custom-block s="$flash sort %l by %predRing"><block var="data"/><block s="reifyPredicate"><autolambda><block s="reportGreaterThan"><l></l><l></l></block></autolambda><list></list></block></custom-block></block><block s="doIfElse"><block s="reportLessThan"><block s="reportListItem"><l><option>last</option></l><block var="sorted"/></block><l>0</l></block><script><block s="doSetVar"><l>min</l><block s="reportListItem"><l><option>last</option></l><block var="sorted"/></block></block></script><script><block s="doSetVar"><l>min</l><l>0</l></block></script></block><block s="doSetVar"><l>ratio</l><block s="reportQuotient"><block var="height"/><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="sorted"/></block><block var="min"/></block></block></block><block s="doSetVar"><l>step</l><block s="reportQuotient"><block var="width"/><block s="reportListAttribute"><l><option>length</option></l><block var="data"/></block></block></block><block s="doIfElse"><block s="reportGreaterThan"><block var="step"/><l>2</l></block><script><block s="doSetVar"><l>col</l><block s="reportDifference"><block var="step"/><l>1</l></block></block></script><script><block s="doSetVar"><l>col</l><block s="reportProduct"><block var="step"/><l>0.8</l></block></block></script></block><block s="gotoXY"><block var="left"/><block var="bottom"/></block><block s="doIfElse"><block s="reportEquals"><block var="style"/><l>lines</l></block><script><block s="changeXPosition"><block s="reportQuotient"><block var="step"/><l>-2</l></block></block><block s="doWarp"><script><block s="doUntil"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="data"/></block><l>0</l></block><script><block s="gotoXY"><block s="reportSum"><block s="xPosition"></block><block var="step"/></block><block s="reportSum"><block var="bottom"/><block s="reportProduct"><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="data"/></block><block var="min"/></block><block var="ratio"/></block></block></block><block s="down"></block><block s="doSetVar"><l>data</l><block s="reportCDR"><block var="data"/></block></block></script></block></script></block></script><script><block s="doSetVar"><l>flat line ends</l><block s="reportGlobalFlag"><l><option>flat line ends</option></l></block></block><block s="doSetGlobalFlag"><l><option>flat line ends</option></l><l><bool>true</bool></l></block><block s="setSize"><l>0.5</l></block><block s="down"></block><block s="changeXPosition"><block s="reportQuotient"><block var="step"/><l>2</l></block></block><block s="doWarp"><script><block s="doUntil"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="data"/></block><l>0</l></block><script><block s="setSize"><block var="col"/></block><block s="changeYPosition"><block s="reportProduct"><block s="reportDifference"><block s="reportListItem"><l>1</l><block var="data"/></block><block var="min"/></block><block var="ratio"/></block></block><block s="setYPosition"><block var="bottom"/></block><block s="setSize"><l>0.5</l></block><block s="doSetVar"><l>data</l><block s="reportCDR"><block var="data"/></block></block><block s="doIfElse"><block s="reportGreaterThan"><block s="reportListAttribute"><l><option>length</option></l><block var="data"/></block><l>0</l></block><script><block s="changeXPosition"><block var="step"/></block></script><script><block s="changeXPosition"><block s="reportQuotient"><block var="step"/><l>2</l></block></block></script></block></script></block></script></block><block s="doSetGlobalFlag"><l><option>flat line ends</option></l><block var="flat line ends"/></block></script></block><block s="up"></block></script></block></script></block-definition><block-definition s="sum %&apos;nums&apos;" type="reporter" category="operators"><comment x="0" y="0" w="202" collapsed="false">Takes any number of numbers as inputs (use the left and right arrowheads to adjust the number of input slots) and reports the result of adding them all, so&#xD;(SUM (4) (100) (8))&#xD;reports 112.</comment><header></header><code></code><translations>pt:a soma de _&#xD;</translations><inputs><input type="%mult%n"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="nums"/></block><script><block s="doReport"><l>0</l></block></script></block><block s="doReport"><block s="reportSum"><block s="reportListItem"><l>1</l><block var="nums"/></block><custom-block s="sum %mult%n"><block s="reportCDR"><block var="nums"/></block></custom-block></block></block></script></block-definition><block-definition s="product %&apos;nums&apos;" type="reporter" category="operators"><comment x="0" y="0" w="205" collapsed="false">Takes any number of numbers as inputs (use the left and right arrowheads to adjust the number of input slots) and reports the result of multiplying them all, so&#xD;(PRODUCT (4) (100) (8))&#xD;reports 3200.</comment><header></header><code></code><translations>pt:o produto de _&#xD;</translations><inputs><input type="%mult%n"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="nums"/></block><script><block s="doReport"><l>1</l></block></script></block><block s="doReport"><block s="reportProduct"><block s="reportListItem"><l>1</l><block var="nums"/></block><custom-block s="product %mult%n"><block s="reportCDR"><block var="nums"/></block></custom-block></block></block></script></block-definition><block-definition s="all of %&apos;preds&apos;" type="predicate" category="operators"><comment x="0" y="0" w="248" collapsed="false">Takes any number of Boolean (true/false) inputs (use the left and right arrowheads to adjust the number of input slots) and reports TRUE only if all of the inputs are TRUE, otherwise FALSE.  Like AND but for multiple inputs.</comment><header></header><code></code><translations>pt:todas as afirmações _ são verdadeiras&#xD;</translations><inputs><input type="%mult%boolUE"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="preds"/></block><script><block s="doReport"><block s="reportBoolean"><l><bool>true</bool></l></block></block></script></block><block s="doReport"><block s="reportAnd"><block s="evaluate"><block s="reportListItem"><l>1</l><block var="preds"/></block><list></list></block><custom-block s="all of %mult%boolUE"><block s="reportCDR"><block var="preds"/></block></custom-block></block></block></script></block-definition><block-definition s="any of %&apos;preds&apos;" type="predicate" category="operators"><comment x="0" y="0" w="240" collapsed="false">Takes any number of Boolean (true/false) inputs (use the left and right arrowheads to adjust the number of input slots) and reports TRUE if at least one input is TRUE, otherwise FALSE.</comment><header></header><code></code><translations>pt:alguma das afirmações _ é verdadeira&#xD;</translations><inputs><input type="%mult%boolUE"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="preds"/></block><script><block s="doReport"><block s="reportBoolean"><l><bool>false</bool></l></block></block></script></block><block s="doReport"><block s="reportOr"><block s="evaluate"><block s="reportListItem"><l>1</l><block var="preds"/></block><list></list></block><custom-block s="any of %mult%boolUE"><block s="reportCDR"><block var="preds"/></block></custom-block></block></block></script></block-definition><block-definition s="minimum %&apos;nums&apos;" type="reporter" category="operators"><comment x="0" y="0" w="205" collapsed="false">Takes any number of numbers as inputs (use the left and right arrowheads to adjust the number of input slots) and reports the smallest of them, so&#xD;(MINIMUM (4) (100) (8))&#xD;reports 4.</comment><header></header><code></code><translations>pt:o produto de _&#xD;</translations><inputs><input type="%mult%n"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="nums"/></block><script><block s="doReport"><block s="reportQuotient"><l>1</l><l>0</l></block></block></script></block><block s="doReport"><block s="reportMin"><block s="reportListItem"><l>1</l><block var="nums"/></block><custom-block s="minimum %mult%n"><block s="reportCDR"><block var="nums"/></block></custom-block></block></block></script></block-definition><block-definition s="maximum %&apos;nums&apos;" type="reporter" category="operators"><comment x="0" y="0" w="205" collapsed="false">Takes any number of numbers as inputs (use the left and right arrowheads to adjust the number of input slots) and reports the largest of them, so&#xD;(MAXIMUM (4) (100) (8))&#xD;reports 100.</comment><header></header><code></code><translations>pt:o produto de _&#xD;</translations><inputs><input type="%mult%n"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="nums"/></block><script><block s="doReport"><block s="reportQuotient"><l>-1</l><l>0</l></block></block></script></block><block s="doReport"><block s="reportMax"><block s="reportListItem"><l>1</l><block var="nums"/></block><custom-block s="maximum %mult%n"><block s="reportCDR"><block var="nums"/></block></custom-block></block></block></script></block-definition><block-definition s="multiline %&apos;text&apos;" type="reporter" category="operators"><header></header><code></code><translations>pt:o texto multilinha _&#xD;</translations><inputs><input type="%mlt"></input></inputs><script><block s="doReport"><block var="text"/></block></script></block-definition><block-definition s="substring of %&apos;string&apos; before %&apos;marker&apos;" type="reporter" category="operators"><comment x="0" y="0" w="175.33333333333334" collapsed="false">Reports the part of the first string up to the first instance of the second string inside it.  If the second string isn&apos;t found, reports the entire first string.</comment><header></header><code></code><translations>pt:o texto de _ antes de _&#xD;</translations><inputs><input type="%txt"></input><input type="%txt"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>string</l><l>marker</l></list><l>var world=this.parentThatIsA(IDE_Morph);&#xD;if (!("stringLibCaseIndependentComparison" in world)) {&#xD;    world["stringLibCaseIndependentComparison"] = true;&#xD;};&#xD;if (world["stringLibCaseIndependentComparison"]) {&#xD;    var index=string.toLocaleLowerCase().indexOf(marker.toLocaleLowerCase());&#xD;    if (index&lt;0) {return string};&#xD;    return string.slice(0,index);&#xD;} else {&#xD;    var index=string.indexOf(marker);&#xD;    if (index&lt;0) {return string};&#xD;    return string.slice(0,index);&#xD;}</l></block><list><block var="string"/><block var="marker"/></list></block></block></script></block-definition><block-definition s="substring of %&apos;string&apos; after %&apos;marker&apos;" type="reporter" category="operators"><comment x="0" y="0" w="203.33333333333334" collapsed="false">Reports the portion of the first input string starting after the first occurrence of the second string.  If the second string isn&apos;t found in the first string, reports an empty string.</comment><header></header><code></code><translations>pt:o texto de _ depois de _&#xD;</translations><inputs><input type="%txt"></input><input type="%txt"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>string</l><l>marker</l><l>markerlength</l></list><l>var world=this.parentThatIsA(IDE_Morph);&#xD;if (!("stringLibCaseIndependentComparison" in world)) {&#xD;    world["stringLibCaseIndependentComparison"] = true;&#xD;};&#xD;if (world["stringLibCaseIndependentComparison"]) {&#xD;    var index=string.toLocaleLowerCase().indexOf(marker.toLocaleLowerCase());&#xD;    if (index&lt;0) {return ""};&#xD;    return string.slice(index+markerlength);&#xD;} else {&#xD;    var index=string.indexOf(marker);&#xD;    if (index&lt;0) {return ""};&#xD;    return string.slice(index+markerlength);&#xD;}</l></block><list><block var="string"/><block var="marker"/><block s="reportStringSize"><block var="marker"/></block></list></block></block></script></block-definition><block-definition s="position of %&apos;small&apos; in %&apos;large&apos;" type="reporter" category="operators"><comment x="0" y="0" w="294" collapsed="false">Reports the character position (starting from 1) of the beginning of the first input string inside the second input string.&#xD;If it&apos;s not found, reports 0.</comment><header></header><code></code><translations>pt:a posição de _ em _&#xD;</translations><inputs><input type="%s"></input><input type="%txt"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>sub</l><l>sup</l></list><l>var world=this.parentThatIsA(IDE_Morph);&#xD;if (!("stringLibCaseIndependentComparison" in world)) {&#xD;    world["stringLibCaseIndependentComparison"] = true;&#xD;};&#xD;if (world["stringLibCaseIndependentComparison"]) {&#xD;    return 1+sup.toLocaleLowerCase().indexOf(sub.toLocaleLowerCase());&#xD;} else {&#xD;    return 1+sup.indexOf(sub);&#xD;}</l></block><list><block var="small"/><block var="large"/></list></block></block></script></block-definition><block-definition s="use case-independent comparisons %&apos;tf&apos;" type="command" category="operators"><comment x="0" y="0" w="225.33333333333334" collapsed="false">If input is TRUE, comparisons made by functions in the string library will be case-independent (so &quot;FOO&quot; = &quot;foo&quot;).  This is the default.&#xD;If input is FALSE, comparisons will be exact.</comment><header></header><code></code><translations>pt:altera comparações ignorando distinção minúsculas/maiúsculas para _&#xD;</translations><inputs><input type="%b"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>flag</l></list><l>var world=this.parentThatIsA(IDE_Morph);&#xD;world[&apos;stringLibCaseIndependentComparison&apos;] = flag;</l></block><list><block var="tf"/></list></block></script></block-definition><block-definition s="substring of %&apos;str&apos; from position %&apos;start&apos; to position %&apos;end&apos; inclusive" type="reporter" category="operators"><comment x="0" y="0" w="297.3333333333333" collapsed="false">Reports the portion of the first input (string) starting at the position given by the second input (counting from 1, like LETTER n OF) and ending at the position given by the third input (also counting from 1).  If the third input is empty, reports the portion from the first position to the end of the string.&#xD;If a position number is negative, counts from the end backward, so -1 is the last character, -2 is the next to last, etc.</comment><header></header><code></code><translations>pt:o texto de _ entre as posições _ e _ , inclusive&#xD;</translations><inputs><input type="%txt"></input><input type="%n"></input><input type="%n"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>str</l><l>start</l><l>end</l></list><l>if (end != "") {&#xD;    return str.slice(start-1,end);&#xD;} else {&#xD;    return str.slice(start-1);&#xD;}</l></block><list><block var="str"/><block var="start"/><block var="end"/></list></block></block></script></block-definition><block-definition s="text %&apos;string&apos; contains %&apos;marker&apos;" type="predicate" category="operators"><comment x="0" y="0" w="218" collapsed="false">Reports True if the first input string contains the second input string, otherwise false.&#xD;&#xD;Comparison is case-independent by default; use USE CASE-INDEPENDENT COMPARISONS to change that.</comment><header></header><code></code><translations>pt:o texto de _ antes de _&#xD;</translations><inputs><input type="%txt"></input><input type="%txt"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>string</l><l>marker</l></list><l>var world=this.parentThatIsA(IDE_Morph);&#xD;if (!("stringLibCaseIndependentComparison" in world)) {&#xD;    world["stringLibCaseIndependentComparison"] = true;&#xD;};&#xD;if (world["stringLibCaseIndependentComparison"]) {&#xD;    var index=string.toLocaleLowerCase().indexOf(marker.toLocaleLowerCase());&#xD;    return !(index&lt;0);&#xD;} else {&#xD;    var index=string.indexOf(marker);&#xD;    return !(index&lt;0);&#xD;}</l></block><list><block var="string"/><block var="marker"/></list></block></block></script></block-definition><block-definition s="to lower case %&apos;text&apos;" type="reporter" category="operators"><comment x="0" y="0" w="275.3333333333333" collapsed="false">Reports the input text with lower case letters instead of capital letters in the input.  Uses the user&apos;s locale&apos;s rules for case conversion.</comment><header></header><code></code><translations>pt:em minúsculas _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>text</l></list><l>return text.toLocaleLowerCase();</l></block><list><block var="text"/></list></block></block></script></block-definition><block-definition s="$flash remove duplicates from %&apos;data&apos;" type="reporter" category="lists"><comment x="0" y="0" w="209" collapsed="false">Reports a new list whose items are the same as in the input list, except that if two or more equal items appear in the input list, only the first one is kept in the result.</comment><header></header><code></code><translations>ca:elimina els duplicats de _&#xD;</translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="reportAtomicKeep"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block s="reportListIndex"><block var="value"/><block var="list"/></block><block var="index"/></block></autolambda><list><l>value</l><l>index</l><l>list</l></list></block><block var="data"/></block></block></script><scripts><script x="14" y="164.2222222222222"><block s="doWarp"><script><block s="doIf"><block s="reportEquals"><block var="data"/><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doIfElse"><block s="reportListContainsItem"><block s="reportCDR"><block var="data"/></block><block s="reportListItem"><l>1</l><block var="data"/></block></block><script><block s="doReport"><custom-block s="$flash remove duplicates from %l"><block s="reportCDR"><block var="data"/></block></custom-block></block></script><script><block s="doReport"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="data"/></block><custom-block s="$flash remove duplicates from %l"><block s="reportCDR"><block var="data"/></block></custom-block></block></block></script></block></script></block></script></scripts></block-definition><block-definition s="$flash sort %&apos;data&apos; ordering with %&apos;function&apos;" type="reporter" category="lists"><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="%l"></input><input type="%predRing"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l><l>fn</l><l>proc</l></list><l>return proc.reportAtomicSort(data, fn);</l></block><list><block var="data"/><block var="function"/></list></block></block></script><scripts><script x="12" y="147.55555555555557"><block s="doDeclareVariables"><list><l>even items</l><l>odd items</l><l>merge</l><l>split</l><l>copy of data</l><l>id</l></list></block><block s="doSetVar"><l>id</l><block s="reifyScript"><script><block s="doReport"><l></l></block></script><list></list></block></block><block s="doSetVar"><l>copy of data</l><block s="reportMap"><block var="id"/><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></block></script></block></script><list></list></block></block><block s="doSetVar"><l>merge</l><block s="reifyScript"><script><block s="doIf"><block s="reportEquals"><block var="#1"/><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block var="#2"/></block></script></block><block s="doIf"><block s="reportEquals"><block var="#2"/><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block var="#1"/></block></script></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 var="merge"/><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 var="merge"/><list><block var="#1"/><block s="reportCDR"><block var="#2"/></block></list></block></block></block></script></block></script><list><l>#1</l><l>#2</l></list></block></block><block s="doIf"><block s="reportEquals"><block var="data"/><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block s="reportCDR"><block var="data"/></block><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block var="data"/></block></script></block><block s="doRun"><block var="split"/><list></list></block><block s="doReport"><block s="evaluate"><block var="merge"/><list><custom-block s="$flash sort %l ordering with %predRing"><block var="odd items"/><block var="function"/></custom-block><custom-block s="$flash sort %l ordering with %predRing"><block var="even items"/><block var="function"/></custom-block></list></block></block></script></scripts></block-definition><block-definition s="$flash assoc %&apos;key&apos; %&apos;a-list&apos;" type="reporter" category="lists"><comment x="0" y="0" w="289.3333333333333" collapsed="false">The second input is an &quot;association list,&quot; a list of two-item lists.  Each of those smaller lists has a &quot;key&quot; as its first item and a &quot;value&quot; as its second.  ASSOC reports the first key-value pair in the association list whose key matches the first input.</comment><header></header><code></code><translations>ca:associació _ _&#xD;</translations><inputs><input type="%s"></input><input type="%l"></input></inputs><script><block s="doReport"><block s="reportAtomicFindFirst"><block s="reifyPredicate"><autolambda><block s="reportEquals"><block var="key"/><block s="reportListItem"><l>1</l><l/></block></block></autolambda><list></list></block><block var="a-list"/></block></block></script><scripts><script x="19.333333333333332" y="108.22222222222221"><block s="doIf"><block s="reportEquals"><block var="a-list"/><block s="reportNewList"><list></list></block></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doIf"><block s="reportEquals"><block var="key"/><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="a-list"/></block></block></block><script><block s="doReport"><block s="reportListItem"><l>1</l><block var="a-list"/></block></block></script></block><block s="doReport"><custom-block s="$flash assoc %s %l"><block var="key"/><block s="reportCDR"><block var="a-list"/></block></custom-block></block></script></scripts></block-definition><block-definition s="%&apos;#&apos; for each %&apos;item&apos; of %&apos;data&apos; %&apos;action&apos;" type="command" category="lists"><comment x="0" y="0" w="228.57142857142858" collapsed="false">This block carries out the given script for each item of the given list, like the primitive FOR EACH.&#xD;&#xD;What&apos;s different is that it provides the # variable, which will contain the item number in the list of each item in turn, 1 while processing item 1, and so on.</comment><header></header><code></code><translations>ca:_ per cada _ de _ _&#xD;</translations><inputs><input type="%upvar"></input><input type="%upvar"></input><input type="%l"></input><input type="%ca"></input></inputs><script><block s="doIfElse"><custom-block s="☠︎ linked? %l"><block var="data"/></custom-block><script><block s="doSetVar"><l>#</l><l>1</l></block><block s="doUntil"><block s="reportListIsEmpty"><block var="data"/></block><script><block s="doSetVar"><l>item</l><block s="reportListItem"><l>1</l><block var="data"/></block></block><block s="doRun"><block var="action"/><list></list></block><block s="doSetVar"><l>data</l><block s="reportCDR"><block var="data"/></block></block><block s="doChangeVar"><l>#</l><l>1</l></block></script></block></script><script><block s="doIf"><block s="reportNot"><block s="reportListIsEmpty"><block var="data"/></block></block><script><block s="doFor"><l>i</l><l>1</l><block s="reportListAttribute"><l><option>length</option></l><block var="data"/></block><script><block s="doSetVar"><l>#</l><block var="i"/></block><block s="doSetVar"><l>item</l><block s="reportListItem"><block var="i"/><block var="data"/></block></block><block s="doRun"><block var="action"/><list></list></block></script></block></script></block></script></block></script></block-definition><block-definition s="☠︎ linked? %&apos;data&apos;" type="predicate" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>data</l></list><l>return data.isLinked;</l></block><list><block var="data"/></list></block></block></script></block-definition><block-definition s="☠︎ link %&apos;data&apos;" type="reporter" category="lists"><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block var="data"/></block><script><block s="doReport"><block var="data"/></block></script></block><block s="doReport"><block s="reportCONS"><block s="reportListItem"><l>1</l><block var="data"/></block><block s="reportCDR"><block var="data"/></block></block></block></script></block-definition><block-definition s="printable %&apos;data&apos;" type="reporter" category="lists"><comment x="0" y="0" w="188.66666666666666" collapsed="false">Takes a (possibly deep) list as input,&#xD;and reports a human-readable text form &#xD;of the list (namely, Lisp notation).&#xD;&#xD;Will not work on circular lists.</comment><header></header><code></code><translations></translations><inputs><input type="%l"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="data"/><l><option>list</option></l></block></block><script><block s="doReport"><block var="data"/></block></script></block><block s="doIf"><block s="reportListIsEmpty"><block var="data"/></block><script><block s="doReport"><l>()</l></block></script></block><block s="doReport"><block s="reportJoinWords"><list><l>(</l><block s="reportAtomicCombine"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="printable %l"><l/></custom-block></autolambda><list></list></block><block var="data"/></block><block s="reifyReporter"><autolambda><block s="reportJoinWords"><list><l></l><l> </l><l></l></list></block></autolambda><list></list></block></block><l>)</l></list></block></block></script></block-definition><block-definition s="sentence %&apos;phrase&apos;" type="reporter" category="lists"><comment x="0" y="0" w="302.6666666666667" collapsed="false">SENTENCE is the main constructor for sentences, represented&#xD;as lists of words.  It takes zero or more inputs, each of which can&#xD;be either a list or a text string.  If a list, the input is assumed to be&#xD;a list of words.  If a text string, it is converted to a list of words using&#xD;SENTENCE→LIST.  Then all the lists of words are appended to form a new list of words.&#xD;&#xD;If the inputs are lists of lists rather than lists of words, SENTENCE,&#xD;like APPEND, does only one level of flattening, reporting a list of&#xD;all the items of all the input lists.</comment><header></header><code></code><translations></translations><inputs><input type="%mult%s"></input></inputs><script><block s="doReport"><block s="reportConcatenatedLists"><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportIfElse"><block s="reportIsA"><l></l><l><option>list</option></l></block><l></l><custom-block s="sentence $arrowRight list %txt"><l></l></custom-block></block></autolambda><list></list></block><block var="phrase"/></block></block></block></script></block-definition><block-definition s="$flash zip %&apos;lists&apos;" type="reporter" category="lists"><comment x="0" y="0" w="192" collapsed="false">ZIP takes any number of lists as inputs.  The lists should all be the same length.  ZIP reports a list of lists in which the first item is a list of all the first items, the second item is a list of all the second items, etc.&#xD;Viewing the inputs as the rows of a matrix, ZIP reports its transpose.</comment><header></header><code></code><translations></translations><inputs><input type="%mult%l"></input></inputs><script><block s="doIf"><block s="reportListIsEmpty"><block s="reportListItem"><l>1</l><block var="lists"/></block></block><script><block s="doReport"><block s="reportNewList"><list></list></block></block></script></block><block s="doReport"><block s="reportCONS"><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportListItem"><l>1</l><l/></block></autolambda><list></list></block><block var="lists"/></block><custom-block s="$flash zip %mult%l"><block s="reportAtomicMap"><block s="reifyReporter"><autolambda><block s="reportCDR"><l/></block></autolambda><list></list></block><block var="lists"/></block></custom-block></block></block></script></block-definition><block-definition s="%&apos;x&apos;" type="reporter" category="lists"><comment x="0" y="0" w="105.33333333333333" collapsed="false">The identity function reports its input.</comment><header></header><code></code><translations></translations><inputs><input type="%s"></input></inputs><script><block s="doReport"><block var="x"/></block></script></block-definition><block-definition s="multimap %&apos;function&apos; over %&apos;lists&apos;" type="reporter" category="lists"><comment x="0" y="0" w="267.3333333333333" collapsed="false">Takes as input a function of N inputs and N lists.&#xD;The function is called with item 1 of all the lists as its inputs, with item 2 of all the lists as its inputs, and so on.  (The lists should all be the same length.)</comment><header></header><code></code><translations></translations><inputs><input type="%repRing"></input><input type="%mult%l"></input></inputs><script><block s="doReport"><block s="reportMap"><block s="reifyReporter"><autolambda><block s="evaluate"><block var="function"/><custom-block s="%s"><l></l></custom-block></block></autolambda><list></list></block><custom-block s="$flash zip %mult%l"><block var="lists"/></custom-block></block></block></script></block-definition><block-definition s="sentence $arrowRight list %&apos;text&apos;" type="reporter" category="operators"><comment x="0" y="0" w="196" collapsed="false">Takes a sentence in text string form and reports the sentence as a list of its words.</comment><header></header><code></code><translations>de:Satz $arrowRight Liste _&#xD;ca:frase $arrowRight llista _&#xD;es:frase $arrowRight lista _&#xD;fr:phrase $arrowRight liste _&#xD;pt:uma lista com as palavras da frase _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doReport"><block s="reportAtomicKeep"><block s="reifyPredicate"><autolambda><block s="reportNot"><block s="reportEquals"><block s="reportStringSize"><l></l></block><l>0</l></block></block></autolambda><list></list></block><block s="reportTextSplit"><block var="text"/><l><option>whitespace</option></l></block></block></block></script></block-definition></blocks><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" id="3490"><pentrails>data:image/png;base64,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</pentrails><costumes><list struct="atomic" id="3491"></list></costumes><sounds><list struct="atomic" id="3492"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="Sprite" idx="1" x="31.953125" y="-80" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" hidden="true" costume="0" color="80,80,80,1" pen="tip" id="3497"><costumes><list struct="atomic" id="3498"></list></costumes><sounds><list struct="atomic" id="3499"></list></sounds><blocks></blocks><variables></variables><scripts><script x="30" y="30"><block s="receiveGo"></block><block s="clear"></block><block s="hide"></block><block s="up"></block><block s="gotoXY"><l>-100</l><l>40</l></block><block s="doSetVar"><l>numbers</l><block s="reportNewList"><list><l>89</l><l>67</l><l>5</l><l>90</l><l>-2</l><l>0</l><l>190</l><l>8</l></list></block></block><block s="write"><block s="reportJoinWords"><list><l>Sum of Numbers : </l><custom-block s="Sum of %l"><block var="numbers"/></custom-block></list></block><l>12</l></block><block s="gotoXY"><l>-100</l><l>20</l></block><block s="write"><block s="reportJoinWords"><list><l>Average of Numbers : </l><custom-block s="Average of %s"><block var="numbers"/></custom-block></list></block><l>12</l></block><block s="gotoXY"><l>-100</l><l>0</l></block><block s="write"><block s="reportJoinWords"><list><l>Includes negatives?</l><custom-block s="includes negative? %l"><block var="numbers"/></custom-block></list></block><l>12</l></block><block s="gotoXY"><l>-100</l><l>-20</l></block><block s="write"><block s="reportJoinWords"><list><l>Is increasing?</l><custom-block s="is increasing? %l"><block var="numbers"/></custom-block></list></block><l>12</l></block><block s="gotoXY"><l>-100</l><l>-40</l></block><block s="write"><block s="reportJoinWords"><list><l>Maximum of </l><custom-block s="Maximum of %l"><block var="numbers"/></custom-block></list></block><l>12</l></block><block s="gotoXY"><l>-100</l><l>-60</l></block><block s="write"><block s="reportJoinWords"><list><l>Make all positive</l><l> </l><custom-block s="make all positive %l"><block var="numbers"/></custom-block></list></block><l>12</l><comment w="530" collapsed="false">You will have to write further code here to make the returned list elements display in a more readable way.[Hint: loop and a variable to join all the list elements, or list-&gt;sentence from words, sentences library].[Optional]</comment></block><block s="gotoXY"><l>-100</l><l>-80</l></block><block s="write"><block s="reportJoinWords"><list><l>Only evens</l><l> </l><custom-block s="only evens %l"><block var="numbers"/></custom-block></list></block><l>12</l><comment w="433.2" collapsed="false">You will have to write further code here to make the returned list elements display in a more readable way.[Hint: loop and a variable to join all the list elements, or list-&gt;sentence from words, sentences library].[Optional].</comment></block></script></scripts></sprite><watcher var="numbers" style="normal" x="10" y="10" color="243,118,29" extX="80" extY="70"/></sprites></stage><variables><variable name="numbers"><list struct="atomic" id="3616">89,67,5,90,-2,0,190,8</list></variable></variables></scene></scenes></project><media name="Lab 4.3 Starter" app="Snap! 7, https://snap.berkeley.edu" version="2"></media></snapdata>