diff --git a/Android.mk b/Android.mk
index f017ce5..2134c69 100755
--- a/Android.mk
+++ b/Android.mk
@@ -418,22 +418,12 @@
 else
     LOCAL_LDFLAGS += -Wl,-dynamic-linker,/sbin/linker64
 endif
-ifneq ($(TW_USE_TOOLBOX), true)
-    ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 24; echo $$?),0)
-        LOCAL_POST_INSTALL_CMD := \
-            $(hide) mkdir -p $(TARGET_RECOVERY_ROOT_OUT)/sbin && \
-            ln -sf /sbin/busybox $(TARGET_RECOVERY_ROOT_OUT)/sbin/sh
-    endif
-else
-    ifneq ($(wildcard external/toybox/Android.mk),)
-        TWRP_REQUIRED_MODULES += toybox_symlinks
-    endif
-    ifneq ($(wildcard external/zip/Android.mk),)
-        TWRP_REQUIRED_MODULES += zip
-    endif
-    ifneq ($(wildcard external/unzip/Android.mk),)
-        TWRP_REQUIRED_MODULES += unzip
-    endif
+
+ifneq ($(wildcard external/zip/Android.mk),)
+    TWRP_REQUIRED_MODULES += zip
+endif
+ifneq ($(wildcard external/unzip/Android.mk),)
+    TWRP_REQUIRED_MODULES += unzip
 endif
 
 ifneq ($(TW_NO_EXFAT), true)
@@ -561,48 +551,7 @@
 LOCAL_POST_INSTALL_CMD := \
     $(hide) cp -f $(PRODUCT_OUT)/obj/ETC/file_contexts.bin_intermediates/file_contexts.concat.tmp $(TARGET_RECOVERY_ROOT_OUT)/file_contexts
 
-#include $(BUILD_PHONY_PACKAGE)
-
-ifneq ($(TW_USE_TOOLBOX), true)
-include $(CLEAR_VARS)
-# Create busybox symlinks... gzip and gunzip are excluded because those need to link to pigz instead
-BUSYBOX_LINKS := $(shell cat external/busybox/busybox-full.links)
-exclude := tune2fs mke2fs mkdosfs mkfs.vfat gzip gunzip
-
-# Having /sbin/modprobe present on 32 bit devices with can cause a massive
-# performance problem if the kernel has CONFIG_MODULES=y
-ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 22; echo $$?),0)
-    ifneq ($(TARGET_ARCH), arm64)
-        ifneq ($(TARGET_ARCH), x86_64)
-            exclude += modprobe
-        endif
-    endif
-endif
-
-# If busybox does not have restorecon, assume it does not have SELinux support.
-# Then, let toolbox provide 'ls' so -Z is available to list SELinux contexts.
-ifeq ($(filter restorecon, $(notdir $(BUSYBOX_LINKS))),)
-    exclude += ls
-endif
-
-RECOVERY_BUSYBOX_TOOLS := $(filter-out $(exclude), $(notdir $(BUSYBOX_LINKS)))
-RECOVERY_BUSYBOX_SYMLINKS := $(addprefix $(TARGET_RECOVERY_ROOT_OUT)/sbin/, $(RECOVERY_BUSYBOX_TOOLS))
-$(RECOVERY_BUSYBOX_SYMLINKS): BUSYBOX_BINARY := busybox
-$(RECOVERY_BUSYBOX_SYMLINKS): $(LOCAL_INSTALLED_MODULE)
-	@echo "Symlink: $@ -> $(BUSYBOX_BINARY)"
-	@mkdir -p $(dir $@)
-	@rm -rf $@
-	$(hide) ln -sf $(BUSYBOX_BINARY) $@
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := busybox_symlinks
-LOCAL_MODULE_TAGS := optional
-LOCAL_ADDITIONAL_DEPENDENCIES := $(RECOVERY_BUSYBOX_SYMLINKS)
-ifneq (,$(filter $(PLATFORM_SDK_VERSION),16 17 18))
-ALL_DEFAULT_INSTALLED_MODULES += $(RECOVERY_BUSYBOX_SYMLINKS)
-endif
-RECOVERY_BUSYBOX_SYMLINKS :=
-endif # !TW_USE_TOOLBOX
+include $(BUILD_PHONY_PACKAGE)
 
 # recovery-persist (system partition dynamic executable run after /data mounts)
 # ===============================
@@ -858,7 +807,6 @@
     $(commands_TWRP_local_path)/minzip/Android.mk \
     $(commands_TWRP_local_path)/dosfstools/Android.mk \
     $(commands_TWRP_local_path)/etc/Android.mk \
-    $(commands_TWRP_local_path)/toybox/Android.mk \
     $(commands_TWRP_local_path)/simg2img/Android.mk \
     $(commands_TWRP_local_path)/adbbu/Android.mk \
     $(commands_TWRP_local_path)/libpixelflinger/Android.mk \
diff --git a/prebuilt/Android.mk b/prebuilt/Android.mk
index 689d58b..cd806a8 100755
--- a/prebuilt/Android.mk
+++ b/prebuilt/Android.mk
@@ -15,51 +15,48 @@
 RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/flash_image
 RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/erase_image
 RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/bu
-ifneq ($(TW_USE_TOOLBOX), true)
-    RELINK_SOURCE_FILES += $(TARGET_OUT_OPTIONAL_EXECUTABLES)/busybox
+
+ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 29; echo $$?),0)
+    RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/sh
 else
-    ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 29; echo $$?),0)
-        RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/sh
+    RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/system/bin/sh
+endif
+RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libcrypto.so
+ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 23; echo $$?),0)
+    ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 29; echo $$?),0)
+        RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/system/bin/grep
     else
-        RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/system/bin/sh
+        RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/grep
     endif
-    RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libcrypto.so
-    ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 23; echo $$?),0)
-        ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 29; echo $$?),0)
-            RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/system/bin/grep
-        else
-            RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/grep
+    LOCAL_POST_INSTALL_CMD += $(hide) if [ -e "$(TARGET_RECOVERY_ROOT_OUT)/sbin/egrep" ]; then \
+                                rm $(TARGET_RECOVERY_ROOT_OUT)/sbin/egrep; fi; ln -s $(TARGET_RECOVERY_ROOT_OUT)/sbin/grep $(TARGET_RECOVERY_ROOT_OUT)/sbin/egrep; \
+                                if [ -e "$(TARGET_RECOVERY_ROOT_OUT)/sbin/fgrep" ]; then \
+                                rm $(TARGET_RECOVERY_ROOT_OUT)/sbin/fgrep; fi; ln -s $(TARGET_RECOVERY_ROOT_OUT)/sbin/grep $(TARGET_RECOVERY_ROOT_OUT)/sbin/fgrep;
+    ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 23; echo $$?),0)
+        ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 29; echo $$?),0)
+            RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/dd
         endif
-        LOCAL_POST_INSTALL_CMD += $(hide) if [ -e "$(TARGET_RECOVERY_ROOT_OUT)/sbin/egrep" ]; then \
-                                    rm $(TARGET_RECOVERY_ROOT_OUT)/sbin/egrep; fi; ln -s $(TARGET_RECOVERY_ROOT_OUT)/sbin/grep $(TARGET_RECOVERY_ROOT_OUT)/sbin/egrep; \
-                                    if [ -e "$(TARGET_RECOVERY_ROOT_OUT)/sbin/fgrep" ]; then \
-                                    rm $(TARGET_RECOVERY_ROOT_OUT)/sbin/fgrep; fi; ln -s $(TARGET_RECOVERY_ROOT_OUT)/sbin/grep $(TARGET_RECOVERY_ROOT_OUT)/sbin/fgrep;
-        # RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/toybox
-        ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 23; echo $$?),0)
-            ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 29; echo $$?),0)
-                RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/dd
-            endif
-        endif
-        ifneq ($(wildcard external/zip/Android.mk),)
-            RELINK_SOURCE_FILES += $(TARGET_OUT_OPTIONAL_EXECUTABLES)/zip
-        endif
-        ifneq ($(wildcard external/unzip/Android.mk),)
-            RELINK_SOURCE_FILES += $(TARGET_OUT_OPTIONAL_EXECUTABLES)/unzip
-        endif
-        ifneq ($(wildcard system/core/libziparchive/Android.bp),)
-            RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/unzip
-        endif
-        ifneq ($(wildcard external/one-true-awk/Android.bp),)
-            RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/awk
-        endif
+    endif
+    ifneq ($(wildcard external/zip/Android.mk),)
+        RELINK_SOURCE_FILES += $(TARGET_OUT_OPTIONAL_EXECUTABLES)/zip
+    endif
+    ifneq ($(wildcard external/unzip/Android.mk),)
+        RELINK_SOURCE_FILES += $(TARGET_OUT_OPTIONAL_EXECUTABLES)/unzip
+    endif
+    ifneq ($(wildcard system/core/libziparchive/Android.bp),)
+        RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/unzip
+    endif
+    ifneq ($(wildcard external/one-true-awk/Android.bp),)
+        RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/awk
     endif
 endif
+
 RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/pigz
 RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/fsck.fat
 RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/fatlabel
 RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/mkfs.fat
 ifeq ($(shell test $(PLATFORM_SDK_VERSION) -ge 27; echo $$?),0)
-    ifeq ($(shell test $(PLATFORM_SDK_VERSION) -le 29; echo $$?),0)    
+    ifeq ($(shell test $(PLATFORM_SDK_VERSION) -le 29; echo $$?),0)
         RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/adbd
     else
         RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/system/bin/adbd
@@ -105,12 +102,14 @@
     RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/system/lib64/libadbd_services.so
     RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/system/lib64/libcap.so
     RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/system/lib64/libminijail.so
+    RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/system/bin/toybox
     # RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/system/lib64/libinit.so
     RELINK_SOURCE_FILES += $(TARGET_ROOT_OUT)/../system/lib64/libdl_android.so
 else
     RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libc.so
     RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libdl.so
     RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libm.so
+    RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/toybox
 endif
 RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libcutils.so
 RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libcrecovery.so
@@ -454,22 +453,29 @@
     RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libext2_misc.so
 endif
 
-TW_BB_SYMLINKS :=
-ifneq ($(TW_USE_TOOLBOX), true)
-    TW_BB_SYMLINKS := busybox_symlinks
-endif
+#toybox links
+toybox_links := acpi base64 basename bc blockdev cal cat chcon chgrp chmod chown chroot chrt cksum clear \
+    cmp comm cp cpio cut date dd devmem df diff dirname dmesg dos2unix du echo env expand expr fallocate \
+    false file find flock fmt free fsync getconf getenforce groups gunzip gzip head hostname hwclock i2cdetect \
+    i2cdump i2cget i2cset iconv id ifconfig inotifyd insmod install ionice iorenice kill killall ln load_policy \
+    log logname losetup ls lsmod lsof lspci lsusb md5sum microcom mkdir mkfifo mknod mkswap mktemp modinfo modprobe \
+    more mount mountpoint mv nc netcat netstat nice nl nohup nproc nsenter od paste patch pgrep pidof pkill pmap \
+    printenv printf ps pwd readlink realpath renice restorecon rm rmdir rmmod runcon sed sendevent seq setenforce \
+    setprop setsid sha1sum sha224sum sha256sum sha384sum sha512sum sleep sort split start stat stop strings stty \
+    swapoff swapon sync sysctl tac tail tar taskset tee time timeout top touch toybox tr true truncate tty ulimit \
+    umount uname uniq unix2dos unlink unshare uptime usleep uudecode uuencode uuidgen vmstat watch wc which whoami \
+    xargs xxd yes zcat
+TOYBOX_LINKS := $(addprefix $(TARGET_RECOVERY_ROOT_OUT)/system/bin/, $(toybox_links))
 
-# GEN := $(intermediates)/teamwin
-# $(GEN): $(RELINK) $(TW_BB_SYMLINKS) toolbox_symlinks
-
-#relink recovery executables linker to /sbin
+#relink recovery executables linker to /sbin and move symlinks
 include $(CLEAR_VARS)
 LOCAL_MODULE := relink
 LOCAL_MODULE_TAGS := optional
 LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
 LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin
-LOCAL_POST_INSTALL_CMD += $(RELINK) $(TARGET_RECOVERY_ROOT_OUT)/sbin $(RELINK_SOURCE_FILES)
-LOCAL_REQUIRED_MODULES := linker toolbox_symlinks adbd libdl_android
+LOCAL_POST_INSTALL_CMD += $(RELINK) $(TARGET_RECOVERY_ROOT_OUT)/sbin $(RELINK_SOURCE_FILES) && \
+    mv $(TOYBOX_LINKS) $(TARGET_RECOVERY_ROOT_OUT)/sbin/
+LOCAL_REQUIRED_MODULES := linker adbd libdl_android toybox
 include $(BUILD_PHONY_PACKAGE)
 
 #relink init
@@ -602,16 +608,16 @@
 	include $(BUILD_PREBUILT)
 endif
 
-#ifeq ($(TW_USE_TOOLBOX), true)
-#    include $(CLEAR_VARS)
-#    LOCAL_MODULE := mkshrc_twrp
-#    LOCAL_MODULE_STEM := mkshrc
-#    LOCAL_MODULE_TAGS := optional
-#    LOCAL_MODULE_CLASS := ETC
-#    LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/etc
-#    LOCAL_SRC_FILES := $(LOCAL_MODULE)
-#    include $(BUILD_PREBUILT)
-#endif
+ifeq ($(TW_USE_TOOLBOX), true)
+   include $(CLEAR_VARS)
+   LOCAL_MODULE := mkshrc_twrp
+   LOCAL_MODULE_STEM := mkshrc
+   LOCAL_MODULE_TAGS := optional
+   LOCAL_MODULE_CLASS := ETC
+   LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/etc
+   LOCAL_SRC_FILES := $(LOCAL_MODULE)
+   include $(BUILD_PREBUILT)
+endif
 
 #TWRP App "placeholder"
 include $(CLEAR_VARS)
diff --git a/prebuilt/fix_permissions.sh b/prebuilt/fix_permissions.sh
deleted file mode 100755
index 3723a12..0000000
--- a/prebuilt/fix_permissions.sh
+++ /dev/null
@@ -1,484 +0,0 @@
-#!/sbin/sh
-#
-# Warning: if you want to run this script in cm-recovery change the above to #!/sbin/sh
-#
-# fix_permissions - fixes permissions on Android data directories after upgrade
-# shade@chemlab.org
-#
-# original concept: http://blog.elsdoerfer.name/2009/05/25/android-fix-package-uid-mismatches/
-# implementation by: Cyanogen
-# improved by: ankn, smeat, thenefield, farmatito, rikupw, Kastro
-#
-# v1.1-v1.31r3 - many improvements and concepts from XDA developers.
-# v1.34 through v2.00 -  A lot of frustration [by Kastro]
-# v2.01	- Completely rewrote the script for SPEED, thanks for the input farmatito
-#         /data/data depth recursion is tweaked;
-#         fixed single mode;
-#         functions created for modularity;
-#         logging can be disabled via CLI for more speed;
-#         runtime computation added to end (Runtime: mins secs);
-#         progress (current # of total) added to screen;
-#         fixed CLI argument parsing, now you can have more than one option!;
-#         debug cli option;
-#         verbosity can be disabled via CLI option for less noise;;
-#         [by Kastro, (XDA: k4str0), twitter;mattcarver]
-# v2.02 - ignore com.htc.resources.apk if it exists and minor code cleanups,
-#         fix help text, implement simulated run (-s) [farmatito]
-# v2.03 - fixed chown group ownership output [Kastro]
-# v2.04 - replaced /system/sd with $SD_EXT_DIRECTORY [Firerat]
-VERSION="2.04"
-
-# Defaults
-DEBUG=0 # Debug off by default
-LOGGING=1 # Logging on by default
-VERBOSE=1 # Verbose on by default
-
-# Messages
-UID_MSG="Changing user ownership for:"
-GID_MSG="Changing group ownership for:"
-PERM_MSG="Changing permissions for:"
-
-# Programs needed
-ECHO="busybox echo"
-GREP="busybox grep"
-EGREP="busybox egrep"
-CAT="busybox cat"
-CHOWN="busybox chown"
-CHMOD="busybox chmod"
-MOUNT="busybox mount"
-UMOUNT="busybox umount"
-CUT="busybox cut"
-FIND="busybox find"
-LS="busybox ls"
-TR="busybox tr"
-TEE="busybox tee"
-TEST="busybox test"
-SED="busybox sed"
-RM="busybox rm"
-WC="busybox wc"
-EXPR="busybox expr"
-DATE="busybox date"
-
-# Initialise vars
-CODEPATH=""
-UID=""
-GID=""
-PACKAGE=""
-REMOVE=0
-NOSYSTEM=0
-ONLY_ONE=""
-SIMULATE=0
-SYSREMOUNT=0
-SYSMOUNT=0
-DATAMOUNT=0
-SYSSDMOUNT=0
-FP_STARTTIME=$( $DATE +"%m-%d-%Y %H:%M:%S" )
-FP_STARTEPOCH=$( $DATE +%s )
-if $TEST "$SD_EXT_DIRECTORY" = ""; then
-    #check for mount point, /system/sd included in tests for backward compatibility
-    for MP in /sd-ext /system/sd;do
-        if $TEST -d $MP; then
-            SD_EXT_DIRECTORY=$MP
-            break
-        fi
-    done
-fi
-fp_usage()
-{
-   $ECHO "Usage $0 [OPTIONS] [APK_PATH]"
-   $ECHO "      -d         turn on debug"
-   $ECHO "      -f         fix only package APK_PATH"
-   $ECHO "      -l         disable logging for this run (faster)"
-   $ECHO "      -r         remove stale data directories"
-   $ECHO "                 of uninstalled packages while fixing permissions"
-   $ECHO "      -s         simulate only"
-   $ECHO "      -u         check only non-system directories"
-   $ECHO "      -v         disable verbosity for this run (less output)"
-   $ECHO "      -V         print version"
-   $ECHO "      -h         this help"
-}
-
-fp_parseargs()
-{
-   # Parse options
-   while $TEST $# -ne 0; do
-      case "$1" in
-         -d)
-            DEBUG=1
-         ;;
-         -f)
-            if $TEST $# -lt 2; then
-               $ECHO "$0: missing argument for option $1"
-               exit 1
-            else
-               if $TEST $( $ECHO $2 | $CUT -c1 ) != "-"; then
-                  ONLY_ONE=$2
-                  shift;
-               else
-                  $ECHO "$0: missing argument for option $1"
-                  exit 1
-               fi
-            fi
-         ;;
-         -r)
-            REMOVE=1
-         ;;
-         -s)
-            SIMULATE=1
-         ;;
-         -l)
-            if $TEST $LOGGING -eq 0; then
-               LOGGING=1
-            else
-               LOGGING=0
-            fi
-         ;;
-         -v)
-            if $TEST $VERBOSE -eq 0; then
-               VERBOSE=1
-            else
-               VERBOSE=0
-            fi
-         ;;
-         -u)
-            NOSYSTEM=1
-         ;;
-         -V)
-            $ECHO "$0 $VERSION"
-            exit 0
-         ;;
-         -h)
-            fp_usage
-            exit 0
-         ;;
-         -*)
-            $ECHO "$0: unknown option $1"
-            $ECHO
-            fp_usage
-            exit 1
-         ;;
-      esac
-      shift;
-   done
-}
-
-fp_print()
-{
-   MSG=$@
-   if $TEST $LOGGING -eq 1; then
-      $ECHO $MSG | $TEE -a $LOG_FILE
-   else
-      $ECHO $MSG
-   fi
-}
-
-fp_start()
-{
-   if $TEST $SIMULATE -eq 0 ; then
-      if $TEST $( $GREP -c " /system " "/proc/mounts" ) -ne 0; then
-         DEVICE=$( $GREP " /system " "/proc/mounts" | $CUT -d ' ' -f1 )
-         if $TEST $DEBUG -eq 1; then
-            fp_print "/system mounted on $DEVICE"
-         fi
-         if $TEST $( $GREP " /system " "/proc/mounts" | $GREP -c " ro " ) -ne 0; then
-            $MOUNT -o remount,rw $DEVICE /system
-            SYSREMOUNT=1
-         fi
-      else
-         $MOUNT /system > /dev/null 2>&1
-         SYSMOUNT=1
-      fi
-
-      if $TEST $( $GREP -c " /data " "/proc/mounts" ) -eq 0; then
-         $MOUNT /data > /dev/null 2>&1
-         DATAMOUNT=1
-      fi
-
-      if $TEST -e /dev/block/mmcblk0p2 && $TEST $( $GREP -c " $SD_EXT_DIRECTORY " "/proc/mounts" ) -eq 0; then
-         $MOUNT $SD_EXT_DIRECTORY > /dev/null 2>&1
-         SYSSDMOUNT=1
-      fi
-   fi
-   if $TEST $( $MOUNT | $GREP -c /sdcard ) -eq 0; then
-      LOG_FILE="/data/fix_permissions.log"
-   else
-      LOG_FILE="/sdcard/fix_permissions.log"
-   fi
-   if $TEST ! -e "$LOG_FILE"; then
-      > $LOG_FILE
-   fi
-
-   fp_print "$0 $VERSION started at $FP_STARTTIME"
-}
-
-fp_chown_uid()
-{
-   FP_OLDUID=$1
-   FP_UID=$2
-   FP_FILE=$3
-
-   #if user ownership doesn't equal then change them
-   if $TEST "$FP_OLDUID" != "$FP_UID"; then
-      if $TEST $VERBOSE -ne 0; then
-         fp_print "$UID_MSG $FP_FILE from '$FP_OLDUID' to '$FP_UID'"
-      fi
-      if $TEST $SIMULATE -eq 0; then
-         $CHOWN $FP_UID "$FP_FILE"
-      fi
-   fi
-}
-
-fp_chown_gid()
-{
-   FP_OLDGID=$1
-   FP_GID=$2
-   FP_FILE=$3
-
-   #if group ownership doesn't equal then change them
-   if $TEST "$FP_OLDGID" != "$FP_GID"; then
-      if $TEST $VERBOSE -ne 0; then
-         fp_print "$GID_MSG $FP_FILE from '$FP_OLDGID' to '$FP_GID'"
-      fi
-      if $TEST $SIMULATE -eq 0; then
-         $CHOWN :$FP_GID "$FP_FILE"
-      fi
-   fi
-}
-
-fp_chmod()
-{
-   FP_OLDPER=$1
-   FP_OLDPER=$( $ECHO $FP_OLDPER | cut -c2-10 )
-   FP_PERSTR=$2
-   FP_PERNUM=$3
-   FP_FILE=$4
-
-   #if the permissions are not equal
-   if $TEST "$FP_OLDPER" != "$FP_PERSTR"; then
-      if $TEST $VERBOSE -ne 0; then
-         fp_print "$PERM_MSG $FP_FILE from '$FP_OLDPER' to '$FP_PERSTR' ($FP_PERNUM)"
-      fi
-      #change the permissions
-      if $TEST $SIMULATE -eq 0; then
-         $CHMOD $FP_PERNUM "$FP_FILE"
-      fi
-   fi
-}
-
-fp_all()
-{
-   FP_NUMS=$( $CAT /data/system/packages.xml | $EGREP "^<package.*serId" | $GREP -v framework-res.apk | $GREP -v com.htc.resources.apk | $WC -l )
-   I=0
-   $CAT /data/system/packages.xml | $EGREP "^<package.*serId" | $GREP -v framework-res.apk | $GREP -v com.htc.resources.apk | while read all_line; do
-      I=$( $EXPR $I + 1 )
-      fp_package "$all_line" $I $FP_NUMS
-   done
-}
-
-fp_single()
-{
-   FP_SFOUND=$( $CAT /data/system/packages.xml | $EGREP "^<package.*serId" | $GREP -v framework-res.apk | $GREP -v com.htc.resources.apk | $GREP -i $ONLY_ONE | wc -l )
-   if $TEST $FP_SFOUND -gt 1; then
-      fp_print "Cannot perform single operation on $FP_SFOUND matched package(s)."
-      elif $TEST $FP_SFOUND = "" -o $FP_SFOUND -eq 0; then
-      fp_print "Could not find the package you specified in the packages.xml file."
-   else
-      FP_SPKG=$( $CAT /data/system/packages.xml | $EGREP "^<package.*serId" | $GREP -v framework-res.apk | $GREP -v com.htc.resources.apk | $GREP -i $ONLY_ONE )
-      fp_package "${FP_SPKG}" 1 1
-   fi
-}
-
-fp_package()
-{
-   pkgline=$1
-   curnum=$2
-   endnum=$3
-   CODEPATH=$( $ECHO $pkgline | $SED 's%.* codePath="\(.*\)".*%\1%' |  $CUT -d '"' -f1 )
-   PACKAGE=$( $ECHO $pkgline | $SED 's%.* name="\(.*\)".*%\1%' | $CUT -d '"' -f1 )
-   UID=$( $ECHO $pkgline | $SED 's%.*serId="\(.*\)".*%\1%' |  $CUT -d '"' -f1 )
-   GID=$UID
-   APPDIR=$( $ECHO $CODEPATH | $SED 's%^\(.*\)/.*%\1%' )
-   APK=$( $ECHO $CODEPATH | $SED 's%^.*/\(.*\..*\)$%\1%' )
-
-   #debug
-   if $TEST $DEBUG -eq 1; then
-      fp_print "CODEPATH: $CODEPATH APPDIR: $APPDIR APK:$APK UID/GID:$UID:$GID"
-   fi
-
-   #check for existence of apk
-   if $TEST -e $CODEPATH;  then
-      fp_print "Processing ($curnum of $endnum): $PACKAGE..."
-
-      #lets get existing permissions of CODEPATH
-      OLD_UGD=$( $LS -ln "$CODEPATH" )
-      OLD_PER=$( $ECHO $OLD_UGD | $CUT -d ' ' -f1 )
-      OLD_UID=$( $ECHO $OLD_UGD | $CUT -d ' ' -f3 )
-      OLD_GID=$( $ECHO $OLD_UGD | $CUT -d ' ' -f4 )
-
-      #apk source dirs
-      if $TEST "$APPDIR" = "/system/app"; then
-         #skip system apps if set
-         if $TEST "$NOSYSTEM" = "1"; then
-            fp_print "***SKIPPING SYSTEM APP ($PACKAGE)!"
-            return
-         fi
-         fp_chown_uid $OLD_UID 0 "$CODEPATH"
-         fp_chown_gid $OLD_GID 0 "$CODEPATH"
-         fp_chmod $OLD_PER "rw-r--r--" 644 "$CODEPATH"
-         elif $TEST "$APPDIR" = "/data/app" || $TEST "$APPDIR" = "/sd-ext/app"; then
-         fp_chown_uid $OLD_UID 1000 "$CODEPATH"
-         fp_chown_gid $OLD_GID 1000 "$CODEPATH"
-         fp_chmod $OLD_PER "rw-r--r--" 644 "$CODEPATH"
-         elif $TEST "$APPDIR" = "/data/app-private" || $TEST "$APPDIR" = "/sd-ext/app-private"; then
-         fp_chown_uid $OLD_UID 1000 "$CODEPATH"
-         fp_chown_gid $OLD_GID $GID "$CODEPATH"
-         fp_chmod $OLD_PER "rw-r-----" 640 "$CODEPATH"
-      fi
-   else
-      fp_print "$CODEPATH does not exist ($curnum of $endnum). Reinstall..."
-      if $TEST $REMOVE -eq 1; then
-         if $TEST -d /data/data/$PACKAGE ; then
-            fp_print "Removing stale dir /data/data/$PACKAGE"
-            if $TEST $SIMULATE -eq 0 ; then
-               $RM -R /data/data/$PACKAGE
-            fi
-         fi
-      fi
-   fi
-
-   #the data/data for the package
-   if $TEST -d "/data/data/$PACKAGE"; then
-      #find all directories in /data/data/$PACKAGE
-      $FIND /data/data/$PACKAGE -type d -exec $LS -ldn {} \; | while read dataline; do
-         #get existing permissions of that directory
-         OLD_PER=$( $ECHO $dataline | $CUT -d ' ' -f1 )
-         OLD_UID=$( $ECHO $dataline | $CUT -d ' ' -f3 )
-         OLD_GID=$( $ECHO $dataline | $CUT -d ' ' -f4 )
-         FILEDIR=$( $ECHO $dataline | $CUT -d ' ' -f9 )
-         FOURDIR=$( $ECHO $FILEDIR | $CUT -d '/' -f5 )
-
-         #set defaults for iteration
-         ISLIB=0
-         REVPERM=755
-         REVPSTR="rwxr-xr-x"
-         REVUID=$UID
-         REVGID=$GID
-
-         if $TEST "$FOURDIR" = ""; then
-            #package directory, perms:755 owner:$UID:$GID
-            fp_chmod $OLD_PER "rwxr-xr-x" 755 "$FILEDIR"
-            elif $TEST "$FOURDIR" = "lib"; then
-            #lib directory, perms:755 owner:1000:1000
-            #lib files, perms:755 owner:1000:1000
-            ISLIB=1
-            REVPERM=755
-            REVPSTR="rwxr-xr-x"
-            REVUID=1000
-            REVGID=1000
-            fp_chmod $OLD_PER "rwxr-xr-x" 755 "$FILEDIR"
-            elif $TEST "$FOURDIR" = "shared_prefs"; then
-            #shared_prefs directories, perms:771 owner:$UID:$GID
-            #shared_prefs files, perms:660 owner:$UID:$GID
-            REVPERM=660
-            REVPSTR="rw-rw----"
-            fp_chmod $OLD_PER "rwxrwx--x" 771 "$FILEDIR"
-            elif $TEST "$FOURDIR" = "databases"; then
-            #databases directories, perms:771 owner:$UID:$GID
-            #databases files, perms:660 owner:$UID:$GID
-            REVPERM=660
-            REVPSTR="rw-rw----"
-            fp_chmod $OLD_PER "rwxrwx--x" 771 "$FILEDIR"
-            elif $TEST "$FOURDIR" = "cache"; then
-            #cache directories, perms:771 owner:$UID:$GID
-            #cache files, perms:600 owner:$UID:GID
-            REVPERM=600
-            REVPSTR="rw-------"
-            fp_chmod $OLD_PER "rwxrwx--x" 771 "$FILEDIR"
-         else
-            #other directories, perms:771 owner:$UID:$GID
-            REVPERM=771
-            REVPSTR="rwxrwx--x"
-            fp_chmod $OLD_PER "rwxrwx--x" 771 "$FILEDIR"
-         fi
-
-         #change ownership of directories matched
-         if $TEST "$ISLIB" = "1"; then
-            fp_chown_uid $OLD_UID 1000 "$FILEDIR"
-            fp_chown_gid $OLD_GID 1000 "$FILEDIR"
-         else
-            fp_chown_uid $OLD_UID $UID "$FILEDIR"
-            fp_chown_gid $OLD_GID $GID "$FILEDIR"
-         fi
-
-         #if any files exist in directory with improper permissions reset them
-         $FIND $FILEDIR -type f -maxdepth 1 ! -perm $REVPERM -exec $LS -ln {} \; | while read subline; do
-            OLD_PER=$( $ECHO $subline | $CUT -d ' ' -f1 )
-            SUBFILE=$( $ECHO $subline | $CUT -d ' ' -f9 )
-            fp_chmod $OLD_PER $REVPSTR $REVPERM "$SUBFILE"
-         done
-
-         #if any files exist in directory with improper user reset them
-         $FIND $FILEDIR -type f -maxdepth 1 ! -user $REVUID -exec $LS -ln {} \; | while read subline; do
-            OLD_UID=$( $ECHO $subline | $CUT -d ' ' -f3 )
-            SUBFILE=$( $ECHO $subline | $CUT -d ' ' -f9 )
-            fp_chown_uid $OLD_UID $REVUID "$SUBFILE"
-         done
-
-         #if any files exist in directory with improper group reset them
-         $FIND $FILEDIR -type f -maxdepth 1 ! -group $REVGID -exec $LS -ln {} \; | while read subline; do
-            OLD_GID=$( $ECHO $subline | $CUT -d ' ' -f4 )
-            SUBFILE=$( $ECHO $subline | $CUT -d ' ' -f9 )
-            fp_chown_gid $OLD_GID $REVGID "$SUBFILE"
-         done
-      done
-   fi
-}
-
-date_diff()
-{
-   if $TEST $# -ne 2; then
-      FP_DDM="E"
-      FP_DDS="E"
-      return
-   fi
-   FP_DDD=$( $EXPR $2 - $1 )
-   FP_DDM=$( $EXPR $FP_DDD / 60 )
-   FP_DDS=$( $EXPR $FP_DDD % 60 )
-}
-
-fp_end()
-{
-   if $TEST $SYSREMOUNT -eq 1; then
-      $MOUNT -o remount,ro $DEVICE /system > /dev/null 2>&1
-   fi
-
-   if $TEST $SYSSDMOUNT -eq 1; then
-      $UMOUNT $SD_EXT_DIRECTORY > /dev/null 2>&1
-   fi
-
-   if $TEST $SYSMOUNT -eq 1; then
-      $UMOUNT /system > /dev/null 2>&1
-   fi
-
-   if $TEST $DATAMOUNT -eq 1; then
-      $UMOUNT /data > /dev/null 2>&1
-   fi
-
-   FP_ENDTIME=$( $DATE +"%m-%d-%Y %H:%M:%S" )
-   FP_ENDEPOCH=$( $DATE +%s )
-
-   date_diff $FP_STARTEPOCH $FP_ENDEPOCH
-
-   fp_print "$0 $VERSION ended at $FP_ENDTIME (Runtime:${FP_DDM}m${FP_DDS}s)"
-}
-
-#MAIN SCRIPT
-
-fp_parseargs $@
-fp_start
-if $TEST "$ONLY_ONE" != "" -a "$ONLY_ONE" != "0" ; then
-   fp_single "$ONLY_ONE"
-else
-   fp_all
-fi
-fp_end
diff --git a/toolbox/Android.mk b/toolbox/Android.mk
deleted file mode 100755
index 4a2546e..0000000
--- a/toolbox/Android.mk
+++ /dev/null
@@ -1,357 +0,0 @@
-TWRP_TOOLBOX_PATH := $(call my-dir)
-LOCAL_PATH := system/core/toolbox
-include $(CLEAR_VARS)
-
-OUR_TOOLS :=
-
-ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 24; echo $$?),0)
-    OUR_TOOLS := \
-        start \
-        stop
-endif
-    
-ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 23; echo $$?),0)
-    OUR_TOOLS += \
-        getprop \
-        setprop
-endif
-
-# If busybox does not have SELinux support, provide these tools with toolbox.
-# Note that RECOVERY_BUSYBOX_TOOLS will be empty if TW_USE_TOOLBOX == true.
-TOOLS_FOR_SELINUX := \
-    ls
-
-ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 23; echo $$?),0)
-    TOOLS_FOR_SELINUX += \
-        load_policy \
-        getenforce \
-        chcon \
-        restorecon \
-        runcon \
-        getsebool \
-        setsebool
-endif
-
-OUR_TOOLS += $(filter-out $(RECOVERY_BUSYBOX_TOOLS), $(TOOLS_FOR_SELINUX))
-
-# toolbox setenforce is used during init, so it needs to be included here
-# symlink is omitted at the very end if busybox already provides this
-ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 23; echo $$?),0)
-   OUR_TOOLS += setenforce
-endif
-
-ifeq ($(TW_USE_TOOLBOX), true)
-    ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 22; echo $$?),0)
-        # These are the only toolbox tools in M. The rest are now in toybox.
-        BSD_TOOLS :=
-
-        OUR_TOOLS := \
-            newfs_msdos
-
-        ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 26; echo $$?),0)
-            OUR_TOOLS += \
-                iftop \
-                ioctl \
-                nandread \
-                prlimit \
-                sendevent \
-                start \
-                stop
-        endif
-
-        ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 24; echo $$?),0)
-            BSD_TOOLS += \
-                dd \
-                du \
-
-            OUR_TOOLS += \
-                df \
-                ionice \
-                log \
-                ls \
-                lsof \
-                mount \
-                ps \
-                renice \
-                top \
-                uptime \
-                watchprops
-        endif
-    else
-        ifneq (,$(filter $(PLATFORM_SDK_VERSION), 21 22))
-            OUR_TOOLS += \
-                mknod \
-                nohup
-            BSD_TOOLS := \
-                cat \
-                chown \
-                cp \
-                dd \
-                du \
-                grep \
-                kill \
-                ln \
-                mv \
-                printenv \
-                rm \
-                rmdir \
-                sleep \
-                sync
-        else
-            OUR_TOOLS += \
-                cat \
-                chown \
-                dd \
-                du \
-                kill \
-                ln \
-                mv \
-                printenv \
-                rm \
-                rmdir \
-                setconsole \
-                sleep \
-                sync
-        endif
-
-        OUR_TOOLS += \
-            chmod \
-            clear \
-            cmp \
-            date \
-            df \
-            dmesg \
-            getevent \
-            hd \
-            id \
-            ifconfig \
-            iftop \
-            insmod \
-            ioctl \
-            ionice \
-            log \
-            lsmod \
-            lsof \
-            md5 \
-            mkdir \
-            mkswap \
-            mount \
-            nandread \
-            netstat \
-            newfs_msdos \
-            notify \
-            ps \
-            readlink \
-            renice \
-            rmmod \
-            route \
-            schedtop \
-            sendevent \
-            smd \
-            swapoff \
-            swapon \
-            top \
-            touch \
-            umount \
-            uptime \
-            vmstat \
-            watchprops \
-            wipe
-    endif
-endif
-
-ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 27; echo $$?),0)
-    # Special rules for 9.0
-    OUR_TOOLS += getevent
-    LOCAL_C_INCLUDES += $(TWRP_TOOLBOX_PATH)
-    ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 29; echo $$?),0)
-        LOCAL_WHOLE_STATIC_LIBRARIES += libtoolbox_dd
-    endif
-
-    ifneq ($(TW_USE_TOOLBOX), true)
-        OUR_TOOLS += newfs_msdos
-    endif
-endif
-
-ifneq (,$(filter $(PLATFORM_SDK_VERSION), 21 22))
-    ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT)))
-        OUR_TOOLS += r
-    endif
-endif
-
-LOCAL_SRC_FILES := \
-    toolbox.c \
-    $(patsubst %,%.c,$(OUR_TOOLS))
-
-ifneq ($(wildcard system/core/toolbox/dynarray.c),)
-    LOCAL_SRC_FILES += dynarray.c
-endif
-
-ifneq (,$(filter $(PLATFORM_SDK_VERSION), 21 22))
-    LOCAL_SRC_FILES += \
-        pwcache.c \
-        upstream-netbsd/lib/libc/gen/getbsize.c \
-        upstream-netbsd/lib/libc/gen/humanize_number.c \
-        upstream-netbsd/lib/libc/stdlib/strsuftoll.c \
-        upstream-netbsd/lib/libc/string/swab.c \
-        upstream-netbsd/lib/libutil/raise_default_signal.c
-endif
-
-ifneq (,$(filter $(PLATFORM_SDK_VERSION), 21 22 23))
-    LOCAL_CFLAGS += \
-        -std=gnu99 \
-        -Werror -Wno-unused-parameter \
-        -I$(LOCAL_PATH)/upstream-netbsd/include \
-        -include bsd-compatibility.h
-endif
-
-ifneq (,$(filter $(PLATFORM_SDK_VERSION), 21 22))
-    LOCAL_C_INCLUDES += external/openssl/include
-else
-    LOCAL_C_INCLUDES += bionic/libc/bionic
-endif
-
-LOCAL_SHARED_LIBRARIES += libcutils
-
-ifneq (,$(filter $(PLATFORM_SDK_VERSION), 21 22))
-    ifeq ($(TW_USE_TOOLBOX), true)
-        LOCAL_SHARED_LIBRARIES += libcrypto
-    endif
-else
-    LOCAL_SHARED_LIBRARIES += \
-        libc \
-        liblog
-endif
-
-LOCAL_SHARED_LIBRARIES += libselinux
-
-ifneq (,$(filter $(PLATFORM_SDK_VERSION), 21 22 23))
-    # libusbhost is only used by lsusb, and that isn't usually included in toolbox.
-    # The linker strips out all the unused library code in the normal case.
-    LOCAL_STATIC_LIBRARIES := libusbhost
-    LOCAL_WHOLE_STATIC_LIBRARIES := $(patsubst %,libtoolbox_%,$(BSD_TOOLS))
-endif
-
-ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 22; echo $$?),0)
-    # Rule to make getprop and setprop in M trees where toybox normally
-    # provides these tools. Toybox does not allow for easy dynamic
-    # configuration, so we would have to include the entire toybox binary
-    # which takes up more space than is necessary so long as we are still
-    # including busybox.
-ifneq ($(TW_USE_TOOLBOX), true)
-    LOCAL_SRC_FILES += \
-        ../../../$(TWRP_TOOLBOX_PATH)/setprop.c \
-        ../../../$(TWRP_TOOLBOX_PATH)/ls.c
-    OUR_TOOLS += setprop
-    ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 28; echo $$?),0)
-        # Special rules for <= 8.1
-        LOCAL_SRC_FILES += \
-            ../../../$(TWRP_TOOLBOX_PATH)/getprop.c
-        OUR_TOOLS += getprop
-    endif
-endif
-endif
-ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 23; echo $$?),0)
-    ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 28; echo $$?),0)
-    # Rule for making start and stop in N trees
-    LOCAL_SRC_FILES += \
-        ../../../$(TWRP_TOOLBOX_PATH)/start.c \
-        ../../../$(TWRP_TOOLBOX_PATH)/stop.c
-    OUR_TOOLS += start stop
-    endif
-endif
-ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 27; echo $$?),0)
-    LOCAL_SRC_FILES += getprop.cpp
-    LOCAL_SHARED_LIBRARIES += libbase
-    LOCAL_STATIC_LIBRARIES += libpropertyinfoparser
-    LOCAL_CPPFLAGS += -std=c++17
-    OUR_TOOLS += getprop
-endif
-
-LOCAL_MODULE := toolbox_recovery
-LOCAL_MODULE_STEM := toolbox
-LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin
-LOCAL_MODULE_TAGS := optional
-LOCAL_CFLAGS += -Wno-unused-parameter -Wno-unused-const-variable
-
-# Including this will define $(intermediates) below
-include $(BUILD_EXECUTABLE)
-
-$(LOCAL_PATH)/toolbox.c: $(intermediates)/tools.h
-
-ifneq (,$(filter $(PLATFORM_SDK_VERSION), 21 22 23))
-    ALL_TOOLS := $(BSD_TOOLS) $(OUR_TOOLS)
-else
-    ALL_TOOLS := $(OUR_TOOLS)
-endif
-
-TOOLS_H := $(intermediates)/tools.h
-$(TOOLS_H): PRIVATE_TOOLS := $(ALL_TOOLS)
-$(TOOLS_H): PRIVATE_CUSTOM_TOOL = echo "/* file generated automatically */" > $@ ; for t in $(PRIVATE_TOOLS) ; do echo "TOOL($$t)" >> $@ ; done
-$(TOOLS_H): 
-	$(transform-generated-source)
-
-# toolbox setenforce is used during init in non-symlink form, so it was
-# required to be included as part of the suite above. if busybox already
-# provides setenforce, we can omit the toolbox symlink
-TEMP_TOOLS := $(filter-out $(RECOVERY_BUSYBOX_TOOLS), $(ALL_TOOLS))
-ALL_TOOLS := $(TEMP_TOOLS)
-
-# Make /sbin/toolbox launchers for each tool
-SYMLINKS := $(addprefix $(TARGET_RECOVERY_ROOT_OUT)/sbin/,$(ALL_TOOLS))
-$(SYMLINKS): TOOLBOX_BINARY := $(LOCAL_MODULE_STEM)
-$(SYMLINKS): $(LOCAL_INSTALLED_MODULE)
-	@echo "Symlink: $@ -> $(TOOLBOX_BINARY)"
-	@mkdir -p $(dir $@)
-	@rm -rf $@
-	$(hide) ln -sf $(TOOLBOX_BINARY) $@
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := toolbox_symlinks
-LOCAL_MODULE_TAGS := optional
-LOCAL_ADDITIONAL_DEPENDENCIES := $(SYMLINKS)
-include $(BUILD_PHONY_PACKAGE)
-
-ifneq (,$(filter $(PLATFORM_SDK_VERSION),16 17 18))
-    # Only needed if the build system lacks support for LOCAL_ADDITIONAL_DEPENDENCIES
-    ALL_DEFAULT_INSTALLED_MODULES += $(SYMLINKS)
-    ALL_MODULES.$(LOCAL_MODULE).INSTALLED := \
-        $(ALL_MODULES.$(LOCAL_MODULE).INSTALLED) $(SYMLINKS)
-endif
-
-ifeq ($(TW_USE_TOOLBOX), true)
-    ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 23; echo $$?),0)
-        include $(CLEAR_VARS)
-        LOCAL_MODULE := dd_twrp
-        LOCAL_MODULE_STEM := dd
-        LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin
-        LOCAL_MODULE_TAGS := optional
-        LOCAL_CFLAGS := -include bsd-compatibility.h -DNO_CONV -Wno-unused-parameter
-        LOCAL_C_INCLUDES := system/core/toolbox/upstream-netbsd/include/ system/core/toolbox/upstream-netbsd/bin/dd system/core/toolbox
-
-        LOCAL_SHARED_LIBRARIES := \
-	        libcutils \
-
-        LOCAL_SRC_FILES += \
-            upstream-netbsd/bin/dd/args.c \
-            upstream-netbsd/bin/dd/conv.c \
-            upstream-netbsd/bin/dd/dd.c \
-            upstream-netbsd/bin/dd/dd_hostops.c \
-            upstream-netbsd/bin/dd/misc.c \
-            upstream-netbsd/bin/dd/position.c \
-            upstream-netbsd/lib/libc/gen/getbsize.c \
-            upstream-netbsd/lib/libc/gen/humanize_number.c \
-            upstream-netbsd/lib/libc/stdlib/strsuftoll.c \
-            upstream-netbsd/lib/libc/string/swab.c \
-            upstream-netbsd/lib/libutil/raise_default_signal.c
-
-        include $(BUILD_EXECUTABLE)
-    endif
-endif
-
-SYMLINKS :=
-ALL_TOOLS :=
-BSD_TOOLS :=
-OUR_TOOLS :=
-TEMP_TOOLS :=
-TOOLS_FOR_SELINUX :=
diff --git a/toolbox/dynarray.h b/toolbox/dynarray.h
deleted file mode 100644
index 0ca54fd..0000000
--- a/toolbox/dynarray.h
+++ /dev/null
@@ -1,82 +0,0 @@
-#ifndef DYNARRAY_H
-#define DYNARRAY_H
-
-// These functions are now found in system/core/toolbox/ls.c
-
-#include <stddef.h>
-
-/* simple dynamic array of pointers */
-typedef struct {
-    int count;
-    int capacity;
-    void** items;
-} dynarray_t;
-
-#define DYNARRAY_INITIALIZER  { 0, 0, NULL }
-
-void dynarray_init( dynarray_t *a );
-void dynarray_done( dynarray_t *a );
-
-void dynarray_append( dynarray_t *a, void* item );
-
-/* Used to iterate over a dynarray_t
- * _array :: pointer to the array
- * _item_type :: type of objects pointed to by the array
- * _item      :: name of a local variable defined within the loop
- *               with type '_item_type'
- * _stmnt     :: C statement that will be executed in each iteration.
- *
- * You case use 'break' and 'continue' within _stmnt
- *
- * This macro is only intended for simple uses. I.e. do not add or
- * remove items from the array during iteration.
- */
-#define DYNARRAY_FOREACH_TYPE(_array,_item_type,_item,_stmnt) \
-    do { \
-        int _nn_##__LINE__ = 0; \
-        for (;_nn_##__LINE__ < (_array)->count; ++ _nn_##__LINE__) { \
-            _item_type _item = (_item_type)(_array)->items[_nn_##__LINE__]; \
-            _stmnt; \
-        } \
-    } while (0)
-
-#define DYNARRAY_FOREACH(_array,_item,_stmnt) \
-    DYNARRAY_FOREACH_TYPE(_array,void *,_item,_stmnt)
-
-/* Simple dynamic string arrays
- *
- * NOTE: A strlist_t owns the strings it references.
- */
-typedef dynarray_t  strlist_t;
-
-#define  STRLIST_INITIALIZER  DYNARRAY_INITIALIZER
-
-/* Used to iterate over a strlist_t
- * _list   :: pointer to strlist_t object
- * _string :: name of local variable name defined within the loop with
- *            type 'char*'
- * _stmnt  :: C statement executed in each iteration
- *
- * This macro is only intended for simple uses. Do not add or remove items
- * to/from the list during iteration.
- */
-#define  STRLIST_FOREACH(_list,_string,_stmnt) \
-    DYNARRAY_FOREACH_TYPE(_list,char *,_string,_stmnt)
-
-void strlist_init( strlist_t *list );
-
-/* note: strlist_done will free all the strings owned by the list */
-void strlist_done( strlist_t *list );
-
-/* append a new string made of the first 'slen' characters from 'str'
- * followed by a trailing zero.
- */
-void strlist_append_b( strlist_t *list, const void* str, size_t  slen );
-
-/* append the copy of a given input string to a strlist_t */
-void strlist_append_dup( strlist_t *list, const char *str);
-
-/* sort the strings in a given list (using strcmp) */
-void strlist_sort( strlist_t *list );
-
-#endif /* DYNARRAY_H */
diff --git a/toolbox/getprop.c b/toolbox/getprop.c
deleted file mode 100644
index dcc0ea0..0000000
--- a/toolbox/getprop.c
+++ /dev/null
@@ -1,50 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <cutils/properties.h>
-
-#include "dynarray.h"
-
-static void record_prop(const char* key, const char* name, void* opaque)
-{
-    strlist_t* list = opaque;
-    char temp[PROP_VALUE_MAX + PROP_NAME_MAX + 16];
-    snprintf(temp, sizeof temp, "[%s]: [%s]", key, name);
-    strlist_append_dup(list, temp);
-}
-
-static void list_properties(void)
-{
-    strlist_t  list[1] = { STRLIST_INITIALIZER };
-
-    /* Record properties in the string list */
-    (void)property_list(record_prop, list);
-
-    /* Sort everything */
-    strlist_sort(list);
-
-    /* print everything */
-    STRLIST_FOREACH(list, str, printf("%s\n", str));
-
-    /* voila */
-    strlist_done(list);
-}
-
-int getprop_main(int argc, char *argv[])
-{
-    if (argc == 1) {
-        list_properties();
-    } else {
-        char value[PROPERTY_VALUE_MAX];
-        char *default_value;
-        if(argc > 2) {
-            default_value = argv[2];
-        } else {
-            default_value = "";
-        }
-
-        property_get(argv[1], value, default_value);
-        printf("%s\n", value);
-    }
-    return 0;
-}
diff --git a/toolbox/input.h-labels.h b/toolbox/input.h-labels.h
deleted file mode 100644
index 430586e..0000000
--- a/toolbox/input.h-labels.h
+++ /dev/null
@@ -1,741 +0,0 @@
-static struct label input_prop_labels[] = {
-    LABEL(INPUT_PROP_POINTER),
-    LABEL(INPUT_PROP_DIRECT),
-    LABEL(INPUT_PROP_BUTTONPAD),
-    LABEL(INPUT_PROP_SEMI_MT),
-    LABEL(INPUT_PROP_TOPBUTTONPAD),
-    LABEL(INPUT_PROP_POINTING_STICK),
-    LABEL(INPUT_PROP_ACCELEROMETER),
-    LABEL(INPUT_PROP_MAX),
-    LABEL_END,
-};
-static struct label ev_labels[] = {
-    LABEL(EV_VERSION),
-    LABEL(EV_SYN),
-    LABEL(EV_KEY),
-    LABEL(EV_REL),
-    LABEL(EV_ABS),
-    LABEL(EV_MSC),
-    LABEL(EV_SW),
-    LABEL(EV_LED),
-    LABEL(EV_SND),
-    LABEL(EV_REP),
-    LABEL(EV_FF),
-    LABEL(EV_PWR),
-    LABEL(EV_FF_STATUS),
-    LABEL(EV_MAX),
-    LABEL_END,
-};
-static struct label syn_labels[] = {
-    LABEL(SYN_REPORT),
-    LABEL(SYN_CONFIG),
-    LABEL(SYN_MT_REPORT),
-    LABEL(SYN_DROPPED),
-    LABEL(SYN_MAX),
-    LABEL_END,
-};
-static struct label key_labels[] = {
-    LABEL(KEY_RESERVED),
-    LABEL(KEY_ESC),
-    LABEL(KEY_1),
-    LABEL(KEY_2),
-    LABEL(KEY_3),
-    LABEL(KEY_4),
-    LABEL(KEY_5),
-    LABEL(KEY_6),
-    LABEL(KEY_7),
-    LABEL(KEY_8),
-    LABEL(KEY_9),
-    LABEL(KEY_0),
-    LABEL(KEY_MINUS),
-    LABEL(KEY_EQUAL),
-    LABEL(KEY_BACKSPACE),
-    LABEL(KEY_TAB),
-    LABEL(KEY_Q),
-    LABEL(KEY_W),
-    LABEL(KEY_E),
-    LABEL(KEY_R),
-    LABEL(KEY_T),
-    LABEL(KEY_Y),
-    LABEL(KEY_U),
-    LABEL(KEY_I),
-    LABEL(KEY_O),
-    LABEL(KEY_P),
-    LABEL(KEY_LEFTBRACE),
-    LABEL(KEY_RIGHTBRACE),
-    LABEL(KEY_ENTER),
-    LABEL(KEY_LEFTCTRL),
-    LABEL(KEY_A),
-    LABEL(KEY_S),
-    LABEL(KEY_D),
-    LABEL(KEY_F),
-    LABEL(KEY_G),
-    LABEL(KEY_H),
-    LABEL(KEY_J),
-    LABEL(KEY_K),
-    LABEL(KEY_L),
-    LABEL(KEY_SEMICOLON),
-    LABEL(KEY_APOSTROPHE),
-    LABEL(KEY_GRAVE),
-    LABEL(KEY_LEFTSHIFT),
-    LABEL(KEY_BACKSLASH),
-    LABEL(KEY_Z),
-    LABEL(KEY_X),
-    LABEL(KEY_C),
-    LABEL(KEY_V),
-    LABEL(KEY_B),
-    LABEL(KEY_N),
-    LABEL(KEY_M),
-    LABEL(KEY_COMMA),
-    LABEL(KEY_DOT),
-    LABEL(KEY_SLASH),
-    LABEL(KEY_RIGHTSHIFT),
-    LABEL(KEY_KPASTERISK),
-    LABEL(KEY_LEFTALT),
-    LABEL(KEY_SPACE),
-    LABEL(KEY_CAPSLOCK),
-    LABEL(KEY_F1),
-    LABEL(KEY_F2),
-    LABEL(KEY_F3),
-    LABEL(KEY_F4),
-    LABEL(KEY_F5),
-    LABEL(KEY_F6),
-    LABEL(KEY_F7),
-    LABEL(KEY_F8),
-    LABEL(KEY_F9),
-    LABEL(KEY_F10),
-    LABEL(KEY_NUMLOCK),
-    LABEL(KEY_SCROLLLOCK),
-    LABEL(KEY_KP7),
-    LABEL(KEY_KP8),
-    LABEL(KEY_KP9),
-    LABEL(KEY_KPMINUS),
-    LABEL(KEY_KP4),
-    LABEL(KEY_KP5),
-    LABEL(KEY_KP6),
-    LABEL(KEY_KPPLUS),
-    LABEL(KEY_KP1),
-    LABEL(KEY_KP2),
-    LABEL(KEY_KP3),
-    LABEL(KEY_KP0),
-    LABEL(KEY_KPDOT),
-    LABEL(KEY_ZENKAKUHANKAKU),
-    LABEL(KEY_102ND),
-    LABEL(KEY_F11),
-    LABEL(KEY_F12),
-    LABEL(KEY_RO),
-    LABEL(KEY_KATAKANA),
-    LABEL(KEY_HIRAGANA),
-    LABEL(KEY_HENKAN),
-    LABEL(KEY_KATAKANAHIRAGANA),
-    LABEL(KEY_MUHENKAN),
-    LABEL(KEY_KPJPCOMMA),
-    LABEL(KEY_KPENTER),
-    LABEL(KEY_RIGHTCTRL),
-    LABEL(KEY_KPSLASH),
-    LABEL(KEY_SYSRQ),
-    LABEL(KEY_RIGHTALT),
-    LABEL(KEY_LINEFEED),
-    LABEL(KEY_HOME),
-    LABEL(KEY_UP),
-    LABEL(KEY_PAGEUP),
-    LABEL(KEY_LEFT),
-    LABEL(KEY_RIGHT),
-    LABEL(KEY_END),
-    LABEL(KEY_DOWN),
-    LABEL(KEY_PAGEDOWN),
-    LABEL(KEY_INSERT),
-    LABEL(KEY_DELETE),
-    LABEL(KEY_MACRO),
-    LABEL(KEY_MUTE),
-    LABEL(KEY_VOLUMEDOWN),
-    LABEL(KEY_VOLUMEUP),
-    LABEL(KEY_POWER),
-    LABEL(KEY_KPEQUAL),
-    LABEL(KEY_KPPLUSMINUS),
-    LABEL(KEY_PAUSE),
-    LABEL(KEY_SCALE),
-    LABEL(KEY_KPCOMMA),
-    LABEL(KEY_HANGEUL),
-    LABEL(KEY_HANJA),
-    LABEL(KEY_YEN),
-    LABEL(KEY_LEFTMETA),
-    LABEL(KEY_RIGHTMETA),
-    LABEL(KEY_COMPOSE),
-    LABEL(KEY_STOP),
-    LABEL(KEY_AGAIN),
-    LABEL(KEY_PROPS),
-    LABEL(KEY_UNDO),
-    LABEL(KEY_FRONT),
-    LABEL(KEY_COPY),
-    LABEL(KEY_OPEN),
-    LABEL(KEY_PASTE),
-    LABEL(KEY_FIND),
-    LABEL(KEY_CUT),
-    LABEL(KEY_HELP),
-    LABEL(KEY_MENU),
-    LABEL(KEY_CALC),
-    LABEL(KEY_SETUP),
-    LABEL(KEY_SLEEP),
-    LABEL(KEY_WAKEUP),
-    LABEL(KEY_FILE),
-    LABEL(KEY_SENDFILE),
-    LABEL(KEY_DELETEFILE),
-    LABEL(KEY_XFER),
-    LABEL(KEY_PROG1),
-    LABEL(KEY_PROG2),
-    LABEL(KEY_WWW),
-    LABEL(KEY_MSDOS),
-    LABEL(KEY_COFFEE),
-    LABEL(KEY_ROTATE_DISPLAY),
-    LABEL(KEY_CYCLEWINDOWS),
-    LABEL(KEY_MAIL),
-    LABEL(KEY_BOOKMARKS),
-    LABEL(KEY_COMPUTER),
-    LABEL(KEY_BACK),
-    LABEL(KEY_FORWARD),
-    LABEL(KEY_CLOSECD),
-    LABEL(KEY_EJECTCD),
-    LABEL(KEY_EJECTCLOSECD),
-    LABEL(KEY_NEXTSONG),
-    LABEL(KEY_PLAYPAUSE),
-    LABEL(KEY_PREVIOUSSONG),
-    LABEL(KEY_STOPCD),
-    LABEL(KEY_RECORD),
-    LABEL(KEY_REWIND),
-    LABEL(KEY_PHONE),
-    LABEL(KEY_ISO),
-    LABEL(KEY_CONFIG),
-    LABEL(KEY_HOMEPAGE),
-    LABEL(KEY_REFRESH),
-    LABEL(KEY_EXIT),
-    LABEL(KEY_MOVE),
-    LABEL(KEY_EDIT),
-    LABEL(KEY_SCROLLUP),
-    LABEL(KEY_SCROLLDOWN),
-    LABEL(KEY_KPLEFTPAREN),
-    LABEL(KEY_KPRIGHTPAREN),
-    LABEL(KEY_NEW),
-    LABEL(KEY_REDO),
-    LABEL(KEY_F13),
-    LABEL(KEY_F14),
-    LABEL(KEY_F15),
-    LABEL(KEY_F16),
-    LABEL(KEY_F17),
-    LABEL(KEY_F18),
-    LABEL(KEY_F19),
-    LABEL(KEY_F20),
-    LABEL(KEY_F21),
-    LABEL(KEY_F22),
-    LABEL(KEY_F23),
-    LABEL(KEY_F24),
-    LABEL(KEY_PLAYCD),
-    LABEL(KEY_PAUSECD),
-    LABEL(KEY_PROG3),
-    LABEL(KEY_PROG4),
-    LABEL(KEY_DASHBOARD),
-    LABEL(KEY_SUSPEND),
-    LABEL(KEY_CLOSE),
-    LABEL(KEY_PLAY),
-    LABEL(KEY_FASTFORWARD),
-    LABEL(KEY_BASSBOOST),
-    LABEL(KEY_PRINT),
-    LABEL(KEY_HP),
-    LABEL(KEY_CAMERA),
-    LABEL(KEY_SOUND),
-    LABEL(KEY_QUESTION),
-    LABEL(KEY_EMAIL),
-    LABEL(KEY_CHAT),
-    LABEL(KEY_SEARCH),
-    LABEL(KEY_CONNECT),
-    LABEL(KEY_FINANCE),
-    LABEL(KEY_SPORT),
-    LABEL(KEY_SHOP),
-    LABEL(KEY_ALTERASE),
-    LABEL(KEY_CANCEL),
-    LABEL(KEY_BRIGHTNESSDOWN),
-    LABEL(KEY_BRIGHTNESSUP),
-    LABEL(KEY_MEDIA),
-    LABEL(KEY_SWITCHVIDEOMODE),
-    LABEL(KEY_KBDILLUMTOGGLE),
-    LABEL(KEY_KBDILLUMDOWN),
-    LABEL(KEY_KBDILLUMUP),
-    LABEL(KEY_SEND),
-    LABEL(KEY_REPLY),
-    LABEL(KEY_FORWARDMAIL),
-    LABEL(KEY_SAVE),
-    LABEL(KEY_DOCUMENTS),
-    LABEL(KEY_BATTERY),
-    LABEL(KEY_BLUETOOTH),
-    LABEL(KEY_WLAN),
-    LABEL(KEY_UWB),
-    LABEL(KEY_UNKNOWN),
-    LABEL(KEY_VIDEO_NEXT),
-    LABEL(KEY_VIDEO_PREV),
-    LABEL(KEY_BRIGHTNESS_CYCLE),
-    LABEL(KEY_BRIGHTNESS_AUTO),
-    LABEL(KEY_DISPLAY_OFF),
-    LABEL(KEY_WWAN),
-    LABEL(KEY_RFKILL),
-    LABEL(KEY_MICMUTE),
-    LABEL(BTN_MISC),
-    LABEL(BTN_0),
-    LABEL(BTN_1),
-    LABEL(BTN_2),
-    LABEL(BTN_3),
-    LABEL(BTN_4),
-    LABEL(BTN_5),
-    LABEL(BTN_6),
-    LABEL(BTN_7),
-    LABEL(BTN_8),
-    LABEL(BTN_9),
-    LABEL(BTN_MOUSE),
-    LABEL(BTN_LEFT),
-    LABEL(BTN_RIGHT),
-    LABEL(BTN_MIDDLE),
-    LABEL(BTN_SIDE),
-    LABEL(BTN_EXTRA),
-    LABEL(BTN_FORWARD),
-    LABEL(BTN_BACK),
-    LABEL(BTN_TASK),
-    LABEL(BTN_JOYSTICK),
-    LABEL(BTN_TRIGGER),
-    LABEL(BTN_THUMB),
-    LABEL(BTN_THUMB2),
-    LABEL(BTN_TOP),
-    LABEL(BTN_TOP2),
-    LABEL(BTN_PINKIE),
-    LABEL(BTN_BASE),
-    LABEL(BTN_BASE2),
-    LABEL(BTN_BASE3),
-    LABEL(BTN_BASE4),
-    LABEL(BTN_BASE5),
-    LABEL(BTN_BASE6),
-    LABEL(BTN_DEAD),
-    LABEL(BTN_GAMEPAD),
-    LABEL(BTN_SOUTH),
-    LABEL(BTN_EAST),
-    LABEL(BTN_C),
-    LABEL(BTN_NORTH),
-    LABEL(BTN_WEST),
-    LABEL(BTN_Z),
-    LABEL(BTN_TL),
-    LABEL(BTN_TR),
-    LABEL(BTN_TL2),
-    LABEL(BTN_TR2),
-    LABEL(BTN_SELECT),
-    LABEL(BTN_START),
-    LABEL(BTN_MODE),
-    LABEL(BTN_THUMBL),
-    LABEL(BTN_THUMBR),
-    LABEL(BTN_DIGI),
-    LABEL(BTN_TOOL_PEN),
-    LABEL(BTN_TOOL_RUBBER),
-    LABEL(BTN_TOOL_BRUSH),
-    LABEL(BTN_TOOL_PENCIL),
-    LABEL(BTN_TOOL_AIRBRUSH),
-    LABEL(BTN_TOOL_FINGER),
-    LABEL(BTN_TOOL_MOUSE),
-    LABEL(BTN_TOOL_LENS),
-    LABEL(BTN_TOOL_QUINTTAP),
-    LABEL(BTN_STYLUS3),
-    LABEL(BTN_TOUCH),
-    LABEL(BTN_STYLUS),
-    LABEL(BTN_STYLUS2),
-    LABEL(BTN_TOOL_DOUBLETAP),
-    LABEL(BTN_TOOL_TRIPLETAP),
-    LABEL(BTN_TOOL_QUADTAP),
-    LABEL(BTN_WHEEL),
-    LABEL(BTN_GEAR_DOWN),
-    LABEL(BTN_GEAR_UP),
-    LABEL(KEY_OK),
-    LABEL(KEY_SELECT),
-    LABEL(KEY_GOTO),
-    LABEL(KEY_CLEAR),
-    LABEL(KEY_POWER2),
-    LABEL(KEY_OPTION),
-    LABEL(KEY_INFO),
-    LABEL(KEY_TIME),
-    LABEL(KEY_VENDOR),
-    LABEL(KEY_ARCHIVE),
-    LABEL(KEY_PROGRAM),
-    LABEL(KEY_CHANNEL),
-    LABEL(KEY_FAVORITES),
-    LABEL(KEY_EPG),
-    LABEL(KEY_PVR),
-    LABEL(KEY_MHP),
-    LABEL(KEY_LANGUAGE),
-    LABEL(KEY_TITLE),
-    LABEL(KEY_SUBTITLE),
-    LABEL(KEY_ANGLE),
-    LABEL(KEY_ZOOM),
-    LABEL(KEY_MODE),
-    LABEL(KEY_KEYBOARD),
-    LABEL(KEY_SCREEN),
-    LABEL(KEY_PC),
-    LABEL(KEY_TV),
-    LABEL(KEY_TV2),
-    LABEL(KEY_VCR),
-    LABEL(KEY_VCR2),
-    LABEL(KEY_SAT),
-    LABEL(KEY_SAT2),
-    LABEL(KEY_CD),
-    LABEL(KEY_TAPE),
-    LABEL(KEY_RADIO),
-    LABEL(KEY_TUNER),
-    LABEL(KEY_PLAYER),
-    LABEL(KEY_TEXT),
-    LABEL(KEY_DVD),
-    LABEL(KEY_AUX),
-    LABEL(KEY_MP3),
-    LABEL(KEY_AUDIO),
-    LABEL(KEY_VIDEO),
-    LABEL(KEY_DIRECTORY),
-    LABEL(KEY_LIST),
-    LABEL(KEY_MEMO),
-    LABEL(KEY_CALENDAR),
-    LABEL(KEY_RED),
-    LABEL(KEY_GREEN),
-    LABEL(KEY_YELLOW),
-    LABEL(KEY_BLUE),
-    LABEL(KEY_CHANNELUP),
-    LABEL(KEY_CHANNELDOWN),
-    LABEL(KEY_FIRST),
-    LABEL(KEY_LAST),
-    LABEL(KEY_AB),
-    LABEL(KEY_NEXT),
-    LABEL(KEY_RESTART),
-    LABEL(KEY_SLOW),
-    LABEL(KEY_SHUFFLE),
-    LABEL(KEY_BREAK),
-    LABEL(KEY_PREVIOUS),
-    LABEL(KEY_DIGITS),
-    LABEL(KEY_TEEN),
-    LABEL(KEY_TWEN),
-    LABEL(KEY_VIDEOPHONE),
-    LABEL(KEY_GAMES),
-    LABEL(KEY_ZOOMIN),
-    LABEL(KEY_ZOOMOUT),
-    LABEL(KEY_ZOOMRESET),
-    LABEL(KEY_WORDPROCESSOR),
-    LABEL(KEY_EDITOR),
-    LABEL(KEY_SPREADSHEET),
-    LABEL(KEY_GRAPHICSEDITOR),
-    LABEL(KEY_PRESENTATION),
-    LABEL(KEY_DATABASE),
-    LABEL(KEY_NEWS),
-    LABEL(KEY_VOICEMAIL),
-    LABEL(KEY_ADDRESSBOOK),
-    LABEL(KEY_MESSENGER),
-    LABEL(KEY_DISPLAYTOGGLE),
-    LABEL(KEY_SPELLCHECK),
-    LABEL(KEY_LOGOFF),
-    LABEL(KEY_DOLLAR),
-    LABEL(KEY_EURO),
-    LABEL(KEY_FRAMEBACK),
-    LABEL(KEY_FRAMEFORWARD),
-    LABEL(KEY_CONTEXT_MENU),
-    LABEL(KEY_MEDIA_REPEAT),
-    LABEL(KEY_10CHANNELSUP),
-    LABEL(KEY_10CHANNELSDOWN),
-    LABEL(KEY_IMAGES),
-    LABEL(KEY_DEL_EOL),
-    LABEL(KEY_DEL_EOS),
-    LABEL(KEY_INS_LINE),
-    LABEL(KEY_DEL_LINE),
-    LABEL(KEY_FN),
-    LABEL(KEY_FN_ESC),
-    LABEL(KEY_FN_F1),
-    LABEL(KEY_FN_F2),
-    LABEL(KEY_FN_F3),
-    LABEL(KEY_FN_F4),
-    LABEL(KEY_FN_F5),
-    LABEL(KEY_FN_F6),
-    LABEL(KEY_FN_F7),
-    LABEL(KEY_FN_F8),
-    LABEL(KEY_FN_F9),
-    LABEL(KEY_FN_F10),
-    LABEL(KEY_FN_F11),
-    LABEL(KEY_FN_F12),
-    LABEL(KEY_FN_1),
-    LABEL(KEY_FN_2),
-    LABEL(KEY_FN_D),
-    LABEL(KEY_FN_E),
-    LABEL(KEY_FN_F),
-    LABEL(KEY_FN_S),
-    LABEL(KEY_FN_B),
-    LABEL(KEY_BRL_DOT1),
-    LABEL(KEY_BRL_DOT2),
-    LABEL(KEY_BRL_DOT3),
-    LABEL(KEY_BRL_DOT4),
-    LABEL(KEY_BRL_DOT5),
-    LABEL(KEY_BRL_DOT6),
-    LABEL(KEY_BRL_DOT7),
-    LABEL(KEY_BRL_DOT8),
-    LABEL(KEY_BRL_DOT9),
-    LABEL(KEY_BRL_DOT10),
-    LABEL(KEY_NUMERIC_0),
-    LABEL(KEY_NUMERIC_1),
-    LABEL(KEY_NUMERIC_2),
-    LABEL(KEY_NUMERIC_3),
-    LABEL(KEY_NUMERIC_4),
-    LABEL(KEY_NUMERIC_5),
-    LABEL(KEY_NUMERIC_6),
-    LABEL(KEY_NUMERIC_7),
-    LABEL(KEY_NUMERIC_8),
-    LABEL(KEY_NUMERIC_9),
-    LABEL(KEY_NUMERIC_STAR),
-    LABEL(KEY_NUMERIC_POUND),
-    LABEL(KEY_NUMERIC_A),
-    LABEL(KEY_NUMERIC_B),
-    LABEL(KEY_NUMERIC_C),
-    LABEL(KEY_NUMERIC_D),
-    LABEL(KEY_CAMERA_FOCUS),
-    LABEL(KEY_WPS_BUTTON),
-    LABEL(KEY_TOUCHPAD_TOGGLE),
-    LABEL(KEY_TOUCHPAD_ON),
-    LABEL(KEY_TOUCHPAD_OFF),
-    LABEL(KEY_CAMERA_ZOOMIN),
-    LABEL(KEY_CAMERA_ZOOMOUT),
-    LABEL(KEY_CAMERA_UP),
-    LABEL(KEY_CAMERA_DOWN),
-    LABEL(KEY_CAMERA_LEFT),
-    LABEL(KEY_CAMERA_RIGHT),
-    LABEL(KEY_ATTENDANT_ON),
-    LABEL(KEY_ATTENDANT_OFF),
-    LABEL(KEY_ATTENDANT_TOGGLE),
-    LABEL(KEY_LIGHTS_TOGGLE),
-    LABEL(BTN_DPAD_UP),
-    LABEL(BTN_DPAD_DOWN),
-    LABEL(BTN_DPAD_LEFT),
-    LABEL(BTN_DPAD_RIGHT),
-    LABEL(KEY_ALS_TOGGLE),
-    LABEL(KEY_BUTTONCONFIG),
-    LABEL(KEY_TASKMANAGER),
-    LABEL(KEY_JOURNAL),
-    LABEL(KEY_CONTROLPANEL),
-    LABEL(KEY_APPSELECT),
-    LABEL(KEY_SCREENSAVER),
-    LABEL(KEY_VOICECOMMAND),
-    LABEL(KEY_ASSISTANT),
-    LABEL(KEY_BRIGHTNESS_MIN),
-    LABEL(KEY_BRIGHTNESS_MAX),
-    LABEL(KEY_KBDINPUTASSIST_PREV),
-    LABEL(KEY_KBDINPUTASSIST_NEXT),
-    LABEL(KEY_KBDINPUTASSIST_PREVGROUP),
-    LABEL(KEY_KBDINPUTASSIST_NEXTGROUP),
-    LABEL(KEY_KBDINPUTASSIST_ACCEPT),
-    LABEL(KEY_KBDINPUTASSIST_CANCEL),
-    LABEL(KEY_RIGHT_UP),
-    LABEL(KEY_RIGHT_DOWN),
-    LABEL(KEY_LEFT_UP),
-    LABEL(KEY_LEFT_DOWN),
-    LABEL(KEY_ROOT_MENU),
-    LABEL(KEY_MEDIA_TOP_MENU),
-    LABEL(KEY_NUMERIC_11),
-    LABEL(KEY_NUMERIC_12),
-    LABEL(KEY_AUDIO_DESC),
-    LABEL(KEY_3D_MODE),
-    LABEL(KEY_NEXT_FAVORITE),
-    LABEL(KEY_STOP_RECORD),
-    LABEL(KEY_PAUSE_RECORD),
-    LABEL(KEY_VOD),
-    LABEL(KEY_UNMUTE),
-    LABEL(KEY_FASTREVERSE),
-    LABEL(KEY_SLOWREVERSE),
-    LABEL(KEY_DATA),
-    LABEL(KEY_ONSCREEN_KEYBOARD),
-    LABEL(BTN_TRIGGER_HAPPY),
-    LABEL(BTN_TRIGGER_HAPPY1),
-    LABEL(BTN_TRIGGER_HAPPY2),
-    LABEL(BTN_TRIGGER_HAPPY3),
-    LABEL(BTN_TRIGGER_HAPPY4),
-    LABEL(BTN_TRIGGER_HAPPY5),
-    LABEL(BTN_TRIGGER_HAPPY6),
-    LABEL(BTN_TRIGGER_HAPPY7),
-    LABEL(BTN_TRIGGER_HAPPY8),
-    LABEL(BTN_TRIGGER_HAPPY9),
-    LABEL(BTN_TRIGGER_HAPPY10),
-    LABEL(BTN_TRIGGER_HAPPY11),
-    LABEL(BTN_TRIGGER_HAPPY12),
-    LABEL(BTN_TRIGGER_HAPPY13),
-    LABEL(BTN_TRIGGER_HAPPY14),
-    LABEL(BTN_TRIGGER_HAPPY15),
-    LABEL(BTN_TRIGGER_HAPPY16),
-    LABEL(BTN_TRIGGER_HAPPY17),
-    LABEL(BTN_TRIGGER_HAPPY18),
-    LABEL(BTN_TRIGGER_HAPPY19),
-    LABEL(BTN_TRIGGER_HAPPY20),
-    LABEL(BTN_TRIGGER_HAPPY21),
-    LABEL(BTN_TRIGGER_HAPPY22),
-    LABEL(BTN_TRIGGER_HAPPY23),
-    LABEL(BTN_TRIGGER_HAPPY24),
-    LABEL(BTN_TRIGGER_HAPPY25),
-    LABEL(BTN_TRIGGER_HAPPY26),
-    LABEL(BTN_TRIGGER_HAPPY27),
-    LABEL(BTN_TRIGGER_HAPPY28),
-    LABEL(BTN_TRIGGER_HAPPY29),
-    LABEL(BTN_TRIGGER_HAPPY30),
-    LABEL(BTN_TRIGGER_HAPPY31),
-    LABEL(BTN_TRIGGER_HAPPY32),
-    LABEL(BTN_TRIGGER_HAPPY33),
-    LABEL(BTN_TRIGGER_HAPPY34),
-    LABEL(BTN_TRIGGER_HAPPY35),
-    LABEL(BTN_TRIGGER_HAPPY36),
-    LABEL(BTN_TRIGGER_HAPPY37),
-    LABEL(BTN_TRIGGER_HAPPY38),
-    LABEL(BTN_TRIGGER_HAPPY39),
-    LABEL(BTN_TRIGGER_HAPPY40),
-    LABEL(KEY_MAX),
-    LABEL_END,
-};
-static struct label rel_labels[] = {
-    LABEL(REL_X),
-    LABEL(REL_Y),
-    LABEL(REL_Z),
-    LABEL(REL_RX),
-    LABEL(REL_RY),
-    LABEL(REL_RZ),
-    LABEL(REL_HWHEEL),
-    LABEL(REL_DIAL),
-    LABEL(REL_WHEEL),
-    LABEL(REL_MISC),
-    LABEL(REL_MAX),
-    LABEL_END,
-};
-static struct label abs_labels[] = {
-    LABEL(ABS_X),
-    LABEL(ABS_Y),
-    LABEL(ABS_Z),
-    LABEL(ABS_RX),
-    LABEL(ABS_RY),
-    LABEL(ABS_RZ),
-    LABEL(ABS_THROTTLE),
-    LABEL(ABS_RUDDER),
-    LABEL(ABS_WHEEL),
-    LABEL(ABS_GAS),
-    LABEL(ABS_BRAKE),
-    LABEL(ABS_HAT0X),
-    LABEL(ABS_HAT0Y),
-    LABEL(ABS_HAT1X),
-    LABEL(ABS_HAT1Y),
-    LABEL(ABS_HAT2X),
-    LABEL(ABS_HAT2Y),
-    LABEL(ABS_HAT3X),
-    LABEL(ABS_HAT3Y),
-    LABEL(ABS_PRESSURE),
-    LABEL(ABS_DISTANCE),
-    LABEL(ABS_TILT_X),
-    LABEL(ABS_TILT_Y),
-    LABEL(ABS_TOOL_WIDTH),
-    LABEL(ABS_VOLUME),
-    LABEL(ABS_MISC),
-    LABEL(ABS_MT_SLOT),
-    LABEL(ABS_MT_TOUCH_MAJOR),
-    LABEL(ABS_MT_TOUCH_MINOR),
-    LABEL(ABS_MT_WIDTH_MAJOR),
-    LABEL(ABS_MT_WIDTH_MINOR),
-    LABEL(ABS_MT_ORIENTATION),
-    LABEL(ABS_MT_POSITION_X),
-    LABEL(ABS_MT_POSITION_Y),
-    LABEL(ABS_MT_TOOL_TYPE),
-    LABEL(ABS_MT_BLOB_ID),
-    LABEL(ABS_MT_TRACKING_ID),
-    LABEL(ABS_MT_PRESSURE),
-    LABEL(ABS_MT_DISTANCE),
-    LABEL(ABS_MT_TOOL_X),
-    LABEL(ABS_MT_TOOL_Y),
-    LABEL(ABS_MAX),
-    LABEL_END,
-};
-static struct label sw_labels[] = {
-    LABEL(SW_LID),
-    LABEL(SW_TABLET_MODE),
-    LABEL(SW_HEADPHONE_INSERT),
-    LABEL(SW_RFKILL_ALL),
-    LABEL(SW_MICROPHONE_INSERT),
-    LABEL(SW_DOCK),
-    LABEL(SW_LINEOUT_INSERT),
-    LABEL(SW_JACK_PHYSICAL_INSERT),
-    LABEL(SW_VIDEOOUT_INSERT),
-    LABEL(SW_CAMERA_LENS_COVER),
-    LABEL(SW_KEYPAD_SLIDE),
-    LABEL(SW_FRONT_PROXIMITY),
-    LABEL(SW_ROTATE_LOCK),
-    LABEL(SW_LINEIN_INSERT),
-    LABEL(SW_MUTE_DEVICE),
-    LABEL(SW_PEN_INSERTED),
-    LABEL(SW_MAX),
-    LABEL_END,
-};
-static struct label msc_labels[] = {
-    LABEL(MSC_SERIAL),
-    LABEL(MSC_PULSELED),
-    LABEL(MSC_GESTURE),
-    LABEL(MSC_RAW),
-    LABEL(MSC_SCAN),
-    LABEL(MSC_TIMESTAMP),
-    LABEL(MSC_MAX),
-    LABEL_END,
-};
-static struct label led_labels[] = {
-    LABEL(LED_NUML),
-    LABEL(LED_CAPSL),
-    LABEL(LED_SCROLLL),
-    LABEL(LED_COMPOSE),
-    LABEL(LED_KANA),
-    LABEL(LED_SLEEP),
-    LABEL(LED_SUSPEND),
-    LABEL(LED_MUTE),
-    LABEL(LED_MISC),
-    LABEL(LED_MAIL),
-    LABEL(LED_CHARGING),
-    LABEL(LED_MAX),
-    LABEL_END,
-};
-static struct label rep_labels[] = {
-    LABEL(REP_DELAY),
-    LABEL(REP_PERIOD),
-    LABEL(REP_MAX),
-    LABEL_END,
-};
-static struct label snd_labels[] = {
-    LABEL(SND_CLICK),
-    LABEL(SND_BELL),
-    LABEL(SND_TONE),
-    LABEL(SND_MAX),
-    LABEL_END,
-};
-static struct label mt_tool_labels[] = {
-    LABEL(MT_TOOL_FINGER),
-    LABEL(MT_TOOL_PEN),
-    LABEL(MT_TOOL_PALM),
-    LABEL(MT_TOOL_MAX),
-    LABEL_END,
-};
-static struct label ff_status_labels[] = {
-    LABEL(FF_STATUS_STOPPED),
-    LABEL(FF_STATUS_PLAYING),
-    LABEL(FF_STATUS_MAX),
-    LABEL_END,
-};
-static struct label ff_labels[] = {
-    LABEL(FF_RUMBLE),
-    LABEL(FF_PERIODIC),
-    LABEL(FF_CONSTANT),
-    LABEL(FF_SPRING),
-    LABEL(FF_FRICTION),
-    LABEL(FF_DAMPER),
-    LABEL(FF_INERTIA),
-    LABEL(FF_RAMP),
-    LABEL(FF_SQUARE),
-    LABEL(FF_TRIANGLE),
-    LABEL(FF_SINE),
-    LABEL(FF_SAW_UP),
-    LABEL(FF_SAW_DOWN),
-    LABEL(FF_CUSTOM),
-    LABEL(FF_GAIN),
-    LABEL(FF_AUTOCENTER),
-    LABEL(FF_MAX),
-    LABEL_END,
-};
diff --git a/toolbox/ls.c b/toolbox/ls.c
deleted file mode 100644
index 9a89dd4..0000000
--- a/toolbox/ls.c
+++ /dev/null
@@ -1,588 +0,0 @@
-#include <dirent.h>
-#include <errno.h>
-#include <grp.h>
-#include <limits.h>
-#include <pwd.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <sys/sysmacros.h>
-#include <sys/types.h>
-#include <time.h>
-#include <unistd.h>
-
-#include <selinux/selinux.h>
-
-// simple dynamic array of strings.
-typedef struct {
-    int count;
-    int capacity;
-    void** items;
-} strlist_t;
-
-#define STRLIST_INITIALIZER { 0, 0, NULL }
-
-/* Used to iterate over a strlist_t
- * _list   :: pointer to strlist_t object
- * _item   :: name of local variable name defined within the loop with
- *            type 'char*'
- * _stmnt  :: C statement executed in each iteration
- *
- * This macro is only intended for simple uses. Do not add or remove items
- * to/from the list during iteration.
- */
-#define  STRLIST_FOREACH(_list,_item,_stmnt) \
-    do { \
-        int _nn_##__LINE__ = 0; \
-        for (;_nn_##__LINE__ < (_list)->count; ++ _nn_##__LINE__) { \
-            char* _item = (char*)(_list)->items[_nn_##__LINE__]; \
-            _stmnt; \
-        } \
-    } while (0)
-
-static void dynarray_reserve_more( strlist_t *a, int count ) {
-    int old_cap = a->capacity;
-    int new_cap = old_cap;
-    const int max_cap = INT_MAX/sizeof(void*);
-    void** new_items;
-    int new_count = a->count + count;
-
-    if (count <= 0)
-        return;
-
-    if (count > max_cap - a->count)
-        abort();
-
-    new_count = a->count + count;
-
-    while (new_cap < new_count) {
-        old_cap = new_cap;
-        new_cap += (new_cap >> 2) + 4;
-        if (new_cap < old_cap || new_cap > max_cap) {
-            new_cap = max_cap;
-        }
-    }
-    new_items = realloc(a->items, new_cap*sizeof(void*));
-    if (new_items == NULL)
-        abort();
-
-    a->items = new_items;
-    a->capacity = new_cap;
-}
-
-void strlist_init( strlist_t *list ) {
-    list->count = list->capacity = 0;
-    list->items = NULL;
-}
-
-// append a new string made of the first 'slen' characters from 'str'
-// followed by a trailing zero.
-void strlist_append_b( strlist_t *list, const void* str, size_t  slen ) {
-    char *copy = malloc(slen+1);
-    memcpy(copy, str, slen);
-    copy[slen] = '\0';
-    if (list->count >= list->capacity)
-        dynarray_reserve_more(list, 1);
-    list->items[list->count++] = copy;
-}
-
-// append the copy of a given input string to a strlist_t.
-void strlist_append_dup( strlist_t *list, const char *str) {
-    strlist_append_b(list, str, strlen(str));
-}
-
-// note: strlist_done will free all the strings owned by the list.
-void strlist_done( strlist_t *list ) {
-    STRLIST_FOREACH(list, string, free(string));
-    free(list->items);
-    list->items = NULL;
-    list->count = list->capacity = 0;
-}
-
-static int strlist_compare_strings(const void* a, const void* b) {
-    const char *sa = *(const char **)a;
-    const char *sb = *(const char **)b;
-    return strcmp(sa, sb);
-}
-
-/* sort the strings in a given list (using strcmp) */
-void strlist_sort( strlist_t *list ) {
-    if (list->count > 0) {
-        qsort(list->items, (size_t)list->count, sizeof(void*), strlist_compare_strings);
-    }
-}
-
-
-// bits for flags argument
-#define LIST_LONG           (1 << 0)
-#define LIST_ALL            (1 << 1)
-#define LIST_RECURSIVE      (1 << 2)
-#define LIST_DIRECTORIES    (1 << 3)
-#define LIST_SIZE           (1 << 4)
-#define LIST_LONG_NUMERIC   (1 << 5)
-#define LIST_CLASSIFY       (1 << 6)
-#define LIST_MACLABEL       (1 << 7)
-#define LIST_INODE          (1 << 8)
-
-// fwd
-static int listpath(const char *name, int flags);
-
-static char mode2kind(mode_t mode)
-{
-    switch(mode & S_IFMT){
-    case S_IFSOCK: return 's';
-    case S_IFLNK: return 'l';
-    case S_IFREG: return '-';
-    case S_IFDIR: return 'd';
-    case S_IFBLK: return 'b';
-    case S_IFCHR: return 'c';
-    case S_IFIFO: return 'p';
-    default: return '?';
-    }
-}
-
-void strmode(mode_t mode, char *out)
-{
-    *out++ = mode2kind(mode);
-
-    *out++ = (mode & 0400) ? 'r' : '-';
-    *out++ = (mode & 0200) ? 'w' : '-';
-    if(mode & 04000) {
-        *out++ = (mode & 0100) ? 's' : 'S';
-    } else {
-        *out++ = (mode & 0100) ? 'x' : '-';
-    }
-    *out++ = (mode & 040) ? 'r' : '-';
-    *out++ = (mode & 020) ? 'w' : '-';
-    if(mode & 02000) {
-        *out++ = (mode & 010) ? 's' : 'S';
-    } else {
-        *out++ = (mode & 010) ? 'x' : '-';
-    }
-    *out++ = (mode & 04) ? 'r' : '-';
-    *out++ = (mode & 02) ? 'w' : '-';
-    if(mode & 01000) {
-        *out++ = (mode & 01) ? 't' : 'T';
-    } else {
-        *out++ = (mode & 01) ? 'x' : '-';
-    }
-    *out = 0;
-}
-
-static void user2str(uid_t uid, char *out, size_t out_size)
-{
-    struct passwd *pw = getpwuid(uid);
-    if(pw) {
-        strlcpy(out, pw->pw_name, out_size);
-    } else {
-        snprintf(out, out_size, "%d", uid);
-    }
-}
-
-static void group2str(gid_t gid, char *out, size_t out_size)
-{
-    struct group *gr = getgrgid(gid);
-    if(gr) {
-        strlcpy(out, gr->gr_name, out_size);
-    } else {
-        snprintf(out, out_size, "%d", gid);
-    }
-}
-
-static int show_total_size(const char *dirname, DIR *d, int flags)
-{
-    struct dirent *de;
-    char tmp[1024];
-    struct stat s;
-    int sum = 0;
-
-    /* run through the directory and sum up the file block sizes */
-    while ((de = readdir(d)) != 0) {
-        if (strcmp(de->d_name, ".") == 0 || strcmp(de->d_name, "..") == 0)
-            continue;
-        if (de->d_name[0] == '.' && (flags & LIST_ALL) == 0)
-            continue;
-
-        if (strcmp(dirname, "/") == 0)
-            snprintf(tmp, sizeof(tmp), "/%s", de->d_name);
-        else
-            snprintf(tmp, sizeof(tmp), "%s/%s", dirname, de->d_name);
-
-        if (lstat(tmp, &s) < 0) {
-            fprintf(stderr, "stat failed on %s: %s\n", tmp, strerror(errno));
-            rewinddir(d);
-            return -1;
-        }
-
-        sum += s.st_blocks / 2;
-    }
-
-    printf("total %d\n", sum);
-    rewinddir(d);
-    return 0;
-}
-
-static int listfile_size(const char *path, const char *filename, struct stat *s,
-                         int flags)
-{
-    if(!s || !path) {
-        return -1;
-    }
-
-    /* blocks are 512 bytes, we want output to be KB */
-    if ((flags & LIST_SIZE) != 0) {
-        printf("%lld ", (long long)s->st_blocks / 2);
-    }
-
-    if ((flags & LIST_CLASSIFY) != 0) {
-        char filetype = mode2kind(s->st_mode);
-        if (filetype != 'l') {
-            printf("%c ", filetype);
-        } else {
-            struct stat link_dest;
-            if (!stat(path, &link_dest)) {
-                printf("l%c ", mode2kind(link_dest.st_mode));
-            } else {
-                fprintf(stderr, "stat '%s' failed: %s\n", path, strerror(errno));
-                printf("l? ");
-            }
-        }
-    }
-
-    printf("%s\n", filename);
-
-    return 0;
-}
-
-static int listfile_long(const char *path, struct stat *s, int flags)
-{
-    char date[32];
-    char mode[16];
-    char user[32];
-    char group[32];
-    const char *name;
-
-    if(!s || !path) {
-        return -1;
-    }
-
-    /* name is anything after the final '/', or the whole path if none*/
-    name = strrchr(path, '/');
-    if(name == 0) {
-        name = path;
-    } else {
-        name++;
-    }
-
-    strmode(s->st_mode, mode);
-    if (flags & LIST_LONG_NUMERIC) {
-        snprintf(user, sizeof(user), "%u", s->st_uid);
-        snprintf(group, sizeof(group), "%u", s->st_gid);
-    } else {
-        user2str(s->st_uid, user, sizeof(user));
-        group2str(s->st_gid, group, sizeof(group));
-    }
-
-    strftime(date, 32, "%Y-%m-%d %H:%M", localtime((const time_t*)&s->st_mtime));
-    date[31] = 0;
-
-// 12345678901234567890123456789012345678901234567890123456789012345678901234567890
-// MMMMMMMM UUUUUUUU GGGGGGGGG XXXXXXXX YYYY-MM-DD HH:MM NAME (->LINK)
-
-    switch(s->st_mode & S_IFMT) {
-    case S_IFBLK:
-    case S_IFCHR:
-        printf("%s %-8s %-8s %3d, %3d %s %s\n",
-               mode, user, group,
-               major(s->st_rdev), minor(s->st_rdev),
-               date, name);
-        break;
-    case S_IFREG:
-        printf("%s %-8s %-8s %8lld %s %s\n",
-               mode, user, group, (long long)s->st_size, date, name);
-        break;
-    case S_IFLNK: {
-        char linkto[256];
-        ssize_t len;
-
-        len = readlink(path, linkto, 256);
-        if(len < 0) return -1;
-
-        if(len > 255) {
-            linkto[252] = '.';
-            linkto[253] = '.';
-            linkto[254] = '.';
-            linkto[255] = 0;
-        } else {
-            linkto[len] = 0;
-        }
-
-        printf("%s %-8s %-8s          %s %s -> %s\n",
-               mode, user, group, date, name, linkto);
-        break;
-    }
-    default:
-        printf("%s %-8s %-8s          %s %s\n",
-               mode, user, group, date, name);
-
-    }
-    return 0;
-}
-
-static int listfile_maclabel(const char *path, struct stat *s)
-{
-    char mode[16];
-    char user[32];
-    char group[32];
-    char *maclabel = NULL;
-    const char *name;
-
-    if(!s || !path) {
-        return -1;
-    }
-
-    /* name is anything after the final '/', or the whole path if none*/
-    name = strrchr(path, '/');
-    if(name == 0) {
-        name = path;
-    } else {
-        name++;
-    }
-
-    lgetfilecon(path, &maclabel);
-    if (!maclabel) {
-        return -1;
-    }
-
-    strmode(s->st_mode, mode);
-    user2str(s->st_uid, user, sizeof(user));
-    group2str(s->st_gid, group, sizeof(group));
-
-    switch(s->st_mode & S_IFMT) {
-    case S_IFLNK: {
-        char linkto[256];
-        ssize_t len;
-
-        len = readlink(path, linkto, sizeof(linkto));
-        if(len < 0) return -1;
-
-        if((size_t)len > sizeof(linkto)-1) {
-            linkto[sizeof(linkto)-4] = '.';
-            linkto[sizeof(linkto)-3] = '.';
-            linkto[sizeof(linkto)-2] = '.';
-            linkto[sizeof(linkto)-1] = 0;
-        } else {
-            linkto[len] = 0;
-        }
-
-        printf("%s %-8s %-8s          %s %s -> %s\n",
-               mode, user, group, maclabel, name, linkto);
-        break;
-    }
-    default:
-        printf("%s %-8s %-8s          %s %s\n",
-               mode, user, group, maclabel, name);
-
-    }
-
-    free(maclabel);
-
-    return 0;
-}
-
-static int listfile(const char *dirname, const char *filename, int flags)
-{
-    struct stat s;
-
-    if ((flags & (LIST_LONG | LIST_SIZE | LIST_CLASSIFY | LIST_MACLABEL | LIST_INODE)) == 0) {
-        printf("%s\n", filename);
-        return 0;
-    }
-
-    char tmp[4096];
-    const char* pathname = filename;
-
-    if (dirname != NULL) {
-        snprintf(tmp, sizeof(tmp), "%s/%s", dirname, filename);
-        pathname = tmp;
-    } else {
-        pathname = filename;
-    }
-
-    if(lstat(pathname, &s) < 0) {
-        fprintf(stderr, "lstat '%s' failed: %s\n", pathname, strerror(errno));
-        return -1;
-    }
-
-    if(flags & LIST_INODE) {
-        printf("%8llu ", (unsigned long long)s.st_ino);
-    }
-
-    if ((flags & LIST_MACLABEL) != 0) {
-        return listfile_maclabel(pathname, &s);
-    } else if ((flags & LIST_LONG) != 0) {
-        return listfile_long(pathname, &s, flags);
-    } else /*((flags & LIST_SIZE) != 0)*/ {
-        return listfile_size(pathname, filename, &s, flags);
-    }
-}
-
-static int listdir(const char *name, int flags)
-{
-    char tmp[4096];
-    DIR *d;
-    struct dirent *de;
-    strlist_t  files = STRLIST_INITIALIZER;
-
-    d = opendir(name);
-    if(d == 0) {
-        fprintf(stderr, "opendir failed, %s\n", strerror(errno));
-        return -1;
-    }
-
-    if ((flags & LIST_SIZE) != 0) {
-        show_total_size(name, d, flags);
-    }
-
-    while((de = readdir(d)) != 0){
-        if (!strcmp(de->d_name, ".") || !strcmp(de->d_name, "..")) continue;
-        if(de->d_name[0] == '.' && (flags & LIST_ALL) == 0) continue;
-
-        strlist_append_dup(&files, de->d_name);
-    }
-
-    strlist_sort(&files);
-    STRLIST_FOREACH(&files, filename, listfile(name, filename, flags));
-    strlist_done(&files);
-
-    if (flags & LIST_RECURSIVE) {
-        strlist_t subdirs = STRLIST_INITIALIZER;
-
-        rewinddir(d);
-
-        while ((de = readdir(d)) != 0) {
-            struct stat s;
-            int err;
-
-            if (!strcmp(de->d_name, ".") || !strcmp(de->d_name, ".."))
-                continue;
-            if (de->d_name[0] == '.' && (flags & LIST_ALL) == 0)
-                continue;
-
-            if (!strcmp(name, "/"))
-                snprintf(tmp, sizeof(tmp), "/%s", de->d_name);
-            else
-                snprintf(tmp, sizeof(tmp), "%s/%s", name, de->d_name);
-
-            /*
-             * If the name ends in a '/', use stat() so we treat it like a
-             * directory even if it's a symlink.
-             */
-            if (tmp[strlen(tmp)-1] == '/')
-                err = stat(tmp, &s);
-            else
-                err = lstat(tmp, &s);
-
-            if (err < 0) {
-                perror(tmp);
-                closedir(d);
-                return -1;
-            }
-
-            if (S_ISDIR(s.st_mode)) {
-                strlist_append_dup(&subdirs, tmp);
-            }
-        }
-        strlist_sort(&subdirs);
-        STRLIST_FOREACH(&subdirs, path, {
-            printf("\n%s:\n", path);
-            listdir(path, flags);
-        });
-        strlist_done(&subdirs);
-    }
-
-    closedir(d);
-    return 0;
-}
-
-static int listpath(const char *name, int flags)
-{
-    struct stat s;
-    int err;
-
-    /*
-     * If the name ends in a '/', use stat() so we treat it like a
-     * directory even if it's a symlink.
-     */
-    if (name[strlen(name)-1] == '/')
-        err = stat(name, &s);
-    else
-        err = lstat(name, &s);
-
-    if (err < 0) {
-        perror(name);
-        return -1;
-    }
-
-    if ((flags & LIST_DIRECTORIES) == 0 && S_ISDIR(s.st_mode)) {
-        if (flags & LIST_RECURSIVE)
-            printf("\n%s:\n", name);
-        return listdir(name, flags);
-    } else {
-        /* yeah this calls stat() again*/
-        return listfile(NULL, name, flags);
-    }
-}
-
-int ls_main(int argc, char **argv)
-{
-    int flags = 0;
-
-    if(argc > 1) {
-        int i;
-        int err = 0;
-        strlist_t  files = STRLIST_INITIALIZER;
-
-        for (i = 1; i < argc; i++) {
-            if (argv[i][0] == '-') {
-                /* an option ? */
-                const char *arg = argv[i]+1;
-                while (arg[0]) {
-                    switch (arg[0]) {
-                    case 'l': flags |= LIST_LONG; break;
-                    case 'n': flags |= LIST_LONG | LIST_LONG_NUMERIC; break;
-                    case 's': flags |= LIST_SIZE; break;
-                    case 'R': flags |= LIST_RECURSIVE; break;
-                    case 'd': flags |= LIST_DIRECTORIES; break;
-                    case 'Z': flags |= LIST_MACLABEL; break;
-                    case 'a': flags |= LIST_ALL; break;
-                    case 'F': flags |= LIST_CLASSIFY; break;
-                    case 'i': flags |= LIST_INODE; break;
-                    default:
-                        fprintf(stderr, "%s: Unknown option '-%c'. Aborting.\n", "ls", arg[0]);
-                        exit(1);
-                    }
-                    arg++;
-                }
-            } else {
-                /* not an option ? */
-                strlist_append_dup(&files, argv[i]);
-            }
-        }
-
-        if (files.count > 0) {
-            STRLIST_FOREACH(&files, path, {
-                if (listpath(path, flags) != 0) {
-                    err = EXIT_FAILURE;
-                }
-            });
-            strlist_done(&files);
-            return err;
-        }
-    }
-
-    // list working directory if no files or directories were specified
-    return listpath(".", flags);
-}
diff --git a/toolbox/setprop.c b/toolbox/setprop.c
deleted file mode 100644
index 63ad2b4..0000000
--- a/toolbox/setprop.c
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <stdio.h>
-
-#include <cutils/properties.h>
-
-int setprop_main(int argc, char *argv[])
-{
-    if(argc != 3) {
-        fprintf(stderr,"usage: setprop <key> <value>\n");
-        return 1;
-    }
-
-    if(property_set(argv[1], argv[2])){
-        fprintf(stderr,"could not set property\n");
-        return 1;
-    }
-
-    return 0;
-}
diff --git a/toolbox/start.c b/toolbox/start.c
deleted file mode 100644
index 6c8a3f2..0000000
--- a/toolbox/start.c
+++ /dev/null
@@ -1,21 +0,0 @@
-
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <cutils/properties.h>
-
-int start_main(int argc, char *argv[])
-{
-    if(argc > 1) {
-        property_set("ctl.start", argv[1]);
-    } else {
-        /* defaults to starting the common services stopped by stop.c */
-        property_set("ctl.start", "netd");
-        property_set("ctl.start", "surfaceflinger");
-        property_set("ctl.start", "zygote");
-        property_set("ctl.start", "zygote_secondary");
-    }
-
-    return 0;
-}
diff --git a/toolbox/stop.c b/toolbox/stop.c
deleted file mode 100644
index 5e3ce3c..0000000
--- a/toolbox/stop.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-
-#include <cutils/properties.h>
-
-int stop_main(int argc, char *argv[])
-{
-    if(argc > 1) {
-        property_set("ctl.stop", argv[1]);
-    } else{
-        /* defaults to stopping the common services */
-        property_set("ctl.stop", "zygote_secondary");
-        property_set("ctl.stop", "zygote");
-        property_set("ctl.stop", "surfaceflinger");
-        property_set("ctl.stop", "netd");
-    }
-
-    return 0;
-}
diff --git a/toybox/Android.mk b/toybox/Android.mk
deleted file mode 100755
index 0fb345d..0000000
--- a/toybox/Android.mk
+++ /dev/null
@@ -1,599 +0,0 @@
-#
-# Copyright (C) 2014 The Android Open Source Project
-#
-# 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.
-#
-
-ifneq ($(wildcard external/toybox/Android.mk),)
-
-ifeq ($(TW_USE_TOOLBOX), true)
-
-LOCAL_PATH := external/toybox
-
-#
-# To update:
-#
-
-#  git remote add toybox https://github.com/landley/toybox.git
-#  git fetch toybox
-#  git merge toybox/master
-#  mm -j32
-#  # (Make any necessary Android.mk changes and test the new toybox.)
-#  git push aosp HEAD:master  # Push directly, avoiding gerrit.
-#  git push aosp HEAD:refs/for/master  # Push to gerrit.
-#
-#  # Now commit any necessary Android.mk changes like normal:
-#  repo start post-sync .
-#  git commit -a
-
-
-#
-# To add a toy:
-#
-
-#  make menuconfig
-#  # (Select the toy you want to add.)
-#  make clean && make  # Regenerate the generated files.
-#  # Edit LOCAL_SRC_FILES below to add the toy.
-#  # If you just want to use it as "toybox x" rather than "x", you can stop now.
-#  # If you want this toy to have a symbolic link in /system/bin, add the toy to ALL_TOOLS.
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := \
-    lib/args.c \
-    lib/dirtree.c \
-    lib/getmountlist.c \
-    lib/help.c \
-    lib/interestingtimes.c \
-    lib/lib.c \
-    lib/llist.c \
-    lib/net.c \
-    lib/portability.c \
-    lib/xwrap.c \
-    main.c \
-    toys/android/getenforce.c \
-    toys/android/getprop.c \
-    toys/android/load_policy.c \
-    toys/android/restorecon.c \
-    toys/android/runcon.c \
-    toys/android/setenforce.c \
-    toys/android/setprop.c \
-    toys/lsb/hostname.c \
-    toys/lsb/killall.c \
-    toys/lsb/md5sum.c \
-    toys/lsb/mknod.c \
-    toys/lsb/mktemp.c \
-    toys/lsb/mount.c \
-    toys/lsb/pidof.c \
-    toys/lsb/seq.c \
-    toys/lsb/sync.c \
-    toys/lsb/umount.c \
-    toys/other/acpi.c \
-    toys/other/base64.c \
-    toys/other/blkid.c \
-    toys/other/blockdev.c \
-    toys/other/bzcat.c \
-    toys/other/chcon.c \
-    toys/other/chroot.c \
-    toys/other/clear.c \
-    toys/other/dos2unix.c \
-    toys/other/fallocate.c \
-    toys/other/free.c \
-    toys/other/freeramdisk.c \
-    toys/other/fsfreeze.c \
-    toys/other/help.c \
-    toys/other/inotifyd.c \
-    toys/other/insmod.c \
-    toys/other/losetup.c \
-    toys/other/lsattr.c \
-    toys/other/lsmod.c \
-    toys/other/lsusb.c \
-    toys/other/makedevs.c \
-    toys/other/mkswap.c \
-    toys/other/modinfo.c \
-    toys/other/mountpoint.c \
-    toys/other/nbd_client.c \
-    toys/other/partprobe.c \
-    toys/other/pivot_root.c \
-    toys/other/pmap.c \
-    toys/other/printenv.c \
-    toys/other/pwdx.c \
-    toys/other/readlink.c \
-    toys/other/realpath.c \
-    toys/other/rev.c \
-    toys/other/rmmod.c \
-    toys/other/setsid.c \
-    toys/other/stat.c \
-    toys/other/swapoff.c \
-    toys/other/swapon.c \
-    toys/other/sysctl.c \
-    toys/other/tac.c \
-    toys/other/taskset.c \
-    toys/other/timeout.c \
-    toys/other/truncate.c \
-    toys/other/usleep.c \
-    toys/other/vconfig.c \
-    toys/other/vmstat.c \
-    toys/other/which.c \
-    toys/other/yes.c \
-    toys/pending/dd.c \
-    toys/pending/expr.c \
-    toys/pending/more.c \
-    toys/pending/route.c \
-    toys/pending/tar.c \
-    toys/pending/tr.c \
-    toys/pending/traceroute.c \
-    toys/posix/basename.c \
-    toys/posix/cal.c \
-    toys/posix/cat.c \
-    toys/posix/chgrp.c \
-    toys/posix/chmod.c \
-    toys/posix/cksum.c \
-    toys/posix/cmp.c \
-    toys/posix/comm.c \
-    toys/posix/cp.c \
-    toys/posix/cpio.c \
-    toys/posix/cut.c \
-    toys/posix/date.c \
-    toys/posix/df.c \
-    toys/posix/dirname.c \
-    toys/posix/du.c \
-    toys/posix/echo.c \
-    toys/posix/env.c \
-    toys/posix/expand.c \
-    toys/posix/false.c \
-    toys/posix/find.c \
-    toys/posix/grep.c \
-    toys/posix/head.c \
-    toys/posix/id.c \
-    toys/posix/kill.c \
-    toys/posix/ln.c \
-    toys/posix/ls.c \
-    toys/posix/mkdir.c \
-    toys/posix/mkfifo.c \
-    toys/posix/nice.c \
-    toys/posix/nl.c \
-    toys/posix/nohup.c \
-    toys/posix/od.c \
-    toys/posix/paste.c \
-    toys/posix/patch.c \
-    toys/posix/printf.c \
-    toys/posix/pwd.c \
-    toys/posix/renice.c \
-    toys/posix/rm.c \
-    toys/posix/rmdir.c \
-    toys/posix/sed.c \
-    toys/posix/sleep.c \
-    toys/posix/sort.c \
-    toys/posix/split.c \
-    toys/posix/strings.c \
-    toys/posix/tail.c \
-    toys/posix/tee.c \
-    toys/posix/time.c \
-    toys/posix/touch.c \
-    toys/posix/true.c \
-    toys/posix/tty.c \
-    toys/posix/uname.c \
-    toys/posix/uniq.c \
-    toys/posix/wc.c \
-    toys/posix/xargs.c
-
-ifeq ($(shell test $(PLATFORM_SDK_VERSION) -eq 26; echo $$?),0)
-# Android 8.0 had some tools in different paths
-LOCAL_SRC_FILES += \
-    toys/pending/dmesg.c
-else
-LOCAL_SRC_FILES += \
-    toys/lsb/dmesg.c
-endif
-
-ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 23; echo $$?),0)
-# there are some conflicts here with AOSP-7.[01] and CM-14.[01]
-# the following items have been removed for compatibility
-# ifconfig, netcat, netstat, rfkill, switch_root
-LOCAL_STATIC_LIBRARIES := libcrypto_static
-
-LOCAL_C_INCLUDES += \
-    external/boringssl/include \
-    bionic/libc/dns/include
-
-LOCAL_SRC_FILES += \
-    lib/linestack.c \
-    lib/password.c \
-    toys/other/flock.c \
-    toys/other/hwclock.c \
-    toys/other/ionice.c \
-    toys/other/lspci.c \
-    toys/other/readahead.c \
-    toys/other/reset.c \
-    toys/other/uptime.c \
-    toys/other/xxd.c \
-    toys/pending/arp.c \
-    toys/pending/diff.c \
-    toys/pending/lsof.c \
-    toys/pending/telnet.c \
-    toys/pending/test.c \
-    toys/pending/watch.c \
-    toys/posix/ps.c \
-    toys/posix/ulimit.c
-ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 27; echo $$?),0)
-LOCAL_SRC_FILES += \
-    toys/pending/xzcat.c
-endif
-
-ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 25; echo $$?),0)
-# Android 8.0/8.1 had some tools in different paths
-LOCAL_SRC_FILES += \
-    toys/net/ftpget.c
-else
-LOCAL_SRC_FILES += \
-    toys/pending/ftpget.c
-endif
-
-# Account for master branch changes pulld into CM14.1
-ifneq ($(CM_BUILD),)
-LOCAL_SRC_FILES += \
-    toys/android/log.c \
-    toys/android/sendevent.c \
-    toys/android/start.c \
-    toys/net/ifconfig.c \
-    toys/net/netcat.c \
-    toys/net/netstat.c \
-    toys/net/rfkill.c \
-    toys/net/tunctl.c \
-    toys/other/setfattr.c \
-    toys/pending/chrt.c \
-    toys/pending/fdisk.c \
-    toys/pending/getfattr.c \
-    toys/pending/host.c \
-    toys/pending/resize.c \
-    toys/posix/file.c
-else
-LOCAL_SRC_FILES += \
-    toys/other/switch_root.c
-ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 25; echo $$?),0)
-# Android 8.0 had some tools in different paths
-LOCAL_SRC_FILES += \
-    toys/android/log.c \
-    toys/android/sendevent.c \
-    toys/android/start.c \
-    toys/net/ifconfig.c \
-    toys/net/microcom.c \
-    toys/net/netcat.c \
-    toys/net/netstat.c \
-    toys/net/rfkill.c \
-    toys/net/tunctl.c \
-    toys/pending/getfattr.c \
-    toys/pending/modprobe.c \
-    toys/posix/file.c \
-    toys/posix/uudecode.c \
-    toys/posix/uuencode.c
-ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 26; echo $$?),0)
-# Android 8.1 had some tools in different paths
-LOCAL_SRC_FILES += \
-    toys/other/chrt.c \
-    toys/pending/gzip.c
-else
-LOCAL_SRC_FILES += \
-    toys/pending/chrt.c
-endif
-ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 27; echo $$?),0)
-# Android 9.0
-LOCAL_SRC_FILES += \
-    toys/other/setfattr.c \
-    toys/pending/fmt.c \
-    toys/pending/stty.c
-else
-LOCAL_SRC_FILES += \
-    toys/pending/setfattr.c
-endif
-LOCAL_SHARED_LIBRARIES += liblog
-else
-LOCAL_SRC_FILES += \
-    toys/other/ifconfig.c \
-    toys/other/netcat.c \
-    toys/other/rfkill.c \
-    toys/pending/netstat.c
-endif
-endif
-else
-LOCAL_SRC_FILES += \
-    toys/other/ifconfig.c \
-    toys/other/netcat.c \
-    toys/other/rfkill.c \
-    toys/other/switch_root.c \
-    toys/pending/hwclock.c \
-    toys/pending/netstat.c \
-    toys/pending/pgrep.c \
-    toys/pending/top.c
-endif
-
-LOCAL_CFLAGS += \
-    -std=c99 \
-    -std=gnu11 \
-    -Os \
-    -Wno-char-subscripts \
-    -Wno-sign-compare \
-    -Wno-string-plus-int \
-    -Wno-uninitialized \
-    -Wno-unused-parameter \
-    -funsigned-char \
-    -ffunction-sections -fdata-sections \
-    -fno-asynchronous-unwind-tables \
-
-ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 24; echo $$?),0)
-    toybox_version := $(shell git -C $(LOCAL_PATH) rev-parse --short=12 HEAD 2>/dev/null)-android
-    LOCAL_CFLAGS += -DTOYBOX_VERSION='"$(toybox_version)"'
-else
-    toybox_version := $(shell sed 's/#define.*TOYBOX_VERSION.*"\(.*\)"/\1/p;d' $(LOCAL_PATH)/main.c)
-    LOCAL_CFLAGS += -DTOYBOX_VERSION=\"$(toybox_version)\"
-endif
-
-LOCAL_CLANG := true
-
-LOCAL_SHARED_LIBRARIES += libcutils libselinux
-
-ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 26; echo $$?),0)
-LOCAL_CFLAGS += \
-    -Wno-gnu-variable-sized-type-not-at-end \
-    -Wno-missing-field-initializers
-
-LOCAL_SHARED_LIBRARIES += libz
-endif
-
-LOCAL_MODULE := toybox_recovery
-LOCAL_MODULE_STEM := toybox
-LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin
-LOCAL_MODULE_TAGS := optional
-
-# dupes: dd df du ls mount renice
-# useless?: freeramdisk fsfreeze install makedevs mkfifo nbd-client
-#           partprobe pivot_root pwdx rev rfkill switch_root tty vconfig
-# prefer BSD netcat instead?: nc netcat
-# prefer efs2progs instead?: blkid chattr lsattr
-
-ALL_TOOLS := \
-    acpi \
-    basename \
-    blkid \
-    blockdev \
-    bzcat \
-    cal \
-    cat \
-    chcon \
-    chgrp \
-    chmod \
-    chown \
-    chroot \
-    cksum \
-    clear \
-    comm \
-    cmp \
-    cp \
-    cpio \
-    cut \
-    date \
-    dirname \
-    dmesg \
-    dos2unix \
-    echo \
-    env \
-    expand \
-    expr \
-    fallocate \
-    false \
-    find \
-    free \
-    getenforce \
-    groups \
-    head \
-    hostname \
-    hwclock \
-    id \
-    ifconfig \
-    inotifyd \
-    insmod \
-    kill \
-    load_policy \
-    ln \
-    logname \
-    losetup \
-    lsmod \
-    lsusb \
-    md5sum \
-    mkdir \
-    mknod \
-    mkswap \
-    mktemp \
-    modinfo \
-    more \
-    mountpoint \
-    mv \
-    netstat \
-    nice \
-    nl \
-    nohup \
-    od \
-    paste \
-    patch \
-    pgrep \
-    pidof \
-    pkill \
-    pmap \
-    printenv \
-    printf \
-    pwd \
-    readlink \
-    realpath \
-    restorecon \
-    rm \
-    rmdir \
-    rmmod \
-    route \
-    runcon \
-    sed \
-    seq \
-    setenforce \
-    setprop \
-    setsid \
-    sha1sum \
-    sleep \
-    sort \
-    split \
-    stat \
-    strings \
-    swapoff \
-    swapon \
-    sync \
-    sysctl \
-    tac \
-    tail \
-    tar \
-    taskset \
-    tee \
-    time \
-    timeout \
-    touch \
-    tr \
-    true \
-    truncate \
-    umount \
-    uname \
-    uniq \
-    unix2dos \
-    usleep \
-    vmstat \
-    wc \
-    which \
-    whoami \
-    xargs \
-    yes
-
-ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 23; echo $$?),0)
-ALL_TOOLS += \
-    arp \
-    base64 \
-    chattr \
-    df \
-    diff \
-    flock \
-    freeramdisk \
-    fsfreeze \
-    fstype \
-    ftpget \
-    ftpput \
-    help \
-    install \
-    ionice \
-    iorenice \
-    iotop \
-    killall \
-    ls \
-    lsattr \
-    lsof \
-    lspci \
-    makedevs \
-    mkfifo \
-    mount \
-    nbd-client \
-    nc \
-    netcat \
-    nproc \
-    partprobe \
-    pivot_root \
-    ps \
-    pwdx \
-    readahead \
-    renice \
-    reset \
-    rev \
-    rfkill \
-    sha224sum \
-    sha256sum \
-    sha384sum \
-    sha512sum \
-    telnet \
-    test \
-    top \
-    traceroute \
-    traceroute6 \
-    tty \
-    tunctl \
-    ulimit \
-    uptime \
-    vconfig \
-    watch \
-    xxd
-ifeq ($(shell test $(PLATFORM_SDK_VERSION) -le 27; echo $$?),0)
-ALL_TOOLS += \
-    getprop \
-    xzcat
-endif
-ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 24; echo $$?),0)
-ALL_TOOLS += \
-    du \
-    gzip \
-    gunzip \
-    zcat
-ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 25; echo $$?),0)
-ALL_TOOLS += \
-    fmt \
-    start \
-    stop \
-    stty
-endif
-ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 28; echo $$?),0)
-ALL_TOOLS += \
-    dd
-endif
-endif
-# Account for master branch changes pulld into CM14.1
-ifneq ($(CM_BUILD),)
-ALL_TOOLS += \
-    chrt \
-    fdisk \
-    file \
-    getfattr \
-    host \
-    log \
-    resize \
-    setfattr
-endif
-endif
-
-# Install the symlinks.
-# LOCAL_POST_INSTALL_CMD := $(hide) $(foreach t,$(ALL_TOOLS),ln -sf toybox $(TARGET_RECOVERY_ROOT_OUT)/sbin/$(t);)
-LOCAL_POST_INSTALL_CMD := $(foreach t,$(ALL_TOOLS),ln -sf toybox $(TARGET_RECOVERY_ROOT_OUT)/sbin/$(t);)
-
-
-include $(BUILD_EXECUTABLE)
-
-# Make /sbin/toolbox launchers for each tool
-SYMLINKS := $(addprefix $(TARGET_RECOVERY_ROOT_OUT)/sbin/,$(ALL_TOOLS))
-$(SYMLINKS): TOYBOX_BINARY := $(LOCAL_MODULE_STEM)
-$(SYMLINKS): $(LOCAL_INSTALLED_MODULE) $(LOCAL_PATH)/Android.mk
-	@echo "Symlink: $@ -> $(TOYBOX_BINARY)"
-	@mkdir -p $(dir $@)
-	@rm -rf $@
-	$(hide) ln -sf $(TOYBOX_BINARY) $@
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := toybox_symlinks
-LOCAL_MODULE_TAGS := optional
-LOCAL_ADDITIONAL_DEPENDENCIES := $(SYMLINKS)
-include $(BUILD_PHONY_PACKAGE)
-
-endif
-
-endif
