<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:DengXian;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
@font-face
        {font-family:"\@DengXian";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">Hi,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">There may be another similar overflow bug about the fd_set in BasicUsageEnvironment/BasicTaskScheduler.cpp:115<o:p></o:p></p>
<p class="MsoNormal">----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------<o:p></o:p></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#EBEEF5"><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F">  </span><span style="font-size:10.5pt;font-family:Consolas;color:#C838C6">for</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"> (</span><span style="font-size:10.5pt;font-family:Consolas;color:#EF8ED8">int</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"> i = </span><span style="font-size:10.5pt;font-family:Consolas;color:#FF6D12">0</span><span style="font-size:10.5pt;font-family:Consolas;color:#A9A9AA">;</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"> i </span><span style="font-size:10.5pt;font-family:Consolas;color:#C838C6"><</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"> </span><span style="font-size:10.5pt;font-family:Consolas;color:#FF6D12">10000</span><span style="font-size:10.5pt;font-family:Consolas;color:#A9A9AA">;</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"> </span><span style="font-size:10.5pt;font-family:Consolas;color:#00BEC4">++</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F">i) {<o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#EBEEF5"><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F">    </span><span style="font-size:10.5pt;font-family:Consolas;color:#C838C6">if</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"> (FD_ISSET(i</span><span style="font-size:10.5pt;font-family:Consolas;color:#A0A1A7">,</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"> </span><span style="font-size:10.5pt;font-family:Consolas;color:#00BEC4">&</span><span style="font-size:10.5pt;font-family:Consolas;color:#CD6069">fReadSet</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F">) </span><span style="font-size:10.5pt;font-family:Consolas;color:#C838C6">||</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"> FD_ISSET(i</span><span style="font-size:10.5pt;font-family:Consolas;color:#A0A1A7">,</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"> </span><span style="font-size:10.5pt;font-family:Consolas;color:#00BEC4">&</span><span style="font-size:10.5pt;font-family:Consolas;color:#CD6069">fWriteSet</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F">) </span><span style="font-size:10.5pt;font-family:Consolas;color:#C838C6">||</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"> FD_ISSET(i</span><span style="font-size:10.5pt;font-family:Consolas;color:#A0A1A7">,</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"> </span><span style="font-size:10.5pt;font-family:Consolas;color:#00BEC4">&</span><span style="font-size:10.5pt;font-family:Consolas;color:#CD6069">fExceptionSet</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F">)) {<o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#EBEEF5"><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F">      </span><span style="font-size:10.5pt;font-family:Consolas;color:#437AED">fprintf</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F">(stderr</span><span style="font-size:10.5pt;font-family:Consolas;color:#A0A1A7">,</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"> </span><span style="font-size:10.5pt;font-family:Consolas;color:#53A053">" </span><span style="font-size:10.5pt;font-family:Consolas;color:#FF6D12">%d</span><span style="font-size:10.5pt;font-family:Consolas;color:#53A053">("</span><span style="font-size:10.5pt;font-family:Consolas;color:#A0A1A7">,</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"> i)</span><span style="font-size:10.5pt;font-family:Consolas;color:#A9A9AA">;</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"><o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#EBEEF5"><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F">      </span><span style="font-size:10.5pt;font-family:Consolas;color:#C838C6">if</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"> (FD_ISSET(i</span><span style="font-size:10.5pt;font-family:Consolas;color:#A0A1A7">,</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"> </span><span style="font-size:10.5pt;font-family:Consolas;color:#00BEC4">&</span><span style="font-size:10.5pt;font-family:Consolas;color:#CD6069">fReadSet</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F">)) </span><span style="font-size:10.5pt;font-family:Consolas;color:#437AED">fprintf</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F">(stderr</span><span style="font-size:10.5pt;font-family:Consolas;color:#A0A1A7">,</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"> </span><span style="font-size:10.5pt;font-family:Consolas;color:#53A053">"r"</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F">)</span><span style="font-size:10.5pt;font-family:Consolas;color:#A9A9AA">;</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"><o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#EBEEF5"><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F">      </span><span style="font-size:10.5pt;font-family:Consolas;color:#C838C6">if</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"> (FD_ISSET(i</span><span style="font-size:10.5pt;font-family:Consolas;color:#A0A1A7">,</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"> </span><span style="font-size:10.5pt;font-family:Consolas;color:#00BEC4">&</span><span style="font-size:10.5pt;font-family:Consolas;color:#CD6069">fWriteSet</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F">)) </span><span style="font-size:10.5pt;font-family:Consolas;color:#437AED">fprintf</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F">(stderr</span><span style="font-size:10.5pt;font-family:Consolas;color:#A0A1A7">,</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"> </span><span style="font-size:10.5pt;font-family:Consolas;color:#53A053">"w"</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F">)</span><span style="font-size:10.5pt;font-family:Consolas;color:#A9A9AA">;</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"><o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#EBEEF5"><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F">      </span><span style="font-size:10.5pt;font-family:Consolas;color:#C838C6">if</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"> (FD_ISSET(i</span><span style="font-size:10.5pt;font-family:Consolas;color:#A0A1A7">,</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"> </span><span style="font-size:10.5pt;font-family:Consolas;color:#00BEC4">&</span><span style="font-size:10.5pt;font-family:Consolas;color:#CD6069">fExceptionSet</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F">)) </span><span style="font-size:10.5pt;font-family:Consolas;color:#437AED">fprintf</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F">(stderr</span><span style="font-size:10.5pt;font-family:Consolas;color:#A0A1A7">,</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"> </span><span style="font-size:10.5pt;font-family:Consolas;color:#53A053">"e"</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F">)</span><span style="font-size:10.5pt;font-family:Consolas;color:#A9A9AA">;</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"><o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#EBEEF5"><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F">      </span><span style="font-size:10.5pt;font-family:Consolas;color:#437AED">fprintf</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F">(stderr</span><span style="font-size:10.5pt;font-family:Consolas;color:#A0A1A7">,</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"> </span><span style="font-size:10.5pt;font-family:Consolas;color:#53A053">")"</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F">)</span><span style="font-size:10.5pt;font-family:Consolas;color:#A9A9AA">;</span><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F"><o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#EBEEF5"><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F">    }<o:p></o:p></span></p>
<p class="MsoNormal" style="line-height:14.25pt;background:#EBEEF5"><span style="font-size:10.5pt;font-family:Consolas;color:#5D5D5F">  }<o:p></o:p></span></p>
<p class="MsoNormal">--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------<o:p></o:p></p>
<p class="MsoNormal">In default, the fd_set should only support 1024 fds.<o:p></o:p></p>
<p class="MsoNormal">Sometimes, it incur the overflow as follow:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">==13==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x619000000470 at pc 0x000000647338 bp 0x7ffff34b50d0 sp 0x7ffff34b50c8<o:p></o:p></p>
<p class="MsoNormal">READ of size 8 at 0x619000000470 thread T1<o:p></o:p></p>
<p class="MsoNormal">    #0 0x647337 in BasicTaskScheduler::SingleStep(unsigned int) /home/ubuntu/experiments/live555/BasicUsageEnvironment/BasicTaskScheduler.cpp:115:61<o:p></o:p></p>
<p class="MsoNormal">    #1 0x64ef1a in BasicTaskScheduler0::doEventLoop(char volatile*) /home/ubuntu/experiments/live555/BasicUsageEnvironment/BasicTaskScheduler0.cpp:80:5<o:p></o:p></p>
<p class="MsoNormal">    #2 0x59bf95 in AC3AudioStreamParser::readAndSaveAFrame() /home/ubuntu/experiments/live555/liveMedia/AC3AudioStreamFramer.cpp:314:41<o:p></o:p></p>
<p class="MsoNormal">    #3 0x59bf95 in AC3AudioStreamFramer::samplingRate() /home/ubuntu/experiments/live555/liveMedia/AC3AudioStreamFramer.cpp:112:14<o:p></o:p></p>
<p class="MsoNormal">    #4 0x52b7f6 in AC3AudioFileServerMediaSubsession::createNewRTPSink(Groupsock*, unsigned char, FramedSource*) /home/ubuntu/experiments/live555/liveMedia/AC3AudioFileServerMediaSubsession.cpp:60:22<o:p></o:p></p>
<p class="MsoNormal">    #5 0x5e744e in OnDemandServerMediaSubsession::getStreamParameters(unsigned int, sockaddr_storage const&, Port const&, Port const&, int, unsigned char, unsigned char, sockaddr_storage&, unsigned char&, unsigned char&, Port&, Port&, void*&)
 /home/ubuntu/experiments/live555/liveMedia/OnDemandServerMediaSubsession.cpp:168:6<o:p></o:p></p>
<p class="MsoNormal">    #6 0x4e412f in RTSPServer::RTSPClientSession::handleCmd_SETUP_afterLookup2(ServerMediaSession*) /home/ubuntu/experiments/live555/liveMedia/RTSPServer.cpp:1514:17<o:p></o:p></p>
<p class="MsoNormal">    #7 0x4e0235 in RTSPServer::RTSPClientConnection::handleRequestBytes(int) /home/ubuntu/experiments/live555/liveMedia/RTSPServer.cpp:831:19<o:p></o:p></p>
<p class="MsoNormal">    #8 0x4d22be in GenericMediaServer::ClientConnection::incomingRequestHandler() /home/ubuntu/experiments/live555/liveMedia/GenericMediaServer.cpp:291:3<o:p></o:p></p>
<p class="MsoNormal">    #9 0x4d22be in GenericMediaServer::ClientConnection::incomingRequestHandler(void*, int) /home/ubuntu/experiments/live555/liveMedia/GenericMediaServer.cpp:284:15<o:p></o:p></p>
<p class="MsoNormal">    #10 0x6469f5 in BasicTaskScheduler::SingleStep(unsigned int) /home/ubuntu/experiments/live555/BasicUsageEnvironment/BasicTaskScheduler.cpp:171:2<o:p></o:p></p>
<p class="MsoNormal">    #11 0x64ef1a in BasicTaskScheduler0::doEventLoop(char volatile*) /home/ubuntu/experiments/live555/BasicUsageEnvironment/BasicTaskScheduler0.cpp:80:5<o:p></o:p></p>
<p class="MsoNormal">    #12 0x59bf95 in AC3AudioStreamParser::readAndSaveAFrame() /home/ubuntu/experiments/live555/liveMedia/AC3AudioStreamFramer.cpp:314:41<o:p></o:p></p>
<p class="MsoNormal">    #13 0x59bf95 in AC3AudioStreamFramer::samplingRate() /home/ubuntu/experiments/live555/liveMedia/AC3AudioStreamFramer.cpp:112:14<o:p></o:p></p>
<p class="MsoNormal">    #14 0x52b7f6 in AC3AudioFileServerMediaSubsession::createNewRTPSink(Groupsock*, unsigned char, FramedSource*) /home/ubuntu/experiments/live555/liveMedia/AC3AudioFileServerMediaSubsession.cpp:60:22<o:p></o:p></p>
<p class="MsoNormal">    #15 0x5e744e in OnDemandServerMediaSubsession::getStreamParameters(unsigned int, sockaddr_storage const&, Port const&, Port const&, int, unsigned char, unsigned char, sockaddr_storage&, unsigned char&, unsigned char&, Port&, Port&,
 void*&) /home/ubuntu/experiments/live555/liveMedia/OnDemandServerMediaSubsession.cpp:168:6<o:p></o:p></p>
<p class="MsoNormal">    #16 0x4e412f in RTSPServer::RTSPClientSession::handleCmd_SETUP_afterLookup2(ServerMediaSession*) /home/ubuntu/experiments/live555/liveMedia/RTSPServer.cpp:1514:17<o:p></o:p></p>
<p class="MsoNormal">    #17 0x4e0235 in RTSPServer::RTSPClientConnection::handleRequestBytes(int) /home/ubuntu/experiments/live555/liveMedia/RTSPServer.cpp:831:19<o:p></o:p></p>
<p class="MsoNormal">    #18 0x4d22be in GenericMediaServer::ClientConnection::incomingRequestHandler() /home/ubuntu/experiments/live555/liveMedia/GenericMediaServer.cpp:291:3<o:p></o:p></p>
<p class="MsoNormal">    #19 0x4d22be in GenericMediaServer::ClientConnection::incomingRequestHandler(void*, int) /home/ubuntu/experiments/live555/liveMedia/GenericMediaServer.cpp:284:15<o:p></o:p></p>
<p class="MsoNormal">    #20 0x6469f5 in BasicTaskScheduler::SingleStep(unsigned int) /home/ubuntu/experiments/live555/BasicUsageEnvironment/BasicTaskScheduler.cpp:171:2<o:p></o:p></p>
<p class="MsoNormal">    #21 0x64ef1a in BasicTaskScheduler0::doEventLoop(char volatile*) /home/ubuntu/experiments/live555/BasicUsageEnvironment/BasicTaskScheduler0.cpp:80:5<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">0x619000000470 is located 0 bytes to the right of 1008-byte region [0x619000000080,0x619000000470)<o:p></o:p></p>
<p class="MsoNormal">allocated by thread T1 here:<o:p></o:p></p>
<p class="MsoNormal">    #0 0x4c789d in operator new(unsigned long) (/home/ubuntu/experiments/live555/testProgs/testOnDemandRTSPServer+0x4c789d)<o:p></o:p></p>
<p class="MsoNormal">    #1 0x645882 in BasicTaskScheduler::createNew(unsigned int) /home/ubuntu/experiments/live555/BasicUsageEnvironment/BasicTaskScheduler.cpp:32:9<o:p></o:p></p>
<p class="MsoNormal">    <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">SUMMARY: AddressSanitizer: heap-buffer-overflow /home/ubuntu/experiments/live555/BasicUsageEnvironment/BasicTaskScheduler.cpp:115:61 in BasicTaskScheduler::SingleStep(unsigned int)<o:p></o:p></p>
<p class="MsoNormal">Shadow bytes around the buggy address:<o:p></o:p></p>
<p class="MsoNormal">  0x0c327fff8030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00<o:p></o:p></p>
<p class="MsoNormal">  0x0c327fff8040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00<o:p></o:p></p>
<p class="MsoNormal">  0x0c327fff8050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00<o:p></o:p></p>
<p class="MsoNormal">  0x0c327fff8060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00<o:p></o:p></p>
<p class="MsoNormal">  0x0c327fff8070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00<o:p></o:p></p>
<p class="MsoNormal">=>0x0c327fff8080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00[fa]fa<o:p></o:p></p>
<p class="MsoNormal">  0x0c327fff8090: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa<o:p></o:p></p>
<p class="MsoNormal">  0x0c327fff80a0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa<o:p></o:p></p>
<p class="MsoNormal">  0x0c327fff80b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00<o:p></o:p></p>
<p class="MsoNormal">  0x0c327fff80c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00<o:p></o:p></p>
<p class="MsoNormal">  0x0c327fff80d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00<o:p></o:p></p>
<p class="MsoNormal">Shadow byte legend (one shadow byte represents 8 application bytes):<o:p></o:p></p>
<p class="MsoNormal">  Addressable:           00<o:p></o:p></p>
<p class="MsoNormal">  Partially addressable: 01 02 03 04 05 06 07 <o:p></o:p></p>
<p class="MsoNormal">  Heap left redzone:       fa<o:p></o:p></p>
<p class="MsoNormal">  Freed heap region:       fd<o:p></o:p></p>
<p class="MsoNormal">  Stack left redzone:      f1<o:p></o:p></p>
<p class="MsoNormal">  Stack mid redzone:       f2<o:p></o:p></p>
<p class="MsoNormal">  Stack right redzone:     f3<o:p></o:p></p>
<p class="MsoNormal">  Stack after return:      f5<o:p></o:p></p>
<p class="MsoNormal">  Stack use after scope:   f8<o:p></o:p></p>
<p class="MsoNormal">  Global redzone:          f9<o:p></o:p></p>
<p class="MsoNormal">  Global init order:       f6<o:p></o:p></p>
<p class="MsoNormal">  Poisoned by user:        f7<o:p></o:p></p>
<p class="MsoNormal">  Container overflow:      fc<o:p></o:p></p>
<p class="MsoNormal">  Array cookie:            ac<o:p></o:p></p>
<p class="MsoNormal">  Intra object redzone:    bb<o:p></o:p></p>
<p class="MsoNormal">  ASan internal:           fe<o:p></o:p></p>
<p class="MsoNormal">  Left alloca redzone:     ca<o:p></o:p></p>
<p class="MsoNormal">  Right alloca redzone:    cb<o:p></o:p></p>
<p class="MsoNormal">  Shadow gap:              cc<o:p></o:p></p>
<p class="MsoNormal">==13==ABORTING<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Best regards,<o:p></o:p></p>
<p class="MsoNormal">Jinsheng Ba<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>