<html>
            <head><title>DUMMY_TILE_F Bit Data</title>
        

            <script type="text/javascript">
            origClr = {};
            origClass = "";
            
            function mov(event) {
                if (event.target.className != "unknown") {
                    origClass = event.target.className;
                    var elems = document.getElementsByClassName(origClass);
                    for(var i = 0; i < elems.length; i++) {
                       if(!(elems[i].id in origClr)) {
                          origClr[elems[i].id] = elems[i].style.backgroundColor;
                       }
                       elems[i].style.backgroundColor = "white";
                    }

                }
            }
            
            function mou(event) {
                var elems = document.getElementsByClassName(origClass);
                for(var i = 0; i < elems.length; i++) {
                   elems[i].style.backgroundColor = origClr[elems[i].id] || "#ffffff";
                }
            }
            </script>
            </head>
            <body>
        
<h1>DUMMY_TILE_F Bit Data</h1>
    
<table style='font-size: 8pt; border: 2px solid black; text-align: center'>
<tr style='height: 20px'>
<td style='height: 100%; border: 2px solid black;'>
<a href='#unknown' title='F0B0' style='text-decoration: none; color: #000000'>
                    <div id='f0b0' style='height: 100%; background-color: #FFFFFF; width: 12px' class='grp_unknown'
                    onmouseover='mov(event);' onmouseout='mou(event);'>&nbsp;</div></a></td>
<td style='height: 100%; border: 2px solid black;'>
<a href='#unknown' title='F1B0' style='text-decoration: none; color: #000000'>
                    <div id='f1b0' style='height: 100%; background-color: #FFFFFF; width: 12px' class='grp_unknown'
                    onmouseover='mov(event);' onmouseout='mou(event);'>&nbsp;</div></a></td>
<td style='height: 100%; border: 2px solid black;'>
<a href='#unknown' title='F2B0' style='text-decoration: none; color: #000000'>
                    <div id='f2b0' style='height: 100%; background-color: #FFFFFF; width: 12px' class='grp_unknown'
                    onmouseover='mov(event);' onmouseout='mou(event);'>&nbsp;</div></a></td>
<td style='height: 100%; border: 2px solid black;'>
<a href='#unknown' title='F3B0' style='text-decoration: none; color: #000000'>
                    <div id='f3b0' style='height: 100%; background-color: #FFFFFF; width: 12px' class='grp_unknown'
                    onmouseover='mov(event);' onmouseout='mou(event);'>&nbsp;</div></a></td>
</tr>
<tr style='height: 20px'>
<td style='height: 100%; border: 2px solid black;'>
<a href='#unknown' title='F0B1' style='text-decoration: none; color: #000000'>
                    <div id='f0b1' style='height: 100%; background-color: #FFFFFF; width: 12px' class='grp_unknown'
                    onmouseover='mov(event);' onmouseout='mou(event);'>&nbsp;</div></a></td>
<td style='height: 100%; border: 2px solid black;'>
<a href='#unknown' title='F1B1' style='text-decoration: none; color: #000000'>
                    <div id='f1b1' style='height: 100%; background-color: #FFFFFF; width: 12px' class='grp_unknown'
                    onmouseover='mov(event);' onmouseout='mou(event);'>&nbsp;</div></a></td>
<td style='height: 100%; border: 2px solid black;'>
<a href='#unknown' title='F2B1' style='text-decoration: none; color: #000000'>
                    <div id='f2b1' style='height: 100%; background-color: #FFFFFF; width: 12px' class='grp_unknown'
                    onmouseover='mov(event);' onmouseout='mou(event);'>&nbsp;</div></a></td>
<td style='height: 100%; border: 2px solid black;'>
<a href='#unknown' title='F3B1' style='text-decoration: none; color: #000000'>
                    <div id='f3b1' style='height: 100%; background-color: #FFFFFF; width: 12px' class='grp_unknown'
                    onmouseover='mov(event);' onmouseout='mou(event);'>&nbsp;</div></a></td>
</tr>
</table>
</body></html>
