Compare commits

..

10 commits

Author SHA1 Message Date
pablo
4e16fd8591 Add 'maestrazgo_storage.md' 2023-12-25 10:51:10 +00:00
9a3c5403a5 Thingies 2023-12-09 18:07:10 +01:00
pablo
ac14d36f3e . 2022-02-28 07:03:33 +01:00
pablo
05ee500ee7 First week results 2022-02-26 13:17:53 +01:00
pablo
64cfae9bcc Price experiment 2022-02-19 20:18:32 +01:00
pablo
0afa092c89 microlancer story 2022-02-19 19:44:52 +01:00
pablo
bab1eac6ed Auto fees 2022-02-13 21:59:41 +01:00
pablo
df2f29a2be Uptime kuma details. 2022-01-23 20:12:36 +01:00
pablo
067a64dc5b my sunday checklist 2022-01-23 19:03:41 +01:00
pablo
c10832cf52 Notes on charge-lnd 2022-01-20 12:13:16 +01:00
9 changed files with 575 additions and 1 deletions

View file

@ -0,0 +1,28 @@
I'm upgrading from Umbrel 0.4.18 to Umbrel 5.
# Steps
## Backing things up
I'm scared shitless about this one, so I'll back pretty much everything except the Bitcoin and Electrum large databases.
Data sizes:
- Total umbrel folder: 614GB
- Bitcoin dir: 570GB
- electrs dir: 40GB
`rsync -avh --info=progress2 --exclude bitcoin --exclude electrs /media/data_disk/umbrel/ /media/backup20230206`
Okay, that was fast, nice and easy. I should probably start doing that more often.
## Venturing into the update
I'm simply gonna try to let Umbrel update and pray.
Okay, it took a while and it ends up in the exact same version after restarting. What the fuck. Classic umbrel.
I've found this guide: https://github.com/getumbrel/umbrel/issues/1516
That didn't do the trick either. It says successful on the console but then when it starts it's still in 0.4.18.

4
Installing BOS.md Normal file
View file

@ -0,0 +1,4 @@
I'm going to try to install balance of satoshis.
I'm following the instructions here: https://plebnet.wiki/wiki/Umbrel_-_Installing_BoS

View file

@ -0,0 +1,14 @@
- Como montar la wallet
- Descargar bluewallet
- Crear una nueva wallet
- En el menu de crear wallet, seleccionar la opcion de importar
- Escanear el QR
- Listo para usar
- Algunos disclaimers
- Yo custodio la pasta. Si la lio, los fondos se podrian perder. Pero yo perdere mas, asi que puedes contar con que me esforzare en que no pase. Pero puede pasar.
- No hace falta que hagas ningun backup ni guardes nada. Si borras bluewallet o pierdes el movil, avisame y volveremos a montar la cartera. El dinero seguira alli.
- Esta pensado para transacciones "pequeñas". Si intentas mandar cantidades mayores de 200€, no siempre funcionara. Si intentas mandar cantidades mayores de 100€, algunas que otra vez fallará. Por debajo de 100€, funcionará el 99,9% de las veces.
- Si alguna vez preves recibir mucho dinero (>1000€) avisame porque puede necesitar alguna accion por mi parte.
- A nivel de privacidad: yo puedo ver en cualquier momento tu balance y tus transacciones. No tengo intencion de hacerlo, pero puedo.

36
bitbox unboxing.md Normal file
View file

@ -0,0 +1,36 @@
I'm unboxing the Bitbox02 Bitcoin-only edition.
I have plugged it into the USB-C port of Oli and I am downloading the bitbox app v4.35.0 from their webpage.
The app is sleek. The first thing it tells me to do is to install some firmware. Done.
I was placing the Bitbox upside down in the USB-C. Modern problems, this stuff didn't happen with USB-A
I get a code shown in both the bitbox and the app and get asked to confirm they match. They do. I tap on the bitbox to proceed. The hidden buttons thing is funny.
Now I can choose if I want to create a wallet or import an existing one. I'll create a new set of keys.
I need to give the bitbox a name.
I'm now going to set a password on the bitbox. Wow, I love the buttons thingy. Never seen an interface like this.
I get a few warning messages on how the backup is important as hell. Yep yep yep.
I must confirm the date. Now the backup is created.
And done. I guess my seedwords are the in the backup? I guess these guys would rather trust people storing the SD card than the words in plain sight. I'll have to read the SD card to check what is inside.
---
Now I'm going to try and create a Wallet with Sparrow.
Okay, this is important. To ensure that Sparrow can read the wallet, you must:
- Connect the Bitbox.
- Open Sparrow.
- Unlock the Bitbox with the password.
Okay, creating the wallet was easy. I can also see that both the Bitbox app and Sparrow use the same derivation path by default (m/84'/0'/0'), so the same addresses show up in both apps.
Now I just need to receive and send some sats to test it out.

206
ideas_on_multisig.md Normal file
View file

@ -0,0 +1,206 @@
# Ideas on multisig
After accumulating for months (and years) during the current winter market, I have progressively felt more and more the responsibility of successful self-custody on my shoulders. As of today, with our current holdings, if a few or all the important wallets were compromised or lost, we would experience a complete and utter financial catastrophe. And I can't allow that to happen.
I have know for some time now that the next level of security would be a multisignature wallet, but I have avoided tackling it out of laziness and because I thought it would be terribly complicated. The other day I watched a video from BTC sessions on the Sparrow wallet, mainly due to having heard a lot of people talking about this wallet lately. As the video passed, I kept thinking that the wallet is just as good as any other. But then, when I reached the multisig section, I was amazed. It was so damned simple, clean and obvious. After watching this, I decided it was time to get responsible and implement a multisig scheme to store our funds.
## What I have today
Right now I have a mess of wallets. This is the current inventory:
1. Saylor
2. Palanca
3. Bisq cold
4. Umbrel
5. Bisq hot
6. Tainted
7. Saylor bait
8. Futurible Antonio MC
9. Futurible Ana y Scot
10. Arya y Unai
11. Gala Wisselink
Wallets 4, 5, 6 and 8 will remain untouched.
Wallet 7 will be outdated, I'll mix the coins back with the main saylor because I'm happy with the bait experiment and I don't want to have to keep a separate wallet anymore.
Wallets 9, 10 and 11 should be moved to an alternative version that does not require using colki so I don't have to go fucking around with different seeds constantly since that is most definitely a bad idea.
Wallets 1, 2 and 3 should be merged into the arctic.
## A draft on how I could clean up the mess
Let's assume I had 3HW wallets. My Coldcard MK3, a BitBox02 and a Trezor One.
That allows me to have:
- One wallet associated with each HW seed.
- Three possible 2-of-2 multisigs.
- One 2-of-3 multisig.
So, how to store safely? The devices themselves are not that dangerous. They all use some pin based security that makes them useless if they fall in the hands of adversaries. As long as this is not coupled with a physical attack on me to force me to give the pin away, I shouldn't be worried.
Now, for the seed backups: this needs more thought. Effectively, 2 of the seeds plus the 3 master public keys are the required to spend from the wallet. Thus, to enjoy the benefits of multisig to the fullest, no single storage location should contain everything that is necessary to spend from the multisig wallet.
Besides this, I can always have a single seed holding several "virtual" wallets just by keeping a separate accounting in gnucash. This simplifies management a lot, but also puts all the eggs in one basket. But then again, it's sort of a titanium basket...
### Temperature Policy
- Hot wallets are hot and used to play around. No fucks given.
- Snow wallets are Umbrel and Bisq. They have a good chunk of money to reduce the need to go to the arctic.
- The arctic is the long-term, no touchy vault.
### Keys and Locations
There are three keys: colki, biti and trevor.
There are four physical locations: Tibidabo, Argentina, Matagalls and Maestrazgo.
There are two virtual locations: Mitre and Redmond.
| Location | Coldcard (Malasaña) | Coldcard Seed | Bitbox02 (Daoiz) | Bitbox02 Seed | Trezor (Velarde) | Trezor seed | Sparrow Backup |
| ---------- | ----- | ---------- | ---- | --------- | ------ | ----------- | -------------- |
| Tibidabo | X | X | | | | | |
| Argentina | | | X | X | | | |
| Matagalls | | X | | | X | X | |
| Maestrazgo | | | | X | | X | |
| Mitre | | | | 1 | | 2 | |
| Redmond | | | | 2 | | 1 | |
| Poco | | | | | | | X |
The Tibidabo package contains:
- Open use Coldcard
- Tamper proof bag with:
- Coldcard seed
- USB with Sparrow wallet export, including all XPUBS
The Argentina package contains:
- Open use Bitbox02
- Tamper proof bag with:
- Bitbox02 seed
- USB with Sparrow wallet export, including all XPUBS
The Matagalls package contains:
- Tamper proof bag with:
- Trezor one
- Trezor one seed
- Coldcard seed
- USB with tails
- Instructions in case of friendly opening
The Maestrazgo package contains:
- Tamper proof bag with:
- Bitbox02 seed
- Trezor one seed
- USB with tails
- Instructions in case of friendly opening
Migration plan:
- Create multisig
- ~~Create malasana key set~~
- ~~Create wallet in sparrow~~
- ~~Backup wallet skeleton~~
- Back it up partly
- ~~Create Tibidabo package and store~~
- ~~Create Argentina package and store~~
- Test ride with some money
- ~~Create changes in accounting~~
- ~~Play around with a couple of transactions~~
- Load bisq cold
- Load
- Remove backup from home
- Remove backup from argentina
- Send monthly DCA
- ~~Retrieve part of it ~~
- Back it up fully
- ~~Create Maestrazgo package~~ and store
- ~~Create Matagalls package and store~~
- Finish the transfer
- Move saylor
- Load
- Remove backup from home
- Remove backup from argentina
- Remove border backup
- Move palanca
- Load
- Remove backup from home
- Remove backup from argentina
- Remove border backup
- Remove old stuff
- Remove bisq cold keys
- Remove palanca keys
- Remove saylor keys
- Train the team
- Hold session 1
- Hold session 2
- Perform transfer simulation 1
- Perform transfer simulation 2
## Status check on September 2023
The full plan for the multisig was not completed and we are in a shaky half-assed state that I don't like. I'm going to:
- Describe how I would like the end state to be.
- Assess how things are now.
- Define the steps to go from as-is to to-be.
### Target state
- Three locations with the following contents:
- Tibidabo Package
- Accessible coldcard
- Coldcard seed
- Sparrow file backup
- Argentina Package
- Accessible bitbox
- Bitbox seed
- Sparrow file backup
- Fren Package
- Trezor
- Trezor seed
- Sparrow file backup
- Digital copies
- Keychain
- Stored in Onedrive
- Encryption key in Bitwarden
- Descriptor
- Stored in Onedrive
- Encryption key in Bitwarden
Additional assets
- Written description + instructions in case of death
Operating procedures
- Smoke test transaction once every quarter
- Training session once every six months
- Check on fren once a year
### How things are now
- Tibidabo package exists
- Argentina package exists
- Fren package exists but is stored at tibidabo.
- Digital copies do not exist
- Written description + instructions do not exist
### Steps
1. ~~Write description and instructions~~
1. ~~Prepare a Tails USB with persistence~~
2. ~~Write and encrypt~~
3. ~~Store a digital copy of instructions in onedrive~~
4. ~~Store in two thumbdrives for heirs~~
5. ~~Deliver to heirs and train them~~
2. ~~Assemble all packages in one location~~
3. ~~Create digital copies and store them~~
1. ~~Write the seeds in different files~~
2. ~~Encrypt them with PGP key~~
3. ~~Upload to onedrive~~
4. ~~Review contents of all packages~~
5. ~~Store Tibidabo package~~
6. ~~Store Argentina package~~
7. ~~Store Fren package~~
8. ~~Inform confidants and share description and instruction files~~
9. ~~Set operating procedure calendar reminders~~
10. Store mystery package

View file

@ -257,4 +257,288 @@ the hell sent me 10 sats just because? And then I checked the message field and
it said "Check out my node, Baystar!", together with a public key. Lovely,
this guy is just sending random spam messages to people to get some attention.
The lightning network keeps on feeling like the wild wild west, where funny
things just happen out of the blue.
things just happen out of the blue.
## A professional knows its price
As I am beginning and trying things out, I haven't paid much attention to the
fees in my channels. I have set all the base fees to 0, following the movement
to support Pickhardt payments, and I have set my fee rates 20ppm, which I have
identified as being relatively low, so that I can check how much flows through
my node.
But at some point, I will want to get more serious about fee management.
Specially, taking into account the impact on balancing. Overall, balanced
channels are desirable since they give more paths to the network, and thus make
the node more capable of routing in different directions. At the entire node
level, it's also important to have a general balance between local and remote,
because that limits the total capacity of the node (i.e. if you have 10M sats
of outbound capacity, but no inbound capacity at all, you can't route anything.
The other way around holds true as well.).
To achieve this, I have been looking into `charge-lnd`. The tool is a small
python script that can read data from `lnd` and modify fees accordingly. There
are some instructions on how to set it up with umbrel, which is awesome. The
tool is configurable through a very simple config file that allows several
policies to exist, so a pretty intelligent behaviour can be achieved with
relatively simple effort.
The link to the tool is: [github](https://github.com/accumulator/charge-lnd)
I also found this example gist showcasing some example policies, which I think
will be very
useful: [the gist](https://gist.github.com/ziggie1984/48a67f3ee3cd0616e40620dc372ac3fe)
Eventually, I need to set this up. But I will still play around manually for a
while to get a feel on the behaviour of flows with different fees.
## Setting up uptime kuma
As part of my efforts to be professional and keep the node with the best
possible uptime, I should always know if the node is up. Since checking
constantly myself is really something I don't want to do, I decided to use
uptime kuma to do the job for me.
To get this done, I installed uptime kuma with docker in navaja. Since it won't
hold any critical data, I'm not really concerned about backing it up or
anything like that.
Once that was ready, I played a bit with the different pinging options. Things
were difficult, because with banky behind an onion address, regular HTTP and
TCP options didn't work. I am not sure if that was because it's plain
impossible to set that up, or simply I was doing it wrong because I'm an
ignorant. In any case, I discovered that uptime kuma has a cool option in which
you reverse roles: uptime kuma is constantly waiting to _receive_ a heartbeat
from the monitored service at a certain schedule. If it doesn't, it considers
the service to be done. I went for that option, and I simply had to set a curl
call in banky with cron to run every minute. Easy peasy.
Next was to prepare some alerts in case banky goes down, because otherwise I
would be stuck having to check uptime kuma constantly, so I would still be at
the starting point.
The easiest option I could find was to use a telegram bot. To get this done, I
set a telegram bot by sending a message
to [the Bot Father](https://t.me/BotFather) to create a new bot, which I called
uptima_kuma_bot. Lovely typo there, but doesn't matter. The auth token for the
bot is 5184325884:AAHGsULQXWNVy-BHaP8d-itKOK-FwEHQSuI. Then, I set up a group
between me and the bot, and got the chat id by
accessing [this endpoint](https://api.telegram.org/bot5184325884:AAHGsULQXWNVy-BHaP8d-itKOK-FwEHQSuI/getUpdates)
. With that, I managed to configure uptime kuma to send a message everytime
banky goes down or recovers. The whole thing is suboptimal because,
technically, umbrel services could go down while banky stays up, and the uptime
kuma won't notify me. But as the meme used to say, it's something.
## My sunday checklist
Keeping an eye on the node is important, but I haven't put much structure into
it. I enjoy messing around with it, but I don't want to develop and addictive
habit of checking on it all day long.
So, I have decided to:
- Set up an automatic monitor with uptime kuma that will trigger warnings if
the service stops working.
- Keep all the node-chores for sunday afternoon and just breeze through them.
To support the second point, here is my checklist of chores:
- Check transactions and forwards. Put any that happened into the accounting
book.
- Buy any grocery vouchers that are needed.
- Send any BTC from other wallets into here that is needed.
- Check the uptime statistics of all my channel peers in thunderhub. Judge if
any of them should be removed because they are behaving like shit.
- Open channels/swaps in lnplus if necessary.
- Check up on 1ml to see how well is the node ranking.
- Check up on lightning terminal to see how is the node being judged.
- Check up on lightning pool to see if it's finally T1.
- Check that uptime kuma is running properly.
- Check if there are any relevant umbrel updates.
- Check the content of the lightningnetwork and umbrel subreddits.
- Put anything relevant in the accounting book again.
- Backup the channel states.
## Automating fee adjustment
I finally found a way to use `charge-lnd` with Umbrel. I followed the
instructions
[here](https://community.getumbrel.com/t/guide-installing-charge-lnd-in-a-docker-to-automate-your-fee-policies/2187)
. My own custom stuff changes were:
- I put my config file in: `/media/data_disk/charge.conf`
- I wrote my docker run statement as follows:
```commandline
docker run --rm -it --network=umbrel_main_network
-e GRPC_LOCATION=10.21.21.9:10009
-e LND_DIR=/data/.lnd
-e CONFIG_LOCATION=/app/charge.config
-v /media/data_disk/umbrel/lnd:/data/.lnd
-v /media/data_disk/charge.config:/app/charge.config accumulator/charge-lnd:latest
```
I've been reading a bit and apparently it's not a good idea to run price
adjustments very frequently given that it makes it difficult for other nodes to
plan their routes, so automated software will see it as a low quality attribute
for routing nodes. I have decided to leave a weekly cronjob for now, so the
fees will update automatically every thursday at 10pm.
## A small job
Today I was randomly wandering through internet when I visited microlancer.io,
a small website I had already seen once or twice. The page hosts tasks, posted
by users, which come attached with Bitcoin bounties as compensation.
Most tasks are crap, spammish-like stuff. But today I found one that simple
said "Open a lightning channel with my node". The task poster indicated in the
description that he would pay 2500 sats to whoever opened a channel of at least
750K sats of girth and kept it up for a month. His node's pubkey was also
posted. I checked it up and saw it was a very small node, with barely any
capacity. Way to small to be an interesting partner. But, 2500 sats was more
than enough to cover for the costs of opening and closing a channel with him,
so I decided I would give the task a shot to experiment.
I signed-up at microlancer.io and offered myself for the task. The task poster
accepted (which came with him putting the 2500 sats in an escrow handled
through microlancer), and I went ahead and created a 1 million sats channel
with him. Afterwards, the poster marked the task as done and the escrow funds
were sent to me. I had received 2500 sats for opening the channel!
That was a very nice experience. I think the channel will probably be useless,
but I will keep my promise and leave it up for at least a month. And the money
I got from this, even after accounting for channel opening and closing fees, is
several times more than what I got routing payments! I feel it has been like a
glimpse of the feeling I would get by providing liquidity in Lightning Pool.
I'm looking forward to get the node up to Tier1 so that the party can get
started.
https://microlancer.io/task/view/2038
The small node's pubkey:
02c94a8c40c64c511228c0ca4b393ccd0738d75e9229073ceb6328246de32b9a8b
## Getting scientifc with fees
After going above 0.5 BTC in capacity, 20+ channel count and starting to use
automated fee setting with charge-lnd, I have started to see an increase in the
frequency and diversity of routed payments. It seems that the current size is
getting to the point where routing activity flows in several directions so that
channels stay balanced and things "flow nicely".
Given that I don't expected to have any channel opening/closing activity for
the next couple of weeks, I have decided I will run an experiment on prices for
the next two weeks. The plan is to hold two different pricing models, each
during one week, to see the impact on frequency and size of routing, as well as
overall fees earned.
The first week will be the "expensive" week. During that week, I will set:
- The encourage-routing fee to 25.
- The discourage-routing fee to 500.
- The proportional fees between 100 and 300.
The second week will be the "cheap" week. During that week, I will set:
- The encourage-routing fee to 10.
- The discourage-routing fee to 500.
- The proportional fees between 15 and 50.
Afterwards I will compare:
- The count of forwards
- The total forwarded amount
- The total sats earned
- The mean transaction size
### First week results
The expensive week has had very clear and strong effects. Traffic pretty much
stopped. Only two forwards for the entire period.
- The count of forwards: 3
- The total forwarded amount: 80014
- The total sats earned: 0.710 sats (710 millisats)
- The mean transaction size: 26671
- Effective mean fee: 9ppm
## Automatic back ups and getting ready for the worse
There are two options. This one is the only one that keeps channels alive:
This method was confirmed only by one Umbrel user that did it with success. But remember, he wasnt using the Raspberry Pi version of Umbrel, was on a machine with regular Linux and Umbrel installed on it.
This procedure is ONLY for experimented Linux users! If you dont know to use Linux you better stay away.
The procedure is simple. Are only these 2 files and they are located in:
<lnd folder>/data/chain/bitcoin/mainnet/wallet.db
<lnd folder>/data/graph/mainnet/channel.db
You have to construct the data/… folders yourself and then copying the files to them, before starting up lnd.
So, take another machine/drive and install Umbrel, fresh. Use your 24 words seed to restore the onchain AEZEED wallet. Leave it to start the sync a bit and construct the rest of the folders for LND. Then stop it.
Go to the old drive and locate those 2 files.
Copy them into the same path in the new node.
Optional, if you have the blockchain data OK, files integrity is fine, you can copy also the blockchain so you can save time. If you think is corrupted, you better just forget it and let the sync to be done in normal/natural way.
Start the node, leave it to sync and… voila, your old LN channels are there alive and not closed.
If there is a problem in restarting the node, just run: sudo scripts/configure
REMINDER: these files have to be the latest version that was online! If you use an older backup you can lose funds being punished for cheating with an older version of your channels.
To keep the two files always backup, I'm going to automatically backthem up in
my own git server in navaja.
The second option is the "standard" recovery proposed by umbrel, which recovers
all funds but closes channels in the process of doing so.
It is suppose that you already have the 24 words seed and the channel.backup file obtained previously. If you didnt make that backup, but you still have access to your old node drive, you can find it in /home/umbrel/umbrel/lnd/data/chain/bitcoin/mainnet/channel.backup or you can request a copy from Umbrel devs.
Install a new instance of Umbrel. Start the dashboard page and you will be prompted to use previously backup 24 words seed.
Once youve restored from the 24 words, it might take a few minutes to a few hours for it to scan all of your previous Bitcoin (on-chain) transactions and balances. Meanwhile, heres how you can restore the funds in your Lightning channels.
STEP 1: COPY OVER THE CHANNEL BACKUP FILE FROM YOUR COMPUTER TO YOUR UMBREL.
Enter using SSH 139 and run this:
scp <path/to/your/channel/backup/file> umbrel@umbrel.local:/home/umbrel/umbrel/lnd/channel.backup
Here more details about using scp command 1
Replace <path/to/your/channel/backup/file> with the exact path to channel backup file on your computer
The password is moneyprintergobrrr, except on version 0.3.3 or later where the password is your personal user password instead.
STEP 2: RECOVER FUNDS
cd ~/umbrel && ./bin/lncli restorechanbackup --multi_file /data/.lnd/channel.backup
After you run this, wait for 1 minute. You should now be able to see your channels being closed on http://umbrel.local/lightning 35.
You should wait patiently until the funds are coming back to your onchain wallet. It will take at least 40 blocks. You can see/check the details of closing channels in the troubleshooting guide 35.
So for this one, I also need to copy one file to keep it backup.
## Checkpoint 27/03/2022
- February events
- Added 0.15 liquidity
- Automation of fee setting
- Automation of backups
- First rewarded liquidity provision through microlancer
- First categorization of good node in lighting terminal
- P&L
- Going ahead
- Reach Tier1 in lightning pool to start renting liquidity
- Make march purchases and add to banky
- From that point on, I will also put skin in the game
- Leverage with Bankinter
A couple of links to node-recommending tools that I want to try:
https://github.com/Gridflare/lndpytools
https://github.com/bitromortac/lndmanage#setup
A guide on how to put the watchtower in place:
https://bitcoinmagazine.com/guides/how-to-set-up-watchtower-lightning-node

1
maestrazgo_storage.md Normal file
View file

@ -0,0 +1 @@
Armario de la principal, espacio principal, tocando la pared colindante a la caja fuerte.

BIN
matagalls_storage.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 MiB

1
millennium_vault_backup Normal file
View file

@ -0,0 +1 @@
U1BSVzEz5Hv6tZ4PPzc0YH905+xtQklFMQJbN0qbaUEE2JvIOoZzGWOnwDENLVBxF4S7LmXrakpBusd8iWClNOJBzjtfCvSRAx9g2i496MSX/lF8JwWJ52OGUh2f3DPgZGfSUdNhpOMAfysmBS4l90a6ha1ylNVOG2KL6EY+/B0HBwbG1wv7AnFHPFYmaCaPPzaROFtb+3KJ5v9iukLLV5Y88247xUdCGUwuMauxeZsfY2ljPtQFzDf2U9CxzdEpIKUKCTry3tulSFaIWhd1yEilPPaVezXnoEu8Dbfgos2D+yXk+r4Oupi+UwNHP2ABQTSnFy+Z4F/OkZbkKeZEFmPEtACob/O5SBpEIEgGbaOFZNh6WQYAVdnA+PbLciZMyO+OjnGEtpypUPO0Nfw1pBj4gXmXIfh5O5g5MfcjWJR0kl0fzQM8xHUaESMWzsTS3aof5yaP724N6WSN0lx0yniYxQ3RL2nXbMyoblyr412b+Eb2LEGS5PRAMBtYRChXMelAMdENoI4cfEJ3mJ/6X5AZOAIhfFSPu66jCXWYrMLNXpJvesFN3bkaChx/5T6tR+c7poRAovldkGZm1UUiHqI0aB1WYz0l27fYqDvEdRRxGpIqHfLQAuoldB7f4D4JkTMLRg5wCcRLtA1TaeH4fdll/jvjzw1osYgRFlFZvo/Dn8uju1//oyMUGDf95TE7VJ33wEqB7n57rE3eRewF2T89vJjL1t0VG16JNQedNYN9diQagUzcMcz7d8KRmTxVg0PqH5HvvSgksGW2mCiHWNjdIX/AZLazorc7kRlH6TavnCWyrE2B2cIheHbKbk+k0tI0pXrlq+lYvjfWwP8Q2spK5DOQjHg3hjygpDnovgCTyQzo2O2GCzUaGuJKtDLQ6Y6Zc6ttG6DUKF2BgZ98epi9kSpzUbT6ZJm6zU7VMDzp+kBmTeP7wluL7JT5GZPF0n/llmfGJe47ZOfQplS44x6zVOwNP9B1gPw4qNDEz2auIv3G1xJeY4E+ErukuJ0l3I1Gk8nA1lIKA39RX9xVX3/lmK4GN8d3ry2gQFH/DxqpabcKGrJ4aaKUjyucd2mF/9NbXy8yUQMNqNuJXUlZ11v/XhDZ03yxs8g=