Bitcoin Forum
September 28, 2025, 07:21:35 AM *
News: Latest Bitcoin Core release: 29.0 [Torrent]
 
  Home Help Search Login Register More  
  Show Posts
Pages: [1]
1  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: September 18, 2024, 07:35:24 PM
free 8$  btc

addrss compress P2PSH : 34gbwEu34QBz7bozafSyStRqw9f6Jw7cTt

privkey hex : 2832ed74f2b5e35ee
privkey wif : KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qZfFoWMiwBt943V7CQeX
2  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: May 26, 2024, 10:45:34 AM
keyhunt not good

you should learn to configure it, defaul thread subrange is 32 bits, for small ranges with multiple threads you should lower the N value  with "-n number" if the range is less than 1 Million keys you should use -n 0x10000
where 0x10000 its a 16 bits subrange per thread

Look



Found i less than a second

are you key hunt creator?
nice too meet you
It was my mistake, I apologize, dear friend
ok , thank you
I meant https://github.com/WanderingPhilosopher/KeyHuntCudaClient
i use of first version keyhunt cuda

Zero clues of how or what you ran, but with a single CPU core, using keyhunt-cuda, it is found pretty much as the program starts:

Code:
KeyHunt-Cuda v1.08

COMP MODE    : COMPRESSED
COIN TYPE    : BITCOIN
SEARCH MODE  : Single Address
DEVICE       : CPU
CPU THREAD   : 1
SSE          : YES
RKEY         : 0 Mkeys
MAX FOUND    : 65536
BTC ADDRESS  : 1E5V4LbVrTbFrfj7VN876DamzkaNiGAvFo
OUTPUT FILE  : Found.txt

Start Time   : Sat May 25 10:11:49 2024
Global start : 20000000000000000 (66 bit)
Global end   : 21000000000000000 (66 bit)
Global range : 1000000000000000 (61 bit)


[00:00:02] [CPU+GPU: 5.28 Mk/s] [GPU: 0.00 Mk/s] [C: 0.000000 %] [R: 0] [T: 10,706,944 (24 bit)] [F: 1]

BYE

SO maybe you entered wrong things/flags when trying to run the program.




this is 1 milion key after start 200000000000f4240
and this is p2ph compressed public key  :  1E5V4LbVrTbFrfj7VN876DamzkaNiGAvFo

KeyHunt-Cuda.exe -t 0 -g --gpui 0 --gpux 24,256 -m address --coin BTC --range 20000000000000000:40000000000000000 1E5V4LbVrTbFrfj7VN876DamzkaNiGAvFo


my keyhunt cuda speed is 60 Mk/s . In fact, Cuda should find it in less than 1 second, but it takes about 1:40 minute

KeyHunt-Cuda.exe -t 0 -g --gpui 0 --gpux 24,256 -m address --coin BTC --range 20000000000000000:40000000000000000 1E5V4LbVrTbFrfj7VN876DamzkaNiGAvFo

KeyHunt-Cuda v1.07

COMP MODE    : COMPRESSED
COIN TYPE    : BITCOIN
SEARCH MODE  : Single Address
DEVICE       : GPU
CPU THREAD   : 0
GPU IDS      : 0
GPU GRIDSIZE : 24x256
SSE          : YES
RKEY         : 0 Mkeys
MAX FOUND    : 65536
BTC ADDRESS  : 1E5V4LbVrTbFrfj7VN876DamzkaNiGAvFo
OUTPUT FILE  : Found.txt

Start Time   : Sun May 26 14:04:50 2024
Global start : 20000000000000000 (66 bit)
Global end   : 40000000000000000 (67 bit)
Global range : 20000000000000000 (66 bit)

GPU          : GPU #0 Quadro P1000 (4x128 cores) Grid(24x256)

[00:01:36] [CPU+GPU: 62.21 Mk/s] [GPU: 62.21 Mk/s] [C: 0.000000 %] [R: 0] [T: 5,976,883,200 (33 bit)] [F: 0]

The problem is that Cuda performs the same task in all graphics cores in parallel and repetitively, and instead of the cores each helping the program, each of them repeats the same task as an island, for example, each core in parallel from the same start. He does and moves forward. And maybe in the best case, it divides the entire collection into the number of cores and each core starts working in that interval, in this case, once you exit the program, all your efforts will end in an unknown place, which will be used the next time you run the program. You don't know where to start

Of course, it seems that you are using a higher version of this software  v1.08. But anyway, I have to tell the truth. You have written a very good software. I really enjoyed your code ideas.
3  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: May 22, 2024, 10:26:53 PM

are you key hunt creator?
nice too meet you


Hi, Yes I developed the CPU version all other are copies, if you have some doubt about it please use the next topic: https://bitcointalk.org/index.php?topic=5322040

Of course it is, and you are the main programmer and developer
nice to meet you
I have also written various programs for this work, soon I will post a complete version on GitHub

Do you know how to search randomly in KeyhuntCuda version 2   ?

Version 1 with -r key and the value of key space was sequential with random
Like
KeyHunt-Cuda.exe -t 0 -g --gpui 0 --gpux 24,256 -m address --coin BTC --range 20000000000000000:40000000000000000 13zb1hQbWVsc2S7ZTZnP2G4undNNpdh5so -r 2000
4  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: May 22, 2024, 10:15:31 AM
keyhunt not good

you should learn to configure it, defaul thread subrange is 32 bits, for small ranges with multiple threads you should lower the N value  with "-n number" if the range is less than 1 Million keys you should use -n 0x10000
where 0x10000 its a 16 bits subrange per thread

Look



Found i less than a second

are you key hunt creator?
nice too meet you
It was my mistake, I apologize, dear friend
ok , thank you
I meant https://github.com/WanderingPhilosopher/KeyHuntCudaClient
i use of first version keyhunt cuda
5  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: May 21, 2024, 10:15:08 AM


i have a simple alghoritm with cpu in python , you can test it


Code:

import bitcoin
import ecdsa



def private_key_to_public_key(private_key):
    sk = ecdsa.SigningKey.from_string(bytes.fromhex(private_key), curve=ecdsa.SECP256k1)
    vk = sk.get_verifying_key()
    compressed_public_key = vk.to_string("compressed").hex()
    return compressed_public_key



        bitcoin_address = bitcoin.pubtoaddr(public_key)




Why use Bitcoin and ECDSA imports? They're so slow, it feels like a waste of time.

Instead, utilize ICE (import secp256k1 as ice) for this function and the Bitcoin address line:


def private_key_to_public_key(private_key):
    priv_int = int(private_key, 16)
    return ice.scalar_multiplication(priv_int)

and

bitcoin_address = ice.pubkey_to_address(0, True, public_key)


It's approximately 10 times faster than ECDSA. But even that is miserable if you attack the dinosaur numbers.

The more you delve into Python, the more apparent it becomes that searching for Puzzle 66 through it is pointless.

Perhaps someone knowingly obscures things by selling Python scripts as the ultimate solution.  Grin






In fact, what I meant by this comment was the problem of Key Hunt and I wrote different versions of these programs. And compared to Key Hunt, I put this code so that you can test and see the speed of a simple program with a  CPUs and a powerful program with GPU that does not work properly.

In general, I am very happy that you paid attention to this code and took your time, and I thank you. And also ice's idea was very good Wink Wink
6  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: May 20, 2024, 11:57:42 PM
keyhunt not good

i get a test with key hunt


you can test it.  key hunt speed in my pc is  60 Mk/s


i search for  this addrrss   1E5V4LbVrTbFrfj7VN876DamzkaNiGAvFo
this privatekey is  200000000000f4240

search start of 20000000000000000


this private key is 1,000,000 key of start

in fact keyhunt must be find in 2 sec , but fin at 100 Sec

In the Cuda programming, an algorithm is executed in parallel, and in fact, this search operation in each core performs a similar task in parallel, and the cores do not help each other's process to increase the search speed, but each of them works as an island exactly the same way. They do something else and that's why this program has problems

i have a simple alghoritm with cpu in python , you can test it


Code:
# -*- coding: utf-8 -*-

"""
Created on Thu Mar 14 17:50:54 2024

1000 Bitcoin Puzzle Scanner for 2^66 ~ 2^67

@author: Amin Solhi , Contacts =>  email: amin.solhi@gmail.com , +9891111842779
"""
import bitcoin
import ecdsa
import secrets
from timeit import default_timer as timer   
import datetime

global target_address
global output_file
global rng
global private_key
global ks
global start
global random_mode


target_address = "13zb1hQbWVsc2S7ZTZnP2G4undNNpdh5so"
output_file = "data.txt"
rng = 20 # int(input("Enter Random Space Number 1 ~ 100 :"))
private_key="20000000000000000"
ks=0
start = timer()
random_mod = True # True or False

print ("\nBTCGEN Bitcoin Puzzle #66 Scanner \n")
print ("BTC Address : ",target_address)
print ("OutPut File : ",output_file)
print ("Randome Mod : ",f"{str(random_mod)}")
if (random_mod):
    print ("Random Key  : ",f'per {rng}K key')
print ("Device      :  CPU")
print ("Global Start: ",private_key)
print ("Global END  :  40000000000000000")

print('\n')



def remove_zeros(input_string):
    result = ""
    zero = ""
    for char in input_string:
        if char != "0":
            zero = "finish"
        if zero =="finish" :
            result += char
    return result


t=""
t +="0"*47

def h(a):
    #a = a[:1] + '0' + a[1:]   
    if (len(a) < 64):
        #a = a[:1] + '0' + a[1:]
        a = '0' + a[:]
        if (len(a) < 64):
           a = h(a)           
    return a 

def generate_random_priv():
    p=str(secrets.choice(range(2, 4)))
    return (p+secrets.token_hex(8))


def generate_private_key(num_hex):
    num_decimal = int(num_hex, 16)
    num_decimal += 1
    num_hex = h(str(f'{num_decimal:x}'))
    return (num_hex)

def private_key_to_public_key(private_key):
    sk = ecdsa.SigningKey.from_string(bytes.fromhex(private_key), curve=ecdsa.SECP256k1)
    vk = sk.get_verifying_key()
    compressed_public_key = vk.to_string("compressed").hex()
    return compressed_public_key

def onmain():
    #start = timer()
    global private_key
    global rng
    global ks
    global start
    global target_address
    global i
    for _ in range(rng*1000):#while True:
        ks+=1
        private_key = generate_private_key(private_key)#secrets.randbelow(32))  # Generate a random private key
        public_key = private_key_to_public_key(private_key)  # Convert private key to compressed public key       
        #print (private_key)
        #print(i,"--- ",timer()-start,"seconds ---" ,)
        # Generate Bitcoin address from public key
        bitcoin_address = bitcoin.pubtoaddr(public_key)
        if (bitcoin_address == target_address):
            f = open(output_file, "a")
            f.write('\nprivate key int: '
                    + private_key
                    +'\nBitcoin address: '
                    + bitcoin_address+'\n_________\n')
            f.close()
                   
            print(f"\nFound matching Bitcoin address for private key: {private_key}")
            input("")
    print(f"\r[Total : {(ks/1000000)} Mk/{int(timer()-start)}s] [Private key hex: {(remove_zeros(private_key))}]  ", end="")     


def onmain_random():
    #start = timer()
    global private_key
    global rng
    global ks
    global start
    global target_address
    global i
    global random_str
    for _ in range(rng*1000):#while True:
        ks+=1
        private_key = generate_private_key(private_key)#secrets.randbelow(32))  # Generate a random private key
        public_key = private_key_to_public_key(private_key)  # Convert private key to compressed public key       
        #print (private_key)
        #print(i,"--- ",timer()-start,"seconds ---" ,)
        # Generate Bitcoin address from public key
        bitcoin_address = bitcoin.pubtoaddr(public_key)
        if (bitcoin_address == target_address):
            f = open(output_file, "a")
            f.write('\nprivate key int: '
                    + private_key
                    +'\nBitcoin address: '
                    + bitcoin_address+'\n_________\n')
            f.close()
                   
            print(f"\nFound matching Bitcoin address for private key: {private_key}")
            input("")
    print(f"\r[{str(datetime.timedelta(seconds=int(timer()-start)))}] [Total : {(ks/1000000)} Mk] [R: {i}] [Private key hex: {(remove_zeros(private_key))}]  ", end="")     

def main():
    global private_key
    global i
    global random_str
    random_str =""
    i=0
    if (random_mod):
        while True:
            i+=1
            private_key=generate_random_priv()
            onmain_random()
    else:
        while True:
            i+=1
            onmain()
       

if __name__ == "__main__":
    main()
   
7  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: April 07, 2024, 04:20:37 PM
I had previously written a web application that works using JavaScript and PHP. Actually, it is client side. You can use it


https://latoon.ir/btcgen.php


This version is also for block 66

https://latoon.ir/btcgenl.php
8  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: March 20, 2024, 01:32:40 PM
My question is: How can you tell from the public key that the public key is multi-bit?
How can we determine the bit length of a public key

for example :  19zK7RvpE7UE7nDaRtLcTAw98tyyYr8Pz7
9  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: March 17, 2024, 12:47:33 PM
Hi All,

I've been reading this and other related topics for a few weeks and I'm trying to understand the complexity of the different algorithms and approaches.

For Pollard's Kangaroo algorithm, someone gave an estimate of 2^66.05 operations needed for solving #130 ( https://bitcointalk.org/index.php?topic=5244940.2740 not sure how they reached this conclusion, but from reading about the algorithm it has a similar complexity to BSGS). This equals ~7.6x1019 operations needed.
For BSGS, from reading about it, is has a complexity of O(n1/2). Taking the square root of the range (2130 - 2129 - 1) equals ~2.6x1019 operations needed.

Is this correct? Is BSGS more efficient, or is it just a wrong way of calculating the efficiency?
I think I'm missing something in estimating the total "operations needed" for these algorithms. Is there a better/correct way of doing this?


Considering HW limitations, I am still not familiar with how different Kangaroo implementations work, I see that the JeanLucPons' based on VanitySearch requires GPU power (I assume more cores means better, but not sure what is the requirement for VRAM, CPU, RAM).
For BSGS, seems like keyhunt is the best, and works better with more RAM and more CPU cores.
Am I missing anything? Are there any other/better tools available for searching the ranges with known public keys?


In fact, for block 66, a private key must be generated with the 81129638414569788207641586040831 number, and this process is slow with a CPU, but using a graphics processor speeds it up.

I have written a simple Python program below that randomly generates private key within the range of block 66, and compares its public key at every moment with the public key of block number 66. If found, it displays a message and saves it in the data.txt file in the root of the program.

Code:
import bitcoin
import ecdsa
import secrets
from timeit import default_timer as timer  
start = timer()
t=""
for _ in range(47):# generate 47 character  ( 0 )
    t = t + "0"
def generate_private_key():
    p=str(secrets.choice(range(2, 4)))#  generate random( 2 or 3) for fist number
    return (t+p+secrets.token_hex(8))#return { 47 character ( 0 ) + random (2 or 3 ) +  generate random (16 character in hexadecimal)  }

def private_key_to_public_key(private_key):
    sk = ecdsa.SigningKey.from_string(bytes.fromhex(private_key), curve=ecdsa.SECP256k1)
    vk = sk.get_verifying_key()
    compressed_public_key = vk.to_string("compressed").hex()
    return compressed_public_key

def main():
    target_address = "13zb1hQbWVsc2S7ZTZnP2G4undNNpdh5so"  # this is Target wallet address , just p2pkh compressed
    while True:#
    #for _ in range(100000):#while True:
        private_key = generate_private_key()#secrets.randbelow(32))  # Generate a random private key
        public_key = private_key_to_public_key(private_key)  # Convert private key to compressed public key
        
        # Generate Bitcoin address from public key
        bitcoin_address = bitcoin.pubtoaddr(public_key)
        print(private_key,'  ',bitcoin_address)
        if (bitcoin_address == target_address):
            f = open("data.txt", "a")
            f.write('\nprivate key int: '
                    + private_key
                    +'\nBitcoin address: '
                    + bitcoin_address+'\n_________\n')
            f.close()
                    
            print(f"Found matching Bitcoin address for private key: {private_key}")
            break
    print("--- %s seconds ---" ,timer()-start)


if __name__ == "__main__":
    main()
10  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: March 17, 2024, 07:14:59 AM
I still don't understand, by whom it will be broken, I also wrote software and I am searching randomly.



What should we do to transfer, add the private key in online wallets and go to the transfer form, use phone apps, which wallet software should we use to withdraw the balance, or write a program for the Bitcoin transfer form or  Should we add its in Bitcoin core???

If you initiate a transaction you will reveal the public key. Since it belongs to a 66-bit public key, you can quickly find the private address with kangaroo or bsgs because you know the range and it is "narrow". Then you will start your transaction and generate a double expense. To win you will "bid" a higher transaction fee to get more confirmations faster.
If there is any mistake in this, someone correct me.



I am grateful to the members of this group and I thank them very much for providing good information and guidance. I ask many questions more for a deep understanding of the issue rather than seeking a solution myself; of course, my intention is not self-praise, I just can't be a bystander to the problems.

As far as I understand, you mean that powerful individuals and teams like mining pools or similar ones have very high processing power and can accomplish our efforts to search for block 66, which may take several years, in less than a day? And while we have requested the transfer of Bitcoin, they may also register it with a higher fee, and more people repeat this process, creating something like an auction?

Are they still unaware of the existence of the Bitcoin puzzle so they can think about it sooner?
11  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: March 16, 2024, 07:40:20 PM
I still don't understand, by whom it will be broken, I also wrote software and I am searching randomly.



What should we do to transfer, add the private key in online wallets and go to the transfer form, use phone apps, which wallet software should we use to withdraw the balance, or write a program for the Bitcoin transfer form or  Should we add its in Bitcoin core???
12  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: March 16, 2024, 03:00:34 PM
quote]
Hundreds of years.
Once you crack it you'll want to spend it, so you'll have to disclose the public key over the network.
Once everyone sees the public key and knows it has a 66-bit private key, they will crack the private key in
a few seconds at most and double spend, making your efforts completely futile.
So I guess the reward for ruining a lots of hardware and paying for the power goes straight to zero, since everyone will fight to double spend, making the fee higher and higher and the net profit going to zero.
[/quote]

So all the bitcoins that are from 66 bits to 160 bits have no financial value?
13  Bitcoin / Development & Technical Discussion / Re: Relationship between public key and private key on: February 04, 2024, 11:58:11 AM
I have already built a system that generates a wif and public key by entering a hexadecimal value. Of course, it has many features and does many things


I don't know what you know about crypto math and calculations, but I'll give you an example: the two public addresses below are both the same and correspond to a common hexadecimal private key, they just have a different generation process.


P2PKH Address   :  1HT7xU2Ngenf7D4yocz2SAcnNLW7rK8d4E

P2PSH Address  :  3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy



Probably, by giving the hexadecimal address of a special wallet, you will not be able to open that wallet. Because we have talked about this process on this page and you did not know it
14  Bitcoin / Development & Technical Discussion / Re: Relationship between public key and private key on: February 04, 2024, 11:31:09 AM
look
you forget a 0 before 2

correct value is =>>     Public key hex : 0400000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000

and this is =>> Public key ( wallet address p2pkh) :   16QaFeudRUt8NYy2yzjm3BMvG4xBbAsBFM


so , max private key hex : fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe
in clearly : 2^256 -1   or  16^64 -1

if calculate fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe  public key hex , result is : 04e0a65740c1c5148111a8305938c56322fbf345a18cb90cf48a788961c6b3ff918aaf0580fd9e8 be571e97bef4a067fa7911da0ff0e1a5f307fea63e3ecd903af
and publick key : 1JHzdjEL4xQ7yifAaQQKAfqPyAN92vfstP

and another

 public key hex : ( 0 )

public key ( wallet address p2pkh ) :  1FYMZEHnszCHKTBdFZ2DLrUuk3dGwYKQxh

SHA256   6e340b9cffb37a989ca544e6bb780a2c78901d3fb33738768511a30617afa01d
RipeMD-160   9f7fd096d37ed2c0e3f7f0cfc924beef4ffceb68

Add Version
Byte   009f7fd096d37ed2c0e3f7f0cfc924beef4ffceb68
Double


SHA256   7524061a0ca9cca8e0c2881fd447c20c821751e357dc7d960cd03cfc3b4cece0   

Add 4 Byte
Checksum   009f7fd096d37ed2c0e3f7f0cfc924beef4ffceb687524061a
   
Address   1FYMZEHnszCHKTBdFZ2DLrUuk3dGwYKQxh   
15  Bitcoin / Development & Technical Discussion / Re: Relationship between public key and private key on: February 03, 2024, 10:06:45 PM
orginaly this value:       
       var P = new bigInt('fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f',
            16); //2²⁵⁶ - 2³² - 2⁹ - 2⁸ - 2⁷ - 2⁶ - 2⁴ - 1
        var N = new bigInt('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16);
        var ZERO = new bigInt(0);
        var SEVEN = new bigInt(7);
        var x = new bigInt('79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', 16);
        var y = new bigInt('483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8', 16);
        var ONE = new bigInt(1);
        var TWO = new bigInt(2);
        var THREE = new bigInt(3);
        var Pp1d4 = new bigInt('3fffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff0c', 16);
        var Nd2p1 = new bigInt('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1', 16);

but i changed to this
        var P = new bigInt('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff',
            16); //2²⁵⁶ - 2³² - 2⁹ - 2⁸ - 2⁷ - 2⁶ - 2⁴ - 1
        var N = new bigInt('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16);
        var ZERO = new bigInt(0);
        var SEVEN = new bigInt(7);
        var x = new bigInt('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16);
        var y = new bigInt('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16);
        var ONE = new bigInt(1);
        var TWO = new bigInt(2);
        var THREE = new bigInt(3);
        var Pp1d4 = new bigInt('3fffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff0c', 16);
        var Nd2p1 = new bigInt('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16);


and now , result : i generate by any (private key hex)  this wallet address :

Public Key Hex : 4000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000

address: 16QaFeudRUt8NYy2yzjm3BMvG4xBbAsBFM

balance : 0.01075050 BTC


Pages: [1]
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!