WebUITo access WebUI, just type 127.0.0.1:8833 or localhost:8833 on your Browser. You'll see homepage of Gocoin which show some statistic about your node. Most parts is easy to understand if you already use Bitcoin Core with primary intention to run full node. I don't what SPB refers though. "Transactions" tab shows your node mempool. Compared with Bitcoin Core, Gocoin show more detail information about your node mempool statistic. You can enable/disable memory pool and transaction relay here. You also can upload and broadcast transaction as well. I haven't test this feature yet, so i don't know accepted transaction file format. If you scroll down, you also can see list of transaction on your node mempool. It's quite detailed where it shows total signature operation and time to verify the transaction in milliseconds (ms). You also can choose how much transaction to be shown and how it's sorted. "Blocks" tab show some newest blocks. It's quite interesting to see total signature operation of each block, which rarely shown on Bitcoin block explorer. The rest is something you can see on most block explorer. "Miners" tab show statistic about miner during last 24 hours. I like how Gocoin show how much BTC earned by miner/pool from transaction fees. "Counters" tab show lots of statistic about your node. Most of you won't find it's interesting, unless you're trying to analyze something. TextUITextUI is available after you start Gocoin from terminal, load all UTXO/mempool to RAM and optionally start WebUI server. When you enter help, there are 56 available commands. But i'll just show few command here. By the way, the TextUI doesn't support key up to show previous typed command. Gocoin client version 1.10.1 Using config file gocoin.conf Using modernc.org/memory package to skip GC for UTXO records Public auth key: @2295tiTyJeYkL8aroquqbuA8EEt5YPYCGQouSfGu7t9Gv Using libsecp256k1.a for ECVerify, SchnorrVerify & CheckPayToContact Blockchain open in 1m16.1746388s. 5078 + 9374 MB of RAM used (6024) Connect to bitcoin network via 127.0.0.1:8333 1404 transactions taking 990429 Bytes loaded from mempool.dmp 201 transactions use 212 memory inputs Starting WebUI at 127.0.0.1:8833 ssl_cert/ca.crt not found > help The following 56 commands are supported: allbal, ab - Show Allbalance statistics balance, a - List balance of given bitcoin address (or raw public key) ban - Ban a peer specified by IP bchain, b - Display blockchain statistics bip9 - Analyze current blockchain for BIP9 bits (add 'all' to see more) cache - Show blocks cached in memory configload, cl - Re-load settings from the common file configsave, cs - Save current settings to a common file configset, cfg - Set a specific common value - use JSON, omit top {} conn - Connect to the given node (specify IP and optionally a port) counters, c - Show all kind of debug counters dlimit, dl - Set maximum download speed. The value is in KB/second - 0 for unlimited drop - Disconenct from node with a given IP friends - Show current friends settings getmp, mpg - Send getmp message to the peer with the given ID help, h, ? - Shows this help info, i - Shows general info about the node inv - Send inv message to all the peers - specify type & hash kill - Kill the node. WARNING: not safe - use 'quit' instead maxouts, o - Show addresses with highest number of outputs [0,1,2,3 or count] mem - Show detailed memory stats (optionally free, gc or a numeric param) mempool, mp - Show the mempool statistics minerstat, m - Look for the miner ID in recent blocks (optionally specify number of hours) net, n - Show network statistics. Specify ID to see its details. newblock, nb - build a new block nodestat, ns - Shows all known nodes version statistics peeradd, pa - Add a peer to the database, mark it as alive peerdel, pd - Delete peer from the DB peers, p - Operation on pers database ('peers help' for help) pend - Show pending blocks, to be fetched purge - Purge all unspendable outputs from UTXO database quit, q - Quit the node rd - Show recently disconnected incoming connections redo - Redo last block richest, r - Show addresses with most coins [0,1,2,3 or count] savebl - Saves a block with a given hash to a binary file saveutxo, s - Save UTXO database now trust, t - Assume all donwloaded blocks trusted (1) or un-trusted (0) tx1send, stx1 - Broadcast transaction to a single random peer (identified by a given <txid>) txcheck, txc - Verify consistency of mempool txchild, ch - show all the children fo the given tx txdecode, td - Decode a transaction from memory pool (identified by a given <txid>) txdel, dtx - Remove a transaction from memory pool (identified by a given <txid>) txlist, ltx - List all the transaction loaded into memory pool up to 1MB space <max_size> txlistban, ltxb - List the transaction that we have rejected txload, tx - Load transaction data from the given file, decode it and store in memory txmpload, mpl - Load transaction from the given file (must be in mempool.dmp format) txmpsave, mps - Save memory pool to disk txsave - Save raw transaction from memory pool to disk txsend, stx - Broadcast transaction from memory pool (identified by a given <txid>) txsendall, stxa - Broadcast all the transactions (what you see after ltx) ulimit, ul - Set maximum upload speed. The value is in KB/second - 0 for unlimited unban - Unban a peer specified by IP[:port] (or 'unban all') undo - Undo last block utxo, u - Display UTXO-db statistics wallet, w - Enable (on) or disable (off) wallet functionality
allbal or ab shows Bitcoin distribution on each address. I just found out there are at least 11500 Bitcoin stored on Taproot address. > ab AllBalMinVal: 0.00100000 UseMapCnt: 100 AllBalancesP2KH: 9316080 records, 15769961 outputs, 8453062.37091608 BTC, 8065 maps AllBalancesP2SH: 4880392 records, 8708172 outputs, 5060770.48319191 BTC, 4659 maps AllBalancesP2WKH: 6008374 records, 9031904 outputs, 3097910.65303046 BTC, 2387 maps AllBalancesP2WSH: 423467 records, 494987 outputs, 734667.71948642 BTC, 78 maps AllBalancesP2TAP: 29907 records, 32859 outputs, 11509.20487519 BTC, 2 maps Ready in 2.336s
balance or a show balance of an address or raw public key. The result is quite detailed which show when and how much an address receive Bitcoin. I really like this feature since it's fast and not exist on Bitcoin. But i wonder why the developer chose a as short hand option rather than b, bl or bal. > a bc1qu8ujv03v0g4h4dpvempm9snkrrmrue4m5dsmtf bc1qu8ujv03v0g4h4dpvempm9snkrrmrue4m5dsmtf has 0.06024620 BTC in 4 records: 0.01468000 BTC 2760df3b1f0ca44b0f698a34017c7c70b631dfea2707c5ecdecacdb327b3494c-003 737049 0.01528000 BTC 601fedd571bdfc1d2a1942820b8a215989a4183178b4b3bb9f22ecd1ccdd2540-002 740308 0.01600750 BTC 4e3a91f58e2fb0669ab8430eb5c4271c75ad7d0be6f52b54fddebfff648791a1-004 744138 0.01427870 BTC f811c517cc2cf53cf37cde949b58e1176edf9406e06ee229ca23e5977cb2ffce-001 746595 Ready in 0.001s
richest or r show Bitcoin address with most Bitcoin. It also can show richest Bitcoin addressed based on address type. I wouldn't use it much, but it's good this feature exist. > richest help Specify the address type or/and number of top records to display Valid address types: 0-P2K, 1-P2SH, 2-P2WKH, 3-P2WSH, 4-P2TAP Ready in 0.000s > richest 1 5 Counting only addr type P2SH 5059253.17916417 BTC in 8708418 unspent recs from 4880479 P2SH addresses Top addresses with at least 0.00000000 BTC: 4880479 1 34xp4vRoCGJym3xR7yCVPFHoCNxv4Twseo 252597.22065495 BTC in 141 inputs 2 3LYJfcfHPXYJreMsASk2jkn69LWEYKzexb 125351.13621699 BTC in 15 inputs 3 3M219KR5vEneNb47ewrPfWyb5jQ2DjxRP6 101266.00000000 BTC in 2 inputs 4 37XuVSEpWW4trkfmvWzegTHQt7BdktSKUs 94505.32948895 BTC in 11 inputs 5 3Kzh9qAqVWQhEsfQz7zEQL1EuSx5tyNLNS 66688.63295257 BTC in 157 inputs Ready in 6.100s > richest 4 20 Counting only addr type P2TAP 11509.27100655 BTC in 32859 unspent recs from 29907 P2TAP addresses Top addresses with at least 0.00000000 BTC: 29907 1 bc1ptev79mgw2a8gva285qjx4waunsmwtscz86tv38wylggrvsrdtxdspyg8j7 2000.00089559 BTC in 2 inputs 2 bc1pgr6fsrurg8mz3rymkkfsagrl03dhaj5ep7da7kurhwftc433dynq6hn24l 675.00000000 BTC in 1 inputs 3 bc1pxt5ytk0x4zsx3mknaksy33wju537ry4j7gwnvv232lhgu7hthalqs5e9td 616.59237878 BTC in 1 inputs 4 bc1p6qspdmx9dl88udm8uw3g2m2sxnqcaz2u4jh8wujsz5766499w98qzm48yf 260.00000000 BTC in 1 inputs 5 bc1p6xvd3dkw05zm30ztwcmdlgc8cc5tg3umxr3spnrdfzaenyke9ezs4j6a27 212.71608460 BTC in 1 inputs 6 bc1pmxywlfzfwuucfy28udfgzu4nnm7kyakscvy80fyzzdggzxgvuw0s4g7897 210.92668965 BTC in 1 inputs 7 bc1p8v9752vmw730tc5hm05cuy62aegdngvrkes0qqfjjjrj2lt9s0yqhdv7ht 200.00000000 BTC in 1 inputs 8 bc1ppz5umrxdysczu7ks3q9u9rkhcctuvdamlcw8v88m6hw4vd3n6npqf9rrpj 178.12582122 BTC in 1 inputs 9 bc1pylqj8tcer64h2ampy00s8eq97vqmmkq0ecupe5rk4l8ulucc77xsqwpryg 169.33314128 BTC in 1 inputs 10 bc1ptw0jdnxmjyknrctlacvmgz0dkd28kfax3xq8rs7xm9ty3u0w9qls3hm9gf 150.00000000 BTC in 1 inputs 11 bc1pn7dm6hv05hmmkuqeqmw9a52rtlx9gqa6u746k2pqle0nua2psdasqdx6ww 139.70007253 BTC in 1 inputs 12 bc1pq9zdsct8ffh3nq9p2rwaj6jrrcpuydmnvrek3e0gjke0lnjpgjpq2h9tae 108.99998237 BTC in 1 inputs 13 bc1p2tv3e8qtksfas4xe7zpt8sya0tc4tm97mul3pv7p0psruf5t6npqe3und9 100.99825585 BTC in 1 inputs 14 bc1p5tx3jfy8yhmwqgh4y3j9uscy0vh24qxjpv0ey0pxqamsz7dn7f0qq3ggkn 100.10100000 BTC in 3 inputs 15 bc1pz25hq6hwp6fsgw2mkepu53q6tqqc57gyk0en45459727rhu7a35seeml2s 99.99999878 BTC in 1 inputs 16 bc1phf8s5phcur3tdf9684yxspz72vlqq99xy26lzw4fru0vvapkxjnqpy7q44 98.67490552 BTC in 2 inputs 17 bc1pa63l4zkwjhq54ucnxkgjwqga3ge7c4mzqqgc9d4s3va2s7e7ga7s2qdt5e 88.96373094 BTC in 1 inputs 18 bc1pk5rcyd308ld4e9dkd8yehd602tr5c5xrgh2ewmgj8y9fk44mnsnqcwp59l 85.02946910 BTC in 1 inputs 19 bc1pv6pe8wfp6yq2np6j6npqhfsavjpsdaemp4kv87usx9zw8lxssfmquhz525 81.39410000 BTC in 3 inputs 20 bc1pj66nqend9wsey6dd5q7cqvxq97y70pey7j0lswgmvwmwcnylynvsfsuaau 80.00174160 BTC in 1 inputs Ready in 0.034s
Gocoin configurationAs i said earlier, Gocoin can be configured through gocoin.conf file. But i just realized you can edit it from WebUI homepage. But what surprise me is there are few field which isn't mention on Gocoin config documentation[1] which are RPC., TXPool.Debug and Memory.FreeAtStart. The RPC is limited to experimentation mining API though[2], so it's not interesting feature for me. Reducing RAMSince Gocoin RAM usage is quite high, i tried to reduce it's RAM consumption. Based on Gocoin documentation page[1,3]. there are few action i could do. First action is compressing UTXO records. With tools i compiled earlier, it only reduce UTXO.db file from 8.5GB to 8.2GB on the HDD. Second action is modifying gocoin.conf which involve memory, you can see my modification below. { ... "Memory": { "GCPercTrshold": 20, "UseGoHeap": false, "MaxCachedBlks": 24, "CacheOnDisk": true, "PurgeUnspendableUTXO": true }, ... }
I managed to reduce RAM consumption to ~14.9GB. IMO it's rather small reduction since Gocoin usually use 17-19GB RAM. But there's nothing much i could do since Gocoin still store all UTXO to RAM. ConclusionAside from RAM usage, Gocoin appear to be decent Bitcoin full node implementation. It's very impressive single developer write Gocoin alone. I don't need instant access to UXO though, so Gocoin isn't suitable for me. But even if i do, the RPC currently limited to mining-related feature. Some things i like, * Minimum dependency with easy compilation process * Lots of features on TextUI * Neat WebUI, although some feature only available on TextUI * Lots of external tools * Fast sync time, which only hold back by my HDD
Some things i don't like, * Load all UTXO to RAM * Incomplete documentation * RPC only support mining-related feature, even though many feature exist on TextUI
[1] https://gocoin.pl/gocoin_manual_config.html[2] https://gocoin.pl/gocoin_issues.html[3] https://gocoin.pl/gocoin_tweaks.html
|
|
|
IntroInspired by tiltedIceCream reply[1] on thread "Why aren't alternative implementations encouraged?"[2], i'm inspirited to try alternative Bitcoin full node implementation. Based on Jameson Lopp benchmark[3], Gocoin seems to have good performance so i decide to give a try. Basic info- It's written in Go language (golang).
- It's solely developed by piotr_n[4].
- It has both full node and wallet functionally.
- It's developed since 2013[5].
- Gocoin load all UTXO to RAM.
My system- Debian-based OS
- Old 6 core CPU
- 32GB RAM
- 3.5" HDD (Both Bitcoin Core and Gocoin data stored here)
- Bitcoin Core 23.0
- Gocoin 1.10.1
Compile and installationThe documentation[6] only mention i need git and golang on my system. Since it doesn't mention required golang version, i just use golang provided my distro. I receive golang 1.18.1 which is only slightly older than newest version (1.18.4[7]). sudo apt update && sudo apt install golang-go go version
When i read tweak page[8], Gocoin also support using external secp256k1 library from Bitcoin Core. So i decide to install secp256k1 on my system and clone Gocoin 1.10.1. sudo apt-get install gcc automake autoconf libtool make git libgmp-dev git clone --depth 1 --branch v23.0 https://github.com/bitcoin/bitcoin.git cd bitcoin/src/secp256k1/ ./autogen.sh ./configure --enable-module-schnorrsig make sudo make install
Using Gocoin built-in benchmark, external secp256k1 library have 40% faster performance on my system. So i decide to use external secp256k1 library by copying sipasec.go to parent directory. git clone --depth 1 --branch 1.10.1 https://github.com/piotrnar/gocoin cd lib/others/cgo/ec_bench/ go run gonative.go go run sipasec.go
cd ../../../../client/speedups/ cp sipasec.go ..
Finally it's time to compile Gocoin. You could just compile the client to run full node, but i try to compile everything. It's straightforward and only took few seconds. Both client and wallet compiled with no problem, although 5 external Gocoin failed to compile. I only managed to fix utxo_compress and utxo_decompress after using latest code from Gocoin latest commit. cd /path/to/gocoin cd client/ go build cd ../wallet/ go build cd ../tools/ for item in *go; do go build $item; done;
# command-line-arguments ./utxo_benchmark.go:33:38: invalid operation: cannot slice k (variable of type int) ./utxo_benchmark.go:43:37: cannot use v (variable of type map[utxo.UtxoKeyType][]byte) as type []byte in argument to binary.LittleEndian.Uint32 ./utxo_benchmark.go:51:32: cannot use k (variable of type int) as type utxo.UtxoKeyType in argument to utxo.NewUtxoRecStatic ./utxo_benchmark.go:51:35: cannot use v (variable of type map[utxo.UtxoKeyType][]byte) as type []byte in argument to utxo.NewUtxoRecStatic ./utxo_benchmark.go:59:26: cannot use k (variable of type int) as type utxo.UtxoKeyType in argument to utxo.NewUtxoRec ./utxo_benchmark.go:59:29: cannot use v (variable of type map[utxo.UtxoKeyType][]byte) as type []byte in argument to utxo.NewUtxoRec # command-line-arguments ./verify_script.go:19:54: undefined: syscall.Proc ./verify_script.go:35:22: undefined: syscall.Syscall9 ./verify_script.go:45:21: undefined: syscall.LoadDLL # command-line-arguments ./verify_tx.go:24:42: undefined: syscall.Proc ./verify_tx.go:37:22: undefined: syscall.Syscall9 ./verify_tx.go:47:21: undefined: syscall.LoadDLL
Initial Block Download (IBD)Here's my gocoin.conf which mashed together from Jameson Lopp blog[3] and Gocoin documentation[9-10]. I also configure Gocoin only connect to my Bitcoin Core node. gocoin.conf should be located on directory where you run/launch client file. { "Memory.CacheOnDisk": false, "LastTrustedBlock": "00000000000000000000dbf2ac1b8bbebf83f8d3bd9f9c4a6a5a250548291224", "AllBalances.AutoLoad": false, "UTXOSave.SecondsToTake": 0, "Net.ListenTCP": false, "Net.MaxOutCons": 20, "Memory.GCPercTrshold": 100, "Memory.UseGoHeap": true, "Stat.NoCounters": true, "Datadir":"/path/to/my/hdd", "ConnectOnly": "127.0.0.1:8333", "WebUI.ServerMode": true }
The sync process took about 6.8 hours. As expected, HDD is the only bottleneck on sync process where my Bitcoin Core report sent speed 11-18MB/s speed. Gocoin RAM usage after IBD is 23.1GB, although it's reduced to 19GB after i close and open Gocoin again. Directory size of Gocoin is about 354GB, while Bitcoin Core is about 493GB ( txindex, blockfilterindex, coinstatsindex enabled). I have to say Gocoin web UI is rather nice.
[1] https://bitcointalk.org/index.php?topic=5406961.msg60608073#msg60608073[2] https://bitcointalk.org/index.php?topic=5406961.20[3] https://blog.lopp.net/2021-bitcoin-node-performance-tests-2/[4] https://bitcointalk.org/index.php?topic=199306.0[5] https://github.com/piotrnar/gocoin/tree/aae8e1774fdfe8bae99bccb5c3fd6113ad7fbc95[6] https://gocoin.pl/gocoin_installation.html[7] https://go.dev/dl/[8] https://gocoin.pl/gocoin_tweaks.html[9] https://gocoin.pl/gocoin_performance.html[10] https://gocoin.pl/gocoin_manual_config.html
|
|
|
From my own little language of code and GitHub, I believe all open source code is free to use by anyone. Isn't that correct?
This isn't true, bustadice doesn't give license to their source code. Without any license it only means the source code is available and usually it's interpreted as all rights reserved. But even with license, usually there are few limitation and obligation. Here's snippet from GitHub documentation, You're under no obligation to choose a license. However, without a license, the default copyright laws apply, meaning that you retain all rights to your source code and no one may reproduce, distribute, or create derivative works from your work. If you're creating an open source project, we strongly encourage you to include an open source license.
|
|
|
- Else, if the address begins with 'bc1q', assume it is P2WPKH, encode the address using Bech32, with version 'q', and compare it with the read address. If they match, succeed verification, else fail.
Why don't you check bc1q followed by 38 ASCII character to determine whether an address is P2WPKH? BIP 141 clearly state this. If the version byte is 0, and the witness program is 20 bytes:
It is interpreted as a pay-to-witness-public-key-hash (P2WPKH) program.
Don't forget 20 bytes include q (in bc1q) which is witness version and the rest 19 bytes represent 38 ASCII character.
|
|
|
Raspibolt bitcoin user management doesn't make root accessible. I've used to run chmod 777 to give all permissions. Bad practice? I'd say it's horrible practice. It could break application which have very strict permission check, although i'm not sure any LN implementation has such strict permission check. I remember my acquaintance broke their OS by chmod 777 /. And of course I restrict user's home directories as much as possible (usually 700 or occasionally 750).
Do you ever see any application broke when you use 700? Usually i'd use 750.
|
|
|
Hello everyone,
I’m currently mining on solo ck but using NiceHash Bitcoin address for payout. Will this address support it? Or should I use my Coinbase address?
1. If you could afford to buy mining hardware and perform solo mining, i strongly recommend you to buy hardware wallet or computer/laptop only to manage your Bitcoin wallet. 2. Based on commit message of ckpool source code[1], it looks like they support Native/Bech32 Segwit address. [1] https://bitbucket.org/ckolivas/ckpool/commits/61513a765b12947fae30535179194b1672dc82b5
|
|
|
A real-world case study of this approach can be showcased through web browsers. Sure most browsers are based on chromium but browsers like Safari and Firefox (and spin-offs like the Tor browser) have unique approaches to protocol implementations that many internet users value.
It's great example. Now i'm inspired to try running alternate Bitcoin full node implementation and will write short review/guide about it within next few days. --snip--
as for saying 'its just following consensus'. which you forget, whom is in control of consensus changes. yep one dev team, and who is that dev team.. (rhetorical)
Just wondering, do you think are any implementation which do more than following most/all consensus? If yes, do you currently run such implementation (even if it's not running 24/7)?
|
|
|
the point is bitcoin being opensource means people can look at and change the code and given that, we can pretty much assume every aspect of bitcoin will be put under a microscope and there will always be factions that want this change or that. one of the weaknesses of bitcoin not being immutable code...
Are you trying to imply Bitcoin protocol and it's implementation should be closed source? I find it's ridiculous. Even Windows have to deal with people/company who reluctant to upgrade through WoW and LTSC. mining centralization
Unfortunately Bitcoin miner not interested to use P2Pool[1] which development stopped on 2018[2]. Since Monero is mentioned here, i'd like to mention P2Pool for Monero is actively developed[3] with ~4.7% network hashrate[4]. [1] http://p2pool.in/[2] https://github.com/p2pool/p2pool[3] https://github.com/SChernykh/p2pool/[4] https://p2pool.io/#blocks
|
|
|
Self-hosted such as BTCPay would be most ideal option. But if you're looking for easier option where you don't mind some privacy trade-off, consider Coinbase Commerce and Mycelium Gear. You just need to give your master public key and use their API.
|
|
|
Also keep in mind if it gets a lot of hits that depending on what you are doing it will handle some requests in the order they are received NOT in a multi-threaded simultaneous way.
Bitcoind uses a worker pool to divide up the incoming RPC calls, which has a size of 4 workers by default, can be changed from the command line. So actually by default it will be handling 4 RPCs at a time (assuming there are indeed 4 cores on the system). Talking about workers size, i just remember Bitcoin Core also has option to configure queue size of RPC work. By default it's 16, which may not sufficient since OP plan to utilize 10 hidden services.
|
|
|
Any feedback is helpful and appreciated.
I don't have Apple device, but is it true that your app also support macOS? If yes, you should mention it on this thread as well to potentially see more feedback. - How will the application be funded if everything is free?
If you check their App Store page, it has 3 "In-App Purchases". 1. Pro Trading $1.99 2. Pro Trading $11.99 3. Remove Ads $14.99
|
|
|
My question is what if cryptocurrency continues to exist in the next 100 years is it possible for anyone who create a wallet to continue have a different Seed phrase?
It's possible, but it's not probable. But within next 100 years, it's likely we'll see new version of seed phrase which designed to be more secure (as in harder to brute force).
|
|
|
Is it possible to check private key used to sign three messages by technique?
What actually possible is determining whether those message use same public key. Signing message/transaction expose public key of an address.
|
|
|
1. Remove cloudflare
Do you have better way to protect this forum from DDoS attack? A few hosting providers have native (either on or very close to their internal network) DDoS protection. It's usually a semi-expensive add-on, but (IMHO) is preferable to joining the disturbing trend of putting more and more of the Internet behind Cloudflare. For a forum that values decentralization, I found the choice a little incongruent. But, I suppose it's easy to be principled when you're not the one paying the bill. Relevant thread, Moving to Cloudflare. IMO it's unlikely Bitcointalk remove CloudFlare anytime soon unless someone with experience mitigating large scale DDoS give advice to theymos.
|
|
|
This is great tool, it reminds me of directory.io. But i'd like to mention the private key/address is overlapped on my browser (Firefox). - Check address balance from bloomfilter file database with play sound when found
I add address from 1st page to bloomfilter and restart the server, only to found out the sound is quite loud. A warning would be appreciated in future . I only try it with small txt file, but what's RAM usage of this tool use when we use list address from Loyce?
|
|
|
|