Image Image Image




Post new topic Reply to topic  [ 399 posts ]  Go to page Previous  1 ... 4, 5, 6, 7, 8, 9, 10 ... 20  Next
Author Message
 Post subject: Re: 7-card Hand Evaluators
PostPosted: Tue Jun 17, 2008 3:17 am 
Offline
Senior member
User avatar

Posts: 223
Favourite Bot: N/A
BlueSilicon wrote:
I'm getting the same ArrayIndexOutOfBoundsException error! The funny thing is, my code is the C++ code Adrian posted! Here is what I did. First, I generated the HandRanks.dat file using Adrian's C++ code he posted in this thread. Then used it in my code to determine CurrHS after the flop. Nothing was working out right. I went back to the C++ code and inserted the lines above so they looked the same, re-generated the HandRanks.dat file to run the new code, and I got the error from within the C++ code.

I have a great idea. Instead of everyone wrestling with trying to implement code to produce a good HandRanks.dat file, maybe we could post the file, compressed, here. Since Adrian's compile works for 5-hand evaluations, his would be the obvious choice.

Andrian?

I'm trying to upload the compressed file, but it never ends, I had tried not less than 3 times already, so if you PM me we can arrange to transfer it thru instant messaging (or if admin fixes this upload problem, I'll upload it).
Are you sure the cards have not changed when ported to Java, right?
When we are sure we do have the exactly same file, I'll post a full version of the C code to use it for 5 hands evaluations.
Regards ...


Top
 Profile  
 
 Post subject: Re: 7-card Hand Evaluators
PostPosted: Tue Jun 17, 2008 12:53 pm 
Offline
Senior member
User avatar

Posts: 465
Favourite Bot: Mine, of course!
Thanks Adrian for your offer. I'll send you a PM with some particulars so you can see if I just have my head on backwards or there is an issue with the LUT file.


Top
 Profile  
 
 Post subject: Re: 7-card Hand Evaluators
PostPosted: Tue Jun 17, 2008 1:34 pm 
Offline
Senior member
User avatar

Posts: 223
Favourite Bot: N/A
BlueSilicon wrote:
Thanks Adrian for your offer. I'll send you a PM with some particulars so you can see if I just have my head on backwards or there is an issue with the LUT file.

Try the following C code to see if the 5 cards values from your LUT file are ok.
It is a self contained program, main.c, and it should give 4 warnings that you can ignore (3 about unreferenced variables and 1 about fopen being unsafe).
With my file it worked perfectly, and it gives the correct 5 cards numbers.
Regards ...
Code:
#include <stdio.h>               // Includes definitions for printf(), fprintf(), getchar() and stderr
#include <time.h>               // Includes definitions for clock_t, clock() and CLOCKS_PER_SEC

// #define ADRIAN_LUT
// #define SUM_ONLY
#define EXACT_FIT
#define FIVE_CARDS_BENCHMARK

#define NUMBER_OF_TESTS 10


#ifdef ADRIAN_LUT
#define BASE_ADDRESS 0
#define INPUT_FILE_NAME "AdrianLUT.dat"
#define ARRAY_SIZE (32380116+1)
#define HAND_TYPE_SHIFT 24
#define HAND_TYPE_START 0
#else
#define BASE_ADDRESS 53
#define INPUT_FILE_NAME "HandRanks.dat"
#define ARRAY_SIZE (32487834)
#define HAND_TYPE_SHIFT 12
#define HAND_TYPE_START 1
#endif

#ifdef FIVE_CARDS_BENCHMARK
#define HIGH_CARD_NUMBER 1302540
#define PAIR_NUMBER 1098240
#define TWO_PAIR_NUMBER 123552
#define TRIPS_NUMBER 54912
#define STRAIGHT_NUMBER 10200
#define FLUSH_NUMBER 5108
#define FULL_HOUSE_NUMBER 3744
#define QUADS_NUMBER 624
#define STRAIGHT_FLUSH_NUMBER 40
#define CARDS_NUMBER 5
#ifdef EXACT_FIT
#define END_CARD1 49
#define END_CARD2 50
#define END_CARD3 51
#define END_CARD4 52
#define END_CARD5 53
#else
#define END_CARD1 53
#define END_CARD2 53
#define END_CARD3 53
#define END_CARD4 53
#define END_CARD5 53
#endif
#else
#define HIGH_CARD_NUMBER 23294460
#define PAIR_NUMBER 58627800
#define TWO_PAIR_NUMBER 31433400
#define TRIPS_NUMBER 6461620
#define STRAIGHT_NUMBER 6180020
#define FLUSH_NUMBER 4047644
#define FULL_HOUSE_NUMBER 3473184
#define QUADS_NUMBER 224848
#define STRAIGHT_FLUSH_NUMBER 41584
#define CARDS_NUMBER 7
#ifdef EXACT_FIT
#define END_CARD1 47
#define END_CARD2 48
#define END_CARD3 49
#define END_CARD4 50
#define END_CARD5 51
#define END_CARD6 52
#define END_CARD7 53
#else
#define END_CARD1 53
#define END_CARD2 53
#define END_CARD3 53
#define END_CARD4 53
#define END_CARD5 53
#define END_CARD6 53
#define END_CARD7 53
#endif
#endif

int p[ARRAY_SIZE];

int main()
{
   clock_t clock_tTimer;
   FILE *fin;
   int c1, c2, c3, c4, c5, c6, c7;
   int *p1, *p2, *p3, *p4, *p5, *p6;
   int i;
#ifdef SUM_ONLY
   int iSum=0;
#else
   int iHandTypes[10]={0,0,0,0,0,0,0,0,0,0};
#endif

   fin = fopen(INPUT_FILE_NAME, "rb");
   if (!fin) {
      fprintf(stderr, "Can not open file %s\n", INPUT_FILE_NAME);
      return -1;
   }
   fread(p, ARRAY_SIZE*sizeof(*p), 1, fin);
   fclose(fin);

   clock_tTimer=clock();
   for (i=0;i<NUMBER_OF_TESTS;i++) {
      for (c1 = 1; c1 < END_CARD1; c1++) {
         p1 = p+p[BASE_ADDRESS+c1];
         for (c2 = c1+1; c2 < END_CARD2; c2++) {
            p2 = p+p1[c2];
            for (c3 = c2+1; c3 < END_CARD3; c3++) {
               p3 = p+p2[c3];
               for (c4 = c3+1; c4 < END_CARD4; c4++) {
                  p4 = p+p3[c4];
                  for (c5 = c4+1; c5 < END_CARD5; c5++) {
                     p5 = p+p4[c5];
#ifdef FIVE_CARDS_BENCHMARK

#ifdef SUM_ONLY
                     iSum+=p5[0];
#else
                     iHandTypes[p5[0] >> HAND_TYPE_SHIFT]++;
#endif

#else

                     for (c6 = c5+1; c6 < END_CARD6; c6++) {
                        p6 = p+p5[c6];
                        for (c7 = c6+1; c7 < END_CARD7; c7++) {
#ifdef SUM_ONLY
                           iSum+=p6[c7];
#else
                           iHandTypes[p6[c7] >> HAND_TYPE_SHIFT]++;
#endif
                        }
                     }

#endif
                  }
               }
            }
         }
      }
   }
   clock_tTimer=clock()-clock_tTimer;

#ifdef SUM_ONLY
   printf("OK: %d Cards benchmark SAVING intermidiate states SUM ONLY, clocks: %d, seconds: %2.4f, sum %d\n\n", CARDS_NUMBER, clock_tTimer, (float) clock_tTimer/CLOCKS_PER_SEC, iSum);
#else
   if (iHandTypes[HAND_TYPE_START]==NUMBER_OF_TESTS*HIGH_CARD_NUMBER && iHandTypes[HAND_TYPE_START+1]==NUMBER_OF_TESTS*PAIR_NUMBER && iHandTypes[HAND_TYPE_START+2]==NUMBER_OF_TESTS*TWO_PAIR_NUMBER && iHandTypes[HAND_TYPE_START+3]==NUMBER_OF_TESTS*TRIPS_NUMBER && iHandTypes[HAND_TYPE_START+4]==NUMBER_OF_TESTS*STRAIGHT_NUMBER && iHandTypes[HAND_TYPE_START+5]==NUMBER_OF_TESTS*FLUSH_NUMBER && iHandTypes[HAND_TYPE_START+6]==NUMBER_OF_TESTS*FULL_HOUSE_NUMBER && iHandTypes[HAND_TYPE_START+7]==NUMBER_OF_TESTS*QUADS_NUMBER && iHandTypes[HAND_TYPE_START+8]==NUMBER_OF_TESTS*STRAIGHT_FLUSH_NUMBER) {
      printf("OK: %d Cards benchmark SAVING intermidiate states CALCULATING HAND TYPES, clocks: %d, seconds: %2.4f\n\n", CARDS_NUMBER, clock_tTimer, (float) clock_tTimer/CLOCKS_PER_SEC);
   } else {
      printf("ERROR in Number of Hand Types\n");
      for (i=0;i<10;i++) {
         printf("Array Place %d, Value: %d\n", i, iHandTypes[i]);
      }
   }
#endif
}


Top
 Profile  
 
 Post subject: Re: 7-card Hand Evaluators
PostPosted: Tue Jun 17, 2008 2:09 pm 
Offline
Senior member
User avatar

Posts: 465
Favourite Bot: Mine, of course!
Results:

Code:
-      iHandTypes   
      [0]   0   
      [1]   13025400
      [2]   10982400
      [3]   1235520   
      [4]   549120   
      [5]   102000   
      [6]   51080   
      [7]   37440   
      [8]   6240   
      [9]   400   

Other than everything is 10x what Cactus posts for results (400 straight flushes instead of 40), there is no array out of bounds issue. Since you run 10 tests, this is correct. So it isn't the HandRanks.dat file.


Top
 Profile  
 
 Post subject: Re: 7-card Hand Evaluators
PostPosted: Tue Jun 17, 2008 3:49 pm 
Offline
Senior member
User avatar

Posts: 223
Favourite Bot: N/A
Small update, we exchanged the file with BlueSilicon, and his file was ok, so it is not a file problem.
He also got my latest (pointers) version compiled in C and it also works.
Now he will modify the small code to use integers instead of pointers and also in C, and that should work too, and leave us with a small code that will be ported to whatever he likes.
The problem should be either in the port, the usage (may be he is not using properly the indexes), or in the additional stuff that was added for Hand Strength evaluation.
Regards ...


Top
 Profile  
 
 Post subject: Re: 7-card Hand Evaluators
PostPosted: Tue Jun 17, 2008 4:34 pm 
Offline
Senior member
User avatar

Posts: 465
Favourite Bot: Mine, of course!
Ok, Adrian showed me the error of my ways!

Basically, I can't read. Bottom line is for the 5-card hand type I was doing this:
iHandTypes[u5 >> HAND_TYPE_SHIFT]++;
instead of this:
iHandTypes[p[u5] >> HAND_TYPE_SHIFT]++;

I carried this mistake through to calculating my 5-card HS by using this:
if (heroU5 > oppU5) . . .
instead of this:
if (p[heroU5] > p[oppU5]) . . .

Big thanks to Adrian for the help and taking the time to work this out with me, especially since I insulted his code by saying it didn't work. This issue is now resolved.


Top
 Profile  
 
 Post subject: Re: 7-card Hand Evaluators
PostPosted: Tue Jun 17, 2008 8:46 pm 
Offline
Senior member
User avatar

Posts: 223
Favourite Bot: N/A
Two recommendations if someone is trying to use the LUT.
1) Remember that the shift is used in order to get only the hand type to produce the counters, when you want to know the real hand the shift has not to be there.
2) Don't use first the optimized version that saves the states, this is a small optimization that is helpfull, but here is where you can easily mess up (and here did BlueSilicon messed up), so instead use directly the table like in this code, and then when you get this working, try saving the states to gain some small performance improvement (for the table that is here, BASE_ADDRESS is 53).
Code:
for (c1 = 1; c1 < END_CARD1; c1++) {
   for (c2 = c1+1; c2 < END_CARD2; c2++) {
      for (c3 = c2+1; c3 < END_CARD3; c3++) {
         for (c4 = c3+1; c4 < END_CARD4; c4++) {
            for (c5 = c4+1; c5 < END_CARD5; c5++) {
               HandValue5=p[p[p[p[p[BASE_ADDRESS+c1]+c2]+c3]+c4]+c5];
               for (c6 = c5+1; c6 < END_CARD6; c6++) {
                  HandValue6=p[p[p[p[p[p[BASE_ADDRESS+c1]+c2]+c3]+c4]+c5]+c6];
                  for (c7 = c6+1; c7 < END_CARD7; c7++) {
                     HandValue7=p[p[p[p[p[p[p[BASE_ADDRESS+c1]+c2]+c3]+c4]+c5]+c6]+c7];
                  }
               }
            }
         }
      }
   }
}

Regards ...


Top
 Profile  
 
 Post subject: Re: 7-card Hand Evaluators
PostPosted: Thu Jun 26, 2008 9:47 am 
Offline
Junior member
User avatar

Posts: 39
Location: FRANCE (ELSASS)
Favourite Bot: ElsassTracker
just a link to another 7 Hand Evaluator. (2004)

it uses CardMask strategie (no sorting needed)

http://www.azillionmonkeys.com/qed/poker.zip


Top
 Profile E-mail  
 
 Post subject: Re: 7-card Hand Evaluators
PostPosted: Tue Jul 01, 2008 9:53 pm 
Offline
Senior member
User avatar

Posts: 223
Favourite Bot: N/A
How about compiling the old code from Andrew Prock (the author of PokerStove) and benchmarking it?
This is the code, and there is an article also.
May be one of the Java guys can do this.


Top
 Profile  
 
 Post subject: Re: 7-card Hand Evaluators
PostPosted: Tue Aug 05, 2008 8:24 pm 
Offline
Senior member
User avatar

Posts: 223
Favourite Bot: N/A
I've found a new 7 cards evaluator:
http://www.pst.ifi.lmu.de/~hammer/poker/handeval.html
It explains how to use a DAG for 7 cards evaluator, that is the basic idea behind mykey1961 approach that implemented RayW.
I've compiled the C stuff, but not the Java stuff.


Top
 Profile  
 
 Post subject: Re: 7-card Hand Evaluators
PostPosted: Mon Aug 11, 2008 12:16 pm 
Offline
Regular member
User avatar

Posts: 66
Favourite Bot: mine
Hey all,

I've just read the UoA paper about "Opponent Modelling" (the short one) for the first time and it kinda opened my eyes. I'll try to explain in short what I've been doing so far in my bot. I've taken the raw HS and weighted it in a very very crude way. This gave me a very unreal approximation of my winning chances. Now that I have read the paper, I know I have to implement weight tables based on the actions my opponents made to get a better approximate of my winning chances. I want to start as simple as possible, i.e. I'd like to start with a static opponent model valid for every opponent and once I know I'm doing things right I'll add opponent specific models etc pp.

I'm already stuck and I hope this doesn't sound like silly questions. I have to add that I have only a hobbyist programing background, so please bear with me :) My current bot is coded in a C DLL.
First, I understand how to calculate HS and EHS as described in the paper, that's not the problem. Problem is, I have no idea how to integrate a hand evaluator into my C code. I took a look at poker-eval but unfortunately there is not much documentation for dummys (like me), and their examples are way too complicated for a programing newb like. I know I have to add hole cards and board cards to a CardMask, but I just couldn't figure out how as their examples use a ton of variables doing weird stuff before finally calling the PokerVal_N function (which obviously returns a hand rank). I looked through all of the poker-eval .c and header files to see what functions are available, but all that is really confusing me...

Now I remembered that there is this thread about hand evaluators.

1.) Is there a reason why poker-eval hasn't been benchmarked?
2.) The winner of the "contest" is the RayW LUT (look up table?) evaluator, but there is a remark that it only works for 7 card hands. Does that mean it will only work on the river? But I could still use it for a simulation on the flop to get my HS on the river, right? Sorry if this sounds silly. I'm a total newb with regards to hand evaluators!
3.) Would be someone so kind and post a very very simple example on how to use poker-eval? Something simple like As Ac vs. Ks Kh on a flop of 2c 6h Js, hard coded in the example? (e.g. no command line args) Just so I can see how to use those CardMasks. Like I said, their examples are confusing me....


Muchos thanks in advance!


Top
 Profile E-mail  
 
 Post subject: Re: 7-card Hand Evaluators
PostPosted: Mon Aug 11, 2008 4:01 pm 
Offline
Senior member
User avatar

Posts: 223
Favourite Bot: N/A
dipitlow wrote:
1.) Is there a reason why poker-eval hasn't been benchmarked?

It was benchmarked, but seems Indiana didn't put the result in the first page. It was slower than Steve Brecher's, if I recall correcly.

dipitlow wrote:
2.) The winner of the "contest" is the RayW LUT (look up table?) evaluator, but there is a remark that it only works for 7 card hands. Does that mean it will only work on the river? But I could still use it for a simulation on the flop to get my HS on the river, right? Sorry if this sounds silly. I'm a total newb with regards to hand evaluators!

Yes, it's the winner, not only for 7 cards but also for 5 and 6 cards. Only that Indiana didn't benchmarked that.

dipitlow wrote:
3.) Would be someone so kind and post a very very simple example on how to use poker-eval? Something simple like As Ac vs. Ks Kh on a flop of 2c 6h Js, hard coded in the example? (e.g. no command line args) Just so I can see how to use those CardMasks. Like I said, their examples are confusing me....

You can try Hold'Em Showdwon, by Stever Brecher (http://www.brecware.com/Software/software.html), it reads hole cards and board, and outputs EV.
It is faster than poker-eval if I recall correcly, and also easier to compile.


Top
 Profile  
 
 Post subject: Re: 7-card Hand Evaluators
PostPosted: Mon Aug 11, 2008 4:56 pm 
Offline
Regular member
User avatar

Posts: 66
Favourite Bot: mine
Thanks for your reply! I'll look into Steve Brechers Eval now.


Top
 Profile E-mail  
 
 Post subject: Re: 7-card Hand Evaluators
PostPosted: Mon Aug 11, 2008 10:31 pm 
Offline
Regular member
User avatar

Posts: 66
Favourite Bot: mine
Oh my, after 3 days I finally figured out how to use poker-eval! It actually isn't that hard if you know what to do with the CardMasks. The best and easiest example I found on how to use poker-eval was in the OpenHoldem source files for the prwin calculation by matrix.
Now I need to figure out Steve Brechers Evaluator which actually looks more complicated than poker-eval to me. If someone wants to post a simple Steve Brecher example, please do so and save me a few days of brain cracking :D I'm a little bit slow at such things.


Ok here is a total newb example for other newbs on how to use poker-eval in a C++ console application. Hands are hard coded and the output is just win%, tie% and los%. Also i'm more than certain that the loop can be optimized.


Code:
#include "stdafx.h"
#include "inlines/eval.h"


/*
2h =  0    2d = 13    2c = 26    2s = 39
3h =  1    3d = 14    3c = 27    3s = 40
4h =  2    4d = 15    4c = 28    4s = 41
5h =  3    5d = 16    5c = 29    5s = 42
6h =  4    6d = 17    6c = 30    6s = 43
7h =  5    7d = 18    7c = 31    7s = 44
8h =  6    8d = 19    8c = 32    8s = 45
9h =  7    9d = 20    9c = 33    9s = 46
Th =  8    Td = 21    Tc = 34    Ts = 47
Jh =  9    Jd = 22    Jc = 35    Js = 48
Qh = 10    Qd = 23    Qc = 36    Qs = 49
Kh = 11    Kd = 24    Kc = 37    Ks = 50
Ah = 12    Ad = 25    Ac = 38    As = 51
*/


//CardMasks for player cards, common cards, opponent card, additional common cards(turn+river) and the final 7 card hand to be evaluated
CardMask plCards, comCards, oppCards, adlcomCards, usedCards, evalCards;
HandVal pl_hv, opp_hv;
double win, tie, los;
// c4 = turn card, c5 = river card
int c4, c5;

int _tmain(int argc, _TCHAR* argv[])
{
   //set our hole cards Ah Ad
   CardMask_SET(plCards, 12);
   CardMask_SET(plCards, 25);

   //set opponent cards Kh Kd
   CardMask_SET(oppCards,11);
   CardMask_SET(oppCards,24);

   //set board cards Td 9d 8d
   CardMask_SET(comCards,21);
   CardMask_SET(comCards,20);
   CardMask_SET(comCards,19);

   //add all known cards to usedCards
   CardMask_OR(usedCards, plCards, comCards);
        CardMask_OR(usedCards, usedCards, oppCards);

   for(c4=0;c4<=51;c4++)
   {
      for(c5=c4+1;c5<=51;c5++)
      {
         //check if turn/river card is already used
         if((CardMask_CARD_IS_SET(usedCards, c4) || CardMask_CARD_IS_SET(usedCards, c5)))
            continue;

         //reset turn/river cards
         CardMask_RESET(adlcomCards);
         CardMask_SET(adlcomCards,c4);
         CardMask_SET(adlcomCards,c5);
         CardMask_OR(evalCards, plCards, comCards);
         CardMask_OR(evalCards, evalCards, adlcomCards);

         pl_hv = Hand_EVAL_N(evalCards, 7);

         CardMask_RESET(evalCards);
         CardMask_OR(evalCards, oppCards, comCards);
         CardMask_OR(evalCards, evalCards , adlcomCards);

         opp_hv = Hand_EVAL_N(evalCards, 7);

         if(pl_hv > opp_hv)
            win++;
         else if(pl_hv == opp_hv)
            tie++;
         else
            los++;
      }
   }
   printf("WIN -> %f\n", win / (win+tie+los));
   printf("TIE -> %f\n", tie / (win+tie+los));
   printf("LOS -> %f\n", los / (win+tie+los));
   return 0;
}


Top
 Profile E-mail  
 
 Post subject: Re: 7-card Hand Evaluators
PostPosted: Mon Aug 11, 2008 10:42 pm 
Offline
PokerAI fellow
User avatar

Posts: 7731
Favourite Bot: V12
I think somewhere in the beginning of this thread we approximated the speed of pokereval (Timmy ripped and ran that and compared it to my old Indiana's evaluators) and it wasn't so good.

_________________
indiana


Top
 Profile E-mail  
 
 Post subject: Re: 7-card Hand Evaluators
PostPosted: Mon Aug 11, 2008 10:46 pm 
Offline
PokerAI fellow
User avatar

Posts: 7731
Favourite Bot: V12
OK, the comparison is actually just in the very beginning, I updated OP. We have run by Timmy where my evaluators on his side gie similar results to the one they give on my side. Then on his side the results with poker eval are:

(3') Poker Eval's Hand_EVAL_N() in C - Approximated, unofficial!
--- Hands per second: 37467856

This is about 1/3rd of RayW performance, and about the Steve's performance.

_________________
indiana


Top
 Profile E-mail  
 
 Post subject: Re: 7-card Hand Evaluators
PostPosted: Mon Aug 11, 2008 11:05 pm 
Offline
Regular member
User avatar

Posts: 66
Favourite Bot: mine
Thanks Indy! Good news that I can forget about Steve Brechers eval for now :)

Btw is there a C version somewhere of RayW's evaluator? I didn't dig through the whole thread yet as I'm too busy to understand others code which I obviously suck at.


Top
 Profile E-mail  
 
 Post subject: Re: 7-card Hand Evaluators
PostPosted: Mon Aug 11, 2008 11:09 pm 
Offline
PokerAI fellow
User avatar

Posts: 7731
Favourite Bot: V12
As for Steve's he is my favourite as he also supports other game variants too, as well as much less memory than RayW (which requires about 100+M memory and disk space). Your question is a good reminder to organize the most important links (as well as todos) within in this thread in the OP - I believe Adrian posted RayW in C somewhere within the thread.

_________________
indiana


Top
 Profile E-mail  
 
 Post subject: Re: 7-card Hand Evaluators
PostPosted: Mon Aug 11, 2008 11:18 pm 
Offline
Regular member
User avatar

Posts: 66
Favourite Bot: mine
Hmm ok, didn't read about the memory usage. I'll stick with poker-eval then I guess.

Btw, in the UoA paper about Opponent Modelling they write:

Quote:
Recall that EHS is a function of both HS and Ppot. Since
Ppot2 is expensive to compute, we currently use a crude but
fast function for estimating potential, which produces
values within 5% of Ppot2, 95% of the time.


Do you know how they do that? My guess is they do a simple Monte Carlo simulation?


Last edited by dipitlow on Mon Aug 11, 2008 11:22 pm, edited 1 time in total.

Top
 Profile E-mail  
 
 Post subject: Re: 7-card Hand Evaluators
PostPosted: Mon Aug 11, 2008 11:21 pm 
Offline
PokerAI fellow
User avatar

Posts: 7731
Favourite Bot: V12
dipitlow, there was a separate very extensive thread on that, including improvements vs the Alberta's paper. Search for it by EHS or EHS2.

_________________
indiana


Top
 Profile E-mail  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 399 posts ]  Go to page Previous  1 ... 4, 5, 6, 7, 8, 9, 10 ... 20  Next


Who is online

Users browsing this forum: Google and 8 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to: