[Galaxy S II General] bombaybadboy:
When i first started to decompile apks From I9100 4.1.2 Jellybean deodexed Roms for Mods + Basic themes i found Threads Scattered All over XDA and thought someone should put them together or at least add links. Im Sure there are better ways with some of these mods but the ones i will post work and have used them all myself. This is my First Thread Attempt and i will make it as noob friendly as i can. Also any suggestions how to improve this guide or any other the Mods I post would be welcome because i only no what i have read from other threads. Im Not a developer im a Noob just like most of us here but with the great guides on XDA i Have learned a lot

First I want to Thank the Members that have Posted these Guides And have Helped me

wanam

lidroid

Mirko ddd

majdinj

shoman94

Goldieking

salesale

engloa

Spannaa

Churapa

Didact74

mythtrandyr

Please dont PM the devs with Questions as there busy with there own Mods. Just POST on there thread or this thread if you like

Please as my First thread im trying to do things right and give credit where it is due so if i have missed anyone please Pm me and i will correctly add,

Thankyou Also im not doing this for Thanks or Donations, so Please Thank the members above who made this guide possible

Ok Lets Start

Im Not here to teach you how to decompile there are threads for that which i will link Here

First you will need your basic tools

These you can choose from and find what suits you ApkMultitool Dont forget to add your SystemUI.apk+framework-res.apk+twframework-res.apk to others file

Before you run setup

or you may want to use Apktool And here is a Guide you will also need SDK And Very Important Java

Editing Tools

Notepad++

I use Paint.Net But you can also use Gimp For Image Editing

If you need More Information on decompiling and editing look at this Ultimate Guide[Decompiling][9 pngs][Theming] By iamareebjamal

Please remember to thank iamareebjamal for his work

Click here for How To Make a Log of your Error Guide

Please remember to thank Stryke_the_Orc for his work

Ok finally you are ready to start, i will start with simple Mods

Wallpaper Scroll

Decompile SecLauncher2.apk

Go to \res\values folder and open bools.xml file with Notepad++.

Then change code indicated in Red To Blue

<bool name="config_fixedWallpaperOffset">[COLOR="Red"]true[/COLOR]</bool>

To:

<bool name="config_fixedWallpaperOffset">[COLOR="Blue"]false[/COLOR]</bool>

Save the file, recompile and push the apk to your phone.

See Easy:fingers-crossed:

4 Lockscreen Shortcuts

Decompile SecSettings.apk and go to smali/com/android/settings/lockscreenshortcut/LockScreenShortcutSettings.smali

Open this file with notpad++ and change the followingRedLines to Blue

# direct methods
.method static constructor ()V
.locals 2

.prologue
const/4 v1, 0x0

.line 79
[COLOR="Red"][B]const/4 v0, 0x3[/B][/COLOR]

sput v0, Lcom/android/settings/lockscreenshortcut/LockScreenShortcutSettings;->MAX_SHORTCUT_ICON:I

To:

# direct methods
.method static constructor ()V
.locals 2

.prologue
const/4 v1, 0x0

.line 79
[B][COLOR="Blue"]const/4 v0, 0x4[/COLOR][/B]

sput v0, Lcom/android/settings/lockscreenshortcut/LockScreenShortcutSettings;->MAX_SHORTCUT_ICON:I

Recompile and Done:)

There is also a guide for 5 Lockscreen shortcuts by Mirko dddHere

Water Ripple Effect+Toggle

android.policy.jar

com/android/internal/policy/impl/sec/CircleLockScreen.smali

.line 543
.local v20, isRippleEffect:Z
:goto_306
if-nez v18, :cond_61f

if-eqz v22, :cond_61f

if-eqz v20, :cond_61f

const/4 v3, 0x1

:goto_30d

After

.line 543
.local v20, isRippleEffect:Z
:goto_306
if-nez v18, :cond_61f

[COLOR="Red"]# if-eqz v22, :cond_61f[/COLOR]

if-eqz v20, :cond_61f

const/4 v3, 0x1

:goto_30d

Now for the Toggle

Secsettings.apk

com/android/settings/LockScreenSettings.smali

.line 253
:cond_28b
invoke-virtual {p0}, Lcom/android/settings/LockScreenSettings;->getPreferenceScreen()Landroid/preference/PreferenceScreen;

move-result-object v9

iget-object v10, p0, Lcom/android/settings/LockScreenSettings;->mRippleEffect:Landroid/preference/CheckBoxPreference;

invoke-virtual {v9, v10}, Landroid/preference/PreferenceScreen;->removePreference(Landroid/preference/Preference;)Z

After:

.line 253
:cond_28b
invoke-virtual {p0}, Lcom/android/settings/LockScreenSettings;->getPreferenceScreen()Landroid/preference/PreferenceScreen;

move-result-object v9

iget-object v10, p0, Lcom/android/settings/LockScreenSettings;->mRippleEffect:Landroid/preference/CheckBoxPreference;

[COLOR="Red"]# invoke-virtual {v9, v10}, Landroid/preference/PreferenceScreen;->removePreference(Landroid/preference/Preference;)Z
[/COLOR]

Recompile and done:)

Aosp Lockscreen+Toggle

There is already a great Guide for this by Mirko ddd Here Please dont forget to thank Him for his work

Aosp Lockscreen Guide

Works Great

EdgeZoom

Thanks to Shoman94

Decompileframework.jar

\framework\smali\android\view\ScaleGestureDetector .smali

Find

[B].method public onTouchEvent(Landroid/view/MotionEvent;)Z[/B]

Replace that entire method with this:

.method public onTouchEvent(Landroid/view/MotionEvent;)Z
.locals 26
.parameter "event"

.prologue
.line 207
move-object/from16 v0, p0

iget-object v0, v0, Landroid/view/ScaleGestureDetector;->mInputEventConsistencyVerifier:Landroid/view/InputEventConsistencyVerifier;

move-object/from16 v24, v0

if-eqz v24, :cond_0

.line 208
move-object/from16 v0, p0

iget-object v0, v0, Landroid/view/ScaleGestureDetector;->mInputEventConsistencyVerifier:Landroid/view/InputEventConsistencyVerifier;

move-object/from16 v24, v0

const/16 v25, 0x0

move-object/from16 v0, v24

move-object/from16 v1, p1

move/from16 v2, v25

invoke-virtual {v0, v1, v2}, Landroid/view/InputEventConsistencyVerifier;->onTouchEvent(Landroid/view/MotionEvent;I)V

.line 213
:cond_0
move-object/from16 v0, p0

iget-boolean v0, v0, Landroid/view/ScaleGestureDetector;->mValidPackage:Z

move/from16 v24, v0

if-eqz v24, :cond_1

invoke-direct/range {p0 .. p1}, Landroid/view/ScaleGestureDetector;->onEdgeTouchEvent(Landroid/view/MotionEvent;)Z

move-result v24

if-eqz v24, :cond_1

const/16 v24, 0x1

.line 310
:goto_0
return v24

.line 213
:cond_1
invoke-virtual/range {p1 .. p1}, Landroid/view/MotionEvent;->getActionMasked()I

move-result v3

.line 215
.local v3, action:I
const/16 v24, 0x1

move/from16 v0, v24

if-eq v3, v0, :cond_2

const/16 v24, 0x3

move/from16 v0, v24

if-ne v3, v0, :cond_5

:cond_2
const/16 v19, 0x1

.line 217
.local v19, streamComplete:Z
:goto_1
if-eqz v3, :cond_3

if-eqz v19, :cond_6

.line 221
:cond_3
move-object/from16 v0, p0

iget-boolean v0, v0, Landroid/view/ScaleGestureDetector;->mInProgress:Z

move/from16 v24, v0

if-eqz v24, :cond_4

.line 222
move-object/from16 v0, p0

iget-object v0, v0, Landroid/view/ScaleGestureDetector;->mListener:Landroid/view/ScaleGestureDetector$OnScaleGestureListener;

move-object/from16 v24, v0

move-object/from16 v0, v24

move-object/from16 v1, p0

invoke-interface {v0, v1}, Landroid/view/ScaleGestureDetector$OnScaleGestureListener;->onScaleEnd(Landroid/view/ScaleGestureDetector;)V

.line 223
const/16 v24, 0x0

move/from16 v0, v24

move-object/from16 v1, p0

iput-boolean v0, v1, Landroid/view/ScaleGestureDetector;->mInProgress:Z

.line 224
const/16 v24, 0x0

move/from16 v0, v24

move-object/from16 v1, p0

iput v0, v1, Landroid/view/ScaleGestureDetector;->mInitialSpan:F

.line 227
:cond_4
if-eqz v19, :cond_6

.line 228
const/16 v24, 0x1

goto :goto_0

.line 215
.end local v19 #streamComplete:Z
:cond_5
const/16 v19, 0x0

goto :goto_1

.line 232
.restart local v19 #streamComplete:Z
:cond_6
const/16 v24, 0x6

move/from16 v0, v24

if-eq v3, v0, :cond_7

const/16 v24, 0x5

move/from16 v0, v24

if-ne v3, v0, :cond_8

:cond_7
const/4 v4, 0x1

.line 235
.local v4, configChanged:Z
:goto_2
const/16 v24, 0x6

move/from16 v0, v24

if-ne v3, v0, :cond_9

const/4 v14, 0x1

.line 236
.local v14, pointerUp:Z
:goto_3
if-eqz v14, :cond_a

invoke-virtual/range {p1 .. p1}, Landroid/view/MotionEvent;->getActionIndex()I

move-result v15

.line 239
.local v15, skipIndex:I
:goto_4
const/16 v20, 0x0

.local v20, sumX:F
const/16 v21, 0x0

.line 240
.local v21, sumY:F
invoke-virtual/range {p1 .. p1}, Landroid/view/MotionEvent;->getPointerCount()I

move-result v5

.line 241
.local v5, count:I
const/4 v13, 0x0

.local v13, i:I
:goto_5
if-ge v13, v5, :cond_c

.line 242
if-ne v15, v13, :cond_b

.line 241
:goto_6
add-int/lit8 v13, v13, 0x1

goto :goto_5

.line 232
.end local v4 #configChanged:Z
.end local v5 #count:I
.end local v13 #i:I
.end local v14 #pointerUp:Z
.end local v15 #skipIndex:I
.end local v20 #sumX:F
.end local v21 #sumY:F
:cond_8
const/4 v4, 0x0

goto :goto_2

.line 235
.restart local v4 #configChanged:Z
:cond_9
const/4 v14, 0x0

goto :goto_3

.line 236
.restart local v14 #pointerUp:Z
:cond_a
const/4 v15, -0x1

goto :goto_4

.line 243
.restart local v5 #count:I
.restart local v13 #i:I
.restart local v15 #skipIndex:I
.restart local v20 #sumX:F
.restart local v21 #sumY:F
:cond_b
move-object/from16 v0, p1

invoke-virtual {v0, v13}, Landroid/view/MotionEvent;->getX(I)F

move-result v24

add-float v20, v20, v24

.line 244
move-object/from16 v0, p1

invoke-virtual {v0, v13}, Landroid/view/MotionEvent;->getY(I)F

move-result v24

add-float v21, v21, v24

goto :goto_6

.line 246
:cond_c
if-eqz v14, :cond_d

add-int/lit8 v10, v5, -0x1

.line 247
.local v10, div:I
:goto_7
int-to-float v0, v10

move/from16 v24, v0

div-float v11, v20, v24

.line 248
.local v11, focusX:F
int-to-float v0, v10

move/from16 v24, v0

div-float v12, v21, v24

.line 251
.local v12, focusY:F
const/4 v6, 0x0

.local v6, devSumX:F
const/4 v7, 0x0

.line 252
.local v7, devSumY:F
const/4 v13, 0x0

:goto_8
if-ge v13, v5, :cond_f

.line 253
if-ne v15, v13, :cond_e

.line 252
:goto_9
add-int/lit8 v13, v13, 0x1

goto :goto_8

.end local v6 #devSumX:F
.end local v7 #devSumY:F
.end local v10 #div:I
.end local v11 #focusX:F
.end local v12 #focusY:F
:cond_d
move v10, v5

.line 246
goto :goto_7

.line 254
.restart local v6 #devSumX:F
.restart local v7 #devSumY:F
.restart local v10 #div:I
.restart local v11 #focusX:F
.restart local v12 #focusY:F
:cond_e
move-object/from16 v0, p1

invoke-virtual {v0, v13}, Landroid/view/MotionEvent;->getX(I)F

move-result v24

sub-float v24, v24, v11

invoke-static/range {v24 .. v24}, Ljava/lang/Math;->abs(F)F

move-result v24

add-float v6, v6, v24

.line 255
move-object/from16 v0, p1

invoke-virtual {v0, v13}, Landroid/view/MotionEvent;->getY(I)F

move-result v24

sub-float v24, v24, v12

invoke-static/range {v24 .. v24}, Ljava/lang/Math;->abs(F)F

move-result v24

add-float v7, v7, v24

goto :goto_9

.line 257
:cond_f
int-to-float v0, v10

move/from16 v24, v0

div-float v8, v6, v24

.line 258
.local v8, devX:F
int-to-float v0, v10

move/from16 v24, v0

div-float v9, v7, v24

.line 263
.local v9, devY:F
const/high16 v24, 0x4000

mul-float v17, v8, v24

.line 264
.local v17, spanX:F
const/high16 v24, 0x4000

mul-float v18, v9, v24

.line 265
.local v18, spanY:F
mul-float v24, v17, v17

mul-float v25, v18, v18

add-float v24, v24, v25

invoke-static/range {v24 .. v24}, Landroid/util/FloatMath;->sqrt(F)F

move-result v16

.line 270
.local v16, span:F
move-object/from16 v0, p0

iget-boolean v0, v0, Landroid/view/ScaleGestureDetector;->mInProgress:Z

move/from16 v23, v0

.line 271
.local v23, wasInProgress:Z
move-object/from16 v0, p0

iput v11, v0, Landroid/view/ScaleGestureDetector;->mFocusX:F

.line 272
move-object/from16 v0, p0

iput v12, v0, Landroid/view/ScaleGestureDetector;->mFocusY:F

.line 273
move-object/from16 v0, p0

iget-boolean v0, v0, Landroid/view/ScaleGestureDetector;->mInProgress:Z

move/from16 v24, v0

if-eqz v24, :cond_11

const/16 v24, 0x0

cmpl-float v24, v16, v24

if-eqz v24, :cond_10

if-eqz v4, :cond_11

.line 274
:cond_10
move-object/from16 v0, p0

iget-object v0, v0, Landroid/view/ScaleGestureDetector;->mListener:Landroid/view/ScaleGestureDetector$OnScaleGestureListener;

move-object/from16 v24, v0

move-object/from16 v0, v24

move-object/from16 v1, p0

invoke-interface {v0, v1}, Landroid/view/ScaleGestureDetector$OnScaleGestureListener;->onScaleEnd(Landroid/view/ScaleGestureDetector;)V

.line 275
const/16 v24, 0x0

move/from16 v0, v24

move-object/from16 v1, p0

iput-boolean v0, v1, Landroid/view/ScaleGestureDetector;->mInProgress:Z

.line 276
move/from16 v0, v16

move-object/from16 v1, p0

iput v0, v1, Landroid/view/ScaleGestureDetector;->mInitialSpan:F

.line 278
:cond_11
if-eqz v4, :cond_12

.line 279
move/from16 v0, v17

move-object/from16 v1, p0

iput v0, v1, Landroid/view/ScaleGestureDetector;->mCurrSpanX:F

move/from16 v0, v17

move-object/from16 v1, p0

iput v0, v1, Landroid/view/ScaleGestureDetector;->mPrevSpanX:F

.line 280
move/from16 v0, v18

move-object/from16 v1, p0

iput v0, v1, Landroid/view/ScaleGestureDetector;->mCurrSpanY:F

move/from16 v0, v18

move-object/from16 v1, p0

iput v0, v1, Landroid/view/ScaleGestureDetector;->mPrevSpanY:F

.line 281
move/from16 v0, v16

move-object/from16 v1, p0

iput v0, v1, Landroid/view/ScaleGestureDetector;->mCurrSpan:F

move/from16 v0, v16

move-object/from16 v1, p0

iput v0, v1, Landroid/view/ScaleGestureDetector;->mPrevSpan:F

move/from16 v0, v16

move-object/from16 v1, p0

iput v0, v1, Landroid/view/ScaleGestureDetector;->mInitialSpan:F

.line 283
:cond_12
move-object/from16 v0, p0

iget-boolean v0, v0, Landroid/view/ScaleGestureDetector;->mInProgress:Z

move/from16 v24, v0

if-nez v24, :cond_14

const/16 v24, 0x0

cmpl-float v24, v16, v24

if-eqz v24, :cond_14

if-nez v23, :cond_13

move-object/from16 v0, p0

iget v0, v0, Landroid/view/ScaleGestureDetector;->mInitialSpan:F

move/from16 v24, v0

sub-float v24, v16, v24

invoke-static/range {v24 .. v24}, Ljava/lang/Math;->abs(F)F

move-result v24

move-object/from16 v0, p0

iget v0, v0, Landroid/view/ScaleGestureDetector;->mSpanSlop:I

move/from16 v25, v0

move/from16 v0, v25

int-to-float v0, v0

move/from16 v25, v0

cmpl-float v24, v24, v25

if-lez v24, :cond_14

.line 285
:cond_13
move/from16 v0, v17

move-object/from16 v1, p0

iput v0, v1, Landroid/view/ScaleGestureDetector;->mCurrSpanX:F

move/from16 v0, v17

move-object/from16 v1, p0

iput v0, v1, Landroid/view/ScaleGestureDetector;->mPrevSpanX:F

.line 286
move/from16 v0, v18

move-object/from16 v1, p0

iput v0, v1, Landroid/view/ScaleGestureDetector;->mCurrSpanY:F

move/from16 v0, v18

move-object/from16 v1, p0

iput v0, v1, Landroid/view/ScaleGestureDetector;->mPrevSpanY:F

.line 287
move/from16 v0, v16

move-object/from16 v1, p0

iput v0, v1, Landroid/view/ScaleGestureDetector;->mCurrSpan:F

move/from16 v0, v16

move-object/from16 v1, p0

iput v0, v1, Landroid/view/ScaleGestureDetector;->mPrevSpan:F

.line 288
move-object/from16 v0, p0

iget-object v0, v0, Landroid/view/ScaleGestureDetector;->mListener:Landroid/view/ScaleGestureDetector$OnScaleGestureListener;

move-object/from16 v24, v0

move-object/from16 v0, v24

move-object/from16 v1, p0

invoke-interface {v0, v1}, Landroid/view/ScaleGestureDetector$OnScaleGestureListener;->onScaleBegin(Landroid/view/ScaleGestureDetector;)Z

move-result v24

move/from16 v0, v24

move-object/from16 v1, p0

iput-boolean v0, v1, Landroid/view/ScaleGestureDetector;->mInProgress:Z

.line 289
const-string v24, "ScaleGestureDetector"

const-string v25, "SGD"

invoke-static/range {v24 .. v25}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I

.line 293
:cond_14
const/16 v24, 0x2

move/from16 v0, v24

if-ne v3, v0, :cond_16

.line 294
move/from16 v0, v17

move-object/from16 v1, p0

iput v0, v1, Landroid/view/ScaleGestureDetector;->mCurrSpanX:F

.line 295
move/from16 v0, v18

move-object/from16 v1, p0

iput v0, v1, Landroid/view/ScaleGestureDetector;->mCurrSpanY:F

.line 296
move/from16 v0, v16

move-object/from16 v1, p0

iput v0, v1, Landroid/view/ScaleGestureDetector;->mCurrSpan:F

.line 298
const/16 v22, 0x1

.line 299
.local v22, updatePrev:Z
move-object/from16 v0, p0

iget-boolean v0, v0, Landroid/view/ScaleGestureDetector;->mInProgress:Z

move/from16 v24, v0

if-eqz v24, :cond_15

.line 300
move-object/from16 v0, p0

iget-object v0, v0, Landroid/view/ScaleGestureDetector;->mListener:Landroid/view/ScaleGestureDetector$OnScaleGestureListener;

move-object/from16 v24, v0

move-object/from16 v0, v24

move-object/from16 v1, p0

invoke-interface {v0, v1}, Landroid/view/ScaleGestureDetector$OnScaleGestureListener;->onScale(Landroid/view/ScaleGestureDetector;)Z

move-result v22

.line 303
:cond_15
if-eqz v22, :cond_16

.line 304
move-object/from16 v0, p0

iget v0, v0, Landroid/view/ScaleGestureDetector;->mCurrSpanX:F

move/from16 v24, v0

move/from16 v0, v24

move-object/from16 v1, p0

iput v0, v1, Landroid/view/ScaleGestureDetector;->mPrevSpanX:F

.line 305
move-object/from16 v0, p0

iget v0, v0, Landroid/view/ScaleGestureDetector;->mCurrSpanY:F

move/from16 v24, v0

move/from16 v0, v24

move-object/from16 v1, p0

iput v0, v1, Landroid/view/ScaleGestureDetector;->mPrevSpanY:F

.line 306
move-object/from16 v0, p0

iget v0, v0, Landroid/view/ScaleGestureDetector;->mCurrSpan:F

move/from16 v24, v0

move/from16 v0, v24

move-object/from16 v1, p0

iput v0, v1, Landroid/view/ScaleGestureDetector;->mPrevSpan:F

.line 310
.end local v22 #updatePrev:Z
:cond_16
const/16 v24, 0x1

goto/16 :goto_0
.end method

Recompile and Done

You can thank shoman94 on 3rd post Here

% Battery-icons

Ok i will try and give you the basic idea for status bar theming

Here is a few ready made battery icons with stat_battery.xml and stat_battery_charge.xml Put together by majdinj

First Decompile SystemUI.apk

Choose the battery icons file you would like to use

Then go to /res/drawable and look for stat_sys_battery and stat_sys_battery_charge you will find replacements in the chosen battery folder Now replace them

Next go to /res/drawable-hdpi and copy all png icons into that folder

If you want to change colour of your clock then go to \res\layout\tw_status_bar

Look for hex code in Red and edit

<com.android.systemui.statusbar.policy.Clock android:textSize="@dimen/status_bar_clock_text_size" android:textColor="[COLOR="Red"]#ff959595[/COLOR]" android:ellipsize="none" android:gravity="left|center" android:id="@id/clock" android:paddingLeft="3.0dip" android:layout_width="wrap_content" android:layout_height="fill_parent" android:singleLine="true" android:includeFontPadding="false" />

Change Hex Highlighted in Red to Colour you Like

If you want to edit time and date in Pulldown then go to \res\layout\tw_status_bar_expanded_header

Look for these lines

Changes clock and

<com.android.systemui.statusbar.policy.Clock android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Clock" android:textColor="#ffffffff" android:id="@id/clock" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="4.0dip" android:layout_marginTop="-3.0dip" android:singleLine="true" systemui:ampmSmall="true" />

Changes Date

<com.android.systemui.statusbar.policy.DateView android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Date" android:textColor="#ffcbcbcb" android:ellipsize="none" android:id="@id/date" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="8.0dip" android:layout_marginRight="4.0dip"

If you want to change colour of statusbar then you have 2 ways, 1st way go to \res\layout\tw_status_bar

and edit

<com.android.systemui.statusbar.phone.PhoneStatusBarView android:orientation="vertical" android:id="@id/status_bar" android:background="[COLOR="Red"]@drawable/status_bar_background[/COLOR]" android:focusable="true" android:fitsSystemWindows="true" android:descendantFocusability="afterDescendants"

Add Hex Highlighted in Red

Or go to res/values/drawables.xml and look for

<item type="drawable" name="status_bar_background">[COLOR="Red"]#ff000000[/COLOR]</item>

edit code in red to whatever colour you like This colour tool will help you or just use png editing tools provided in first post

#FF****** ( Opaque ) #00****** (Transparent )

Proper home button lagfix

Already A Good Guide Here by Mirko ddd

Please Remember To Thanks Mirko ddd For His Guide

Potential Media Scanner Fix

Already a Good Guide Here by shoman94

Please Remember To Thanks shoman94 For His Guide

CRT-OFF

Already A Good Guide Here by Mirko ddd

Please Remember To Thanks Mirko ddd For His Guide

CRT-OFF+ Toggle

Already a Good Guide Here by shoman94

Please Remember To Thanks shoman94 For His Guide

Back to kill

Already A Good Guide Here by Mirko ddd

Please Remember To Thanks Mirko ddd For His Guide

More Info on PNG editing by HighlanderZA

Some Extra Useful Information Guides From HighlanderZA editing by HighlanderZA

Until i can change from PDF Files you will need Adobe Reader XI To Read but worth looking at