<snapdata remixID="10082838"><project name="visualizer" app="Snap! 7, https://snap.berkeley.edu" version="2"><notes>to use:&#xD;&#xD;click "see code"&#xD;click "sounds"&#xD;drag a sound in to the editor&#xD;click the green flag&#xD;&#xD;if nothing happens try another file or make sure you imported a sound</notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAAAAXNSR0IArs4c6QAAA75JREFUeF7tlLFL1HEYh9/jBgkcxEKiDK6GoKA/IqhAOAq3lghEqL8imvoTIlAMl4iagsaGoKaGlkBNgoKsIVAsHC4oLrzB4QbP46Dv+9z3aZHgh9/P8z4PNiKiG/7zAoUu0DDAQpf32d4FDNAQil7AAIue38cN0AaKXsAAi57fxw3QBopewACLnt/HDdAGil7AAIue38cN0AaKXmCkAH/93YnFW3fi2ZPnsfP7R0xPzBz83Nxaj/OzF4rC+Xj+C4wU4F53NyYbUz3K/gDzo7swwwVGCjADgBvYFzBAtj/8egPEK2QDGCDbH369AeIVsgEMkO0Pv94A8QrZAAbI9odfb4B4hWwAA2T7w683QLxCNoABsv3h1xsgXiEbwADZ/vDrDRCvkA1ggGx/+PUGiFfIBjBAtj/8egPEK2QDGCDbH369AeIVsgEMkO0Pv94A8QrZAAbI9odfb4B4hWwAA2T7w683QLxCNoABsv3h1xsgXiEbwADZ/vDrDRCvkA1ggGx/+PUGiFfIBjBAtj/8egPEK2QDGCDbH369AeIVsgEMkO0Pv94A8QrZAAbI9odfb4B4hWwAA2T7w683QLxCNoABsv3h1xsgXiEbwADZ/vDrDRCvkA1ggGx/+PUGiFfIBjBAtj/8egPEK2QDGCDbH369AeIVsgEMkO0Pv94A8QrZAAbI9odfb4B4hWwAA2T7w683QLxCNoABsv3h1xsgXiEbwADZ/vDrDRCvkA1ggGx/+PUGiFfIBjBAtj/8egPEK2QDGCDbH369AeIVsgEMkO0Pv94A8QrZAAbI9odfb4B4hWwAA2T7w683QLxCNoABsv3h1xsgXiEbwADZ/vDrDRCvkA1ggGx/+PUGiFfIBjBAtj/8egPEK2QDGCDbH369AeIVsgEMkO0Pv94A8QrZAAbI9odfb4B4hWwAA2T7w683QLxCNsBYBHh69lRcm7saj5dWD2ysffkQF1uX4vp8OzY/foqNtQ2sqcP47j+4F0sPl+Pb1nck31gE2H/5r9uf48zxswOF7HV3B37zPz6YbEwN9Uw/3+rTlbh9c2Go35Hl47EM8OWrF9G+cmPgjakB9vMt3l2I5UcrA3kzfjAWAe6H1Ol04sSxk70b7/9/7nI73rx+Gz//bEez2Yxh/8pkknUY3/v1d9E614rpiZlMk4+8ZSwCPDKtH6a7gAGmU1LXIAOsy3c6WgNMp6SuQQZYl+90tAaYTkldgwywLt/paA0wnZK6BhlgXb7T0RpgOiV1DTLAunynozXAdErqGvQPryTeAd0Ilg8AAAAASUVORK5CYII=</thumbnail><scenes select="1"><scene name="visualizer"><notes>to use:&#xD;&#xD;click "see code"&#xD;click "sounds"&#xD;drag a sound in to the editor&#xD;click the green flag&#xD;&#xD;if nothing happens try another file or make sure you imported a sound</notes><hidden></hidden><headers></headers><code></code><blocks><block-definition s="do in parallel %&apos;actions&apos; and wait" type="command" category="control"><comment x="0" y="0" w="238.66666666666666" collapsed="false">Accepts any number of scripts as inputs.  Launches a separate thread for each of them, so they are done in parallel, then waits for them all to complete.&#xD;&#xD;This doesn&apos;t change how the Snap! scheduler works; the threads are not truly asynchronous. And there is no increase in speed.  Rather, the point of this block is to allow starting synchronized but independent scripts.</comment><header></header><code></code><translations>pt:executa _ em paralelo e espera&#xD;</translations><inputs><input type="%mult%cs"></input></inputs><script><block s="doDeclareVariables"><list><l>threads</l></list></block><block s="doSetVar"><l>threads</l><block s="reportMap"><block s="reifyReporter"><autolambda><block s="evaluate"><block s="reifyScript"><script><block s="doDeclareVariables"><list><l>is running?</l></list></block><block s="doSetVar"><l>is running?</l><block s="reportBoolean"><l><bool>true</bool></l></block></block><block s="fork"><block s="reifyScript"><script><block s="doRun"><block var="each script"/><list></list></block><block s="doSetVar"><l>is running?</l><block s="reportBoolean"><l><bool>false</bool></l></block></block></script><list></list></block><list></list></block><block s="doReport"><block s="reifyScript"><script><block s="doReport"><block var="is running?"/></block></script><list></list></block></block></script><list></list></block><list></list></block></autolambda><list><l>each script</l></list></block><block var="actions"/></block></block><block s="doWaitUntil"><block s="reportListIsEmpty"><block s="reportKeep"><block s="reifyPredicate"><autolambda><block s="evaluate"><block var="test"/><list></list></block></autolambda><list><l>test</l></list></block><block var="threads"/></block></block></block></script></block-definition><block-definition s="do in parallel %&apos;actions&apos;" type="command" category="control"><comment x="0" y="0" w="238.66666666666666" collapsed="false">Accepts any number of scripts as inputs.  Launches a separate thread for each of them, so they are done in parallel, then continues with the current script while they all run.&#xD;&#xD;This doesn&apos;t change how the Snap! scheduler works; the threads are not truly asynchronous. And there is no increase in speed.  Rather, the point of this block is to allow starting synchronized but independent scripts.</comment><header></header><code></code><translations>pt:executa _ em paralelo&#xD;</translations><inputs><input type="%mult%cs"></input></inputs><script><block s="doIf"><block s="reportGreaterThan"><block s="reportListAttribute"><l><option>length</option></l><block var="actions"/></block><l>0</l></block><script><block s="fork"><block s="reportListItem"><l>1</l><block var="actions"/></block><list></list></block><custom-block s="do in parallel %mult%cs"><block s="reportCDR"><block var="actions"/></block></custom-block></script></block></script></block-definition><block-definition s="%&apos;sec&apos; sec $arrowRight sample # at sample rate %&apos;samplerate&apos;" type="reporter" category="sound"><header></header><code></code><translations></translations><inputs><input type="%n"></input><input type="%n">48000</input></inputs><script><block s="doReport"><block s="reportVariadicProduct"><list><block var="samplerate"/><block var="sec"/></list></block></block></script></block-definition><block-definition s="costume from text %&apos;text&apos; size %&apos;size&apos;" type="reporter" category="looks"><header></header><code></code><translations>de:Kostüm aus Text _ Größe _&#xD;pt:um traje com o texto _ de tamanho _&#xD;</translations><inputs><input type="%s">A</input><input type="%n">72</input></inputs><script><block s="doDeclareVariables"><list><l>costume</l><l>x</l><l>y</l><l>dir</l><l>cst</l><l>trails</l></list></block><block s="doSetVar"><l>x</l><block s="xPosition"></block></block><block s="doSetVar"><l>y</l><block s="yPosition"></block></block><block s="doSetVar"><l>dir</l><block s="direction"></block></block><block s="doSetVar"><l>cst</l><block s="getCostumeIdx"></block></block><block s="up"></block><block s="gotoXY"><l>0</l><l>0</l></block><block s="setHeading"><l>90</l></block><block s="doSwitchToCostume"><l><option>Turtle</option></l></block><block s="doSetVar"><l>trails</l><block s="reportPenTrailsAsCostume"></block></block><block s="clear"></block><block s="gotoXY"><block s="reportAttributeOf"><l><option>left</option></l><l>Stage</l></block><l>0</l></block><block s="write"><block var="text"/><block var="size"/></block><block s="gotoXY"><block s="reportAttributeOf"><l><option>left</option></l><l>Stage</l></block><l>0</l></block><block s="doSetVar"><l>costume</l><block s="reportPenTrailsAsCostume"></block></block><block s="clear"></block><block s="doRun"><block s="reportJSFunction"><list><l>costume</l><l>name</l></list><l>costume.name = name;</l></block><list><block var="costume"/><block var="text"/></list></block><block s="gotoXY"><l>0</l><l>0</l></block><block s="doSwitchToCostume"><block var="trails"/></block><block s="doStamp"></block><block s="doSwitchToCostume"><block var="cst"/></block><block s="gotoXY"><block var="x"/><block var="y"/></block><block s="setHeading"><block var="dir"/></block><block s="doReport"><block var="costume"/></block></script></block-definition><block-definition s="setting %&apos;which&apos;" type="reporter" category="sensing"><comment x="0" y="0" w="254.66666666666666" collapsed="false">Allows reading global settings programmatically.&#xD;&#xD;Eisenberg&apos;s Law:  Anything you can do from the user interface you should be able to do in your program, and vice versa.  This library is just a beginning; there are many UI controls outside of the Settings menu.</comment><header></header><code></code><translations>pt:o valor da configuração _&#xD;</translations><inputs><input type="%s" readonly="true"><options>Project notes&#xD;Project name&#xD;User&#xD;Presentation mode&#xD;Language&#xD;Zoom blocks&#xD;Stage size&#xD;Stage scale&#xD;Retina display support&#xD;Long form input dialog&#xD;Plain prototype labels&#xD;Input sliders&#xD;Execute on slider change&#xD;Clicking sound&#xD;Turbo mode&#xD;Flat design&#xD;Keyboard editing&#xD;Visible stepping&#xD;Thread safe scripts&#xD;Prefer smooth animations&#xD;Flat line ends&#xD;Codification support&#xD;Inheritance support&#xD;Hyper blocks support&#xD;Visible palette</options></input></inputs><script><block s="doReport"><block s="evaluate"><block s="reportJSFunction"><list><l>which</l></list><l>var stage = this.parentThatIsA(StageMorph),&#xD;    ide = stage.parentThatIsA(IDE_Morph),&#xD;    world = stage.parentThatIsA(WorldMorph);&#xD;&#xD;switch (which) {&#xD;    case &apos;Project notes&apos;:&#xD;        return ide.projectNotes;&#xD;    case &apos;Project name&apos;:&#xD;        return ide.projectName;&#xD;    case &apos;User&apos;:&#xD;        return ide.cloud.username;&#xD;    case &apos;Presentation mode&apos;:&#xD;        return ide.isAppMode;&#xD;    case &apos;Language&apos;:&#xD;        return SnapTranslator.language;&#xD;    case &apos;Zoom blocks&apos;:&#xD;        return SyntaxElementMorph.prototype.scale;&#xD;    case &apos;Stage size&apos;:&#xD;        return new List([StageMorph.prototype.dimensions.x,&#xD;                                   StageMorph.prototype.dimensions.y]);&#xD;    case &apos;Stage scale&apos;:&#xD;       return stage.scale;&#xD;    case &apos;Retina display support&apos;:&#xD;        return isRetinaEnabled();&#xD;    case &apos;Long form input dialog&apos;:&#xD;        return InputSlotDialogMorph.prototype.isLaunchingExpanded;&#xD;    case &apos;Plain prototype labels&apos;:&#xD;        return BlockLabelPlaceHolderMorph.prototype.plainLabel;&#xD;    case &apos;Input sliders&apos;:&#xD;        return MorphicPreferences.useSliderForInput;&#xD;    case &apos;Execute on slider change&apos;:&#xD;        return ArgMorph.prototype.executeOnSliderEdit;&#xD;    case &apos;Clicking sound&apos;:&#xD;        return !!BlockMorph.prototype.snapSound;&#xD;    case &apos;Turbo mode&apos;:&#xD;        return stage.isFastTracked;&#xD;    case &apos;Flat design&apos;:&#xD;        return MorphicPreferences.isFlat;&#xD;    case &apos;Keyboard editing&apos;:&#xD;        return !!this.scripts.focus;&#xD;    case &apos;Visible stepping&apos;:&#xD;        return Process.prototype.enableSingleStepping;&#xD;    case &apos;Thread safe scripts&apos;:&#xD;        return stage.isThreadSafe;&#xD;    case &apos;Prefer smooth animations&apos;:&#xD;        return StageMorph.prototype.frameRate &gt; 0;&#xD;    case &apos;Flat line ends&apos;:&#xD;        return SpriteMorph.prototype.useFlatLineEnds;&#xD;    case &apos;Codification support&apos;:&#xD;        return StageMorph.prototype.enableCodeMapping;&#xD;    case &apos;Inheritance support&apos;:&#xD;        return StageMorph.prototype.enableInheritance;&#xD;    case &apos;Hyper blocks support&apos;:&#xD;        return Process.prototype.enableHyperOps;&#xD;    default: return which;&#xD;    case &apos;Visible palette&apos;:&#xD;        return ide.currentCategory;&#xD;}</l></block><list><block var="which"/></list></block></block></script></block-definition><block-definition s="set flag %&apos;which&apos; to %&apos;tf&apos;" type="command" category="sensing"><comment x="0" y="0" w="254.66666666666666" collapsed="false">Allows changing global settings programmatically.&#xD;This block is for Boolean (checkbox) settings; use&#xD;SET VALUE for numeric or text values.&#xD;&#xD;Eisenberg&apos;s Law:  Anything you can do from the user interface you should be able to do in your program, and vice versa.  This library is just a beginning; there are many UI controls outside of the Settings menu.</comment><header></header><code></code><translations>pt:altera o valor da configuração _ para _&#xD;</translations><inputs><input type="%s" readonly="true"><options>Presentation mode&#xD;Retina display support&#xD;Long form input dialog&#xD;Plain prototype labels&#xD;Input sliders&#xD;Execute on slider change&#xD;Clicking sound&#xD;Turbo mode&#xD;Flat design&#xD;Keyboard editing&#xD;Visible stepping&#xD;Thread safe scripts&#xD;Prefer smooth animations&#xD;Flat line ends&#xD;Codification support&#xD;Inheritance support&#xD;Hyper blocks support</options></input><input type="%b"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>which</l><l>tf</l></list><l>var   stage = this.parentThatIsA(StageMorph),&#xD;        ide = stage.parentThatIsA(IDE_Morph),&#xD;        world = stage.parentThatIsA(WorldMorph),&#xD;        thisObj = this;&#xD;&#xD;if (tf != !!tf) return;&#xD;&#xD;try{&#xD;ide.savingPreferences = false;&#xD;&#xD;switch (which) {&#xD;    case &apos;Presentation mode&apos;:&#xD;        if (tf != ide.isAppMode) ide.toggleAppMode();&#xD;        break;&#xD;    case &apos;Retina display support&apos;:&#xD;        if (tf != isRetinaEnabled()) ide.toggleRetina();&#xD;        break;&#xD;    case &apos;Long form input dialog&apos;:&#xD;        if (tf != InputSlotDialogMorph.prototype.isLaunchingExpanded)&#xD;            ide.toggleLongFormInputDialog();&#xD;        break;&#xD;    case &apos;Plain prototype labels&apos;:&#xD;        if (tf != BlockLabelPlaceHolderMorph.prototype.plainLabel)&#xD;            ide.togglePlainPrototypeLabels();&#xD;        break;&#xD;    case &apos;Input sliders&apos;:&#xD;        MorphicPreferences.useSliderForInput = tf;&#xD;        break;&#xD;    case &apos;Execute on slider change&apos;:&#xD;        ArgMorph.prototype.executeOnSliderEdit = tf;&#xD;        break;&#xD;    case &apos;Clicking sound&apos;:&#xD;        if (tf != !!BlockMorph.prototype.snapSound)&#xD;            BlockMorph.prototype.toggleSnapSound();&#xD;        break;&#xD;    case &apos;Turbo mode&apos;:&#xD;        if (tf != stage.isFastTracked)&#xD;            ide.toggleFastTracking();&#xD;        break;&#xD;    case &apos;Flat design&apos;:&#xD;        if (tf == MorphicPreferences.isFlat) break;&#xD;        if (tf)&#xD;            ide.flatDesign();&#xD;        else&#xD;            ide.defaultDesign();&#xD;        break;&#xD;    case &apos;Keyboard editing&apos;:&#xD;        if (thisObj.scripts.focus &amp;&amp; !tf) {&#xD;            thisObj.scripts.focus.stopEditing();&#xD;        } else if (tf &amp;&amp; !thisObj.scripts.focus) {&#xD;            thisObj.scripts.toggleKeyboardEntry();&#xD;        };&#xD;        break;&#xD;    case &apos;Visible stepping&apos;:&#xD;        if (tf != Process.prototype.enableSingleStepping)&#xD;            ide.toggleSingleStepping();&#xD;        break;&#xD;    case &apos;Thread safe scripts&apos;:&#xD;        stage.isThreadSafe = tf;&#xD;        break;&#xD;    case &apos;Prefer smooth animations&apos;:&#xD;        if (tf != (StageMorph.prototype.frameRate &gt; 0))&#xD;            ide.toggleVariableFrameRate();&#xD;        break;&#xD;    case &apos;Flat line ends&apos;:&#xD;        SpriteMorph.prototype.useFlatLineEnds = tf;&#xD;        break;&#xD;    case &apos;Codification support&apos;:&#xD;        if (tf != StageMorph.prototype.enableCodeMapping) {&#xD;            StageMorph.prototype.enableCodeMapping = tf;&#xD;            ide.currentSprite.blocksCache.variables = null;&#xD;            ide.currentSprite.paletteCache.variables = null;&#xD;            ide.refreshPalette();&#xD;        }&#xD;        break;&#xD;    case &apos;Inheritance support&apos;:&#xD;        if (tf != StageMorph.prototype.enableInheritance) {&#xD;            StageMorph.prototype.enableInheritance = tf;&#xD;            ide.currentSprite.blocksCache.variables = null;&#xD;            ide.currentSprite.paletteCache.variables = null;&#xD;            ide.refreshPalette();&#xD;        }&#xD;        break;&#xD;    case &apos;Hyper blocks support&apos;:&#xD;        Process.prototype.enableHyperOps = tf;&#xD;        break;&#xD;};&#xD;}&#xD;finally {&#xD;ide.savingPreferences = false;&#xD;};&#xD;</l></block><list><block var="which"/><block var="tf"/></list></block></script></block-definition><block-definition s="set value %&apos;which&apos; to %&apos;value&apos;" type="command" category="sensing"><comment x="0" y="0" w="254.66666666666666" collapsed="false">Allows changing global settings programmatically.&#xD;This block is for numeric or text settings; use&#xD;SET FLAG for Boolean (checkbox) values.&#xD;&#xD;Eisenberg&apos;s Law:  Anything you can do from the user interface you should be able to do in your program, and vice versa.  This library is just a beginning; there are many UI controls outside of the Settings menu.</comment><header></header><code></code><translations>pt:altera o valor da configuração _ para _&#xD;</translations><inputs><input type="%s" readonly="true"><options>Project notes&#xD;Project name&#xD;Language&#xD;Zoom blocks&#xD;Stage size&#xD;Stage scale&#xD;Visible palette</options></input><input type="%s"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>which</l><l>value</l></list><l>var   stage = this.parentThatIsA(StageMorph),&#xD;        ide = stage.parentThatIsA(IDE_Morph),&#xD;        world = stage.parentThatIsA(WorldMorph);&#xD;&#xD;try {&#xD;ide.savingPreferences = false;&#xD;&#xD;switch (which) {&#xD;    case &apos;Project notes&apos;:&#xD;        ide.projectNotes = value;&#xD;        break;&#xD;    case &apos;Project name&apos;:&#xD;        ide.setProjectName(value);&#xD;        break;&#xD;    case &apos;Language&apos;:&#xD;        ide.setLanguage(value);&#xD;        break;&#xD;    case &apos;Zoom blocks&apos;:&#xD;        if (!isNaN(value)) ide.setBlocksScale(Math.min(value, 12));&#xD;        break;&#xD;    case &apos;Stage size&apos;:&#xD;        if ((value instanceof List) &amp;&amp; value.length()==2&#xD;                       &amp;&amp; !isNaN(value.at(1)) &amp;&amp; !isNaN(value.at(2)))&#xD;            ide.setStageExtent(new Point(value.at(1), value.at(2)));&#xD;        break;&#xD;    case &apos;Stage scale&apos;:&#xD;        ide.toggleStageSize(value != 1, Math.max(0.1, value));&#xD;        break;&#xD;    case &apos;Visible palette&apos;:&#xD;        ide.currentCategory = value.toLowerCase();&#xD;        ide.categories.children.forEach(function (each) {&#xD;                each.refresh();&#xD;        });&#xD;        ide.refreshPalette(true);&#xD;        break;&#xD;};&#xD;}&#xD;finally {ide.savingPreferences = true;&#xD;};</l></block><list><block var="which"/><block var="value"/></list></block></script></block-definition><block-definition s="safely try %&apos;action&apos; then if %&apos;error&apos; %&apos;handler&apos;" type="command" category="control"><comment x="0" y="0" w="276" collapsed="false">Catch errors.&#xD;&#xD;Runs the first script.  If it succeeds, nothing else happens.&#xD;But if it has an error (something that would otherwise result&#xD;in a red halo around the block), then the second script is run,&#xD;with the text of the error message that would have been shown in the variable ERROR.</comment><header></header><code></code><translations>pt:tenta executar _ e, em caso de erro _ , executa _&#xD;</translations><inputs><input type="%cs"></input><input type="%upvar"></input><input type="%cs"></input></inputs><script><custom-block s="let %upvar be %s"><l>reset</l><block s="evaluate"><block s="reportJSFunction"><list><l>proc</l></list><l>var oldHandleError = proc.handleError,&#xD;    oldCatchingErrors = proc.isCatchingErrors;&#xD;&#xD;return function(){&#xD; proc.handleError = oldHandleError;&#xD; proc.isCatchingErrors = oldCatchingErrors;&#xD;}</l></block><list></list></block></custom-block><block s="doCallCC"><block s="reifyScript"><script><block s="doRun"><block s="reportJSFunction"><list><l>reset</l><l>action</l><l>handler</l><l>proc</l></list><l>proc.isCatchingErrors = true;&#xD;proc.handleError = function(error, element){&#xD; reset();&#xD; proc.context = handler;&#xD; proc.context.variables.setVar("error", error);&#xD;}&#xD;&#xD;try{&#xD; proc.evaluate(action, new List(), true);&#xD;}&#xD;catch(e){&#xD; proc.handleError(e, null);&#xD;} </l></block><list><block var="reset"/><block var="action"/><block s="reifyScript"><script><block s="doRun"><block s="reifyScript"><script><block s="doRun"><block var="handler"/><list></list></block><block s="doRun"><block var="return"/><list></list></block></script><list></list></block><list></list></block></script><list></list></block></list></block></script><list><l>return</l></list></block></block><block s="doRun"><block var="reset"/><list></list></block></script></block-definition><block-definition s="error %&apos;msg&apos;" type="command" category="control"><comment x="0" y="0" w="268.6666666666667" collapsed="false">Throw an error.&#xD;&#xD;Makes a red halo appear around the script that runs it,&#xD;with the input text shown in a speech balloon next to&#xD;the script, just like any Snap! error.&#xD;&#xD;This is useful to put in the second script of SAFELY TRY&#xD;after some other instructions to undo the partial work of&#xD;the first script.</comment><header></header><code></code><translations>pt:lança o erro _&#xD;</translations><inputs><input type="%txt"></input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>msg</l></list><l>throw new Error(msg);</l></block><list><block var="msg"/></list></block></script></block-definition><block-definition s="let %&apos;var&apos; be %&apos;val&apos;" type="command" category="other"><comment x="0" y="0" w="183.33333333333334" collapsed="false">LET (FOO) BE (5)&#xD;is equivalent to&#xD;SCRIPT VARIABLES (FOO)&#xD;SET (FOO) TO (5)</comment><header></header><code></code><translations>pt:cria a variável de guião _ com valor _&#xD;</translations><inputs><input type="%upvar"></input><input type="%s"></input></inputs><script><block s="doSetVar"><l>var</l><block var="val"/></block></script></block-definition><block-definition s="safely try reporting %&apos;this&apos; then if %&apos;error&apos; report %&apos;that&apos;" type="reporter" category="control"><comment x="0" y="0" w="316.6666666666667" collapsed="false">Catch errors in a reporter.&#xD;&#xD;Evaluates its first input.  If that expression successfully reports a value, this block reports that value.  If the expression causes a Snap! error,&#xD;then the final input slot is evaluated with the text of what would have&#xD;been the error message in variable ERROR.  SAFELY TRY then reports the value of that final expression.&#xD;&#xD;Sometimes you&apos;ll want to throw an error in the final expression.  You&#xD;can put an ERROR block inside a CALL block to do that.</comment><header></header><code></code><translations></translations><inputs><input type="%anyUE"></input><input type="%upvar"></input><input type="%anyUE"></input></inputs><script><block s="doDeclareVariables"><list><l>value</l></list></block><custom-block s="safely try %cs then if %upvar %cs"><script><block s="doSetVar"><l>value</l><block s="evaluate"><block var="this"/><list></list></block></block></script><l>err</l><script><block s="doSetVar"><l>error</l><block var="err"/></block><block s="doSetVar"><l>value</l><block s="evaluate"><block var="that"/><list></list></block></block></script></custom-block><block s="doReport"><block var="value"/></block></script></block-definition></blocks><stage name="Stage" width="480" height="360" costume="1" 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="358"><pentrails>data:image/png;base64,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AZyA7kgCBAgQICCA7QABAgQIEEgQEMAJ6I4kQIAAAQIC2A4QIECAAIEEAQGcgO5IAgQIECAggO0AAQIECBBIEBDACeiOJECAAAECAtgOECBAgACBBAEBnIDuSAIECBAgIIDtAAECBAgQSBAQwAnojiRAgAABAgLYDhAgQIAAgQQBAZyA7kgCBAgQICCA7QABAgQIEEgQEMAJ6I4kQIAAAQIC2A4QIECAAIEEAQGcgO5IAgQIECAggO0AAQIECBBIEBDACeiOJECAAAECAtgOECBAgACBBAEBnIDuSAIECBAgIIDtAAECBAgQSBAQwAnojiRAgAABAgLYDhAgQIAAgQQBAZyA7kgCBAgQICCA7QABAgQIEEgQEMAJ6I4kQIAAAQIC2A4QIECAAIEEAQGcgO5IAgQIECAggO0AAQIECBBIEBDACeiOJECAAAECAtgOECBAgACBBAEBnIDuSAIECBAgIIDtAAECBAgQSBAQwAnojiRAgAABAgLYDhAgQIAAgQQBAZyA7kgCBAgQICCA7QABAgQIEEgQEMAJ6I4kQIAAAQIC2A4QIECAAIEEAQGcgO5IAgQIECAggO0AAQIECBBIEBDACeiOJECAAAECAtgOECBAgACBBAEBnIDuSAIECBAgIIDtAAECBAgQSBAQwAnojiRAgAABAgLYDhAgQIAAgQQBAZyA7kgCBAgQICCA7QABAgQIEEgQEMAJ6I4kQIAAAQIC2A4QIECAAIEEAQGcgO5IAgQIECAggO0AAQIECBBIEBDACeiOJECAAAECAtgOECBAgACBBAEBnIDuSAIECBAgIIDtAAECBAgQSBAQwAnojiRAgAABAgLYDhAgQIAAgQQBAZyA7kgCBAgQICCA7QABAgQIEEgQEMAJ6I4kQIAAAQIC2A4QIECAAIEEAQGcgO5IAgQIECAggO0AAQIECBBIEBDACeiOJECAAAECAtgOECBAgACBBAEBnIDuSAIECBAgIIDtAAECBAgQSBAQwAnojiRAgAABAgLYDhAgQIAAgQQBAZyA7kgCBAgQICCA7QABAgQIEEgQEMAJ6I4kQIAAAQIC2A4QIECAAIEEAQGcgO5IAgQIECAggO0AAQIECBBIEBDACeiOJECAAAECAtgOECBAgACBBAEBnIDuSAIECBAgIIDtAAECBAgQSBAQwAnojiRAgAABAgLYDhAgQIAA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</pentrails><costumes><list id="359"><item><ref mediaID="Stage_cst_costume1"></ref></item></list></costumes><sounds><list struct="atomic" id="360"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="Sprite" idx="1" x="-165.150390625" y="138.5" heading="90" scale="0.01" volume="100" pan="0" rotation="1" draggable="true" hidden="true" costume="0" color="244,255,240,1" pen="tip" id="365"><costumes><list struct="atomic" id="366"></list></costumes><sounds><list struct="atomic" id="367"></list></sounds><blocks></blocks><variables></variables><scripts><script x="30" y="10"><block s="receiveGo"></block><block s="setVolume"><l>100</l></block><custom-block s="safely try %cs then if %upvar %cs"><script><block s="hide"></block><block s="bubble"><block s="reportDifference"><block s="reportJoinWords"><list><block s="reportGetSoundAttribute"><l><option>length</option></l><block s="reportVariadicSum"><list><l>1</l><l></l></list></block></block></list></block><l>1</l></block></block><block s="bubble"><l></l></block></script><l>error</l><script><block s="clear"></block><block s="gotoXY"><l>-220</l><l>150</l></block><block s="write"><l>No sound detected!</l><l>12</l></block><block s="gotoXY"><l>-220</l><l>130</l></block><block s="write"><l>Please see inside the project and import a sound into the sprite, or</l><l>12</l></block><block s="gotoXY"><l>-220</l><l>110</l></block><block s="write"><l>try importing another sound.</l><l>12</l></block><block s="doStopThis"><l><option>all</option></l></block></script></custom-block><block s="doSetVar"><l>total-fps</l><l>0</l></block><block s="fork"><block s="reifyScript"><script><block s="doDeclareVariables"><list><l>a</l></list></block><block s="doForever"><script><block s="doSetVar"><l>a</l><block var="total-fps"/></block><block s="doWait"><l>1</l></block><block s="doSetVar"><l>fps</l><block s="reportVariadicProduct"><list><block s="reportDifference"><block var="total-fps"/><block var="a"/></block><l>1</l></list></block></block></script></block></script><list></list></block><list></list><comment w="90" collapsed="false">this is for the FPS (frames per second) counter</comment></block><block s="doSetVar"><l>name</l><block s="reportGetSoundAttribute"><l><option>name</option></l><block s="reportVariadicSum"><list><l>1</l><l></l></list></block></block></block><block s="doSetVar"><l>samples</l><block s="reportGetSoundAttribute"><l><option>samples</option></l><block s="reportVariadicSum"><list><l>1</l><l></l></list></block></block></block><block s="setVolume"><l>0</l></block><block s="playSound"><block var="name"/></block><block s="doWait"><l>1</l></block><block s="doStopAllSounds"></block><block s="setVolume"><l>100</l></block><block s="doForever"><script><block s="doSetVar"><l>i</l><block s="reportJoinWords"><list><l>-</l><block var="Speed"/></list></block></block><block s="clear"></block><block s="playSound"><block var="name"/></block><block s="doResetTimer"></block><block s="doUntil"><block s="reportIfElse"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="samples"/></block><l>2</l></block><block s="reportGreaterThan"><block var="i"/><block s="reportListAttribute"><l><option>length</option></l><block s="reportListItem"><l>1</l><block var="samples"/></block></block></block><block s="reportGreaterThan"><block var="i"/><block s="reportListAttribute"><l><option>length</option></l><block var="samples"/></block></block></block><script><block s="doSetVar"><l>i</l><custom-block s="%n sec $arrowRight sample # at sample rate %n"><block s="getTimer"></block><block s="reportGetSoundAttribute"><l><option>sample rate</option></l><block var="name"/></block></custom-block></block><block s="clear"></block><block s="up"></block><block s="gotoXY"><block s="reportDifference"><l>-240</l><block s="reportQuotient"><l>480</l><block var="Speed"/></block></block><l>0</l></block><block s="down"></block><block s="setColor"><color>255,75,10,1</color></block><block s="setSize"><l>1</l></block><block s="doWarp"><script><block s="doRepeat"><block var="Speed"/><script><block s="doIfElse"><block s="reportEquals"><block s="reportListAttribute"><l><option>length</option></l><block var="samples"/></block><l>2</l></block><script><block s="gotoXY"><block s="reportVariadicSum"><list><block s="xPosition"></block><block s="reportQuotient"><l>480</l><block var="Speed"/></block></list></block><block s="reportVariadicProduct"><list><block s="reportQuotient"><block s="reportVariadicSum"><list><block s="reportListItem"><block var="i"/><block s="reportListItem"><l>1</l><block var="samples"/></block></block><block s="reportListItem"><block var="i"/><block s="reportListItem"><l>2</l><block var="samples"/></block></block></list></block><l>2</l></block><l>150</l></list></block></block></script><script><block s="gotoXY"><block s="reportVariadicSum"><list><block s="xPosition"></block><block s="reportQuotient"><l>480</l><block var="Speed"/></block></list></block><block s="reportVariadicProduct"><list><block s="reportListItem"><block var="i"/><block var="samples"/></block><l>150</l></list></block></block></script></block><block s="doChangeVar"><l>i</l><l>1</l></block></script></block><block s="setSize"><l>6</l></block><block s="up"></block><block s="gotoXY"><l>-94</l><l>-144</l></block><block s="setColor"><color>244,255,240,1</color></block><block s="write"><block s="reportJoinWords"><list><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block s="getTimer"></block><l>60</l></block></block><l>:</l><block s="reportIfElse"><block s="reportLessThan"><block s="reportDifference"><block s="reportMonadic"><l><option>floor</option></l><block s="getTimer"></block></block><block s="reportVariadicProduct"><list><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block s="getTimer"></block><l>60</l></block></block><l>60</l></list></block></block><l>10</l></block><block s="reportJoinWords"><list><l>0</l><block s="reportDifference"><block s="reportMonadic"><l><option>floor</option></l><block s="getTimer"></block></block><block s="reportVariadicProduct"><list><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block s="getTimer"></block><l>60</l></block></block><l>60</l></list></block></block></list></block><block s="reportDifference"><block s="reportMonadic"><l><option>floor</option></l><block s="getTimer"></block></block><block s="reportVariadicProduct"><list><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block s="getTimer"></block><l>60</l></block></block><l>60</l></list></block></block></block></list></block><l>15</l></block><custom-block s="set flag %s to %b"><l>Flat line ends</l><l><bool>true</bool></l></custom-block><block s="setColor"><color>244,255,240,1</color></block><block s="gotoXY"><l>-50</l><l>-138</l></block><block s="up"></block><block s="setXPosition"><l>-50</l></block><block s="down"></block><block s="setXPosition"><l>50</l></block><block s="up"></block><block s="gotoXY"><l>-50</l><l>-138</l></block><block s="down"></block><block s="setColor"><color>255,30,20,1</color></block><block s="setXPosition"><block s="reportVariadicSum"><list><l>-50</l><block s="reportVariadicProduct"><list><block s="reportQuotient"><block s="getTimer"></block><block s="reportGetSoundAttribute"><l><option>duration</option></l><block var="name"/></block></block><l>100</l></list></block></list></block></block><block s="up"></block><block s="gotoXY"><l>74</l><l>-144</l></block><block s="setColor"><color>244,255,240,1</color></block><custom-block s="set flag %s to %b"><l>Flat line ends</l><l><bool>false</bool></l></custom-block><block s="write"><block s="reportJoinWords"><list><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block s="reportGetSoundAttribute"><l><option>duration</option></l><block var="name"/></block><l>60</l></block></block><l>:</l><block s="reportIfElse"><block s="reportLessThan"><block s="reportDifference"><block s="reportMonadic"><l><option>floor</option></l><block s="reportGetSoundAttribute"><l><option>duration</option></l><block var="name"/></block></block><block s="reportVariadicProduct"><list><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block s="reportGetSoundAttribute"><l><option>duration</option></l><block var="name"/></block><l>60</l></block></block><l>60</l></list></block></block><l>10</l></block><block s="reportJoinWords"><list><l>0</l><block s="reportDifference"><block s="reportMonadic"><l><option>floor</option></l><block s="reportGetSoundAttribute"><l><option>duration</option></l><block var="name"/></block></block><block s="reportVariadicProduct"><list><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block s="reportGetSoundAttribute"><l><option>duration</option></l><block var="name"/></block><l>60</l></block></block><l>60</l></list></block></block></list></block><block s="reportDifference"><block s="reportMonadic"><l><option>floor</option></l><block s="reportGetSoundAttribute"><l><option>duration</option></l><block var="name"/></block></block><block s="reportVariadicProduct"><list><block s="reportMonadic"><l><option>floor</option></l><block s="reportQuotient"><block s="reportGetSoundAttribute"><l><option>duration</option></l><block var="name"/></block><l>60</l></block></block><l>60</l></list></block></block></block></list></block><l>15</l></block><block s="doChangeVar"><l>total-fps</l><l>1</l></block><block s="gotoXY"><l>-200</l><l>140</l></block><block s="write"><block s="reportJoinWords"><list><block var="fps"/><l> FPS</l></list></block><l>10</l></block></script></block></script></block><block s="doStopAllSounds"></block></script></block></script><script x="394" y="37.833333333333485"><block s="doSetVar"><l>samples</l><l></l></block><block s="doSetVar"><l>fps</l><l>0</l></block><block s="doSetVar"><l>total-fps</l><l>0</l></block><block s="doSetVar"><l>i</l><l>0</l></block><block s="doSetVar"><l>name</l><l></l></block><block s="doSetVar"><l>Speed</l><l>400</l></block></script></scripts></sprite><watcher var="i" style="normal" x="10" y="10" color="243,118,29" hidden="true"/><watcher var="samples" style="normal" x="10" y="31.000001999999995" color="243,118,29" hidden="true"/><watcher var="Speed" style="slider" min="0" max="48000" x="16.999999999999886" y="210.00000399999993" color="243,118,29" hidden="true"/><watcher scope="Stage" s="getTimer" style="normal" x="10" y="204.0000039999999" color="4,148,220" hidden="true"/><watcher var="name" style="normal" x="10" y="225.00000599999998" color="243,118,29" hidden="true"/><watcher var="total-fps" style="normal" x="10" y="246.00000799999998" color="243,118,29" hidden="true"/><watcher var="fps" style="normal" x="10" y="267.0000099999999" color="243,118,29" hidden="true"/><watcher scope="Stage" s="reportMouseX" style="normal" x="10" y="288.0000119999999" color="4,148,220" hidden="true"/></sprites></stage><variables><variable name="i"><l>0</l></variable><variable name="samples"><l></l></variable><variable name="Speed"><l>400</l></variable><variable name="name"><l></l></variable><variable name="total-fps"><l>0</l></variable><variable name="fps"><l>0</l></variable></variables></scene></scenes></project><media name="visualizer" app="Snap! 7, https://snap.berkeley.edu" version="2"><costume name="costume1" center-x="240" center-y="180" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAAAXNSR0IArs4c6QAADotJREFUeF7t1cEJADAMxLBk/6Fb6BD1R1ngQAS8M3PGESBAgAABAl8FVoC/ehsjQIAAAQJPQIA9AgECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBATYDxAgQIAAgUBAgAN0kwQIECBAQID9AAECBAgQCAQEOEA3SYAAAQIEBNgPECBAgACBQECAA3STBAgQIEBAgP0AAQIECBAIBAQ4QDdJgAABAgQE2A8QIECAAIFAQIADdJMECBAgQECA/QABAgQIEAgEBDhAN0mAAAECBC5oYGgQUTbVPQAAAABJRU5ErkJggg==" mediaID="Stage_cst_costume1"/></media></snapdata>