<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<div id="segments">  
  <div class="clearfix">
    
    <div class="block fieldlist" id="statistics">
      
      <h2><span>Segments</span></h2>
      <a class="reload"><span>reload</span></a>
      
      <div class="message-container">
            <div class="message"></div>
          </div>

          <div class="content">            
        
          <div id="result">
         
            <div id="response">
        
              <div class="segments-holder">
      
                 <ul></ul>
        
               </div>
            
            </div>
            
        </div>
          </div>
    </div>
    
  </div>  

</div>
