<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--
#**************************************************************
#  
#  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.
#  
#**************************************************************
 -->
<HTML>
<HEAD>
<TITLE>Document Title</TITLE>
</HEAD>
<BODY>

<center>
First you should edit the example.html file!!!
</center>
<center>
<!-- Please edit CODEBASE parameter -->
<!-- In case ActiveX control is already registered the parameter can be removed -->
<OBJECT CLASSID="clsid:67F2A879-82D5-4A6D-8CC5-FFB3C114B69D" width="500" height="500"
        CODEBASE="<path_to_the_sdk_sample_output_dir>\bin\so_activex.dll">
<!-- Full URL to a document
	<PARAM NAME="src" VALUE="file:///d:/tmp/test.odt">
-->
<!-- Just view the document, do not edit
	<PARAM NAME="readonly" VALUE="true">
-->
</OBJECT>

</center>

</BODY>
</HTML>
