14e867904c8295537803c1c8a076e130df5674b58mikesamuel@echo off 24e867904c8295537803c1c8a076e130df5674b58mikesamuel:: Launch FindBugs on a Windows system. 34e867904c8295537803c1c8a076e130df5674b58mikesamuel:: Adapted from scripts found at http://www.ericphelps.com/batch/ 44e867904c8295537803c1c8a076e130df5674b58mikesamuel:: This will only work on Windows NT or later! 54e867904c8295537803c1c8a076e130df5674b58mikesamuel 64e867904c8295537803c1c8a076e130df5674b58mikesamuel:: Don't affect environment outside of this invocation 74e867904c8295537803c1c8a076e130df5674b58mikesamuelsetlocal 84e867904c8295537803c1c8a076e130df5674b58mikesamuel 94e867904c8295537803c1c8a076e130df5674b58mikesamuel:: ---------------------------------------------------------------------- 104e867904c8295537803c1c8a076e130df5674b58mikesamuel:: Set up default values 114e867904c8295537803c1c8a076e130df5674b58mikesamuel:: ---------------------------------------------------------------------- 124e867904c8295537803c1c8a076e130df5674b58mikesamuelset appjar=findbugs.jar 134e867904c8295537803c1c8a076e130df5674b58mikesamuelset javahome= 144e867904c8295537803c1c8a076e130df5674b58mikesamuelset launcher=java.exe 154e867904c8295537803c1c8a076e130df5674b58mikesamuelset start=start "FindBugs" 164e867904c8295537803c1c8a076e130df5674b58mikesamuelset jvmargs= 174e867904c8295537803c1c8a076e130df5674b58mikesamuelset debugArg= 184e867904c8295537803c1c8a076e130df5674b58mikesamuelset conserveSpaceArg= 194e867904c8295537803c1c8a076e130df5674b58mikesamuelset workHardArg= 204e867904c8295537803c1c8a076e130df5674b58mikesamuelset args= 214e867904c8295537803c1c8a076e130df5674b58mikesamuelset javaProps= 224e867904c8295537803c1c8a076e130df5674b58mikesamuelset maxheap=768 234e867904c8295537803c1c8a076e130df5674b58mikesamuel 244e867904c8295537803c1c8a076e130df5674b58mikesamuelREM default UI is gui2 254e867904c8295537803c1c8a076e130df5674b58mikesamuelset launchUI=2 264e867904c8295537803c1c8a076e130df5674b58mikesamuel 274e867904c8295537803c1c8a076e130df5674b58mikesamuel:: Try finding the default FINDBUGS_HOME directory 284e867904c8295537803c1c8a076e130df5674b58mikesamuel:: from the directory path of this script 294e867904c8295537803c1c8a076e130df5674b58mikesamuelset default_findbugs_home=%~dp0.. 304e867904c8295537803c1c8a076e130df5674b58mikesamuel 314e867904c8295537803c1c8a076e130df5674b58mikesamuel:: Honor JAVA_HOME environment variable if it is set 324e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%JAVA_HOME%"=="" goto nojavahome 334e867904c8295537803c1c8a076e130df5674b58mikesamuelif not exist "%JAVA_HOME%\bin\javaw.exe" goto nojavahome 344e867904c8295537803c1c8a076e130df5674b58mikesamuelset javahome=%JAVA_HOME%\bin\ 354e867904c8295537803c1c8a076e130df5674b58mikesamuel:nojavahome 364e867904c8295537803c1c8a076e130df5674b58mikesamuel 374e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto loop 384e867904c8295537803c1c8a076e130df5674b58mikesamuel 394e867904c8295537803c1c8a076e130df5674b58mikesamuel:: ---------------------------------------------------------------------- 404e867904c8295537803c1c8a076e130df5674b58mikesamuel:: Process command-line arguments 414e867904c8295537803c1c8a076e130df5674b58mikesamuel:: ---------------------------------------------------------------------- 424e867904c8295537803c1c8a076e130df5674b58mikesamuel 434e867904c8295537803c1c8a076e130df5674b58mikesamuel:shift2 444e867904c8295537803c1c8a076e130df5674b58mikesamuelshift 454e867904c8295537803c1c8a076e130df5674b58mikesamuel:shift1 464e867904c8295537803c1c8a076e130df5674b58mikesamuelshift 474e867904c8295537803c1c8a076e130df5674b58mikesamuel 484e867904c8295537803c1c8a076e130df5674b58mikesamuel:loop 494e867904c8295537803c1c8a076e130df5674b58mikesamuel 504e867904c8295537803c1c8a076e130df5674b58mikesamuel:: Remove surrounding quotes from %1 and %2 514e867904c8295537803c1c8a076e130df5674b58mikesamuelset firstArg=%~1 524e867904c8295537803c1c8a076e130df5674b58mikesamuelset secondArg=%~2 534e867904c8295537803c1c8a076e130df5674b58mikesamuel 544e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="" goto launch 554e867904c8295537803c1c8a076e130df5674b58mikesamuel 564e867904c8295537803c1c8a076e130df5674b58mikesamuel:: AddMessages 574e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-addMessages" goto notAddMessages 584e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.AddMessages 594e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1 604e867904c8295537803c1c8a076e130df5674b58mikesamuel:notAddMessages 614e867904c8295537803c1c8a076e130df5674b58mikesamuel 624e867904c8295537803c1c8a076e130df5674b58mikesamuel:: computeBugHistory 634e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-computeBugHistory" goto notUpdate 644e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.workflow.Update 654e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1 664e867904c8295537803c1c8a076e130df5674b58mikesamuel:notUpdate 674e867904c8295537803c1c8a076e130df5674b58mikesamuel 684e867904c8295537803c1c8a076e130df5674b58mikesamuel:: convertXmlToText 694e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-xmltotext" goto notXmlToText 704e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.PrintingBugReporter 714e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1 724e867904c8295537803c1c8a076e130df5674b58mikesamuel:notXmlToText 734e867904c8295537803c1c8a076e130df5674b58mikesamuel 744e867904c8295537803c1c8a076e130df5674b58mikesamuel:: copyBuggySource 754e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-copyBS" goto notCopyBS 764e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.workflow.CopyBuggySource 774e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1 784e867904c8295537803c1c8a076e130df5674b58mikesamuel:notCopyBS 794e867904c8295537803c1c8a076e130df5674b58mikesamuel 804e867904c8295537803c1c8a076e130df5674b58mikesamuel:: defectDensity 814e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-defectDensity" goto notDefectDensity 824e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.workflow.DefectDensity 834e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1 844e867904c8295537803c1c8a076e130df5674b58mikesamuel:notDefectDensity 854e867904c8295537803c1c8a076e130df5674b58mikesamuel 864e867904c8295537803c1c8a076e130df5674b58mikesamuel:: filterBugs 874e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-filterBugs" goto notFilterBugs 884e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.workflow.Filter 894e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1 904e867904c8295537803c1c8a076e130df5674b58mikesamuel:notFilterBugs 914e867904c8295537803c1c8a076e130df5674b58mikesamuel 924e867904c8295537803c1c8a076e130df5674b58mikesamuel:: listBugDatabaseInfo 934e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-listBugDatabaseInfo" goto notListBugDatabaseInfo 944e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.workflow.ListBugDatabaseInfo 954e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1 964e867904c8295537803c1c8a076e130df5674b58mikesamuel:notListBugDatabaseInfo 974e867904c8295537803c1c8a076e130df5674b58mikesamuel 984e867904c8295537803c1c8a076e130df5674b58mikesamuel:: mineBugHistory 994e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-mineBugHistory" goto notMineBugHistory 1004e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.workflow.MineBugHistory 1014e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1 1024e867904c8295537803c1c8a076e130df5674b58mikesamuel:notMineBugHistory 1034e867904c8295537803c1c8a076e130df5674b58mikesamuel 1044e867904c8295537803c1c8a076e130df5674b58mikesamuel:: printAppVersion 1054e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-printAppVersion" goto notPrintAppVersion 1064e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.workflow.PrintAppVersion 1074e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1 1084e867904c8295537803c1c8a076e130df5674b58mikesamuel:notPrintAppVersion 1094e867904c8295537803c1c8a076e130df5674b58mikesamuel 1104e867904c8295537803c1c8a076e130df5674b58mikesamuel:: printClass 1114e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-printClass" goto notPrintClass 1124e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.workflow.PrintClass 1134e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1 1144e867904c8295537803c1c8a076e130df5674b58mikesamuel:notPrintClass 1154e867904c8295537803c1c8a076e130df5674b58mikesamuel 1164e867904c8295537803c1c8a076e130df5674b58mikesamuel:: rejarForAnalysis 1174e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-rejar" goto notRejar 1184e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.workflow.RejarClassesForAnalysis 1194e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1 1204e867904c8295537803c1c8a076e130df5674b58mikesamuel:notRejar 1214e867904c8295537803c1c8a076e130df5674b58mikesamuel 1224e867904c8295537803c1c8a076e130df5674b58mikesamuel:: setBugDatabaseInfo 1234e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-setInfo" goto notSetBugDatabaseInfo 1244e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.workflow.SetBugDatabaseInfo 1254e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1 1264e867904c8295537803c1c8a076e130df5674b58mikesamuel:notSetBugDatabaseInfo 1274e867904c8295537803c1c8a076e130df5674b58mikesamuel 1284e867904c8295537803c1c8a076e130df5674b58mikesamuel:: unionBugs 1294e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-unionBugs" goto notUnionBugs 1304e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.workflow.UnionResults 1314e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1 1324e867904c8295537803c1c8a076e130df5674b58mikesamuel:notUnionBugs 1334e867904c8295537803c1c8a076e130df5674b58mikesamuel 1344e867904c8295537803c1c8a076e130df5674b58mikesamuel:: xpathFind 1354e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-xpathFind" goto notXPathFind 1364e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.workflow.XPathFind 1374e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1 1384e867904c8295537803c1c8a076e130df5674b58mikesamuel:notXPathFind 1394e867904c8295537803c1c8a076e130df5674b58mikesamuel 1404e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-gui" goto notGui 1414e867904c8295537803c1c8a076e130df5674b58mikesamuelset launchUI=2 1424e867904c8295537803c1c8a076e130df5674b58mikesamuelset launcher=javaw.exe 1434e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1 1444e867904c8295537803c1c8a076e130df5674b58mikesamuel:notGui 1454e867904c8295537803c1c8a076e130df5674b58mikesamuel 1464e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-gui1" goto notGui1 1474e867904c8295537803c1c8a076e130df5674b58mikesamuelset launchUI=1 1484e867904c8295537803c1c8a076e130df5674b58mikesamuelset javaProps=-Dfindbugs.launchUI=1 %javaProps% 1494e867904c8295537803c1c8a076e130df5674b58mikesamuelset launcher=javaw.exe 1504e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1 1514e867904c8295537803c1c8a076e130df5674b58mikesamuel:notGui1 1524e867904c8295537803c1c8a076e130df5674b58mikesamuel 1534e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-textui" goto notTextui 1544e867904c8295537803c1c8a076e130df5674b58mikesamuelset launchUI=0 1554e867904c8295537803c1c8a076e130df5674b58mikesamuelset launcher=java.exe 1564e867904c8295537803c1c8a076e130df5674b58mikesamuelset start= 1574e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1 1584e867904c8295537803c1c8a076e130df5674b58mikesamuel:notTextui 1594e867904c8295537803c1c8a076e130df5674b58mikesamuel 1604e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-debug" goto notDebug 1614e867904c8295537803c1c8a076e130df5674b58mikesamuelset launcher=java.exe 1624e867904c8295537803c1c8a076e130df5674b58mikesamuelset start= 1634e867904c8295537803c1c8a076e130df5674b58mikesamuelset debugArg=-Dfindbugs.debug=true 1644e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1 1654e867904c8295537803c1c8a076e130df5674b58mikesamuel:notDebug 1664e867904c8295537803c1c8a076e130df5674b58mikesamuel 1674e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-help" goto notHelp 1684e867904c8295537803c1c8a076e130df5674b58mikesamuelset launchUI=help 1694e867904c8295537803c1c8a076e130df5674b58mikesamuelset launcher=java.exe 1704e867904c8295537803c1c8a076e130df5674b58mikesamuelset start= 1714e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1 1724e867904c8295537803c1c8a076e130df5674b58mikesamuel:notHelp 1734e867904c8295537803c1c8a076e130df5674b58mikesamuel 1744e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-version" goto notVersion 1754e867904c8295537803c1c8a076e130df5674b58mikesamuelset launchUI=version 1764e867904c8295537803c1c8a076e130df5674b58mikesamuelset launcher=java.exe 1774e867904c8295537803c1c8a076e130df5674b58mikesamuelset start= 1784e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1 1794e867904c8295537803c1c8a076e130df5674b58mikesamuel:notVersion 1804e867904c8295537803c1c8a076e130df5674b58mikesamuel 1814e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-home" set FINDBUGS_HOME=%secondArg% 1824e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-home" goto shift2 1834e867904c8295537803c1c8a076e130df5674b58mikesamuel 1844e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-jvmArgs" set jvmargs=%secondArg% 1854e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-jvmArgs" goto shift2 1864e867904c8295537803c1c8a076e130df5674b58mikesamuel 1874e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-maxHeap" set maxheap=%secondArg% 1884e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-maxHeap" goto shift2 1894e867904c8295537803c1c8a076e130df5674b58mikesamuel 1904e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-conserveSpace" set conserveSpaceArg=-Dfindbugs.conserveSpace=true 1914e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-conserveSpace" goto shift1 1924e867904c8295537803c1c8a076e130df5674b58mikesamuel 1934e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-workHard" set workHardArg=-Dfindbugs.workHard=true 1944e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-workHard" goto shift1 1954e867904c8295537803c1c8a076e130df5674b58mikesamuel 1964e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-javahome" set javahome=%secondArg%\bin\ 1974e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-javahome" goto shift2 1984e867904c8295537803c1c8a076e130df5674b58mikesamuel 1994e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-property" set javaProps=-D%secondArg% %javaProps% 2004e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-property" goto shift2 2014e867904c8295537803c1c8a076e130df5674b58mikesamuel 2024e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="" goto launch 2034e867904c8295537803c1c8a076e130df5674b58mikesamuel 2044e867904c8295537803c1c8a076e130df5674b58mikesamuelset args=%args% "%firstArg%" 2054e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1 2064e867904c8295537803c1c8a076e130df5674b58mikesamuel 2074e867904c8295537803c1c8a076e130df5674b58mikesamuel:: ---------------------------------------------------------------------- 2084e867904c8295537803c1c8a076e130df5674b58mikesamuel:: Launch FindBugs 2094e867904c8295537803c1c8a076e130df5674b58mikesamuel:: ---------------------------------------------------------------------- 2104e867904c8295537803c1c8a076e130df5674b58mikesamuel:launch 2114e867904c8295537803c1c8a076e130df5674b58mikesamuel:: Make sure FINDBUGS_HOME is set. 2124e867904c8295537803c1c8a076e130df5674b58mikesamuel:: If it isn't, try using the default value based on the 2134e867904c8295537803c1c8a076e130df5674b58mikesamuel:: directory path of the invoked script. 2144e867904c8295537803c1c8a076e130df5674b58mikesamuel:: Note that this will fail miserably if the value of FINDBUGS_HOME 2154e867904c8295537803c1c8a076e130df5674b58mikesamuel:: has quote characters in it. 2164e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%FINDBUGS_HOME%"=="" goto checkHomeValid 2174e867904c8295537803c1c8a076e130df5674b58mikesamuelset FINDBUGS_HOME=%default_findbugs_home% 2184e867904c8295537803c1c8a076e130df5674b58mikesamuel 2194e867904c8295537803c1c8a076e130df5674b58mikesamuel:checkHomeValid 2204e867904c8295537803c1c8a076e130df5674b58mikesamuelif not exist "%FINDBUGS_HOME%\lib\%appjar%" goto homeNotSet 2214e867904c8295537803c1c8a076e130df5674b58mikesamuel 2224e867904c8295537803c1c8a076e130df5674b58mikesamuel:found_home 2234e867904c8295537803c1c8a076e130df5674b58mikesamuel:: Launch FindBugs! 2244e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%fb_mainclass%"=="" goto runJar 2254e867904c8295537803c1c8a076e130df5674b58mikesamuel"%javahome%%launcher%" %debugArg% %conserveSpaceArg% %workHardArg% %javaProps% "-Dfindbugs.home=%FINDBUGS_HOME%" -Xmx%maxheap%m %jvmargs% "-Dfindbugs.launchUI=%launchUI%" -cp "%FINDBUGS_HOME%\lib\%appjar%" %fb_mainclass% %args% 2264e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto end 2274e867904c8295537803c1c8a076e130df5674b58mikesamuel:runjar 2284e867904c8295537803c1c8a076e130df5674b58mikesamuel%start% "%javahome%%launcher%" %debugArg% %conserveSpaceArg% %workHardArg% %javaProps% "-Dfindbugs.home=%FINDBUGS_HOME%" -Xmx%maxheap%m %jvmargs% "-Dfindbugs.launchUI=%launchUI%" -jar "%FINDBUGS_HOME%\lib\%appjar%" %args% 2294e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto end 2304e867904c8295537803c1c8a076e130df5674b58mikesamuel 2314e867904c8295537803c1c8a076e130df5674b58mikesamuel:: ---------------------------------------------------------------------- 2324e867904c8295537803c1c8a076e130df5674b58mikesamuel:: Report that FINDBUGS_HOME is not set (and was not specified) 2334e867904c8295537803c1c8a076e130df5674b58mikesamuel:: ---------------------------------------------------------------------- 2344e867904c8295537803c1c8a076e130df5674b58mikesamuel:homeNotSet 2354e867904c8295537803c1c8a076e130df5674b58mikesamuelecho Could not find FindBugs home directory. There may be a problem 2364e867904c8295537803c1c8a076e130df5674b58mikesamuelecho with the FindBugs installation. Try setting FINDBUGS_HOME, or 2374e867904c8295537803c1c8a076e130df5674b58mikesamuelecho re-installing. 2384e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto end 2394e867904c8295537803c1c8a076e130df5674b58mikesamuel 2404e867904c8295537803c1c8a076e130df5674b58mikesamuel:end 241