Bitcoin Forum
April 13, 2018, 10:40:16 AM *
News: Latest stable version of Bitcoin Core: 0.16.0  [Torrent]. (New!)
 
   Home   Help Search Donate Login Register  
Pages: « 1 ... 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 [153] 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 »
  Print  
Author Topic: [ANN][YAC] YACoin ongoing development  (Read 352485 times)
senj
Member
**
Offline Offline

Activity: 118
Merit: 10


View Profile
July 26, 2015, 01:19:11 AM
 #3041

Speaking of new code:
I updated GetBlockTrust and added GetNextTargetRequired changes.

That encompasses two (out of three) major changes we need to patch yacoin.

What I would like to do next is talk about my next goal: Before these changes go in effect, I would like to do more refactoring (prepare, this might hurt a bit) and swap PoS block nNonce and nBits.
And the reason has to do with what I believe will be one of next major yacoin issues - future implementation of Headers-first method. Hard fork is the only right time to do such things. This way we can make it possible to determine chain trust from headers only (once you understand the changes I linked to), otherwise all clients will need to download and process full blockchain. This will become very time and resource consuming with each next block - and yacoin system generates a lot of them.

However, before I start,  I need some feedback from community - do I have your support? Will I get any help? Opposition?
And please check out two links above.
1523616016
Hero Member
*
Offline Offline

Posts: 1523616016

View Profile Personal Message (Offline)

Ignore
1523616016
Reply with quote  #2

1523616016
Report to moderator
1523616016
Hero Member
*
Offline Offline

Posts: 1523616016

View Profile Personal Message (Offline)

Ignore
1523616016
Reply with quote  #2

1523616016
Report to moderator
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction. Advertise here.
1523616016
Hero Member
*
Offline Offline

Posts: 1523616016

View Profile Personal Message (Offline)

Ignore
1523616016
Reply with quote  #2

1523616016
Report to moderator
1523616016
Hero Member
*
Offline Offline

Posts: 1523616016

View Profile Personal Message (Offline)

Ignore
1523616016
Reply with quote  #2

1523616016
Report to moderator
old c coder
Sr. Member
****
Offline Offline

Activity: 257
Merit: 250



View Profile WWW
July 26, 2015, 06:58:41 PM
 #3042

Hello Senj,

Inline below are  a few questions and thoughts

Speaking of new code:
I updated GetBlockTrust and added GetNextTargetRequired changes.

That encompasses two (out of three) major changes we need to patch yacoin.
I have looked at the code at both links.

First, since the original code (Bitcoin 0.7.4 aka Yacoin) is/was poorly documented, obscurely coded, unintentionally I'm sure, and written in a language (C++) that is more than opaque (1400 pages to "explain" the latest 4th incarnation of C++!!!!  Come on) I find that it is difficult squared reading the source for true "grokness"  Smiley

So since I don't understand things like why the special ctor CBlockIndex::CBlockIndex(unsigned int nFileIn, unsigned int nBlockPosIn, CBlock& block) is only called/instantiated by CBlock::AddToBlockIndex(), it is hard to see much deeper into the code.

Maybe I'm just different, but when I worked in the industry, we had a (much) higher standard of code "readability" and documentation.

Looking at your new CBlockIndex method GetPoWPoSRatio(), what is the intent of the integral nature of its return value?  It seems to me that it (the return value), since the code is doing an integral division, will be 0, 1, 2,...

How is that to be interpreted? 

Also is the "best chain" whatever that is (!?) what the code is using?  The first if() seems to be returning the number of PoW blocks / number of PoS blocks, only if the current block is PoS.  Why isn't the return the same if it isn't?  I'm missing something here too!  Smiley

Does the
if ( ppos->nPosBlockCount == 0 )   // should never happen
    return 0;

should never happen comment mean that two consecutive PoW blocks were just found??  And what does the return 0 mean/signify/imply?  Is it good? Is it bad?  Is it immaterial?  Is it boolean? 

I would at least like NEVER to see a magic number as a return value.  One can always in C++, define a meaningful name to be 0, thereby denoting and connoting the meaning/intent/context of the return value.

I would suggest an old C  #define if nothing else!  Perhaps a C++  const unsigned int variable or even a C++ enum.  They all are equivalent after any compiler digests it, and the code is the same, just as fast, but much more readable.

It is my reading that you are proposing adding a 32 bit unsigned int count of PoS blocks to the CBlockIndex class definition, to make some calculation faster/easier? 

I can't go much deeper until I can understand the things mentioned above.

I would be curious what other coders have to say about these things, or am I alone in the wilderness? Roll Eyes
Quote
[/tt]

What I would like to do next is talk about my next goal: Before these changes go in effect, I would like to do more refactoring (prepare, this might hurt a bit) and swap PoS block nNonce and nBits.
And the reason has to do with what I believe will be one of next major yacoin issues - future implementation of Headers-first method.
Looking at main.h, the CBlockHeader  class's last members are the unsigned ints nBits and nNonce.  I do not get the reason/purpose/intent of swapping their order?  I must be missing some other piece(s) of information, but it seems to me that it is immaterial which is first?  Similarly with nTime, the unsigned int before them?

I feel that there must be some (more) undocumented code that depends/relies upon the order of the members that I am not aware of?  If it is just undocumented magic number offsets in some code, for example, the definition of nBlockNonce in BitcoinMiner() in main.cpp, then I think we should fix those undocumented items first!

I don't see what "headers first method" (what ever that is!) has to do with the header being ordered slightly differently?
Quote

 Hard fork is the only right time to do such things. This way we can make it possible to determine chain trust from headers only (once you understand the changes I linked to), otherwise all clients will need to download and process full blockchain. This will become very time and resource consuming with each next block - and yacoin system generates a lot of them.
Isn't a full node all ready in possession of the whole block chain?  Or am I missing something in your logic?  And as I said previously, doesn't that full node already scan all the blocks in its possession at start up, so that it (the node) "knows" all there is to know,  PoW/PoS counts, ratios, last few block types, etc.?  And it's not like the blocks are really that much bigger than their headers.  Most have only the creation transaction, very few actual transactions, at least lately from what I have seen.

Again, am I missing something hidden/not stated here?
Quote

However, before I start,  I need some feedback from community - do I have your support? Will I get any help? Opposition?
And please check out two links above.

I am generally 'fer' it not 'agin' it, in principle.  But whether I understand what the code is intending and how it is accomplishing it, or what the code is actually doing and whether that is what was intended, I can't say!  I can't even say what the current code is intending, nor what it is doing and whether they are the same.

I come from the postion that if one wants open source code to be understood by the widest possible audience, then the code has to be edited much as a literary editor edits a book (fiction or non-fiction).  layout (formatting) is important too, much like a book.

I think that if the code was much more transparent as opposed to being opaque, we might find that there are minds out there, that can see more deeply into the code and come up with insights that elude the "geek mind" that reads code through a constant filter (internal symbol table) in their own head, that memorizes and translates all the abbreviations, name-contractions, magic numbers,  greater than 200 character lines, ... and then has to paraphrase every line, method, class, template, macro, file,... in the program to state what is going on.

No paraphrasing should be necessary.

The editing of the source, that leaves the executable identical, byte for byte, but increases the readability, should have been done to the first or very early versions of the Bitcoin source.  Then all the coins wouldn't be in the state they are in.

We are six years into the life of Bitcoin, and there are functions, methods, names,... that haven't changed from the first versions. That is pure laziness, since editing is a very difficult but necessary job.   See Joel Spolsky's rub a dub dub:
http://www.joelonsoftware.com/articles/fog0000000348.html

A friend tells me that every 5 versions, where he works, they stop and do that, a cleanup, etc. of the code.  Hard to justify to a "bean counter" manager/corporation that a no change to the executable pause should occur in the process.  But since Bitcoin was/is not a private business thing, it should have been cleaned up, over and over again, from 0.3.1 to 0.11.0,  but I see no evidence of it.  Bad habits or the lack of ever having been exposed to good habits or laziness are the only explanations I can come up with.

Well, there's my 2centz

Ron



LTC: LUYiMVsrFQewUSPDasSKGzhyTPAkiTeSov BTC: 1DPvP6WoZzaNQ9Nxzd64hjYad1kyQzTTbx YAC: Y3ZggXDvnRJaRwtVGyGJwt6DMLN3EPQpQf 
The day is coming when a single carrot, freshly observed, will set off a revolution.  Paul Cezanne
senj
Member
**
Offline Offline

Activity: 118
Merit: 10


View Profile
July 27, 2015, 12:50:23 AM
 #3043

...
So since I don't understand things like why the special ctor CBlockIndex::CBlockIndex(unsigned int nFileIn, unsigned int nBlockPosIn, CBlock& block) is only called/instantiated by CBlock::AddToBlockIndex(), it is hard to see much deeper into the code.

instantiated only from CBlock::AddToBlockIndex()  is my comment - I've made it while I've been checking constructor usage. And I forgot to delete it. It has no higher purpose. Sorry.


...
Also is the "best chain" whatever that is (!?) what the code is using? 
...

If you mean pIndexBest - perhaps you also need to check current testing version source from github to make more sense. But yes, best chain is a valid one with highest chain trust.


...
The first if() seems to be returning the number of PoW blocks / number of PoS blocks, only if the current block is PoS.  Why isn't the return the same if it isn't?  I'm missing something here too!  Smiley
...

Having nPoSBlockCount stored only with PoS blocks takes less disk space (10 times less PoS blocks now). Besides if ratio would be 9.9999 at PoS block (rounded down to 9 due integral type) and after long sequence of PoW blocks back to 10 - and after next PoS block 9 again - that I did not want - I was considering removing noTwoConsecutivePoSBlocks rule when ratio hits 3 and I did not want that to float back to 4. This is only theory anyway, I might have missed the point completely.


...
Looking at your new CBlockIndex method GetPoWPoSRatio(), what is the intent of the integral nature of its return value?  It seems to me that it (the return value), since the code is doing an integral division, will be 0, 1, 2,...
...

This value later dictates number of consequent PoW blocks after PoS block, after which difficulty jumps and trust falls.
Having it truncated also forces PoW blocks window to "shrink" a bit sooner than real ratio would, thereby stimulating PoS block inclusion.
Decimal value would cause unnecessary conversions in calculations later.



...
Does the
if ( ppos->nPosBlockCount == 0 )   // should never happen
    return 0;

should never happen comment mean that two consecutive PoW blocks were just found??  And what does the return 0 mean/signify/imply?  Is it good? Is it bad?  Is it immaterial?  Is it boolean? 
...

I wasn't sure what you get if you call GetLastBlockIndex( *, true ) before first PoS block or when a bug was present. I did not want to allow division with zero so I returned 0 before next step. GetPoWPoSRatio() should always be called only on PoS blocks. And not before we switch to new version. Feel free to advise on best correction.


...
It is my reading that you are proposing adding a 32 bit unsigned int count of PoS blocks to the CBlockIndex class definition, to make some calculation faster/easier? 
...

Are you asking, why we need that ratio?
As you know PoS blocks can be ignored by PoW miners. My fix goes like this:

1. Take the current PoW/PoS block ratio
2. Count PoW blocks after PoS block and if it gets over that ratio, incrementally raise difficulty and lower trust.


...
Looking at main.h, the CBlockHeader  class's last members are the unsigned ints nBits and nNonce.  I do not get the reason/purpose/intent of swapping their order?  I must be missing some other piece(s) of information, but it seems to me that it is immaterial which is first?  Similarly with nTime, the unsigned int before them?
...

I would not swap order. I would swap their content.
In my code, PoW block target moving average is now stored in PoS block nNonce (instead of current 0).
If it would be stored in PoS block nBits, we could later calculate approximate chaintrust from block headers only.
Currently PoS block nBits attribute holds PoS block difficulty and that would need to be moved and code changed. But moved where? nNonce is the only candidate left.


The problem is, you can only partly differentiate PoW block from PoS block if you do not have transaction data, only headers (because there are some PoW blocks with nNonce=0 and there are some PoS blocks with target < bnProofOfWorkLimit). And you can not mix and aggregate their targets (nBits) to arrive at final chaintrust value without knowing what "type" of nBits you are operating with.



...
Isn't a full node all ready in possession of the whole block chain?
...

Headers-only method has a well documented purpose. The need for it will be even more aparent with Yacoin than with Bitcoin.
There could be other and better solutions, that is why I wanted feedback.


...
And as I said previously, doesn't that full node already scan all the blocks in its possession at start up, so that it (the node) "knows" all there is to know,  PoW/PoS counts, ratios, last few block types, etc.?
...

I don't know how to quickly and repeatedly get PoW/PoS ratio now without scanning and processing ever growing now 1M+ items long hash map. Please let me know.


...
And it's not like the blocks are really that much bigger than their headers.  Most have only the creation transaction, very few actual transactions, at least lately from what I have seen.
...

We'd like that to change one day. Wouldn't we?


...
Maybe I'm just different, but when I worked in the industry, we had a (much) higher standard of code "readability" and documentation.
...

No, you are not different. This is just not industry anymore. I am learning C++ while fixing yacoin. Imagine how much I am getting paid for extensive analysis design and documentation.

Thanks for your input. You are welcome to elaborate.

Regarding your version with integrated explorer: I do not have QT installed and haven't programmed with it ever. Would you mind posting a screenshot or two?
Another thing I wanted to ask - why not use http://msinttypes.googlecode.com/svn/trunk/ in MSVC release? Wouldn't that cut down number of ifdefs and make a code more compatible?
old c coder
Sr. Member
****
Offline Offline

Activity: 257
Merit: 250



View Profile WWW
July 27, 2015, 03:55:26 AM
 #3044

...
Regarding your version with integrated explorer: I do not have QT installed and haven't programmed with it ever.
Me neither Roll Eyes  You will realize it when you see the code (lol)
Quote
Would you mind posting a screenshot or two?
How about a silent video? http://lostabout.com/btc/yactest3.avi
Quote
Another thing I wanted to ask - why not use http://msinttypes.googlecode.com/svn/trunk/ in MSVC release? Wouldn't that cut down number of ifdefs and make a code more compatible?
The code is quite compatible already.  Some files compile with no changes at all.  Those two files are pretty much covered already in util.h and compat.h. I only included the MS  stdint.h in a few files when boost stuck its nose in trying to define stuff that was already defined!

The only recurring issue was that the MSC++ compiler found ambiguity with certain types, that I found easiest to resolve with a :: in the code.  The types were the same, but the compiler can't presume that.  That and a ton of warnings on what can only be called sloppy code was about it.  Notice that in the daemon make file makefile.mingw, that in CFLAGS there is the -w argument! Try making without that and see what falls out.  It looks like the qt compile output Smiley

All of the above goes for Bitcoin and other coins too, so YAcoin is not alone!! They all could use a Joel Spolsky rub a dub dub Roll Eyes

Ron


LTC: LUYiMVsrFQewUSPDasSKGzhyTPAkiTeSov BTC: 1DPvP6WoZzaNQ9Nxzd64hjYad1kyQzTTbx YAC: Y3ZggXDvnRJaRwtVGyGJwt6DMLN3EPQpQf 
The day is coming when a single carrot, freshly observed, will set off a revolution.  Paul Cezanne
Grim
Sr. Member
****
Offline Offline

Activity: 398
Merit: 250


View Profile
July 27, 2015, 01:15:18 PM
 #3045

I want to throw some hash at the new pool.

Got it all working but my amd gpus with yacminer have up to 30% rejects and that is on top of the pool having 20-30% orphans.

Since the orphan issue is beeing looked at code wise (wallet),

is there anything I can do to lower the rejects in yacminer?
I'm normally used to 1-3% but 30% ...

What have you guys set your values for

scan time
queue
expiry

?

senj
Member
**
Offline Offline

Activity: 118
Merit: 10


View Profile
July 28, 2015, 01:07:53 AM
 #3046

How about a silent video? http://lostabout.com/btc/yactest3.avi
...

Thanks Ron, that looks much better than I expected. I hope this will get into new release.
mamahdedeh
Full Member
***
Offline Offline

Activity: 188
Merit: 100


https://ubiatarplay.io


View Profile
July 28, 2015, 01:15:13 AM
 #3047

i will keep this coin for asset  Cheesy

mitache365
Hero Member
*****
Offline Offline

Activity: 732
Merit: 500


View Profile
July 28, 2015, 07:59:33 AM
 #3048

any working config for gtx970 ?!

BTC
senj
Member
**
Offline Offline

Activity: 118
Merit: 10


View Profile
July 28, 2015, 10:17:44 AM
 #3049

Speaking of new code:
I updated GetBlockTrust and added GetNextTargetRequired changes.

That encompasses two (out of three) major changes we need to patch yacoin.
...
Updated GetNextTargetRequired function, this one takes care of "resetting" difficulty after PoS blocks.
Also updated code for raising difficulty of overstepped PoW blocks. In color:

http://yacoin.net/NewPreventPosIgnore3.htm
Beave162
Hero Member
*****
Offline Offline

Activity: 732
Merit: 500



View Profile
July 29, 2015, 03:26:49 PM
 #3050

I want to throw some hash at the new pool.

Got it all working but my amd gpus with yacminer have up to 30% rejects and that is on top of the pool having 20-30% orphans.

Since the orphan issue is beeing looked at code wise (wallet),

is there anything I can do to lower the rejects in yacminer?
I'm normally used to 1-3% but 30% ...

What have you guys set your values for

scan time
queue
expiry

?



Which pool?

I'm on http://yac.erlog.pt/ with less than 1% rejection rate. Scan-time 10, expiry 30, queue default, but I don't think those settings should matter.

YaCoin: YL5kf54wPPXKsXd5T18xCaNkyUsS1DgY7z 
BitCoin: 14PFbLyUdTyxZg3V8hnvj5VXkx3dhthmDj
MemberCount+1
Hero Member
*****
Offline Offline

Activity: 798
Merit: 1000



View Profile
July 31, 2015, 05:10:17 PM
 #3051

I have no other choice, yac.erlog.pt is scam or has a big bug! i found today 3 blocks again over this pool and these blocks do not show in the transactions, rewards, history or somewhere. the blocks exists in the blockchain as no orphan. what is with the scrypt-jane coins? all over Problems, DDoS, Bugs ... bullshit  Angry

this is one of them http://explore.grokonet.com/?blocknumber=1158827
Qxw
Full Member
***
Offline Offline

Activity: 203
Merit: 100


View Profile
August 06, 2015, 01:34:19 PM
 #3052

What is going on in pool?:  yac.erlog.pt
It looks like block confirmations do not progress normally.


It looks like this mysterious problem is now repaired. Nice work!


BTC, BCH, BTG, UTC
Joe_Bauers
Hero Member
*****
Offline Offline

Activity: 786
Merit: 1000


GCVMMWH


View Profile
August 09, 2015, 10:01:02 PM
 #3053

So pool is looking good now? Do we have any others that I should promote?
alenevaa
Sr. Member
****
Offline Offline

Activity: 288
Merit: 260



View Profile WWW
August 10, 2015, 08:29:31 AM
 #3054

Do we have any others that I should promote?
yac.yacoin.club will be available on new dedicated server ASAP  Cool

██████████████████████
████████████████████████
████████████████████████
████████████████████████
███████████████████████
█████████████████████
████████████████████████
████████████████████████
██████████████████████
██████████████████████
███████████████████████
████████████████████████
████████████████████████
████████████████████████
███████████████████████
██████████████████████
|
WINGS           
Where DAO Unicorns are born
|
.
1st Bitcoin & Ethereum DAO for DAOs
1st Decentralized Chatbot to Smart Contracts Interaction System

|
.
Wings Bounties Earn Eggs
X-Blockchain DAO

senj
Member
**
Offline Offline

Activity: 118
Merit: 10


View Profile
August 11, 2015, 09:11:31 AM
 #3055

Do we have any others that I should promote?
yac.yacoin.club will be available on new dedicated server ASAP  Cool

I hope it will give a lot of hash power - this was couple of hours ago:

Code:
received block 00000a577e0f910f82cd
REORGANIZE
REORGANIZE: Disconnect 586 blocks; 00000c64dddbb9e96137..000000559ef41a7cb4bd
REORGANIZE: Connect 627 blocks; 00000c64dddbb9e96137..00000a577e0f910f82cd
alenevaa
Sr. Member
****
Offline Offline

Activity: 288
Merit: 260



View Profile WWW
August 24, 2015, 07:23:53 AM
 #3056

The new record
Code:
received block 00000c249c1f413f9324
REORGANIZE
REORGANIZE: Disconnect 1606 blocks; 000004d8418aeb226ddb..000002a762e08f03fd87
REORGANIZE: Connect 2641 blocks; 000004d8418aeb226ddb..00000c249c1f413f9324

MM spent a good weekend

██████████████████████
████████████████████████
████████████████████████
████████████████████████
███████████████████████
█████████████████████
████████████████████████
████████████████████████
██████████████████████
██████████████████████
███████████████████████
████████████████████████
████████████████████████
████████████████████████
███████████████████████
██████████████████████
|
WINGS           
Where DAO Unicorns are born
|
.
1st Bitcoin & Ethereum DAO for DAOs
1st Decentralized Chatbot to Smart Contracts Interaction System

|
.
Wings Bounties Earn Eggs
X-Blockchain DAO

senj
Member
**
Offline Offline

Activity: 118
Merit: 10


View Profile
August 24, 2015, 07:50:28 PM
 #3057

old c coder, I considered your comments and realized you made very substantial arguments.
Therefore I've made changes:

GetPoWPoSRatio() function now returns double, and there is new GetSpacingThreshold() function that adjusts, rounds and converts that ratio to integer.
Now Proof Of Work target moving average does not get stored in PoS block's nonce attribute. I've added to CBlockIndex class new member nBitsMA for that purpose. Like you said - having it in PoS block's nonce was not needed, and second: I think it is even better, if we can keep PoS nonce at 0 and force PoW blocks have nonce>0. That is how we will be able to easily differentiate blocks in future and derive chaintrust only from headers.

Next I've managed to complete code upgrade. I've split github commits into logical contexts. I suggest you start scrutinizing from oldest one on, because that functionality get's reused in later commits.

Last commit will need to be explained, but in short: it deals with small value ProofOfStake blocks in a way Balthazar mentioned more than a year ago (the need to make attack energy expensive). I had a complex solution for that, but then I came up with a better one: reuse scrypt-jane and transform stake kernel hash operation to use memory(scrypt-jane) for hash, and stakeNfactor used gets calculated from stake kernel value. I also introduced new higher dynamic threshold - you now need more than 20 coins (in one input) to generate stake and that value is incrementally increasing. Again, a lot of explaining needed here, also regarding optimizations...

First, I need proficient eyes to take a look and raise flags on possible obvious errors.
Unfortunately I do not have resources to test this, so this is done kind of Beethoven style (after he went deaf).
But I think we can make it work.

here:
https://github.com/senadj/yacoin/commits/smallpos
alenevaa
Sr. Member
****
Offline Offline

Activity: 288
Merit: 260



View Profile WWW
August 25, 2015, 09:47:21 AM
 #3058

Senj, please fix issue with massive chain reorganization in the future update.
No more than 520 (or any other reasonable number) blocks can be disconnected ever.

██████████████████████
████████████████████████
████████████████████████
████████████████████████
███████████████████████
█████████████████████
████████████████████████
████████████████████████
██████████████████████
██████████████████████
███████████████████████
████████████████████████
████████████████████████
████████████████████████
███████████████████████
██████████████████████
|
WINGS           
Where DAO Unicorns are born
|
.
1st Bitcoin & Ethereum DAO for DAOs
1st Decentralized Chatbot to Smart Contracts Interaction System

|
.
Wings Bounties Earn Eggs
X-Blockchain DAO

bitcodo
Hero Member
*****
Offline Offline

Activity: 509
Merit: 500

Can't upload avatar


View Profile
August 25, 2015, 11:32:20 AM
 #3059

Hi, is there any pool that works? erlog or alenevaa's? I need config for R7 240 4GB, but Thirtybird's ultracoin config is for N16 max. Do i have to just increase lookup-gap, or any other parameter?
Thanks
Beave162
Hero Member
*****
Offline Offline

Activity: 732
Merit: 500



View Profile
August 25, 2015, 11:55:52 AM
 #3060

Hi, is there any pool that works? erlog or alenevaa's? I need config for R7 240 4GB, but Thirtybird's ultracoin config is for N16 max. Do i have to just increase lookup-gap, or any other parameter?
Thanks

Only setting you need to change is the lookup-gap to 11, and you should be good to go.

YaCoin: YL5kf54wPPXKsXd5T18xCaNkyUsS1DgY7z 
BitCoin: 14PFbLyUdTyxZg3V8hnvj5VXkx3dhthmDj
Pages: « 1 ... 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 [153] 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 »
  Print  
 
Jump to:  

Sponsored by , a Bitcoin-accepting VPN.
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!