# Copyright (c) 2019-2020, The Linux Foundation. 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 Linux Foundation 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 "AS IS" AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
# ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER 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.
#
#


######HAL released in Android P######
f054d56cfb47d897f64f71ef4fcacb5ddb1d9c2841e1a83e93efbf92ca1d1297 vendor.qti.hardware.servicetracker@1.0::types
bba735f959d5c7a36196de6548a5f74090512bc4e9d92ac29279b2dd786ebb8a vendor.qti.hardware.servicetracker@1.0::IServicetracker

######HAL released in Android Q######
e1112e99ed844f2e3d9d653acc818391dc0470b810704f59928b021a11eca675 vendor.qti.hardware.servicetracker@1.1::IServicetracker

######HAL released in Android R######
b21a4655232991b5121fc0c86522bdb76f8d519540deac62c85de5b7315a3e55 vendor.qti.hardware.servicetracker@1.2::types
75c7c3e72c2efa195b743d1395dd3ea6ef96761a8503392f945d2f691ea0d2d0 vendor.qti.hardware.servicetracker@1.2::IActivityEventInfoCallback
dc8389391ce48795d11717f6973f8e92a1f660fd6d5bc60e5de8ae19c1d16103 vendor.qti.hardware.servicetracker@1.2::IServicetracker
