<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:times new roman, new york, times, serif;font-size:12pt"><DIV>Dear Amardeep:</DIV>
<DIV>&nbsp;</DIV>
<DIV>Finally, my code can work now.</DIV>
<DIV>&nbsp;</DIV>
<DIV>I have to add geodesicActiveContour-&gt;GenerateSpeedImage(). Without it, the program always shows segmentation error.</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>Can you please share some experience about the selection of GVF parameters for 3D images"</DIV>
<DIV>&nbsp;</DIV>
<DIV>&gt; &gt;&nbsp; m_GVFFilter-&gt;SetNoiseLevel(500);<BR>&gt; &gt;&nbsp; m_GVFFilter-&gt;SetTimeStep(0.05);<BR>&gt; &gt;&nbsp; m_GVFFilter-&gt;SetIterationNum(5);</DIV>
<DIV>&nbsp;</DIV>
<DIV>Thanks for your help.</DIV>
<DIV>&nbsp;</DIV>
<DIV>Baoyun<BR></DIV>
<DIV>&nbsp;</DIV>
<DIV><BR><BR>&nbsp;</DIV>
<DIV style="FONT-SIZE: 12pt; FONT-FAMILY: times new roman, new york, times, serif"><BR>
<DIV style="FONT-SIZE: 13px; FONT-FAMILY: arial, helvetica, sans-serif"><FONT face=Tahoma size=2>
<HR SIZE=1>
<B><SPAN style="FONT-WEIGHT: bold">From:</SPAN></B> Amardeep Singh &lt;amar.singh@gmx.de&gt;<BR><B><SPAN style="FONT-WEIGHT: bold">To:</SPAN></B> Baoyun Li &lt;baoyun_li123@yahoo.com&gt;; insight-users@itk.org<BR><B><SPAN style="FONT-WEIGHT: bold">Sent:</SPAN></B> Friday, March 6, 2009 10:44:54 AM<BR><B><SPAN style="FONT-WEIGHT: bold">Subject:</SPAN></B> Re: Segmenation Error--after set advection image by GVF flow<BR></FONT><BR>Dear Baoyun<BR><BR>I am not sure, I understand what you mean by saying "Since you just recently fixed the GVF as advection term".<BR>I had hacked the code, because I did not know of the flag "SetAutoGenerateSpeedAdvection(...)". In the end, I ended up using the same code as you.<BR>You might want to have a look at the full posting:<BR>http://www.nabble.com/Use-of-advection-image-to-guide-geodesic-level-set-td22083962.html#a22159804<BR><BR>Best regards<BR>Amardeep<BR><BR>Baoyun Li wrote:<BR>&gt; Dear Amardeep:<BR>&gt;&nbsp; Thank
 you for your help. Since you just recently fixed the GVF as advection term, can you please send me a copy of your test code.<BR>&gt;&nbsp; I saw your original code (<A href="http://gvftest.cc/" target=_blank>GVFtest.cc</A>) pasted on the web. But that is not the working version.<BR>&gt;&nbsp; Thanks.<BR>&gt;&nbsp; Baoyun<BR>&gt; <BR>&gt; ------------------------------------------------------------------------<BR>&gt; *From:* Amardeep Singh &lt;<A href="mailto:amar.singh@gmx.de" ymailto="mailto:amar.singh@gmx.de">amar.singh@gmx.de</A>&gt;<BR>&gt; *To:* Baoyun Li &lt;<A href="mailto:baoyun_li123@yahoo.com" ymailto="mailto:baoyun_li123@yahoo.com">baoyun_li123@yahoo.com</A>&gt;<BR>&gt; *Cc:* <A href="mailto:insight-users@itk.org" ymailto="mailto:insight-users@itk.org">insight-users@itk.org</A><BR>&gt; *Sent:* Friday, March 6, 2009 4:36:35 AM<BR>&gt; *Subject:* Re: Segmenation Error--after set advection image by GVF flow<BR>&gt; <BR>&gt; Dear Baoyun<BR>&gt;
 <BR>&gt; Unfortunately, I have not yet encountered your error message, so I am not sure, if I can help you.<BR>&gt; I would try to save the gradient vector field as a *.vtk file, not in Analyze format, as the gradient vector flow output is a vector field. Can Analyze deal with that? (I don't know.)<BR>&gt; Furthermore, I would suggest that you encapsulate every Update() call in a try-catch block:<BR>&gt; try<BR>&gt;&nbsp; &nbsp; &nbsp; {<BR>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ...-&gt;Update();<BR>&gt;&nbsp; &nbsp; &nbsp; }<BR>&gt;&nbsp; &nbsp; &nbsp; catch( itk::ExceptionObject &amp; excep )<BR>&gt;&nbsp; &nbsp; &nbsp; {<BR>&gt;&nbsp; &nbsp; &nbsp; &nbsp; std::cerr &lt;&lt; "Exception caught !" &lt;&lt; std::endl;<BR>&gt;&nbsp; &nbsp; &nbsp; &nbsp; std::cerr &lt;&lt; excep &lt;&lt; std::endl;<BR>&gt;&nbsp; &nbsp; &nbsp; }<BR>&gt; <BR>&gt; This might give you more meaningful error messages.<BR>&gt; <BR>&gt; Best regards<BR>&gt; Amardeep<BR>&gt;
 <BR>&gt; Baoyun Li wrote:<BR>&gt; &gt; Dear All:<BR>&gt; &gt;&nbsp; The error message is: Program *received* signal *SIGFPE*, *Arithmetic exception*.<BR>&gt; &gt;&nbsp; It happens in itkImageHelp.h<BR>&gt; &gt;&nbsp; index[NLoop] = static_cast&lt;IndexValueType&gt;(offset / offsetTable[NLoop]);<BR>&gt; &gt;&nbsp; inline static void ComputeIndexInner(const IndexType &amp;bufferedRegionIndex,<BR>&gt; &gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; OffsetValueType &amp;offset,<BR>&gt; &gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; const OffsetValueType offsetTable[],<BR>&gt; &gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; IndexType &amp;index,<BR>&gt; &gt;&nbsp; &nbsp;
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; const UniqueTypeBoolFalse&amp; )<BR>&gt; &gt;&nbsp; &nbsp; {<BR>&gt; &gt;&nbsp; &nbsp; index[NLoop] = static_cast&lt;IndexValueType&gt;(offset / offsetTable[NLoop]);<BR>&gt; &gt;&nbsp; &nbsp; offset = offset - (index[NLoop] * offsetTable[NLoop]);<BR>&gt; &gt;&nbsp; &nbsp; index[NLoop] = index[NLoop] + bufferedRegionIndex[NLoop];<BR>&gt; &gt;&nbsp; &nbsp; ImageHelper&lt;NImageDimension, NLoop-1&gt;::<BR>&gt; &gt;&nbsp; &nbsp; &nbsp; ComputeIndexInner(bufferedRegionIndex,<BR>&gt; &gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; offset,<BR>&gt; &gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; offsetTable,<BR>&gt; &gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; index,<BR>&gt; &gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Concept::Detail::UniqueType_bool&lt;(NLoop==1)&gt;());<BR>&gt; &gt;&nbsp; &nbsp; }<BR>&gt; &gt;&nbsp; Does this mean some overflow, or my datatype has some problme.<BR>&gt; &gt;&nbsp; Thanks<BR>&gt; &gt;&nbsp; Baoyun<BR>&gt; &gt;<BR>&gt; &gt; &gt; ------------------------------------------------------------------------<BR>&gt; &gt; *From:* Baoyun Li &lt;<A href="mailto:baoyun_li123@yahoo.com" ymailto="mailto:baoyun_li123@yahoo.com">baoyun_li123@yahoo.com</A> &lt;mailto:<A href="mailto:baoyun_li123@yahoo.com" ymailto="mailto:baoyun_li123@yahoo.com">baoyun_li123@yahoo.com</A>&gt;&gt;<BR>&gt; &gt; *To:* Amardeep Singh &lt;<A href="mailto:amar.singh@gmx.de" ymailto="mailto:amar.singh@gmx.de">amar.singh@gmx.de</A> &lt;mailto:<A href="mailto:amar.singh@gmx.de" ymailto="mailto:amar.singh@gmx.de">amar.singh@gmx.de</A>&gt;&gt;<BR>&gt; &gt; *Cc:* <A href="mailto:insight-users@itk.org"
 ymailto="mailto:insight-users@itk.org">insight-users@itk.org</A> &lt;mailto:<A href="mailto:insight-users@itk.org" ymailto="mailto:insight-users@itk.org">insight-users@itk.org</A>&gt;<BR>&gt; &gt; *Sent:* Thursday, March 5, 2009 4:51:41 PM<BR>&gt; &gt; *Subject:* Re: Segmenation Error--after set advection image by GVF flow<BR>&gt; &gt;<BR>&gt; &gt; Dear Amardeep:<BR>&gt; &gt;&nbsp; After I called<BR>&gt; &gt;<BR>&gt; &gt;&nbsp; geodesicActiveContour-&gt;SetAdvectionImage(castflowfilter-&gt;GetOutput());<BR>&gt; &gt;&nbsp; Do I need to call GenerateAdvectioniImage() since Atumatic Generate is set off.<BR>&gt; &gt;&nbsp; After I add : geodesicActiveContour-&gt;GenerateAdvectionImage();<BR>&gt; &gt;&nbsp; I still got error, please give me some suggestions.<BR>&gt; &gt;&nbsp; Baoyun<BR>&gt; &gt; ------------------------------------------------------------------------<BR>&gt; &gt; *From:* Baoyun Li &lt;<A href="mailto:baoyun_li123@yahoo.com"
 ymailto="mailto:baoyun_li123@yahoo.com">baoyun_li123@yahoo.com</A> &lt;mailto:<A href="mailto:baoyun_li123@yahoo.com" ymailto="mailto:baoyun_li123@yahoo.com">baoyun_li123@yahoo.com</A>&gt;&gt;<BR>&gt; &gt; *To:* Amardeep Singh &lt;<A href="mailto:amar.singh@gmx.de" ymailto="mailto:amar.singh@gmx.de">amar.singh@gmx.de</A> &lt;mailto:<A href="mailto:amar.singh@gmx.de" ymailto="mailto:amar.singh@gmx.de">amar.singh@gmx.de</A>&gt;&gt;<BR>&gt; &gt; *Cc:* <A href="mailto:insight-users@itk.org" ymailto="mailto:insight-users@itk.org">insight-users@itk.org</A> &lt;mailto:<A href="mailto:insight-users@itk.org" ymailto="mailto:insight-users@itk.org">insight-users@itk.org</A>&gt;<BR>&gt; &gt; *Sent:* Thursday, March 5, 2009 3:25:12 PM<BR>&gt; &gt; *Subject:* Segmenation Error--after set advection image by GVF flow<BR>&gt; &gt;<BR>&gt; &gt; Dear Amardeep and All:<BR>&gt; &gt;&nbsp; Now I can build the program after seting advection image by GVF flow. However, when I
 run the program, the program shows segmeation error when geodesicActiveContour-&gt;Update();<BR>&gt; &gt; The program stop at: itkSegmentationLevelSetFunction_txx&nbsp; at&nbsp; return ( m_AdvectionImage-&gt;GetPixel(idx) );<BR>&gt; &gt;&nbsp; template &lt;class TImageType, class TFeatureImageType&gt;<BR>&gt; &gt; typename SegmentationLevelSetFunction&lt;TImageType, TFeatureImageType&gt;::VectorType<BR>&gt; &gt; SegmentationLevelSetFunction&lt;TImageType, TFeatureImageType&gt;<BR>&gt; &gt; ::AdvectionField(const NeighborhoodType &amp;neighborhood,<BR>&gt; &gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; const FloatOffsetType &amp;offset, GlobalDataStruct *)&nbsp; const<BR>&gt; &gt; {<BR>&gt; &gt;&nbsp; IndexType idx = neighborhood.GetIndex();<BR>&gt; &gt;&nbsp; ContinuousIndexType cdx;<BR>&gt; &gt;&nbsp; for (unsigned i = 0; i &lt; ImageDimension; ++i)<BR>&gt; &gt;&nbsp; &nbsp; {<BR>&gt; &gt;&nbsp; &nbsp; cdx[i] =
 static_cast&lt;double&gt;(idx[i]) - offset[i];<BR>&gt; &gt;&nbsp; &nbsp; }<BR>&gt; &gt;&nbsp; if ( m_VectorInterpolator-&gt;IsInsideBuffer(cdx) )<BR>&gt; &gt;&nbsp; &nbsp; {<BR>&gt; &gt;&nbsp; &nbsp; return ( m_VectorCast(m_VectorInterpolator-&gt;EvaluateAtContinuousIndex(cdx)));<BR>&gt; &gt;&nbsp; &nbsp; }<BR>&gt; &gt;&nbsp; //Just return the default else<BR>&gt; &gt;&nbsp; &nbsp; return ( m_AdvectionImage-&gt;GetPixel(idx) );<BR>&gt; &gt;&nbsp; }<BR>&gt; &gt;&nbsp; Clearly, something is still wrong with SetAdvectionImage. Below is related code.<BR>&gt; &gt;&nbsp; Can you please help me figure out which setting is wrong?<BR>&gt; &gt;&nbsp; Thanks<BR>&gt; &gt;&nbsp; Baoyun<BR>&gt; &gt;<BR>&gt; &gt;&nbsp; &nbsp; typedef itk::CovariantVector&lt;double, Dim&gt; myGradientType;<BR>&gt; &gt;&nbsp; typedef itk::Image&lt;myGradientType, Dim&gt;&nbsp; myGradientImageType;<BR>&gt; &gt;&nbsp; typedef itk::GradientVectorFlowImageFilter&lt;myGradientImageType,
 myGradientImageType&gt;<BR>&gt; &gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; myGVFFilterType;<BR>&gt; &gt;&nbsp; typedef itk::GradientImageFilter&lt;DoublelImageType, double,double&gt;<BR>&gt; &gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; myGFilterType;<BR>&gt; &gt;&nbsp; typedef itk::GradientToMagnitudeImageFilter&lt;myGradientImageType, DoublelImageType&gt;<BR>&gt; &gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; myGToMFilterType;<BR>&gt; &gt;<BR>&gt; &gt;&nbsp; typedef itk::GradientRecursiveGaussianImageFilter&lt;<BR>&gt; &gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DoublelImageType,<BR>&gt; &gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; myGradientImageType<BR>&gt; &gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &gt;&nbsp; myFilterType;<BR>&gt; &gt;&nbsp; typedef typename GeodesicActiveContourFilterType::VectorImageType&nbsp; AdvectionImageType;<BR>&gt; &gt;&nbsp; typedef itk::CastImageFilter&lt;myGradientImageType,AdvectionImageType&gt;<BR>&gt; &gt;&nbsp; &nbsp; CastFlowFilterType;<BR>&gt; &gt;&nbsp; typedef itk::LaplacianImageFilter&lt;DoublelImageType, DoublelImageType&gt; myLaplacianFilterType;<BR>&gt; &gt;&nbsp; typename myFilterType::Pointer filter = myFilterType::New();<BR>&gt; &gt;&nbsp;
 typename myGFilterType::Pointer gfilter = myGFilterType::New();<BR>&gt; &gt;&nbsp; typename myGToMFilterType::Pointer gtomfilter = myGToMFilterType::New();<BR>&gt; &gt;&nbsp; typename myLaplacianFilterType::Pointer m_LFilter = myLaplacianFilterType::New();<BR>&gt; &gt;&nbsp; typename myGVFFilterType::Pointer m_GVFFilter = myGVFFilterType::New();<BR>&gt; &gt;&nbsp; typename CastFlowFilterType::Pointer castflowfilter = CastFlowFilterType::New();<BR>&gt; &gt;&nbsp; typedef itk::ImageFileWriter&lt; myGradientImageType &gt;&nbsp; WriterType2;<BR>&gt; &gt;&nbsp; typename WriterType2::Pointer writer21=WriterType2::New();<BR>&gt; &gt; &gt;&nbsp; typename WriterType1::Pointer writer4=WriterType1::New();<BR>&gt; &gt;&nbsp; writer4-&gt;SetInput(caster11-&gt;GetOutput());<BR>&gt; &gt;&nbsp; writer4-&gt;SetFileName("../data/intial_contour.hdr");<BR>&gt; &gt;&nbsp; writer4-&gt;Update();<BR>&gt; &gt;<BR>&gt; &gt;&nbsp; sigmoid-&gt;SetOutputMinimum(&nbsp; 0.0&nbsp;
 );<BR>&gt; &gt;&nbsp; sigmoid-&gt;SetOutputMaximum(&nbsp; 1.0&nbsp; );<BR>&gt; &gt;&nbsp; caster12-&gt;SetInput(inputfilter);<BR>&gt; &gt;&nbsp; smoothing-&gt;SetInput(caster12-&gt;GetOutput() );<BR>&gt; &gt;&nbsp; gradientMagnitude-&gt;SetInput( smoothing-&gt;GetOutput() );<BR>&gt; &gt;&nbsp; sigmoid-&gt;SetInput( gradientMagnitude-&gt;GetOutput() );<BR>&gt; &gt;&nbsp; caster31-&gt;SetInput(inputfilter);<BR>&gt; &gt;&nbsp; filter-&gt;SetInput( caster31-&gt;GetOutput() ); //caster short to double<BR>&gt; &gt;&nbsp; filter-&gt;SetSigma( 1.0);<BR>&gt; &gt;&nbsp; filter-&gt;Update();<BR>&gt; &gt;&nbsp; gtomfilter-&gt;SetInput(filter-&gt;GetOutput());<BR>&gt; &gt;&nbsp; gtomfilter-&gt;Update();<BR>&gt; &gt;&nbsp; gfilter-&gt;SetInput(gtomfilter-&gt;GetOutput());<BR>&gt; &gt;&nbsp; gfilter-&gt;Update();<BR>&gt; &gt;&nbsp; m_GVFFilter-&gt;SetInput(gfilter-&gt;GetOutput());<BR>&gt; &gt;&nbsp; m_GVFFilter-&gt;SetLaplacianFilter(m_LFilter);<BR>&gt; &gt;&nbsp;
 m_GVFFilter-&gt;SetNoiseLevel(500);<BR>&gt; &gt;&nbsp; m_GVFFilter-&gt;SetTimeStep(0.05);<BR>&gt; &gt;&nbsp; m_GVFFilter-&gt;SetIterationNum(5);<BR>&gt; &gt;&nbsp; m_GVFFilter-&gt;Update();<BR>&gt; &gt;&nbsp; writer21-&gt;SetInput(m_GVFFilter-&gt;GetOutput());<BR>&gt; &gt;&nbsp; writer21-&gt;SetFileName("../data/GVF_flow.hdr");<BR>&gt; &gt;&nbsp; writer21-&gt;Update();<BR>&gt; &gt; //to get gradient manitude of GVF low<BR>&gt; &gt;&nbsp; &nbsp; geodesicActiveContour-&gt;SetAutoGenerateSpeedAdvection(false);<BR>&gt; &gt;&nbsp; //typename myGradientImageType::Pointer m_GVFField;<BR>&gt; &gt;&nbsp; //m_GVFField = m_GVFFilter-&gt;GetOutput();<BR>&gt; &gt;&nbsp; castflowfilter-&gt;SetInput(m_GVFFilter-&gt;GetOutput());<BR>&gt; &gt;&nbsp; geodesicActiveContour-&gt;SetAdvectionImage(castflowfilter-&gt;GetOutput());<BR>&gt; &gt;&nbsp; // geodesicActiveContour-&gt;GenerateSpeedImage();<BR>&gt; &gt;&nbsp;
 //geodesicActiveContour-&gt;SetAdvectionImage(m_GVFFilter-&gt;GetOutput());<BR>&gt; &gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; geodesicActiveContour-&gt;SetInput( caster11-&gt;GetOutput() );<BR>&gt; &gt;&nbsp; geodesicActiveContour-&gt;SetFeatureImage( sigmoid-&gt;GetOutput() );<BR>&gt; &gt;&nbsp; geodesicActiveContour-&gt;GenerateSpeedImage();<BR>&gt; &gt;&nbsp; geodesicActiveContour-&gt;Update();<BR>&gt; &gt;&nbsp; thresholder-&gt;SetInput( geodesicActiveContour-&gt;GetOutput() );<BR>&gt; &gt;&nbsp; thresholder-&gt;Update();<BR>&gt; &gt;&nbsp; outputfilter=thresholder-&gt;GetOutput();<BR>&gt; &gt;<BR>&gt; &gt;<BR>&gt; &gt;<BR>&gt; &gt;<BR>&gt; <BR></DIV></DIV></div><br>

      </body></html>