# Notices for QVT-OML

This content is produced and maintained by the Eclipse QVT-OML project.

* Project home: https://projects.eclipse.org/projects/modeling.mmt.qvt-oml

## Trademarks

Eclipse QVT-OML, and QVT-OML are trademarks of the Eclipse Foundation.

## Copyright

All content is the property of the respective authors or their employers. For
more information regarding authorship of content, please consult the listed
source code repository logs.

## Declared Project Licenses

This program and the accompanying materials are made available under the terms
of the Eclipse Public License v. 2.0 which is available at
http://www.eclipse.org/legal/epl-2.0.

SPDX-License-Identifier: EPL-2.0

## Source Code

The project maintains the following source code repositories:

* http://git.eclipse.org/c/mmt/org.eclipse.qvto.git

## Third-party Content

Google Guava (15.0.0)

* License: Apache License, 2.0

LALR Parser Generator (Runtime) LPG (1.1)

* License: Eclipse Public License

LPG (2.0.17)

* License: Eclipse Public License

OMG MOF Specification (2.0)

* License: Object Management Group License
* Project: http://www.omg.org/spec/MOF/2.0
* Source: http://www.omg.org/docs/formal/06-01-01.pdf

OMG OCL Specification (2.0)

* License: Object Management Group License
* Project: http://www.omg.org/technology/documents/formal/ocl.htm
* Source: http://www.omg.org/docs/formal/06-05-01.pdf

OMG QVT Specification (1.0)

* License: Object Management Group License

OMG QVT Specification and XML Files (1.1)

* License: Object Management Group License

## Cryptography

Content may contain encryption software. The country in which you are currently
may have restrictions on the import, possession, and use, and/or re-export to
another country, of encryption software. BEFORE using any encryption software,
please check the country's laws, regulations and policies concerning the import,
possession, or use, and re-export of encryption software, to see if this is
permitted.