diff --git a/bpfloader/BpfLoader.cpp b/bpfloader/BpfLoader.cpp
index 3d3d4dd..128531e 100644
--- a/bpfloader/BpfLoader.cpp
+++ b/bpfloader/BpfLoader.cpp
@@ -67,14 +67,14 @@
 
 int main() {
     const std::vector<BpfMapInfo> mapPatterns = {
-            BpfMapInfo(COOKIE_TAG_MAP, COOKIE_TAG_MAP_PATH),
-            BpfMapInfo(UID_COUNTERSET_MAP, UID_COUNTERSET_MAP_PATH),
-            BpfMapInfo(APP_UID_STATS_MAP, APP_UID_STATS_MAP_PATH),
-            BpfMapInfo(UID_STATS_MAP, UID_STATS_MAP_PATH),
-            BpfMapInfo(TAG_STATS_MAP, TAG_STATS_MAP_PATH),
-            BpfMapInfo(IFACE_STATS_MAP, IFACE_STATS_MAP_PATH),
-            BpfMapInfo(CONFIGURATION_MAP, CONFIGURATION_MAP_PATH),
-            BpfMapInfo(UID_OWNER_MAP, UID_OWNER_MAP_PATH),
+        BpfMapInfo(COOKIE_TAG_MAP, COOKIE_TAG_MAP_PATH),
+        BpfMapInfo(UID_COUNTERSET_MAP, UID_COUNTERSET_MAP_PATH),
+        BpfMapInfo(APP_UID_STATS_MAP, APP_UID_STATS_MAP_PATH),
+        BpfMapInfo(UID_STATS_MAP, UID_STATS_MAP_PATH),
+        BpfMapInfo(TAG_STATS_MAP, TAG_STATS_MAP_PATH),
+        BpfMapInfo(IFACE_STATS_MAP, IFACE_STATS_MAP_PATH),
+        BpfMapInfo(CONFIGURATION_MAP, CONFIGURATION_MAP_PATH),
+        BpfMapInfo(UID_OWNER_MAP, UID_OWNER_MAP_PATH),
     };
     for (int i = 0; i < mapPatterns.size(); i++) {
         if (mapPatterns[i].fd < 0) {
@@ -83,18 +83,18 @@
         }
     }
     BpfProgInfo programs[] = {
-            {BPF_CGROUP_INET_EGRESS, BPF_EGRESS_PROG_PATH, BPF_CGROUP_EGRESS_PROG_NAME,
-             BPF_PROG_TYPE_CGROUP_SKB, unique_fd(-1)},
-            {BPF_CGROUP_INET_INGRESS, BPF_INGRESS_PROG_PATH, BPF_CGROUP_INGRESS_PROG_NAME,
-             BPF_PROG_TYPE_CGROUP_SKB, unique_fd(-1)},
-            {MAX_BPF_ATTACH_TYPE, XT_BPF_INGRESS_PROG_PATH, XT_BPF_INGRESS_PROG_NAME,
-             BPF_PROG_TYPE_SOCKET_FILTER, unique_fd(-1)},
-            {MAX_BPF_ATTACH_TYPE, XT_BPF_EGRESS_PROG_PATH, XT_BPF_EGRESS_PROG_NAME,
-             BPF_PROG_TYPE_SOCKET_FILTER, unique_fd(-1)},
-            {MAX_BPF_ATTACH_TYPE, XT_BPF_WHITELIST_PROG_PATH, XT_BPF_WHITELIST_PROG_NAME,
-             BPF_PROG_TYPE_SOCKET_FILTER, unique_fd(-1)},
-            {MAX_BPF_ATTACH_TYPE, XT_BPF_BLACKLIST_PROG_PATH, XT_BPF_BLACKLIST_PROG_NAME,
-             BPF_PROG_TYPE_SOCKET_FILTER, unique_fd(-1)}};
+        {BPF_CGROUP_INET_EGRESS, BPF_EGRESS_PROG_PATH, BPF_CGROUP_EGRESS_PROG_NAME,
+         BPF_PROG_TYPE_CGROUP_SKB, unique_fd(-1)},
+        {BPF_CGROUP_INET_INGRESS, BPF_INGRESS_PROG_PATH, BPF_CGROUP_INGRESS_PROG_NAME,
+         BPF_PROG_TYPE_CGROUP_SKB, unique_fd(-1)},
+        {MAX_BPF_ATTACH_TYPE, XT_BPF_INGRESS_PROG_PATH, XT_BPF_INGRESS_PROG_NAME,
+         BPF_PROG_TYPE_SOCKET_FILTER, unique_fd(-1)},
+        {MAX_BPF_ATTACH_TYPE, XT_BPF_EGRESS_PROG_PATH, XT_BPF_EGRESS_PROG_NAME,
+         BPF_PROG_TYPE_SOCKET_FILTER, unique_fd(-1)},
+        {MAX_BPF_ATTACH_TYPE, XT_BPF_WHITELIST_PROG_PATH, XT_BPF_WHITELIST_PROG_NAME,
+         BPF_PROG_TYPE_SOCKET_FILTER, unique_fd(-1)},
+        {MAX_BPF_ATTACH_TYPE, XT_BPF_BLACKLIST_PROG_PATH, XT_BPF_BLACKLIST_PROG_NAME,
+         BPF_PROG_TYPE_SOCKET_FILTER, unique_fd(-1)}};
     int ret = android::bpf::parseProgramsFromFile(BPF_PROG_SRC, programs, ARRAY_SIZE(programs),
                                                   mapPatterns);
     CLEANANDEXIT(ret, mapPatterns);
