
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed 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.


=======================================================================

1 This projects includes modified/copied source files with the following licenses:

=========
1.1 Third party MIT license licenses
=========

1.1.1 inlong-tubemq/resources/assets/lib/jquery.min.js
 Source  : jquery 1.11.3
 License : https://github.com/jquery/jquery/blob/1.11.3/MIT-LICENSE.txt
| Copyright 2014 jQuery Foundation and other contributors
| http://jquery.com/
|
| Permission is hereby granted, free of charge, to any person obtaining
| a copy of this software and associated documentation files (the
| "Software"), to deal in the Software without restriction, including
| without limitation the rights to use, copy, modify, merge, publish,
| distribute, sublicense, and/or sell copies of the Software, and to
| permit persons to whom the Software is furnished to do so, subject to
| the following conditions:
|
| The above copyright notice and this permission notice shall be
| included in all copies or substantial portions of the Software.
|
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
| EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
| NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
| LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
| OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
| WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

----

1.1.2 inlong-tubemq/resources/assets/lib/DataTables/*
 Source  : datatables  1.10.7
 License : https://github.com/DataTables/DataTables/blob/1.10.7/license.txt
| Copyright (c) 2008-2013 SpryMedia Limited
| http://datatables.net
|
| Permission is hereby granted, free of charge, to any person obtaining a copy
| of this software and associated documentation files (the "Software"), to deal
| in the Software without restriction, including without limitation the rights
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
| copies of the Software, and to permit persons to whom the Software is
| furnished to do so, subject to the following conditions:
|
| The above copyright notice and this permission notice shall be included in
| all copies or substantial portions of the Software.
|
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
| THE SOFTWARE.

----

1.1.3 inlong-tubemq/resources/assets/public/css/style.css
      inlong-tubemq/resources/assets/public/css/ie.css
 Source  : Compass
 License :  https://github.com/Compass/compass/blob/stable/LICENSE.markdown
 | Copyright (c) 2009-2014 Christopher M. Eppstein
 |
 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 |
 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. No attribution is required by products that make use of this software.
 |
 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 |
 | Except as contained in this notice, the name(s) of the above copyright holders shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization.
 |
 | Contributors to this project agree to grant all rights to the copyright holder of the primary product. Attribution is maintained in the source control history of the product.

----

=========
1.2 Third party BSD 3-Clause license
=========

1.2.1 inlong-tubemq/tubemq-client-twins/tubemq-client-cpp/src/any.h
      inlong-tubemq/tubemq-client-twins/tubemq-client-cpp/src/buffer.h
 Source  : https://github.com/Qihoo360/evpp/blob/master/evpp/any.h version c5038a6
           https://github.com/Qihoo360/evpp/blob/master/evpp/buffer.h version b2535d7
 License : https://github.com/Qihoo360/evpp/blob/master/LICENSE
 | BSD 3-Clause License
 |
 | Copyright (c) 2017, Qihoo 360
 | All rights reserved.
 |
 | Redistribution and use in source and binary forms, with or without
 | modification, are permitted provided that the following conditions are met:
 |
 | * Redistributions of source code must retain the above copyright notice, this
 |   list of conditions and the following disclaimer.
 |
 | * Redistributions in binary form must reproduce the above copyright notice,
 |   this list of conditions and the following disclaimer in the documentation
 |   and/or other materials provided with the distribution.
 |
 | * Neither the name of the copyright holder nor the names of its
 |   contributors may be used to endorse or promote products derived from
 |   this software without specific prior written permission.
 |
 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

----

=========
1.3 Third party Apache 2.0 Licenses
=========

1.3.1 inlong-tubemq/tubemq-server/src/main/java/org/apache/tubemq/server/common/utils/Bytes.java
      inlong-tubemq/tubemq-server/src/main/java/org/apache/tubemq/server/common/utils/HashedBytes.java
      inlong-tubemq/tubemq-server/src/main/java/org/apache/tubemq/server/common/utils/HasThread.java
      inlong-tubemq/tubemq-server/src/main/java/org/apache/tubemq/server/common/zookeeper/RecoverableZooKeeper.java
      inlong-tubemq/tubemq-server/src/main/java/org/apache/tubemq/server/common/zookeeper/ZooKeeperWatcher.java
      inlong-tubemq/tubemq-server/src/main/java/org/apache/tubemq/server/common/zookeeper/ZooKeeperListener.java
      inlong-tubemq/tubemq-core/src/main/java/org/apache/tubemq/corebase/utils/ThreadUtils.java
      inlong-tubemq/tubemq-server/src/main/java/org/apache/tubemq/server/common/zookeeper/ZooKeeperConnectionException.java
      inlong-tubemq/tubemq-server/src/main/java/org/apache/tubemq/server/master/utils/Chore.java
      inlong-tubemq/tubemq-server/src/main/java/org/apache/tubemq/server/common/zookeeper/ZKUtil.java
      inlong-tubemq/tubemq-server/src/main/java/org/apache/tubemq/server/common/utils/RowLock.java
 Source  : hbase 0.94.27 (Please note that the software have been modified.)
 License : https://github.com/apache/hbase/blob/rel/0.94.27/LICENSE.txt

1.3.2 inlong-tubemq/tubemq-core/src/main/java/org/apache/tubemq/corerpc/netty/ByteBufferInputStream.java
      inlong-tubemq/tubemq-core/src/main/java/org/apache/tubemq/corerpc/netty/ByteBufferOutputStream.java
 Source  : Apache Avro 1.7.6
 License : https://github.com/apache/avro/blob/release-1.7.6/LICENSE.txt

1.3.3 inlong-tubemq/tubemq-client-twins/tubemq-client-cpp/src/future.h
 Source  : Apache Pulsar
 License : https://github.com/apache/pulsar/blob/master/LICENSE

=======================================================================
Apache InLong Subcomponents:

The compiled Apache InLong distribution includes the following
sources/binaries. The use of these sources/binaries is subject to the
terms and conditions of their respective licenses.


========================================================================
Apache 2.0 License
========================================================================

The following components are provided under the Apache License. See project link for details.
The text of each license is the standard Apache 2.0 license.

  net.minidev:accessors-smart:2.4.7 - ASM based accessors helper used by json-smart (https://github.com/netplex/json-smart-v2), (The Apache Software License, Version 2.0)
  commons-codec:commons-codec:1.15 - Apache Commons Codec (https://commons.apache.org/proper/commons-codec), (Apache License, Version 2.0)
  org.apache.commons:commons-collections4:4.3 - Apache Commons Collections (https://commons.apache.org/proper/commons-collections/), (Apache License, Version 2.0)
  org.apache.commons:commons-lang3:3.10 - Apache Commons Lang (https://commons.apache.org/proper/commons-lang), (Apache License, Version 2.0)
  commons-logging:commons-logging:1.2 - Apache Commons Logging (https://commons.apache.org/proper/commons-logging), (The Apache Software License, Version 2.0)
  org.atteo:evo-inflector:1.3 - Evo Inflector (https://github.com/atteo/evo-inflector), (Apache License, Version 2.0)
  com.google.code.gson:gson:2.8.6 - Gson (https://github.com/google/gson/gson), (Apache 2.0)
  com.google.guava:guava:21.0 - Guava: Google Core Libraries for Java (http://code.google.com/p/guava-libraries/guava), (The Apache Software License, Version 2.0)
  com.zaxxer:HikariCP:4.0.3 - HikariCP (https://github.com/brettwooldridge/HikariCP/tree/HikariCP-4.0.3), (The Apache Software License, Version 2.0)
  org.apache.httpcomponents:httpclient:4.5.13 - Apache HttpClient (https://hc.apache.org/httpcomponents-client-4.5.x), (Apache License, Version 2.0)
  org.apache.httpcomponents:httpcore:4.4.14 - Apache HttpCore (https://hc.apache.org/httpcomponents-core-4.4.x), (Apache License, Version 2.0)
  com.fasterxml.jackson.core:jackson-annotations:2.13.2 - Jackson-annotations (https://github.com/FasterXML/jackson-annotations), (The Apache Software License, Version 2.0)
  com.fasterxml.jackson.core:jackson-core:2.13.2 - Jackson-core (https://github.com/FasterXML/jackson-core/tree/jackson-core-2.13.2), (The Apache Software License, Version 2.0)
  com.fasterxml.jackson.core:jackson-databind:2.13.2.2 - jackson-databind (https://github.com/FasterXML/jackson-databind/tree/jackson-databind-2.13.2.2), (The Apache Software License, Version 2.0)
  com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.2 - Jackson datatype: jdk8 (https://github.com/FasterXML/jackson-modules-java8/tree/jackson-modules-java8-2.13.2), (The Apache Software License, Version 2.0)
  com.fasterxml.jackson.module:jackson-module-parameter-names:2.13.2 - Jackson-module-parameter-names (https://github.com/FasterXML/jackson-modules-java8/tree/jackson-modules-java8-2.13.2/parameter-names), (The Apache Software License, Version 2.0)
  jakarta.validation:jakarta.validation-api:2.0.2 - Jakarta Bean Validation API (https://beanvalidation.org), (Apache License 2.0)
  com.jayway.jsonpath:json-path:2.6.0 - project ':json-path' (https://github.com/jayway/JsonPath), (The Apache Software License, Version 2.0)
  net.minidev:json-smart:2.4.7 - JSON Small and Fast Parser (https://urielch.github.io/), (The Apache Software License, Version 2.0)
  org.apache.logging.log4j:log4j-api:2.17.2 - Apache Log4j API (https://logging.apache.org/log4j/2.x/log4j-api/), (Apache License, Version 2.0)
  org.apache.logging.log4j:log4j-jul:2.17.2 - Apache Log4j JUL Adapter (https://logging.apache.org/log4j/2.x/log4j-jul/), (Apache License, Version 2.0)
  org.apache.logging.log4j:log4j-slf4j-impl:2.17.2 - Apache Log4j SLF4J Binding (https://logging.apache.org/log4j/2.x/log4j-slf4j-impl/), (Apache License, Version 2.0)
  org.yaml:snakeyaml:1.29 - SnakeYAML (https://bitbucket.org/snakeyaml/snakeyaml/src/snakeyaml-1.29/), (Apache License, Version 2.0)
  org.springframework.boot:spring-boot:2.6.6 - spring-boot (https://spring.io/projects/spring-boot), (Apache License, Version 2.0)
  org.springframework.boot:spring-boot-autoconfigure:2.6.6 - spring-boot-autoconfigure (https://spring.io/projects/spring-boot), (Apache License, Version 2.0)
  org.springframework.boot:spring-boot-starter:2.6.6 - spring-boot-starter (https://spring.io/projects/spring-boot), (Apache License, Version 2.0)
  org.springframework.boot:spring-boot-starter-aop:2.6.6 - spring-boot-starter-aop (https://spring.io/projects/spring-boot), (Apache License, Version 2.0)
  org.springframework.boot:spring-boot-starter-data-jpa:2.6.6 - spring-boot-starter-data-jpa (https://spring.io/projects/spring-boot), (Apache License, Version 2.0)
  org.springframework.boot:spring-boot-starter-data-rest:2.6.6 - spring-boot-starter-data-rest (https://spring.io/projects/spring-boot), (Apache License, Version 2.0)
  org.springframework.boot:spring-boot-starter-jdbc:2.6.6 - spring-boot-starter-jdbc (https://spring.io/projects/spring-boot), (Apache License, Version 2.0)
  org.springframework.boot:spring-boot-starter-json:2.6.6 - spring-boot-starter-json (https://spring.io/projects/spring-boot), (Apache License, Version 2.0)
  org.springframework.boot:spring-boot-starter-log4j2:2.6.6 - spring-boot-starter-log4j2 (https://spring.io/projects/spring-boot), (Apache License, Version 2.0)
  org.springframework.boot:spring-boot-starter-tomcat:2.6.6 - spring-boot-starter-tomcat (https://spring.io/projects/spring-boot), (Apache License, Version 2.0)
  org.springframework.boot:spring-boot-starter-validation:2.6.6 - spring-boot-starter-validation (https://spring.io/projects/spring-boot), (Apache License, Version 2.0)
  org.springframework.boot:spring-boot-starter-web:2.6.6 - spring-boot-starter-web (https://spring.io/projects/spring-boot), (Apache License, Version 2.0)
  org.springframework.data:spring-data-rest-core:3.6.3 - Spring Data REST - Core (https://github.com/spring-projects/spring-data-rest/tree/3.6.3/spring-data-rest-core), (Apache License, Version 2.0)
  org.springframework.data:spring-data-rest-webmvc:3.6.3 - Spring Data REST - WebMVC (https://github.com/spring-projects/spring-data-rest/tree/3.6.3/spring-data-rest-webmvc), (Apache License, Version 2.0)
  io.springfox:springfox-bean-validators:3.0.0 - springfox-bean-validators (https://github.com/springfox/springfox), (The Apache Software License, Version 2.0)
  io.springfox:springfox-boot-starter:3.0.0 - springfox-boot-starter (https://github.com/springfox/springfox), (The Apache Software License, Version 2.0)
  io.springfox:springfox-core:3.0.0 - springfox-core (https://github.com/springfox/springfox), (The Apache Software License, Version 2.0)
  io.springfox:springfox-data-rest:3.0.0 - springfox-data-rest (https://github.com/springfox/springfox), (The Apache Software License, Version 2.0)
  io.springfox:springfox-oas:3.0.0 - springfox-oas (https://github.com/springfox/springfox), (The Apache Software License, Version 2.0)
  io.springfox:springfox-schema:3.0.0 - springfox-schema (https://github.com/springfox/springfox), (The Apache Software License, Version 2.0)
  io.springfox:springfox-spi:3.0.0 - springfox-spi (https://github.com/springfox/springfox), (The Apache Software License, Version 2.0)
  io.springfox:springfox-spring-web:3.0.0 - springfox-spring-web (https://github.com/springfox/springfox), (The Apache Software License, Version 2.0)
  io.springfox:springfox-spring-webflux:3.0.0 - springfox-spring-webflux (https://github.com/springfox/springfox), (The Apache Software License, Version 2.0)
  io.springfox:springfox-spring-webmvc:3.0.0 - springfox-spring-webmvc (https://github.com/springfox/springfox), (The Apache Software License, Version 2.0)
  io.springfox:springfox-swagger2:3.0.0 - springfox-swagger2 (https://github.com/springfox/springfox), (The Apache Software License, Version 2.0)
  io.springfox:springfox-swagger-common:3.0.0 - springfox-swagger-common (https://github.com/springfox/springfox), (The Apache Software License, Version 2.0)
  io.springfox:springfox-swagger-ui:3.0.0 - springfox-swagger-ui (https://github.com/springfox/springfox), (The Apache Software License, Version 2.0)
  io.swagger:swagger-annotations:1.6.2 - swagger-annotations (https://github.com/swagger-api/swagger-core/tree/v1.6.2/modules/swagger-annotations), (Apache License, Version 2.0)
  io.swagger.core.v3:swagger-annotations:2.1.2 - swagger-annotations (https://github.com/swagger-api/swagger-core/tree/v2.1.2/modules/swagger-annotations), (Apache License, Version 2.0)
  io.swagger:swagger-models:1.5.20 - swagger-models (https://github.com/swagger-api/swagger-core/tree/v1.5.20/modules/swagger-models), (Apache License, Version 2.0)
  io.swagger.core.v3:swagger-models:2.1.2 - swagger-models (https://github.com/swagger-api/swagger-core/tree/v2.1.2/modules/swagger-models), (Apache License, Version 2.0)
  org.apache.tomcat.embed:tomcat-embed-el:9.0.60 - tomcat-embed-el (https://tomcat.apache.org/), (Apache License, Version 2.0)
  org.apache.tomcat.embed:tomcat-embed-websocket:9.0.60 - tomcat-embed-websocket (https://tomcat.apache.org/), (Apache License, Version 2.0)


========================================================================
Apache 2.0 licenses
========================================================================

The following components are provided under the Apache License. See project link for details.
The text of each license is also included at licenses/LICENSE-[project].txt.

  net.bytebuddy:byte-buddy:1.12.9 - Byte Buddy (without dependencies) (https://github.com/raphw/byte-buddy/tree/byte-buddy-1.12.9), (Apache License, Version 2.0)
  com.fasterxml:classmate:1.5.1 - ClassMate (https://github.com/FasterXML/java-classmate), (Apache License, Version 2.0)
  com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.2 - Jackson datatype: JSR310 (https://github.com/FasterXML/jackson-modules-java8/tree/jackson-modules-java8-2.13.2), (The Apache Software License, Version 2.0)
  org.apache.logging.log4j:log4j-core:2.17.2 - Apache Log4j Core (https://logging.apache.org/log4j/2.x/log4j-core/), (Apache License, Version 2.0)
  org.mapstruct:mapstruct:1.3.1.Final - MapStruct Core (http://mapstruct.org), (The Apache Software License, Version 2.0)
  org.springframework:spring-aop:5.3.18 - Spring AOP (https://github.com/spring-projects/spring-framework), (Apache License, Version 2.0)
  org.springframework:spring-aspects:5.3.18 - Spring Aspects (https://github.com/spring-projects/spring-framework), (Apache License, Version 2.0)
  org.springframework:spring-beans:5.3.20 - Spring Beans (https://github.com/spring-projects/spring-framework), (Apache License, Version 2.0)
  org.springframework:spring-context:5.3.20 - Spring Context (https://github.com/spring-projects/spring-framework), (Apache License, Version 2.0)
  org.springframework:spring-core:5.3.20 - Spring Core (https://github.com/spring-projects/spring-framework), (Apache License, Version 2.0)
  org.springframework.data:spring-data-commons:2.6.3 - Spring Data Core (https://github.com/spring-projects/spring-data-commons), (Apache License, Version 2.0)
  org.springframework.data:spring-data-jpa:2.6.3 - Spring Data JPA (https://github.com/spring-projects/spring-data-jpa), (Apache License, Version 2.0)
  org.springframework:spring-expression:5.3.18 - Spring Expression Language (SpEL) (https://github.com/spring-projects/spring-framework), (Apache License, Version 2.0)
  org.springframework.hateoas:spring-hateoas:1.4.1 - Spring HATEOAS (https://github.com/spring-projects/spring-hateoas), (Apache License, Version 2.0)
  org.springframework:spring-jcl:5.3.20 - Spring Commons Logging Bridge (https://github.com/spring-projects/spring-framework), (Apache License, Version 2.0)
  org.springframework:spring-jdbc:5.3.20 - Spring JDBC (https://github.com/spring-projects/spring-framework), (Apache License, Version 2.0)
  org.springframework:spring-orm:5.3.20 - Spring Object/Relational Mapping (https://github.com/spring-projects/spring-framework), (Apache License, Version 2.0)
  org.springframework.plugin:spring-plugin-core:2.0.0.RELEASE - Spring Plugin - Core (https://github.com/spring-projects/spring-plugin/tree/2.0.0.RELEASE), (Apache License, Version 2.0)
  org.springframework.plugin:spring-plugin-metadata:2.0.0.RELEASE - Spring Plugin - Metadata Extension (https://github.com/spring-projects/spring-plugin/tree/2.0.0.RELEASE), (Apache License, Version 2.0)
  org.springframework:spring-tx:5.3.17 - Spring Transaction (https://github.com/spring-projects/spring-framework), (Apache License, Version 2.0)
  org.springframework:spring-web:5.3.20 - Spring Web (https://github.com/spring-projects/spring-framework), (Apache License, Version 2.0)
  org.springframework:spring-webmvc:5.3.18 - Spring Web MVC (https://github.com/spring-projects/spring-framework), (Apache License, Version 2.0)
  org.apache.tomcat.embed:tomcat-embed-core:9.0.60 - tomcat-embed-core (https://tomcat.apache.org/), (Apache License, Version 2.0)


========================================================================
BSD licenses
========================================================================

The following components are provided under BSD license. See project link for details.
The text of each license is also included at licenses/LICENSE-[project].txt.

  org.ow2.asm:asm:9.1 - asm (http://asm.ow2.io/), (BSD-3-Clause)
  org.postgresql:postgresql:42.3.4 - PostgreSQL JDBC Driver (https://jdbc.postgresql.org), (BSD-2-Clause)


========================================================================
MIT licenses
========================================================================

The following components are provided under MIT license. See project link for details.
The text of each license is also included at licenses/LICENSE-[project].txt.

  org.checkerframework:checker-qual:3.5.0 - Checker Qual (https://checkerframework.org), (The MIT License)
  io.github.classgraph:classgraph:4.8.83 - ClassGraph (https://github.com/classgraph/classgraph), (The MIT License (MIT))
  org.slf4j:jul-to-slf4j:1.7.36 - JUL to SLF4J bridge (https://github.com/qos-ch/slf4j/tree/v_1.7.36), (MIT License)
  org.projectlombok:lombok:1.18.22 - Project Lombok (https://projectlombok.org), (The MIT License)
  org.slf4j:slf4j-api:1.7.36 - SLF4J API Module (http://www.slf4j.org), (MIT License)


========================================================================
EPL licenses
========================================================================

The following components are provided under EPL license. See project link for details.
The text of each license is also included at licenses/LICENSE-[project].txt.

  org.aspectj:aspectjweaver:1.9.7 - AspectJ Weaver (https://www.eclipse.org/aspectj/), (Eclipse Public License - v 2.0)
  jakarta.annotation:jakarta.annotation-api:1.3.5 - Jakarta Annotations API (https://projects.eclipse.org/projects/ee4j.ca), (EPL 2.0, GPL2 w/ CPE)
  jakarta.persistence:jakarta.persistence-api:2.2.3 - Jakarta Persistence API (https://github.com/eclipse-ee4j/jpa-api/tree/2.2-2.2.3-RELEASE), (Eclipse Public License v. 2.0, Eclipse Distribution License v. 1.0)
  jakarta.transaction:jakarta.transaction-api:1.3.3 - javax.transaction API (https://github.com/jakartaee/transactions), (EPL 2.0, GPL2 w/ CPE)

