South Park The Fractured But Whole

Upload your cheat tables here (No requests)
User avatar
l0wb1t
Table Makers
Table Makers
Posts: 395
Joined: Mon May 29, 2017 4:16 pm
Reputation: 282

Re: South Park The Fractured But Whole

Post by l0wb1t »

popemichael wrote:
Fri Oct 27, 2017 4:32 am
It seems that Steam just pushed out an update. None of the tables I've used work at the moment.

I tried working on one of the tables, but I've not been able to get either one to work. My skillset on these are WAY rusty.
Let's see if cracked version got an update too. Then i will update the table

Edit: No Update atm.

Try This (when using my Table)

Open CE and my Script (Main Code)
check the bytes behind all aobscanmodule stuff.

You should find these:
aobscanmodule(_Health,SouthPark_TFBW.exe,83 78 24 00 0F 9E C0 C3) // should be unique
aobscanmodule(_Money,SouthPark_TFBW.exe,FD FF 4C 8B C0 8B 0B 41 89 08)
aobscanmodule(_OneHitKills,SouthPark_TFBW.exe,83 7E 24 00 40 0F 9E C7)
aobscanmodule(_Teleport,SouthPark_TFBW.exe,F3 0F 10 A3 80 00 00 00 F3 0F 10 AB 84)
aobscanmodule(_EnemyTeleport,SouthPark_TFBW.exe,F3 44 0F 10 88 80 00 00 00 * * * * A0)
aobscanmodule(_MassiveItemsCrafting,SouthPark_TFBW.exe,C7 8B 41 0C 89 43 0C)
aobscanmodule(_ShitOMeter,SouthPark_TFBW.exe,8B 02 89 01 F3 C3 CC CC CC CC CC E9 8B)
aobscanmodule(_Experience,SouthPark_TFBW.exe,8B 98 28 12 00 00)
aobscanmodule(_PowerBar,SouthPark_TFBW.exe,F3 0F 10 71 08 E8 71)
aobscanmodule(_FartOMeter,SouthPark_TFBW.exe,8B 02 89 01 F3 C3 CC CC CC CC CC E9 1B)
aobscanmodule(_CraftingExp,SouthPark_TFBW.exe,8B 81 3C 12 00 00)

Now copy all byte patterns one by one and paste into CE like this:

Important: Select Array Of BYtes Scan (Don't forget to click on the "Writeable" box, else it won't find anything)
Image

Now check which Pattern scan fails, when you found nothing it means the pattern is broken, probably offsets shifted)

Tell me results here please

How to use this cheat table?
  1. Install Cheat Engine
  2. Double-click the .CT file in order to open it.
  3. Click the PC icon in Cheat Engine in order to select the game process.
  4. Keep the list.
  5. Activate the trainer options by checking boxes or setting values from 0 to 1

DuncanId
Noobzor
Noobzor
Posts: 7
Joined: Fri Oct 27, 2017 12:05 pm
Reputation: 3

Re: South Park The Fractured But Whole

Post by DuncanId »

l0wb1t wrote:
Fri Oct 27, 2017 7:47 am

Now check which Pattern scan fails, when you found nothing it means the pattern is broken, probably offsets shifted)

Tell me results here please
ShitOMeter, Experience and Powerbar are the patterns failing

User avatar
l0wb1t
Table Makers
Table Makers
Posts: 395
Joined: Mon May 29, 2017 4:16 pm
Reputation: 282

Re: South Park The Fractured But Whole

Post by l0wb1t »

ok, i can remove this so the table work again without those features

User avatar
Kalas
Expert Cheater
Expert Cheater
Posts: 551
Joined: Fri Mar 03, 2017 9:49 am
Reputation: 134

Re: South Park The Fractured But Whole

Post by Kalas »

I got some stuff as well, I'm just having that annoying issue combining them haha, so just use those AOB's

Code: Select all

aobscanmodule(_HeroHealth,SouthPark_TFBW.exe,66 0F 6E 43 24 0F)
aobscanmodule(OneHitKill,SouthPark_TFBW.exe,89 46 24 89 4C 24 58)
aobscanmodule(_Money,SouthPark_TFBW.exe,8B 4D 0C 48 8B 45 18)
aobscanmodule(_ItemsInCrafting,SouthPark_TFBW.exe,C7 8B 41 0C 89 43 0C)
aobscanmodule(_CrafterRank,SouthPark_TFBW.exe,89 83 DC 00 00 00 E8)
Full code:

Code: Select all

{ Game   : SouthPark_TFBW.exe
  Version: 
  Date   : 2017-10-27
  Author : Kalas

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(_HeroHealth,SouthPark_TFBW.exe,66 0F 6E 43 24 0F)
aobscanmodule(OneHitKill,SouthPark_TFBW.exe,89 46 24 89 4C 24 58)
aobscanmodule(_Money,SouthPark_TFBW.exe,8B 4D 0C 48 8B 45 18)
aobscanmodule(_ItemsInCrafting,SouthPark_TFBW.exe,C7 8B 41 0C 89 43 0C)
aobscanmodule(_CrafterRank,SouthPark_TFBW.exe,89 83 DC 00 00 00 E8)
alloc(newmemA,$1000,SouthPark_TFBW.exe)
alloc(newmemB,$1000,SouthPark_TFBW.exe)
alloc(newmemC,$1000,SouthPark_TFBW.exe)
alloc(newmemD,$1000,SouthPark_TFBW.exe)
alloc(newmemE,$1000,SouthPark_TFBW.exe)

alloc(SetHealth, 08)
alloc(OHKSet, 08)
alloc(MoneySet, 08)
alloc(ItemsSet, 08)
alloc(ptrBase, 08)
alloc(RankSet, 08)

registersymbol(SetHealth)
registersymbol(OHKSet)
registersymbol(MoneySet)
registersymbol(ItemsSet)
registersymbol(ptrBase)
registersymbol(RankSet)

label(codeA)
label(returnA)
label(codeB)
label(returnB)
label(HeroCheck)
label(codeC)
label(returnC)
label(codeD)
label(returnD)
label(codeE)
label(returnE)

// Health //

newmemA:
  cmp dword ptr [SetHealth], 0
  je @f
  fld [rbx+20]
  fstp [rbx+24]

codeA:
  movd xmm0,[rbx+24]
  jmp returnA

_HeroHealth:
  jmp newmemA
returnA:
registersymbol(_HeroHealth)

// OHK //

newmemB:
  cmp rax, 39
  je @f
  jmp HeroCheck

@@:
  cmp dword ptr [OHKSet], 0
  je @f
  mov eax, 0

codeB:
  mov [rsi+24],eax
  mov [rsp+58],ecx
  jmp returnB

HeroCheck:
  mov [rsi+24],eax
  jmp returnB

OneHitKill:
  jmp newmemB
  nop
  nop
returnB:
registersymbol(OneHitKill)

// Money //

newmemC:
  cmp dword ptr [MoneySet], 0
  je @f
  mov [rbp+0C], #999999

codeC:
  mov ecx,[rbp+0C]
  mov rax,[rbp+18]
  jmp returnC

_Money:
  jmp newmemC
  nop
  nop
returnC:
registersymbol(_Money)

// ItemsInCraftingArea //

newmemD:
  cmp dword ptr [ItemsSet], 0
  je @f
  mov [rcx+0C], #99

codeD:
  mov eax,[rcx+0C]
  mov [rbx+0C],eax
  jmp returnD

_ItemsInCrafting+01:
  jmp newmemD
  nop
returnD:
registersymbol(_ItemsInCrafting)

// Crafter Rank //

newmemE:
  mov [ptrBase], rbx

  cmp dword ptr [RankSet], 0
  je @f
  add eax, #9999

codeE:
  mov [rbx+000000DC],eax
  jmp returnE

_CrafterRank:
  jmp newmemE
  nop
returnE:
registersymbol(_CrafterRank)

// Define Data //

SetHealth:
  dd 0

OHKSet:
  dd 0

MoneySet:
  dd 0

ItemsSet:
  dd 0

ptrBase:
  dd 0

RankSet:
  dd 0

[DISABLE]

_HeroHealth:
  db 66 0F 6E 43 24
OneHitKill:
  db 89 46 24 89 4C 24 58
_Money:
  db 8B 4D 0C 48 8B 45 18
_CrafterRank:
  db 89 83 DC 00 00 00

unregistersymbol(_HeroHealth)
unregistersymbol(OneHitKill)
unregistersymbol(_Money)
unregistersymbol(_ItemsInCrafting)
unregistersymbol(_CrafterRank)

dealloc(newmemA)
dealloc(newmemB)
dealloc(newmemC)
dealloc(newmemD)
dealloc(newmemE)

unregistersymbol(SetHealth)
unregistersymbol(OHKSet)
unregistersymbol(MoneySet)
unregistersymbol(ItemsSet)
unregistersymbol(ptrBase)
unregistersymbol(RankSet)

dealloc(SetHealth)
dealloc(OHKSet)
dealloc(MoneySet)
dealloc(ItemsSet)
dealloc(ptrBase)
dealloc(RankSet)
If someone here can tell me why merging like this is not correct as for the reason that I can enable one time but not again, only after a game restart.

Draeyon
What is cheating?
What is cheating?
Posts: 2
Joined: Sat Oct 28, 2017 5:37 am
Reputation: 0

Re: South Park The Fractured But Whole

Post by Draeyon »

I know you can do it in game but is there a possibility of changing your class?
Wanted to do a fresh play through as a martial artist from the start.

User avatar
popemichael
Noobzor
Noobzor
Posts: 14
Joined: Fri Mar 10, 2017 7:39 pm
Reputation: 0

Re: South Park The Fractured But Whole

Post by popemichael »

I found another table

I deleted out all of the non-working things and tested it. It may be something to hold us over until someone has some time to make something better work...

All it has is unlimited health and unlimited money.
Attachments
SouthPark_TFBW (unlimited health and money).CT
(5.71 KiB) Downloaded 372 times

User avatar
Kalas
Expert Cheater
Expert Cheater
Posts: 551
Joined: Fri Mar 03, 2017 9:49 am
Reputation: 134

Re: South Park The Fractured But Whole

Post by Kalas »

popemichael wrote:
Sat Oct 28, 2017 5:47 am


I deleted out all of the non-working things and tested it. It may be something to hold us over until someone has some time to make something better work...

All it has is unlimited health and unlimited money.
Well if you look in the codes inside, It's STN's Table.

No wonder that guy has 70k posts, he just copy pastes people's work :D

User avatar
STN
Founder
Founder
Posts: 4426
Joined: Thu Mar 02, 2017 7:48 pm
Reputation: 3423

Re: South Park The Fractured But Whole

Post by STN »

popemichael wrote:
Sat Oct 28, 2017 5:47 am
I found another table

I deleted out all of the non-working things and tested it. It may be something to hold us over until someone has some time to make something better work...

All it has is unlimited health and unlimited money.
Are you retarded or something? That fucker has been stealing my tables, he is the one i call a douche in my first post.

Part of me wants to ban you because it looks like you are advertising that site. I'll keep an eye out now though

User avatar
l0wb1t
Table Makers
Table Makers
Posts: 395
Joined: Mon May 29, 2017 4:16 pm
Reputation: 282

Re: South Park The Fractured But Whole

Post by l0wb1t »

Here's the edited Script for my Cheat Table.
I just commented out the non-working stuff.
[Link]

DuncanId
Noobzor
Noobzor
Posts: 7
Joined: Fri Oct 27, 2017 12:05 pm
Reputation: 3

Re: South Park The Fractured But Whole

Post by DuncanId »

l0wb1t wrote:
Sat Oct 28, 2017 8:14 am
Here's the edited Script for my Cheat Table.
I just commented out the non-working stuff.
[Link]
Thanks, any chance on getting the shitometer cheat to work again? IMHO it was the best feature of the table

User avatar
ReDragonInc
Expert Cheater
Expert Cheater
Posts: 130
Joined: Fri Mar 10, 2017 10:32 pm
Reputation: 3

Re: South Park The Fractured But Whole

Post by ReDragonInc »

STN wrote:
Sat Oct 28, 2017 7:35 am
popemichael wrote:
Sat Oct 28, 2017 5:47 am
I found another table

I deleted out all of the non-working things and tested it. It may be something to hold us over until someone has some time to make something better work...

All it has is unlimited health and unlimited money.
Are you retarded or something? That fucker has been stealing my tables, he is the one i call a douche in my first post.

Part of me wants to ban you because it looks like you are advertising that site. I'll keep an eye out now though
He's actually guilty of quite a bit:

1) Advertising another site
2) Posting others work as his own (Yours included)
3) Advertising game piracy. (Last I checked, CE was for cheating in an official game, single player only. I also remember the devs explicitly stating they did not condone piracy or multiplayer cheating)

fangg0219
Novice Cheater
Novice Cheater
Posts: 20
Joined: Tue Oct 03, 2017 1:35 am
Reputation: 24

Re: South Park The Fractured But Whole

Post by fangg0219 »

Funny table come again!!

For someone want play game normal but easy

1.auto keyinput in time about combat,but you just need to input when you been hit.
2.easy toilet game,toilet no time limit,still have do one time right input to pass the game,but easy!
3.only test on non online version
4.not walkthrough all the game so test it youself may crash the game
5.happy try!!

Attachments
SouthPark_TFBW-Autokeyin-by-fangg0129-2.CT
(7.72 KiB) Downloaded 260 times

BerryRJ
What is cheating?
What is cheating?
Posts: 2
Joined: Wed Apr 19, 2017 11:12 am
Reputation: 0

Re: South Park The Fractured But Whole

Post by BerryRJ »

fangg0219 wrote:
Sun Nov 05, 2017 12:11 am
Funny table come again!!

For someone want play game normal but easy

1.auto keyinput in time about combat,but you just need to input when you been hit.
2.easy toilet game,toilet no time limit,still have do one time right input to pass the game,but easy!
3.only test on non online version
4.not walkthrough all the game so test it youself may crash the game
5.happy try!!

Thanks for the table, but unfortunatly it doesn't seem to work with uPlay :| Why does uPlay have to ruin my infinite pooping!! :x

User avatar
seikur0
Code Alchemist
Code Alchemist
Posts: 440
Joined: Sat Aug 26, 2017 10:48 am
Reputation: 339

Re: South Park The Fractured But Whole

Post by seikur0 »

Kalas wrote:
Fri Oct 27, 2017 5:31 pm
If someone here can tell me why merging like this is not correct as for the reason that I can enable one time but not again, only after a game restart.
You don't put _ItemsInCrafting back to what it was in your disable section.

And don't allocate all this memory, the minimum amount that can be allocated is one memory page, which is often around 0x1000 bytes.
Do it like this:

Code: Select all

{ Game   : SouthPark_TFBW.exe
  Version:
  Date   : 2017-10-27
  Author : Kalas

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(_HeroHealth,SouthPark_TFBW.exe,66 0F 6E 43 24 0F)
aobscanmodule(OneHitKill,SouthPark_TFBW.exe,89 46 24 89 4C 24 58)
aobscanmodule(_Money,SouthPark_TFBW.exe,8B 4D 0C 48 8B 45 18)
aobscanmodule(_ItemsInCrafting,SouthPark_TFBW.exe,C7 8B 41 0C 89 43 0C)
aobscanmodule(_CrafterRank,SouthPark_TFBW.exe,89 83 DC 00 00 00 E8)
alloc(newmem,$1000,SouthPark_TFBW.exe)

label(newmemA)
label(newmemB)
label(newmemC)
label(newmemD)
label(newmemE)

label(SetHealth)
label(OHKSet)
label(MoneySet)
label(ItemsSet)
label(ptrBase)
label(RankSet)

registersymbol(SetHealth)
registersymbol(OHKSet)
registersymbol(MoneySet)
registersymbol(ItemsSet)
registersymbol(ptrBase)
registersymbol(RankSet)

label(codeA)
label(returnA)
label(codeB)
label(returnB)
label(HeroCheck)
label(codeC)
label(returnC)
label(codeD)
label(returnD)
label(codeE)
label(returnE)

newmem:

// Health //
newmemA:
  cmp dword ptr [SetHealth], 0
  je @f
  fld [rbx+20]
  fstp [rbx+24]

codeA:
  movd xmm0,[rbx+24]
  jmp returnA

SetHealth:
  dd 0

// OHK //
newmemB:
  cmp rax, 39
  je @f
  jmp HeroCheck

@@:
  cmp dword ptr [OHKSet], 0
  je @f
  mov eax, 0

codeB:
  mov [rsi+24],eax
  mov [rsp+58],ecx
  jmp returnB

HeroCheck:
  mov [rsi+24],eax
  jmp returnB

OHKSet:
  dd 0

// Money //
newmemC:
  cmp dword ptr [MoneySet], 0
  je @f
  mov [rbp+0C], #999999

codeC:
  mov ecx,[rbp+0C]
  mov rax,[rbp+18]
  jmp returnC

MoneySet:
  dd 0

// ItemsInCraftingArea //
newmemD:
  cmp dword ptr [ItemsSet], 0
  je @f
  mov [rcx+0C], #99

codeD:
  mov eax,[rcx+0C]
  mov [rbx+0C],eax
  jmp returnD

ItemsSet:
  dd 0

// Crafter Rank //
newmemE:
  mov [ptrBase], rbx

  cmp dword ptr [RankSet], 0
  je @f
  add eax, #9999

codeE:
  mov [rbx+000000DC],eax
  jmp returnE

RankSet:
  dd 0

ptrBase:
  dd 0

_HeroHealth:
  jmp newmemA
returnA:
registersymbol(_HeroHealth)

OneHitKill:
  jmp newmemB
  nop
  nop
returnB:
registersymbol(OneHitKill)

_Money:
  jmp newmemC
  nop
  nop
returnC:
registersymbol(_Money)

_ItemsInCrafting+01:
  jmp newmemD
  nop
returnD:
registersymbol(_ItemsInCrafting)

_CrafterRank:
  jmp newmemE
  nop
returnE:
registersymbol(_CrafterRank)

[DISABLE]
_HeroHealth:
  db 66 0F 6E 43 24
OneHitKill:
  db 89 46 24 89 4C 24 58
_Money:
  db 8B 4D 0C 48 8B 45 18
_ItemsInCrafting+01:
  db 8B 41 0C 89 43 0C
_CrafterRank:
  db 89 83 DC 00 00 00

unregistersymbol(_HeroHealth)
unregistersymbol(OneHitKill)
unregistersymbol(_Money)
unregistersymbol(_ItemsInCrafting)
unregistersymbol(_CrafterRank)

unregistersymbol(SetHealth)
unregistersymbol(OHKSet)
unregistersymbol(MoneySet)
unregistersymbol(ItemsSet)
unregistersymbol(ptrBase)
unregistersymbol(RankSet)

dealloc(newmem)
See what I did there? I allocated one memory area, which is by the way still 10 times larger than you'd need, but 0x1000 bytes is the minimum at least for me. And in that one memory area the different sections are marked with labels.
BerryRJ wrote:
Sun Nov 05, 2017 2:22 pm
Thanks for the table, but unfortunatly it doesn't seem to work with uPlay :| Why does uPlay have to ruin my infinite pooping!! :x
Poop time is a float and has the value 10 in the beginning and 0 after time has run out. So if you search for 10 in the poop starting phase and 0 after it has run out and while you're not on the toilet you'll find it very easily and you can freeze that. I played this game for like 3 hours or so, but it has too much poop for me.

User avatar
Kalas
Expert Cheater
Expert Cheater
Posts: 551
Joined: Fri Mar 03, 2017 9:49 am
Reputation: 134

Re: South Park The Fractured But Whole

Post by Kalas »

seikur0 wrote:
Sun Nov 05, 2017 5:17 pm
Kalas wrote:
Fri Oct 27, 2017 5:31 pm
If someone here can tell me why merging like this is not correct as for the reason that I can enable one time but not again, only after a game restart.
You don't put _ItemsInCrafting back to what it was in your disable section.

And don't allocate all this memory, the minimum amount that can be allocated is one memory page, which is often around 0x1000 bytes.
Do it like this:

Code: Select all

{ Game   : SouthPark_TFBW.exe
  Version:
  Date   : 2017-10-27
  Author : Kalas

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(_HeroHealth,SouthPark_TFBW.exe,66 0F 6E 43 24 0F)
aobscanmodule(OneHitKill,SouthPark_TFBW.exe,89 46 24 89 4C 24 58)
aobscanmodule(_Money,SouthPark_TFBW.exe,8B 4D 0C 48 8B 45 18)
aobscanmodule(_ItemsInCrafting,SouthPark_TFBW.exe,C7 8B 41 0C 89 43 0C)
aobscanmodule(_CrafterRank,SouthPark_TFBW.exe,89 83 DC 00 00 00 E8)
alloc(newmem,$1000,SouthPark_TFBW.exe)

label(newmemA)
label(newmemB)
label(newmemC)
label(newmemD)
label(newmemE)

label(SetHealth)
label(OHKSet)
label(MoneySet)
label(ItemsSet)
label(ptrBase)
label(RankSet)

registersymbol(SetHealth)
registersymbol(OHKSet)
registersymbol(MoneySet)
registersymbol(ItemsSet)
registersymbol(ptrBase)
registersymbol(RankSet)

label(codeA)
label(returnA)
label(codeB)
label(returnB)
label(HeroCheck)
label(codeC)
label(returnC)
label(codeD)
label(returnD)
label(codeE)
label(returnE)

newmem:

// Health //
newmemA:
  cmp dword ptr [SetHealth], 0
  je @f
  fld [rbx+20]
  fstp [rbx+24]

codeA:
  movd xmm0,[rbx+24]
  jmp returnA

SetHealth:
  dd 0

// OHK //
newmemB:
  cmp rax, 39
  je @f
  jmp HeroCheck

@@:
  cmp dword ptr [OHKSet], 0
  je @f
  mov eax, 0

codeB:
  mov [rsi+24],eax
  mov [rsp+58],ecx
  jmp returnB

HeroCheck:
  mov [rsi+24],eax
  jmp returnB

OHKSet:
  dd 0

// Money //
newmemC:
  cmp dword ptr [MoneySet], 0
  je @f
  mov [rbp+0C], #999999

codeC:
  mov ecx,[rbp+0C]
  mov rax,[rbp+18]
  jmp returnC

MoneySet:
  dd 0

// ItemsInCraftingArea //
newmemD:
  cmp dword ptr [ItemsSet], 0
  je @f
  mov [rcx+0C], #99

codeD:
  mov eax,[rcx+0C]
  mov [rbx+0C],eax
  jmp returnD

ItemsSet:
  dd 0

// Crafter Rank //
newmemE:
  mov [ptrBase], rbx

  cmp dword ptr [RankSet], 0
  je @f
  add eax, #9999

codeE:
  mov [rbx+000000DC],eax
  jmp returnE

RankSet:
  dd 0

ptrBase:
  dd 0

_HeroHealth:
  jmp newmemA
returnA:
registersymbol(_HeroHealth)

OneHitKill:
  jmp newmemB
  nop
  nop
returnB:
registersymbol(OneHitKill)

_Money:
  jmp newmemC
  nop
  nop
returnC:
registersymbol(_Money)

_ItemsInCrafting+01:
  jmp newmemD
  nop
returnD:
registersymbol(_ItemsInCrafting)

_CrafterRank:
  jmp newmemE
  nop
returnE:
registersymbol(_CrafterRank)

[DISABLE]
_HeroHealth:
  db 66 0F 6E 43 24
OneHitKill:
  db 89 46 24 89 4C 24 58
_Money:
  db 8B 4D 0C 48 8B 45 18
_ItemsInCrafting+01:
  db 8B 41 0C 89 43 0C
_CrafterRank:
  db 89 83 DC 00 00 00

unregistersymbol(_HeroHealth)
unregistersymbol(OneHitKill)
unregistersymbol(_Money)
unregistersymbol(_ItemsInCrafting)
unregistersymbol(_CrafterRank)

unregistersymbol(SetHealth)
unregistersymbol(OHKSet)
unregistersymbol(MoneySet)
unregistersymbol(ItemsSet)
unregistersymbol(ptrBase)
unregistersymbol(RankSet)

dealloc(newmem)
See what I did there? I allocated one memory area, which is by the way still 10 times larger than you'd need, but 0x1000 bytes is the minimum at least for me. And in that one memory area the different sections are marked with labels.
BerryRJ wrote:
Sun Nov 05, 2017 2:22 pm
Thanks for the table, but unfortunatly it doesn't seem to work with uPlay :| Why does uPlay have to ruin my infinite pooping!! :x
Poop time is a float and has the value 10 in the beginning and 0 after time has run out. So if you search for 10 in the poop starting phase and 0 after it has run out and while you're not on the toilet you'll find it very easily and you can freeze that. I played this game for like 3 hours or so, but it has too much poop for me.
Thank you so much I learn new stuff everyday!

Post Reply