["$ benchmark..H$ ","","HFYGVBenchmarking Console application, 2 loops: C#VYYF8F7;YF!F8F7.Runtime.CompilerServicesFIF9F+Y{YHconst FZ_maxF_V1000000V;YHF-FRVFWV()YH{YHHvar s1F_Stopwatch.FANew();YHHFV(FZiF_0; i < _max; i++)YHH{YHH}YHHs1.Stop();YHHvar s2F_Stopwatch.FANew();YHHFV(FZiF_0; i < _max; i++)YHH{YHH}YHHs2.Stop();YHHF%((double)(s1.Elapsed.TotalMilliseconds * 1000000) /YHHH_max).ToF=(G0.00 nsG));YHHF%((double)(s2.Elapsed.TotalMilliseconds * 1000000) /YHHH_max).ToF=(G0.00 nsG));YHHConsole.FY();YH}YYHF-FZ_temp1;YHF-FZ_temp2FIH[MFCImpl(MFCImplOptions.NoInlining)]YHF-FRVMFC1V()YH{YH}YYH[MFCImpl(MFCImplOptions.NoInlining)]YHF-FRVMFC2V()YH{YH}Y}YYVBenchmarking Console application, 3 loops: C#VYYF8F7;YF!YF9F+Y{YHF-FRVFWV()YH{YHHconst FZmF_V1000000V;YHHStopwatch s1F_Stopwatch.FANew();YHHFV(FZiF_0; i < m; i++)YHH{YHH}YHHs1.Stop();YHHStopwatch s2F_Stopwatch.FANew();YHHFV(FZiF_0; i < m; i++)YHH{YHH}YHHs2.Stop();YHHStopwatch s3F_Stopwatch.FANew();YHHFV(FZiF_0; i < m; i++)YHH{YHH}YHHs3.Stop();YHHF%G{0},{1},{2}G,YHHHs1.ElapsedMilliseconds,YHHHs2.ElapsedMilliseconds,YHHHs3.ElapsedMilliseconds);YHHConsole.FY();YH}Y}YYVBenchmarking aspx file: ASP.NET and C#VYYF8F7;YF!F8F7.Web.UIFIF*partial F9_Default : PageY{YHprotected FRVPage_LoadV(object sender, EventArgs e)YH{YHHconst FZmF_V1000000V;YHHStopwatch s1F_Stopwatch.FANew();YHHFV(FZiF_0; i < m; i++)YHH{YHH}YHHs1.Stop();YHHStopwatch s2F_Stopwatch.FANew();YHHFV(FZiF_0; i < m; i++)YHH{YHH}YHHs2.Stop();YHHResponse.FK(GFG1: G);YHHResponse.FK(s1.ElapsedMilliseconds);YHHResponse.FK(G<br/>G +YHHHGFG2: G);YHHResponse.FK(s2.ElapsedMilliseconds);YH}Y}V","A*AssEBBa#+CCC|F4777F74F741CECEE(BX","Benchmark."," If we have a solid knowledge of how fast code executes, we can develop more efficient programs. This opens new possibilities.","Benchmarking, notes."," With benchmarking, we can make smarter decisions. Most of the programs we use every day have been benchmarked many times.","Example."," First we see some benchmark loops. This program is what I use for my experiments. Change \"_max\" depending on the code of each iteration. Start smaller and push the limit up. ","Use the two loops here to time code. The two stopwatches are set up to print out the time.","Note 2: ","Run in a new C# console application. Adjust _max higher or lower based on how slow your iterations are.","Note 3: ","Always run in Release mode, never in VS\u2014click the .exe yourself. Change the order of the tests.","Some problems."," The benchmarking code has some problems. The second block sometimes takes less time to execute due to unknown causes. ","Repeat and swap two loops if you are doubtful. The first program shown converts the results to nanoseconds.","For ","for","It is usually best to report results in nanoseconds or microseconds with the number of iterations used to divide the result.","Convert Nanoseconds ","convert-nanoseconds","Stopwatch ","stopwatch","An example optimization."," The Dictionary collection in the base class library is a huge optimization. But developers sometimes write code that results in twice as many lookups. ","TryGetValue ","trygetvalue","Summary."," Benchmarking encourages careful thinking about your code. It saves nanoseconds from your software. It also improves the depth of your understanding."]

%iVBORw0KG;)NSUhEUg?AO8?ABsCAM?AC1ihX9)YFBMVEX::32tr31NT+/Pz/+fmdm5tsa2t.UHSzs7HwsKqqKjg4OD/8PDw8PCIh4fc29v29vbm5ua5tbX/7e3/6en/9fUJ.n5+fn/3d358fH/5eX30ND/1tb56Oj77e344eHFNZQF?AJnUlEQVR4Xuyb63Lbug6FMwPedb/ZzqU97/+Wh4BAwzKjbk+zTdfZXTP9IRFp5iOwIEJ2XjJB1PF47Fc1TU86RgEpX+Ql/lnRy1OIkY77vFE7vBnwN+eFZ+QdUBWpi6o2uNvFqsI14W2a7f48I+9wyXu84h02vPCEvNAzkfCKR3lxj/fYoJ6Mt9mmt2t6YbperJpkX+Lthbd/Rt5qj5f0z7zfsF1teJvyvOXblfDCM/L2jHRzuxLe4+N4h2Ds4WCNHu/ernrGBbSv8PZ354Wlnt5QUx0OSQbu3K5y3qYAL9HOb6fTx8fpNLeHs7SCr7Yr4d1bZN6mIC8sU8T9iDq9UXaNd84H7RTcq13JIqxqkhIv3Du7J6zmHzbijooF8C+3q3yReY/CS4I78iq27jzVCtMbAL7SnkXHWxez08bxzuYl2qleFDbm19/1TnOFBLcuCi/pvrxqmSLtPCPuiNX829YZrnT7YmpXwnvn9M5rerE5Y1q+oyS988y4WM4Gvj8v4UZeF90bvjcuqHpKuGq01rr/CO8SedvI+/rd7VvPE5k3KuK2j7Xv0YW2bcfuHxv00HmNka66CXPQrdiXq1lVkXcsjwugjLWtivImqo3Sw+eBSmEdLl3QuiUZw6G5cPBxgBrN4cCJjPal9P60VxoKPRfw3w9rbajrqrXGJOIhh12WpY6ZWSrdsgxJQkHhw5X7r4m8mMbRHqJGBXTSOH2gTt5uZRTcmbcmXppB/cFaXzuDfvLeaSTWV7iKYJHXUQF4h4OHj8i23Uw+xIuH4whp6sXbA2lYeU/MO25gjQnIe+8RNNLinIIjt/3hkbbDclXORFVXuHU9Ia3yiOte1apX7LFuWzTrIO8ipK4MstrWKwXYmoU3iraXVcH9eeNUhrjTEu1lEHdEWMXAHvLkxvUOHT5QFDG4telI0bzx/6oj6Eo7NgqzByommCfBOdqii7y4D6z725c2G3mx8tZfrlbiHitMeC9wB8RtUuOSh4rYlwd5tC/KINKFv1N7BvB2U0R3ty/jzrU7oGynFhKmDTsRnGMVO3dRoLE/YaM+hzKvbCLhTrUlWqd4LefV9DtKSDJB5RwIt0IGzqLSkQJAvDutuMpToQPI1rzGSC28ZBHErdC3QisuYl4FEVcX411qcVKLvB42aSRewZ0m4n3FB3V/yavI9wDZmwsZbfPT1dkZvgCvDN2EOy3K0tS9cvHmt8IrtxeCc9R6Ei5FVgDbp6+MtnnXIF4ula4Yr2Ri6SJuSzmbLnl5MN3cNvE2pVcpxtWX7WoRXtxEC5C56PwrIETeYzneOeFS5ZEnawETCrXIbTzwBsBQljNYG9WFfdObqWbdxMxFwtuifaGUfYlXKu8V6F568cBNiCHOvCHydozr3KipBVsPIEWTNtHHlbBv30U15ewr575JKm/zosWtjpZ5FXmxnEUHVtsp+GQTdVzqfmVfV8i+WeUNZN8t77iONtLI6Zn6v8O1rHYKcTPeXfsmXsB21bw8wL5+zSU11zl7bygzzWl2B5ExbRg7JbS5fc2Ofc8Hl7ZcOeeVR/f4lmQnnfGJN+DOTHz0iIIElNvXfWZfEPvSiXV8eQSvITbiRdyUcp14KXJKnnQ7OZFQ4g0Smts3jR3u5QH2Vcm+lB0pZw9w/UjF.Dg1k08/NK+rqR9mU0qj+1LtzbNRi0cKZVw6yaavdMG2TcUHRbyygMGS9253fDuQ+zbV3/29J0T7yPtew?TnlK72Fg3vqK93b7+px3Yl6lqgfZl+AM8crD95xH4Z2F9wb75sOCnFxkWBgeYd+O7bvUCbfB9LrthHfmtXDrJlrY5RX7llFWeTILLpgbcm8+RynDWdu1L/PSJrafz75i38Dr5YeFhnhRiyLr2QZAspYwKDbADRNX+HzWn9gxC836Dh5p3wXFuFzNEsscaGzb7dpXeNtPh4Waedm+VTlesS8OC6ZTSUOLuEHBFoNBfloElsfI4IMJMnHlw8L+B6GlZ315y0SyJqBaumgVwPY9ZhSFBx6KKNZY3hvZROYd9mb9+UGzvrwk1odMo1KQR1P43GbRXoHYlw9ouIlh1741z/qFeVFvs90CUHHDp1+Ge39/j8Tb/bHt+FNt6x6J0BROwZ59F9UVnvUJ950nePPmtTZmrdRuk1xBYeCP07s2PP+GsaKZUOzLCeZ58XP7Tsm+TclXk6wJ7atrFL9eBfj11zv5yMmxt6eI346Jfdty9s2Hhbsqf/q+WmPG8rwyphbQxr62qH3zMfXOklmfTxuRty/Gm4+phVx0fvpqW+Lpuz+mlrGv8FprvOAOOqzi+b8J2+tBa91GmfZfGhZeyvGyfe3l4dklXr9ed2F77RKv/vqwUNC+wusjLwiv1wzcMV9gdef1FmXGL9iXeIei9mVe+kgxXPCGxDus1yNdyHVIvN3XZv16GYva9/JDVbLv+tfmjdYM3APeaUJSTwFNsq/pf9u+nF9+y1SYd7DWDom37zvNwCMQX8W0fN13X2xXk/DimKqKnTaYdyH7Cq/XDOxXXrZvusb19ovtinl/0KxbzL6JN5B9Uzn3o2a5ldcHllsDxsTrv9CueBCNKsU7kdKooSClt9dJw8oX5JoCEi62q6cW88qfSCFffi0BT85L2Uw8cMULW17CfXIxTSP5PAqv4H4XXki8G76ct3lC3r/6q7/6K/my/UTH4hO+NGXxZyD8XePdQI6b+VtRHIiR9YSxGEy6OJUpjHscrmAghXDwWEAYWWAeVycOoMil5ljRPP0hvDVi5OkV3l8GShwGSn4xVoAlvX8E77zDK+UsgbvlzIGSX4oW3D+Cl3KxY98NbxaY23yPd4v7WF5x5X6Z5oF7ccyLsQzMItw/Ib2M8f/u62A1YhAMAnDUPQostEXconn/t+wPEzoRHGxP6s55Lh/4D8npnPf++4r3zrnzPAvmSha9R63Uxou9qrXcUy0558d0b5TeAi+L2ts8Z4ArweR+LeH9BONS0FFxvrKInmHu5xvorZVacNGbP1euZVzeD3qboie377V2jiZmYjQtuPO8ASskvZihTlGfL70GjjetceFddq7KX+eq2vm2XoBzRKAld4Xz1V5Z9L/ny7mi1xIZaK21hPc1nisWO+uc+14G2uleXuVwrsbni6LyPsjde65KKe1ztjLSYulde650UZyveUUCuCt+bdAripyr9nw1OJC7+VzFuxfpYOd7R+f7r7k6tDcI7f5zRa8h6RTcrX6O9FzpHGskPXtJo2K6AsZGeXYTRHF7b+h7B0V6j7fwpune+ef7zt4wLG52vj+tefmZj0hxVw)BJRU5Er@ggg==%iVBORw0KG;)NSUhEUg?AIc?ACHC)?ZjBXW?ABpklEQVR4Xu3bwY2sQAxF0ZuT03FizskxOIhKwP8jNCq1QJrNiNc947tkddSL0oMG+ijcwPso2D1wxTz66HCUASIHYHU6EqQOyMNRAJ6rFa10gGrawLJ1pYE1yyFbWQJF98rWFrGafove1TEOM2t1EQHQ6oAfcoxjHOMYxziqqtW5++yPv+GYPbYyjkq7xyo4w0O4P4IdXipH8JKVxhFwgQgcxSVXOJxr+bxjcZM/70juWo87grvyTRzx4b9HVQkcP7nHirvW8/vDueaC/ZFcS4Gj48JwzR5zXrMl2mPBDnzJ9lgaX1lI7ysz3Mw88u3ub8cxjoz7nnYE9/0yxziqSuvYe0zn2I1jHN/tMbkjIj79HMuIcKljl3rHOMYxjnFAVWkde4/pHLtxjOO7PSZ3RMTsj7/jGMc4VmYG1/J/JX0etDO94/MdVaV17D2mc+zGMY7v9pjcERGfdI6NY/4nHMc4xjHv88/76+OY7yvnPB3HOFZrWwAG2doSDAdvbQ5OQrQ2g6Q9W9xya/osl4ZQp+TLkexOAI9cwV73h6sc5KvDRA6LE/APOHkbCvNB8rk)ASUVORK5CYII=%iVBORw0KG;)NSUhEUg?AIw?AB4BAM?ADS7QcC)GFBMVEX:/95cvSaspm/zr6ppPiuqvilofiMhfa6xS0c)fUlEQVR42u3XsQmAMBgF4V9x?OCfVxAdAEdQtwg1il0fsHS8IpIsLob4OvPnKy1V7WXWR9ER8oMs8hbZ6ImZUYTTTAwMDAwMDAwMDAwMDAfmX4T7Tl3V+o1iYieKifLYs5NFLOYxUQrDAwMDAwMDAwMDAwMzA/MFUSx0GveDtlxrtujxRk)ASUVORK5CYII=%iVBORw0KG;)NSUhEUg?ALQ?ACsCAM?ADllnb2)YFBMVEX::6lbiX3axHPiH97gb7q161sqeYPl3/8vyEj4Td4Ui83XZvzfH8x7VmbFX8eob7/rLW5sn+5NiekecRAw/8xzb/3/vw8/T9/87/yPnD6/iV2/D+/um0pwjKyMj/svb+8CR)JSUlEQVR4XtSZ2XLqOhBFkTzPEzMk+f+/vGobsUFSxaJj17neL3ldrFp2k2T3v979vtvezucNQrftBkW37eb6uLdte96eaLUNikYf2xG9oT5OEK22EeYTRG+mj+sNojfTx60k1e1z921AXyF6I6qvZalUt9uCvinoK92VDfVxKtVuIN6E6itBy+6NehN1lFK2W+kDouW76vMmRKut1MeRlqot/RhKWrdKH+nPY5dpx3HpuL/WQVulj8uPPfNzfPxBbprZUL1UHC7Yzz7HL6JpK/QBHPbsriDaUH1eXTR/g1o8zlS94FNorxFC/Ak6xr6rcehjpadQNDShxheNgbk9ryEazJig8UQDuscpX0k0gBnsEP1KvdgpP86LdrP7igZ0vxj0LDMPHsygXuyUHxnMHs1ANNYtdcrTmaC57GDG5FLQlxnRTHiXaCm7ZfpIF2XGhqFwQPuo5ov+K7MY4tykNr6BrPQU8hfFeRjmJjNtiT4uKzBHh5Dmhi7yHH0sKvovwBOxSiMMHcyyOEzL87xf/inkAx+ihg5LTuSYBPVj/b+OI4o0cDQ9hnFcvPUhLej2vKRobsQHpXgaiTb6kM/lD+a2XVA0C5iawIa4yHNAgxmqc+Z9OXLjsJswzOckXkWdm8xQzb0vlz8xI2LX06iwi8KChmqc8iVEMyI2gQ90C4tQ9wFmqM6ZpzzlxRGZEdupTKBjH4UTuuDdF34ch1+ByfwETcQ6ammOe8pTXhxEffg9FaGh89iAtqnP64oGJKDd77v4sWfUcinoI/8UhqEZMQZoRO2C7lh9XDhx6D4iI2InMxHTJQczXzVfNKCNiN3Q+qUnnes+h055zIAGsLlI4aKPMCyke+iDEQfjFIahiWyLRtRyIdUpJ2hMiW7mRCNqOaN6bdHoY1Y0opYzqj37OHKZ0YeP6JiI0Yc13cedLXqWtEoRPaJ2QHv30cH0SqKFEtCL2ahjD2hQ+9/ElBVHv6NVc1EPsRG1RNRu6jXj0J+4+jXq4R1azkS9suh0p9cLRD0LbfZh18G+K8JTNLAP7qiNP5VKqYgL9MEWfeTEIYzbVKEPQ7QFHUpccr5ozinsrcZau4+kEe/QRIaoXdD8153wF421Vh9JkAzjXpl/i5rzFILZ+ynEUuuSJ/v9vrGh8dJjiebHUdkCdNTQvFdLxj6yDMyyQB:XLRxyRNC1qqTGtAUdeGGZogGM6do8bzkQCbZgRgUf5KBGVFbdfBfdw2njv7tko9lBAqeyMl5k?aUS8pmlOH0Jccml8i.IVCOgQ9UKiRcOpo9JfT6EZ/EE2KNUZ8NAHR3TKisOuI8UfmqAZzochCYIAeO5L7iv6wmJuerdo6uNNMzmnDcO;GtAj5fcroN5V0TDqSPFry+m5qShPoYhU9SZEfViojl1pPqjBmFYv2kOkom9HsoagSBqhuijzcyqQzzNfoVf75ppRD+UJQJxRs2+K6Lh1FHBbB2G0Jw8+MdAyhKBOL+ecu+KaDh1VK8ncLzk0AzrWTkFgqiLN+iO+7prOHVUeE8k4yU3kHUgZSkRCKKG6DXiwN6ZcUKS6ZLbzE00BiIRiIKm8UWDmVFHjzLwptbIgK7HQGQ9qi7yCTkv/i66YdTRm1c7IdMWcxSNgUgZ1F8PYPMxvK/xFGJvR8W62ofwC7SApkDq4gGck+o36s5TNJe5ET2OiqFZkX2FoYs5+vr6Cmnqp46jYIhmxQFsYoZmnBMLOooOhwcvKQbwp6JTFjNWpXQIoRlXG79zGf+gOzxV19JcxxItPBVXVSX0hYltzfrrqUWsXefF9AYxxhItfPXi742NpTl5vvQAPPJq8lrVrwj1Ncc61l3xY3590blqxl/XDcOEHkVRTNdcjifGUzQ/DjCD2qUZ0BoYxLRql42qEQhLNP+L/7elGTsQJuKI9NT5CPaEGyMQf+gjOw6sdiLrqJ:II+wfvqsgR0I6ynkQH9bzBj+Qf4CPdVV7wMrkCsnDtZvK72FjEVKMW4h4qAFI272GsiJIdr3nFjQSTKdE2skGdCIgxbvR9wagdwYor1PtwENze6ZcejVAQLxruNox8Hp4xuaPZgjAFyNQPxEM5mb+A06mdFsxoHFAQLhifZnDvbZDouh2TMOqH7gTsZLj8cw5cUxBZyluC2keWbvzJh8DeS2Xhz6alcjdpdBs38cUJ0hkPL6sWh/zSg4ywLSPD+TGZMvgZzWEe3+DsqNg9Y9A9nv4/mnkMHs/A76CfTdwrjri6igg9Nnor2QA2BCMzcOqJ5uS6kU1AzR/ppxtZlxYOep57LMFPW3x1Poz5wAeaKGc39oJ8m9mwIpTxSIv2jhodksOAE0Nw6orhXvbfxlIvMVLWah4ZZBjTjcO3cqkBEXgfj+w1Bt/qi8wsA8Jw7s3irVEy4CmYnDn12/oaE68IVGHG7V5YiLQDxEu9n9AuEzA7q9leX+GUg3L9qf3R0IO2jsfr6WtwyBzD2F/uzMQHAKf9upvO5mAkEcn7KbgQRQzYoD1CeNWyMQQzR7pIO8+54YxDEDvdM948QYovkTirJGMwiEGwemcWPFHluij2qXaZ/z0wtVwLygQMQcdL/z2veEi0DcS2lHGj6HRyA/2PD4EILGigPTuEpETb14L537HBRI9oPRNTduEyMOBFLv4oAaRCEY94NcLtnoFgtAbbB/EgcCUcjE/L1bdBRIirDGD+Hq6tj3VaXi+K+dM1Z1IISCqCAIW6TwIbHz/z8zELuzRYLXAwbeLbeQ3eEwztxAEuYTIK3lkvYO/H+SmPudq+c7DP09vhd6uh6A3jQMCPXWkxb/BKu+yWiX8c7wf8TgmBYot7sBKaA8fOaUeTfNNFRQHjxRopmGuhGQ0SCzMmUHIJQZTx1A+h5AyvTmkfTp7Q5IXToIMvuAwAbXZcb3moBkArLi+ATLB4SUnykzfQ42eKjM8LkOyoO3tj81AEiNyBwHBJQbMvuACOFI7wOtC+FI?SUCzILgDBIBcORPxWAgHJOCRRXtzBeRjjyC6OQQT0HIeWUGSwdBogRjnxAhFvb3ygY4cjfKBgy+xsFT2a/MFYhHIkbBWEP6hfGKoQjHxAhg/obBWNB5wOCR4cCMhD1hXBkFEYrg/p9oGQh6ruFccqcxyWwYQEy8glBY+UHVyE2m4AIMutxT5HZB6Skn5sy0pz/eQEivnC1LJWQEQ)BJRU5Er@ggg==%iVBORw0KG;)NSUhEUg?AG4?ACCAgM?ADasxWR)DFBMVEX/6Nn:/+VlZX29va5ksB5)SElEQVR4AWPACZj/f0DmjkqOSjKtQgcLyJccZiEE9SOmP8mXHEaBMBoIo4EwGggryJccvvVKKAogTnJUclRyVHLklgmjkqOS?LWyrsxEHLD)AElFTkSuQmCC$/9j/2wCE?YEBQYFBAYGBQYHBwYIChAKCg@ChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSgBBwcHCggKEwoKEygaFhooKC;KC;KC;KC;KC;KC;KC;KC;KC;KC;KC;KC;KC;KC;KC;KC;KP/BABEIAF4AyAMAIgABEQECEQH/xABg?ADAQEBAQEB)))AQIDBAYFBwgQ?EDAwIDAwYJBg8))BAgMEERIFIQYTMRQiQTJRYXGBkQcWIyUmM0KhsRU2UmJ0syQnRVNUZHJzhZWisrTR0v/a?wD?AB?I?D8A/qk)QKTclVAoVybiyFkMu4XMsgzHcZrkMxzHkO4GwGWQZAI0AgeQrhYoVxXFcLiKuBIguIsCcgyC4y7gQO4XAsCHOaxquc5Gt6qt7Ih82XX9Ojk5faEnl/QgRZPwGB9UDh07UO2yzx8iSHlY/WbO3v4eHQBgdwhkqpKgJSHDcYyOMnOGh5P4WKyoouAtRqKOpmpps4GtlherHtvMxq2VN+l0MPiOzL85uKf8AM3f9HL8NEn8W+qf3lN/yIz1zpO/7RZWQ0a254/WeFOwaPXVUPEfEvMggkkb84uts1VS+x6XhGolqOFtHmmkdJK+jhc971XJzlYirdfFTl4pk+jmq/skv+xTPgx/0T0T9hg/dtKR1zTA9Jktuo2u26nNnsPPoVcMTyXM16q4s19mlapHFHSOgxpqmPOJ2USKu6bt38x3fGev0784NGqIWf0qj+Xi9aoneanrQw4fd9NOLP7dL+5Q9UxxVycTn0nW9O1aPPTa2Go2+w7vJ629U9p9K54qOOGL4UU5MUcfM0hz34tTvLzmpdfOp7G5KkqhtcVyLiRdyFUzL9pGZMj+8ck9QjXgikKqIduY8jgZN0NFlS3UY73OvMrM+d2pDZkm3UpCkPPaJp1PrNTqdRqfOquTXzQxskldgxrXbWbex6ulp4KWPCmhjiZ+o1G/geW4JlTla5df5WqU/1IfeqNTpqWPmVU0cEX6cj0b+JYzLTJPpHrX6rYPva4D5nCuoU+pcScQT0UrZqe1O1sjemzXXsAyT1hClEOuZuAlxjL0NL7GEj1su3dOd6jQ81x5oDuJ+GKzSO19jdULG5J+XzMFZI1/k3S/k26+J574vcZ/a45id/g0X/s/QJ7cvPwOFyuzbmid7oGVjdu54uo4e4oqaaanqeLo5IpWLG/5rY3ZUsvRx6nRKT8naVRUXM5nZoGQ528rFqJe3h0OpzFNmxfJ9PAtFU12QGKl13KyTJNwSNMMreH3lsjTFuxo3clzkPH11NrekcQanqml0lNqVLWrFnBzuXM1WMRuyr3V850UHHej9o7Lqrp9HrP5rUI1i9zvJVPaeoaxt3beNkM6ygpNQi7PWUsNTTu8qOViPb7lNLGOZ5iKZkvwtQcqRr43aE9zXNX+sN3RT27VS/U8roHA2h8P8Qu1TSKaSmklgdA6JsirFirmuVUat7LdvhZOux6h9mvbt3fHchxKuKkcnnJY5tr3RF9ZnUWa/Fqe0x3IsYudY1kf317x8+pajLYr1OvBThrHpdG2XZVuU1phK/bc0i8lAncuw6RUe1G2XYdVE7DKy7F2G1/cuCtTs/gXRu2ccvO+Swsp10Ma4Ltuo7GjJEc5LHj04b1mGor/nzslDVVktTyqWJOZ33X3evRbW6IfXoeC9FgYlRUQSV9Vb66tkWZ3uXb7j7ldE7lo5qeT1Ijqf4OkeK5dBoD5cXLkd+nNZHCkcTGsY37LUsiewC6FitiuAFs8lDqM3r6DQlxm7coyRFxOd6OxVmK+s61JsYOYCKc08Kup1a3rY4MJJZYsmK3Dqqn10JczcMDRrjglZuSxu51SN3IazqaYlZbGK233QnwQU8TGNduuXgOFq4IdKRoiZIc6yqq4qZuXc0iX0mEv12IN7kqG6RpY51lW52paw+7fqhg5VwUlE+TV1yOUiiWRTpVu40ZuRTv7iHSxpk6MbXZEY7kuhZe+Dd/QdGK3HgJEsXa5zNia1e61PYhasN8dysQKaljkWBl/Ib7i2tN1YLECuhOOw2wx38hvuNG9CrAPr1G1AGgAUMSlCEqAQCl2FYhWgQpDjWwrAjRnO5plKncdt4HWpCtGiAp8Zj++rpUX0IdMCrIi7Wsd+JOJu6RHeBi2NW+J8yoY6OVH2FGx002WK4n1MAwLSXbpuZrDv12OOWFXRr5zlydy1jxU+tgGHoG2S2yidFfdDkpo1YxPP1OtiFYF4kOdfcbWWJxNMR2KRDM1RCbDshQCKsTYWJYrAFhWGiD?G?Aw?AY?CsAhF?EWFYs?zsKxpYBgZ4hiXYPEYibBYuw7DFYiw7FAILCsUACG))?AD)P/Z!