amling search program principles discussion / brain dump

For scripts to aid with computation or simulation in cellular automata.
amling
Posts: 872
Joined: April 2nd, 2020, 9:47 pm

Re: amling search program principles discussion / brain dump

Post by amling » October 24th, 2024, 9:54 pm

amling wrote:
October 24th, 2024, 7:18 pm
Sokwe wrote:
October 24th, 2024, 5:17 pm
It would actually be nice if there was some mode that allowed the user to run a simple from-zeros search by inputting only the geometry and width (and optional input like --ends and --left-edge) without having to bother with the geometry input file and other things like --wao-left-pad and so on. I think most people who use these spaceship search programs are only looking for something simple like this.
I have debated many times trying to have other ways to specify starting states but never came up with anything I liked. The problem is it's much more than just the picture that goes into it and so it's this weird argument parsing mess of having groups of options that work together (and should be specified together) to produce the state one way or another. I had thought about splitting apart the state generation and search execution commands (so we could have multiple distinct state generators with their own collections of options), but it seems like it would be even more agonizing.
I guess you've talked me into it. 4f30b3a77956 (just pushed) allows "@zero" in place of input file for recentering and recentering WAO and "@zero:NN" for fixed. The "NN" in the fixed case is the width of the question marks left at the bottom W row of it.

As examples, these all search in various way for c/3 ships:

Code: Select all

rlife llsss-recentering c3-f2b '@zero' --filters wcaf 06
rlife llsss-recentering-wao c3-f2b '@zero' --wao-idx ALL 06
rlife llsss c3-f2b '@zero:6' --filters wcaf 00 00 00

Sokwe
Moderator
Posts: 2884
Joined: July 9th, 2009, 2:44 pm

Re: amling search program principles discussion / brain dump

Post by Sokwe » October 25th, 2024, 3:04 am

amling wrote:
October 24th, 2024, 7:18 pm
I've pushed it to codeberg as 20241024-rc-pre-reify-autochoke-03 so you can take it for a spin if you want. If you do run it please do let me know how it goes. I had given it the limit of 10MB with "--pre-reify-autochoke 10485760" (should work for both normal recentering and for recentering WAO). If it actually ships we can worry about making that "--pre-reify-autochoke 10MB" instead but for now you'll have to do some math.
It finds a ship using negligible amounts of memory in a situation where I previously couldn't find one, so that's good. In this case, I can actually now find a solution without autochoke, thanks to the skew-gutter ends. A width-32 c1-s2s search finds the following ship, which is slightly smaller than those found before:

Code: Select all

x = 48, y = 89, rule = B26/S02567
38bo$37bo$36bob2o4bo$36b5o2bo$38bobobob2o$34bob2o2b7o$33bo3b9o$32bob7o
$32b6o5b2o$12bo21bo5b2o2b2o$10bo2b21o3b2o2b4o$6bo3bo23b2o2b6o$5bo6b2o
18b9o$4bob2o5b2o17bob5o4b2o$4b10o19bo6b2o2b2o$6b7o4bo16bob2o3b4o$5b2o
9bo20b7o$3bo6b2o3bob24o$bo2b2o3bo5b22o6b2o$bo7b2o6bo22bobo$3b2o6b5obo
17bo3bo4b2o$4b14o16bo4b2o4b2o$2b9o3b4o15bob2o4b5o$2bob2o7b2o2bo10bo4b
12o$3bo5b3o3bobo9bo7b7o$4bo3bo4b6o7bob6obo8b2o$7bob2o3b4o8b10o5bobo$7b
8o13bo3b4o4bo4b2o$9b5o4b10o3b2o2bo3bobo4b2o$8b2o7bo10b2o4b2o3b8o$6bo6b
obo10b6o4bo4b5o$4bo2b2o3bo3b3o7bob12obobo$4bo7b2o9bo3bo2bob10o2bo$6b2o
6b4o4bo5b2o2bo7bo$7b12o2bob2o5b3o3bob2o$5b11obo3b12o2bo3bo$5bob2o8bo5b
8obobob4o$6bo8b8o9b8o$7bo7bob6o2b2o3b8obo$16bo6bo2b2o2bob2o5bobo$17bo
3b6o4bo5b6o$21bob3o6bo4bob3o$22bo15bo$23b2o14b2o2$22b2o14b2o$21bo15bo$
20bob3o6bo4bob3o$16bo3b6o4bo5b6o$15bo6bo2b2o2bob2o5bobo$6bo7bob6o2b2o
3b8obo$5bo8b8o9b8o$4bob2o8bo5b8obobob4o$4b11obo3b12o2bo3bo$6b12o2bob2o
5b3o3bob2o$5b2o6b4o4bo5b2o2bo7bo$3bo7b2o9bo3bo2bob10o2bo$3bo2b2o3bo3b
3o7bob12obobo$5bo6bobo10b6o4bo4b5o$7b2o7bo10b2o4b2o3b8o$8b5o4b10o3b2o
2bo3bobo4b2o$6b8o13bo3b4o4bo4b2o$6bob2o3b4o8b10o5bobo$3bo3bo4b6o7bob6o
bo8b2o$2bo5b3o3bobo9bo7b7o$bob2o7b2o2bo10bo4b12o$b9o3b4o15bob2o4b5o$3b
14o16bo4b2o4b2o$2b2o6b5obo17bo3bo4b2o$o7b2o6bo22bobo$o2b2o3bo5b22o6b2o
$2bo6b2o3bob24o$4b2o9bo20b7o$5b7o4bo16bob2o3b4o$3b10o19bo6b2o2b2o$3bob
2o5b2o17bob5o4b2o$4bo6b2o18b9o$5bo3bo23b2o2b6o$9bo2b21o3b2o2b4o$11bo
21bo5b2o2b2o$31b6o5b2o$31bob7o$32bo3b9o$33bob2o2b7o$37bobobob2o$35b5o
2bo$35bob2o4bo$36bo$37bo!
I noticed that if I set --pre-reify-autochoke to a much higher value, the w_pos restarts are substantially more expensive, and it takes a very long time to sufficiently reduce mid_steps to continue the search, since it only reduces by one each time. Perhaps it would be helpful to be able set the increment for mid_steps reduction. Once it finds a working mid_steps reduction, it could even increment again to find the largest working mid_steps. Another idea would be to run a binary search to find the least mid_steps reduction that meets the memory limit. I'm not sure how much more work this might be to code versus a simple decrement and increment. I'm just throwing ideas out there.

You've been extremely responsive to my insistent badgering with questions and extremely experimental feature requests. Please don't feel obligated to attempt any of this.
amling wrote:
October 24th, 2024, 7:18 pm
I'll leave [B256/S02358 with raw:1:1:2:1:0:1:0:1:0] to run on my laptop (to 60GB) and see what happens.

EDIT: Sadly it did not terminate. Last partial output before it filled memory and died:
Darn. I'll file this under "probably no p1 photons, but probably not going to be able to prove it".
amling wrote:
October 24th, 2024, 9:54 pm
Sokwe wrote:
October 24th, 2024, 5:17 pm
It would actually be nice if there was some mode that allowed the user to run a simple from-zeros search by inputting only the geometry and width without having to bother with the geometry input file and other things...
I guess you've talked me into it.
"It would be nice" was a pretty compelling argument. In truth, I want to write a tutorial on the wiki for very basic LLSSS searches. I think this is how most people will use it, anyway. I'll certainly find it more convenient if I don't have to mess with geometry files just to set up a basic from-zero search.
-Matthias Merzenich

amling
Posts: 872
Joined: April 2nd, 2020, 9:47 pm

Re: amling search program principles discussion / brain dump

Post by amling » October 25th, 2024, 3:28 pm

amling wrote:
October 23rd, 2024, 7:20 pm
For starters it is necessary to run with AF2 (elsewhere called SL2, the history is complicated) larger than the default of 3. This is mostly update this line in `src/entry.rs`...

Code: Select all

type AF2 = NumberMarker<7>;
...but also hack out some compile errors regarding `convert_edge` and certain edges (like "even") that only work with AF2=3.
No more convert_edge compiler error hacking should be necessary. I've changed what was called the "reflect" edge to handle gutter and to position its VW plane of symmetry in a way that is probably more desirable and which matches the previous symmetric edges and promoted it (the "reflect" edge) to take over everything (so it's just `--edge even` now and old `--edge even` is gone).

Now it should be possible to just change that AF2 line and it should just compile, at least up to 9. It's arguably possible to go beyond that but it won't compile without a little more work and it's gonna get exponentially stupid fast. I guess let me know if anyone wants to run beyond 9 and we'll figure it out.
Last edited by amling on November 3rd, 2024, 4:20 am, edited 1 time in total.

amling
Posts: 872
Joined: April 2nd, 2020, 9:47 pm

Re: amling search program principles discussion / brain dump

Post by amling » October 25th, 2024, 5:31 pm

Sokwe wrote:
October 25th, 2024, 3:04 am
amling wrote:
October 24th, 2024, 7:18 pm
I've pushed it to codeberg as 20241024-rc-pre-reify-autochoke-03 so you can take it for a spin if you want.
I noticed that if I set --pre-reify-autochoke to a much higher value, the w_pos restarts are substantially more expensive, and it takes a very long time to sufficiently reduce mid_steps to continue the search, since it only reduces by one each time. Perhaps it would be helpful to be able set the increment for mid_steps reduction. Once it finds a working mid_steps reduction, it could even increment again to find the largest working mid_steps. Another idea would be to run a binary search to find the least mid_steps reduction that meets the memory limit. I'm not sure how much more work this might be to code versus a simple decrement and increment. I'm just throwing ideas out there.
Yeah, it's a whole terrible game of guess the magic number only each query is very expensive. I had been thinking some more about this and I realized that if I do the "exact expand" changes I want we'll be very close to being able to just find the magic number instantly...

First I should explain what I mean by "exact expand". Right now recentering expansion mid_steps is a confusing measure in (at least) 3 ways:

(1) It's steps, not width of effective branch it covers and the code always does effectively one extra step at the end. This makes it off by a constant amount (depending on AF2) from human intuition. In this way mid_steps=10 right now is approximately "patterns 9 cells wide" for normal geometries.

(2) Its enforcement is "depth local": after each expand stage at a given depth all the resulting parts are tossed back into the same bag and so while some enforcement may have been done to partials "near the bottom", there is no constraint at all on how partials recombine at shallower depths. As a stunning example there is a 2c/5 ship somewhere up-thread that is found by building two separate branches but then at the bottom thinning them each a little, putting them next to each other, and solving them together like that. Because it was able to build each part of the resulting ship at its associated depth it is able to find the entire ship even though in the middle depths it consists of two separate far-apart branches.

(3) Even modulo that it is still only a very approximate upper bound. During expansion it keeps two sides (left-to-right and right-to-left) and always works to extend inward the smaller of the two. Once it has done mid_steps many steps it matches them up in the middle and filters down accordingly. The problem is that depending on the split of these steps into the left and right side you might get lucky and find patterns that are "too wide" and might not be found for a different split of steps between the two sides. Now for a bigger value of mid_steps the numbers could be different and cause a different split of steps between left and right and thus miss something meaning that this inexactness makes bigger values of mid_steps not necessarily completely cover smaller ones.

(1) is occasionally confusing but no one is counting mid_steps exactly (rather just using it as a sliding scale of bigness) except for very specific search projects. (2) I have no idea about how to fix and I'm not sure it's that big of a deal anyway. For "exact expand" I'd like to fix (3).

The basic idea is to track not just what pieces have been reached from the left and right but also the minimum distance from the sides they were found at. This seems like it would be expensive but it's all "bcol-sized" data which I think means it's not really going to matter. Also it will all be boiled down to a single set of flags of "are we keeping this or not" before we start performing the actual reification of the results which I believe is where memory most often peaks anyway.

Now for autochoking it's even better: since we know the minimum distances to left and right for each long bcol entry we can actually answer very quickly the minimum value mid_steps would have to have been to include a given long col entry and so we can count would-be entries per minimum mid_steps and then estimate memory for a given value of mid_steps (cumulative sums of these counts) very, very quickly.

There are some additional shenanigans to adjust the plan for closures and it's going to be a significant code change as well as a significant behavior change, but I think it might be worth doing. TBD if I've missed anything and if I can make it perform acceptably.

Sokwe
Moderator
Posts: 2884
Joined: July 9th, 2009, 2:44 pm

Re: amling search program principles discussion / brain dump

Post by Sokwe » October 26th, 2024, 9:01 pm

How do I forbid a block? I've been searching for a p1 photon in B246/S02367, and I keep running into this asymmetric wave that gums up the search:

Code: Select all

x = 31, y = 42, rule = B246/S02367
14bo$12bo2b16o$12bo3bo$14b3o$11b2ob3o$11b5o2bo$6bo3b5o4b12o$5bo4bob2o$
3bo3b3obobob4o$3bo4bobob2o2bo$2b5o2b6o2bo$o7b7o$o2b2obobobobobo$2bo4bo
bobobobo$5bob7o$5bo2b6ob2o$8b2o2bobo$10bob2ob3o$6bobo3bobo$6bobo3b2ob
2o$10bobobo$8b2o2b2ob3o$8b2o2bobo$10bob2ob2o$6bobo3bobo$6bobo3b2ob3o$
10bobobo$8b2o2b2ob2o$8b2o2bobo$10bob2ob3o$6bobo3bobo$6bobo3b2ob2o$10bo
bobo$8b2o2b2ob3o$8b2o2bobo$10bob2ob2o$6bobo3bobo$6bobo3b2ob3o$10bobobo
$8b2o2b2ob2o$8b2o2bobo$10bob2ob3o!
I would like to forbid a block from this wave. It probably doesn't have to be large. Maybe something like this:

Code: Select all

.**.***
.*.*...
Is there any way I can do this with a currently released version of LLSSS?
-Matthias Merzenich

amling
Posts: 872
Joined: April 2nd, 2020, 9:47 pm

Re: amling search program principles discussion / brain dump

Post by amling » October 26th, 2024, 9:36 pm

Sokwe wrote:
October 26th, 2024, 9:01 pm
I would like to forbid a block from this wave. It probably doesn't have to be large. Maybe something like this:

Code: Select all

.**.***
.*.*...
Is there any way I can do this with a currently released version of LLSSS?
Yes, although "can" does not always translate into "will like the performance of". In particular you need AF2 to be wide enough to cover the block, so AF2 at least 7 to forbid the above. Generally searches have performed much worse with larger values of AF2 and so be prepared for a large hit.

With "f1.block" containing:

Code: Select all

| .**.*** |
| .*.*... |
You'd add to any fixed or recentering search:

Code: Select all

--filters forbid_block:f1.block
...and eventually (at least for recentering searches) get output like:

Code: Select all

20241026 18:32:44 [INFO] LlsssFilterForbidBlock: Filtered (1, 67078, 119789, 1) -> (1, 67071, 119781, 1)
...which shows the change to sizes of (left edge, bcol, col, right edge) performed by the filter.

I am not optimistic that any sort of forbidding is going to overcome the loss of perf from bigger AF2 but I guess let me know how it goes.

amling
Posts: 872
Joined: April 2nd, 2020, 9:47 pm

Re: amling search program principles discussion / brain dump

Post by amling » October 31st, 2024, 3:02 pm

amling wrote:
October 25th, 2024, 5:31 pm
Sokwe wrote:
October 25th, 2024, 3:04 am
amling wrote:
October 24th, 2024, 7:18 pm
I've pushed it to codeberg as 20241024-rc-pre-reify-autochoke-03 so you can take it for a spin if you want.
I noticed that if I set --pre-reify-autochoke to a much higher value, the w_pos restarts are substantially more expensive, and it takes a very long time to sufficiently reduce mid_steps to continue the search, since it only reduces by one each time. Perhaps it would be helpful to be able set the increment for mid_steps reduction. Once it finds a working mid_steps reduction, it could even increment again to find the largest working mid_steps. Another idea would be to run a binary search to find the least mid_steps reduction that meets the memory limit. I'm not sure how much more work this might be to code versus a simple decrement and increment. I'm just throwing ideas out there.
Yeah, it's a whole terrible game of guess the magic number only each query is very expensive. I had been thinking some more about this and I realized that if I do the "exact expand" changes I want we'll be very close to being able to just find the magic number instantly...

...

There are some additional shenanigans to adjust the plan for closures and it's going to be a significant code change as well as a significant behavior change, but I think it might be worth doing. TBD if I've missed anything and if I can make it perform acceptably.
The shenanigans for closures turned out to complicate things materially and so I don't think I can answer correct autochoke instantly, but I was able to structure the code semi-reasonably to allow bisection in mid_steps and it's pretty fast since it's only redoing the very last part of it which does depend on mid_steps.

In terms of performance of normal non-autochoke searches it's complicated. On my laptop (and my fancy 1 TB machine is shaking out to be comparable so far), for analogous mid_steps values the search max "cols sizes" are about 50% of what they were and the memory taken and speed are about 15% worse proportionally.

If you think the extra stuff the old version was finding was good or neutral (in some average sense) then 50% smaller cols isn't good, it's bad or meaningless (you just have to run bigger values of mid_steps to find the same stuff) and that +15% in time and memory is just plain bad.

If you think the extra stuff was worse on average then -50% followed by +15% is still a sizable win. E.g. the "same width" searches complete a lot faster if all you're comparing on is "what width did mid_steps (approximately) correspond to?".

My evidence about which it is is slightly split. What I have observed in testing is that for B2/S c/4 f2b searches from zeros for most values of mid_steps I ran the old and new code ended up at the same or almost the same w_pos. There is one big exception which is that for old mid_steps=24 the old code got to 199 and the new code only to 178. If you look at the depth 199 partial there is a spot in the middle where it is 25 wide (which is 2 wider than "old mid_steps=24" partials "should" be). Given that most searches got to similar (if not identical) depths I tend to favor the latter view: extra stuff is mostly useless crap and this is a win on average.


As for autochoke searches, I'm still not quite sure how to best use them. As a silly demo I ran various memory size unlimited width autochoke searches and did not generally like what I got. As autochoking happened it seems like it fixed upper parts of the pattern uniquely and it meant it could be much, much wider in lower parts of the pattern and so you get these wacky cones that just get worse and worse and were clearly never going to solve, e.g. this final partial for the 2GB search:

Code: Select all

x = 441, y = 244, rule = B2/SHistory
F.107B.F.107B.F.107B.F.107B.F$F.107B.F.107B.F.107B.F.107B.F$F.49BA57B
.F.50BA56B.F.49BA57B.F.48BABA56B.F$F.46BA4BA55B.F.45BA4BABA54B.F.46BA
2BA57B.F.45BAB2A2BA55B.F$F.44BA7BA54B.F.43BABA5BA55B.F.46BA3BABA54B.F
.44BA2BABABA55B.F$F.43BA63B.F.44BA62B.F.43BABA61B.F.44BABA4BA55B.F$F.
107B.F.56BA50B.F.57BA49B.F.44BABABAB3A3BA50B.F$F.49BA5BABA49B.F.48BA
9BA48B.F.47BABAB2A4BABA47B.F.43B2ABA9BA50B.F$F.42BA6B2A2BABA2BA48B.F.
48BA2B2A6BA47B.F.43B2A2BA2BA7BA48B.F.42BA2BA7BA3BABA47B.F$F.46BA5BAB
3ABA48B.F.43B2A4BA57B.F.42BA2BAB2A4BA53B.F.49BA2BABA52B.F$F.44B2A5BA
6BA48B.F.43BA2BA3BABA54B.F.53BA53B.F.41B3A2B3A3BA54B.F$F.44BA4BA4BA2B
2A48B.F.43BA2B3ABA2BA53B.F.42BA11BA52B.F.43BA8B2A3B2A48B.F$F.41BA4BAB
A5B3A2BA47B.F.45BABAB2A2BA53B.F.44BA6BA5B2A48B.F.43BA8BABABA2BA47B.F$
F.51BA55B.F.48BA4BA3B2A48B.F.52BABABA2BA47B.F.43B2A10BA51B.F$F.48BAB
2ABA3BA49B.F.44B4ABA6BABA48B.F.43BA8BA54B.F.42BA5B3A4BA2B3A46B.F$F.
44B2ABA9BA49B.F.43BA9B2ABABA48B.F.41BA5BAB2ABA6BA47B.F.40BABA3BA7BABA
50B.F$F.43BA3B2AB2ABA6BA46B.F.41B2A2BA3BA2BA4BA49B.F.40BA5BABA2BA2B3A
50B.F.41BA10BA4B2A48B.F$F.40BABA4BA6B3A50B.F.41BA2BABA2B2A7B2A47B.F.
48BA5BA2BA49B.F.45B2A6BA53B.F$F.44BA7BA4B2A48B.F.41BABA7BAB2A52B.F.
46BABA58B.F.45BA3BA57B.F$F.50BA56B.F.40B2A3BA3BABAB6A48B.F.44BA62B.F.
43BABA4BA56B.F$F.40B2A4BA2BA4B2A51B.F.56BA50B.F.39BA2BA5B3A7BA48B.F.
40B2ABA10B2A51B.F$F.50B2A4BA50B.F.39BABA6BA4BA53B.F.40BA13B2A51B.F.
42B2A4BABA5BA50B.F$F.39BA9BA4BA52B.F.51BABA2B2A49B.F.40BABA12BA51B.F.
39BA3BA63B.F$F.54BA2BA49B.F.43BA9BABA51B.F.42BA14BA49B.F.43BA3B2A5B3A
50B.F$F.42BABA62B.F.43BABA61B.F.47B2A5BA52B.F.107B.F$F.46BA2BA57B.F.
43BABAB2A13BA44B.F.63BA43B.F.47BABA5B2ABA3BA44B.F$F.48BA8BA3BABA43B.F
.43B3A13BA4BA42B.F.49BA6B3A4BABA41B.F.62BA44B.F$F.43B2A3BA9B2ABA2BA
42B.F.42BA2BABABA6B2A7BA41B.F.64BA42B.F.43B2A11BA2BA3BABA41B.F$F.42BA
2BA9BA6BABA42B.F.46B2A6BAB2A49B.F.43B2A8BA4BA48B.F.42BA2BA8BA52B.F$F.
46BA8BA2B3A3BA42B.F.44BA3B3A3BABA5BA44B.F.43BA2BA4BABA53B.F.47BA11BA
47B.F$F.41B3A2BAB2ABA8BABABA42B.F.44BA5BA56B.F.43BABA2BA3B2ABA4BA3BA
42B.F.42BA6B3A9BABABA41B.F$F.43BA2B2A11BA6BA40B.F.50B3A7B2AB2A42B.F.
44BABA2BA3BA2B4A2BA2BA41B.F.43BA3BA2BA9B2ABA2BA40B.F$F.42BABA3BA3BA
12BA41B.F.45B2A4BABA2B2ABA4BA2BA39B.F.49BA5BA9BA2BA38B.F.44BA6BA7B3A
45B.F$F.43BA8BA2BAB2A4BA3BA39B.F.49BA6BA2BA2BA5BA38B.F.45B4ABAB2A7BAB
5A39B.F.51BA3B3A4BA5BA38B.F$F.43B3A4BABA6BA3BA3BA39B.F.48BA5B2A4BA4BA
41B.F.49BA3BA2BABA5BA42B.F.44BA12BA4BA4BA39B.F$F.43BA4B2AB2A2BA2BA2BA
2BABABA38B.F.45BA8BA4B2AB2A43B.F.44BAB2A2BA2BA10BA42B.F.42BA5B2ABA11B
ABA41B.F$F.41BABA8B2A12BA40B.F.44BA2BAB2A7B2AB2A44B.F.42B2AB2A4BA3B2A
50B.F.41BA8BABABA5BAB2A43B.F$F.42BA4BA5BA5BABA45B.F.41BABA4BA2BA4B3A
48B.F.42BABABA13B3A44B.F.47BA11BA47B.F$F.48BA2BAB4ABABA46B.F.47BA59B.
F.42BA13BABA48B.F.45BABA7BABA4BA44B.F$F.54BA3BA2BABA43B.F.49B4A54B.F.
42BA5BA5BA4B2A46B.F.47BABA5BA6BA44B.F$F.42BA2BA4BA6B2A2BA45B.F.41BABA
9B2A4B2A2BA43B.F.40BA3BA3BA9BA2B2A44B.F.41BABABABABA4B2ABA5BA43B.F$F.
42BA10BA8BA44B.F.41BABA5B3A7BABA45B.F.45BA9BA2BA3BA44B.F.44BAB4A4BABA
50B.F$F.50BA7BA48B.F.41B2AB2A6B3A52B.F.46BA2BA5BA2B2AB2A44B.F.43BA10B
AB2A2BA46B.F$F.42BAB2A7BA53B.F.41BA4BA7BA3BA2BA45B.F.43B2A17BA44B.F.
42BA4B2A7BA50B.F$F.41BA2BABA7BA4B3A45B.F.40BA12BABA6BA44B.F.41BA3BABA
9B3ABABA43B.F.42B2A2BA8BA4BA3BA42B.F$F.41BA7BA6BA5BA44B.F.44BA3BA9BA
4BA43B.F.55B2A7BA42B.F.49BA9B2AB2A43B.F$F.41BA3B3A8BABA5BA42B.F.55BA
7BA43B.F.47B3A57B.F.42BA3BA10BA2B2A45B.F$F.41BABABABA59B.F.48BA14B2A
42B.F.41BABA3BA8BA3B2A45B.F.42BA3BA8BABA4BA44B.F$F.40BA3BA13B2A3BA43B
.F.41B3A3BA9BA2B2A45B.F.48BA7BA5BA3BA40B.F.40B2AB2A2BA12BA2BA3BA39B.F
$F.45B2A9BA4B2A5BA38B.F.57B4A3B3A40B.F.41BA2BA11BA6BA3BA39B.F.42B2A
24BA38B.F$F.45BA18BAB2A39B.F.44BA16B2A5BA38B.F.43BA12BA6B2AB2A39B.F.
41BA2BA20BA41B.F$F.40BA23BABA40B.F.44B2A11BABA47B.F.42BA13BABA4BA3B2A
38B.F.41BABA11BA3BA5BA41B.F$F.44BA11BABABA2BA2BA40B.F.39BA2B2A11BA5B
2A4BA39B.F.41BA15B2A4BA43B.F.39BA2BA13BA2BA2BABA42B.F$F.40B2ABA11BA2B
ABA2BABA41B.F.42BAB2ABA8BA4B2A44B.F.39B2A5BA19B2A39B.F.47BA59B.F$F.
46BABA15B2A41B.F.40BA10BA4B2A2BA2BA2BA40B.F.41B2A2B2A5BA5B2A47B.F.47B
A3BA12BA42B.F$F.42BAB2A2BABABA4BABA47B.F.43BA9BA2BABA10BA37B.F.40BA
11BABA9B3A3BA36B.F.39BA2B3ABA4BA5B3A11BA35B.F$F.45BABA2BABA3BA6B2AB4A
37B.F.41B2A5BA6BA2BA6BA4BA36B.F.40BA3BA9BABA14BA35B.F.57B2A5BAB2AB2A
36B.F$F.42BAB2A6BA3BA11BA2BA35B.F.41BABA16BA3B3A3BA36B.F.40BA7BA5BA2B
ABA8BA38B.F.53BA9B2A42B.F$F.40BA13BA2BA2B3A44B.F.42BAB4A7B2A10B2AB2A
35B.F.40BA16B2A4B2A42B.F.39BABA12BA4B2ABA2B2A2BA37B.F$F.42BA4B7A14BAB
A36B.F.41BA4BA11B3ABA44B.F.55B3A3BA4B3A38B.F.41BA5B2AB2A8BA2B2A4BA37B
.F$F.46BA2BA2BAB3ABA7BABA38B.F.43BA15BA5BA4BA36B.F.42BA3BAB3ABA8BA4B
2ABA37B.F.41BABA3BA3BA3BABA2BABA7BA36B.F$F.44BABA2BA6BA2BA4BA4BA37B.F
.47B2AB3A13BABA38B.F.42BA6BA15BA3BA37B.F.41BABA7BA55B.F$F.52BABA4BABA
4BA40B.F.43B2A6BA15BA39B.F.45B4A17BA2BA37B.F.41B3A6BA4B4A6BABA39B.F$F
.44BA7BABA4BA6BA40B.F.45BA4BA4BA2BA9BA38B.F.42BA3BA2BA4BAB2ABA7BABA
37B.F.41BA10BA2BA2BA48B.F$F.43B2A4BABABA11BAB2A38B.F.42BA2BA4BA3BA2BA
BA9BA37B.F.40BA11B2A13BA2BA36B.F.39BABA3BA2BA5B2A3BA6BA2BA37B.F$F.42B
A14B2A9BA2BA35B.F.40B2A3BA2BA2B2A3BA9BA2BA37B.F.39BA6B2A9B2A48B.F.40B
A10B3A2BA12B3A35B.F$F.39BABA2BA4B2A6B3A47B.F.40BAB2A4BA2BAB3A11B3A37B
.F.50BA5BA13BA36B.F.45B4A2BA3BA2BA10BA37B.F$F.49B2A2B2AB2A10BA38B.F.
40B4A4BA3BA12B3A39B.F.44BA4B2A4BA8BA4BA37B.F.43BABAB2A21BA36B.F$F.42B
A9BAB2AB2A6B2A40B.F.39B3A5BA3BA12BA2BA39B.F.43BA2BABA3BA3BABA48B.F.
42BAB2A4B2A3BABA6BAB4A37B.F$F.39B2A6B3A13BA43B.F.41BA4BA9B3A3BABA2BA
39B.F.39BA2BA4BA13BA3B2ABA38B.F.38BAB2ABABA11B2A5BA4BA37B.F$F.37BABA
6BA3B3ABA7BA3BA40B.F.61BA45B.F.38BABA5B2A11B2A3BAB3A38B.F.37BA3BA11BA
8B2A5BA37B.F$F.38BA6B2A5BABABA4BA2B2A41B.F.37BABA7BA9BA2BA2BA3BA39B.F
.38BA9BA3BABA3B2ABA2BA42B.F.40B2A3BA4BA2BA3BA4BA3BA2BA37B.F$F.42BA8BA
3B2A4BA3BABA39B.F.49BA2B3A3BA4BA43B.F.38BABA5B3AB2A5BAB3A2BA3BA38B.F.
52BAB2A10BA2BA37B.F$F.43B3A3B2A5B2ABA3BA3B2A38B.F.41BA4BA4BA9BA7BA37B
.F.37B2A8BA6BA7BA3B3A2BA35B.F.41B2ABA4BA2BA5B2A4BA5BA36B.F$F.40BA2BAB
A8B2ABA2BA2BA5BA2BA34B.F.37B2A9B3A15B2A2B2A35B.F.42B3ABA4BA10BA2BA2B
2A37B.F.36BA2BA5BA2B3A7BA2BA2BA6B2A34B.F$F.37B2AB3A4BA9BA2BABA2BA4BA
36B.F.43B2ABA11BA4BA2BA40B.F.36BABA9BABA6BABA4BA3B2ABA35B.F.37BA6B2AB
ABAB2ABA7BA44B.F$F.39BA15BA4BA4BA4BA36B.F.36BA5B5A9BA2BA4BA4BA37B.F.
39B3A11BABAB2A4BABAB2ABA36B.F.37B2A8B2AB2A2BA6B2A3BA4BA35B.F$F.36BA7B
2A21BA4BA34B.F.39B2A5BA5BABA13BA2BA35B.F.41B2A5BABA7BAB2A45B.F.38B2A
9BA4BABA5BABABA3B2A35B.F$F.40BA6BA3BABA13BA39B.F.44B3AB3ABA3B2A3B5A3B
A37B.F.37BA20BABA7BABA36B.F.38BABA3BA4BA21BA35B.F$F.48BABA5B2A2BAB2AB
2AB2A37B.F.37B2AB2A5BABAB2AB2A3BA4BA42B.F.39BA2B3A12B2A11BA36B.F.36BA
19BA3B2A5B2A2BA35B.F$F.37B2ABA14BABABA2BA3BA40B.F.42BA6BABA8BA7B2A37B
.F.37B2A18BA3BA2BA2BA39B.F.39BA16BA3BABA3BABAB2A35B.F$F.38BA2B2A9BA5B
A4BABA41B.F.40BA10BA2B4ABA2BABABA2B2A36B.F.43BA5BA2BA8BA5BA3BA35B.F.
39BAB2A5BA2BABA2B3ABABA3BA5BA34B.F$F.52BABA14B2A36B.F.41BABA6BA8BA3BA
BA5BA35B.F.36B2A2BABA6BABABA3BA10BA4BA33B.F.35BA2B2A14BABABA2B2A3BA5B
ABA32B.F$F.43BA6B2A8BA3BA6BA35B.F.36B2A11BA4BA4BA3BABA3BA2B2A33B.F.
35BA2BA3BA5BABA2BA3BA4BA3BA7BA32B.F.40BA2BA7BA2BABABA4BABABA5BA33B.F$
F.36B2A12BA2BA5BA4BA7BABA32B.F.35BA2BA9BA5BABABABA10BABA33B.F.39BA9BA
14BA42B.F.37BA9BA2BA11BA44B.F$F.36BABA9B2ABA3BABA5B2ABA40B.F.39BA12BA
BABABA12BABA33B.F.38BA8BA15BAB2ABA38B.F.37BA10BA58B.F$F.36BABA31BA36B
.F.48B5A3BA6B3ABABA3B2A32B.F.38B3A13BA3BA7BA40B.F.46B3A4BA2BA2BA9BABA
35B.F$F.36B3A13BA15BA4B2A32B.F.39BA11BA2BA2BA11BA37B.F.38BA8BA5BAB2AB
A3B2AB2A3BABA2BA31B.F.37BA10BA2BA12BA2BA3BAB2A32B.F$F.36BA9BA5BAB4A2B
A4BA41B.F.35BA2BA8BA10BA2BA11BABA31B.F.39BA8BA2B3A3BA2BABA11BA32B.F.
37B2A10B2A4BA2B2A5BAB5A35B.F$F.48BA2BA2BA2BA4BA12BA31B.F.45BABA4BA8BA
45B.F.36BA7BA3BA2BABA9BA3BABA4BA32B.F.35BABA5BA10BA3B5AB2A2BABA2BABA
31B.F$F.44BA4B2A4BABA49B.F.34B2A9BA5BABA7B3A3B3A37B.F.36BA6BA3B2ABA8B
A5B2A3BA36B.F.44BA19BA6BABA33B.F$F.34B2A10BABA5B2A2BA3BA4B2ABA36B.F.
36BA6B3ABA2BA8B2A2B3A5BA35B.F.34BA2BA13B4A11B2ABA2BA34B.F.35BA8BAB3A
6BA12BA4BA33B.F$F.36BA6BA12BA3B2A2B2ABA2BA36B.F.38BA9B2A4BA3B2A2B2A7B
A35B.F.37BABA5BA4BA5BA9BA3BABA34B.F.36BA17B2A4B2A3BA2B2A3BA33B.F$F.
35BAB2A9BA8BA8BA7BA32B.F.39BA2B2A3BA7B2AB2A2B3A2BA39B.F.38BA21B2A45B.
F.37BABA3B4A9B2A8BAB2ABA35B.F$F.36BABA3BA4BA6BA4BA2BA44B.F.35BA12BA6B
A9B2A40B.F.42BABA2BA9BA9B2A38B.F.43BAB2A13B2A4BA2BA2B3A32B.F$F.38B4A
14B2A7BA41B.F.44BA10BA3B5A5BA37B.F.45BA21B2A2BAB2A32B.F.40BABA3BA22BA
2BA34B.F$F.41BAB2A14BA2BA5BABA3BA32B.F.45BA9B4AB2ABAB2A2BAB3ABA31B.F.
40B2A2BA9BA12BA6BABA30B.F.46BA3BA4BA4BABA9BA4BA29B.F$F.39BA2BA2BA3BA
4BA6BABABA5BABABA31B.F.40B2A8BA7BA9BA3BA3BA30B.F.45BA3BABA3BA4B3A4BA
9BA29B.F.40B2A6BA5BA9BABA8B2A30B.F$F.45B2A4BA7B2A2BA5BA7BA29B.F.41B4A
5BA14BA4BABABABA30B.F.45B2A2BA12B3A4BA37B.F.44BA2B2A3BABA5BA4B2ABABAB
3A32B.F$F.42BA18BA2BA42B.F.45BABA4BA9B2A12B2A29B.F.40BA5BA6BA11BA5BAB
2A32B.F.41BA7BA4BA6BA8BABA2BA31B.F$F.47BA2B2A8BA15BA30B.F.40BA2BA8BA
10B2A10BA31B.F.42BA3B2ABABABA7BA12BA2BA29B.F.50BA3BA11BA9BA30B.F$F.
40B3A8BA9BABA7BA3BA31B.F.43BA4B2A12BA11BA32B.F.42BABA2BA16B2A4B4ABA
31B.F.41BA8BA2B2A7B2A43B.F$F.42BA6BA2BA2BA3B2A6BA7B3A29B.F.48BA9BA2B
2A3BA3B2ABA33B.F.43B2A2BA5BA9BABABA4BA2BA31B.F.42BA9BA5BAB3A5BA7BA30B
.F$F.41BABA5B3A7BA7BABA2B2A33B.F.44BA8B5A8BA7BA32B.F.45B4A3BA5B3ABA6B
2A36B.F.43BA5BA3BA7BABABA2BA2BAB3A31B.F$F.42BABA3BAB2A2BA2B3A4BA11BA
30B.F.41BA3BABA4BA7BA5BABA3B2A33B.F.48BA10BA5BA8BA32B.F.45BA3BA2B2A3B
A8B3AB3A34B.F$F.44BA3BABA11BAB2A41B.F.45BABA6B4ABA47B.F.53BA4BABA5BAB
A3B2A33B.F.54BA14BABA2BA32B.F$F.55BA9B2A40B.F.45BABABA6BA6BA3BA39B.F.
44BA9BA11BABA2BA35B.F.53BABAB2A5BA5BA2BA33B.F$F.46BA9BA8B2A4BA3BA31B.
F.47BA9BA9BA2BABA34B.F.55BA2BA5B2A3BA37B.F.45BABA6BA11B3A4B2A32B.F$F.
48BA7BA6BA5BA2BA34B.F.47BA7BABA7B2ABA2BA4BA30B.F.46BABA21BAB2ABA31B.F
.47BA6BA3BABA3B2A8BABA30B.F$F.59BA2B2A5BA7BA29B.F.57B2A9BA5BA32B.F.
53BA5B2A9BA6BA29B.F.47BA4BABA6B2A2BA3BA5B2A30B.F$F.58BA4BA6B2AB2A32B.
F.52BAB2ABABABA4BAB2A5B2A30B.F.53BA8B4A5BA2BA32B.F.46B6A3BA3BA6BA3BAB
A4BA29B.F$F.45BA6B3ABA5BA2BABA5BABA31B.F.44BA12B3A3B2A3BAB2A35B.F.46B
2AB2AB4A5B2A2BA7B4A30B.F.45BA2BA7BA3BA7B2AB2A34B.F$F.44BA10BA3BA7BA
39B.F.45B2ABAB2A5BA2BA11B2A33B.F.44BA7BA3BA4BAB3ABAB2A36B.F.45B2A3BA
20B2A34B.F$F.47BABABA3BABABA7BABA3BA33B.F.46BA3BABA7BA5BA40B.F.48BA4B
A5BABA3BA2BA2BA2BAB2A29B.F.44B2A5BA2BA3BA4BA3BA7BA2BA28B.F$F.47B2A3BA
2BABA49B.F.49B3A2BA11B3A3B2A2B2A29B.F.45BA6B2A5BABA3BA12BA28B.F.48B4A
4BA11B4AB2A32B.F$F.43BA2BA10BA8BA5BA3B2A29B.F.44BA13BA3BA15BA28B.F.
49BABA3BABA3BABA2BABA2BABA2BA30B.F.43BABA4BA2B2A12BA7BA2B2A27B.F$F.
44BAB2A13BABA13BA29B.F.56BA5BA8BA35B.F.43B2A12BAB2A3BA7BA3BA2BA27B.F.
46BA2BABA2BA6B3A7BABABABA29B.F$F.44B2A6BA2BA14BA8BA27B.F.43BA3BA3BA8B
2AB2A4BABA4B3A28B.F.44B3A3BA3BABA8B2A40B.F.40BA6B2A22B3A33B.F$F.39BA
11BA9BA2BA5BA5BA30B.F.40BA3BABA3BA3B2A10B3A2BA35B.F.39BABABABA2B2A6B
2AB3A3BA6BA34B.F.38BA8BA2BA13BA8BA33B.F$F.37BABA6BA4BA3BABA7B2AB2A37B
.F.40BA6BA2BA5BABA4BA6BA4B3A29B.F.38BA2BA17BA6BABA5BA3BA28B.F.37BA6BA
3B3A4B3A7BABAB4A2BA31B.F$F.38BA8BA4B3A3BA5BABABA7BA30B.F.37BABA6BAB3A
4B3ABA10BA4BABA29B.F.38BABA10BA2BA5BA8BABA2BA32B.F.41BA10B2A5BA13BABA
31B.F$F.48BABA9BA5BAB2A6BA30B.F.47BABA4BA4BA17BA29B.F.38BA7BA6BA14BAB
A36B.F.52BAB2AB2ABA10BA35B.F$F.51BA22BA32B.F.49B2ABA4BA2BA7B2A3BAB2AB
A28B.F.37B2A17BAB2A47B.F.36BA18BA13BABA35B.F$F.53BA3B3A5B2A5BA4B2A28B
.F.37B2A13BAB2A18B3A4BA25B.F.36BA2BA16BAB3A11BA9BA24B.F.40BA24B2A10B
2A4BA23B.F$F.37B2A16B2A16BA2BA2B3A25B.F.36BA2BA10BAB2A5BA4BA2B2A3BA9B
A24B.F.40BA8BA5BA9B2A2BA7B2A4BA23B.F.38B2A10BA5BA4BA9B3A2BA2BAB2A24B.
F$F.37BA2BA8BABA2BA2BA6BA2BABA4B2A7BA23B.F.39BA8BA3BA12BA2BA4BA3BABAB
2A24B.F.35B3A9BABA8B3A11BA3BA3BA26B.F.38BA11BA3B3A8B2A2B3A3BA2BA2BA
25B.F$F.37BA10BA2BA10BABA11BA30B.F.36BA2B2A6BA5B2A3BA2BA3BABABA7BA4B
2A23B.F.37BA10BA3BA2BA4BABA7BA5BA3BA26B.F.35BA11BABA8BA4BA7BAB2A3BA3B
ABA22B.F$F.39BA8BABA2BA5BA2BA5BA6BABA5BABA21B.F.38BA15BA6BA2B2ABABA
37B.F.37BA3BA18BA2BA10B5A3B3A22B.F.40BA13B3A2BA2BA2BA3B3ABA6B2A3BA21B
.F$F.46BAB3A2BA10BA3BA13B3A22B.F.39BABA12BA7BA4BABA4B2A2BA6BA21B.F.
37BA2BA14BA8B2A4BA2BA3BABA3B2A22B.F.45BA4BA3BABA2B4A6BA2BA7BA26B.F$F.
40B2A2BABA2BABA11BA9BA2B2A29B.F.37BA15BA8BA9BA5BA3BABA22B.F.36BABABA
3BABA2BABA3BA4BA2BA4BA4BA5BA3BABA21B.F.41BA3BA4BA3BA2B2A2BA7B3A4B2A2B
A26B.F$F.37B4AB2A8BA10BA8BA6BA27B.F.36BA7B3A2B3AB2A4BABA13B2A30B.F.
37BA19B2ABA3BA6BA2BA2BA5BA23B.F.36BAB2A3B4A2BAB2A3BA6BA4B2A5B2A5BA24B
.F$F.37BA2BABA4B2A4BABA3B3A2BA8B2A3B2ABA25B.F.54BABABA3B2ABA4BA4BA31B
.F.43BA3B2A2BA8BA8BABA2BA2BA29B.F.44BABA2BA7B2A2BA3BA6B2A4BA28B.F$F.
37B2ABA10B2A3BA2BA6BA3B2A3BA31B.F.43BA2BA2BA3B3A2BA3BABA4BA2BA4BA2BA
26B.F.44BA2B2A17BA3BA4BA31B.F.40BA5BA2BA9BABA3BA3BA2B2A3BA29B.F$F.36B
A2BA4BA2B2A13BABA5BA3BA3BA28B.F.35BA4BA4B2A2B2A3B2A4BA5BA5B2ABA31B.F.
36BA2BABABA12BA2BABA2BA6BA2BABA30B.F.35BABA2BABABA5BA4BAB2A7BA3BA36B.
F$F.34BA3BA6BA3BA2B3A6B2A2BA3BA3BA33B.F.33BABA4BA3BAB2A16BA42B.F.36BA
11B3A5BA2BA2B2ABA6B3A32B.F.34BA2BA2BABA8B2ABA2B2A2BA9BA35B.F$F.33BA4B
2A13BA16BAB2A33B.F.34BA5B2A4BA8BA4B3A44B.F.33BABA16B3A8BA43B.F.34BABA
10BA3BA4B3A13BABA32B.F$F.37BA3B5A9BA3BA10B2ABA33B.F.39B2A11B2A4BABA8B
A37B.F.47BABA4BA2BA5BA4BA38B.F.34BA8BAB2A3BABA11BA4BA37B.F$F.42BABA4B
A3BA5BA13BA33B.F.40BA7BABABA5BA3BA5BA5BA32B.F.43B3A3BA4B3A4BA7BA37B.F
.34BA7BA3BA3BABA4BA2BA46B.F$F.41BA7BA3BA7BABA4B3A36B.F.34BA7BAB2A8BAB
3A48B.F.33BABA5BA10B2ABA5BA5B2A38B.F.32BA3BA3BA2BA2BA15BA6BA37B.F$F.
29BA3BABA8BA4BA2BA3B2A3BA45B.F.28BA3BA3BA6BA6B2A8BA6BA3BA35B.F.27BA5B
ABA5BA4BA8BA3BA47B.F.29B3A5B3A2BA2BABA2B2A4BA50B.F$F.28BA3BA2BA4B2ABA
4BA3BAB2A12B3A36B.F.27BA11BA2BA2BA11BA49B.F.28B2AB3A3B2ABA5BA2BABA2BA
3B2A6B3ABA36B.F.27BA8BA8BABA5BABA13BA37B.F$F.28B2AB2A2BA3BA4BA5B3A54B
.F.30BA2BA4BA2B3ABA3BA4B3ABA8BA3B2A34B.F.29BABA7B2A9B2ABA5BA47B.F.33B
A2BA9B2A7BA16BA34B.F$F.27B2A6BABA7BA11BABA8B2ABABA33B.F.30BA15BA3BABA
3BA3BA46B.F.26BABA2BA5B3ABA5BABABAB2A4BA7BAB3ABA33B.F.25BABA20BA7BABA
BA7BA3BA34B.F$F.32B5A2B2A4BA9BA3BA11BA35B.F.26B3A9BA5BABA21B2A3BA33B.
F.25BA3B3A19BA3B2A50B.F.26B3A3BA2BA3B2A5B2A9BA15BA33B.F$F.25BA8BABA
19BAB2A12BA34B.F.26B2A3BA9BA3B2A8BA8BA42B.F.34BAB2A9BA6BABA8BAB4ABA
34B.F.35BA12BABA2BA10BA42B.F$F.26BABA2BABA3B4A5BA11BABA2BABA6B2A33B.F
.25BABA6B3A5B2ABA9BA5BA4BA4BA35B.F.30BA10BA7BA4BABA3BA4BA2B3A36B.F.
31BABAB3A5BA4BA10BABA2BA7BA34B.F$F.32BA7B3ABA5BA3BA7B2ABA41B.F.27BABA
5BA9B5A9BA7B2ABA3BA32B.F.32BA9B2A9BA2BA3BA5BA4BA35B.F.40B2A2BA3BA2B2A
BA2BABABA6BA38B.F$F.30B2A2B2ABABA3BA3BABA12BAB4ABAB3A33B.F.32B2A2BABA
14B3A12BA38B.F.29B2A8BA5BA3B3A14BA3BA36B.F.31BA8B2A10BA2B3A7BABABA2BA
34B.F$F.43B3AB3A4BA6BA2BA5BA36B.F.29BA3B5ABA2BA8B3A13B3A37B.F.40BA2BA
6BA5BA13B2A35B.F.39BAB2A2BA2BA8B2ABA4B3ABA37B.F$F.30B3A5BA7BA4B2A6BAB
A2BA6BAB2A32B.F.37BABA3BA6BA3B2A14BABA34B.F.28B3ABA8BA2BA4BA8B3A5BA7B
A32B.F.31BA4BA2BA2B2ABA5BA4BA4BA5B3ABABABA31B.F$F.35BA2BA8B2A3BA2BA6B
AB2A41B.F.29BA3B2ABA2BA2BABA5BA7B2ABA4BA5B2ABA31B.F.35BABA2BA4BA5BA2B
ABA5BA4BABA4BA32B.F.34BA12BA4BA2BAB2ABA2BA6BA2BA33B.F$F.30B2ABA2BA5B
3ABA4BAB2A4BA4BABA8BA31B.F.45BA2BA7BABA2BA6BA38B.F.29BAB3A2B9AB2AB3A
10BA4BA3BA3BA31B.F.30BA3B2A17BA2B2A3BABA2BA2B2A3BA32B.F$F.33BA2BA15BA
B2A3B2A3B2AB2A2BA35B.F.30B2A3BA2BA2BA5BA3BA5BA14BABA32B.F.32BA4BABA2B
ABABABA3BA3BA11BA38B.F.35BA30BA2BA4B2A31B.F$F.33BA3BABA2BABA3BA4BA2B
2A5BA3BA5BA33B.F.32BA5BA4BA8BA5B5A2BA3B4A34B.F.27BAB2A5BA3B2A3BA20BAB
A5BA32B.F.26BA6BA3B3A2B3A3B5A10BABA3BA37B.F$F.27BA6BABA3B2A20BA4BA2BA
36B.F.26BABA8B3A2BAB2AB2A3B2A2B5A5BA2BAB3A33B.F.25BA3BAB2A13BA2BABA
10BABA42B.F.24BABA13BA20BA3BABA5B2A32B.F$F.27BA4B3A9BA2BA4BA6B2ABA5BA
3BA34B.F.25BA2BA2BA4B2AB3A6BA9BA6B3ABABA35B.F.24BA4BA12B4A4B2ABA8BA
10BA33B.F.25BA7BA2B2AB3A5BA10BABA11BA34B.F$F.24BABA5BAB2A2BA9BA10BA3B
3A41B.F.25BABA19BABABA5BA3B2A3BA2BABA35B.F.28BAB3A2BAB3ABA4BA3BA7B3A
11BA34B.F.33BA2BA3BA8BA3BA7B3A2B3A4BA33B.F$F.32BA17BA6B2A5B2A4BA36B.F
.25BA5BA3BA11BA12BA46B.F.29BA2BA18B2A10BA2B2ABA37B.F.28BA6BABAB2A5B2A
2BA7BA2BA2BA3BAB2A35B.F$F.29BA3BA7BA6B2A3BA5BA5B2A40B.F.25B4AB2A14BA
4BA11BA3BABA37B.F.33BABA11BA12BA3BABA3BA36B.F.30BA3BAB3A12B2A6BABABA
7BA35B.F$F.24BAB2A3BA14B2A2BA7BA5BA3BA38B.F.25BA3BA3B2A26B3A2BA2BA37B
.F.23BA7B2A4B2A4BA16BA4BABA2BA36B.F.24B3A3BA4B2A2BA29BABA35B.F$F.29BA
BA2BA25B2ABA4BA3BA34B.F.23B2A3BA8B2A4B4ABA10BA4BA42B.F.25B2A3BA2B2A4B
A18BA2BA3BA41B.F.36BA15B2A8BA6BA37B.F$F.24BABA5B2A3B2A4B2A3BAB2A2BA6B
A6BA38B.F.27B2ABA8BA7BA11BA47B.F.25BA11BA10BA3B2A6BA2BA3B2A38B.F.29B
3AB2A4B2A2B2A2BABABA2BA3BA2BA45B.F$F.25BABA4BA2B4A9BABA6BA2BA5BA2BA
37B.F.24BA15B3A2BA6B2A4BA3BA4B2A38B.F.23BA6BA8BA3B2A3BA2BA2BA4BA3B3A
41B.F.22BA2B3ABA7BA19BA3BA4B3A38B.F$F.31B2A2B2A2B2ABA2BA2B2A2BA5BABAB
A44B.F.24B2ABABA11BA2BAB2A2BA2BA9BAB5A37B.F.23BA2BABA9BA9BA8B3A2BABA
42B.F.34BA2BA5B2A5B2A55B.F$F.25BABAB2A2BA2BA8BA6BA3B2A2B3A2BA2BA38B.F
.34BA2BAB4A3B2A3BABABA2BA48B.F.23BAB2ABA4BABA2BA9BABA8BA3BA7BA35B.F.
29BA2BA6BA6BA4BA4BA4BA3BA6BA34B.F$F.24B2AB2A2BA11B2A3BA6BA6BA10BA33B.
F.23BA10BA7BA9B3A4BA4BA5B2A35B.F.21BA11BABABA7BABA3BA4BABABA2BABA6BA
34B.F.23BAB3A4BA6B2A5BAB2A2BA2BA6BA10BA33B.F$F.24BA3BA2BA3B3A5B2A8BA
2B2ABA4BAB4AB2A34B.F.21B2A7BA7BA3BA2BA8B2A4BA2BABA7BA33B.F.23BA15BABA
9BA4BA2BA9BAB2A34B.F.20BA13BAB2A2BABAB2A4BABA5BAB4A3B2ABA36B.F$F.21B
2AB2A2BA4BABA2BA20BA11BA35B.F.26BA12BA3B2A7B4A8BA4BA37B.F.20BAB2ABA
12BA3BA2BA10BA5BA2B2ABA3B2A33B.F.21BA5BA13BAB2ABABAB3A10B2A5BA36B.F$F
.22BA3BABA4B2AB2ABA7BA5BA2B5A4B2A40B.F.20BA3BA23BA14BA3BA4BA34B.F.26B
2A11BA4BA2BABA2BA3BA7BA3BA38B.F.21BA3BA2BA5BA5BA2BABA4BA4BABA8BA2BABA
2BA32B.F$F.20BABA3BA2BA3BABA10B2A10BA4B3ABA5BA33B.F.25BA2BA11B3A5BA7B
A3BA46B.F.23BA3BA5BABA3BA7BABA11B3A8BABA32B.F.28BA5BA3BABA2BA6B4AB3A
2BA6BABABABA33B.F$F.22B2A8BA3B2A3B2A2B2A18BA41B.F.24B3A6B3A3BA17B3A2B
A10B2A32B.F.42BA4B2A3BA3BA4BAB2ABA3BA36B.F.23B2AB3A3B5A9BA2BABABA3BA
7BA3BABABA33B.F$F.25BA11BAB3AB2A13BA4BA10BA32B.F.26BA20BA3BABA5BA4B3A
3B4A33B.F.24BA2BA4BA3BA15BA4BA2B2A7BA37B.F.28BA4BABA5BABA3B4A3B3A6B3A
4BA36B.F$F.23B3A3BA10BA3B3A4B3A3B2A7BA2BAB2A34B.F.30BA2BABA6BA19B2ABA
4BA2BA33B.F.29BA4BA6BABA6B2AB2A52B.F.27BA3B2A7BABABA14BA47B.F$F.26BA
3BA2B3AB3A5B3A10BABA2BABA41B.F.23BA5BA11BABA7BABA10BABABA4BA33B.F.28B
A3BABA5BA3BA15BA46B.F.27BA3BA4B2ABA2BA2BA4B2A3BA3BA47B.F$F.35BA2BABA
3BA13BA10B4A34B.F.29B3A9B3A6B2A5BA2B3ABA3BA4BA33B.F.28BA3BA3B2A2BA3BA
8BA2BA2BA9BA2BA34B.F.27BABA5BA24BA7BAB2ABA33B.F$F.30BA3BA6BABAB2A3B2A
2BA6BA7BA2BA34B.F.33BA2B2A4BA4BA5BABA4BABA11BA32B.F.31B2A7BA3BA4BA18B
ABA2BA33B.F.27BA7BA2B2ABABABA9B6A46B.F$F.34BABA3BA5BA7BA6BA6BA3B3A32B
.F.27BABA11B2ABA5B2ABABA4BABA6B2A36B.F.26BA5BA3B2A18BA2BA11BA35B.F.
27BA15B3A9BA13B2A3BA32B.F$F.26BABA5BA11BA24BA35B.F.25BA3BABA8B2A20BA
5B3A36B.F.24BABA5BA11BA9BA8BA8B2A33B.F.23BA7BA3B3A2BAB2A11B4ABABA8BA
35B.F$F.22BA3B2A2BABABA6BA4BA16BA5BA4B2A31B.F.24BA4BABA3BA7BA7BA18BAB
2A33B.F.23BABA2BA5BA5B3A7BA6BA3BA45B.F.22BA3BA3BABA2BA2B2A5BA5BA2B2A
2BA3BA8B2ABA32B.F$F.23B2A2BA5BA6B4A2BA3BABA20BA33B.F.22BA9BA2B2A12BA
6BABA3B2A2BABA38B.F.23BA4BAB2A2BA2BABA3B2A3BABA4BABA9BA2BA3BA32B.F.
25B2A6BA4BA6BA5BA8B3A3BA2BA37B.F$F.24BA3B3A4BABA8BA3BAB2A2B3A4BABABA
6BA32B.F.27BA10BABA3BA2BA7BA13BA2BA2BA31B.F.22B2A2BA8B2A8BA3BA7BA3BA
5B2A38B.F.25BAB2A2BA2BA4B2A2BA10B2A2BA7BA4BABA33B.F$F.24BA5BAB2ABABA
6BA4B3A4B2A7BAB3A2BABA32B.F.23BA3B2A9BA7B3A5B2A6BA7B2A35B.F.24BA4BA7B
A2BA8BA3BA2BA7BA3BA3BA34B.F.22BA5BABA4BA2BA9BABA4BA2B3AB2A5BA5BA31B.F
$F.26BA7BA5BA5BA2BABABA3BA3BA5BA3BA2BABA30B.F.25BA4BA8BA3B2A3BA5BA4BA
3B2A4B2A36B.F.24BA4BA8BABABA13BABABABA10B3A31B.F.28BABA15B2A3BA2B2A
12B2ABA4BA30B.F$F.31BA3B3ABA4BA5BA2BA3B2AB4A3BA4BA2BA31B.F.26B2A13BA
3BA2BA2BA2BABA2BA11BAB2ABA30B.F.24BA13BA3B2A2B2AB2AB2A4BA3BA6BA2BA2BA
31B.F.25BA2BA7BA3BA3B2A2BA5B3A11BA2BA35B.F$F.24BABA8BABA3BA7BA17BA39B
.F.25BA13B2A4BA5BA8BA2BA43B.F.23BA3BA7BAB2A2BA2BA7BA2BA2BA5BA2BA4B4A
31B.F.24BABABA7BA2B2A6B2A5BA8BA5B3A35B.F$F.34BA3BA7BA3BA7BA8BA39B.F.
23B2A5BA4B3A9B3A9BAB3A2BABA38B.F.27BA3BA9BA3BA4BA7BA10BA5B2A30B.F.26B
ABA5B3A2B2ABABA4BABA2B4ABA8BA3BA34B.F$F.24BA4BABA15BA12BAB2A9BA33B.F.
22B2AB2ABABA6BA2BA5BA12BABA2BAB3A6B2A30B.F.34BA3BA10BA5BA51B.F.22BABA
6B3A3BA4BA7BA3BAB4A2BA6B2A3BA2BA29B.F$F.21BABABABA10B3A22BA3BA4B2AB2A
30B.F.26BAB2ABA3B2A17BABA2B2A3BABA2BA37B.F.22B3A7BA4BAB3A13BA2BA2BABA
6BA4BABA29B.F.20BA29B4A5BA4BA2BA3BA4BA30B.F$F.19BABABA6BA3BAB3A15B3A
3BA5BAB2A37B.F.26BA2BABA8BA30BA5BA29B.F.20B2A12B3A2BA11B2ABAB2ABAB3A
3B3A2BA34B.F.19BA11B3A3BA12BA13BABA9BA30B.F$F.22BA7BA5BABA33BA2BABA
29B.F.20B2A2BA8BA5BA10BAB2A2BA4BABAB2A2BA3BA33B.F.19BA3BA7BA8BA8BA4B
2A2BA8BA2B2A35B.F.21B2A6BA2BA3BABA9BA3BA10BA2BA6BA33B.F$F.23BA4BABA3B
2A13BABABA8BABA2BA6B2A31B.F.20BA3BA6BA16BA3BABA2B2A4BAB2A5BA34B.F.29B
2A2B2A4B3A5BA2BA4B2A2B2A12BA33B.F.18B2A4BA3BA6BA6BA10BA7BA8BA3BA32B.F
$F.20B3A2BA3BA6BAB2A3BA2BA2BA4BA2B2A6BA7BABA31B.F.19BA4BA3BABA2BA6BAB
A5BA2B3A6BABABABA40B.F.18BA6BA3BABA2BA6BA7BA4BABA2BABA10B2A33B.F.24BA
13BA4BA2B3A2B3A3B2A4B2A10BA31B.F$F.20B3A11B4ABA2BAB2A4BA8B2ABA11BABA
30B.F.19BA3BA9BA13BA9BA7B2A6BA33B.F.24BA4BA2BABA4B2AB2A2BA4BABA7BAB2A
2BA6B2A31B.F.17B2A2B2A2BA9BA2BA5BA3B2A4B3A2BA16BA30B.F$F.34BABA2BA3BA
B2A3B2A8BA5BA8BA31B.F.19BA20BABA4BA22BA3BABA30B.F.18BABAB2A4BA3B2A5BA
3BA5BABA5B2A12B2A2BA31B.F.24B2ABA2BA3BA2BA15B2A4BA2B2AB2A3BA36B.F$F.
19BABA6BA4BA4BA5B2A2BA7BA12BABA35B.F.22BA4BABA2BA3BA2BA2BA4BAB3A3BABA
2BA5B2A4BA34B.F.20B2A4BA3BA6B2ABA2BA10BA3BA6BA5BABABA31B.F.18BA4BA3BA
6B2A6BABA5B4A5BA4BA5BA36B.F$F.17BABA2BA5BA4BA2BA6BA11BA2BABABA4BABABA
35B.F.21BA4BA2BA7BA8B4A4BAB2A5BA2BA40B.F.19BA10B3A2B2ABA13BA11BA8B3A
31B.F.18BA2BA2BABA22B3A3BA10BA11BA28B.F$F.25BABA5BA7BAB3A2BA4BA5B2A3B
A2BA3BA7BA27B.F.19B5A4BA3BABA16BA5BA7BA8B2A4BA26B.F.17BA6B2A3BABA5B2A
7BA2B2A2B2A7BABA2BA5BA2B3A28B.F.16BABA4BA10BA5BA4BA2BA6BABABA5B2A5BA
6BA27B.F$F.19BA2BA3BA12BABA2BAB2A3B3A4BA5BA2BA3BA2B2A4BA26B.F.17B2A6B
ABA4B2A4BA15BA2BA3BA4BA6BA2BAB2A27B.F.16BA6BA7BA3BABABABA2BA4BABA4BAB
ABABA4BABA10BA26B.F.17BA7BA3BA10BA4BA2BA4B2A10BA4BA2B2ABAB2A27B.F$F.
16BABA14BABA3BA6B2A4BA5B2ABA2BA4BA2BA4BA29B.F.17BABA5B5A4BA3BA2B4A4B
2A9BA2BABA2BABA3B2A2BA28B.F.30B2A19BA4B3A7BA4BABA33B.F.22B3A7BA3BA4BA
2BA4BA2BA2BA4B2A8BA3BA4B2A26B.F$F.25BA2B2A12BA2BA2BABA5BA15BA4BA29B.F
.17BA6BA2BA3BAB2ABABA4BA7BA5BA3B3A4B3A5BA2BABA25B.F.23BA5B2A8B2A4B4A
9B2A7BA5BA6BABA24B.F.28BA12BA9B2A3BA11BA2BA2BA32B.F$F.21BA3BABABAB2A
4BA6B2A3BA9BA2BA6BA2BA6B3A25B.F.15BABA6BA8BA2BA4B2A3B2A2BA5B2A2B2A8BA
2BA2B2A4BA24B.F.14BA3BA10B2A9BA7B2ABA11BA3BA4BA5BAB2A25B.F.13BA5BA2BA
2BA2BA2BA6BA2BA3BA4BAB2ABA4BABA8BA2BA7BA24B.F$F.15B3A12BABA2BA6BA5BA
5BABA4BA8BA6BA3BA25B.F.14BA7BA2BAB3A4BABA4BAB3A3BA7BA10BA2BA4BA30B.F.
13BA5BA3B2ABA6BA3BA15B3A3BA2BA4BA4BA2BA31B.F.14B2AB2A9BA2BA2BABAB3A7B
3ABA12BA7B2ABABA2BA25B.F$F.13BA6B2A4BA6BA7BA13B2A4BA7BA7BAB2ABA24B.F.
14B2AB3A20BA2B3AB3A3B2A2BA2BABA5BABA36B.F.16BA8BA3B2A4BA3BA23B3ABA3BA
3BA3BA27B.F.15BABA2BA6B2A2BA2BABABA12BA3BA13B2ABABA5BA26B.F$F.19BABAB
A5B2AB2A7BA2B2A2BA3BA15BA7BA30B.F.13B2A3BA7BA4BA8BABA6B2A4B6A3B2A3BA
5BAB3A2BA24B.F.16BA4BABA3BA2BA20B2A10BA4BABA5BA4BA25B.F.12BABA7BABA
13B3A3B2A23BABA2BA2B2ABA26B.F$F.11BABA3BA9B2A6BA14B2A6B2A4B2A9BA5BA
25B.F.19B2ABABABA3BA6BA2B4A2B2ABA2BA26B2A26B.F.12B3A2BA9BA4BA6BA4B2A
9BA5BABA2BA8BABA29B.F.11BA3B2A5BA27BA7B2A4B2A3BABA35B.F$F.12B3A3BA6BA
6B3AB2A3BA2BABA25BA4B3A27B.F.11BA5BAB2A3BA6BA13BA4B2A5BA2BA3B2A7BABA
4BA26B.F.12B2A13BAB2A5BA6B2A4BA2B3A3B2ABA4BA5BA3BA30B.F.16B3A3B2ABA6B
2ABABAB2A5BA8BA7B3ABA39B.F$F.19BABA2BAB2A3BA2BA22BA2BA7BA2B2A3BA30B.F
.12BABA3BABA7BA8B3ABA4B2A6B3A2BABA5BA5BABA4BA26B.F.11BABA3BA3BAB3A4BA
2BA2BA3BA4BA4B2A11BA12BA30B.F.16BA2BA6BABA2BA5BA5BA14B2A4BA6BA3BABA
29B.F$F.22B2A3BA7BA3B2A5BA7B2A4BA5BA9BAB2A27B.F.24BA6B3A2BA19B3A5BA2B
ABA3BA6BA26B.F.13BA3B3ABABA10B2A10B5A2BA7B3A6BA8BA2BA24B.F.14BABA8BA
7BA2BA7B2A8BA5BA17BABA26B.F$F.18B3A5B2A4BA2BA7BA14BA2BA2B2A4B2A2BAB2A
BA27B.F.17BA4BA10BA2BA2B4A6B2A2BA2B2AB2A2BA3BABA3BA7B2A24B.F.23BA19BA
4BA2B2ABA6B2ABA14BA27B.F.16BA2BA16BA23BA4BA5BABA9BA23B.F$F.14BA3BABA
3B3ABA5BA7BA6B2A3BABA7BABA3BA3BA2B2A2B2A24B.F.29BAB2A2B2A4BABA4BA2BA
3BA3BABA5BABA3BA5BA6BA20B.F.16BA4B3A4BA4B2A2BA9BA4B2A3BA4BA3BA5BABA2B
A2B2ABA3BA19B.F.15BABA2BA3BA2BABA5B2A2BA2B3A4B2A4B2A3BA4BA5BABA4BA3BA
3BA20B.F$F.18BA2BA6BA3BA4BA3BA6BA2BA5B2A3B2A2BA14BA3BABA19B.F.15BA4BA
2BA2BA2BA10BABA4BA6BA14B2A6B2A4BA4BA18B.F.16BA4B2A5BA5BA2B3A3BA5BA5BA
4BA10BA8BA6BABA17B.F.20BA4B2A3B3A9BA5BABA7B2A2B2A6BA2B5A4BA3BA20B.F$F
.16BA7BA8BAB2A3BA6BA7B3A6B3A2BA11BABABA2BA18B.F.17BA3BA10BABA2BABA8BA
21BA9BA8BA17B.F.16BA6B3ABA2B2A3B2A5BA7BAB4A3BA2BA8BA3BA2B2A8BA18B.F.
20BA5BAB2A2BA8BABA4B2ABA8B2A4BA3BA3BA2BA9BABA17B.F$F.22B2A16BA16BA5BA
BABABA2BA13BABA18B.F.21BA2BA3B2A2B3A2BA3BA6BAB3A2BA3B4A12B2A30B.F.15B
ABA2BA10BA3BA3B2A6BA8BA8BABA5BA4BAB2A25B.F.19BA2B2AB2A7BA2BA3BA4BA10B
A8BA4BA2BA2BA29B.F$F.21BA6B2A2BA3BA2BA9BAB2A5BAB2A2BA3B2A5B2A2BAB2ABA
BABA18B.F.15B2A6B5A5BA3B2A11BA6BABA5B3A5B2A2B2ABA2BA23B.F.20B2A9BA4BA
9BA5BA3BA15BA11BA22B.F.14BA2BABA3BA9BA3B2AB2A5BA3BA3BABA6B2AB2A2BABA
5B3ABABA21B.F$F.11BA3B2A8B2A7BABA2BA6BA5B2A9BA5BA4BA2BA8BA2BA17B.F.
10BA10BA5B4A14BAB3A9B3A8BA2BA4BAB4A6BA16B.F.9BA4BABA5B2A7B3ABA2BA3BA
8BA13BABA3BA12BA4BA17B.F.11B3ABA3BA10BA10BABA9B5A6BABA3BABA5BA4BABA2B
ABA16B.F$F.10BA11B3A6B2A4B3A4BA3BA2BA11BA9BA12B2A3BA15B.F.9BA4BA11BA
3BA2BAB2A4BABABABAB2A3BA17BA2B2A13BABA14B.F.10B2ABA5BABA12BA2BA4BA10B
ABA2BA4BA6BA6BABA9BA17B.F.9BA5BA4BA2BA7BA12BA4BABA7BA5BA2B2ABA4BABAB
2ABA4BA2BA15B.F$F.10B2ABA2BABA2B2A6BA10BABA7BAB2A6BA2BA8BA2BA9BABA4BA
14B.F.12BA6B2A9B3A4BA9BA6BA4BAB2ABA6BAB2A6BAB2A6BA15B.F.13BA14BA4B3A
2BABA2BABA3B2A2BA6BA4BA3BA6BA3BABA7BABA14B.F.18BA2BA8B3A6BA4BABA9B4A
4BAB3ABA4BAB3A4BA4BABA15B.F$F.9B2A3B2ABA2BA2BA17B2A5B2A5BA4BA10BA9B3A
3BA19B.F.24BAB3A10BA3BABA10BA6B2A4B2ABA7BA26B.F.8BABAB2A5B2A8B2ABA3B
2A4BA3BA4B3A3BA8BABA5BA6B4A22B.F.7BABA4BA3BA3BA8BA8B2ABA5BA4BA10BA10B
A2BA8B4A15B.F$F.13BABABABABABA2B2A11BA5B4ABA2BABA4BA3BA3BABA9BA3B2ABA
19B.F.8B3ABA12BA9BA2BA4B2A6B2A3BA4BABABABA3BA5BA10BA18B.F.7BA3BA7B4A
6BA4BA2BABA5BA22BA4B3A4B3A4BABA17B.F.8B3A3BA8BA2B2A7BA7BA3BA2BA2BA3BA
BA6BA3BABA3BA8BA2BAB2ABA13B.F$F.7BA5BABA9BA8BABA2BABA2BA6BA6BA5BA2BAB
A4BA2B4A3BABA7BA12B.F.8BA9BAB2AB2A3BA6BABA4BA9BABAB2A2B2ABABA4BA2BAB
2A4BABA4BA6BA11B.F.12BABA4BA2BA3B2AB5A4BA5B2ABA2BA7B2A7BABABA5BA6BA6B
3A13B.F.23BABA8BABA2BA8BA2BABA11B2A3BAB2ABA3BA2BA2BA2BABA3BA12B.F$F.
8BA2BA10BA4BA9BA2BA2B2A2BAB2A6BA2BA7BA5BA2BA9BA7BA11B.F.7BAB2A2B2A11B
A3B2AB2A6B2A3BABA2BA6BA2BA5BABA3BABA4B2ABA4B4AB2A12B.F.12BA6BA5BAB2A
3BA4BA9BA4BABA9BABA10BABA4BA10BA11B.F.11BA8BA3BA11BA3BA3BA8BA4B2A3BAB
AB2AB3A3BA8BA5BAB2A12B.F$F.10BABA6BA10B2A2BA2BABA5BA14BA16B2A3BA3BA2B
2ABA14B.F.9BA3BA7B3A5BA6BA5B2A10BA2B3ABA7BA3B4A2BABA5B2A4BA13B.F.18BA
6BA11B4A5B2AB3A10BA9BA5BA4BA23B.F.11BA7BA4BA4BAB3A11BA8BA6BABAB3A5BA
2BA2B2ABABA9B2A11B.F$F.12BA9BA3B3A11B2A4BAB2A3BABABA12BA3BA3BA2BA10BA
14B.F.9BA3BA4B3A2B2A5B2AB3A2B2A3B3A4BA7BA10BA9BA2BA6B2A16B.F.10BA17BA
3BA4BA8BA5B2A6BA6BA2BABA4BA3BA5BA6BA12B.F.9BA11B2A3B2A3BA9BA3BA2B2A5B
A2BA2BA4BABA4BA2BABA5BA22B.F$F.8BA10BA4B2A2BA5BA7B2A3BA2BA3BAB2A12B2A
21BA2BA10B.F.7BA4B2A15BA5BA10BA4B2A13BABA4B2A2BA17BA11B.F.9BA4BA6B2A
4BA3BA4BAB2A2BA10B3A2B2A7BA3BA4BA5BABA6BA15B.F.8BA2B2A2BA4BA2BA9BA9B
2ABA4BA5BA3B2AB2A3B2ABA2BA2BAB2ABABA8BABA10B.F$F.7BA5BA2BA7B2A9BA3B3A
10BA6BA3BA2B3A5BABA14B3ABA11B.F.8BA8B2ABA2BA3B2A4B2A8BA7BABAB3A2BA9B
2ABA3BA5B2A5BA16B.F.9BA2B2A2BA4B2A6B2ABA11B2A4BA3BA3B2A2B3AB3A7BA2BA
5BAB2A6B2A10B.F.8BABA3B2A7BA2BA6BAB5A2BA3B4ABA5BA2BA9B3A5BAB3A8B2A14B
.F$F.17BA3BA3BABA4BA26BA8BA5B3A6B2A5BA3B2A11B.F.6B3A7BAB2A2BA8BA2BA4B
A4BA13BA2B2AB2A3BA3BA4B2A6BAB2A6BA10B.F.20BA5BABA3BA2BA7BA3B2A3B2A12B
2A3BA2BA2BA2BA2B3ABA4BA14B.F.8B3ABABAB2A4B2ABABA2BA5BA8B2A2BABA2BA2BA
BA2BABA4B2A2BA2BA14BABA13B.F$F.7BA11B3A10B2A7B4A11BA3B2A3BA12B2A4BAB
3A5BA3BA8B.F.8BA9BA3BA3BA20B2A5BA4BA4BABAB2A10BA9B2ABA13B.F.9BA4BABA
7BA9B2A4BA16BA12BA3BA3BA13BA3BABA8B.F.10BA4BAB3ABA3BA2B2A3BA4B2ABA2BA
BA2BA2B2A10BA6BA5BA3B3ABAB2A2BABA3BABA7B.F$F.8BA3BA7BA9BA6BA5BA3B2A2B
A2B2A9BA3BA3B2ABA3BA9BA16B.F.7BA6B2A2BA3BAB2A3BAB2ABA6BA15BAB5A3B2A6B
A9B2AB2A7B2A8B.F.8B2A7BABABA6BA6B4A3B2A3B2A15B3A7BA4BABA5BA11BA7B.F.
13BA8B2A3BA11B2A3BA11B2A15BA6BA3B3A6B2A3BA8B.F$F.11B2AB2A3B3A2B2A3BA
4BA8BA4B3A4BA2BA4B5A9B2A18BA9B.F.10BA12BA2B2A2BA2BABAB2A3BABA23BA4BA
5BABA7BABA6BA8B.F.9BABA2B2A2B2A2BA5B2A11BABA8BA3BA18B3A6B2A8B3A10B.F.
12BA3B2A8BA5B2A5B2A8BA3B2A2BA5BA2B2A5B2A3BABA2BA3BA11B2A6B.F$F.11BA2B
A6BABA3B2A5BA3BA9BABA4BA8B2A9BA6BA5BA3BA5BA2BA5B.F.10BA8BA16B2A9BA3BA
BA2BAB2A2BA6BA4BA2B3ABABA3BAB2A3B2A4BA6B.F.11BA8BA5B2A4B2ABA3BA3BA4BA
5B2ABA5BA4BA3BA3BA7BABA4BA4B2ABA7B.F.8BA3BABAB3A2BA7BA4BA5BA8BA8BA5BA
8B2A7BA4BA2BA2BA7BA5B.F$F.25BA2BA3BA2BABA15B2A4BA2BA2B4ABA4BA4BA2BA2B
A2BAB2AB2AB3A7B.F.9BA5BA4BA12BA4BA10BABA3BA7BA9BA3B3A5BA2BA7BA10B.F.
8BABA5BA27BA2B2A5BAB2A6BA9BABA4BABA3BA2BA3BA4B3A5B.F.11BA14B2A8BAB3AB
A6BA8BA4BA5BABA8BA7BA2BA3B3A9B.F$F.9B2AB3A3BA2B3ABA2BA6BA7BA8B2A11BA
2BA4B3AB2A2BA4BA3BABABA3BA2B2A4B.F.8BA8BABA9BA7BA6B3A3BA8B5A18BA2BA
14BA6B.F.9BA23B2ABA2BA3BA7BA2B3A8B4A3B3A2BA3BA2BA2BA19B.F.10BA4BA6BAB
A13BABABA4BABA2B2A4BA5BA4BABA4BAB2A5BA2BA9BA3BA4B.F$F.9BABA6BA4BAB3A
7B2A8B2A3B2A5BABA2BA2BA2BA8BA2BA6BAB2A4BA11B.F.14B2A3BA14BA2B2A5BA2B
2A6BA8BAB2ABA3BA5BABA4BA5BA10BA3B.F.7B2A7B2A4B3A10BA3BA3BA5BABA7BA8BA
3BA5BABABA2BA13B3A5B.F.6BA2BA8B4A11BA2BA5BABABA5BA10B2A6BA19B2A14B.F$
F.7BA8BA5BA3B2A9BABA7BAB3A2B2ABA18BA12B2A2B3AB3AB2A4B.F.8BABA7BA2BAB
2A10BA2BA13BA8BA3BA6BA4BA22BA6B.F.6BA6BA5B2A18BA6B3A6BA6BABA2B2A5B3A
2B2AB4A5B2A14B.F.8B2A4B2A8B3ABA13B2ABA3BA4BABA9BA5BA4B2A11BA3B2A2BA2B
A5B.F$F.17BA3BA5BA18B3A13B3A6BABA15BA2B2A13B.F.6B3A5BA8BA5BA3B3ABA5B
3A7B2A5B2A12BABABA4B2A6BA15B.F.10BA4BABA3BA4B3A3BA6BA2BA3BA4B2A2BA7B
3A4BABA9BA2BA3BA2BAB2A3BA7B.F.5B2A2BA8B2A5BA15BA6BA5BA6BA4B2A6BA15BA
16B.F$F.7BA6B2A7BA4B2A2BAB2ABA5B2A6B2A3B5A7BA4BA3B2A4B2A4BA6BA2B3A5B.
F.8B2A6BA5BABAB2A5BA4BA3BA2BA4BA4BA6BABA5B2A2BA7BA2BA2BAB2A2B2A2BA4BA
3B.F.5BA4BAB4A9BA9BA3BABA4BA9BA3BA2BA5BA2BA4B3A6BA5BA14B.F.9BA14BA3BA
3B3ABABA11B2AB3A2B2A6B2A15B2A6BA3BA4BA6B.F$F.4BA3BABA14BA9BA3BA2BA4B
3A6B2A2BA10BA10BA2BA6BABA4BA2B2A3B.F.3BA2BA4BABA14B5A4B2A2BA2BA6B2A2B
A11BA2BABA6BA6BAB3A5B2A9B.F.24BABA6BA2BA5B2A2BA2BA3BA3B2A2B2A3BAB2A3B
A10BA8BA7BA2BA2B.F.2BA2BA9BA3B2A16BA2B2A5BA4BA3BA7BA2BA2BABAB2A3BA3BA
2BA4BA2BA5BAB2A3B.F$F.4BABA3BA3BA3BA3B2A7BA2B3A5BA5B2A9B2A2BA4B2A8BA
8BA2BABA3BA2BA7B.F.8BA2BA12BA5BA6BAB2A5BA3BA3B2AB2A3BA4BA9BABAB3A2BA
7BA2BA3B2ABA2B.F.2B3A4B2A2BA5B2A11B2A2BA6B3A6BA6BA3BA11B2A7B2A5BA3BA
4BA2BA3B.F.5BA5BA2BA3BA2B2A8BA6BA2BA7BABA5BA3BA2BABA3BABABA3BA4BA2BA
9BA4BA5B.F$F.4BA2BA7B3A12BA6BABA2BA3BABA4BABA6BA5B2A6BA2BA2BA11BA2BA
2BA3BA2B.F.3BA4BA3BA6B2A8BA4BA5B2ABA10BABABA4BA3BA4B4A4B2ABA3B3ABA7BA
7B.F.4BA6BABA4BA2BAB2A5BA4B4A3BA4B2A3BA6BA4BABABA2BA5B2A7BA5B3A2BA5BA
3B.F.6BABA8BA13B2A12BA5BABA2BA6BABABA7BA8BA2BA7B2A5BABA2B.F$F.5BA3B4A
B3A2BAB2A7BA6B3A17BA2B2A9BAB2A3B2A2BA5BA5BA2BA9B.F.4BA2B2A4BA4BABA2BA
12BA3BA7B5A2BA7BA8BA3BA3B2ABA5BA3BA4BAB2A5B.F.3BAB2A2BA4BA2BA4BA11BA
12BA8B4A26BA5BA14B.F.8BA2BA3BA2BA6BA12BA21BA2BA2BA12BA3B2A2BA3BA2BA7B
2A3B.F$F.6BA3BA13BA5BA3BA10B3A2B2A3BA6BA2BA3BA6BABA11BA5BA4BA5B.F.5BA
7BA4B2ABA13BA3BA2B3A3BA3BABA4BA3BA6BAB4A4B3A2BA2BA18B.F.4BA4BA2BABA7B
2ABA10BA10BA7B2ABA3BA3BA11BA4B2A4BA12BA4B.F.7BA2BA5B2A6BA5BAB2ABA10BA
BA2BAB2A12B3A7BA8B2A2BA12BA3B.F$F.11BA3BA3BA3BA5BABA4B2A4B2A3BA4BA2BA
4B3A17BA2B3A3BA6BA10B.F.7BA2BA7BABA3B2A15BA15BA6B3A5B2A2BAB2A20BABA4B
.F.4B2A2BA5BABA4B2A7B3A7BA3BA6B3A4BA9B2A7BA6B2A2B2A13BA3B.F.3BA5BA7BA
2BA3BA4BA5BA2B2A2B2A11BA5BA5BA10B2A7BA2BAB4ABA6BA2B.F$F.5B2A12BA6BA3B
A5BA4BA3B2AB2A2B2A2B2A5BA2BA5B2A3BA10B2A6BA2BA3BA3B.F.4BA2BA7BABA5B2A
4BAB2A18BA12B2AB2A10BA2B2A2B2A2BA11BA4B.F.16BA4BA8BA5B3A2B2A10BA3BA2B
A19BA7BA3B2AB3A5BA3B.F.4B2A3BA9BA4BAB3A3BA6B2A5BABA7BABA3B2A6B3ABA23B
2A7B.F$F.3BA4BA7B2A3BABA9BA2BA7BA10BA5BA3BABABA10B2A4BA9BA6B2A2B.F.7B
A11B2A14BAB2A3BA9B2A4B3A3BA8BAB2A12B3AB3AB3ABA5B.F109.F109.F!
I assume autochoking is more the sort of stop-gap one would use to grind out just a few more width beyond what one's memory limit would otherwise be and hope to get lucky.


The work is still somewhat in progress so I haven't merged it into the master branch, but the latest cut is pushed up to codeberg as 20241031-exact-expand-18 if anyone wants to play with it, either to compare old inexact to new exact searches or to try the autochoking. I think I have mostly talked myself into being ready to accept it but I would like to do some more testing with PD closures since they figure prominently in my search history but not really in any of the above testing and benchmarking.

amling
Posts: 872
Joined: April 2nd, 2020, 9:47 pm

Re: amling search program principles discussion / brain dump

Post by amling » October 31st, 2024, 10:32 pm

I added a "refuse" wildcard type, bound to "!" by default. This allows constructing some exotic states by concatenating a bunch of disconnected blocks with these impossible wildcards (e.g. that "proj001" business up thread would have been easier with this).

Unfortunately WAO doesn't work with wildcards (it's on my radar but that WAO init code is extremely, extremely complicated and wildcards are going to make it even worse). I have instead special-cased a column of solid exclamation points to be understood as a splitting point. Now you can run an input like...

Code: Select all

|                                                    | ABABABuuMMMMMMMMMuuCDCDC!ABABABuuMMMMMMMMMuuuCDCDC |
| .*.*.*.............*.*.*!.*.*.*.............**.*.* | .*.*.**...........**.*.*!.*.*.**............**.*.* |
| .*.*.**...........**.*.*!.*.*.**.............*.*.* | .*.*.*.............*.*.*!.*.*.*............*.*.*.* |
| .*.*.*.*.........*.*.*.*!.*.*.*.*.........**.*.*.* |                                                    |
...to allow multiple different phasings of the sides in one search (I think there are 4 relative phasings here, it was really just a demo). E.g. a single search with this at one point output a shortest and a random partial showing both phasings were still live:

Code: Select all

20241031 16:33:57 [INFO] Shortest partial:
20241031 16:33:57 [INFO] | .*..................**.* | .**.................**.* |
20241031 16:33:57 [INFO] | .**..................*.* | .*.................*.*.* |
20241031 16:33:57 [INFO] | .*.*.......*......**.*.* | .*.**.....***.....**.*.* |
20241031 16:33:57 [INFO] | .*.**.....***......*.*.* | .*.*.*...*...*...*.*.*.* |
20241031 16:33:57 [INFO] | .*.*.**..***.**.**.*.*.* | .*.*.**.*....**.**.*.*.* |
20241031 16:33:57 [INFO] | .*.*.*..**....*.**.*.*.* | .*.*.*.**..**.*.*..*.*.* |
20241031 16:33:57 [INFO] | .*.*.*..*...*.....*..*.* | .*.*.*.*.....*.**....*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.*...*..*.**.*.* | .*.*.*.*.***.*..*.**.*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.**.**..**...*.* | .*.*.*.*.*....**.....*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.*.***..****.*.* | .*.*.*.*.*.*..**..*..*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.*...*..*....*.* | .*.*.*.*.*....*.*..*.*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.*.**.*.*..*.*.* | .*.*.*.*.*.**.*.*.**.*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.*.*..*.*.**.*.* | .*.*.*.*.*.***..*....*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.*......*.**.*.* | .*.*.*.*..*..**.*.*..*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.....**.*...**.* | .*.*.*.*.**.....*....*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.**.....*.**.*.* | .*.*.*.*........*.**.*.* |
20241031 16:33:57 [INFO] | .*.*.*.*........*..*.*.* | .*.*.*.*.**......***.*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.*...........*.* | .*.*.*..*.......**..*..* |
20241031 16:33:57 [INFO] | .*.*.*.....*.*..**.....* | .*.*..*.***.***.....**.* |
20241031 16:33:57 [INFO] | .*.*....*.*..**.....**.* |                          |
20241031 16:33:57 [INFO] Random[ish] partial:
20241031 16:33:57 [INFO] | .*.*.......................*.* | .*.**.....................**.* |
20241031 16:33:57 [INFO] | .*.**.....................**.* | .*.*.......................*.* |
20241031 16:33:57 [INFO] | .*.*.*.........*.........*.*.* | .*.*.**.......***.......**.*.* |
20241031 16:33:57 [INFO] | .*.*.**.......***.......**.*.* | .*.*.*.......*...*.......*.*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.....*****.....*.*.*.* | .*.*.*.**...*.....*...**.*.*.* |
20241031 16:33:57 [INFO] | .*.*.*.**...**...**...**.*.*.* | .*.*.*.*....*.....*....*.*.*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.*..*..*..*..*.*.*.*.* | .*.*.*.*.**.*.***.*.**.*.*.*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.**.*.*.*.*.**.*.*.*.* | .*.*.*.*.**.*.*.*.*.**.*.*.*.* |
20241031 16:33:57 [INFO] | .*.*.*.*....*.*.*.*....*.*.*.* | .*.*.*.*.**.*.*...*.**.*.*.*.* |
20241031 16:33:57 [INFO] | .*.*.*.*..*.*.*...*.*..*.*.*.* | .*.*.*.**...*.*.*.*...**.*.*.* |
20241031 16:33:57 [INFO] | .*.*.*.*....*..*.*..*..*.*.*.* | .*.*.*.*.**.*.......*..*.*.*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.**.*.......**.*.*.*.* | .*.*.*.*.*..*....***.*.*.*.*.* |
20241031 16:33:57 [INFO] | .*.*.*.*.***....**.*.*.*.*.*.* | .*.*.*.*........**.*.*.*.*.*.* |
20241031 16:33:57 [INFO] | .*.*.*..*..**...**.*.*.*.*.*.* | .*.*.*.....**..*...*.*.*.*.*.* |
20241031 16:33:57 [INFO] | .*.*.*.**......*.*.*.*.*.*.*.* | .*.*.*.**......*.*.*.*.*.*.*.* |
20241031 16:33:57 [INFO] | .*.*.*.........*...*.*.*.*.*.* | .*.*.*..........*..*.*.*.*.*.* |
20241031 16:33:57 [INFO] | .*.*.*.**..........*.*.*.*.*.* | .*.*.*.*.......**.**.*.*.*.*.* |
20241031 16:33:57 [INFO] | .*.*..*........**..*.*.*.*.*.* | .*.*..........*..*.*.*.*.*.*.* |
20241031 16:33:57 [INFO] | .*..*.***.....****.*.*.*.*.*.* | .*....*.**...*.......*.*.*.*.* |
20241031 16:33:57 [INFO] | .*....*..**..**..****..*.*.*.* |                                |
Beware that it still picks up the left edge from only the left side of the input and the right edge from only the right side of the input. This is good if you just want to show various bits of state that you want all mashed together arbitrarily and maybe less good if you're trying to union multiple inputs that don't have identical edges.

I also added WAO-specific unique partials. As an example, a search with this input file...

Code: Select all

|          |          |          |          |          | ABCABRRR |
|          |          |          | ABCABRRR | **.**... | **.**... |
|          | ABCABRRR | **.**... | **.**... | **.**... | **.**... |
| ........ | ........ | ........ | ........ | ........ |          |
| **.**... | **.**... | **.**... |          |          |          |
| **.**... |          |          |          |          |          |
...and appropriate boundary conditions (3c/6 f2b blocks agar edge), will include displays like this...

Code: Select all

20241031 19:18:27 [INFO] Unique [WAO idx #3]:
20241031 19:18:27 [INFO] |     |     |     |     | **. | **. |
20241031 19:18:27 [INFO] |     |     | **. | **. | **. | **. |
20241031 19:18:27 [INFO] | ... | ... | ... | ... | ... | ..* |
20241031 19:18:27 [INFO] | **. | **. | **. | **. | **. | **. |
20241031 19:18:27 [INFO] | *.. | *.. | *.. | *.. | *.* | *.. |
20241031 19:18:27 [INFO] | ..* | *.* | *.* | *.* | *.. | *.. |
20241031 19:18:27 [INFO] | **. | *** | *.* | *.. | *.. | **. |
20241031 19:18:27 [INFO] | *.. | *.. | *.. | *.. | *.. | *.. |
20241031 19:18:27 [INFO] | *.. | *.* | *.* | *.* | *.* | ??? |
20241031 19:18:27 [INFO] | **. | *** | *.. | ??? | ??? |     |
20241031 19:18:27 [INFO] | ?.. | ?.? | ?.? |     |     |     |
20241031 19:18:27 [INFO] | ??? |     |     |     |     |     |
20241031 19:18:27 [INFO] Unique [WAO idx #4]:
20241031 19:18:27 [INFO] |     |     |     |     | **. | **. |
20241031 19:18:27 [INFO] |     |     | **. | **. | **. | **. |
20241031 19:18:27 [INFO] | ... | ... | ... | ... | ... | ..* |
20241031 19:18:27 [INFO] | **. | **. | **. | **. | *** | *?? |
20241031 19:18:27 [INFO] | *.* | *.* | *.* | *.* | *.? | ?.? |
20241031 19:18:27 [INFO] | ?.* | ?.* | ?.* | ?.? | ??? | ??? |
20241031 19:18:27 [INFO] | ??? | ??? | ??? | ??? | ?.? | ??? |
20241031 19:18:27 [INFO] | ?.. | ??? | ??? | ??? | ??? | ??? |
20241031 19:18:27 [INFO] | ??? | ??? | ??? | ??? | ??? | ??? |
20241031 19:18:27 [INFO] | ??? | ??? | ??? | ??? | ??? |     |
20241031 19:18:27 [INFO] | ??? | ??? | ??? |     |     |     |
20241031 19:18:27 [INFO] | ??? |     |     |     |     |     |
20241031 19:18:27 [INFO] Unique [WAO idx #9]:
20241031 19:18:27 [INFO] |     |     |     |     | ... | ... |
20241031 19:18:27 [INFO] |     |     | ... | ... | ... | ... |
20241031 19:18:27 [INFO] | ... | ... | ... | ... | .*. | *** |
20241031 19:18:27 [INFO] | ... | ... | .*. | *** | *?* | ?.? |
20241031 19:18:27 [INFO] | .*. | *** | *?* | ?.? | ??? | ?.? |
20241031 19:18:27 [INFO] | *?* | ?.? | ??? | ?.? | ??? | ??? |
20241031 19:18:27 [INFO] | ??? | ?.? | ??? | ??? | ??? | ??? |
20241031 19:18:27 [INFO] | ??? | ??? | ??? | ??? | ??? | ??? |
20241031 19:18:27 [INFO] | ??? | ??? | ??? | ??? | ??? | ??? |
20241031 19:18:27 [INFO] | ??? | ??? | ??? | ??? | ??? |     |
20241031 19:18:27 [INFO] | ??? | ??? | ??? |     |     |     |
20241031 19:18:27 [INFO] | ??? |     |     |     |     |     |
...and each time a WAO idx disappears it will explicitly note it like...

Code: Select all

20241031 19:18:27 [INFO] WAO idx #3 terminated
20241031 19:18:27 [INFO] Unique [WAO idx #4]:
20241031 19:18:27 [INFO] |     |     |     |     | **. | **. |
20241031 19:18:27 [INFO] |     |     | **. | **. | **. | **. |
20241031 19:18:27 [INFO] | ... | ... | ... | ... | ... | ..* |
20241031 19:18:27 [INFO] | **. | **. | **. | **. | *** | *?? |
20241031 19:18:27 [INFO] | *.* | *.* | *.* | *.* | *.? | ?.? |
20241031 19:18:27 [INFO] | ?.* | ?.* | ?.* | ?.? | ??? | ??? |
20241031 19:18:27 [INFO] | ??? | ??? | ?.? | ??? | ?.? | ?.? |
20241031 19:18:27 [INFO] | ?.. | *?? | ??? | ??? | ??? | ??? |
20241031 19:18:27 [INFO] | ??? | ??? | ??? | ??? | ??? | ??? |
20241031 19:18:27 [INFO] | ?.? | ??? | ??? | ??? | ??? |     |
20241031 19:18:27 [INFO] | ??? | ??? | ??? |     |     |     |
20241031 19:18:27 [INFO] | ??? | ??? |     |     |     |     |
20241031 19:18:27 [INFO] Unique [WAO idx #9]:
20241031 19:18:27 [INFO] |     |     |     |     | ... | ... |
20241031 19:18:27 [INFO] |     |     | ... | ... | ... | ... |
20241031 19:18:27 [INFO] | ... | ... | ... | ... | .*. | *** |
20241031 19:18:27 [INFO] | ... | ... | .*. | *** | *?* | ?.? |
20241031 19:18:27 [INFO] | .*. | *** | *** | ?.? | ??? | ?.? |
20241031 19:18:27 [INFO] | *?* | ?.? | ??? | ?.? | ??? | ??? |
20241031 19:18:27 [INFO] | ??? | ?.? | ??? | ??? | ??? | ??? |
20241031 19:18:27 [INFO] | ??? | ??? | ??? | ??? | ??? | ??? |
20241031 19:18:27 [INFO] | ??? | ??? | ??? | ??? | ??? | ??? |
20241031 19:18:27 [INFO] | ??? | ??? | ??? | ??? | ??? |     |
20241031 19:18:27 [INFO] | ??? | ??? | ??? |     |     |     |
20241031 19:18:27 [INFO] | ??? | ??? |     |     |     |     |
WAO windows aren't very wide by default (WAO pads default to 1) so the display is pretty thin. You can increase the pad size(s) to put more context in each window but depending on your other configuration it may multiply up the total number of WAO idxs and the size of the search pretty badly.

This might not be super exciting by itself although hopefully it will shine a little light into WAO's confusion. The code backing this helps pave the way to being able to do autochoking by cell value for cells w/in WAO windows which I'm hoping will be a sensibleish option for trading correctness/completeness for memory.

TBD any sort of display of shortest/random partial per WAO idx. Computers could certainly be made to do it, but I could not think of a way that is not extremely expensive. I have no idea better than multiplying the time of the existing partials, which can be considerable, by the number of extant WAO idxs, which I think is going to be unpalatable. I guess if you really want per-idx partials may you just gotta run separate searches for each.

User avatar
LaundryPizza03
Posts: 2436
Joined: December 15th, 2017, 12:05 am
Location: Unidentified location "https://en.wikipedia.org/wiki/Texas"

Re: amling search program principles discussion / brain dump

Post by LaundryPizza03 » November 2nd, 2024, 2:56 am

For B25(78)/S014(78), I found the following p2 photon using a standard LLSSS search. No spaceship exists at height less than 20.

Code: Select all

x = 116, y = 20, rule = B25/S014
b2o4b2o98b2o4b2o$o2bo2bo2bo96bo2bo2bo2bo$b2o4b2o98b2o4b2o$b2o4b2o98b2o
4b2o$2o4b2o100b2o4b2o$40b2o32b2o$bo2bo2bo5b2o24bo2bo14b2o14bo2bo24b2o
5bo2bo2bo$3b2o2b3o2bo2bo5b2o8b2o7b2o14bo2bo14b2o7b2o8b2o5bo2bo2b3o2b2o
$4bo6b2o2b3ob3obo6bo2bo4bob2o7b2o6b2o6b2o7b2obo4bo2bo6bob3ob3o2b2o6bo$
4b2o2bo4b5o4bo6bo5bob3o8bo3b3o2b2o2b3o3bo8b3obo5bo6bo4b5o4bo2b2o$3b3o
4bo2b2obo4bo3b3o2b2o3b2obo4bo3bob2obo3bo2bo3bob2obo3bo4bob2o3b2o2b3o3b
o4bob2o2bo4b3o$5bo6b2o3bobobobo3bo2b2ob3o12b2o2bob3o2b3obo2b2o12b3ob2o
2bo3bobobobo3b2o6bo$7bo3bob3obobo3bobo2bo2bobo4bo2bob3o2bobo2b2o2b2o2b
2o2bobo2b3obo2bo4bobo2bo2bobo3bobob3obo3bo$2bobo4b2ob2o5b3o5b4o2bobo3b
o7b2o5bobo2bobo5b2o7bo3bobo2b4o5b3o5b2ob2o4bobo$10bo2bo2b2o3bo2bo3b3o
3bo3b2o3bo2b2o7bo4bo7b2o2bo3b2o3bo3b3o3bo2bo3b2o2bo2bo$13b2obo3b2o4bo
4bo12bo26bo12bo4bo4b2o3bob2o$13b3o2b5obo5bo2bo2bo4bobob2o7b3o2b3o7b2ob
obo4bo2bo2bo5bob5o2b3o$14bo5bo2bob2o18bo9bo4bo9bo18b2obo2bo5bo$25bo3b
3o52b3o3bo$14bo15bo54bo15bo!
I seek to determine if it is the shortest at this height; reaching the full depth of 116 columns is probably too hard, but I need to know if it is possible to search for glide-symmetry in sideways searches. Otherwise, the following should return a symmetric result no later than depth 58:

Code: Select all

./rlife llsss 2c2-s2s --rule B25/S014 1.in --filters wcaf 0 0 0 --ends zero,odd,even

Code: Select all

|  ......................... | .........................  |
|  ......................... | .........................  |
|  ..?????????????????????.. | ..?????????????????????..  |

Code: Select all

x = 4, y = 3, rule = B3-q4z5y/S234k5j
2b2o$b2o$2o!
LaundryPizza03 at Wikipedia

amling
Posts: 872
Joined: April 2nd, 2020, 9:47 pm

Re: amling search program principles discussion / brain dump

Post by amling » November 2nd, 2024, 4:05 am

LaundryPizza03 wrote:
November 2nd, 2024, 2:56 am
For B25(78)/S014(78), I found the following p2 photon using a standard LLSSS search. No spaceship exists at height less than 20.
...
I seek to determine if it is the shortest at this height; reaching the full depth of 116 columns is probably too hard, but I need to know if it is possible to search for glide-symmetry in sideways searches.
I am not quite sure the connection between "search for glide-symmetry" and "determine if ... shortest". For a s2s search glide symmetry "on the bottom" should be easy: `--ends gse` and/or `--ends gso`. "On the top" is less workable. Theoretically you can use wildcards to start the search but the combinations of wildcards in one AF2 window gets very big very fast and I have no way to force the initializing rows to be somewhere-nonzero even you've got the memory to get through the initialization.

I've used this sort of thing in the past in places where the rest of the context somehow forces the results to be useful, e.g. something like this, searching for a GSE front corner for 2c/4 from zeros to perpendicular stripes:

Code: Select all

|  LLLLLABAB |  LLLLLABAB | LLLLLABAB  | LLLLLABAB  |
|  ..yyy*.*. |  ..yyy*.*. | ..yyy.*.*  | ..yyy.*.*  |
|  ..YYY*.*. |  ..YYY*.*. | ..YYY.*.*  | ..YYY.*.*  |

Code: Select all

rlife llsss-recentering 2c4-s2s 1.in --right-edge cycle:1 --right-closure u_toggle 05
I ran the B25/S014 height 21 search locally with only zero ends and the unique first ship it found was this, taking ~4.2 GB at that point:

Code: Select all

x = 98, y = 21, rule = B25/S014
b2o4b2o80b2o4b2o$o2bo2bo2bo78bo2bo2bo2bo$b2o4b2o80b2o4b2o$b2o4b2o80b2o
4b2o$2b2o4b2o78b2o4b2o$40b2o14b2o$2bo2bo2bo4b2o24bo2bo12bo2bo24b2o4bo
2bo2bo$b2o2b2o2bo2bo2bo5b2o8b2o7b2o14b2o7b2o8b2o5bo2bo2bo2b2o2b2o$2bo
3bo2b2o6b3o3bo6bo2bo4bob2o14b2obo4bo2bo6bo3b3o6b2o2bo3bo$4bobo3bo3bo4b
ob2o6bo3b2obo2b2obo5b2o5bob2o2bob2o3bo6b2obo4bo3bo3bobo$5b2ob3o2bo3bob
o3b3ob2o3bo4b3ob2o4bo2bo4b2ob3o4bo3b2ob3o3bobo3bo2b3ob2o$5bo3b3o3b2o6b
3o4bo2b4o6bo4b2o4bo6b4o2bo4b3o6b2o3b3o3bo$3bo6bobo6bobobo2bo3b3obo3b2o
5b2ob2ob2o5b2o3bob3o3bo2bobobo6bobo6bo$3b7o4b2ob2o4bobo2b3obo3bob6ob2o
b2ob2ob6obo3bob3o2bobo4b2ob2o4b7o$2b3o3bo3b3o5bo2bob2o3bo4bobo9bo2bo9b
obo4bo3b2obo2bo5b3o3bo3b3o$3bo9bo4bo2bo2b3obobob2obo4bo2b3o6b3o2bo4bob
2obobob3o2bo2bo4bo9bo$13bobo8bob3o3b4ob4o16b4ob4o3b3obo8bobo$12b2ob5o
7bo2b4o2bo4b3o10b3o4bo2b4o2bo7b5ob2o$18bo13bo9bo12bo9bo13bo$13b3o66b3o
$14bo68bo!

Sokwe
Moderator
Posts: 2884
Joined: July 9th, 2009, 2:44 pm

Re: amling search program principles discussion / brain dump

Post by Sokwe » November 2nd, 2024, 5:42 am

amling wrote:
November 2nd, 2024, 5:09 am
I'm glad it's working out, at least in that way. I'm still a little nervous about merging it, having run some longer searches and seen a few more cases where the old behavior search got lucky and found a materially longer partial than an analogous new search. I guess at some point nearly every serious change I could make to it is going to make some search slower but it's a tough pill to swallow.
If it slows down ordinary searches, I personally don't think it should be merged. I think the appropriate use cases are limited, although I would need to test more setups to say that definitively. So far, I've only used it for p1 photon searches. I suspect that it would also be useful for 2c2-s2s searches in B23 rules.
-Matthias Merzenich

Sokwe
Moderator
Posts: 2884
Joined: July 9th, 2009, 2:44 pm

Re: amling search program principles discussion / brain dump

Post by Sokwe » November 8th, 2024, 3:33 am

I've been trying to set up a recentering c1-b2f search in B246/S157 from this starting point:

Code: Select all

| LLLLLuuuuuuuuuuuuuuuRRR |
| ..WWWWWWWWW**.*........ |
| ..WWWWWWWWW***......... |
with the following forbidden block:

Code: Select all

| .***. |
| .***. |
I assume I would use raw:2:0:0:0:1:1:0:0:-1, but I can't seem to get the input right. Maybe I don't know how to use to-uwi correctly?

Also, what is the consequence of using U=2X instead of changing AF2 and recompiling? Is it slower? Does it take more time?
-Matthias Merzenich

amling
Posts: 872
Joined: April 2nd, 2020, 9:47 pm

Re: amling search program principles discussion / brain dump

Post by amling » November 8th, 2024, 12:37 pm

Sokwe wrote:
November 8th, 2024, 3:33 am
I've been trying to set up a recentering c1-b2f search in B246/S157 from this starting point:

Code: Select all

| LLLLLuuuuuuuuuuuuuuuRRR |
| ..WWWWWWWWW**.*........ |
| ..WWWWWWWWW***......... |
with the following forbidden block:

Code: Select all

| .***. |
| .***. |
I assume I would use raw:2:0:0:0:1:1:0:0:-1, but I can't seem to get the input right. Maybe I don't know how to use to-uwi correctly?
I'm on the road with access only to my phone so I can't explicitly test this, but that geometry looks right to me and U=2X with AF2=3 should be wide enough to forbid both alignments of a 2x5 block of cells.

I'd expect the forbidden block files to look like:

Code: Select all

| .***.W |
| .***.W |

Code: Select all

| W.***. |
| W.***. |
In that geometry these are 2 W tall by 3 U wide exactly.

You also need to fix the input file, which is gonna be much harder to get right on the phone. Mainly keep in mind U=2X and so most things have to be double what they otherwise would. Your input file for c1-b2f says to me "arbitrary starting rows ending with these 4X columns", but then also some extra "u" columns on either side, presumably to see bigger unique snapshots. Translating that I'd get something like...

Code: Select all

| LLLLLLLLLLuuuuuuuuuuuuuuuuRRRRRR |
| ....WWWWWWWWWWWW**.*............ |
| ....WWWWWWWWWWWW***............. |
Mainly: Doubled 2 and 3 L columns to 4 and 6 so they're that many U wide. Doubled 3 to 6 R columns similarly. Added one extra "u" column (chose right side zeros) to make the "u" an even number and thus an integral multiple of U wide.
Sokwe wrote:
November 8th, 2024, 3:33 am
Also, what is the consequence of using U=2X instead of changing AF2 and recompiling? Is it slower? Does it take more time?
I am not sure having not benchmarked it. My guess is that AF2=5, which would also allow forbidding the 2x5 block, would take less memory at a minimum (and probably run faster). My main basis for this is with AF2=3 and U=2X each "col" entry represents a combination of 6 columns of cells (6 X wide and in fact is rather similar to AF2=6/U=X) whereas for AF2=5 and U=X each represents a combination of 5 columns so there should be fewer to represent a given collection of partials. There are enough other weird factors that make their performances different that I am not certain, but most that I can think of are likely to favor AF2=5/U=X as well. I guess bcol memory might be worse since wider slices and sort of leaning less on spine store to efficiently store them? Spine store might be commensurately bigger and it's not clear to me either of these differences will matter compared to the cols one.

If you do go for AF2=5 you might need to adjust input files again. Generally I'd expect AF2-1 U columns of L zeros, AF2 U columns of L wildcards, however many U columns of "u" with whatever, and AF2 U columns of R zeros.

I say "might" because in this one case I think you'd get the right results. Making any of the L/R blocks extra long is fine (gets chopped up into the same set of pieces) as long as they're a multiple of U.

EDIT: I had forgot to fit it in above, but I don't think to-uwi and from-uwi should matter much here. Nothing (other than from-uwi anyway) ever wants input in UWI format and for just U=2X I think it should be easy enough to just see where the tiles are (each is two left/right adjacent spots).

Sokwe
Moderator
Posts: 2884
Joined: July 9th, 2009, 2:44 pm

Re: amling search program principles discussion / brain dump

Post by Sokwe » November 8th, 2024, 12:56 pm

amling wrote:
November 8th, 2024, 12:37 pm
Mainly: Doubled 2 and 3 L columns to 4 and 6 so they're that many U wide. Doubled 3 to 6 R columns similarly. Added one extra "u" column (chose right side zeros) to make the "u" an even number and thus an integral multiple of U wide.
It worked, thanks. Although my idea for the search itself wasn't terribly smart, and it didn't tell me anything. But at least now I have a slightly better sense of how to set up these searches.
-Matthias Merzenich

amling
Posts: 872
Joined: April 2nd, 2020, 9:47 pm

Re: amling search program principles discussion / brain dump

Post by amling » November 13th, 2024, 3:47 pm

I've just pushed changes that allow "nondeterministic" entries in rule tables where transitions both to live and dead are allowed. They're entered similar to forbidden transitions but with a question mark, e.g. you could use...

Code: Select all

rlife llsss-recentering-wao c3-f2b '@zero' --rule 'S23/B3?6' --wao-idx ALL 06
...to search for patterns where a dead cell with six neighbors may either be born or not and get nonsense partials relying on both, like...

Code: Select all

20241113 11:39:26 [INFO] Shortest partial:
20241113 11:39:26 [INFO] | ......... | ......... | ......... |
20241113 11:39:26 [INFO] | ......... | ......... | ......... |
20241113 11:39:26 [INFO] | ....*.... | ....*.... | ...***... |
20241113 11:39:26 [INFO] | ...*.*... | ...***... | ...***... |
20241113 11:39:26 [INFO] | ..*...*.. | ..*...*.. | ..*.*.*.. |
20241113 11:39:26 [INFO] | ..**.**.. | ..*****.. | ..*.*.*.. |
20241113 11:39:26 [INFO] | ....*.... | ....*.... | ....*.... |
20241113 11:39:26 [INFO] | ....*.... | ......... | ...*.*... |
20241113 11:39:26 [INFO] | ...***... | ...***... | ...***... |
20241113 11:39:26 [INFO] | ..*...*.. | ..*...*.. | ..*.*.*.. |
20241113 11:39:26 [INFO] | ..**.**.. | ..*****.. | ..*.*.*.. |
20241113 11:39:26 [INFO] | ....*.... | ....*.... | ....*.... |
20241113 11:39:26 [INFO] | ....*.... | ......... | ...*.*... |
20241113 11:39:26 [INFO] | ...***... | ...***... | ...***... |
20241113 11:39:26 [INFO] | ..*...*.. | ..*...*.. | ...***... |
20241113 11:39:26 [INFO] | ...*.*... | ......... | ......... |
20241113 11:39:26 [INFO] | ......... | ....*.... | ...***... |
20241113 11:39:26 [INFO] | ....*.... | ...***... | ......... |
20241113 11:39:26 [INFO] | ...***... | ...***... | ..*...*.. |
20241113 11:39:26 [INFO] | ......... | ...*.*... | ...*.*... |
20241113 11:39:26 [INFO] | ...*.*... | ......... | ..**.**.. |
20241113 11:39:26 [INFO] | ......... | ..**.**.. | ..**.**.. |
20241113 11:39:26 [INFO] | ..**.**.. | ...***... | ......... |
20241113 11:39:26 [INFO] | ....*.... | ...*..*.. | .....**.. |
This is mostly a silly exercise but it's possible it could in some cases be used to prove negative results for a range of rules all at the same time and trade-off between operator time/sanity and computer time (although chimeric nondeterministic partials might exist even in cases where rules individually would have no results).

User avatar
confocaloid
Posts: 4830
Joined: February 8th, 2022, 3:15 pm
Location: https://catagolue.hatsya.com/census/b3s234c/C4_4/xp62

Re: amling search program principles discussion / brain dump

Post by confocaloid » November 13th, 2024, 5:03 pm

amling wrote:
November 13th, 2024, 3:47 pm
[...] ...to search for patterns where a dead cell with six neighbors may either be born or not and get nonsense partials relying on both, like... [...]
One related idea (which may not be useful for proving negative results, though) is that, sometimes, it is possible to "save" a pattern apparently relying simultaneously on two mutually exclusive rules (such as the rules "B6" and "A6"), at the cost of increasing the range of the neighbourhood.
As an example, this pattern (copied from the example partial) contains three occurrences of the condition "the cell is currently dead and has precisely 6 alive neighbours" (i.e. "B6/A6"):

Code: Select all

#C state 3 = specified ON, state 4 = specified OFF, otherwise unspecified
x = 7, y = 6, rule = LifeHistory
7D$2D3C2D$DC3DCD$D5CD$3DC3D$7D!
#C [[ GRID ]]
As long as the CA is outer-totalistic and uses range-1 Moore neighbourhood, those three dead cells either all become alive in the next generation (if the rule "B6" is followed) or all remain dead (if the rule "A6" is followed).
However, one of those three dead cells has =5 alive range-2 neighbours, while each of the other two cells has =3 alive range-2 neighbours. That means that a CA using range-2 Moore neighbourhood can prescribe different rules for those two situations:

Code: Select all

#C one tick later, the cell in the middle column is born;
#C the other two cells whose current range-1 condition is "B6/A6" remain dead
x = 5, y = 4, rule = R2,C0,S34-67,B51-67,107,NW01010101010111111101011100110101111111010101010101
b3o$o3bo$5o$2bo!
#C [[ GRID ]]

Code: Select all

#C one tick later, the cell in the middle column remains dead;
#C the other two cells whose current range-1 condition is "B6/A6" are born
x = 5, y = 4, rule = R2,C0,S34-67,B51-67,105,NW01010101010111111101011100110101111111010101010101
b3o$o3bo$5o$2bo!
#C [[ GRID ]]
127:1 B3/S234c User:Confocal/R (isotropic CA, incomplete)
Unlikely events happen.
My silence does not imply agreement, nor indifference. If I disagreed with something in the past, then please do not construe my silence as something that could change that.

amling
Posts: 872
Joined: April 2nd, 2020, 9:47 pm

Re: amling search program principles discussion / brain dump

Post by amling » November 14th, 2024, 8:40 pm

Working on the p1 photon thread in B268/S02568 I was about to try to find a shift that would allow respacing a particular supporting component. My plan was to start with an initial state of the supporting component and use the NFA ends to see if it was ever found again later. This didn't work out before I found a photon another way, but I can demonstrate how it would have worked.

The desired component in question looks like this, in a c/1 west ship:

Code: Select all

| ...**... |
| ........ |
Where the "top" north of it is sort of supporting the "bottom" south of it.

In order to do anything with any version of the matching code I need a grid file to hold a library of columns, to match this we just need two:

Code: Select all

$ cat ends.grid
| ZA |
| .* |
| .. |
$
Now previously with the "nfa" ends I'd have to write a complex and horrible JSON config file to specify the states and transitions of an NFA that would encode what I wanted to match. Now with the "regex" ends I can just say "Z*AAZ*".

As a demo, let's find it from a pattern a few steps earlier:

Code: Select all

$ cat 1.in
| LLLuuuuRRR |
| ...**..... |
| ....***... |
$
Now I can run...

Code: Select all

rlife llsss-recentering c1-s2s --rule 'B268/S02568' 1.in --ends 'regex:ends.grid:Z*AAZ*' 10
...and somewhere in there it will output when it matches:

Code: Select all

20241114 16:37:57 [INFO] End [thinnest] ():
20241114 16:37:57 [INFO] | ...**..... |
20241114 16:37:57 [INFO] | ....***... |
20241114 16:37:57 [INFO] | ..******.. |
20241114 16:37:57 [INFO] | ..*.***... |
20241114 16:37:57 [INFO] | ...*...... |
20241114 16:37:57 [INFO] | ....**.... |
20241114 16:37:57 [INFO] | .......... |

amling
Posts: 872
Joined: April 2nd, 2020, 9:47 pm

Re: amling search program principles discussion / brain dump

Post by amling » November 17th, 2024, 2:33 pm

hibiscus wrote:
November 17th, 2024, 3:51 am
Edit: how do you get LLSSS running

Code: Select all

hibiscus@[reallifename]:~/rlife$ cargo build --release
   Compiling rlife v1.0.0 (/home/hibiscus/rlife)
   Compiling procfs v0.17.0
error: unsupported output in build script of `rlife v1.0.0 (/home/hibiscus/rlife)`: `cargo::rerun-if-env-changed=LLSSS_JCOL_V2`
Found a `cargo::key=value` build directive which is reserved for future use.
Either change the directive to `cargo:key=value` syntax (note the single `:`) or upgrade your version of Rust.
See https://doc.rust-lang.org/cargo/reference/build-scripts.html#outputs-of-the-build-script for more information about build script outputs.
warning: build failed, waiting for other jobs to finish...
My money is definitely on "too-old rust/cargo". It's possible you could hack around this particular bit of `build.rs` magic, but I doubt any cargo missing the behavior it uses is going to correspond to a rustc recent enough to compile the rest of the codebase anyway.

What do you get for `cargo --version` and `rustc --version`? I have yet to find any documentation on the history of build.rs and cargo so I'm not even sure what version to tell you you need for this bit. For comparison I have 1.79.0 here and based on my notes up thread you're definitely gonna need at least 1.75.0 for the rest of the codebase.

Sokwe
Moderator
Posts: 2884
Joined: July 9th, 2009, 2:44 pm

Re: amling search program principles discussion / brain dump

Post by Sokwe » November 19th, 2024, 8:34 am

Amling, do you have an easy way to convert a single phase of a partial result into a working search setup? For example, if I wanted to set up a 3c/5 search to extend the partial result in this post, are there tools to do this easily?
-Matthias Merzenich

amling
Posts: 872
Joined: April 2nd, 2020, 9:47 pm

Re: amling search program principles discussion / brain dump

Post by amling » November 19th, 2024, 1:07 pm

Sokwe wrote:
November 19th, 2024, 8:34 am
Amling, do you have an easy way to convert a single phase of a partial result into a working search setup? For example, if I wanted to set up a 3c/5 search to extend the partial result in this post, are there tools to do this easily?
I have had to do this sort of thing many times and have settled on this, which requires the smallest amount of human judgement I could manage, but nonetheless I'm not quite sure about how to automate:

Run doubly many generations (10 in this case) in golly and smash them together aligned correctly:

Code: Select all

x = 301, y = 36, rule = B25678/S4578History
F.9A3BA14B.F.3B6A2BABA13B.F.5AB3A5BA12B.F.2AB7A5BA11B.F.3A5B2A2B2A13B
.F.2BAB5A7BA10B.F.8ABA17B.F.2B5ABA18B.F.4ABABABA17B.F.2A2BAB3ABA16B.F
$F.9A18B.F.3A2B4A18B.F.2B7A3BA14B.F.5AB3A4BA13B.F.2AB5A6BA12B.F.5A7BA
14B.F.4AB3A19B.F.7A20B.F.2AB4AB2A17B.F.4A3B2A18B.F$F.3A2B4A18B.F.2B7A
18B.F.2A3B4A18B.F.2B7A18B.F.4ABA2BA18B.F.2B6A19B.F.5A22B.F.2B2AB2A2BA
17B.F.3AB4A2BA16B.F.2B4ABA4BA14B.F$F.2BAB5A7BA10B.F.8ABA17B.F.2B5ABA
18B.F.4ABABABA17B.F.2A2BAB3ABA16B.F.4A3B2A18B.F.2B5AB2A17B.F.4ABA4BA
16B.F.2AB4A4B2A14B.F.5AB2A5BA13B.F$F.5A7BA14B.F.4AB3A19B.F.7A20B.F.2A
B4AB2A17B.F.4A3B2A18B.F.5AB3A2BA15B.F.5ABAB2A2BA14B.F.2AB7ABABA13B.F.
3ABA2B4A3BA12B.F.2ABAB7A15B.F$F.2B6A19B.F.5A22B.F.2B2AB2A2BA17B.F.3AB
4A2BA16B.F.2B4ABA4BA14B.F.5AB2A5BA13B.F.2AB4AB2A2BA14B.F.10ABABA13B.F
.11ABA14B.F.3AB5A5B2A11B.F$F.4A3B2A18B.F.2B5AB2A17B.F.4ABA4BA16B.F.2A
B4A4B2A14B.F.5AB2A5BA13B.F.2A3BAB2A18B.F.7AB2A17B.F.4B6AB3A13B.F.4A2B
3A3BABA12B.F.3AB5A2BA15B.F$F.5AB3A2BA15B.F.5ABAB2A2BA14B.F.2AB7ABABA
13B.F.3ABA2B4A3BA12B.F.2ABAB7A15B.F.5AB3A3B2ABA11B.F.2AB3A2BA2BA2BA
12B.F.5A7BA14B.F.4ABA5B2A14B.F.2B2A4BA5BA12B.F$F.5AB2A5BA13B.F.2AB4AB
2A2BA14B.F.10ABABA13B.F.11ABA14B.F.3AB5A5B2A11B.F.8ABA2BA14B.F.2B4A2B
A2BA15B.F.2AB3A3B2ABA14B.F.2B2A2BA6BA13B.F.2AB2A6BA15B.F$F.2A3BAB2A
18B.F.7AB2A17B.F.4B6AB3A13B.F.4A2B3A3BABA12B.F.3AB5A2BA15B.F.2B5ABA4B
A13B.F.5ABA20B.F.2ABABA4BA16B.F.3AB2A21B.F.4A2BA2BAB2A14B.F$F.5AB3A3B
2ABA11B.F.2AB3A2BA2BA2BA12B.F.5A7BA14B.F.4ABA5B2A14B.F.2B2A4BA5BA12B.
F.5A4B4A14B.F.2B2ABA2B2A4BA12B.F.2A2B2A21B.F.2BABA4B3A15B.F.5A22B.F$F
.8ABA2BA14B.F.2B4A2BA2BA15B.F.2AB3A3B2ABA14B.F.2B2A2BA6BA13B.F.2AB2A
6BA15B.F.4ABAB3A3BA13B.F.3ABABA20B.F.4A3BA2BA16B.F.2AB2A22B.F.3BA2BA
4BA15B.F$F.2B5ABA4BA13B.F.5ABA20B.F.2ABABA4BA16B.F.3AB2A21B.F.4A2BA2B
AB2A14B.F.3ABA22B.F.2ABA5BA17B.F.4ABA21B.F.3BA2B4A17B.F.5A22B.F$F.5A
4B4A14B.F.2B2ABA2B2A4BA12B.F.2A2B2A21B.F.2BABA4B3A15B.F.5A22B.F.2ABA
2B2A19B.F.4A23B.F.2BABA3BA18B.F.4ABA21B.F.9BA17B.F$F.4ABAB3A3BA13B.F.
3ABABA20B.F.4A3BA2BA16B.F.2AB2A22B.F.3BA2BA4BA15B.F.3ABA22B.F.2A5BA
19B.F.3A24B.F.4BA22B.F.4A23B.F$F.3ABA22B.F.2ABA5BA17B.F.4ABA21B.F.3BA
2B4A17B.F.5A22B.F.5BA4BA16B.F.3A24B.F.3BA23B.F.3ABA22B.F.2A25B.F$F.2A
BA2B2A19B.F.4A23B.F.2BABA3BA18B.F.4ABA21B.F.9BA17B.F.4A23B.F.2A2BA22B
.F.3A2BA21B.F.3A3BA20B.F.3A2BA21B.F$F.3ABA22B.F.2A5BA19B.F.3A24B.F.4B
A22B.F.4A23B.F.2A25B.F.3ABA22B.F.3A2BA21B.F.2A25B.F.3AB3A20B.F$F.5BA
4BA16B.F.3A24B.F.3BA23B.F.3ABA22B.F.2A25B.F.3ABA22B.F.3A24B.F.4A2BA
20B.F.4ABA21B.F.2A4BA20B.F$F.4A23B.F.2A2BA22B.F.3A2BA21B.F.3A3BA20B.F
.3A2BA21B.F.3A24B.F.3AB3A20B.F.4A23B.F.4A3BA19B.F.2B2A2BA20B.F$F.2A
25B.F.3ABA22B.F.3A2BA21B.F.2A25B.F.3AB3A20B.F.3A2BABA19B.F.3ABA22B.F.
4AB2A20B.F.2B2A23B.F.4ABABA19B.F$F.3ABA22B.F.3A24B.F.4A2BA20B.F.4ABA
21B.F.2A4BA20B.F.3A2BA21B.F.3ABA22B.F.2B2A23B.F.4AB2A20B.F.4A23B.F$F.
3A24B.F.3AB3A20B.F.4A23B.F.4A3BA19B.F.2B2A2BA20B.F.3A24B.F.2BABA22B.F
.4A23B.F.2BABA22B.F.4A2BA20B.F$F.3A2BABA19B.F.3ABA22B.F.4AB2A20B.F.2B
2A23B.F.4ABABA19B.F.2B2A23B.F.2ABA2BA20B.F.7BA19B.F.3A24B.F.5B2ABA18B
.F$F.3A2BA21B.F.3ABA22B.F.2B2A23B.F.4AB2A20B.F.4A23B.F.4ABABA19B.F.3B
A2BA20B.F.3A24B.F.6B3A18B.F.3BABA21B.F$F.3A24B.F.2BABA22B.F.4A23B.F.
2BABA22B.F.4A2BA20B.F.3A24B.F.3ABABA20B.F.7BA19B.F.2BA3BA20B.F.7B2A
18B.F$F.2B2A23B.F.2ABA2BA20B.F.7BA19B.F.3A24B.F.5B2ABA18B.F.27B.F.2BA
24B.F.5BA21B.F.6BA20B.F.3BA3BA19B.F$F.4ABABA19B.F.3BA2BA20B.F.3A24B.F
.6B3A18B.F.3BABA21B.F.9BA17B.F.27B.F.27B.F.4BA22B.F.5BA21B.F$F.3A24B.
F.3ABABA20B.F.7BA19B.F.2BA3BA20B.F.7B2A18B.F.5BA21B.F.27B.F.5B2A20B.F
.27B.F.3B3A21B.F$F.27B.F.2BA24B.F.5BA21B.F.6BA20B.F.5BABA19B.F.27B.F.
5B2A20B.F.27B.F.4BA2BA19B.F.27B.F$F.9BA17B.F.27B.F.27B.F.27B.F.27B.F.
6BA20B.F.27B.F.5B2A20B.F.27B.F.4BA2BA19B.F$F.5BA21B.F.27B.F.27B.F.27B
.F.27B.F.27B.F.27B.F.27B.F.5B2A20B.F.27B.F$F.27B.F.27B.F.27B.F.27B.F.
27B.F.27B.F.27B.F.27B.F.27B.F.5B2A20B.F$F.27B.F.27B.F.27B.F.27B.F.27B
.F.27B.F.27B.F.27B.F.27B.F.27B.F$F.27B.F.27B.F.27B.F.27B.F.27B.F.27B.
F.27B.F.27B.F.27B.F.27B.F$F.27B.F.27B.F.27B.F.27B.F.27B.F.27B.F.27B.F
.27B.F.27B.F.27B.F!
Dump this out to a text view (with a terrible one-off perl script I wrote almost a year ago but haven't gotten around to cleaning up or releasing):

Code: Select all

| *********...*.............. | ...******..*.*............. | *****.***.....*............ | **.*******.....*........... | ***.....**..**............. | ..*.*****.......*.......... | ********.*................. | ..*****.*.................. | ****.*.*.*................. | **..*.***.*................ |
| *********.................. | ***..****.................. | ..*******...*.............. | *****.***....*............. | **.*****......*............ | *****.......*.............. | ****.***................... | *******.................... | **.****.**................. | ****...**.................. |
| ***..****.................. | ..*******.................. | **...****.................. | ..*******.................. | ****.*..*.................. | ..******................... | *****...................... | ..**.**..*................. | ***.****..*................ | ..****.*....*.............. |
| ..*.*****.......*.......... | ********.*................. | ..*****.*.................. | ****.*.*.*................. | **..*.***.*................ | ****...**.................. | ..*****.**................. | ****.*....*................ | **.****....**.............. | *****.**.....*............. |
| *****.......*.............. | ****.***................... | *******.................... | **.****.**................. | ****...**.................. | *****.***..*............... | *****.*.**..*.............. | **.*******.*.*............. | ***.*..****...*............ | **.*.*******............... |
| ..******................... | *****...................... | ..**.**..*................. | ***.****..*................ | ..****.*....*.............. | *****.**.....*............. | **.****.**..*.............. | **********.*.*............. | ***********.*.............. | ***.*****.....**........... |
| ****...**.................. | ..*****.**................. | ****.*....*................ | **.****....**.............. | *****.**.....*............. | **...*.**.................. | *******.**................. | ....******.***............. | ****..***...*.*............ | ***.*****..*............... |
| *****.***..*............... | *****.*.**..*.............. | **.*******.*.*............. | ***.*..****...*............ | **.*.*******............... | *****.***...**.*........... | **.***..*..*..*............ | *****.......*.............. | ****.*.....**.............. | ..**....*.....*............ |
| *****.**.....*............. | **.****.**..*.............. | **********.*.*............. | ***********.*.............. | ***.*****.....**........... | ********.*..*.............. | ..****..*..*............... | **.***...**.*.............. | ..**..*......*............. | **.**......*............... |
| **...*.**.................. | *******.**................. | ....******.***............. | ****..***...*.*............ | ***.*****..*............... | ..*****.*....*............. | *****.*.................... | **.*.*....*................ | ***.**..................... | ****..*..*.**.............. |
| *****.***...**.*........... | **.***..*..*..*............ | *****.......*.............. | ****.*.....**.............. | ..**....*.....*............ | *****....****.............. | ..**.*..**....*............ | **..**..................... | ..*.*....***............... | *****...................... |
| ********.*..*.............. | ..****..*..*............... | **.***...**.*.............. | ..**..*......*............. | **.**......*............... | ****.*.***...*............. | ***.*.*.................... | ****...*..*................ | **.**...................... | ...*..*....*............... |
| ..*****.*....*............. | *****.*.................... | **.*.*....*................ | ***.**..................... | ****..*..*.**.............. | ***.*...................... | **.*.....*................. | ****.*..................... | ...*..****................. | *****...................... |
| *****....****.............. | ..**.*..**....*............ | **..**..................... | ..*.*....***............... | *****...................... | **.*..**................... | ****....................... | ..*.*...*.................. | ****.*..................... | .........*................. |
| ****.*.***...*............. | ***.*.*.................... | ****...*..*................ | **.**...................... | ...*..*....*............... | ***.*...................... | **.....*................... | ***........................ | ....*...................... | ****....................... |
| ***.*...................... | **.*.....*................. | ****.*..................... | ...*..****................. | *****...................... | .....*....*................ | ***........................ | ...*....................... | ***.*...................... | **......................... |
| **.*..**................... | ****....................... | ..*.*...*.................. | ****.*..................... | .........*................. | ****....................... | **..*...................... | ***..*..................... | ***...*.................... | ***..*..................... |
| ***.*...................... | **.....*................... | ***........................ | ....*...................... | ****....................... | **......................... | ***.*...................... | ***..*..................... | **......................... | ***.***.................... |
| .....*....*................ | ***........................ | ...*....................... | ***.*...................... | **......................... | ***.*...................... | ***........................ | ****..*.................... | ****.*..................... | **....*.................... |
| ****....................... | **..*...................... | ***..*..................... | ***...*.................... | ***..*..................... | ***........................ | ***.***.................... | ****....................... | ****...*................... | ..**..*.................... |
| **......................... | ***.*...................... | ***..*..................... | **......................... | ***.***.................... | ***..*.*................... | ***.*...................... | ****.**.................... | ..**....................... | ****.*.*................... |
| ***.*...................... | ***........................ | ****..*.................... | ****.*..................... | **....*.................... | ***..*..................... | ***.*...................... | ..**....................... | ****.**.................... | ****....................... |
| ***........................ | ***.***.................... | ****....................... | ****...*................... | ..**..*.................... | ***........................ | ..*.*...................... | ****....................... | ..*.*...................... | ****..*.................... |
| ***..*.*................... | ***.*...................... | ****.**.................... | ..**....................... | ****.*.*................... | ..**....................... | **.*..*.................... | .......*................... | ***........................ | .....**.*.................. |
| ***..*..................... | ***.*...................... | ..**....................... | ****.**.................... | ****....................... | ****.*.*................... | ...*..*.................... | ***........................ | ......***.................. | ...*.*..................... |
| ***........................ | ..*.*...................... | ****....................... | ..*.*...................... | ****..*.................... | ***........................ | ***.*.*.................... | .......*................... | ..*...*.................... | .......**.................. |
| ..**....................... | **.*..*.................... | .......*................... | ***........................ | .....**.*.................. | ........................... | ..*........................ | .....*..................... | ......*.................... | ...*...*................... |
| ****.*.*................... | ...*..*.................... | ***........................ | ......***.................. | ...*.*..................... | .........*................. | ........................... | ........................... | ....*...................... | .....*..................... |
| ***........................ | ***.*.*.................... | .......*................... | ..*...*.................... | .......**.................. | .....*..................... | ........................... | .....**.................... | ........................... | ...***..................... |
| ........................... | ..*........................ | .....*..................... | ......*.................... | .....*.*................... | ........................... | .....**.................... | ........................... | ....*..*................... | ........................... |
| .........*................. | ........................... | ........................... | ........................... | ........................... | ......*.................... | ........................... | .....**.................... | ........................... | ....*..*................... |
| .....*..................... | ........................... | ........................... | ........................... | ........................... | ........................... | ........................... | ........................... | .....**.................... | ........................... |
| ........................... | ........................... | ........................... | ........................... | ........................... | ........................... | ........................... | ........................... | ........................... | .....**.................... |
| ........................... | ........................... | ........................... | ........................... | ........................... | ........................... | ........................... | ........................... | ........................... | ........................... |
| ........................... | ........................... | ........................... | ........................... | ........................... | ........................... | ........................... | ........................... | ........................... | ........................... |
| ........................... | ........................... | ........................... | ........................... | ........................... | ........................... | ........................... | ........................... | ........................... | ........................... |
Feed that through "rlife grid-tool pd-fold 6c10-f2b 2" to figure out where the disagreements are:

Code: Select all

| !!!!!!!!!!!!!!!!!!!!!!!!!!! | !!!!!!!!!!!!!!!!!!!!!!!!!!! | !!!!!!!!!!!!!!!!!!!!!!!!!!! | !!!!!!!!!!!!!!!!!!!!!!!!!!! | !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! | !!!!!!!!!!!!!!!!!!!!!!!!!!! | !!!!!!!!!!!!!!!!!!!!!!!!!!! | !!!!!!!!!!!!!!!!!!!!!!!!!!! | !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! | !!!!!!!!!!!!!!!!!!!!!!!!!!! | !!!!!!!!!!!!!!!!!!!!!!!!!!! | !!!!!!!!!!!!!!!!!!!!!!!!!!! | !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| ..*.*****.......*.......... | ********.*................. | ..*****.*.................. | ****.*.*.*................. | **..*.***.*................ |
| *****.......*.............. | ****.***................... | *******.................... | **.****.**................. | ****...**.................. |
| ..******................... | *****...................... | ..**.**..*................. | ***.****..*................ | ..****.*....*.............. |
| ****...**.................. | ..*****.**................. | ****.*....*................ | **.****....**.............. | *****.**.....*............. |
| *****.***..*............... | *****.*.**..*.............. | **.*******.*.*............. | ***.*..****...*............ | **.*.*******............... |
| *****.**.....*............. | **.****.**..*.............. | **********.*.*............. | ***********.*.............. | ***.*****.....**........... |
| **...*.**.................. | *******.**................. | ....******.***............. | ****..***...*.*............ | ***.*****..*............... |
| *****.***...**.*........... | **.***..*..*..*............ | *****.......*.............. | ****.*.....**.............. | ..**....*.....*............ |
| ********.*..*.............. | ..****..*..*............... | **.***...**.*.............. | ..**..*......*............. | **.**......*............... |
| ..*****.*....*............. | *****.*.................... | **.*.*....*................ | ***.**..................... | ****..*..*.**.............. |
| *****....****.............. | ..**.*..**....*............ | **..**..................... | ..*.*....***............... | *****...................... |
| ****.*.***...*............. | ***.*.*.................... | ****...*..*................ | **.**...................... | ...*..*....*............... |
| ***.*...................... | **.*.....*................. | ****.*..................... | ...*..****................. | *****...................... |
| **.*..**................... | ****....................... | ..*.*...*.................. | ****.*..................... | .........*................. |
| ***.*...................... | **.....*................... | ***........................ | ....*...................... | ****....................... |
| .....*....*................ | ***........................ | ...*....................... | ***.*...................... | **......................... |
| ****....................... | **..*...................... | ***..*..................... | ***...*.................... | ***..*..................... |
| **......................... | ***.*...................... | ***..*..................... | **......................... | ***.***.................... |
| ***.*...................... | ***........................ | ****..*.................... | ****.*..................... | **....*.................... |
| ***........................ | ***.***.................... | ****....................... | ****...*................... | ..**..*.................... |
| ***..*.*................... | ***.*...................... | ****.**.................... | ..**....................... | ****.*.*................... |
| ***..*..................... | ***.*...................... | ..**....................... | ****.**.................... | ****....................... |
| ***........................ | ..*.*...................... | ****....................... | ..*.*...................... | ****..*.................... |
| ..**....................... | **.*..*.................... | .......*................... | ***........................ | .....**.*.................. |
| ****.*.*................... | ...*..*.................... | ***........................ | ......***.................. | ...*.*..................... |
| ***........................ | ***.*.*.................... | .......*................... | ..*...*.................... | .......**.................. |
| ........................... | ..*........................ | .....*..................... | ......*.................... | ...x.o.*................... |
| .........*................. | ........................... | ........................... | ....x...................... | .....x..................... |
| .....*..................... | ........................... | .....xx.................... | ........................... | ...xxx..................... |
| ........................... | .....xx.................... | ........................... | ....x..x................... | ........................... |
| ......x.................... | ........................... | .....xx.................... | ........................... | ....x..x................... |
| ........................... | ........................... | ........................... | .....xx.................... | ........................... |
| ........................... | ........................... | ........................... | ........................... | .....xx.................... |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! | !!!!!!!!!!!!!!!!!!!!!!!!!!! | !!!!!!!!!!!!!!!!!!!!!!!!!!! | !!!!!!!!!!!!!!!!!!!!!!!!!!! | !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! | !!!!!!!!!!!!!!!!!!!!!!!!!!! | !!!!!!!!!!!!!!!!!!!!!!!!!!! | !!!!!!!!!!!!!!!!!!!!!!!!!!! | !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! | !!!!!!!!!!!!!!!!!!!!!!!!!!! | !!!!!!!!!!!!!!!!!!!!!!!!!!! | !!!!!!!!!!!!!!!!!!!!!!!!!!! | !!!!!!!!!!!!!!!!!!!!!!!!!!! |
Feed that through "rlife grid-tool to-uwi 3c5-f2b" to flatten/order by W coordinate:

Code: Select all

| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
|                             |
|                             |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
|                             |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
|                             |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| ..*.*****.......*.......... |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| ********.*................. |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| *****.......*.............. |
| ..*****.*.................. |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| ****.***................... |
| ****.*.*.*................. |
| ..******................... |
| *******.................... |
| **..*.***.*................ |
| *****...................... |
| **.****.**................. |
| ****...**.................. |
| ..**.**..*................. |
| ****...**.................. |
| ..*****.**................. |
| ***.****..*................ |
| *****.***..*............... |
| ****.*....*................ |
| ..****.*....*.............. |
| *****.*.**..*.............. |
| **.****....**.............. |
| *****.**.....*............. |
| **.*******.*.*............. |
| *****.**.....*............. |
| **.****.**..*.............. |
| ***.*..****...*............ |
| **...*.**.................. |
| **********.*.*............. |
| **.*.*******............... |
| *******.**................. |
| ***********.*.............. |
| *****.***...**.*........... |
| ....******.***............. |
| ***.*****.....**........... |
| **.***..*..*..*............ |
| ****..***...*.*............ |
| ********.*..*.............. |
| *****.......*.............. |
| ***.*****..*............... |
| ..****..*..*............... |
| ****.*.....**.............. |
| ..*****.*....*............. |
| **.***...**.*.............. |
| ..**....*.....*............ |
| *****.*.................... |
| ..**..*......*............. |
| *****....****.............. |
| **.*.*....*................ |
| **.**......*............... |
| ..**.*..**....*............ |
| ***.**..................... |
| ****.*.***...*............. |
| **..**..................... |
| ****..*..*.**.............. |
| ***.*.*.................... |
| ..*.*....***............... |
| ***.*...................... |
| ****...*..*................ |
| *****...................... |
| **.*.....*................. |
| **.**...................... |
| **.*..**................... |
| ****.*..................... |
| ...*..*....*............... |
| ****....................... |
| ...*..****................. |
| ***.*...................... |
| ..*.*...*.................. |
| *****...................... |
| **.....*................... |
| ****.*..................... |
| .....*....*................ |
| ***........................ |
| .........*................. |
| ***........................ |
| ....*...................... |
| ****....................... |
| ...*....................... |
| ****....................... |
| **..*...................... |
| ***.*...................... |
| **......................... |
| ***..*..................... |
| **......................... |
| ***.*...................... |
| ***...*.................... |
| ***.*...................... |
| ***..*..................... |
| ***..*..................... |
| ***........................ |
| **......................... |
| ***........................ |
| ****..*.................... |
| ***.***.................... |
| ***.***.................... |
| ****.*..................... |
| ***..*.*................... |
| ****....................... |
| **....*.................... |
| ***.*...................... |
| ****...*................... |
| ***..*..................... |
| ****.**.................... |
| ..**..*.................... |
| ***.*...................... |
| ..**....................... |
| ***........................ |
| ..**....................... |
| ****.*.*................... |
| ..*.*...................... |
| ****.**.................... |
| ..**....................... |
| ****....................... |
| ****....................... |
| **.*..*.................... |
| ..*.*...................... |
| ****.*.*................... |
| .......*................... |
| ****..*.................... |
| ...*..*.................... |
| ***........................ |
| ***........................ |
| ***........................ |
| .....**.*.................. |
| ***.*.*.................... |
| ......***.................. |
| ........................... |
| .......*................... |
| ...*.*..................... |
| ..*........................ |
| ..*...*.................... |
| .........*................. |
| .....*..................... |
| .......**.................. |
| ........................... |
| ......*.................... |
| .....*..................... |
| ........................... |
| ...x.o.*................... |
| ........................... |
| ....x...................... |
| ........................... |
| .....xx.................... |
| .....x..................... |
| .....xx.................... |
| ........................... |
| ......x.................... |
| ........................... |
| ...xxx..................... |
| ........................... |
| ....x..x................... |
| ........................... |
| .....xx.................... |
| ........................... |
| ........................... |
| ........................... |
| ........................... |
| ........................... |
| ....x..x................... |
| ........................... |
| .....xx.................... |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| ........................... |
| ........................... |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| ........................... |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| .....xx.................... |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
|                             |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
|                             |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
|                             |
|                             |
| !!!!!!!!!!!!!!!!!!!!!!!!!!! |
Trim the bad front and back which represent both disagreement between XY and UW rectangles ("!") and also disagreement between the doubled generations we ran due to ship decaying ("x" and "o"). This trimming is the part I'm uncertain about how I would automate. I chose:

Code: Select all

| ****.***................... |
| ****.*.*.*................. |
| ..******................... |
| *******.................... |
| **..*.***.*................ |
| *****...................... |
| **.****.**................. |
| ****...**.................. |
| ..**.**..*................. |
| ****...**.................. |
| ..*****.**................. |
| ***.****..*................ |
| *****.***..*............... |
| ****.*....*................ |
| ..****.*....*.............. |
| *****.*.**..*.............. |
| **.****....**.............. |
| *****.**.....*............. |
| **.*******.*.*............. |
| *****.**.....*............. |
| **.****.**..*.............. |
| ***.*..****...*............ |
| **...*.**.................. |
| **********.*.*............. |
| **.*.*******............... |
| *******.**................. |
| ***********.*.............. |
| *****.***...**.*........... |
| ....******.***............. |
| ***.*****.....**........... |
| **.***..*..*..*............ |
| ****..***...*.*............ |
| ********.*..*.............. |
| *****.......*.............. |
| ***.*****..*............... |
| ..****..*..*............... |
| ****.*.....**.............. |
| ..*****.*....*............. |
| **.***...**.*.............. |
| ..**....*.....*............ |
| *****.*.................... |
| ..**..*......*............. |
| *****....****.............. |
| **.*.*....*................ |
| **.**......*............... |
| ..**.*..**....*............ |
| ***.**..................... |
| ****.*.***...*............. |
| **..**..................... |
| ****..*..*.**.............. |
| ***.*.*.................... |
| ..*.*....***............... |
| ***.*...................... |
| ****...*..*................ |
| *****...................... |
| **.*.....*................. |
| **.**...................... |
| **.*..**................... |
| ****.*..................... |
| ...*..*....*............... |
| ****....................... |
| ...*..****................. |
| ***.*...................... |
| ..*.*...*.................. |
| *****...................... |
| **.....*................... |
| ****.*..................... |
| .....*....*................ |
| ***........................ |
| .........*................. |
| ***........................ |
| ....*...................... |
| ****....................... |
| ...*....................... |
| ****....................... |
| **..*...................... |
| ***.*...................... |
| **......................... |
| ***..*..................... |
| **......................... |
| ***.*...................... |
| ***...*.................... |
| ***.*...................... |
| ***..*..................... |
| ***..*..................... |
| ***........................ |
| **......................... |
| ***........................ |
| ****..*.................... |
| ***.***.................... |
| ***.***.................... |
| ****.*..................... |
| ***..*.*................... |
| ****....................... |
| **....*.................... |
| ***.*...................... |
| ****...*................... |
| ***..*..................... |
| ****.**.................... |
| ..**..*.................... |
| ***.*...................... |
| ..**....................... |
| ***........................ |
| ..**....................... |
| ****.*.*................... |
| ..*.*...................... |
| ****.**.................... |
| ..**....................... |
| ****....................... |
| ****....................... |
| **.*..*.................... |
| ..*.*...................... |
| ****.*.*................... |
| .......*................... |
| ****..*.................... |
| ...*..*.................... |
| ***........................ |
| ***........................ |
| ***........................ |
| .....**.*.................. |
| ***.*.*.................... |
| ......***.................. |
| ........................... |
| .......*................... |
| ...*.*..................... |
| ..*........................ |
| ..*...*.................... |
| .........*................. |
| .....*..................... |
| .......**.................. |
| ........................... |
| ......*.................... |
| .....*..................... |
| ........................... |
Convert back to XYT view with "rlife grid-tool from-uwi 3c5-f2b":

Code: Select all

|                             |                             |                             |                             | ..******................... |
|                             |                             | ****.*.*.*................. | **..*.***.*................ | ****...**.................. |
| ****.***................... | *******.................... | **.****.**................. | ****...**.................. | *****.***..*............... |
| *****...................... | ..**.**..*................. | ***.****..*................ | ..****.*....*.............. | *****.**.....*............. |
| ..*****.**................. | ****.*....*................ | **.****....**.............. | *****.**.....*............. | **...*.**.................. |
| *****.*.**..*.............. | **.*******.*.*............. | ***.*..****...*............ | **.*.*******............... | *****.***...**.*........... |
| **.****.**..*.............. | **********.*.*............. | ***********.*.............. | ***.*****.....**........... | ********.*..*.............. |
| *******.**................. | ....******.***............. | ****..***...*.*............ | ***.*****..*............... | ..*****.*....*............. |
| **.***..*..*..*............ | *****.......*.............. | ****.*.....**.............. | ..**....*.....*............ | *****....****.............. |
| ..****..*..*............... | **.***...**.*.............. | ..**..*......*............. | **.**......*............... | ****.*.***...*............. |
| *****.*.................... | **.*.*....*................ | ***.**..................... | ****..*..*.**.............. | ***.*...................... |
| ..**.*..**....*............ | **..**..................... | ..*.*....***............... | *****...................... | **.*..**................... |
| ***.*.*.................... | ****...*..*................ | **.**...................... | ...*..*....*............... | ***.*...................... |
| **.*.....*................. | ****.*..................... | ...*..****................. | *****...................... | .....*....*................ |
| ****....................... | ..*.*...*.................. | ****.*..................... | .........*................. | ****....................... |
| **.....*................... | ***........................ | ....*...................... | ****....................... | **......................... |
| ***........................ | ...*....................... | ***.*...................... | **......................... | ***.*...................... |
| **..*...................... | ***..*..................... | ***...*.................... | ***..*..................... | ***........................ |
| ***.*...................... | ***..*..................... | **......................... | ***.***.................... | ***..*.*................... |
| ***........................ | ****..*.................... | ****.*..................... | **....*.................... | ***..*..................... |
| ***.***.................... | ****....................... | ****...*................... | ..**..*.................... | ***........................ |
| ***.*...................... | ****.**.................... | ..**....................... | ****.*.*................... | ..**....................... |
| ***.*...................... | ..**....................... | ****.**.................... | ****....................... | ****.*.*................... |
| ..*.*...................... | ****....................... | ..*.*...................... | ****..*.................... | ***........................ |
| **.*..*.................... | .......*................... | ***........................ | .....**.*.................. | ........................... |
| ...*..*.................... | ***........................ | ......***.................. | ...*.*..................... | .........*................. |
| ***.*.*.................... | .......*................... | ..*...*.................... | .......**.................. | .....*..................... |
| ..*........................ | .....*..................... | ......*.................... |                             |                             |
| ........................... | ........................... |                             |                             |                             |
When actually searching with it I may or may not choke it further back depending on what I saw, but this provides a reasonably easy and safe estimate for which of the rows of the intervening 4 generations likely match whatever what produced the original single-gen partial was thinking.

Sokwe
Moderator
Posts: 2884
Joined: July 9th, 2009, 2:44 pm

Re: amling search program principles discussion / brain dump

Post by Sokwe » November 19th, 2024, 7:31 pm

Thanks! I still have a few questions.

For a recentering search extending a partial result, I'm not sure how or where to place the root labels. For example, s2s searches seem to have root labels over every phase (?) while f2b searches often have root labels over only some of the phases (?). It's a bit of a mystery to me.

For an ordinary LLSSS search, I would need to add '?' cells. To do this, do I add a block of '?' cells to the "flattened" input just before the following step?
amling wrote:
November 19th, 2024, 1:07 pm
Convert back to XYT view with "rlife grid-tool from-uwi 3c5-f2b":
That is, would I do something like this:

Code: Select all

| ****.***................... |
| ****.*.*.*................. |
| ..******................... |
| *******.................... |
| **..*.***.*................ |
| *****...................... |
| **.****.**................. |
| ****...**.................. |
| ..**.**..*................. |
| ****...**.................. |
| ..*****.**................. |
| ***.****..*................ |
| *****.***..*............... |
| ****.*....*................ |
| ..****.*....*.............. |
| *****.*.**..*.............. |
| **.****....**.............. |
| *****.**.....*............. |
| **.*******.*.*............. |
| *****.**.....*............. |
| **.****.**..*.............. |
| ***.*..****...*............ |
| **...*.**.................. |
| **********.*.*............. |
| **.*.*******............... |
| *******.**................. |
| ***********.*.............. |
| *****.***...**.*........... |
| ....******.***............. |
| ***.*****.....**........... |
| **.***..*..*..*............ |
| ****..***...*.*............ |
| ********.*..*.............. |
| *****.......*.............. |
| ***.*****..*............... |
| ..****..*..*............... |
| ****.*.....**.............. |
| ..*****.*....*............. |
| **.***...**.*.............. |
| ..**....*.....*............ |
| *****.*.................... |
| ..**..*......*............. |
| *****....****.............. |
| **.*.*....*................ |
| **.**......*............... |
| ..**.*..**....*............ |
| ***.**..................... |
| ****.*.***...*............. |
| **..**..................... |
| ****..*..*.**.............. |
| ***.*.*.................... |
| ..*.*....***............... |
| ***.*...................... |
| ****...*..*................ |
| *****...................... |
| **.*.....*................. |
| **.**...................... |
| **.*..**................... |
| ****.*..................... |
| ...*..*....*............... |
| ****....................... |
| ...*..****................. |
| ***.*...................... |
| ..*.*...*.................. |
| *****...................... |
| **.....*................... |
| ****.*..................... |
| .....*....*................ |
| ***........................ |
| .........*................. |
| ***........................ |
| ....*...................... |
| ****....................... |
| ...*....................... |
| ****....................... |
| **..*...................... |
| ***.*...................... |
| **......................... |
| ***..*..................... |
| **......................... |
| ***.*...................... |
| ***...*.................... |
| ***.*...................... |
| ***..*..................... |
| ***..*..................... |
| ***........................ |
| **......................... |
| ***........................ |
| ****..*.................... |
| ***.***.................... |
| ***.***.................... |
| ****.*..................... |
| ***..*.*................... |
| ****....................... |
| **....*.................... |
| ***.*...................... |
| ****...*................... |
| ***..*..................... |
| ****.**.................... |
| ..**..*.................... |
| ***.*...................... |
| ..**....................... |
| ***........................ |
| ..**....................... |
| ****.*.*................... |
| ..*.*...................... |
| ****.**.................... |
| ..**....................... |
| ****....................... |
| ****....................... |
| **.*..*.................... |
| ..*.*...................... |
| ****.*.*................... |
| .......*................... |
| ****..*.................... |
| ...*..*.................... |
| ***........................ |
| ***........................ |
| ***........................ |
| .....**.*.................. |
| ***.*.*.................... |
| ......***.................. |
| ........................... |
| .......*................... |
| ...*.*..................... |
| ..*........................ |
| ..*...*.................... |
| ..????????????............. |
| ..????????????............. |
| ..????????????............. |
| ..????????????............. |
| ..????????????............. |
| ..????????????............. |
| ..????????????............. |
before running "rlife grid-tool from-uwi 3c5-f2b"? I've tried it this way, and it seems to work, but I want to make sure that's what I'm supposed to be doing.

amling wrote:
November 19th, 2024, 1:07 pm
Run doubly many generations (10 in this case) in golly and smash them together aligned correctly...

Dump this out to a text view (with a terrible one-off perl script I wrote almost a year ago but haven't gotten around to cleaning up or releasing)
Here is a quick Golly Lua script that I think creates the plaintext output (copied to the clipboard) for a selected area of a partial result:

Code: Select all

-- llsss-setup.lua
-- Select a pattern in Golly, run this script,
-- and the initial LLSSS phase chart for the 
-- pattern will be copied to the clipboard.
-- 
-- See the following link for further setup instructions:
--   https://conwaylife.com/forums/viewtopic.php?p=198188#p198188

local g = golly()
r = g.getselrect()
a = {}

local p = tonumber(g.getstring("Enter the period."))
if p == nil or p ~= math.floor(p) or p <= 0 then
   g.exit("Period should be a positive integer.")
end

for z = 1, 2*p do
  s = ""
  for y = 0, r[4] do
    for x = 0, r[3] do
      if g.getcell(x+r[1], y + r[2]) == 1 then
        s = s.."*"
      else
        s = s.."."
      end
    end
    s = s.."\n"
  end
  a[z] = s
  g.run(1)
end

s = ""

for y = 1, r[4] do
   for z = 1, 2*p do
      theLines = {}
      for line in a[z]:gmatch("[^\n]+") do
         table.insert(theLines, line)
      end
      s = s.."| "..theLines[y].." "
   end
   s = s.."|\n"
end

g.setclipstr(s)
The idea is to put a partial result in Golly (just one phase), select the part you want to extend, run the script, and enter the period. It will create a chart showing each generation of the selected area up to generation 2*period-1, separated by columns of " | ". Does this seem to do what is intended by your History setup + perl script?

Edit: my ultimate goal here is writing a basic LLSSS tutorial for some of the simpler functions (e.g., running a search from zeros, extending a partial result, running a B0 search, etc.)
-Matthias Merzenich

amling
Posts: 872
Joined: April 2nd, 2020, 9:47 pm

Re: amling search program principles discussion / brain dump

Post by amling » November 19th, 2024, 9:02 pm

Sokwe wrote:
November 19th, 2024, 7:31 pm
For an ordinary LLSSS search, I would need to add '?' cells. To do this, do I add a block of '?' cells to the "flattened" input just before the following step?
amling wrote:
November 19th, 2024, 1:07 pm
Convert back to XYT view with "rlife grid-tool from-uwi 3c5-f2b":
That is, would I do something like this:

Code: Select all

| ****.***................... |
| ****.*.*.*................. |
| ..******................... |
| *******.................... |
| **..*.***.*................ |
| *****...................... |
| **.****.**................. |
| ****...**.................. |
| ..**.**..*................. |
| ****...**.................. |
| ..*****.**................. |
| ***.****..*................ |
| *****.***..*............... |
| ****.*....*................ |
| ..****.*....*.............. |
| *****.*.**..*.............. |
| **.****....**.............. |
| *****.**.....*............. |
| **.*******.*.*............. |
| *****.**.....*............. |
| **.****.**..*.............. |
| ***.*..****...*............ |
| **...*.**.................. |
| **********.*.*............. |
| **.*.*******............... |
| *******.**................. |
| ***********.*.............. |
| *****.***...**.*........... |
| ....******.***............. |
| ***.*****.....**........... |
| **.***..*..*..*............ |
| ****..***...*.*............ |
| ********.*..*.............. |
| *****.......*.............. |
| ***.*****..*............... |
| ..****..*..*............... |
| ****.*.....**.............. |
| ..*****.*....*............. |
| **.***...**.*.............. |
| ..**....*.....*............ |
| *****.*.................... |
| ..**..*......*............. |
| *****....****.............. |
| **.*.*....*................ |
| **.**......*............... |
| ..**.*..**....*............ |
| ***.**..................... |
| ****.*.***...*............. |
| **..**..................... |
| ****..*..*.**.............. |
| ***.*.*.................... |
| ..*.*....***............... |
| ***.*...................... |
| ****...*..*................ |
| *****...................... |
| **.*.....*................. |
| **.**...................... |
| **.*..**................... |
| ****.*..................... |
| ...*..*....*............... |
| ****....................... |
| ...*..****................. |
| ***.*...................... |
| ..*.*...*.................. |
| *****...................... |
| **.....*................... |
| ****.*..................... |
| .....*....*................ |
| ***........................ |
| .........*................. |
| ***........................ |
| ....*...................... |
| ****....................... |
| ...*....................... |
| ****....................... |
| **..*...................... |
| ***.*...................... |
| **......................... |
| ***..*..................... |
| **......................... |
| ***.*...................... |
| ***...*.................... |
| ***.*...................... |
| ***..*..................... |
| ***..*..................... |
| ***........................ |
| **......................... |
| ***........................ |
| ****..*.................... |
| ***.***.................... |
| ***.***.................... |
| ****.*..................... |
| ***..*.*................... |
| ****....................... |
| **....*.................... |
| ***.*...................... |
| ****...*................... |
| ***..*..................... |
| ****.**.................... |
| ..**..*.................... |
| ***.*...................... |
| ..**....................... |
| ***........................ |
| ..**....................... |
| ****.*.*................... |
| ..*.*...................... |
| ****.**.................... |
| ..**....................... |
| ****....................... |
| ****....................... |
| **.*..*.................... |
| ..*.*...................... |
| ****.*.*................... |
| .......*................... |
| ****..*.................... |
| ...*..*.................... |
| ***........................ |
| ***........................ |
| ***........................ |
| .....**.*.................. |
| ***.*.*.................... |
| ......***.................. |
| ........................... |
| .......*................... |
| ...*.*..................... |
| ..*........................ |
| ..*...*.................... |
| ..????????????............. |
| ..????????????............. |
| ..????????????............. |
| ..????????????............. |
| ..????????????............. |
| ..????????????............. |
| ..????????????............. |
before running "rlife grid-tool from-uwi 3c5-f2b"? I've tried it this way, and it seems to work, but I want to make sure that's what I'm supposed to be doing.
Yeah, that works and indeed I have done that sort of thing (edit in UWI view) for more incomprehensible geometries like twisted "raw" ones or knightwise ones. If the geometry makes enough sense to you (either it's a simpler geometry or you squint your eyes sufficiently to be able to see the 3c/5 row order), you can also just place those rows straight into the XYT view.
Sokwe wrote:
November 19th, 2024, 7:31 pm
amling wrote:
November 19th, 2024, 1:07 pm
Run doubly many generations (10 in this case) in golly and smash them together aligned correctly...

Dump this out to a text view (with a terrible one-off perl script I wrote almost a year ago but haven't gotten around to cleaning up or releasing)
Here is a quick Golly Lua script that I think creates the plaintext output (copied to the clipboard) for a selected area of a partial result...

The idea is to put a partial result in Golly (just one phase), select the part you want to extend, run the script, and enter the period. It will create a chart showing each generation of the selected area up to generation 2*period-1, separated by columns of " | ". Does this seem to do what is intended by your History setup + perl script?
Whoah, nifty! I am so golly illiterate I had never actually run an ad-hoc script before. Empirically, yes, that does seem to have done it although I have not actually read the lua closely to review it in a more proper sense.
Sokwe wrote:
November 19th, 2024, 7:31 pm
[M]y ultimate goal here is writing a basic LLSSS tutorial for some of the simpler functions (e.g., running a search from zeros, extending a partial result, running a B0 search, etc.)
That's pretty scary given how rough it all is, how many crazy knobs and levers there are, and how often it all changes. It might be advisable to pin the tutorial to a specific version of the code.
Sokwe wrote:
November 19th, 2024, 7:31 pm
For a recentering search extending a partial result, I'm not sure how or where to place the root labels. For example, s2s searches seem to have root labels over every phase (?) while f2b searches often have root labels over only some of the phases (?). It's a bit of a mystery to me.
The UWI view may help understand why they are in some generations, namely that they must always fill exactly one W row. In s2s each generation corresponds to one tile position so each gets one. In f2b/b2f with no GCD tile bits is one so it's just one. For b2f/f2b with GCD (e.g. 2c/4) it's one per GCD. I would very much encourage you to look at input files when mapped into UWI space (grid-tool to-uwi) and I think the pattern will be somewhat more apparent. You can also add the roots in UWI view (at the W top) and map it back with from-uwi (as you suggest above for adding question marks at the W bottom).

To me the more difficult to answer question is when to make root labels distinct and when to make them match, although presumably for typical searches there are only so many types and best practices have been worked out.

User avatar
hotcrystal0
Posts: 2920
Joined: July 3rd, 2020, 5:32 pm
Location: United States

Re: amling search program principles discussion / brain dump

Post by hotcrystal0 » November 19th, 2024, 9:39 pm

Does LLSSS work in B3/S23 only? If not, what rules does it work in?

Code: Select all

x = 192, y = 53, rule = B3/S23
33$42b4o$41b6o$40b2ob4o$41b2o3$41b2o$39bo6bo$38bo8bo$38bo8bo$38b9o3$42b
4o$41b6o$40b2ob4o$41b2o!

User avatar
confocaloid
Posts: 4830
Joined: February 8th, 2022, 3:15 pm
Location: https://catagolue.hatsya.com/census/b3s234c/C4_4/xp62

Re: amling search program principles discussion / brain dump

Post by confocaloid » November 19th, 2024, 9:58 pm

hotcrystal0 wrote:
November 19th, 2024, 9:39 pm
Does LLSSS work in B3/S23 only?
As far as I know currently it is restricted to two-state cellular automata with range-1 neighbourhood. Out of those, at least isotropic CA on the square tiling and isotropic CA on the hexagonal tiling should be supported. viewtopic.php?p=178129#p178129
127:1 B3/S234c User:Confocal/R (isotropic CA, incomplete)
Unlikely events happen.
My silence does not imply agreement, nor indifference. If I disagreed with something in the past, then please do not construe my silence as something that could change that.

amling
Posts: 872
Joined: April 2nd, 2020, 9:47 pm

Re: amling search program principles discussion / brain dump

Post by amling » November 19th, 2024, 10:08 pm

confocaloid wrote:
November 19th, 2024, 9:58 pm
hotcrystal0 wrote:
November 19th, 2024, 9:39 pm
Does LLSSS work in B3/S23 only?
As far as I know currently it is restricted to two-state cellular automata with range-1 neighbourhood. Out of those, at least isotropic CA on the square tiling and isotropic CA on the hexagonal tiling should be supported. viewtopic.php?p=178129#p178129
All true. I would add that while the inner-most engine theoretically supports any 2-state 3x3 neighborhood rule (as well as forbidden or nondeterministic transitions), rule specification is only plumbed all the way out to the CLI as either square or hex INT (and does include forbidden and nondeterministic transitions). Also that hex rules are way, way undertested and that any rules with B0 are gonna require tricky setup and many features will not behave well searching with an agar background (as B0 requires).

Post Reply