#**************************************************************
#  
#  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.
#  
#**************************************************************



UDK_3.1 {
    global:
        # jvmaccess/virtualmachine.hxx:
        __1cJjvmaccessOVirtualMachineLAttachGuardRCreationException2t6M_v_; # jvmaccess::VirtualMachine::AttachGuard::CreationException::CreationException()
        __1cJjvmaccessOVirtualMachineLAttachGuardRCreationException2t6Mrk3_v_; # jvmaccess::VirtualMachine::AttachGuard::CreationException::CreationException(CreationException const &)
        __1cJjvmaccessOVirtualMachineLAttachGuardRCreationException2T6M_v_; # jvmaccess::VirtualMachine::AttachGuard::CreationException::~CreationException()
        __1cJjvmaccessOVirtualMachineLAttachGuardRCreationException2G6Mrk3_r3_; # jvmaccess::VirtualMachine::AttachGuard::CreationException::operator =(CreationException const &)
        __1cJjvmaccesscO__RTTI__1nJjvmaccessOVirtualMachineLAttachGuardRCreationException__; # RTTI for jvmaccess::VirtualMachine::AttachGuard::CreationException
        __1cJjvmaccessOVirtualMachineLAttachGuard2t6MrknDrtlJReference4n0B____v_; # jvmaccess::VirtualMachine::AttachGuard::AttachGuard(rtl::Reference< VirtualMachine > const &)
        __1cJjvmaccessOVirtualMachineLAttachGuard2t5B6MrknDrtlJReference4n0B____v_; # jvmaccess::VirtualMachine::AttachGuard::AttachGuard(rtl::Reference< VirtualMachine > const &) #Nvariant 1
        __1cJjvmaccessOVirtualMachineLAttachGuard2T6M_v_; # jvmaccess::VirtualMachine::AttachGuard::~AttachGuard()
        __1cJjvmaccessOVirtualMachineLAttachGuard2T5B6M_v_; # jvmaccess::VirtualMachine::AttachGuard::~AttachGuard() #Nvariant 1
        __1cJjvmaccessOVirtualMachine2t6MpnHJavaVM__ibpnHJNIEnv___v_; # jvmaccess::VirtualMachine::VirtualMachine(JavaVM *, int, bool, JNIEnv *)

    local:
        *;
};

UDK_3.2 {
    global:
        # initially forgotten jvmaccess/virtualmachine.hxx:
        __1cJjvmaccessOVirtualMachineLAttachGuardRCreationException2t5B6M_v_; # jvmaccess::VirtualMachine::AttachGuard::CreationException::CreationException() #Nvariant 1
        __1cJjvmaccessOVirtualMachineLAttachGuardRCreationException2t5B6Mrk3_v_; # jvmaccess::VirtualMachine::AttachGuard::CreationException::CreationException(CreationException const &) #Nvariant 1
        __1cJjvmaccessOVirtualMachineLAttachGuardRCreationException2T5B6M_v_; # jvmaccess::VirtualMachine::AttachGuard::CreationException::~CreationException() #Nvariant 1
        __1cJjvmaccesscQ__RTTI__1CpnJjvmaccessOVirtualMachineLAttachGuardRCreationException__; # RTTI for jvmaccess::VirtualMachine::AttachGuard::CreationException *
        __1cJjvmaccesscR__RTTI__1CpknJjvmaccessOVirtualMachineLAttachGuardRCreationException__; # RTTI for jvmaccess::VirtualMachine::AttachGuard::CreationException const *
        __1cJjvmaccessOVirtualMachine2t5B6MpnHJavaVM__ibpnHJNIEnv___v_; # jvmaccess::VirtualMachine::VirtualMachine(JavaVM *, int, bool, JNIEnv *) #Nvariant 1
} UDK_3.1;

UDK_3.3 {
    global:
        # jvmaccess/unovirtualmachine.hxx:
        __1cJjvmaccessRUnoVirtualMachineRCreationException2t6M_v_; # jvmaccess::UnoVirtualMachine::CreationException::CreationException()
        __1cJjvmaccessRUnoVirtualMachineRCreationException2t5B6M_v_; # jvmaccess::UnoVirtualMachine::CreationException::CreationException() #Nvariant 1
        __1cJjvmaccessRUnoVirtualMachineRCreationException2t6Mrk2_v_; # jvmaccess::UnoVirtualMachine::CreationException::CreationException(CreationException const &)
        __1cJjvmaccessRUnoVirtualMachineRCreationException2t5B6Mrk2_v_; # jvmaccess::UnoVirtualMachine::CreationException::CreationException(CreationException const &) #Nvariant 1
        __1cJjvmaccessRUnoVirtualMachineRCreationException2T6M_v_; # jvmaccess::UnoVirtualMachine::CreationException::~CreationException()
        __1cJjvmaccessRUnoVirtualMachineRCreationException2T5B6M_v_; # jvmaccess::UnoVirtualMachine::CreationException::~CreationException() #Nvariant 1
        __1cJjvmaccessRUnoVirtualMachineRCreationException2G6Mrk2_r2_; # jvmaccess::UnoVirtualMachine::CreationException::operator =(CreationException const &)
        __1cJjvmaccesscF__RTTI__1nJjvmaccessRUnoVirtualMachineRCreationException__; # RTTI for jvmaccess::UnoVirtualMachine::CreationException
        __1cJjvmaccesscH__RTTI__1CpnJjvmaccessRUnoVirtualMachineRCreationException__; # RTTI for jvmaccess::UnoVirtualMachine::CreationException *
        __1cJjvmaccesscI__RTTI__1CpknJjvmaccessRUnoVirtualMachineRCreationException__; # RTTI for jvmaccess::UnoVirtualMachine::CreationException const *
        __1cJjvmaccessRUnoVirtualMachine2t6MrknDrtlJReference4n0AOVirtualMachine___pv_v_; # jvmaccess::UnoVirtualMachine::UnoVirtualMachine(rtl::Reference< jvmaccess::VirtualMachine > const &, void *)
        __1cJjvmaccessRUnoVirtualMachine2t5B6MrknDrtlJReference4n0AOVirtualMachine___pv_v_; # jvmaccess::UnoVirtualMachine::UnoVirtualMachine(rtl::Reference< jvmaccess::VirtualMachine > const &, void *) #Nvariant 1
        __1cJjvmaccessRUnoVirtualMachineRgetVirtualMachine6kM_nDrtlJReference4n0AOVirtualMachine____; # jvmaccess::UnoVirtualMachine::getVirtualMachine() const
        __1cJjvmaccessRUnoVirtualMachineOgetClassLoader6kM_pv_; # jvmaccess::UnoVirtualMachine::getClassLoader() const
} UDK_3.2;

UDK_3.4 { # OOo 2.3
    global:
        # jvmaccess/classpath.hxx:
        __1cJjvmaccessJClassPathLdoLoadClass6FrknDcomDsunEstarDunoJReference4n0FRXComponentContext___pvrknDrtlIOUString_9E_9A_; # jvmaccess::ClassPath::doLoadClass(com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > const &, void *, rtl::OUString const &, rtl::OUString const &)
        __1cJjvmaccessJClassPathRdoTranslateToUrls6FrknDcomDsunEstarDunoJReference4n0FRXComponentContext___pvrknDrtlIOUString__9A_; # jvmaccess::ClassPath::doTranslateToUrls(com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext > const &, void *, rtl::OUString const &)
} UDK_3.3;
