first commit
diff --git a/prebuilt/common/etc/liberty.bsh b/prebuilt/common/etc/liberty.bsh
new file mode 100755
index 0000000..494be0e
--- /dev/null
+++ b/prebuilt/common/etc/liberty.bsh
@@ -0,0 +1,415 @@
+#!/system/xbin/bash
+: '
+ ============ Copyright (C) 2010 Jared Rummler (JRummy16) ============
+ 
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+ 
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ 
+ =====================================================================
+'
+
+: ' =========================================================
+ function name: fix_permissions
+ parameters: void
+ returns: void
+ description:
+    Sets permissions for Android data directories and apks
+============================================================= '
+function fix_permissions()
+{
+	START=` busybox date +%s `
+	PKGLINE=(` pm list packages -f | busybox cut -d ':' -f2 `);
+	MAX=${#PKGLINE[*]}
+	INCREMENT=5
+	PROGRESS=0
+	PROGRESS_BAR=""
+
+	echo
+	echo "Fixing permissions..."
+	echo
+
+	busybox mount -o remount,rw /system
+	
+	for pkgline in ${PKGLINE[*]}; do
+		
+		PKGNAME=` echo $pkgline | busybox cut -d '=' -f2 `
+		CODEPATH=` echo $pkgline | busybox cut -d '=' -f1 `
+		DATAPATH=/data/data/$PKGNAME
+		PKGUID=` busybox grep $CODEPATH /data/system/packages.xml | busybox sed 's%.*serId="\(.*\)".*%\1%' |  busybox cut -d '"' -f1 `
+		
+		let PROGRESS++
+		PERCENT=$(( $PROGRESS * 100 / $MAX ))
+		if busybox [ $PERCENT -eq $INCREMENT ]; then
+			INCREMENT=$(( $INCREMENT + 5 ))
+			PROGRESS_BAR="${PROGRESS_BAR}="
+		fi
+		
+		echo -ne "  \r  ${PROGRESS}/${MAX} ${PERCENT}% [ ${PROGRESS_BAR}> ]"
+		
+		if busybox [ -e $CODEPATH ]; then
+
+			APPDIR=` busybox dirname $CODEPATH `
+
+			if busybox [ $APPDIR = /system/app ]; then
+				busybox chown 0 $CODEPATH
+				busybox chown :0 $CODEPATH
+				busybox chmod 644 $CODEPATH
+			elif busybox [ $APPDIR = /data/app ]; then
+				busybox chown 1000 $CODEPATH
+				busybox chown :1000 $CODEPATH
+				busybox chmod 644 $CODEPATH
+			elif busybox [ $APPDIR = /data/app-private ]; then
+				busybox chown 1000 $CODEPATH
+				busybox chown :$PKGUID $CODEPATH
+				busybox chmod 640 $CODEPATH
+			fi
+
+			if busybox [ -d $DATAPATH ]; then
+
+				busybox chmod 755 $DATAPATH
+				busybox chown $PKGUID $DATAPATH
+				busybox chown :$PKGUID $DATAPATH
+
+				DIRS=` busybox find $DATAPATH -mindepth 1 -type d `
+
+				for file in $DIRS; do
+
+					PERM=755
+					NEWUID=$PKGUID
+					NEWGID=$PKGUID
+					FNAME=` busybox basename $file `
+					
+					case $FNAME in
+						lib)
+							busybox chmod 755 $file
+							NEWUID=1000
+							NEWGID=1000
+							PERM=755
+						;;
+						shared_prefs)
+							busybox chmod 771 $file
+							PERM=660					
+						;;
+						databases)
+							busybox chmod 771 $file
+							PERM=660
+						;;
+						cache)
+							busybox chmod 771 $file
+							PERM=600
+						;;
+						*)
+							busybox chmod 771 $file
+							PERM=771
+						;;
+					esac
+					
+					busybox chown $NEWUID $file
+					busybox chown :$NEWGID $file
+
+					busybox find $file -type f -maxdepth 1 ! -perm $PERM -exec busybox chmod $PERM {} ';'
+					busybox find $file -type f -maxdepth 1 ! -user $NEWUID -exec busybox chown $NEWUID {} ';'
+					busybox find $file -type f -maxdepth 1 ! -group $NEWGID -exec busybox chown :$NEWGID {} ';'
+
+				done
+			fi
+		fi
+	done
+
+	busybox mount -o remount,ro /system
+	sync
+	
+	STOP=` busybox date +%s `
+	RUNTIME=` runtime $START $STOP `
+	echo
+	echo
+	echo "Fix permissions complete! Runtime: ${RUNTIME}"
+	echo
+}
+
+: ' =========================================================
+ function name: getFastReboot
+ parameters: void
+ returns: void
+ description:
+    Hot reboots the device
+============================================================= '
+function getFastReboot()
+{
+	busybox killall system_server
+}
+
+: ' =========================================================
+ function name: getFastReboot
+ parameters: void
+ returns: rw|ro
+ description:
+    Gets mount
+'
+function getMount()
+{
+	mount | busybox grep /system | busybox awk '{print $4}' | busybox cut -d ',' -f1
+}
+
+: ' =========================================================
+ function name: installApks
+ parameters: $1 - "-r" search all sub directories for apks, or...
+                  path to directory
+             $2 - path to directory (if recursize)
+ returns: void
+ description:
+    Installs apks to device using package manager
+============================================================= '
+function installApks()
+{
+	RECURSIZE=0
+	case $1 in
+		-r)
+			RECURSIZE=1
+			shift;
+		;;
+	esac
+	
+	APKS_DIR=${1:-/mnt/sdcard/}
+	declare -a APKS
+	
+	if busybox [ -d $APKS_DIR ]; then	
+		
+		if busybox [ $RECURSIZE -eq 1 ]; then
+			APKS=(` busybox find $APKS_DIR -type f -name *.apk -print `);
+		else
+			APKS=(` ls $APKS_DIR/*.apk `);
+		fi
+		
+		for apk in ${APKS[*]}; do
+			pm install -i com.google.android.feedback -r $apk
+		done
+	fi
+}
+
+: ' =========================================================
+ function name: isBusyboxInstalled
+ parameters: void
+ returns: 0: busybox is installed
+          1: busybox is not installed
+ description:
+    Checks if busybox is installed correctly
+============================================================= '
+function isBusyboxInstalled()
+{
+	if ! busybox > /dev/nul 2>&1; then
+		return 1
+	fi
+	return 0
+}
+
+: ' =========================================================
+ function name: isRoot
+ parameters: void
+ returns: 0: if user is root
+          1: if user is not root
+ description:
+    Checks if user is running as root
+============================================================= '
+function isRoot()
+{
+	if busybox [ `whoami` = root ]; then
+		return 0
+	fi
+	return 1
+}
+
+: ' =========================================================
+ function name: isProcessRunning
+ parameters: $1 - process name
+ returns: 0: Process is running
+          1: Process is not running
+ description:
+    Checks if SD card is mounted
+============================================================= '
+function isProcessRunning()
+{
+	if busybox [ $# -ne 1 ]; then
+		return 1
+	fi
+	
+	PROCESS=$1
+	
+	PROCESSES=(` ps | busybox awk '{print $9}' `);
+	for p in ${PROCESSES[*]}; do
+		if busybox [ "$p" = "$PROCESS" ]; then
+			return 0
+		fi
+	done
+	return 1
+}
+
+: ' =========================================================
+ function name: isSdPresent
+ parameters: void
+ returns: 0: SD card is present
+          1: SD card is not present
+ description:
+    Checks if SD card is mounted
+============================================================= '
+function isSdPresent()
+{
+	if busybox [ -z "$( busybox mount | busybox grep /sdcard )" ]; then
+		return 1
+	fi
+	return 0
+}
+
+: ' =========================================================
+ function name: runtime
+ parameters: $1 - Start time of task
+             $2 - End time of task
+ returns: task runtime
+ description:
+    Prints runtime of a task
+============================================================= '
+function runtime()
+{
+	START=$1
+	STOP=$2
+	
+	RUNTIME=` busybox expr $STOP - $START`
+	HOURS=` busybox expr $RUNTIME / 3600`
+	REMAINDER=` busybox expr $RUNTIME % 3600`
+	MINS=` busybox expr $REMAINDER / 60`
+	SECS=` busybox expr $REMAINDER % 60`
+	busybox printf "%02d:%02d:%02d\n" "$HOURS" "$MINS" "$SECS"
+}
+
+: ' =========================================================
+ function name: setProp
+ parameters: $1 - Key
+             $2 - Value
+			 $3 - File
+ returns: void
+ description:
+    Sets build properties
+============================================================= '
+function setProp()
+{
+	if busybox [ $# -lt 2 ]; then
+		return
+	fi
+	
+	KEY=$1
+	VALUE=$2
+	PROP_FILE=${3:-/system/build.prop}
+	SEPERATOR="="
+	LINE=""
+	
+	if busybox [ -f $PROP_FILE ]; then
+		LINE=` busybox grep $KEY $PROP_FILE `
+		if busybox [ -n "${LINE}" ]; then
+			if busybox [ -n "$( echo $LINE | busybox grep ' = ' )" ]; then
+				SEPERATOR=" = "
+			fi
+			busybox sed -i "s|${KEY}${SEPERATOR}.*|${KEY}${SEPERATOR}${VALUE}|" $PROP_FILE
+		fi
+	else
+		echo "$PROP_FILE  does not exist"
+	fi
+	setprop $KEY $VALUE
+}
+
+: ' =========================================================
+ function name: sysro
+ parameters: void
+ returns: void
+ description:
+    Mounts system read-only
+============================================================= '
+function sysro()
+{
+	busybox mount -o remount,ro /system
+}
+
+: ' =========================================================
+ function name: sysrw
+ parameters: void
+ returns: void
+ description:
+    Mounts system rear/write
+============================================================= '
+function sysrw()
+{
+	busybox mount -o remount,rw /system
+}
+
+: ' =========================================================
+ function name: zipalign_apks
+ parameters: void
+ returns: void
+ description:
+    Checks for unaligned apks and aligns them.
+============================================================= '
+function zipalign_apks()
+{
+	if busybox [ -z "$( busybox which zipalign )" ]; then
+		echo "Error: zipalign binary missing."
+		return
+	fi
+
+	START=` busybox date +%s `
+	CODEPATH=(` pm list packages -f | busybox cut -d ':' -f2 | busybox cut -d '=' -f1 `);
+	MAX=${#CODEPATH[*]}
+	INCREMENT=5
+	PROGRESS=0
+	PROGRESS_BAR=""
+
+	echo
+	echo "Zipaligning..."
+	echo
+
+	busybox mount -o remount,rw /system
+	
+	for codepath in ${CODEPATH[*]}; do
+		
+		let PROGRESS++
+		PERCENT=$(( $PROGRESS * 100 / $MAX))
+		if busybox [ $PERCENT -eq $INCREMENT ]; then
+			INCREMENT=$(( $INCREMENT + 5 ))
+			PROGRESS_BAR="${PROGRESS_BAR}="
+		fi
+		
+		echo -ne "  \r  ${PROGRESS}/${MAX} ${PERCENT}% [ ${PROGRESS_BAR}> ]"
+		
+		if busybox [ -e $codepath ]; then
+			zipalign -c 4 $codepath
+			ZIP_CHECK=$?
+			case $ZIP_CHECK in
+				1)
+					if zipalign -f 4 $codepath /data/local/pkg.apk; then
+						busybox cp -f /data/local/pkg.apk $codepath
+						busybox rm -f /data/local/pkg.apk
+					fi
+				;;
+			esac
+		fi
+
+	done
+	
+	busybox mount -o remount,ro /system
+	sync
+
+	STOP=` busybox date +%s `
+	RUNTIME=` runtime $START $STOP `
+	echo
+	echo
+	echo "Zipalign complete! Runtime: ${RUNTIME}"
+	echo
+}
\ No newline at end of file