Apache Fineract
Copyright 2008-2021 The Apache Software Foundation

This product includes software developed by The Apache Software
Foundation (http://www.apache.org/).

This product includes third party libraries and resource files from
different providers. The details of the different packages and their
respective licenses can be found under "licenses"
