TWRP-ify AOSP code

Pull in most TWRP sources
Stub out partition management code
Make it compile -- probably will not boot
Kind of a mess but have to start somewhere
diff --git a/prebuilt/Android.mk b/prebuilt/Android.mk
new file mode 100644
index 0000000..8b0f5cf
--- /dev/null
+++ b/prebuilt/Android.mk
@@ -0,0 +1,197 @@
+LOCAL_PATH := $(call my-dir)
+
+RELINK := $(LOCAL_PATH)/relink.sh
+
+#dummy file to trigger required modules
+include $(CLEAR_VARS)
+LOCAL_MODULE := teamwin
+LOCAL_MODULE_TAGS := eng
+LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
+LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin
+
+# Manage list 
+RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/dump_image
+RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/flash_image
+RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/erase_image
+RELINK_SOURCE_FILES += $(TARGET_OUT_OPTIONAL_EXECUTABLES)/busybox
+RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/pigz
+RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/e2fsck
+RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/mke2fs
+RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/tune2fs
+RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/linker
+RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libc.so
+RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libcutils.so
+RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libdl.so
+RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libext2_blkid.so
+RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libext2_com_err.so
+RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libext2_e2p.so
+RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libext2fs.so
+RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libext2_profile.so
+RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libext2_uuid.so
+RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/liblog.so
+RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libm.so
+RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libstdc++.so
+RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libz.so
+#RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libjpeg.so
+#RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libmtdutils.so
+RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libmmcutils.so
+RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libbmlutils.so
+RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libflashutils.so
+RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libstlport.so
+ifeq ($(TW_INCLUDE_BLOBPACK), true)
+    RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/blobpack
+endif
+ifeq ($(TW_INCLUDE_INJECTTWRP), true)
+    RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/injecttwrp
+endif
+ifeq ($(TW_INCLUDE_DUMLOCK), true)
+    RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/htcdumlock
+endif
+ifeq ($(TW_INCLUDE_CRYPTO), true)
+    RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libcrypto.so
+endif
+ifeq ($(TW_INCLUDE_JB_CRYPTO), true)
+    RELINK_SOURCE_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libcrypto.so
+endif
+
+TWRP_AUTOGEN := $(intermediates)/teamwin
+
+GEN := $(intermediates)/teamwin
+$(GEN): $(RELINK)
+$(GEN): $(RELINK_SOURCE_FILES) $(call intermediates-dir-for,EXECUTABLES,recovery)/recovery
+	$(RELINK) $(TARGET_RECOVERY_ROOT_OUT)/sbin $(RELINK_SOURCE_FILES)
+	$(RELINK) $(call intermediates-dir-for,EXECUTABLES,recovery) $(call intermediates-dir-for,EXECUTABLES,recovery)/recovery
+
+LOCAL_GENERATED_SOURCES := $(GEN)
+LOCAL_SRC_FILES := teamwin $(GEN)
+include $(BUILD_PREBUILT)
+
+#bbinstall.sh
+include $(CLEAR_VARS)
+LOCAL_MODULE := bbinstall.sh
+LOCAL_MODULE_TAGS := eng
+LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
+LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin
+LOCAL_SRC_FILES := $(LOCAL_MODULE)
+include $(BUILD_PREBUILT)
+
+#fix_permissions
+include $(CLEAR_VARS)
+LOCAL_MODULE := fix_permissions.sh
+LOCAL_MODULE_TAGS := eng
+LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
+LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin
+LOCAL_SRC_FILES := $(LOCAL_MODULE)
+include $(BUILD_PREBUILT)
+
+#fs
+include $(CLEAR_VARS)
+LOCAL_MODULE := fs
+LOCAL_MODULE_TAGS := eng
+LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
+LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin
+LOCAL_SRC_FILES := $(LOCAL_MODULE)
+include $(BUILD_PREBUILT)
+
+#mke2fs.conf
+include $(CLEAR_VARS)
+LOCAL_MODULE := mke2fs.conf
+LOCAL_MODULE_TAGS := eng
+LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
+LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/etc
+LOCAL_SRC_FILES := $(LOCAL_MODULE)
+include $(BUILD_PREBUILT)
+
+ifeq ($(BOARD_HAS_NO_REAL_SDCARD),)
+	#parted
+	include $(CLEAR_VARS)
+	LOCAL_MODULE := parted
+	LOCAL_MODULE_TAGS := eng
+	LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
+	LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin
+	LOCAL_SRC_FILES := $(LOCAL_MODULE)
+	include $(BUILD_PREBUILT)
+
+	#sdparted
+	include $(CLEAR_VARS)
+	LOCAL_MODULE := sdparted
+	LOCAL_MODULE_TAGS := eng
+	LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
+	LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin
+	LOCAL_SRC_FILES := $(LOCAL_MODULE)
+	include $(BUILD_PREBUILT)
+endif
+
+ifeq ($(TW_INCLUDE_DUMLOCK), true)
+	#htcdumlock for /system for dumlock
+	include $(CLEAR_VARS)
+	LOCAL_MODULE := htcdumlocksys
+	LOCAL_MODULE_TAGS := eng
+	LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
+	LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/res/htcd
+	LOCAL_SRC_FILES := $(LOCAL_MODULE)
+	include $(BUILD_PREBUILT)
+
+	#flash_image for /system for dumlock
+	include $(CLEAR_VARS)
+	LOCAL_MODULE := flash_imagesys
+	LOCAL_MODULE_TAGS := eng
+	LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
+	LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/res/htcd
+	LOCAL_SRC_FILES := $(LOCAL_MODULE)
+	include $(BUILD_PREBUILT)
+
+	#dump_image for /system for dumlock
+	include $(CLEAR_VARS)
+	LOCAL_MODULE := dump_imagesys
+	LOCAL_MODULE_TAGS := eng
+	LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
+	LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/res/htcd
+	LOCAL_SRC_FILES := $(LOCAL_MODULE)
+	include $(BUILD_PREBUILT)
+
+	#libbmlutils for /system for dumlock
+	include $(CLEAR_VARS)
+	LOCAL_MODULE := libbmlutils.so
+	LOCAL_MODULE_TAGS := eng
+	LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
+	LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/res/htcd
+	LOCAL_SRC_FILES := $(LOCAL_MODULE)
+	include $(BUILD_PREBUILT)
+
+	#libflashutils for /system for dumlock
+	include $(CLEAR_VARS)
+	LOCAL_MODULE := libflashutils.so
+	LOCAL_MODULE_TAGS := eng
+	LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
+	LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/res/htcd
+	LOCAL_SRC_FILES := $(LOCAL_MODULE)
+	include $(BUILD_PREBUILT)
+
+	#libmmcutils for /system for dumlock
+	include $(CLEAR_VARS)
+	LOCAL_MODULE := libmmcutils.so
+	LOCAL_MODULE_TAGS := eng
+	LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
+	LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/res/htcd
+	LOCAL_SRC_FILES := $(LOCAL_MODULE)
+	include $(BUILD_PREBUILT)
+
+	#libmtdutils for /system for dumlock
+	include $(CLEAR_VARS)
+	LOCAL_MODULE := libmtdutils.so
+	LOCAL_MODULE_TAGS := eng
+	LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
+	LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/res/htcd
+	LOCAL_SRC_FILES := $(LOCAL_MODULE)
+	include $(BUILD_PREBUILT)
+
+	#HTCDumlock.apk
+	include $(CLEAR_VARS)
+	LOCAL_MODULE := HTCDumlock.apk
+	LOCAL_MODULE_TAGS := eng
+	LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES
+	LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/res/htcd
+	LOCAL_SRC_FILES := $(LOCAL_MODULE)
+	include $(BUILD_PREBUILT)
+endif
diff --git a/prebuilt/HTCDumlock.apk b/prebuilt/HTCDumlock.apk
new file mode 100644
index 0000000..8298197
--- /dev/null
+++ b/prebuilt/HTCDumlock.apk
Binary files differ
diff --git a/prebuilt/bbinstall.sh b/prebuilt/bbinstall.sh
new file mode 100755
index 0000000..c59fec2
--- /dev/null
+++ b/prebuilt/bbinstall.sh
@@ -0,0 +1,9 @@
+#!/sbin/sh
+
+for cmd in $(/sbin/busybox --list); do
+	/sbin/busybox ln -s /sbin/busybox /sbin/$cmd
+done
+
+ln -sf /sbin/pigz /sbin/gzip
+ln -sf /sbin/unpigz /sbin/gunzip
+rm /sbin/mkdosfs
\ No newline at end of file
diff --git a/prebuilt/dump_imagesys b/prebuilt/dump_imagesys
new file mode 100644
index 0000000..e1bdb62
--- /dev/null
+++ b/prebuilt/dump_imagesys
Binary files differ
diff --git a/prebuilt/fix_permissions.sh b/prebuilt/fix_permissions.sh
new file mode 100755
index 0000000..f2c8e2a
--- /dev/null
+++ b/prebuilt/fix_permissions.sh
@@ -0,0 +1,476 @@
+#!/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]
+
+VERSION="2.03"
+
+# Defaults
+DEBUG=0 # Debug off by default
+LOGGING=0 # Logging on by default
+VERBOSE=0 # 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 )
+
+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 " "/proc/mounts" ) -eq 0; then
+				$MOUNT /sd-ext > /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"; 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"; 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 > /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/prebuilt/flash_imagesys b/prebuilt/flash_imagesys
new file mode 100644
index 0000000..a08d91d
--- /dev/null
+++ b/prebuilt/flash_imagesys
Binary files differ
diff --git a/prebuilt/fs b/prebuilt/fs
new file mode 100644
index 0000000..3092efe
--- /dev/null
+++ b/prebuilt/fs
@@ -0,0 +1,46 @@
+#!/sbin/sh
+
+um
+if [ $? != "0" ]; then
+	echo "Unable to unmount!"
+	exit 1
+fi
+
+
+case $1 in
+    repair)
+	if [ -e /dev/block/mmcblk0p2 ]; then
+
+		e2fsck -yf /dev/block/mmcblk0p2
+	else
+		echo "No ext partition found!"
+		exit 1
+	fi
+	exit 0
+        ;;
+    ext3)
+	if [ -e /dev/block/mmcblk0p2 ]; then
+
+		e2fsck -yf /dev/block/mmcblk0p2
+		tune2fs -c0 -i0 -j /dev/block/mmcblk0p2
+	else
+		echo "No ext partition found!"
+		exit 1
+	fi
+	exit 0
+	;;
+    ext4)
+	if [ -e /dev/block/mmcblk0p2 ]; then
+
+		tune2fs -O extents,uninit_bg,dir_index /dev/block/mmcblk0p2
+		e2fsck -fpDC0 /dev/block/mmcblk0p2
+	else
+		echo "No ext partition found!"
+		exit 1
+	fi
+	exit 0
+        ;;
+    --)
+	exit 0
+        ;;
+esac
diff --git a/prebuilt/htcdumlock b/prebuilt/htcdumlock
new file mode 100644
index 0000000..18068e5
--- /dev/null
+++ b/prebuilt/htcdumlock
Binary files differ
diff --git a/prebuilt/htcdumlocksys b/prebuilt/htcdumlocksys
new file mode 100644
index 0000000..c63725e
--- /dev/null
+++ b/prebuilt/htcdumlocksys
Binary files differ
diff --git a/prebuilt/libbmlutils.so b/prebuilt/libbmlutils.so
new file mode 100644
index 0000000..48a3e3b
--- /dev/null
+++ b/prebuilt/libbmlutils.so
Binary files differ
diff --git a/prebuilt/libflashutils.so b/prebuilt/libflashutils.so
new file mode 100644
index 0000000..91fcde0
--- /dev/null
+++ b/prebuilt/libflashutils.so
Binary files differ
diff --git a/prebuilt/libmmcutils.so b/prebuilt/libmmcutils.so
new file mode 100644
index 0000000..5124876
--- /dev/null
+++ b/prebuilt/libmmcutils.so
Binary files differ
diff --git a/prebuilt/libmtdutils.so b/prebuilt/libmtdutils.so
new file mode 100644
index 0000000..1cbc61e
--- /dev/null
+++ b/prebuilt/libmtdutils.so
Binary files differ
diff --git a/prebuilt/mke2fs.conf b/prebuilt/mke2fs.conf
new file mode 100644
index 0000000..e231d7c
--- /dev/null
+++ b/prebuilt/mke2fs.conf
@@ -0,0 +1,17 @@
+[defaults]
+	base_features = sparse_super,filetype,resize_inode,dir_index,ext_attr
+	blocksize = 4096
+	inode_size = 256
+	inode_ratio = 16384
+
+[fs_types]
+	ext2 = {
+
+	}
+	ext3 = {
+		features = has_journal
+	}
+	ext4 = {
+		features = has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize
+		inode_size = 256
+	}
diff --git a/prebuilt/parted b/prebuilt/parted
new file mode 100755
index 0000000..bb3d432
--- /dev/null
+++ b/prebuilt/parted
Binary files differ
diff --git a/prebuilt/relink-binaries.sh b/prebuilt/relink-binaries.sh
new file mode 100755
index 0000000..2dd8943
--- /dev/null
+++ b/prebuilt/relink-binaries.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+process_file()
+{
+   src=$1
+   dst=$1-1 #/$(basename $2)
+   cp -f -p $src $dst
+
+   sed "s|/system/bin/linker\x0|/sbin/linker\x0\x0\x0\x0\x0\x0\x0|g" $dst | sed "s|/system/bin/sh\x0|/sbin/sh\x0\x0\x0\x0\x0\x0\x0|g" > $dst-mod
+   #sed "s|/sbin/linker\x0|/system/bin/linker\x0\x0\x0\x0\x0\x0\x0|g" $dst | sed "s|/sbin/sh\x0|/system/bin/sh\x0\x0\x0\x0\x0\x0\x0|g" > $dst-mod
+   rm $dst
+}
+
+
+dest=$1
+for ARG in $*
+do
+   process_file $dest $ARG
+done	
diff --git a/prebuilt/relink.sh b/prebuilt/relink.sh
new file mode 100755
index 0000000..4e9445a
--- /dev/null
+++ b/prebuilt/relink.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+process_file()
+{
+    dst=$1/$(basename $2)
+    src=$2
+    if [ $dst == $src ]; then
+      cp -f -p $src $src.tmp
+      src=$2.tmp
+    else
+      cp -f -p $src $dst
+    fi
+
+    sed "s|/system/bin/linker\x0|/sbin/linker\x0\x0\x0\x0\x0\x0\x0|g" $src | sed "s|/system/bin/sh\x0|/sbin/sh\x0\x0\x0\x0\x0\x0\x0|g" > $dst
+
+    if [ $1 == $(dirname $2) ]; then
+      rm -f $src
+    fi
+}
+
+
+dest=$1
+shift 1
+for ARG in $*
+do
+    process_file $dest $ARG
+done
diff --git a/prebuilt/sdparted b/prebuilt/sdparted
new file mode 100644
index 0000000..730d5dc
--- /dev/null
+++ b/prebuilt/sdparted
@@ -0,0 +1,658 @@
+#!/sbin/sh
+
+# do logging, if not excluded with -x
+LOGFILE="/data/sdparted.log"
+[ "$1" != "-x" ] && echo "$0" "$@" >> "$LOGFILE" && "$0" -x "$@" 2>&1 | tee -a "$LOGFILE" && exit
+shift
+
+ShowError() { echo ; echo " err: $1" ; echo ; exit 1 ; }
+
+ShowMessage() { echo ; echo " msg: $1" ; }
+
+ShowHelp() {
+
+cat <<DONEHELP
+
+$SCRIPTNAME v$SCRIPTREV created by $MYNAME
+
+if you use this script in your work, please give some credit. thanks.
+
+requirements: cm-recovery-v1.4
+
+usage: $SCRIPTNAME [options]
+
+
+options:
+
+ --fatsize|-fs SIZE[MG]     set the size of the fat32 partition to <SIZE>.
+                            default=total sdcard size - (ext + swap)
+						
+ --extsize|-es SIZE[MG]     set the size of the ext partition to <SIZE>.
+                            default=$EXTSIZE
+						
+ --swapsize|-ss SIZE[MG]    set the size of the swap partition to <SIZE>.
+                            if set to 0, no swap partition will be created.
+                            default=$SWAPSIZE
+						
+ --extfs|-efs TYPE          set the filesystem of ext partition to <TYPE>.
+                            valid types=ext2, ext3, ext4
+                            default=$EXTFS
+
+
+ --upgradefs|-ufs TYPE      upgrades existing ext partition to <TYPE>.
+                            this operation will NOT wipe your sdcard and
+                            cannot be used with any partition creation options.
+                            valid types=ext3, ext4
+
+ --downgradefs|-dfs TYPE    downgrades existing ext partition to <TYPE>.
+                            this operation will NOT wipe your sdcard and
+                            cannot be used with any partition creation options.
+                            valid types=ext2
+
+							
+ --interactive|-i           interactive mode
+
+ --help|-h                  display this help
+
+ --printonly|-po            display sdcard information
+
+ --silent|-s                do not prompt user, not even initial warning.
+
+
+examples:
+ $SCRIPTNAME                     creates swap=$SWAPSIZE ext2=$EXTSIZE fat32=remaining free space
+ $SCRIPTNAME -efs ext4           creates swap=$SWAPSIZE ext4=$EXTSIZE fat32=remaining free space
+ $SCRIPTNAME -fs 1.5G -efs ext3  creates swap=$SWAPSIZE ext3=$EXTSIZE fat32=1536
+ $SCRIPTNAME -es 256M -ss 0      creates no swap ext2=256 fat32=remaining free space
+ $SCRIPTNAME -ufs ext4           upgrades ext partition to ext4
+
+DONEHELP
+
+}
+
+UserAbort() {
+	
+	WHILEEXIT=
+
+	while [ -z "$WHILEEXIT" ]
+	do
+		echo -n "do you want to continue? (Y/n) "
+		read response
+		echo
+		[ "$response" = "Y" ] || [ "$response" = "n" ] || [ "$response" = "N" ] && WHILEEXIT="$response"
+	done
+	
+	echo "$response" > /dev/null 2>&1 >>"$LOGFILE"
+	
+	[ "$response" != "Y" ]
+	
+}
+
+UnmountAll () {
+
+	# unmount all partitions so we can work with $SDPATH
+	# i'm assuming no more than 3 partitions
+	# maybe make a little more elegant later
+	echo -n "unmounting all partitions..."
+	umount "$FATPATH" > /dev/null 2>&1 >>"$LOGFILE"
+	umount "$EXTPATH" > /dev/null 2>&1 >>"$LOGFILE"
+	umount "$SWAPPATH" > /dev/null 2>&1 >>"$LOGFILE"
+	echo "done"
+	echo
+	
+}
+
+
+CheckReqs() {
+
+	echo -n "checking script requirements..."
+	# check for valid sdcard
+	[ -e $SDPATH ] || ShowError "$SDPATH does not exist!"
+	
+	# look for necessary programs
+	[ -e $CMPARTED ] || ShowError "$CMPARTED does not exist!"
+	[ -e $CMTUNE2FS ] || ShowError "$CMTUNE2FS does not exist!"
+	[ -e $CME2FSCK ] || ShowError "$CME2FSCK does not exist!"
+	
+	# verify cm-v1.4
+	PARTEDREV=`"$CMPARTED" "$SDPATH" version | grep Parted | cut -d" " -f3`
+	[ "$PARTEDREV" == "1.8.8.1.179-aef3" ] || ShowError "you are not using parted v1.8.8.1.179-aef3!"
+	echo "done"
+	echo
+	
+}
+
+CheckTableType() {
+
+	TABLETYPE=`"$CMPARTED" "$SDPATH" print | grep Table: | cut -d" " -f3`
+	
+	[ "$TABLETYPE" == "loop" -o "$TABLETYPE" == "msdos" ] && TTISOK=1 || TTISOK=0
+	[ "$TABLETYPE" == "loop" ] && TTISLOOP=1 || TTISLOOP=0
+	[ "$TABLETYPE" == "msdos" ] && TTISMSDOS=1 || TTISMOSDOS=0
+	
+}
+
+ValidateExtArg() {
+
+	FUNC_RET="nonzero"
+		
+	# validating argument
+	[ "$1" != "ext2" ] && [ "$1" != "ext3" ] && [ "$1" != "ext4" ] && FUNC_RET=
+		
+	[ -z "$FUNC_RET" ] && [ -z "$IMODE" ] && ShowError "$1 is not a valid filesystem."
+	[ -z "$FUNC_RET" ] && [ -n "$IMODE" ] && ShowMessage "$1 is not a valid filesystem."
+	
+	# return valid argument
+	[ -n "$FUNC_RET" ] && FUNC_RET="$1"
+	
+}
+
+ValidateSizeArg() {
+
+	# check for zero-length arg to protect expr length
+	[ -z "$1" ] && ShowError "zero-length argument passed to size-validator"
+		
+	SIZEMB=
+	ARGLEN=`expr length $1`
+	SIZELEN=$(($ARGLEN-1))
+	SIZEARG=`expr substr $1 1 $SIZELEN`
+	SIZEUNIT=`expr substr $1 $ARGLEN 1`
+	
+	# check if SIZEARG is an integer
+	if [ $SIZEARG -eq $SIZEARG 2> /dev/null ] ; then
+		# look for G
+		[ "$SIZEUNIT" == "G" ] && SIZEMB=$(($SIZEARG * 1024))
+		# look for M
+		[ "$SIZEUNIT" == "M" ] && SIZEMB=$SIZEARG
+		# no units on arg AND prevents using bogus size units
+		[ -z "$SIZEMB" ] && [ $SIZEUNIT -eq $SIZEUNIT 2> /dev/null ] && SIZEMB=$1
+	# check if SIZEARG is a floating point number, GB only
+	elif [ `expr index "$SIZEARG" .` != 0 ] && [ "$SIZEUNIT" == "G" ]  ; then
+		INT=`echo "$SIZEARG" | cut -d"." -f1`
+		FRAC=`echo "$SIZEARG" | cut -d"." -f2`
+		SIGDIGITS=`expr length $FRAC`
+		
+		[ -z "$INT" ] && INT=0
+		INTMB=$(($INT * 1024))
+		FRACMB=$((($FRAC * 1024) / (10**$SIGDIGITS)))
+		SIZEMB=$(($INTMB + $FRACMB))
+	# it's not a valid size
+	else
+		[ -z "$IMODE" ] && ShowError "$1 is not a valid size"
+	fi
+	
+	[ -z "$SIZEMB" ] && [ -n "$IMODE" ] && ShowMessage "$1 is not a valid size"
+	
+	# return valid argument in MB
+	FUNC_RET=$SIZEMB
+	
+}
+
+CalculatePartitions() {
+
+	# get size of sdcard in MB & do some math
+	SDSIZEMB=`"$CMPARTED" "$SDPATH" unit MB print | grep $SDPATH | cut -d" " -f3`
+	SDSIZE=${SDSIZEMB%MB}
+	[ -n "$FATSIZE" ] || FATSIZE=$(($SDSIZE - $EXTSIZE - $SWAPSIZE))
+	EXTEND=$(($FATSIZE + $EXTSIZE))
+	SWAPEND=$(($EXTEND + $SWAPSIZE))
+	
+	# check for fatsize of 0
+	[ $FATSIZE -le 0 ] && ShowError "must have a fat32 partition greater than 0MB"
+	
+	# check for zero-length sdsize...
+	# indicative of parted not reporting length 
+	# correctly b/c of error on sdcard
+	[ -z "$SDSIZE" ] && ShowError "zero-length argument passed to partition-calculator"
+	
+	# make sure we're not being asked to do the impossible
+	[ $(($FATSIZE + $EXTSIZE + $SWAPSIZE)) -gt $SDSIZE ] && [ -z "$IMODE" ] && ShowError "sum of requested partitions is greater than sdcard size"
+
+}
+
+
+UpgradeDowngradeOnly() {
+
+	if [ -n "$UEXTFSONLY" ] ; then
+		echo
+		[ -n "$CREATEPART" ] && ShowError "cannot use upgrade option when creating partitions, use -efs instead"
+		[ -n "$DEXTFSONLY" ] && ShowError "cannot upgrade AND downgrade, it just doesn't make sense"
+		echo "you have chosen to upgrade $EXTPATH to $UEXTFSONLY."
+		echo "this action will NOT delete any data from sdcard."
+		echo
+		[ -z "$SILENTRUN" ] &&	UserAbort && ShowError "script canceled by user"
+		echo
+		UpgradeExt "$UEXTFSONLY"
+		ShowCardInfo
+	elif [ -n "$DEXTFSONLY" ] ; then
+		echo
+		[ -n "$CREATEPART" ] && ShowError "cannot use downgrade option when creating partitions."
+		[ -n "$UEXTFSONLY" ] && ShowError "cannot downgrade AND upgrade, it just doesn't make sense."
+		echo "you have chosen to downgrade $EXTPATH to $DEXTFSONLY."
+		echo "this action will NOT delete any data from sdcard."
+		echo
+		[ -z "$SILENTRUN" ] &&	UserAbort && ShowError "script canceled by user"
+		echo
+		DowngradeExt "$DEXTFSONLY"
+		ShowCardInfo
+	fi
+	
+}
+
+PrepareSdCard() {
+
+	echo
+	if [ $TTISOK -eq 0 ] ; then
+		echo "partition 1 may not be aligned to cylinder boundaries."
+		echo "to continue, this must be corrected."
+	elif [ $TTISLOOP -gt 0 ] ; then
+		echo "your sdcard's partition table type is $TABLETYPE."
+		echo "to continue, partition table must be set to 'msdos'."
+	elif [ $TTISMSDOS -gt 0 ] ; then
+		# just a reminder..in a later version, 
+		# i may implement resizing of partitions, 
+		# so this will be unnecessary. but until then...
+		echo "to continue, all existing partitions must be removed."
+	else
+		# this is not good, and should never happen
+		# if it does, there is a serious problem
+		ShowError "sdcard failed table type check."
+	fi
+	
+	echo
+	echo "this action will remove all data from your sdcard."
+	echo
+	[ -z "$SILENTRUN" ] &&	UserAbort && ShowError "script canceled by user"
+	
+	[ $TTISOK -eq 0 ] && echo -n "correcting cylinder boundaries..."
+	[ $TTISLOOP -gt 0 ] && echo -n "setting partition table to msdos..."
+	[ $TTISMSDOS -gt 0 ] && echo -n "removing all partitions..."
+	
+	"$CMPARTED" -s "$SDPATH" mklabel msdos 2>&1 >>"$LOGFILE"
+	echo "done"
+	echo
+	
+}
+
+ShowActions() {
+
+	echo
+	echo "total size of sdcard=$SDSIZEMB"
+	echo
+	echo "the following actions will be performed:"
+	echo " -create $FATSIZE""MB fat32 partition"
+	[ $EXTSIZE -gt 0 ] && echo " -create $EXTSIZE""MB ext2 partition"
+	[ $SWAPSIZE -gt 0 ] && echo " -create $SWAPSIZE""MB swap partition"
+	[ "$EXTFS" != "ext2" ] && echo " -ext2 partition will be upgraded to $EXTFS"
+	echo
+	[ -z "$SILENTRUN" ] &&	UserAbort && ShowError "script canceled by user"
+	echo
+	
+}
+
+ShowCardInfo() {
+
+    echo "sddevice located in /sdcard/sddev.log"
+    echo $SDPATH > /sdcard/sddev.log
+
+	CheckTableType
+	
+	echo
+	echo "retrieving current sdcard information..."
+	
+	if [ $TTISOK -gt 0 ] ; then
+		echo
+		parted "$SDPATH" print
+		echo
+		echo "script log is located @ /data/sdparted.log"
+		exit 0
+	else
+		echo
+		echo "partition 1 may not be aligned to cylinder boundaries."
+		ShowError "cannot complete print operation."
+	fi
+	echo
+	
+}
+
+
+PartitionSdCard() {
+
+	echo "performing selected actions..."
+	echo
+	
+	if [ $FATSIZE -gt 0 ] ; then
+		echo -n "creating fat32 partition..."
+		"$CMPARTED" -s "$SDPATH" mkpartfs primary fat32 0 "$FATSIZE"MB 2>&1 >>"$LOGFILE"
+		echo "done"
+	fi
+	
+	if [ $EXTSIZE -gt 0 ] ; then
+		echo -n "creating ext2 partition..."
+		"$CMPARTED" -s "$SDPATH" mkpartfs primary ext2 "$FATSIZE"MB "$EXTEND"MB 2>&1 >>"$LOGFILE"
+		"$CMTUNE2FS" -L sd-ext "$EXTPATH" 2>&1 >>"$LOGFILE"
+		echo "done"
+	fi
+	
+	if [ $SWAPSIZE -gt 0 ] ; then
+		echo -n "creating swap partition..."
+		"$CMPARTED" -s "$SDPATH" mkpartfs primary linux-swap "$EXTEND"MB "$SWAPEND"MB 2>&1 >>"$LOGFILE"
+		echo "done"
+	fi
+	echo
+	
+}
+
+UpgradeExt() {
+
+	# check for no upgrade
+	[ "$1" == "ext2" ] && return
+	# check for ext partition
+	[ ! -e "$EXTPATH" ] && ShowError "$EXTPATH does not exist"
+
+	# have to use -m switch for this check b/c parted incorrectly
+	# reports all ext partitions as ext2 when running print <number>
+	CHECKEXTFS=`"$CMPARTED" -m "$SDPATH" print | grep ext | cut -d":" -f5`
+	[ "$CHECKEXTFS" == "$1" ] && ShowError "$EXTPATH is already $1"
+
+	# grabbed the code bits for ext3 from upgrade_fs(credit:cyanogen)
+	# check for ext2...must upgrade to ext3 first b4 ext4
+	if [ "$1" == "ext3" -o "$1" == "ext4" ] ; then
+		echo -n "adding journaling to $EXTPATH..."
+		umount /system/sd > /dev/null 2>&1 >>"$LOGFILE"
+		"$CME2FSCK" -p "$EXTPATH" 2>&1 >>"$LOGFILE"
+		"$CMTUNE2FS" -c0 -i0 -j "$EXTPATH" 2>&1 >>"$LOGFILE"
+		echo "done"
+	fi
+
+	# and got convert to ext4 from xda-forum(credit:Denkai)
+	if [ "$1" == "ext4" ] ; then
+		echo -n "converting $EXTPATH to ext4 filesystem..."
+		umount /system/sd > /dev/null 2>&1 >>"$LOGFILE"
+		"$CMTUNE2FS" -O extents,uninit_bg,dir_index "$EXTPATH" 2>&1 >>"$LOGFILE"
+		"$CME2FSCK" -fpDC0 "$EXTPATH" 2>&1 >>"$LOGFILE"
+		echo "done"
+	fi
+	echo
+	
+}
+
+DowngradeExt() {
+
+	# check for ext partition
+	[ ! -e "$EXTPATH" ] && ShowError "$EXTPATH does not exist"
+
+	# have to use print for this check b/c parted incorrectly
+	# reports all ext partitions as ext2 when running print <number>
+	CHECKEXTFS=`"$CMPARTED" -m "$SDPATH" print | grep ext | cut -d":" -f5`
+	[ "$CHECKEXTFS" == "$1" ] && ShowError "$EXTPATH is already $1"
+	
+	if [ "$CHECKEXTFS" == "ext4" -o "$1" == "ext3" ] ; then
+		# interweb says downgrading from ext4 is not possible
+		# without a backup/restore procedure.
+		# if i figure it out, i'll implement it.
+		ShowError "downgrading from ext4 is not currently supported"
+	fi
+	
+	if [ "$1" == "ext2" ] ; then
+		echo -n "removing journaling from $EXTPATH..."
+		umount /system/sd > /dev/null 2>&1 >>"$LOGFILE"
+		"$CMTUNE2FS" -O ^has_journal "$EXTPATH" 2>&1 >>"$LOGFILE"
+		"$CME2FSCK" -fp "$EXTPATH" 2>&1 >>"$LOGFILE"
+		echo "done"
+	fi
+	echo
+	
+}
+
+
+Interactive() {
+
+cat <<DONEINSTRUCT
+
+sdparted interactive mode
+
+rules:
+1. no answer means you accept default value
+2. enter '0' for no partition
+
+DONEINSTRUCT
+
+	UserAbort && ShowError "script canceled by user"
+	
+	CalculatePartitions
+	
+	GetSwapSize
+	
+	FATSIZE=
+	
+	CalculatePartitions
+	
+	GetExtSize
+	
+	GetExtType
+	
+	FATSIZE=
+	
+	CalculatePartitions
+	
+	GetFatSize
+	
+}
+
+GetSwapSize() {
+
+	SWAPTEST=
+	
+	while [ -z "$SWAPTEST" ]
+	do
+		echo
+		echo -n "swap partition size [default=$SWAPSIZE]: "
+		read SWAPRESP
+		
+		[ -z "$SWAPRESP" ] && SWAPRESP="$SWAPSIZE"
+		echo "$SWAPRESP" > /dev/null 2>&1 >>"$LOGFILE"
+		
+		ValidateSizeArg "$SWAPRESP"
+		SWAPTEST="$FUNC_RET"
+		[ -n "$SWAPTEST" ] && [ $SWAPTEST -gt $SDSIZE ] && ShowMessage "$SWAPRESP > available space($(($SDSIZE))M)." && SWAPTEST=
+	done
+	
+	SWAPSIZE=$SWAPTEST
+	
+}
+
+GetExtSize() {
+
+	EXTTEST=
+	
+	while [ -z "$EXTTEST" ]
+	do
+		echo
+		echo -n "ext partition size [default=$EXTSIZE]: "
+		read EXTRESP
+		
+		[ -z "$EXTRESP" ] && EXTRESP="$EXTSIZE"
+		echo "$EXTRESP" > /dev/null 2>&1 >>"$LOGFILE"
+		
+		ValidateSizeArg "$EXTRESP"
+		EXTTEST="$FUNC_RET"
+		
+		[ -n "$EXTTEST" ] && [ $EXTTEST -gt $(($SDSIZE - $SWAPSIZE)) ] && ShowMessage "$EXTRESP > available space($(($SDSIZE - $SWAPSIZE))M)." && EXTTEST=
+	done
+	
+	EXTSIZE=$EXTTEST
+	
+}
+
+GetExtType() {
+
+	FSTEST=
+	
+	while [ -z "$FSTEST" ]
+	do
+		echo
+		echo -n "ext partition type [default=$EXTFS]: "
+		read FSRESP
+		
+		[ -z "$FSRESP" ] && FSRESP="$EXTFS"
+		echo "$FSRESP" > /dev/null 2>&1 >>"$LOGFILE"
+		
+		ValidateExtArg "$FSRESP"
+		FSTEST="$FUNC_RET"
+	done
+	
+	EXTFS="$FSTEST"
+	
+}
+
+GetFatSize() {
+
+	FATTEST=
+	
+	while [ -z "$FATTEST" ]
+	do
+		echo
+		echo -n "fat partition size [default=$FATSIZE]: "
+		read FATRESP
+		
+		[ -z "$FATRESP" ] && FATRESP="$FATSIZE"
+		echo "$FATRESP" > /dev/null 2>&1 >>"$LOGFILE"
+		
+		ValidateSizeArg "$FATRESP"
+		FATTEST="$FUNC_RET"
+		
+		[ -n "$FATTEST" ] && [ $FATTEST -gt $FATSIZE ] && ShowMessage "$FATRESP > available space($(($SDSIZE - $SWAPSIZE - $EXTSIZE))M)." && FATTEST=
+		[ -n "$FATTEST" ] && [ $FATTEST -le 0 ] && ShowMessage "must have a fat32 partition greater than 0MB" && FATTEST=
+	done
+	
+	FATSIZE=$FATTEST
+	
+}
+
+
+SCRIPTNAME="sdparted"
+SCRIPTREV="0.6"
+MYNAME="51dusty"
+
+IMODE=
+SILENTRUN=
+CREATEPART=
+FUNC_RET=
+
+UEXTFSONLY=
+DEXTFSONLY=
+
+TTISOK=
+TTISLOOP=
+TTISMSDOS=
+
+SDSIZE=
+SDSIZEMB=
+SDINFO=$(cat /etc/fstab | grep /sdcard | awk '{print $1}')
+if [ -L "$SDINFO" ]
+then
+	SDPATH=$(ls -l $SDINFO | awk '{print $11}')
+else
+	SDPATH=$SDINFO
+fi
+# we may now have an SDPATH, let's make sure its on mmcblkX or mmcblkXp1
+CHECK_SDPATH1=$(echo $SDPATH | grep mmcblk.$)
+CHECK_SDPATH2=$(echo $SDPATH | grep mmcblk.p1$)
+if [ -z "$CHECK_SDPATH1" ]
+then
+	if [ -z "$CHECK_SDPATH2" ]
+	then
+		echo fail1
+		unset SDPATH
+	else
+		LEN=${#SDPATH}
+		BLKLEN=$(expr $LEN - 2)
+		SDPATH=${SDPATH:0:$BLKLEN}
+	fi
+fi
+
+
+FATSIZE=
+FATTYPE="fat32"
+FATPATH=$SDPATH"p1"
+
+EXTSIZE=512
+EXTFS="ext2"
+EXTPATH=$SDPATH"p2"
+EXTEND=
+
+SWAPSIZE=32
+SWAPTYPE="linux-swap"
+SWAPPATH=$SDPATH"p3"
+SWAPEND=
+
+CMPARTED="/sbin/parted"
+CMTUNE2FS="/sbin/tune2fs"
+CME2FSCK="/sbin/e2fsck"
+
+# give the output some breathing room
+echo "$SCRIPTREV" >> "$LOGFILE" 
+echo
+
+# check for arguments
+while [ $# -gt 0 ] ; do
+  case "$1" in
+
+    -h|--help) ShowHelp ; exit 0 ;;
+    
+    -fs|--fatsize) shift ; ValidateSizeArg "$1" ; FATSIZE="$FUNC_RET" ; CREATEPART="$1" ;;
+    -es|--extsize) shift ; ValidateSizeArg "$1" ; EXTSIZE="$FUNC_RET" ; CREATEPART="$1" ;;
+	-ss|--swapsize) shift ; ValidateSizeArg "$1" ; SWAPSIZE="$FUNC_RET" ; CREATEPART="$1" ;;
+	-efs|--extfs) shift ; ValidateExtArg "$1" ; EXTFS="$FUNC_RET" ; CREATEPART="$1" ;;
+	
+	-ufs|--upgradefs) shift ; ValidateExtArg "$1" ; UEXTFSONLY="$FUNC_RET" ;;
+	-dfs|--downgradefs) shift ; ValidateExtArg "$1" ; DEXTFSONLY="$FUNC_RET" ;;
+	
+	-i|--interactive) IMODE="$1" ;;
+	
+	-s|--silent) SILENTRUN="$1" ;;
+	
+	-po|--printonly) ShowCardInfo ;;
+	
+	*) ShowHelp ; ShowError "unknown argument '$1'" ;;
+
+  esac
+  shift
+done
+
+# can't do silent when in interactive mode
+[ -n "$IMODE" ] && SILENTRUN=
+
+# make sure sdcard exists and all needed files are here
+CheckReqs
+
+# unmount all
+UnmountAll
+
+# upgrade only? downgrade only?
+UpgradeDowngradeOnly
+
+# check table
+CheckTableType
+
+# prep card
+PrepareSdCard
+
+# check for interactive mode
+[ -n "$IMODE" ] && Interactive
+
+# do some math
+CalculatePartitions
+
+# last chance to cancel
+ShowActions
+
+# partition card
+PartitionSdCard
+
+# upgrade fs if necessary
+UpgradeExt "$EXTFS"
+
+# say goodbye and show print output
+ShowCardInfo
diff --git a/prebuilt/teamwin b/prebuilt/teamwin
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/prebuilt/teamwin
@@ -0,0 +1 @@
+